Version 2.17.0-182.1.beta

Merge '2.17.0-182.0.dev' into beta
diff --git a/.dart_tool/OWNERS b/.dart_tool/OWNERS
new file mode 100644
index 0000000..d52dde4
--- /dev/null
+++ b/.dart_tool/OWNERS
@@ -0,0 +1,2 @@
+# Generated file
+per-file package_config.json=*
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index e47664f..51bc8f5 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,6 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2022-01-12T18:16:46.198227",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -136,7 +135,7 @@
       "name": "boolean_selector",
       "rootUri": "../third_party/pkg/boolean_selector",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "browser_launcher",
@@ -172,7 +171,7 @@
       "name": "clock",
       "rootUri": "../third_party/pkg/clock",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "collection",
@@ -229,6 +228,12 @@
       "languageVersion": "2.12"
     },
     {
+      "name": "dart2wasm",
+      "rootUri": "../pkg/dart2wasm",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
       "name": "dart_internal",
       "rootUri": "../pkg/dart_internal",
       "packageUri": "lib/",
@@ -271,24 +276,12 @@
       "languageVersion": "2.15"
     },
     {
-      "name": "devtools_server",
-      "rootUri": "../third_party/devtools/devtools_server",
-      "packageUri": "lib/",
-      "languageVersion": "2.12"
-    },
-    {
       "name": "devtools_shared",
       "rootUri": "../third_party/devtools/devtools_shared",
       "packageUri": "lib/",
       "languageVersion": "2.12"
     },
     {
-      "name": "diagnostic",
-      "rootUri": "../pkg/diagnostic",
-      "packageUri": "lib/",
-      "languageVersion": "2.0"
-    },
-    {
       "name": "expect",
       "rootUri": "../pkg/expect",
       "packageUri": "lib/",
@@ -310,7 +303,7 @@
       "name": "file_testing",
       "rootUri": "../third_party/pkg/file/packages/file_testing",
       "packageUri": "lib/",
-      "languageVersion": "2.1"
+      "languageVersion": "2.12"
     },
     {
       "name": "fixnum",
@@ -345,7 +338,7 @@
       "name": "glob",
       "rootUri": "../third_party/pkg/glob",
       "packageUri": "lib/",
-      "languageVersion": "2.12"
+      "languageVersion": "2.15"
     },
     {
       "name": "html",
@@ -623,7 +616,7 @@
       "name": "source_map_stack_trace",
       "rootUri": "../third_party/pkg/source_map_stack_trace",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "source_maps",
@@ -671,7 +664,7 @@
       "name": "string_scanner",
       "rootUri": "../third_party/pkg/string_scanner",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "sync_http",
@@ -689,7 +682,7 @@
       "name": "term_glyph",
       "rootUri": "../third_party/pkg/term_glyph",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "test",
@@ -760,7 +753,7 @@
       "name": "vector_math",
       "rootUri": "../third_party/pkg/vector_math",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.14"
     },
     {
       "name": "vm",
@@ -781,6 +774,12 @@
       "languageVersion": "2.12"
     },
     {
+      "name": "wasm_builder",
+      "rootUri": "../pkg/wasm_builder",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    },
+    {
       "name": "watcher",
       "rootUri": "../third_party/pkg/watcher",
       "packageUri": "lib/",
diff --git a/.github/OWNERS b/.github/OWNERS
new file mode 100644
index 0000000..12997a6
--- /dev/null
+++ b/.github/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_PRODUCT
+file:/tools/OWNERS_INFRA
diff --git a/.packages b/.packages
index e8855d6..646a631 100644
--- a/.packages
+++ b/.packages
@@ -2,10 +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.
 #
-# .package file containing links to all packages in /pkg, and checked out
-# by DEPS into /third_party/pkg and /third_party/pkg_tested.
-# Please update this file if you add a package to DEPS or /pkg
-#
+# This file is generated; do not edit. To re-generate, run:
+#   'dart tools/generate_package_config.dart'.
+
 _fe_analyzer_shared:pkg/_fe_analyzer_shared/lib
 _js_interop_checks:pkg/_js_interop_checks/lib
 analysis_server:pkg/analysis_server/lib
@@ -20,10 +19,12 @@
 bazel_worker:third_party/pkg/bazel_worker/lib
 benchmark_harness:third_party/pkg/benchmark_harness/lib
 boolean_selector:third_party/pkg/boolean_selector/lib
-build_integration:pkg/build_integration/lib
 browser_launcher:third_party/pkg/browser_launcher/lib
+build_integration:pkg/build_integration/lib
+characters:third_party/pkg/characters/lib
 charcode:third_party/pkg/charcode/lib
 cli_util:third_party/pkg/cli_util/lib
+clock:third_party/pkg/clock/lib
 collection:third_party/pkg/collection/lib
 compiler:pkg/compiler/lib
 convert:third_party/pkg/convert/lib
@@ -33,6 +34,7 @@
 dart2js_runtime_metrics:pkg/dart2js_runtime_metrics/lib
 dart2js_tools:pkg/dart2js_tools/lib
 dart2native:pkg/dart2native/lib
+dart2wasm:pkg/dart2wasm/lib
 dart_internal:pkg/dart_internal/lib
 dart_style:third_party/pkg_tested/dart_style/lib
 dartdev:pkg/dartdev/lib
@@ -40,14 +42,15 @@
 dds:pkg/dds/lib
 dds_service_extensions:pkg/dds_service_extensions/lib
 dev_compiler:pkg/dev_compiler/lib
-devtools_server:third_party/devtools/devtools_server/lib
 devtools_shared:third_party/devtools/devtools_shared/lib
-diagnostic:pkg/diagnostic/lib
 expect:pkg/expect/lib
 ffi:third_party/pkg/ffi/lib
+file:third_party/pkg/file/packages/file/lib
+file_testing:third_party/pkg/file/packages/file_testing/lib
 fixnum:third_party/pkg/fixnum/lib
-frontend_server:pkg/frontend_server/lib
 front_end:pkg/front_end/lib
+frontend_server:pkg/frontend_server/lib
+frontend_server_client:third_party/pkg/webdev/frontend_server_client/lib
 glob:third_party/pkg/glob/lib
 html:third_party/pkg/html/lib
 http:third_party/pkg/http/lib
@@ -73,7 +76,7 @@
 nnbd_migration:pkg/nnbd_migration/lib
 oauth2:third_party/pkg/oauth2/lib
 observatory:runtime/observatory/lib
-observatory_test_package:runtime/observatory/tests/service/observatory_test_package
+observatory_2:runtime/observatory_2/lib
 package_config:third_party/pkg_tested/package_config/lib
 path:third_party/pkg/path/lib
 pedantic:third_party/pkg/pedantic/lib
@@ -83,6 +86,7 @@
 protobuf:third_party/pkg/protobuf/protobuf/lib
 pub:third_party/pkg/pub/lib
 pub_semver:third_party/pkg/pub_semver/lib
+scrape:pkg/scrape/lib
 sdk_library_metadata:sdk/lib/_internal/sdk_library_metadata/lib
 shelf:third_party/pkg/shelf/lib
 shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
@@ -91,9 +95,9 @@
 shelf_web_socket:third_party/pkg/shelf_web_socket/lib
 smith:pkg/smith/lib
 source_map_stack_trace:third_party/pkg/source_map_stack_trace/lib
-sourcemap_testing:pkg/sourcemap_testing/lib
 source_maps:third_party/pkg/source_maps/lib
 source_span:third_party/pkg/source_span/lib
+sourcemap_testing:pkg/sourcemap_testing/lib
 sse:third_party/pkg/sse/lib
 stack_trace:third_party/pkg/stack_trace/lib
 status_file:pkg/status_file/lib
@@ -106,7 +110,6 @@
 test_api:third_party/pkg/test/pkgs/test_api/lib
 test_core:third_party/pkg/test/pkgs/test_core/lib
 test_descriptor:third_party/pkg/test_descriptor/lib
-test_package:pkg/vm_service/test/test_package
 test_process:third_party/pkg/test_process/lib
 test_reflective_loader:third_party/pkg/test_reflective_loader/lib
 test_runner:pkg/test_runner/lib
@@ -117,9 +120,11 @@
 vm:pkg/vm/lib
 vm_service:pkg/vm_service/lib
 vm_snapshot_analysis:pkg/vm_snapshot_analysis/lib
+wasm_builder:pkg/wasm_builder/lib
 watcher:third_party/pkg/watcher/lib
-webdriver:third_party/pkg/webdriver/lib
-webkit_inspection_protocol:third_party/pkg/webkit_inspection_protocol/lib
 web_components:third_party/pkg/web_components/lib
 web_socket_channel:third_party/pkg/web_socket_channel/lib
+webdriver:third_party/pkg/webdriver/lib
+webkit_inspection_protocol:third_party/pkg/webkit_inspection_protocol/lib
 yaml:third_party/pkg/yaml/lib
+yaml_edit:third_party/pkg/yaml_edit/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8ddc529..4a99aaa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,12 +6,27 @@
 
 - Add `Finalizer` and `WeakReference` which can potentially detect when
   objects are "garbage collected".
+- Add `isMimeType` method to `UriData` class, to allow case-insensitive
+  checking of the MIME type.
+- Add `isCharset` and `isEncoding` methods to `UriData` class,
+  to allow case-insensitive and alternative-encoding-name aware checking
+  of the MIME type "charset" parameter.
+- Make `UriData.fromString` and `UriData.fromBytes` recognize and omit
+  a "text/plain" `mimeType` even if it is not all lower-case.
 
 #### `dart:ffi`
 
 - Add `ref=` and `[]=` methods to the `StructPointer` and `UnionPointer`
   extensions. They copy a compound instance into a native memory region.
 
+#### `dart:html`
+
+- Add `scrollIntoViewIfNeeded` to `Element`. Previously, this method was nested
+  within `scrollIntoView` based on the `ScrollAlignment` value. `scrollIntoView`
+  is unchanged for now, but users who intend to use the native
+  `Element.scrollIntoViewIfNeeded` should use the new `scrollIntoViewIfNeeded`
+  definition instead.
+
 #### `dart:indexed_db`
 
 - `IdbFactory.supportsDatabaseNames` has been deprecated. It will always return
@@ -19,36 +34,81 @@
 
 #### `dart:io`
 
-- **Breaking Change** [#45410](https://github.com/dart-lang/sdk/issues/45410):
-  `HttpClient` no longer transmits some headers (i.e. `authorization`,
-  `www-authenticate`, `cookie`, `cookie2`) when processing redirects to
-  a different domain.
+- **Breaking Change** [#47887](https://github.com/dart-lang/sdk/issues/47887):
+  `HttpClient` has a new `connectionFactory` property, which allows socket
+  creation to be customized. Classes that `implement HttpClient` may be broken
+  by this change. Add the following method to your classes to fix them:
+
+  ```dart
+  void set connectionFactory(
+      Future<ConnectionTask<Socket>> Function(
+              Uri url, String? proxyHost, int? proxyPort)?
+          f) =>
+      throw UnsupportedError("connectionFactory not implemented");
+  ```
+
+- **Breaking Change** [#48093](https://github.com/dart-lang/sdk/issues/48093):
+  `HttpClient` has a new `keyLog` property, which allows TLS keys to be logged
+  for debugging purposes. Classes that `implement HttpClient` may be broken by
+  this change. Add the following method to your classes to fix them:
+
+  ```dart
+  void set keyLog(Function(String line)? callback) =>
+      throw UnsupportedError("keyLog not implemented");
+  ```
+
+- 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.
 
 ### Tools
 
 #### Dart command line
 
-- **Breaking Change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+- **Breaking change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
   The standalone `dart2js` tool has been
   marked deprecated as previously announced.
   Its replacement is the `dart compile js` command.
   Should you find any issues, or missing features, in the replacement
   command, kindly file [an issue](https://github.com/dart-lang/sdk/issues/new).
 
-- **Breaking Change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+- **Breaking change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
   The standalone `dartdevc` tool has been marked deprecated as previously
   announced and will be deleted in a future Dart stable relase.  This tool
   was intended for use only by build systems like bazel, `build_web_compilers`
   and `flutter_tools`. The functionality remains available for those systems,
   but it is no longer exposed as a command-line tool in the SDK.
-  Please share any concerns in the 
+  Please share any concerns in the
   [breaking change tracking issue](https://github.com/dart-lang/sdk/issues/46100).
 
-- **Breaking Change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+- **Breaking change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
   The standalone `dartdoc` tool has been removed as
   previously announced. Its replacement is the `dart doc` command.
 
-## 2.16.0
+- The template names used in the `dart create` command have been simplified,
+  and the current template names are now the set shown below. (Note: for
+  backwards compatibility the former template names can still be used.)
+```
+          [console] (default)    A command-line application.
+          [package]              A package containing shared Dart libraries.
+          [server-shelf]         A server app using package:shelf.
+          [web]                  A web app that uses only core Dart libraries.
+```
+
+## 2.16.1 - 2022-02-09
+
+This is a patch release that fixes an AOT precompiler crash when building some
+Flutter apps (issue [flutter/flutter#97301][]).
+
+[flutter/flutter#97301]: https://github.com/flutter/flutter/issues/97301
+
+## 2.16.0 - 2022-02-03
 
 ### Core libraries
 
@@ -60,13 +120,18 @@
 
 #### `dart:io`
 
-- **Breaking Change** [#47653](https://github.com/dart-lang/sdk/issues/47653):
-On Windows, `Directory.rename` will no longer delete a directory if
-`newPath` specifies one. Instead, a `FileSystemException` will be thrown.
-
-- **Breaking Change** [#47769](https://github.com/dart-lang/sdk/issues/47769):
-The `Platform.packageRoot` API has been removed. It had been marked deprecated
-in 2018, as it doesn't work with any Dart 2.x release.
+- **Security advisory**
+  [CVE-2022-0451](https://github.com/dart-lang/sdk/security/advisories/GHSA-c8mh-jj22-xg5h),
+  **breaking change** [#45410](https://github.com/dart-lang/sdk/issues/45410):
+  `HttpClient` no longer transmits some headers (i.e. `authorization`,
+  `www-authenticate`, `cookie`, `cookie2`) when processing redirects to a
+  different domain.
+- **Breaking change** [#47653](https://github.com/dart-lang/sdk/issues/47653):
+  On Windows, `Directory.rename` will no longer delete a directory if
+  `newPath` specifies one. Instead, a `FileSystemException` will be thrown.
+- **Breaking change** [#47769](https://github.com/dart-lang/sdk/issues/47769):
+  The `Platform.packageRoot` API has been removed. It had been marked deprecated
+  in 2018, as it doesn't work with any Dart 2.x release.
 - Add optional `sourcePort` parameter to `Socket.connect`, `Socket.startConnect`, `RawSocket.connect` and `RawSocket.startConnect`
 
 - **Breaking Change** [#45410](https://github.com/dart-lang/sdk/issues/45410):
@@ -76,7 +141,7 @@
 
 #### `dart:isolate`
 
-- **Breaking Change** [#47769](https://github.com/dart-lang/sdk/issues/47769):
+- **Breaking change** [#47769](https://github.com/dart-lang/sdk/issues/47769):
 The `Isolate.packageRoot` API has been removed. It had been marked deprecated
 in 2018, as it doesn't work with any Dart 2.x release.
 
@@ -84,7 +149,7 @@
 
 #### Dart command line
 
-- **Breaking Change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+- **Breaking change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
   The standalone `dartanalyzer` tool has been
   marked deprecated as previously announced.
   Its replacement is the `dart analyze` command.
@@ -93,7 +158,7 @@
 
 [an issue]: https://github.com/dart-lang/sdk/issues/new
 
-- **Breaking Change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+- **Breaking change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
   The standalone `dartdoc` tool has been
   marked deprecated as previously announced.
   Its replacement is the `dart doc` command.
@@ -118,7 +183,7 @@
 Updated the Linter to `1.18.0`, which includes changes that
 
 - extends `camel_case_types` to cover enums.
-- fixes `no_leading_underscores_for_local_identifiers` to not 
+- fixes `no_leading_underscores_for_local_identifiers` to not
   mis-flag field formal parameters with default values.
 - fixes `prefer_function_declarations_over_variables` to not
   mis-flag non-final fields.
@@ -153,6 +218,22 @@
 
 ## 2.15.0 - 2021-12-08
 
+- **Security advisory**
+  [CVE-2021-22567](https://github.com/dart-lang/sdk/security/advisories/GHSA-8pcp-6qc9-rqmv):
+  Bidirectional Unicode text can be interpreted and compiled differently than
+  how it appears in editors and code-review tools. Exploiting this an attacker
+  could embed source that is invisible to a code reviewer but that modifies the
+  behavior of a program in unexpected ways. Dart 2.15.0 introduces new analysis
+  warnings that flags the use of these.
+
+- **Security advisory**
+  [CVE-2021-22568](https://github.com/dart-lang/sdk/security/advisories/GHSA-r32f-vhjp-qhj7):
+  A malicious third-party package repository may impersonate a user on pub.dev
+  for up to one hour after the user has published a package to that third-party
+  package repository using `dart pub publish`. As of Dart SDK version 2.15.0
+  requests to third-party package repositories will no longer include an OAuth2
+  `access_token` intended for pub.dev.
+
 ### Language
 
 The following features are new in the Dart 2.15 [language version][]. To use
@@ -464,7 +545,7 @@
 
 #### `dart:io`
 
-- **Breaking Change** [#46875](https://github.com/dart-lang/sdk/issues/46875):
+- **Breaking change** [#46875](https://github.com/dart-lang/sdk/issues/46875):
   The `SecurityContext` class in `dart:io` has been updated to set the minimum
   TLS protocol version to TLS1_2_VERSION (1.2) instead of TLS1_VERSION.
 - Add `RawSocket.sendMessage`, `RawSocket.receiveMessage` that allow passing of
@@ -481,14 +562,14 @@
 
 #### `dart:web_sql`
 
-- **Breaking Change** [#46316](https://github.com/dart-lang/sdk/issues/46316):
+- **Breaking change** [#46316](https://github.com/dart-lang/sdk/issues/46316):
   The WebSQL standard was abandoned more than 10
   years ago and is not supported by many browsers. This release completely
   deletes the `dart:web_sql` library.
 
 #### `dart:html`
 
-- **Breaking Change** [#46316](https://github.com/dart-lang/sdk/issues/46316):
+- **Breaking change** [#46316](https://github.com/dart-lang/sdk/issues/46316):
   Related to the removal of `dart:web_sql` (see above), `window.openDatabase`
   has been removed.
 
@@ -496,12 +577,12 @@
 
 #### Dart command line
 
-- **Breaking Change** [#46100][]: The standalone `dart2native` tool has been
+- **Breaking change** [#46100][]: The standalone `dart2native` tool has been
   removed as previously announced. Its replacements are the
   `dart compile exe` and `dart compile aot-snapshot` commands, which offer the
   same functionality.
 
-- **Breaking Change**: The standalone `dartfmt` tool has been removed as
+- **Breaking change**: The standalone `dartfmt` tool has been removed as
   previously announced. Its replacement is the `dart format` command.
 
   Note that `dart format` has [a different set of options and
@@ -512,11 +593,11 @@
 
 #### Dart VM
 
-- **Breaking Change** [#45451](https://github.com/dart-lang/sdk/issues/45451):
+- **Breaking change** [#45451](https://github.com/dart-lang/sdk/issues/45451):
   Support for `dart-ext:`-style native extensions has been removed as previously
   announced. Use `dart:ffi` to bind to native libraries instead.
 
-- **Breaking Change** [#46754](https://github.com/dart-lang/sdk/issues/46754):
+- **Breaking change** [#46754](https://github.com/dart-lang/sdk/issues/46754):
   Isolates spawned via the `Isolate.spawn()` API are now grouped, operate on the
   same managed heap and can therefore share various VM-internal data structures.
 
@@ -805,7 +886,7 @@
 
 ### Dart VM
 
-- **Breaking Change** [#45071][]: `Dart_NewWeakPersistentHandle`'s and
+- **Breaking change** [#45071][]: `Dart_NewWeakPersistentHandle`'s and
   `Dart_NewFinalizableHandle`'s `object` parameter no longer accepts `Pointer`s
   and subtypes of `Struct`. Expandos no longer accept `Pointer`s and subtypes of
   `Struct`s.
@@ -816,13 +897,13 @@
 
 #### Dart command line
 
-- **Breaking Change** [#46100][]: The standalone `dart2native` tool has been
+- **Breaking change** [#46100][]: The standalone `dart2native` tool has been
   marked deprecated, and now prints a warning message. Its replacements are the
   `dart compile exe` and `dart compile aot-snapshot` commands, which offer the
   same functionality. The `dart2native` tool will be removed from the Dart SDK
   in Dart 2.15.
 
-- **Breaking Change**: The standalone `dartfmt` tool has been marked deprecated,
+- **Breaking change**: The standalone `dartfmt` tool has been marked deprecated,
   and now prints a warning message. Instead, use `dart format`. The `dartfmt`
   tool will be removed from the Dart SDK in Dart 2.15.
 
@@ -946,7 +1027,7 @@
 
 #### Dart2JS
 
-*   **Breaking Change** [#46545][]: Dart2JS emits ES6+ JavaScript by default,
+*   **Breaking change** [#46545][]: Dart2JS emits ES6+ JavaScript by default,
     thereby no longer supporting legacy browsers. Passing the
     `--legacy-javascript` flag will let you opt out of this update, but this
     flag will be removed in a future release. Modern browsers will not be
@@ -958,7 +1039,7 @@
 
 #### Dart Dev Compiler (DDC)
 
-- **Breaking Change** [#44154][]: Subtyping relations of `package:js` classes
+- **Breaking change** [#44154][]: Subtyping relations of `package:js` classes
   have been changed to be more correct and consistent with Dart2JS.
   Like `anonymous` classes, non-`anonymous` classes will no longer check the
   underlying type in DDC. The internal type representation of these objects have
@@ -1127,10 +1208,10 @@
 
 ## 2.12.3 - 2021-04-14
 
-This is a patch release that fixes a vulnerability in `dart:html` related to DOM
-clobbering. See the [vulnerability advisory][cve-2021-22540] for more details.
-Thanks again to **Vincenzo di Cicco** for finding and reporting this
-vulnerability.
+**Security advisory**: This is a patch release that fixes a vulnerability in
+`dart:html` related to DOM clobbering. See the security advisory
+[CVE-2021-22540][cve-2021-22540] for more details. Thanks again to **Vincenzo di
+Cicco** for finding and reporting this vulnerability.
 
 [cve-2021-22540]:
   https://github.com/dart-lang/sdk/security/advisories/GHSA-3rfv-4jvg-9522
@@ -1156,7 +1237,7 @@
 
 ### Language
 
-- **Breaking Change** [Null safety][] is now enabled by default in all code that
+- **Breaking change** [Null safety][] is now enabled by default in all code that
   has not opted out. With null safety, types in your code are non-nullable by
   default. Null can only flow into parts of your program where you want it. With
   null safety, your runtime null-dereference bugs turn into edit-time analysis
@@ -1176,7 +1257,7 @@
   - The postfix `!` null assertion operator
   - The `?..` and `?[]` null-aware operators
 
-- **Breaking Change** [#44660][]: Fixed an implementation bug where `this` would
+- **Breaking change** [#44660][]: Fixed an implementation bug where `this` would
   sometimes undergo type promotion in extensions.
 
 [null safety]: https://dart.dev/null-safety/understanding-null-safety
@@ -1228,12 +1309,12 @@
 
 ### Dart VM
 
-- **Breaking Change** [#42312][]: `Dart_WeakPersistentHandle`s no longer
+- **Breaking change** [#42312][]: `Dart_WeakPersistentHandle`s no longer
   auto-delete themselves when the referenced object is garbage collected to
   avoid race conditions, but they are still automatically deleted when the
   isolate group shuts down.
 
-- **Breaking Change** [#42312][]: `Dart_WeakPersistentHandleFinalizer` is
+- **Breaking change** [#42312][]: `Dart_WeakPersistentHandleFinalizer` is
   renamed to `Dart_HandleFinalizer` and had its `handle` argument removed. All
   API functions using that type have been updated.
 
@@ -1241,7 +1322,7 @@
 
 ### Foreign Function Interface (`dart:ffi`)
 
-- **Breaking Change** [#44621][]: Invocations with a generic `T` of `sizeOf<T>`,
+- **Breaking change** [#44621][]: Invocations with a generic `T` of `sizeOf<T>`,
   `Pointer<T>.elementAt()`, `Pointer<T extends Struct>.ref`, and
   `Pointer<T extends Struct>[]` are being deprecated in the current stable
   release (2.12), and are planned to be fully removed in the following stable
@@ -1251,7 +1332,7 @@
   constant `T` on invocations. For migration notes see the breaking change
   request.
 
-- **Breaking Change** [#44622][]: Subtypes of `Struct` without any native member
+- **Breaking change** [#44622][]: Subtypes of `Struct` without any native member
   are being deprecated in the current stable release (2.12), and are planned to
   be fully removed in the following stable release (2.13). Migrate opaque types
   to extend `Opaque` rather than `Struct`.
@@ -1533,7 +1614,7 @@
 
 ### Dart VM
 
-- **Breaking Change** [#42982][]: `dart_api_dl.cc` is renamed to `dart_api_dl.c`
+- **Breaking change** [#42982][]: `dart_api_dl.cc` is renamed to `dart_api_dl.c`
   and changed to a pure C file.
 - Introduces `Dart_FinalizableHandle`s. They do auto-delete, and the weakly
   referred object cannot be accessed through them.
@@ -1622,7 +1703,7 @@
 
 #### `dart:convert`
 
-- **Breaking Change** [#41100][]: When encoding a string containing unpaired
+- **Breaking change** [#41100][]: When encoding a string containing unpaired
   surrogates as UTF-8, the unpaired surrogates will be encoded as replacement
   characters (`U+FFFD`). When decoding UTF-8, encoded surrogates will be treated
   as malformed input. When decoding UTF-8 with `allowMalformed: true`, the
@@ -1654,7 +1735,7 @@
 
 #### `dart:html`
 
-- **Breaking Change**: `CssClassSet.add()` previously returned `null` if the
+- **Breaking change**: `CssClassSet.add()` previously returned `null` if the
   `CssClassSet` corresponded to multiple elements. In order to align with the
   null-safe changes in the `Set` interface, it will now return `false` instead.
   The same applies for `CssClassSet.toggle`.
@@ -1675,7 +1756,7 @@
 
 #### `dart:mirrors`
 
-- **Breaking Change** [#42714][]: web compilers (dart2js and DDC) now produce a
+- **Breaking change** [#42714][]: web compilers (dart2js and DDC) now produce a
   compile-time error if `dart:mirrors` is imported.
 
   Most projects should not be affected. Since 2.0.0 this library was unsupported
@@ -1726,7 +1807,7 @@
 
 ### Dart VM
 
-- **Breaking Change** [#41100][]: When printing a string using the `print`
+- **Breaking change** [#41100][]: When printing a string using the `print`
   function, the default implementation (used when not overridden by the embedder
   or the current zone) will print any unpaired surrogates in the string as
   replacement characters (`U+FFFD`). Similarly, the `Dart_StringToUTF8` function
@@ -1884,12 +1965,12 @@
 
 #### `dart:html`
 
-- **Breaking Change** [#39627][]: Changed the return type of several HTML native
+- **Breaking change** [#39627][]: Changed the return type of several HTML native
   methods involving futures. In return types that matched `Future<List<T>>`,
   `T was` changed to `dynamic`. These methods would have resulted in a runtime
   error if they were used.
 
-- **Breaking Change**: `Node.insertAllBefore()` erroneously had a return type of
+- **Breaking change**: `Node.insertAllBefore()` erroneously had a return type of
   `Node`, even though it was not returning anything. This has been corrected to
   `void`.
 
@@ -2023,7 +2104,7 @@
 
 ### Foreign Function Interface (`dart:ffi`)
 
-- **Breaking Change**: Changed `Pointer.asFunction()` and
+- **Breaking change**: Changed `Pointer.asFunction()` and
   `DynamicLibrary.lookupFunction()` to extension methods. Invoking them
   dynamically previously already threw an exception, so the runtime behavior
   stays the same. However, the extension methods are only visible if `dart:ffi`
@@ -2042,7 +2123,7 @@
 frequently encounter code that is accepted by one compiler but then fails in the
 other.
 
-- **Breaking Change**: Deleted the legacy (analyzer based) version of DDC. For
+- **Breaking change**: Deleted the legacy (analyzer based) version of DDC. For
   additional details see the [announcement][ddc].
 
   - The `--kernel` option is now ignored and defaults to true. There is no
@@ -2055,12 +2136,12 @@
     deleted from `dart-sdk/lib/dev_compiler` in favor of the versions located at
     `dart-sdk/lib/dev_compiler/kernel`.
 
-- **Breaking Change**: Functions passed to JavaScript using the recommended
+- **Breaking change**: Functions passed to JavaScript using the recommended
   `package:js` interop specification must now be wrapped with a call to
   `allowInterop`. This behavior was always enforced by Dart2JS, but was not
   enforced consistently by DDC. It is now enforced by both.
 
-- **Breaking Change**: Constructors in `@JS()` classes must be marked with
+- **Breaking change**: Constructors in `@JS()` classes must be marked with
   `external`. Previously the `external` could be omitted in some cases with DDC
   but doing so would cause incorrect behavior with Dart2JS.
 
@@ -2131,16 +2212,16 @@
 - JS interop classes with an index operator are now static errors instead of
   causing invalid code in Dart2JS.
 
-- **Breaking Change**: The subtyping rule for generic functions is now more
+- **Breaking change**: The subtyping rule for generic functions is now more
   forgiving. Corresponding type parameter bounds now only need to be mutual
   subtypes rather than structurally equal up to renaming of bound type variables
   and equating all top types.
 
-- **Breaking Change**: Types are now normalized. See [normalization][] for the
+- **Breaking change**: Types are now normalized. See [normalization][] for the
   full specification. Types will now be printed in their normal form, and mutual
   subtypes with the same normal form will now be considered equal.
 
-- **Breaking Change**: Constructors in `@JS()` classes must be marked with
+- **Breaking change**: Constructors in `@JS()` classes must be marked with
   `external`. Previously, the external could be omitted for unused constructors.
   Omitting `external` for a constructor which is used would cause incorrect
   behavior at runtime, now omitting it on any constructor is a static error.
@@ -2151,7 +2232,7 @@
 
 Other dart2js changes:
 
-- **Breaking Change**: The `--package-root` flag, which was hidden and disabled
+- **Breaking change**: The `--package-root` flag, which was hidden and disabled
   in Dart 2.0.0, has been completely removed. Passing this flag will now cause
   `dart2js` to fail.
 
@@ -2215,10 +2296,10 @@
 
 ## 2.7.2 - 2020-03-23
 
-This is a patch release that addresses a vulnerability in `dart:html`
-[NodeValidator][] related to DOM clobbering of `previousSibling`. See the
-[vulnerability advisory][cve-2020-8923] for more details. Thanks to **Vincenzo
-di Cicco** for finding and reporting this issue.
+**Security advisory**: This is a patch release that addresses a vulnerability in
+`dart:html` [NodeValidator][] related to DOM clobbering of `previousSibling`.
+See the security advisory [CVE-2020-8923][cve-2020-8923] for more details.
+Thanks to **Vincenzo di Cicco** for finding and reporting this issue.
 
 This release also improves compatibility with ARMv8 processors (issue [40001][])
 and dart:io stability (issue [40589][]).
@@ -2235,7 +2316,7 @@
 
 [40217]: https://github.com/dart-lang/sdk/issues/40217
 
-**Breaking Change**: The Dart SDK for macOS is now only available for x64 (issue
+**Breaking change**: The Dart SDK for macOS is now only available for x64 (issue
 [39810][]).
 
 [39810]: https://github.com/dart-lang/sdk/issues/39810
@@ -2250,7 +2331,7 @@
 
 ### Language
 
-- **Breaking Change**: [Static extension members][] are accessible when imported
+- **Breaking change**: [Static extension members][] are accessible when imported
   with a prefix (issue [671][]). In the extension method **preview** launch,
   importing a library with a prefix hid all extension members in addition to
   hiding the extension name, thereby making them inaccessible in the importing
@@ -3231,7 +3312,7 @@
 
 #### `dart:io`
 
-- **Breaking Change:** Adding to a closed `IOSink` now throws a `StateError`.
+- **Breaking change:** Adding to a closed `IOSink` now throws a `StateError`.
 - Added ability to get and set low level socket options.
 
 [29554]: https://github.com/dart-lang/sdk/issues/29554
@@ -3928,8 +4009,8 @@
 - **(Breaking)** "dart:isolate" and "dart:mirrors" are no longer supported when
   using Dart for the web. They are still supported in the command-line VM.
 
-- **(Breaking)** Pub's transformer-based build system has been [replaced by a
-  new build system][transformers].
+- **(Breaking)** Pub's transformer-based build system has been replaced by a
+  [new build system][build system].
 
 - The `new` keyword is optional and can be omitted. Likewise, `const` can be
   omitted inside a const context ([issue 30921][]).
@@ -3938,8 +4019,8 @@
 
 [issue 30345]: https://github.com/dart-lang/sdk/issues/30345
 [issue 30921]: https://github.com/dart-lang/sdk/issues/30921
-[strong mode]: https://www.dartlang.org/guides/language/sound-dart
-[transformers]: https://www.dartlang.org/tools/pub/obsolete
+[strong mode]: https://dart.dev/guides/language/type-system
+[build system]: https://github.com/dart-lang/build
 
 ### Language
 
@@ -4866,7 +4947,7 @@
 ```
 
 To opt back into the warnings, add the following to the
-[.analysis_options](https://www.dartlang.org/guides/language/analysis-options)
+[.analysis_options](https://dart.dev/guides/language/analysis-options)
 file for your project.
 
 ```
@@ -5301,7 +5382,7 @@
 
 - We have improved the way that the VM locates the native code library for a
   native extension (e.g. `dart-ext:` import). We have updated this
-  [article on native extensions](https://www.dartlang.org/articles/dart-vm/native-extensions)
+  [article on native extensions](https://dart.dev/server/c-interop-native-extensions)
   to reflect the VM's improved behavior.
 
 - Linux builds of the VM will now use the `tcmalloc` library for memory
@@ -6092,7 +6173,7 @@
 ### Tool changes
 
 - `dart2js` and Dartium now support improved Javascript Interoperability via the
-  [js package](https://pub.dartlang.org/packages/js).
+  [js package](https://pub.dev/packages/js).
 
 - `docgen` and `dartdocgen` no longer ship in the SDK. The `docgen` sources have
   been removed from the repository.
@@ -6208,7 +6289,7 @@
 - Documentation tools
 
   - `dartdoc` is now the default tool to generate static HTML for API docs.
-    [Learn more](https://pub.dartlang.org/packages/dartdoc).
+    [Learn more](https://pub.dev/packages/dartdoc).
 
   - `docgen` and `dartdocgen` have been deprecated. Currently plan is to remove
     them in 1.13.
@@ -6401,7 +6482,7 @@
 ### Tool changes
 
 - This is the first release that does not include the Eclipse-based **Dart
-  Editor**. See [dartlang.org/tools](https://www.dartlang.org/tools/) for
+  Editor**. See [dart.dev/tools](https://dart.dev/tools#ides-and-editors) for
   alternatives.
 - This is the last release that ships the (unsupported) dart2dart (aka
   `dart2js --output-type=dart`) utility as part of dart2js
@@ -6481,8 +6562,8 @@
 
 - Enum support is fully enabled. See [the language tour][enum] for more details.
 
-[async]: https://www.dartlang.org/docs/dart-up-and-running/ch02.html#asynchrony
-[enum]: https://www.dartlang.org/docs/dart-up-and-running/ch02.html#enums
+[async]: https://dart.dev/guides/language/language-tour#asynchrony
+[enum]: https://dart.dev/guides/language/language-tour#enums
 
 ### Tool changes
 
@@ -6496,7 +6577,7 @@
 - Analysis supports more and better hints, including unused variables and unused
   private members.
 
-[dartfmt]: https://www.dartlang.org/tools/dartfmt/
+[dartfmt]: https://dart.dev/tools/dart-format
 
 ### Core library changes
 
@@ -6514,7 +6595,7 @@
 #### Details
 
 For more information on any of these changes, see the corresponding
-documentation on the [Dart API site](http://api.dartlang.org).
+documentation on the [Dart API site](http://api.dart.dev).
 
 - `dart:async`:
 
@@ -6666,7 +6747,7 @@
   the same page.
 
 [pub global activate]:
-  https://www.dartlang.org/tools/pub/cmd/pub-global.html#running-a-script-from-your-path
+  https://dart.dev/tools/pub/cmd/pub-global#running-a-script-from-your-path
 
 ### Core library changes
 
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6802814..cdfcdaf 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -11,7 +11,7 @@
       click that icon to report a bug on the page.
     * To report an API doc bug,
       [create an SDK issue](https://github.com/dart-lang/sdk/issues/new?title=API%20doc%20issue:).
-  * Contribute to the Dart developer websites such as [dart.dev](https://dart.dev) (repo: [dart-lang/site-www](https://github.com/dart-lang/site-www)) and [dart.dev/web](https://dart.dev/web) (repo: [dart-lang/site-www/src/web](https://github.com/dart-lang/site-www/tree/master/src/web)). For more information, see [Writing for Dart and Flutter websites](https://github.com/dart-lang/site-shared/wiki/Writing-for-Dart-and-Flutter-websites).
+  * Contribute to the Dart developer websites such as [dart.dev](https://dart.dev) (repo: [dart-lang/site-www](https://github.com/dart-lang/site-www)). For more information, see [Writing for Dart and Flutter websites](https://github.com/dart-lang/site-shared/blob/master/doc/writing-for-dart-and-flutter-websites.md).
   * Improve the API reference docs at [api.dart.dev](https://api.dart.dev) by editing doc comments in the [Dart SDK repo](https://github.com/dart-lang/sdk/tree/main/sdk/lib). For more information on how to write API docs, see [Effective Dart: Documentation](https://dart.dev/guides/language/effective-dart/documentation).
 
 ## Before you contribute
@@ -20,9 +20,13 @@
 
 Before you start working on a larger contribution, you should get in touch with us first through the  [Dart Issue Tracker](https://dartbug.com) with your idea so that we can help out and possibly guide you. Coordinating up front makes it much easier to avoid frustration later on.
 
-All submissions, including submissions by project members, require review.  We use the same code-review tools and process as the chromium project.  In order to submit a patch, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/depottools).
+All submissions, including submissions by project members, require review.  We use the same code-review tools and process as the chromium project.
 
-We occasionally take pull requests, e.g., for comment changes, but the main flow is to use the Rietveld review system as explained below.
+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
+
+In order to submit a patch, you need to get the [depot\_tools](http://dev.chromium.org/developers/how-tos/depottools).
 
 ## Getting the code
 
@@ -69,7 +73,9 @@
 git cl upload -s
 ```
 
-The above command returns a URL for the review. Attach this review to your issue in https://dartbug.com
+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.
 
 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:
 
diff --git a/DEPS b/DEPS
index 56ed123..dc14ff7 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # 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": "1247f4096b835f31465e8f71dece427e95b51534",
+  "co19_rev": "a38d7c5685e64499cfbdbfe6548fbd5b63b57f15",
   # This line prevents conflicts when both packages are rolled simultaneously.
   "co19_2_rev": "995745937abffe9fc3a6441f9f0db27b2d706e4c",
 
@@ -59,15 +59,15 @@
   # Checkout extra javascript engines for testing or benchmarking.
   # d8, the V8 shell, is always checked out.
   "checkout_javascript_engines": False,
-  "d8_tag": "version:9.9.3",
+  "d8_tag": "version:10.0.40",
   "jsshell_tag": "version:95.0",
 
   # As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision
   # should be kept up to date with the revisions pulled by the Flutter engine.
   # The list of revisions for these tools comes from Fuchsia, here:
-  # https://fuchsia.googlesource.com/integration/+/HEAD/prebuilts
+  # https://fuchsia.googlesource.com/integration/+/HEAD/toolchain
   # If there are problems with the toolchain, contact fuchsia-toolchain@.
-  "clang_revision": "e3a7f0e2f9ab566bd9b71fb54fe77e947b061a12",
+  "clang_revision": "1aa59ff2f789776ebfa2d4b315fd3ea589652b4a",
   "gn_revision": "b79031308cc878488202beb99883ec1f2efd9a6d",
 
   # Scripts that make 'git cl format' work.
@@ -80,7 +80,7 @@
   "async_rev": "80886150a5e6c58006c8ae5a6c2aa7108638e2a9",
   "bazel_worker_rev": "ceeba0982d4ff40d32371c9d35f3d2dc1868de20",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
-  "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
+  "boolean_selector_rev": "437e7f06c7e416bed91e16ae1df453555897e945",
   "boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
   "boringssl_rev" : "87f316d7748268eb56f2dc147bd593254ae93198",
   "browser-compat-data_tag": "v1.0.22",
@@ -89,11 +89,11 @@
   "charcode_rev": "84ea427711e24abf3b832923959caa7dd9a8514b",
   "chrome_rev" : "19997",
   "cli_util_rev" : "b0adbba89442b2ea6fef39c7a82fe79cb31e1168",
-  "clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
-  "collection_rev": "a4c941ab94044d118b2086a3f261c30377604127",
+  "clock_rev" : "5631a0612f4ac7e1b32f7c9a00fc7c00a41615e1",
+  "collection_rev": "e1407da23b9f17400b3a905aafe2b8fa10db3d86",
   "convert_rev": "e063fdca4bebffecbb5e6aa5525995120982d9ce",
   "crypto_rev": "b5024e4de2b1c474dd558bef593ddbf0bfade152",
-  "csslib_rev": "158bfa94eed08c12c07a8ee0a3fded0ebdcd1fcb",
+  "csslib_rev": "518761b166974537f334dbf264e7f56cb157a96a",
 
   # Note: Updates to dart_style have to be coordinated with the infrastructure
   # team so that the internal formatter `tools/sdks/dart-sdk/bin/dart format`
@@ -107,17 +107,17 @@
   #     and land the review.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-  "dart_style_rev": "6f894c0ca33686122be9085f06e5b9bf6ad55262",
+  "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea",
 
-  "dartdoc_rev" : "f9cfab1b84176873c80b89e7c8b54c669344f9ed",
-  "devtools_rev" : "f265c3028d5ed9a454762532bed144fa36b2e4d5",
+  "dartdoc_rev" : "a39f378f8100b907e6285ac825967d764fd664ad",
+  "devtools_rev" : "b9f2039239cc72ac8b26f8a5fe46123f34d53ce1",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
-  "file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
-  "glob_rev": "a62acf590598f458d3198d9f2930c1c9dd4b1379",
-  "html_rev": "00cd3c22dac0e68e6ed9e7e4945101aedb1b3109",
+  "file_rev": "1ebc38852ffed24b564910317982298b56c2cedd",
+  "glob_rev": "da1f4595ee2f87982cbcc663d4cac244822d9227",
+  "html_rev": "f108bce59d136c584969fd24a5006914796cf213",
   "http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
-  "http_multi_server_rev": "de1b312164c24a1690b46c6e97bd47eff40c4649",
+  "http_multi_server_rev": "34bf7f04b61cce561f47f7f275c2cc811534a05a",
   "http_parser_rev": "202391286ddc13c4c3c284ac5b511f04697250ed",
   "http_rev": "1e42ffa181b263f7790f276a5465832bff7ce615",
   "icu_rev" : "81d656878ec611cb0b42d52c82e9dae93920d9ba",
@@ -126,11 +126,11 @@
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
   "linter_tag": "1.18.0",
   "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
-  "logging_rev": "575781ef196e4fed4fb737e38fb4b73d62727187",
+  "logging_rev": "dfbe88b890c3b4f7bc06da5a7b3b43e9e263b688",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
   "markdown_rev": "7479783f0493f6717e1d7ae31cb37d39a91026b2",
   "matcher_rev": "07595a7739d47a8315caba5a8e58fb9ae3d81261",
-  "mime_rev": "c931f4bed87221beaece356494b43731445ce7b8",
+  "mime_rev": "7f4252d469de032aa4df9f90e827dbac4b8efa48",
   "mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
   "oauth2_rev": "7cd3284049fe5badbec9f2bea2afc41d14c01057",
   "package_config_rev": "8731bf10b5375542792a32a0f7c8a6f370583d96",
@@ -142,7 +142,7 @@
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
   "pub_rev": "8f5ab7b1aba3b9f66b56246d77e167990339d317",
-  "pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
+  "pub_semver_rev": "ea6c54019948dc03042c595ce9413e17aaf7aa38",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
   "shelf_static_rev": "202ec1a53c9a830c17cf3b718d089cf7eba568ad",
@@ -150,27 +150,27 @@
   "shelf_proxy_tag": "v1.0.0",
   "shelf_rev": "46483f896cc4308ee3d8e997030ae799b72aa16a",
   "shelf_web_socket_rev": "24fb8a04befa75a94ac63a27047b231d1a22aab4",
-  "source_map_stack_trace_rev": "1c3026f69d9771acf2f8c176a1ab750463309cce",
+  "source_map_stack_trace_rev": "80709f2d2fe5086ab50d744a28a2d26ea4384a1b",
   "source_maps-0.9.4_rev": "38524",
   "source_maps_rev": "6499ee3adac8d469e2953e2e8ba4bdb4c2fbef90",
   "source_span_rev": "dc189b455d823e2919667f6c5dcb41ab7483bce0",
   "sse_rev": "9084339389eb441d0c0518cddac211a097e78657",
   "stack_trace_rev": "5220580872625ddee41e9ca9a5f3364789b2f0f6",
   "stream_channel_rev": "3fa3e40c75c210d617b8b943b9b8f580e9866a89",
-  "string_scanner_rev": "1b63e6e5db5933d7be0a45da6e1129fe00262734",
+  "string_scanner_rev": "0e53bf9059e8e22a3b346aac7ec755a0f8314eb6",
   "sync_http_rev": "b59c134f2e34d12acac110d4f17f83e5a7db4330",
   "test_descriptor_rev": "ead23c1e7df079ac0f6457a35f7a71432892e527",
   "test_process_rev": "7c73ec8a8a6e0e63d0ec27d70c21ca4323fb5e8f",
-  "term_glyph_rev": "6a0f9b6fb645ba75e7a00a4e20072678327a0347",
+  "term_glyph_rev": "4885b7f8af6931e23d3aa6d1767ee3f9a626923d",
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
   "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
   "typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
   "usage_rev": "f0cb8f7cce8b675255c81488dbab8cf9f2f56404",
-  "vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
+  "vector_math_rev": "0cbed0914d49a6a44555e6d5444c438a4a4c3fc1",
   "watcher_rev": "f76997ab0c857dc5537ac0975a9ada92b54ef949",
   "webdriver_rev": "ff5ccb1522edf4bed578ead4d65e0cbc1f2c4f02",
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
-  "web_socket_channel_rev": "6448ce532445a8a458fa191d9346df071ae0acad",
+  "web_socket_channel_rev": "99dbdc5769e19b9eeaf69449a59079153c6a8b1f",
   "WebCore_rev": "bcb10901266c884e7b3740abc597ab95373ab55c",
   "webdev_rev": "832b096c0c24798d3df46faa7b7661fe930573c2",
   "webkit_inspection_protocol_rev": "dd6fb5d8b536e19cedb384d0bbf1f5631923f1e8",
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..911f0bb
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,23 @@
+# Global approvers - only to be used as a last resort.
+asiva@google.com #{LAST_RESORT_SUGGESTION}
+athom@google.com #{LAST_RESORT_SUGGESTION}
+kustermann@google.com #{LAST_RESORT_SUGGESTION}
+leafp@google.com #{LAST_RESORT_SUGGESTION}
+sigmund@google.com #{LAST_RESORT_SUGGESTION}
+vegorov@google.com #{LAST_RESORT_SUGGESTION}
+vsm@google.com #{LAST_RESORT_SUGGESTION}
+
+# DEPS
+per-file DEPS=file:/tools/OWNERS_ENG
+
+# Changelog, AUTHORS, and .git* do not require approval.
+per-file CHANGELOG.md,AUTHORS,.gitattributes,.gitconfig,.gitignore=*
+
+# Product documentation
+per-file CONTRIBUTING.md,LICENSE,PATENT_GRANT,README.*,SECURITY.md=file:/tools/OWNERS_PRODUCT
+
+# Top level build files
+per-file .clang-format,BUILD.gn,sdk_args.gni=file:/tools/OWNERS_VM
+
+# Generated file
+per-file .packages=*
diff --git a/SECURITY.md b/SECURITY.md
index a341d38..573f212 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,3 +1,8 @@
 ## Reporting vulnerabilities
 To report potential vulnerabilities, please see our security policy on
 [https://dart.dev/security](https://dart.dev/security).
+
+## Published security advisories
+
+For advisories published for the Dart SDK, see
+[security advisories](https://github.com/dart-lang/sdk/security/advisories?state=published).
diff --git a/benchmarks/BigIntParsePrint/dart/BigIntParsePrint.dart b/benchmarks/BigIntParsePrint/dart/BigIntParsePrint.dart
index b3d40c0..3451cc3 100644
--- a/benchmarks/BigIntParsePrint/dart/BigIntParsePrint.dart
+++ b/benchmarks/BigIntParsePrint/dart/BigIntParsePrint.dart
@@ -4,6 +4,8 @@
 
 // ignore_for_file: avoid_function_literals_in_foreach_calls
 
+import 'dart:math' show Random;
+
 import 'package:benchmark_harness/benchmark_harness.dart';
 import 'package:fixnum/fixnum.dart';
 
@@ -240,7 +242,9 @@
 class DummyBenchmark extends BenchmarkBase {
   DummyBenchmark(String name) : super(name);
   @override
-  double measure() => 2000 * 1000 * 1.0; // A rate of one run per 2s.
+  // A rate of one run per 2s, with a millisecond of noise.  Some variation is
+  // needed for Golem's noise-based filtering and regression detection.
+  double measure() => (2000 + Random().nextDouble() - 0.5) * 1000;
 }
 
 /// Create [ParseJsBigIntBenchmark], or a dummy benchmark if JavaScript BigInt
diff --git a/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart b/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart
index db19b68..2ff130d 100644
--- a/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart
+++ b/benchmarks/BigIntParsePrint/dart2/BigIntParsePrint.dart
@@ -6,6 +6,8 @@
 
 // @dart=2.9
 
+import 'dart:math' show Random;
+
 import 'package:benchmark_harness/benchmark_harness.dart';
 import 'package:fixnum/fixnum.dart';
 
@@ -242,7 +244,9 @@
 class DummyBenchmark extends BenchmarkBase {
   DummyBenchmark(String name) : super(name);
   @override
-  double measure() => 2000 * 1000 * 1.0; // A rate of one run per 2s.
+  // A rate of one run per 2s, with a millisecond of noise.  Some variation is
+  // needed for Golem's noise-based filtering and regression detection.
+  double measure() => (2000 + Random().nextDouble() - 0.5) * 1000;
 }
 
 /// Create [ParseJsBigIntBenchmark], or a dummy benchmark if JavaScript BigInt
diff --git a/benchmarks/Iterators/dart/Iterators.dart b/benchmarks/Iterators/dart/Iterators.dart
new file mode 100644
index 0000000..d4ff6c4
--- /dev/null
+++ b/benchmarks/Iterators/dart/Iterators.dart
@@ -0,0 +1,651 @@
+// 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.
+
+/// # Benchmark for iterators of common collections.
+///
+/// The purpose of this benchmark is to detect performance changes in the
+/// iterators for common collections (system Lists, Maps, etc).
+///
+/// ## Polymorphic benchmarks
+///
+/// Benchmark names beginning with `Iterators.poly.`.
+///
+/// These benchmark use the iterators from a common polymorphic for-in loop, so
+/// none of the methods involved in iterating are inlined. This gives an
+/// indication of worst-case performance.
+///
+/// Iterables of different sizes (small (N=1) and large (N=100)) are used to
+/// give insight into the fixed vs per-element costs.
+///
+/// Results are normalized by iterating 1000 elements and reporting the time per
+/// element. There is an outer loop that calls the iterator loop in `sinkAll`.
+///
+/// The dispatched (polymorphic) calls are to `get:iterator`, `moveNext` and
+/// `get:current`.
+///
+///  |    N | outer | `get:iterator` | `moveNext` | `get:current` |
+///  | ---: | ----: | -------------: | ---------: | ------------: |
+///  |   0* |  1000 |           1000 |       1000 |             0 |
+///  |   1  |  1000 |           1000 |       2000 |          1000 |
+///  |   2* |   500 |            500 |       1500 |          1000 |
+///  | 100  |    10 |             10 |       1010 |          1000 |
+///
+/// * By default only the N=1 and N=100 benchmarks arer run. The N=0 and N=2
+/// series are available running manually with `--0` and `--2` command-line
+/// arguments.
+///
+/// Generic Iterables have benchmarks for different element types. There are
+/// benchmarks for `int` type arguments, which have a fast type test, and for
+/// `Thing<Iterable<Comparable>>`, which is harder to test quickly. These tests
+/// are distingished by `int` and `Hard` in the name.
+///
+/// ## Monomorphic benchmarks
+///
+/// Benchmark names beginning with `Iterators.mono.`.
+///
+/// A subset of the polymorphic benchmarks are also implemented with a
+/// per-benchmark for-in loop directly iterating a collection of known
+/// representation. This gives the compiler the opportunity to inline the
+/// methods into the loop and represents the best-case performance.
+///
+/// ## Example benchmarks
+///
+/// The name has 4-7 words separated by periods. The first word is always
+/// 'Iterators', and the second is either 'mono' for monomorphic loops, or
+/// 'poly' for benchmarks using a shared polymorphic loop. The last word is a
+/// number which is the size (length) of the Iterable.
+///
+/// ### Iterators.mono.const.Map.int.values.100
+///
+/// A for-in loop over the values iterable of a known constant Map with value
+/// type `int` and 100 entries.
+///
+/// ### Iterators.poly.Runes.1
+///
+/// An interation over the String.runes iterable of a single character String
+/// using the shared polymorphic loop.
+///
+/// ### Iterators.poly.HashMap.Hard.keys.100
+///
+/// An iteration of over the keys iterable of a HashMap with key type
+/// `Thing<Iterable<Comparable>>` and 100 entries.
+///
+/// ### Iterators.*.UpTo.*
+///
+/// The UpTo iterable is a minimal iterable that provides successive
+/// numbers. The `moveNext` and `get:current` methods are small. Comparing
+/// Iterators.poly.UpTo.*.100 to Iterators.poly.*.100 gives an indication of how
+/// much work is done by `moveNext` (and sometimes `get:current`).
+///
+/// ### Iterators.mono.Nothing.*
+///
+/// The Nothing benchmark has no iteration over an iterable and is used to get a
+/// baseline time for running the benchmark loop for monomorphic
+/// benchmarks. This can be a substantial fraction of
+///
+/// Consider the times
+///
+///     Iterators.mono.CodeUnits.1   = 7.0ns
+///     Iterators.mono.Nothing.1     = 3.1ns
+///
+/// Because the trip count (i.e. 1) of the for-in loop is so small, there is a
+/// lot of overhead attributable to the outer loop in `MonoBenchmark.run`. The
+/// 1000/1 = 1000 trips of outer loops takes 3.1us (3.1ns * 1000 trips), so
+/// CodeUnits is spending only 7.0-3.1 = 3.9ns per character in the for-in
+/// loop over the `.codeUnits` of the single-character String.
+///
+///     Iterators.mono.CodeUnits.100 = 1.83ns
+///     Iterators.mono.Nothing.100   = 0.05ns
+///
+/// Now the outer loop runs only 1000/100 = 10 times, for 0.05us. If we subtract
+/// this from 1.83, we get 1.78ns per character for long strings.
+///
+library iterators_benchmark;
+
+// TODO(48277): Update when fixed:
+// ignore_for_file: unnecessary_lambdas
+
+import 'dart:collection';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+import 'data.dart';
+
+const targetSize = 1000;
+
+class Emitter implements ScoreEmitter {
+  @override
+  void emit(String testName, double value) {
+    // [value] is microseconds per ten calls to `run()`.
+    final nanoSeconds = value * 1000;
+    final singleElementTimeNs = nanoSeconds / 10 / targetSize;
+    print('$testName(RunTimeRaw): $singleElementTimeNs ns.');
+  }
+}
+
+abstract class Benchmark extends BenchmarkBase {
+  final int size;
+  bool selected = false;
+  Benchmark._(String name, this.size)
+      : super('Iterators.$name.$size', emitter: Emitter());
+
+  factory Benchmark(String name, int size, Iterable Function(int) generate) =
+      PolyBenchmark;
+}
+
+abstract class MonoBenchmark extends Benchmark {
+  final int _repeats;
+  MonoBenchmark(String name, int size)
+      : _repeats = size == 0 ? targetSize : targetSize ~/ size,
+        super._('mono.$name', size);
+
+  @override
+  void run() {
+    for (int i = 0; i < _repeats; i++) {
+      sinkMono();
+    }
+  }
+
+  void sinkMono();
+}
+
+class PolyBenchmark extends Benchmark {
+  final Iterable Function(int) generate;
+  final List<Iterable> inputs = [];
+
+  PolyBenchmark(String name, int size, this.generate)
+      : super._('poly.$name', size);
+
+  @override
+  void setup() {
+    if (inputs.isNotEmpty) return; // Ensure setup() is idempotent.
+
+    int totalSize = 0;
+    while (totalSize < targetSize) {
+      final sample = generate(size);
+      inputs.add(sample);
+      totalSize += size == 0 ? 1 : size;
+    }
+  }
+
+  @override
+  void run() {
+    for (int i = 0; i < inputs.length; i++) {
+      sinkAll(inputs[i]);
+    }
+  }
+}
+
+/// This function is the inner loop of the benchmark.
+@pragma('dart2js:noInline')
+@pragma('vm:never-inline')
+void sinkAll(Iterable iterable) {
+  for (final value in iterable) {
+    sink = value;
+  }
+}
+
+Object? sink;
+
+class BenchmarkConstMapIntKeys1 extends MonoBenchmark {
+  BenchmarkConstMapIntKeys1() : super('const.Map.int.keys', 1);
+
+  static const _map = constMapIntInt1;
+
+  @override
+  void sinkMono() {
+    for (final value in _map.keys) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkConstMapIntKeys2 extends MonoBenchmark {
+  BenchmarkConstMapIntKeys2() : super('const.Map.int.keys', 2);
+
+  static const _map = constMapIntInt2;
+
+  @override
+  void sinkMono() {
+    for (final value in _map.keys) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkConstMapIntKeys100 extends MonoBenchmark {
+  BenchmarkConstMapIntKeys100() : super('const.Map.int.keys', 100);
+
+  static const _map = constMapIntInt100;
+
+  @override
+  void sinkMono() {
+    for (final value in _map.keys) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkConstMapIntValues1 extends MonoBenchmark {
+  BenchmarkConstMapIntValues1() : super('const.Map.int.values', 1);
+
+  static const _map = constMapIntInt1;
+
+  @override
+  void sinkMono() {
+    for (final value in _map.values) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkConstMapIntValues2 extends MonoBenchmark {
+  BenchmarkConstMapIntValues2() : super('const.Map.int.values', 2);
+
+  static const _map = constMapIntInt2;
+
+  @override
+  void sinkMono() {
+    for (final value in _map.values) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkConstMapIntValues100 extends MonoBenchmark {
+  BenchmarkConstMapIntValues100() : super('const.Map.int.values', 100);
+
+  static const _map = constMapIntInt100;
+
+  @override
+  void sinkMono() {
+    for (final value in _map.values) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkMapIntKeys extends MonoBenchmark {
+  BenchmarkMapIntKeys(int size) : super('Map.int.keys', size) {
+    _map.addAll(generateMapIntInt(size));
+  }
+
+  final Map<int, int> _map = {};
+
+  @override
+  void sinkMono() {
+    for (final value in _map.keys) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkUpTo extends MonoBenchmark {
+  BenchmarkUpTo(int size) : super('UpTo', size);
+
+  @override
+  void sinkMono() {
+    for (final value in UpTo(size)) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkNothing extends MonoBenchmark {
+  BenchmarkNothing(int size) : super('Nothing', size);
+
+  @override
+  void sinkMono() {
+    sink = size;
+  }
+}
+
+class BenchmarkCodeUnits extends MonoBenchmark {
+  BenchmarkCodeUnits(int size)
+      : string = generateString(size),
+        super('CodeUnits', size);
+
+  final String string;
+
+  @override
+  void sinkMono() {
+    for (final value in string.codeUnits) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkListIntGrowable extends MonoBenchmark {
+  BenchmarkListIntGrowable(int size)
+      : _list = List.generate(size, (i) => i),
+        super('List.int.growable', size);
+
+  final List<int> _list;
+
+  @override
+  void sinkMono() {
+    for (final value in _list) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkListIntSystem1 extends MonoBenchmark {
+  // The List type here is not quite monomorphic. It is the choice between two
+  // 'system' Lists: a const List and a growable List. It is quite common to
+  // have growable and const lists at the same use-site (e.g. the const coming
+  // from a default argument).
+  //
+  // Ideally some combination of the class heirarchy or compiler tricks would
+  // ensure there is little cost of having this gentle polymorphism.
+  BenchmarkListIntSystem1(int size)
+      : _list1 = List.generate(size, (i) => i),
+        _list2 = generateConstListOfInt(size),
+        super('List.int.growable.and.const', size);
+
+  final List<int> _list1;
+  final List<int> _list2;
+  bool _flip = false;
+
+  @override
+  void sinkMono() {
+    _flip = !_flip;
+    final list = _flip ? _list1 : _list2;
+    for (final value in list) {
+      sink = value;
+    }
+  }
+}
+
+class BenchmarkListIntSystem2 extends MonoBenchmark {
+  // The List type here is not quite monomorphic. It is the choice between two
+  // 'system' Lists: a const List and a fixed-length List. It is quite common to
+  // have fixed-length and const lists at the same use-site (e.g. the const
+  // coming from a default argument).
+  //
+  // Ideally some combination of the class heirarchy or compiler tricks would
+  // ensure there is little cost of having this gentle polymorphism.
+  BenchmarkListIntSystem2(int size)
+      : _list1 = List.generate(size, (i) => i, growable: false),
+        _list2 = generateConstListOfInt(size),
+        super('List.int.fixed.and.const', size);
+
+  final List<int> _list1;
+  final List<int> _list2;
+  bool _flip = false;
+
+  @override
+  void sinkMono() {
+    _flip = !_flip;
+    final list = _flip ? _list1 : _list2;
+    for (final value in list) {
+      sink = value;
+    }
+  }
+}
+
+/// A simple Iterable that yields the integers 0 through `length`.
+///
+/// This Iterable serves as the minimal interesting example to serve as a
+/// baseline, and is useful in constructing other benchmark inputs.
+class UpTo extends IterableBase<int> {
+  final int _length;
+  UpTo(this._length);
+
+  @override
+  Iterator<int> get iterator => UpToIterator(_length);
+}
+
+class UpToIterator implements Iterator<int> {
+  final int _length;
+  int _position = 0;
+  int? _current;
+
+  UpToIterator(this._length);
+
+  @override
+  int get current => _current!;
+
+  @override
+  bool moveNext() {
+    if (_position < _length) {
+      _current = _position++;
+      return true;
+    }
+    _current = null;
+    return false;
+  }
+}
+
+/// A `Thing` has a type parameter which makes type tests in the Iterators
+/// potentially harder, and equality uses the type parameter, making Iterables
+/// that do lookups slower.
+class Thing<T> {
+  static int _nextIndex = 0;
+  final int _index;
+  Thing() : _index = _nextIndex++;
+
+  @override
+  int get hashCode => _index;
+
+  @override
+  bool operator ==(Object other) => other is Thing<T> && other._index == _index;
+}
+
+final thingGenerators = [
+  // TODO(48277): Use instantiated constructor tear-offs when fixed:
+  () => Thing<Set<String>>(),
+  () => Thing<Set<Duration>>(),
+  () => Thing<Set<BigInt>>(),
+  () => Thing<Queue<String>>(),
+  () => Thing<Queue<Duration>>(),
+  () => Thing<Queue<BigInt>>(),
+  () => Thing<List<String>>(),
+  () => Thing<List<Duration>>(),
+  () => Thing<List<BigInt>>(),
+];
+
+int _generateThingListState = 0;
+List<Thing<Iterable<Comparable>>> generateThingList(int n) {
+  Thing nextThing(_) {
+    final next = (_generateThingListState++).remainder(thingGenerators.length);
+    return thingGenerators[next]();
+  }
+
+  return List.from(UpTo(n).map(nextThing));
+}
+
+Map<Thing<Iterable<Comparable>>, Thing<Iterable<Comparable>>> generateThingMap(
+    int n) {
+  return Map.fromIterables(generateThingList(n), generateThingList(n));
+}
+
+Map<Thing<Iterable<Comparable>>, Thing<Iterable<Comparable>>>
+    generateThingHashMap(int n) {
+  return HashMap.fromIterables(generateThingList(n), generateThingList(n));
+}
+
+int _generateStringState = 0;
+String generateString(int n) {
+  return ((_generateStringState++).isEven ? 'x' : '\u2192') * n;
+}
+
+Map<int, int> generateMapIntInt(int n) =>
+    Map<int, int>.fromIterables(UpTo(n), UpTo(n));
+
+Map<int, int> generateIdentityMapIntInt(int n) {
+  return Map<int, int>.identity()..addAll(generateMapIntInt(n));
+}
+
+/// Run the benchmark loop on various inputs to pollute type inference and JIT
+/// caches.
+void pollute() {
+  // This iterable reads `sink` mid-loop, making it infeasible for the compiler
+  // to move the write to `sink` out of the loop.
+  sinkAll(UpTo(100).map((i) {
+    if (i > 0 && sink != i - 1) throw StateError('sink');
+    return i;
+  }));
+
+  // TODO(sra): Do we need to add anything here? There are a lot of benchmarks,
+  // so that is probably sufficient to make the necessary places polymorphic.
+}
+
+/// Command-line arguments:
+///
+/// `--0`: Run benchmarks for empty iterables.
+/// `--1`: Run benchmarks for singleton iterables.
+/// `--2`: Run benchmarks for two-element iterables.
+/// `--100`: Run benchmarks for 100-element iterables.
+///
+///    Default sizes are 1 and 100.
+///
+/// `--all`: Run all benchmark variants and sizes.
+///
+/// `foo`, `foo.bar`: a Selector.
+///
+///    Run benchmarks with name containing all the dot-separated words in the
+///    selector, so `--Set.const` will run benchmark
+///    'Iterators.const.Set.int.N`, and `--2.UpTo` will select
+///    `Iterators.UpTo.2`.  Each selector is matched independently, and if
+///    selectors are used, only benchmarks matching some selector are run.
+///
+void main(List<String> commandLineArguments) {
+  final arguments = [...commandLineArguments];
+
+  const allSizes = {0, 1, 2, 100};
+  const defaultSizes = {1, 100};
+  final allSizeWords = Set.unmodifiable(allSizes.map((size) => '$size'));
+
+  final Set<int> sizes = {};
+  final Set<String> selectors = {};
+
+  if (arguments.remove('--0')) sizes.add(0);
+  if (arguments.remove('--1')) sizes.add(1);
+  if (arguments.remove('--2')) sizes.add(2);
+  if (arguments.remove('--100')) sizes.add(100);
+
+  if (arguments.remove('--all')) {
+    sizes.addAll(allSizes);
+  }
+
+  selectors.addAll(arguments);
+
+  if (sizes.isEmpty) sizes.addAll(defaultSizes);
+  if (selectors.isEmpty) selectors.add('Iterators');
+
+  List<Benchmark> makeBenchmarksForSize(int size) {
+    return [
+      // Simple
+      BenchmarkNothing(size),
+      BenchmarkUpTo(size),
+      BenchmarkCodeUnits(size),
+      Benchmark('UpTo', size, (n) => UpTo(n)),
+      Benchmark('CodeUnits', size, (n) => generateString(n).codeUnits),
+      Benchmark('Runes', size, (n) => generateString(n).runes),
+      // ---
+      BenchmarkListIntGrowable(size),
+      BenchmarkListIntSystem1(size),
+      BenchmarkListIntSystem2(size),
+      Benchmark('List.int.growable', size,
+          (n) => List<int>.of(UpTo(n), growable: true)),
+      Benchmark('List.int.fixed', size,
+          (n) => List<int>.of(UpTo(n), growable: false)),
+      Benchmark('List.int.unmodifiable', size,
+          (n) => List<int>.unmodifiable(UpTo(n))),
+      // ---
+      Benchmark('List.Hard.growable', size, generateThingList),
+      // ---
+      Benchmark('Set.int', size, (n) => Set<int>.of(UpTo(n))),
+      Benchmark('const.Set.int', size, generateConstSetOfInt),
+      // ---
+      BenchmarkMapIntKeys(size),
+      Benchmark('Map.int.keys', size, (n) => generateMapIntInt(n).keys),
+      Benchmark('Map.int.values', size, (n) => generateMapIntInt(n).values),
+      Benchmark('Map.int.entries', size, (n) => generateMapIntInt(n).entries),
+      // ---
+      Benchmark('Map.identity.int.keys', size,
+          (n) => generateIdentityMapIntInt(n).keys),
+      Benchmark('Map.identity.int.values', size,
+          (n) => generateIdentityMapIntInt(n).values),
+      Benchmark('Map.identity.int.entries', size,
+          (n) => generateIdentityMapIntInt(n).entries),
+      // ---
+      Benchmark(
+          'const.Map.int.keys', size, (n) => generateConstMapIntInt(n).keys),
+      Benchmark('const.Map.int.values', size,
+          (n) => generateConstMapIntInt(n).values),
+      Benchmark('const.Map.int.entries', size,
+          (n) => generateConstMapIntInt(n).entries),
+      // ---
+      Benchmark('Map.Hard.keys', size, (n) => generateThingMap(n).keys),
+      Benchmark('Map.Hard.values', size, (n) => generateThingMap(n).values),
+      // ---
+      Benchmark('HashMap.int.keys', size,
+          (n) => HashMap<int, int>.fromIterables(UpTo(n), UpTo(n)).keys),
+      Benchmark('HashMap.int.values', size,
+          (n) => HashMap<int, int>.fromIterables(UpTo(n), UpTo(n)).values),
+      Benchmark('HashMap.int.entries', size,
+          (n) => HashMap<int, int>.fromIterables(UpTo(n), UpTo(n)).entries),
+      // ---
+      Benchmark('HashMap.Hard.keys', size, (n) => generateThingHashMap(n).keys),
+      Benchmark(
+          'HashMap.Hard.values', size, (n) => generateThingHashMap(n).values),
+    ];
+  }
+
+  final benchmarks = [
+    BenchmarkConstMapIntKeys1(),
+    BenchmarkConstMapIntKeys2(),
+    BenchmarkConstMapIntKeys100(),
+    BenchmarkConstMapIntValues1(),
+    BenchmarkConstMapIntValues2(),
+    BenchmarkConstMapIntValues100(),
+    for (final size in allSizes) ...makeBenchmarksForSize(size),
+  ];
+
+  // Select benchmarks
+  final unusedSelectors = {...selectors};
+  for (final benchmark in benchmarks) {
+    final nameWords = benchmark.name.split('.').toSet();
+    for (final selector in selectors) {
+      final selectorWords = selector.split('.').toSet();
+      if (nameWords.containsAll(selectorWords)) {
+        unusedSelectors.remove(selector);
+        if (selectorWords.any(allSizeWords.contains) ||
+            sizes.contains(benchmark.size)) {
+          benchmark.selected = true;
+        }
+        // continue matching to remove other matching selectors.
+      }
+    }
+  }
+  if (unusedSelectors.isNotEmpty) {
+    throw ArgumentError(unusedSelectors, 'selectors match no benchmark');
+  }
+
+  // Warmup all benchmarks to ensure JIT compilers see full polymorphism.
+  for (var benchmark in benchmarks) {
+    pollute();
+    benchmark.setup();
+  }
+
+  // Warm up all the benchmarks, including the non-selected ones.
+  for (int i = 0; i < 10; i++) {
+    for (var benchmark in benchmarks) {
+      pollute();
+      final marker = Object();
+      sink = marker;
+      benchmark.warmup();
+      if (benchmark.size > 0 && identical(sink, marker)) throw 'unexpected';
+    }
+  }
+
+  for (var benchmark in benchmarks) {
+    // `report` calls `setup`, but `setup` is idempotent.
+    if (benchmark.selected) {
+      benchmark.report();
+    }
+  }
+}
diff --git a/benchmarks/Iterators/dart/data.dart b/benchmarks/Iterators/dart/data.dart
new file mode 100644
index 0000000..f59c26f
--- /dev/null
+++ b/benchmarks/Iterators/dart/data.dart
@@ -0,0 +1,177 @@
+// 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.
+
+Map<int, int> generateConstMapIntInt(int n) {
+  return constMapIntIntTable[n] ??
+      (throw ArgumentError.value(n, 'n', 'size not supported'));
+}
+
+Set<int> generateConstSetOfInt(int n) {
+  return constSetOfIntTable[n] ??
+      (throw ArgumentError.value(n, 'n', 'size not supported'));
+}
+
+List<int> generateConstListOfInt(int n) {
+  return constListOfIntTable[n] ??
+      (throw ArgumentError.value(n, 'n', 'size not supported'));
+}
+
+const Map<int, Map<int, int>> constMapIntIntTable = {
+  0: constMapIntInt0,
+  1: constMapIntInt1,
+  2: constMapIntInt2,
+  100: constMapIntInt100
+};
+
+const Map<int, int> constMapIntInt0 = {};
+const Map<int, int> constMapIntInt1 = {0: 0};
+const Map<int, int> constMapIntInt2 = {0: 0, 1: 1};
+const Map<int, int> constMapIntInt100 = {
+  0: 0,
+  1: 1,
+  2: 2,
+  3: 3,
+  4: 4,
+  5: 5,
+  6: 6,
+  7: 7,
+  8: 8,
+  9: 9,
+  10: 10,
+  11: 11,
+  12: 12,
+  13: 13,
+  14: 14,
+  15: 15,
+  16: 16,
+  17: 17,
+  18: 18,
+  19: 19,
+  20: 20,
+  21: 21,
+  22: 22,
+  23: 23,
+  24: 24,
+  25: 25,
+  26: 26,
+  27: 27,
+  28: 28,
+  29: 29,
+  30: 30,
+  31: 31,
+  32: 32,
+  33: 33,
+  34: 34,
+  35: 35,
+  36: 36,
+  37: 37,
+  38: 38,
+  39: 39,
+  40: 40,
+  41: 41,
+  42: 42,
+  43: 43,
+  44: 44,
+  45: 45,
+  46: 46,
+  47: 47,
+  48: 48,
+  49: 49,
+  50: 50,
+  51: 51,
+  52: 52,
+  53: 53,
+  54: 54,
+  55: 55,
+  56: 56,
+  57: 57,
+  58: 58,
+  59: 59,
+  60: 60,
+  61: 61,
+  62: 62,
+  63: 63,
+  64: 64,
+  65: 65,
+  66: 66,
+  67: 67,
+  68: 68,
+  69: 69,
+  70: 70,
+  71: 71,
+  72: 72,
+  73: 73,
+  74: 74,
+  75: 75,
+  76: 76,
+  77: 77,
+  78: 78,
+  79: 79,
+  80: 80,
+  81: 81,
+  82: 82,
+  83: 83,
+  84: 84,
+  85: 85,
+  86: 86,
+  87: 87,
+  88: 88,
+  89: 89,
+  90: 90,
+  91: 91,
+  92: 92,
+  93: 93,
+  94: 94,
+  95: 95,
+  96: 96,
+  97: 97,
+  98: 98,
+  99: 99
+};
+
+const Map<int, Set<int>> constSetOfIntTable = {
+  0: constSetOfInt0,
+  1: constSetOfInt1,
+  2: constSetOfInt2,
+  100: constSetOfInt100
+};
+
+const Set<int> constSetOfInt0 = {};
+const Set<int> constSetOfInt1 = {0};
+const Set<int> constSetOfInt2 = {0, 1};
+const Set<int> constSetOfInt100 = {
+  ...{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
+  ...{10, 11, 12, 13, 14, 15, 16, 17, 18, 19},
+  ...{20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
+  ...{30, 31, 32, 33, 34, 35, 36, 37, 38, 39},
+  ...{40, 41, 42, 43, 44, 45, 46, 47, 48, 49},
+  ...{50, 51, 52, 53, 54, 55, 56, 57, 58, 59},
+  ...{60, 61, 62, 63, 64, 65, 66, 67, 68, 69},
+  ...{70, 71, 72, 73, 74, 75, 76, 77, 78, 79},
+  ...{80, 81, 82, 83, 84, 85, 86, 87, 88, 89},
+  ...{90, 91, 92, 93, 94, 95, 96, 97, 98, 99}
+};
+
+const Map<int, List<int>> constListOfIntTable = {
+  0: constListOfInt0,
+  1: constListOfInt1,
+  2: constListOfInt2,
+  100: constListOfInt100
+};
+
+const List<int> constListOfInt0 = [];
+const List<int> constListOfInt1 = [0];
+const List<int> constListOfInt2 = [0, 1];
+const List<int> constListOfInt100 = [
+  ...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+  ...[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
+  ...[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
+  ...[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
+  ...[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
+  ...[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
+  ...[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
+  ...[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
+  ...[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
+  ...[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
+];
diff --git a/benchmarks/Iterators/dart2/Iterators.dart b/benchmarks/Iterators/dart2/Iterators.dart
new file mode 100644
index 0000000..cc03515
--- /dev/null
+++ b/benchmarks/Iterators/dart2/Iterators.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.
+
+// @dart=2.9
+
+import '../dart/Iterators.dart' as benchmark;
+
+void main(List<String> arguments) {
+  benchmark.main(arguments);
+}
diff --git a/benchmarks/OWNERS b/benchmarks/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/benchmarks/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart b/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
index 733b711..13583e9 100644
--- a/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
+++ b/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
@@ -19,7 +19,6 @@
 const snapshots = <String>[
   'analysis_server',
   'dart2js',
-  'dart2native',
   'dartanalyzer',
   'dartdev',
   'dartdevc',
@@ -28,7 +27,6 @@
   'gen_kernel',
   'kernel-service',
   'kernel_worker',
-  'pub',
 ];
 
 void reportFileSize(String path, String name) {
diff --git a/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart b/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
index f207e3a..ade286d 100644
--- a/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
+++ b/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
@@ -21,17 +21,14 @@
 const snapshots = <String>[
   'analysis_server',
   'dart2js',
-  'dart2native',
   'dartanalyzer',
   'dartdev',
   'dartdevc',
-  'dartdoc',
   'dds',
   'frontend_server',
   'gen_kernel',
   'kernel-service',
   'kernel_worker',
-  'pub',
 ];
 
 void reportFileSize(String path, String name) {
diff --git a/build/OWNERS b/build/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/build/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/build/config/OWNERS b/build/config/OWNERS
deleted file mode 100644
index bd53091..0000000
--- a/build/config/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-brettw@chromium.org
-dpranke@chromium.org
-scottmg@chromium.org
-
-per-file BUILDCONFIG.gn=brettw@chromium.org
-per-file BUILDCONFIG.gn=set noparent
diff --git a/build/mac/OWNERS b/build/mac/OWNERS
deleted file mode 100644
index c56e89d..0000000
--- a/build/mac/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-mark@chromium.org
-thomasvl@chromium.org
diff --git a/build/sanitizers/OWNERS b/build/sanitizers/OWNERS
deleted file mode 100644
index 0be2be8..0000000
--- a/build/sanitizers/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-glider@chromium.org
-earthdok@chromium.org
-per-file tsan_suppressions.cc=*
-per-file lsan_suppressions.cc=*
diff --git a/build/toolchain/OWNERS b/build/toolchain/OWNERS
deleted file mode 100644
index c6cda3f..0000000
--- a/build/toolchain/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-brettw@chromium.org
-dpranke@chromium.org
-scottmg@chromium.org
diff --git a/docs/OWNERS b/docs/OWNERS
new file mode 100644
index 0000000..22a2e82
--- /dev/null
+++ b/docs/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_FOUNDATION
+file:/tools/OWNERS_PRODUCT
diff --git a/docs/process/breaking-changes.md b/docs/process/breaking-changes.md
index 4ea8bda..65d85f7 100644
--- a/docs/process/breaking-changes.md
+++ b/docs/process/breaking-changes.md
@@ -29,7 +29,7 @@
 
 * Must contain no static analysis **errors**.
 
-* Must not rely on a certain runtime **error** being thrown (in other words, 
+* Must not rely on a certain runtime **error** being thrown (in other words,
   a new SDK might throw fewer errors than an old SDK).
 
 * Must access libraries via the public API (for example, must not reach into
@@ -45,6 +45,13 @@
 Compatibility is only considered between stable releases (i.e. releases from the
 [Dart stable channel](https://dart.dev/tools/sdk/archive#stable-channel)).
 
+## Breaking change implementation timing
+
+To avoid shipping features that have not been thoroughly vetted, we implement a
+policy of not including breaking changes in the final beta before a release.
+Breaking changes must be included in the beta before the final beta to be
+considered for the next stable release.
+
 ## Breaking change notification
 
 Anyone wishing to make a breaking change to Dart is expected to perform the
@@ -76,7 +83,7 @@
   * A request that developers may leave comments in the linked issue, if this
     breaking change poses a severe problem.
 
-Once you have sent the announce email, please let devoncarew@ know in order
+Once you have sent the announce email, please let kevinjchisholm@ know in order
 to start the review and approval process.
 
 ### Step 2: Approval
diff --git a/pkg/OWNERS b/pkg/OWNERS
new file mode 100644
index 0000000..c3abcf9
--- /dev/null
+++ b/pkg/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_FOUNDATION #{LAST_RESORT_SUGGESTION}
+file:/tools/OWNERS_INFRA #{LAST_RESORT_SUGGESTION}
diff --git a/pkg/_fe_analyzer_shared/OWNERS b/pkg/_fe_analyzer_shared/OWNERS
new file mode 100644
index 0000000..6fd2278
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_ANALYZER
+file:/tools/OWNERS_CFE
diff --git a/pkg/_fe_analyzer_shared/analysis_options_no_lints.yaml b/pkg/_fe_analyzer_shared/analysis_options_no_lints.yaml
index 24c5c54..310a360 100644
--- a/pkg/_fe_analyzer_shared/analysis_options_no_lints.yaml
+++ b/pkg/_fe_analyzer_shared/analysis_options_no_lints.yaml
@@ -19,3 +19,4 @@
     - test/inference/inferred_type_arguments/data/**
     - test/inference/inferred_variable_types/data/**
     - test/inheritance/data/**
+    - test/macros/api/**
diff --git a/pkg/_fe_analyzer_shared/benchmark/macros/serialization_benchmark.dart b/pkg/_fe_analyzer_shared/benchmark/macros/serialization_benchmark.dart
new file mode 100644
index 0000000..01cc969
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/benchmark/macros/serialization_benchmark.dart
@@ -0,0 +1,311 @@
+// 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 'dart:convert';
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+
+void main() async {
+  for (var serializationMode in [
+    SerializationMode.jsonClient,
+    SerializationMode.byteDataClient
+  ]) {
+    await withSerializationMode(serializationMode, () async {
+      await _isolateSpawnBenchmarks();
+      await _isolateSpawnUriBenchmarks();
+      await _separateProcessBenchmarks();
+    });
+  }
+}
+
+Future<void> _isolateSpawnBenchmarks() async {
+  void Function(SendPort) childIsolateFn(SerializationMode mode) =>
+      (SendPort sendPort) => withSerializationMode(mode, () {
+            var isolateReceivePort = ReceivePort();
+            isolateReceivePort.listen((data) {
+              deserialize(data);
+              var result = serialize();
+              result = result is Uint8List
+                  ? TransferableTypedData.fromList([result])
+                  : result;
+              sendPort.send(result);
+            });
+            sendPort.send(isolateReceivePort.sendPort);
+          });
+
+  Completer? responseCompleter;
+  late SendPort sendPort;
+
+  var receivePort = ReceivePort();
+
+  var isolate = await Isolate.spawn(
+      childIsolateFn(serializationMode), receivePort.sendPort);
+
+  final sendPortCompleter = Completer<SendPort>();
+  receivePort.listen((data) {
+    if (!sendPortCompleter.isCompleted) {
+      sendPortCompleter.complete(data);
+    } else {
+      responseCompleter!.complete(data);
+    }
+  });
+  sendPort = await sendPortCompleter.future;
+
+  // warmup
+  for (var i = 0; i < 100; i++) {
+    responseCompleter = Completer();
+    var result = serialize();
+    result =
+        result is Uint8List ? TransferableTypedData.fromList([result]) : result;
+    sendPort.send(result);
+    deserialize(await responseCompleter.future);
+  }
+  // measure
+  var watch = Stopwatch()..start();
+  for (var i = 0; i < 100; i++) {
+    responseCompleter = Completer();
+    var result = serialize();
+    result =
+        result is Uint8List ? TransferableTypedData.fromList([result]) : result;
+    sendPort.send(result);
+    deserialize(await responseCompleter.future);
+  }
+  print('Isolate.spawn + $serializationMode: ${watch.elapsed}');
+
+  receivePort.close();
+  isolate.kill();
+}
+
+Future<void> _isolateSpawnUriBenchmarks() async {
+  Completer? responseCompleter;
+  late SendPort sendPort;
+
+  var receivePort = ReceivePort();
+
+  var isolate = await Isolate.spawnUri(
+      Uri.dataFromString(childProgram(serializationMode)),
+      [],
+      receivePort.sendPort);
+
+  final sendPortCompleter = Completer<SendPort>();
+  receivePort.listen((data) {
+    if (!sendPortCompleter.isCompleted) {
+      sendPortCompleter.complete(data);
+    } else {
+      responseCompleter!.complete(data);
+    }
+  });
+  sendPort = await sendPortCompleter.future;
+
+  // warmup
+  for (var i = 0; i < 100; i++) {
+    responseCompleter = Completer();
+    var result = serialize();
+    result =
+        result is Uint8List ? TransferableTypedData.fromList([result]) : result;
+    sendPort.send(result);
+    deserialize(await responseCompleter.future);
+  }
+  // measure
+  var watch = Stopwatch()..start();
+  for (var i = 0; i < 100; i++) {
+    responseCompleter = Completer();
+    var result = serialize();
+    result =
+        result is Uint8List ? TransferableTypedData.fromList([result]) : result;
+    sendPort.send(result);
+    deserialize(await responseCompleter.future);
+  }
+  print('Isolate.spawnUri + $serializationMode: ${watch.elapsed}');
+
+  receivePort.close();
+  isolate.kill();
+}
+
+Future<void> _separateProcessBenchmarks() async {
+  Completer? responseCompleter;
+
+  var tmpDir = Directory.systemTemp.createTempSync('serialize_bench');
+  try {
+    var file = File(tmpDir.uri.resolve('main.dart').toFilePath());
+    file.writeAsStringSync(childProgram(serializationMode));
+    var process = await Process.start(Platform.resolvedExecutable, [
+      '--packages=' + (await Isolate.packageConfig)!.toFilePath(),
+      file.path,
+    ]);
+
+    var listeners = <StreamSubscription>[
+      process.stderr.listen((event) {
+        print('stderr: ${utf8.decode(event)}');
+      }),
+      process.stdout.listen((data) {
+        responseCompleter!.complete(data);
+      }),
+    ];
+
+    // warmup
+    for (var i = 0; i < 100; i++) {
+      responseCompleter = Completer();
+      var result = serialize();
+      if (result is List<int>) {
+        process.stdin.add(result);
+      } else {
+        process.stdin.writeln(jsonEncode(result));
+      }
+      deserialize(await responseCompleter.future);
+    }
+    // measure
+    var watch = Stopwatch()..start();
+    for (var i = 0; i < 100; i++) {
+      responseCompleter = Completer();
+      var result = serialize();
+      if (result is List<int>) {
+        process.stdin.add(result);
+      } else {
+        process.stdin.writeln(jsonEncode(result));
+      }
+      deserialize(await responseCompleter.future);
+    }
+    print('Separate process + $serializationMode: ${watch.elapsed}');
+
+    listeners.forEach((l) => l.cancel());
+    process.kill();
+  } catch (e, s) {
+    print('Error running benchmark \n$e\n\n$s');
+  } finally {
+    tmpDir.deleteSync(recursive: true);
+  }
+}
+
+String childProgram(SerializationMode mode) => '''
+      import 'dart:convert';
+      import 'dart:io';
+      import 'dart:isolate';
+      import 'dart:typed_data';
+
+      import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+
+      void main(_, [SendPort? sendPort]) {
+        var mode = $mode;
+        withSerializationMode(mode, () {
+          if (sendPort != null) {
+              var isolateReceivePort = ReceivePort();
+              isolateReceivePort.listen((data) {
+                deserialize(data);
+                var result = serialize();
+                result = result is Uint8List
+                    ? TransferableTypedData.fromList([result])
+                    : result;
+                sendPort.send(result);
+              });
+              sendPort.send(isolateReceivePort.sendPort);
+          } else {
+            // We allow one empty line to work around some weird data.
+            var allowEmpty = true;
+            stdin.listen((data) {
+              if (mode == SerializationMode.jsonClient || mode == SerializationMode.jsonServer) {
+                var json = utf8.decode(data).trimRight();
+                // On exit we tend to get extra empty lines sometimes?
+                if (json.isEmpty && allowEmpty) {
+                  allowEmpty = false;
+                  return;
+                }
+                deserialize(jsonDecode(json));
+                stdout.write(jsonEncode(serialize()));
+              } else {
+                deserialize(data);
+                stdout.add(serialize() as List<int>);
+              }
+            });
+          }
+        });
+      }
+
+      Object? serialize() {
+        var serializer = serializerFactory();
+        for (var i = 0; i < 100; i++) {
+          serializer.addInt(i * 100);
+          serializer.addString('foo' * i);
+          serializer.addBool(i % 2 == 0);
+          serializer.startList();
+          for (var j = 0; j < 10; j++) {
+            serializer.addDouble(i * 5);
+          }
+          serializer.endList();
+          serializer.addNull();
+        }
+        return serializer.result;
+      }
+
+      void deserialize(Object? result) {
+        result = result is TransferableTypedData
+            ? result.materialize().asUint8List()
+            : result;
+        var deserializer = deserializerFactory(result);
+        while (deserializer.moveNext()) {
+          deserializer
+            ..expectInt()
+            ..moveNext()
+            ..expectString()
+            ..moveNext()
+            ..expectBool()
+            ..moveNext()
+            ..expectList();
+          while (deserializer.moveNext()) {
+            deserializer.expectDouble();
+          }
+          deserializer
+            ..moveNext()
+            ..checkNull();
+        }
+      }''';
+
+Object? serialize() {
+  var serializer = serializerFactory();
+  for (var i = -50; i < 50; i++) {
+    serializer.addInt(i % 2 * 100);
+    serializer.addString('foo' * i);
+    serializer.addBool(i < 0);
+    serializer.startList();
+    for (var j = 0.0; j < 10; j++) {
+      serializer.addDouble(i * j);
+    }
+    serializer.endList();
+    serializer.addNull();
+  }
+  return serializer.result;
+}
+
+void deserialize(Object? result) {
+  result = result is TransferableTypedData
+      ? result.materialize().asUint8List()
+      : result;
+  if (serializationMode == SerializationMode.jsonClient ||
+      serializationMode == SerializationMode.jsonServer) {
+    if (result is List<int>) {
+      result = jsonDecode(utf8.decode(result));
+    }
+  }
+  var deserializer = deserializerFactory(result);
+  while (deserializer.moveNext()) {
+    deserializer
+      ..expectInt()
+      ..moveNext()
+      ..expectString()
+      ..moveNext()
+      ..expectBool()
+      ..moveNext()
+      ..expectList();
+    while (deserializer.moveNext()) {
+      deserializer.expectDouble();
+    }
+    deserializer
+      ..moveNext()
+      ..checkNull();
+  }
+}
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 f10269c..03669ef 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/builders.dart
@@ -8,11 +8,28 @@
 /// as augment existing ones.
 abstract class Builder {}
 
+/// Allows you to resolve arbitrary [Identifier]s.
+///
+/// This class will likely disappear entirely once we have a different
+/// mechanism.
+abstract class IdentifierResolver {
+  /// Returns an [Identifier] for a top level [name] in [library].
+  ///
+  /// You should only do this for libraries that are definitely in the
+  /// transitive import graph of the library you are generating code into.
+  @Deprecated(
+      'This api should eventually be replaced with a different, safer API.')
+  Future<Identifier> resolveIdentifier(Uri library, String name);
+}
+
 /// The api used by [Macro]s to contribute new type declarations to the
 /// current library, and get [TypeAnnotation]s from runtime [Type] objects.
-abstract class TypeBuilder implements Builder {
+abstract class TypeBuilder implements Builder, IdentifierResolver {
   /// Adds a new type declaration to the surrounding library.
-  void declareType(DeclarationCode typeDeclaration);
+  ///
+  /// The [name] must match the name of the new [typeDeclaration] (this does
+  /// not include any type parameters, just the name).
+  void declareType(String name, DeclarationCode typeDeclaration);
 }
 
 /// The interface used to create [StaticType] instances, which are used to
@@ -21,21 +38,14 @@
 /// This api is only available to the declaration and definition phases of
 /// macro expansion.
 abstract class TypeResolver {
-  /// Resolves [typeAnnotation] to a [StaticType].
+  /// Instantiates a new [StaticType] for a given [type] annotation.
   ///
-  /// Throws an error if the type annotation cannot be resolved. This should
-  /// only happen in the case of incomplete or invalid programs, but macros
-  /// may be asked to run in this state during the development cycle. It is
-  /// helpful for users if macros provide a best effort implementation in that
-  /// case or handle the error in a useful way.
-  Future<StaticType> instantiateType(covariant TypeAnnotation typeAnnotation);
-
-  /// Instantiates a new [StaticType] for a given [code] expression, which must
-  /// be a type expression.
-  ///
-  /// All type identifiers in [code] must be instances of [Identifier] and not
-  /// bare strings.
-  Future<StaticType> instantiateCode(ExpressionCode code);
+  /// Throws an error if the [type] object contains [Identifier]s which cannot
+  /// be resolved. This should only happen in the case of incomplete or invalid
+  /// programs, but macros may be asked to run in this state during the
+  /// development cycle. It may be helpful for users if macros provide a best
+  /// effort implementation in that case or handle the error in a useful way.
+  Future<StaticType> resolve(TypeAnnotationCode type);
 }
 
 /// The api used to introspect on a [ClassDeclaration].
@@ -79,7 +89,7 @@
 ///
 /// Can also be used to do subtype checks on types.
 abstract class DeclarationBuilder
-    implements Builder, TypeResolver, ClassIntrospector {
+    implements Builder, IdentifierResolver, TypeResolver, ClassIntrospector {
   /// Adds a new regular declaration to the surrounding library.
   ///
   /// Note that type declarations are not supported.
@@ -110,6 +120,7 @@
 abstract class DefinitionBuilder
     implements
         Builder,
+        IdentifierResolver,
         TypeResolver,
         ClassIntrospector,
         TypeDeclarationResolver {}
@@ -117,19 +128,19 @@
 /// The apis used by [Macro]s that run on classes, to fill in the definitions
 /// of any external declarations within that class.
 abstract class ClassDefinitionBuilder implements DefinitionBuilder {
-  /// Retrieve a [VariableDefinitionBuilder] for a field by [identifier].
+  /// Retrieve a [VariableDefinitionBuilder] for a field with [identifier].
   ///
   /// Throws an [ArgumentError] if [identifier] does not refer to a field in
   /// this class.
   Future<VariableDefinitionBuilder> buildField(Identifier identifier);
 
-  /// Retrieve a [FunctionDefinitionBuilder] for a method by [identifier].
+  /// Retrieve a [FunctionDefinitionBuilder] for a method with [identifier].
   ///
   /// Throws an [ArgumentError] if [identifier] does not refer to a method in
   /// this class.
   Future<FunctionDefinitionBuilder> buildMethod(Identifier identifier);
 
-  /// Retrieve a [ConstructorDefinitionBuilder] for a constructor by
+  /// Retrieve a [ConstructorDefinitionBuilder] for a constructor with
   /// [identifier].
   ///
   /// Throws an [ArgumentError] if [identifier] does not refer to a constructor
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 e7af1bd..6563aef 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
@@ -32,18 +32,6 @@
   DeclarationCode.fromParts(List<Object> parts) : super.fromParts(parts);
 }
 
-/// A piece of code representing a syntactically valid element.
-///
-/// Should not include any trailing commas,
-class ElementCode extends Code {
-  @override
-  CodeKind get kind => CodeKind.element;
-
-  ElementCode.fromString(String code) : super.fromString(code);
-
-  ElementCode.fromParts(List<Object> parts) : super.fromParts(parts);
-}
-
 /// A piece of code representing a syntactically valid expression.
 class ExpressionCode extends Code {
   @override
@@ -69,67 +57,200 @@
   FunctionBodyCode.fromParts(List<Object> parts) : super.fromParts(parts);
 }
 
-/// A piece of code identifying a named argument.
-///
-/// This should not include any trailing commas.
-class NamedArgumentCode extends Code {
-  @override
-  CodeKind get kind => CodeKind.namedArgument;
-
-  NamedArgumentCode.fromString(String code) : super.fromString(code);
-
-  NamedArgumentCode.fromParts(List<Object> parts) : super.fromParts(parts);
-}
-
 /// A piece of code identifying a syntactically valid function parameter.
 ///
-/// This should not include any trailing commas, but may include modifiers
-/// such as `required`, and default values.
+/// There is no distinction here made between named and positional parameters.
 ///
-/// There is no distinction here made between named and positional parameters,
-/// nor between optional or required parameters. It is the job of the user to
-/// construct and combine these together in a way that creates valid parameter
-/// lists.
-class ParameterCode extends Code {
+/// It is the job of the user to construct and combine these together in a way
+/// that creates valid parameter lists.
+class ParameterCode implements Code {
+  final Code? defaultValue;
+  final List<String> keywords;
+  final String name;
+  final TypeAnnotationCode? type;
+
   @override
   CodeKind get kind => CodeKind.parameter;
 
-  ParameterCode.fromString(String code) : super.fromString(code);
-
-  ParameterCode.fromParts(List<Object> parts) : super.fromParts(parts);
-}
-
-/// A piece of code representing a syntactically valid statement.
-///
-/// Should always end with a semicolon.
-class StatementCode extends Code {
   @override
-  CodeKind get kind => CodeKind.statement;
+  List<Object> get parts => [
+        if (keywords.isNotEmpty) ...[
+          ...keywords.joinAsCode(' '),
+          ' ',
+        ],
+        if (type != null) ...[
+          type!,
+          ' ',
+        ],
+        name,
+        if (defaultValue != null) ...[
+          ' = ',
+          defaultValue!,
+        ]
+      ];
 
-  StatementCode.fromString(String code) : super.fromString(code);
-
-  StatementCode.fromParts(List<Object> parts) : super.fromParts(parts);
+  ParameterCode({
+    this.defaultValue,
+    this.keywords = const [],
+    required this.name,
+    this.type,
+  });
 }
 
-extension Join<T extends Code> on List<T> {
+/// A piece of code representing a type annotation.
+abstract class TypeAnnotationCode implements Code {
+  /// Returns a [TypeAnnotationCode] object which is a non-nullable version
+  /// of this one.
+  ///
+  /// Returns the current instance if it is already non-nullable.
+  TypeAnnotationCode get asNonNullable => this;
+
+  /// Returns a [TypeAnnotationCode] object which is a non-nullable version
+  /// of this one.
+  ///
+  /// Returns the current instance if it is already nullable.
+  NullableTypeAnnotationCode get asNullable =>
+      new NullableTypeAnnotationCode(this);
+
+  /// Whether or not this type is nullable.
+  bool get isNullable => false;
+}
+
+/// The nullable version of an underlying type annotation.
+class NullableTypeAnnotationCode implements TypeAnnotationCode {
+  /// The underlying type that is being made nullable.
+  TypeAnnotationCode underlyingType;
+
+  @override
+  CodeKind get kind => CodeKind.nullableTypeAnnotation;
+
+  @override
+  List<Object> get parts => [...underlyingType.parts, '?'];
+
+  /// Creates a nullable [underlyingType] annotation.
+  ///
+  /// If [underlyingType] is a NullableTypeAnnotationCode, returns that
+  /// same type.
+  NullableTypeAnnotationCode(this.underlyingType);
+
+  @override
+  TypeAnnotationCode get asNonNullable => underlyingType;
+
+  @override
+  NullableTypeAnnotationCode get asNullable => this;
+
+  @override
+  bool get isNullable => true;
+}
+
+/// A piece of code representing a reference to a named type.
+class NamedTypeAnnotationCode extends TypeAnnotationCode {
+  final Identifier name;
+
+  final List<TypeAnnotationCode> typeArguments;
+
+  @override
+  CodeKind get kind => CodeKind.namedTypeAnnotation;
+
+  @override
+  List<Object> get parts => [
+        name,
+        if (typeArguments.isNotEmpty) ...[
+          '<',
+          ...typeArguments.joinAsCode(', '),
+          '>',
+        ],
+      ];
+
+  NamedTypeAnnotationCode({required this.name, this.typeArguments = const []});
+}
+
+/// A piece of code representing a function type annotation.
+class FunctionTypeAnnotationCode extends TypeAnnotationCode {
+  final List<ParameterCode> namedParameters;
+
+  final List<ParameterCode> positionalParameters;
+
+  final TypeAnnotationCode? returnType;
+
+  final List<TypeParameterCode> typeParameters;
+
+  @override
+  CodeKind get kind => CodeKind.functionTypeAnnotation;
+
+  @override
+  List<Object> get parts => [
+        if (returnType != null) returnType!,
+        ' Function',
+        if (typeParameters.isNotEmpty) ...[
+          '<',
+          ...typeParameters.joinAsCode(', '),
+          '>',
+        ],
+        '(',
+        for (ParameterCode positional in positionalParameters) ...[
+          positional,
+          ', ',
+        ],
+        if (namedParameters.isNotEmpty) ...[
+          '{',
+          for (ParameterCode named in namedParameters) ...[
+            named,
+            ', ',
+          ],
+          '}',
+        ],
+        ')',
+      ];
+
+  FunctionTypeAnnotationCode({
+    this.namedParameters = const [],
+    this.positionalParameters = const [],
+    this.returnType,
+    this.typeParameters = const [],
+  });
+}
+
+/// A piece of code representing a valid named type parameter.
+class TypeParameterCode implements Code {
+  final TypeAnnotationCode? bound;
+  final String name;
+
+  @override
+  CodeKind get kind => CodeKind.typeParameter;
+
+  @override
+  List<Object> get parts => [
+        name,
+        if (bound != null) ...[
+          ' extends ',
+          bound!,
+        ]
+      ];
+
+  TypeParameterCode({this.bound, required this.name});
+}
+
+extension Join<T extends Object> on List<T> {
   /// Joins all the items in [this] with [separator], and returns
   /// a new list.
-  List<Code> joinAsCode(String separator) => [
+  List<Object> joinAsCode(String separator) => [
         for (int i = 0; i < length - 1; i++) ...[
           this[i],
-          new Code.fromString(separator),
+          separator,
         ],
         last,
       ];
 }
 
 enum CodeKind {
-  raw,
   declaration,
-  element,
   expression,
   functionBody,
-  namedArgument,
+  functionTypeAnnotation,
+  namedTypeAnnotation,
+  nullableTypeAnnotation,
   parameter,
-  statement,
+  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 11fd6c3..c24cd91 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
@@ -24,10 +24,9 @@
   /// trailing `?`)
   bool get isNullable;
 
-  /// A convenience method to get a [Code] object representation of this full
-  /// type annotation, including support for generic type arguments as well as
-  /// function types.
-  Code get code;
+  /// A convenience method to get a [Code] object equivalent to this type
+  /// annotation.
+  TypeAnnotationCode get code;
 }
 
 /// The base class for function type declarations.
@@ -83,6 +82,9 @@
 abstract class ClassMemberDeclaration implements Declaration {
   /// The class that defines this method.
   Identifier get definingClass;
+
+  /// Whether or not this is a static member.
+  bool get isStatic;
 }
 
 /// A declaration that defines a new type in the program.
@@ -131,6 +133,9 @@
   /// Whether this function has an `external` modifier.
   bool get isExternal;
 
+  /// Whether this function is an operator.
+  bool get isOperator;
+
   /// Whether this function is actually a getter.
   bool get isGetter;
 
@@ -173,10 +178,6 @@
 
   /// The type of this field.
   TypeAnnotation get type;
-
-  /// A [ExpressionCode] object representing the initializer for this field, if
-  /// present.
-  ExpressionCode? get initializer;
 }
 
 /// Field introspection information.
@@ -195,13 +196,19 @@
   /// parameter or an optional parameter with the `required` keyword.
   bool get isRequired;
 
-  /// A [Code] object representing the default value for this parameter, if
-  /// present. Can be used to copy default values to other parameters.
-  Code? get defaultValue;
+  /// A convenience method to get a `code` object equivalent to this parameter.
+  ///
+  /// Note that the original default value will not be included, as it is not a
+  /// part of this API.
+  ParameterCode get code;
 }
 
 /// Type parameter introspection information.
 abstract class TypeParameterDeclaration implements Declaration {
-  /// The bounds for this type parameter, if it has any.
-  TypeAnnotation? get bounds;
+  /// The bound for this type parameter, if it has any.
+  TypeAnnotation? get bound;
+
+  /// A convenience method to get a `code` object equivalent to this type
+  /// parameter.
+  TypeParameterCode get code;
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
index f604c80..a645eae 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
@@ -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.
 
+import 'executor/serialization.dart'
+    show SerializationMode, SerializationModeHelpers;
+
 /// Generates a Dart program for a given set of macros, which can be compiled
 /// and then passed as a precompiled kernel file to `MacroExecutor.loadMacro`.
 ///
 /// The [macroDeclarations] is a map from library URIs to macro classes for the
 /// macros supported. The macro classes are provided as a map from macro class
 /// names to the names of the macro class constructors.
+///
+/// The [serializationMode] must be a client variant.
 String bootstrapMacroIsolate(
-    Map<String, Map<String, List<String>>> macroDeclarations) {
+    Map<String, Map<String, List<String>>> macroDeclarations,
+    SerializationMode serializationMode) {
+  if (!serializationMode.isClient) {
+    throw new ArgumentError(
+        'Got $serializationMode but expected a client version.');
+  }
   StringBuffer imports = new StringBuffer();
   StringBuffer constructorEntries = new StringBuffer();
   macroDeclarations
@@ -26,75 +36,119 @@
       constructorEntries.writeln('},');
     });
   });
-  return template.replaceFirst(_importMarker, imports.toString()).replaceFirst(
-      _macroConstructorEntriesMarker, constructorEntries.toString());
+  return template
+      .replaceFirst(_importMarker, imports.toString())
+      .replaceFirst(
+          _macroConstructorEntriesMarker, constructorEntries.toString())
+      .replaceFirst(_modeMarker, serializationMode.asCode);
 }
 
 const String _importMarker = '{{IMPORT}}';
 const String _macroConstructorEntriesMarker = '{{MACRO_CONSTRUCTOR_ENTRIES}}';
+const String _modeMarker = '{{SERIALIZATION_MODE}}';
 
 const String template = '''
 import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
 import 'dart:isolate';
+import 'dart:typed_data';
 
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/execute_macro.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/response_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/serialization.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/protocol.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/execute_macro.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/message_grouper.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/response_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/protocol.dart';
 import 'package:_fe_analyzer_shared/src/macros/executor.dart';
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 
 $_importMarker
 
-/// Entrypoint to be spawned with [Isolate.spawnUri].
+/// Entrypoint to be spawned with [Isolate.spawnUri] or [Process.start].
 ///
 /// Supports the client side of the macro expansion protocol.
-void main(_, SendPort sendPort) {
-  /// Local function that sends requests and returns responses using [sendPort].
-  Future<Response> sendRequest(Request request) => _sendRequest(request, sendPort);
+void main(_, [SendPort? sendPort]) {
+  // Function that sends the result of a [Serializer] using either [sendPort]
+  // or [stdout].
+  void Function(Serializer) sendResult;
 
-  withSerializationMode(SerializationMode.client, () {
-    ReceivePort receivePort = new ReceivePort();
-    sendPort.send(receivePort.sendPort);
+  // The stream for incoming messages, could be either a ReceivePort or stdin.
+  Stream<Object?> messageStream;
 
-    receivePort.listen((message) async {
-      var deserializer = JsonDeserializer(message as Iterable<Object?>)
-          ..moveNext();
-      int zoneId = deserializer.expectNum();
-      deserializer..moveNext();
-      var type = MessageType.values[deserializer.expectNum()];
-      var serializer = JsonSerializer();
-      switch (type) {
-        case MessageType.instantiateMacroRequest:
-          var request = new InstantiateMacroRequest.deserialize(deserializer, zoneId);
-          (await _instantiateMacro(request)).serialize(serializer);
-          break;
-        case MessageType.executeDeclarationsPhaseRequest:
-          var request = new ExecuteDeclarationsPhaseRequest.deserialize(deserializer, zoneId);
-          (await _executeDeclarationsPhase(request, sendRequest)).serialize(serializer);
-          break;
-        case MessageType.executeDefinitionsPhaseRequest:
-          var request = new ExecuteDefinitionsPhaseRequest.deserialize(deserializer, zoneId);
-          (await _executeDefinitionsPhase(request, sendRequest)).serialize(serializer);
-          break;
-        case MessageType.executeTypesPhaseRequest:
-          var request = new ExecuteTypesPhaseRequest.deserialize(deserializer, zoneId);
-          (await _executeTypesPhase(request, sendRequest)).serialize(serializer);
-          break;
-        case MessageType.response:
-          var response = new SerializableResponse.deserialize(deserializer, zoneId);
-          _responseCompleters.remove(response.requestId)!.complete(response);
-          return;
-        default:
-          throw new StateError('Unhandled event type \$type');
+  withSerializationMode($_modeMarker, () {
+    if (sendPort != null) {
+      ReceivePort receivePort = new ReceivePort();
+      messageStream = receivePort;
+      sendResult = (Serializer serializer) =>
+          _sendIsolateResult(serializer, sendPort);
+      // If using isolate communication, first send a sendPort to the parent
+      // isolate.
+      sendPort.send(receivePort.sendPort);
+    } else {
+      sendResult = _sendStdoutResult;
+      if (serializationMode == SerializationMode.byteDataClient) {
+        messageStream = MessageGrouper(stdin).messageStream;
+      } else if (serializationMode == SerializationMode.jsonClient) {
+        messageStream = stdin
+          .transform(const Utf8Decoder())
+          .transform(const LineSplitter())
+          .map((line) => jsonDecode(line)!);
+      } else {
+        throw new UnsupportedError(
+            'Unsupported serialization mode \$serializationMode for '
+            'ProcessExecutor');
       }
-      sendPort.send(serializer.result);
-    });
+    }
+
+    messageStream.listen((message) => _handleMessage(message, sendResult));
   });
 }
 
+void _handleMessage(
+    Object? message, void Function(Serializer) sendResult) async {
+  // Serializes `request` and send it using `sendResult`.
+  Future<Response> sendRequest(Request request) =>
+      _sendRequest(request, sendResult);
+
+  if (serializationMode == SerializationMode.byteDataClient
+      && message is TransferableTypedData) {
+    message = message.materialize().asUint8List();
+  }
+  var deserializer = deserializerFactory(message)
+      ..moveNext();
+  int zoneId = deserializer.expectInt();
+  deserializer..moveNext();
+  var type = MessageType.values[deserializer.expectInt()];
+  var serializer = serializerFactory();
+  switch (type) {
+    case MessageType.instantiateMacroRequest:
+      var request = new InstantiateMacroRequest.deserialize(deserializer, zoneId);
+      (await _instantiateMacro(request)).serialize(serializer);
+      break;
+    case MessageType.executeDeclarationsPhaseRequest:
+      var request = new ExecuteDeclarationsPhaseRequest.deserialize(deserializer, zoneId);
+      (await _executeDeclarationsPhase(request, sendRequest)).serialize(serializer);
+      break;
+    case MessageType.executeDefinitionsPhaseRequest:
+      var request = new ExecuteDefinitionsPhaseRequest.deserialize(deserializer, zoneId);
+      (await _executeDefinitionsPhase(request, sendRequest)).serialize(serializer);
+      break;
+    case MessageType.executeTypesPhaseRequest:
+      var request = new ExecuteTypesPhaseRequest.deserialize(deserializer, zoneId);
+      (await _executeTypesPhase(request, sendRequest)).serialize(serializer);
+      break;
+    case MessageType.response:
+      var response = new SerializableResponse.deserialize(deserializer, zoneId);
+      _responseCompleters.remove(response.requestId)!.complete(response);
+      return;
+    default:
+      throw new StateError('Unhandled event type \$type');
+  }
+  sendResult(serializer);
+}
+
 /// Maps macro identifiers to constructors.
 final _macroConstructors = <MacroClassIdentifierImpl, Map<String, Macro Function()>>{
   $_macroConstructorEntriesMarker
@@ -122,7 +176,7 @@
       for (MapEntry<String, Object?> entry in request.arguments.named.entries)
         new Symbol(entry.key): entry.value,
     }) as Macro;
-    var identifier = new MacroInstanceIdentifierImpl(instance);
+    var identifier = new MacroInstanceIdentifierImpl(instance, request.instanceId);
     _macroInstances[identifier] = instance;
     return new SerializableResponse(
         responseType: MessageType.macroInstanceIdentifier,
@@ -148,8 +202,13 @@
       throw new StateError('Unrecognized macro instance \${request.macro}\\n'
           'Known instances: \$_macroInstances)');
     }
+    var identifierResolver = ClientIdentifierResolver(
+        sendRequest,
+        remoteInstance: request.identifierResolver,
+        serializationZoneId: request.serializationZoneId);
 
-    var result = await executeTypesMacro(instance, request.declaration);
+    var result = await executeTypesMacro(
+        instance, request.declaration, identifierResolver);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
@@ -174,6 +233,10 @@
       throw new StateError('Unrecognized macro instance \${request.macro}\\n'
           'Known instances: \$_macroInstances)');
     }
+    var identifierResolver = ClientIdentifierResolver(
+        sendRequest,
+        remoteInstance: request.identifierResolver,
+        serializationZoneId: request.serializationZoneId);
     var classIntrospector = ClientClassIntrospector(
         sendRequest,
         remoteInstance: request.classIntrospector,
@@ -184,7 +247,8 @@
         serializationZoneId: request.serializationZoneId);
 
     var result = await executeDeclarationsMacro(
-        instance, request.declaration, classIntrospector, typeResolver);
+        instance, request.declaration, identifierResolver, classIntrospector,
+        typeResolver);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
@@ -209,6 +273,10 @@
       throw new StateError('Unrecognized macro instance \${request.macro}\\n'
           'Known instances: \$_macroInstances)');
     }
+    var identifierResolver = ClientIdentifierResolver(
+        sendRequest,
+        remoteInstance: request.identifierResolver,
+        serializationZoneId: request.serializationZoneId);
     var typeResolver = ClientTypeResolver(
         sendRequest,
         remoteInstance: request.typeResolver,
@@ -223,8 +291,8 @@
         serializationZoneId: request.serializationZoneId);
 
     var result = await executeDefinitionMacro(
-        instance, request.declaration, classIntrospector, typeResolver,
-        typeDeclarationResolver);
+        instance, request.declaration, identifierResolver, classIntrospector,
+        typeResolver, typeDeclarationResolver);
     return new SerializableResponse(
         responseType: MessageType.macroExecutionResult,
         response: result,
@@ -243,15 +311,50 @@
 /// Holds on to response completers by request id.
 final _responseCompleters = <int, Completer<Response>>{};
 
-/// Serializes [request], sends it to [sendPort], and sets up a [Completer] in
-/// [_responseCompleters] to handle the response.
-Future<Response> _sendRequest(Request request, SendPort sendPort) {
+/// Serializes [request], passes it to [sendResult], and sets up a [Completer]
+/// in [_responseCompleters] to handle the response.
+Future<Response> _sendRequest(
+    Request request, void Function(Serializer serializer) sendResult) {
   Completer<Response> completer = Completer();
   _responseCompleters[request.id] = completer;
-  JsonSerializer serializer = JsonSerializer();
-  serializer.addNum(request.serializationZoneId);
+  Serializer serializer = serializerFactory();
+  serializer.addInt(request.serializationZoneId);
   request.serialize(serializer);
-  sendPort.send(serializer.result);
+  sendResult(serializer);
   return completer.future;
 }
+
+/// Sends [serializer.result] to [sendPort], possibly wrapping it in a
+/// [TransferableTypedData] object.
+void _sendIsolateResult(Serializer serializer, SendPort sendPort) {
+  if (serializationMode == SerializationMode.byteDataClient) {
+    sendPort.send(
+        TransferableTypedData.fromList([serializer.result as Uint8List]));
+  } else {
+    sendPort.send(serializer.result);
+  }
+}
+
+/// Sends [serializer.result] to [stdout].
+///
+/// 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');
+  }
+}
 ''';
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
index a4c2df3..c80c9a5 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
@@ -4,16 +4,7 @@
 
 import 'api.dart';
 import 'bootstrap.dart'; // For doc comments only.
-import 'executor_shared/serialization.dart';
-
-/// Exposes a platform specific [MacroExecutor], through a top level
-/// `Future<MacroExecutor> start()` function.
-///
-/// TODO: conditionally load isolate_mirrors_executor.dart once conditional
-/// imports of mirrors are supported in AOT (issue #48057).
-import 'fake_executor/fake_executor.dart'
-    if (dart.library.isolate) 'isolated_executor/isolated_executor.dart'
-    as executor_impl show start;
+import 'executor/serialization.dart';
 
 /// The interface used by Dart language implementations, in order to load
 /// and execute macros, as well as produce library augmentations from those
@@ -23,14 +14,6 @@
 /// during macro discovery and expansion, and unifies how augmentation libraries
 /// are produced.
 abstract class MacroExecutor {
-  /// Returns a platform specific [MacroExecutor]. On unsupported platforms this
-  /// will be a fake executor object, which will throw an [UnsupportedError] if
-  /// used.
-  ///
-  /// Note that some implementations will also require calls to [loadMacro]
-  /// to pass a `precompiledKernelUri`.
-  static Future<MacroExecutor> start() => executor_impl.start();
-
   /// Invoked when an implementation discovers a new macro definition in a
   /// [library] with [name], and prepares this executor to run the macro.
   ///
@@ -61,8 +44,8 @@
   /// Runs the type phase for [macro] on a given [declaration].
   ///
   /// Throws an exception if there is an error executing the macro.
-  Future<MacroExecutionResult> executeTypesPhase(
-      MacroInstanceIdentifier macro, covariant Declaration declaration);
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+      covariant Declaration declaration, IdentifierResolver identifierResolver);
 
   /// Runs the declarations phase for [macro] on a given [declaration].
   ///
@@ -70,6 +53,7 @@
   Future<MacroExecutionResult> executeDeclarationsPhase(
       MacroInstanceIdentifier macro,
       covariant Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector);
 
@@ -79,14 +63,18 @@
   Future<MacroExecutionResult> executeDefinitionsPhase(
       MacroInstanceIdentifier macro,
       covariant Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector,
       TypeDeclarationResolver typeDeclarationResolver);
 
   /// Combines multiple [MacroExecutionResult]s into a single library
   /// augmentation file, and returns a [String] representing that file.
-  Future<String> buildAugmentationLibrary(
-      Iterable<MacroExecutionResult> macroResults);
+  ///
+  /// The [resolveIdentifier] argument should return the import uri to be used
+  /// for that identifier.
+  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
+      ResolvedIdentifier Function(Identifier) resolveIdentifier);
 
   /// Tell the executor to shut down and clean up any resources it may have
   /// allocated.
@@ -129,7 +117,7 @@
   static Object? _deserializeArg(Deserializer deserializer,
       {bool alreadyMoved = false}) {
     if (!alreadyMoved) deserializer.moveNext();
-    _ArgumentKind kind = _ArgumentKind.values[deserializer.expectNum()];
+    _ArgumentKind kind = _ArgumentKind.values[deserializer.expectInt()];
     switch (kind) {
       case _ArgumentKind.nil:
         return null;
@@ -139,9 +127,12 @@
       case _ArgumentKind.bool:
         deserializer.moveNext();
         return deserializer.expectBool();
-      case _ArgumentKind.num:
+      case _ArgumentKind.int:
         deserializer.moveNext();
-        return deserializer.expectNum();
+        return deserializer.expectInt();
+      case _ArgumentKind.double:
+        deserializer.moveNext();
+        return deserializer.expectDouble();
       case _ArgumentKind.list:
         deserializer.moveNext();
         deserializer.expectList();
@@ -181,22 +172,26 @@
 
   static void _serializeArg(Object? arg, Serializer serializer) {
     if (arg == null) {
-      serializer.addNum(_ArgumentKind.nil.index);
+      serializer.addInt(_ArgumentKind.nil.index);
     } else if (arg is String) {
       serializer
-        ..addNum(_ArgumentKind.string.index)
+        ..addInt(_ArgumentKind.string.index)
         ..addString(arg);
-    } else if (arg is num) {
+    } else if (arg is int) {
       serializer
-        ..addNum(_ArgumentKind.num.index)
-        ..addNum(arg);
+        ..addInt(_ArgumentKind.int.index)
+        ..addInt(arg);
+    } else if (arg is double) {
+      serializer
+        ..addInt(_ArgumentKind.double.index)
+        ..addDouble(arg);
     } else if (arg is bool) {
       serializer
-        ..addNum(_ArgumentKind.bool.index)
+        ..addInt(_ArgumentKind.bool.index)
         ..addBool(arg);
     } else if (arg is List) {
       serializer
-        ..addNum(_ArgumentKind.list.index)
+        ..addInt(_ArgumentKind.list.index)
         ..startList();
       for (Object? item in arg) {
         _serializeArg(item, serializer);
@@ -204,7 +199,7 @@
       serializer.endList();
     } else if (arg is Map) {
       serializer
-        ..addNum(_ArgumentKind.map.index)
+        ..addInt(_ArgumentKind.map.index)
         ..startList();
       for (MapEntry<Object?, Object?> entry in arg.entries) {
         _serializeArg(entry.key, serializer);
@@ -217,6 +212,45 @@
   }
 }
 
+/// A resolved [Identifier], this is used when creating augmentation libraries
+/// to qualify identifiers where needed.
+class ResolvedIdentifier extends Identifier {
+  /// The import URI for the library that defines the member that is referenced
+  /// by this identifier.
+  ///
+  /// If this identifier is an instance member or a built-in type, like
+  /// `void`, [uri] is `null`.
+  final Uri? uri;
+
+  /// Type of identifier this is (instance, static, top level).
+  final IdentifierKind kind;
+
+  /// The unqualified name of this identifier.
+  @override
+  final String name;
+
+  /// If this is a static member, then the name of the fully qualified scope
+  /// surrounding this member. Should not contain a trailing `.`.
+  ///
+  /// Typically this would just be the name of a type.
+  final String? staticScope;
+
+  ResolvedIdentifier({
+    required this.kind,
+    required this.name,
+    required this.staticScope,
+    required this.uri,
+  });
+}
+
+/// The types of identifiers.
+enum IdentifierKind {
+  instanceMember,
+  local, // Parameters, local variables, etc.
+  staticInstanceMember,
+  topLevelMember,
+}
+
 /// An opaque identifier for a macro class, retrieved by
 /// [MacroExecutor.loadMacro].
 ///
@@ -243,12 +277,16 @@
 /// All modifications are expressed in terms of library augmentation
 /// declarations.
 abstract class MacroExecutionResult implements Serializable {
-  /// Any library imports that should be added to support the code used in
-  /// the augmentations.
-  Iterable<DeclarationCode> get imports;
+  /// Any augmentations that should be applied to a class as a result of
+  /// executing a macro, indexed by the name of the class.
+  Map<String, Iterable<DeclarationCode>> get classAugmentations;
 
-  /// Any augmentations that should be applied as a result of executing a macro.
-  Iterable<DeclarationCode> get augmentations;
+  /// Any augmentations that should be applied to the library as a result of
+  /// executing a macro.
+  Iterable<DeclarationCode> get libraryAugmentations;
+
+  /// The names of any new types declared in [augmentations].
+  Iterable<String> get newTypeNames;
 }
 
 /// Each of the possible types of declarations a macro can be applied to
@@ -274,4 +312,4 @@
 }
 
 /// Used for serializing and deserializing arguments.
-enum _ArgumentKind { string, bool, num, list, map, nil }
+enum _ArgumentKind { string, bool, double, int, list, map, nil }
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
new file mode 100644
index 0000000..fd0b26bc
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/augmentation_library.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.
+
+import '../api.dart';
+import '../executor.dart';
+
+/// A mixin which provides a shared implementation of
+/// [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;
+
+    // Keeps track of the last part written in `lastDirectivePart`.
+    String lastDirectivePart = '';
+    void writeDirectivePart(String part) {
+      lastDirectivePart = part;
+      directivesBuffer.write(part);
+    }
+
+    void buildCode(Code code) {
+      for (Object part in code.parts) {
+        if (part is String) {
+          writeDirectivePart(part);
+        } else if (part is Code) {
+          buildCode(part);
+        } else if (part is Identifier) {
+          ResolvedIdentifier resolved = resolveIdentifier(part);
+          String? prefix;
+          if (resolved.uri != null) {
+            prefix = importPrefixes.putIfAbsent(resolved.uri!, () {
+              String prefix = 'i${nextPrefix++}';
+              importsBuffer.writeln("import '${resolved.uri}' as $prefix;");
+              return prefix;
+            });
+          }
+          if (resolved.kind == IdentifierKind.instanceMember) {
+            // Qualify with `this.` if we don't have a receiver.
+            if (!lastDirectivePart.trimRight().endsWith('.')) {
+              writeDirectivePart('this.');
+            }
+          } else if (prefix != null) {
+            writeDirectivePart('${prefix}.');
+          }
+          if (resolved.kind == IdentifierKind.staticInstanceMember) {
+            writeDirectivePart('${resolved.staticScope!}.');
+          }
+          writeDirectivePart('${part.name}');
+        } else {
+          throw new ArgumentError(
+              'Code objects only support String, Identifier, and Code '
+              'instances but got $part which was not one of those.');
+        }
+      }
+    }
+
+    Map<String, List<DeclarationCode>> mergedClassResults = {};
+    for (MacroExecutionResult result in macroResults) {
+      for (DeclarationCode augmentation in result.libraryAugmentations) {
+        buildCode(augmentation);
+        directivesBuffer.writeln();
+      }
+      for (MapEntry<String, Iterable<DeclarationCode>> entry
+          in result.classAugmentations.entries) {
+        mergedClassResults.update(
+            entry.key, (value) => value..addAll(entry.value),
+            ifAbsent: () => entry.value.toList());
+      }
+    }
+    for (MapEntry<String, List<DeclarationCode>> entry
+        in mergedClassResults.entries) {
+      directivesBuffer.writeln('augment class ${entry.key} {');
+      for (DeclarationCode augmentation in entry.value) {
+        buildCode(augmentation);
+        directivesBuffer.writeln();
+      }
+      directivesBuffer.writeln('}');
+    }
+    return '$importsBuffer\n\n$directivesBuffer';
+  }
+}
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
new file mode 100644
index 0000000..6f522e0
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/builder_impls.dart
@@ -0,0 +1,407 @@
+// 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/executor/introspection_impls.dart';
+
+import '../executor.dart';
+import '../api.dart';
+import 'response_impls.dart';
+
+class TypeBuilderBase implements IdentifierResolver {
+  /// The final result, will be built up over `augment` calls.
+  final List<DeclarationCode> _libraryAugmentations;
+
+  /// The final result, will be built up over `augment` calls.
+  final Map<String, List<DeclarationCode>> _classAugmentations;
+
+  /// The names of any new types added in [_libraryAugmentations].
+  final List<String> _newTypeNames = [];
+
+  final IdentifierResolver identifierResolver;
+
+  /// Creates and returns a [MacroExecutionResult] out of the [_augmentations]
+  /// created by this builder.
+  MacroExecutionResult get result => new MacroExecutionResultImpl(
+        classAugmentations: _classAugmentations,
+        libraryAugmentations: _libraryAugmentations,
+        newTypeNames: _newTypeNames,
+      );
+
+  TypeBuilderBase(this.identifierResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : _classAugmentations = parentClassAugmentations ?? {},
+        _libraryAugmentations = parentLibraryAugmentations ?? [];
+
+  @override
+  Future<Identifier> resolveIdentifier(Uri library, String identifier) =>
+      // ignore: deprecated_member_use_from_same_package
+      identifierResolver.resolveIdentifier(library, identifier);
+}
+
+class TypeBuilderImpl extends TypeBuilderBase implements TypeBuilder {
+  TypeBuilderImpl(IdentifierResolver identifierResolver)
+      : super(identifierResolver);
+
+  @override
+  void declareType(String name, DeclarationCode typeDeclaration) {
+    _newTypeNames.add(name);
+    _libraryAugmentations.add(typeDeclaration);
+  }
+}
+
+/// Base class for all [DeclarationBuilder]s.
+class DeclarationBuilderBase extends TypeBuilderBase
+    implements ClassIntrospector, TypeResolver {
+  final ClassIntrospector classIntrospector;
+  final TypeResolver typeResolver;
+
+  DeclarationBuilderBase(IdentifierResolver identifierResolver,
+      this.classIntrospector, this.typeResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : super(identifierResolver,
+            parentClassAugmentations: parentClassAugmentations,
+            parentLibraryAugmentations: parentLibraryAugmentations);
+
+  @override
+  Future<List<ConstructorDeclaration>> constructorsOf(ClassDeclaration clazz) =>
+      classIntrospector.constructorsOf(clazz);
+
+  @override
+  Future<List<FieldDeclaration>> fieldsOf(ClassDeclaration clazz) =>
+      classIntrospector.fieldsOf(clazz);
+
+  @override
+  Future<List<ClassDeclaration>> interfacesOf(ClassDeclaration clazz) =>
+      classIntrospector.interfacesOf(clazz);
+
+  @override
+  Future<List<MethodDeclaration>> methodsOf(ClassDeclaration clazz) =>
+      classIntrospector.methodsOf(clazz);
+
+  @override
+  Future<List<ClassDeclaration>> mixinsOf(ClassDeclaration clazz) =>
+      classIntrospector.mixinsOf(clazz);
+
+  @override
+  Future<ClassDeclaration?> superclassOf(ClassDeclaration clazz) =>
+      classIntrospector.superclassOf(clazz);
+
+  @override
+  Future<StaticType> resolve(TypeAnnotationCode code) =>
+      typeResolver.resolve(code);
+}
+
+class DeclarationBuilderImpl extends DeclarationBuilderBase
+    implements DeclarationBuilder {
+  DeclarationBuilderImpl(IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector, TypeResolver typeResolver)
+      : super(identifierResolver, classIntrospector, typeResolver);
+
+  @override
+  void declareInLibrary(DeclarationCode declaration) {
+    _libraryAugmentations.add(declaration);
+  }
+}
+
+class ClassMemberDeclarationBuilderImpl extends DeclarationBuilderImpl
+    implements ClassMemberDeclarationBuilder {
+  final Identifier definingClass;
+
+  ClassMemberDeclarationBuilderImpl(
+      this.definingClass,
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver)
+      : super(identifierResolver, classIntrospector, typeResolver);
+
+  @override
+  void declareInClass(DeclarationCode declaration) {
+    _classAugmentations.update(
+        definingClass.name, (value) => value..add(declaration),
+        ifAbsent: () => [declaration]);
+  }
+}
+
+/// Base class for all [DefinitionBuilder]s.
+class DefinitionBuilderBase extends DeclarationBuilderBase
+    implements TypeDeclarationResolver {
+  final TypeDeclarationResolver typeDeclarationResolver;
+
+  DefinitionBuilderBase(
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver,
+      this.typeDeclarationResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : super(identifierResolver, classIntrospector, typeResolver,
+            parentClassAugmentations: parentClassAugmentations,
+            parentLibraryAugmentations: parentLibraryAugmentations);
+
+  @override
+  Future<TypeDeclaration> declarationOf(IdentifierImpl identifier) =>
+      typeDeclarationResolver.declarationOf(identifier);
+}
+
+class ClassDefinitionBuilderImpl extends DefinitionBuilderBase
+    implements ClassDefinitionBuilder {
+  /// The declaration this is a builder for.
+  final ClassDeclaration declaration;
+
+  ClassDefinitionBuilderImpl(
+      this.declaration,
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver,
+      TypeDeclarationResolver typeDeclarationResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
+            parentClassAugmentations: parentClassAugmentations,
+            parentLibraryAugmentations: parentLibraryAugmentations);
+
+  @override
+  Future<ConstructorDefinitionBuilder> buildConstructor(
+      Identifier identifier) async {
+    ConstructorDeclaration constructor =
+        (await classIntrospector.constructorsOf(declaration))
+            .firstWhere((constructor) => constructor.identifier == identifier);
+    return new ConstructorDefinitionBuilderImpl(constructor, identifierResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver,
+        parentClassAugmentations: _classAugmentations,
+        parentLibraryAugmentations: _libraryAugmentations);
+  }
+
+  @override
+  Future<VariableDefinitionBuilder> buildField(Identifier identifier) async {
+    FieldDeclaration field = (await classIntrospector.fieldsOf(declaration))
+        .firstWhere((field) => field.identifier == identifier);
+    return new VariableDefinitionBuilderImpl(field, identifierResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver,
+        parentClassAugmentations: _classAugmentations,
+        parentLibraryAugmentations: _libraryAugmentations);
+  }
+
+  @override
+  Future<FunctionDefinitionBuilder> buildMethod(Identifier identifier) async {
+    MethodDeclaration method = (await classIntrospector.methodsOf(declaration))
+        .firstWhere((method) => method.identifier == identifier);
+    return new FunctionDefinitionBuilderImpl(method, identifierResolver,
+        classIntrospector, typeResolver, typeDeclarationResolver,
+        parentClassAugmentations: _classAugmentations,
+        parentLibraryAugmentations: _libraryAugmentations);
+  }
+}
+
+/// Implementation of [FunctionDefinitionBuilder].
+class FunctionDefinitionBuilderImpl extends DefinitionBuilderBase
+    implements FunctionDefinitionBuilder {
+  final FunctionDeclaration declaration;
+
+  FunctionDefinitionBuilderImpl(
+      this.declaration,
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver,
+      TypeDeclarationResolver typeDeclarationResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
+            parentClassAugmentations: parentClassAugmentations,
+            parentLibraryAugmentations: parentLibraryAugmentations);
+
+  @override
+  void augment(FunctionBodyCode body) {
+    DeclarationCode augmentation =
+        _buildFunctionAugmentation(body, declaration);
+    if (declaration is ClassMemberDeclaration) {
+      _classAugmentations.update(
+          (declaration as ClassMemberDeclaration).definingClass.name,
+          (value) => value..add(augmentation),
+          ifAbsent: () => [augmentation]);
+    } else {
+      _libraryAugmentations.add(augmentation);
+    }
+  }
+}
+
+class ConstructorDefinitionBuilderImpl extends DefinitionBuilderBase
+    implements ConstructorDefinitionBuilder {
+  final ConstructorDeclaration declaration;
+
+  ConstructorDefinitionBuilderImpl(
+      this.declaration,
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver,
+      TypeDeclarationResolver typeDeclarationResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
+            parentClassAugmentations: parentClassAugmentations,
+            parentLibraryAugmentations: parentLibraryAugmentations);
+
+  @override
+  void augment({FunctionBodyCode? body, List<Code>? initializers}) {
+    body ??= new FunctionBodyCode.fromString('''{
+      augment super();
+    }''');
+    DeclarationCode augmentation = _buildFunctionAugmentation(body, declaration,
+        initializers: initializers);
+    _classAugmentations.update(
+        declaration.definingClass.name, (value) => value..add(augmentation),
+        ifAbsent: () => [augmentation]);
+  }
+}
+
+class VariableDefinitionBuilderImpl extends DefinitionBuilderBase
+    implements VariableDefinitionBuilder {
+  final VariableDeclaration declaration;
+
+  VariableDefinitionBuilderImpl(
+      this.declaration,
+      IdentifierResolver identifierResolver,
+      ClassIntrospector classIntrospector,
+      TypeResolver typeResolver,
+      TypeDeclarationResolver typeDeclarationResolver,
+      {Map<String, List<DeclarationCode>>? parentClassAugmentations,
+      List<DeclarationCode>? parentLibraryAugmentations})
+      : super(identifierResolver, classIntrospector, typeResolver,
+            typeDeclarationResolver,
+            parentClassAugmentations: parentClassAugmentations,
+            parentLibraryAugmentations: parentLibraryAugmentations);
+
+  @override
+  void augment(
+      {DeclarationCode? getter,
+      DeclarationCode? setter,
+      ExpressionCode? initializer}) {
+    List<DeclarationCode> augmentations = _buildVariableAugmentations(
+        declaration,
+        getter: getter,
+        setter: setter,
+        initializer: initializer);
+    if (declaration is ClassMemberDeclaration) {
+      _classAugmentations.update(
+          (declaration as ClassMemberDeclaration).definingClass.name,
+          (value) => value..addAll(augmentations),
+          ifAbsent: () => augmentations);
+    } else {
+      _libraryAugmentations.addAll(augmentations);
+    }
+  }
+}
+
+/// Builds all the possible augmentations for a variable.
+List<DeclarationCode> _buildVariableAugmentations(
+    VariableDeclaration declaration,
+    {DeclarationCode? getter,
+    DeclarationCode? setter,
+    ExpressionCode? initializer}) {
+  List<DeclarationCode> augmentations = [];
+  if (getter != null) {
+    augmentations.add(new DeclarationCode.fromParts([
+      'augment ',
+      if (declaration is FieldDeclaration && declaration.isStatic) 'static ',
+      getter,
+    ]));
+  }
+  if (setter != null) {
+    augmentations.add(new DeclarationCode.fromParts([
+      'augment ',
+      if (declaration is FieldDeclaration && declaration.isStatic) 'static ',
+      setter,
+    ]));
+  }
+  if (initializer != null) {
+    augmentations.add(new DeclarationCode.fromParts([
+      'augment ',
+      if (declaration is FieldDeclaration && declaration.isStatic) 'static ',
+      if (declaration.isFinal) 'final ',
+      declaration.type.code,
+      ' ',
+      declaration.identifier,
+      ' = ',
+      initializer,
+      ';',
+    ]));
+  }
+
+  return augmentations;
+}
+
+/// Builds the code to augment a function, method, or constructor with a new
+/// body.
+///
+/// The [initializers] parameter can only be used if [declaration] is a
+/// constructor.
+DeclarationCode _buildFunctionAugmentation(
+    FunctionBodyCode body, FunctionDeclaration declaration,
+    {List<Code>? initializers}) {
+  assert(initializers == null || declaration is ConstructorDeclaration);
+
+  return new DeclarationCode.fromParts([
+    'augment ',
+    if (declaration is ConstructorDeclaration) ...[
+      declaration.definingClass.name,
+      if (declaration.identifier.name.isNotEmpty) '.',
+    ] else ...[
+      if (declaration is MethodDeclaration && declaration.isStatic) 'static ',
+      declaration.returnType.code,
+      ' ',
+      if (declaration.isOperator) 'operator ',
+    ],
+    declaration.identifier.name,
+    if (declaration.typeParameters.isNotEmpty) ...[
+      '<',
+      for (TypeParameterDeclaration typeParam
+          in declaration.typeParameters) ...[
+        typeParam.identifier.name,
+        if (typeParam.bound != null) ...[' extends ', typeParam.bound!.code],
+        if (typeParam != declaration.typeParameters.last) ', ',
+      ],
+      '>',
+    ],
+    '(',
+    for (ParameterDeclaration positionalRequired
+        in declaration.positionalParameters.takeWhile((p) => p.isRequired)) ...[
+      positionalRequired.code,
+      ', ',
+    ],
+    if (declaration.positionalParameters.any((p) => !p.isRequired)) ...[
+      '[',
+      for (ParameterDeclaration positionalOptional
+          in declaration.positionalParameters.where((p) => !p.isRequired)) ...[
+        positionalOptional.code,
+        ', ',
+      ],
+      ']',
+    ],
+    if (declaration.namedParameters.isNotEmpty) ...[
+      '{',
+      for (ParameterDeclaration named in declaration.namedParameters) ...[
+        named.code,
+        ', ',
+      ],
+      '}',
+    ],
+    ') ',
+    if (initializers != null && initializers.isNotEmpty) ...[
+      ' : ',
+      initializers.first,
+      for (Code initializer in initializers.skip(1)) ...[
+        ',\n',
+        initializer,
+      ],
+    ],
+    body,
+  ]);
+}
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
new file mode 100644
index 0000000..af3224f
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/execute_macro.dart
@@ -0,0 +1,158 @@
+// 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/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/builder_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+/// Runs [macro] in the types phase and returns a  [MacroExecutionResult].
+Future<MacroExecutionResult> executeTypesMacro(Macro macro,
+    Declaration declaration, IdentifierResolver identifierResolver) async {
+  TypeBuilderImpl builder = new TypeBuilderImpl(identifierResolver);
+  if (declaration is FunctionDeclaration) {
+    if (macro is ConstructorTypesMacro &&
+        declaration is ConstructorDeclaration) {
+      await macro.buildTypesForConstructor(declaration, builder);
+      return builder.result;
+    } else if (macro is MethodTypesMacro && declaration is MethodDeclaration) {
+      await macro.buildTypesForMethod(declaration, builder);
+      return builder.result;
+    } else if (macro is FunctionTypesMacro) {
+      await macro.buildTypesForFunction(declaration, builder);
+      return builder.result;
+    }
+  } else if (declaration is VariableDeclaration) {
+    if (macro is FieldTypesMacro && declaration is FieldDeclaration) {
+      await macro.buildTypesForField(declaration, builder);
+      return builder.result;
+    } else if (macro is VariableTypesMacro) {
+      await macro.buildTypesForVariable(declaration, builder);
+      return builder.result;
+    }
+  } else if (macro is ClassTypesMacro && declaration is ClassDeclaration) {
+    await macro.buildTypesForClass(declaration, builder);
+    return builder.result;
+  }
+  throw new UnsupportedError('Unsupported macro type or invalid declaration:\n'
+      'macro: $macro\ndeclaration: $declaration');
+}
+
+/// Runs [macro] in the declaration phase and returns a  [MacroExecutionResult].
+Future<MacroExecutionResult> executeDeclarationsMacro(
+    Macro macro,
+    Declaration declaration,
+    IdentifierResolver identifierResolver,
+    ClassIntrospector classIntrospector,
+    TypeResolver typeResolver) async {
+  if (declaration is ClassDeclaration && macro is ClassDeclarationsMacro) {
+    ClassMemberDeclarationBuilderImpl builder =
+        new ClassMemberDeclarationBuilderImpl(declaration.identifier,
+            identifierResolver, classIntrospector, typeResolver);
+    await macro.buildDeclarationsForClass(declaration, builder);
+    return builder.result;
+  } else if (declaration is ClassMemberDeclaration) {
+    ClassMemberDeclarationBuilderImpl builder =
+        new ClassMemberDeclarationBuilderImpl(declaration.definingClass,
+            identifierResolver, classIntrospector, typeResolver);
+    if (declaration is FunctionDeclaration) {
+      if (macro is ConstructorDeclarationsMacro &&
+          declaration is ConstructorDeclaration) {
+        await macro.buildDeclarationsForConstructor(declaration, builder);
+        return builder.result;
+      } else if (macro is MethodDeclarationsMacro &&
+          declaration is MethodDeclaration) {
+        await macro.buildDeclarationsForMethod(declaration, builder);
+        return builder.result;
+      } else if (macro is FunctionDeclarationsMacro) {
+        await macro.buildDeclarationsForFunction(
+            declaration as FunctionDeclaration, builder);
+        return builder.result;
+      }
+    } else if (declaration is VariableDeclaration) {
+      if (macro is FieldDeclarationsMacro && declaration is FieldDeclaration) {
+        await macro.buildDeclarationsForField(declaration, builder);
+        return builder.result;
+      } else if (macro is VariableDeclarationsMacro) {
+        DeclarationBuilderImpl builder = new DeclarationBuilderImpl(
+            identifierResolver, classIntrospector, typeResolver);
+        await macro.buildDeclarationsForVariable(
+            declaration as VariableDeclaration, builder);
+        return builder.result;
+      }
+    }
+  } else {
+    DeclarationBuilderImpl builder = new DeclarationBuilderImpl(
+        identifierResolver, classIntrospector, typeResolver);
+    if (declaration is FunctionDeclaration &&
+        macro is FunctionDeclarationsMacro) {
+      await macro.buildDeclarationsForFunction(declaration, builder);
+      return builder.result;
+    } else if (macro is VariableDeclarationsMacro &&
+        declaration is VariableDeclaration) {
+      await macro.buildDeclarationsForVariable(declaration, builder);
+      return builder.result;
+    }
+  }
+  throw new UnsupportedError('Unsupported macro type or invalid declaration:\n'
+      'macro: $macro\ndeclaration: $declaration');
+}
+
+/// Runs [macro] in the definition phase and returns a  [MacroExecutionResult].
+Future<MacroExecutionResult> executeDefinitionMacro(
+    Macro macro,
+    Declaration declaration,
+    IdentifierResolver identifierResolver,
+    ClassIntrospector classIntrospector,
+    TypeResolver typeResolver,
+    TypeDeclarationResolver typeDeclarationResolver) async {
+  if (declaration is FunctionDeclaration) {
+    if (macro is ConstructorDefinitionMacro &&
+        declaration is ConstructorDeclaration) {
+      ConstructorDefinitionBuilderImpl builder =
+          new ConstructorDefinitionBuilderImpl(declaration, identifierResolver,
+              classIntrospector, typeResolver, typeDeclarationResolver);
+      await macro.buildDefinitionForConstructor(declaration, builder);
+      return builder.result;
+    } else {
+      FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
+          declaration,
+          identifierResolver,
+          classIntrospector,
+          typeResolver,
+          typeDeclarationResolver);
+      if (macro is MethodDefinitionMacro && declaration is MethodDeclaration) {
+        await macro.buildDefinitionForMethod(declaration, builder);
+        return builder.result;
+      } else if (macro is FunctionDefinitionMacro) {
+        await macro.buildDefinitionForFunction(declaration, builder);
+        return builder.result;
+      }
+    }
+  } else if (declaration is VariableDeclaration) {
+    VariableDefinitionBuilderImpl builder = new VariableDefinitionBuilderImpl(
+        declaration,
+        identifierResolver,
+        classIntrospector,
+        typeResolver,
+        typeDeclarationResolver);
+    if (macro is FieldDefinitionMacro && declaration is FieldDeclaration) {
+      await macro.buildDefinitionForField(declaration, builder);
+      return builder.result;
+    } else if (macro is VariableDefinitionMacro) {
+      await macro.buildDefinitionForVariable(declaration, builder);
+      return builder.result;
+    }
+  } else if (macro is ClassDefinitionMacro && declaration is ClassDeclaration) {
+    ClassDefinitionBuilderImpl builder = new ClassDefinitionBuilderImpl(
+        declaration,
+        identifierResolver,
+        classIntrospector,
+        typeResolver,
+        typeDeclarationResolver);
+    await macro.buildDefinitionForClass(declaration, builder);
+    return builder.result;
+  }
+  throw new UnsupportedError('Unsupported macro type or invalid declaration:\n'
+      'macro: $macro\ndeclaration: $declaration');
+}
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
new file mode 100644
index 0000000..940fa5a
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/executor_base.dart
@@ -0,0 +1,396 @@
+// 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 'dart:isolate';
+
+import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart';
+
+import '../api.dart';
+import '../executor/introspection_impls.dart';
+import '../executor/protocol.dart';
+import '../executor/serialization.dart';
+import '../executor.dart';
+
+/// Base implementation for macro executors which communicate with some external
+/// process to run macros.
+///
+/// Subtypes must extend this class and implement the [close] and [sendResult]
+/// apis to handle communication with the external macro program.
+abstract class ExternalMacroExecutorBase extends MacroExecutor {
+  /// The stream on which we receive messages from the external macro executor.
+  final Stream<Object> messageStream;
+
+  /// The mode to use for serialization - must be a `server` variant.
+  final SerializationMode serializationMode;
+
+  /// A map of response completers by request id.
+  final _responseCompleters = <int, Completer<Response>>{};
+
+  /// We need to know which serialization zone to deserialize objects in, so
+  /// that we read them from the correct cache. Each macro execution creates its
+  /// own zone which it stores here by ID and then responses are deserialized in
+  /// that same zone.
+  static final _serializationZones = <int, Zone>{};
+
+  /// Incrementing identifier for the serialization zone ids.
+  static int _nextSerializationZoneId = 0;
+
+  ExternalMacroExecutorBase(
+      {required this.messageStream, required this.serializationMode}) {
+    messageStream.listen((message) {
+      withSerializationMode(serializationMode, () {
+        Deserializer deserializer = deserializerFactory(message);
+        // Every object starts with a zone ID which dictates the zone in which
+        // we should deserialize the message.
+        deserializer.moveNext();
+        int zoneId = deserializer.expectInt();
+        Zone zone = _serializationZones[zoneId]!;
+        zone.run(() async {
+          deserializer.moveNext();
+          MessageType messageType =
+              MessageType.values[deserializer.expectInt()];
+          switch (messageType) {
+            case MessageType.response:
+              SerializableResponse response =
+                  new SerializableResponse.deserialize(deserializer, zoneId);
+              Completer<Response>? completer =
+                  _responseCompleters.remove(response.requestId);
+              if (completer == null) {
+                throw new StateError(
+                    'Got a response for an unrecognized request id '
+                    '${response.requestId}');
+              }
+              completer.complete(response);
+              break;
+            case MessageType.resolveIdentifierRequest:
+              ResolveIdentifierRequest request =
+                  new ResolveIdentifierRequest.deserialize(
+                      deserializer, zoneId);
+              SerializableResponse response;
+              try {
+                IdentifierImpl identifier = await (request
+                            .identifierResolver.instance as IdentifierResolver)
+                        // ignore: deprecated_member_use_from_same_package
+                        .resolveIdentifier(request.library, request.name)
+                    as IdentifierImpl;
+                response = new SerializableResponse(
+                    response: identifier,
+                    requestId: request.id,
+                    responseType: MessageType.remoteInstance,
+                    serializationZoneId: zoneId);
+              } catch (error, stackTrace) {
+                response = new SerializableResponse(
+                    error: '$error',
+                    stackTrace: '$stackTrace',
+                    requestId: request.id,
+                    responseType: MessageType.error,
+                    serializationZoneId: zoneId);
+              }
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.resolveTypeRequest:
+              ResolveTypeRequest request =
+                  new ResolveTypeRequest.deserialize(deserializer, zoneId);
+              StaticType instance =
+                  await (request.typeResolver.instance as TypeResolver)
+                      .resolve(request.typeAnnotationCode);
+              SerializableResponse response = new SerializableResponse(
+                  response: new RemoteInstanceImpl(
+                      id: RemoteInstance.uniqueId,
+                      instance: instance,
+                      kind: instance is NamedStaticType
+                          ? RemoteInstanceKind.namedStaticType
+                          : RemoteInstanceKind.staticType),
+                  requestId: request.id,
+                  responseType: instance is NamedStaticType
+                      ? MessageType.namedStaticType
+                      : MessageType.staticType,
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.isExactlyTypeRequest:
+              IsExactlyTypeRequest request =
+                  new IsExactlyTypeRequest.deserialize(deserializer, zoneId);
+              StaticType leftType = request.leftType.instance as StaticType;
+              StaticType rightType = request.rightType.instance as StaticType;
+              SerializableResponse response = new SerializableResponse(
+                  response:
+                      new BooleanValue(await leftType.isExactly(rightType)),
+                  requestId: request.id,
+                  responseType: MessageType.boolean,
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.isSubtypeOfRequest:
+              IsSubtypeOfRequest request =
+                  new IsSubtypeOfRequest.deserialize(deserializer, zoneId);
+              StaticType leftType = request.leftType.instance as StaticType;
+              StaticType rightType = request.rightType.instance as StaticType;
+              SerializableResponse response = new SerializableResponse(
+                  response:
+                      new BooleanValue(await leftType.isSubtypeOf(rightType)),
+                  requestId: request.id,
+                  responseType: MessageType.boolean,
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            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);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.constructorsOfRequest:
+              ClassIntrospectionRequest request =
+                  new ClassIntrospectionRequest.deserialize(
+                      deserializer, messageType, zoneId);
+              ClassIntrospector classIntrospector =
+                  request.classIntrospector.instance as ClassIntrospector;
+              SerializableResponse response = new SerializableResponse(
+                  requestId: request.id,
+                  responseType: MessageType.declarationList,
+                  response: new DeclarationList((await classIntrospector
+                          .constructorsOf(request.classDeclaration))
+                      // TODO: Consider refactoring to avoid the need for this.
+                      .cast<ConstructorDeclarationImpl>()),
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.fieldsOfRequest:
+              ClassIntrospectionRequest request =
+                  new ClassIntrospectionRequest.deserialize(
+                      deserializer, messageType, zoneId);
+              ClassIntrospector classIntrospector =
+                  request.classIntrospector.instance as ClassIntrospector;
+              SerializableResponse response = new SerializableResponse(
+                  requestId: request.id,
+                  responseType: MessageType.declarationList,
+                  response: new DeclarationList((await classIntrospector
+                          .fieldsOf(request.classDeclaration))
+                      // TODO: Consider refactoring to avoid the need for this.
+                      .cast<FieldDeclarationImpl>()),
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.interfacesOfRequest:
+              ClassIntrospectionRequest request =
+                  new ClassIntrospectionRequest.deserialize(
+                      deserializer, messageType, zoneId);
+              ClassIntrospector classIntrospector =
+                  request.classIntrospector.instance as ClassIntrospector;
+              SerializableResponse response = new SerializableResponse(
+                  requestId: request.id,
+                  responseType: MessageType.declarationList,
+                  response: new DeclarationList((await classIntrospector
+                          .interfacesOf(request.classDeclaration))
+                      // TODO: Consider refactoring to avoid the need for this.
+                      .cast<ClassDeclarationImpl>()),
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.methodsOfRequest:
+              ClassIntrospectionRequest request =
+                  new ClassIntrospectionRequest.deserialize(
+                      deserializer, messageType, zoneId);
+              ClassIntrospector classIntrospector =
+                  request.classIntrospector.instance as ClassIntrospector;
+              SerializableResponse response = new SerializableResponse(
+                  requestId: request.id,
+                  responseType: MessageType.declarationList,
+                  response: new DeclarationList((await classIntrospector
+                          .methodsOf(request.classDeclaration))
+                      // TODO: Consider refactoring to avoid the need for this.
+                      .cast<MethodDeclarationImpl>()),
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.mixinsOfRequest:
+              ClassIntrospectionRequest request =
+                  new ClassIntrospectionRequest.deserialize(
+                      deserializer, messageType, zoneId);
+              ClassIntrospector classIntrospector =
+                  request.classIntrospector.instance as ClassIntrospector;
+              SerializableResponse response = new SerializableResponse(
+                  requestId: request.id,
+                  responseType: MessageType.declarationList,
+                  response: new DeclarationList((await classIntrospector
+                          .mixinsOf(request.classDeclaration))
+                      // TODO: Consider refactoring to avoid the need for this.
+                      .cast<ClassDeclarationImpl>()),
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            case MessageType.superclassOfRequest:
+              ClassIntrospectionRequest request =
+                  new ClassIntrospectionRequest.deserialize(
+                      deserializer, messageType, zoneId);
+              ClassIntrospector classIntrospector =
+                  request.classIntrospector.instance as ClassIntrospector;
+              SerializableResponse response = new SerializableResponse(
+                  requestId: request.id,
+                  responseType: MessageType.remoteInstance,
+                  response: (await classIntrospector
+                          .superclassOf(request.classDeclaration))
+                      // TODO: Consider refactoring to avoid the need for this.
+                      as ClassDeclarationImpl?,
+                  serializationZoneId: zoneId);
+              Serializer serializer = serializerFactory();
+              response.serialize(serializer);
+              sendResult(serializer);
+              break;
+            default:
+              throw new StateError('Unexpected message type $messageType');
+          }
+        });
+      });
+    });
+  }
+
+  /// These calls are handled by the higher level executor.
+  @override
+  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
+          ResolvedIdentifier Function(Identifier) resolveIdentifier) =>
+      throw new StateError('Unreachable');
+
+  @override
+  Future<MacroExecutionResult> executeDeclarationsPhase(
+          MacroInstanceIdentifier macro,
+          DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
+          TypeResolver typeResolver,
+          ClassIntrospector classIntrospector) =>
+      _sendRequest((zoneId) => new ExecuteDeclarationsPhaseRequest(
+          macro,
+          declaration,
+          new RemoteInstanceImpl(
+              instance: identifierResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.identifierResolver),
+          new RemoteInstanceImpl(
+              instance: typeResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.typeResolver),
+          new RemoteInstanceImpl(
+              instance: classIntrospector,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.classIntrospector),
+          serializationZoneId: zoneId));
+
+  @override
+  Future<MacroExecutionResult> executeDefinitionsPhase(
+          MacroInstanceIdentifier macro,
+          DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
+          TypeResolver typeResolver,
+          ClassIntrospector classIntrospector,
+          TypeDeclarationResolver typeDeclarationResolver) =>
+      _sendRequest((zoneId) => new ExecuteDefinitionsPhaseRequest(
+          macro,
+          declaration,
+          new RemoteInstanceImpl(
+              instance: identifierResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.identifierResolver),
+          new RemoteInstanceImpl(
+              instance: typeResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.typeResolver),
+          new RemoteInstanceImpl(
+              instance: classIntrospector,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.classIntrospector),
+          new RemoteInstanceImpl(
+              instance: typeDeclarationResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.typeDeclarationResolver),
+          serializationZoneId: zoneId));
+
+  @override
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+          DeclarationImpl declaration, IdentifierResolver identifierResolver) =>
+      _sendRequest((zoneId) => new ExecuteTypesPhaseRequest(
+          macro,
+          declaration,
+          new RemoteInstanceImpl(
+              instance: identifierResolver,
+              id: RemoteInstance.uniqueId,
+              kind: RemoteInstanceKind.identifierResolver),
+          serializationZoneId: zoneId));
+
+  @override
+  Future<MacroInstanceIdentifier> instantiateMacro(
+          MacroClassIdentifier macroClass,
+          String constructor,
+          Arguments arguments) =>
+      _sendRequest((zoneId) => new InstantiateMacroRequest(
+          macroClass, constructor, arguments, RemoteInstance.uniqueId,
+          serializationZoneId: zoneId));
+
+  /// These calls are handled by the higher level executor.
+  @override
+  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+          {Uri? precompiledKernelUri}) =>
+      throw new StateError(
+          'This executor should be wrapped in a MultiMacroExecutor which will '
+          'handle load requests.');
+
+  /// Sends [serializer.result] to [sendPort], possibly wrapping it in a
+  /// [TransferableTypedData] object.
+  void sendResult(Serializer serializer);
+
+  /// Creates a [Request] with a given serialization zone ID, and handles the
+  /// response, casting it to the expected type or throwing the error provided.
+  Future<T> _sendRequest<T>(Request Function(int) requestFactory) =>
+      withSerializationMode(serializationMode, () async {
+        int zoneId = _nextSerializationZoneId++;
+        _serializationZones[zoneId] = Zone.current;
+        Request request = requestFactory(zoneId);
+        Serializer serializer = serializerFactory();
+        // It is our responsibility to add the zone ID header.
+        serializer.addInt(zoneId);
+        request.serialize(serializer);
+        sendResult(serializer);
+        Completer<Response> completer = new Completer<Response>();
+        _responseCompleters[request.id] = completer;
+        try {
+          Response response = await completer.future;
+          T? result = response.response as T?;
+          if (result != null) return result;
+          throw new RemoteException(
+              response.error!.toString(), response.stackTrace);
+        } finally {
+          // Clean up the zone after the request is done.
+          _serializationZones.remove(zoneId);
+        }
+      });
+}
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
new file mode 100644
index 0000000..857674e
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/introspection_impls.dart
@@ -0,0 +1,618 @@
+// 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 'remote_instance.dart';
+import 'serialization.dart';
+import 'serialization_extensions.dart';
+import '../api.dart';
+
+class IdentifierImpl extends RemoteInstance implements Identifier {
+  final String name;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.identifier;
+
+  IdentifierImpl({required int id, required this.name}) : super(id);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer.addString(name);
+  }
+}
+
+abstract class TypeAnnotationImpl extends RemoteInstance
+    implements TypeAnnotation {
+  final bool isNullable;
+
+  TypeAnnotationImpl({required int id, required this.isNullable}) : super(id);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer.addBool(isNullable);
+  }
+}
+
+class NamedTypeAnnotationImpl extends TypeAnnotationImpl
+    implements NamedTypeAnnotation {
+  @override
+  TypeAnnotationCode get code {
+    NamedTypeAnnotationCode underlyingType =
+        new NamedTypeAnnotationCode(name: identifier, typeArguments: [
+      for (TypeAnnotation typeArg in typeArguments) typeArg.code,
+    ]);
+    return isNullable ? underlyingType.asNullable : underlyingType;
+  }
+
+  @override
+  final IdentifierImpl identifier;
+
+  @override
+  final List<TypeAnnotationImpl> typeArguments;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.namedTypeAnnotation;
+
+  NamedTypeAnnotationImpl({
+    required int id,
+    required bool isNullable,
+    required this.identifier,
+    required this.typeArguments,
+  }) : super(id: id, isNullable: isNullable);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    identifier.serialize(serializer);
+    serializer.startList();
+    for (TypeAnnotationImpl typeArg in typeArguments) {
+      typeArg.serialize(serializer);
+    }
+    serializer.endList();
+  }
+}
+
+class FunctionTypeAnnotationImpl extends TypeAnnotationImpl
+    implements FunctionTypeAnnotation {
+  @override
+  TypeAnnotationCode get code {
+    FunctionTypeAnnotationCode underlyingType = new FunctionTypeAnnotationCode(
+      returnType: returnType.code,
+      typeParameters: [
+        for (TypeParameterDeclaration typeParam in typeParameters)
+          typeParam.code,
+      ],
+      positionalParameters: [
+        for (ParameterDeclaration positional in positionalParameters)
+          positional.code,
+      ],
+      namedParameters: [
+        for (ParameterDeclaration named in namedParameters) named.code,
+      ],
+    );
+    return isNullable ? underlyingType.asNullable : underlyingType;
+  }
+
+  @override
+  final List<ParameterDeclarationImpl> namedParameters;
+
+  @override
+  final List<ParameterDeclarationImpl> positionalParameters;
+
+  @override
+  final TypeAnnotationImpl returnType;
+
+  @override
+  final List<TypeParameterDeclarationImpl> typeParameters;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.functionTypeAnnotation;
+
+  FunctionTypeAnnotationImpl({
+    required int id,
+    required bool isNullable,
+    required this.namedParameters,
+    required this.positionalParameters,
+    required this.returnType,
+    required this.typeParameters,
+  }) : super(id: id, isNullable: isNullable);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    returnType.serialize(serializer);
+
+    serializer.startList();
+    for (ParameterDeclarationImpl param in positionalParameters) {
+      param.serialize(serializer);
+    }
+    serializer.endList();
+
+    serializer.startList();
+    for (ParameterDeclarationImpl param in namedParameters) {
+      param.serialize(serializer);
+    }
+    serializer.endList();
+
+    serializer.startList();
+    for (TypeParameterDeclarationImpl typeParam in typeParameters) {
+      typeParam.serialize(serializer);
+    }
+    serializer.endList();
+  }
+}
+
+abstract class DeclarationImpl extends RemoteInstance implements Declaration {
+  final IdentifierImpl identifier;
+
+  DeclarationImpl({required int id, required this.identifier}) : super(id);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    identifier.serialize(serializer);
+  }
+}
+
+class ParameterDeclarationImpl extends DeclarationImpl
+    implements ParameterDeclaration {
+  @override
+  final bool isNamed;
+
+  @override
+  final bool isRequired;
+
+  @override
+  final TypeAnnotationImpl type;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.parameterDeclaration;
+
+  ParameterDeclarationImpl({
+    required int id,
+    required IdentifierImpl identifier,
+    required this.isNamed,
+    required this.isRequired,
+    required this.type,
+  }) : super(id: id, identifier: identifier);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer.addBool(isNamed);
+    serializer.addBool(isRequired);
+    type.serialize(serializer);
+  }
+
+  @override
+  ParameterCode get code =>
+      new ParameterCode(name: identifier.name, type: type.code, keywords: [
+        if (isNamed && isRequired) 'required',
+      ]);
+}
+
+class TypeParameterDeclarationImpl extends DeclarationImpl
+    implements TypeParameterDeclaration {
+  @override
+  final TypeAnnotationImpl? bound;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.typeParameterDeclaration;
+
+  TypeParameterDeclarationImpl({
+    required int id,
+    required IdentifierImpl identifier,
+    required this.bound,
+  }) : super(id: id, identifier: identifier);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    TypeAnnotationImpl? bound = this.bound;
+    if (bound == null) {
+      serializer.addNull();
+    } else {
+      bound.serialize(serializer);
+    }
+  }
+
+  @override
+  TypeParameterCode get code =>
+      new TypeParameterCode(name: identifier.name, bound: bound?.code);
+}
+
+class FunctionDeclarationImpl extends DeclarationImpl
+    implements FunctionDeclaration {
+  @override
+  final bool isAbstract;
+
+  @override
+  final bool isExternal;
+
+  @override
+  final bool isGetter;
+
+  @override
+  final bool isOperator;
+
+  @override
+  final bool isSetter;
+
+  @override
+  final List<ParameterDeclarationImpl> namedParameters;
+
+  @override
+  final List<ParameterDeclarationImpl> positionalParameters;
+
+  @override
+  final TypeAnnotationImpl returnType;
+
+  @override
+  final List<TypeParameterDeclarationImpl> typeParameters;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.functionDeclaration;
+
+  FunctionDeclarationImpl({
+    required int id,
+    required IdentifierImpl identifier,
+    required this.isAbstract,
+    required this.isExternal,
+    required this.isGetter,
+    required this.isOperator,
+    required this.isSetter,
+    required this.namedParameters,
+    required this.positionalParameters,
+    required this.returnType,
+    required this.typeParameters,
+  }) : super(id: id, identifier: identifier);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer
+      ..addBool(isAbstract)
+      ..addBool(isExternal)
+      ..addBool(isGetter)
+      ..addBool(isOperator)
+      ..addBool(isSetter)
+      ..startList();
+    for (ParameterDeclarationImpl named in namedParameters) {
+      named.serialize(serializer);
+    }
+    serializer
+      ..endList()
+      ..startList();
+    for (ParameterDeclarationImpl positional in positionalParameters) {
+      positional.serialize(serializer);
+    }
+    serializer.endList();
+    returnType.serialize(serializer);
+    serializer.startList();
+    for (TypeParameterDeclarationImpl param in typeParameters) {
+      param.serialize(serializer);
+    }
+    serializer.endList();
+  }
+}
+
+class MethodDeclarationImpl extends FunctionDeclarationImpl
+    implements MethodDeclaration {
+  @override
+  final IdentifierImpl definingClass;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.methodDeclaration;
+
+  @override
+  final bool isStatic;
+
+  MethodDeclarationImpl({
+    // Declaration fields
+    required int id,
+    required IdentifierImpl identifier,
+    // Function fields
+    required bool isAbstract,
+    required bool isExternal,
+    required bool isGetter,
+    required bool isOperator,
+    required bool isSetter,
+    required List<ParameterDeclarationImpl> namedParameters,
+    required List<ParameterDeclarationImpl> positionalParameters,
+    required TypeAnnotationImpl returnType,
+    required List<TypeParameterDeclarationImpl> typeParameters,
+    // Method fields
+    required this.definingClass,
+    required this.isStatic,
+  }) : super(
+          id: id,
+          identifier: identifier,
+          isAbstract: isAbstract,
+          isExternal: isExternal,
+          isGetter: isGetter,
+          isOperator: isOperator,
+          isSetter: isSetter,
+          namedParameters: namedParameters,
+          positionalParameters: positionalParameters,
+          returnType: returnType,
+          typeParameters: typeParameters,
+        );
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    definingClass.serialize(serializer);
+    serializer.addBool(isStatic);
+  }
+}
+
+class ConstructorDeclarationImpl extends MethodDeclarationImpl
+    implements ConstructorDeclaration {
+  @override
+  final bool isFactory;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.constructorDeclaration;
+
+  ConstructorDeclarationImpl({
+    // Declaration fields
+    required int id,
+    required IdentifierImpl identifier,
+    // Function fields
+    required bool isAbstract,
+    required bool isExternal,
+    required bool isGetter,
+    required bool isOperator,
+    required bool isSetter,
+    required List<ParameterDeclarationImpl> namedParameters,
+    required List<ParameterDeclarationImpl> positionalParameters,
+    required TypeAnnotationImpl returnType,
+    required List<TypeParameterDeclarationImpl> typeParameters,
+    // Method fields
+    required IdentifierImpl definingClass,
+    // Constructor fields
+    required this.isFactory,
+  }) : super(
+          id: id,
+          identifier: identifier,
+          isAbstract: isAbstract,
+          isExternal: isExternal,
+          isGetter: isGetter,
+          isOperator: isOperator,
+          isSetter: isSetter,
+          namedParameters: namedParameters,
+          positionalParameters: positionalParameters,
+          returnType: returnType,
+          typeParameters: typeParameters,
+          definingClass: definingClass,
+          isStatic: true,
+        );
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer.addBool(isFactory);
+  }
+}
+
+class VariableDeclarationImpl extends DeclarationImpl
+    implements VariableDeclaration {
+  @override
+  final bool isExternal;
+
+  @override
+  final bool isFinal;
+
+  @override
+  final bool isLate;
+
+  @override
+  final TypeAnnotationImpl type;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.variableDeclaration;
+
+  VariableDeclarationImpl({
+    required int id,
+    required IdentifierImpl identifier,
+    required this.isExternal,
+    required this.isFinal,
+    required this.isLate,
+    required this.type,
+  }) : super(id: id, identifier: identifier);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer
+      ..addBool(isExternal)
+      ..addBool(isFinal)
+      ..addBool(isLate);
+    type.serialize(serializer);
+  }
+}
+
+class FieldDeclarationImpl extends VariableDeclarationImpl
+    implements FieldDeclaration {
+  @override
+  final IdentifierImpl definingClass;
+
+  @override
+  final bool isStatic;
+
+  FieldDeclarationImpl({
+    // Declaration fields
+    required int id,
+    required IdentifierImpl identifier,
+    // Variable fields
+    required bool isExternal,
+    required bool isFinal,
+    required bool isLate,
+    required TypeAnnotationImpl type,
+    // Field fields
+    required this.definingClass,
+    required this.isStatic,
+  }) : super(
+            id: id,
+            identifier: identifier,
+            isExternal: isExternal,
+            isFinal: isFinal,
+            isLate: isLate,
+            type: type);
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.fieldDeclaration;
+
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    definingClass.serialize(serializer);
+    serializer.addBool(isStatic);
+  }
+}
+
+abstract class TypeDeclarationImpl extends DeclarationImpl
+    implements TypeDeclaration {
+  @override
+  final List<TypeParameterDeclarationImpl> typeParameters;
+
+  TypeDeclarationImpl({
+    required int id,
+    required IdentifierImpl identifier,
+    required this.typeParameters,
+  }) : super(id: id, identifier: identifier);
+
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer..startList();
+    for (TypeParameterDeclarationImpl param in typeParameters) {
+      param.serialize(serializer);
+    }
+    serializer.endList();
+  }
+}
+
+class ClassDeclarationImpl extends TypeDeclarationImpl
+    implements ClassDeclaration {
+  @override
+  final List<TypeAnnotationImpl> interfaces;
+
+  @override
+  final bool isAbstract;
+
+  @override
+  final bool isExternal;
+
+  @override
+  final List<TypeAnnotationImpl> mixins;
+
+  @override
+  final TypeAnnotationImpl? superclass;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.classDeclaration;
+
+  ClassDeclarationImpl({
+    // Declaration fields
+    required int id,
+    required IdentifierImpl identifier,
+    // TypeDeclaration fields
+    required List<TypeParameterDeclarationImpl> typeParameters,
+    // ClassDeclaration fields
+    required this.interfaces,
+    required this.isAbstract,
+    required this.isExternal,
+    required this.mixins,
+    required this.superclass,
+  }) : super(id: id, identifier: identifier, typeParameters: typeParameters);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    serializer.startList();
+    for (TypeAnnotationImpl interface in interfaces) {
+      interface.serialize(serializer);
+    }
+    serializer
+      ..endList()
+      ..addBool(isAbstract)
+      ..addBool(isExternal)
+      ..startList();
+    for (TypeAnnotationImpl mixin in mixins) {
+      mixin.serialize(serializer);
+    }
+    serializer..endList();
+    superclass.serializeNullable(serializer);
+  }
+}
+
+class TypeAliasDeclarationImpl extends TypeDeclarationImpl
+    implements TypeAliasDeclaration {
+  /// The type being aliased.
+  final TypeAnnotationImpl aliasedType;
+
+  @override
+  RemoteInstanceKind get kind => RemoteInstanceKind.typeAliasDeclaration;
+
+  TypeAliasDeclarationImpl({
+    // Declaration fields
+    required int id,
+    required IdentifierImpl identifier,
+    // TypeDeclaration fields
+    required List<TypeParameterDeclarationImpl> typeParameters,
+    // TypeAlias fields
+    required this.aliasedType,
+  }) : super(id: id, identifier: identifier, typeParameters: typeParameters);
+
+  @override
+  void serialize(Serializer serializer) {
+    super.serialize(serializer);
+    // Client side we don't encode anything but the ID.
+    if (serializationMode.isClient) return;
+
+    aliasedType.serialize(serializer);
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/isolated_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/isolated_executor.dart
new file mode 100644
index 0000000..ae15038
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/isolated_executor.dart
@@ -0,0 +1,94 @@
+// 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 'dart:isolate';
+import 'dart:typed_data';
+
+import '../executor/multi_executor.dart';
+import '../executor/executor_base.dart';
+import '../executor/serialization.dart';
+import '../executor.dart';
+
+/// Returns a [MacroExecutor] which loads macros into isolates using precompiled
+/// kernel files and communicates with that isolate using [serializationMode].
+///
+/// The [serializationMode] must be a `server` variant, and any precompiled
+/// programs must use the corresponding `client` variant.
+///
+/// This is the only public api exposed by this library.
+Future<MacroExecutor> start(SerializationMode serializationMode) async =>
+    new MultiMacroExecutor((Uri library, String name,
+        {Uri? precompiledKernelUri}) {
+      if (precompiledKernelUri == null) {
+        throw new UnsupportedError(
+            'This environment requires a non-null `precompiledKernelUri` to be '
+            'passed when loading macros.');
+      }
+
+      return _SingleIsolatedMacroExecutor.start(
+          library, name, precompiledKernelUri, serializationMode);
+    });
+
+/// Actual implementation of the isolate based macro executor.
+class _SingleIsolatedMacroExecutor extends ExternalMacroExecutorBase {
+  /// The send port where we should send requests.
+  final SendPort sendPort;
+
+  /// A function that should be invoked when shutting down this executor
+  /// to perform any necessary cleanup.
+  final void Function() onClose;
+
+  _SingleIsolatedMacroExecutor(
+      {required Stream<Object> messageStream,
+      required this.onClose,
+      required this.sendPort,
+      required SerializationMode serializationMode})
+      : super(
+            messageStream: messageStream, serializationMode: serializationMode);
+
+  static Future<_SingleIsolatedMacroExecutor> start(Uri library, String name,
+      Uri precompiledKernelUri, SerializationMode serializationMode) async {
+    ReceivePort receivePort = new ReceivePort();
+    Isolate isolate =
+        await Isolate.spawnUri(precompiledKernelUri, [], receivePort.sendPort);
+    Completer<SendPort> sendPortCompleter = new Completer();
+    StreamController<Object> messageStreamController =
+        new StreamController(sync: true);
+    receivePort.listen((message) {
+      if (!sendPortCompleter.isCompleted) {
+        sendPortCompleter.complete(message as SendPort);
+      } else {
+        if (serializationMode == SerializationMode.byteDataServer) {
+          message =
+              (message as TransferableTypedData).materialize().asUint8List();
+        }
+        messageStreamController.add(message);
+      }
+    }).onDone(messageStreamController.close);
+
+    return new _SingleIsolatedMacroExecutor(
+        onClose: () {
+          receivePort.close();
+          isolate.kill();
+        },
+        messageStream: messageStreamController.stream,
+        sendPort: await sendPortCompleter.future,
+        serializationMode: serializationMode);
+  }
+
+  @override
+  void close() => onClose();
+
+  /// Sends the [Serializer.result] to [sendPort], possibly wrapping it in a
+  /// [TransferableTypedData] object.
+  void sendResult(Serializer serializer) {
+    if (serializationMode == SerializationMode.byteDataServer) {
+      sendPort.send(
+          new TransferableTypedData.fromList([serializer.result as Uint8List]));
+    } else {
+      sendPort.send(serializer.result);
+    }
+  }
+}
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
new file mode 100644
index 0000000..7e2d390
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/message_grouper.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 'dart:math';
+import 'dart:typed_data';
+
+/// Collects messages from an input stream of bytes.
+///
+/// Each message should start with a 32 bit big endian uint indicating its size,
+/// followed by that many bytes.
+class MessageGrouper {
+  /// 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();
+
+  /// 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;
+
+  late StreamController<Uint8List> _messageStreamController =
+      new StreamController<Uint8List>(onCancel: () {
+    _inputStreamSubscription.cancel();
+  });
+  Stream<Uint8List> get messageStream => _messageStreamController.stream;
+
+  MessageGrouper(Stream<List<int>> inputStream) {
+    _inputStreamSubscription = inputStream.listen(_handleBytes, onDone: cancel);
+  }
+
+  void _handleBytes(List<int> bytes, [int offset = 0]) {
+    if (_length == -1) {
+      while (_lengthBuffer.length < 4 && offset < bytes.length) {
+        _lengthBuffer.addByte(bytes[offset++]);
+      }
+      if (_lengthBuffer.length >= 4) {
+        Uint8List lengthBytes = _lengthBuffer.takeBytes();
+        _length = lengthBytes[0] << 24 |
+            lengthBytes[1] << 16 |
+            lengthBytes[2] << 8 |
+            lengthBytes[3];
+      }
+    }
+
+    // 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) {
+        _handleBytes(bytes, offset);
+      }
+    }
+  }
+
+  /// Stop listening to the input stream for further updates, and close the
+  /// output stream.
+  void cancel() {
+    _inputStreamSubscription.cancel();
+    _messageStreamController.close();
+  }
+}
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
new file mode 100644
index 0000000..aa7c907
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/multi_executor.dart
@@ -0,0 +1,91 @@
+// 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 '../api.dart';
+import '../executor/augmentation_library.dart';
+import '../executor/introspection_impls.dart';
+import '../executor/response_impls.dart';
+import '../executor.dart';
+
+/// A [MacroExecutor] implementation which delegates most work to other
+/// executors which are spawned through a provided callback.
+class MultiMacroExecutor extends MacroExecutor with AugmentationLibraryBuilder {
+  /// Individual executors indexed by [MacroClassIdentifier] or
+  /// [MacroInstanceIdentifier].
+  final _executors = <Object, MacroExecutor>{};
+
+  /// The function to spawn an actual macro executor for a given [loadMacro]
+  /// request.
+  final Future<MacroExecutor> Function(Uri library, String name,
+      {Uri? precompiledKernelUri}) _spawnExecutor;
+
+  MultiMacroExecutor(this._spawnExecutor);
+
+  @override
+  void close() {
+    for (MacroExecutor executor in _executors.values) {
+      executor.close();
+    }
+    _executors.clear();
+  }
+
+  @override
+  Future<MacroExecutionResult> executeDeclarationsPhase(
+          MacroInstanceIdentifier macro,
+          DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
+          TypeResolver typeResolver,
+          ClassIntrospector classIntrospector) =>
+      _executors[macro]!.executeDeclarationsPhase(macro, declaration,
+          identifierResolver, typeResolver, classIntrospector);
+
+  @override
+  Future<MacroExecutionResult> executeDefinitionsPhase(
+          MacroInstanceIdentifier macro,
+          DeclarationImpl declaration,
+          IdentifierResolver identifierResolver,
+          TypeResolver typeResolver,
+          ClassIntrospector classIntrospector,
+          TypeDeclarationResolver typeDeclarationResolver) =>
+      _executors[macro]!.executeDefinitionsPhase(
+          macro,
+          declaration,
+          identifierResolver,
+          typeResolver,
+          classIntrospector,
+          typeDeclarationResolver);
+
+  @override
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+          DeclarationImpl declaration, IdentifierResolver identifierResolver) =>
+      _executors[macro]!
+          .executeTypesPhase(macro, declaration, identifierResolver);
+
+  @override
+  Future<MacroInstanceIdentifier> instantiateMacro(
+      MacroClassIdentifier macroClass,
+      String constructor,
+      Arguments arguments) async {
+    MacroExecutor executor = _executors[macroClass]!;
+    MacroInstanceIdentifier instance =
+        await executor.instantiateMacro(macroClass, constructor, arguments);
+    _executors[instance] = executor;
+    return instance;
+  }
+
+  @override
+  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+      {Uri? precompiledKernelUri}) async {
+    MacroClassIdentifier identifier =
+        new MacroClassIdentifierImpl(library, name);
+    _executors.remove(identifier)?.close();
+
+    MacroExecutor executor = await _spawnExecutor(library, name,
+        precompiledKernelUri: precompiledKernelUri);
+    _executors[identifier] = executor;
+    return identifier;
+  }
+}
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
new file mode 100644
index 0000000..ed67219
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/process_executor.dart
@@ -0,0 +1,117 @@
+// 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 'dart:convert';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:_fe_analyzer_shared/src/macros/executor/protocol.dart';
+
+import '../executor/message_grouper.dart';
+import '../executor/multi_executor.dart';
+import '../executor/executor_base.dart';
+import '../executor/serialization.dart';
+import '../executor.dart';
+
+/// Returns a [MacroExecutor] which loads macros as separate processes using
+/// precompiled binaries and communicates with that program using
+/// [serializationMode].
+///
+/// The [serializationMode] must be a `server` variant, and any precompiled
+/// programs spawned must use the corresponding `client` variant.
+///
+/// This is the only public api exposed by this library.
+Future<MacroExecutor> start(SerializationMode serializationMode) async =>
+    new MultiMacroExecutor((Uri library, String name,
+        {Uri? precompiledKernelUri}) {
+      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());
+    });
+
+/// Actual implementation of the separate process based macro executor.
+class _SingleProcessMacroExecutor extends ExternalMacroExecutorBase {
+  /// The IOSink that writes to stdin of the external process.
+  final IOSink outSink;
+
+  /// A function that should be invoked when shutting down this executor
+  /// to perform any necessary cleanup.
+  final void Function() onClose;
+
+  _SingleProcessMacroExecutor(
+      {required Stream<Object> messageStream,
+      required this.onClose,
+      required this.outSink,
+      required SerializationMode serializationMode})
+      : super(
+            messageStream: messageStream, serializationMode: serializationMode);
+
+  static Future<_SingleProcessMacroExecutor> start(Uri library, String name,
+      SerializationMode serializationMode, String programPath) async {
+    Process process = await Process.start(programPath, []);
+    process.stderr
+        .transform(const Utf8Decoder())
+        .listen((content) => throw new RemoteException(content));
+
+    Stream<Object> messageStream;
+
+    if (serializationMode == SerializationMode.byteDataServer) {
+      messageStream = new MessageGrouper(process.stdout).messageStream;
+    } else if (serializationMode == SerializationMode.jsonServer) {
+      messageStream = process.stdout
+          .transform(const Utf8Decoder())
+          .transform(const LineSplitter())
+          .map((line) => jsonDecode(line)!);
+    } else {
+      throw new UnsupportedError(
+          'Unsupported serialization mode \$serializationMode for '
+          'ProcessExecutor');
+    }
+
+    return new _SingleProcessMacroExecutor(
+        onClose: () {
+          process.kill();
+        },
+        messageStream: messageStream,
+        outSink: process.stdin,
+        serializationMode: serializationMode);
+  }
+
+  @override
+  void close() => onClose();
+
+  /// Sends the [Serializer.result] to [stdin].
+  ///
+  /// Json results are serialized to a `String`, and separated by newlines.
+  void sendResult(Serializer serializer) {
+    if (serializationMode == SerializationMode.jsonServer) {
+      outSink.writeln(jsonEncode(serializer.result));
+    } else if (serializationMode == SerializationMode.byteDataServer) {
+      Uint8List result = (serializer as ByteDataSerializer).result;
+      int length = result.lengthInBytes;
+      if (length > 0xffffffff) {
+        throw new StateError('Message was larger than the allowed size!');
+      }
+      outSink.add([
+        length >> 24 & 0xff,
+        length >> 16 & 0xff,
+        length >> 8 & 0xff,
+        length & 0xff
+      ]);
+      outSink.add(result);
+    } else {
+      throw new UnsupportedError(
+          'Unsupported serialization mode $serializationMode for '
+          'ProcessExecutor');
+    }
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
new file mode 100644
index 0000000..73d051c6
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/protocol.dart
@@ -0,0 +1,786 @@
+// 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.
+
+/// Defines the objects used for communication between the macro executor and
+/// the isolate or process doing the work of macro loading and execution.
+library _fe_analyzer_shared.src.macros.executor_shared.protocol;
+
+import 'package:meta/meta.dart';
+
+import '../executor.dart';
+import '../api.dart';
+import '../executor/response_impls.dart';
+import 'introspection_impls.dart';
+import 'remote_instance.dart';
+import 'serialization.dart';
+import 'serialization_extensions.dart';
+
+/// Base class all requests extend, provides a unique id for each request.
+abstract class Request implements Serializable {
+  final int id;
+
+  final int serializationZoneId;
+
+  Request({int? id, required this.serializationZoneId})
+      : this.id = id ?? _next++;
+
+  /// The [serializationZoneId] is a part of the header and needs to be parsed
+  /// before deserializing objects, and then passed in here.
+  Request.deserialize(Deserializer deserializer, this.serializationZoneId)
+      : id = (deserializer..moveNext()).expectInt();
+
+  /// The [serializationZoneId] needs to be separately serialized before the
+  /// rest of the object. This is not done by the instances themselves but by
+  /// the macro implementations.
+  @mustCallSuper
+  void serialize(Serializer serializer) => serializer.addInt(id);
+
+  static int _next = 0;
+}
+
+/// A generic response object that contains either a response or an error, and
+/// a unique ID.
+class Response {
+  final Object? response;
+  final Object? error;
+  final String? stackTrace;
+  final int requestId;
+  final MessageType responseType;
+
+  Response({
+    this.response,
+    this.error,
+    this.stackTrace,
+    required this.requestId,
+    required this.responseType,
+  })  : assert(response != null || error != null),
+        assert(response == null || error == null);
+}
+
+/// A serializable [Response], contains the message type as an enum.
+class SerializableResponse implements Response, Serializable {
+  final Serializable? response;
+  final MessageType responseType;
+  final String? error;
+  final String? stackTrace;
+  final int requestId;
+  final int serializationZoneId;
+
+  SerializableResponse({
+    this.error,
+    this.stackTrace,
+    required this.requestId,
+    this.response,
+    required this.responseType,
+    required this.serializationZoneId,
+  });
+
+  /// You must first parse the [serializationZoneId] yourself, and then
+  /// call this function in that zone, and pass the ID.
+  factory SerializableResponse.deserialize(
+      Deserializer deserializer, int serializationZoneId) {
+    deserializer.moveNext();
+    MessageType responseType = MessageType.values[deserializer.expectInt()];
+    Serializable? response;
+    String? error;
+    String? stackTrace;
+    switch (responseType) {
+      case MessageType.error:
+        deserializer.moveNext();
+        error = deserializer.expectString();
+        deserializer.moveNext();
+        stackTrace = deserializer.expectNullableString();
+        break;
+      case MessageType.macroClassIdentifier:
+        response = new MacroClassIdentifierImpl.deserialize(deserializer);
+        break;
+      case MessageType.macroInstanceIdentifier:
+        response = new MacroInstanceIdentifierImpl.deserialize(deserializer);
+        break;
+      case MessageType.macroExecutionResult:
+        response = new MacroExecutionResultImpl.deserialize(deserializer);
+        break;
+      case MessageType.staticType:
+      case MessageType.namedStaticType:
+        response = RemoteInstance.deserialize(deserializer);
+        break;
+      case MessageType.boolean:
+        response = new BooleanValue.deserialize(deserializer);
+        break;
+      case MessageType.declarationList:
+        response = new DeclarationList.deserialize(deserializer);
+        break;
+      case MessageType.remoteInstance:
+        deserializer.moveNext();
+        if (!deserializer.checkNull()) {
+          response = deserializer.expectRemoteInstance();
+        }
+        break;
+      default:
+        throw new StateError('Unexpected response type $responseType');
+    }
+
+    return new SerializableResponse(
+        responseType: responseType,
+        response: response,
+        error: error,
+        stackTrace: stackTrace,
+        requestId: (deserializer..moveNext()).expectInt(),
+        serializationZoneId: serializationZoneId);
+  }
+
+  void serialize(Serializer serializer) {
+    serializer
+      ..addInt(serializationZoneId)
+      ..addInt(MessageType.response.index)
+      ..addInt(responseType.index);
+    switch (responseType) {
+      case MessageType.error:
+        serializer.addString(error!.toString());
+        serializer.addNullableString(stackTrace);
+        break;
+      default:
+        response.serializeNullable(serializer);
+    }
+    serializer.addInt(requestId);
+  }
+}
+
+class BooleanValue implements Serializable {
+  final bool value;
+
+  BooleanValue(this.value);
+
+  BooleanValue.deserialize(Deserializer deserializer)
+      : value = (deserializer..moveNext()).expectBool();
+
+  @override
+  void serialize(Serializer serializer) => serializer..addBool(value);
+}
+
+/// A serialized list of [Declaration]s.
+class DeclarationList<T extends DeclarationImpl> implements Serializable {
+  final List<T> declarations;
+
+  DeclarationList(this.declarations);
+
+  DeclarationList.deserialize(Deserializer deserializer)
+      : declarations = [
+          for (bool hasNext = (deserializer
+                    ..moveNext()
+                    ..expectList())
+                  .moveNext();
+              hasNext;
+              hasNext = deserializer.moveNext())
+            deserializer.expectRemoteInstance(),
+        ];
+
+  @override
+  void serialize(Serializer serializer) {
+    serializer.startList();
+    for (DeclarationImpl declaration in declarations) {
+      declaration.serialize(serializer);
+    }
+    serializer.endList();
+  }
+}
+
+/// A request to load a macro in this isolate.
+class LoadMacroRequest extends Request {
+  final Uri library;
+  final String name;
+
+  LoadMacroRequest(this.library, this.name, {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  LoadMacroRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : library = Uri.parse((deserializer..moveNext()).expectString()),
+        name = (deserializer..moveNext()).expectString(),
+        super.deserialize(deserializer, serializationZoneId);
+
+  @override
+  void serialize(Serializer serializer) {
+    serializer
+      ..addInt(MessageType.loadMacroRequest.index)
+      ..addString(library.toString())
+      ..addString(name);
+    super.serialize(serializer);
+  }
+}
+
+/// A request to instantiate a macro instance.
+class InstantiateMacroRequest extends Request {
+  final MacroClassIdentifier macroClass;
+  final String constructorName;
+  final Arguments arguments;
+
+  /// The ID to assign to the identifier, this needs to come from the requesting
+  /// side so that it is unique.
+  final int instanceId;
+
+  InstantiateMacroRequest(
+      this.macroClass, this.constructorName, this.arguments, this.instanceId,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  InstantiateMacroRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : macroClass = new MacroClassIdentifierImpl.deserialize(deserializer),
+        constructorName = (deserializer..moveNext()).expectString(),
+        arguments = new Arguments.deserialize(deserializer),
+        instanceId = (deserializer..moveNext()).expectInt(),
+        super.deserialize(deserializer, serializationZoneId);
+
+  @override
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.instantiateMacroRequest.index);
+    macroClass.serialize(serializer);
+    serializer.addString(constructorName);
+    arguments.serialize(serializer);
+    serializer.addInt(instanceId);
+    super.serialize(serializer);
+  }
+}
+
+/// A request to execute a macro on a particular declaration in the types phase.
+class ExecuteTypesPhaseRequest extends Request {
+  final MacroInstanceIdentifier macro;
+  final DeclarationImpl declaration;
+  final RemoteInstanceImpl identifierResolver;
+
+  ExecuteTypesPhaseRequest(
+      this.macro, this.declaration, this.identifierResolver,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  ExecuteTypesPhaseRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
+        declaration = RemoteInstance.deserialize(deserializer),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.executeTypesPhaseRequest.index);
+    macro.serialize(serializer);
+    declaration.serialize(serializer);
+    identifierResolver.serialize(serializer);
+
+    super.serialize(serializer);
+  }
+}
+
+/// A request to execute a macro on a particular declaration in the definition
+/// phase.
+class ExecuteDeclarationsPhaseRequest extends Request {
+  final MacroInstanceIdentifier macro;
+  final DeclarationImpl declaration;
+
+  final RemoteInstanceImpl identifierResolver;
+  final RemoteInstanceImpl typeResolver;
+  final RemoteInstanceImpl classIntrospector;
+
+  ExecuteDeclarationsPhaseRequest(this.macro, this.declaration,
+      this.identifierResolver, this.typeResolver, this.classIntrospector,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  ExecuteDeclarationsPhaseRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
+        declaration = RemoteInstance.deserialize(deserializer),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
+        typeResolver = RemoteInstance.deserialize(deserializer),
+        classIntrospector = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.executeDeclarationsPhaseRequest.index);
+    macro.serialize(serializer);
+    declaration.serialize(serializer);
+    identifierResolver.serialize(serializer);
+    typeResolver.serialize(serializer);
+    classIntrospector.serialize(serializer);
+
+    super.serialize(serializer);
+  }
+}
+
+/// A request to execute a macro on a particular declaration in the definition
+/// phase.
+class ExecuteDefinitionsPhaseRequest extends Request {
+  final MacroInstanceIdentifier macro;
+  final DeclarationImpl declaration;
+
+  final RemoteInstanceImpl identifierResolver;
+  final RemoteInstanceImpl typeResolver;
+  final RemoteInstanceImpl classIntrospector;
+  final RemoteInstanceImpl typeDeclarationResolver;
+
+  ExecuteDefinitionsPhaseRequest(
+      this.macro,
+      this.declaration,
+      this.identifierResolver,
+      this.typeResolver,
+      this.classIntrospector,
+      this.typeDeclarationResolver,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  ExecuteDefinitionsPhaseRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
+        declaration = RemoteInstance.deserialize(deserializer),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
+        typeResolver = RemoteInstance.deserialize(deserializer),
+        classIntrospector = RemoteInstance.deserialize(deserializer),
+        typeDeclarationResolver = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.executeDefinitionsPhaseRequest.index);
+    macro.serialize(serializer);
+    declaration.serialize(serializer);
+    identifierResolver.serialize(serializer);
+    typeResolver.serialize(serializer);
+    classIntrospector.serialize(serializer);
+    typeDeclarationResolver.serialize(serializer);
+
+    super.serialize(serializer);
+  }
+}
+
+/// A request to create a resolved identifier.
+class ResolveIdentifierRequest extends Request {
+  final Uri library;
+  final String name;
+
+  final RemoteInstanceImpl identifierResolver;
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  ResolveIdentifierRequest(this.library, this.name, this.identifierResolver,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  ResolveIdentifierRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : library = Uri.parse((deserializer..moveNext()).expectString()),
+        name = (deserializer..moveNext()).expectString(),
+        identifierResolver = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer
+      ..addInt(MessageType.resolveIdentifierRequest.index)
+      ..addString(library.toString())
+      ..addString(name);
+    identifierResolver.serialize(serializer);
+
+    super.serialize(serializer);
+  }
+}
+
+/// A request to resolve on a type annotation code object
+class ResolveTypeRequest extends Request {
+  final TypeAnnotationCode typeAnnotationCode;
+  final RemoteInstanceImpl typeResolver;
+
+  ResolveTypeRequest(this.typeAnnotationCode, this.typeResolver,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  ResolveTypeRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : typeAnnotationCode = (deserializer..moveNext()).expectCode(),
+        typeResolver = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.resolveTypeRequest.index);
+    typeAnnotationCode.serialize(serializer);
+    typeResolver.serialize(serializer);
+    super.serialize(serializer);
+  }
+}
+
+/// A request to check if a type is exactly another type.
+class IsExactlyTypeRequest extends Request {
+  final RemoteInstanceImpl leftType;
+  final RemoteInstanceImpl rightType;
+
+  IsExactlyTypeRequest(this.leftType, this.rightType,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  IsExactlyTypeRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : leftType = RemoteInstance.deserialize(deserializer),
+        rightType = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.isExactlyTypeRequest.index);
+    leftType.serialize(serializer);
+    rightType.serialize(serializer);
+    super.serialize(serializer);
+  }
+}
+
+/// A request to check if a type is exactly another type.
+class IsSubtypeOfRequest extends Request {
+  final RemoteInstanceImpl leftType;
+  final RemoteInstanceImpl rightType;
+
+  IsSubtypeOfRequest(this.leftType, this.rightType,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  IsSubtypeOfRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : leftType = RemoteInstance.deserialize(deserializer),
+        rightType = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.isSubtypeOfRequest.index);
+    leftType.serialize(serializer);
+    rightType.serialize(serializer);
+    super.serialize(serializer);
+  }
+}
+
+/// A general request class for all requests coming from methods on the
+/// [ClassIntrospector] interface.
+class ClassIntrospectionRequest extends Request {
+  final ClassDeclarationImpl classDeclaration;
+  final RemoteInstanceImpl classIntrospector;
+  final MessageType requestKind;
+
+  ClassIntrospectionRequest(
+      this.classDeclaration, this.classIntrospector, this.requestKind,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again and it should instead be passed in here.
+  ClassIntrospectionRequest.deserialize(
+      Deserializer deserializer, this.requestKind, int serializationZoneId)
+      : classDeclaration = RemoteInstance.deserialize(deserializer),
+        classIntrospector = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  @override
+  void serialize(Serializer serializer) {
+    serializer.addInt(requestKind.index);
+    classDeclaration.serialize(serializer);
+    classIntrospector.serialize(serializer);
+    super.serialize(serializer);
+  }
+}
+
+/// A request to get a [TypeDeclaration] for a [StaticType].
+class DeclarationOfRequest extends Request {
+  final IdentifierImpl identifier;
+  final RemoteInstanceImpl typeDeclarationResolver;
+
+  DeclarationOfRequest(this.identifier, this.typeDeclarationResolver,
+      {required int serializationZoneId})
+      : super(serializationZoneId: serializationZoneId);
+
+  /// When deserializing we have already consumed the message type, so we don't
+  /// consume it again.
+  DeclarationOfRequest.deserialize(
+      Deserializer deserializer, int serializationZoneId)
+      : identifier = RemoteInstance.deserialize(deserializer),
+        typeDeclarationResolver = RemoteInstance.deserialize(deserializer),
+        super.deserialize(deserializer, serializationZoneId);
+
+  @override
+  void serialize(Serializer serializer) {
+    serializer.addInt(MessageType.declarationOfRequest.index);
+    identifier.serialize(serializer);
+    typeDeclarationResolver.serialize(serializer);
+    super.serialize(serializer);
+  }
+}
+
+/// Client side implementation of an [IdentifierResolver], which creates a
+/// [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.
+  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;
+
+  ClientIdentifierResolver(this._sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<Identifier> resolveIdentifier(Uri library, String name) async {
+    ResolveIdentifierRequest request = new ResolveIdentifierRequest(
+        library, name, remoteInstance,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse(await _sendRequest(request));
+  }
+}
+
+/// Client side implementation of a [TypeResolver], which creates a
+/// [ResolveTypeRequest] and passes it to a given [sendRequest] function which
+/// can return the [Response].
+class ClientTypeResolver implements TypeResolver {
+  /// 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;
+
+  ClientTypeResolver(this._sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<StaticType> resolve(TypeAnnotationCode typeAnnotation) async {
+    ResolveTypeRequest request = new ResolveTypeRequest(
+        typeAnnotation, remoteInstance,
+        serializationZoneId: serializationZoneId);
+    RemoteInstanceImpl remoteType =
+        _handleResponse(await _sendRequest(request));
+    switch (remoteType.kind) {
+      case RemoteInstanceKind.namedStaticType:
+        return new ClientNamedStaticTypeImpl(_sendRequest,
+            remoteInstance: remoteType,
+            serializationZoneId: serializationZoneId);
+      case RemoteInstanceKind.staticType:
+        return new ClientStaticTypeImpl(_sendRequest,
+            remoteInstance: remoteType,
+            serializationZoneId: serializationZoneId);
+      default:
+        throw new StateError(
+            'Expected either a StaticType or NamedStaticType but got '
+            '${remoteType.kind}');
+    }
+  }
+}
+
+class ClientStaticTypeImpl implements StaticType {
+  /// The actual remote instance of this static type.
+  final RemoteInstanceImpl remoteInstance;
+
+  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;
+
+  ClientStaticTypeImpl(this.sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<bool> isExactly(ClientStaticTypeImpl other) async {
+    IsExactlyTypeRequest request = new IsExactlyTypeRequest(
+        this.remoteInstance, other.remoteInstance,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<BooleanValue>(await sendRequest(request)).value;
+  }
+
+  @override
+  Future<bool> isSubtypeOf(ClientStaticTypeImpl other) async {
+    IsSubtypeOfRequest request = new IsSubtypeOfRequest(
+        remoteInstance, other.remoteInstance,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<BooleanValue>(await sendRequest(request)).value;
+  }
+}
+
+/// Named variant of the [ClientStaticTypeImpl].
+class ClientNamedStaticTypeImpl extends ClientStaticTypeImpl
+    implements NamedStaticType {
+  ClientNamedStaticTypeImpl(
+      Future<Response> Function(Request request) sendRequest,
+      {required RemoteInstanceImpl remoteInstance,
+      required int serializationZoneId})
+      : super(sendRequest,
+            remoteInstance: remoteInstance,
+            serializationZoneId: serializationZoneId);
+}
+
+/// Client side implementation of the [ClientClassIntrospector], converts all
+/// invocations into remote RPC calls.
+class ClientClassIntrospector implements ClassIntrospector {
+  /// The actual remote instance of this class introspector.
+  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;
+
+  ClientClassIntrospector(this.sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<List<ConstructorDeclaration>> constructorsOf(
+      ClassDeclarationImpl clazz) async {
+    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
+        clazz, remoteInstance, MessageType.constructorsOfRequest,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<DeclarationList>(await sendRequest(request))
+        .declarations
+        // TODO: Refactor so we can remove this cast
+        .cast();
+  }
+
+  @override
+  Future<List<FieldDeclaration>> fieldsOf(ClassDeclarationImpl clazz) async {
+    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
+        clazz, remoteInstance, MessageType.fieldsOfRequest,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<DeclarationList>(await sendRequest(request))
+        .declarations
+        // TODO: Refactor so we can remove this cast
+        .cast();
+  }
+
+  @override
+  Future<List<ClassDeclaration>> interfacesOf(
+      ClassDeclarationImpl clazz) async {
+    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
+        clazz, remoteInstance, MessageType.interfacesOfRequest,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<DeclarationList>(await sendRequest(request))
+        .declarations
+        // TODO: Refactor so we can remove this cast
+        .cast();
+  }
+
+  @override
+  Future<List<MethodDeclaration>> methodsOf(ClassDeclarationImpl clazz) async {
+    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
+        clazz, remoteInstance, MessageType.methodsOfRequest,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<DeclarationList>(await sendRequest(request))
+        .declarations
+        // TODO: Refactor so we can remove this cast
+        .cast();
+  }
+
+  @override
+  Future<List<ClassDeclaration>> mixinsOf(ClassDeclarationImpl clazz) async {
+    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
+        clazz, remoteInstance, MessageType.mixinsOfRequest,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<DeclarationList>(await sendRequest(request))
+        .declarations
+        // TODO: Refactor so we can remove this cast
+        .cast();
+  }
+
+  @override
+  Future<ClassDeclaration?> superclassOf(ClassDeclarationImpl clazz) async {
+    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
+        clazz, remoteInstance, MessageType.superclassOfRequest,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<ClassDeclaration?>(await sendRequest(request));
+  }
+}
+
+/// Client side implementation of a [TypeDeclarationResolver], converts all
+/// invocations into remote procedure calls.
+class ClientTypeDeclarationResolver implements TypeDeclarationResolver {
+  /// 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;
+
+  ClientTypeDeclarationResolver(this.sendRequest,
+      {required this.remoteInstance, required this.serializationZoneId});
+
+  @override
+  Future<TypeDeclaration> declarationOf(IdentifierImpl identifier) async {
+    DeclarationOfRequest request = new DeclarationOfRequest(
+        identifier, remoteInstance,
+        serializationZoneId: serializationZoneId);
+    return _handleResponse<TypeDeclaration>(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 {
+  final String error;
+  final String? stackTrace;
+
+  RemoteException(this.error, [this.stackTrace]);
+
+  String toString() =>
+      'RemoteException: $error${stackTrace == null ? '' : '\n\n$stackTrace'}';
+}
+
+/// Either returns the actual response from [response], casted to [T], or throws
+/// a [RemoteException] with the given error and stack trace.
+T _handleResponse<T>(Response response) {
+  if (response.responseType == MessageType.error) {
+    throw new RemoteException(response.error!.toString(), response.stackTrace);
+  }
+  return response.response as T;
+}
+
+enum MessageType {
+  boolean,
+  constructorsOfRequest,
+  declarationOfRequest,
+  declarationList,
+  fieldsOfRequest,
+  interfacesOfRequest,
+  methodsOfRequest,
+  mixinsOfRequest,
+  superclassOfRequest,
+  error,
+  executeDeclarationsPhaseRequest,
+  executeDefinitionsPhaseRequest,
+  executeTypesPhaseRequest,
+  instantiateMacroRequest,
+  resolveIdentifierRequest,
+  resolveTypeRequest,
+  isExactlyTypeRequest,
+  isSubtypeOfRequest,
+  loadMacroRequest,
+  remoteInstance,
+  macroClassIdentifier,
+  macroInstanceIdentifier,
+  macroExecutionResult,
+  namedStaticType,
+  response,
+  staticType,
+}
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
new file mode 100644
index 0000000..fc45704
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.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.
+
+import 'dart:async';
+
+import 'package:meta/meta.dart';
+
+import 'serialization.dart';
+import 'serialization_extensions.dart';
+
+/// The key used to store the remote instance cache in the current serialization
+/// zone (in server mode only).
+const Symbol remoteInstanceZoneKey = #remoteInstanceCache;
+
+/// On the server side we keep track of remote instances by their ID.
+///
+/// These are a part of the current serialization zone, which all serialization
+/// and deserialization must be done in.
+///
+/// This means the cache lifetime is that of the serialization zone it is run
+/// in.
+Map<int, RemoteInstance> get _remoteInstanceCache =>
+    Zone.current[remoteInstanceZoneKey];
+
+/// Base class for types that need to be able to be traced back to a specific
+/// instance on the server side.
+abstract class RemoteInstance implements Serializable {
+  /// The unique ID for this instance.
+  final int id;
+
+  /// The type of instance being encoded.
+  RemoteInstanceKind get kind;
+
+  /// Static, incrementing ids.
+  static int _nextId = 0;
+
+  /// Gets the next unique identifier.
+  static int get uniqueId => _nextId++;
+
+  /// On the client side [id]s are given and you should reconstruct objects with
+  /// the given ID. On the server side ids should be created using
+  /// [RemoteInstance.uniqueId].
+  RemoteInstance(this.id);
+
+  /// Retrieves a cached instance by ID.
+  static T cached<T>(int id) => _remoteInstanceCache[id] as T;
+
+  /// Deserializes an instance based on the current [serializationMode].
+  static T deserialize<T>(Deserializer deserializer) =>
+      (deserializer..moveNext()).expectRemoteInstance();
+
+  /// This method should be overridden by all subclasses, which should on their
+  /// first line call this super function.
+  ///
+  /// They should then return immediately if [serializationMode] is
+  /// [SerializationMode.client], so that only an ID is sent.
+  @mustCallSuper
+  void serialize(Serializer serializer) {
+    serializer.addInt(id);
+    // We only send the ID from the client side.
+    if (serializationMode.isClient) return;
+
+    serializer.addInt(kind.index);
+    _remoteInstanceCache[id] = this;
+  }
+
+  @override
+  bool operator ==(Object other) => other is RemoteInstance && id == other.id;
+}
+
+/// A remote instance which is just a pointer to some server side instance of
+/// a generic object.
+///
+/// The wrapped object is not serialized.
+class RemoteInstanceImpl extends RemoteInstance {
+  /// Always null on the client side, has an actual instance on the server side.
+  final Object? instance;
+
+  @override
+  final RemoteInstanceKind kind;
+
+  RemoteInstanceImpl({
+    required int id,
+    this.instance,
+    required this.kind,
+  }) : super(id);
+}
+
+// The kinds of instances.
+enum RemoteInstanceKind {
+  classDeclaration,
+  classIntrospector,
+  constructorDeclaration,
+  fieldDeclaration,
+  functionDeclaration,
+  functionTypeAnnotation,
+  identifier,
+  identifierResolver,
+  namedStaticType,
+  methodDeclaration,
+  namedTypeAnnotation,
+  parameterDeclaration,
+  staticType,
+  typeAliasDeclaration,
+  typeParameterDeclaration,
+  typeResolver,
+  typeDeclarationResolver,
+  variableDeclaration,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/response_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/response_impls.dart
new file mode 100644
index 0000000..eedc0bc
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/response_impls.dart
@@ -0,0 +1,289 @@
+// 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 '../executor.dart';
+import '../api.dart';
+import 'serialization.dart';
+import 'serialization_extensions.dart';
+
+/// Implementation of [MacroClassIdentifier].
+class MacroClassIdentifierImpl implements MacroClassIdentifier {
+  final String id;
+
+  MacroClassIdentifierImpl(Uri library, String name) : id = '$library#$name';
+
+  MacroClassIdentifierImpl.deserialize(Deserializer deserializer)
+      : id = (deserializer..moveNext()).expectString();
+
+  void serialize(Serializer serializer) => serializer.addString(id);
+
+  operator ==(other) => other is MacroClassIdentifierImpl && id == other.id;
+
+  int get hashCode => id.hashCode;
+}
+
+/// Implementation of [MacroInstanceIdentifier].
+class MacroInstanceIdentifierImpl implements MacroInstanceIdentifier {
+  /// Unique identifier for this instance, passed in from the server.
+  final int id;
+
+  /// A single int where each bit indicates whether a specific macro interface
+  /// is implemented by this macro.
+  final int _interfaces;
+
+  MacroInstanceIdentifierImpl._(this.id, this._interfaces);
+
+  factory MacroInstanceIdentifierImpl(Macro macro, int instanceId) {
+    // Build up the interfaces value, there is a bit for each declaration/phase
+    // combination (as there is an interface for each).
+    int interfaces = 0;
+    for (DeclarationKind declarationKind in DeclarationKind.values) {
+      for (Phase phase in Phase.values) {
+        int interfaceMask = _interfaceMask(declarationKind, phase);
+        switch (declarationKind) {
+          case DeclarationKind.clazz:
+            switch (phase) {
+              case Phase.types:
+                if (macro is ClassTypesMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.declarations:
+                if (macro is ClassDeclarationsMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.definitions:
+                if (macro is ClassDefinitionMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+            }
+            break;
+          case DeclarationKind.constructor:
+            switch (phase) {
+              case Phase.types:
+                if (macro is ConstructorTypesMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.declarations:
+                if (macro is ConstructorDeclarationsMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.definitions:
+                if (macro is ConstructorDefinitionMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+            }
+            break;
+          case DeclarationKind.field:
+            switch (phase) {
+              case Phase.types:
+                if (macro is FieldTypesMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.declarations:
+                if (macro is FieldDeclarationsMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.definitions:
+                if (macro is FieldDefinitionMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+            }
+            break;
+          case DeclarationKind.function:
+            switch (phase) {
+              case Phase.types:
+                if (macro is FunctionTypesMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.declarations:
+                if (macro is FunctionDeclarationsMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.definitions:
+                if (macro is FunctionDefinitionMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+            }
+            break;
+          case DeclarationKind.method:
+            switch (phase) {
+              case Phase.types:
+                if (macro is MethodTypesMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.declarations:
+                if (macro is MethodDeclarationsMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.definitions:
+                if (macro is MethodDefinitionMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+            }
+            break;
+          case DeclarationKind.variable:
+            switch (phase) {
+              case Phase.types:
+                if (macro is VariableTypesMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.declarations:
+                if (macro is VariableDeclarationsMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+              case Phase.definitions:
+                if (macro is VariableDefinitionMacro) {
+                  interfaces |= interfaceMask;
+                }
+                break;
+            }
+            break;
+        }
+      }
+    }
+
+    return new MacroInstanceIdentifierImpl._(instanceId, interfaces);
+  }
+
+  MacroInstanceIdentifierImpl.deserialize(Deserializer deserializer)
+      : id = (deserializer..moveNext()).expectInt(),
+        _interfaces = (deserializer..moveNext()).expectInt();
+
+  void serialize(Serializer serializer) => serializer
+    ..addInt(id)
+    ..addInt(_interfaces);
+
+  operator ==(other) => other is MacroInstanceIdentifierImpl && id == other.id;
+
+  int get hashCode => id;
+
+  @override
+  bool shouldExecute(DeclarationKind declarationKind, Phase phase) {
+    int mask = _interfaceMask(declarationKind, phase);
+    if (declarationKind == DeclarationKind.method) {
+      // Apply function macros to methods.
+      mask |= _interfaceMask(DeclarationKind.function, phase);
+    } else if (declarationKind == DeclarationKind.field) {
+      // Apply variable macros to fields.
+      mask |= _interfaceMask(DeclarationKind.variable, phase);
+    }
+    return _interfaces & mask != 0x0;
+  }
+
+  @override
+  bool supportsDeclarationKind(DeclarationKind declarationKind) {
+    for (Phase phase in Phase.values) {
+      if (shouldExecute(declarationKind, phase)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /// The mask for a particular interface, which is a combination of a kind of
+  /// declaration and a phase.
+  static int _interfaceMask(DeclarationKind declarationKind, Phase phase) =>
+      0x1 << (declarationKind.index * Phase.values.length) << phase.index;
+}
+
+/// Implementation of [MacroExecutionResult].
+class MacroExecutionResultImpl implements MacroExecutionResult {
+  @override
+  final Map<String, List<DeclarationCode>> classAugmentations;
+
+  @override
+  final List<DeclarationCode> libraryAugmentations;
+
+  @override
+  final List<String> newTypeNames;
+
+  MacroExecutionResultImpl({
+    required this.classAugmentations,
+    required this.libraryAugmentations,
+    required this.newTypeNames,
+  });
+
+  factory MacroExecutionResultImpl.deserialize(Deserializer deserializer) {
+    deserializer.moveNext();
+    deserializer.expectList();
+    Map<String, List<DeclarationCode>> classAugmentations = {
+      for (bool hasNext = deserializer.moveNext();
+          hasNext;
+          hasNext = deserializer.moveNext())
+        deserializer.expectString(): [
+          for (bool hasNextCode = (deserializer
+                    ..moveNext()
+                    ..expectList())
+                  .moveNext();
+              hasNextCode;
+              hasNextCode = deserializer.moveNext())
+            deserializer.expectCode(),
+        ]
+    };
+
+    deserializer.moveNext();
+    deserializer.expectList();
+    List<DeclarationCode> libraryAugmentations = [
+      for (bool hasNext = deserializer.moveNext();
+          hasNext;
+          hasNext = deserializer.moveNext())
+        deserializer.expectCode()
+    ];
+    deserializer.moveNext();
+    deserializer.expectList();
+    List<String> newTypeNames = [
+      for (bool hasNext = deserializer.moveNext();
+          hasNext;
+          hasNext = deserializer.moveNext())
+        deserializer.expectString()
+    ];
+
+    return new MacroExecutionResultImpl(
+      classAugmentations: classAugmentations,
+      libraryAugmentations: libraryAugmentations,
+      newTypeNames: newTypeNames,
+    );
+  }
+
+  void serialize(Serializer serializer) {
+    serializer.startList();
+    for (String clazz in classAugmentations.keys) {
+      serializer.addString(clazz);
+      serializer.startList();
+      for (DeclarationCode augmentation in classAugmentations[clazz]!) {
+        augmentation.serialize(serializer);
+      }
+      serializer.endList();
+    }
+    serializer.endList();
+
+    serializer.startList();
+    for (DeclarationCode augmentation in libraryAugmentations) {
+      augmentation.serialize(serializer);
+    }
+    serializer.endList();
+    serializer.startList();
+    for (String name in newTypeNames) {
+      serializer.addString(name);
+    }
+    serializer.endList();
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization.dart
new file mode 100644
index 0000000..50d98fd
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization.dart
@@ -0,0 +1,629 @@
+// 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 'dart:typed_data';
+
+import 'remote_instance.dart';
+
+/// All serialization must be done in a serialization Zone, which tells it
+/// whether we are the client or server.
+///
+/// In [SerializationMode.server], sets up a remote instance cache to use when
+/// deserializing remote instances back to their original instance.
+T withSerializationMode<T>(
+  SerializationMode mode,
+  T Function() fn, {
+  Serializer Function()? serializerFactory,
+  Deserializer Function(Object? data)? deserializerFactory,
+}) =>
+    runZoned(fn, zoneValues: {
+      #serializationMode: mode,
+      if (!mode.isClient) remoteInstanceZoneKey: <int, RemoteInstance>{}
+    });
+
+/// Serializable interface
+abstract class Serializable {
+  /// Serializes this object using [serializer].
+  void serialize(Serializer serializer);
+}
+
+/// A push based object serialization interface.
+abstract class Serializer {
+  /// Serializes a [String].
+  void addString(String value);
+
+  /// Serializes a nullable [String].
+  void addNullableString(String? value) =>
+      value == null ? addNull() : addString(value);
+
+  /// Serializes a [double].
+  void addDouble(double value);
+
+  /// Serializes a nullable [double].
+  void addNullableDouble(double? value) =>
+      value == null ? addNull() : addDouble(value);
+
+  /// Serializes an [int].
+  void addInt(int value);
+
+  /// Serializes a nullable [int].
+  void addNullableInt(int? value) => value == null ? addNull() : addInt(value);
+
+  /// Serializes a [bool].
+  void addBool(bool value);
+
+  /// Serializes a nullable [bool].
+  void addNullableBool(bool? value) =>
+      value == null ? addNull() : addBool(value);
+
+  /// Serializes a `null` literal.
+  void addNull();
+
+  /// Used to signal the start of an arbitrary length list of items.
+  void startList();
+
+  /// Used to signal the end of an arbitrary length list of items.
+  void endList();
+
+  /// Returns the resulting serialized object.
+  Object get result;
+}
+
+/// A pull based object deserialization interface.
+///
+/// You must call [moveNext] before reading any items, and in order to advance
+/// to the next item.
+abstract class Deserializer {
+  /// Checks if the current value is a null, returns `true` if so and `false`
+  /// otherwise.
+  bool checkNull();
+
+  /// Reads the current value as a non-nullable [String].
+  bool expectBool();
+
+  /// Reads the current value as a nullable [bool].
+  bool? expectNullableBool() => checkNull() ? null : expectBool();
+
+  /// Reads the current value as a non-nullable [double].
+  double expectDouble();
+
+  /// Reads the current value as a nullable [double].
+  double? expectNullableDouble() => checkNull() ? null : expectDouble();
+
+  /// Reads the current value as a non-nullable [int].
+  int expectInt();
+
+  /// Reads the current value as a nullable [int].
+  int? expectNullableInt() => checkNull() ? null : expectInt();
+
+  /// Reads the current value as a non-nullable [String].
+  String expectString();
+
+  /// Reads the current value as a nullable [String].
+  String? expectNullableString() => checkNull() ? null : expectString();
+
+  /// Asserts that the current item is the start of a list.
+  ///
+  /// An example for how to read from a list is as follows:
+  ///
+  /// var json = JsonReader.fromString(source);
+  /// I know it's a list of strings.
+  ///
+  /// ```
+  ///   var result = <String>[];
+  ///   deserializer.moveNext();
+  ///   deserializer.expectList();
+  ///   while (json.moveNext()) {
+  ///     result.add(json.expectString());
+  ///   }
+  ///   // Can now read later items, but need to call `moveNext` again to move
+  ///   // past the list.
+  ///   deserializer.moveNext();
+  ///   deserializer.expectBool();
+  /// ```
+  void expectList();
+
+  /// Moves to the next item, returns `false` if there are no more items to
+  /// read.
+  ///
+  /// If inside of a list, this returns `false` when the end of the list is
+  /// reached, and moves back to the parent, but does not advance it, so another
+  /// call to `moveNext` is needed. See example in the [expectList] docs.
+  bool moveNext();
+}
+
+class JsonSerializer implements Serializer {
+  /// The full result.
+  final _result = <Object?>[];
+
+  /// A path to the current list we are modifying.
+  late List<List<Object?>> _path = [_result];
+
+  /// Returns the result as an unmodifiable [Iterable].
+  ///
+  /// Asserts that all [List] entries have not been closed with [endList].
+  @override
+  Iterable<Object?> get result {
+    assert(_path.length == 1);
+    return _result;
+  }
+
+  @override
+  void addBool(bool value) => _path.last.add(value);
+  @override
+  void addNullableBool(bool? value) => _path.last.add(value);
+
+  @override
+  void addDouble(double value) => _path.last.add(value);
+  @override
+  void addNullableDouble(double? value) => _path.last.add(value);
+
+  @override
+  void addInt(int value) => _path.last.add(value);
+  @override
+  void addNullableInt(int? value) => _path.last.add(value);
+
+  @override
+  void addString(String value) => _path.last.add(value);
+  @override
+  void addNullableString(String? value) => _path.last.add(value);
+
+  @override
+  void addNull() => _path.last.add(null);
+
+  @override
+  void startList() {
+    List<Object?> sublist = [];
+    _path.last.add(sublist);
+    _path.add(sublist);
+  }
+
+  @override
+  void endList() {
+    _path.removeLast();
+  }
+}
+
+class JsonDeserializer implements Deserializer {
+  /// The root source list to read from.
+  final Iterable<Object?> _source;
+
+  /// The path to the current iterator we are reading from.
+  late List<Iterator<Object?>> _path = [];
+
+  /// Whether we have received our first [moveNext] call.
+  bool _initialized = false;
+
+  /// Initialize this deserializer from `_source`.
+  JsonDeserializer(this._source);
+
+  @override
+  bool checkNull() => _expectValue<Object?>() == null;
+
+  @override
+  void expectList() => _path.add(_expectValue<Iterable<Object?>>().iterator);
+
+  @override
+  bool expectBool() => _expectValue();
+  @override
+  bool? expectNullableBool() => _expectValue();
+
+  @override
+  double expectDouble() => _expectValue();
+  @override
+  double? expectNullableDouble() => _expectValue();
+
+  @override
+  int expectInt() => _expectValue();
+  @override
+  int? expectNullableInt() => _expectValue();
+
+  @override
+  String expectString() => _expectValue();
+  @override
+  String? expectNullableString() => _expectValue();
+
+  /// Reads the current value and casts it to [T].
+  T _expectValue<T>() {
+    if (!_initialized) {
+      throw new StateError(
+          'You must call `moveNext()` before reading any values.');
+    }
+    return _path.last.current as T;
+  }
+
+  @override
+  bool moveNext() {
+    if (!_initialized) {
+      _path.add(_source.iterator);
+      _initialized = true;
+    }
+
+    // Move the current iterable, if its at the end of its items remove it from
+    // the current path and return false.
+    if (!_path.last.moveNext()) {
+      _path.removeLast();
+      return false;
+    }
+
+    return true;
+  }
+}
+
+class ByteDataSerializer extends Serializer {
+  final BytesBuilder _builder = new BytesBuilder();
+
+  // Re-usable 8 byte list and view for encoding doubles.
+  final Uint8List _eightByteList = new Uint8List(8);
+  late final ByteData _eightByteListData =
+      new ByteData.sublistView(_eightByteList);
+
+  @override
+  void addBool(bool value) => _builder
+      .addByte(value ? DataKind.boolTrue.index : DataKind.boolFalse.index);
+
+  @override
+  void addDouble(double value) {
+    _eightByteListData.setFloat64(0, value);
+    _builder
+      ..addByte(DataKind.float64.index)
+      ..add(_eightByteList);
+  }
+
+  @override
+  void addNull() => _builder.addByte(DataKind.nil.index);
+
+  @override
+  void addInt(int value) {
+    if (value >= 0x0) {
+      if (value + DataKind.values.length <= 0xff) {
+        _builder..addByte(value + DataKind.values.length);
+      } else if (value <= 0xff) {
+        _builder
+          ..addByte(DataKind.uint8.index)
+          ..addByte(value);
+      } else if (value <= 0xffff) {
+        _builder
+          ..addByte(DataKind.uint16.index)
+          ..addByte(value >> 8)
+          ..addByte(value);
+      } else if (value <= 0xffffffff) {
+        _builder
+          ..addByte(DataKind.uint32.index)
+          ..addByte(value >> 24)
+          ..addByte(value >> 16)
+          ..addByte(value >> 8)
+          ..addByte(value);
+      } else {
+        _builder
+          ..addByte(DataKind.uint64.index)
+          ..addByte(value >> 56)
+          ..addByte(value >> 48)
+          ..addByte(value >> 40)
+          ..addByte(value >> 32)
+          ..addByte(value >> 24)
+          ..addByte(value >> 16)
+          ..addByte(value >> 8)
+          ..addByte(value);
+      }
+    } else {
+      if (value >= -0x80) {
+        _builder
+          ..addByte(DataKind.int8.index)
+          ..addByte(value);
+      } else if (value >= -0x8000) {
+        _builder
+          ..addByte(DataKind.int16.index)
+          ..addByte(value >> 8)
+          ..addByte(value);
+      } else if (value >= -0x8000000) {
+        _builder
+          ..addByte(DataKind.int32.index)
+          ..addByte(value >> 24)
+          ..addByte(value >> 16)
+          ..addByte(value >> 8)
+          ..addByte(value);
+      } else {
+        _builder
+          ..addByte(DataKind.int64.index)
+          ..addByte(value >> 56)
+          ..addByte(value >> 48)
+          ..addByte(value >> 40)
+          ..addByte(value >> 32)
+          ..addByte(value >> 24)
+          ..addByte(value >> 16)
+          ..addByte(value >> 8)
+          ..addByte(value);
+      }
+    }
+  }
+
+  @override
+  void addString(String value) {
+    for (int i = 0; i < value.length; i++) {
+      if (value.codeUnitAt(i) > 0xff) {
+        _addTwoByteString(value);
+        return;
+      }
+    }
+    _addOneByteString(value);
+  }
+
+  void _addOneByteString(String value) {
+    _builder.addByte(DataKind.oneByteString.index);
+    addInt(value.length);
+    for (int i = 0; i < value.length; i++) {
+      _builder.addByte(value.codeUnitAt(i));
+    }
+  }
+
+  void _addTwoByteString(String value) {
+    _builder.addByte(DataKind.twoByteString.index);
+    addInt(value.length);
+    for (int i = 0; i < value.length; i++) {
+      int codeUnit = value.codeUnitAt(i);
+      switch (Endian.host) {
+        case Endian.little:
+          _builder
+            ..addByte(codeUnit)
+            ..addByte(codeUnit >> 8);
+          break;
+        case Endian.big:
+          _builder
+            ..addByte(codeUnit >> 8)
+            ..addByte(codeUnit);
+          break;
+      }
+    }
+  }
+
+  @override
+  void endList() => _builder.addByte(DataKind.endList.index);
+
+  @override
+  void startList() => _builder.addByte(DataKind.startList.index);
+
+  @override
+  Uint8List get result => _builder.takeBytes();
+}
+
+class ByteDataDeserializer extends Deserializer {
+  final ByteData _bytes;
+  int _byteOffset = 0;
+  int? _byteOffsetIncrement = 0;
+
+  ByteDataDeserializer(this._bytes);
+
+  /// Reads the next [DataKind] and advances [_byteOffset].
+  DataKind _readKind([int offset = 0]) {
+    int value = _bytes.getUint8(_byteOffset + offset);
+    if (value < DataKind.values.length) {
+      return DataKind.values[value];
+    } else {
+      return DataKind.directEncodedUint8;
+    }
+  }
+
+  @override
+  bool checkNull() {
+    _byteOffsetIncrement = 1;
+    return _readKind() == DataKind.nil;
+  }
+
+  @override
+  bool expectBool() {
+    DataKind kind = _readKind();
+    _byteOffsetIncrement = 1;
+    if (kind == DataKind.boolTrue) {
+      return true;
+    } else if (kind == DataKind.boolFalse) {
+      return false;
+    } else {
+      throw new StateError('Expected a bool but found a $kind');
+    }
+  }
+
+  @override
+  double expectDouble() {
+    DataKind kind = _readKind();
+    if (kind != DataKind.float64) {
+      throw new StateError('Expected a double but found a $kind');
+    }
+    _byteOffsetIncrement = 9;
+    return _bytes.getFloat64(_byteOffset + 1);
+  }
+
+  @override
+  int expectInt() => _expectInt(0);
+
+  int _expectInt(int offset) {
+    DataKind kind = _readKind(offset);
+    if (kind == DataKind.directEncodedUint8) {
+      _byteOffsetIncrement = offset + 1;
+      return _bytes.getUint8(_byteOffset + offset) - DataKind.values.length;
+    }
+    offset += 1;
+    int result;
+    switch (kind) {
+      case DataKind.int8:
+        result = _bytes.getInt8(_byteOffset + offset);
+        _byteOffsetIncrement = 1 + offset;
+        break;
+      case DataKind.int16:
+        result = _bytes.getInt16(_byteOffset + offset);
+        _byteOffsetIncrement = 2 + offset;
+        break;
+      case DataKind.int32:
+        result = _bytes.getInt32(_byteOffset + offset);
+        _byteOffsetIncrement = 4 + offset;
+        break;
+      case DataKind.int64:
+        result = _bytes.getInt64(_byteOffset + offset);
+        _byteOffsetIncrement = 8 + offset;
+        break;
+      case DataKind.uint8:
+        result = _bytes.getUint8(_byteOffset + offset);
+        _byteOffsetIncrement = 1 + offset;
+        break;
+      case DataKind.uint16:
+        result = _bytes.getUint16(_byteOffset + offset);
+        _byteOffsetIncrement = 2 + offset;
+        break;
+      case DataKind.uint32:
+        result = _bytes.getUint32(_byteOffset + offset);
+        _byteOffsetIncrement = 4 + offset;
+        break;
+      case DataKind.uint64:
+        result = _bytes.getUint64(_byteOffset + offset);
+        _byteOffsetIncrement = 8 + offset;
+        break;
+      default:
+        throw new StateError('Expected an int but found a $kind');
+    }
+    return result;
+  }
+
+  @override
+  void expectList() {
+    DataKind kind = _readKind();
+    if (kind != DataKind.startList) {
+      throw new StateError('Expected the start to a list but found a $kind');
+    }
+    _byteOffsetIncrement = 1;
+  }
+
+  @override
+  String expectString() {
+    DataKind kind = _readKind();
+    int length = _expectInt(1);
+    int offset = _byteOffsetIncrement! + _byteOffset;
+    if (kind == DataKind.oneByteString) {
+      _byteOffsetIncrement = _byteOffsetIncrement! + length;
+      return new String.fromCharCodes(
+          _bytes.buffer.asUint8List(offset, length));
+    } else if (kind == DataKind.twoByteString) {
+      length = length * 2;
+      _byteOffsetIncrement = _byteOffsetIncrement! + length;
+      Uint8List bytes =
+          new Uint8List.fromList(_bytes.buffer.asUint8List(offset, length));
+      return new String.fromCharCodes(bytes.buffer.asUint16List());
+    } else {
+      throw new StateError('Expected a string but found a $kind');
+    }
+  }
+
+  @override
+  bool moveNext() {
+    int? increment = _byteOffsetIncrement;
+    _byteOffsetIncrement = null;
+    if (increment == null) {
+      throw new StateError("Can't move until consuming the current element");
+    }
+    _byteOffset += increment;
+    if (_byteOffset >= _bytes.lengthInBytes) {
+      return false;
+    } else if (_readKind() == DataKind.endList) {
+      // You don't explicitly consume list end markers.
+      _byteOffsetIncrement = 1;
+      return false;
+    } else {
+      return true;
+    }
+  }
+}
+
+enum DataKind {
+  nil,
+  boolTrue,
+  boolFalse,
+  directEncodedUint8, // Encoded in the kind byte.
+  startList,
+  endList,
+  int8,
+  int16,
+  int32,
+  int64,
+  uint8,
+  uint16,
+  uint32,
+  uint64,
+  float64,
+  oneByteString,
+  twoByteString,
+}
+
+/// Must be set using `withSerializationMode` before doing any serialization or
+/// deserialization.
+SerializationMode get serializationMode {
+  SerializationMode? mode =
+      Zone.current[#serializationMode] as SerializationMode?;
+  if (mode == null) {
+    throw new StateError('No SerializationMode set, you must do all '
+        'serialization inside a call to `withSerializationMode`.');
+  }
+  return mode;
+}
+
+/// Returns the current deserializer factory for the zone.
+Deserializer Function(Object?) get deserializerFactory {
+  switch (serializationMode) {
+    case SerializationMode.byteDataClient:
+    case SerializationMode.byteDataServer:
+      return (Object? message) => new ByteDataDeserializer(
+          new ByteData.sublistView(message as Uint8List));
+    case SerializationMode.jsonClient:
+    case SerializationMode.jsonServer:
+      return (Object? message) =>
+          new JsonDeserializer(message as Iterable<Object?>);
+  }
+}
+
+/// Returns the current serializer factory for the zone.
+Serializer Function() get serializerFactory {
+  switch (serializationMode) {
+    case SerializationMode.byteDataClient:
+    case SerializationMode.byteDataServer:
+      return () => new ByteDataSerializer();
+    case SerializationMode.jsonClient:
+    case SerializationMode.jsonServer:
+      return () => new JsonSerializer();
+  }
+}
+
+/// Some objects are serialized differently on the client side versus the server
+/// side. This indicates the different modes, as well as the format used.
+enum SerializationMode {
+  byteDataClient,
+  byteDataServer,
+  jsonServer,
+  jsonClient,
+}
+
+extension SerializationModeHelpers on SerializationMode {
+  bool get isClient {
+    switch (this) {
+      case SerializationMode.byteDataClient:
+      case SerializationMode.jsonClient:
+        return true;
+      case SerializationMode.byteDataServer:
+      case SerializationMode.jsonServer:
+        return false;
+    }
+  }
+
+  /// A stable string to write in code.
+  String get asCode {
+    switch (this) {
+      case SerializationMode.byteDataClient:
+        return 'SerializationMode.byteDataClient';
+      case SerializationMode.byteDataServer:
+        return 'SerializationMode.byteDataServer';
+      case SerializationMode.jsonClient:
+        return 'SerializationMode.jsonClient';
+      case SerializationMode.jsonServer:
+        return 'SerializationMode.jsonServer';
+    }
+  }
+}
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
new file mode 100644
index 0000000..d039f7d
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor/serialization_extensions.dart
@@ -0,0 +1,401 @@
+import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart';
+
+import 'remote_instance.dart';
+import 'serialization.dart';
+import '../api.dart';
+
+extension DeserializerExtensions on Deserializer {
+  T expectRemoteInstance<T>() {
+    int id = expectInt();
+
+    // Server side we just return the cached remote instance by ID.
+    if (!serializationMode.isClient) {
+      return RemoteInstance.cached(id) as T;
+    }
+
+    moveNext();
+    RemoteInstanceKind kind = RemoteInstanceKind.values[expectInt()];
+    switch (kind) {
+      case RemoteInstanceKind.classIntrospector:
+      case RemoteInstanceKind.identifierResolver:
+      case RemoteInstanceKind.namedStaticType:
+      case RemoteInstanceKind.staticType:
+      case RemoteInstanceKind.typeDeclarationResolver:
+      case RemoteInstanceKind.typeResolver:
+        // These are simple wrappers, just pass in the kind
+        return new RemoteInstanceImpl(id: id, kind: kind) as T;
+      case RemoteInstanceKind.classDeclaration:
+        moveNext();
+        return _expectClassDeclaration(id) as T;
+      case RemoteInstanceKind.constructorDeclaration:
+        moveNext();
+        return _expectConstructorDeclaration(id) as T;
+      case RemoteInstanceKind.fieldDeclaration:
+        moveNext();
+        return _expectFieldDeclaration(id) as T;
+      case RemoteInstanceKind.functionDeclaration:
+        moveNext();
+        return _expectFunctionDeclaration(id) as T;
+      case RemoteInstanceKind.functionTypeAnnotation:
+        moveNext();
+        return _expectFunctionTypeAnnotation(id) as T;
+      case RemoteInstanceKind.identifier:
+        moveNext();
+        return _expectIdentifier(id) as T;
+      case RemoteInstanceKind.methodDeclaration:
+        moveNext();
+        return _expectMethodDeclaration(id) as T;
+      case RemoteInstanceKind.namedTypeAnnotation:
+        moveNext();
+        return _expectNamedTypeAnnotation(id) as T;
+      case RemoteInstanceKind.parameterDeclaration:
+        moveNext();
+        return _expectParameterDeclaration(id) as T;
+      case RemoteInstanceKind.typeAliasDeclaration:
+        moveNext();
+        return _expectTypeAliasDeclaration(id) as T;
+      case RemoteInstanceKind.typeParameterDeclaration:
+        moveNext();
+        return _expectTypeParameterDeclaration(id) as T;
+      case RemoteInstanceKind.variableDeclaration:
+        moveNext();
+        return _expectVariableDeclaration(id) as T;
+    }
+  }
+
+  /// Helper method to read a list of [RemoteInstance]s.
+  List<T> _expectRemoteInstanceList<T extends RemoteInstance>() {
+    expectList();
+    return [
+      for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+        expectRemoteInstance(),
+    ];
+  }
+
+  NamedTypeAnnotation _expectNamedTypeAnnotation(int id) =>
+      new NamedTypeAnnotationImpl(
+        id: id,
+        isNullable: expectBool(),
+        identifier: RemoteInstance.deserialize(this),
+        typeArguments: (this..moveNext())._expectRemoteInstanceList(),
+      );
+
+  FunctionTypeAnnotation _expectFunctionTypeAnnotation(int id) =>
+      new FunctionTypeAnnotationImpl(
+        id: id,
+        isNullable: expectBool(),
+        returnType: RemoteInstance.deserialize(this),
+        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
+        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
+        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
+      );
+
+  Identifier _expectIdentifier(int id) => new IdentifierImpl(
+        id: id,
+        name: expectString(),
+      );
+
+  ParameterDeclaration _expectParameterDeclaration(int id) =>
+      new ParameterDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        isNamed: (this..moveNext()).expectBool(),
+        isRequired: (this..moveNext()).expectBool(),
+        type: RemoteInstance.deserialize(this),
+      );
+
+  TypeParameterDeclaration _expectTypeParameterDeclaration(int id) =>
+      new TypeParameterDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        bound: (this..moveNext()).checkNull() ? null : expectRemoteInstance(),
+      );
+
+  FunctionDeclaration _expectFunctionDeclaration(int id) =>
+      new FunctionDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        isAbstract: (this..moveNext()).expectBool(),
+        isExternal: (this..moveNext()).expectBool(),
+        isGetter: (this..moveNext()).expectBool(),
+        isOperator: (this..moveNext()).expectBool(),
+        isSetter: (this..moveNext()).expectBool(),
+        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
+        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
+        returnType: RemoteInstance.deserialize(this),
+        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
+      );
+
+  MethodDeclaration _expectMethodDeclaration(int id) =>
+      new MethodDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        isAbstract: (this..moveNext()).expectBool(),
+        isExternal: (this..moveNext()).expectBool(),
+        isGetter: (this..moveNext()).expectBool(),
+        isOperator: (this..moveNext()).expectBool(),
+        isSetter: (this..moveNext()).expectBool(),
+        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
+        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
+        returnType: RemoteInstance.deserialize(this),
+        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
+        definingClass: RemoteInstance.deserialize(this),
+        isStatic: (this..moveNext()).expectBool(),
+      );
+
+  ConstructorDeclaration _expectConstructorDeclaration(int id) =>
+      new ConstructorDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        isAbstract: (this..moveNext()).expectBool(),
+        isExternal: (this..moveNext()).expectBool(),
+        isGetter: (this..moveNext()).expectBool(),
+        isOperator: (this..moveNext()).expectBool(),
+        isSetter: (this..moveNext()).expectBool(),
+        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
+        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
+        returnType: RemoteInstance.deserialize(this),
+        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
+        definingClass: RemoteInstance.deserialize(this),
+        // There is an extra boolean here representing the `isStatic` field
+        // which we just skip past.
+        isFactory: (this
+              ..moveNext()
+              ..expectBool()
+              ..moveNext())
+            .expectBool(),
+      );
+
+  VariableDeclaration _expectVariableDeclaration(int id) =>
+      new VariableDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        isExternal: (this..moveNext()).expectBool(),
+        isFinal: (this..moveNext()).expectBool(),
+        isLate: (this..moveNext()).expectBool(),
+        type: RemoteInstance.deserialize(this),
+      );
+
+  FieldDeclaration _expectFieldDeclaration(int id) => new FieldDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        isExternal: (this..moveNext()).expectBool(),
+        isFinal: (this..moveNext()).expectBool(),
+        isLate: (this..moveNext()).expectBool(),
+        type: RemoteInstance.deserialize(this),
+        definingClass: RemoteInstance.deserialize(this),
+        isStatic: (this..moveNext()).expectBool(),
+      );
+
+  ClassDeclaration _expectClassDeclaration(int id) => new ClassDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
+        interfaces: (this..moveNext())._expectRemoteInstanceList(),
+        isAbstract: (this..moveNext()).expectBool(),
+        isExternal: (this..moveNext()).expectBool(),
+        mixins: (this..moveNext())._expectRemoteInstanceList(),
+        superclass:
+            (this..moveNext()).checkNull() ? null : expectRemoteInstance(),
+      );
+
+  TypeAliasDeclaration _expectTypeAliasDeclaration(int id) =>
+      new TypeAliasDeclarationImpl(
+        id: id,
+        identifier: expectRemoteInstance(),
+        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
+        aliasedType: RemoteInstance.deserialize(this),
+      );
+
+  List<String> _readStringList() => [
+        for (bool hasNext = (this
+                  ..moveNext()
+                  ..expectList())
+                .moveNext();
+            hasNext;
+            hasNext = moveNext())
+          expectString(),
+      ];
+
+  List<T> _readCodeList<T extends Code>() => [
+        for (bool hasNext = (this
+                  ..moveNext()
+                  ..expectList())
+                .moveNext();
+            hasNext;
+            hasNext = moveNext())
+          expectCode(),
+      ];
+
+  List<Object> _readParts() {
+    moveNext();
+    expectList();
+    List<Object> parts = [];
+    while (moveNext()) {
+      _CodePartKind partKind = _CodePartKind.values[expectInt()];
+      moveNext();
+      switch (partKind) {
+        case _CodePartKind.code:
+          parts.add(expectCode());
+          break;
+        case _CodePartKind.string:
+          parts.add(expectString());
+          break;
+        case _CodePartKind.identifier:
+          parts.add(expectRemoteInstance());
+          break;
+      }
+    }
+    return parts;
+  }
+
+  T expectCode<T extends Code>() {
+    CodeKind kind = CodeKind.values[expectInt()];
+
+    switch (kind) {
+      case CodeKind.raw:
+        return new Code.fromParts(_readParts()) as T;
+      case CodeKind.declaration:
+        return new DeclarationCode.fromParts(_readParts()) as T;
+      case CodeKind.expression:
+        return new ExpressionCode.fromParts(_readParts()) as T;
+      case CodeKind.functionBody:
+        return new FunctionBodyCode.fromParts(_readParts()) as T;
+      case CodeKind.functionTypeAnnotation:
+        return new FunctionTypeAnnotationCode(
+            namedParameters: _readCodeList(),
+            positionalParameters: _readCodeList(),
+            returnType: (this..moveNext()).expectNullableCode(),
+            typeParameters: _readCodeList()) as T;
+      case CodeKind.namedTypeAnnotation:
+        return new NamedTypeAnnotationCode(
+            name: RemoteInstance.deserialize(this),
+            typeArguments: _readCodeList()) as T;
+      case CodeKind.nullableTypeAnnotation:
+        return new NullableTypeAnnotationCode((this..moveNext()).expectCode())
+            as T;
+      case CodeKind.parameter:
+        return new ParameterCode(
+            defaultValue: (this..moveNext()).expectNullableCode(),
+            keywords: _readStringList(),
+            name: (this..moveNext()).expectString(),
+            type: (this..moveNext()).expectNullableCode()) as T;
+      case CodeKind.typeParameter:
+        return new TypeParameterCode(
+            bound: (this..moveNext()).expectNullableCode(),
+            name: (this..moveNext()).expectString()) as T;
+    }
+  }
+
+  T? expectNullableCode<T extends Code>() {
+    if (checkNull()) return null;
+    return expectCode();
+  }
+}
+
+extension SerializeNullable on Serializable? {
+  /// Either serializes a `null` literal or the object.
+  void serializeNullable(Serializer serializer) {
+    Serializable? self = this;
+    if (self == null) {
+      serializer.addNull();
+    } else {
+      self.serialize(serializer);
+    }
+  }
+}
+
+extension SerializeNullableCode on Code? {
+  /// Either serializes a `null` literal or the code object.
+  void serializeNullable(Serializer serializer) {
+    Code? self = this;
+    if (self == null) {
+      serializer.addNull();
+    } else {
+      self.serialize(serializer);
+    }
+  }
+}
+
+extension SerializeCode on Code {
+  void serialize(Serializer serializer) {
+    serializer.addInt(kind.index);
+    switch (kind) {
+      case CodeKind.namedTypeAnnotation:
+        NamedTypeAnnotationCode self = this as NamedTypeAnnotationCode;
+        (self.name as IdentifierImpl).serialize(serializer);
+        serializer.startList();
+        for (TypeAnnotationCode typeArg in self.typeArguments) {
+          typeArg.serialize(serializer);
+        }
+        serializer.endList();
+        return;
+      case CodeKind.functionTypeAnnotation:
+        FunctionTypeAnnotationCode self = this as FunctionTypeAnnotationCode;
+        serializer.startList();
+        for (ParameterCode named in self.namedParameters) {
+          named.serialize(serializer);
+        }
+        serializer
+          ..endList()
+          ..startList();
+        for (ParameterCode positional in self.positionalParameters) {
+          positional.serialize(serializer);
+        }
+        serializer..endList();
+        self.returnType.serializeNullable(serializer);
+        serializer.startList();
+        for (TypeParameterCode typeParam in self.typeParameters) {
+          typeParam.serialize(serializer);
+        }
+        serializer.endList();
+        return;
+      case CodeKind.nullableTypeAnnotation:
+        NullableTypeAnnotationCode self = this as NullableTypeAnnotationCode;
+        self.underlyingType.serialize(serializer);
+        return;
+      case CodeKind.parameter:
+        ParameterCode self = this as ParameterCode;
+        self.defaultValue.serializeNullable(serializer);
+        serializer.startList();
+        for (String keyword in self.keywords) {
+          serializer.addString(keyword);
+        }
+        serializer
+          ..endList()
+          ..addString(self.name);
+        self.type.serializeNullable(serializer);
+        return;
+      case CodeKind.typeParameter:
+        TypeParameterCode self = this as TypeParameterCode;
+        self.bound.serializeNullable(serializer);
+        serializer.addString(self.name);
+        return;
+      default:
+        serializer.startList();
+        for (Object part in parts) {
+          if (part is String) {
+            serializer
+              ..addInt(_CodePartKind.string.index)
+              ..addString(part);
+          } else if (part is Code) {
+            serializer.addInt(_CodePartKind.code.index);
+            part.serialize(serializer);
+          } else if (part is IdentifierImpl) {
+            serializer.addInt(_CodePartKind.identifier.index);
+            part.serialize(serializer);
+          } else {
+            throw new StateError('Unrecognized code part $part');
+          }
+        }
+        serializer.endList();
+        return;
+    }
+  }
+}
+
+enum _CodePartKind {
+  string,
+  code,
+  identifier,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/builder_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/builder_impls.dart
deleted file mode 100644
index 099c58e..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/builder_impls.dart
+++ /dev/null
@@ -1,378 +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/executor_shared/introspection_impls.dart';
-
-import '../executor.dart';
-import '../api.dart';
-import 'response_impls.dart';
-
-class TypeBuilderBase {
-  /// The final result, will be built up over `augment` calls.
-  final List<DeclarationCode> _augmentations;
-
-  /// Creates and returns a [MacroExecutionResult] out of the [_augmentations]
-  /// created by this builder.
-  MacroExecutionResult get result => new MacroExecutionResultImpl(
-        augmentations: _augmentations,
-        // TODO: Implement `imports`, or possibly drop it?
-        imports: [],
-      );
-
-  TypeBuilderBase({List<DeclarationCode>? parentAugmentations})
-      : _augmentations = parentAugmentations ?? [];
-}
-
-class TypeBuilderImpl extends TypeBuilderBase implements TypeBuilder {
-  @override
-  void declareType(DeclarationCode typeDeclaration) {
-    _augmentations.add(typeDeclaration);
-  }
-}
-
-/// Base class for all [DeclarationBuilder]s.
-class DeclarationBuilderBase extends TypeBuilderBase
-    implements ClassIntrospector, TypeResolver {
-  final ClassIntrospector classIntrospector;
-  final TypeResolver typeResolver;
-
-  DeclarationBuilderBase(this.classIntrospector, this.typeResolver,
-      {List<DeclarationCode>? parentAugmentations})
-      : super(parentAugmentations: parentAugmentations);
-
-  @override
-  Future<List<ConstructorDeclaration>> constructorsOf(ClassDeclaration clazz) =>
-      classIntrospector.constructorsOf(clazz);
-
-  @override
-  Future<List<FieldDeclaration>> fieldsOf(ClassDeclaration clazz) =>
-      classIntrospector.fieldsOf(clazz);
-
-  @override
-  Future<List<ClassDeclaration>> interfacesOf(ClassDeclaration clazz) =>
-      classIntrospector.interfacesOf(clazz);
-
-  @override
-  Future<List<MethodDeclaration>> methodsOf(ClassDeclaration clazz) =>
-      classIntrospector.methodsOf(clazz);
-
-  @override
-  Future<List<ClassDeclaration>> mixinsOf(ClassDeclaration clazz) =>
-      classIntrospector.mixinsOf(clazz);
-
-  @override
-  Future<ClassDeclaration?> superclassOf(ClassDeclaration clazz) =>
-      classIntrospector.superclassOf(clazz);
-
-  @override
-  Future<StaticType> instantiateCode(ExpressionCode code) =>
-      typeResolver.instantiateCode(code);
-
-  @override
-  Future<StaticType> instantiateType(TypeAnnotation typeAnnotation) =>
-      typeResolver.instantiateType(typeAnnotation);
-}
-
-class DeclarationBuilderImpl extends DeclarationBuilderBase
-    implements DeclarationBuilder {
-  DeclarationBuilderImpl(
-      ClassIntrospector classIntrospector, TypeResolver typeResolver)
-      : super(classIntrospector, typeResolver);
-
-  @override
-  void declareInLibrary(DeclarationCode declaration) {
-    _augmentations.add(declaration);
-  }
-}
-
-class ClassMemberDeclarationBuilderImpl extends DeclarationBuilderImpl
-    implements ClassMemberDeclarationBuilder {
-  final Identifier definingClass;
-
-  ClassMemberDeclarationBuilderImpl(this.definingClass,
-      ClassIntrospector classIntrospector, TypeResolver typeResolver)
-      : super(classIntrospector, typeResolver);
-
-  @override
-  void declareInClass(DeclarationCode declaration) {
-    _augmentations.add(_buildClassAugmentation(definingClass, [declaration]));
-  }
-}
-
-/// Base class for all [DefinitionBuilder]s.
-class DefinitionBuilderBase extends DeclarationBuilderBase
-    implements TypeDeclarationResolver {
-  final TypeDeclarationResolver typeDeclarationResolver;
-
-  DefinitionBuilderBase(ClassIntrospector classIntrospector,
-      TypeResolver typeResolver, this.typeDeclarationResolver,
-      {List<DeclarationCode>? parentAugmentations})
-      : super(classIntrospector, typeResolver,
-            parentAugmentations: parentAugmentations);
-
-  @override
-  Future<TypeDeclaration> declarationOf(IdentifierImpl identifier) =>
-      typeDeclarationResolver.declarationOf(identifier);
-}
-
-class ClassDefinitionBuilderImpl extends DefinitionBuilderBase
-    implements ClassDefinitionBuilder {
-  /// The declaration this is a builder for.
-  final ClassDeclaration declaration;
-
-  ClassDefinitionBuilderImpl(
-      this.declaration,
-      ClassIntrospector classIntrospector,
-      TypeResolver typeResolver,
-      TypeDeclarationResolver typeDeclarationResolver,
-      {List<DeclarationCode>? parentAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
-            parentAugmentations: parentAugmentations);
-
-  @override
-  Future<ConstructorDefinitionBuilder> buildConstructor(
-      Identifier identifier) async {
-    ConstructorDeclaration constructor =
-        (await classIntrospector.constructorsOf(declaration))
-            .firstWhere((constructor) => constructor.identifier == identifier);
-    return new ConstructorDefinitionBuilderImpl(
-        constructor, classIntrospector, typeResolver, typeDeclarationResolver,
-        parentAugmentations: _augmentations);
-  }
-
-  @override
-  Future<VariableDefinitionBuilder> buildField(Identifier identifier) async {
-    FieldDeclaration field = (await classIntrospector.fieldsOf(declaration))
-        .firstWhere((field) => field.identifier == identifier);
-    return new VariableDefinitionBuilderImpl(
-        field, classIntrospector, typeResolver, typeDeclarationResolver,
-        parentAugmentations: _augmentations);
-  }
-
-  @override
-  Future<FunctionDefinitionBuilder> buildMethod(Identifier identifier) async {
-    MethodDeclaration method = (await classIntrospector.methodsOf(declaration))
-        .firstWhere((method) => method.identifier == identifier);
-    return new FunctionDefinitionBuilderImpl(
-        method, classIntrospector, typeResolver, typeDeclarationResolver,
-        parentAugmentations: _augmentations);
-  }
-}
-
-/// Implementation of [FunctionDefinitionBuilder].
-class FunctionDefinitionBuilderImpl extends DefinitionBuilderBase
-    implements FunctionDefinitionBuilder {
-  final FunctionDeclaration declaration;
-
-  FunctionDefinitionBuilderImpl(
-      this.declaration,
-      ClassIntrospector classIntrospector,
-      TypeResolver typeResolver,
-      TypeDeclarationResolver typeDeclarationResolver,
-      {List<DeclarationCode>? parentAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
-            parentAugmentations: parentAugmentations);
-
-  @override
-  void augment(FunctionBodyCode body) {
-    DeclarationCode augmentation =
-        _buildFunctionAugmentation(body, declaration);
-    if (declaration is ClassMemberDeclaration) {
-      augmentation = _buildClassAugmentation(
-          (declaration as ClassMemberDeclaration).definingClass,
-          [augmentation]);
-    }
-    _augmentations.add(augmentation);
-  }
-}
-
-class ConstructorDefinitionBuilderImpl extends DefinitionBuilderBase
-    implements ConstructorDefinitionBuilder {
-  final ConstructorDeclaration declaration;
-
-  ConstructorDefinitionBuilderImpl(
-      this.declaration,
-      ClassIntrospector classIntrospector,
-      TypeResolver typeResolver,
-      TypeDeclarationResolver typeDeclarationResolver,
-      {List<DeclarationCode>? parentAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
-            parentAugmentations: parentAugmentations);
-
-  @override
-  void augment({FunctionBodyCode? body, List<Code>? initializers}) {
-    body ??= new FunctionBodyCode.fromString('''{
-      augment super();
-    }''');
-    _augmentations.add(_buildClassAugmentation(declaration.definingClass, [
-      _buildFunctionAugmentation(body, declaration, initializers: initializers)
-    ]));
-  }
-}
-
-class VariableDefinitionBuilderImpl extends DefinitionBuilderBase
-    implements VariableDefinitionBuilder {
-  final VariableDeclaration declaration;
-
-  VariableDefinitionBuilderImpl(
-      this.declaration,
-      ClassIntrospector classIntrospector,
-      TypeResolver typeResolver,
-      TypeDeclarationResolver typeDeclarationResolver,
-      {List<DeclarationCode>? parentAugmentations})
-      : super(classIntrospector, typeResolver, typeDeclarationResolver,
-            parentAugmentations: parentAugmentations);
-
-  @override
-  void augment(
-      {DeclarationCode? getter,
-      DeclarationCode? setter,
-      ExpressionCode? initializer}) {
-    List<DeclarationCode> augmentations = _buildVariableAugmentations(
-        declaration,
-        getter: getter,
-        setter: setter,
-        initializer: initializer);
-    if (declaration is ClassMemberDeclaration) {
-      augmentations = [
-        _buildClassAugmentation(
-            (declaration as ClassMemberDeclaration).definingClass,
-            augmentations)
-      ];
-    }
-
-    _augmentations.addAll(augmentations);
-  }
-}
-
-/// Creates an augmentation of [clazz] with member [augmentations].
-DeclarationCode _buildClassAugmentation(
-        Identifier clazz, List<DeclarationCode> augmentations) =>
-    new DeclarationCode.fromParts([
-      'augment class ',
-      clazz,
-      ' {\n',
-      ...augmentations.joinAsCode('\n'),
-      '\n}',
-    ]);
-
-/// Builds all the possible augmentations for a variable.
-List<DeclarationCode> _buildVariableAugmentations(
-    VariableDeclaration declaration,
-    {DeclarationCode? getter,
-    DeclarationCode? setter,
-    ExpressionCode? initializer}) {
-  List<DeclarationCode> augmentations = [];
-  if (getter != null) {
-    augmentations.add(new DeclarationCode.fromParts([
-      'augment ',
-      getter,
-    ]));
-  }
-  if (setter != null) {
-    augmentations.add(new DeclarationCode.fromParts([
-      'augment ',
-      setter,
-    ]));
-  }
-  if (initializer != null) {
-    augmentations.add(new DeclarationCode.fromParts([
-      'augment ',
-      if (declaration.isFinal) 'final ',
-      declaration.type.code,
-      ' ',
-      declaration.identifier,
-      ' = ',
-      initializer,
-      ';',
-    ]));
-  }
-
-  return augmentations;
-}
-
-/// Builds the code to augment a function, method, or constructor with a new
-/// body.
-///
-/// The [initializers] parameter can only be used if [declaration] is a
-/// constructor.
-DeclarationCode _buildFunctionAugmentation(
-    FunctionBodyCode body, FunctionDeclaration declaration,
-    {List<Code>? initializers}) {
-  assert(initializers == null || declaration is ConstructorDeclaration);
-
-  return new DeclarationCode.fromParts([
-    'augment ',
-    if (declaration is ConstructorDeclaration) ...[
-      declaration.definingClass,
-      if (declaration.identifier.name.isNotEmpty) '.',
-    ] else ...[
-      declaration.returnType.code,
-      ' ',
-    ],
-    declaration.identifier,
-    if (declaration.typeParameters.isNotEmpty) ...[
-      '<',
-      for (TypeParameterDeclaration typeParam
-          in declaration.typeParameters) ...[
-        typeParam.identifier,
-        if (typeParam.bounds != null) ...['extends ', typeParam.bounds!.code],
-        if (typeParam != declaration.typeParameters.last) ', ',
-      ],
-      '>',
-    ],
-    '(',
-    for (ParameterDeclaration positionalRequired
-        in declaration.positionalParameters.where((p) => p.isRequired)) ...[
-      new ParameterCode.fromParts([
-        positionalRequired.type.code,
-        ' ',
-        positionalRequired.identifier,
-      ]),
-      ', '
-    ],
-    if (declaration.positionalParameters.any((p) => !p.isRequired)) ...[
-      '[',
-      for (ParameterDeclaration positionalOptional
-          in declaration.positionalParameters.where((p) => !p.isRequired)) ...[
-        new ParameterCode.fromParts([
-          positionalOptional.type.code,
-          ' ',
-          positionalOptional.identifier,
-        ]),
-        ', ',
-      ],
-      ']',
-    ],
-    if (declaration.namedParameters.isNotEmpty) ...[
-      '{',
-      for (ParameterDeclaration named in declaration.namedParameters) ...[
-        new ParameterCode.fromParts([
-          if (named.isRequired) 'required ',
-          named.type.code,
-          ' ',
-          named.identifier,
-          if (named.defaultValue != null) ...[
-            ' = ',
-            named.defaultValue!,
-          ],
-        ]),
-        ', ',
-      ],
-      '}',
-    ],
-    ') ',
-    if (initializers != null && initializers.isNotEmpty) ...[
-      ' : ',
-      initializers.first,
-      for (Code initializer in initializers.skip(1)) ...[
-        ',\n',
-        initializer,
-      ],
-    ],
-    body,
-  ]);
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/execute_macro.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/execute_macro.dart
deleted file mode 100644
index 7488445..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/execute_macro.dart
+++ /dev/null
@@ -1,147 +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:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/builder_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/api.dart';
-
-/// Runs [macro] in the types phase and returns a  [MacroExecutionResult].
-Future<MacroExecutionResult> executeTypesMacro(
-    Macro macro, Declaration declaration) async {
-  TypeBuilderImpl builder = new TypeBuilderImpl();
-  if (declaration is FunctionDeclaration) {
-    if (macro is ConstructorTypesMacro &&
-        declaration is ConstructorDeclaration) {
-      await macro.buildTypesForConstructor(declaration, builder);
-      return builder.result;
-    } else if (macro is MethodTypesMacro && declaration is MethodDeclaration) {
-      await macro.buildTypesForMethod(declaration, builder);
-      return builder.result;
-    } else if (macro is FunctionTypesMacro) {
-      await macro.buildTypesForFunction(declaration, builder);
-      return builder.result;
-    }
-  } else if (declaration is VariableDeclaration) {
-    if (macro is FieldTypesMacro && declaration is FieldDeclaration) {
-      await macro.buildTypesForField(declaration, builder);
-      return builder.result;
-    } else if (macro is VariableTypesMacro) {
-      await macro.buildTypesForVariable(declaration, builder);
-      return builder.result;
-    }
-  } else if (macro is ClassTypesMacro && declaration is ClassDeclaration) {
-    await macro.buildTypesForClass(declaration, builder);
-    return builder.result;
-  }
-  throw new UnsupportedError('Unsupported macro type or invalid declaration:\n'
-      'macro: $macro\ndeclaration: $declaration');
-}
-
-/// Runs [macro] in the declaration phase and returns a  [MacroExecutionResult].
-Future<MacroExecutionResult> executeDeclarationsMacro(
-    Macro macro,
-    Declaration declaration,
-    ClassIntrospector classIntrospector,
-    TypeResolver typeResolver) async {
-  if (declaration is ClassDeclaration && macro is ClassDeclarationsMacro) {
-    ClassMemberDeclarationBuilderImpl builder =
-        new ClassMemberDeclarationBuilderImpl(
-            declaration.identifier, classIntrospector, typeResolver);
-    await macro.buildDeclarationsForClass(declaration, builder);
-    return builder.result;
-  } else if (declaration is ClassMemberDeclaration) {
-    ClassMemberDeclarationBuilderImpl builder =
-        new ClassMemberDeclarationBuilderImpl(
-            declaration.definingClass, classIntrospector, typeResolver);
-    if (declaration is FunctionDeclaration) {
-      if (macro is ConstructorDeclarationsMacro &&
-          declaration is ConstructorDeclaration) {
-        await macro.buildDeclarationsForConstructor(declaration, builder);
-        return builder.result;
-      } else if (macro is MethodDeclarationsMacro &&
-          declaration is MethodDeclaration) {
-        await macro.buildDeclarationsForMethod(declaration, builder);
-        return builder.result;
-      } else if (macro is FunctionDeclarationsMacro) {
-        await macro.buildDeclarationsForFunction(
-            declaration as FunctionDeclaration, builder);
-        return builder.result;
-      }
-    } else if (declaration is VariableDeclaration) {
-      if (macro is FieldDeclarationsMacro && declaration is FieldDeclaration) {
-        await macro.buildDeclarationsForField(declaration, builder);
-        return builder.result;
-      } else if (macro is VariableDeclarationsMacro) {
-        DeclarationBuilderImpl builder =
-            new DeclarationBuilderImpl(classIntrospector, typeResolver);
-        await macro.buildDeclarationsForVariable(
-            declaration as VariableDeclaration, builder);
-        return builder.result;
-      }
-    }
-  } else {
-    DeclarationBuilderImpl builder =
-        new DeclarationBuilderImpl(classIntrospector, typeResolver);
-    if (declaration is FunctionDeclaration &&
-        macro is FunctionDeclarationsMacro) {
-      await macro.buildDeclarationsForFunction(declaration, builder);
-      return builder.result;
-    } else if (macro is VariableDeclarationsMacro &&
-        declaration is VariableDeclaration) {
-      await macro.buildDeclarationsForVariable(declaration, builder);
-      return builder.result;
-    }
-  }
-  throw new UnsupportedError('Unsupported macro type or invalid declaration:\n'
-      'macro: $macro\ndeclaration: $declaration');
-}
-
-/// Runs [macro] in the definition phase and returns a  [MacroExecutionResult].
-Future<MacroExecutionResult> executeDefinitionMacro(
-    Macro macro,
-    Declaration declaration,
-    ClassIntrospector classIntrospector,
-    TypeResolver typeResolver,
-    TypeDeclarationResolver typeDeclarationResolver) async {
-  if (declaration is FunctionDeclaration) {
-    if (macro is ConstructorDefinitionMacro &&
-        declaration is ConstructorDeclaration) {
-      ConstructorDefinitionBuilderImpl builder =
-          new ConstructorDefinitionBuilderImpl(declaration, classIntrospector,
-              typeResolver, typeDeclarationResolver);
-      await macro.buildDefinitionForConstructor(declaration, builder);
-      return builder.result;
-    } else {
-      FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
-          declaration,
-          classIntrospector,
-          typeResolver,
-          typeDeclarationResolver);
-      if (macro is MethodDefinitionMacro && declaration is MethodDeclaration) {
-        await macro.buildDefinitionForMethod(declaration, builder);
-        return builder.result;
-      } else if (macro is FunctionDefinitionMacro) {
-        await macro.buildDefinitionForFunction(declaration, builder);
-        return builder.result;
-      }
-    }
-  } else if (declaration is VariableDeclaration) {
-    VariableDefinitionBuilderImpl builder = new VariableDefinitionBuilderImpl(
-        declaration, classIntrospector, typeResolver, typeDeclarationResolver);
-    if (macro is FieldDefinitionMacro && declaration is FieldDeclaration) {
-      await macro.buildDefinitionForField(declaration, builder);
-      return builder.result;
-    } else if (macro is VariableDefinitionMacro) {
-      await macro.buildDefinitionForVariable(declaration, builder);
-      return builder.result;
-    }
-  } else if (macro is ClassDefinitionMacro && declaration is ClassDeclaration) {
-    ClassDefinitionBuilderImpl builder = new ClassDefinitionBuilderImpl(
-        declaration, classIntrospector, typeResolver, typeDeclarationResolver);
-    await macro.buildDefinitionForClass(declaration, builder);
-    return builder.result;
-  }
-  throw new UnsupportedError('Unsupported macro type or invalid declaration:\n'
-      'macro: $macro\ndeclaration: $declaration');
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/introspection_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/introspection_impls.dart
deleted file mode 100644
index 64e5e4f..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/introspection_impls.dart
+++ /dev/null
@@ -1,653 +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 'remote_instance.dart';
-import 'serialization.dart';
-import 'serialization_extensions.dart';
-import '../api.dart';
-
-class IdentifierImpl extends RemoteInstance implements Identifier {
-  final String name;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.identifier;
-
-  IdentifierImpl({required int id, required this.name}) : super(id);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    serializer.addString(name);
-  }
-}
-
-abstract class TypeAnnotationImpl extends RemoteInstance
-    implements TypeAnnotation {
-  final bool isNullable;
-
-  TypeAnnotationImpl({required int id, required this.isNullable}) : super(id);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    serializer.addBool(isNullable);
-  }
-}
-
-class NamedTypeAnnotationImpl extends TypeAnnotationImpl
-    implements NamedTypeAnnotation {
-  @override
-  Code get code => new Code.fromParts([
-        identifier,
-        if (typeArguments.isNotEmpty) ...[
-          '<',
-          typeArguments.first.code,
-          for (TypeAnnotation arg in typeArguments.skip(1)) ...[', ', arg.code],
-          '>',
-        ],
-        if (isNullable) '?',
-      ]);
-
-  @override
-  final IdentifierImpl identifier;
-
-  @override
-  final List<TypeAnnotationImpl> typeArguments;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.namedTypeAnnotation;
-
-  NamedTypeAnnotationImpl({
-    required int id,
-    required bool isNullable,
-    required this.identifier,
-    required this.typeArguments,
-  }) : super(id: id, isNullable: isNullable);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    identifier.serialize(serializer);
-    serializer.startList();
-    for (TypeAnnotationImpl typeArg in typeArguments) {
-      typeArg.serialize(serializer);
-    }
-    serializer.endList();
-  }
-}
-
-class FunctionTypeAnnotationImpl extends TypeAnnotationImpl
-    implements FunctionTypeAnnotation {
-  @override
-  Code get code => new Code.fromParts([
-        returnType.code,
-        'Function',
-        if (typeParameters.isNotEmpty) ...[
-          '<',
-          typeParameters.first.identifier.name,
-          if (typeParameters.first.bounds != null) ...[
-            ' extends ',
-            typeParameters.first.bounds!.code,
-          ],
-          for (TypeParameterDeclaration arg in typeParameters.skip(1)) ...[
-            ', ',
-            arg.identifier.name,
-            if (arg.bounds != null) ...[' extends ', arg.bounds!.code],
-          ],
-          '>',
-        ],
-        '(',
-        for (ParameterDeclaration positional in positionalParameters) ...[
-          positional.type.code,
-          ' ${positional.identifier.name}',
-        ],
-        if (namedParameters.isNotEmpty) ...[
-          '{',
-          for (ParameterDeclaration named in namedParameters) ...[
-            named.type.code,
-            ' ${named.identifier.name}',
-          ],
-          '}',
-        ],
-        ')',
-        if (isNullable) '?',
-      ]);
-
-  @override
-  final List<ParameterDeclarationImpl> namedParameters;
-
-  @override
-  final List<ParameterDeclarationImpl> positionalParameters;
-
-  @override
-  final TypeAnnotationImpl returnType;
-
-  @override
-  final List<TypeParameterDeclarationImpl> typeParameters;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.functionTypeAnnotation;
-
-  FunctionTypeAnnotationImpl({
-    required int id,
-    required bool isNullable,
-    required this.namedParameters,
-    required this.positionalParameters,
-    required this.returnType,
-    required this.typeParameters,
-  }) : super(id: id, isNullable: isNullable);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    returnType.serialize(serializer);
-
-    serializer.startList();
-    for (ParameterDeclarationImpl param in positionalParameters) {
-      param.serialize(serializer);
-    }
-    serializer.endList();
-
-    serializer.startList();
-    for (ParameterDeclarationImpl param in namedParameters) {
-      param.serialize(serializer);
-    }
-    serializer.endList();
-
-    serializer.startList();
-    for (TypeParameterDeclarationImpl typeParam in typeParameters) {
-      typeParam.serialize(serializer);
-    }
-    serializer.endList();
-  }
-}
-
-abstract class DeclarationImpl extends RemoteInstance implements Declaration {
-  final IdentifierImpl identifier;
-
-  DeclarationImpl({required int id, required this.identifier}) : super(id);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    identifier.serialize(serializer);
-  }
-}
-
-class ParameterDeclarationImpl extends DeclarationImpl
-    implements ParameterDeclaration {
-  @override
-  final Code? defaultValue;
-
-  @override
-  final bool isNamed;
-
-  @override
-  final bool isRequired;
-
-  @override
-  final TypeAnnotationImpl type;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.parameterDeclaration;
-
-  ParameterDeclarationImpl({
-    required int id,
-    required IdentifierImpl identifier,
-    required this.defaultValue,
-    required this.isNamed,
-    required this.isRequired,
-    required this.type,
-  }) : super(id: id, identifier: identifier);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    if (defaultValue == null) {
-      serializer.addNull();
-    } else {
-      defaultValue!.serialize(serializer);
-    }
-    serializer.addBool(isNamed);
-    serializer.addBool(isRequired);
-    type.serialize(serializer);
-  }
-}
-
-class TypeParameterDeclarationImpl extends DeclarationImpl
-    implements TypeParameterDeclaration {
-  @override
-  final TypeAnnotationImpl? bounds;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.typeParameterDeclaration;
-
-  TypeParameterDeclarationImpl({
-    required int id,
-    required IdentifierImpl identifier,
-    required this.bounds,
-  }) : super(id: id, identifier: identifier);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    TypeAnnotationImpl? bounds = this.bounds;
-    if (bounds == null) {
-      serializer.addNull();
-    } else {
-      bounds.serialize(serializer);
-    }
-  }
-}
-
-class FunctionDeclarationImpl extends DeclarationImpl
-    implements FunctionDeclaration {
-  @override
-  final bool isAbstract;
-
-  @override
-  final bool isExternal;
-
-  @override
-  final bool isGetter;
-
-  @override
-  final bool isSetter;
-
-  @override
-  final List<ParameterDeclarationImpl> namedParameters;
-
-  @override
-  final List<ParameterDeclarationImpl> positionalParameters;
-
-  @override
-  final TypeAnnotationImpl returnType;
-
-  @override
-  final List<TypeParameterDeclarationImpl> typeParameters;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.functionDeclaration;
-
-  FunctionDeclarationImpl({
-    required int id,
-    required IdentifierImpl identifier,
-    required this.isAbstract,
-    required this.isExternal,
-    required this.isGetter,
-    required this.isSetter,
-    required this.namedParameters,
-    required this.positionalParameters,
-    required this.returnType,
-    required this.typeParameters,
-  }) : super(id: id, identifier: identifier);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    serializer
-      ..addBool(isAbstract)
-      ..addBool(isExternal)
-      ..addBool(isGetter)
-      ..addBool(isSetter)
-      ..startList();
-    for (ParameterDeclarationImpl named in namedParameters) {
-      named.serialize(serializer);
-    }
-    serializer
-      ..endList()
-      ..startList();
-    for (ParameterDeclarationImpl positional in positionalParameters) {
-      positional.serialize(serializer);
-    }
-    serializer.endList();
-    returnType.serialize(serializer);
-    serializer.startList();
-    for (TypeParameterDeclarationImpl param in typeParameters) {
-      param.serialize(serializer);
-    }
-    serializer.endList();
-  }
-}
-
-class MethodDeclarationImpl extends FunctionDeclarationImpl
-    implements MethodDeclaration {
-  @override
-  final IdentifierImpl definingClass;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.methodDeclaration;
-
-  MethodDeclarationImpl({
-    // Declaration fields
-    required int id,
-    required IdentifierImpl identifier,
-    // Function fields
-    required bool isAbstract,
-    required bool isExternal,
-    required bool isGetter,
-    required bool isSetter,
-    required List<ParameterDeclarationImpl> namedParameters,
-    required List<ParameterDeclarationImpl> positionalParameters,
-    required TypeAnnotationImpl returnType,
-    required List<TypeParameterDeclarationImpl> typeParameters,
-    // Method fields
-    required this.definingClass,
-  }) : super(
-          id: id,
-          identifier: identifier,
-          isAbstract: isAbstract,
-          isExternal: isExternal,
-          isGetter: isGetter,
-          isSetter: isSetter,
-          namedParameters: namedParameters,
-          positionalParameters: positionalParameters,
-          returnType: returnType,
-          typeParameters: typeParameters,
-        );
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    definingClass.serialize(serializer);
-  }
-}
-
-class ConstructorDeclarationImpl extends MethodDeclarationImpl
-    implements ConstructorDeclaration {
-  @override
-  final bool isFactory;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.constructorDeclaration;
-
-  ConstructorDeclarationImpl({
-    // Declaration fields
-    required int id,
-    required IdentifierImpl identifier,
-    // Function fields
-    required bool isAbstract,
-    required bool isExternal,
-    required bool isGetter,
-    required bool isSetter,
-    required List<ParameterDeclarationImpl> namedParameters,
-    required List<ParameterDeclarationImpl> positionalParameters,
-    required TypeAnnotationImpl returnType,
-    required List<TypeParameterDeclarationImpl> typeParameters,
-    // Method fields
-    required IdentifierImpl definingClass,
-    // Constructor fields
-    required this.isFactory,
-  }) : super(
-          id: id,
-          identifier: identifier,
-          isAbstract: isAbstract,
-          isExternal: isExternal,
-          isGetter: isGetter,
-          isSetter: isSetter,
-          namedParameters: namedParameters,
-          positionalParameters: positionalParameters,
-          returnType: returnType,
-          typeParameters: typeParameters,
-          definingClass: definingClass,
-        );
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    serializer.addBool(isFactory);
-  }
-}
-
-class VariableDeclarationImpl extends DeclarationImpl
-    implements VariableDeclaration {
-  @override
-  final ExpressionCode? initializer;
-
-  @override
-  final bool isExternal;
-
-  @override
-  final bool isFinal;
-
-  @override
-  final bool isLate;
-
-  @override
-  final TypeAnnotationImpl type;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.variableDeclaration;
-
-  VariableDeclarationImpl({
-    required int id,
-    required IdentifierImpl identifier,
-    required this.initializer,
-    required this.isExternal,
-    required this.isFinal,
-    required this.isLate,
-    required this.type,
-  }) : super(id: id, identifier: identifier);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    initializer.serializeNullable(serializer);
-    serializer
-      ..addBool(isExternal)
-      ..addBool(isFinal)
-      ..addBool(isLate);
-    type.serialize(serializer);
-  }
-}
-
-class FieldDeclarationImpl extends VariableDeclarationImpl
-    implements FieldDeclaration {
-  @override
-  final IdentifierImpl definingClass;
-
-  FieldDeclarationImpl({
-    // Declaration fields
-    required int id,
-    required IdentifierImpl identifier,
-    // Variable fields
-    required ExpressionCode? initializer,
-    required bool isExternal,
-    required bool isFinal,
-    required bool isLate,
-    required TypeAnnotationImpl type,
-    // Field fields
-    required this.definingClass,
-  }) : super(
-            id: id,
-            identifier: identifier,
-            initializer: initializer,
-            isExternal: isExternal,
-            isFinal: isFinal,
-            isLate: isLate,
-            type: type);
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.fieldDeclaration;
-
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    definingClass.serialize(serializer);
-  }
-}
-
-abstract class TypeDeclarationImpl extends DeclarationImpl
-    implements TypeDeclaration {
-  @override
-  final List<TypeParameterDeclarationImpl> typeParameters;
-
-  TypeDeclarationImpl({
-    required int id,
-    required IdentifierImpl identifier,
-    required this.typeParameters,
-  }) : super(id: id, identifier: identifier);
-
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    serializer..startList();
-    for (TypeParameterDeclarationImpl param in typeParameters) {
-      param.serialize(serializer);
-    }
-    serializer.endList();
-  }
-}
-
-class ClassDeclarationImpl extends TypeDeclarationImpl
-    implements ClassDeclaration {
-  @override
-  final List<TypeAnnotationImpl> interfaces;
-
-  @override
-  final bool isAbstract;
-
-  @override
-  final bool isExternal;
-
-  @override
-  final List<TypeAnnotationImpl> mixins;
-
-  @override
-  final TypeAnnotationImpl? superclass;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.classDeclaration;
-
-  ClassDeclarationImpl({
-    // Declaration fields
-    required int id,
-    required IdentifierImpl identifier,
-    // TypeDeclaration fields
-    required List<TypeParameterDeclarationImpl> typeParameters,
-    // ClassDeclaration fields
-    required this.interfaces,
-    required this.isAbstract,
-    required this.isExternal,
-    required this.mixins,
-    required this.superclass,
-  }) : super(id: id, identifier: identifier, typeParameters: typeParameters);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    serializer.startList();
-    for (TypeAnnotationImpl interface in interfaces) {
-      interface.serialize(serializer);
-    }
-    serializer
-      ..endList()
-      ..addBool(isAbstract)
-      ..addBool(isExternal)
-      ..startList();
-    for (TypeAnnotationImpl mixin in mixins) {
-      mixin.serialize(serializer);
-    }
-    serializer..endList();
-    superclass.serializeNullable(serializer);
-  }
-}
-
-class TypeAliasDeclarationImpl extends TypeDeclarationImpl
-    implements TypeAliasDeclaration {
-  /// The type being aliased.
-  final TypeAnnotationImpl aliasedType;
-
-  @override
-  RemoteInstanceKind get kind => RemoteInstanceKind.typeAliasDeclaration;
-
-  TypeAliasDeclarationImpl({
-    // Declaration fields
-    required int id,
-    required IdentifierImpl identifier,
-    // TypeDeclaration fields
-    required List<TypeParameterDeclarationImpl> typeParameters,
-    // TypeAlias fields
-    required this.aliasedType,
-  }) : super(id: id, identifier: identifier, typeParameters: typeParameters);
-
-  @override
-  void serialize(Serializer serializer) {
-    super.serialize(serializer);
-    // Client side we don't encode anything but the ID.
-    if (serializationMode == SerializationMode.client) {
-      return;
-    }
-
-    aliasedType.serialize(serializer);
-  }
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/protocol.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/protocol.dart
deleted file mode 100644
index 0577fa2..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/protocol.dart
+++ /dev/null
@@ -1,712 +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.
-
-/// Defines the objects used for communication between the macro executor and
-/// the isolate or process doing the work of macro loading and execution.
-library _fe_analyzer_shared.src.macros.executor_shared.protocol;
-
-import 'package:meta/meta.dart';
-
-import '../executor.dart';
-import '../api.dart';
-import '../executor_shared/response_impls.dart';
-import 'introspection_impls.dart';
-import 'remote_instance.dart';
-import 'serialization.dart';
-import 'serialization_extensions.dart';
-
-/// Base class all requests extend, provides a unique id for each request.
-abstract class Request implements Serializable {
-  final int id;
-
-  final int serializationZoneId;
-
-  Request({int? id, required this.serializationZoneId})
-      : this.id = id ?? _next++;
-
-  /// The [serializationZoneId] is a part of the header and needs to be parsed
-  /// before deserializing objects, and then passed in here.
-  Request.deserialize(Deserializer deserializer, this.serializationZoneId)
-      : id = (deserializer..moveNext()).expectNum();
-
-  /// The [serializationZoneId] needs to be separately serialized before the
-  /// rest of the object. This is not done by the instances themselves but by
-  /// the macro implementations.
-  @mustCallSuper
-  void serialize(Serializer serializer) => serializer.addNum(id);
-
-  static int _next = 0;
-}
-
-/// A generic response object that contains either a response or an error, and
-/// a unique ID.
-class Response {
-  final Object? response;
-  final Object? error;
-  final String? stackTrace;
-  final int requestId;
-  final MessageType responseType;
-
-  Response({
-    this.response,
-    this.error,
-    this.stackTrace,
-    required this.requestId,
-    required this.responseType,
-  })  : assert(response != null || error != null),
-        assert(response == null || error == null);
-}
-
-/// A serializable [Response], contains the message type as an enum.
-class SerializableResponse implements Response, Serializable {
-  final Serializable? response;
-  final MessageType responseType;
-  final String? error;
-  final String? stackTrace;
-  final int requestId;
-  final int serializationZoneId;
-
-  SerializableResponse({
-    this.error,
-    this.stackTrace,
-    required this.requestId,
-    this.response,
-    required this.responseType,
-    required this.serializationZoneId,
-  });
-
-  /// You must first parse the [serializationZoneId] yourself, and then
-  /// call this function in that zone, and pass the ID.
-  factory SerializableResponse.deserialize(
-      Deserializer deserializer, int serializationZoneId) {
-    deserializer.moveNext();
-    MessageType responseType = MessageType.values[deserializer.expectNum()];
-    Serializable? response;
-    String? error;
-    String? stackTrace;
-    switch (responseType) {
-      case MessageType.error:
-        deserializer.moveNext();
-        error = deserializer.expectString();
-        deserializer.moveNext();
-        stackTrace = deserializer.expectNullableString();
-        break;
-      case MessageType.macroClassIdentifier:
-        response = new MacroClassIdentifierImpl.deserialize(deserializer);
-        break;
-      case MessageType.macroInstanceIdentifier:
-        response = new MacroInstanceIdentifierImpl.deserialize(deserializer);
-        break;
-      case MessageType.macroExecutionResult:
-        response = new MacroExecutionResultImpl.deserialize(deserializer);
-        break;
-      case MessageType.staticType:
-      case MessageType.namedStaticType:
-        response = RemoteInstance.deserialize(deserializer);
-        break;
-      case MessageType.boolean:
-        response = new BooleanValue.deserialize(deserializer);
-        break;
-      case MessageType.declarationList:
-        response = new DeclarationList.deserialize(deserializer);
-        break;
-      case MessageType.remoteInstance:
-        deserializer.moveNext();
-        if (!deserializer.checkNull()) {
-          response = deserializer.expectRemoteInstance();
-        }
-        break;
-      default:
-        throw new StateError('Unexpected response type $responseType');
-    }
-
-    return new SerializableResponse(
-        responseType: responseType,
-        response: response,
-        error: error,
-        stackTrace: stackTrace,
-        requestId: (deserializer..moveNext()).expectNum(),
-        serializationZoneId: serializationZoneId);
-  }
-
-  void serialize(Serializer serializer) {
-    serializer
-      ..addNum(serializationZoneId)
-      ..addNum(MessageType.response.index)
-      ..addNum(responseType.index);
-    switch (responseType) {
-      case MessageType.error:
-        serializer.addString(error!.toString());
-        serializer.addNullableString(stackTrace);
-        break;
-      default:
-        response.serializeNullable(serializer);
-    }
-    serializer.addNum(requestId);
-  }
-}
-
-class BooleanValue implements Serializable {
-  final bool value;
-
-  BooleanValue(this.value);
-
-  BooleanValue.deserialize(Deserializer deserializer)
-      : value = (deserializer..moveNext()).expectBool();
-
-  @override
-  void serialize(Serializer serializer) => serializer..addBool(value);
-}
-
-/// A serialized list of [Declaration]s.
-class DeclarationList<T extends DeclarationImpl> implements Serializable {
-  final List<T> declarations;
-
-  DeclarationList(this.declarations);
-
-  DeclarationList.deserialize(Deserializer deserializer)
-      : declarations = [
-          for (bool hasNext = (deserializer
-                    ..moveNext()
-                    ..expectList())
-                  .moveNext();
-              hasNext;
-              hasNext = deserializer.moveNext())
-            deserializer.expectRemoteInstance(),
-        ];
-
-  @override
-  void serialize(Serializer serializer) {
-    serializer.startList();
-    for (DeclarationImpl declaration in declarations) {
-      declaration.serialize(serializer);
-    }
-    serializer.endList();
-  }
-}
-
-/// A request to load a macro in this isolate.
-class LoadMacroRequest extends Request {
-  final Uri library;
-  final String name;
-
-  LoadMacroRequest(this.library, this.name, {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  LoadMacroRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : library = Uri.parse((deserializer..moveNext()).expectString()),
-        name = (deserializer..moveNext()).expectString(),
-        super.deserialize(deserializer, serializationZoneId);
-
-  @override
-  void serialize(Serializer serializer) {
-    serializer
-      ..addNum(MessageType.loadMacroRequest.index)
-      ..addString(library.toString())
-      ..addString(name);
-    super.serialize(serializer);
-  }
-}
-
-/// A request to instantiate a macro instance.
-class InstantiateMacroRequest extends Request {
-  final MacroClassIdentifier macroClass;
-  final String constructorName;
-  final Arguments arguments;
-
-  InstantiateMacroRequest(this.macroClass, this.constructorName, this.arguments,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  InstantiateMacroRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : macroClass = new MacroClassIdentifierImpl.deserialize(deserializer),
-        constructorName = (deserializer..moveNext()).expectString(),
-        arguments = new Arguments.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  @override
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.instantiateMacroRequest.index);
-    macroClass.serialize(serializer);
-    serializer.addString(constructorName);
-    arguments.serialize(serializer);
-    super.serialize(serializer);
-  }
-}
-
-/// A request to execute a macro on a particular declaration in the types phase.
-class ExecuteTypesPhaseRequest extends Request {
-  final MacroInstanceIdentifier macro;
-  final DeclarationImpl declaration;
-
-  ExecuteTypesPhaseRequest(this.macro, this.declaration,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  ExecuteTypesPhaseRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
-        declaration = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.executeTypesPhaseRequest.index);
-    macro.serialize(serializer);
-    declaration.serialize(serializer);
-
-    super.serialize(serializer);
-  }
-}
-
-/// A request to execute a macro on a particular declaration in the definition
-/// phase.
-class ExecuteDeclarationsPhaseRequest extends Request {
-  final MacroInstanceIdentifier macro;
-  final DeclarationImpl declaration;
-
-  final RemoteInstanceImpl typeResolver;
-  final RemoteInstanceImpl classIntrospector;
-
-  ExecuteDeclarationsPhaseRequest(
-      this.macro, this.declaration, this.typeResolver, this.classIntrospector,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  ExecuteDeclarationsPhaseRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
-        declaration = RemoteInstance.deserialize(deserializer),
-        typeResolver = RemoteInstance.deserialize(deserializer),
-        classIntrospector = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.executeDeclarationsPhaseRequest.index);
-    macro.serialize(serializer);
-    declaration.serialize(serializer);
-    typeResolver.serialize(serializer);
-    classIntrospector.serialize(serializer);
-
-    super.serialize(serializer);
-  }
-}
-
-/// A request to execute a macro on a particular declaration in the definition
-/// phase.
-class ExecuteDefinitionsPhaseRequest extends Request {
-  final MacroInstanceIdentifier macro;
-  final DeclarationImpl declaration;
-
-  final RemoteInstanceImpl typeResolver;
-  final RemoteInstanceImpl classIntrospector;
-  final RemoteInstanceImpl typeDeclarationResolver;
-
-  ExecuteDefinitionsPhaseRequest(this.macro, this.declaration,
-      this.typeResolver, this.classIntrospector, this.typeDeclarationResolver,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  ExecuteDefinitionsPhaseRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
-        declaration = RemoteInstance.deserialize(deserializer),
-        typeResolver = RemoteInstance.deserialize(deserializer),
-        classIntrospector = RemoteInstance.deserialize(deserializer),
-        typeDeclarationResolver = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.executeDefinitionsPhaseRequest.index);
-    macro.serialize(serializer);
-    declaration.serialize(serializer);
-    typeResolver.serialize(serializer);
-    classIntrospector.serialize(serializer);
-    typeDeclarationResolver.serialize(serializer);
-
-    super.serialize(serializer);
-  }
-}
-
-/// A request to reflect on a type annotation
-class InstantiateTypeRequest extends Request {
-  final TypeAnnotationImpl typeAnnotation;
-  final RemoteInstanceImpl typeResolver;
-
-  InstantiateTypeRequest(this.typeAnnotation, this.typeResolver,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  InstantiateTypeRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : typeAnnotation = RemoteInstance.deserialize(deserializer),
-        typeResolver = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.instantiateTypeRequest.index);
-    typeAnnotation.serialize(serializer);
-    typeResolver.serialize(serializer);
-    super.serialize(serializer);
-  }
-}
-
-/// A request to check if a type is exactly another type.
-class IsExactlyTypeRequest extends Request {
-  final RemoteInstanceImpl leftType;
-  final RemoteInstanceImpl rightType;
-
-  IsExactlyTypeRequest(this.leftType, this.rightType,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  IsExactlyTypeRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : leftType = RemoteInstance.deserialize(deserializer),
-        rightType = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.isExactlyTypeRequest.index);
-    leftType.serialize(serializer);
-    rightType.serialize(serializer);
-    super.serialize(serializer);
-  }
-}
-
-/// A request to check if a type is exactly another type.
-class IsSubtypeOfRequest extends Request {
-  final RemoteInstanceImpl leftType;
-  final RemoteInstanceImpl rightType;
-
-  IsSubtypeOfRequest(this.leftType, this.rightType,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  IsSubtypeOfRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : leftType = RemoteInstance.deserialize(deserializer),
-        rightType = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.isSubtypeOfRequest.index);
-    leftType.serialize(serializer);
-    rightType.serialize(serializer);
-    super.serialize(serializer);
-  }
-}
-
-/// A general request class for all requests coming from methods on the
-/// [ClassIntrospector] interface.
-class ClassIntrospectionRequest extends Request {
-  final ClassDeclarationImpl classDeclaration;
-  final RemoteInstanceImpl classIntrospector;
-  final MessageType requestKind;
-
-  ClassIntrospectionRequest(
-      this.classDeclaration, this.classIntrospector, this.requestKind,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again and it should instead be passed in here.
-  ClassIntrospectionRequest.deserialize(
-      Deserializer deserializer, this.requestKind, int serializationZoneId)
-      : classDeclaration = RemoteInstance.deserialize(deserializer),
-        classIntrospector = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  @override
-  void serialize(Serializer serializer) {
-    serializer.addNum(requestKind.index);
-    classDeclaration.serialize(serializer);
-    classIntrospector.serialize(serializer);
-    super.serialize(serializer);
-  }
-}
-
-/// A request to get a [TypeDeclaration] for a [StaticType].
-class DeclarationOfRequest extends Request {
-  final IdentifierImpl identifier;
-  final RemoteInstanceImpl typeDeclarationResolver;
-
-  DeclarationOfRequest(this.identifier, this.typeDeclarationResolver,
-      {required int serializationZoneId})
-      : super(serializationZoneId: serializationZoneId);
-
-  /// When deserializing we have already consumed the message type, so we don't
-  /// consume it again.
-  DeclarationOfRequest.deserialize(
-      Deserializer deserializer, int serializationZoneId)
-      : identifier = RemoteInstance.deserialize(deserializer),
-        typeDeclarationResolver = RemoteInstance.deserialize(deserializer),
-        super.deserialize(deserializer, serializationZoneId);
-
-  @override
-  void serialize(Serializer serializer) {
-    serializer.addNum(MessageType.declarationOfRequest.index);
-    identifier.serialize(serializer);
-    typeDeclarationResolver.serialize(serializer);
-    super.serialize(serializer);
-  }
-}
-
-/// Client side implementation of a [TypeResolver], which creates a
-/// [ResolveTypeRequest] and passes it to a given [sendRequest] function which
-/// can return the [Response].
-class ClientTypeResolver implements TypeResolver {
-  /// 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;
-
-  ClientTypeResolver(this._sendRequest,
-      {required this.remoteInstance, required this.serializationZoneId});
-
-  @override
-  Future<StaticType> instantiateType(TypeAnnotationImpl typeAnnotation) async {
-    InstantiateTypeRequest request = new InstantiateTypeRequest(
-        typeAnnotation, remoteInstance,
-        serializationZoneId: serializationZoneId);
-    RemoteInstanceImpl remoteType =
-        _handleResponse(await _sendRequest(request));
-    switch (remoteType.kind) {
-      case RemoteInstanceKind.namedStaticType:
-        return new ClientNamedStaticTypeImpl(_sendRequest,
-            remoteInstance: remoteType,
-            serializationZoneId: serializationZoneId);
-      case RemoteInstanceKind.staticType:
-        return new ClientStaticTypeImpl(_sendRequest,
-            remoteInstance: remoteType,
-            serializationZoneId: serializationZoneId);
-      default:
-        throw new StateError(
-            'Expected either a StaticType or NamedStaticType but got '
-            '${remoteType.kind}');
-    }
-  }
-
-  @override
-  Future<StaticType> instantiateCode(ExpressionCode code) {
-    // TODO: implement instantiateCode
-    throw new UnimplementedError();
-  }
-}
-
-class ClientStaticTypeImpl implements StaticType {
-  /// The actual remote instance of this static type.
-  final RemoteInstanceImpl remoteInstance;
-
-  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;
-
-  ClientStaticTypeImpl(this.sendRequest,
-      {required this.remoteInstance, required this.serializationZoneId});
-
-  @override
-  Future<bool> isExactly(ClientStaticTypeImpl other) async {
-    IsExactlyTypeRequest request = new IsExactlyTypeRequest(
-        this.remoteInstance, other.remoteInstance,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<BooleanValue>(await sendRequest(request)).value;
-  }
-
-  @override
-  Future<bool> isSubtypeOf(ClientStaticTypeImpl other) async {
-    IsSubtypeOfRequest request = new IsSubtypeOfRequest(
-        remoteInstance, other.remoteInstance,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<BooleanValue>(await sendRequest(request)).value;
-  }
-}
-
-/// Named variant of the [ClientStaticTypeImpl].
-class ClientNamedStaticTypeImpl extends ClientStaticTypeImpl
-    implements NamedStaticType {
-  ClientNamedStaticTypeImpl(
-      Future<Response> Function(Request request) sendRequest,
-      {required RemoteInstanceImpl remoteInstance,
-      required int serializationZoneId})
-      : super(sendRequest,
-            remoteInstance: remoteInstance,
-            serializationZoneId: serializationZoneId);
-}
-
-/// Client side implementation of the [ClientClassIntrospector], converts all
-/// invocations into remote RPC calls.
-class ClientClassIntrospector implements ClassIntrospector {
-  /// The actual remote instance of this class introspector.
-  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;
-
-  ClientClassIntrospector(this.sendRequest,
-      {required this.remoteInstance, required this.serializationZoneId});
-
-  @override
-  Future<List<ConstructorDeclaration>> constructorsOf(
-      ClassDeclarationImpl clazz) async {
-    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
-        clazz, remoteInstance, MessageType.constructorsOfRequest,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<DeclarationList>(await sendRequest(request))
-        .declarations
-        // TODO: Refactor so we can remove this cast
-        .cast();
-  }
-
-  @override
-  Future<List<FieldDeclaration>> fieldsOf(ClassDeclarationImpl clazz) async {
-    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
-        clazz, remoteInstance, MessageType.fieldsOfRequest,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<DeclarationList>(await sendRequest(request))
-        .declarations
-        // TODO: Refactor so we can remove this cast
-        .cast();
-  }
-
-  @override
-  Future<List<ClassDeclaration>> interfacesOf(
-      ClassDeclarationImpl clazz) async {
-    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
-        clazz, remoteInstance, MessageType.interfacesOfRequest,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<DeclarationList>(await sendRequest(request))
-        .declarations
-        // TODO: Refactor so we can remove this cast
-        .cast();
-  }
-
-  @override
-  Future<List<MethodDeclaration>> methodsOf(ClassDeclarationImpl clazz) async {
-    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
-        clazz, remoteInstance, MessageType.methodsOfRequest,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<DeclarationList>(await sendRequest(request))
-        .declarations
-        // TODO: Refactor so we can remove this cast
-        .cast();
-  }
-
-  @override
-  Future<List<ClassDeclaration>> mixinsOf(ClassDeclarationImpl clazz) async {
-    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
-        clazz, remoteInstance, MessageType.mixinsOfRequest,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<DeclarationList>(await sendRequest(request))
-        .declarations
-        // TODO: Refactor so we can remove this cast
-        .cast();
-  }
-
-  @override
-  Future<ClassDeclaration?> superclassOf(ClassDeclarationImpl clazz) async {
-    ClassIntrospectionRequest request = new ClassIntrospectionRequest(
-        clazz, remoteInstance, MessageType.superclassOfRequest,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<ClassDeclaration?>(await sendRequest(request));
-  }
-}
-
-/// Client side implementation of a [TypeDeclarationResolver], converts all
-/// invocations into remote procedure calls.
-class ClientTypeDeclarationResolver implements TypeDeclarationResolver {
-  /// 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;
-
-  ClientTypeDeclarationResolver(this.sendRequest,
-      {required this.remoteInstance, required this.serializationZoneId});
-
-  @override
-  Future<TypeDeclaration> declarationOf(IdentifierImpl identifier) async {
-    DeclarationOfRequest request = new DeclarationOfRequest(
-        identifier, remoteInstance,
-        serializationZoneId: serializationZoneId);
-    return _handleResponse<TypeDeclaration>(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 {
-  final String error;
-  final String? stackTrace;
-
-  RemoteException(this.error, [this.stackTrace]);
-
-  String toString() =>
-      'RemoteException: $error${stackTrace == null ? '' : '\n\n$stackTrace'}';
-}
-
-/// Either returns the actual response from [response], casted to [T], or throws
-/// a [RemoteException] with the given error and stack trace.
-T _handleResponse<T>(Response response) {
-  if (response.responseType == MessageType.error) {
-    throw new RemoteException(response.error!.toString(), response.stackTrace);
-  }
-  return response.response as T;
-}
-
-enum MessageType {
-  boolean,
-  constructorsOfRequest,
-  declarationOfRequest,
-  declarationList,
-  fieldsOfRequest,
-  interfacesOfRequest,
-  methodsOfRequest,
-  mixinsOfRequest,
-  superclassOfRequest,
-  error,
-  executeDeclarationsPhaseRequest,
-  executeDefinitionsPhaseRequest,
-  executeTypesPhaseRequest,
-  instantiateMacroRequest,
-  instantiateTypeRequest,
-  isExactlyTypeRequest,
-  isSubtypeOfRequest,
-  loadMacroRequest,
-  remoteInstance,
-  macroClassIdentifier,
-  macroInstanceIdentifier,
-  macroExecutionResult,
-  namedStaticType,
-  response,
-  staticType,
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/remote_instance.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/remote_instance.dart
deleted file mode 100644
index 7ba94f8..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/remote_instance.dart
+++ /dev/null
@@ -1,113 +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:async';
-
-import 'package:meta/meta.dart';
-
-import 'serialization.dart';
-import 'serialization_extensions.dart';
-
-/// The key used to store the remote instance cache in the current serialization
-/// zone (in server mode only).
-const Symbol remoteInstanceZoneKey = #remoteInstanceCache;
-
-/// On the server side we keep track of remote instances by their ID.
-///
-/// These are a part of the current serialization zone, which all serialization
-/// and deserialization must be done in.
-///
-/// This means the cache lifetime is that of the serialization zone it is run
-/// in.
-Map<int, RemoteInstance> get _remoteInstanceCache =>
-    Zone.current[remoteInstanceZoneKey];
-
-/// Base class for types that need to be able to be traced back to a specific
-/// instance on the server side.
-abstract class RemoteInstance implements Serializable {
-  /// The unique ID for this instance.
-  final int id;
-
-  /// The type of instance being encoded.
-  RemoteInstanceKind get kind;
-
-  /// Static, incrementing ids.
-  static int _nextId = 0;
-
-  /// Gets the next unique identifier.
-  static int get uniqueId => _nextId++;
-
-  /// On the client side [id]s are given and you should reconstruct objects with
-  /// the given ID. On the server side ids should be created using
-  /// [RemoteInstance.uniqueId].
-  RemoteInstance(this.id);
-
-  /// Retrieves a cached instance by ID.
-  static T cached<T>(int id) => _remoteInstanceCache[id] as T;
-
-  /// Deserializes an instance based on the current [serializationMode].
-  static T deserialize<T>(Deserializer deserializer) =>
-      (deserializer..moveNext()).expectRemoteInstance();
-
-  /// This method should be overridden by all subclasses, which should on their
-  /// first line call this super function.
-  ///
-  /// They should then return immediately if [serializationMode] is
-  /// [SerializationMode.client], so that only an ID is sent.
-  @mustCallSuper
-  void serialize(Serializer serializer) {
-    serializer.addNum(id);
-    switch (serializationMode) {
-      case SerializationMode.client:
-        // We only send the ID from the client side.
-        return;
-      case SerializationMode.server:
-        serializer.addNum(kind.index);
-        _remoteInstanceCache[id] = this;
-        return;
-    }
-  }
-
-  @override
-  bool operator ==(Object other) => other is RemoteInstance && id == other.id;
-}
-
-/// A remote instance which is just a pointer to some server side instance of
-/// a generic object.
-///
-/// The wrapped object is not serialized.
-class RemoteInstanceImpl extends RemoteInstance {
-  /// Always null on the client side, has an actual instance on the server side.
-  final Object? instance;
-
-  @override
-  final RemoteInstanceKind kind;
-
-  RemoteInstanceImpl({
-    required int id,
-    this.instance,
-    required this.kind,
-  }) : super(id);
-}
-
-// The kinds of instances.
-enum RemoteInstanceKind {
-  classDeclaration,
-  classIntrospector,
-  constructorDeclaration,
-  fieldDeclaration,
-  functionDeclaration,
-  functionTypeAnnotation,
-  identifier,
-  namedStaticType,
-  methodDeclaration,
-  namedTypeAnnotation,
-  parameterDeclaration,
-  staticType,
-  typeAliasDeclaration,
-  typeParameterDeclaration,
-  typeResolver,
-  typeDeclarationResolver,
-  variableDeclaration,
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/response_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/response_impls.dart
deleted file mode 100644
index eb4e5ae..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/response_impls.dart
+++ /dev/null
@@ -1,257 +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 '../executor.dart';
-import '../api.dart';
-import 'serialization.dart';
-import 'serialization_extensions.dart';
-
-/// Implementation of [MacroClassIdentifier].
-class MacroClassIdentifierImpl implements MacroClassIdentifier {
-  final String id;
-
-  MacroClassIdentifierImpl(Uri library, String name) : id = '$library#$name';
-
-  MacroClassIdentifierImpl.deserialize(Deserializer deserializer)
-      : id = (deserializer..moveNext()).expectString();
-
-  void serialize(Serializer serializer) => serializer.addString(id);
-
-  operator ==(other) => other is MacroClassIdentifierImpl && id == other.id;
-
-  int get hashCode => id.hashCode;
-}
-
-/// Implementation of [MacroInstanceIdentifier].
-class MacroInstanceIdentifierImpl implements MacroInstanceIdentifier {
-  /// A single int where each bit indicates whether a specific macro interface
-  /// is implemented by this macro.
-  final int _interfaces;
-
-  static int _next = 0;
-
-  final int id;
-
-  MacroInstanceIdentifierImpl._(this._interfaces) : id = _next++;
-
-  factory MacroInstanceIdentifierImpl(Macro macro) {
-    // Build up the interfaces value, there is a bit for each declaration/phase
-    // combination (as there is an interface for each).
-    int interfaces = 0;
-    for (DeclarationKind declarationKind in DeclarationKind.values) {
-      for (Phase phase in Phase.values) {
-        int interfaceMask = _interfaceMask(declarationKind, phase);
-        switch (declarationKind) {
-          case DeclarationKind.clazz:
-            switch (phase) {
-              case Phase.types:
-                if (macro is ClassTypesMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.declarations:
-                if (macro is ClassDeclarationsMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.definitions:
-                if (macro is ClassDefinitionMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-            }
-            break;
-          case DeclarationKind.constructor:
-            switch (phase) {
-              case Phase.types:
-                if (macro is ConstructorTypesMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.declarations:
-                if (macro is ConstructorDeclarationsMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.definitions:
-                if (macro is ConstructorDefinitionMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-            }
-            break;
-          case DeclarationKind.field:
-            switch (phase) {
-              case Phase.types:
-                if (macro is FieldTypesMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.declarations:
-                if (macro is FieldDeclarationsMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.definitions:
-                if (macro is FieldDefinitionMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-            }
-            break;
-          case DeclarationKind.function:
-            switch (phase) {
-              case Phase.types:
-                if (macro is FunctionTypesMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.declarations:
-                if (macro is FunctionDeclarationsMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.definitions:
-                if (macro is FunctionDefinitionMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-            }
-            break;
-          case DeclarationKind.method:
-            switch (phase) {
-              case Phase.types:
-                if (macro is MethodTypesMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.declarations:
-                if (macro is MethodDeclarationsMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.definitions:
-                if (macro is MethodDefinitionMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-            }
-            break;
-          case DeclarationKind.variable:
-            switch (phase) {
-              case Phase.types:
-                if (macro is VariableTypesMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.declarations:
-                if (macro is VariableDeclarationsMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-              case Phase.definitions:
-                if (macro is VariableDefinitionMacro) {
-                  interfaces |= interfaceMask;
-                }
-                break;
-            }
-            break;
-        }
-      }
-    }
-
-    return new MacroInstanceIdentifierImpl._(interfaces);
-  }
-
-  MacroInstanceIdentifierImpl.deserialize(Deserializer deserializer)
-      : id = (deserializer..moveNext()).expectNum(),
-        _interfaces = (deserializer..moveNext()).expectNum();
-
-  void serialize(Serializer serializer) => serializer
-    ..addNum(id)
-    ..addNum(_interfaces);
-
-  operator ==(other) => other is MacroInstanceIdentifierImpl && id == other.id;
-
-  int get hashCode => id;
-
-  @override
-  bool shouldExecute(DeclarationKind declarationKind, Phase phase) {
-    int mask = _interfaceMask(declarationKind, phase);
-    if (declarationKind == DeclarationKind.method) {
-      // Apply function macros to methods.
-      mask |= _interfaceMask(DeclarationKind.function, phase);
-    } else if (declarationKind == DeclarationKind.field) {
-      // Apply variable macros to fields.
-      mask |= _interfaceMask(DeclarationKind.variable, phase);
-    }
-    return _interfaces & mask != 0x0;
-  }
-
-  @override
-  bool supportsDeclarationKind(DeclarationKind declarationKind) {
-    for (Phase phase in Phase.values) {
-      if (shouldExecute(declarationKind, phase)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /// The mask for a particular interface, which is a combination of a kind of
-  /// declaration and a phase.
-  static int _interfaceMask(DeclarationKind declarationKind, Phase phase) =>
-      0x1 << (declarationKind.index * Phase.values.length) << phase.index;
-}
-
-/// Implementation of [MacroExecutionResult].
-class MacroExecutionResultImpl implements MacroExecutionResult {
-  @override
-  final List<DeclarationCode> augmentations;
-
-  @override
-  final List<DeclarationCode> imports;
-
-  MacroExecutionResultImpl({
-    required this.augmentations,
-    required this.imports,
-  });
-
-  factory MacroExecutionResultImpl.deserialize(Deserializer deserializer) {
-    deserializer.moveNext();
-    deserializer.expectList();
-    List<DeclarationCode> augmentations = [
-      for (bool hasNext = deserializer.moveNext();
-          hasNext;
-          hasNext = deserializer.moveNext())
-        deserializer.expectCode()
-    ];
-    deserializer.moveNext();
-    deserializer.expectList();
-    List<DeclarationCode> imports = [
-      for (bool hasNext = deserializer.moveNext();
-          hasNext;
-          hasNext = deserializer.moveNext())
-        deserializer.expectCode()
-    ];
-
-    return new MacroExecutionResultImpl(
-      augmentations: augmentations,
-      imports: imports,
-    );
-  }
-
-  void serialize(Serializer serializer) {
-    serializer.startList();
-    for (DeclarationCode augmentation in augmentations) {
-      augmentation.serialize(serializer);
-    }
-    serializer.endList();
-    serializer.startList();
-    for (DeclarationCode import in imports) {
-      import.serialize(serializer);
-    }
-    serializer.endList();
-  }
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization.dart
deleted file mode 100644
index 89bbf59..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization.dart
+++ /dev/null
@@ -1,238 +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 'remote_instance.dart';
-
-/// All serialization must be done in a serialization Zone, which tells it
-/// whether we are the client or server.
-///
-/// In [SerializationMode.server], sets up a remote instance cache to use when
-/// deserializing remote instances back to their original instance.
-T withSerializationMode<T>(SerializationMode mode, T Function() fn) =>
-    runZoned(fn, zoneValues: {
-      #serializationMode: mode,
-      if (mode == SerializationMode.server)
-        remoteInstanceZoneKey: <int, RemoteInstance>{}
-    });
-
-/// Serializable interface
-abstract class Serializable {
-  /// Serializes this object using [serializer].
-  void serialize(Serializer serializer);
-}
-
-/// A push based object serialization interface.
-abstract class Serializer {
-  /// Serializes a [String].
-  void addString(String value);
-
-  /// Serializes a nullable [String].
-  void addNullableString(String? value);
-
-  /// Serializes a [num].
-  void addNum(num value);
-
-  /// Serializes a nullable [num].
-  void addNullableNum(num? value);
-
-  /// Serializes a [bool].
-  void addBool(bool value);
-
-  /// Serializes a nullable [bool].
-  void addNullableBool(bool? value);
-
-  /// Serializes a `null` literal.
-  void addNull();
-
-  /// Used to signal the start of an arbitrary length list of items.
-  void startList();
-
-  /// Used to signal the end of an arbitrary length list of items.
-  void endList();
-}
-
-/// A pull based object deserialization interface.
-///
-/// You must call [moveNext] before reading any items, and in order to advance
-/// to the next item.
-abstract class Deserializer {
-  /// Checks if the current value is a null, returns `true` if so and `false`
-  /// otherwise.
-  bool checkNull();
-
-  /// Reads the current value as a non-nullable [String].
-  bool expectBool();
-
-  /// Reads the current value as a nullable [bool].
-  bool? expectNullableBool();
-
-  /// Reads the current value as a non-nullable [String].
-  T expectNum<T extends num>();
-
-  /// Reads the current value as a nullable [num].
-  num? expectNullableNum();
-
-  /// Reads the current value as a non-nullable [String].
-  String expectString();
-
-  /// Reads the current value as a nullable [String].
-  String? expectNullableString();
-
-  /// Asserts that the current item is the start of a list.
-  ///
-  /// An example for how to read from a list is as follows:
-  ///
-  /// var json = JsonReader.fromString(source);
-  /// I know it's a list of strings.
-  ///
-  /// ```
-  ///   var result = <String>[];
-  ///   deserializer.moveNext();
-  ///   deserializer.expectList();
-  ///   while (json.moveNext()) {
-  ///     result.add(json.expectString());
-  ///   }
-  ///   // Can now read later items, but need to call `moveNext` again to move
-  ///   // past the list.
-  ///   deserializer.moveNext();
-  ///   deserializer.expectBool();
-  /// ```
-  void expectList();
-
-  /// Moves to the next item, returns `false` if there are no more items to
-  /// read.
-  ///
-  /// If inside of a list, this returns `false` when the end of the list is
-  /// reached, and moves back to the parent, but does not advance it, so another
-  /// call to `moveNext` is needed. See example in the [expectList] docs.
-  bool moveNext();
-}
-
-class JsonSerializer implements Serializer {
-  /// The full result.
-  final _result = <Object?>[];
-
-  /// A path to the current list we are modifying.
-  late List<List<Object?>> _path = [_result];
-
-  /// Returns the result as an unmodifiable [Iterable].
-  ///
-  /// Asserts that all [List] entries have not been closed with [endList].
-  Iterable<Object?> get result {
-    assert(_path.length == 1);
-    return _result;
-  }
-
-  @override
-  void addBool(bool value) => _path.last.add(value);
-  @override
-  void addNullableBool(bool? value) => _path.last.add(value);
-
-  @override
-  void addNum(num value) => _path.last.add(value);
-  @override
-  void addNullableNum(num? value) => _path.last.add(value);
-
-  @override
-  void addString(String value) => _path.last.add(value);
-  @override
-  void addNullableString(String? value) => _path.last.add(value);
-
-  @override
-  void addNull() => _path.last.add(null);
-
-  @override
-  void startList() {
-    List<Object?> sublist = [];
-    _path.last.add(sublist);
-    _path.add(sublist);
-  }
-
-  @override
-  void endList() {
-    _path.removeLast();
-  }
-}
-
-class JsonDeserializer implements Deserializer {
-  /// The root source list to read from.
-  final Iterable<Object?> _source;
-
-  /// The path to the current iterator we are reading from.
-  late List<Iterator<Object?>> _path = [];
-
-  /// Whether we have received our first [moveNext] call.
-  bool _initialized = false;
-
-  /// Initialize this deserializer from `_source`.
-  JsonDeserializer(this._source);
-
-  @override
-  bool checkNull() => _expectValue<Object?>() == null;
-
-  @override
-  void expectList() => _path.add(_expectValue<Iterable<Object?>>().iterator);
-
-  @override
-  bool expectBool() => _expectValue();
-  @override
-  bool? expectNullableBool() => _expectValue();
-
-  @override
-  T expectNum<T extends num>() => _expectValue();
-  @override
-  num? expectNullableNum() => _expectValue();
-
-  @override
-  String expectString() => _expectValue();
-  @override
-  String? expectNullableString() => _expectValue();
-
-  /// Reads the current value and casts it to [T].
-  T _expectValue<T>() {
-    if (!_initialized) {
-      throw new StateError(
-          'You must call `moveNext()` before reading any values.');
-    }
-    return _path.last.current as T;
-  }
-
-  @override
-  bool moveNext() {
-    if (!_initialized) {
-      _path.add(_source.iterator);
-      _initialized = true;
-    }
-
-    // Move the current iterable, if its at the end of its items remove it from
-    // the current path and return false.
-    if (!_path.last.moveNext()) {
-      _path.removeLast();
-      return false;
-    }
-
-    return true;
-  }
-}
-
-/// Must be set using `withSerializationMode` before doing any serialization or
-/// deserialization.
-SerializationMode get serializationMode {
-  SerializationMode? mode =
-      Zone.current[#serializationMode] as SerializationMode?;
-  if (mode == null) {
-    throw new StateError('No SerializationMode set, you must do all '
-        'serialization inside a call to `withSerializationMode`.');
-  }
-  return mode;
-}
-
-/// Some objects are serialized differently on the client side versus the server
-/// side. This indicates the different modes.
-enum SerializationMode {
-  server,
-  client,
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization_extensions.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization_extensions.dart
deleted file mode 100644
index ff8a0b2..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization_extensions.dart
+++ /dev/null
@@ -1,299 +0,0 @@
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
-
-import 'remote_instance.dart';
-import 'serialization.dart';
-import '../api.dart';
-
-extension DeserializerExtensions on Deserializer {
-  T expectRemoteInstance<T>() {
-    int id = expectNum();
-    switch (serializationMode) {
-      case SerializationMode.client:
-        moveNext();
-        RemoteInstanceKind kind = RemoteInstanceKind.values[expectNum()];
-        switch (kind) {
-          case RemoteInstanceKind.classIntrospector:
-          case RemoteInstanceKind.namedStaticType:
-          case RemoteInstanceKind.staticType:
-          case RemoteInstanceKind.typeDeclarationResolver:
-          case RemoteInstanceKind.typeResolver:
-            // These are simple wrappers, just pass in the kind
-            return new RemoteInstanceImpl(id: id, kind: kind) as T;
-          case RemoteInstanceKind.classDeclaration:
-            moveNext();
-            return _expectClassDeclaration(id) as T;
-          case RemoteInstanceKind.constructorDeclaration:
-            moveNext();
-            return _expectConstructorDeclaration(id) as T;
-          case RemoteInstanceKind.fieldDeclaration:
-            moveNext();
-            return _expectFieldDeclaration(id) as T;
-          case RemoteInstanceKind.functionDeclaration:
-            moveNext();
-            return _expectFunctionDeclaration(id) as T;
-          case RemoteInstanceKind.functionTypeAnnotation:
-            moveNext();
-            return _expectFunctionTypeAnnotation(id) as T;
-          case RemoteInstanceKind.identifier:
-            moveNext();
-            return _expectIdentifier(id) as T;
-          case RemoteInstanceKind.methodDeclaration:
-            moveNext();
-            return _expectMethodDeclaration(id) as T;
-          case RemoteInstanceKind.namedTypeAnnotation:
-            moveNext();
-            return _expectNamedTypeAnnotation(id) as T;
-          case RemoteInstanceKind.parameterDeclaration:
-            moveNext();
-            return _expectParameterDeclaration(id) as T;
-          case RemoteInstanceKind.typeAliasDeclaration:
-            moveNext();
-            return _expectTypeAliasDeclaration(id) as T;
-          case RemoteInstanceKind.typeParameterDeclaration:
-            moveNext();
-            return _expectTypeParameterDeclaration(id) as T;
-          case RemoteInstanceKind.variableDeclaration:
-            moveNext();
-            return _expectVariableDeclaration(id) as T;
-        }
-      case SerializationMode.server:
-        return RemoteInstance.cached(id) as T;
-    }
-  }
-
-  /// Helper method to read a list of [RemoteInstance]s.
-  List<T> _expectRemoteInstanceList<T extends RemoteInstance>() {
-    expectList();
-    return [
-      for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
-        expectRemoteInstance(),
-    ];
-  }
-
-  NamedTypeAnnotation _expectNamedTypeAnnotation(int id) =>
-      new NamedTypeAnnotationImpl(
-        id: id,
-        isNullable: expectBool(),
-        identifier: RemoteInstance.deserialize(this),
-        typeArguments: (this..moveNext())._expectRemoteInstanceList(),
-      );
-
-  FunctionTypeAnnotation _expectFunctionTypeAnnotation(int id) =>
-      new FunctionTypeAnnotationImpl(
-        id: id,
-        isNullable: expectBool(),
-        returnType: RemoteInstance.deserialize(this),
-        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
-        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
-        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
-      );
-
-  Identifier _expectIdentifier(int id) => new IdentifierImpl(
-        id: id,
-        name: expectString(),
-      );
-
-  ParameterDeclaration _expectParameterDeclaration(int id) =>
-      new ParameterDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        defaultValue: (this..moveNext()).checkNull() ? null : expectCode(),
-        isNamed: (this..moveNext()).expectBool(),
-        isRequired: (this..moveNext()).expectBool(),
-        type: RemoteInstance.deserialize(this),
-      );
-
-  TypeParameterDeclaration _expectTypeParameterDeclaration(int id) =>
-      new TypeParameterDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        bounds: (this..moveNext()).checkNull() ? null : expectRemoteInstance(),
-      );
-
-  FunctionDeclaration _expectFunctionDeclaration(int id) =>
-      new FunctionDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        isAbstract: (this..moveNext()).expectBool(),
-        isExternal: (this..moveNext()).expectBool(),
-        isGetter: (this..moveNext()).expectBool(),
-        isSetter: (this..moveNext()).expectBool(),
-        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
-        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
-        returnType: RemoteInstance.deserialize(this),
-        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
-      );
-
-  MethodDeclaration _expectMethodDeclaration(int id) =>
-      new MethodDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        isAbstract: (this..moveNext()).expectBool(),
-        isExternal: (this..moveNext()).expectBool(),
-        isGetter: (this..moveNext()).expectBool(),
-        isSetter: (this..moveNext()).expectBool(),
-        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
-        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
-        returnType: RemoteInstance.deserialize(this),
-        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
-        definingClass: RemoteInstance.deserialize(this),
-      );
-
-  ConstructorDeclaration _expectConstructorDeclaration(int id) =>
-      new ConstructorDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        isAbstract: (this..moveNext()).expectBool(),
-        isExternal: (this..moveNext()).expectBool(),
-        isGetter: (this..moveNext()).expectBool(),
-        isSetter: (this..moveNext()).expectBool(),
-        namedParameters: (this..moveNext())._expectRemoteInstanceList(),
-        positionalParameters: (this..moveNext())._expectRemoteInstanceList(),
-        returnType: RemoteInstance.deserialize(this),
-        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
-        definingClass: RemoteInstance.deserialize(this),
-        isFactory: (this..moveNext()).expectBool(),
-      );
-
-  VariableDeclaration _expectVariableDeclaration(int id) =>
-      new VariableDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        initializer: (this..moveNext()).expectNullableCode(),
-        isExternal: (this..moveNext()).expectBool(),
-        isFinal: (this..moveNext()).expectBool(),
-        isLate: (this..moveNext()).expectBool(),
-        type: RemoteInstance.deserialize(this),
-      );
-
-  FieldDeclaration _expectFieldDeclaration(int id) => new FieldDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        initializer: (this..moveNext()).expectNullableCode(),
-        isExternal: (this..moveNext()).expectBool(),
-        isFinal: (this..moveNext()).expectBool(),
-        isLate: (this..moveNext()).expectBool(),
-        type: RemoteInstance.deserialize(this),
-        definingClass: RemoteInstance.deserialize(this),
-      );
-
-  ClassDeclaration _expectClassDeclaration(int id) => new ClassDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
-        interfaces: (this..moveNext())._expectRemoteInstanceList(),
-        isAbstract: (this..moveNext()).expectBool(),
-        isExternal: (this..moveNext()).expectBool(),
-        mixins: (this..moveNext())._expectRemoteInstanceList(),
-        superclass:
-            (this..moveNext()).checkNull() ? null : expectRemoteInstance(),
-      );
-
-  TypeAliasDeclaration _expectTypeAliasDeclaration(int id) =>
-      new TypeAliasDeclarationImpl(
-        id: id,
-        identifier: expectRemoteInstance(),
-        typeParameters: (this..moveNext())._expectRemoteInstanceList(),
-        aliasedType: RemoteInstance.deserialize(this),
-      );
-
-  T expectCode<T extends Code>() {
-    CodeKind kind = CodeKind.values[expectNum()];
-    moveNext();
-    expectList();
-    List<Object> parts = [];
-    while (moveNext()) {
-      CodePartKind partKind = CodePartKind.values[expectNum()];
-      moveNext();
-      switch (partKind) {
-        case CodePartKind.code:
-          parts.add(expectCode());
-          break;
-        case CodePartKind.string:
-          parts.add(expectString());
-          break;
-        case CodePartKind.identifier:
-          parts.add(expectRemoteInstance());
-          break;
-      }
-    }
-
-    switch (kind) {
-      case CodeKind.raw:
-        return new Code.fromParts(parts) as T;
-      case CodeKind.declaration:
-        return new DeclarationCode.fromParts(parts) as T;
-      case CodeKind.element:
-        return new ElementCode.fromParts(parts) as T;
-      case CodeKind.expression:
-        return new ExpressionCode.fromParts(parts) as T;
-      case CodeKind.functionBody:
-        return new FunctionBodyCode.fromParts(parts) as T;
-      case CodeKind.namedArgument:
-        return new NamedArgumentCode.fromParts(parts) as T;
-      case CodeKind.parameter:
-        return new ParameterCode.fromParts(parts) as T;
-      case CodeKind.statement:
-        return new StatementCode.fromParts(parts) as T;
-    }
-  }
-
-  T? expectNullableCode<T extends Code>() {
-    if (checkNull()) return null;
-    return expectCode();
-  }
-}
-
-extension SerializeNullable on Serializable? {
-  /// Either serializes a `null` literal or the object.
-  void serializeNullable(Serializer serializer) {
-    Serializable? self = this;
-    if (self == null) {
-      serializer.addNull();
-    } else {
-      self.serialize(serializer);
-    }
-  }
-}
-
-extension SerializeNullableCode on Code? {
-  /// Either serializes a `null` literal or the code object.
-  void serializeNullable(Serializer serializer) {
-    Code? self = this;
-    if (self == null) {
-      serializer.addNull();
-    } else {
-      self.serialize(serializer);
-    }
-  }
-}
-
-extension SerializeCode on Code {
-  void serialize(Serializer serializer) {
-    serializer
-      ..addNum(kind.index)
-      ..startList();
-    for (Object part in parts) {
-      if (part is String) {
-        serializer
-          ..addNum(CodePartKind.string.index)
-          ..addString(part);
-      } else if (part is Code) {
-        serializer.addNum(CodePartKind.code.index);
-        part.serialize(serializer);
-      } else if (part is IdentifierImpl) {
-        serializer.addNum(CodePartKind.identifier.index);
-        part.serialize(serializer);
-      } else {
-        throw new StateError('Unrecognized code part $part');
-      }
-    }
-    serializer.endList();
-  }
-}
-
-enum CodePartKind {
-  string,
-  code,
-  identifier,
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/fake_executor/fake_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/fake_executor/fake_executor.dart
deleted file mode 100644
index 9bfd0a7..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/fake_executor/fake_executor.dart
+++ /dev/null
@@ -1,18 +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 '../executor.dart';
-
-/// The only public api exposed by this library, returns a [_FakeMacroExecutor].
-Future<MacroExecutor> start() async => new _FakeMacroExecutor();
-
-/// A [MacroExecutor] implementation which throws an [UnsupportedError] in all
-/// methods.
-class _FakeMacroExecutor implements MacroExecutor {
-  @override
-  dynamic noSuchMethod(Invocation invocation) {
-    throw new UnsupportedError(
-        'Macro expansion is not supported on this platform.');
-  }
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart
deleted file mode 100644
index 797ffb8..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart
+++ /dev/null
@@ -1,169 +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 'dart:isolate';
-import 'dart:mirrors';
-
-import 'isolate_mirrors_impl.dart';
-import '../executor_shared/introspection_impls.dart';
-import '../executor_shared/protocol.dart';
-import '../executor_shared/remote_instance.dart';
-import '../executor.dart';
-import '../api.dart';
-
-/// Returns an instance of [_IsolateMirrorMacroExecutor].
-///
-/// This is the only public api exposed by this library.
-Future<MacroExecutor> start() => _IsolateMirrorMacroExecutor.start();
-
-/// A [MacroExecutor] implementation which relies on [IsolateMirror.loadUri]
-/// in order to load macros libraries.
-///
-/// All actual work happens in a separate [Isolate], and this class serves as
-/// a bridge between that isolate and the language frontends.
-class _IsolateMirrorMacroExecutor implements MacroExecutor {
-  /// The actual isolate doing macro loading and execution.
-  final Isolate _macroIsolate;
-
-  /// The channel used to send requests to the [_macroIsolate].
-  final SendPort _sendPort;
-
-  /// The stream of responses from the [_macroIsolate].
-  final Stream<Response> _responseStream;
-
-  /// A map of response completers by request id.
-  final _responseCompleters = <int, Completer<Response>>{};
-
-  /// A function that should be invoked when shutting down this executor
-  /// to perform any necessary cleanup.
-  final void Function() _onClose;
-
-  _IsolateMirrorMacroExecutor._(
-      this._macroIsolate, this._sendPort, this._responseStream, this._onClose) {
-    _responseStream.listen((event) {
-      Completer<Response>? completer =
-          _responseCompleters.remove(event.requestId);
-      if (completer == null) {
-        throw new StateError(
-            'Got a response for an unrecognized request id ${event.requestId}');
-      }
-      completer.complete(event);
-    });
-  }
-
-  /// Initialize an [IsolateMirrorMacroExecutor] and return it once ready.
-  ///
-  /// Spawns the macro isolate and sets up a communication channel.
-  static Future<MacroExecutor> start() async {
-    ReceivePort receivePort = new ReceivePort();
-    Completer<SendPort> sendPortCompleter = new Completer<SendPort>();
-    StreamController<Response> responseStreamController =
-        new StreamController<Response>(sync: true);
-    receivePort.listen((message) {
-      if (!sendPortCompleter.isCompleted) {
-        sendPortCompleter.complete(message as SendPort);
-      } else {
-        responseStreamController.add(message as Response);
-      }
-    }).onDone(responseStreamController.close);
-    Isolate macroIsolate = await Isolate.spawn(spawn, receivePort.sendPort);
-
-    return new _IsolateMirrorMacroExecutor._(
-        macroIsolate,
-        await sendPortCompleter.future,
-        responseStreamController.stream,
-        receivePort.close);
-  }
-
-  @override
-  Future<String> buildAugmentationLibrary(
-      Iterable<MacroExecutionResult> macroResults) {
-    // TODO: implement buildAugmentationLibrary
-    throw new UnimplementedError();
-  }
-
-  @override
-  void close() {
-    _onClose();
-    _macroIsolate.kill();
-  }
-
-  @override
-  Future<MacroExecutionResult> executeDeclarationsPhase(
-      MacroInstanceIdentifier macro,
-      Declaration declaration,
-      TypeResolver typeResolver,
-      ClassIntrospector classIntrospector) {
-    // TODO: implement executeDeclarationsPhase
-    throw new UnimplementedError();
-  }
-
-  @override
-  Future<MacroExecutionResult> executeDefinitionsPhase(
-          MacroInstanceIdentifier macro,
-          DeclarationImpl declaration,
-          TypeResolver typeResolver,
-          ClassIntrospector classIntrospector,
-          TypeDeclarationResolver typeDeclarationResolver) =>
-      _sendRequest(new ExecuteDefinitionsPhaseRequest(
-          macro,
-          declaration,
-          new RemoteInstanceImpl(
-              instance: typeResolver,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.typeResolver),
-          new RemoteInstanceImpl(
-              instance: classIntrospector,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.classIntrospector),
-          new RemoteInstanceImpl(
-              instance: typeDeclarationResolver,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.typeDeclarationResolver),
-          // Serialization zones are not necessary in this executor.
-          serializationZoneId: -1));
-
-  @override
-  Future<MacroExecutionResult> executeTypesPhase(
-      MacroInstanceIdentifier macro, Declaration declaration) {
-    // TODO: implement executeTypesPhase
-    throw new UnimplementedError();
-  }
-
-  @override
-  Future<MacroInstanceIdentifier> instantiateMacro(
-          MacroClassIdentifier macroClass,
-          String constructor,
-          Arguments arguments) =>
-      _sendRequest(
-          new InstantiateMacroRequest(macroClass, constructor, arguments,
-              // Serialization zones are not necessary in this executor.
-              serializationZoneId: -1));
-
-  @override
-  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
-      {Uri? precompiledKernelUri}) {
-    if (precompiledKernelUri != null) {
-      // TODO: Implement support?
-      throw new UnsupportedError(
-          'The IsolateMirrorsExecutor does not support precompiled dill files');
-    }
-    return _sendRequest(new LoadMacroRequest(library, name,
-        // Serialization zones are not necessary in this executor.
-        serializationZoneId: -1));
-  }
-
-  /// Sends a request and returns the response, casting it to the expected
-  /// type.
-  Future<T> _sendRequest<T>(Request request) async {
-    _sendPort.send(request);
-    Completer<Response> completer = new Completer<Response>();
-    _responseCompleters[request.id] = completer;
-    Response response = await completer.future;
-    T? result = response.response as T?;
-    if (result != null) return result;
-    throw response.error!;
-  }
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart
deleted file mode 100644
index 4c435f6..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart
+++ /dev/null
@@ -1,131 +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 'dart:isolate';
-import 'dart:mirrors';
-
-import '../executor_shared/builder_impls.dart';
-import '../executor_shared/introspection_impls.dart';
-import '../executor_shared/response_impls.dart';
-import '../executor_shared/protocol.dart';
-import '../api.dart';
-
-/// Spawns a new isolate for loading and executing macros.
-void spawn(SendPort sendPort) {
-  ReceivePort receivePort = new ReceivePort();
-  sendPort.send(receivePort.sendPort);
-  receivePort.listen((message) async {
-    Response response;
-    if (message is LoadMacroRequest) {
-      response = await _loadMacro(message);
-    } else if (message is InstantiateMacroRequest) {
-      response = await _instantiateMacro(message);
-    } else if (message is ExecuteDefinitionsPhaseRequest) {
-      response = await _executeDefinitionsPhase(message);
-    } else {
-      throw new StateError('Unrecognized event type $message');
-    }
-    sendPort.send(response);
-  });
-}
-
-/// Maps macro identifiers to class mirrors.
-final _macroClasses = <MacroClassIdentifierImpl, ClassMirror>{};
-
-/// Handles [LoadMacroRequest]s.
-Future<Response> _loadMacro(LoadMacroRequest request) async {
-  try {
-    MacroClassIdentifierImpl identifier =
-        new MacroClassIdentifierImpl(request.library, request.name);
-    if (_macroClasses.containsKey(identifier)) {
-      throw new UnsupportedError(
-          'Reloading macros is not supported by this implementation');
-    }
-    LibraryMirror libMirror =
-        await currentMirrorSystem().isolate.loadUri(request.library);
-    ClassMirror macroClass =
-        libMirror.declarations[new Symbol(request.name)] as ClassMirror;
-    _macroClasses[identifier] = macroClass;
-    return new Response(
-        response: identifier,
-        requestId: request.id,
-        responseType: MessageType.macroClassIdentifier);
-  } catch (e) {
-    return new Response(
-        error: e, requestId: request.id, responseType: MessageType.error);
-  }
-}
-
-/// Maps macro instance identifiers to instances.
-final _macroInstances = <MacroInstanceIdentifierImpl, Macro>{};
-
-/// Handles [InstantiateMacroRequest]s.
-Future<Response> _instantiateMacro(InstantiateMacroRequest request) async {
-  try {
-    ClassMirror? clazz = _macroClasses[request.macroClass];
-    if (clazz == null) {
-      throw new ArgumentError('Unrecognized macro class ${request.macroClass}');
-    }
-    Macro instance = clazz.newInstance(
-        new Symbol(request.constructorName), request.arguments.positional, {
-      for (MapEntry<String, Object?> entry in request.arguments.named.entries)
-        new Symbol(entry.key): entry.value,
-    }).reflectee as Macro;
-    MacroInstanceIdentifierImpl identifier =
-        new MacroInstanceIdentifierImpl(instance);
-    _macroInstances[identifier] = instance;
-    return new Response(
-        response: identifier,
-        requestId: request.id,
-        responseType: MessageType.macroInstanceIdentifier);
-  } catch (e) {
-    return new Response(
-        error: e, requestId: request.id, responseType: MessageType.error);
-  }
-}
-
-Future<Response> _executeDefinitionsPhase(
-    ExecuteDefinitionsPhaseRequest request) async {
-  try {
-    Macro? instance = _macroInstances[request.macro];
-    if (instance == null) {
-      throw new StateError('Unrecognized macro instance ${request.macro}\n'
-          'Known instances: $_macroInstances)');
-    }
-    DeclarationImpl declaration = request.declaration;
-    if (instance is FunctionDefinitionMacro &&
-        declaration is FunctionDeclarationImpl) {
-      FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
-          declaration,
-          request.classIntrospector.instance as ClassIntrospector,
-          request.typeResolver.instance as TypeResolver,
-          request.typeDeclarationResolver.instance as TypeDeclarationResolver);
-      await instance.buildDefinitionForFunction(declaration, builder);
-      return new Response(
-          response: builder.result,
-          requestId: request.id,
-          responseType: MessageType.macroExecutionResult);
-    } else if (instance is MethodDefinitionMacro &&
-        declaration is MethodDeclarationImpl) {
-      FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
-          declaration,
-          request.classIntrospector.instance as ClassIntrospector,
-          request.typeResolver.instance as TypeResolver,
-          request.typeDeclarationResolver.instance as TypeDeclarationResolver);
-      await instance.buildDefinitionForMethod(declaration, builder);
-      return new SerializableResponse(
-          responseType: MessageType.macroExecutionResult,
-          response: builder.result,
-          requestId: request.id,
-          serializationZoneId: request.serializationZoneId);
-    } else {
-      throw new UnsupportedError(
-          'Only Method and Function Definition Macros are supported currently');
-    }
-  } catch (e) {
-    return new Response(
-        error: e, requestId: request.id, responseType: MessageType.error);
-  }
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
deleted file mode 100644
index cfe6602..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
+++ /dev/null
@@ -1,466 +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 'dart:isolate';
-
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
-
-import '../api.dart';
-import '../executor_shared/introspection_impls.dart';
-import '../executor_shared/protocol.dart';
-import '../executor_shared/response_impls.dart';
-import '../executor_shared/serialization.dart';
-import '../executor.dart';
-
-/// Returns an instance of [_IsolatedMacroExecutor].
-///
-/// This is the only public api exposed by this library.
-Future<MacroExecutor> start() async => new _IsolatedMacroExecutor();
-
-/// A [MacroExecutor] implementation which spawns a separate isolate for each
-/// macro that is loaded. Each of these is wrapped in its own
-/// [_SingleIsolatedMacroExecutor] which requests are delegated to.
-///
-/// This implementation requires precompiled kernel files when loading macros,
-/// (you must pass a `precompiledKernelUri` to [loadMacro]).
-///
-/// Spawned isolates are not ran in the same isolate group, so objects are
-/// serialized between isolates.
-class _IsolatedMacroExecutor implements MacroExecutor {
-  /// Individual executors indexed by [MacroClassIdentifier] or
-  /// [MacroInstanceIdentifier].
-  final _executors = <Object, _SingleIsolatedMacroExecutor>{};
-
-  @override
-  Future<String> buildAugmentationLibrary(
-      Iterable<MacroExecutionResult> macroResults) {
-    // TODO: implement buildAugmentationLibrary
-    throw new UnimplementedError();
-  }
-
-  @override
-  void close() {
-    for (_SingleIsolatedMacroExecutor executor in _executors.values) {
-      executor.close();
-    }
-  }
-
-  @override
-  Future<MacroExecutionResult> executeDeclarationsPhase(
-          MacroInstanceIdentifier macro,
-          DeclarationImpl declaration,
-          TypeResolver typeResolver,
-          ClassIntrospector classIntrospector) =>
-      _executors[macro]!.executeDeclarationsPhase(
-          macro, declaration, typeResolver, classIntrospector);
-
-  @override
-  Future<MacroExecutionResult> executeDefinitionsPhase(
-          MacroInstanceIdentifier macro,
-          DeclarationImpl declaration,
-          TypeResolver typeResolver,
-          ClassIntrospector classIntrospector,
-          TypeDeclarationResolver typeDeclarationResolver) =>
-      _executors[macro]!.executeDefinitionsPhase(macro, declaration,
-          typeResolver, classIntrospector, typeDeclarationResolver);
-
-  @override
-  Future<MacroExecutionResult> executeTypesPhase(
-          MacroInstanceIdentifier macro, DeclarationImpl declaration) =>
-      _executors[macro]!.executeTypesPhase(macro, declaration);
-
-  @override
-  Future<MacroInstanceIdentifier> instantiateMacro(
-      MacroClassIdentifier macroClass,
-      String constructor,
-      Arguments arguments) async {
-    _SingleIsolatedMacroExecutor executor = _executors[macroClass]!;
-    MacroInstanceIdentifier instance =
-        await executor.instantiateMacro(macroClass, constructor, arguments);
-    _executors[instance] = executor;
-    return instance;
-  }
-
-  @override
-  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
-      {Uri? precompiledKernelUri}) async {
-    if (precompiledKernelUri == null) {
-      throw new UnsupportedError(
-          'This environment requires a non-null `precompiledKernelUri` to be '
-          'passed when loading macros.');
-    }
-    MacroClassIdentifier identifier =
-        new MacroClassIdentifierImpl(library, name);
-    _executors.remove(identifier)?.close();
-
-    _SingleIsolatedMacroExecutor executor =
-        await _SingleIsolatedMacroExecutor.start(
-            library, name, precompiledKernelUri);
-    _executors[identifier] = executor;
-    return identifier;
-  }
-}
-
-class _SingleIsolatedMacroExecutor extends MacroExecutor {
-  /// The stream on which we receive responses.
-  final Stream<Object> messageStream;
-
-  /// The send port where we should send requests.
-  final SendPort sendPort;
-
-  /// A function that should be invoked when shutting down this executor
-  /// to perform any necessary cleanup.
-  final void Function() onClose;
-
-  /// A map of response completers by request id.
-  final responseCompleters = <int, Completer<Response>>{};
-
-  /// We need to know which serialization zone to deserialize objects in, so
-  /// that we read them from the correct cache. Each request creates its own
-  /// zone which it stores here by ID and then responses are deserialized in
-  /// the same zone.
-  static final serializationZones = <int, Zone>{};
-
-  /// Incrementing identifier for the serialization zone ids.
-  static int _nextSerializationZoneId = 0;
-
-  _SingleIsolatedMacroExecutor(
-      {required this.onClose,
-      required this.messageStream,
-      required this.sendPort}) {
-    messageStream.listen((message) {
-      withSerializationMode(SerializationMode.server, () {
-        JsonDeserializer deserializer =
-            new JsonDeserializer(message as List<Object?>);
-        // Every object starts with a zone ID which dictates the zone in which
-        // we should deserialize the message.
-        deserializer.moveNext();
-        int zoneId = deserializer.expectNum();
-        Zone zone = serializationZones[zoneId]!;
-        zone.run(() async {
-          deserializer.moveNext();
-          MessageType messageType =
-              MessageType.values[deserializer.expectNum()];
-          switch (messageType) {
-            case MessageType.response:
-              SerializableResponse response =
-                  new SerializableResponse.deserialize(deserializer, zoneId);
-              Completer<Response>? completer =
-                  responseCompleters.remove(response.requestId);
-              if (completer == null) {
-                throw new StateError(
-                    'Got a response for an unrecognized request id '
-                    '${response.requestId}');
-              }
-              completer.complete(response);
-              break;
-            case MessageType.instantiateTypeRequest:
-              InstantiateTypeRequest request =
-                  new InstantiateTypeRequest.deserialize(deserializer, zoneId);
-              StaticType instance =
-                  await (request.typeResolver.instance as TypeResolver)
-                      .instantiateType(request.typeAnnotation);
-              SerializableResponse response = new SerializableResponse(
-                  response: new RemoteInstanceImpl(
-                      id: RemoteInstance.uniqueId,
-                      instance: instance,
-                      kind: instance is NamedStaticType
-                          ? RemoteInstanceKind.namedStaticType
-                          : RemoteInstanceKind.staticType),
-                  requestId: request.id,
-                  responseType: instance is NamedStaticType
-                      ? MessageType.namedStaticType
-                      : MessageType.staticType,
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.isExactlyTypeRequest:
-              IsExactlyTypeRequest request =
-                  new IsExactlyTypeRequest.deserialize(deserializer, zoneId);
-              StaticType leftType = request.leftType.instance as StaticType;
-              StaticType rightType = request.rightType.instance as StaticType;
-              SerializableResponse response = new SerializableResponse(
-                  response:
-                      new BooleanValue(await leftType.isExactly(rightType)),
-                  requestId: request.id,
-                  responseType: MessageType.boolean,
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.isSubtypeOfRequest:
-              IsSubtypeOfRequest request =
-                  new IsSubtypeOfRequest.deserialize(deserializer, zoneId);
-              StaticType leftType = request.leftType.instance as StaticType;
-              StaticType rightType = request.rightType.instance as StaticType;
-              SerializableResponse response = new SerializableResponse(
-                  response:
-                      new BooleanValue(await leftType.isSubtypeOf(rightType)),
-                  requestId: request.id,
-                  responseType: MessageType.boolean,
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            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);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.constructorsOfRequest:
-              ClassIntrospectionRequest request =
-                  new ClassIntrospectionRequest.deserialize(
-                      deserializer, messageType, zoneId);
-              ClassIntrospector classIntrospector =
-                  request.classIntrospector.instance as ClassIntrospector;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.declarationList,
-                  response: new DeclarationList((await classIntrospector
-                          .constructorsOf(request.classDeclaration))
-                      // TODO: Consider refactoring to avoid the need for this.
-                      .cast<ConstructorDeclarationImpl>()),
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.fieldsOfRequest:
-              ClassIntrospectionRequest request =
-                  new ClassIntrospectionRequest.deserialize(
-                      deserializer, messageType, zoneId);
-              ClassIntrospector classIntrospector =
-                  request.classIntrospector.instance as ClassIntrospector;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.declarationList,
-                  response: new DeclarationList((await classIntrospector
-                          .fieldsOf(request.classDeclaration))
-                      // TODO: Consider refactoring to avoid the need for this.
-                      .cast<FieldDeclarationImpl>()),
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.interfacesOfRequest:
-              ClassIntrospectionRequest request =
-                  new ClassIntrospectionRequest.deserialize(
-                      deserializer, messageType, zoneId);
-              ClassIntrospector classIntrospector =
-                  request.classIntrospector.instance as ClassIntrospector;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.declarationList,
-                  response: new DeclarationList((await classIntrospector
-                          .interfacesOf(request.classDeclaration))
-                      // TODO: Consider refactoring to avoid the need for this.
-                      .cast<ClassDeclarationImpl>()),
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.methodsOfRequest:
-              ClassIntrospectionRequest request =
-                  new ClassIntrospectionRequest.deserialize(
-                      deserializer, messageType, zoneId);
-              ClassIntrospector classIntrospector =
-                  request.classIntrospector.instance as ClassIntrospector;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.declarationList,
-                  response: new DeclarationList((await classIntrospector
-                          .methodsOf(request.classDeclaration))
-                      // TODO: Consider refactoring to avoid the need for this.
-                      .cast<MethodDeclarationImpl>()),
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.mixinsOfRequest:
-              ClassIntrospectionRequest request =
-                  new ClassIntrospectionRequest.deserialize(
-                      deserializer, messageType, zoneId);
-              ClassIntrospector classIntrospector =
-                  request.classIntrospector.instance as ClassIntrospector;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.declarationList,
-                  response: new DeclarationList((await classIntrospector
-                          .mixinsOf(request.classDeclaration))
-                      // TODO: Consider refactoring to avoid the need for this.
-                      .cast<ClassDeclarationImpl>()),
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            case MessageType.superclassOfRequest:
-              ClassIntrospectionRequest request =
-                  new ClassIntrospectionRequest.deserialize(
-                      deserializer, messageType, zoneId);
-              ClassIntrospector classIntrospector =
-                  request.classIntrospector.instance as ClassIntrospector;
-              SerializableResponse response = new SerializableResponse(
-                  requestId: request.id,
-                  responseType: MessageType.remoteInstance,
-                  response: (await classIntrospector
-                          .superclassOf(request.classDeclaration))
-                      // TODO: Consider refactoring to avoid the need for this.
-                      as ClassDeclarationImpl?,
-                  serializationZoneId: zoneId);
-              JsonSerializer serializer = new JsonSerializer();
-              response.serialize(serializer);
-              sendPort.send(serializer.result);
-              break;
-            default:
-              throw new StateError('Unexpected message type $messageType');
-          }
-        });
-      });
-    });
-  }
-
-  static Future<_SingleIsolatedMacroExecutor> start(
-      Uri library, String name, Uri precompiledKernelUri) async {
-    ReceivePort receivePort = new ReceivePort();
-    Isolate isolate =
-        await Isolate.spawnUri(precompiledKernelUri, [], receivePort.sendPort);
-    Completer<SendPort> sendPortCompleter = new Completer();
-    StreamController<Object> messageStreamController =
-        new StreamController(sync: true);
-    receivePort.listen((message) {
-      if (!sendPortCompleter.isCompleted) {
-        sendPortCompleter.complete(message as SendPort);
-      } else {
-        messageStreamController.add(message);
-      }
-    }).onDone(messageStreamController.close);
-
-    return new _SingleIsolatedMacroExecutor(
-        onClose: () {
-          receivePort.close();
-          isolate.kill();
-        },
-        messageStream: messageStreamController.stream,
-        sendPort: await sendPortCompleter.future);
-  }
-
-  @override
-  void close() => onClose();
-
-  /// These calls are handled by the higher level executor.
-  @override
-  Future<String> buildAugmentationLibrary(
-          Iterable<MacroExecutionResult> macroResults) =>
-      throw new StateError('Unreachable');
-
-  @override
-  Future<MacroExecutionResult> executeDeclarationsPhase(
-          MacroInstanceIdentifier macro,
-          DeclarationImpl declaration,
-          TypeResolver typeResolver,
-          ClassIntrospector classIntrospector) =>
-      _sendRequest((zoneId) => new ExecuteDeclarationsPhaseRequest(
-          macro,
-          declaration,
-          new RemoteInstanceImpl(
-              instance: typeResolver,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.typeResolver),
-          new RemoteInstanceImpl(
-              instance: classIntrospector,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.classIntrospector),
-          serializationZoneId: zoneId));
-
-  @override
-  Future<MacroExecutionResult> executeDefinitionsPhase(
-          MacroInstanceIdentifier macro,
-          DeclarationImpl declaration,
-          TypeResolver typeResolver,
-          ClassIntrospector classIntrospector,
-          TypeDeclarationResolver typeDeclarationResolver) =>
-      _sendRequest((zoneId) => new ExecuteDefinitionsPhaseRequest(
-          macro,
-          declaration,
-          new RemoteInstanceImpl(
-              instance: typeResolver,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.typeResolver),
-          new RemoteInstanceImpl(
-              instance: classIntrospector,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.classIntrospector),
-          new RemoteInstanceImpl(
-              instance: typeDeclarationResolver,
-              id: RemoteInstance.uniqueId,
-              kind: RemoteInstanceKind.typeDeclarationResolver),
-          serializationZoneId: zoneId));
-
-  @override
-  Future<MacroExecutionResult> executeTypesPhase(
-          MacroInstanceIdentifier macro, DeclarationImpl declaration) =>
-      _sendRequest((zoneId) => new ExecuteTypesPhaseRequest(macro, declaration,
-          serializationZoneId: zoneId));
-
-  @override
-  Future<MacroInstanceIdentifier> instantiateMacro(
-          MacroClassIdentifier macroClass,
-          String constructor,
-          Arguments arguments) =>
-      _sendRequest((zoneId) => new InstantiateMacroRequest(
-          macroClass, constructor, arguments,
-          serializationZoneId: zoneId));
-
-  /// These calls are handled by the higher level executor.
-  @override
-  Future<MacroClassIdentifier> loadMacro(Uri library, String name,
-          {Uri? precompiledKernelUri}) =>
-      throw new StateError('Unreachable');
-
-  /// Creates a [Request] with a given serialization zone ID, and handles the
-  /// response, casting it to the expected type or throwing the error provided.
-  Future<T> _sendRequest<T>(Request Function(int) requestFactory) =>
-      withSerializationMode(SerializationMode.server, () async {
-        int zoneId = _nextSerializationZoneId++;
-        serializationZones[zoneId] = Zone.current;
-        Request request = requestFactory(zoneId);
-        JsonSerializer serializer = new JsonSerializer();
-        // It is our responsibility to add the zone ID header.
-        serializer.addNum(zoneId);
-        request.serialize(serializer);
-        sendPort.send(serializer.result);
-        Completer<Response> completer = new Completer<Response>();
-        responseCompleters[request.id] = completer;
-        try {
-          Response response = await completer.future;
-          T? result = response.response as T?;
-          if (result != null) return result;
-          throw new RemoteException(
-              response.error!.toString(), response.stackTrace);
-        } finally {
-          // Clean up the zone after the request is done.
-          serializationZones.remove(zoneId);
-        }
-      });
-}
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 027c7bb..a9ec81e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -1902,15 +1902,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeContinueLabelNotTarget = messageContinueLabelNotTarget;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageContinueLabelNotTarget = const MessageCode(
-    "ContinueLabelNotTarget",
-    analyzerCodes: <String>["LABEL_UNDEFINED"],
-    problemMessage: r"""Target of continue must be a label.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeContinueOutsideOfLoop = messageContinueOutsideOfLoop;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2770,6 +2761,33 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeEnumConstructorSuperInitializer =
+    messageEnumConstructorSuperInitializer;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageEnumConstructorSuperInitializer = const MessageCode(
+    "EnumConstructorSuperInitializer",
+    problemMessage: r"""Enum constructors can't contain super-initializers.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeEnumConstructorTearoff = messageEnumConstructorTearoff;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageEnumConstructorTearoff = const MessageCode(
+    "EnumConstructorTearoff",
+    problemMessage: r"""Enum constructors can't be torn off.""");
+
+// 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'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumDeclarationEmpty = messageEnumDeclarationEmpty;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2799,6 +2817,41 @@
             r"""Missing arguments in enum constructor invocation.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeEnumFactoryRedirectsToConstructor =
+    messageEnumFactoryRedirectsToConstructor;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageEnumFactoryRedirectsToConstructor = const MessageCode(
+    "EnumFactoryRedirectsToConstructor",
+    problemMessage:
+        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)>
+    templateEnumImplementerContainsValuesDeclaration =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.""",
+        withArguments: _withArgumentsEnumImplementerContainsValuesDeclaration);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeEnumImplementerContainsValuesDeclaration =
+    const Code<Message Function(String name)>(
+  "EnumImplementerContainsValuesDeclaration",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsEnumImplementerContainsValuesDeclaration(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeEnumImplementerContainsValuesDeclaration,
+      problemMessage:
+          """'${name}' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumInClass = messageEnumInClass;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2817,6 +2870,15 @@
     problemMessage: r"""Enums can't be instantiated.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeEnumNonConstConstructor = messageEnumNonConstConstructor;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageEnumNonConstConstructor = const MessageCode(
+    "EnumNonConstConstructor",
+    problemMessage:
+        r"""Generative enum constructors must be marked as 'const'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateEnumSupertypeOfNonAbstractClass =
     const Template<Message Function(String name)>(
@@ -6940,6 +7002,34 @@
     problemMessage: r"""'loadLibrary' takes no arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateMacroClassNotDeclaredMacro = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""Non-abstract class '#name' implements 'Macro' but isn't declared as a macro class.""",
+    correctionMessageTemplate: r"""Try adding the 'macro' class modifier.""",
+    withArguments: _withArgumentsMacroClassNotDeclaredMacro);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMacroClassNotDeclaredMacro =
+    const Code<Message Function(String name)>(
+  "MacroClassNotDeclaredMacro",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMacroClassNotDeclaredMacro(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMacroClassNotDeclaredMacro,
+      problemMessage:
+          """Non-abstract class '${name}' implements 'Macro' but isn't declared as a macro class.""",
+      correctionMessage: """Try adding the 'macro' class modifier.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMainNotFunctionDeclaration =
     messageMainNotFunctionDeclaration;
 
@@ -7378,6 +7468,37 @@
     problemMessage: r"""Can't have more than one 'super' initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String string,
+        String
+            string2)> templateMultipleClauses = const Template<
+        Message Function(String string, String string2)>(
+    problemMessageTemplate:
+        r"""Each '#string' definition can have at most one '#string2' clause.""",
+    correctionMessageTemplate:
+        r"""Try combining all of the '#string2' clauses into a single clause.""",
+    withArguments: _withArgumentsMultipleClauses);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2)>
+    codeMultipleClauses =
+    const Code<Message Function(String string, String string2)>(
+        "MultipleClauses",
+        index: 121);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMultipleClauses(String string, String string2) {
+  if (string.isEmpty) throw 'No string provided';
+  if (string2.isEmpty) throw 'No string provided';
+  return new Message(codeMultipleClauses,
+      problemMessage:
+          """Each '${string}' definition can have at most one '${string2}' clause.""",
+      correctionMessage: """Try combining all of the '${string2}' clauses into a single clause.""",
+      arguments: {'string': string, 'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMultipleExtends = messageMultipleExtends;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7685,6 +7806,46 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateNonAugmentationClassMemberConflict = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""Member '#name' conflicts with an existing member of the same name in the augmented class.""",
+    correctionMessageTemplate:
+        r"""Try changing the name to an existing member or adding an 'augment' modifier.""",
+    withArguments: _withArgumentsNonAugmentationClassMemberConflict);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeNonAugmentationClassMemberConflict =
+    const Code<Message Function(String name)>(
+  "NonAugmentationClassMemberConflict",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNonAugmentationClassMemberConflict(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeNonAugmentationClassMemberConflict,
+      problemMessage:
+          """Member '${name}' conflicts with an existing member of the same name in the augmented class.""",
+      correctionMessage: """Try changing the name to an existing member or adding an 'augment' modifier.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeNonAugmentationClassMemberConflictCause =
+    messageNonAugmentationClassMemberConflictCause;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageNonAugmentationClassMemberConflictCause =
+    const MessageCode("NonAugmentationClassMemberConflictCause",
+        severity: Severity.context,
+        problemMessage: r"""This is the existing member.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNonConstConstructor = messageNonConstConstructor;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8271,6 +8432,37 @@
     correctionMessage: r"""Try removing the type parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String string,
+        String
+            string2)> templateOutOfOrderClauses = const Template<
+        Message Function(String string, String string2)>(
+    problemMessageTemplate:
+        r"""The '#string' clause must come before the '#string2' clause.""",
+    correctionMessageTemplate:
+        r"""Try moving the '#string' clause before the '#string2' clause.""",
+    withArguments: _withArgumentsOutOfOrderClauses);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String string, String string2)>
+    codeOutOfOrderClauses =
+    const Code<Message Function(String string, String string2)>(
+        "OutOfOrderClauses",
+        index: 122);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsOutOfOrderClauses(String string, String string2) {
+  if (string.isEmpty) throw 'No string provided';
+  if (string2.isEmpty) throw 'No string provided';
+  return new Message(codeOutOfOrderClauses,
+      problemMessage:
+          """The '${string}' clause must come before the '${string2}' clause.""",
+      correctionMessage: """Try moving the '${string}' clause before the '${string2}' clause.""",
+      arguments: {'string': string, 'string2': string2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateOverriddenMethodCause =
     const Template<Message Function(String name)>(
         problemMessageTemplate: r"""This is the overridden method ('#name').""",
@@ -10225,6 +10417,44 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeUnexpectedTokens = messageUnexpectedTokens;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageUnexpectedTokens = const MessageCode(
+    "UnexpectedTokens",
+    index: 123,
+    problemMessage: r"""Unexpected tokens.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateUnmatchedAugmentationClassMember = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""Augmentation member '#name' doesn't match a member in the augmented class.""",
+    correctionMessageTemplate:
+        r"""Try changing the name to an existing member or removing the 'augment' modifier.""",
+    withArguments: _withArgumentsUnmatchedAugmentationClassMember);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeUnmatchedAugmentationClassMember =
+    const Code<Message Function(String name)>(
+  "UnmatchedAugmentationClassMember",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsUnmatchedAugmentationClassMember(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeUnmatchedAugmentationClassMember,
+      problemMessage:
+          """Augmentation member '${name}' doesn't match a member in the augmented class.""",
+      correctionMessage: """Try changing the name to an existing member or removing the 'augment' modifier.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string, Token token)>
     templateUnmatchedToken =
     const Template<Message Function(String string, Token token)>(
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
index 9741d8c..cf3476b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -61,9 +61,10 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
-    listener?.beginClassDeclaration(begin, abstractToken, macroToken, name);
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
+    listener?.beginClassDeclaration(
+        begin, abstractToken, macroToken, augmentToken, name);
   }
 
   @override
@@ -318,19 +319,21 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
       Token? varFinalOrConst,
       Token? getOrSet,
       Token name) {
-    listener?.beginMethod(declarationKind, externalToken, staticToken,
-        covariantToken, varFinalOrConst, getOrSet, name);
+    listener?.beginMethod(declarationKind, augmentToken, externalToken,
+        staticToken, covariantToken, varFinalOrConst, getOrSet, name);
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
-    listener?.beginMixinDeclaration(mixinKeyword, name);
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
+    listener?.beginMixinDeclaration(augmentToken, mixinKeyword, name);
   }
 
   @override
@@ -339,10 +342,10 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     listener?.beginNamedMixinApplication(
-        begin, abstractToken, macroToken, name);
+        begin, abstractToken, macroToken, augmentToken, name);
   }
 
   @override
@@ -416,8 +419,9 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
-    listener?.beginTopLevelMethod(lastConsumed, externalToken);
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
+    listener?.beginTopLevelMethod(lastConsumed, augmentToken, externalToken);
   }
 
   @override
@@ -545,6 +549,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -555,6 +560,7 @@
       Token endToken) {
     listener?.endClassFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -673,6 +679,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -683,6 +690,7 @@
       Token endToken) {
     listener?.endClassFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -728,6 +736,7 @@
   @override
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -738,6 +747,7 @@
       Token endToken) {
     listener?.endExtensionFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -883,8 +893,8 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
-    listener?.endImport(importKeyword, semicolon);
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
+    listener?.endImport(importKeyword, augmentToken, semicolon);
   }
 
   @override
@@ -976,6 +986,7 @@
   @override
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -986,6 +997,7 @@
       Token endToken) {
     listener?.endMixinFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -1095,14 +1107,23 @@
   void beginFields(
       DeclarationKind declarationKind,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
       Token? lateToken,
       Token? varFinalOrConst,
       Token lastConsumed) {
-    listener?.beginFields(declarationKind, abstractToken, externalToken,
-        staticToken, covariantToken, lateToken, varFinalOrConst, lastConsumed);
+    listener?.beginFields(
+        declarationKind,
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        lastConsumed);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
index 6e4c96b..4621543 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
@@ -124,8 +124,12 @@
     }
 
     // Recovery
-    if (isOneOfOrEof(identifier, followingValues) ||
-        looksLikeStartOfNextTopLevelDeclaration(identifier)) {
+    if (isOneOfOrEof(identifier, followingValues)) {
+      identifier = parser.insertSyntheticIdentifier(token, this,
+          message: codes.templateExpectedIdentifier.withArguments(identifier));
+    } else if (looksLikeStartOfNextTopLevelDeclaration(identifier) &&
+        (identifier.next == null ||
+            !isOneOfOrEof(identifier.next!, followingValues))) {
       identifier = parser.insertSyntheticIdentifier(token, this,
           message: codes.templateExpectedIdentifier.withArguments(identifier));
     } else {
@@ -603,8 +607,12 @@
         isOneOfOrEof(identifier.next!, followingValues)) {
       parser.reportRecoverableErrorWithToken(
           identifier, codes.templateBuiltInIdentifierInDeclaration);
-    } else if (looksLikeStartOfNextTopLevelDeclaration(identifier) ||
-        isOneOfOrEof(identifier, followingValues)) {
+    } else if (looksLikeStartOfNextTopLevelDeclaration(identifier) &&
+        (identifier.next == null ||
+            !isOneOfOrEof(identifier.next!, followingValues))) {
+      identifier = parser.insertSyntheticIdentifier(token, this,
+          message: codes.templateExpectedIdentifier.withArguments(identifier));
+    } else if (isOneOfOrEof(identifier, followingValues)) {
       identifier = parser.insertSyntheticIdentifier(token, this,
           message: codes.templateExpectedIdentifier.withArguments(identifier));
     } else {
@@ -802,8 +810,12 @@
     }
 
     // Recovery
-    if (isOneOfOrEof(identifier, followingValues) ||
-        looksLikeStartOfNextTopLevelDeclaration(identifier)) {
+    if (isOneOfOrEof(identifier, followingValues)) {
+      identifier = parser.insertSyntheticIdentifier(token, this,
+          message: codes.templateExpectedIdentifier.withArguments(identifier));
+    } else if (looksLikeStartOfNextTopLevelDeclaration(identifier) &&
+        (identifier.next == null ||
+            !isOneOfOrEof(identifier.next!, followingValues))) {
       identifier = parser.insertSyntheticIdentifier(token, this,
           message: codes.templateExpectedIdentifier.withArguments(identifier));
     } else {
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 2f5e2a4..d31bac8b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -126,8 +126,8 @@
   /// (or extraneous modifiers in the case of recovery) preceding [name].
   ///
   /// At this point we have parsed the name and type parameter declarations.
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {}
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {}
 
   /// Handle an extends clause in a class declaration. Substructures:
   /// - supertype (may be a mixin application)
@@ -186,7 +186,8 @@
   }
 
   /// Handle the beginning of a mixin declaration.
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {}
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {}
 
   /// Handle an on clause in a mixin declaration. Substructures:
   /// - implemented types
@@ -436,6 +437,7 @@
   /// Started by [beginFields].
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -456,6 +458,7 @@
   /// Started by [beginFields].
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -465,8 +468,17 @@
       Token beginToken,
       Token endToken) {
     // TODO(danrubel): push implementation into subclasses
-    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
-        lateToken, varFinalOrConst, count, beginToken, endToken);
+    endClassFields(
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        count,
+        beginToken,
+        endToken);
   }
 
   /// Handle the end of a extension field declaration.  Substructures:
@@ -478,6 +490,7 @@
   /// Started by [beginFields].
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -487,8 +500,17 @@
       Token beginToken,
       Token endToken) {
     // TODO(danrubel): push implementation into subclasses
-    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
-        lateToken, varFinalOrConst, count, beginToken, endToken);
+    endClassFields(
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        count,
+        beginToken,
+        endToken);
   }
 
   /// Handle the end of an enum field declaration.  Substructures:
@@ -500,6 +522,7 @@
   /// Started by [beginFields].
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -508,8 +531,17 @@
       int count,
       Token beginToken,
       Token endToken) {
-    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
-        lateToken, varFinalOrConst, count, beginToken, endToken);
+    endClassFields(
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        count,
+        beginToken,
+        endToken);
   }
 
   /// Handle the end of an enum method declaration.  Substructures:
@@ -720,8 +752,8 @@
   /// (or extraneous modifiers in the case of recovery) preceding [name].
   ///
   /// At this point we have parsed the name and type parameter declarations.
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {}
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {}
 
   /// Handle a named mixin application with clause (e.g. "A with B, C").
   /// Substructures:
@@ -801,7 +833,7 @@
   /// - conditional uris
   /// - prefix identifier
   /// - combinators
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     logEvent("Import");
   }
 
@@ -977,6 +1009,7 @@
   /// [endMixinMethod].
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1249,6 +1282,7 @@
   void beginFields(
       DeclarationKind declarationKind,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1276,7 +1310,8 @@
     logEvent("TopLevelFields");
   }
 
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {}
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {}
 
   /// Handle the end of a top level method.  Substructures:
   /// - metadata
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
index a062b38..99e4582 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
@@ -34,9 +34,10 @@
 
 /// This class is used to parse modifiers in most locations where modifiers
 /// can occur, but does not call handleModifier or handleModifiers.
-class ModifierRecoveryContext {
+class ModifierContext {
   final Parser parser;
   Token? abstractToken;
+  Token? augmentToken;
   Token? constToken;
   Token? covariantToken;
   Token? externalToken;
@@ -47,12 +48,9 @@
   Token? varToken;
 
   // Set `true` when parsing modifiers after the `factory` token.
-  bool afterFactory = false;
+  bool _afterFactory = false;
 
-  // TODO(danrubel): Replace [ModifierRecoveryContext] and [ModifierContext]
-  // with this class.
-
-  ModifierRecoveryContext(this.parser);
+  ModifierContext(this.parser);
 
   set staticOrCovariant(Token? staticOrCovariant) {
     if (staticOrCovariant == null) {
@@ -94,9 +92,76 @@
     }
   }
 
+  /// Parse modifiers for class declarations.
+  Token parseClassModifiers(Token token, Token keyword) {
+    token = _parseModifiers(token);
+    if (constToken != null) {
+      reportTopLevelModifierError(constToken!, keyword);
+    }
+    if (externalToken != null) {
+      reportTopLevelModifierError(externalToken!, keyword);
+    }
+    reportExtraneousModifier(covariantToken);
+    reportExtraneousModifier(finalToken);
+    reportExtraneousModifier(lateToken);
+    reportExtraneousModifier(requiredToken);
+    reportExtraneousModifier(staticToken);
+    reportExtraneousModifier(varToken);
+    return token;
+  }
+
+  /// Parse modifiers for enum declarations.
+  Token parseEnumModifiers(Token token, Token keyword) {
+    token = _parseModifiers(token);
+    reportTopLevelModifierError(constToken, keyword);
+    reportTopLevelModifierError(externalToken, keyword);
+    reportExtraneousModifier(abstractToken);
+    // TODO(johnniwinther): Should we support 'augment' on enums.
+    reportExtraneousModifier(augmentToken);
+    reportExtraneousModifier(covariantToken);
+    reportExtraneousModifier(finalToken);
+    reportExtraneousModifier(lateToken);
+    reportExtraneousModifier(requiredToken);
+    reportExtraneousModifier(staticToken);
+    reportExtraneousModifier(varToken);
+    return token;
+  }
+
+  /// Parse modifiers for mixin declarations.
+  Token parseMixinModifiers(Token token, Token keyword) {
+    token = _parseModifiers(token);
+    reportTopLevelModifierError(constToken, keyword);
+    reportTopLevelModifierError(externalToken, keyword);
+    reportExtraneousModifier(abstractToken);
+    reportExtraneousModifier(covariantToken);
+    reportExtraneousModifier(finalToken);
+    reportExtraneousModifier(lateToken);
+    reportExtraneousModifier(requiredToken);
+    reportExtraneousModifier(staticToken);
+    reportExtraneousModifier(varToken);
+    return token;
+  }
+
+  /// Parse modifiers for library, import, export, part (of) directives and
+  /// typedef and extension declarations.
+  Token parseTopLevelKeywordModifiers(Token token, Token keyword) {
+    token = _parseModifiers(token);
+    reportTopLevelModifierError(constToken, keyword);
+    reportTopLevelModifierError(externalToken, keyword);
+    reportExtraneousModifier(abstractToken);
+    reportExtraneousModifier(augmentToken);
+    reportExtraneousModifier(covariantToken);
+    reportExtraneousModifier(finalToken);
+    reportExtraneousModifier(lateToken);
+    reportExtraneousModifier(requiredToken);
+    reportExtraneousModifier(staticToken);
+    reportExtraneousModifier(varToken);
+    return token;
+  }
+
   /// Parse modifiers for class methods and fields.
   Token parseClassMemberModifiers(Token token) {
-    token = parseModifiers(token);
+    token = _parseModifiers(token);
     reportExtraneousModifier(requiredToken);
     return token;
   }
@@ -104,7 +169,7 @@
   /// Parse modifiers for formal parameters.
   Token parseFormalParameterModifiers(
       Token token, FormalParameterKind parameterKind, MemberKind memberKind) {
-    token = parseModifiers(token);
+    token = _parseModifiers(token);
 
     if (parameterKind != FormalParameterKind.optionalNamed) {
       reportExtraneousModifier(requiredToken);
@@ -133,8 +198,8 @@
 
   /// Parse modifiers after the `factory` token.
   Token parseModifiersAfterFactory(Token token) {
-    afterFactory = true;
-    token = parseModifiers(token);
+    _afterFactory = true;
+    token = _parseModifiers(token);
     if (abstractToken != null) {
       parser.reportRecoverableError(
           abstractToken!, codes.messageAbstractClassMember);
@@ -145,8 +210,8 @@
   }
 
   /// Parse modifiers for top level functions and fields.
-  Token parseTopLevelModifiers(Token token) {
-    token = parseModifiers(token);
+  Token parseTopLevelMemberModifiers(Token token) {
+    token = _parseModifiers(token);
     reportExtraneousModifier(abstractToken);
     reportExtraneousModifier(covariantToken);
     reportExtraneousModifier(requiredToken);
@@ -156,7 +221,7 @@
 
   /// Parse modifiers for variable declarations.
   Token parseVariableDeclarationModifiers(Token token) {
-    token = parseModifiers(token);
+    token = _parseModifiers(token);
     reportExtraneousModifier(abstractToken);
     reportExtraneousModifier(covariantToken);
     reportExtraneousModifier(externalToken);
@@ -176,34 +241,36 @@
   /// `static` or `covariant`. The first non-null parameter of
   /// [staticOrCovariant], [staticToken], or [covariantToken] will be used,
   /// in that order, and the others ignored.
-  Token parseModifiers(Token token) {
+  Token _parseModifiers(Token token) {
     // Process invalid and out-of-order modifiers
     Token next = token.next!;
     while (true) {
       final String? value = next.stringValue;
       if (isModifier(next)) {
         if (identical('abstract', value)) {
-          token = parseAbstract(token);
+          token = _parseAbstract(token);
+        } else if (identical('augment', value)) {
+          token = _parseAugment(token);
         } else if (identical('const', value)) {
-          token = parseConst(token);
+          token = _parseConst(token);
         } else if (identical('covariant', value)) {
-          token = parseCovariant(token);
+          token = _parseCovariant(token);
         } else if (identical('external', value)) {
-          token = parseExternal(token);
+          token = _parseExternal(token);
         } else if (identical('final', value)) {
-          token = parseFinal(token);
+          token = _parseFinal(token);
         } else if (identical('late', value)) {
-          token = parseLate(token);
+          token = _parseLate(token);
         } else if (identical('required', value)) {
-          token = parseRequired(token);
+          token = _parseRequired(token);
         } else if (identical('static', value)) {
-          token = parseStatic(token);
+          token = _parseStatic(token);
         } else if (identical('var', value)) {
-          token = parseVar(token);
+          token = _parseVar(token);
         } else {
           throw 'Internal Error: Unhandled modifier: $value';
         }
-      } else if (afterFactory && identical('factory', value)) {
+      } else if (_afterFactory && identical('factory', value)) {
         parser.reportRecoverableErrorWithToken(
             next, codes.templateDuplicatedModifier);
         token = next;
@@ -215,7 +282,7 @@
     return token;
   }
 
-  Token parseAbstract(Token token) {
+  Token _parseAbstract(Token token) {
     Token next = token.next!;
     assert(optional('abstract', next));
     if (abstractToken == null) {
@@ -235,13 +302,45 @@
     return next;
   }
 
-  Token parseConst(Token token) {
+  Token _parseAugment(Token token) {
+    Token next = token.next!;
+    assert(optional('augment', next));
+    if (augmentToken == null) {
+      augmentToken = next;
+
+      if (varFinalOrConst != null) {
+        reportModifierOutOfOrder(next, varFinalOrConst!.lexeme);
+      } else if (abstractToken != null) {
+        reportModifierOutOfOrder(next, abstractToken!.lexeme);
+      } else if (constToken != null) {
+        reportModifierOutOfOrder(next, constToken!.lexeme);
+      } else if (covariantToken != null) {
+        reportModifierOutOfOrder(next, covariantToken!.lexeme);
+      } else if (finalToken != null) {
+        reportModifierOutOfOrder(next, finalToken!.lexeme);
+      } else if (lateToken != null) {
+        reportModifierOutOfOrder(next, lateToken!.lexeme);
+      } else if (staticToken != null) {
+        reportModifierOutOfOrder(next, staticToken!.lexeme);
+      } else if (externalToken != null) {
+        reportConflictingModifiers(next, externalToken!);
+      }
+      return next;
+    }
+
+    // Recovery
+    parser.reportRecoverableErrorWithToken(
+        next, codes.templateDuplicatedModifier);
+    return next;
+  }
+
+  Token _parseConst(Token token) {
     Token next = token.next!;
     assert(optional('const', next));
     if (varFinalOrConst == null && covariantToken == null) {
       constToken = next;
 
-      if (afterFactory) {
+      if (_afterFactory) {
         reportModifierOutOfOrder(next, 'factory');
       } else if (lateToken != null) {
         reportConflictingModifiers(next, lateToken!);
@@ -265,13 +364,13 @@
     return next;
   }
 
-  Token parseCovariant(Token token) {
+  Token _parseCovariant(Token token) {
     Token next = token.next!;
     assert(optional('covariant', next));
     if (constToken == null &&
         covariantToken == null &&
         staticToken == null &&
-        !afterFactory) {
+        !_afterFactory) {
       covariantToken = next;
 
       if (varToken != null) {
@@ -288,7 +387,7 @@
     if (covariantToken != null) {
       parser.reportRecoverableErrorWithToken(
           next, codes.templateDuplicatedModifier);
-    } else if (afterFactory) {
+    } else if (_afterFactory) {
       reportExtraneousModifier(next);
     } else if (constToken != null) {
       reportConflictingModifiers(next, constToken!);
@@ -300,13 +399,13 @@
     return next;
   }
 
-  Token parseExternal(Token token) {
+  Token _parseExternal(Token token) {
     Token next = token.next!;
     assert(optional('external', next));
     if (externalToken == null) {
       externalToken = next;
 
-      if (afterFactory) {
+      if (_afterFactory) {
         reportModifierOutOfOrder(next, 'factory');
       } else if (constToken != null) {
         reportModifierOutOfOrder(next, constToken!.lexeme);
@@ -318,6 +417,8 @@
         reportModifierOutOfOrder(next, varFinalOrConst!.lexeme);
       } else if (covariantToken != null) {
         reportModifierOutOfOrder(next, covariantToken!.lexeme);
+      } else if (augmentToken != null) {
+        reportConflictingModifiers(next, augmentToken!);
       }
       return next;
     }
@@ -328,10 +429,10 @@
     return next;
   }
 
-  Token parseFinal(Token token) {
+  Token _parseFinal(Token token) {
     Token next = token.next!;
     assert(optional('final', next));
-    if (varFinalOrConst == null && !afterFactory) {
+    if (varFinalOrConst == null && !_afterFactory) {
       finalToken = next;
       return next;
     }
@@ -340,7 +441,7 @@
     if (finalToken != null) {
       parser.reportRecoverableErrorWithToken(
           next, codes.templateDuplicatedModifier);
-    } else if (afterFactory) {
+    } else if (_afterFactory) {
       reportExtraneousModifier(next);
     } else if (constToken != null) {
       parser.reportRecoverableError(next, codes.messageConstAndFinal);
@@ -354,7 +455,7 @@
     return next;
   }
 
-  Token parseLate(Token token) {
+  Token _parseLate(Token token) {
     Token next = token.next!;
     assert(optional('late', next));
     if (lateToken == null) {
@@ -376,7 +477,7 @@
     return next;
   }
 
-  Token parseRequired(Token token) {
+  Token _parseRequired(Token token) {
     Token next = token.next!;
     assert(optional('required', next));
     if (requiredToken == null) {
@@ -400,10 +501,10 @@
     return next;
   }
 
-  Token parseStatic(Token token) {
+  Token _parseStatic(Token token) {
     Token next = token.next!;
     assert(optional('static', next));
-    if (covariantToken == null && staticToken == null && !afterFactory) {
+    if (covariantToken == null && staticToken == null && !_afterFactory) {
       staticToken = next;
 
       if (constToken != null) {
@@ -424,7 +525,7 @@
     } else if (staticToken != null) {
       parser.reportRecoverableErrorWithToken(
           next, codes.templateDuplicatedModifier);
-    } else if (afterFactory) {
+    } else if (_afterFactory) {
       reportExtraneousModifier(next);
     } else {
       throw 'Internal Error: Unhandled recovery: $next';
@@ -432,10 +533,10 @@
     return next;
   }
 
-  Token parseVar(Token token) {
+  Token _parseVar(Token token) {
     Token next = token.next!;
     assert(optional('var', next));
-    if (varFinalOrConst == null && !afterFactory) {
+    if (varFinalOrConst == null && !_afterFactory) {
       varToken = next;
       return next;
     }
@@ -444,7 +545,7 @@
     if (varToken != null) {
       parser.reportRecoverableErrorWithToken(
           next, codes.templateDuplicatedModifier);
-    } else if (afterFactory) {
+    } else if (_afterFactory) {
       reportExtraneousModifier(next);
     } else if (constToken != null) {
       reportConflictingModifiers(next, constToken!);
@@ -470,6 +571,30 @@
     }
   }
 
+  // Report an error for the given modifier preceding a top level keyword
+  // such as `import` or `class`.
+  void reportTopLevelModifierError(Token? modifier, Token afterModifiers) {
+    if (modifier != null) {
+      if (optional('const', modifier) && optional('class', afterModifiers)) {
+        parser.reportRecoverableError(modifier, codes.messageConstClass);
+      } else if (optional('external', modifier)) {
+        if (optional('class', afterModifiers)) {
+          parser.reportRecoverableError(modifier, codes.messageExternalClass);
+        } else if (optional('enum', afterModifiers)) {
+          parser.reportRecoverableError(modifier, codes.messageExternalEnum);
+        } else if (optional('typedef', afterModifiers)) {
+          parser.reportRecoverableError(modifier, codes.messageExternalTypedef);
+        } else {
+          parser.reportRecoverableErrorWithToken(
+              modifier, codes.templateExtraneousModifier);
+        }
+      } else {
+        parser.reportRecoverableErrorWithToken(
+            modifier, codes.templateExtraneousModifier);
+      }
+    }
+  }
+
   void reportExtraneousModifierInExtension(Token? modifier) {
     if (modifier != null) {
       parser.reportRecoverableErrorWithToken(
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 a441a40..b8da52c 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -76,6 +76,9 @@
         looksLikeExpressionStart,
         okNextValueInFormalParameter;
 
+import 'identifier_context_impl.dart'
+    show looksLikeStartOfNextTopLevelDeclaration;
+
 import 'listener.dart' show Listener;
 
 import 'literal_entry_info.dart'
@@ -89,7 +92,7 @@
 
 import 'member_kind.dart' show MemberKind;
 
-import 'modifier_context.dart' show ModifierRecoveryContext, isModifier;
+import 'modifier_context.dart' show ModifierContext, isModifier;
 
 import 'recovery_listeners.dart'
     show
@@ -549,55 +552,6 @@
     return parseInvalidTopLevelDeclaration(token);
   }
 
-  /// Parse the modifiers before the `class` keyword.
-  /// Return the first `abstract` modifier or `null` if not found.
-  Token? parseClassDeclarationModifiers(Token start, Token keyword) {
-    Token modifier = start.next!;
-    while (modifier != keyword) {
-      if (optional('abstract', modifier)) {
-        parseTopLevelKeywordModifiers(modifier, keyword);
-        return modifier;
-      } else {
-        // Recovery
-        reportTopLevelModifierError(modifier, keyword);
-      }
-      modifier = modifier.next!;
-    }
-    return null;
-  }
-
-  /// Report errors on any modifiers before the specified keyword.
-  void parseTopLevelKeywordModifiers(Token start, Token keyword) {
-    Token modifier = start.next!;
-    while (modifier != keyword) {
-      // Recovery
-      reportTopLevelModifierError(modifier, keyword);
-      modifier = modifier.next!;
-    }
-  }
-
-  // Report an error for the given modifier preceding a top level keyword
-  // such as `import` or `class`.
-  void reportTopLevelModifierError(Token modifier, Token afterModifiers) {
-    if (optional('const', modifier) && optional('class', afterModifiers)) {
-      reportRecoverableError(modifier, codes.messageConstClass);
-    } else if (optional('external', modifier)) {
-      if (optional('class', afterModifiers)) {
-        reportRecoverableError(modifier, codes.messageExternalClass);
-      } else if (optional('enum', afterModifiers)) {
-        reportRecoverableError(modifier, codes.messageExternalEnum);
-      } else if (optional('typedef', afterModifiers)) {
-        reportRecoverableError(modifier, codes.messageExternalTypedef);
-      } else {
-        reportRecoverableErrorWithToken(
-            modifier, codes.templateExtraneousModifier);
-      }
-    } else {
-      reportRecoverableErrorWithToken(
-          modifier, codes.templateExtraneousModifier);
-    }
-  }
-
   /// Parse any top-level declaration that begins with a keyword.
   /// [start] is the token before any modifiers preceding [keyword].
   Token parseTopLevelKeywordDeclaration(Token start, Token keyword,
@@ -606,13 +560,16 @@
     final String? value = keyword.stringValue;
     if (identical(value, 'class')) {
       directiveState?.checkDeclaration();
-      Token? abstractToken =
-          parseClassDeclarationModifiers(start, macroToken ?? keyword);
+      ModifierContext context = new ModifierContext(this);
+      context.parseClassModifiers(start, keyword);
+      Token? abstractToken = context.abstractToken;
+      Token? augmentToken = context.augmentToken;
       return parseClassOrNamedMixinApplication(
-          abstractToken, macroToken, keyword);
+          abstractToken, macroToken, augmentToken, keyword);
     } else if (identical(value, 'enum')) {
       directiveState?.checkDeclaration();
-      parseTopLevelKeywordModifiers(start, keyword);
+      ModifierContext context = new ModifierContext(this);
+      context.parseEnumModifiers(start, keyword);
       return parseEnum(keyword);
     } else {
       // The remaining top level keywords are built-in keywords
@@ -636,25 +593,32 @@
         directiveState?.checkDeclaration();
         return parseTopLevelMemberImpl(start);
       } else {
-        parseTopLevelKeywordModifiers(start, keyword);
+        ModifierContext context = new ModifierContext(this);
         if (identical(value, 'import')) {
+          context.parseTopLevelKeywordModifiers(start, keyword);
           directiveState?.checkImport(this, keyword);
           return parseImport(keyword);
         } else if (identical(value, 'export')) {
+          context.parseTopLevelKeywordModifiers(start, keyword);
           directiveState?.checkExport(this, keyword);
           return parseExport(keyword);
         } else if (identical(value, 'typedef')) {
+          context.parseTopLevelKeywordModifiers(start, keyword);
           directiveState?.checkDeclaration();
           return parseTypedef(keyword);
         } else if (identical(value, 'mixin')) {
+          context.parseMixinModifiers(start, keyword);
           directiveState?.checkDeclaration();
-          return parseMixin(keyword);
+          return parseMixin(context.augmentToken, keyword);
         } else if (identical(value, 'extension')) {
+          context.parseTopLevelKeywordModifiers(start, keyword);
           directiveState?.checkDeclaration();
           return parseExtension(keyword);
         } else if (identical(value, 'part')) {
+          context.parseTopLevelKeywordModifiers(start, keyword);
           return parsePartOrPartOf(keyword, directiveState);
         } else if (identical(value, 'library')) {
+          context.parseTopLevelKeywordModifiers(start, keyword);
           directiveState?.checkLibrary(this, keyword);
           return parseLibraryName(keyword);
         }
@@ -715,17 +679,22 @@
     assert(optional('import', importKeyword));
     listener.beginUncategorizedTopLevelDeclaration(importKeyword);
     listener.beginImport(importKeyword);
-    Token token = ensureLiteralString(importKeyword);
+    Token start = importKeyword;
+    Token? augmentToken;
+    if (start.next!.isIdentifier && start.next!.lexeme == 'augment') {
+      start = augmentToken = start.next!;
+    }
+    Token token = ensureLiteralString(start);
     Token uri = token;
     token = parseConditionalUriStar(token);
     token = parseImportPrefixOpt(token);
     token = parseCombinatorStar(token).next!;
     if (optional(';', token)) {
-      listener.endImport(importKeyword, token);
+      listener.endImport(importKeyword, augmentToken, token);
       return token;
     } else {
       // Recovery
-      listener.endImport(importKeyword, /* semicolon = */ null);
+      listener.endImport(importKeyword, augmentToken, /* semicolon = */ null);
       return parseImportRecovery(uri);
     }
   }
@@ -1585,7 +1554,7 @@
 
           if (isModifier(next)) {
             // Recovery
-            ModifierRecoveryContext context = new ModifierRecoveryContext(this)
+            ModifierContext context = new ModifierContext(this)
               ..covariantToken = covariantToken
               ..requiredToken = requiredToken
               ..varFinalOrConst = varFinalOrConst;
@@ -2044,11 +2013,140 @@
     token = computeTypeParamOrArg(
             token, /* inDeclaration = */ true, /* allowsVariance = */ true)
         .parseVariables(token, this);
+    List<String> lookForNext = const ['{', 'with', 'implements'];
+    if (!isOneOf(token.next!, lookForNext)) {
+      // Recovery: Possible unexpected tokens before any clauses.
+      Token? skipToken = recoverySmallLookAheadSkipTokens(token, lookForNext);
+      if (skipToken != null) {
+        token = skipToken;
+      }
+    }
+
+    Token beforeWith = token;
     token = parseEnumWithClauseOpt(token);
+
+    while (!isOneOf(token.next!, const ['{', 'implements'])) {
+      // Recovery: Skip unexpected tokens and more with clauses.
+      // Note that if we find a "with" we've seen one already (otherwise the
+      // parseEnumWithClauseOpt call above would have found this 'with').
+      Token? skipToken = recoveryEnumWith(token,
+              codes.templateMultipleClauses.withArguments("enum", "with")) ??
+          recoverySmallLookAheadSkipTokens(token, lookForNext);
+
+      if (skipToken != null) {
+        // Skipped tokens.
+        token = skipToken;
+      } else {
+        break;
+      }
+    }
+
     token = parseClassOrMixinOrEnumImplementsOpt(token);
+
+    bool? hasWithClauses;
+    while (!optional('{', token.next!)) {
+      if (hasWithClauses == null) {
+        hasWithClauses = optional('with', beforeWith.next!);
+      }
+
+      // Recovery: Skip unexpected tokens and more with/implements clauses.
+      Token? skipToken = recoveryEnumWith(
+          token,
+          hasWithClauses
+              ? codes.templateMultipleClauses.withArguments("enum", "with")
+              : codes.templateOutOfOrderClauses
+                  .withArguments("with", "implements"));
+      if (skipToken != null) {
+        hasWithClauses = true;
+      }
+      if (skipToken == null) {
+        // Note that if we find a "implements" we've seen one already (otherwise
+        // the parseClassOrMixinOrEnumImplementsOpt call above would have found
+        // this 'implements').
+        skipToken = recoveryEnumImplements(token,
+            codes.templateMultipleClauses.withArguments("enum", "implements"));
+      }
+      if (skipToken == null) {
+        skipToken = recoverySmallLookAheadSkipTokens(token, lookForNext);
+      }
+
+      if (skipToken != null) {
+        // Skipped tokens.
+        token = skipToken;
+      } else {
+        break;
+      }
+    }
+
     return token;
   }
 
+  Token? recoveryEnumWith(Token token, codes.Message message) {
+    if (optional('with', token.next!)) {
+      reportRecoverableError(token.next!, message);
+      Listener originalListener = listener;
+      listener = new NullListener();
+      token = parseEnumWithClauseOpt(token);
+      listener = originalListener;
+      return token;
+    }
+    return null;
+  }
+
+  Token? recoveryEnumImplements(Token token, codes.Message message) {
+    if (optional('implements', token.next!)) {
+      reportRecoverableError(token.next!, message);
+      Listener originalListener = listener;
+      listener = new NullListener();
+      token = parseClassOrMixinOrEnumImplementsOpt(token);
+      listener = originalListener;
+      return token;
+    }
+    return null;
+  }
+
+  /// Allow a small lookahead (currently up to 3 tokens) trying to find any in
+  /// [lookFor].
+  ///
+  /// If any wanted token is found an error is issued about unexpected tokens,
+  /// and the last skipped token is returned.
+  /// Otherwise null is returned.
+  Token? recoverySmallLookAheadSkipTokens(
+      final Token token, Iterable<String> lookFor) {
+    // Recovery: Allow a small lookahead for '{'. E.g. the user might be in
+    // the middle of writing 'with' or 'implements'.
+    Token skipToken = token.next!;
+    bool foundWanted = false;
+
+    if (looksLikeStartOfNextTopLevelDeclaration(skipToken)) return null;
+
+    int skipped = 0;
+    while (skipped < 3) {
+      skipped++;
+      if (isOneOf(skipToken.next!, lookFor)) {
+        foundWanted = true;
+        break;
+      }
+
+      skipToken = skipToken.next!;
+      if (looksLikeStartOfNextTopLevelDeclaration(skipToken)) return null;
+    }
+
+    if (foundWanted) {
+      // Give error and skip the tokens.
+      if (skipped == 1) {
+        reportRecoverableError(
+            skipToken, codes.templateUnexpectedToken.withArguments(skipToken));
+      } else {
+        reportRecoverableErrorWithEnd(
+            token.next!, skipToken, codes.messageUnexpectedTokens);
+      }
+      return skipToken;
+    }
+
+    return null;
+  }
+
   Token parseEnumElement(Token token) {
     Token beginToken = token;
     token = parseMetadataStar(token);
@@ -2065,8 +2163,8 @@
     return token;
   }
 
-  Token parseClassOrNamedMixinApplication(
-      Token? abstractToken, Token? macroToken, Token classKeyword) {
+  Token parseClassOrNamedMixinApplication(Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token classKeyword) {
     assert(optional('class', classKeyword));
     Token begin = abstractToken ?? classKeyword;
     listener.beginClassOrMixinOrNamedMixinApplicationPrelude(begin);
@@ -2077,10 +2175,11 @@
         .parseVariables(name, this);
     if (optional('=', token.next!)) {
       listener.beginNamedMixinApplication(
-          begin, abstractToken, macroToken, name);
+          begin, abstractToken, macroToken, augmentToken, name);
       return parseNamedMixinApplication(token, begin, classKeyword);
     } else {
-      listener.beginClassDeclaration(begin, abstractToken, macroToken, name);
+      listener.beginClassDeclaration(
+          begin, abstractToken, macroToken, augmentToken, name);
       return parseClass(token, begin, classKeyword, name.lexeme);
     }
   }
@@ -2294,11 +2393,11 @@
   ///
   /// ```
   /// mixinDeclaration:
-  ///   metadata? 'mixin' [SimpleIdentifier] [TypeParameterList]?
+  ///   metadata? 'augment'? 'mixin' [SimpleIdentifier] [TypeParameterList]?
   ///        [OnClause]? [ImplementsClause]? '{' [ClassMember]* '}'
   /// ;
   /// ```
-  Token parseMixin(Token mixinKeyword) {
+  Token parseMixin(Token? augmentToken, Token mixinKeyword) {
     assert(optional('mixin', mixinKeyword));
     listener.beginClassOrMixinOrNamedMixinApplicationPrelude(mixinKeyword);
     Token name = ensureIdentifier(
@@ -2306,7 +2405,7 @@
     Token headerStart = computeTypeParamOrArg(
             name, /* inDeclaration = */ true, /* allowsVariance = */ true)
         .parseVariables(name, this);
-    listener.beginMixinDeclaration(mixinKeyword, name);
+    listener.beginMixinDeclaration(augmentToken, mixinKeyword, name);
     Token token = parseMixinHeaderOpt(headerStart, mixinKeyword);
     if (!optional('{', token.next!)) {
       // Recovery
@@ -2745,6 +2844,7 @@
     }
 
     Token? externalToken;
+    Token? augmentToken;
     Token? lateToken;
     Token? varFinalOrConst;
 
@@ -2752,6 +2852,9 @@
       if (optional('external', next)) {
         externalToken = token = next;
         next = token.next!;
+      } else if (optional('augment', next)) {
+        augmentToken = token = next;
+        next = token.next!;
       }
       if (isModifier(next)) {
         if (optional('final', next)) {
@@ -2780,14 +2883,16 @@
             // If another `var`, `final`, or `const` then fall through
             // to parse that as part of the next top level declaration.
           } else {
-            ModifierRecoveryContext context = new ModifierRecoveryContext(this)
+            ModifierContext context = new ModifierContext(this)
               ..externalToken = externalToken
+              ..augmentToken = augmentToken
               ..lateToken = lateToken
               ..varFinalOrConst = varFinalOrConst;
 
-            token = context.parseTopLevelModifiers(token);
+            token = context.parseTopLevelMemberModifiers(token);
             next = token.next!;
 
+            augmentToken = context.augmentToken;
             externalToken = context.externalToken;
             lateToken = context.lateToken;
             varFinalOrConst = context.varFinalOrConst;
@@ -2912,8 +3017,8 @@
         reportRecoverableErrorWithToken(
             lateToken, codes.templateExtraneousModifier);
       }
-      return parseTopLevelMethod(beforeStart, externalToken, beforeType,
-          typeInfo, getOrSet, token.next!, nameIsRecovered);
+      return parseTopLevelMethod(beforeStart, augmentToken, externalToken,
+          beforeType, typeInfo, getOrSet, token.next!, nameIsRecovered);
     }
 
     if (getOrSet != null) {
@@ -2923,6 +3028,7 @@
     return parseFields(
         beforeStart,
         /* abstractToken = */ null,
+        augmentToken,
         externalToken,
         /* staticToken = */ null,
         /* covariantToken = */ null,
@@ -2939,6 +3045,7 @@
   Token parseFields(
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -2950,8 +3057,8 @@
       DeclarationKind kind,
       String? enclosingDeclarationName,
       bool nameIsRecovered) {
-    listener.beginFields(kind, abstractToken, externalToken, staticToken,
-        covariantToken, lateToken, varFinalOrConst, beforeStart);
+    listener.beginFields(kind, abstractToken, augmentToken, externalToken,
+        staticToken, covariantToken, lateToken, varFinalOrConst, beforeStart);
 
     // Covariant affects only the setter and final fields do not have a setter,
     // unless it's a late field (dartbug.com/40805).
@@ -2998,12 +3105,28 @@
     }
 
     int fieldCount = 1;
-    token = parseFieldInitializerOpt(name, name, lateToken, abstractToken,
-        externalToken, varFinalOrConst, kind, enclosingDeclarationName);
+    token = parseFieldInitializerOpt(
+        name,
+        name,
+        lateToken,
+        abstractToken,
+        augmentToken,
+        externalToken,
+        varFinalOrConst,
+        kind,
+        enclosingDeclarationName);
     while (optional(',', token.next!)) {
       name = ensureIdentifier(token.next!, context);
-      token = parseFieldInitializerOpt(name, name, lateToken, abstractToken,
-          externalToken, varFinalOrConst, kind, enclosingDeclarationName);
+      token = parseFieldInitializerOpt(
+          name,
+          name,
+          lateToken,
+          abstractToken,
+          augmentToken,
+          externalToken,
+          varFinalOrConst,
+          kind,
+          enclosingDeclarationName);
       ++fieldCount;
     }
     Token semicolon = token.next!;
@@ -3036,6 +3159,7 @@
       case DeclarationKind.Class:
         listener.endClassFields(
             abstractToken,
+            augmentToken,
             externalToken,
             staticToken,
             covariantToken,
@@ -3048,6 +3172,7 @@
       case DeclarationKind.Mixin:
         listener.endMixinFields(
             abstractToken,
+            augmentToken,
             externalToken,
             staticToken,
             covariantToken,
@@ -3068,6 +3193,7 @@
         }
         listener.endExtensionFields(
             abstractToken,
+            augmentToken,
             externalToken,
             staticToken,
             covariantToken,
@@ -3080,6 +3206,7 @@
       case DeclarationKind.Enum:
         listener.endEnumFields(
             abstractToken,
+            augmentToken,
             externalToken,
             staticToken,
             covariantToken,
@@ -3095,13 +3222,14 @@
 
   Token parseTopLevelMethod(
       Token beforeStart,
+      Token? augmentToken,
       Token? externalToken,
       Token beforeType,
       TypeInfo typeInfo,
       Token? getOrSet,
       Token name,
       bool nameIsRecovered) {
-    listener.beginTopLevelMethod(beforeStart, externalToken);
+    listener.beginTopLevelMethod(beforeStart, augmentToken, externalToken);
 
     Token token = typeInfo.parseType(beforeType, this);
     assert(token.next == (getOrSet ?? name) || token.next!.isEof);
@@ -3178,6 +3306,7 @@
       Token name,
       Token? lateToken,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? varFinalOrConst,
       DeclarationKind kind,
@@ -3262,26 +3391,22 @@
           if (!optional('(', next)) {
             break;
           }
-          // Looks like assert expression ... fall through to insert comma
-        } else if (!next.isIdentifier && !optional('this', next)) {
-          // An identifier that wasn't an initializer. Break.
-          break;
-        } else {
-          if (optional('this', next)) {
-            next = next.next!;
-            if (!optional('.', next)) {
-              break;
-            }
-            next = next.next!;
-            if (!next.isIdentifier && !optional('assert', next)) {
-              break;
-            }
+          // Looks like assert expression ... fall through to insert comma.
+        } else if (optional('this', next) || optional('super', next)) {
+          next = next.next!;
+          if (!optional('(', next) && !optional('.', next)) {
+            break;
           }
+          // `this` or `super` followed by either `.` or `(`.
+          // Fall through to insert comma.
+        } else if (next.isIdentifier) {
           next = next.next!;
           if (!optional('=', next)) {
             break;
           }
-          // Looks like field assignment... fall through to insert comma
+          // Looks like field assignment... fall through to insert comma.
+        } else {
+          break;
         }
         // TODO(danrubel): Consider enhancing this to indicate that we are
         // expecting one of `,` or `;` or `{`
@@ -3737,6 +3862,7 @@
 
     Token? covariantToken;
     Token? abstractToken;
+    Token? augmentToken;
     Token? externalToken;
     Token? lateToken;
     Token? staticToken;
@@ -3747,6 +3873,9 @@
       if (optional('external', next)) {
         externalToken = token = next;
         next = token.next!;
+      } else if (optional('augment', next)) {
+        augmentToken = token = next;
+        next = token.next!;
       } else if (optional('abstract', next)) {
         abstractToken = token = next;
         next = token.next!;
@@ -3778,8 +3907,9 @@
             }
           }
           if (isModifier(next)) {
-            ModifierRecoveryContext context = new ModifierRecoveryContext(this)
+            ModifierContext context = new ModifierContext(this)
               ..covariantToken = covariantToken
+              ..augmentToken = augmentToken
               ..externalToken = externalToken
               ..lateToken = lateToken
               ..staticToken = staticToken
@@ -3859,6 +3989,7 @@
           token = parseMethod(
               beforeStart,
               abstractToken,
+              augmentToken,
               externalToken,
               staticToken,
               covariantToken,
@@ -3882,6 +4013,7 @@
           return parseInvalidOperatorDeclaration(
               beforeStart,
               abstractToken,
+              augmentToken,
               externalToken,
               staticToken,
               covariantToken,
@@ -3895,6 +4027,7 @@
           token = parseMethod(
               beforeStart,
               abstractToken,
+              augmentToken,
               externalToken,
               staticToken,
               covariantToken,
@@ -3924,6 +4057,7 @@
             token,
             beforeStart,
             abstractToken,
+            augmentToken,
             externalToken,
             staticToken,
             covariantToken,
@@ -3946,6 +4080,7 @@
           return parseInvalidOperatorDeclaration(
               beforeStart,
               abstractToken,
+              augmentToken,
               externalToken,
               staticToken,
               covariantToken,
@@ -3981,6 +4116,7 @@
       token = parseMethod(
           beforeStart,
           abstractToken,
+          augmentToken,
           externalToken,
           staticToken,
           covariantToken,
@@ -4001,6 +4137,7 @@
       token = parseFields(
           beforeStart,
           abstractToken,
+          augmentToken,
           externalToken,
           staticToken,
           covariantToken,
@@ -4020,6 +4157,7 @@
   Token parseMethod(
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -4093,8 +4231,8 @@
 
     // TODO(danrubel): Consider parsing the name before calling beginMethod
     // rather than passing the name token into beginMethod.
-    listener.beginMethod(kind, externalToken, staticToken, covariantToken,
-        varFinalOrConst, getOrSet, name);
+    listener.beginMethod(kind, augmentToken, externalToken, staticToken,
+        covariantToken, varFinalOrConst, getOrSet, name);
 
     Token token = typeInfo.parseType(beforeType, this);
     assert(token.next == (getOrSet ?? name) ||
@@ -4294,7 +4432,7 @@
 
     if (!isValidTypeReference(token.next!)) {
       // Recovery
-      ModifierRecoveryContext context = new ModifierRecoveryContext(this)
+      ModifierContext context = new ModifierContext(this)
         ..externalToken = externalToken
         ..staticOrCovariant = staticOrCovariant
         ..varFinalOrConst = varFinalOrConst;
@@ -6786,7 +6924,7 @@
 
       if (isModifier(next)) {
         // Recovery
-        ModifierRecoveryContext context = new ModifierRecoveryContext(this)
+        ModifierContext context = new ModifierContext(this)
           ..lateToken = lateToken
           ..varFinalOrConst = varFinalOrConst;
 
@@ -6827,7 +6965,7 @@
       beforeType = start = beforeType.next!;
 
       // The below doesn't parse modifiers, so we need to do it here.
-      ModifierRecoveryContext context = new ModifierRecoveryContext(this);
+      ModifierContext context = new ModifierContext(this);
       beforeType =
           start = context.parseVariableDeclarationModifiers(beforeType);
       varFinalOrConst = context.varFinalOrConst;
@@ -6874,7 +7012,7 @@
         typeInfo.couldBeExpression) {
       assert(optional('?', token));
       assert(next.isKeywordOrIdentifier);
-      if (!next.isIdentifier) {
+      if (!looksLikeName(next)) {
         reportRecoverableError(
             next, codes.templateExpectedIdentifier.withArguments(next));
         next = rewriter.insertSyntheticIdentifier(next);
@@ -7488,19 +7626,33 @@
 
     String? value = token.stringValue;
     while (identical(value, 'catch') || identical(value, 'on')) {
-      listener.beginCatchClause(token);
+      bool didBeginCatchClause = false;
       Token? onKeyword = null;
       if (identical(value, 'on')) {
         // 'on' type catchPart?
         onKeyword = token;
-        lastConsumed = computeType(token, /* required = */ true)
-            .ensureTypeNotVoid(token, this);
+        TypeInfo typeInfo = computeType(token, /* required = */ true);
+        if (catchCount > 0 && (typeInfo == noType || typeInfo.recovered)) {
+          // Not a valid on-clause and we have enough catch counts to be a valid
+          // try block already.
+          // This could for instance be code like `on([...])` or `on = 42` after
+          // some actual catch/on as that could be a valid method call, local
+          // function, assignment etc.
+          break;
+        }
+        listener.beginCatchClause(token);
+        didBeginCatchClause = true;
+        lastConsumed = typeInfo.ensureTypeNotVoid(token, this);
         token = lastConsumed.next!;
         value = token.stringValue;
       }
       Token? catchKeyword = null;
       Token? comma = null;
       if (identical(value, 'catch')) {
+        if (!didBeginCatchClause) {
+          listener.beginCatchClause(token);
+          didBeginCatchClause = true;
+        }
         catchKeyword = token;
 
         Token openParens = catchKeyword.next!;
@@ -7895,6 +8047,7 @@
   Token parseInvalidOperatorDeclaration(
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -7943,6 +8096,7 @@
     Token token = parseMethod(
         beforeStart,
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -7966,6 +8120,7 @@
       Token token,
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -7989,6 +8144,7 @@
       return parseInvalidOperatorDeclaration(
           beforeStart,
           abstractToken,
+          augmentToken,
           externalToken,
           staticToken,
           covariantToken,
@@ -8006,6 +8162,7 @@
       token = parseMethod(
           beforeStart,
           abstractToken,
+          augmentToken,
           externalToken,
           staticToken,
           covariantToken,
@@ -8030,6 +8187,7 @@
       token = parseFields(
           beforeStart,
           abstractToken,
+          augmentToken,
           externalToken,
           staticToken,
           covariantToken,
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 fbc3ab3..4f5ad4e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
@@ -42,6 +42,7 @@
   ContinueTarget,
   Deferred,
   DocumentationComment,
+  EnumConstantInfo,
   Expression,
   ExtendsClause,
   FieldInitializer,
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
index 9e76440..90c69c8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
@@ -252,17 +252,6 @@
   assert(typeParamOrArg == noTypeParamOrArg);
   next = next.next!;
 
-  // TODO(scheglov) This is a hack to partially fix.
-  // https://github.com/dart-lang/sdk/issues/47951
-  if (optional('?', next) &&
-      optional('super', next.next!) &&
-      optional('.', next.next!.next!)) {
-    return simpleNullableType;
-  }
-  if (optional('super', next) && optional('.', next.next!)) {
-    return simpleType;
-  }
-
   if (optional('.', next)) {
     next = next.next!;
     if (isValidTypeReference(next)) {
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
index 099319f..07d1752 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
@@ -451,6 +451,7 @@
 bool looksLikeName(Token token) {
   return token.kind == IDENTIFIER_TOKEN ||
       optional('this', token) ||
+      optional('super', token) ||
       (token.isIdentifier &&
           // Although `typedef` is a legal identifier,
           // type `typedef` identifier is not legal and in this situation
@@ -794,7 +795,9 @@
         if (optional('?', next)) {
           next = next.next!;
         }
-        if (!(next.isIdentifier || optional('this', next))) {
+        if (!(next.isIdentifier ||
+            optional('this', next) ||
+            optional('super', next))) {
           break; // `Function` used as the name in a function declaration.
         }
       }
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/abstract_scanner.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/abstract_scanner.dart
index 7f70b75..8c6a343 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/abstract_scanner.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/abstract_scanner.dart
@@ -73,6 +73,9 @@
   /// and https://github.com/dart-lang/language/issues/60
   bool _enableTripleShift = false;
 
+  /// If `true`, 'augment' is treated as a built-in identifier.
+  bool _forAugmentationLibrary = false;
+
   /**
    * The string offset for the next token that will be created.
    *
@@ -159,6 +162,7 @@
       _enableExtensionMethods = config.enableExtensionMethods;
       _enableNonNullable = config.enableNonNullable;
       _enableTripleShift = config.enableTripleShift;
+      _forAugmentationLibrary = config.forAugmentationLibrary;
     }
   }
 
@@ -1619,6 +1623,9 @@
         (keyword == Keyword.LATE || keyword == Keyword.REQUIRED)) {
       return tokenizeIdentifier(next, start, allowDollar);
     }
+    if (!_forAugmentationLibrary && keyword == Keyword.AUGMENT) {
+      return tokenizeIdentifier(next, start, allowDollar);
+    }
     if (($A <= next && next <= $Z) ||
         ($0 <= next && next <= $9) ||
         identical(next, $_) ||
@@ -2055,13 +2062,18 @@
   /// and https://github.com/dart-lang/language/issues/60
   final bool enableTripleShift;
 
+  /// If `true`, 'augment' is treated as a built-in identifier.
+  final bool forAugmentationLibrary;
+
   const ScannerConfiguration({
     bool enableExtensionMethods = false,
     bool enableNonNullable = false,
     bool enableTripleShift = false,
+    bool forAugmentationLibrary = false,
   })  : this.enableExtensionMethods = enableExtensionMethods,
         this.enableNonNullable = enableNonNullable,
-        this.enableTripleShift = enableTripleShift;
+        this.enableTripleShift = enableTripleShift,
+        this.forAugmentationLibrary = forAugmentationLibrary;
 }
 
 bool _isIdentifierChar(int next, bool allowDollar) {
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/scanner.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/scanner.dart
index 63fd51c..35a6386 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/scanner.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/scanner.dart
@@ -72,7 +72,7 @@
     bool includeComments: false,
     LanguageVersionChanged? languageVersionChanged}) {
   if (bytes.last != 0) {
-    throw new ArgumentError("[bytes]: the last byte must be null.");
+    throw new ArgumentError("[bytes]: the last byte must be 0.");
   }
   Scanner scanner = new Utf8BytesScanner(bytes,
       configuration: configuration,
diff --git a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
index 0a6ab6c..d4225fb 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/token.dart
@@ -144,6 +144,10 @@
   static const Keyword ASYNC =
       const Keyword("async", "ASYNC", KeywordStyle.pseudo);
 
+  static const Keyword AUGMENT = const Keyword(
+      "augment", "AUGMENT", KeywordStyle.builtIn,
+      isModifier: true);
+
   static const Keyword AWAIT =
       const Keyword("await", "AWAIT", KeywordStyle.pseudo);
 
@@ -345,6 +349,7 @@
     AS,
     ASSERT,
     ASYNC,
+    AUGMENT,
     AWAIT,
     BREAK,
     CASE,
@@ -734,6 +739,9 @@
       : super(type, offset, precedingComment);
 
   @override
+  Token? beforeSynthetic;
+
+  @override
   Token copy() =>
       new SyntheticBeginToken(type, offset, copyComments(precedingComments));
 
@@ -755,6 +763,9 @@
   SyntheticKeywordToken(Keyword keyword, int offset) : super(keyword, offset);
 
   @override
+  Token? beforeSynthetic;
+
+  @override
   int get length => 0;
 
   @override
@@ -1085,7 +1096,8 @@
    * Return the token with the smallest offset, or `null` if all of the
    * tokens are `null`.
    */
-  static Token? lexicallyFirst([Token? t1, Token? t2, Token? t3, Token? t4]) {
+  static Token? lexicallyFirst(
+      [Token? t1, Token? t2, Token? t3, Token? t4, Token? t5]) {
     Token? result = t1;
     if (result == null || t2 != null && t2.offset < result.offset) {
       result = t2;
@@ -1096,6 +1108,9 @@
     if (result == null || t4 != null && t4.offset < result.offset) {
       result = t4;
     }
+    if (result == null || t5 != null && t5.offset < result.offset) {
+      result = t5;
+    }
     return result;
   }
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/testing/id_generation.dart b/pkg/_fe_analyzer_shared/lib/src/testing/id_generation.dart
index 896c670..a1bbadb 100644
--- a/pkg/_fe_analyzer_shared/lib/src/testing/id_generation.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/testing/id_generation.dart
@@ -65,13 +65,13 @@
     Map<Id, Map<String, IdValue>> idValuePerId = idValuePerUri[uri] ?? {};
     Map<Id, Map<String, ActualData<T>>> actualDataPerId =
         actualDataPerUri[uri] ?? {};
-    AnnotatedCode code = annotatedCode[uri]!;
-    assert(
-        // ignore: unnecessary_null_comparison
-        code != null, "No annotated code for ${uri} in ${annotatedCode.keys}");
-    result[uri] = _computeAnnotations(code, expectedMaps.keys, actualMarkers,
+    AnnotatedCode? code = annotatedCode[uri];
+    if (code != null) {
+      // Annotations are not computed from synthesized code.
+      result[uri] = _computeAnnotations(code, expectedMaps.keys, actualMarkers,
         idValuePerId, actualDataPerId, dataInterpreter,
         sortMarkers: false, createDiff: createDiff, forceUpdate: forceUpdate);
+    }
   }
   return result;
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/testing/id_testing.dart b/pkg/_fe_analyzer_shared/lib/src/testing/id_testing.dart
index 68ad3ab..f29fc9f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/testing/id_testing.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/testing/id_testing.dart
@@ -771,7 +771,9 @@
   List<FileSystemEntity> entities = dataDir
       .listSync()
       .where((entity) =>
-          !entity.path.endsWith('~') && !entity.path.endsWith('marker.options'))
+          !entity.path.endsWith('~') &&
+          !entity.path.endsWith('marker.options') &&
+          !entity.path.endsWith('.expect'))
       .toList();
   if (shards > 1) {
     entities.sort((a, b) => getTestName(a).compareTo(getTestName(b)));
@@ -842,9 +844,11 @@
               actualData[marker] = {};
 
           void addActualData(Uri uri, Map<Id, ActualData<T>> actualData) {
-            // ignore: unnecessary_null_comparison
-            assert(uri != null && testData.code.containsKey(uri) ||
-                actualData.isEmpty);
+            assert(
+                // ignore: unnecessary_null_comparison
+                uri != null && testData.code.containsKey(uri) ||
+                    actualData.isEmpty,
+                "Unexpected data ${actualData} for $uri");
             // ignore: unnecessary_null_comparison
             if (uri == null || actualData.isEmpty) {
               // TODO(johnniwinther): Avoid collecting data without
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
index 4e453145..a25f8e8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
@@ -238,7 +238,7 @@
               _reportError(messageIncludePathIsNotAString(targetName, specUri));
             }
             Uri uri = Uri.parse(path);
-            if (uri.scheme != '' && uri.scheme != 'file') {
+            if (uri.hasScheme && !uri.isScheme('file')) {
               return _reportError(messageUnsupportedUriScheme(path, specUri));
             }
             LibrariesSpecification specification =
@@ -269,7 +269,7 @@
                 uriString, libraryName, targetName, specUri));
           }
           Uri uri = Uri.parse(uriString);
-          if (uri.scheme != '' && uri.scheme != 'file') {
+          if (uri.hasScheme && !uri.isScheme('file')) {
             return _reportError(
                 messageUnsupportedUriScheme(uriString, specUri));
           }
diff --git a/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart b/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart
index 2600d6d..39ce9d4 100644
--- a/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/resolve_input_uri.dart
@@ -18,7 +18,7 @@
 
 Uri parseUri(String path) {
   if (path.startsWith("file:")) {
-    if (Uri.base.scheme == "file") {
+    if (Uri.base.isScheme("file")) {
       // The Uri class doesn't handle relative file URIs correctly, the
       // following works around that issue.
       return new Uri(path: Uri.parse("x-$path").path);
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index cfc2267..e4718a0 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 34.0.0
+version: 36.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/macros/api/api_test_data.dart b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.dart
new file mode 100644
index 0000000..5a96c10
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_data.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 'api_test_macro.dart';
+
+main() {}
+
+var field;
+get getter => null;
+set setter(_) => null;
+
+@ClassMacro()
+class Class1 {}
+
+@ClassMacro()
+abstract class Class2 {}
+
+@ClassMacro()
+class Class3 extends Class2 {}
+
+mixin Mixin {}
+
+@ClassMacro()
+class Class4 extends Class1 with Mixin {}
+
+@FunctionMacro()
+void topLevelFunction1(Class1 a, {Class1? b, required Class2? c}) {}
+
+@FunctionMacro()
+external Class2 topLevelFunction2(Class1 a, [Class2? b]);
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
new file mode 100644
index 0000000..c826563
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_expectations.dart
@@ -0,0 +1,220 @@
+// 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/macros/api.dart';
+
+const Map<String, ClassData> expectedClassData = {
+  'Class1': ClassData(superclassOf: 'Object'),
+  'Class2': ClassData(isAbstract: true, superclassOf: 'Object'),
+  'Class3': ClassData(superclassOf: 'Class2', superSuperclassOf: 'Object'),
+  'Class4': ClassData(superclassOf: 'Class1', superSuperclassOf: 'Object'),
+};
+
+const Map<String, FunctionData> expectedFunctionData = {
+  'topLevelFunction1': FunctionData(
+      returnType: NamedTypeData(name: 'void'),
+      positionalParameters: [
+        ParameterData('a',
+            type: NamedTypeData(name: 'Class1'), isRequired: true),
+      ],
+      namedParameters: [
+        ParameterData('b',
+            type: NamedTypeData(name: 'Class1', isNullable: true),
+            isNamed: true,
+            isRequired: false),
+        ParameterData('c',
+            type: NamedTypeData(name: 'Class2', isNullable: true),
+            isNamed: true,
+            isRequired: true),
+      ]),
+  'topLevelFunction2': FunctionData(
+    isExternal: true,
+    returnType: NamedTypeData(name: 'Class2'),
+    positionalParameters: [
+      ParameterData('a', type: NamedTypeData(name: 'Class1'), isRequired: true),
+      ParameterData('b', type: NamedTypeData(name: 'Class2', isNullable: true)),
+    ],
+  ),
+};
+
+expect(expected, actual, property) {
+  if (expected != actual) {
+    throw 'Expected $expected, actual $actual on $property';
+  }
+}
+
+Future<void> throws(Future<void> Function() f, property) async {
+  try {
+    await f();
+  } catch (_) {
+    return;
+  }
+  throw 'Expected throws on $property';
+}
+
+void checkTypeAnnotation(
+    TypeData expected, TypeAnnotation typeAnnotation, String context) {
+  expect(expected.isNullable, typeAnnotation.isNullable, '$context.isNullable');
+  expect(expected is NamedTypeData, typeAnnotation is NamedTypeAnnotation,
+      '$context is NamedTypeAnnotation');
+  if (expected is NamedTypeData && typeAnnotation is NamedTypeAnnotation) {
+    expect(expected.name, typeAnnotation.identifier.name, '$context.name');
+    // TODO(johnniwinther): Test more properties.
+  }
+}
+
+void checkParameterDeclaration(
+    ParameterData expected, ParameterDeclaration declaration, String context) {
+  expect(expected.name, declaration.identifier.name, '$context.identifer.name');
+  expect(expected.isNamed, declaration.isNamed, '$context.isNamed');
+  expect(expected.isRequired, declaration.isRequired, '$context.isRequired');
+  checkTypeAnnotation(expected.type, declaration.type, '$context.type');
+}
+
+Future<void> checkClassDeclaration(ClassDeclaration declaration,
+    {ClassIntrospector? classIntrospector}) async {
+  String name = declaration.identifier.name;
+  ClassData? expected = expectedClassData[name];
+  if (expected != null) {
+    expect(expected.isAbstract, declaration.isAbstract, '$name.isAbstract');
+    expect(expected.isExternal, declaration.isExternal, '$name.isExternal');
+    if (classIntrospector != null) {
+      ClassDeclaration? superclassOf =
+          await classIntrospector.superclassOf(declaration);
+      expect(expected.superclassOf, superclassOf?.identifier.name,
+          '$name.superclassOf');
+      if (superclassOf != null) {
+        ClassDeclaration? superSuperclassOf =
+            await classIntrospector.superclassOf(superclassOf);
+        expect(expected.superSuperclassOf, superSuperclassOf?.identifier.name,
+            '$name.superSuperclassOf');
+      }
+    }
+    // TODO(johnniwinther): Test more properties when there are supported.
+  } else {
+    throw 'Unexpected class declaration "${name}"';
+  }
+}
+
+void checkFunctionDeclaration(FunctionDeclaration actual) {
+  String name = actual.identifier.name;
+  FunctionData? expected = expectedFunctionData[name];
+  if (expected != null) {
+    expect(expected.isAbstract, actual.isAbstract, '$name.isAbstract');
+    expect(expected.isExternal, actual.isExternal, '$name.isExternal');
+    expect(expected.isOperator, actual.isOperator, '$name.isOperator');
+    expect(expected.isGetter, actual.isGetter, '$name.isGetter');
+    expect(expected.isSetter, actual.isSetter, '$name.isSetter');
+    checkTypeAnnotation(
+        expected.returnType, actual.returnType, '$name.returnType');
+    expect(
+        expected.positionalParameters.length,
+        actual.positionalParameters.length,
+        '$name.positionalParameters.length');
+    for (int i = 0; i < expected.positionalParameters.length; i++) {
+      checkParameterDeclaration(
+          expected.positionalParameters[i],
+          actual.positionalParameters.elementAt(i),
+          '$name.positionalParameters[$i]');
+    }
+    expect(expected.namedParameters.length, actual.namedParameters.length,
+        '$name.namedParameters.length');
+    for (int i = 0; i < expected.namedParameters.length; i++) {
+      checkParameterDeclaration(expected.namedParameters[i],
+          actual.namedParameters.elementAt(i), '$name.namedParameters[$i]');
+    }
+    // TODO(johnniwinther): Test more properties.
+  } else {
+    throw 'Unexpected function declaration "${name}"';
+  }
+}
+
+Future<void> checkIdentifierResolver(
+    IdentifierResolver identifierResolver) async {
+  Uri dartCore = Uri.parse('dart:core');
+  Uri macroApiData = Uri.parse('package:macro_api_test/api_test_data.dart');
+
+  Future<void> check(Uri uri, String name, {bool expectThrows: false}) async {
+    if (expectThrows) {
+      await throws(() async {
+        await identifierResolver.resolveIdentifier(uri, name);
+      }, '$name from $uri');
+    } else {
+      Identifier result = await identifierResolver.resolveIdentifier(uri, name);
+      expect(name, result.name, '$name from $uri');
+    }
+  }
+
+  await check(dartCore, 'Object');
+  await check(dartCore, 'String');
+  await check(dartCore, 'override');
+
+  await check(macroApiData, 'Class1');
+  await check(macroApiData, 'getter');
+  await check(macroApiData, 'setter=');
+  await check(macroApiData, 'field');
+
+  await check(macroApiData, 'non-existing', expectThrows: true);
+  await check(macroApiData, 'getter=', expectThrows: true);
+  await check(macroApiData, 'setter', expectThrows: true);
+  await check(macroApiData, 'field=', expectThrows: true);
+}
+
+class ClassData {
+  final bool isAbstract;
+  final bool isExternal;
+  final String superclassOf;
+  final String? superSuperclassOf;
+
+  const ClassData(
+      {this.isAbstract: false,
+      this.isExternal: false,
+      required this.superclassOf,
+      this.superSuperclassOf});
+}
+
+class FunctionData {
+  final bool isAbstract;
+  final bool isExternal;
+  final bool isOperator;
+  final bool isGetter;
+  final bool isSetter;
+  final TypeData returnType;
+  final List<ParameterData> positionalParameters;
+  final List<ParameterData> namedParameters;
+
+  const FunctionData(
+      {this.isAbstract: false,
+      this.isExternal: false,
+      this.isOperator: false,
+      this.isGetter: false,
+      this.isSetter: false,
+      required this.returnType,
+      this.positionalParameters: const [],
+      this.namedParameters: const []});
+}
+
+class TypeData {
+  final bool isNullable;
+
+  const TypeData({this.isNullable: false});
+}
+
+class NamedTypeData extends TypeData {
+  final String? name;
+  final List<TypeData>? typeArguments;
+
+  const NamedTypeData({bool isNullable: false, this.name, this.typeArguments})
+      : super(isNullable: isNullable);
+}
+
+class ParameterData {
+  final String name;
+  final TypeData type;
+  final bool isRequired;
+  final bool isNamed;
+
+  const ParameterData(this.name,
+      {required this.type, this.isNamed: false, this.isRequired: false});
+}
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
new file mode 100644
index 0000000..d54db3b
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/api/api_test_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';
+import 'api_test_expectations.dart';
+
+
+
+macro class ClassMacro
+    implements ClassTypesMacro, ClassDeclarationsMacro, ClassDefinitionMacro {
+  const ClassMacro();
+
+  FutureOr<void> buildTypesForClass(
+      ClassDeclaration clazz, TypeBuilder builder) async {
+    await checkClassDeclaration(clazz);
+  }
+
+  FutureOr<void> buildDeclarationsForClass(
+      ClassDeclaration clazz, ClassMemberDeclarationBuilder builder) async {
+    await checkClassDeclaration(clazz, classIntrospector: builder);
+  }
+
+  FutureOr<void> buildDefinitionForClass(
+      ClassDeclaration clazz, ClassDefinitionBuilder builder) async {
+    await checkClassDeclaration(clazz, classIntrospector: builder);
+  }
+}
+
+macro class FunctionMacro
+    implements
+        FunctionTypesMacro,
+        FunctionDeclarationsMacro,
+        FunctionDefinitionMacro {
+  const FunctionMacro();
+
+  FutureOr<void> buildTypesForFunction(
+      FunctionDeclaration function, TypeBuilder builder) async {
+    checkFunctionDeclaration(function);
+    await checkIdentifierResolver(builder);
+  }
+
+  FutureOr<void> buildDeclarationsForFunction(
+      FunctionDeclaration function, DeclarationBuilder builder) async {
+    checkFunctionDeclaration(function);
+    await checkIdentifierResolver(builder);
+  }
+
+  FutureOr<void> buildDefinitionForFunction(
+      FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
+    checkFunctionDeclaration(function);
+    await checkIdentifierResolver(builder);
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/test/macros/api/package_config.json b/pkg/_fe_analyzer_shared/test/macros/api/package_config.json
new file mode 100644
index 0000000..8fa0595
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/api/package_config.json
@@ -0,0 +1,18 @@
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "macro_api_test",
+      "rootUri": "../../../../_fe_analyzer_shared/test/macros/api/"
+    },
+    {
+      "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/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart
new file mode 100644
index 0000000..af3d9d7
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/augmentation_library_test.dart
@@ -0,0 +1,150 @@
+// 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/macros/executor/remote_instance.dart';
+import 'package:test/fake.dart';
+import 'package:test/test.dart';
+
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/augmentation_library.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/response_impls.dart';
+
+import '../util.dart';
+
+void main() {
+  group('AugmentationLibraryBuilder', () {
+    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'),
+              ]
+          }, libraryAugmentations: [
+            for (var j = 0; j < 3; j++)
+              DeclarationCode.fromString('int get i${i}j$j => ${i + j};\n'),
+          ], newTypeNames: [
+            'Foo${i}0',
+            'Foo${i}1',
+            'Foo${i}2',
+          ]),
+      ];
+      var library = _TestExecutor().buildAugmentationLibrary(
+          results, (Identifier i) => (i as TestIdentifier).resolved);
+      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;
+        augment class Foo00 {
+          int get i => 0;
+          int get j => 0;
+        }
+        augment class Foo01 {
+          int get i => 0;
+          int get j => 1;
+        }
+        augment class Foo02 {
+          int get i => 0;
+          int get j => 2;
+        }
+        augment class Foo10 {
+          int get i => 1;
+          int get j => 0;
+        }
+        augment class Foo11 {
+          int get i => 1;
+          int get j => 1;
+        }
+        augment class Foo12 {
+          int get i => 1;
+          int get j => 2;
+        }
+      '''));
+    });
+
+    test('can add imports for identifiers', () {
+      var fooIdentifier = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'Foo',
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:foo/foo.dart'));
+      var barIdentifier = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'Bar',
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
+      var builderIdentifier = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'Builder',
+          kind: IdentifierKind.topLevelMember,
+          staticScope: null,
+          uri: Uri.parse('package:builder/builder.dart'));
+      var barInstanceMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'baz',
+          kind: IdentifierKind.instanceMember,
+          staticScope: null,
+          uri: Uri.parse('package:bar/bar.dart'));
+      var barStaticMember = TestIdentifier(
+          id: RemoteInstance.uniqueId,
+          name: 'zap',
+          kind: IdentifierKind.staticInstanceMember,
+          staticScope: 'Bar',
+          uri: Uri.parse('package:bar/bar.dart'));
+      var results = [
+        MacroExecutionResultImpl(
+          classAugmentations: {},
+          libraryAugmentations: [
+            DeclarationCode.fromParts([
+              'class FooBuilder<T extends ',
+              fooIdentifier,
+              '> implements ',
+              builderIdentifier,
+              '<',
+              barIdentifier,
+              '<T>> {\n',
+              'late int ${barInstanceMember.name};\n',
+              barIdentifier,
+              '<T> build() => new ',
+              barIdentifier,
+              '()..',
+              barInstanceMember,
+              ' = ',
+              barStaticMember,
+              ';',
+              '\n}',
+            ]),
+          ],
+          newTypeNames: [
+            'FooBuilder',
+          ],
+        )
+      ];
+      var library = _TestExecutor().buildAugmentationLibrary(
+          results, (Identifier i) => (i as TestIdentifier).resolved);
+      expect(library, equalsIgnoringWhitespace('''
+        import 'package:foo/foo.dart' as i0;
+        import 'package:builder/builder.dart' as i1;
+        import 'package:bar/bar.dart' as i2;
+
+        class FooBuilder<T extends i0.Foo> implements i1.Builder<i2.Bar<T>> {
+          late int baz;
+
+          i2.Bar<T> build() => new i2.Bar()..baz = i2.Bar.zap;
+        }
+      '''));
+    });
+  });
+}
+
+class _TestExecutor extends MacroExecutor
+    with AugmentationLibraryBuilder, Fake {}
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
new file mode 100644
index 0000000..13b54ac
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/executor_test.dart
@@ -0,0 +1,545 @@
+// 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';
+import 'dart:isolate';
+
+import 'package:_fe_analyzer_shared/src/macros/bootstrap.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/macros/executor/process_executor.dart'
+    as processExecutor;
+
+import 'package:test/test.dart';
+
+import '../util.dart';
+
+void main() {
+  late MacroExecutor executor;
+  late File kernelOutputFile;
+  final macroName = 'SimpleMacro';
+  late MacroInstanceIdentifier instanceId;
+  late Uri macroUri;
+  late File simpleMacroFile;
+  late Directory tmpDir;
+
+  for (var executorKind in ['Isolated', 'Process']) {
+    group('$executorKind executor', () {
+      for (var mode in [
+        SerializationMode.byteDataServer,
+        SerializationMode.jsonServer
+      ]) {
+        final clientMode = mode == SerializationMode.byteDataServer
+            ? SerializationMode.byteDataClient
+            : SerializationMode.jsonClient;
+
+        group('$mode', () {
+          setUpAll(() async {
+            simpleMacroFile =
+                File(Platform.script.resolve('simple_macro.dart').toFilePath());
+            executor = executorKind == 'Isolated'
+                ? await isolatedExecutor.start(mode)
+                : await processExecutor.start(mode);
+            tmpDir = Directory.systemTemp.createTempSync('executor_test');
+            macroUri = simpleMacroFile.absolute.uri;
+
+            var bootstrapContent = bootstrapMacroIsolate({
+              macroUri.toString(): {
+                macroName: ['', 'named']
+              }
+            }, clientMode);
+            var bootstrapFile =
+                File(tmpDir.uri.resolve('main.dart').toFilePath())
+                  ..writeAsStringSync(bootstrapContent);
+            kernelOutputFile =
+                File(tmpDir.uri.resolve('main.dart.dill').toFilePath());
+            var packageConfigPath = (await Isolate.packageConfig)!.toFilePath();
+            var buildSnapshotResult =
+                await Process.run(Platform.resolvedExecutable, [
+              if (executorKind == 'Isolated') ...[
+                '--snapshot=${kernelOutputFile.uri.toFilePath()}',
+                '--snapshot-kind=kernel',
+              ] else ...[
+                'compile',
+                'exe',
+                '-o',
+                kernelOutputFile.uri.toFilePath(),
+              ],
+              '--packages=${packageConfigPath}',
+              bootstrapFile.uri.toFilePath(),
+            ]);
+            expect(buildSnapshotResult.exitCode, 0,
+                reason: 'stdout: ${buildSnapshotResult.stdout}\n'
+                    'stderr: ${buildSnapshotResult.stderr}');
+
+            var clazzId = await executor.loadMacro(macroUri, macroName,
+                precompiledKernelUri: kernelOutputFile.uri);
+            expect(clazzId, isNotNull, reason: 'Can load a macro.');
+
+            instanceId =
+                await executor.instantiateMacro(clazzId, '', Arguments([], {}));
+            expect(instanceId, isNotNull,
+                reason: 'Can create an instance with no arguments.');
+
+            instanceId = await executor.instantiateMacro(
+                clazzId, '', Arguments([1, 2], {}));
+            expect(instanceId, isNotNull,
+                reason: 'Can create an instance with positional arguments.');
+
+            instanceId = await executor.instantiateMacro(
+                clazzId, 'named', Arguments([], {'x': 1, 'y': 2}));
+            expect(instanceId, isNotNull,
+                reason: 'Can create an instance with named arguments.');
+          });
+
+          tearDownAll(() {
+            if (tmpDir.existsSync()) {
+              try {
+                // Fails flakily on windows if a process still has the file open
+                tmpDir.deleteSync(recursive: true);
+              } catch (_) {}
+            }
+            executor.close();
+          });
+
+          group('run macros', () {
+            group('in the types phase', () {
+              test('on functions', () async {
+                var result = await executor.executeTypesPhase(
+                    instanceId, Fixtures.myFunction, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('class GeneratedByMyFunction {}'));
+              });
+
+              test('on methods', () async {
+                var result = await executor.executeTypesPhase(
+                    instanceId, Fixtures.myMethod, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('class GeneratedByMyMethod {}'));
+              });
+
+              test('on getters', () async {
+                var result = await executor.executeTypesPhase(instanceId,
+                    Fixtures.myVariableGetter, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'class GeneratedByMyVariableGetter {}'));
+              });
+
+              test('on setters', () async {
+                var result = await executor.executeTypesPhase(instanceId,
+                    Fixtures.myVariableSetter, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'class GeneratedByMyVariableSetter {}'));
+              });
+
+              test('on variables', () async {
+                var result = await executor.executeTypesPhase(
+                    instanceId, Fixtures.myVariable, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'class GeneratedBy_myVariable {}'));
+              });
+
+              test('on constructors', () async {
+                var result = await executor.executeTypesPhase(instanceId,
+                    Fixtures.myConstructor, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'class GeneratedByMyConstructor {}'));
+              });
+
+              test('on fields', () async {
+                var result = await executor.executeTypesPhase(
+                    instanceId, Fixtures.myField, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('class GeneratedByMyField {}'));
+              });
+
+              test('on classes', () async {
+                var result = await executor.executeTypesPhase(
+                    instanceId, Fixtures.myClass, FakeIdentifierResolver());
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'class MyClassBuilder implements Builder<MyClass> {}'));
+              });
+            });
+
+            group('in the declaration phase', () {
+              test('on functions', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myFunction,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'String delegateMyFunction() => myFunction();'));
+              });
+
+              test('on methods', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myMethod,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace(
+                        'String delegateMemberMyMethod() => myMethod();'));
+              });
+
+              test('on constructors', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myConstructor,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, hasLength(1));
+                expect(
+                    result.classAugmentations['MyClass']!.single
+                        .debugString()
+                        .toString(),
+                    equalsIgnoringWhitespace('''
+                factory MyClass.myConstructorDelegate() => MyClass.myConstructor();
+              '''));
+                expect(result.libraryAugmentations, isEmpty);
+              });
+
+              test('on getters', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myVariableGetter,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('''
+                String get delegateMyVariable => myVariable;'''));
+              });
+
+              test('on setters', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myVariableSetter,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('''
+                void set delegateMyVariable(String value) => myVariable = value;'''));
+              });
+
+              test('on variables', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myVariable,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('''
+                String get delegate_myVariable => _myVariable;'''));
+              });
+
+              test('on fields', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myField,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, hasLength(1));
+                expect(
+                    result.classAugmentations['MyClass']!.single
+                        .debugString()
+                        .toString(),
+                    equalsIgnoringWhitespace('''
+                String get delegateMyField => myField;
+              '''));
+                expect(result.libraryAugmentations, isEmpty);
+              });
+
+              test('on classes', () async {
+                var result = await executor.executeDeclarationsPhase(
+                    instanceId,
+                    Fixtures.myClass,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector);
+                expect(result.classAugmentations, hasLength(1));
+                expect(
+                    result.classAugmentations['MyClass']!.single
+                        .debugString()
+                        .toString(),
+                    equalsIgnoringWhitespace('''
+                static const List<String> fieldNames = ['myField',];
+              '''));
+                expect(result.libraryAugmentations, isEmpty);
+              });
+            });
+
+            group('in the definition phase', () {
+              test('on functions', () async {
+                var result = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myFunction,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('''
+                augment String myFunction() {
+                  print('isAbstract: false');
+                  print('isExternal: false');
+                  print('isGetter: false');
+                  print('isSetter: false');
+                  print('returnType: String');
+                  return augment super();
+                }'''));
+              });
+
+              test('on methods', () async {
+                var definitionResult = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myMethod,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(definitionResult.classAugmentations, hasLength(1));
+                var augmentationStrings = definitionResult
+                    .classAugmentations['MyClass']!
+                    .map((a) => a.debugString().toString())
+                    .toList();
+                expect(augmentationStrings,
+                    unorderedEquals(methodDefinitionMatchers));
+                expect(definitionResult.libraryAugmentations, isEmpty);
+              });
+
+              test('on constructors', () async {
+                var definitionResult = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myConstructor,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(definitionResult.classAugmentations, hasLength(1));
+                expect(
+                    definitionResult.classAugmentations['MyClass']!.first
+                        .debugString()
+                        .toString(),
+                    constructorDefinitionMatcher);
+                expect(definitionResult.libraryAugmentations, isEmpty);
+              });
+
+              test('on getters', () async {
+                var result = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myVariableGetter,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('''
+                augment String myVariable() {
+                  print('isAbstract: false');
+                  print('isExternal: false');
+                  print('isGetter: true');
+                  print('isSetter: false');
+                  print('returnType: String');
+                  return augment super;
+                }'''));
+              });
+
+              test('on setters', () async {
+                var result = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myVariableSetter,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations.single.debugString().toString(),
+                    equalsIgnoringWhitespace('''
+                augment void myVariable(String value, ) {
+                  print('isAbstract: false');
+                  print('isExternal: false');
+                  print('isGetter: false');
+                  print('isSetter: true');
+                  print('returnType: void');
+                  print('positionalParam: String value');
+                  return augment super = value;
+                }'''));
+              });
+
+              test('on variables', () async {
+                var result = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myVariable,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(result.classAugmentations, isEmpty);
+                expect(
+                    result.libraryAugmentations
+                        .map((a) => a.debugString().toString()),
+                    unorderedEquals([
+                      equalsIgnoringWhitespace('''
+                augment String get _myVariable {
+                  print('parentClass: ');
+                  print('isExternal: false');
+                  print('isFinal: true');
+                  print('isLate: false');
+                  return augment super;
+                }'''),
+                      equalsIgnoringWhitespace('''
+                augment set _myVariable(String value) {
+                  augment super = value;
+                }'''),
+                      equalsIgnoringWhitespace('''
+                augment final String _myVariable = 'new initial value' + augment super;
+                '''),
+                    ]));
+              });
+
+              test('on fields', () async {
+                var definitionResult = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myField,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(definitionResult.classAugmentations, hasLength(1));
+                expect(
+                    definitionResult.classAugmentations['MyClass']!
+                        .map((a) => a.debugString().toString()),
+                    unorderedEquals(fieldDefinitionMatchers));
+                expect(definitionResult.libraryAugmentations, isEmpty);
+              });
+
+              test('on classes', () async {
+                var definitionResult = await executor.executeDefinitionsPhase(
+                    instanceId,
+                    Fixtures.myClass,
+                    FakeIdentifierResolver(),
+                    Fixtures.testTypeResolver,
+                    Fixtures.testClassIntrospector,
+                    Fixtures.testTypeDeclarationResolver);
+                expect(definitionResult.classAugmentations, hasLength(1));
+                var augmentationStrings = definitionResult
+                    .classAugmentations['MyClass']!
+                    .map((a) => a.debugString().toString())
+                    .toList();
+                expect(
+                    augmentationStrings,
+                    unorderedEquals([
+                      ...methodDefinitionMatchers,
+                      constructorDefinitionMatcher,
+                      ...fieldDefinitionMatchers,
+                    ]));
+              });
+            });
+          });
+        });
+      }
+    });
+  }
+}
+
+final constructorDefinitionMatcher = equalsIgnoringWhitespace('''
+augment MyClass.myConstructor() {
+  print('definingClass: MyClass');
+  print('isFactory: false');
+  print('isAbstract: false');
+  print('isExternal: false');
+  print('isGetter: false');
+  print('isSetter: false');
+  print('returnType: MyClass');
+  return augment super();
+}''');
+
+final fieldDefinitionMatchers = [
+  equalsIgnoringWhitespace('''
+    augment String get myField {
+      print('parentClass: MyClass');
+      print('isExternal: false');
+      print('isFinal: false');
+      print('isLate: false');
+      return augment super;
+    }'''),
+  equalsIgnoringWhitespace('''
+    augment set myField(String value) {
+      augment super = value;
+    }'''),
+  equalsIgnoringWhitespace('''
+    augment String myField = \'new initial value\' + augment super;'''),
+];
+
+final methodDefinitionMatchers = [
+  equalsIgnoringWhitespace('''
+    augment String myMethod() {
+      print('definingClass: MyClass');
+      print('isAbstract: false');
+      print('isExternal: false');
+      print('isGetter: false');
+      print('isSetter: false');
+      print('returnType: String');
+      return augment super();
+    }'''),
+  equalsIgnoringWhitespace('''
+    augment String myMethod() {
+      print('x: 1, y: 2');
+      print('parentClass: MyClass');
+      print('superClass: MySuperclass');
+      print('interface: MyInterface');
+      print('mixin: MyMixin');
+      print('field: myField');
+      print('method: myMethod');
+      print('constructor: myConstructor');
+      return augment super();
+    }'''),
+];
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/response_impls_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/response_impls_test.dart
new file mode 100644
index 0000000..c64b7c7
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/response_impls_test.dart
@@ -0,0 +1,163 @@
+// 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/macros/executor/remote_instance.dart';
+import 'package:test/fake.dart';
+import 'package:test/test.dart';
+
+import 'package:_fe_analyzer_shared/src/macros/executor/response_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+void main() {
+  group('MacroInstanceIdentifierImpl', () {
+    test('shouldExecute', () {
+      for (var kind in DeclarationKind.values) {
+        for (var phase in Phase.values) {
+          var instance = instancesByKindAndPhase[kind]![phase]!;
+          for (var otherKind in DeclarationKind.values) {
+            for (var otherPhase in Phase.values) {
+              var expected = false;
+              if (otherPhase == phase) {
+                if (kind == otherKind) {
+                  expected = true;
+                } else if (kind == DeclarationKind.function &&
+                    otherKind == DeclarationKind.method) {
+                  expected = true;
+                } else if (kind == DeclarationKind.variable &&
+                    otherKind == DeclarationKind.field) {
+                  expected = true;
+                }
+              }
+              expect(instance.shouldExecute(otherKind, otherPhase), expected,
+                  reason: 'Expected a $kind macro in $phase to '
+                      '${expected ? '' : 'not '}be applied to a $otherKind '
+                      'in $otherPhase');
+            }
+          }
+        }
+      }
+    });
+
+    test('supportsDeclarationKind', () {
+      for (var kind in DeclarationKind.values) {
+        for (var phase in Phase.values) {
+          var instance = instancesByKindAndPhase[kind]![phase]!;
+          for (var otherKind in DeclarationKind.values) {
+            var expected = false;
+            if (kind == otherKind) {
+              expected = true;
+            } else if (kind == DeclarationKind.function &&
+                otherKind == DeclarationKind.method) {
+              expected = true;
+            } else if (kind == DeclarationKind.variable &&
+                otherKind == DeclarationKind.field) {
+              expected = true;
+            }
+            expect(instance.supportsDeclarationKind(otherKind), expected,
+                reason: 'Expected a $kind macro to ${expected ? '' : 'not '}'
+                    'support a $otherKind');
+          }
+        }
+      }
+    });
+  });
+}
+
+final Map<DeclarationKind, Map<Phase, MacroInstanceIdentifierImpl>>
+    instancesByKindAndPhase = {
+  DeclarationKind.clazz: {
+    Phase.types: MacroInstanceIdentifierImpl(
+        FakeClassTypesMacro(), RemoteInstance.uniqueId),
+    Phase.declarations: MacroInstanceIdentifierImpl(
+        FakeClassDeclarationsMacro(), RemoteInstance.uniqueId),
+    Phase.definitions: MacroInstanceIdentifierImpl(
+        FakeClassDefinitionMacro(), RemoteInstance.uniqueId),
+  },
+  DeclarationKind.constructor: {
+    Phase.types: MacroInstanceIdentifierImpl(
+        FakeConstructorTypesMacro(), RemoteInstance.uniqueId),
+    Phase.declarations: MacroInstanceIdentifierImpl(
+        FakeConstructorDeclarationsMacro(), RemoteInstance.uniqueId),
+    Phase.definitions: MacroInstanceIdentifierImpl(
+        FakeConstructorDefinitionMacro(), RemoteInstance.uniqueId),
+  },
+  DeclarationKind.field: {
+    Phase.types: MacroInstanceIdentifierImpl(
+        FakeFieldTypesMacro(), RemoteInstance.uniqueId),
+    Phase.declarations: MacroInstanceIdentifierImpl(
+        FakeFieldDeclarationsMacro(), RemoteInstance.uniqueId),
+    Phase.definitions: MacroInstanceIdentifierImpl(
+        FakeFieldDefinitionMacro(), RemoteInstance.uniqueId),
+  },
+  DeclarationKind.function: {
+    Phase.types: MacroInstanceIdentifierImpl(
+        FakeFunctionTypesMacro(), RemoteInstance.uniqueId),
+    Phase.declarations: MacroInstanceIdentifierImpl(
+        FakeFunctionDeclarationsMacro(), RemoteInstance.uniqueId),
+    Phase.definitions: MacroInstanceIdentifierImpl(
+        FakeFunctionDefinitionMacro(), RemoteInstance.uniqueId),
+  },
+  DeclarationKind.method: {
+    Phase.types: MacroInstanceIdentifierImpl(
+        FakeMethodTypesMacro(), RemoteInstance.uniqueId),
+    Phase.declarations: MacroInstanceIdentifierImpl(
+        FakeMethodDeclarationsMacro(), RemoteInstance.uniqueId),
+    Phase.definitions: MacroInstanceIdentifierImpl(
+        FakeMethodDefinitionMacro(), RemoteInstance.uniqueId),
+  },
+  DeclarationKind.variable: {
+    Phase.types: MacroInstanceIdentifierImpl(
+        FakeVariableTypesMacro(), RemoteInstance.uniqueId),
+    Phase.declarations: MacroInstanceIdentifierImpl(
+        FakeVariableDeclarationsMacro(), RemoteInstance.uniqueId),
+    Phase.definitions: MacroInstanceIdentifierImpl(
+        FakeVariableDefinitionMacro(), RemoteInstance.uniqueId),
+  },
+};
+
+class FakeClassTypesMacro extends Fake implements ClassTypesMacro {}
+
+class FakeClassDeclarationsMacro extends Fake
+    implements ClassDeclarationsMacro {}
+
+class FakeClassDefinitionMacro extends Fake implements ClassDefinitionMacro {}
+
+class FakeConstructorTypesMacro extends Fake implements ConstructorTypesMacro {}
+
+class FakeConstructorDeclarationsMacro extends Fake
+    implements ConstructorDeclarationsMacro {}
+
+class FakeConstructorDefinitionMacro extends Fake
+    implements ConstructorDefinitionMacro {}
+
+class FakeFieldTypesMacro extends Fake implements FieldTypesMacro {}
+
+class FakeFieldDeclarationsMacro extends Fake
+    implements FieldDeclarationsMacro {}
+
+class FakeFieldDefinitionMacro extends Fake implements FieldDefinitionMacro {}
+
+class FakeFunctionTypesMacro extends Fake implements FunctionTypesMacro {}
+
+class FakeFunctionDeclarationsMacro extends Fake
+    implements FunctionDeclarationsMacro {}
+
+class FakeFunctionDefinitionMacro extends Fake
+    implements FunctionDefinitionMacro {}
+
+class FakeMethodTypesMacro extends Fake implements MethodTypesMacro {}
+
+class FakeMethodDeclarationsMacro extends Fake
+    implements MethodDeclarationsMacro {}
+
+class FakeMethodDefinitionMacro extends Fake implements MethodDefinitionMacro {}
+
+class FakeVariableTypesMacro extends Fake implements VariableTypesMacro {}
+
+class FakeVariableDeclarationsMacro extends Fake
+    implements VariableDeclarationsMacro {}
+
+class FakeVariableDefinitionMacro extends Fake
+    implements VariableDefinitionMacro {}
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/serialization_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor/serialization_test.dart
new file mode 100644
index 0000000..eb74a8e
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/serialization_test.dart
@@ -0,0 +1,376 @@
+// 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';
+import 'package:_fe_analyzer_shared/src/macros/executor/introspection_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization_extensions.dart';
+import 'package:test/test.dart';
+
+import '../util.dart';
+
+void main() {
+  for (var mode in [
+    SerializationMode.jsonClient,
+    SerializationMode.jsonServer,
+    SerializationMode.byteDataClient,
+    SerializationMode.byteDataServer,
+  ]) {
+    test('$mode can serialize and deserialize basic data', () {
+      withSerializationMode(mode, () {
+        var serializer = serializerFactory();
+        serializer
+          ..addInt(0)
+          ..addInt(1)
+          ..addInt(0xff)
+          ..addInt(0xffff)
+          ..addInt(0xffffffff)
+          ..addInt(0xffffffffffffffff)
+          ..addInt(-1)
+          ..addInt(-0x80)
+          ..addInt(-0x8000)
+          ..addInt(-0x80000000)
+          ..addInt(-0x8000000000000000)
+          ..addNullableInt(null)
+          ..addString('hello')
+          ..addString('€') // Requires a two byte string
+          ..addString('𐐷') // Requires two, 16 bit code units
+          ..addNullableString(null)
+          ..startList()
+          ..addBool(true)
+          ..startList()
+          ..addNull()
+          ..endList()
+          ..addNullableBool(null)
+          ..endList()
+          ..addDouble(1.0)
+          ..startList()
+          ..endList();
+        var deserializer = deserializerFactory(serializer.result);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), 0);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), 1);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), 0xff);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), 0xffff);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), 0xffffffff);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), 0xffffffffffffffff);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), -1);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), -0x80);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), -0x8000);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), -0x80000000);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectInt(), -0x8000000000000000);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectNullableInt(), null);
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectString(), 'hello');
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectString(), '€');
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectString(), '𐐷');
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectNullableString(), null);
+        expect(deserializer.moveNext(), true);
+
+        deserializer.expectList();
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectBool(), true);
+        expect(deserializer.moveNext(), true);
+
+        deserializer.expectList();
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.checkNull(), true);
+        expect(deserializer.moveNext(), false);
+
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectNullableBool(), null);
+        expect(deserializer.moveNext(), false);
+
+        // Have to move the parent again to advance it past the list entry.
+        expect(deserializer.moveNext(), true);
+        expect(deserializer.expectDouble(), 1.0);
+        expect(deserializer.moveNext(), true);
+
+        deserializer.expectList();
+        expect(deserializer.moveNext(), false);
+
+        expect(deserializer.moveNext(), false);
+      });
+    });
+  }
+
+  for (var mode in [
+    SerializationMode.byteDataServer,
+    SerializationMode.jsonServer
+  ]) {
+    test('remote instances in $mode', () async {
+      var string = NamedTypeAnnotationImpl(
+          id: RemoteInstance.uniqueId,
+          isNullable: false,
+          identifier:
+              IdentifierImpl(id: RemoteInstance.uniqueId, name: 'String'),
+          typeArguments: const []);
+      var foo = NamedTypeAnnotationImpl(
+          id: RemoteInstance.uniqueId,
+          isNullable: false,
+          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
+          typeArguments: [string]);
+
+      withSerializationMode(mode, () {
+        var serializer = serializerFactory();
+        foo.serialize(serializer);
+        var response = roundTrip(serializer.result);
+        var deserializer = deserializerFactory(response);
+        var instance = RemoteInstance.deserialize(deserializer);
+        expect(instance, foo);
+      });
+    });
+  }
+
+  group('declarations', () {
+    final barType = NamedTypeAnnotationImpl(
+        id: RemoteInstance.uniqueId,
+        isNullable: false,
+        identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Bar'),
+        typeArguments: []);
+    final fooType = NamedTypeAnnotationImpl(
+        id: RemoteInstance.uniqueId,
+        isNullable: true,
+        identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
+        typeArguments: [barType]);
+
+    for (var mode in [
+      SerializationMode.byteDataServer,
+      SerializationMode.jsonServer
+    ]) {
+      group('with mode $mode', () {
+        test('NamedTypeAnnotation', () {
+          expectSerializationEquality(fooType, mode);
+        });
+
+        final fooNamedParam = ParameterDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            isNamed: true,
+            isRequired: true,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'foo'),
+            type: fooType);
+
+        final barPositionalParam = ParameterDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            isNamed: false,
+            isRequired: false,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'bar'),
+            type: barType);
+
+        final zapTypeParam = TypeParameterDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Zap'),
+            bound: barType);
+
+        // Transitively tests `TypeParameterDeclaration` and
+        // `ParameterDeclaration`.
+        test('FunctionTypeAnnotation', () {
+          var functionType = FunctionTypeAnnotationImpl(
+            id: RemoteInstance.uniqueId,
+            isNullable: true,
+            namedParameters: [fooNamedParam],
+            positionalParameters: [barPositionalParam],
+            returnType: fooType,
+            typeParameters: [zapTypeParam],
+          );
+          expectSerializationEquality(functionType, mode);
+        });
+
+        test('FunctionDeclaration', () {
+          var function = FunctionDeclarationImpl(
+              id: RemoteInstance.uniqueId,
+              identifier:
+                  IdentifierImpl(id: RemoteInstance.uniqueId, name: 'name'),
+              isAbstract: true,
+              isExternal: false,
+              isGetter: true,
+              isOperator: false,
+              isSetter: false,
+              namedParameters: [],
+              positionalParameters: [],
+              returnType: fooType,
+              typeParameters: []);
+          expectSerializationEquality(function, mode);
+        });
+
+        test('MethodDeclaration', () {
+          var method = MethodDeclarationImpl(
+              id: RemoteInstance.uniqueId,
+              identifier:
+                  IdentifierImpl(id: RemoteInstance.uniqueId, name: 'zorp'),
+              isAbstract: false,
+              isExternal: false,
+              isGetter: false,
+              isOperator: false,
+              isSetter: true,
+              namedParameters: [fooNamedParam],
+              positionalParameters: [barPositionalParam],
+              returnType: fooType,
+              typeParameters: [zapTypeParam],
+              definingClass: fooType.identifier,
+              isStatic: false);
+          expectSerializationEquality(method, mode);
+        });
+
+        test('ConstructorDeclaration', () {
+          var constructor = ConstructorDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'new'),
+            isAbstract: false,
+            isExternal: false,
+            isGetter: false,
+            isOperator: true,
+            isSetter: false,
+            namedParameters: [fooNamedParam],
+            positionalParameters: [barPositionalParam],
+            returnType: fooType,
+            typeParameters: [zapTypeParam],
+            definingClass: fooType.identifier,
+            isFactory: true,
+          );
+          expectSerializationEquality(constructor, mode);
+        });
+
+        test('VariableDeclaration', () {
+          var bar = VariableDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'bar'),
+            isExternal: true,
+            isFinal: false,
+            isLate: true,
+            type: barType,
+          );
+          expectSerializationEquality(bar, mode);
+        });
+
+        test('FieldDeclaration', () {
+          var bar = FieldDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'bar'),
+            isExternal: false,
+            isFinal: true,
+            isLate: false,
+            type: barType,
+            definingClass: fooType.identifier,
+            isStatic: false,
+          );
+          expectSerializationEquality(bar, mode);
+        });
+
+        var objectType = NamedTypeAnnotationImpl(
+          id: RemoteInstance.uniqueId,
+          identifier:
+              IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Object'),
+          isNullable: false,
+          typeArguments: [],
+        );
+        var serializableType = NamedTypeAnnotationImpl(
+          id: RemoteInstance.uniqueId,
+          identifier:
+              IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Serializable'),
+          isNullable: false,
+          typeArguments: [],
+        );
+
+        test('ClassDeclaration', () {
+          var fooClass = ClassDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
+            interfaces: [barType],
+            isAbstract: true,
+            isExternal: false,
+            mixins: [serializableType],
+            superclass: objectType,
+            typeParameters: [zapTypeParam],
+          );
+          expectSerializationEquality(fooClass, mode);
+        });
+
+        test('TypeAliasDeclaration', () {
+          var typeAlias = TypeAliasDeclarationImpl(
+            id: RemoteInstance.uniqueId,
+            identifier:
+                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'FooOfBar'),
+            typeParameters: [zapTypeParam],
+            aliasedType: NamedTypeAnnotationImpl(
+                id: RemoteInstance.uniqueId,
+                isNullable: false,
+                identifier:
+                    IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
+                typeArguments: [barType]),
+          );
+          expectSerializationEquality(typeAlias, mode);
+        });
+      });
+    }
+  });
+}
+
+/// Serializes [serializable] in server mode, then deserializes it in client
+/// mode, and checks that all the fields are the same.
+void expectSerializationEquality(
+    Serializable serializable, SerializationMode serverMode) {
+  late Object? serialized;
+  withSerializationMode(serverMode, () {
+    var serializer = serializerFactory();
+    serializable.serialize(serializer);
+    serialized = serializer.result;
+  });
+  withSerializationMode(_clientModeForServerMode(serverMode), () {
+    var deserializer = deserializerFactory(serialized);
+    var deserialized = (deserializer..moveNext()).expectRemoteInstance();
+    if (deserialized is Declaration) {
+      expect(serializable, deepEqualsDeclaration(deserialized));
+    } else if (deserialized is TypeAnnotation) {
+      expect(serializable, deepEqualsTypeAnnotation(deserialized));
+    } else {
+      throw new UnsupportedError('Unsupported object type $deserialized');
+    }
+  });
+}
+
+/// Deserializes [serialized] in client mode and sends it back.
+Object? roundTrip<Declaration>(Object? serialized) {
+  return withSerializationMode(_clientModeForServerMode(serializationMode), () {
+    var deserializer = deserializerFactory(serialized);
+    var instance =
+        RemoteInstance.deserialize<NamedTypeAnnotationImpl>(deserializer);
+    var serializer = serializerFactory();
+    instance.serialize(serializer);
+    return serializer.result;
+  });
+}
+
+SerializationMode _clientModeForServerMode(SerializationMode serverMode) {
+  switch (serverMode) {
+    case SerializationMode.byteDataServer:
+      return SerializationMode.byteDataClient;
+    case SerializationMode.jsonServer:
+      return SerializationMode.jsonClient;
+    default:
+      throw StateError('Expected to be running in a server mode');
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart b/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart
new file mode 100644
index 0000000..b5a2d2d
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/executor/simple_macro.dart
@@ -0,0 +1,402 @@
+// 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';
+
+/// A very simple macro that augments any declaration it is given, usually
+/// adding print statements and inlining values from the declaration object
+/// for comparision with expected values in tests.
+///
+/// When applied to [MethodDeclaration]s there is some extra work that happens
+/// to validate the introspection APIs work as expected.
+class SimpleMacro
+    implements
+        ClassTypesMacro,
+        ClassDeclarationsMacro,
+        ClassDefinitionMacro,
+        ConstructorTypesMacro,
+        ConstructorDeclarationsMacro,
+        ConstructorDefinitionMacro,
+        FieldTypesMacro,
+        FieldDeclarationsMacro,
+        FieldDefinitionMacro,
+        FunctionTypesMacro,
+        FunctionDeclarationsMacro,
+        FunctionDefinitionMacro,
+        MethodTypesMacro,
+        MethodDeclarationsMacro,
+        MethodDefinitionMacro,
+        VariableTypesMacro,
+        VariableDeclarationsMacro,
+        VariableDefinitionMacro {
+  final int? x;
+  final int? y;
+
+  SimpleMacro([this.x, this.y]);
+
+  SimpleMacro.named({this.x, this.y});
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(
+      ClassDeclaration clazz, ClassMemberDeclarationBuilder builder) async {
+    var fields = await builder.fieldsOf(clazz);
+    builder.declareInClass(DeclarationCode.fromParts([
+      'static const List<String> fieldNames = [',
+      for (var field in fields) "'${field.identifier.name}',",
+      '];',
+    ]));
+  }
+
+  @override
+  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(
+        'factory $className.${constructorName}Delegate() => '
+        '$className.$constructorName();'));
+  }
+
+  @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,
+      if (function.isGetter) ' get' else if (function.isSetter) ' set ',
+      ' delegate${functionName.capitalize()}',
+      if (!function.isGetter) ...[
+        '(',
+        if (function.isSetter) ...[
+          function.positionalParameters.first.type.code,
+          ' value',
+        ],
+        ')',
+      ],
+      ' => ${functionName}',
+      function.isGetter
+          ? ''
+          : function.isSetter
+              ? ' = value'
+              : '()',
+      ';',
+    ]));
+  }
+
+  @override
+  FutureOr<void> buildDeclarationsForMethod(
+      MethodDeclaration method, ClassMemberDeclarationBuilder builder) {
+    if (method.positionalParameters.isNotEmpty ||
+        method.namedParameters.isNotEmpty) {
+      throw new UnsupportedError('Can only run on method with no parameters!');
+    }
+    var methodName = method.identifier.name;
+    builder.declareInLibrary(DeclarationCode.fromParts([
+      method.returnType.code,
+      ' delegateMember${methodName.capitalize()}() => $methodName();',
+    ]));
+  }
+
+  @override
+  FutureOr<void> buildDeclarationsForVariable(
+      VariableDeclaration variable, DeclarationBuilder builder) {
+    var variableName = variable.identifier.name;
+    builder.declareInLibrary(DeclarationCode.fromParts([
+      variable.type.code,
+      ' get delegate${variableName.capitalize()} => $variableName;',
+    ]));
+  }
+
+  @override
+  FutureOr<void> buildDeclarationsForField(
+      FieldDeclaration field, ClassMemberDeclarationBuilder builder) {
+    var fieldName = field.identifier.name;
+    builder.declareInClass(DeclarationCode.fromParts([
+      field.type.code,
+      ' get delegate${fieldName.capitalize()} => $fieldName;',
+    ]));
+  }
+
+  @override
+  Future<void> buildDefinitionForClass(
+      ClassDeclaration clazz, ClassDefinitionBuilder builder) async {
+    // Apply ourself to all our members
+    var fields = (await builder.fieldsOf(clazz));
+    for (var field in fields) {
+      await buildDefinitionForField(
+          field, await builder.buildField(field.identifier));
+    }
+    var methods = (await builder.methodsOf(clazz));
+    for (var method in methods) {
+      await buildDefinitionForMethod(
+          method, await builder.buildMethod(method.identifier));
+    }
+    var constructors = (await builder.constructorsOf(clazz));
+    for (var constructor in constructors) {
+      await buildDefinitionForConstructor(
+          constructor, await builder.buildConstructor(constructor.identifier));
+    }
+  }
+
+  @override
+  Future<void> buildDefinitionForConstructor(ConstructorDeclaration constructor,
+      ConstructorDefinitionBuilder builder) async {
+    var clazz = await builder.declarationOf(constructor.definingClass)
+        as ClassDeclaration;
+    var fields = (await builder.fieldsOf(clazz));
+
+    builder.augment(
+      body: _buildFunctionAugmentation(constructor),
+      initializers: [
+        for (var field in fields)
+          // TODO: Compare against actual `int` type.
+          if (field.isFinal &&
+              (field.type as NamedTypeAnnotation).identifier.name == 'int')
+            Code.fromParts([field.identifier, ' = ${x!}']),
+      ],
+    );
+  }
+
+  @override
+  Future<void> buildDefinitionForField(
+          FieldDeclaration field, VariableDefinitionBuilder builder) async =>
+      buildDefinitionForVariable(field, builder);
+
+  @override
+  Future<void> buildDefinitionForFunction(
+      FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
+    builder.augment(_buildFunctionAugmentation(function));
+  }
+
+  @override
+  Future<void> buildDefinitionForMethod(
+      MethodDeclaration method, FunctionDefinitionBuilder builder) async {
+    await buildDefinitionForFunction(method, builder);
+
+    // Test the type declaration resolver
+    var parentClass =
+        await builder.declarationOf(method.definingClass) as ClassDeclaration;
+    // Should be able to find ourself in the methods of the parent class.
+    (await builder.methodsOf(parentClass))
+        .singleWhere((m) => m.identifier == method.identifier);
+
+    // Test the class introspector
+    var superClass = (await builder.superclassOf(parentClass))!;
+    var interfaces = (await builder.interfacesOf(parentClass));
+    var mixins = (await builder.mixinsOf(parentClass));
+    var fields = (await builder.fieldsOf(parentClass));
+    var methods = (await builder.methodsOf(parentClass));
+    var constructors = (await builder.constructorsOf(parentClass));
+
+    // Test the type resolver and static type interfaces
+    var staticReturnType = await builder.resolve(method.returnType.code);
+    if (!(await staticReturnType.isExactly(staticReturnType))) {
+      throw StateError('The return type should be exactly equal to itself!');
+    }
+    if (!(await staticReturnType.isSubtypeOf(staticReturnType))) {
+      throw StateError('The return type should be a subtype of itself!');
+    }
+
+    // TODO: Use `builder.instantiateCode` instead once implemented.
+    var classType = await builder.resolve(constructors.first.returnType.code);
+    if (await staticReturnType.isExactly(classType)) {
+      throw StateError(
+          'The return type should not be exactly equal to the class type');
+    }
+    if (await staticReturnType.isSubtypeOf(classType)) {
+      throw StateError(
+          'The return type should not be a subtype of the class type!');
+    }
+
+    builder.augment(FunctionBodyCode.fromParts([
+      '''{
+      print('x: $x, y: $y');
+      print('parentClass: ${parentClass.identifier.name}');
+      print('superClass: ${superClass.identifier.name}');''',
+      for (var interface in interfaces)
+        "\n      print('interface: ${interface.identifier.name}');",
+      for (var mixin in mixins)
+        "\n      print('mixin: ${mixin.identifier.name}');",
+      for (var field in fields)
+        "\n      print('field: ${field.identifier.name}');",
+      for (var method in methods)
+        "\n      print('method: ${method.identifier.name}');",
+      for (var constructor in constructors)
+        "\n      print('constructor: ${constructor.identifier.name}');",
+      '''
+\n      return augment super();
+    }''',
+    ]));
+  }
+
+  @override
+  Future<void> buildDefinitionForVariable(
+      VariableDeclaration variable, VariableDefinitionBuilder builder) async {
+    var definingClass =
+        variable is FieldDeclaration ? variable.definingClass.name : '';
+    builder.augment(
+      getter: DeclarationCode.fromParts([
+        variable.type.code,
+        ' get ',
+        variable.identifier.name,
+        ''' {
+          print('parentClass: $definingClass');
+          print('isExternal: ${variable.isExternal}');
+          print('isFinal: ${variable.isFinal}');
+          print('isLate: ${variable.isLate}');
+          return augment super;
+        }''',
+      ]),
+      setter: DeclarationCode.fromParts([
+        'set ',
+        variable.identifier.name,
+        '(',
+        variable.type.code,
+        ' value) { augment super = value; }'
+      ]),
+      initializer:
+          ExpressionCode.fromString("'new initial value' + augment super"),
+    );
+  }
+
+  @override
+  FutureOr<void> buildTypesForClass(
+      ClassDeclaration clazz, TypeBuilder builder) {
+    List<Object> _buildTypeParam(
+        TypeParameterDeclaration typeParam, bool isFirst) {
+      return [
+        if (!isFirst) ', ',
+        typeParam.identifier.name,
+        if (typeParam.bound != null) ...[
+          ' extends ',
+          typeParam.bound!.code,
+        ]
+      ];
+    }
+
+    var name = '${clazz.identifier.name}Builder';
+    builder.declareType(
+        name,
+        DeclarationCode.fromParts([
+          'class $name',
+          if (clazz.typeParameters.isNotEmpty) ...[
+            '<',
+            ..._buildTypeParam(clazz.typeParameters.first, true),
+            for (var typeParam in clazz.typeParameters.skip(1))
+              ..._buildTypeParam(typeParam, false),
+            '>',
+          ],
+          ' implements Builder<',
+          clazz.identifier,
+          if (clazz.typeParameters.isNotEmpty) ...[
+            '<',
+            clazz.typeParameters.first.identifier.name,
+            for (var typeParam in clazz.typeParameters)
+              ', ${typeParam.identifier.name}',
+            '>',
+          ],
+          '> {}'
+        ]));
+  }
+
+  @override
+  FutureOr<void> buildTypesForConstructor(
+      ConstructorDeclaration constructor, TypeBuilder builder) {
+    var name = 'GeneratedBy${constructor.identifier.name.capitalize()}';
+    builder.declareType(name, DeclarationCode.fromString('class $name {}'));
+  }
+
+  @override
+  FutureOr<void> buildTypesForField(
+      FieldDeclaration field, TypeBuilder builder) {
+    var name = 'GeneratedBy${field.identifier.name.capitalize()}';
+    builder.declareType(name, DeclarationCode.fromString('class $name {}'));
+  }
+
+  @override
+  FutureOr<void> buildTypesForFunction(
+      FunctionDeclaration function, TypeBuilder builder) {
+    var suffix = function.isGetter
+        ? 'Getter'
+        : function.isSetter
+            ? 'Setter'
+            : '';
+    var name = 'GeneratedBy${function.identifier.name.capitalize()}$suffix';
+    builder.declareType(name, DeclarationCode.fromString('class $name {}'));
+  }
+
+  @override
+  FutureOr<void> buildTypesForMethod(
+      MethodDeclaration method, TypeBuilder builder) {
+    var name = 'GeneratedBy${method.identifier.name.capitalize()}';
+    builder.declareType(name, DeclarationCode.fromString('class $name {}'));
+  }
+
+  @override
+  FutureOr<void> buildTypesForVariable(
+      VariableDeclaration variable, TypeBuilder builder) {
+    var name = 'GeneratedBy${variable.identifier.name.capitalize()}';
+    builder.declareType(name, DeclarationCode.fromString('class $name {}'));
+  }
+}
+
+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",
+      '''
+      print('isAbstract: ${function.isAbstract}');
+      print('isExternal: ${function.isExternal}');
+      print('isGetter: ${function.isGetter}');
+      print('isSetter: ${function.isSetter}');
+      print('returnType: ''',
+      function.returnType.code,
+      "');\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) '()',
+      ''';
+    }''',
+    ]);
+
+extension _ on String {
+  String capitalize() => '${this[0].toUpperCase()}${substring(1)}';
+}
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor_shared/response_impls_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor_shared/response_impls_test.dart
deleted file mode 100644
index da0c02e..0000000
--- a/pkg/_fe_analyzer_shared/test/macros/executor_shared/response_impls_test.dart
+++ /dev/null
@@ -1,153 +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:test/fake.dart';
-import 'package:test/test.dart';
-
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/response_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/api.dart';
-
-void main() {
-  group('MacroInstanceIdentifierImpl', () {
-    test('shouldExecute', () {
-      for (var kind in DeclarationKind.values) {
-        for (var phase in Phase.values) {
-          var instance = instancesByKindAndPhase[kind]![phase]!;
-          for (var otherKind in DeclarationKind.values) {
-            for (var otherPhase in Phase.values) {
-              var expected = false;
-              if (otherPhase == phase) {
-                if (kind == otherKind) {
-                  expected = true;
-                } else if (kind == DeclarationKind.function &&
-                    otherKind == DeclarationKind.method) {
-                  expected = true;
-                } else if (kind == DeclarationKind.variable &&
-                    otherKind == DeclarationKind.field) {
-                  expected = true;
-                }
-              }
-              expect(instance.shouldExecute(otherKind, otherPhase), expected,
-                  reason: 'Expected a $kind macro in $phase to '
-                      '${expected ? '' : 'not '}be applied to a $otherKind '
-                      'in $otherPhase');
-            }
-          }
-        }
-      }
-    });
-
-    test('supportsDeclarationKind', () {
-      for (var kind in DeclarationKind.values) {
-        for (var phase in Phase.values) {
-          var instance = instancesByKindAndPhase[kind]![phase]!;
-          for (var otherKind in DeclarationKind.values) {
-            var expected = false;
-            if (kind == otherKind) {
-              expected = true;
-            } else if (kind == DeclarationKind.function &&
-                otherKind == DeclarationKind.method) {
-              expected = true;
-            } else if (kind == DeclarationKind.variable &&
-                otherKind == DeclarationKind.field) {
-              expected = true;
-            }
-            expect(instance.supportsDeclarationKind(otherKind), expected,
-                reason: 'Expected a $kind macro to ${expected ? '' : 'not '}'
-                    'support a $otherKind');
-          }
-        }
-      }
-    });
-  });
-}
-
-final Map<DeclarationKind, Map<Phase, MacroInstanceIdentifierImpl>>
-    instancesByKindAndPhase = {
-  DeclarationKind.clazz: {
-    Phase.types: MacroInstanceIdentifierImpl(FakeClassTypesMacro()),
-    Phase.declarations:
-        MacroInstanceIdentifierImpl(FakeClassDeclarationsMacro()),
-    Phase.definitions: MacroInstanceIdentifierImpl(FakeClassDefinitionMacro()),
-  },
-  DeclarationKind.constructor: {
-    Phase.types: MacroInstanceIdentifierImpl(FakeConstructorTypesMacro()),
-    Phase.declarations:
-        MacroInstanceIdentifierImpl(FakeConstructorDeclarationsMacro()),
-    Phase.definitions:
-        MacroInstanceIdentifierImpl(FakeConstructorDefinitionMacro()),
-  },
-  DeclarationKind.field: {
-    Phase.types: MacroInstanceIdentifierImpl(FakeFieldTypesMacro()),
-    Phase.declarations:
-        MacroInstanceIdentifierImpl(FakeFieldDeclarationsMacro()),
-    Phase.definitions: MacroInstanceIdentifierImpl(FakeFieldDefinitionMacro()),
-  },
-  DeclarationKind.function: {
-    Phase.types: MacroInstanceIdentifierImpl(FakeFunctionTypesMacro()),
-    Phase.declarations:
-        MacroInstanceIdentifierImpl(FakeFunctionDeclarationsMacro()),
-    Phase.definitions:
-        MacroInstanceIdentifierImpl(FakeFunctionDefinitionMacro()),
-  },
-  DeclarationKind.method: {
-    Phase.types: MacroInstanceIdentifierImpl(FakeMethodTypesMacro()),
-    Phase.declarations:
-        MacroInstanceIdentifierImpl(FakeMethodDeclarationsMacro()),
-    Phase.definitions: MacroInstanceIdentifierImpl(FakeMethodDefinitionMacro()),
-  },
-  DeclarationKind.variable: {
-    Phase.types: MacroInstanceIdentifierImpl(FakeVariableTypesMacro()),
-    Phase.declarations:
-        MacroInstanceIdentifierImpl(FakeVariableDeclarationsMacro()),
-    Phase.definitions:
-        MacroInstanceIdentifierImpl(FakeVariableDefinitionMacro()),
-  },
-};
-
-class FakeClassTypesMacro extends Fake implements ClassTypesMacro {}
-
-class FakeClassDeclarationsMacro extends Fake
-    implements ClassDeclarationsMacro {}
-
-class FakeClassDefinitionMacro extends Fake implements ClassDefinitionMacro {}
-
-class FakeConstructorTypesMacro extends Fake implements ConstructorTypesMacro {}
-
-class FakeConstructorDeclarationsMacro extends Fake
-    implements ConstructorDeclarationsMacro {}
-
-class FakeConstructorDefinitionMacro extends Fake
-    implements ConstructorDefinitionMacro {}
-
-class FakeFieldTypesMacro extends Fake implements FieldTypesMacro {}
-
-class FakeFieldDeclarationsMacro extends Fake
-    implements FieldDeclarationsMacro {}
-
-class FakeFieldDefinitionMacro extends Fake implements FieldDefinitionMacro {}
-
-class FakeFunctionTypesMacro extends Fake implements FunctionTypesMacro {}
-
-class FakeFunctionDeclarationsMacro extends Fake
-    implements FunctionDeclarationsMacro {}
-
-class FakeFunctionDefinitionMacro extends Fake
-    implements FunctionDefinitionMacro {}
-
-class FakeMethodTypesMacro extends Fake implements MethodTypesMacro {}
-
-class FakeMethodDeclarationsMacro extends Fake
-    implements MethodDeclarationsMacro {}
-
-class FakeMethodDefinitionMacro extends Fake implements MethodDefinitionMacro {}
-
-class FakeVariableTypesMacro extends Fake implements VariableTypesMacro {}
-
-class FakeVariableDeclarationsMacro extends Fake
-    implements VariableDeclarationsMacro {}
-
-class FakeVariableDefinitionMacro extends Fake
-    implements VariableDefinitionMacro {}
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor_shared/serialization_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor_shared/serialization_test.dart
deleted file mode 100644
index 502f9f9..0000000
--- a/pkg/_fe_analyzer_shared/test/macros/executor_shared/serialization_test.dart
+++ /dev/null
@@ -1,315 +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';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/serialization.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/serialization_extensions.dart';
-import 'package:test/test.dart';
-
-import '../util.dart';
-
-void main() {
-  group('json serializer', () {
-    test('can serialize and deserialize basic data', () {
-      var serializer = JsonSerializer();
-      serializer
-        ..addNum(1)
-        ..addNullableNum(null)
-        ..addString('hello')
-        ..addNullableString(null)
-        ..startList()
-        ..addBool(true)
-        ..startList()
-        ..addNull()
-        ..endList()
-        ..addNullableBool(null)
-        ..endList()
-        ..addNum(1.0)
-        ..startList()
-        ..endList();
-      expect(
-          serializer.result,
-          equals([
-            1,
-            null,
-            'hello',
-            null,
-            [
-              true,
-              [null],
-              null
-            ],
-            1.0,
-            [],
-          ]));
-      var deserializer = JsonDeserializer(serializer.result);
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectNum(), 1);
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectNullableNum(), null);
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectString(), 'hello');
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectNullableString(), null);
-      expect(deserializer.moveNext(), true);
-
-      deserializer.expectList();
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectBool(), true);
-      expect(deserializer.moveNext(), true);
-
-      deserializer.expectList();
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.checkNull(), true);
-      expect(deserializer.moveNext(), false);
-
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectNullableBool(), null);
-      expect(deserializer.moveNext(), false);
-
-      // Have to move the parent again to advance it past the list entry.
-      expect(deserializer.moveNext(), true);
-      expect(deserializer.expectNum(), 1.0);
-      expect(deserializer.moveNext(), true);
-
-      deserializer.expectList();
-      expect(deserializer.moveNext(), false);
-
-      expect(deserializer.moveNext(), false);
-    });
-
-    test('remote instances', () async {
-      var string = NamedTypeAnnotationImpl(
-          id: RemoteInstance.uniqueId,
-          isNullable: false,
-          identifier:
-              IdentifierImpl(id: RemoteInstance.uniqueId, name: 'String'),
-          typeArguments: const []);
-      var foo = NamedTypeAnnotationImpl(
-          id: RemoteInstance.uniqueId,
-          isNullable: false,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
-          typeArguments: [string]);
-      Object? serializedFoo;
-      var serializer = JsonSerializer();
-
-      withSerializationMode(SerializationMode.server, () {
-        foo.serialize(serializer);
-        serializedFoo = serializer.result;
-        var response = roundTrip(serializedFoo);
-        var deserializer = JsonDeserializer(response as List<Object?>);
-        var instance = RemoteInstance.deserialize(deserializer);
-        expect(instance, foo);
-      });
-    });
-
-    group('declarations', () {
-      final barType = NamedTypeAnnotationImpl(
-          id: RemoteInstance.uniqueId,
-          isNullable: false,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Bar'),
-          typeArguments: []);
-      final fooType = NamedTypeAnnotationImpl(
-          id: RemoteInstance.uniqueId,
-          isNullable: true,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
-          typeArguments: [barType]);
-
-      test('NamedTypeAnnotation', () {
-        expectSerializationEquality(fooType);
-      });
-
-      final fooNamedParam = ParameterDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          defaultValue: null,
-          isNamed: true,
-          isRequired: true,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'foo'),
-          type: fooType);
-
-      final barPositionalParam = ParameterDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          defaultValue: Code.fromString('const Bar()'),
-          isNamed: false,
-          isRequired: false,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'bar'),
-          type: barType);
-
-      final zapTypeParam = TypeParameterDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Zap'),
-          bounds: barType);
-
-      // Transitively tests `TypeParameterDeclaration` and
-      // `ParameterDeclaration`.
-      test('FunctionTypeAnnotation', () {
-        var functionType = FunctionTypeAnnotationImpl(
-          id: RemoteInstance.uniqueId,
-          isNullable: true,
-          namedParameters: [fooNamedParam],
-          positionalParameters: [barPositionalParam],
-          returnType: fooType,
-          typeParameters: [zapTypeParam],
-        );
-        expectSerializationEquality(functionType);
-      });
-
-      test('FunctionDeclaration', () {
-        var function = FunctionDeclarationImpl(
-            id: RemoteInstance.uniqueId,
-            identifier:
-                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'name'),
-            isAbstract: true,
-            isExternal: false,
-            isGetter: true,
-            isSetter: false,
-            namedParameters: [],
-            positionalParameters: [],
-            returnType: fooType,
-            typeParameters: []);
-        expectSerializationEquality(function);
-      });
-
-      test('MethodDeclaration', () {
-        var method = MethodDeclarationImpl(
-            id: RemoteInstance.uniqueId,
-            identifier:
-                IdentifierImpl(id: RemoteInstance.uniqueId, name: 'zorp'),
-            isAbstract: false,
-            isExternal: false,
-            isGetter: false,
-            isSetter: true,
-            namedParameters: [fooNamedParam],
-            positionalParameters: [barPositionalParam],
-            returnType: fooType,
-            typeParameters: [zapTypeParam],
-            definingClass: fooType.identifier);
-        expectSerializationEquality(method);
-      });
-
-      test('ConstructorDeclaration', () {
-        var constructor = ConstructorDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'new'),
-          isAbstract: false,
-          isExternal: false,
-          isGetter: false,
-          isSetter: false,
-          namedParameters: [fooNamedParam],
-          positionalParameters: [barPositionalParam],
-          returnType: fooType,
-          typeParameters: [zapTypeParam],
-          definingClass: fooType.identifier,
-          isFactory: true,
-        );
-        expectSerializationEquality(constructor);
-      });
-
-      test('VariableDeclaration', () {
-        var bar = VariableDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'bar'),
-          isExternal: true,
-          isFinal: false,
-          isLate: true,
-          initializer: ExpressionCode.fromString('Bar()'),
-          type: barType,
-        );
-        expectSerializationEquality(bar);
-      });
-
-      test('FieldDeclaration', () {
-        var bar = FieldDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'bar'),
-          isExternal: false,
-          isFinal: true,
-          isLate: false,
-          initializer: null,
-          type: barType,
-          definingClass: fooType.identifier,
-        );
-        expectSerializationEquality(bar);
-      });
-
-      var objectType = NamedTypeAnnotationImpl(
-        id: RemoteInstance.uniqueId,
-        identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Object'),
-        isNullable: false,
-        typeArguments: [],
-      );
-      var serializableType = NamedTypeAnnotationImpl(
-        id: RemoteInstance.uniqueId,
-        identifier:
-            IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Serializable'),
-        isNullable: false,
-        typeArguments: [],
-      );
-
-      test('ClassDeclaration', () {
-        var fooClass = ClassDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
-          interfaces: [barType],
-          isAbstract: true,
-          isExternal: false,
-          mixins: [serializableType],
-          superclass: objectType,
-          typeParameters: [zapTypeParam],
-        );
-        expectSerializationEquality(fooClass);
-      });
-
-      test('TypeAliasDeclaration', () {
-        var typeAlias = TypeAliasDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          identifier:
-              IdentifierImpl(id: RemoteInstance.uniqueId, name: 'FooOfBar'),
-          typeParameters: [zapTypeParam],
-          aliasedType: NamedTypeAnnotationImpl(
-              id: RemoteInstance.uniqueId,
-              isNullable: false,
-              identifier:
-                  IdentifierImpl(id: RemoteInstance.uniqueId, name: 'Foo'),
-              typeArguments: [barType]),
-        );
-        expectSerializationEquality(typeAlias);
-      });
-    });
-  });
-}
-
-/// Serializes [serializable] in server mode, then deserializes it in client
-/// mode, and checks that all the fields are the same.
-void expectSerializationEquality(Serializable serializable) {
-  var serializer = JsonSerializer();
-  withSerializationMode(SerializationMode.server, () {
-    serializable.serialize(serializer);
-  });
-  withSerializationMode(SerializationMode.client, () {
-    var deserializer = JsonDeserializer(serializer.result);
-    var deserialized = (deserializer..moveNext()).expectRemoteInstance();
-    if (deserialized is Declaration) {
-      expect(serializable, deepEqualsDeclaration(deserialized));
-    } else if (deserialized is TypeAnnotation) {
-      expect(serializable, deepEqualsTypeAnnotation(deserialized));
-    } else {
-      throw new UnsupportedError('Unsupported object type $deserialized');
-    }
-  });
-}
-
-/// Deserializes [serialized] in client mode and sends it back.
-Object? roundTrip<Declaration>(Object? serialized) {
-  return withSerializationMode(SerializationMode.client, () {
-    var deserializer = JsonDeserializer(serialized as List<Object?>);
-    var instance =
-        RemoteInstance.deserialize<NamedTypeAnnotationImpl>(deserializer);
-    var serializer = JsonSerializer();
-    instance.serialize(serializer);
-    return serializer.result;
-  });
-}
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart
deleted file mode 100644
index 80136bd..0000000
--- a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart
+++ /dev/null
@@ -1,92 +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';
-
-import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
-import 'package:_fe_analyzer_shared/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart'
-    as mirrorExecutor;
-
-import 'package:test/test.dart';
-
-import '../util.dart';
-
-void main() {
-  late MacroExecutor executor;
-  late File simpleMacroFile;
-
-  setUpAll(() {
-    // We support running from either the root of the SDK or the package root.
-    simpleMacroFile = File(
-        'pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart');
-    if (!simpleMacroFile.existsSync()) {
-      simpleMacroFile =
-          File('test/macros/isolate_mirror_executor/simple_macro.dart');
-    }
-  });
-
-  setUp(() async {
-    executor = await mirrorExecutor.start();
-  });
-
-  tearDown(() {
-    executor.close();
-  });
-
-  test('can load macros and create instances', () async {
-    var clazzId =
-        await executor.loadMacro(simpleMacroFile.absolute.uri, 'SimpleMacro');
-    expect(clazzId, isNotNull, reason: 'Can load a macro.');
-
-    var instanceId =
-        await executor.instantiateMacro(clazzId, '', Arguments([], {}));
-    expect(instanceId, isNotNull,
-        reason: 'Can create an instance with no arguments.');
-
-    instanceId =
-        await executor.instantiateMacro(clazzId, '', Arguments([1, 2], {}));
-    expect(instanceId, isNotNull,
-        reason: 'Can create an instance with positional arguments.');
-
-    instanceId = await executor.instantiateMacro(
-        clazzId, 'named', Arguments([], {'x': 1, 'y': 2}));
-    expect(instanceId, isNotNull,
-        reason: 'Can create an instance with named arguments.');
-
-    var returnType = NamedTypeAnnotationImpl(
-        id: RemoteInstance.uniqueId,
-        identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'String'),
-        isNullable: false,
-        typeArguments: const []);
-    var definitionResult = await executor.executeDefinitionsPhase(
-        instanceId,
-        FunctionDeclarationImpl(
-          id: RemoteInstance.uniqueId,
-          isAbstract: false,
-          isExternal: false,
-          isGetter: false,
-          isSetter: false,
-          identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'foo'),
-          namedParameters: [],
-          positionalParameters: [],
-          returnType: returnType,
-          typeParameters: [],
-        ),
-        TestTypeResolver({
-          returnType:
-              TestNamedStaticType(returnType.identifier, 'dart:core', [])
-        }),
-        FakeClassIntrospector(),
-        FakeTypeDeclarationResolver());
-    expect(definitionResult.augmentations, hasLength(1));
-    expect(definitionResult.augmentations.first.debugString().toString(),
-        equalsIgnoringWhitespace('''
-            augment String foo() {
-              print('x: 1, y: 2');
-              return augment super();
-            }'''));
-  });
-}
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart b/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart
deleted file mode 100644
index 7972041..0000000
--- a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart
+++ /dev/null
@@ -1,43 +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';
-
-/// A very simple macro that annotates functions (or getters) with no arguments
-/// and adds a print statement to the top of them.
-class SimpleMacro implements FunctionDefinitionMacro {
-  final int? x;
-  final int? y;
-
-  SimpleMacro([this.x, this.y]);
-
-  SimpleMacro.named({this.x, this.y});
-
-  @override
-  FutureOr<void> buildDefinitionForFunction(
-      FunctionDeclaration method, FunctionDefinitionBuilder builder) async {
-    if (method.namedParameters
-        .followedBy(method.positionalParameters)
-        .isNotEmpty) {
-      throw ArgumentError(
-          'This macro can only be run on functions with no arguments!');
-    }
-
-    // Test the type resolver and static type interfaces
-    var staticReturnType = await builder.instantiateType(method.returnType);
-    if (!(await staticReturnType.isExactly(staticReturnType))) {
-      throw StateError('The return type should be exactly equal to itself!');
-    }
-    if (!(await staticReturnType.isSubtypeOf(staticReturnType))) {
-      throw StateError('The return type should be a subtype of itself!');
-    }
-
-    builder.augment(FunctionBodyCode.fromString('''{
-      print('x: $x, y: $y');
-      return augment super();
-    }'''));
-  }
-}
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolated_executor/isolated_executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/isolated_executor/isolated_executor_test.dart
deleted file mode 100644
index cdd1725..0000000
--- a/pkg/_fe_analyzer_shared/test/macros/isolated_executor/isolated_executor_test.dart
+++ /dev/null
@@ -1,448 +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';
-import 'dart:isolate';
-
-import 'package:_fe_analyzer_shared/src/macros/bootstrap.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/isolated_executor/isolated_executor.dart'
-    as isolatedExecutor;
-
-import 'package:test/test.dart';
-
-import '../util.dart';
-
-void main() {
-  late MacroExecutor executor;
-  late File kernelOutputFile;
-  final macroName = 'SimpleMacro';
-  late MacroInstanceIdentifier instanceId;
-  late Uri macroUri;
-  late File simpleMacroFile;
-  late Directory tmpDir;
-
-  setUpAll(() async {
-    // We support running from either the root of the SDK or the package root.
-    simpleMacroFile = File(
-        'pkg/_fe_analyzer_shared/test/macros/isolated_executor/simple_macro.dart');
-    if (!simpleMacroFile.existsSync()) {
-      simpleMacroFile = File('test/macros/isolated_executor/simple_macro.dart');
-    }
-    executor = await isolatedExecutor.start();
-    tmpDir = Directory.systemTemp.createTempSync('isolated_executor_test');
-    macroUri = simpleMacroFile.absolute.uri;
-
-    var bootstrapContent = bootstrapMacroIsolate({
-      macroUri.toString(): {
-        macroName: ['', 'named']
-      }
-    });
-    var bootstrapFile = File(tmpDir.uri.resolve('main.dart').toFilePath())
-      ..writeAsStringSync(bootstrapContent);
-    kernelOutputFile = File(tmpDir.uri.resolve('main.dart.dill').toFilePath());
-    var buildSnapshotResult = await Process.run(Platform.resolvedExecutable, [
-      '--snapshot=${kernelOutputFile.uri.toFilePath()}',
-      '--snapshot-kind=kernel',
-      '--packages=${(await Isolate.packageConfig)!}',
-      bootstrapFile.uri.toFilePath(),
-    ]);
-    expect(buildSnapshotResult.exitCode, 0,
-        reason: 'stdout: ${buildSnapshotResult.stdout}\n'
-            'stderr: ${buildSnapshotResult.stderr}');
-
-    var clazzId = await executor.loadMacro(macroUri, macroName,
-        precompiledKernelUri: kernelOutputFile.uri);
-    expect(clazzId, isNotNull, reason: 'Can load a macro.');
-
-    instanceId =
-        await executor.instantiateMacro(clazzId, '', Arguments([], {}));
-    expect(instanceId, isNotNull,
-        reason: 'Can create an instance with no arguments.');
-
-    instanceId =
-        await executor.instantiateMacro(clazzId, '', Arguments([1, 2], {}));
-    expect(instanceId, isNotNull,
-        reason: 'Can create an instance with positional arguments.');
-
-    instanceId = await executor.instantiateMacro(
-        clazzId, 'named', Arguments([], {'x': 1, 'y': 2}));
-    expect(instanceId, isNotNull,
-        reason: 'Can create an instance with named arguments.');
-  });
-
-  tearDownAll(() {
-    if (tmpDir.existsSync()) tmpDir.deleteSync(recursive: true);
-    executor.close();
-  });
-
-  group('run macros', () {
-    group('in the types phase', () {
-      test('on functions', () async {
-        var result =
-            await executor.executeTypesPhase(instanceId, Fixtures.myFunction);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedByMyFunction {}'));
-      });
-
-      test('on methods', () async {
-        var result =
-            await executor.executeTypesPhase(instanceId, Fixtures.myMethod);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedByMyMethod {}'));
-      });
-
-      test('on getters', () async {
-        var result = await executor.executeTypesPhase(
-          instanceId,
-          Fixtures.myVariableGetter,
-        );
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedByMyVariableGetter {}'));
-      });
-
-      test('on setters', () async {
-        var result = await executor.executeTypesPhase(
-          instanceId,
-          Fixtures.myVariableSetter,
-        );
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedByMyVariableSetter {}'));
-      });
-
-      test('on variables', () async {
-        var result = await executor.executeTypesPhase(
-          instanceId,
-          Fixtures.myVariable,
-        );
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedBy_myVariable {}'));
-      });
-
-      test('on constructors', () async {
-        var result = await executor.executeTypesPhase(
-            instanceId, Fixtures.myConstructor);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedByMyConstructor {}'));
-      });
-
-      test('on fields', () async {
-        var result =
-            await executor.executeTypesPhase(instanceId, Fixtures.myField);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('class GeneratedByMyField {}'));
-      });
-
-      test('on classes', () async {
-        var result =
-            await executor.executeTypesPhase(instanceId, Fixtures.myClass);
-        expect(
-            result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace(
-                'class MyClassBuilder implements Builder<MyClass> {}'));
-      });
-    });
-
-    group('in the declaration phase', () {
-      test('on functions', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myFunction,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(
-            result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace(
-                'String delegateMyFunction() => myFunction();'));
-      });
-
-      test('on methods', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myMethod,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(
-            result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace(
-                'String delegateMemberMyMethod() => myMethod();'));
-      });
-
-      test('on constructors', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myConstructor,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-              augment class MyClass {
-                factory MyClass.myConstructorDelegate() => MyClass.myConstructor();
-              }'''));
-      });
-
-      test('on getters', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myVariableGetter,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-                String get delegateMyVariable => myVariable;'''));
-      });
-
-      test('on setters', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myVariableSetter,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-                void set delegateMyVariable(String value) => myVariable = value;'''));
-      });
-
-      test('on variables', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myVariable,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-                String get delegate_myVariable => _myVariable;'''));
-      });
-
-      test('on fields', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myField,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-              augment class MyClass {
-                String get delegateMyField => myField;
-              }'''));
-      });
-
-      test('on classes', () async {
-        var result = await executor.executeDeclarationsPhase(
-            instanceId,
-            Fixtures.myClass,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-              augment class MyClass {
-                static const List<String> fieldNames = ['myField',];
-              }'''));
-      });
-    });
-
-    group('in the definition phase', () {
-      test('on functions', () async {
-        var result = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myFunction,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-                augment String myFunction() {
-                  print('isAbstract: false');
-                  print('isExternal: false');
-                  print('isGetter: false');
-                  print('isSetter: false');
-                  print('returnType: String');
-                  return augment super();
-                }'''));
-      });
-
-      test('on methods', () async {
-        var definitionResult = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myMethod,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(definitionResult.augmentations, hasLength(2));
-        var augmentationStrings = definitionResult.augmentations
-            .map((a) => a.debugString().toString())
-            .toList();
-        expect(augmentationStrings, unorderedEquals(methodDefinitionMatchers));
-      });
-
-      test('on constructors', () async {
-        var definitionResult = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myConstructor,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(definitionResult.augmentations, hasLength(1));
-        expect(definitionResult.augmentations.first.debugString().toString(),
-            constructorDefinitionMatcher);
-      });
-
-      test('on getters', () async {
-        var result = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myVariableGetter,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-                augment String myVariable() {
-                  print('isAbstract: false');
-                  print('isExternal: false');
-                  print('isGetter: true');
-                  print('isSetter: false');
-                  print('returnType: String');
-                  return augment super;
-                }'''));
-      });
-
-      test('on setters', () async {
-        var result = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myVariableSetter,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(result.augmentations.single.debugString().toString(),
-            equalsIgnoringWhitespace('''
-                augment void myVariable(String value, ) {
-                  print('isAbstract: false');
-                  print('isExternal: false');
-                  print('isGetter: false');
-                  print('isSetter: true');
-                  print('returnType: void');
-                  print('positionalParam: String value');
-                  return augment super = value;
-                }'''));
-      });
-
-      test('on variables', () async {
-        var result = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myVariable,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(
-            result.augmentations.map((a) => a.debugString().toString()),
-            unorderedEquals([
-              equalsIgnoringWhitespace('''
-                augment String get _myVariable {
-                  print('parentClass: ');
-                  print('isExternal: false');
-                  print('isFinal: true');
-                  print('isLate: false');
-                  return augment super;
-                }'''),
-              equalsIgnoringWhitespace('''
-                augment set _myVariable(String value) {
-                  augment super = value;
-                }'''),
-              equalsIgnoringWhitespace('''
-                augment final String _myVariable = '';
-                '''),
-            ]));
-      });
-
-      test('on fields', () async {
-        var definitionResult = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myField,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        expect(definitionResult.augmentations, hasLength(1));
-        expect(definitionResult.augmentations.first.debugString().toString(),
-            fieldDefinitionMatcher);
-      });
-
-      test('on classes', () async {
-        var definitionResult = await executor.executeDefinitionsPhase(
-            instanceId,
-            Fixtures.myClass,
-            Fixtures.testTypeResolver,
-            Fixtures.testClassIntrospector,
-            Fixtures.testTypeDeclarationResolver);
-        var augmentationStrings = definitionResult.augmentations
-            .map((a) => a.debugString().toString())
-            .toList();
-        expect(
-            augmentationStrings,
-            unorderedEquals([
-              ...methodDefinitionMatchers,
-              constructorDefinitionMatcher,
-              fieldDefinitionMatcher
-            ]));
-      });
-    });
-  });
-}
-
-final constructorDefinitionMatcher = equalsIgnoringWhitespace('''
-augment class MyClass {
-  augment MyClass.myConstructor() {
-    print('definingClass: MyClass');
-    print('isFactory: false');
-    print('isAbstract: false');
-    print('isExternal: false');
-    print('isGetter: false');
-    print('isSetter: false');
-    print('returnType: MyClass');
-    return augment super();
-  }
-}''');
-
-final fieldDefinitionMatcher = equalsIgnoringWhitespace('''
-augment class MyClass {
-  augment String get myField {
-    print('parentClass: MyClass');
-    print('isExternal: false');
-    print('isFinal: false');
-    print('isLate: false');
-    return augment super;
-  }
-  augment set myField(String value) {
-    augment super = value;
-  }
-}''');
-
-final methodDefinitionMatchers = [
-  equalsIgnoringWhitespace('''
-    augment class MyClass {
-      augment String myMethod() {
-        print('definingClass: MyClass');
-        print('isAbstract: false');
-        print('isExternal: false');
-        print('isGetter: false');
-        print('isSetter: false');
-        print('returnType: String');
-        return augment super();
-      }
-    }
-    '''),
-  equalsIgnoringWhitespace('''
-    augment class MyClass {
-      augment String myMethod() {
-        print('x: 1, y: 2');
-        print('parentClass: MyClass');
-        print('superClass: MySuperclass');
-        print('interface: MyInterface');
-        print('mixin: MyMixin');
-        print('field: myField');
-        print('method: myMethod');
-        print('constructor: myConstructor');
-        return augment super();
-      }
-    }'''),
-];
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolated_executor/simple_macro.dart b/pkg/_fe_analyzer_shared/test/macros/isolated_executor/simple_macro.dart
deleted file mode 100644
index 610c83e..0000000
--- a/pkg/_fe_analyzer_shared/test/macros/isolated_executor/simple_macro.dart
+++ /dev/null
@@ -1,402 +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';
-
-/// A very simple macro that augments any declaration it is given, usually
-/// adding print statements and inlining values from the declaration object
-/// for comparision with expected values in tests.
-///
-/// When applied to [MethodDeclaration]s there is some extra work that happens
-/// to validate the introspection APIs work as expected.
-class SimpleMacro
-    implements
-        ClassTypesMacro,
-        ClassDeclarationsMacro,
-        ClassDefinitionMacro,
-        ConstructorTypesMacro,
-        ConstructorDeclarationsMacro,
-        ConstructorDefinitionMacro,
-        FieldTypesMacro,
-        FieldDeclarationsMacro,
-        FieldDefinitionMacro,
-        FunctionTypesMacro,
-        FunctionDeclarationsMacro,
-        FunctionDefinitionMacro,
-        MethodTypesMacro,
-        MethodDeclarationsMacro,
-        MethodDefinitionMacro,
-        VariableTypesMacro,
-        VariableDeclarationsMacro,
-        VariableDefinitionMacro {
-  final int? x;
-  final int? y;
-
-  SimpleMacro([this.x, this.y]);
-
-  SimpleMacro.named({this.x, this.y});
-
-  @override
-  FutureOr<void> buildDeclarationsForClass(
-      ClassDeclaration clazz, ClassMemberDeclarationBuilder builder) async {
-    var fields = await builder.fieldsOf(clazz);
-    builder.declareInClass(DeclarationCode.fromParts([
-      'static const List<String> fieldNames = [',
-      for (var field in fields) "'${field.identifier.name}',",
-      '];',
-    ]));
-  }
-
-  @override
-  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(
-        'factory $className.${constructorName}Delegate() => '
-        '$className.$constructorName();'));
-  }
-
-  @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,
-      if (function.isGetter) ' get' else if (function.isSetter) ' set ',
-      ' delegate${functionName.capitalize()}',
-      if (!function.isGetter) ...[
-        '(',
-        if (function.isSetter) ...[
-          function.positionalParameters.first.type.code,
-          ' value',
-        ],
-        ')',
-      ],
-      ' => ${functionName}',
-      function.isGetter
-          ? ''
-          : function.isSetter
-              ? ' = value'
-              : '()',
-      ';',
-    ]));
-  }
-
-  @override
-  FutureOr<void> buildDeclarationsForMethod(
-      MethodDeclaration method, ClassMemberDeclarationBuilder builder) {
-    if (method.positionalParameters.isNotEmpty ||
-        method.namedParameters.isNotEmpty) {
-      throw new UnsupportedError('Can only run on method with no parameters!');
-    }
-    var methodName = method.identifier.name;
-    builder.declareInLibrary(DeclarationCode.fromParts([
-      method.returnType.code,
-      ' delegateMember${methodName.capitalize()}() => $methodName();',
-    ]));
-  }
-
-  @override
-  FutureOr<void> buildDeclarationsForVariable(
-      VariableDeclaration variable, DeclarationBuilder builder) {
-    var variableName = variable.identifier.name;
-    builder.declareInLibrary(DeclarationCode.fromParts([
-      variable.type.code,
-      ' get delegate${variableName.capitalize()} => $variableName;',
-    ]));
-  }
-
-  @override
-  FutureOr<void> buildDeclarationsForField(
-      FieldDeclaration field, ClassMemberDeclarationBuilder builder) {
-    var fieldName = field.identifier.name;
-    builder.declareInClass(DeclarationCode.fromParts([
-      field.type.code,
-      ' get delegate${fieldName.capitalize()} => $fieldName;',
-    ]));
-  }
-
-  @override
-  Future<void> buildDefinitionForClass(
-      ClassDeclaration clazz, ClassDefinitionBuilder builder) async {
-    // Apply ourself to all our members
-    var fields = (await builder.fieldsOf(clazz));
-    for (var field in fields) {
-      await buildDefinitionForField(
-          field, await builder.buildField(field.identifier));
-    }
-    var methods = (await builder.methodsOf(clazz));
-    for (var method in methods) {
-      await buildDefinitionForMethod(
-          method, await builder.buildMethod(method.identifier));
-    }
-    var constructors = (await builder.constructorsOf(clazz));
-    for (var constructor in constructors) {
-      await buildDefinitionForConstructor(
-          constructor, await builder.buildConstructor(constructor.identifier));
-    }
-  }
-
-  @override
-  Future<void> buildDefinitionForConstructor(ConstructorDeclaration constructor,
-      ConstructorDefinitionBuilder builder) async {
-    var clazz = await builder.declarationOf(constructor.definingClass)
-        as ClassDeclaration;
-    var fields = (await builder.fieldsOf(clazz));
-
-    builder.augment(
-      body: _buildFunctionAugmentation(constructor),
-      initializers: [
-        for (var field in fields)
-          // TODO: Compare against actual `int` type.
-          if (field.isFinal &&
-              (field.type as NamedTypeAnnotation).identifier.name == 'int')
-            Code.fromParts([field.identifier, ' = ${x!}']),
-      ],
-    );
-  }
-
-  @override
-  Future<void> buildDefinitionForField(
-          FieldDeclaration field, VariableDefinitionBuilder builder) async =>
-      buildDefinitionForVariable(field, builder);
-
-  @override
-  Future<void> buildDefinitionForFunction(
-      FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
-    builder.augment(_buildFunctionAugmentation(function));
-  }
-
-  @override
-  Future<void> buildDefinitionForMethod(
-      MethodDeclaration method, FunctionDefinitionBuilder builder) async {
-    await buildDefinitionForFunction(method, builder);
-
-    // Test the type declaration resolver
-    var parentClass =
-        await builder.declarationOf(method.definingClass) as ClassDeclaration;
-    // Should be able to find ourself in the methods of the parent class.
-    (await builder.methodsOf(parentClass))
-        .singleWhere((m) => m.identifier == method.identifier);
-
-    // Test the class introspector
-    var superClass = (await builder.superclassOf(parentClass))!;
-    var interfaces = (await builder.interfacesOf(parentClass));
-    var mixins = (await builder.mixinsOf(parentClass));
-    var fields = (await builder.fieldsOf(parentClass));
-    var methods = (await builder.methodsOf(parentClass));
-    var constructors = (await builder.constructorsOf(parentClass));
-
-    // Test the type resolver and static type interfaces
-    var staticReturnType = await builder.instantiateType(method.returnType);
-    if (!(await staticReturnType.isExactly(staticReturnType))) {
-      throw StateError('The return type should be exactly equal to itself!');
-    }
-    if (!(await staticReturnType.isSubtypeOf(staticReturnType))) {
-      throw StateError('The return type should be a subtype of itself!');
-    }
-
-    // TODO: Use `builder.instantiateCode` instead once implemented.
-    var classType =
-        await builder.instantiateType(constructors.first.returnType);
-    if (await staticReturnType.isExactly(classType)) {
-      throw StateError(
-          'The return type should not be exactly equal to the class type');
-    }
-    if (await staticReturnType.isSubtypeOf(classType)) {
-      throw StateError(
-          'The return type should not be a subtype of the class type!');
-    }
-
-    builder.augment(FunctionBodyCode.fromParts([
-      '''{
-      print('x: $x, y: $y');
-      print('parentClass: ${parentClass.identifier.name}');
-      print('superClass: ${superClass.identifier.name}');''',
-      for (var interface in interfaces)
-        "\n      print('interface: ${interface.identifier.name}');",
-      for (var mixin in mixins)
-        "\n      print('mixin: ${mixin.identifier.name}');",
-      for (var field in fields)
-        "\n      print('field: ${field.identifier.name}');",
-      for (var method in methods)
-        "\n      print('method: ${method.identifier.name}');",
-      for (var constructor in constructors)
-        "\n      print('constructor: ${constructor.identifier.name}');",
-      '''
-\n      return augment super();
-    }''',
-    ]));
-  }
-
-  @override
-  Future<void> buildDefinitionForVariable(
-      VariableDeclaration variable, VariableDefinitionBuilder builder) async {
-    var definingClass =
-        variable is FieldDeclaration ? variable.definingClass.name : '';
-    builder.augment(
-      getter: DeclarationCode.fromParts([
-        variable.type.code,
-        ' get ',
-        variable.identifier.name,
-        ''' {
-          print('parentClass: $definingClass');
-          print('isExternal: ${variable.isExternal}');
-          print('isFinal: ${variable.isFinal}');
-          print('isLate: ${variable.isLate}');
-          return augment super;
-        }''',
-      ]),
-      setter: DeclarationCode.fromParts([
-        'set ',
-        variable.identifier.name,
-        '(',
-        variable.type.code,
-        ' value) { augment super = value; }'
-      ]),
-      initializer: variable.initializer,
-    );
-  }
-
-  @override
-  FutureOr<void> buildTypesForClass(
-      ClassDeclaration clazz, TypeBuilder builder) {
-    List<Object> _buildTypeParam(
-        TypeParameterDeclaration typeParam, bool isFirst) {
-      return [
-        if (!isFirst) ', ',
-        typeParam.identifier.name,
-        if (typeParam.bounds != null) ...[
-          ' extends ',
-          typeParam.bounds!.code,
-        ]
-      ];
-    }
-
-    builder.declareType(DeclarationCode.fromParts([
-      'class ${clazz.identifier.name}Builder',
-      if (clazz.typeParameters.isNotEmpty) ...[
-        '<',
-        ..._buildTypeParam(clazz.typeParameters.first, true),
-        for (var typeParam in clazz.typeParameters.skip(1))
-          ..._buildTypeParam(typeParam, false),
-        '>',
-      ],
-      ' implements Builder<',
-      clazz.identifier,
-      if (clazz.typeParameters.isNotEmpty) ...[
-        '<',
-        clazz.typeParameters.first.identifier.name,
-        for (var typeParam in clazz.typeParameters)
-          ', ${typeParam.identifier.name}',
-        '>',
-      ],
-      '> {}'
-    ]));
-  }
-
-  @override
-  FutureOr<void> buildTypesForConstructor(
-      ConstructorDeclaration constructor, TypeBuilder builder) {
-    builder.declareType(DeclarationCode.fromString(
-        'class GeneratedBy${constructor.identifier.name.capitalize()} {}'));
-  }
-
-  @override
-  FutureOr<void> buildTypesForField(
-      FieldDeclaration field, TypeBuilder builder) {
-    builder.declareType(DeclarationCode.fromString(
-        'class GeneratedBy${field.identifier.name.capitalize()} {}'));
-  }
-
-  @override
-  FutureOr<void> buildTypesForFunction(
-      FunctionDeclaration function, TypeBuilder builder) {
-    var suffix = function.isGetter
-        ? 'Getter'
-        : function.isSetter
-            ? 'Setter'
-            : '';
-    builder.declareType(DeclarationCode.fromString(
-        'class GeneratedBy${function.identifier.name.capitalize()}'
-        '$suffix {}'));
-  }
-
-  @override
-  FutureOr<void> buildTypesForMethod(
-      MethodDeclaration method, TypeBuilder builder) {
-    builder.declareType(DeclarationCode.fromString(
-        'class GeneratedBy${method.identifier.name.capitalize()} {}'));
-  }
-
-  @override
-  FutureOr<void> buildTypesForVariable(
-      VariableDeclaration variable, TypeBuilder builder) {
-    builder.declareType(DeclarationCode.fromString(
-        'class GeneratedBy${variable.identifier.name.capitalize()} {}'));
-  }
-}
-
-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",
-      '''
-      print('isAbstract: ${function.isAbstract}');
-      print('isExternal: ${function.isExternal}');
-      print('isGetter: ${function.isGetter}');
-      print('isSetter: ${function.isSetter}');
-      print('returnType: ''',
-      function.returnType.code,
-      "');\n",
-      for (var param in function.positionalParameters) ...[
-        "print('positionalParam: ",
-        param.type.code,
-        ' ${param.identifier.name}',
-        if (param.defaultValue != null) ...[' = ', param.defaultValue!],
-        "');\n",
-      ],
-      for (var param in function.namedParameters) ...[
-        "print('namedParam: ",
-        param.type.code,
-        ' ${param.identifier.name}',
-        if (param.defaultValue != null) ...[' = ', param.defaultValue!],
-        "');\n",
-      ],
-      for (var param in function.typeParameters) ...[
-        "print('typeParam: ${param.identifier.name} ",
-        if (param.bounds != null) param.bounds!.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 831a4f8..edb0788 100644
--- a/pkg/_fe_analyzer_shared/test/macros/util.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/util.dart
@@ -5,8 +5,9 @@
 import 'dart:mirrors';
 
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+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';
@@ -61,6 +62,8 @@
       superclass[clazz];
 }
 
+class FakeIdentifierResolver extends Fake implements IdentifierResolver {}
+
 class FakeTypeDeclarationResolver extends Fake
     implements TypeDeclarationResolver {}
 
@@ -76,24 +79,18 @@
 }
 
 class TestTypeResolver implements TypeResolver {
-  final Map<TypeAnnotation, StaticType> staticTypes;
+  final Map<Identifier, StaticType> staticTypes;
 
   TestTypeResolver(this.staticTypes);
 
   @override
-  Future<StaticType> instantiateType(
-      covariant TypeAnnotation typeAnnotation) async {
-    return staticTypes[typeAnnotation]!;
-  }
-
-  @override
-  Future<StaticType> instantiateCode(ExpressionCode code) {
-    // TODO: implement instantiateCode
-    throw UnimplementedError();
+  Future<StaticType> resolve(covariant TypeAnnotationCode type) async {
+    assert(type.parts.length == 1);
+    return staticTypes[type.parts.first]!;
   }
 }
 
-// Doesn't handle generics etc but thats ok for now
+/// Doesn't handle generics etc but thats ok for now
 class TestNamedStaticType implements NamedStaticType {
   final IdentifierImpl identifier;
   final String library;
@@ -114,6 +111,24 @@
       (library == other.library && identifier.name == other.identifier.name);
 }
 
+/// An identifier that knows the resolved version of itself.
+class TestIdentifier extends IdentifierImpl {
+  final ResolvedIdentifier resolved;
+
+  TestIdentifier({
+    required int id,
+    required String name,
+    required IdentifierKind kind,
+    required Uri uri,
+    required String? staticScope,
+  })  : resolved = ResolvedIdentifier(
+            kind: kind, name: name, staticScope: staticScope, uri: uri),
+        super(
+          id: id,
+          name: name,
+        );
+}
+
 extension DebugCodeString on Code {
   StringBuffer debugString([StringBuffer? buffer]) {
     buffer ??= StringBuffer();
@@ -243,6 +258,7 @@
       isAbstract: false,
       isExternal: false,
       isGetter: false,
+      isOperator: false,
       isSetter: false,
       namedParameters: [],
       positionalParameters: [],
@@ -252,7 +268,6 @@
       id: RemoteInstance.uniqueId,
       identifier:
           IdentifierImpl(id: RemoteInstance.uniqueId, name: '_myVariable'),
-      initializer: ExpressionCode.fromString("''"),
       isExternal: false,
       isFinal: true,
       isLate: false,
@@ -264,6 +279,7 @@
       isAbstract: false,
       isExternal: false,
       isGetter: true,
+      isOperator: false,
       isSetter: false,
       namedParameters: [],
       positionalParameters: [],
@@ -276,6 +292,7 @@
       isAbstract: false,
       isExternal: false,
       isGetter: false,
+      isOperator: false,
       isSetter: true,
       namedParameters: [],
       positionalParameters: [
@@ -283,7 +300,6 @@
             id: RemoteInstance.uniqueId,
             identifier:
                 IdentifierImpl(id: RemoteInstance.uniqueId, name: 'value'),
-            defaultValue: null,
             isNamed: false,
             isRequired: true,
             type: stringType)
@@ -330,6 +346,7 @@
       isAbstract: false,
       isExternal: false,
       isGetter: false,
+      isOperator: false,
       isSetter: false,
       namedParameters: [],
       positionalParameters: [],
@@ -340,12 +357,12 @@
   static final myField = FieldDeclarationImpl(
       id: RemoteInstance.uniqueId,
       identifier: IdentifierImpl(id: RemoteInstance.uniqueId, name: 'myField'),
-      initializer: null,
       isExternal: false,
       isFinal: false,
       isLate: false,
       type: stringType,
-      definingClass: myClassType.identifier);
+      definingClass: myClassType.identifier,
+      isStatic: false);
   static final myInterface = ClassDeclarationImpl(
       id: RemoteInstance.uniqueId,
       identifier: myInterfaceType.identifier,
@@ -361,12 +378,14 @@
       isAbstract: false,
       isExternal: false,
       isGetter: false,
+      isOperator: false,
       isSetter: false,
       namedParameters: [],
       positionalParameters: [],
       returnType: stringType,
       typeParameters: [],
-      definingClass: myClassType.identifier);
+      definingClass: myClassType.identifier,
+      isStatic: false);
   static final myMixin = ClassDeclarationImpl(
       id: RemoteInstance.uniqueId,
       identifier: myMixinType.identifier,
@@ -390,8 +409,9 @@
       myClassType.identifier, 'package:my_package/my_package.dart', []);
 
   static final testTypeResolver = TestTypeResolver({
-    stringType: TestNamedStaticType(stringType.identifier, 'dart:core', []),
-    myClassType: myClassStaticType,
+    stringType.identifier:
+        TestNamedStaticType(stringType.identifier, 'dart:core', []),
+    myClass.identifier: myClassStaticType,
   });
   static final testClassIntrospector = TestClassIntrospector(
     constructors: {
diff --git a/pkg/_js_interop_checks/lib/js_interop_checks.dart b/pkg/_js_interop_checks/lib/js_interop_checks.dart
index e9f6fb0..6dab119 100644
--- a/pkg/_js_interop_checks/lib/js_interop_checks.dart
+++ b/pkg/_js_interop_checks/lib/js_interop_checks.dart
@@ -362,7 +362,7 @@
   /// or a from environment constructor.
   bool _isAllowedExternalUsage(Member member) {
     Uri uri = member.enclosingLibrary.importUri;
-    return uri.scheme == 'dart' &&
+    return uri.isScheme('dart') &&
             _pathsWithAllowedDartExternalUsage.contains(uri.path) ||
         _allowedNativeTestPatterns.any((pattern) => uri.path.contains(pattern));
   }
diff --git a/pkg/analysis_server/OWNERS b/pkg/analysis_server/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/analysis_server/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 560c08b..be632ea 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.9
+  1.32.10
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -236,6 +236,10 @@
   ignoring the item or treating it with some default/fallback handling.
 </p>
 <h3>Changelog</h3>
+<h4>1.32.10</h4>
+<ul>
+  <li>The <tt>MOVE_FILE</tt> refactor now supports moving/renaming folders.</li>
+</ul>
 <h4>1.32.8</h4>
 <ul>
   <li>Added <tt>server.cancelRequest</tt> to allow clients to request cancellation
@@ -969,7 +973,8 @@
         </p>
         <p>
           If a package root is a file, then the analyzer
-          will behave as though that file is a ".packages" file in the
+          will behave as though that file is a
+          ".dart_tool/package_config.json" file in the
           source directory. The effect is the same as specifying the file
           as a "--packages" parameter to the Dart VM when
           executing any Dart file inside the source directory.
@@ -3118,6 +3123,7 @@
   
   
   
+  
 <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
     <p>
       A directive to begin overlaying the contents of a file. The supplied
@@ -3479,6 +3485,27 @@
           The label associated with this range that should be displayed to the
           user.
         </p>
+      </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionCaseMatchingMode">CompletionCaseMatchingMode: String</a></dt><dd>
+    <p>
+      An enumeration of the character case matching modes that the user may set in the client.
+    </p>
+    
+  <dl><dt class="value">FIRST_CHAR</dt><dd>
+        
+        <p>
+          Match the first character case only when filtering completions, the default for this
+          enumeration.
+        </p>
+      </dd><dt class="value">ALL_CHARS</dt><dd>
+        
+        <p>
+          Match all character cases when filtering completion lists.
+        </p>
+      </dd><dt class="value">NONE</dt><dd>
+        
+        <p>
+          Do not match character cases when filtering completion lists.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_CompletionId">CompletionId: String</a></dt><dd>
     
     <p>
@@ -4754,7 +4781,8 @@
   <dl><dt class="field"><b>positions: List&lt;<a href="#type_Position">Position</a>&gt;</b></dt><dd>
         
         <p>
-          The positions of the regions that should be edited simultaneously.
+          The positions of the regions (after applying the relevant edits) that
+          should be edited simultaneously.
         </p>
       </dd><dt class="field"><b>length: int</b></dt><dd>
         
@@ -6044,10 +6072,15 @@
         </p>
       </dd></dl></dd><dt class="refactoring">MOVE_FILE</dt><dd>
     <p>
-      Move the given file and update all of the references to that file
-      and from it. The move operation is supported in general case - for
-      renaming a file in the same folder, moving it to a different folder
-      or both.
+      Move the given file or folder and update all of the references to
+      and from it. The move operation is supported in general case -
+      for renaming an item in the same folder, moving it to a different
+      folder or both.
+
+      Moving or renaming large folders may take time and clients should
+      consider showing an indicator to the user with the ability to
+      cancel the request (which can be done using
+      <tt>server.cancelRequest</tt>).
     </p>
     <p>
       The refactoring must be activated before an actual file moving
@@ -6115,7 +6148,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_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.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>
 
 
 </body></html>
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
index ffba325..5e3a9c5 100644
--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+++ b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
@@ -36,7 +36,6 @@
     aliasedType: aliasedType,
     parameters: elementParameters,
     returnType: elementReturnType,
-    libraryUri: element.library?.source.uri.toString(),
   );
 }
 
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index 3baa946..e8a4e7e 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.9';
+const String PROTOCOL_VERSION = '1.32.10';
 
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
@@ -138,6 +138,8 @@
 const String COMPLETION_NOTIFICATION_RESULTS_RESULTS = 'results';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS = 'completion.getSuggestions';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS2 = 'completion.getSuggestions2';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_COMPLETION_CASE_MATCHING_MODE =
+    'completionCaseMatchingMode';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS2_COMPLETION_MODE =
     'completionMode';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS2_FILE = 'file';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 98395e9..dc2c12a 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -2583,9 +2583,9 @@
   /// the normal package: URI resolution mechanism.
   ///
   /// If a package root is a file, then the analyzer will behave as though that
-  /// file is a ".packages" file in the source directory. The effect is the
-  /// same as specifying the file as a "--packages" parameter to the Dart VM
-  /// when executing any Dart file inside the source directory.
+  /// file is a ".dart_tool/package_config.json" file in the source directory.
+  /// The effect is the same as specifying the file as a "--packages" parameter
+  /// to the Dart VM when executing any Dart file inside the source directory.
   ///
   /// Files in any directories that are not overridden by this mapping have
   /// their package: URI's resolved using the normal pubspec.yaml mechanism. If
@@ -4215,6 +4215,68 @@
       );
 }
 
+/// CompletionCaseMatchingMode
+///
+/// enum {
+///   FIRST_CHAR
+///   ALL_CHARS
+///   NONE
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionCaseMatchingMode implements Enum {
+  /// Match the first character case only when filtering completions, the
+  /// default for this enumeration.
+  static const CompletionCaseMatchingMode FIRST_CHAR =
+      CompletionCaseMatchingMode._('FIRST_CHAR');
+
+  /// Match all character cases when filtering completion lists.
+  static const CompletionCaseMatchingMode ALL_CHARS =
+      CompletionCaseMatchingMode._('ALL_CHARS');
+
+  /// Do not match character cases when filtering completion lists.
+  static const CompletionCaseMatchingMode NONE =
+      CompletionCaseMatchingMode._('NONE');
+
+  /// A list containing all of the enum values that are defined.
+  static const List<CompletionCaseMatchingMode> VALUES =
+      <CompletionCaseMatchingMode>[FIRST_CHAR, ALL_CHARS, NONE];
+
+  @override
+  final String name;
+
+  const CompletionCaseMatchingMode._(this.name);
+
+  factory CompletionCaseMatchingMode(String name) {
+    switch (name) {
+      case 'FIRST_CHAR':
+        return FIRST_CHAR;
+      case 'ALL_CHARS':
+        return ALL_CHARS;
+      case 'NONE':
+        return NONE;
+    }
+    throw Exception('Illegal enum value: $name');
+  }
+
+  factory CompletionCaseMatchingMode.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    if (json is String) {
+      try {
+        return CompletionCaseMatchingMode(json);
+      } catch (_) {
+        // Fall through
+      }
+    }
+    throw jsonDecoder.mismatch(jsonPath, 'CompletionCaseMatchingMode', json);
+  }
+
+  @override
+  String toString() => 'CompletionCaseMatchingMode.$name';
+
+  String toJson() => name;
+}
+
 /// completion.existingImports params
 ///
 /// {
@@ -4683,6 +4745,7 @@
 ///   "file": FilePath
 ///   "offset": int
 ///   "maxResults": int
+///   "completionCaseMatchingMode": optional CompletionCaseMatchingMode
 /// }
 ///
 /// Clients may not extend, implement or mix-in this class.
@@ -4698,6 +4761,10 @@
   /// to true.
   int maxResults;
 
+  /// The mode of code completion being invoked. If no value is provided,
+  /// MATCH_FIRST_CHAR will be assumed.
+  CompletionCaseMatchingMode? completionCaseMatchingMode;
+
   /// The mode of code completion being invoked. If no value is provided, BASIC
   /// will be assumed. BASIC is also the only currently supported.
   CompletionMode? completionMode;
@@ -4714,7 +4781,10 @@
   int? timeout;
 
   CompletionGetSuggestions2Params(this.file, this.offset, this.maxResults,
-      {this.completionMode, this.invocationCount, this.timeout});
+      {this.completionCaseMatchingMode,
+      this.completionMode,
+      this.invocationCount,
+      this.timeout});
 
   factory CompletionGetSuggestions2Params.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -4739,6 +4809,13 @@
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'maxResults');
       }
+      CompletionCaseMatchingMode? completionCaseMatchingMode;
+      if (json.containsKey('completionCaseMatchingMode')) {
+        completionCaseMatchingMode = CompletionCaseMatchingMode.fromJson(
+            jsonDecoder,
+            jsonPath + '.completionCaseMatchingMode',
+            json['completionCaseMatchingMode']);
+      }
       CompletionMode? completionMode;
       if (json.containsKey('completionMode')) {
         completionMode = CompletionMode.fromJson(
@@ -4754,6 +4831,7 @@
         timeout = jsonDecoder.decodeInt(jsonPath + '.timeout', json['timeout']);
       }
       return CompletionGetSuggestions2Params(file, offset, maxResults,
+          completionCaseMatchingMode: completionCaseMatchingMode,
           completionMode: completionMode,
           invocationCount: invocationCount,
           timeout: timeout);
@@ -4774,6 +4852,11 @@
     result['file'] = file;
     result['offset'] = offset;
     result['maxResults'] = maxResults;
+    var completionCaseMatchingMode = this.completionCaseMatchingMode;
+    if (completionCaseMatchingMode != null) {
+      result['completionCaseMatchingMode'] =
+          completionCaseMatchingMode.toJson();
+    }
     var completionMode = this.completionMode;
     if (completionMode != null) {
       result['completionMode'] = completionMode.toJson();
@@ -4803,6 +4886,7 @@
       return file == other.file &&
           offset == other.offset &&
           maxResults == other.maxResults &&
+          completionCaseMatchingMode == other.completionCaseMatchingMode &&
           completionMode == other.completionMode &&
           invocationCount == other.invocationCount &&
           timeout == other.timeout;
@@ -4815,6 +4899,7 @@
         file,
         offset,
         maxResults,
+        completionCaseMatchingMode,
         completionMode,
         invocationCount,
         timeout,
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 1350c46..12ae415 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -703,8 +703,9 @@
 
   @override
   void applyFileRemoved(String file) {
-    sendAnalysisNotificationFlushResults(analysisServer, [file]);
-    filesToFlush.remove(file);
+    if (filesToFlush.remove(file)) {
+      sendAnalysisNotificationFlushResults(analysisServer, [file]);
+    }
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index 4f6aaaa3..25a8bf9 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -131,7 +131,7 @@
       });
 
       var result = CiderCompletionResult._(
-        suggestions: suggestions,
+        suggestions: suggestions.map((e) => e.build()).toList(),
         performance: CiderCompletionPerformance._(
           operations: _performanceRoot.children.first,
         ),
@@ -157,25 +157,25 @@
   ///
   /// TODO(scheglov) Implement show / hide combinators.
   /// TODO(scheglov) Implement prefixes.
-  List<CompletionSuggestion> _importedLibrariesSuggestions({
+  List<CompletionSuggestionBuilder> _importedLibrariesSuggestions({
     required LibraryElement target,
     required OperationPerformanceImpl performance,
   }) {
-    var suggestions = <CompletionSuggestion>[];
+    var suggestionBuilders = <CompletionSuggestionBuilder>[];
     for (var importedLibrary in target.importedLibraries) {
       var importedSuggestions = _importedLibrarySuggestions(
         element: importedLibrary,
         performance: performance,
       );
-      suggestions.addAll(importedSuggestions);
+      suggestionBuilders.addAll(importedSuggestions);
     }
-    performance.getDataInt('count').add(suggestions.length);
-    return suggestions;
+    performance.getDataInt('count').add(suggestionBuilders.length);
+    return suggestionBuilders;
   }
 
   /// Return cached, or compute unprefixed suggestions for all elements
   /// exported from the library.
-  List<CompletionSuggestion> _importedLibrarySuggestions({
+  List<CompletionSuggestionBuilder> _importedLibrarySuggestions({
     required LibraryElement element,
     required OperationPerformanceImpl performance,
   }) {
@@ -198,13 +198,15 @@
       );
       _cache._importedLibraries[path] = cacheEntry;
     }
-    return cacheEntry.suggestions;
+    return cacheEntry.suggestionBuilders;
   }
 
   /// Compute all unprefixed suggestions for all elements exported from
   /// the library.
-  List<CompletionSuggestion> _librarySuggestions(LibraryElement element) {
+  List<CompletionSuggestionBuilder> _librarySuggestions(
+      LibraryElement element) {
     var suggestionBuilder = SuggestionBuilder(_dartCompletionRequest);
+    suggestionBuilder.libraryUriStr = element.source.uri.toString();
     var visitor = LibraryElementSuggestionBuilder(
         _dartCompletionRequest, suggestionBuilder);
     var exportMap = element.exportNamespace.definedNames;
@@ -250,7 +252,7 @@
 
 class _CiderImportedLibrarySuggestions {
   final String signature;
-  final List<CompletionSuggestion> suggestions;
+  final List<CompletionSuggestionBuilder> suggestionBuilders;
 
-  _CiderImportedLibrarySuggestions(this.signature, this.suggestions);
+  _CiderImportedLibrarySuggestions(this.signature, this.suggestionBuilders);
 }
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 0b7a0fc..44eadad 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -31,19 +31,21 @@
     _flutterWidgetState = _findFlutterStateClass(element, name);
 
     RefactoringStatus? status;
-    if (element is LocalVariableElement) {
-      status = validateVariableName(name);
-    } else if (element is ParameterElement) {
+    if (element is ParameterElement) {
       status = validateParameterName(name);
+    } else if (element is VariableElement) {
+      status = validateVariableName(name);
     } else if (element is FunctionElement) {
       status = validateFunctionName(name);
-    } else if (element is TopLevelVariableElement) {
-      status = validateVariableName(name);
+    } else if (element is FieldElement) {
+      status = validateFieldName(name);
     } else if (element is TypeAliasElement) {
       status = validateTypeAliasName(name);
     } else if (element is ClassElement) {
       status = validateClassName(name);
-    } else if (status == null) {
+    }
+
+    if (status == null) {
       return null;
     }
     return CheckNameResponse(status, this);
@@ -95,7 +97,6 @@
     for (var element in elements) {
       matches.addAll(canRename._fileResolver.findReferences(element));
     }
-
     FlutterWidgetRename? flutterRename;
     if (canRename._flutterWidgetState != null) {
       var stateWidget = canRename._flutterWidgetState!;
diff --git a/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart b/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
index 76a08e2..856e20d 100644
--- a/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
@@ -51,7 +51,7 @@
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    var labelText = node.constructorName.type2.name.name;
+    var labelText = node.constructorName.type.name.name;
     var name = node.constructorName.name;
     if (name != null) {
       labelText += '.${name.name}';
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index df18a65..303ffc6 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -253,8 +253,7 @@
     // prepare type
     HighlightRegionType? type;
     if (element is FieldElement) {
-      var enclosingElement = element.enclosingElement;
-      if (enclosingElement is ClassElement && enclosingElement.isEnum) {
+      if (element.isEnumConstant) {
         type = HighlightRegionType.ENUM_CONSTANT;
       } else if (element.isStatic) {
         type = HighlightRegionType.STATIC_FIELD_DECLARATION;
@@ -268,12 +267,12 @@
     }
     if (element is PropertyAccessorElement) {
       var accessor = element;
-      var enclosingElement = element.enclosingElement;
-      if (accessor.variable is TopLevelVariableElement) {
+      var variable = accessor.variable;
+      if (variable is TopLevelVariableElement) {
         type = accessor.isGetter
             ? HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE
             : HighlightRegionType.TOP_LEVEL_SETTER_REFERENCE;
-      } else if (enclosingElement is ClassElement && enclosingElement.isEnum) {
+      } else if (variable is FieldElement && variable.isEnumConstant) {
         type = HighlightRegionType.ENUM_CONSTANT;
       } else if (accessor.isStatic) {
         type = accessor.isGetter
@@ -688,7 +687,7 @@
   @override
   void visitConstructorReference(ConstructorReference node) {
     var constructorName = node.constructorName;
-    constructorName.type2.accept(this);
+    constructorName.type.accept(this);
 
     // We have a `ConstructorReference` only when it is resolved.
     // TODO(scheglov) The `ConstructorName` in a tear-off always has a name,
@@ -698,6 +697,15 @@
   }
 
   @override
+  void visitConstructorSelector(ConstructorSelector node) {
+    computer._addRegion_node(
+      node.name,
+      HighlightRegionType.CONSTRUCTOR,
+    );
+    node.visitChildren(this);
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     computer._addRegion_token(node.continueKeyword, HighlightRegionType.KEYWORD,
         semanticTokenModifiers: {CustomSemanticTokenModifiers.control});
@@ -727,6 +735,15 @@
   }
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    computer._addRegion_node(
+      node.name,
+      HighlightRegionType.ENUM_CONSTANT,
+    );
+    node.visitChildren(this);
+  }
+
+  @override
   void visitEnumDeclaration(EnumDeclaration node) {
     computer._addRegion_token(node.enumKeyword, HighlightRegionType.KEYWORD);
     super.visitEnumDeclaration(node);
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index d51da04..e16e3078 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -82,7 +82,7 @@
           if (library != null) {
             var uri = library.source.uri;
             var analysisSession = _unit.declaredElement?.session;
-            if (uri.scheme == 'file' && analysisSession != null) {
+            if (uri.isScheme('file') && analysisSession != null) {
               // for 'file:' URIs, use the path after the project root
               var context = analysisSession.resourceProvider.pathContext;
               var projectRootDir =
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index c4247be..61e3abb 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -29,12 +29,13 @@
         unitContents.add(_newMixinOutline(
             unitMember, _outlinesForMembers(unitMember.members)));
       } else if (unitMember is EnumDeclaration) {
-        var enumDeclaration = unitMember;
-        var constantOutlines = <Outline>[];
-        for (var constant in enumDeclaration.constants) {
-          constantOutlines.add(_newEnumConstant(constant));
-        }
-        unitContents.add(_newEnumOutline(enumDeclaration, constantOutlines));
+        unitContents.add(
+          _newEnumOutline(unitMember, [
+            for (var constant in unitMember.constants)
+              _newEnumConstant(constant),
+            ..._outlinesForMembers(unitMember.members),
+          ]),
+        );
       } else if (unitMember is ExtensionDeclaration) {
         unitContents.add(_newExtensionOutline(
             unitMember, _outlinesForMembers(unitMember.members)));
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index 92f68d0..41e8088 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -27,23 +27,9 @@
   List<proto.Override> compute() {
     for (var unitMember in _unit.declarations) {
       if (unitMember is ClassOrMixinDeclaration) {
-        for (var classMember in unitMember.members) {
-          if (classMember is MethodDeclaration) {
-            if (classMember.isStatic) {
-              continue;
-            }
-            _addOverride(classMember.name);
-          }
-          if (classMember is FieldDeclaration) {
-            if (classMember.isStatic) {
-              continue;
-            }
-            List<VariableDeclaration> fields = classMember.fields.variables;
-            for (var field in fields) {
-              _addOverride(field.name);
-            }
-          }
-        }
+        _classMembers(unitMember.members);
+      } else if (unitMember is EnumDeclaration) {
+        _classMembers(unitMember.members);
       }
     }
     return _overrides;
@@ -73,6 +59,26 @@
       }
     }
   }
+
+  void _classMembers(List<ClassMember> members) {
+    for (var classMember in members) {
+      if (classMember is MethodDeclaration) {
+        if (classMember.isStatic) {
+          continue;
+        }
+        _addOverride(classMember.name);
+      }
+      if (classMember is FieldDeclaration) {
+        if (classMember.isStatic) {
+          continue;
+        }
+        List<VariableDeclaration> fields = classMember.fields.variables;
+        for (var field in fields) {
+          _addOverride(field.name);
+        }
+      }
+    }
+  }
 }
 
 /// The container with elements that a class member overrides.
@@ -92,26 +98,6 @@
 }
 
 class _OverriddenElementsFinder {
-  static const List<ElementKind> FIELD_KINDS = <ElementKind>[
-    ElementKind.FIELD,
-    ElementKind.GETTER,
-    ElementKind.SETTER
-  ];
-
-  static const List<ElementKind> GETTER_KINDS = <ElementKind>[
-    ElementKind.FIELD,
-    ElementKind.GETTER
-  ];
-
-  static const List<ElementKind> METHOD_KINDS = <ElementKind>[
-    ElementKind.METHOD
-  ];
-
-  static const List<ElementKind> SETTER_KINDS = <ElementKind>[
-    ElementKind.FIELD,
-    ElementKind.SETTER
-  ];
-
   Element _seed;
   LibraryElement _library;
   ClassElement _class;
@@ -127,12 +113,19 @@
     var library = class_.library;
     var name = seed.displayName;
     List<ElementKind> kinds;
-    if (seed is MethodElement) {
-      kinds = METHOD_KINDS;
+    if (seed is FieldElement) {
+      kinds = [
+        ElementKind.GETTER,
+        if (!seed.isFinal) ElementKind.SETTER,
+      ];
+    } else if (seed is MethodElement) {
+      kinds = const [ElementKind.METHOD];
     } else if (seed is PropertyAccessorElement) {
-      kinds = seed.isGetter ? GETTER_KINDS : SETTER_KINDS;
+      kinds = seed.isGetter
+          ? const [ElementKind.GETTER]
+          : const [ElementKind.SETTER];
     } else {
-      kinds = FIELD_KINDS;
+      kinds = const [];
     }
     return _OverriddenElementsFinder._(seed, library, class_, name, kinds);
   }
diff --git a/pkg/analysis_server/lib/src/computer/computer_signature.dart b/pkg/analysis_server/lib/src/computer/computer_signature.dart
index 04013bf..0e852c2 100644
--- a/pkg/analysis_server/lib/src/computer/computer_signature.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_signature.dart
@@ -42,7 +42,7 @@
       var element = ElementLocator.locate(parent);
       execElement = element is ExecutableElement ? element : null;
     } else if (parent is InstanceCreationExpression) {
-      name = parent.constructorName.type2.name.name;
+      name = parent.constructorName.type.name.name;
       var constructorName = parent.constructorName.name;
       if (constructorName != null) {
         name += '.${constructorName.name}';
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 45ccc9b..9f3043e 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -68,7 +68,7 @@
   /// automatically called when a client listens to the stream returned by
   /// [results]. Subclasses should override this method, append at least one
   /// result to the [controller], and close the controller stream once complete.
-  Future<List<CompletionSuggestion>> computeSuggestions({
+  Future<List<CompletionSuggestionBuilder>> computeSuggestions({
     required CompletionBudget budget,
     required OperationPerformanceImpl performance,
     required DartCompletionRequest request,
@@ -87,7 +87,7 @@
     //
     // Compute completions generated by server.
     //
-    var suggestions = <CompletionSuggestion>[];
+    var suggestions = <CompletionSuggestionBuilder>[];
     await performance.runAsync('computeSuggestions', (performance) async {
       var manager = DartCompletionManager(
         budget: budget,
@@ -357,9 +357,9 @@
         setNewRequest(completionRequest);
 
         var notImportedSuggestions = NotImportedSuggestions();
-        var suggestions = <CompletionSuggestion>[];
+        var suggestionBuilders = <CompletionSuggestionBuilder>[];
         try {
-          suggestions = await computeSuggestions(
+          suggestionBuilders = await computeSuggestions(
             budget: budget,
             performance: performance,
             request: completionRequest,
@@ -377,36 +377,29 @@
         }
 
         performance.run('filter', (performance) {
-          performance.getDataInt('count').add(suggestions.length);
-          suggestions = fuzzyFilterSort(
+          performance.getDataInt('count').add(suggestionBuilders.length);
+          suggestionBuilders = fuzzyFilterSort(
             pattern: completionRequest.targetPrefix,
-            suggestions: suggestions,
+            suggestions: suggestionBuilders,
           );
-          performance.getDataInt('matchCount').add(suggestions.length);
+          performance.getDataInt('matchCount').add(suggestionBuilders.length);
         });
 
-        var lengthRestricted = suggestions.take(params.maxResults).toList();
+        var lengthRestricted =
+            suggestionBuilders.take(params.maxResults).toList();
         completionPerformance.suggestionCount = lengthRestricted.length;
 
-        // Update `isNotImported` for not yet imported.
-        for (var i = 0; i < lengthRestricted.length; i++) {
-          var suggestion = lengthRestricted[i];
-          if (notImportedSuggestions.set.contains(suggestion)) {
-            lengthRestricted[i] = suggestion.copyWith(
-              isNotImported: CopyWithValue(true),
-            );
-          }
-        }
+        var suggestions = lengthRestricted.map((e) => e.build()).toList();
 
         var isIncomplete = notImportedSuggestions.isIncomplete ||
-            lengthRestricted.length < suggestions.length;
+            lengthRestricted.length < suggestionBuilders.length;
 
         performance.run('sendResponse', (_) {
           server.sendResponse(
             CompletionGetSuggestions2Result(
               completionRequest.replacementOffset,
               completionRequest.replacementLength,
-              lengthRestricted,
+              suggestions,
               isIncomplete,
             ).toResponse(request.id),
           );
@@ -569,9 +562,9 @@
 
         // Compute suggestions in the background
         try {
-          var suggestions = <CompletionSuggestion>[];
+          var suggestionBuilders = <CompletionSuggestionBuilder>[];
           try {
-            suggestions = await computeSuggestions(
+            suggestionBuilders = await computeSuggestions(
               budget: budget,
               performance: performance,
               request: completionRequest,
@@ -603,7 +596,7 @@
               completionId,
               completionRequest.replacementOffset,
               completionRequest.replacementLength,
-              suggestions,
+              suggestionBuilders.map((e) => e.build()).toList(),
               libraryFile,
               includedSuggestionSets,
               includedElementKinds?.toList(),
@@ -611,7 +604,7 @@
             );
           });
 
-          completionPerformance.suggestionCount = suggestions.length;
+          completionPerformance.suggestionCount = suggestionBuilders.length;
         } finally {
           ifMatchesRequestClear(completionRequest);
         }
@@ -694,7 +687,7 @@
   Future<void> _addPluginSuggestions(
     CompletionBudget budget,
     _RequestToPlugins requestToPlugins,
-    List<CompletionSuggestion> suggestions,
+    List<CompletionSuggestionBuilder> suggestionBuilders,
   ) async {
     var responses = await waitForResponses(
       requestToPlugins.futures,
@@ -712,7 +705,11 @@
                   ' replacement offset/length: ${result.toJson()}');
           continue;
         }
-        suggestions.addAll(result.results);
+        suggestionBuilders.addAll(
+          result.results.map(
+            (suggestion) => ValueCompletionSuggestionBuilder(suggestion),
+          ),
+        );
       }
     }
   }
diff --git a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
index 4e42510..01507f9 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
@@ -18,10 +18,13 @@
   ImplementedComputer(this.searchEngine, this.unitElement);
 
   Future<void> compute() async {
-    for (var element in unitElement.mixins) {
+    for (var element in unitElement.classes) {
       await _computeForClassElement(element);
     }
-    for (var element in unitElement.classes) {
+    for (var element in unitElement.enums) {
+      await _computeForClassElement(element);
+    }
+    for (var element in unitElement.mixins) {
       await _computeForClassElement(element);
     }
   }
diff --git a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
index 3c7bbac..bca2807 100644
--- a/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
+++ b/pkg/analysis_server/lib/src/domains/completion/available_suggestions.dart
@@ -173,7 +173,7 @@
 
 /// Computes the best URI to import [what] into the [unit] library.
 String? _getRelativeFileUri(DartCompletionRequest request, Uri what) {
-  if (what.scheme == 'file') {
+  if (what.isScheme('file')) {
     var pathContext = request.analysisSession.resourceProvider.pathContext;
 
     var libraryPath = request.libraryElement.source.fullName;
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index e0eedc4..4fc64eb 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -74,12 +74,13 @@
       offset: targetOffset,
     );
 
-    var suggestions = await DartCompletionManager(
+    var serverSuggestions = await DartCompletionManager(
       budget: CompletionBudget(CompletionBudget.defaultDuration),
     ).computeSuggestions(
       dartRequest,
       OperationPerformanceImpl('<root>'),
     );
+    var suggestions = serverSuggestions.map((e) => e.build()).toList();
 
     // Remove completions with synthetic import prefixes.
     suggestions.removeWhere((s) => s.completion.startsWith('__prefix'));
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 655d9d9..eeda336 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -95,15 +95,16 @@
         }
       }
 
-      var workspace = DartChangeWorkspace(server.currentSessions);
-      var processor = BulkFixProcessor(server.instrumentationService, workspace,
-          useConfigFiles: params.inTestMode ?? false);
-
       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(
@@ -355,7 +356,7 @@
         getFixes(request);
         return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_REFACTORING) {
-        return _getRefactoring(request);
+        return _getRefactoring(request, cancellationToken);
       } else if (requestName == EDIT_REQUEST_IMPORT_ELEMENTS) {
         importElements(request);
         return Response.DELAYED_RESPONSE;
@@ -865,7 +866,8 @@
     }
   }
 
-  Response _getRefactoring(Request request) {
+  Response _getRefactoring(
+      Request request, CancellationToken cancellationToken) {
     final refactoringManager = this.refactoringManager;
     if (refactoringManager == null) {
       return Response.unsupportedFeature(request.id, 'Search is not enabled.');
@@ -874,7 +876,7 @@
       refactoringManager.cancel();
       _newRefactoringManager();
     }
-    refactoringManager.getRefactoring(request);
+    refactoringManager.getRefactoring(request, cancellationToken);
     return Response.DELAYED_RESPONSE;
   }
 
@@ -973,7 +975,7 @@
     _reset();
   }
 
-  void getRefactoring(Request _request) {
+  void getRefactoring(Request _request, CancellationToken cancellationToken) {
     // prepare for processing the request
     request = _request;
     final result = this.result = EditGetRefactoringResult(
@@ -990,7 +992,8 @@
         ?.sendEvent('refactor', params.kind.name.toLowerCase());
 
     runZonedGuarded(() async {
-      await _init(params.kind, file, params.offset, params.length);
+      await _init(
+          params.kind, file, params.offset, params.length, cancellationToken);
       if (initStatus.hasFatalError) {
         feedback = null;
         _sendResultResponse();
@@ -1076,8 +1079,8 @@
     }
   }
 
-  Future<void> _createRefactoringFromKind(
-      String file, int offset, int length) async {
+  Future<void> _createRefactoringFromKind(String file, int offset, int length,
+      CancellationToken cancellationToken) async {
     if (kind == RefactoringKind.CONVERT_GETTER_TO_METHOD) {
       var resolvedUnit = await server.getResolvedUnit(file);
       if (resolvedUnit != null) {
@@ -1144,11 +1147,9 @@
         );
       }
     } else if (kind == RefactoringKind.MOVE_FILE) {
-      var resolvedUnit = await server.getResolvedUnit(file);
-      if (resolvedUnit != null) {
-        refactoring = MoveFileRefactoring(
-            server.resourceProvider, refactoringWorkspace, resolvedUnit, file);
-      }
+      refactoring = MoveFileRefactoring(
+          server.resourceProvider, refactoringWorkspace, file)
+        ..cancellationToken = cancellationToken;
     } else if (kind == RefactoringKind.RENAME) {
       var resolvedUnit = await server.getResolvedUnit(file);
       if (resolvedUnit != null) {
@@ -1171,8 +1172,8 @@
 
   /// Initializes this context to perform a refactoring with the specified
   /// parameters. The existing [Refactoring] is reused or created as needed.
-  Future _init(
-      RefactoringKind kind, String file, int offset, int length) async {
+  Future _init(RefactoringKind kind, String file, int offset, int length,
+      CancellationToken cancellationToken) async {
     // check if we can continue with the existing Refactoring instance
     if (this.kind == kind &&
         this.file == file &&
@@ -1191,7 +1192,7 @@
       throw 'A simulated refactoring exception - init.';
     }
     // create a new Refactoring instance
-    await _createRefactoringFromKind(file, offset, length);
+    await _createRefactoringFromKind(file, offset, length, cancellationToken);
     final refactoring = this.refactoring;
     if (refactoring == null) {
       initStatus = RefactoringStatus.fatal('Unable to create a refactoring');
diff --git a/pkg/analysis_server/lib/src/lsp/client_configuration.dart b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
index 83b987b..c7497dd 100644
--- a/pkg/analysis_server/lib/src/lsp/client_configuration.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_configuration.dart
@@ -165,6 +165,18 @@
       _fallback?.enableSdkFormatter ??
       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;
+
   /// The line length used when formatting documents.
   ///
   /// If null, the formatters default will be used.
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index a782782..55257c6 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -208,6 +208,8 @@
   static const InvalidFileLineCol = ErrorCodes(-32004);
   static const UnknownCommand = ErrorCodes(-32005);
   static const InvalidCommandArguments = ErrorCodes(-32006);
+
+  /// A file that is not part of the analyzed set.
   static const FileNotAnalyzed = ErrorCodes(-32007);
   static const FileHasErrors = ErrorCodes(-32008);
   static const ClientFailedToApplyEdit = ErrorCodes(-32009);
@@ -215,6 +217,9 @@
   static const RefactorFailed = ErrorCodes(-32011);
   static const FeatureDisabled = ErrorCodes(-32012);
 
+  /// A file that is expected to be analyzed, but failed.
+  static const FileAnalysisFailed = ErrorCodes(-32013);
+
   /// An error raised when the server detects that the server and client are out
   /// of sync and cannot recover. For example if a textDocument/didChange notification
   /// has invalid offsets, suggesting the client and server have become out of sync
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 879ac92..ee853d6 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
@@ -45,11 +45,6 @@
     }
 
     final lineInfo = unit.lineInfo;
-    if (lineInfo == null) {
-      return error(ErrorCodes.InternalError,
-          'Unable to produce edits for $docIdentifier as no LineInfo was found');
-    }
-
     final workspaceEdit = toWorkspaceEdit(
       clientCapabilities,
       [FileEditInformation(docIdentifier, lineInfo, edits)],
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 736ab90..f64f323 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -21,7 +21,9 @@
 import 'package:analysis_server/src/services/completion/yaml/fix_data_generator.dart';
 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/services/snippets/dart/snippet_manager.dart';
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart' as ast;
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/services/available_declarations.dart';
@@ -178,6 +180,31 @@
   String _createImportedSymbolKey(String name, Uri declaringUri) =>
       '$name/$declaringUri';
 
+  Future<List<CompletionItem>> _getDartSnippetItems({
+    required LspClientCapabilities clientCapabilities,
+    required ResolvedUnitResult unit,
+    required int offset,
+    required LineInfo lineInfo,
+  }) async {
+    final request = DartSnippetRequest(
+      unit: unit,
+      offset: offset,
+    );
+    final snippetManager = DartSnippetManager();
+    final snippets = await snippetManager.computeSnippets(request);
+
+    return snippets
+        .map((snippet) => snippetToCompletionItem(
+              server,
+              clientCapabilities,
+              unit.path,
+              lineInfo,
+              toPosition(lineInfo.getLocation(offset)),
+              snippet,
+            ))
+        .toList();
+  }
+
   Future<ErrorOr<CompletionList>> _getPluginResults(
     LspClientCapabilities capabilities,
     LineInfo lineInfo,
@@ -256,11 +283,15 @@
             includedSuggestionRelevanceTags: includedSuggestionRelevanceTags,
           );
 
-          final serverSuggestions = await contributor.computeSuggestions(
+          final serverSuggestions2 = await contributor.computeSuggestions(
             completionRequest,
             performance,
           );
 
+          final serverSuggestions = serverSuggestions2.map((serverSuggestion) {
+            return serverSuggestion.build();
+          }).toList();
+
           final insertLength = _computeInsertLength(
             offset,
             completionRequest.replacementOffset,
@@ -416,14 +447,33 @@
             });
           }
 
+          // Add in any snippets.
+          final snippetsEnabled =
+              server.clientConfiguration.forResource(unit.path).enableSnippets;
+          // We can only produce edits with edit builders for files inside
+          // the root, so skip snippets entirely if not.
+          final isEditableFile =
+              unit.session.analysisContext.contextRoot.isAnalyzed(unit.path);
+          if (capabilities.completionSnippets &&
+              snippetsEnabled &&
+              isEditableFile) {
+            results.addAll(await _getDartSnippetItems(
+              clientCapabilities: capabilities,
+              unit: unit,
+              offset: offset,
+              lineInfo: unit.lineInfo,
+            ));
+          }
+
           // Perform fuzzy matching based on the identifier in front of the caret to
           // reduce the size of the payload.
           final fuzzyPattern = completionRequest.targetPrefix;
           final fuzzyMatcher =
               FuzzyMatcher(fuzzyPattern, matchStyle: MatchStyle.TEXT);
 
-          final matchingResults =
-              results.where((e) => fuzzyMatcher.score(e.label) > 0).toList();
+          final matchingResults = results
+              .where((e) => fuzzyMatcher.score(e.filterText ?? e.label) > 0)
+              .toList();
 
           completionPerformance.suggestionCount = results.length;
 
@@ -431,6 +481,8 @@
               CompletionList(isIncomplete: false, items: matchingResults));
         } on AbortCompletion {
           return success(CompletionList(isIncomplete: false, items: []));
+        } on InconsistentAnalysisException {
+          return success(CompletionList(isIncomplete: false, items: []));
         }
       },
     );
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 d2d2bec..fa99c2b 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
@@ -132,11 +132,13 @@
         // the file we're importing into, rather than the full URI.
         final pathContext = server.resourceProvider.pathContext;
         final autoImportDisplayUri = libraryUri.isScheme('file')
-            ? pathContext.relative(
+            // Compute the relative path and then put into a URI so the display
+            // always uses forward slashes (as a URI) regardless of platform.
+            ? Uri.file(pathContext.relative(
                 libraryUri.toFilePath(),
                 from: pathContext.dirname(file),
-              )
-            : libraryUri.toString();
+              ))
+            : libraryUri;
 
         return success(CompletionItem(
           label: item.label,
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 827a088..36aff2e 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
@@ -11,9 +11,15 @@
 import 'package:analysis_server/src/lsp/mapping.dart';
 import 'package:analysis_server/src/plugin/result_merger.dart';
 import 'package:analysis_server/src/protocol_server.dart' show NavigationTarget;
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart';
+import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
 import 'package:analyzer_plugin/utilities/navigation/navigation_dart.dart';
 import 'package:collection/collection.dart';
 
@@ -47,14 +53,16 @@
 
   Future<AnalysisNavigationParams> getServerResult(
       bool supportsLocationLink, String path, int offset) async {
-    final collector =
-        NavigationCollectorImpl(collectCodeLocations: supportsLocationLink);
+    final collector = NavigationCollectorImpl();
 
     final result = await server.getResolvedUnit(path);
     final unit = result?.unit;
     if (unit != null) {
       computeDartNavigation(
           server.resourceProvider, collector, unit, offset, 0);
+      if (supportsLocationLink) {
+        _updateTargetsWithCodeLocations(collector);
+      }
       collector.createRegions();
     }
 
@@ -171,6 +179,50 @@
     return otherResults.isNotEmpty ? otherResults : results;
   }
 
+  /// Get the location of the code (excluding leading doc comments) for this element.
+  protocol.Location? _getCodeLocation(Element element) {
+    var codeElement = element;
+    // For synthetic getters created for fields, we need to access the associated
+    // variable to get the codeOffset/codeLength.
+    if (codeElement.isSynthetic && codeElement is PropertyAccessorElementImpl) {
+      final variable = codeElement.variable;
+      if (variable is ElementImpl) {
+        codeElement = variable as ElementImpl;
+      }
+    }
+
+    // Read the main codeOffset from the element. This may include doc comments
+    // but will give the correct end position.
+    int? codeOffset, codeLength;
+    if (codeElement is ElementImpl) {
+      codeOffset = codeElement.codeOffset;
+      codeLength = codeElement.codeLength;
+    }
+
+    if (codeOffset == null || codeLength == null) {
+      return null;
+    }
+
+    // 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);
+    var node = declaration?.node;
+    if (node is VariableDeclaration) {
+      node = node.parent;
+    }
+    if (node is AnnotatedNode) {
+      var offsetAfterDocs = node.firstTokenAfterCommentAndMetadata.offset;
+
+      // Reduce the length by the difference between the end of docs and the start.
+      codeLength -= offsetAfterDocs - codeOffset;
+      codeOffset = offsetAfterDocs;
+    }
+
+    return AnalyzerConverter()
+        .locationFromElement(element, offset: codeOffset, length: codeLength);
+  }
+
   Location? _toLocation(
       AnalysisNavigationParams mergedResults, NavigationTarget target) {
     final targetFilePath = mergedResults.files[target.fileIndex];
@@ -191,4 +243,34 @@
             region, sourceLineInfo, targetFilePath, target, targetLineInfo)
         : null;
   }
+
+  void _updateTargetsWithCodeLocations(NavigationCollectorImpl collector) {
+    for (var targetToUpdate in collector.targetsToUpdate) {
+      var codeLocation = _getCodeLocation(targetToUpdate.element);
+      if (codeLocation != null) {
+        targetToUpdate.target
+          ..codeOffset = codeLocation.offset
+          ..codeLength = codeLocation.length;
+      }
+    }
+  }
+
+  static ElementDeclarationResult? _parsedDeclaration(Element element) {
+    var session = element.session;
+    if (session == null) {
+      return null;
+    }
+
+    var libraryPath = element.library?.source.fullName;
+    if (libraryPath == null) {
+      return null;
+    }
+
+    var parsedLibrary = session.getParsedLibrary(libraryPath);
+    if (parsedLibrary is! ParsedLibraryResult) {
+      return null;
+    }
+
+    return parsedLibrary.getElementDeclaration(element);
+  }
 }
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 81b9b85..84da8f2 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
@@ -23,7 +23,8 @@
   ErrorOr<List<TextEdit>?> formatFile(String path) {
     final file = server.resourceProvider.getFile(path);
     if (!file.exists) {
-      return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
+      return error(
+          ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
 
     final result = server.getParsedUnit(path);
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 a6bbf90..f28ef15 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
@@ -23,7 +23,8 @@
   ErrorOr<List<TextEdit>?> formatRange(String path, Range range) {
     final file = server.resourceProvider.getFile(path);
     if (!file.exists) {
-      return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
+      return error(
+          ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
 
     final result = server.getParsedUnit(path);
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 be75ccb..6ff4313 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_formatting.dart
@@ -23,7 +23,8 @@
   ErrorOr<List<TextEdit>?> formatFile(String path) {
     final file = server.resourceProvider.getFile(path);
     if (!file.exists) {
-      return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
+      return error(
+          ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
 
     final result = server.getParsedUnit(path);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart
index d08152f..6cbcd6c 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart
@@ -23,7 +23,10 @@
   Future<ErrorOr<WorkspaceEdit?>> handle(
       RenameFilesParams params, CancellationToken token) async {
     final files = params.files;
-    // For performance reasons, only single-file rename/moves are currently supported.
+    // Only single-file rename/moves are currently supported.
+    // TODO(dantup): Tweak this when VS Code can correctly pass us cancellation
+    // requests to not check for .dart to also support folders (although we
+    // may still only support a single entry initially).
     if (files.length > 1 || files.any((f) => !f.oldUri.endsWith('.dart'))) {
       return success(null);
     }
@@ -31,20 +34,17 @@
     final file = files.single;
     final oldPath = pathOfUri(Uri.tryParse(file.oldUri));
     final newPath = pathOfUri(Uri.tryParse(file.newUri));
+
     return oldPath.mapResult((oldPath) =>
-        newPath.mapResult((newPath) => _renameFile(oldPath, newPath)));
+        newPath.mapResult((newPath) => _renameFile(oldPath, newPath, token)));
   }
 
   Future<ErrorOr<WorkspaceEdit?>> _renameFile(
-      String oldPath, String newPath) async {
-    final resolvedUnit = await server.getResolvedUnit(oldPath);
-    if (resolvedUnit == null) {
-      return success(null);
-    }
-
-    final refactoring = MoveFileRefactoring(server.resourceProvider,
-        server.refactoringWorkspace, resolvedUnit, oldPath)
-      ..newFile = newPath;
+      String oldPath, String newPath, CancellationToken token) async {
+    final refactoring = MoveFileRefactoring(
+        server.resourceProvider, server.refactoringWorkspace, oldPath)
+      ..newFile = newPath
+      ..cancellationToken = token;
 
     // If we're unable to update imports for a rename, we should silently do
     // nothing rather than interrupt the users file rename with an error.
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
index e0f497c..ddd82dc 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
@@ -56,7 +56,8 @@
     final lineInfo = server.getLineInfo(path);
 
     if (lineInfo == null) {
-      return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
+      return error(ServerErrorCodes.InvalidFilePath,
+          'Unable to obtain line information for file', path);
     } else {
       return success(lineInfo);
     }
@@ -65,7 +66,19 @@
   Future<ErrorOr<ResolvedUnitResult>> requireResolvedUnit(String path) async {
     final result = await server.getResolvedUnit(path);
     if (result == null) {
-      return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
+      if (server.isAnalyzed(path)) {
+        // If the file was being analyzed and we got a null result, that usually
+        // indicators a parser or analysis failure, so provide a more specific
+        // message.
+        return error(ServerErrorCodes.FileAnalysisFailed,
+            'Analysis failed for file', path);
+      } else {
+        return error(ServerErrorCodes.FileNotAnalyzed,
+            'File is not being analyzed', path);
+      }
+    } else if (!result.exists) {
+      return error(
+          ServerErrorCodes.InvalidFilePath, 'File does not exist', path);
     }
     return success(result);
   }
@@ -73,7 +86,16 @@
   ErrorOr<ParsedUnitResult> requireUnresolvedUnit(String path) {
     final result = server.getParsedUnit(path);
     if (result == null) {
-      return error(ServerErrorCodes.InvalidFilePath, 'Invalid file path', path);
+      if (server.isAnalyzed(path)) {
+        // If the file was being analyzed and we got a null result, that usually
+        // indicators a parser or analysis failure, so provide a more specific
+        // message.
+        return error(ServerErrorCodes.FileAnalysisFailed,
+            'Analysis failed for file', path);
+      } else {
+        return error(ServerErrorCodes.FileNotAnalyzed,
+            'File is not being analyzed', path);
+      }
     }
     return success(result);
   }
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index c182eee..9026e05 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.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:io';
 import 'dart:math';
 
 import 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart'
@@ -17,9 +18,11 @@
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/dartdoc.dart';
 import 'package:analysis_server/src/lsp/lsp_analysis_server.dart' as lsp;
+import 'package:analysis_server/src/lsp/snippets.dart';
 import 'package:analysis_server/src/lsp/source_edits.dart';
 import 'package:analysis_server/src/protocol_server.dart' as server
     hide AnalysisError;
+import 'package:analysis_server/src/services/snippets/dart/snippet_manager.dart';
 import 'package:analyzer/dart/analysis/results.dart' as server;
 import 'package:analyzer/error/error.dart' as server;
 import 'package:analyzer/source/line_info.dart' as server;
@@ -67,50 +70,6 @@
           _asMarkup(preferredFormats, content));
 }
 
-/// Builds an LSP snippet string with supplied ranges as tabstops.
-String buildSnippetStringWithTabStops(
-  String? text,
-  List<int>? offsetLengthPairs,
-) {
-  text ??= '';
-  offsetLengthPairs ??= const [];
-
-  // Snippets syntax is documented in the LSP spec:
-  // https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
-  //
-  // $1, $2, etc. are used for tab stops and ${1:foo} inserts a placeholder of foo.
-
-  final output = [];
-  var offset = 0;
-
-  // When there's only a single tabstop, it should be ${0} as this is treated
-  // specially as the final cursor position (if we use 1, the editor will insert
-  // a 0 at the end of the string which is not what we expect).
-  // When there are multiple, start with ${1} since these are placeholders the
-  // user can tab through and the editor-inserted ${0} at the end is expected.
-  var tabStopNumber = offsetLengthPairs.length <= 2 ? 0 : 1;
-
-  for (var i = 0; i < offsetLengthPairs.length; i += 2) {
-    final pairOffset = offsetLengthPairs[i];
-    final pairLength = offsetLengthPairs[i + 1];
-
-    // Add any text that came before this tabstop to the result.
-    output.add(escapeSnippetString(text.substring(offset, pairOffset)));
-
-    // Add this tabstop
-    final tabStopText = escapeSnippetString(
-        text.substring(pairOffset, pairOffset + pairLength));
-    output.add('\${${tabStopNumber++}:$tabStopText}');
-
-    offset = pairOffset + pairLength;
-  }
-
-  // Add any remaining text that was after the last tabstop.
-  output.add(escapeSnippetString(text.substring(offset)));
-
-  return output.join('');
-}
-
 /// Creates a [lsp.WorkspaceEdit] from simple [server.SourceFileEdit]s.
 ///
 /// Note: This code will fetch the version of each document being modified so
@@ -572,15 +531,6 @@
       .firstWhere(isSupported, orElse: () => lsp.SymbolKind.Obj);
 }
 
-/// Escapes a string to be used in an LSP edit that uses Snippet mode.
-///
-/// Snippets can contain special markup like `${a:b}` so some characters need
-/// escaping (according to the LSP spec, those are `$`, `}` and `\`).
-String escapeSnippetString(String input) => input.replaceAllMapped(
-      RegExp(r'[$}\\]'), // Replace any of $ } \
-      (c) => '\\${c[0]}', // Prefix with a backslash
-    );
-
 String? getCompletionDetail(
   server.CompletionSuggestion suggestion,
   lsp.CompletionItemKind? completionKind,
@@ -798,7 +748,18 @@
     ));
   }
   try {
-    return ErrorOr<String>.success(uri.toFilePath());
+    final filePath = uri.toFilePath();
+    // On Windows, paths that start with \ and not a drive letter are not
+    // supported but will return `true` from `path.isAbsolute` so check for them
+    // specifically.
+    if (Platform.isWindows && filePath.startsWith(r'\')) {
+      return ErrorOr<String>.error(ResponseError(
+        code: lsp.ServerErrorCodes.InvalidFilePath,
+        message: 'URI was not an absolute file path (missing drive letter)',
+        data: uri.toString(),
+      ));
+    }
+    return ErrorOr<String>.success(filePath);
   } catch (e) {
     // Even if tryParse() works and file == scheme, toFilePath() can throw on
     // Windows if there are invalid characters.
@@ -810,7 +771,7 @@
 }
 
 lsp.Diagnostic pluginToDiagnostic(
-  server.LineInfo Function(String) getLineInfo,
+  server.LineInfo? Function(String) getLineInfo,
   plugin.AnalysisError error, {
   required Set<lsp.DiagnosticTag>? supportedTags,
   required bool clientSupportsCodeDescription,
@@ -832,7 +793,14 @@
 
   final range = locationToRange(error.location) ??
       locationOffsetLenToRange(
-          getLineInfo(error.location.file), error.location);
+        // TODO(dantup): This null assertion is not sound and can lead to
+        //   errors (for example during a large rename where files may be
+        //   removed as diagnostics are being mapped). To remove this,
+        //   error.location should be updated to require line/col information
+        //   (which involves breaking changes).
+        getLineInfo(error.location.file)!,
+        error.location,
+      );
   var documentationUrl = error.url;
   return lsp.Diagnostic(
     range: range,
@@ -923,6 +891,126 @@
   );
 }
 
+/// Creates a SnippetTextEdit for a set of edits using Linked Edit Groups.
+///
+/// Edit groups offsets are based on the entire content being modified after all
+/// edits, so [editOffset] must to take into account both the offset of the edit
+/// _and_ any delta from edits prior to this one in the file.
+///
+/// [selectionOffset] is also absolute and assumes [edit.replacement] will be
+/// inserted at [editOffset].
+lsp.SnippetTextEdit snippetTextEditFromEditGroups(
+  String filePath,
+  server.LineInfo lineInfo,
+  server.SourceEdit edit, {
+  required List<server.LinkedEditGroup> editGroups,
+  required int editOffset,
+  required int? selectionOffset,
+}) {
+  return lsp.SnippetTextEdit(
+    insertTextFormat: lsp.InsertTextFormat.Snippet,
+    range: toRange(lineInfo, edit.offset, edit.length),
+    newText: buildSnippetStringForEditGroups(
+      edit.replacement,
+      filePath: filePath,
+      editGroups: editGroups,
+      editOffset: editOffset,
+      selectionOffset: selectionOffset,
+    ),
+  );
+}
+
+/// Creates a SnippetTextEdit for an edit with a selection placeholder.
+///
+/// [selectionOffset] is relative to (and therefore must be within) the edit.
+lsp.SnippetTextEdit snippetTextEditWithSelection(
+  server.LineInfo lineInfo,
+  server.SourceEdit edit, {
+  required int selectionOffsetRelative,
+  int? selectionLength,
+}) {
+  return lsp.SnippetTextEdit(
+    insertTextFormat: lsp.InsertTextFormat.Snippet,
+    range: toRange(lineInfo, edit.offset, edit.length),
+    newText: buildSnippetStringWithTabStops(
+      edit.replacement,
+      [selectionOffsetRelative, selectionLength ?? 0],
+    ),
+  );
+}
+
+lsp.CompletionItem snippetToCompletionItem(
+  lsp.LspAnalysisServer server,
+  LspClientCapabilities capabilities,
+  String file,
+  LineInfo lineInfo,
+  Position position,
+  Snippet snippet,
+) {
+  assert(capabilities.completionSnippets);
+
+  final formats = capabilities.completionDocumentationFormats;
+  final documentation = snippet.documentation;
+  final supportsAsIsInsertMode =
+      capabilities.completionInsertTextModes.contains(InsertTextMode.asIs);
+  final changes = snippet.change;
+
+  // We must only get one change for this file to be able to apply snippets.
+  final thisFilesChange = changes.edits.singleWhere((e) => e.file == file);
+  final otherFilesChanges = changes.edits.where((e) => e.file != file).toList();
+
+  // If this completion involves editing other files, we'll need to build
+  // a command that the client will call to apply those edits later, because
+  // LSP Completions can only provide simple edits for the current file.
+  Command? command;
+  if (otherFilesChanges.isNotEmpty) {
+    final workspaceEdit = createPlainWorkspaceEdit(server, otherFilesChanges);
+    command = Command(
+        title: 'Add import',
+        command: Commands.sendWorkspaceEdit,
+        arguments: [workspaceEdit]);
+  }
+
+  /// Convert the changes to TextEdits using snippet tokens for linked edit
+  /// groups.
+  final mainFileEdits = toSnippetTextEdits(
+    file,
+    thisFilesChange,
+    changes.linkedEditGroups,
+    lineInfo,
+    selectionOffset:
+        changes.selection?.file == file ? changes.selection?.offset : null,
+  );
+
+  // For LSP, we need to provide the main edit and other edits separately. The
+  // main edit must include the location that completion was invoked. If we find
+  // more than one, take the first one since imports are usually added as later
+  // edits (so when applied sequentially they will be inserted at the start of
+  // the file after the other edits).
+  final mainEdit = mainFileEdits
+      .firstWhere((edit) => edit.range.start.line == position.line);
+  final nonMainEdits = mainFileEdits.where((edit) => edit != mainEdit).toList();
+
+  return lsp.CompletionItem(
+    label: snippet.label,
+    filterText: snippet.prefix,
+    kind: lsp.CompletionItemKind.Snippet,
+    command: command,
+    documentation: documentation != null
+        ? asStringOrMarkupContent(formats, documentation)
+        : null,
+    // Force snippets to be sorted at the bottom of the list.
+    // TODO(dantup): Consider if we can rank these better. Client-side
+    //   snippets have always been forced to the bottom partly because they
+    //   show up in more places than wanted.
+    sortText: 'zzz${snippet.prefix}',
+    insertTextFormat: lsp.InsertTextFormat.Snippet,
+    insertTextMode: supportsAsIsInsertMode ? InsertTextMode.asIs : null,
+    textEdit: Either2<TextEdit, InsertReplaceEdit>.t1(mainEdit),
+    additionalTextEdits: nonMainEdits,
+  );
+}
+
 lsp.CompletionItemKind? suggestionKindToCompletionItemKind(
   Set<lsp.CompletionItemKind> supportedCompletionKinds,
   server.CompletionSuggestionKind kind,
@@ -1386,18 +1474,38 @@
   );
 }
 
-lsp.SnippetTextEdit toSnippetTextEdit(
-    LspClientCapabilities capabilities,
-    server.LineInfo lineInfo,
-    server.SourceEdit edit,
-    int selectionOffsetRelative,
-    int? selectionLength) {
-  return lsp.SnippetTextEdit(
-    insertTextFormat: lsp.InsertTextFormat.Snippet,
-    range: toRange(lineInfo, edit.offset, edit.length),
-    newText: buildSnippetStringWithTabStops(
-        edit.replacement, [selectionOffsetRelative, selectionLength ?? 0]),
-  );
+List<lsp.SnippetTextEdit> toSnippetTextEdits(
+  String filePath,
+  server.SourceFileEdit change,
+  List<server.LinkedEditGroup> editGroups,
+  LineInfo lineInfo, {
+  required int? selectionOffset,
+}) {
+  final snippetEdits = <lsp.SnippetTextEdit>[];
+
+  // Edit groups offsets are based on the document after the edits are applied.
+  // This means we must compute an offset delta for each edit that takes into
+  // account all edits that might be made before it in the document (which are
+  // after it in the edits). To do this, reverse the list when computing the
+  // offsets, but reverse them back to the original list order when returning so
+  // that we do not apply them incorrectly in tests (where we will apply them
+  // in-sequence).
+
+  var offsetDelta = 0;
+  for (final edit in change.edits.reversed) {
+    snippetEdits.add(snippetTextEditFromEditGroups(
+      filePath,
+      lineInfo,
+      edit,
+      editGroups: editGroups,
+      editOffset: edit.offset + offsetDelta,
+      selectionOffset: selectionOffset,
+    ));
+
+    offsetDelta += edit.replacement.length - edit.length;
+  }
+
+  return snippetEdits.reversed.toList();
 }
 
 ErrorOr<server.SourceRange> toSourceRange(
@@ -1448,8 +1556,9 @@
         toTextEdit(lineInfo, edit));
   }
   return Either3<lsp.SnippetTextEdit, lsp.AnnotatedTextEdit, lsp.TextEdit>.t1(
-      toSnippetTextEdit(capabilities, lineInfo, edit, selectionOffsetRelative,
-          selectionLength));
+      snippetTextEditWithSelection(lineInfo, edit,
+          selectionOffsetRelative: selectionOffsetRelative,
+          selectionLength: selectionLength));
 }
 
 lsp.TextEdit toTextEdit(server.LineInfo lineInfo, server.SourceEdit edit) {
@@ -1561,21 +1670,20 @@
       insertTextFormat = lsp.InsertTextFormat.Snippet;
       final hasRequiredParameters =
           (defaultArgumentListTextRanges?.length ?? 0) > 0;
-      final functionCallSuffix = hasRequiredParameters
-          ? buildSnippetStringWithTabStops(
-              defaultArgumentListString,
-              defaultArgumentListTextRanges,
-            )
-          : '\${0:}'; // No required params still gets a tabstop in the parens.
-      insertText = '${escapeSnippetString(insertText)}($functionCallSuffix)';
+      final functionCallSuffix =
+          hasRequiredParameters && defaultArgumentListString != null
+              ? buildSnippetStringWithTabStops(
+                  defaultArgumentListString, defaultArgumentListTextRanges)
+              // No required params still gets a final tab stop in the parens.
+              : SnippetBuilder.finalTabStop;
+      insertText =
+          '${SnippetBuilder.escapeSnippetPlainText(insertText)}($functionCallSuffix)';
     } else if (selectionOffset != 0 &&
-        // We don't need a tabstop if the selection is the end of the string.
+        // We don't need a tab stop if the selection is the end of the string.
         selectionOffset != completion.length) {
       insertTextFormat = lsp.InsertTextFormat.Snippet;
       insertText = buildSnippetStringWithTabStops(
-        completion,
-        [selectionOffset, selectionLength],
-      );
+          completion, [selectionOffset, selectionLength]);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/lsp/notification_manager.dart b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
index 8f38df1..bae8def 100644
--- a/pkg/analysis_server/lib/src/lsp/notification_manager.dart
+++ b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
@@ -30,9 +30,7 @@
       String filePath, List<protocol.AnalysisError> errors) {
     final diagnostics = errors
         .map((error) => pluginToDiagnostic(
-              // We should never return errors for a file we can't get a
-              // LineInfo for
-              (path) => server.getLineInfo(path)!,
+              (path) => server.getLineInfo(path),
               error,
               supportedTags: server.clientCapabilities?.diagnosticTags,
               clientSupportsCodeDescription:
diff --git a/pkg/analysis_server/lib/src/lsp/snippets.dart b/pkg/analysis_server/lib/src/lsp/snippets.dart
new file mode 100644
index 0000000..e88dcaa
--- /dev/null
+++ b/pkg/analysis_server/lib/src/lsp/snippets.dart
@@ -0,0 +1,322 @@
+// 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:math' as math;
+
+import 'package:analysis_server/src/protocol_server.dart' as server
+    hide AnalysisError;
+import 'package:collection/collection.dart';
+
+/// Builds an LSP snippet string using the supplied edit groups.
+///
+/// [editGroups] are provided as absolute positions, where the edit will be
+/// made starting at [editOffset].
+///
+/// [selectionOffset] is also absolute and assumes [text] will be
+/// inserted at [editOffset].
+String buildSnippetStringForEditGroups(
+  String text, {
+  required String filePath,
+  required List<server.LinkedEditGroup> editGroups,
+  required int editOffset,
+  int? selectionOffset,
+}) =>
+    _buildSnippetString(
+      text,
+      filePath: filePath,
+      editGroups: editGroups,
+      editGroupsOffset: editOffset,
+      selectionOffset:
+          selectionOffset != null ? selectionOffset - editOffset : null,
+    );
+
+/// Builds an LSP snippet string with supplied ranges as tab stops.
+///
+/// [tabStopOffsetLengthPairs] are relative to the supplied text.
+String buildSnippetStringWithTabStops(
+  String text,
+  List<int>? tabStopOffsetLengthPairs,
+) =>
+    _buildSnippetString(
+      text,
+      filePath: null,
+      tabStopOffsetLengthPairs: tabStopOffsetLengthPairs,
+    );
+
+/// Builds an LSP snippet string with supplied ranges as tab stops.
+///
+/// [tabStopOffsetLengthPairs] are relative to the supplied text.
+///
+/// [selectionOffset]/[selectionLength] form a tab stop that is always "number 0"
+/// which is the final tab stop.
+///
+/// [editGroups] are provided as absolute positions, where [text] is known to
+/// start at [editGroupsOffset] in the final document.
+String _buildSnippetString(
+  String text, {
+  required String? filePath,
+  List<int>? tabStopOffsetLengthPairs,
+  int? selectionOffset,
+  int? selectionLength,
+  List<server.LinkedEditGroup>? editGroups,
+  int editGroupsOffset = 0,
+}) {
+  tabStopOffsetLengthPairs ??= const [];
+  editGroups ??= const [];
+  assert(tabStopOffsetLengthPairs.length % 2 == 0);
+
+  /// Helper to create a [SnippetPlaceholder] for each position in a linked
+  /// edit group.
+  Iterable<SnippetPlaceholder> convertEditGroup(
+    int index,
+    server.LinkedEditGroup editGroup,
+  ) {
+    final validPositions = editGroup.positions.where((p) => p.file == filePath);
+    // Create a placeholder for each position in the group.
+    return validPositions.map(
+      (position) => SnippetPlaceholder(
+        // Make the position relative to the supplied text.
+        position.offset - editGroupsOffset,
+        editGroup.length,
+        suggestions: editGroup.suggestions
+            .map((suggestion) => suggestion.value)
+            .toList(),
+        // Use the index as an ID to keep all related positions together (so
+        // the remain "linked").
+        linkedGroupId: index,
+      ),
+    );
+  }
+
+  // Convert selection/tab stops/edit groups all into the same format
+  // (`_SnippetPlaceholder`) so they can be handled in a single pass through
+  // the text.
+  final placeholders = [
+    // Selection.
+    if (selectionOffset != null)
+      SnippetPlaceholder(selectionOffset, selectionLength ?? 0, isFinal: true),
+
+    // Tab stops.
+    for (var i = 0; i < tabStopOffsetLengthPairs.length - 1; i += 2)
+      SnippetPlaceholder(
+        tabStopOffsetLengthPairs[i],
+        tabStopOffsetLengthPairs[i + 1],
+        // If there's only a single tab stop (and no selection/editGroups), mark
+        // it as the final stop so it exit "snippet mode" when tabbed to.
+        isFinal: selectionOffset == null &&
+            editGroups.isEmpty &&
+            tabStopOffsetLengthPairs.length == 2,
+      ),
+
+    // Linked edit groups.
+    ...editGroups.expandIndexed(convertEditGroup),
+  ];
+
+  // Remove any groups outside of the range (it's possible the edit groups apply
+  // to a different edit in the collection).
+  placeholders.removeWhere((placeholder) =>
+      placeholder.offset < 0 ||
+      placeholder.offset + placeholder.length > text.length);
+
+  final builder = SnippetBuilder()..appendPlaceholders(text, placeholders);
+  return builder.value;
+}
+
+/// A helper for building for snippets using LSP/TextMate syntax.
+///
+/// https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
+///
+///  - $1, $2, etc. are used for tab stops
+///  - ${1:foo} inserts a placeholder of foo
+///  - ${1|foo,bar|} inserts a placeholder of foo with a selection list
+///      containing "foo" and "bar"
+class SnippetBuilder {
+  /// The constant `$0` used do indicate a final tab stop in the snippet syntax.
+  static const finalTabStop = r'$0';
+
+  final _buffer = StringBuffer();
+
+  var _nextPlaceholder = 1;
+
+  /// The built snippet text using the LSP snippet syntax.
+  String get value => _buffer.toString();
+
+  /// Appends a placeholder with a set of choices to choose from.
+  ///
+  /// If there are 0 or 1 choices, a placeholder will be inserted instead.
+  ///
+  /// Returns the placeholder number used.
+  int appendChoice(Iterable<String> choices, {int? placeholderNumber}) {
+    final uniqueChoices = choices.where((item) => item.isNotEmpty).toSet();
+
+    // If there's only 0/1 items, we can downgrade this to a placeholder.
+    if (uniqueChoices.length <= 1) {
+      return appendPlaceholder(
+        uniqueChoices.firstOrNull ?? '',
+        placeholderNumber: placeholderNumber,
+      );
+    }
+
+    placeholderNumber = _usePlaceholerNumber(placeholderNumber);
+
+    final escapedChoices = uniqueChoices.map(escapeSnippetChoiceText).join(',');
+    _buffer.write('\${$placeholderNumber|$escapedChoices|}');
+
+    return placeholderNumber;
+  }
+
+  /// Appends a placeholder with the given text.
+  ///
+  /// If the text is empty, inserts a tab stop instead.
+  ///
+  /// Returns the placeholder number used.
+  int appendPlaceholder(String text, {int? placeholderNumber}) {
+    // If there's no text, we can downgrade this to a tab stop.
+    if (text.isEmpty) {
+      return appendTabStop(placeholderNumber: placeholderNumber);
+    }
+
+    placeholderNumber = _usePlaceholerNumber(placeholderNumber);
+
+    final escapedText = escapeSnippetVariableText(text);
+    _buffer.write('\${$placeholderNumber:$escapedText}');
+
+    return placeholderNumber;
+  }
+
+  /// Appends a tab stop.
+  ///
+  /// Returns the placeholder number used.
+  int appendTabStop({int? placeholderNumber}) {
+    placeholderNumber = _usePlaceholerNumber(placeholderNumber);
+
+    _buffer.write('\$$placeholderNumber');
+
+    return placeholderNumber;
+  }
+
+  /// Appends normal text (escaping it as required).
+  void appendText(String text) {
+    _buffer.write(escapeSnippetPlainText(text));
+  }
+
+  /// Generates the current and next placeholder numbers.
+  int _usePlaceholerNumber(int? placeholderNumber) {
+    // If a number was not supplied, use thenext available one.
+    placeholderNumber ??= _nextPlaceholder;
+    // If the number we used was the highest seen, set the next one after it.
+    _nextPlaceholder = math.max(_nextPlaceholder, placeholderNumber + 1);
+
+    return placeholderNumber;
+  }
+
+  /// Escapes a string use inside a "choice" in a snippet.
+  ///
+  /// Similar to [escapeSnippetPlainText], but choices are delimited/separated
+  /// by pipes and commas (`${1:|a,b,c|}`).
+  static String escapeSnippetChoiceText(String input) => _escapeCharacters(
+        input,
+        RegExp(r'[$}\\\|,]'), // Replace any of $ } \ | ,
+      );
+
+  /// Escapes a string to be used in an LSP edit that uses Snippet mode where the
+  /// text is outside of a snippet token.
+  ///
+  /// Snippets can contain special markup like `${a:b}` so `$` needs escaping
+  /// as does `\` so it's not interpreted as an escape.
+  static String escapeSnippetPlainText(String input) => _escapeCharacters(
+        input,
+        RegExp(r'[$\\]'), // Replace any of $ \
+      );
+
+  /// Escapes a string to be used inside a snippet token.
+  ///
+  /// Similar to [escapeSnippetPlainText] but additionally escapes `}` so that the
+  /// token is not ended early if the included text contains braces.
+  static String escapeSnippetVariableText(String input) => _escapeCharacters(
+        input,
+        RegExp(r'[$}\\]'), // Replace any of $ } \
+      );
+
+  /// Escapes [pattern] in [input] with backslashes.
+  static String _escapeCharacters(String input, Pattern pattern) =>
+      input.replaceAllMapped(pattern, (c) => '\\${c[0]}');
+}
+
+/// Information about an individual placeholder/tab stop in a piece of code.
+///
+/// Each placeholder represents a single position into the code, so a linked
+/// edit group with 2 positions will be represented as two instances of this
+/// class (with the same [linkedGroupId]).
+class SnippetPlaceholder {
+  final int offset;
+  final int length;
+  final List<String>? suggestions;
+  final int? linkedGroupId;
+  final bool isFinal;
+
+  SnippetPlaceholder(
+    this.offset,
+    this.length, {
+    this.suggestions,
+    this.linkedGroupId,
+    this.isFinal = false,
+  });
+}
+
+/// Helpers for [SnippetBuilder] that do not relate to building the main snippet
+/// syntax (for example, converting from intermediate structures).
+extension SnippetBuilderExtensions on SnippetBuilder {
+  void appendPlaceholders(String text, List<SnippetPlaceholder> placeholders) {
+    // Ensure placeholders are in the order they're visible in the source so
+    // tabbing through them doesn't appear to jump around.
+    placeholders.sortBy<num>((placeholder) => placeholder.offset);
+
+    // We need to use the same placeholder number for all placeholders in the
+    // same linked group, so the first time we see a linked item, store its
+    // placeholder number here, so subsequent placeholders for the same linked
+    // group can reuse it.
+    final placeholderIdForLinkedGroupId = <int, int>{};
+
+    var offset = 0;
+    for (final placeholder in placeholders) {
+      // Add any text that came before this placeholder to the result.
+      appendText(text.substring(offset, placeholder.offset));
+
+      final linkedGroupId = placeholder.linkedGroupId;
+      int? thisPaceholderNumber;
+      // Override the placeholder number if it's the final one (0) or needs to
+      // re-use an existing one for a linked group.
+      if (placeholder.isFinal) {
+        thisPaceholderNumber = 0;
+      } else if (linkedGroupId != null) {
+        thisPaceholderNumber = placeholderIdForLinkedGroupId[linkedGroupId];
+      }
+
+      // Append the placeholder/choices.
+      final placeholderText = text.substring(
+        placeholder.offset,
+        placeholder.offset + placeholder.length,
+      );
+      // appendChoice handles mapping empty/single suggestions to a normal
+      // placeholder.
+      thisPaceholderNumber = appendChoice(
+        [placeholderText, ...?placeholder.suggestions],
+        placeholderNumber: thisPaceholderNumber,
+      );
+
+      // Track where we're up to.
+      offset = placeholder.offset + placeholder.length;
+
+      // Store the placeholder number used for linked groups so it can be reused
+      // by subsequent references to it.
+      if (linkedGroupId != null) {
+        placeholderIdForLinkedGroupId[linkedGroupId] = thisPaceholderNumber;
+      }
+    }
+
+    // Add any remaining text that was after the last placeholder.
+    appendText(text.substring(offset));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 64be4e9..9b829c7 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -242,7 +242,8 @@
   if (kind == engine.MatchKind.WRITE) {
     return SearchResultKind.WRITE;
   }
-  if (kind == engine.MatchKind.INVOCATION) {
+  if (kind == engine.MatchKind.INVOCATION ||
+      kind == engine.MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
     return SearchResultKind.INVOCATION;
   }
   if (kind == engine.MatchKind.REFERENCE ||
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 47504a4..ba94d24 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -32,8 +32,8 @@
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/util/sdk.dart';
 import 'package:args/args.dart';
-import 'package:cli_util/cli_util.dart';
 import 'package:linter/src/rules.dart' as linter;
 import 'package:telemetry/crash_reporting.dart';
 import 'package:telemetry/telemetry.dart' as telemetry;
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 8cdcb87..2fee0c2 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,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/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';
@@ -42,7 +43,7 @@
 
   void _addDefaultParamSuggestions(Iterable<ParameterElement> parameters,
       {bool appendComma = false, int? replacementLength}) {
-    var appendColon = !_isInNamedExpression();
+    var appendColon = !_isEditingNamedArgLabel();
     var namedArgs = _namedArgs();
     for (var parameter in parameters) {
       if (parameter.isNamed) {
@@ -73,7 +74,9 @@
           // If there's a replacement length and the preference is to replace,
           // we should not include colons/commas.
           appendColon: appendColon && !willReplace,
-          appendComma: appendComma && !willReplace,
+          // Commas should always be suppressed when we're not inserting colons:
+          //     ke^: Key()
+          appendComma: appendComma && appendColon && !willReplace,
           replacementLength: replacementLength);
     }
   }
@@ -197,6 +200,11 @@
   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) {
@@ -215,16 +223,6 @@
     return newExpr != null && flutter.isWidgetCreation(newExpr);
   }
 
-  /// Return `true` if the [request] is inside of a [NamedExpression] name.
-  bool _isInNamedExpression() {
-    var entity = request.target.entity;
-    if (entity is NamedExpression) {
-      var name = entity.name;
-      return name.offset < request.offset && request.offset < name.end;
-    }
-    return false;
-  }
-
   /// Return `true` if the completion target is in the middle or beginning of
   /// the list of named arguments and is not preceded by a comma. This method
   /// assumes that [_isAppendingToArgList] has been called and returned `false`.
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index b2ef7d6d..4fbeca3 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/src/services/completion/dart/closure_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/documentation_cache.dart';
+import 'package:analysis_server/src/services/completion/dart/enum_constant_constructor_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/extension_member_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
 import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
@@ -117,7 +118,7 @@
                 includedElementNames == null &&
                 includedSuggestionRelevanceTags == null));
 
-  Future<List<CompletionSuggestion>> computeSuggestions(
+  Future<List<CompletionSuggestionBuilder>> computeSuggestions(
     DartCompletionRequest request,
     OperationPerformanceImpl performance, {
     bool enableOverrideContributor = true,
@@ -126,12 +127,12 @@
     request.checkAborted();
     var pathContext = request.resourceProvider.pathContext;
     if (!file_paths.isDart(pathContext, request.path)) {
-      return const <CompletionSuggestion>[];
+      return const <CompletionSuggestionBuilder>[];
     }
 
     // Don't suggest in comments.
     if (request.target.isCommentText) {
-      return const <CompletionSuggestion>[];
+      return const <CompletionSuggestionBuilder>[];
     }
 
     request.checkAborted();
@@ -142,6 +143,7 @@
       ArgListContributor(request, builder),
       ClosureContributor(request, builder),
       CombinatorContributor(request, builder),
+      EnumConstantConstructorContributor(request, builder),
       ExtensionMemberContributor(request, builder),
       FieldFormalContributor(request, builder),
       KeywordContributor(request, builder),
@@ -503,8 +505,6 @@
 
 /// Information provided by [NotImportedContributor] in addition to suggestions.
 class NotImportedSuggestions {
-  final Set<protocol.CompletionSuggestion> set = Set.identity();
-
   /// This flag is set to `true` if the contributor decided to stop before it
   /// processed all available libraries, e.g. we ran out of budget.
   bool isIncomplete = false;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/enum_constant_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/enum_constant_constructor_contributor.dart
new file mode 100644
index 0000000..2680e24
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/completion/dart/enum_constant_constructor_contributor.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 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+
+/// A contributor that produces suggestions for constructors to be invoked
+/// in enum constants.
+class EnumConstantConstructorContributor extends DartCompletionContributor {
+  EnumConstantConstructorContributor(
+    DartCompletionRequest request,
+    SuggestionBuilder builder,
+  ) : super(request, builder);
+
+  @override
+  Future<void> computeSuggestions() async {
+    if (!request.featureSet.isEnabled(Feature.enhanced_enums)) {
+      return;
+    }
+
+    // TODO(scheglov) It seems unfortunate that we have to re-discover
+    // the location in contributors. This is the work of `OpType`, so why
+    // doesn't it provide all these enclosing `EnumConstantDeclaration`,
+    // `ConstructorSelector`, `EnumDeclaration`?
+    var node = request.target.containingNode;
+    if (node is! ConstructorSelector) {
+      return;
+    }
+
+    if (request.opType.completionLocation != 'ConstructorSelector_name') {
+      return;
+    }
+
+    var arguments = node.parent;
+    if (arguments is! EnumConstantArguments) {
+      return;
+    }
+
+    var enumConstant = arguments.parent;
+    if (enumConstant is! EnumConstantDeclaration) {
+      return;
+    }
+
+    var enumDeclaration = enumConstant.parent;
+    if (enumDeclaration is! EnumDeclaration) {
+      return;
+    }
+
+    var enumElement = enumDeclaration.declaredElement as ClassElement;
+    for (var constructor in enumElement.constructors) {
+      builder.suggestConstructor(
+        constructor,
+        hasClassName: true,
+        tearOff: true,
+      );
+    }
+  }
+}
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 4408a7a..59a5f61 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
@@ -3,17 +3,18 @@
 // 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/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/filtering/fuzzy_matcher.dart';
 
 /// Filters and scores [suggestions] according to how well they match the
 /// [pattern]. Sorts [suggestions] by the score, relevance, and name.
-List<CompletionSuggestion> fuzzyFilterSort({
+List<CompletionSuggestionBuilder> fuzzyFilterSort({
   required String pattern,
-  required List<CompletionSuggestion> suggestions,
+  required List<CompletionSuggestionBuilder> suggestions,
 }) {
   var matcher = FuzzyMatcher(pattern, matchStyle: MatchStyle.SYMBOL);
 
-  double score(CompletionSuggestion suggestion) {
+  double score(CompletionSuggestionBuilder suggestion) {
     var suggestionTextToMatch = suggestion.completion;
 
     if (suggestion.kind == CompletionSuggestionKind.NAMED_ARGUMENT) {
@@ -53,7 +54,7 @@
 
 /// [CompletionSuggestion] scored using [FuzzyMatcher].
 class _FuzzyScoredSuggestion {
-  final CompletionSuggestion suggestion;
+  final CompletionSuggestionBuilder suggestion;
   final double score;
 
   _FuzzyScoredSuggestion(this.suggestion, this.score);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
index 3277593..5ef87a7 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart'
     show SuggestionBuilder;
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
 
 /// A contributor for calculating suggestions for imported top level members.
@@ -27,8 +28,11 @@
     for (var importElement in imports) {
       var libraryElement = importElement.importedLibrary;
       if (libraryElement != null) {
-        _buildSuggestions(importElement.namespace,
-            prefix: importElement.prefix?.name);
+        _buildSuggestions(
+          libraryElement: libraryElement,
+          namespace: importElement.namespace,
+          prefix: importElement.prefix?.name,
+        );
         if (libraryElement.isDartCore &&
             request.opType.includeTypeNameSuggestions) {
           builder.suggestName('Never');
@@ -37,10 +41,16 @@
     }
   }
 
-  void _buildSuggestions(Namespace namespace, {String? prefix}) {
+  void _buildSuggestions({
+    required LibraryElement libraryElement,
+    required Namespace namespace,
+    String? prefix,
+  }) {
+    builder.libraryUriStr = libraryElement.source.uri.toString();
     var visitor = LibraryElementSuggestionBuilder(request, builder, prefix);
     for (var elem in namespace.definedNames.values) {
       elem.accept(visitor);
     }
+    builder.libraryUriStr = null;
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 1dbfe52..94c4ede 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -264,6 +264,29 @@
   }
 
   @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    if (!request.featureSet.isEnabled(Feature.enhanced_enums)) {
+      return;
+    }
+
+    if (entity == node.name) {
+      return;
+    }
+
+    var semicolon = node.semicolon;
+    if (request.offset <= node.leftBracket.offset) {
+      if (node.withClause == null) {
+        _addSuggestion(Keyword.WITH);
+      }
+      if (node.implementsClause == null) {
+        _addSuggestion(Keyword.IMPLEMENTS);
+      }
+    } else if (semicolon != null && semicolon.end <= request.offset) {
+      _addEnumBodyKeywords();
+    }
+  }
+
+  @override
   void visitExpression(Expression node) {
     _addExpressionKeywords(node);
   }
@@ -292,6 +315,20 @@
 
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
+    if (request.opType.completionLocation == 'FieldDeclaration_static') {
+      _addSuggestion(Keyword.CONST);
+      _addSuggestion(Keyword.DYNAMIC);
+      _addSuggestion(Keyword.FINAL);
+      _addSuggestion(Keyword.LATE);
+      return;
+    }
+
+    if (request.opType.completionLocation == 'FieldDeclaration_static_late') {
+      _addSuggestion(Keyword.DYNAMIC);
+      _addSuggestion(Keyword.FINAL);
+      return;
+    }
+
     var fields = node.fields;
     if (entity != fields) {
       return;
@@ -313,6 +350,9 @@
         request.featureSet.isEnabled(Feature.non_nullable)) {
       _addSuggestion(Keyword.LATE);
     }
+    if (node.fields.type == null) {
+      _addSuggestion(Keyword.DYNAMIC);
+    }
     if (!node.isStatic) {
       _addSuggestion(Keyword.STATIC);
     }
@@ -860,6 +900,21 @@
     }
   }
 
+  void _addEnumBodyKeywords() {
+    _addSuggestions([
+      Keyword.CONST,
+      Keyword.DYNAMIC,
+      Keyword.FINAL,
+      Keyword.GET,
+      Keyword.LATE,
+      Keyword.OPERATOR,
+      Keyword.SET,
+      Keyword.STATIC,
+      Keyword.VAR,
+      Keyword.VOID
+    ]);
+  }
+
   void _addExpressionKeywords(AstNode node) {
     _addSuggestions([
       Keyword.FALSE,
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
index d9675cb..b78b89e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
@@ -41,6 +41,7 @@
       if (importElem.prefix?.name == elem.name) {
         var library = importElem.importedLibrary;
         if (library != null) {
+          builder.libraryUriStr = library.source.uri.toString();
           for (var element in importElem.namespace.definedNames.values) {
             if (typesOnly && isConstructor) {
               // Suggest constructors from the imported libraries.
@@ -72,6 +73,7 @@
           if (!typesOnly && importElem.isDeferred) {
             builder.suggestLoadLibraryFunction(library.loadLibraryFunction);
           }
+          builder.libraryUriStr = null;
         }
       }
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
index 51853fe..6aa8512 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
@@ -26,12 +26,12 @@
     var node = request.target.containingNode;
     if (node is ConstructorName) {
       if (node.parent is ConstructorReference) {
-        var element = node.type2.name.staticElement;
+        var element = node.type.name.staticElement;
         if (element is ClassElement) {
           _buildSuggestions(element);
         }
       } else {
-        var type = node.type2.type;
+        var type = node.type.type;
         if (type is InterfaceType) {
           var element = type.element;
           _buildSuggestions(element);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart
index 8bbff4f..52e893e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/not_imported_contributor.dart
@@ -81,11 +81,9 @@
       var exportNamespace = element.exportNamespace;
       var exportElements = exportNamespace.definedNames.values.toList();
 
+      builder.libraryUriStr = file.uriStr;
       builder.isNotImportedLibrary = true;
       builder.laterReplacesEarlier = false;
-      builder.suggestionAdded = (suggestion) {
-        additionalData.set.add(suggestion);
-      };
 
       if (request.includeIdentifiers) {
         _buildSuggestions(exportElements);
@@ -95,9 +93,9 @@
         _extensions(exportElements),
       );
 
+      builder.libraryUriStr = null;
       builder.isNotImportedLibrary = false;
       builder.laterReplacesEarlier = true;
-      builder.suggestionAdded = null;
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 829a3e5..aeb07b2 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -21,18 +21,122 @@
 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/element/element.dart';
 import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
-/// Wrapper around a potentially nullable value.
-///
-/// When the wrapper instance is provided for a property, the property
-/// value is replaced, even if the value to set is `null` itself.
-class CopyWithValue<T> {
-  final T value;
+/// A container with enough information to do filtering, and if necessary
+/// build the [CompletionSuggestion] instance.
+abstract class CompletionSuggestionBuilder {
+  /// See [CompletionSuggestion.completion].
+  String get completion;
 
-  CopyWithValue(this.value);
+  /// The key used to de-duplicate suggestions.
+  String get key => completion;
+
+  /// See [CompletionSuggestion.kind].
+  CompletionSuggestionKind get kind;
+
+  /// See [CompletionSuggestion.relevance].
+  int get relevance;
+
+  CompletionSuggestion build();
+}
+
+/// The implementation of [CompletionSuggestionBuilder] that is based on
+/// [ElementCompletionData] and location specific information.
+class CompletionSuggestionBuilderImpl implements CompletionSuggestionBuilder {
+  final ElementCompletionData element;
+
+  @override
+  final CompletionSuggestionKind kind;
+
+  @override
+  final int relevance;
+
+  final String? completionOverride;
+  final String? libraryUriStr;
+  final bool isNotImported;
+
+  CompletionSuggestionBuilderImpl({
+    required this.element,
+    required this.kind,
+    required this.completionOverride,
+    required this.relevance,
+    required this.libraryUriStr,
+    required this.isNotImported,
+  });
+
+  @override
+  String get completion => completionOverride ?? element.completion;
+
+  /// TODO(scheglov) implement better key for not-yet-imported
+  @override
+  String get key {
+    var key = completion;
+    if (element.element.kind == protocol.ElementKind.CONSTRUCTOR) {
+      key = '$key()';
+    }
+    return key;
+  }
+
+  @override
+  CompletionSuggestion build() {
+    return CompletionSuggestion(
+      kind,
+      relevance,
+      completion,
+      completion.length /*selectionOffset*/,
+      0 /*selectionLength*/,
+      element.isDeprecated,
+      false /*isPotential*/,
+      element: element.element,
+      docSummary: element.documentation?.summary,
+      docComplete: element.documentation?.full,
+      declaringType: element.declaringType,
+      returnType: element.returnType,
+      requiredParameterCount: element.requiredParameterCount,
+      hasNamedParameters: element.hasNamedParameters,
+      parameterNames: element.parameterNames,
+      parameterTypes: element.parameterTypes,
+      defaultArgumentListString: element.defaultArgumentList?.text,
+      defaultArgumentListTextRanges: element.defaultArgumentList?.ranges,
+      libraryUri: libraryUriStr,
+      isNotImported: isNotImported ? true : null,
+    );
+  }
+}
+
+/// Information about an [Element] that does not depend on the location where
+/// this element is suggested. For some often used elements, such as classes,
+/// it might be cached, so created only once.
+class ElementCompletionData {
+  final String completion;
+  final bool isDeprecated;
+  final String? declaringType;
+  final String? returnType;
+  final List<String>? parameterNames;
+  final List<String>? parameterTypes;
+  final int? requiredParameterCount;
+  final bool? hasNamedParameters;
+  CompletionDefaultArgumentList? defaultArgumentList;
+  final _ElementDocumentation? documentation;
+  final protocol.Element element;
+
+  ElementCompletionData({
+    required this.completion,
+    required this.isDeprecated,
+    required this.declaringType,
+    required this.returnType,
+    required this.parameterNames,
+    required this.parameterTypes,
+    required this.requiredParameterCount,
+    required this.hasNamedParameters,
+    required this.defaultArgumentList,
+    required this.documentation,
+    required this.element,
+  });
 }
 
 /// This class provides suggestions based upon the visible instance members in
@@ -151,22 +255,6 @@
 /// An object used to build a list of suggestions in response to a single
 /// completion request.
 class SuggestionBuilder {
-  /// The cache of suggestions for [Element]s. We use it to avoid computing
-  /// the same documentation, parameters, return type, etc for elements that
-  /// are exactly the same (the same instances) as they were the last time.
-  ///
-  /// This cache works because:
-  /// 1. Flutter applications usually reference many libraries, which they
-  /// consume, but don't change. So, all their elements stay unchanged.
-  /// 2. The analyzer keeps the same library instances loaded as the user
-  /// types in the application, so the instances of all elements stay the
-  /// same, and the cache works.
-  /// 3. The analyzer does not patch elements (at least not after the linking
-  /// process is done, and the elements are exposed to any client code). So,
-  /// any type information, or documentation, stays the same. If this changes,
-  /// we would need a signal, e.g. some modification counter on the element.
-  static final _elementSuggestionCache = Expando<_CompletionSuggestionEntry>();
-
   /// The completion request for which suggestions are being built.
   final DartCompletionRequest request;
 
@@ -174,12 +262,13 @@
   /// suggestions, or `null` if no notification should occur.
   final SuggestionListener? listener;
 
-  /// The function to be invoked when a new suggestion is added.
-  void Function(protocol.CompletionSuggestion)? suggestionAdded;
-
   /// A map from a completion identifier to a completion suggestion.
-  final Map<String, CompletionSuggestion> _suggestionMap =
-      <String, CompletionSuggestion>{};
+  final Map<String, CompletionSuggestionBuilder> _suggestionMap = {};
+
+  /// The URI of the library from which suggestions are being added.
+  /// This URI is not necessary the same as the URI that declares an element,
+  /// because of exports.
+  String? libraryUriStr;
 
   /// This flag is set to `true` while adding suggestions for top-level
   /// elements from not-yet-imported libraries.
@@ -211,7 +300,8 @@
 
   /// Return an iterable that can be used to access the completion suggestions
   /// that have been built.
-  Iterable<CompletionSuggestion> get suggestions => _suggestionMap.values;
+  Iterable<CompletionSuggestionBuilder> get suggestions =>
+      _suggestionMap.values;
 
   /// Return the name of the member containing the completion location, or
   /// `null` if the completion location isn't within a member or if the target
@@ -279,11 +369,12 @@
         superMatches: superMatches,
         inheritanceDistance: inheritanceDistance,
       );
-      _add(
-        _createSuggestion(
+      _addBuilder(
+        _createCompletionSuggestionBuilder(
           accessor,
           kind: CompletionSuggestionKind.IDENTIFIER,
           relevance: relevance,
+          isNotImported: isNotImportedLibrary,
         ),
       );
     }
@@ -303,12 +394,12 @@
       elementKind: elementKind,
       isConstant: isConstant,
     );
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         parameter,
-        elementKind: protocol.ElementKind.PARAMETER,
         kind: CompletionSuggestionKind.IDENTIFIER,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -318,12 +409,13 @@
   void suggestClass(ClassElement classElement, {String? prefix}) {
     var relevance = _computeTopLevelRelevance(classElement,
         elementType: _instantiateClassElement(classElement));
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         classElement,
         kind: CompletionSuggestionKind.IDENTIFIER,
         prefix: prefix,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -368,16 +460,20 @@
       );
     }
 
-    _add(createSuggestion(
-      completion: blockBuffer.toString(),
-      displayText: '$parametersString {}',
-      selectionOffset: blockSelectionOffset,
-    ));
-    _add(createSuggestion(
-      completion: expressionBuffer.toString(),
-      displayText: '$parametersString =>',
-      selectionOffset: expressionSelectionOffset,
-    ));
+    _addSuggestion(
+      createSuggestion(
+        completion: blockBuffer.toString(),
+        displayText: '$parametersString {}',
+        selectionOffset: blockSelectionOffset,
+      ),
+    );
+    _addSuggestion(
+      createSuggestion(
+        completion: expressionBuffer.toString(),
+        displayText: '$parametersString =>',
+        selectionOffset: expressionSelectionOffset,
+      ),
+    );
   }
 
   /// Add a suggestion for a [constructor]. If a [kind] is provided it will be
@@ -421,11 +517,16 @@
     var returnType = _instantiateClassElement(enclosingClass);
     var relevance =
         _computeTopLevelRelevance(constructor, elementType: returnType);
-    _add(_createSuggestion(constructor,
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
+        constructor,
         completion: completion,
         kind: kind,
         prefix: prefix,
-        relevance: relevance));
+        relevance: relevance,
+        isNotImported: isNotImportedLibrary,
+      ),
+    );
   }
 
   /// Add a suggestion for a top-level [element]. If a [kind] is provided it
@@ -460,13 +561,14 @@
     var completion = '$enumName.$constantName';
     var relevance =
         _computeTopLevelRelevance(constant, elementType: constant.type);
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         constant,
         completion: completion,
         kind: CompletionSuggestionKind.IDENTIFIER,
         prefix: prefix,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -479,8 +581,15 @@
       String? prefix}) {
     var relevance = _computeTopLevelRelevance(extension,
         elementType: extension.extendedType);
-    _add(_createSuggestion(extension,
-        kind: kind, prefix: prefix, relevance: relevance));
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
+        extension,
+        kind: kind,
+        prefix: prefix,
+        relevance: relevance,
+        isNotImported: isNotImportedLibrary,
+      ),
+    );
   }
 
   /// Add a suggestion for a [field]. If the field is being referenced with a
@@ -509,11 +618,12 @@
       superMatches: superMatches,
       inheritanceDistance: inheritanceDistance,
     );
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         field,
         kind: CompletionSuggestionKind.IDENTIFIER,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -522,11 +632,12 @@
   void suggestFieldFormalParameter(FieldElement field) {
     // TODO(brianwilkerson) Add a parameter (`bool includePrefix`) indicating
     //  whether to include the `this.` prefix in the completion.
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         field,
         kind: CompletionSuggestionKind.IDENTIFIER,
         relevance: Relevance.fieldFormalParameter,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -539,22 +650,24 @@
         typeParameters: null,
         parameters: '()',
         returnType: 'void');
-    _add(CompletionSuggestion(
-      CompletionSuggestionKind.INVOCATION,
-      Relevance.callFunction,
-      FunctionElement.CALL_METHOD_NAME,
-      FunctionElement.CALL_METHOD_NAME.length,
-      0,
-      false,
-      false,
-      displayText: 'call()',
-      element: element,
-      returnType: 'void',
-      parameterNames: [],
-      parameterTypes: [],
-      requiredParameterCount: 0,
-      hasNamedParameters: false,
-    ));
+    _addSuggestion(
+      CompletionSuggestion(
+        CompletionSuggestionKind.INVOCATION,
+        Relevance.callFunction,
+        FunctionElement.CALL_METHOD_NAME,
+        FunctionElement.CALL_METHOD_NAME.length,
+        0,
+        false,
+        false,
+        displayText: 'call()',
+        element: element,
+        returnType: 'void',
+        parameterNames: [],
+        parameterTypes: [],
+        requiredParameterCount: 0,
+        hasNamedParameters: false,
+      ),
+    );
   }
 
   /// Add a suggestion for a [keyword]. The [offset] is the offset from the
@@ -574,8 +687,8 @@
       contextType: contextType,
       keyword: keywordFeature,
     );
-    _add(CompletionSuggestion(CompletionSuggestionKind.KEYWORD, relevance,
-        keyword, offset ?? keyword.length, 0, false, false));
+    _addSuggestion(CompletionSuggestion(CompletionSuggestionKind.KEYWORD,
+        relevance, keyword, offset ?? keyword.length, 0, false, false));
   }
 
   /// Add a suggestion for a [label].
@@ -588,7 +701,7 @@
           Relevance.label, completion, completion.length, 0, false, false);
       suggestion.element = createLocalElement(
           request.source, protocol.ElementKind.LABEL, label.label);
-      _add(suggestion);
+      _addSuggestion(suggestion);
     }
   }
 
@@ -598,11 +711,12 @@
     // TODO(brianwilkerson) This might want to use the context type rather than
     //  a fixed value.
     var relevance = Relevance.loadLibrary;
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         function,
         kind: CompletionSuggestionKind.INVOCATION,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -628,11 +742,12 @@
       isConstant: isConstant,
       localVariableDistance: localVariableDistance,
     );
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         variable,
         kind: CompletionSuggestionKind.IDENTIFIER,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -675,46 +790,55 @@
       inheritanceDistance: inheritanceDistance,
     );
 
-    var suggestion =
-        _createSuggestion(method, kind: kind, relevance: relevance);
-    if (suggestion != null) {
-      var enclosingElement = method.enclosingElement;
-      if (method.name == 'setState' &&
-          enclosingElement is ClassElement &&
-          flutter.isExactState(enclosingElement)) {
-        // TODO(brianwilkerson) Make this more efficient by creating the correct
-        //  suggestion in the first place.
-        // Find the line indentation.
-        var indent = getRequestLineIndent(request);
+    var enclosingElement = method.enclosingElement;
+    if (method.name == 'setState' &&
+        enclosingElement is ClassElement &&
+        flutter.isExactState(enclosingElement)) {
+      // TODO(brianwilkerson) Make this more efficient by creating the correct
+      //  suggestion in the first place.
+      // Find the line indentation.
+      var indent = getRequestLineIndent(request);
 
-        // Let the user know that we are going to insert a complete statement.
-        suggestion.displayText = 'setState(() {});';
+      // Build the completion and the selection offset.
+      var buffer = StringBuffer();
+      buffer.writeln('setState(() {');
+      buffer.write('$indent  ');
+      var selectionOffset = buffer.length;
+      buffer.writeln();
+      buffer.write('$indent});');
 
-        // Build the completion and the selection offset.
-        var buffer = StringBuffer();
-        buffer.writeln('setState(() {');
-        buffer.write('$indent  ');
-        suggestion.selectionOffset = buffer.length;
-        buffer.writeln();
-        buffer.write('$indent});');
-        suggestion.completion = buffer.toString();
-
-        // There are no arguments to fill.
-        suggestion.parameterNames = null;
-        suggestion.parameterTypes = null;
-        suggestion.requiredParameterCount = null;
-        suggestion.hasNamedParameters = null;
-      }
-      _add(suggestion);
+      _addSuggestion(
+        CompletionSuggestion(
+          kind,
+          relevance,
+          buffer.toString(),
+          selectionOffset,
+          0,
+          false,
+          false,
+          // Let the user know that we are going to insert a complete statement.
+          displayText: 'setState(() {});',
+        ),
+      );
+      return;
     }
+
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
+        method,
+        kind: kind,
+        relevance: relevance,
+        isNotImported: isNotImportedLibrary,
+      ),
+    );
   }
 
   /// Add a suggestion to use the [name] at a declaration site.
   void suggestName(String name) {
     // TODO(brianwilkerson) Explore whether there are any features of the name
     //  that can be used to provide better relevance scores.
-    _add(CompletionSuggestion(CompletionSuggestionKind.IDENTIFIER, 500, name,
-        name.length, 0, false, false));
+    _addSuggestion(CompletionSuggestion(CompletionSuggestionKind.IDENTIFIER,
+        500, name, name.length, 0, false, false));
   }
 
   /// Add a suggestion to add a named argument corresponding to the [parameter].
@@ -783,7 +907,8 @@
       suggestion.element =
           convertElement(parameter, withNullability: _isNonNullableByDefault);
     }
-    _add(suggestion);
+
+    _addSuggestion(suggestion);
   }
 
   /// Add a suggestion to replace the [targetId] with an override of the given
@@ -842,7 +967,7 @@
         displayText: displayText);
     suggestion.element = protocol.convertElement(element,
         withNullability: _isNonNullableByDefault);
-    _add(suggestion);
+    _addSuggestion(suggestion);
   }
 
   /// Add a suggestion for a [parameter].
@@ -861,11 +986,12 @@
       elementKind: elementKind,
       isConstant: isConstant,
     );
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         parameter,
         kind: CompletionSuggestionKind.IDENTIFIER,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -879,19 +1005,25 @@
     var relevance = _computeRelevance(
       elementKind: elementKind,
     );
-    _add(_createSuggestion(library,
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
+        library,
         completion: prefix,
         kind: CompletionSuggestionKind.IDENTIFIER,
-        relevance: relevance));
+        relevance: relevance,
+        isNotImported: isNotImportedLibrary,
+      ),
+    );
   }
 
   /// Add a suggestion to reference a [parameter] in a super formal parameter.
   void suggestSuperFormalParameter(ParameterElement parameter) {
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         parameter,
         kind: CompletionSuggestionKind.IDENTIFIER,
         relevance: Relevance.superFormalParameter,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -904,8 +1036,15 @@
       String? prefix}) {
     var relevance =
         _computeTopLevelRelevance(function, elementType: function.returnType);
-    _add(_createSuggestion(function,
-        kind: kind, prefix: prefix, relevance: relevance));
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
+        function,
+        kind: kind,
+        prefix: prefix,
+        relevance: relevance,
+        isNotImported: isNotImportedLibrary,
+      ),
+    );
   }
 
   /// Add a suggestion for a top-level property [accessor]. If a [kind] is
@@ -951,12 +1090,13 @@
         startsWithDollar: startsWithDollar,
         superMatches: superMatches,
       );
-      _add(
-        _createSuggestion(
+      _addBuilder(
+        _createCompletionSuggestionBuilder(
           accessor,
           kind: CompletionSuggestionKind.IDENTIFIER,
           prefix: prefix,
           relevance: relevance,
+          isNotImported: isNotImportedLibrary,
         ),
       );
     }
@@ -970,12 +1110,13 @@
     assert(variable.enclosingElement is CompilationUnitElement);
     var relevance =
         _computeTopLevelRelevance(variable, elementType: variable.type);
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         variable,
         kind: CompletionSuggestionKind.IDENTIFIER,
         prefix: prefix,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -986,12 +1127,13 @@
   void suggestTypeAlias(TypeAliasElement typeAlias, {String? prefix}) {
     var relevance = _computeTopLevelRelevance(typeAlias,
         elementType: _instantiateTypeAlias(typeAlias));
-    _add(
-      _createSuggestion(
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
         typeAlias,
         kind: CompletionSuggestionKind.IDENTIFIER,
         prefix: prefix,
         relevance: relevance,
+        isNotImported: isNotImportedLibrary,
       ),
     );
   }
@@ -1006,34 +1148,46 @@
       elementKind: elementKind,
       isConstant: isConstant,
     );
-    _add(_createSuggestion(parameter,
-        kind: CompletionSuggestionKind.IDENTIFIER, relevance: relevance));
+    _addBuilder(
+      _createCompletionSuggestionBuilder(
+        parameter,
+        kind: CompletionSuggestionKind.IDENTIFIER,
+        relevance: relevance,
+        isNotImported: isNotImportedLibrary,
+      ),
+    );
   }
 
   /// Add a suggestion to use the [uri] in an import, export, or part directive.
   void suggestUri(String uri) {
     var relevance =
         uri == 'dart:core' ? Relevance.importDartCore : Relevance.import;
-    _add(CompletionSuggestion(CompletionSuggestionKind.IMPORT, relevance, uri,
-        uri.length, 0, false, false));
+    _addSuggestion(
+      CompletionSuggestion(CompletionSuggestionKind.IMPORT, relevance, uri,
+          uri.length, 0, false, false),
+    );
   }
 
   /// Add the given [suggestion] if it isn't `null` and if it isn't shadowed by
   /// a previously added suggestion.
-  void _add(protocol.CompletionSuggestion? suggestion) {
+  void _addBuilder(CompletionSuggestionBuilder? suggestion) {
     if (suggestion != null) {
-      var key = suggestion.completion;
-      if (suggestion.element?.kind == protocol.ElementKind.CONSTRUCTOR) {
-        key = '$key()';
-      }
+      var key = suggestion.key;
       listener?.builtSuggestion(suggestion);
       if (laterReplacesEarlier || !_suggestionMap.containsKey(key)) {
         _suggestionMap[key] = suggestion;
-        suggestionAdded?.call(suggestion);
       }
     }
   }
 
+  /// Add the given [suggestion] if it isn't shadowed by a previously added
+  /// suggestion.
+  void _addSuggestion(protocol.CompletionSuggestion suggestion) {
+    _addBuilder(
+      ValueCompletionSuggestionBuilder(suggestion),
+    );
+  }
+
   /// Compute the value of the _element kind_ feature for the given [element] in
   /// the completion context.
   double _computeElementKind(Element element, {double? distance}) {
@@ -1119,112 +1273,154 @@
     );
   }
 
-  /// Return a suggestion based on the [element], or `null` if a suggestion is
-  /// not appropriate for the element. If the completion should be something
+  /// Return a [CompletionSuggestionBuilder] based on the [element], or `null`
+  /// if the element cannot be suggested. If the completion should be something
   /// different than the name of the element, then the [completion] should be
   /// supplied. If an [elementKind] is provided, then it will be used rather
   /// than the kind normally used for the element. If a [prefix] is provided,
   /// then the element name (or completion) will be prefixed. The [relevance] is
   /// the relevance of the suggestion.
-  CompletionSuggestion? _createSuggestion(Element element,
-      {String? completion,
-      protocol.ElementKind? elementKind,
-      required CompletionSuggestionKind kind,
-      String? prefix,
-      required int relevance}) {
-    var inputs = _CompletionSuggestionInputs(
-      completion: completion,
-      elementKind: elementKind,
-      kind: kind,
-      prefix: prefix,
-    );
-
-    var cacheEntry = _elementSuggestionCache[element];
-    if (cacheEntry != null) {
-      if (cacheEntry.inputs == inputs) {
-        final suggestion = cacheEntry.suggestion;
-        suggestion.relevance = relevance;
-        return suggestion;
-      }
-    }
-
-    var suggestion = _createSuggestion0(
-      element,
-      completion: completion,
-      elementKind: elementKind,
-      kind: kind,
-      prefix: prefix,
-      relevance: relevance,
-    );
-    if (suggestion == null) {
+  CompletionSuggestionBuilder? _createCompletionSuggestionBuilder(
+    Element element, {
+    String? completion,
+    required CompletionSuggestionKind kind,
+    required int relevance,
+    required bool isNotImported,
+    String? prefix,
+  }) {
+    var elementData = _getElementCompletionData(element);
+    if (elementData == null) {
       return null;
     }
 
-    _elementSuggestionCache[element] = _CompletionSuggestionEntry(
-      inputs: inputs,
-      suggestion: suggestion,
+    if (prefix != null) {
+      completion ??= elementData.completion;
+      completion = prefix + '.' + completion;
+    }
+
+    return CompletionSuggestionBuilderImpl(
+      element: elementData,
+      kind: kind,
+      completionOverride: completion,
+      relevance: relevance,
+      libraryUriStr: libraryUriStr,
+      isNotImported: isNotImported,
     );
-    return suggestion;
   }
 
-  /// The non-caching implementation of [_createSuggestion].
-  CompletionSuggestion? _createSuggestion0(
-    Element element, {
-    required String? completion,
-    required protocol.ElementKind? elementKind,
-    required CompletionSuggestionKind kind,
-    required String? prefix,
-    required int relevance,
-  }) {
+  /// The non-caching implementation of [_getElementCompletionData].
+  ElementCompletionData? _createElementCompletionData(Element element) {
+    // Do not include operators in suggestions.
     if (element is ExecutableElement && element.isOperator) {
-      // Do not include operators in suggestions
       return null;
     }
-    completion ??= element.displayName;
-    if (completion.isEmpty) {
-      return null;
-    }
-    if (prefix != null && prefix.isNotEmpty) {
-      completion = '$prefix.$completion';
-    }
-    var suggestion = CompletionSuggestion(kind, relevance, completion,
-        completion.length, 0, element.hasOrInheritsDeprecated, false);
 
-    _setDocumentation(suggestion, element);
-    var suggestedElement = suggestion.element = protocol.convertElement(element,
-        withNullability: _isNonNullableByDefault);
-    if (elementKind != null) {
-      suggestedElement.kind = elementKind;
-    }
+    var completion = element.displayName;
+    var documentation = _getDocumentation(element);
+
+    var suggestedElement = protocol.convertElement(
+      element,
+      withNullability: _isNonNullableByDefault,
+    );
+
     var enclosingElement = element.enclosingElement;
+
+    String? declaringType;
     if (enclosingElement is ClassElement) {
-      suggestion.declaringType = enclosingElement.displayName;
+      declaringType = enclosingElement.displayName;
     }
-    suggestion.returnType =
-        getReturnTypeString(element, withNullability: _isNonNullableByDefault);
+
+    var returnType = getReturnTypeString(
+      element,
+      withNullability: _isNonNullableByDefault,
+    );
+
+    List<String>? parameterNames;
+    List<String>? parameterTypes;
+    int? requiredParameterCount;
+    bool? hasNamedParameters;
+    CompletionDefaultArgumentList? defaultArgumentList;
     if (element is ExecutableElement && element is! PropertyAccessorElement) {
-      suggestion.parameterNames = element.parameters
-          .map((ParameterElement parameter) => parameter.name)
-          .toList();
-      suggestion.parameterTypes =
-          element.parameters.map((ParameterElement parameter) {
-        var paramType = parameter.type;
-        return paramType.getDisplayString(
-            withNullability: _isNonNullableByDefault);
+      parameterNames = element.parameters.map((parameter) {
+        return parameter.name;
+      }).toList();
+      parameterTypes = element.parameters.map((ParameterElement parameter) {
+        return parameter.type.getDisplayString(
+          withNullability: _isNonNullableByDefault,
+        );
       }).toList();
 
       var requiredParameters = element.parameters
           .where((ParameterElement param) => param.isRequiredPositional);
-      suggestion.requiredParameterCount = requiredParameters.length;
+      requiredParameterCount = requiredParameters.length;
 
       var namedParameters =
           element.parameters.where((ParameterElement param) => param.isNamed);
-      suggestion.hasNamedParameters = namedParameters.isNotEmpty;
+      hasNamedParameters = namedParameters.isNotEmpty;
 
-      addDefaultArgDetails(
-          suggestion, element, requiredParameters, namedParameters);
+      defaultArgumentList = computeCompletionDefaultArgumentList(
+          element, requiredParameters, namedParameters);
     }
-    return suggestion;
+
+    return ElementCompletionData(
+      completion: completion,
+      isDeprecated: element.hasOrInheritsDeprecated,
+      declaringType: declaringType,
+      returnType: returnType,
+      parameterNames: parameterNames,
+      parameterTypes: parameterTypes,
+      requiredParameterCount: requiredParameterCount,
+      hasNamedParameters: hasNamedParameters,
+      documentation: documentation,
+      defaultArgumentList: defaultArgumentList,
+      element: suggestedElement,
+    );
+  }
+
+  /// If the [element] has a documentation comment, return it.
+  _ElementDocumentation? _getDocumentation(Element element) {
+    var documentationCache = request.documentationCache;
+    var data = documentationCache?.dataFor(element);
+    if (data != null) {
+      return _ElementDocumentation(
+        full: data.full,
+        summary: data.summary,
+      );
+    }
+    var doc = DartUnitHoverComputer.computeDocumentation(
+      request.dartdocDirectiveInfo,
+      element,
+      includeSummary: true,
+    );
+    if (doc is DocumentationWithSummary) {
+      return _ElementDocumentation(
+        full: doc.full,
+        summary: doc.summary,
+      );
+    }
+    if (doc is Documentation) {
+      return _ElementDocumentation(
+        full: doc.full,
+        summary: null,
+      );
+    }
+    return null;
+  }
+
+  /// Return [ElementCompletionData] for the [element], or `null` if the
+  /// element cannot be suggested for completion.
+  ElementCompletionData? _getElementCompletionData(Element element) {
+    ElementCompletionData? result;
+
+    var hasCompletionData = element.ifTypeOrNull<HasCompletionData>();
+    if (hasCompletionData != null) {
+      result = hasCompletionData.completionData.ifTypeOrNull();
+    }
+
+    result ??= _createElementCompletionData(element);
+
+    hasCompletionData?.completionData = result;
+    return result;
   }
 
   /// Return the type associated with the [accessor], maybe `null` if an
@@ -1300,7 +1496,7 @@
 
 abstract class SuggestionListener {
   /// Invoked when a suggestion has been built.
-  void builtSuggestion(protocol.CompletionSuggestion suggestion);
+  void builtSuggestion(CompletionSuggestionBuilder suggestionBuilder);
 
   /// Invoked with the values of the features that were computed in the process
   /// of building a suggestion. This method is invoked prior to invoking
@@ -1329,80 +1525,44 @@
   void missingElementKindTableFor(String completionLocation);
 }
 
-/// The entry of the element to suggestion cache.
-class _CompletionSuggestionEntry {
-  final _CompletionSuggestionInputs inputs;
+/// [CompletionSuggestionBuilder] that is based on a [CompletionSuggestion].
+class ValueCompletionSuggestionBuilder implements CompletionSuggestionBuilder {
+  final CompletionSuggestion _suggestion;
 
-  /// The suggestion computed for the element and [inputs].
-  final CompletionSuggestion suggestion;
-
-  _CompletionSuggestionEntry({
-    required this.inputs,
-    required this.suggestion,
-  });
-}
-
-/// The inputs, other than the [Element], that were provided to create an
-/// instance of [CompletionSuggestion].
-class _CompletionSuggestionInputs {
-  final String? completion;
-  final protocol.ElementKind? elementKind;
-  final CompletionSuggestionKind kind;
-  final String? prefix;
-
-  _CompletionSuggestionInputs({
-    required this.completion,
-    required this.elementKind,
-    required this.kind,
-    required this.prefix,
-  });
+  ValueCompletionSuggestionBuilder(this._suggestion);
 
   @override
-  bool operator ==(Object other) {
-    return other is _CompletionSuggestionInputs &&
-        other.completion == completion &&
-        other.elementKind == elementKind &&
-        other.kind == kind &&
-        other.prefix == prefix;
+  String get completion => _suggestion.completion;
+
+  @override
+  String get key => completion;
+
+  @override
+  protocol.CompletionSuggestionKind get kind => _suggestion.kind;
+
+  @override
+  int get relevance => _suggestion.relevance;
+
+  @override
+  CompletionSuggestion build() {
+    return _suggestion;
   }
 }
 
-extension CompletionSuggestionExtension on CompletionSuggestion {
-  CompletionSuggestion copyWith({
-    CopyWithValue<bool?>? isNotImported,
-  }) {
-    return protocol.CompletionSuggestion(
-      kind,
-      relevance,
-      completion,
-      selectionOffset,
-      selectionLength,
-      isDeprecated,
-      isPotential,
-      displayText: displayText,
-      replacementOffset: replacementOffset,
-      replacementLength: replacementLength,
-      docSummary: docSummary,
-      docComplete: docComplete,
-      declaringType: declaringType,
-      defaultArgumentListString: defaultArgumentListString,
-      defaultArgumentListTextRanges: defaultArgumentListTextRanges,
-      element: element,
-      returnType: returnType,
-      parameterNames: parameterNames,
-      parameterTypes: parameterTypes,
-      requiredParameterCount: requiredParameterCount,
-      hasNamedParameters: hasNamedParameters,
-      parameterName: parameterName,
-      parameterType: parameterType,
-      isNotImported: isNotImported.orElse(this.isNotImported),
-    );
-  }
+class _ElementDocumentation {
+  final String full;
+  final String? summary;
+
+  _ElementDocumentation({
+    required this.full,
+    required this.summary,
+  });
 }
 
-extension _CopyWithValueExtension<T> on CopyWithValue<T>? {
-  T orElse(T defaultValue) {
+extension on Object? {
+  /// If the target is [T], return it, otherwise `null`.
+  T? ifTypeOrNull<T>() {
     final self = this;
-    return self != null ? self.value : defaultValue;
+    return self is T ? self : null;
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index eef975c..279afd7 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -25,13 +25,55 @@
   return b.relevance.compareTo(a.relevance);
 };
 
-/// Add default argument list text and ranges based on the given
+String buildClosureParameters(FunctionType type) {
+  var buffer = StringBuffer();
+  buffer.write('(');
+
+  var hasNamed = false;
+  var hasOptionalPositional = false;
+  var parameters = type.parameters;
+  var existingNames = parameters.map((p) => p.name).toSet();
+  for (var i = 0; i < parameters.length; ++i) {
+    var parameter = parameters[i];
+    if (i != 0) {
+      buffer.write(', ');
+    }
+    if (parameter.isNamed && !hasNamed) {
+      hasNamed = true;
+      buffer.write('{');
+    } else if (parameter.isOptionalPositional && !hasOptionalPositional) {
+      hasOptionalPositional = true;
+      buffer.write('[');
+    }
+    var name = parameter.name;
+    if (name.isEmpty) {
+      name = 'p$i';
+      var index = 1;
+      while (existingNames.contains(name)) {
+        name = 'p${i}_$index';
+        index++;
+      }
+    }
+    buffer.write(name);
+  }
+
+  if (hasNamed) {
+    buffer.write('}');
+  } else if (hasOptionalPositional) {
+    buffer.write(']');
+  }
+
+  buffer.write(')');
+  return buffer.toString();
+}
+
+/// Compute default argument list text and ranges based on the given
 /// [requiredParams] and [namedParams].
-void addDefaultArgDetails(
-    CompletionSuggestion suggestion,
-    Element element,
-    Iterable<ParameterElement> requiredParams,
-    Iterable<ParameterElement> namedParams) {
+CompletionDefaultArgumentList computeCompletionDefaultArgumentList(
+  Element element,
+  Iterable<ParameterElement> requiredParams,
+  Iterable<ParameterElement> namedParams,
+) {
   var sb = StringBuffer();
   var ranges = <int>[];
 
@@ -95,50 +137,10 @@
     }
   }
 
-  suggestion.defaultArgumentListString = sb.isNotEmpty ? sb.toString() : null;
-  suggestion.defaultArgumentListTextRanges = ranges.isNotEmpty ? ranges : null;
-}
-
-String buildClosureParameters(FunctionType type) {
-  var buffer = StringBuffer();
-  buffer.write('(');
-
-  var hasNamed = false;
-  var hasOptionalPositional = false;
-  var parameters = type.parameters;
-  var existingNames = parameters.map((p) => p.name).toSet();
-  for (var i = 0; i < parameters.length; ++i) {
-    var parameter = parameters[i];
-    if (i != 0) {
-      buffer.write(', ');
-    }
-    if (parameter.isNamed && !hasNamed) {
-      hasNamed = true;
-      buffer.write('{');
-    } else if (parameter.isOptionalPositional && !hasOptionalPositional) {
-      hasOptionalPositional = true;
-      buffer.write('[');
-    }
-    var name = parameter.name;
-    if (name.isEmpty) {
-      name = 'p$i';
-      var index = 1;
-      while (existingNames.contains(name)) {
-        name = 'p${i}_$index';
-        index++;
-      }
-    }
-    buffer.write(name);
-  }
-
-  if (hasNamed) {
-    buffer.write('}');
-  } else if (hasOptionalPositional) {
-    buffer.write(']');
-  }
-
-  buffer.write(')');
-  return buffer.toString();
+  return CompletionDefaultArgumentList(
+    text: sb.isNotEmpty ? sb.toString() : null,
+    ranges: ranges.isNotEmpty ? ranges : null,
+  );
 }
 
 /// Create a new protocol Element for inclusion in a completion suggestion.
@@ -246,6 +248,16 @@
   return type.getDisplayString(withNullability: false);
 }
 
+class CompletionDefaultArgumentList {
+  final String? text;
+  final List<int>? ranges;
+
+  CompletionDefaultArgumentList({
+    required this.text,
+    required this.ranges,
+  });
+}
+
 /// A tuple of text to insert and an (optional) location for the cursor.
 class DefaultArgument {
   /// The text to insert.
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index c7233ba..0e0b1c9 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -56,6 +56,11 @@
     30,
     'Assign value to new local variable',
   );
+  static const CONVERT_CLASS_TO_ENUM = AssistKind(
+    'dart.assist.convert.classToEnum',
+    30,
+    'Convert class to an enum',
+  );
   static const CONVERT_CLASS_TO_MIXIN = AssistKind(
     'dart.assist.convert.classToMixin',
     30,
@@ -196,6 +201,11 @@
     30,
     'Convert to a spread',
   );
+  static const CONVERT_TO_SUPER_INITIALIZING_PARAMETER = AssistKind(
+    'dart.assist.convert.toSuperInitializingParameter',
+    30,
+    'Convert to a super initializing parameter',
+  );
   static const ENCAPSULATE_FIELD = AssistKind(
     'dart.assist.encapsulateField',
     30,
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 2e8d400..70835d5 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -12,6 +12,7 @@
 import 'package:analysis_server/src/services/correction/dart/add_type_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/assign_to_local_variable.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_class_to_mixin.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_block.dart';
@@ -38,6 +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/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';
@@ -90,6 +92,7 @@
     AddTypeAnnotation.newInstanceBulkFixable,
     AssignToLocalVariable.newInstance,
     ConvertAddAllToSpread.newInstance,
+    ConvertClassToEnum.newInstance,
     ConvertClassToMixin.newInstance,
     ConvertConditionalExpressionToIfElement.newInstance,
     ConvertDocumentationIntoBlock.newInstance,
@@ -104,19 +107,20 @@
     ConvertMapFromIterableToForLiteral.newInstance,
     ConvertPartOfToUri.newInstance,
     ConvertToDoubleQuotes.newInstance,
-    ConvertToFieldParameter.newInstance,
-    ConvertToMultilineString.newInstance,
-    ConvertToNormalParameter.newInstance,
-    ConvertToSingleQuotes.newInstance,
     ConvertToExpressionFunctionBody.newInstance,
+    ConvertToFieldParameter.newInstance,
     ConvertToGenericFunctionSyntax.newInstance,
     ConvertToIntLiteral.newInstance,
     ConvertToListLiteral.newInstance,
     ConvertToMapLiteral.newInstance,
+    ConvertToMultilineString.newInstance,
+    ConvertToNormalParameter.newInstance,
     ConvertToNullAware.newInstance,
     ConvertToPackageImport.newInstance,
     ConvertToRelativeImport.newInstance,
     ConvertToSetLiteral.newInstance,
+    ConvertToSingleQuotes.newInstance,
+    ConvertToSuperInitializingParameter.newInstance,
     EncapsulateField.newInstance,
     ExchangeOperands.newInstance,
     FlutterConvertToChildren.newInstance,
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index 79f8ef3..621744c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -541,16 +541,15 @@
     return false;
   }
 
-  /// Return `true` if the [node] might be a type name.
-  bool mightBeTypeIdentifier(AstNode node) {
+  /// If the [node] might be a type name, return its name.
+  String? nameOfType(AstNode node) {
     if (node is SimpleIdentifier) {
-      var parent = node.parent;
-      if (parent is NamedType) {
-        return true;
+      var name = node.name;
+      if (node.parent is NamedType || _isNameOfType(name)) {
+        return name;
       }
-      return _isNameOfType(node.name);
     }
-    return false;
+    return null;
   }
 
   /// Replace all occurrences of the [oldIndent] with the [newIndent] within the
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index 2ec24e4..f474802 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -74,9 +74,9 @@
       node = node.identifier;
     }
     // Process if looks like a type.
-    if (mightBeTypeIdentifier(node)) {
+    var name = nameOfType(node);
+    if (name != null) {
       // Prepare for selecting the closest element.
-      var name = (node as SimpleIdentifier).name;
       var finder = _ClosestElementFinder(
           name, (Element element) => element is ClassElement);
       // Check elements of this library.
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
new file mode 100644
index 0000000..9530b09
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
@@ -0,0 +1,769 @@
+// 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/util.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/constant/value.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.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';
+import 'package:collection/collection.dart';
+
+class ConvertClassToEnum extends CorrectionProducer {
+  @override
+  AssistKind get assistKind => DartAssistKind.CONVERT_CLASS_TO_ENUM;
+
+  @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
+      // converted.
+      return;
+    }
+    if (libraryElement.units.length > 1) {
+      // If the library has any part files, then the class can't be converted
+      // because we don't currently have a performant way to access the ASTs for
+      // the parts to check for invocations of the constructors or subclasses of
+      // the class.
+      return;
+    }
+    var node = this.node;
+    if (node is! SimpleIdentifier) {
+      return;
+    }
+    var parent = node.parent;
+    if (parent is ClassDeclaration && parent.name == node) {
+      var description = _EnumDescription.fromClass(parent);
+      if (description != null) {
+        await builder.addDartFileEdit(file, (builder) {
+          description.applyChanges(builder, utils);
+        });
+      }
+    }
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
+  static ConvertClassToEnum newInstance() => ConvertClassToEnum();
+}
+
+/// A superclass for the [_EnumVisitor] and [_NonEnumVisitor].
+class _BaseVisitor extends RecursiveAstVisitor<void> {
+  /// The element representing the enum declaration that's being visited.
+  final ClassElement classElement;
+
+  _BaseVisitor(this.classElement);
+
+  /// Return `true` if the given [node] is an invocation of a generative
+  /// constructor from the class being converted.
+  bool invokesGenerativeConstructor(InstanceCreationExpression node) {
+    var constructorElement = node.constructorName.staticElement;
+    return constructorElement != null &&
+        !constructorElement.isFactory &&
+        constructorElement.enclosingElement == classElement;
+  }
+}
+
+/// An exception thrown by the visitors if a condition is found that prevents
+/// the class from being converted.
+class _CannotConvertException implements Exception {
+  final String message;
+
+  _CannotConvertException(this.message);
+}
+
+/// A representation of a static field in the class being converted that will be
+/// replaced by an enum constant.
+class _ConstantField extends _Field {
+  /// The element representing the constructor used to initialize the field.
+  ConstructorElement constructorElement;
+
+  /// The invocation of the constructor.
+  final InstanceCreationExpression instanceCreation;
+
+  /// The value of the index field.
+  final int indexValue;
+
+  _ConstantField(
+      FieldElement element,
+      VariableDeclaration declaration,
+      VariableDeclarationList declarationList,
+      FieldDeclaration fieldDeclaration,
+      this.instanceCreation,
+      this.constructorElement,
+      this.indexValue)
+      : super(element, declaration, declarationList, fieldDeclaration);
+}
+
+/// Information about a single constructor in the class being converted.
+class _Constructor {
+  /// The declaration of the constructor.
+  final ConstructorDeclaration declaration;
+
+  /// The element representing the constructor.
+  final ConstructorElement element;
+
+  _Constructor(this.declaration, this.element);
+}
+
+/// Information about the constructors in the class being converted.
+class _Constructors {
+  /// A map from elements to constructors.
+  final Map<ConstructorElement, _Constructor> byElement = {};
+
+  _Constructors();
+
+  /// Return the constructors in this collection.
+  Iterable<_Constructor> get constructors => byElement.values;
+
+  /// Add the given [constructor] to this collection.
+  void add(_Constructor constructor) {
+    byElement[constructor.element] = constructor;
+  }
+
+  /// Return the constructor with the given [element].
+  _Constructor? forElement(ConstructorElement element) {
+    return byElement[element];
+  }
+}
+
+/// A description of how to convert the class to an enum.
+class _EnumDescription {
+  /// The class declaration being converted.
+  final ClassDeclaration classDeclaration;
+
+  /// A map from constructor declarations to information about the parameter
+  /// corresponding to the index field. The map is `null` if there is no index
+  /// field.
+  final Map<_Constructor, _Parameter>? constructorMap;
+
+  /// A list of the declarations to be converted into enum constants.
+  final _Fields fields;
+
+  /// A list of the indexes of members that need to be deleted.
+  final List<int> membersToDelete;
+
+  _EnumDescription({
+    required this.classDeclaration,
+    required this.constructorMap,
+    required this.fields,
+    required this.membersToDelete,
+  });
+
+  /// Return the offset immediately following the opening brace for the class
+  /// body.
+  int get bodyOffset => classDeclaration.leftBracket.end;
+
+  /// Use the [builder] and correction [utils] to apply the change necessary to
+  /// convert the class to an enum.
+  void applyChanges(DartFileEditBuilder builder, CorrectionUtils utils) {
+    // Replace the keyword.
+    builder.addSimpleReplacement(
+        range.token(classDeclaration.classKeyword), 'enum');
+
+    // Remove the extends clause if there is one.
+    final extendsClause = classDeclaration.extendsClause;
+    if (extendsClause != null) {
+      var followingToken = extendsClause.endToken.next!;
+      builder.addDeletion(range.startStart(extendsClause, followingToken));
+    }
+
+    // Compute the declarations of the enum constants and delete the fields
+    // being converted.
+    var members = classDeclaration.members;
+    var indent = utils.getIndent(1);
+    var eol = utils.endOfLine;
+    var constantsBuffer = StringBuffer();
+    var fieldsToConvert = fields.fieldsToConvert;
+    fieldsToConvert
+        .sort((first, second) => first.indexValue.compareTo(second.indexValue));
+    for (var field in fieldsToConvert) {
+      // Compute the declaration of the corresponding enum constant.
+      if (constantsBuffer.isNotEmpty) {
+        constantsBuffer.write(',$eol$indent');
+      }
+      constantsBuffer.write(field.name);
+      var invocation = field.instanceCreation;
+      var constructorNameNode = invocation.constructorName;
+      var invokedConstructorElement = field.constructorElement;
+      var invokedConstructor = constructorMap?.keys.firstWhere(
+          (constructor) => constructor.element == invokedConstructorElement);
+      var parameterData = constructorMap?[invokedConstructor];
+      var typeArguments = constructorNameNode.type.typeArguments;
+      if (typeArguments != null) {
+        constantsBuffer.write(utils.getNodeText(typeArguments));
+      }
+      var constructorName = constructorNameNode.name?.name;
+      if (constructorName != null) {
+        constantsBuffer.write('.$constructorName');
+      }
+      var argumentList = invocation.argumentList;
+      var arguments = argumentList.arguments;
+      var argumentCount = arguments.length - (parameterData == null ? 0 : 1);
+      if (argumentCount == 0) {
+        if (typeArguments != null || constructorName != null) {
+          constantsBuffer.write('()');
+        }
+      } else if (parameterData == null) {
+        constantsBuffer.write(utils.getNodeText(argumentList));
+      } else {
+        constantsBuffer.write('(');
+        var index = parameterData.index;
+        var last = arguments.length - 1;
+        if (index == 0) {
+          var offset = arguments[1].offset;
+          var length = arguments[last].end - offset;
+          constantsBuffer.write(utils.getText(offset, length));
+        } else if (index == last) {
+          var offset = arguments[0].offset;
+          int length;
+          if (arguments[last].endToken.next?.type == TokenType.COMMA) {
+            length = arguments[last].offset - offset;
+          } else {
+            length = arguments[last - 1].end - offset;
+          }
+          constantsBuffer.write(utils.getText(offset, length));
+        } else {
+          var offset = arguments[0].offset;
+          var length = arguments[index].offset - offset;
+          constantsBuffer.write(utils.getText(offset, length));
+
+          offset = arguments[index + 1].offset;
+          length = argumentList.endToken.offset - offset;
+          constantsBuffer.write(utils.getText(offset, length));
+        }
+        constantsBuffer.write(')');
+      }
+
+      // Delete the static field that was converted to an enum constant.
+      _deleteField(builder, field, members);
+    }
+
+    // Remove the index field.
+    var indexField = fields.indexField;
+    if (indexField != null) {
+      _deleteField(builder, indexField, members);
+    }
+
+    // Update the constructors.
+    var removedConstructor = _removeUnnamedConstructor();
+    _transformConstructors(builder, removedConstructor);
+
+    // Special case replacing all of the members.
+    if (membersToDelete.length == members.length) {
+      builder.addSimpleReplacement(range.startEnd(members.first, members.last),
+          constantsBuffer.toString());
+      return;
+    }
+
+    // Insert the declarations of the enum constants.
+    var semicolon = ';';
+    var prefix = '$eol$indent';
+    var suffix = '$semicolon$eol';
+    builder.addSimpleInsertion(bodyOffset, '$prefix$constantsBuffer$suffix');
+
+    // Delete any members that are no longer needed.
+    membersToDelete.sort();
+    for (var range in range.nodesInList(members, membersToDelete)) {
+      builder.addDeletion(range);
+    }
+  }
+
+  /// Use the [builder] to delete the [field].
+  void _deleteField(DartFileEditBuilder builder, _Field field,
+      NodeList<ClassMember> members) {
+    var variableList = field.declarationList;
+    if (variableList.variables.length == 1) {
+      membersToDelete.add(members.indexOf(field.fieldDeclaration));
+    } else {
+      builder.addDeletion(
+          range.nodeInList(variableList.variables, field.declaration));
+    }
+  }
+
+  /// If the unnamed constructor is the only constructor, and if it has no
+  /// parameters other than potentially the index field, then remove it.
+  ConstructorDeclaration? _removeUnnamedConstructor() {
+    var members = classDeclaration.members;
+    var constructors = members.whereType<ConstructorDeclaration>().toList();
+    if (constructors.length != 1) {
+      return null;
+    }
+    var constructor = constructors[0];
+    var name = constructor.name?.name;
+    if (name != null && name != 'new') {
+      return null;
+    }
+    var parameters = constructor.parameters.parameters;
+    // If there's only one constructor, then there can only be one entry in the
+    // constructor map.
+    var parameterData = constructorMap?.entries.first.value;
+    // `parameterData` should only be `null` if there is no index field.
+    var updatedParameterCount =
+        parameters.length - (parameterData == null ? 0 : 1);
+    if (updatedParameterCount != 0) {
+      return null;
+    }
+    membersToDelete.add(members.indexOf(constructor));
+    return constructor;
+  }
+
+  /// Transform the used constructors by removing the parameter corresponding to
+  /// the index field.
+  void _transformConstructors(
+      DartFileEditBuilder builder, ConstructorDeclaration? removedConstructor) {
+    final constructorMap = this.constructorMap;
+    if (constructorMap == null) {
+      return;
+    }
+    for (var constructor in constructorMap.keys) {
+      if (constructor.declaration != removedConstructor) {
+        var parameterData = constructorMap[constructor];
+        if (parameterData != null) {
+          var parameters = constructor.declaration.parameters.parameters;
+          builder.addDeletion(
+              range.nodeInList(parameters, parameters[parameterData.index]));
+        }
+      }
+    }
+  }
+
+  /// If the given [node] can be converted into an enum, then return a
+  /// description of the conversion work to be done. Otherwise, return `null`.
+  static _EnumDescription? fromClass(ClassDeclaration node) {
+    // The class must be a concrete class.
+    var classElement = node.declaredElement;
+    if (classElement == null || classElement.isAbstract) {
+      return null;
+    }
+
+    // The class must be a subclass of Object, whether implicitly or explicitly.
+    var extendsClause = node.extendsClause;
+    if (extendsClause != null &&
+        extendsClause.superclass.type?.isDartCoreObject == false) {
+      return null;
+    }
+
+    // The class must either be private or must only have private constructors.
+    var constructors = _validateConstructors(node, classElement);
+    if (constructors == null) {
+      return null;
+    }
+
+    // The class must not override either `==` or `hashCode`.
+    if (!_validateMethods(node)) {
+      return null;
+    }
+
+    // There must be at least one static field that can be converted into an
+    // enum constant.
+    //
+    // The instance fields must all be final.
+    var fields = _validateFields(node, classElement);
+    if (fields == null || fields.fieldsToConvert.isEmpty) {
+      return null;
+    }
+
+    var visitor = _EnumVisitor(classElement, fields.fieldsToConvert);
+    try {
+      node.accept(visitor);
+    } on _CannotConvertException {
+      return null;
+    }
+
+    // Within the defining library,
+    // - there can't be any subclasses of the class to be converted,
+    // - there can't be any invocations of any constructor from that class.
+    try {
+      node.root.accept(_NonEnumVisitor(classElement));
+    } on _CannotConvertException {
+      return null;
+    }
+
+    var usedConstructors = _computeUsedConstructors(constructors, fields);
+    var constructorMap = _indexFieldData(usedConstructors, fields);
+    if (fields.indexField != null && constructorMap == null) {
+      return null;
+    }
+
+    var membersToDelete = <int>[];
+    return _EnumDescription(
+      classDeclaration: node,
+      constructorMap: constructorMap,
+      fields: fields,
+      membersToDelete: membersToDelete,
+    );
+  }
+
+  /// Return the subset of [constructors] that are invoked by the [fields] to be
+  /// converted.
+  static _Constructors _computeUsedConstructors(
+      _Constructors constructors, _Fields fields) {
+    var usedElements = <ConstructorElement>{};
+    for (var field in fields.fieldsToConvert) {
+      usedElements.add(field.constructorElement);
+    }
+    var usedConstructors = _Constructors();
+    for (var element in usedElements) {
+      var constructor = constructors.forElement(element);
+      if (constructor != null) {
+        usedConstructors.add(constructor);
+      }
+    }
+    return usedConstructors;
+  }
+
+  /// If the index field can be removed, return a map describing the changes
+  /// that need to be made to both the constructors and the invocations of those
+  /// constructors. Otherwise, return `null`.
+  static Map<_Constructor, _Parameter>? _indexFieldData(
+      _Constructors usedConstructors, _Fields fields) {
+    var indexField = fields.indexField;
+    if (indexField == null) {
+      return null;
+    }
+    // Ensure that the index field has a corresponding field formal initializer
+    // in each of the used constructors.
+    var constructorMap = <_Constructor, _Parameter>{};
+    for (var constructor in usedConstructors.constructors) {
+      var parameterData = _indexParameter(constructor, indexField);
+      if (parameterData == null) {
+        return null;
+      }
+      constructorMap[constructor] = parameterData;
+    }
+
+    var fieldsToConvert = fields.fieldsToConvert;
+    var values = <int>{};
+    for (var field in fieldsToConvert) {
+      var constructorElement = field.constructorElement;
+      var constructor = usedConstructors.forElement(constructorElement);
+      if (constructor == null) {
+        // We should never reach this point.
+        return null;
+      }
+      var parameterData = constructorMap[constructor];
+      if (parameterData == null) {
+        // We should never reach this point.
+        return null;
+      }
+      var arguments = field.instanceCreation.argumentList.arguments;
+      var argument = parameterData.getArgument(arguments);
+      if (argument is! IntegerLiteral) {
+        return null;
+      }
+      var value = argument.value;
+      if (value == null) {
+        return null;
+      }
+      if (!values.add(value)) {
+        // Duplicate value.
+        return null;
+      }
+    }
+    var sortedValues = values.toList()..sort();
+    if (sortedValues.length == fieldsToConvert.length &&
+        sortedValues.first == 0 &&
+        sortedValues.last == fieldsToConvert.length - 1) {
+      return constructorMap;
+    }
+    return null;
+  }
+
+  static _Parameter? _indexParameter(
+      _Constructor constructor, _Field? indexField) {
+    if (indexField == null) {
+      return null;
+    }
+    var parameters = constructor.declaration.parameters.parameters;
+    var indexFieldElement = indexField.element;
+    for (var i = 0; i < parameters.length; i++) {
+      var element = parameters[i].declaredElement;
+      if (element is FieldFormalParameterElement) {
+        if (element.field == indexFieldElement) {
+          if (element.isPositional) {
+            return _Parameter(i, element);
+          } else {
+            return _Parameter(i, element);
+          }
+        }
+      }
+    }
+    return null;
+  }
+
+  /// Return a representation of all of the constructors declared by the
+  /// [classDeclaration], or `null` if the class can't be converted.
+  ///
+  /// The [classElement] must be the element declared by the [classDeclaration].
+  static _Constructors? _validateConstructors(
+      ClassDeclaration classDeclaration, ClassElement classElement) {
+    var constructors = _Constructors();
+    for (var member in classDeclaration.members) {
+      if (member is ConstructorDeclaration) {
+        var constructor = member.declaredElement;
+        if (constructor is ConstructorElement) {
+          if (!classElement.isPrivate && !constructor.isPrivate) {
+            // Public constructor in public enum.
+            return null;
+          } else if (!constructor.isFactory && !constructor.isConst) {
+            // Non-const constructor.
+            return null;
+          }
+          constructors.add(_Constructor(member, constructor));
+        } else {
+          // Not resolved.
+          return null;
+        }
+      }
+    }
+    return constructors;
+  }
+
+  /// Return a representation of all of the constructors declared by the
+  /// [classDeclaration], or `null` if the class can't be converted.
+  ///
+  /// The [classElement] must be the element declared by the [classDeclaration].
+  static _Fields? _validateFields(
+      ClassDeclaration classDeclaration, ClassElement classElement) {
+    var potentialFieldsToConvert = <DartObject, List<_ConstantField>>{};
+    _Field? indexField;
+
+    for (var member in classDeclaration.members) {
+      if (member is FieldDeclaration) {
+        var fieldList = member.fields;
+        var fields = fieldList.variables;
+        if (member.isStatic) {
+          for (var field in fields) {
+            var fieldElement = field.declaredElement;
+            if (fieldElement is FieldElement) {
+              var fieldType = fieldElement.type;
+              // The field can be converted to be an enum constant if it
+              // - is a const field,
+              // - has a type equal to the type of the class, and
+              // - is initialized by an instance creation expression defined in this
+              //   class.
+              if (fieldElement.isConst &&
+                  fieldType is InterfaceType &&
+                  fieldType.element == classElement) {
+                var initializer = field.initializer;
+                if (initializer is InstanceCreationExpression) {
+                  var constructorElement =
+                      initializer.constructorName.staticElement;
+                  if (constructorElement != null &&
+                      !constructorElement.isFactory &&
+                      constructorElement.enclosingElement == classElement) {
+                    var fieldValue = fieldElement.computeConstantValue();
+                    if (fieldValue != null) {
+                      if (fieldList.variables.length != 1) {
+                        // Too many constants in the field declaration.
+                        return null;
+                      }
+                      potentialFieldsToConvert
+                          .putIfAbsent(fieldValue, () => [])
+                          .add(_ConstantField(
+                              fieldElement,
+                              field,
+                              fieldList,
+                              member,
+                              initializer,
+                              constructorElement,
+                              fieldValue.getField('index')?.toIntValue() ??
+                                  -1));
+                    }
+                  }
+                }
+              }
+            }
+          }
+        } else {
+          for (var field in fields) {
+            if (!field.isFinal) {
+              // Non-final instance field.
+              return null;
+            }
+            var fieldElement = field.declaredElement;
+            if (fieldElement is FieldElement) {
+              var fieldType = fieldElement.type;
+              if (fieldElement.name == 'index' && fieldType.isDartCoreInt) {
+                indexField = _Field(fieldElement, field, fieldList, member);
+              }
+            }
+          }
+        }
+      }
+    }
+
+    var fieldsToConvert = <_ConstantField>[];
+    for (var list in potentialFieldsToConvert.values) {
+      if (list.length == 1) {
+        fieldsToConvert.add(list[0]);
+      } else {
+        // TODO(brianwilkerson) We could potentially handle the case where
+        //  there's only one non-deprecated field in the list. We'd need to
+        //  change the return type for this method so that we could return two
+        //  lists: the list of fields to convert and the list of fields whose
+        //  initializer needs to be updated to refer to the constant.
+        return null;
+      }
+    }
+    return _Fields(fieldsToConvert, indexField);
+  }
+
+  /// Return `true` if the [classDeclaration] does not contain any methods that
+  /// prevent it from being converted.
+  static bool _validateMethods(ClassDeclaration classDeclaration) {
+    for (var member in classDeclaration.members) {
+      if (member is MethodDeclaration) {
+        if (member.name.name == '==' || member.name.name == 'hashCode') {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+}
+
+/// A visitor used to visit the class being converted. This visitor throws an
+/// exception if a constructor for the class is invoked anywhere other than the
+/// top-level expression of an initializer for one of the fields being converted.
+class _EnumVisitor extends _BaseVisitor {
+  /// The declarations of the fields that are to be converted.
+  final List<VariableDeclaration> fieldsToConvert;
+
+  /// A flag indicating whether we are currently visiting the children of a
+  /// field declaration that will be converted to be a constant.
+  bool inConstantDeclaration = false;
+
+  /// Initialize a newly created visitor to visit the class declaration
+  /// corresponding to the given [classElement].
+  _EnumVisitor(ClassElement classElement, List<_ConstantField> fieldsToConvert)
+      : fieldsToConvert =
+            fieldsToConvert.map((field) => field.declaration).toList(),
+        super(classElement);
+
+  @override
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
+    if (!inConstantDeclaration) {
+      if (invokesGenerativeConstructor(node)) {
+        throw _CannotConvertException(
+            'Constructor used outside constant initializer');
+      }
+    }
+    inConstantDeclaration = false;
+    super.visitInstanceCreationExpression(node);
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    if (fieldsToConvert.contains(node)) {
+      inConstantDeclaration = true;
+    }
+    super.visitVariableDeclaration(node);
+    inConstantDeclaration = false;
+  }
+}
+
+/// A representation of a field of interest in the class being converted.
+class _Field {
+  /// The element representing the field.
+  final FieldElement element;
+
+  /// The declaration of the field.
+  final VariableDeclaration declaration;
+
+  /// The list containing the [declaration]
+  final VariableDeclarationList declarationList;
+
+  /// The field declaration containing the [declarationList].
+  final FieldDeclaration fieldDeclaration;
+
+  _Field(this.element, this.declaration, this.declarationList,
+      this.fieldDeclaration);
+
+  /// Return the name of the field.
+  String get name => declaration.name.name;
+}
+
+/// A representation of all the fields of interest in the class being converted.
+class _Fields {
+  /// The fields to be converted into enum constants.
+  List<_ConstantField> fieldsToConvert;
+
+  /// The index field, or `null` if there is no index field.
+  _Field? indexField;
+
+  _Fields(this.fieldsToConvert, this.indexField);
+}
+
+/// A visitor that visits everything in the library other than the class being
+/// converted. This visitor throws an exception if the class can't be converted
+/// because
+/// - there is a subclass of the class, or
+/// - there is an invocation of one of the constructors of the class.
+class _NonEnumVisitor extends _BaseVisitor {
+  /// Initialize a newly created visitor to visit everything except the class
+  /// declaration corresponding to the given [classElement].
+  _NonEnumVisitor(ClassElement classElement) : super(classElement);
+
+  @override
+  void visitClassDeclaration(ClassDeclaration node) {
+    var element = node.declaredElement;
+    if (element == null) {
+      throw _CannotConvertException('Unresolved');
+    }
+    if (element != classElement) {
+      if (element.supertype?.element == classElement) {
+        throw _CannotConvertException('Class is extended');
+      } else if (element.interfaces
+          .map((e) => e.element)
+          .contains(classElement)) {
+        throw _CannotConvertException('Class is implemented');
+      } else if (element.mixins.map((e) => e.element).contains(classElement)) {
+        // This case won't occur unless there's an error in the source code, but
+        // it's easier to check for the condition than it is to check for the
+        // diagnostic.
+        throw _CannotConvertException('Class is mixed in');
+      }
+      super.visitClassDeclaration(node);
+    }
+  }
+
+  @override
+  void visitInstanceCreationExpression(InstanceCreationExpression node) {
+    if (invokesGenerativeConstructor(node)) {
+      throw _CannotConvertException(
+          'Constructor used outside class being converted');
+    }
+    super.visitInstanceCreationExpression(node);
+  }
+}
+
+/// An object used to access information about a specific parameter, including
+/// its index in the parameter list as well as any associated argument in an
+/// argument list.
+class _Parameter {
+  /// The index of this parameter in the enclosing constructor's parameter list.
+  final int index;
+
+  /// The element associated with the parameter.
+  final ParameterElement element;
+
+  _Parameter(this.index, this.element);
+
+  /// Return the expression representing the argument associated with this
+  /// parameter, or `null` if there is no such argument.
+  Expression? getArgument(NodeList<Expression> arguments) {
+    return arguments.firstWhereOrNull(
+        (argument) => argument.staticParameterElement == element);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
index 4e1c0eb..8d9d8d4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
@@ -49,7 +49,7 @@
     //
     // Extract the information needed to build the edit.
     //
-    var constructorTypeArguments = creation.constructorName.type2.typeArguments;
+    var constructorTypeArguments = creation.constructorName.type.typeArguments;
     //
     // Build the edit.
     //
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
index 1704cda..cbc6f18 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
@@ -51,7 +51,7 @@
     //
     // Extract the information needed to build the edit.
     //
-    var constructorTypeArguments = creation.constructorName.type2.typeArguments;
+    var constructorTypeArguments = creation.constructorName.type.typeArguments;
     //
     // Build the edit.
     //
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart
index 93e6460..7d3b150 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_package_import.dart
@@ -43,14 +43,14 @@
       }
 
       var importUri = uriSource.uri;
-      if (importUri.scheme != 'package') {
+      if (!importUri.isScheme('package')) {
         return;
       }
 
       // Don't offer to convert a 'package:' URI to itself.
       try {
         var uriContent = importDirective.uriContent;
-        if (uriContent == null || Uri.parse(uriContent).scheme == 'package') {
+        if (uriContent == null || Uri.parse(uriContent).isScheme('package')) {
           return;
         }
       } on FormatException {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_raw_string.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_raw_string.dart
new file mode 100644
index 0000000..0ccd810
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_raw_string.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: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';
+
+class ConvertToRawString extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.CONVERT_TO_RAW_STRING;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.CONVERT_TO_RAW_STRING_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var stringLiteral = node;
+    if ((stringLiteral is! SimpleStringLiteral) || stringLiteral.isRaw) {
+      return;
+    }
+
+    var literal = stringLiteral.literal;
+    var deletionOffsets = <int>[];
+    for (var offset = stringLiteral.contentsOffset;
+        offset < stringLiteral.contentsEnd;
+        offset++) {
+      var character = literal.lexeme[offset - literal.offset];
+      if (character == r'\') {
+        deletionOffsets.add(offset);
+        offset++;
+      }
+    }
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addSimpleInsertion(stringLiteral.offset, 'r');
+      for (var offset in deletionOffsets) {
+        builder.addDeletion(SourceRange(offset, 1));
+      }
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ConvertToRawString newInstance() => ConvertToRawString();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart
index 7acecb5..49bedd1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_relative_import.dart
@@ -45,7 +45,7 @@
 
     // Ignore if the uri is not a package: uri.
     var sourceUri = resolvedResult.uri;
-    if (sourceUri.scheme != 'package') {
+    if (!sourceUri.isScheme('package')) {
       return;
     }
 
@@ -61,7 +61,7 @@
     }
 
     // Ignore if import uri is not a package: uri.
-    if (importUri.scheme != 'package') {
+    if (!importUri.isScheme('package')) {
       return;
     }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
index 8ebe7c7..158a890 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
@@ -66,7 +66,7 @@
       //
       var name = creation.constructorName.name;
       var constructorTypeArguments =
-          creation.constructorName.type2.typeArguments;
+          creation.constructorName.type.typeArguments;
       TypeArgumentList? elementTypeArguments;
       SourceRange? elementsRange;
       if (name == null) {
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
new file mode 100644
index 0000000..b26d127
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_initializing_parameter.dart
@@ -0,0 +1,360 @@
+// 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/create_class.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart
index 9c01f35..9998f30 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_class.dart
@@ -48,10 +48,13 @@
     } else {
       return;
     }
-    if (!mightBeTypeIdentifier(nameNode)) {
+
+    final className = nameOfType(nameNode);
+    if (className == null) {
       return;
     }
-    className = nameNode.name;
+    this.className = className;
+
     // prepare environment
     Element targetUnit;
     var prefix = '';
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index e476729..1e367b0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -63,7 +63,7 @@
     }
 
     // prepare target interface type
-    var targetType = _constructorName.type2.type;
+    var targetType = _constructorName.type.type;
     if (targetType is! InterfaceType) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
index b9934c4..4769c4a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
@@ -49,7 +49,7 @@
     } else {
       return;
     }
-    if (!mightBeTypeIdentifier(nameNode)) {
+    if (nameOfType(nameNode) == null) {
       return;
     }
     // prepare environment
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart
index 34ecd3a..e57083d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart
@@ -23,7 +23,7 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     var widgetClass = node.thisOrAncestorOfType<ClassDeclaration>();
-    var superclass = widgetClass?.extendsClause?.superclass2;
+    var superclass = widgetClass?.extendsClause?.superclass;
     if (widgetClass == null || superclass == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart
index 94a7a71..552f56e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_wrap.dart
@@ -44,6 +44,16 @@
     var widgetExpressions = <Expression>[];
     if (analyzer.hasSelectedNodes) {
       for (var selectedNode in analyzer.selectedNodes) {
+        // If the user has selected exactly a Widget constructor name (without
+        // the argument list), expand the selection.
+        //
+        //    Text('foo')
+        //   [^^^^]
+        var parent = selectedNode.parent;
+        if (selectedNode is ConstructorName &&
+            parent is InstanceCreationExpression) {
+          selectedNode = parent;
+        }
         if (selectedNode is! Expression ||
             !flutter.isWidgetExpression(selectedNode)) {
           return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
index 7b1fbde..a876fd0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
@@ -25,9 +25,6 @@
     String ignoreCommentType,
   ) async {
     final lineInfo = unit.lineInfo;
-    if (lineInfo == null) {
-      return;
-    }
 
     await builder.addDartFileEdit(file, (builder) {
       final offset = insertDesc.offset;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
index 98cc241..d39f695 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
@@ -104,10 +104,8 @@
           targetNode = name;
         }
       }
-      if (mightBeTypeIdentifier(targetNode)) {
-        var typeName = (targetNode is SimpleIdentifier)
-            ? targetNode.name
-            : (targetNode as PrefixedIdentifier).prefix.name;
+      var typeName = nameOfType(targetNode);
+      if (typeName != null) {
         yield* _importLibraryForElement(typeName, const [
           ElementKind.CLASS,
           ElementKind.ENUM,
@@ -124,17 +122,13 @@
   }
 
   @override
-  bool mightBeTypeIdentifier(AstNode node) {
-    if (super.mightBeTypeIdentifier(node)) {
-      return true;
-    }
+  String? nameOfType(AstNode node) {
     if (node is PrefixedIdentifier) {
-      var parent = node.parent;
-      if (parent is NamedType) {
-        return true;
+      if (node.parent is NamedType) {
+        return node.prefix.name;
       }
     }
-    return false;
+    return super.nameOfType(node);
   }
 
   Stream<CorrectionProducer> _importExtensionInLibrary(
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
index 297bf72..6f25968 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
@@ -38,6 +38,8 @@
         await _forFunctionTypedFormalParameter(builder, node, parent);
       } else if (node is SimpleIdentifier && parent is FieldFormalParameter) {
         await _forFieldFormalParameter(builder, node, parent);
+      } else if (node is SimpleIdentifier && parent is SuperFormalParameter) {
+        await _forSuperFormalParameter(builder, node, parent);
       } else if (node is Expression &&
           parent is AssignmentExpression &&
           parent.rightHandSide == node) {
@@ -164,6 +166,31 @@
     });
   }
 
+  /// Makes [parameter] nullable if possible.
+  Future<void> _forSuperFormalParameter(ChangeBuilder builder,
+      SimpleIdentifier name, SuperFormalParameter parameter) async {
+    if (parameter.parameters != null) {
+      // A function-typed field formal parameter.
+      if (parameter.question != null) {
+        return;
+      }
+      _variableName = parameter.identifier.name;
+      await builder.addDartFileEdit(file, (builder) {
+        // Add '?' after `)`.
+        builder.addSimpleInsertion(parameter.endToken.end, '?');
+      });
+    } else {
+      var type = parameter.type;
+      if (type == null || !_typeCanBeMadeNullable(type)) {
+        return;
+      }
+      _variableName = parameter.identifier.name;
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addSimpleInsertion(type.end, '?');
+      });
+    }
+  }
+
   Future<void> _forVariableDeclaration(ChangeBuilder builder, Expression node,
       VariableDeclaration parent) async {
     var declarationList = parent.parent;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart b/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
index 417a2cf..82676c6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
@@ -27,7 +27,7 @@
       return;
     }
 
-    var namedType = creation.constructorName.type2;
+    var namedType = creation.constructorName.type;
     if (namedType.typeArguments != null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.dart
new file mode 100644
index 0000000..918c2a7
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_leading_underscore.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: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/ast/ast.dart';
+import 'package:analyzer/dart/element/element.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 RemoveLeadingUnderscore extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.REMOVE_LEADING_UNDERSCORE;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_LEADING_UNDERSCORE_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var identifier = node;
+    if (identifier is! SimpleIdentifier) {
+      return;
+    }
+
+    var name = identifier.name;
+    if (name.length < 2) {
+      return;
+    }
+
+    var newName = name.substring(1);
+
+    // Find references to the identifier.
+    List<SimpleIdentifier>? references;
+    var element = identifier.staticElement;
+    if (element is LocalVariableElement) {
+      var root = node.thisOrAncestorOfType<Block>();
+      if (root != null) {
+        references = findLocalElementReferences(root, element);
+      }
+    } else if (element is ParameterElement) {
+      if (!element.isNamed) {
+        var root = node
+            .thisOrAncestorMatching((node) =>
+                node.parent is FunctionDeclaration ||
+                node.parent is MethodDeclaration)
+            ?.parent;
+        if (root != null) {
+          references = findLocalElementReferences(root, element);
+        }
+      }
+    } else if (element is PrefixElement) {
+      var root = node.thisOrAncestorOfType<CompilationUnit>();
+      if (root != null) {
+        references = findPrefixElementReferences(root, element);
+      }
+    }
+    if (references == null) {
+      return;
+    }
+
+    // Compute the change.
+    var references_final = references;
+    await builder.addDartFileEdit(file, (builder) {
+      for (var reference in references_final) {
+        builder.addSimpleReplacement(range.node(reference), newName);
+      }
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static RemoveLeadingUnderscore newInstance() => RemoveLeadingUnderscore();
+}
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
new file mode 100644
index 0000000..08c09db
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unnecessary_late.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 '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 RemoveUnnecessaryLate extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.REMOVE_UNNECESSARY_LATE;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.REMOVE_UNNECESSARY_LATE_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final declaration = node;
+    if (declaration is! VariableDeclaration) {
+      return;
+    }
+    final declarationList = declaration.parent;
+    if (declarationList is! VariableDeclarationList) {
+      return;
+    }
+
+    if (declarationList.variables.any((v) => v.initializer == null)) {
+      // At least one variable declared in the same list does _not_ have an
+      // initializer; removing `late` may make such a variable declaration
+      // invalid.
+      return;
+    }
+
+    final lateToken = declarationList.lateKeyword;
+    if (lateToken == null) {
+      return;
+    }
+
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addDeletion(range.startStart(lateToken, lateToken.next!));
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static RemoveUnnecessaryLate newInstance() => RemoveUnnecessaryLate();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/rename_to_camel_case.dart b/pkg/analysis_server/lib/src/services/correction/dart/rename_to_camel_case.dart
index c42e69b..289767c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/rename_to_camel_case.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/rename_to_camel_case.dart
@@ -55,9 +55,11 @@
       }
     } else if (element is ParameterElement) {
       if (!element.isNamed) {
-        var root = node.thisOrAncestorMatching((node) =>
-            node.parent is ClassOrMixinDeclaration ||
-            node.parent is CompilationUnit);
+        var root = node
+            .thisOrAncestorMatching((node) =>
+                node.parent is FunctionDeclaration ||
+                node.parent is MethodDeclaration)
+            ?.parent;
         if (root != null) {
           references = findLocalElementReferences(root, element);
         }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_null_check_with_cast.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_null_check_with_cast.dart
new file mode 100644
index 0000000..8f2faf8
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_null_check_with_cast.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/dart/element/type.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 ReplaceNullCheckWithCast extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.REPLACE_NULL_CHECK_WITH_CAST;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.REPLACE_NULL_CHECK_WITH_CAST_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    final node = this.node;
+    if (node is! PostfixExpression) {
+      return;
+    }
+    var operand = node.operand;
+    var operator = node.operator;
+    var operandType = operand.staticType;
+    if (operandType is! TypeParameterType) {
+      return;
+    }
+    // It is possible that there are cases of precedence and syntax which would
+    // require additional parentheses, for example converting `p!.hashCode` to
+    // `(p as T).hashCode`. However no such cases are known to trigger the lint
+    // rule.
+    // TODO(srawlins): Follow up on
+    // https://github.com/dart-lang/linter/issues/3256.
+    await builder.addDartFileEdit(file, (builder) {
+      builder.addSimpleReplacement(range.token(operator),
+          ' as ${operandType.getDisplayString(withNullability: false)}');
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static ReplaceNullCheckWithCast newInstance() => ReplaceNullCheckWithCast();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type_future.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type_future.dart
index 9d3b8dd..dfa48e4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type_future.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_return_type_future.dart
@@ -13,15 +13,24 @@
   String _typeArgument = '';
 
   @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
   List<Object>? get fixArguments => [_typeArgument];
 
   @override
   FixKind get fixKind => DartFixKind.REPLACE_RETURN_TYPE_FUTURE;
 
   @override
+  FixKind get multiFixKind => DartFixKind.REPLACE_RETURN_TYPE_FUTURE_MULTI;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     // prepare the existing type
-    var typeAnnotation = node.thisOrAncestorOfType<TypeAnnotation>();
+    var typeAnnotation = _getTypeAnnotation(node);
     if (typeAnnotation == null) {
       return;
     }
@@ -34,4 +43,13 @@
 
   /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
   static ReplaceReturnTypeFuture newInstance() => ReplaceReturnTypeFuture();
+
+  static TypeAnnotation? _getTypeAnnotation(AstNode node) {
+    var function = node.thisOrAncestorOfType<FunctionDeclaration>();
+    if (function != null) {
+      return function.returnType;
+    }
+    var method = node.thisOrAncestorOfType<MethodDeclaration>();
+    return method?.returnType;
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart
index a5f687c..b1236c9 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart
@@ -67,9 +67,9 @@
               }
             }
           } else if (initializer is InstanceCreationExpression) {
-            if (initializer.constructorName.type2.typeArguments == null) {
+            if (initializer.constructorName.type.typeArguments == null) {
               typeArgumentsText = utils.getNodeText(typeArguments);
-              typeArgumentsOffset = initializer.constructorName.type2.end;
+              typeArgumentsOffset = initializer.constructorName.type.end;
             }
           }
         }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/sort_constructor_first.dart b/pkg/analysis_server/lib/src/services/correction/dart/sort_constructor_first.dart
new file mode 100644
index 0000000..3eb4641
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/sort_constructor_first.dart
@@ -0,0 +1,49 @@
+// 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_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 SortConstructorFirst extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.SORT_CONSTRUCTOR_FIRST;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.SORT_CONSTRUCTOR_FIRST_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var constructor = coveredNode?.parent;
+    var clazz = constructor?.parent;
+    if (clazz is! ClassDeclaration || constructor is! ConstructorDeclaration) {
+      return;
+    }
+
+    await builder.addDartFileEdit(file, (builder) {
+      var deletionRange = range.endEnd(
+        constructor.beginToken.previous!,
+        constructor.endToken,
+      );
+
+      builder.addDeletion(deletionRange);
+      builder.addSimpleInsertion(
+        clazz.leftBracket.end,
+        utils.getRangeText(deletionRange),
+      );
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static SortConstructorFirst newInstance() => SortConstructorFirst();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.dart b/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.dart
new file mode 100644
index 0000000..bfbcb2a
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.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/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';
+import 'package:collection/collection.dart';
+
+class SortUnnamedConstructorFirst extends CorrectionProducer {
+  @override
+  bool get canBeAppliedInBulk => true;
+
+  @override
+  bool get canBeAppliedToFile => true;
+
+  @override
+  FixKind get fixKind => DartFixKind.SORT_UNNAMED_CONSTRUCTOR_FIRST;
+
+  @override
+  FixKind get multiFixKind => DartFixKind.SORT_UNNAMED_CONSTRUCTOR_FIRST_MULTI;
+
+  @override
+  Future<void> compute(ChangeBuilder builder) async {
+    var clazz = coveredNode?.parent?.parent;
+    if (clazz is! ClassDeclaration) return;
+
+    final firstConstructor = clazz.childEntities
+            .firstWhereOrNull((child) => child is ConstructorDeclaration)
+        as ConstructorDeclaration?;
+    if (firstConstructor == null ||
+        firstConstructor.name == null ||
+        firstConstructor.name?.name == 'new') return;
+
+    final unnamedConstructor = clazz.childEntities.firstWhereOrNull(
+            (child) => child is ConstructorDeclaration && child.name == null)
+        as ConstructorDeclaration?;
+    if (unnamedConstructor == null) return;
+
+    await builder.addDartFileEdit(file, (builder) {
+      var deletionRange = range.endEnd(
+        unnamedConstructor.beginToken.previous!,
+        unnamedConstructor.endToken,
+      );
+
+      builder.addDeletion(deletionRange);
+      builder.addSimpleInsertion(
+        firstConstructor.beginToken.previous!.end,
+        utils.getRangeText(deletionRange),
+      );
+    });
+  }
+
+  /// Return an instance of this class. Used as a tear-off in `FixProcessor`.
+  static SortUnnamedConstructorFirst newInstance() =>
+      SortUnnamedConstructorFirst();
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt b/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
deleted file mode 100644
index badc576..0000000
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
+++ /dev/null
@@ -1,1079 +0,0 @@
-This file contains, for each analysis code and lint name:
-* "has fix(es)", if the code has fix(es)
-* "needs evaluation", if the code has not been evaluated in terms of fixes
-* "needs fix", if the code needs a fix, with a possible issue link
-* "fixes infeasible", if it has been deemed infeasible to write a fix for this code
-
-TODO(srawlins): Add lint names not found in LintNames?
-
-Stats:
-* 808 "needs evaluation"
-* 253 "has fix(es)"
-
-AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR: needs evaluation
-AnalysisOptionsErrorCode.PARSE_ERROR: needs evaluation
-AnalysisOptionsHintCode.PREVIEW_DART_2_SETTING_DEPRECATED: needs evaluation
-AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED: needs evaluation
-AnalysisOptionsHintCode.SUPER_MIXINS_SETTING_DEPRECATED: needs evaluation
-AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED: needs evaluation
-AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND: needs evaluation
-AnalysisOptionsWarningCode.INCLUDED_FILE_WARNING: needs evaluation
-AnalysisOptionsWarningCode.INVALID_OPTION: needs evaluation
-AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT: needs evaluation
-AnalysisOptionsWarningCode.SPEC_MODE_REMOVED: needs evaluation
-AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE: needs evaluation
-AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE: needs evaluation
-AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES: needs evaluation
-AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITHOUT_VALUES: needs evaluation
-AnalysisOptionsWarningCode.UNSUPPORTED_VALUE: needs evaluation
-CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER: needs evaluation
-CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER: needs evaluation
-CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE: needs evaluation
-CompileTimeErrorCode.AMBIGUOUS_EXPORT: needs evaluation
-CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS: needs evaluation
-CompileTimeErrorCode.AMBIGUOUS_IMPORT: needs evaluation
-CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH: needs evaluation
-CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER: needs evaluation
-CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.ASSIGNMENT_TO_CONST: needs evaluation
-CompileTimeErrorCode.ASSIGNMENT_TO_FINAL: has fix(es)
-CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL: has fix(es)
-CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER: needs evaluation
-CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION: needs evaluation
-CompileTimeErrorCode.ASSIGNMENT_TO_METHOD: needs evaluation
-CompileTimeErrorCode.ASSIGNMENT_TO_TYPE: needs evaluation
-CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT: has fix(es)
-CompileTimeErrorCode.AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER: needs evaluation
-CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT: has fix(es)
-CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY: has fix(es)
-CompileTimeErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER: needs evaluation
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME: needs evaluation
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME: needs evaluation
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE: needs evaluation
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME: needs evaluation
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME: needs evaluation
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME: needs evaluation
-CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED: needs evaluation
-CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS: needs evaluation
-CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE: needs evaluation
-CompileTimeErrorCode.CAST_TO_NON_TYPE: has fix(es)
-CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER: needs evaluation
-CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER: needs evaluation
-CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER: needs evaluation
-CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER: has fix(es)
-CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD: needs evaluation
-CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER: needs evaluation
-CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD: needs evaluation
-CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER: needs evaluation
-CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD: needs evaluation
-CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES: needs evaluation
-CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD: needs evaluation
-CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE: needs evaluation
-CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS: needs evaluation
-CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_EXTENSION: needs evaluation
-CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS: needs evaluation
-CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION: needs evaluation
-CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN: needs evaluation
-CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER: needs evaluation
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD: needs evaluation
-CompileTimeErrorCode.CONST_DEFERRED_CLASS: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_INT: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_TYPE_INT: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_TYPE_NUM: needs evaluation
-CompileTimeErrorCode.CONST_EVAL_TYPE_TYPE: needs evaluation
-CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE: has fix(es)
-CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.CONST_INSTANCE_FIELD: has fix(es)
-CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS: needs evaluation
-CompileTimeErrorCode.CONST_NOT_INITIALIZED: needs evaluation
-CompileTimeErrorCode.CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS: needs evaluation
-CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET: needs evaluation
-CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP: needs evaluation
-CompileTimeErrorCode.CONST_WITH_NON_CONST: has fix(es)
-CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT: needs evaluation
-CompileTimeErrorCode.CONST_WITH_NON_TYPE: has fix(es)
-CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS: needs evaluation
-CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF: needs evaluation
-CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF: needs evaluation
-CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT: needs evaluation
-CompileTimeErrorCode.CONTINUE_LABEL_ON_SWITCH: needs evaluation
-CompileTimeErrorCode.COULD_NOT_INFER: needs evaluation
-CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR: has fix(es)
-CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER: needs evaluation
-CompileTimeErrorCode.DEFERRED_IMPORT_OF_EXTENSION: needs evaluation
-CompileTimeErrorCode.DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE: needs evaluation
-CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION: needs evaluation
-CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT: needs evaluation
-CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME: needs evaluation
-CompileTimeErrorCode.DUPLICATE_DEFINITION: needs evaluation
-CompileTimeErrorCode.DUPLICATE_FIELD_FORMAL_PARAMETER: needs evaluation
-CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT: needs evaluation
-CompileTimeErrorCode.DUPLICATE_PART: needs evaluation
-CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING: needs evaluation
-CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET: needs evaluation
-CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP: needs evaluation
-CompileTimeErrorCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS: needs evaluation
-CompileTimeErrorCode.EXPECTED_ONE_SET_TYPE_ARGUMENTS: needs evaluation
-CompileTimeErrorCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS: needs evaluation
-CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY: needs evaluation
-CompileTimeErrorCode.EXPORT_LEGACY_SYMBOL: needs evaluation
-CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY: needs evaluation
-CompileTimeErrorCode.EXPRESSION_IN_MAP: needs evaluation
-CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS: needs evaluation
-CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS: needs evaluation
-CompileTimeErrorCode.EXTENDS_NON_CLASS: has fix(es)
-CompileTimeErrorCode.EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER: needs evaluation
-CompileTimeErrorCode.EXTENSION_AS_EXPRESSION: needs evaluation
-CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE: needs evaluation
-CompileTimeErrorCode.EXTENSION_DECLARES_MEMBER_OF_OBJECT: needs evaluation
-CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER: has fix(es)
-CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.EXTENSION_OVERRIDE_WITH_CASCADE: needs evaluation
-CompileTimeErrorCode.EXTENSION_OVERRIDE_WITHOUT_ACCESS: needs evaluation
-CompileTimeErrorCode.EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER: needs evaluation
-CompileTimeErrorCode.EXTERNAL_FIELD_INITIALIZER: needs evaluation
-CompileTimeErrorCode.EXTERNAL_VARIABLE_INITIALIZER: needs evaluation
-CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS: has fix(es)
-CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED: has fix(es)
-CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED: has fix(es)
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1: has fix(es)
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2: has fix(es)
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS: has fix(es)
-CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE: needs evaluation
-CompileTimeErrorCode.FOR_IN_OF_INVALID_TYPE: needs evaluation
-CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE: needs evaluation
-CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND: needs evaluation
-CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT: needs evaluation
-CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC: needs evaluation
-CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES: needs evaluation
-CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES: needs evaluation
-CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE: has fix(es)
-CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE: has fix(es)
-CompileTimeErrorCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE: has fix(es)
-CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS: needs evaluation
-CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS: needs evaluation
-CompileTimeErrorCode.IMPLEMENTS_NON_CLASS: has fix(es)
-CompileTimeErrorCode.IMPLEMENTS_REPEATED: needs evaluation
-CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS: needs evaluation
-CompileTimeErrorCode.IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER: needs evaluation
-CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER: needs evaluation
-CompileTimeErrorCode.IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT: has fix(es)
-CompileTimeErrorCode.IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS: has fix(es)
-CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY: needs evaluation
-CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY: needs evaluation
-CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES: needs evaluation
-CompileTimeErrorCode.INCONSISTENT_INHERITANCE: needs evaluation
-CompileTimeErrorCode.INCONSISTENT_INHERITANCE_GETTER_AND_METHOD: needs evaluation
-CompileTimeErrorCode.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE: needs evaluation
-CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD: needs evaluation
-CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD: needs evaluation
-CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD: has fix(es)
-CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER: has fix(es)
-CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION: needs evaluation
-CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY: needs evaluation
-CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC: needs evaluation
-CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS: needs evaluation
-CompileTimeErrorCode.INSTANTIATE_ENUM: needs evaluation
-CompileTimeErrorCode.INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER: needs evaluation
-CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE: has fix(es)
-CompileTimeErrorCode.INTEGER_LITERAL_OUT_OF_RANGE: needs evaluation
-CompileTimeErrorCode.INVALID_ANNOTATION: has fix(es)
-CompileTimeErrorCode.INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.INVALID_ASSIGNMENT: has fix(es)
-CompileTimeErrorCode.INVALID_CAST_FUNCTION: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_FUNCTION_EXPR: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_LITERAL: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_LITERAL_SET: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_METHOD: needs evaluation
-CompileTimeErrorCode.INVALID_CAST_NEW_EXPR: needs evaluation
-CompileTimeErrorCode.INVALID_CONSTANT: needs evaluation
-CompileTimeErrorCode.INVALID_EXTENSION_ARGUMENT_COUNT: needs evaluation
-CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS: needs evaluation
-CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE: needs evaluation
-CompileTimeErrorCode.INVALID_INLINE_FUNCTION_TYPE: needs evaluation
-CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER: needs evaluation
-CompileTimeErrorCode.INVALID_OVERRIDE: has fix(es)
-CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS: needs evaluation
-CompileTimeErrorCode.INVALID_SUPER_FORMAL_PARAMETER_LOCATION: needs evaluation
-CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST: needs evaluation
-CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP: needs evaluation
-CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_SET: needs evaluation
-CompileTimeErrorCode.INVALID_URI: needs evaluation
-CompileTimeErrorCode.INVALID_USE_OF_COVARIANT: needs evaluation
-CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE: needs evaluation
-CompileTimeErrorCode.INVOCATION_OF_EXTENSION_WITHOUT_CALL: needs evaluation
-CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION: needs evaluation
-CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION: has fix(es)
-CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE: needs evaluation
-CompileTimeErrorCode.LABEL_UNDEFINED: needs evaluation
-CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED: needs evaluation
-CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.MAIN_FIRST_POSITIONAL_PARAMETER_TYPE: needs evaluation
-CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS: needs evaluation
-CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS: needs evaluation
-CompileTimeErrorCode.MAIN_IS_NOT_FUNCTION: needs evaluation
-CompileTimeErrorCode.MAP_ENTRY_NOT_IN_MAP: needs evaluation
-CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL: needs evaluation
-CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL: needs evaluation
-CompileTimeErrorCode.MISSING_CONST_IN_SET_LITERAL: needs evaluation
-CompileTimeErrorCode.MISSING_DART_LIBRARY: needs evaluation
-CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER: has fix(es)
-CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION: has fix(es)
-CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT: has fix(es)
-CompileTimeErrorCode.MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE: needs evaluation
-CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER: needs evaluation
-CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE: has fix(es)
-CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.MIXIN_DEFERRED_CLASS: needs evaluation
-CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT: needs evaluation
-CompileTimeErrorCode.MIXIN_INSTANTIATE: needs evaluation
-CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS: needs evaluation
-CompileTimeErrorCode.MIXIN_OF_NON_CLASS: has fix(es)
-CompileTimeErrorCode.MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER: needs evaluation
-CompileTimeErrorCode.MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER: needs evaluation
-CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS: needs evaluation
-CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS: needs evaluation
-CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE: needs evaluation
-CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS: needs evaluation
-CompileTimeErrorCode.MIXINS_SUPER_CLASS: needs evaluation
-CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS: needs evaluation
-CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS: needs evaluation
-CompileTimeErrorCode.NEW_WITH_NON_TYPE: has fix(es)
-CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR: has fix(es)
-CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT: has fix(es)
-CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS: needs evaluation
-CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE: needs evaluation
-CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT: has fix(es)
-CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT: has fix(es)
-CompileTimeErrorCode.NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS: needs evaluation
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS: has fix(es)
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR: has fix(es)
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE: has fix(es)
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE: has fix(es)
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO: has fix(es)
-CompileTimeErrorCode.NON_BOOL_CONDITION: has fix(es)
-CompileTimeErrorCode.NON_BOOL_EXPRESSION: needs evaluation
-CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION: needs evaluation
-CompileTimeErrorCode.NON_BOOL_OPERAND: needs evaluation
-CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_MAP_KEY: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT: needs evaluation
-CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.NON_GENERATIVE_IMPLICIT_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.NON_SYNC_FACTORY: needs evaluation
-CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT: has fix(es)
-CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE: has fix(es)
-CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR: needs evaluation
-CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER: needs evaluation
-CompileTimeErrorCode.NOT_A_TYPE: has fix(es)
-CompileTimeErrorCode.NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE: needs evaluation
-CompileTimeErrorCode.NOT_BINARY_OPERATOR: needs evaluation
-CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS: has fix(es)
-CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD: has fix(es)
-CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE: needs evaluation
-CompileTimeErrorCode.NOT_INSTANTIATED_BOUND: needs evaluation
-CompileTimeErrorCode.NOT_ITERABLE_SPREAD: needs evaluation
-CompileTimeErrorCode.NOT_MAP_SPREAD: needs evaluation
-CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD: needs evaluation
-CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE: has fix(es)
-CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE: has fix(es)
-CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE: has fix(es)
-CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE: has fix(es)
-CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS: fix infeasible
-CompileTimeErrorCode.ON_REPEATED: needs evaluation
-CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR: needs evaluation
-CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY: needs evaluation
-CompileTimeErrorCode.PART_OF_NON_PART: needs evaluation
-CompileTimeErrorCode.PART_OF_UNNAMED_LIBRARY: needs evaluation
-CompileTimeErrorCode.POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT: needs evaluation
-CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER: needs evaluation
-CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT: needs evaluation
-CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION: needs evaluation
-CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION: needs evaluation
-CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER: needs evaluation
-CompileTimeErrorCode.PRIVATE_SETTER: needs evaluation
-CompileTimeErrorCode.READ_POTENTIALLY_UNASSIGNED_FINAL: needs evaluation
-CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT: needs evaluation
-CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT: needs evaluation
-CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT: needs evaluation
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE: needs evaluation
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS: needs evaluation
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS: needs evaluation
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON: needs evaluation
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH: needs evaluation
-CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_NON_CLASS: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER: needs evaluation
-CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION: needs evaluation
-CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH: needs evaluation
-CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.RETURN_IN_GENERATOR: needs evaluation
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE: needs evaluation
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION: has fix(es)
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD: has fix(es)
-CompileTimeErrorCode.RETURN_WITHOUT_VALUE: needs evaluation
-CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.SHARED_DEFERRED_PREFIX: needs evaluation
-CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY: needs evaluation
-CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER: needs evaluation
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED: needs evaluation
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED: needs evaluation
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL: needs evaluation
-CompileTimeErrorCode.SUPER_IN_EXTENSION: needs evaluation
-CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT: needs evaluation
-CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR: needs evaluation
-CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT: needs evaluation
-CompileTimeErrorCode.SUPER_INVOCATION_NOT_LAST: needs evaluation
-CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY: has fix(es)
-CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE: needs evaluation
-CompileTimeErrorCode.TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS: needs evaluation
-CompileTimeErrorCode.THROW_OF_INVALID_TYPE: needs evaluation
-CompileTimeErrorCode.TOP_LEVEL_CYCLE: needs evaluation
-CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF: needs evaluation
-CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS: needs evaluation
-CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS: needs evaluation
-CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC: needs evaluation
-CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND: needs evaluation
-CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE: needs evaluation
-CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME: has fix(es)
-CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE: has fix(es)
-CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE: has fix(es)
-CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE: has fix(es)
-CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE: has fix(es)
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION: has fix(es)
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR: has fix(es)
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD: has fix(es)
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH: has fix(es)
-CompileTimeErrorCode.UNDEFINED_ANNOTATION: has fix(es)
-CompileTimeErrorCode.UNDEFINED_CLASS: has fix(es)
-CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN: has fix(es)
-CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER: needs evaluation
-CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT: has fix(es)
-CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT: needs evaluation
-CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER: has fix(es)
-CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD: has fix(es)
-CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR: needs evaluation
-CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER: has fix(es)
-CompileTimeErrorCode.UNDEFINED_FUNCTION: has fix(es)
-CompileTimeErrorCode.UNDEFINED_GETTER: has_fix(es)
-CompileTimeErrorCode.UNDEFINED_GETTER_ON_FUNCTION_TYPE: needs evaluation
-CompileTimeErrorCode.UNDEFINED_IDENTIFIER: has fix(es)
-CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT: has fix(es)
-CompileTimeErrorCode.UNDEFINED_METHOD: has fix(es)
-CompileTimeErrorCode.UNDEFINED_METHOD_ON_FUNCTION_TYPE: needs evaluation
-CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: has fix(es)
-CompileTimeErrorCode.UNDEFINED_OPERATOR: has fix(es)
-CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME: has fix(es)
-CompileTimeErrorCode.UNDEFINED_SETTER: has fix(es)
-CompileTimeErrorCode.UNDEFINED_SETTER_ON_FUNCTION_TYPE: needs evaluation
-CompileTimeErrorCode.UNDEFINED_SUPER_GETTER: needs evaluation
-CompileTimeErrorCode.UNDEFINED_SUPER_METHOD: needs evaluation
-CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR: needs evaluation
-CompileTimeErrorCode.UNDEFINED_SUPER_SETTER: needs evaluation
-CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER: has fix(es)
-CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE: has fix(es)
-CompileTimeErrorCode.URI_DOES_NOT_EXIST: has fix(es)
-CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED: needs evaluation
-CompileTimeErrorCode.URI_WITH_INTERPOLATION: needs evaluation
-CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION: needs evaluation
-CompileTimeErrorCode.USE_OF_VOID_RESULT: needs evaluation
-CompileTimeErrorCode.VARIABLE_TYPE_MISMATCH: needs evaluation
-CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE: needs evaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR: needs evaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS: needs evaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER: needs evaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS: has fix(es)
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION: needs evaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR: has fix(es)
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION: has fix(es)
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION: needs evaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD: has fix(es)
-CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE: needs evaluation
-CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION: needs evaluation
-CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR: needs evaluation
-CompileTimeErrorCode.YIELD_IN_NON_GENERATOR: needs evaluation
-CompileTimeErrorCode.YIELD_EACH_OF_INVALID_TYPE: needs evaluation
-CompileTimeErrorCode.YIELD_OF_INVALID_TYPE: has fix(es)
-FfiCode.ABI_SPECIFIC_INTEGER_INVALID: needs evaluation
-FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_EXTRA: needs evaluation
-FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING: needs evaluation
-FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED: needs evaluation
-FfiCode.ANNOTATION_ON_POINTER_FIELD: needs evaluation
-FfiCode.ARGUMENT_MUST_BE_A_CONSTANT: needs evaluation
-FfiCode.CREATION_OF_STRUCT_OR_UNION: needs evaluation
-FfiCode.EMPTY_STRUCT: needs evaluation
-FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD: needs evaluation
-FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY: needs evaluation
-FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL: needs evaluation
-  FfiCode
-    .FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER: needs evaluation
-FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS: needs evaluation
-FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER: needs evaluation
-FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER: needs evaluation
-FfiCode.FIELD_INITIALIZER_IN_STRUCT: needs evaluation
-FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT: needs evaluation
-FfiCode.GENERIC_STRUCT_SUBCLASS: needs evaluation
-FfiCode.INVALID_EXCEPTION_VALUE: needs evaluation
-FfiCode.INVALID_FIELD_TYPE_IN_STRUCT: needs evaluation
-FfiCode.LEAF_CALL_MUST_NOT_RETURN_HANDLE: needs evaluation
-FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE: needs evaluation
-FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD: needs evaluation
-FfiCode.MISSING_ANNOTATION_ON_STRUCT_FIELD: needs evaluation
-FfiCode.MISSING_EXCEPTION_VALUE: needs evaluation
-FfiCode.MISSING_FIELD_TYPE_IN_STRUCT: needs evaluation
-FfiCode.MISSING_SIZE_ANNOTATION_CARRAY: needs evaluation
-FfiCode.MUST_BE_A_NATIVE_FUNCTION_TYPE: needs evaluation
-FfiCode.MUST_BE_A_SUBTYPE: needs evaluation
-FfiCode.NON_CONSTANT_TYPE_ARGUMENT: needs evaluation
-FfiCode.NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER: needs evaluation
-FfiCode.NON_POSITIVE_ARRAY_DIMENSION: needs evaluation
-FfiCode.NON_SIZED_TYPE_ARGUMENT: needs evaluation
-FfiCode.PACKED_ANNOTATION: needs evaluation
-FfiCode.PACKED_ANNOTATION_ALIGNMENT: needs evaluation
-FfiCode.PACKED_NESTING_NON_PACKED: needs evaluation
-FfiCode.SIZE_ANNOTATION_DIMENSIONS: needs evaluation
-FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS: needs evaluation
-FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS: needs evaluation
-FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH: needs evaluation
-FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS: needs evaluation
-FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS: needs evaluation
-FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH: needs evaluation
-HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER: has fix(es)
-HintCode.ASSIGNMENT_OF_DO_NOT_STORE: needs evaluation
-HintCode.BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE: has fix(es)
-HintCode.CAN_BE_NULL_AFTER_NULL_AWARE: has fix(es)
-HintCode.DEAD_CODE: has fix(es)
-HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH: has fix(es)
-HintCode.DEAD_CODE_ON_CATCH_SUBTYPE: has fix(es)
-HintCode.DEPRECATED_EXTENDS_FUNCTION: needs evaluation
-HintCode.DEPRECATED_FUNCTION_CLASS_DECLARATION: needs evaluation
-HintCode.DEPRECATED_IMPLEMENTS_FUNCTION: needs evaluation
-HintCode.DEPRECATED_MEMBER_USE: has fix(es)
-HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE: needs evaluation
-HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE: needs evaluation
-HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE: has fix(es)
-HintCode.DEPRECATED_MIXIN_FUNCTION: needs evaluation
-HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE: has fix(es)
-HintCode.DIVISION_OPTIMIZATION: has fix(es)
-HintCode.DUPLICATE_HIDDEN_NAME: has fix(es)
-HintCode.DUPLICATE_IGNORE: needs evaluation
-HintCode.DUPLICATE_IMPORT: has fix(es)
-HintCode.DUPLICATE_SHOWN_NAME: has fix(es)
-HintCode.EQUAL_ELEMENTS_IN_SET: needs evaluation
-HintCode.EQUAL_KEYS_IN_MAP: needs evaluation
-HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE: needs evaluation
-HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE: needs evaluation
-HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION: needs evaluation
-HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_COLLECTION_LITERAL: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_FUNCTION_INVOCATION: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_GENERIC_INVOCATION: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE: needs evaluation
-HintCode.INFERENCE_FAILURE_ON_UNTYPED_PARAMETER: needs evaluation
-HintCode.INVALID_ANNOTATION_TARGET: needs evaluation
-HintCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT: needs evaluation
-HintCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY: needs evaluation
-HintCode.INVALID_FACTORY_ANNOTATION: has fix(es)
-HintCode.INVALID_FACTORY_METHOD_DECL: needs evaluation
-HintCode.INVALID_FACTORY_METHOD_IMPL: needs evaluation
-HintCode.INVALID_IMMUTABLE_ANNOTATION: has fix(es)
-HintCode.INVALID_INTERNAL_ANNOTATION: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS: needs evaluation
-HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES: needs evaluation
-HintCode.INVALID_LITERAL_ANNOTATION: has fix(es)
-HintCode.INVALID_NON_VIRTUAL_ANNOTATION: needs evaluation
-HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER: needs evaluation
-HintCode.INVALID_REQUIRED_NAMED_PARAM: has fix(es)
-HintCode.INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM: has fix(es)
-HintCode.INVALID_REQUIRED_POSITIONAL_PARAM: has fix(es)
-HintCode.INVALID_SEALED_ANNOTATION: has fix(es)
-HintCode.INVALID_USE_OF_INTERNAL_MEMBER: needs evaluation
-HintCode.INVALID_USE_OF_PROTECTED_MEMBER: needs evaluation
-HintCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER: needs evaluation
-HintCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER: needs evaluation
-HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER: needs evaluation
-HintCode.INVALID_VISIBILITY_ANNOTATION: needs evaluation
-HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION: needs evaluation
-HintCode.MISSING_REQUIRED_PARAM: has fix(es)
-HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS: has fix(es)
-HintCode.MISSING_RETURN: needs evaluation
-HintCode.MIXIN_ON_SEALED_CLASS: needs evaluation
-HintCode.MUST_BE_IMMUTABLE: needs evaluation
-HintCode.MUST_CALL_SUPER: needs fix; https://github.com/dart-lang/sdk/issues/33985
-HintCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR: needs evaluation
-HintCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW: needs evaluation
-HintCode.NULL_ARGUMENT_TO_NON_NULL_TYPE: needs evaluation
-HintCode.NULL_AWARE_BEFORE_OPERATOR: needs evaluation
-HintCode.NULL_AWARE_IN_CONDITION: needs evaluation
-HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR: needs evaluation
-HintCode.NULL_CHECK_ALWAYS_FAILS: needs evaluation
-HintCode.NULLABLE_TYPE_IN_CATCH_CLAUSE: has fix(es)
-HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD: has fix(es)
-HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER: has fix(es)
-HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD: has fix(es)
-HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER: has fix(es)
-HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT: needs evaluation
-HintCode.RECEIVER_OF_TYPE_NEVER: needs evaluation
-HintCode.RETURN_OF_DO_NOT_STORE: needs evaluation
-HintCode.RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR: needs evaluation
-HintCode.RETURN_TYPE_INVALID_FOR_CATCH_ERROR: needs evaluation
-HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT: has fix(es)
-HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE: has fix(es)
-HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT: has fix(es)
-HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS: needs evaluation
-HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT: has fix(es)
-HintCode.SDK_VERSION_EXTENSION_METHODS: has fix(es)
-HintCode.SDK_VERSION_GT_GT_GT_OPERATOR: has fix(es)
-HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT: has fix(es)
-HintCode.SDK_VERSION_NEVER: needs evaluation
-HintCode.SDK_VERSION_SET_LITERAL: has fix(es)
-HintCode.SDK_VERSION_UI_AS_CODE: has fix(es)
-HintCode.SDK_VERSION_UI_AS_CODE_IN_CONST_CONTEXT: needs evaluation
-HintCode.STRICT_RAW_TYPE: needs evaluation
-HintCode.SUBTYPE_OF_SEALED_CLASS: needs evaluation
-HintCode.TYPE_CHECK_IS_NOT_NULL: has fix(es)
-HintCode.TYPE_CHECK_IS_NULL: has fix(es)
-HintCode.UNDEFINED_HIDDEN_NAME: has fix(es)
-HintCode.UNDEFINED_REFERENCED_PARAMETER: has fix(es)
-HintCode.UNDEFINED_SHOWN_NAME: needs evaluation
-HintCode.UNIGNORABLE_IGNORE: needs evaluation
-HintCode.UNNECESSARY_CAST: has fix(es)
-HintCode.UNNECESSARY_IGNORE: needs evaluation
-HintCode.UNNECESSARY_IMPORT: has fix(es)
-HintCode.UNNECESSARY_NO_SUCH_METHOD: needs evaluation
-HintCode.UNNECESSARY_NULL_COMPARISON_FALSE: has fix(es)
-HintCode.UNNECESSARY_NULL_COMPARISON_TRUE: has fix(es)
-HintCode.UNNECESSARY_QUESTION_MARK: needs evaluation
-HintCode.UNNECESSARY_TYPE_CHECK_FALSE: needs fix; https://github.com/dart-lang/sdk/issues/47793
-HintCode.UNNECESSARY_TYPE_CHECK_TRUE: needs fix; https://github.com/dart-lang/sdk/issues/47793
-HintCode.TEXT_DIRECTION_CODE_POINT_IN_COMMENT: needs evaluation
-HintCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL: needs evaluation
-HintCode.UNUSED_CATCH_CLAUSE: has fix(es)
-HintCode.UNUSED_CATCH_STACK: has fix(es)
-HintCode.UNUSED_ELEMENT: has fix(es)
-HintCode.UNUSED_ELEMENT_PARAMETER: needs evaluation
-HintCode.UNUSED_FIELD: has fix(es)
-HintCode.UNUSED_IMPORT: has fix(es)
-HintCode.UNUSED_LABEL: has fix(es)
-HintCode.UNUSED_LOCAL_VARIABLE: has fix(es)
-HintCode.UNUSED_RESULT: needs evaluation
-HintCode.UNUSED_RESULT_WITH_MESSAGE: needs evaluation
-HintCode.UNUSED_SHOWN_NAME: has fix(es)
-LanguageCode.IMPLICIT_DYNAMIC_FIELD: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_FUNCTION: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_INVOKE: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_METHOD: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_PARAMETER: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_RETURN: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_TYPE: needs evaluation
-LanguageCode.IMPLICIT_DYNAMIC_VARIABLE: needs evaluation
-LintNames.always_declare_return_types: has fix(es)
-LintNames.always_put_control_body_on_new_line: needs evaluation
-LintNames.always_put_required_named_parameters_first: needs evaluation
-LintNames.always_require_non_null_named_parameters: has fix(es)
-LintNames.always_specify_types: has fix(es)
-LintNames.always_use_package_imports: needs evaluation
-LintNames.annotate_overrides: has fix(es)
-LintNames.avoid_annotating_with_dynamic: has fix(es)
-LintNames.avoid_as: needs evaluation
-LintNames.avoid_bool_literals_in_conditional_expressions: needs evaluation
-LintNames.avoid_catches_without_on_clauses: needs evaluation
-LintNames.avoid_catching_errors: needs evaluation
-LintNames.avoid_classes_with_only_static_members: needs evaluation
-LintNames.avoid_double_and_int_checks: needs evaluation
-LintNames.avoid_dynamic_calls: needs evaluation
-LintNames.avoid_empty_else: has fix(es)
-LintNames.avoid_equals_and_hash_code_on_mutable_classes: needs evaluation
-LintNames.avoid_escaping_inner_quotes: has fix(es)
-LintNames.avoid_field_initializers_in_const_classes: needs evaluation
-LintNames.avoid_final_parameters: needs evaluation
-LintNames.avoid_function_literals_in_foreach_calls: has fix(es)
-LintNames.avoid_implementing_value_types: needs evaluation
-LintNames.avoid_init_to_null: has fix(es)
-LintNames.avoid_js_rounded_ints: needs evaluation
-LintNames.avoid_multiple_declarations_per_line: needs evaluation
-LintNames.avoid_null_checks_in_equality_operators: has fix(es)
-LintNames.avoid_positional_boolean_parameters: needs evaluation
-LintNames.avoid_print: has fix(es)
-LintNames.avoid_private_typedef_functions: has fix(es)
-LintNames.avoid_redundant_argument_values: has fix(es)
-LintNames.avoid_relative_lib_imports: has fix(es)
-LintNames.avoid_renaming_method_parameters: needs evaluation
-LintNames.avoid_return_types_on_setters: has fix(es)
-LintNames.avoid_returning_null: needs evaluation
-LintNames.avoid_returning_null_for_future: has fix(es)
-LintNames.avoid_returning_null_for_void: has fix(es)
-LintNames.avoid_returning_this: needs evaluation
-LintNames.avoid_setters_without_getters: needs evaluation
-LintNames.avoid_shadowing_type_parameters: needs evaluation
-LintNames.avoid_single_cascade_in_expression_statements: has fix(es)
-LintNames.avoid_slow_async_io: needs evaluation
-LintNames.avoid_type_to_string: needs evaluation
-LintNames.avoid_types_as_parameter_names: has fix(es)
-LintNames.avoid_types_on_closure_parameters: has fix(es)
-LintNames.avoid_unnecessary_containers: has fix(es)
-LintNames.avoid_unused_constructor_parameters: has fix(es)
-LintNames.avoid_void_async: needs evaluation
-LintNames.avoid_web_libraries_in_flutter: needs evaluation
-LintNames.await_only_futures: has fix(es)
-LintNames.camel_case_extensions: needs evaluation
-LintNames.camel_case_types: needs evaluation
-LintNames.cancel_subscriptions: needs evaluation
-LintNames.cascade_invocations: needs evaluation
-LintNames.cast_nullable_to_non_nullable: needs evaluation
-LintNames.close_sinks: needs evaluation
-LintNames.comment_references: needs evaluation
-LintNames.conditional_uri_does_not_exist: needs evaluation
-LintNames.constant_identifier_names: needs evaluation
-LintNames.control_flow_in_finally: needs evaluation
-LintNames.curly_braces_in_flow_control_structures: has fix(es)
-LintNames.depend_on_referenced_packages: needs evaluation
-LintNames.deprecated_consistency: needs evaluation
-LintNames.diagnostic_describe_all_properties: has fix(es)
-LintNames.directives_ordering: has fix(es)
-LintNames.do_not_use_environment: needs evaluation
-LintNames.empty_catches: has fix(es)
-LintNames.empty_constructor_bodies: has fix(es)
-LintNames.empty_statements: has fix(es)
-LintNames.eol_at_end_of_file: has fix(es)
-LintNames.exhaustive_cases: has fix(es)
-LintNames.file_names: needs evaluation
-LintNames.flutter_style_todos: needs evaluation
-LintNames.hash_and_equals: has fix(es)
-LintNames.implementation_imports: needs evaluation
-LintNames.invariant_booleans: needs evaluation
-LintNames.iterable_contains_unrelated_type: needs evaluation
-LintNames.join_return_with_assignment: needs evaluation
-LintNames.leading_newlines_in_multiline_strings: has fix(es)
-LintNames.library_names: needs evaluation
-LintNames.library_prefixes: needs evaluation
-LintNames.library_private_types_in_public_api: needs evaluation
-LintNames.lines_longer_than_80_chars: needs evaluation
-LintNames.list_remove_unrelated_type: needs evaluation
-LintNames.literal_only_boolean_expressions: needs evaluation
-LintNames.missing_whitespace_between_adjacent_strings: needs evaluation
-LintNames.no_adjacent_strings_in_list: needs evaluation
-LintNames.no_default_cases: needs evaluation
-LintNames.no_duplicate_case_values: has fix(es)
-LintNames.no_leading_underscores_for_library_prefixes: needs evaluation
-LintNames.no_leading_underscores_for_local_identifiers: needs evaluation
-LintNames.no_logic_in_create_state: needs evaluation
-LintNames.no_runtimeType_toString: needs evaluation
-LintNames.non_constant_identifier_names: has fix(es)
-LintNames.noop_primitive_operations: needs evaluation
-LintNames.null_check_on_nullable_type_parameter: needs evaluation
-LintNames.null_closures: has fix(es)
-LintNames.omit_local_variable_types: has fix(es)
-LintNames.one_member_abstracts: needs evaluation
-LintNames.only_throw_errors: needs evaluation
-LintNames.overridden_fields: needs evaluation
-LintNames.package_api_docs: needs evaluation
-LintNames.package_prefixed_library_names: needs evaluation
-LintNames.parameter_assignments: needs evaluation
-LintNames.prefer_adjacent_string_concatenation: has fix(es)
-LintNames.prefer_asserts_in_initializer_lists: needs evaluation
-LintNames.prefer_asserts_with_message: needs evaluation
-LintNames.prefer_bool_in_asserts: needs evaluation
-LintNames.prefer_collection_literals: has fix(es)
-LintNames.prefer_conditional_assignment: has fix(es)
-LintNames.prefer_const_constructors: has fix(es)
-LintNames.prefer_const_constructors_in_immutables: has fix(es)
-LintNames.prefer_const_declarations: has fix(es)
-LintNames.prefer_const_literals_to_create_immutables: has fix(es)
-LintNames.prefer_constructors_over_static_methods: needs evaluation
-LintNames.prefer_contains: has fix(es)
-LintNames.prefer_double_quotes: has fix(es)
-LintNames.prefer_equal_for_default_values: has fix(es)
-LintNames.prefer_expression_function_bodies: has fix(es)
-LintNames.prefer_final_fields: has fix(es)
-LintNames.prefer_final_in_for_each: has fix(es)
-LintNames.prefer_final_locals: has fix(es)
-LintNames.prefer_final_parameters: has fix(es)
-LintNames.prefer_for_elements_to_map_fromIterable: has fix(es)
-LintNames.prefer_foreach: needs evaluation
-LintNames.prefer_function_declarations_over_variables: needs evaluation
-LintNames.prefer_generic_function_type_aliases: has fix(es)
-LintNames.prefer_if_elements_to_conditional_expressions: has fix(es)
-LintNames.prefer_if_null_operators: has fix(es)
-LintNames.prefer_initializing_formals: has fix(es)
-LintNames.prefer_inlined_adds: has fix(es)
-LintNames.prefer_int_literals: has fix(es)
-LintNames.prefer_interpolation_to_compose_strings: has fix(es)
-LintNames.prefer_is_empty: has fix(es)
-LintNames.prefer_is_not_empty: has fix(es)
-LintNames.prefer_is_not_operator: has fix(es)
-LintNames.prefer_iterable_whereType: has fix(es)
-LintNames.prefer_mixin: needs evaluation
-LintNames.prefer_null_aware_method_calls: needs evaluation
-LintNames.prefer_null_aware_operators: has fix(es)
-LintNames.prefer_relative_imports: has fix(es)
-LintNames.prefer_single_quotes: has fix(es)
-LintNames.prefer_spread_collections: has fix(es)
-LintNames.prefer_typing_uninitialized_variables: has fix(es)
-LintNames.prefer_void_to_null: has fix(es)
-LintNames.provide_deprecation_message: needs evaluation
-LintNames.pub/package_names: needs evaluation
-LintNames.pub/secure_pubspec_urls: needs evaluation
-LintNames.pub/sort_pub_dependencies: needs evaluation
-LintNames.public_member_api_docs: needs evaluation
-LintNames.recursive_getters: needs evaluation
-LintNames.require_trailing_commas: has fix(es)
-LintNames.sized_box_for_whitespace: has fix(es)
-LintNames.sized_box_shrink_expand: needs evaluation
-LintNames.slash_for_doc_comments: has fix(es)
-LintNames.sort_child_properties_last: has fix(es)
-LintNames.sort_constructors_first: needs fix; https://github.com/dart-lang/sdk/issues/47953
-LintNames.sort_unnamed_constructors_first: needs evaluation
-LintNames.super_goes_last: needs evaluation
-LintNames.test_types_in_equals: needs evaluation
-LintNames.throw_in_finally: needs evaluation
-LintNames.tighten_type_of_initializing_formals: needs evaluation
-LintNames.type_annotate_public_apis: has fix(es)
-LintNames.type_init_formals: has fix(es)
-LintNames.unawaited_futures: has fix(es)
-LintNames.unnecessary_await_in_return: needs evaluation
-LintNames.unnecessary_brace_in_string_interps: has fix(es)
-LintNames.unnecessary_const: has fix(es)
-LintNames.unnecessary_constructor_name: has fix(es)
-LintNames.unnecessary_final: has fix(es)
-LintNames.unnecessary_getters_setters: has fix(es)
-LintNames.unnecessary_lambdas: has fix(es)
-LintNames.unnecessary_late: needs evaluation
-LintNames.unnecessary_new: has fix(es)
-LintNames.unnecessary_null_aware_assignments: needs evaluation
-LintNames.unnecessary_null_checks: needs evaluation
-LintNames.unnecessary_null_in_if_null_operators: has fix(es)
-LintNames.unnecessary_nullable_for_final_variable_declarations: has fix(es)
-LintNames.unnecessary_overrides: has fix(es)
-LintNames.unnecessary_parenthesis: has fix(es)
-LintNames.unnecessary_raw_strings: has fix(es)
-LintNames.unnecessary_statements: needs evaluation
-LintNames.unnecessary_string_escapes: has fix(es)
-LintNames.unnecessary_string_interpolations: has fix(es)
-LintNames.unnecessary_this: has fix(es)
-LintNames.unrelated_type_equality_checks: needs evaluation
-LintNames.unsafe_html: needs evaluation
-LintNames.use_build_context_synchronously: needs evaluation
-LintNames.use_decorated_box: needs evaluation
-LintNames.use_full_hex_values_for_flutter_colors: has fix(es)
-LintNames.use_function_type_syntax_for_parameters: has fix(es)
-LintNames.use_if_null_to_convert_nulls_to_bools: needs evaluation
-LintNames.use_is_even_rather_than_modulo: needs evaluation
-LintNames.use_key_in_widget_constructors: has fix(es)
-LintNames.use_late_for_private_fields_and_variables: needs evaluation
-LintNames.use_named_constants: needs evaluation
-LintNames.use_raw_strings: needs evaluation
-LintNames.use_rethrow_when_possible: has fix(es)
-LintNames.use_setters_to_change_properties: needs evaluation
-LintNames.use_string_buffers: needs evaluation
-LintNames.use_test_throws_matchers: needs evaluation
-LintNames.use_to_and_as_if_applicable: needs evaluation
-LintNames.valid_regexps: needs evaluation
-LintNames.void_checks: needs evaluation
-ManifestWarningCode.CAMERA_PERMISSIONS_INCOMPATIBLE: needs evaluation
-ManifestWarningCode.NO_TOUCHSCREEN_FEATURE: needs evaluation
-ManifestWarningCode.NON_RESIZABLE_ACTIVITY: needs evaluation
-ManifestWarningCode.PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE: needs evaluation
-ManifestWarningCode.SETTING_ORIENTATION_ON_ACTIVITY: needs evaluation
-ManifestWarningCode.UNSUPPORTED_CHROME_OS_FEATURE: needs evaluation
-ManifestWarningCode.UNSUPPORTED_CHROME_OS_HARDWARE: needs evaluation
-ParserErrorCode.ABSTRACT_CLASS_MEMBER: has fix(es)
-ParserErrorCode.ABSTRACT_ENUM: needs evaluation
-ParserErrorCode.ABSTRACT_EXTERNAL_FIELD: needs evaluation
-ParserErrorCode.ABSTRACT_LATE_FIELD: needs evaluation
-ParserErrorCode.ABSTRACT_STATIC_FIELD: needs evaluation
-ParserErrorCode.ABSTRACT_STATIC_METHOD: needs evaluation
-ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION: needs evaluation
-ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE: needs evaluation
-ParserErrorCode.ABSTRACT_TYPEDEF: needs evaluation
-ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT: needs evaluation
-ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS: needs evaluation
-ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED: needs evaluation
-ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER: needs evaluation
-ParserErrorCode.BINARY_OPERATOR_WRITTEN_OUT: needs evaluation
-ParserErrorCode.BREAK_OUTSIDE_OF_LOOP: needs evaluation
-ParserErrorCode.CATCH_SYNTAX: needs evaluation
-ParserErrorCode.CATCH_SYNTAX_EXTRA_PARAMETERS: needs evaluation
-ParserErrorCode.CLASS_IN_CLASS: needs evaluation
-ParserErrorCode.COLON_IN_PLACE_OF_IN: needs evaluation
-ParserErrorCode.CONFLICTING_MODIFIERS: needs evaluation
-ParserErrorCode.CONST_AND_FINAL: needs evaluation
-ParserErrorCode.CONST_CLASS: needs evaluation
-ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY: needs evaluation
-ParserErrorCode.CONST_ENUM: needs evaluation
-ParserErrorCode.CONST_FACTORY: needs evaluation
-ParserErrorCode.CONST_METHOD: needs evaluation
-ParserErrorCode.CONST_TYPEDEF: needs evaluation
-ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE: needs evaluation
-ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS: needs evaluation
-ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP: needs evaluation
-ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE: needs evaluation
-ParserErrorCode.COVARIANT_AND_STATIC: needs evaluation
-ParserErrorCode.COVARIANT_CONSTRUCTOR: needs evaluation
-ParserErrorCode.COVARIANT_MEMBER: needs evaluation
-ParserErrorCode.COVARIANT_TOP_LEVEL_DECLARATION: needs evaluation
-ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE: needs evaluation
-ParserErrorCode.DEFERRED_AFTER_PREFIX: needs evaluation
-ParserErrorCode.DIRECTIVE_AFTER_DECLARATION: needs evaluation
-ParserErrorCode.DUPLICATE_DEFERRED: needs evaluation
-ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT: needs evaluation
-ParserErrorCode.DUPLICATE_PREFIX: needs evaluation
-ParserErrorCode.DUPLICATED_MODIFIER: needs evaluation
-ParserErrorCode.EMPTY_ENUM_BODY: needs evaluation
-ParserErrorCode.ENUM_IN_CLASS: needs evaluation
-ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND: needs evaluation
-ParserErrorCode.EXPECTED_BODY: needs evaluation
-ParserErrorCode.EXPECTED_CASE_OR_DEFAULT: needs evaluation
-ParserErrorCode.EXPECTED_CLASS_MEMBER: needs evaluation
-ParserErrorCode.EXPECTED_ELSE_OR_COMMA: needs evaluation
-ParserErrorCode.EXPECTED_EXECUTABLE: needs evaluation
-ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD: needs evaluation
-ParserErrorCode.EXPECTED_INSTEAD: needs evaluation
-ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL: needs evaluation
-ParserErrorCode.EXPECTED_STRING_LITERAL: needs evaluation
-ParserErrorCode.EXPECTED_TOKEN: has fix(es)
-ParserErrorCode.EXPECTED_TYPE_NAME: needs evaluation
-ParserErrorCode.EXPERIMENT_NOT_ENABLED: needs evaluation
-ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE: needs evaluation
-ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER: needs evaluation
-ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR: needs evaluation
-ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD: needs evaluation
-ParserErrorCode.EXTERNAL_CLASS: needs evaluation
-ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY: needs evaluation
-ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER: needs evaluation
-ParserErrorCode.EXTERNAL_ENUM: needs evaluation
-ParserErrorCode.EXTERNAL_FACTORY_REDIRECTION: needs evaluation
-ParserErrorCode.EXTERNAL_FACTORY_WITH_BODY: needs evaluation
-ParserErrorCode.EXTERNAL_FIELD: needs evaluation
-ParserErrorCode.EXTERNAL_GETTER_WITH_BODY: needs evaluation
-ParserErrorCode.EXTERNAL_LATE_FIELD: needs evaluation
-ParserErrorCode.EXTERNAL_METHOD_WITH_BODY: needs evaluation
-ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY: needs evaluation
-ParserErrorCode.EXTERNAL_SETTER_WITH_BODY: needs evaluation
-ParserErrorCode.EXTERNAL_TYPEDEF: needs evaluation
-ParserErrorCode.EXTRANEOUS_MODIFIER: needs evaluation
-ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION: needs evaluation
-ParserErrorCode.FACTORY_WITH_INITIALIZERS: needs evaluation
-ParserErrorCode.FACTORY_WITHOUT_BODY: needs evaluation
-ParserErrorCode.FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS: needs evaluation
-ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR: needs evaluation
-ParserErrorCode.FINAL_AND_COVARIANT: needs evaluation
-ParserErrorCode.FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER: needs evaluation
-ParserErrorCode.FINAL_AND_VAR: needs evaluation
-ParserErrorCode.FINAL_CLASS: needs evaluation
-ParserErrorCode.FINAL_CONSTRUCTOR: needs evaluation
-ParserErrorCode.FINAL_ENUM: needs evaluation
-ParserErrorCode.FINAL_METHOD: needs evaluation
-ParserErrorCode.FINAL_TYPEDEF: needs evaluation
-ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR: needs evaluation
-ParserErrorCode.GETTER_CONSTRUCTOR: needs evaluation
-ParserErrorCode.GETTER_IN_FUNCTION: needs evaluation
-ParserErrorCode.GETTER_WITH_PARAMETERS: has fix(es)
-ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE: needs evaluation
-ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS: needs evaluation
-ParserErrorCode.IMPLEMENTS_BEFORE_ON: needs evaluation
-ParserErrorCode.IMPLEMENTS_BEFORE_WITH: needs evaluation
-ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE: needs evaluation
-ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH: needs evaluation
-ParserErrorCode.INVALID_AWAIT_IN_FOR: needs evaluation
-ParserErrorCode.INVALID_CODE_POINT: needs evaluation
-ParserErrorCode.INVALID_COMMENT_REFERENCE: needs evaluation
-ParserErrorCode.INVALID_CONSTRUCTOR_NAME: needs evaluation
-ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE: needs evaluation
-ParserErrorCode.INVALID_HEX_ESCAPE: needs evaluation
-ParserErrorCode.INVALID_INITIALIZER: needs evaluation
-ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION: needs evaluation
-ParserErrorCode.INVALID_OPERATOR: needs evaluation
-ParserErrorCode.INVALID_OPERATOR_FOR_SUPER: needs evaluation
-ParserErrorCode.INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER: needs evaluation
-ParserErrorCode.INVALID_STAR_AFTER_ASYNC: needs evaluation
-ParserErrorCode.INVALID_SUPER_IN_INITIALIZER: needs evaluation
-ParserErrorCode.INVALID_SYNC: needs evaluation
-ParserErrorCode.INVALID_THIS_IN_INITIALIZER: needs evaluation
-ParserErrorCode.INVALID_UNICODE_ESCAPE: needs evaluation
-ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION: needs evaluation
-ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST: needs evaluation
-ParserErrorCode.LITERAL_WITH_CLASS_AND_NEW: needs evaluation
-ParserErrorCode.LITERAL_WITH_CLASS: needs evaluation
-ParserErrorCode.LITERAL_WITH_NEW: needs evaluation
-ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER: needs evaluation
-ParserErrorCode.MEMBER_WITH_CLASS_NAME: needs evaluation
-ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR: needs evaluation
-ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER: needs evaluation
-ParserErrorCode.MISSING_CATCH_OR_FINALLY: needs evaluation
-ParserErrorCode.MISSING_CLOSING_PARENTHESIS: needs evaluation
-ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE: has fix(es)
-ParserErrorCode.MISSING_ENUM_BODY: needs evaluation
-ParserErrorCode.MISSING_EXPRESSION_IN_INITIALIZER: needs evaluation
-ParserErrorCode.MISSING_EXPRESSION_IN_THROW: needs evaluation
-ParserErrorCode.MISSING_FUNCTION_BODY: has fix(es)
-ParserErrorCode.MISSING_FUNCTION_KEYWORD: needs evaluation
-ParserErrorCode.MISSING_FUNCTION_PARAMETERS: needs evaluation
-ParserErrorCode.MISSING_GET: needs evaluation
-ParserErrorCode.MISSING_IDENTIFIER: needs evaluation
-ParserErrorCode.MISSING_INITIALIZER: needs evaluation
-ParserErrorCode.MISSING_KEYWORD_OPERATOR: needs evaluation
-ParserErrorCode.MISSING_METHOD_PARAMETERS: needs evaluation
-ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER: needs evaluation
-ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE: needs evaluation
-ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE: needs evaluation
-ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT: needs evaluation
-ParserErrorCode.MISSING_STAR_AFTER_SYNC: needs evaluation
-ParserErrorCode.MISSING_STATEMENT: needs evaluation
-ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP: needs evaluation
-ParserErrorCode.MISSING_TYPEDEF_PARAMETERS: needs evaluation
-ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH: needs evaluation
-ParserErrorCode.MIXED_PARAMETER_GROUPS: needs evaluation
-ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR: needs evaluation
-ParserErrorCode.MODIFIER_OUT_OF_ORDER: needs evaluation
-ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES: needs evaluation
-ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES: needs evaluation
-ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES: needs evaluation
-ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS: needs evaluation
-ParserErrorCode.MULTIPLE_ON_CLAUSES: needs evaluation
-ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES: needs evaluation
-ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS: needs evaluation
-ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH: needs evaluation
-ParserErrorCode.MULTIPLE_VARIANCE_MODIFIERS: needs evaluation
-ParserErrorCode.MULTIPLE_WITH_CLAUSES: needs evaluation
-ParserErrorCode.NAMED_FUNCTION_EXPRESSION: needs evaluation
-ParserErrorCode.NAMED_FUNCTION_TYPE: needs evaluation
-ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP: needs evaluation
-ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE: needs evaluation
-ParserErrorCode.NATIVE_CLAUSE_SHOULD_BE_ANNOTATION: needs evaluation
-ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE: needs evaluation
-ParserErrorCode.NON_CONSTRUCTOR_FACTORY: needs evaluation
-ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME: needs evaluation
-ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART: needs evaluation
-ParserErrorCode.NON_STRING_LITERAL_AS_URI: needs evaluation
-ParserErrorCode.NON_USER_DEFINABLE_OPERATOR: needs evaluation
-ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS: needs evaluation
-ParserErrorCode.NULL_AWARE_CASCADE_OUT_OF_ORDER: needs evaluation
-ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT: needs evaluation
-ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP: needs evaluation
-ParserErrorCode.PREFIX_AFTER_COMBINATOR: needs evaluation
-ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY: needs evaluation
-ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR: needs evaluation
-ParserErrorCode.SETTER_CONSTRUCTOR: needs evaluation
-ParserErrorCode.SETTER_IN_FUNCTION: needs evaluation
-ParserErrorCode.STACK_OVERFLOW: needs evaluation
-ParserErrorCode.STATIC_CONSTRUCTOR: needs evaluation
-ParserErrorCode.STATIC_GETTER_WITHOUT_BODY: needs evaluation
-ParserErrorCode.STATIC_OPERATOR: needs evaluation
-ParserErrorCode.STATIC_SETTER_WITHOUT_BODY: needs evaluation
-ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION: needs evaluation
-ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE: needs evaluation
-ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES: needs evaluation
-ParserErrorCode.TOP_LEVEL_OPERATOR: needs evaluation
-ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE: needs evaluation
-ParserErrorCode.TYPE_BEFORE_FACTORY: needs evaluation
-ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR: needs evaluation
-ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR: needs evaluation
-ParserErrorCode.TYPEDEF_IN_CLASS: needs evaluation
-ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP: needs evaluation
-ParserErrorCode.UNEXPECTED_TOKEN: needs evaluation
-ParserErrorCode.VAR_AND_TYPE: needs evaluation
-ParserErrorCode.VAR_AS_TYPE_NAME: has fix(es)
-ParserErrorCode.VAR_CLASS: needs evaluation
-ParserErrorCode.VAR_ENUM: needs evaluation
-ParserErrorCode.VAR_RETURN_TYPE: needs evaluation
-ParserErrorCode.VAR_TYPEDEF: needs evaluation
-ParserErrorCode.VOID_WITH_TYPE_ARGUMENTS: needs evaluation
-ParserErrorCode.WITH_BEFORE_EXTENDS: needs evaluation
-ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER: needs evaluation
-ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP: needs evaluation
-PubspecWarningCode.ASSET_DOES_NOT_EXIST: needs evaluation
-PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST: needs evaluation
-PubspecWarningCode.ASSET_FIELD_NOT_LIST: needs evaluation
-PubspecWarningCode.ASSET_NOT_STRING: needs evaluation
-PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP: needs evaluation
-PubspecWarningCode.DEPRECATED_FIELD: needs evaluation
-PubspecWarningCode.FLUTTER_FIELD_NOT_MAP: needs evaluation
-PubspecWarningCode.INVALID_DEPENDENCY: needs evaluation
-PubspecWarningCode.MISSING_NAME: needs evaluation
-PubspecWarningCode.NAME_NOT_STRING: needs evaluation
-PubspecWarningCode.PATH_DOES_NOT_EXIST: needs evaluation
-PubspecWarningCode.PATH_NOT_POSIX: needs evaluation
-PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST: needs evaluation
-PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY: needs evaluation
-ScannerErrorCode.EXPECTED_TOKEN: needs evaluation
-ScannerErrorCode.ILLEGAL_CHARACTER: needs evaluation
-ScannerErrorCode.MISSING_DIGIT: needs evaluation
-ScannerErrorCode.MISSING_HEX_DIGIT: needs evaluation
-ScannerErrorCode.MISSING_IDENTIFIER: needs evaluation
-ScannerErrorCode.MISSING_QUOTE: needs evaluation
-ScannerErrorCode.UNABLE_GET_CONTENT: needs evaluation
-ScannerErrorCode.UNEXPECTED_DOLLAR_IN_STRING: needs evaluation
-ScannerErrorCode.UNSUPPORTED_OPERATOR: needs evaluation
-ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT: needs evaluation
-ScannerErrorCode.UNTERMINATED_STRING_LITERAL: needs evaluation
-StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION: has fix(es)
-StaticWarningCode.INVALID_NULL_AWARE_OPERATOR: has fix(es)
-StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT: has fix(es)
-StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED: needs evaluation
-StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL: needs evaluation
-StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH: has fix(es)
-StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION: has fix(es)
\ No newline at end of file
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
new file mode 100644
index 0000000..fa7be23
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -0,0 +1,2364 @@
+# 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.
+#
+# 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
+#   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
+#   issue has been opened, there should be a second key named `issue` whose
+#   value is the URL of the issue.
+#
+# Stats:
+# - 809 "needsEvaluation"
+# -  19 "needsFix"
+# - 253 "hasFix"
+# -   3 "noFix"
+
+AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR:
+  status: noFix
+AnalysisOptionsErrorCode.PARSE_ERROR:
+  status: noFix
+AnalysisOptionsHintCode.PREVIEW_DART_2_SETTING_DEPRECATED:
+  status: needsEvaluation
+AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED:
+  status: needsEvaluation
+AnalysisOptionsHintCode.SUPER_MIXINS_SETTING_DEPRECATED:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.INCLUDED_FILE_WARNING:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.INVALID_OPTION:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.SPEC_MODE_REMOVED:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITHOUT_VALUES:
+  status: needsEvaluation
+AnalysisOptionsWarningCode.UNSUPPORTED_VALUE:
+  status: needsEvaluation
+CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE:
+  status: needsEvaluation
+CompileTimeErrorCode.AMBIGUOUS_EXPORT:
+  status: needsEvaluation
+CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS:
+  status: needsEvaluation
+CompileTimeErrorCode.AMBIGUOUS_IMPORT:
+  status: needsEvaluation
+CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH:
+  status: needsEvaluation
+CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER:
+  status: needsEvaluation
+CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE:
+  status: hasFix
+CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.ASSIGNMENT_TO_CONST:
+  status: needsEvaluation
+CompileTimeErrorCode.ASSIGNMENT_TO_FINAL:
+  status: hasFix
+CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL:
+  status: hasFix
+CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION:
+  status: needsEvaluation
+CompileTimeErrorCode.ASSIGNMENT_TO_METHOD:
+  status: needsEvaluation
+CompileTimeErrorCode.ASSIGNMENT_TO_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT:
+  status: hasFix
+CompileTimeErrorCode.AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT:
+  status: hasFix
+CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY:
+  status: hasFix
+CompileTimeErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER:
+  status: needsEvaluation
+CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME:
+  status: needsEvaluation
+CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME:
+  status: needsEvaluation
+CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME:
+  status: needsEvaluation
+CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME:
+  status: needsEvaluation
+CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME:
+  status: needsEvaluation
+CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED:
+  status: needsEvaluation
+CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
+  status: needsEvaluation
+CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.CAST_TO_NON_TYPE:
+  status: hasFix
+CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER:
+  status: needsEvaluation
+  since: 2.15
+CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER:
+  status: needsEvaluation
+  since: 2.15
+CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER:
+  status: needsEvaluation
+  since: in 2.15
+CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer a fix that would remove all of the types in the
+    class header that are or implement `Enum`, but I think it would be more
+    likely that the user needed to restructure the super interfaces so that
+    `Enum` wasn't included but the rest of the interfaces could be.
+CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER:
+  status: hasFix
+CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER:
+  status: noFix
+  since: 2.15
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER:
+  status: noFix
+  since: 2.15
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES:
+  status: needsEvaluation
+CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_ENUM:
+  status: noFix
+  since: 2.17
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_EXTENSION:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM:
+  status: noFix
+  since: 2.17
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN:
+  status: noFix
+  notes: |-
+    The fix is to rename one of the two, but we can't know what name to use.
+CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_DEFERRED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_INT:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_TYPE_INT:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_TYPE_NUM:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_EVAL_TYPE_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE:
+  status: hasFix
+CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_INSTANCE_FIELD:
+  status: hasFix
+CompileTimeErrorCode.CONST_MAP_KEY_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_NOT_INITIALIZED:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_WITH_NON_CONST:
+  status: hasFix
+CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_WITH_NON_TYPE:
+  status: hasFix
+CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF:
+  status: needsEvaluation
+  since: 2.15
+CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF:
+  status: needsEvaluation
+  since: 2.15
+CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+  status: needsEvaluation
+CompileTimeErrorCode.CONTINUE_LABEL_ON_SWITCH:
+  status: needsEvaluation
+CompileTimeErrorCode.COULD_NOT_INFER:
+  status: needsEvaluation
+CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR:
+  status: hasFix
+CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.DEFERRED_IMPORT_OF_EXTENSION:
+  status: needsEvaluation
+CompileTimeErrorCode.DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION:
+  status: needsFix
+  since: 2.15
+CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT:
+  status: needsEvaluation
+CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME:
+  status: needsEvaluation
+CompileTimeErrorCode.DUPLICATE_DEFINITION:
+  status: needsEvaluation
+CompileTimeErrorCode.DUPLICATE_FIELD_FORMAL_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.DUPLICATE_PART:
+  status: needsEvaluation
+CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
+  status: needsEvaluation
+CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR: 
+  status: noFix
+  since: 2.17
+CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
+  status: noFix
+  since: 2.17
+CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer a fix that would remove the mixin, but I think it
+    would be more likely that the user needed to restructure the mixin so that
+    part of it could be included here.
+CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER:
+  status: needsFix
+  since: 2.17
+  issue: https://github.com/dart-lang/sdk/issues/48478
+CompileTimeErrorCode.ENUM_WITH_NAME_VALUES:
+  status: noFix
+  since: 2.17
+  notes: |-
+    Requires a rename.
+CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET:
+  status: needsEvaluation
+CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPECTED_ONE_SET_TYPE_ARGUMENTS:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPORT_LEGACY_SYMBOL:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.EXPRESSION_IN_MAP:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENDS_NON_CLASS:
+  status: hasFix
+CompileTimeErrorCode.EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENSION_AS_EXPRESSION:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENSION_DECLARES_MEMBER_OF_OBJECT:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER:
+  status: hasFix
+CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENSION_OVERRIDE_WITH_CASCADE:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTENSION_OVERRIDE_WITHOUT_ACCESS:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTERNAL_FIELD_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTERNAL_VARIABLE_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS:
+  status: hasFix
+CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED:
+  status: hasFix
+CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.FINAL_NOT_INITIALIZED:
+  status: hasFix
+CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1:
+  status: hasFix
+CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2:
+  status: hasFix
+CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS:
+  status: hasFix
+CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.FOR_IN_OF_INVALID_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND:
+  status: needsEvaluation
+CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC:
+  status: needsFix
+  since: 2.15
+CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES:
+  status: needsEvaluation
+CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES:
+  status: needsEvaluation
+CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE:
+  status: hasFix
+CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE:
+  status: hasFix
+CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer to remove the member, but the user probably needs
+    to think about what they were trying to do and it seems more likely that the
+    right fix is to rename the member.
+CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer to remove the member, but the user probably needs
+    to think about what they were trying to do and it seems more likely that the
+    right fix is to rename the member.
+CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION:
+  status: noFix
+  since: 2.17
+  notes: |-
+    While we could have a fix to remove the declaration, it seems more likely
+    that the user would want to rename it.
+CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE:
+  status: noFix
+  since: 2.17
+CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer to remove the override, or to update it to the
+    lowest legal value, but it isn't clear that either of these is the right
+    fix without knowing why the language override was added.
+CompileTimeErrorCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE:
+  status: hasFix
+CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPLEMENTS_NON_CLASS:
+  status: hasFix
+CompileTimeErrorCode.IMPLEMENTS_REPEATED:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS:
+  status: hasFix
+CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES:
+  status: needsEvaluation
+CompileTimeErrorCode.INCONSISTENT_INHERITANCE:
+  status: needsEvaluation
+CompileTimeErrorCode.INCONSISTENT_INHERITANCE_GETTER_AND_METHOD:
+  status: needsEvaluation
+CompileTimeErrorCode.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
+  status: needsEvaluation
+CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD:
+  status: needsEvaluation
+CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD:
+  status: needsEvaluation
+CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD:
+  status: hasFix
+CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER:
+  status: hasFix
+CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION:
+  status: needsEvaluation
+CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
+  status: needsEvaluation
+CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC:
+  status: needsEvaluation
+CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.INSTANTIATE_ENUM:
+  status: needsEvaluation
+CompileTimeErrorCode.INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE:
+  status: hasFix
+CompileTimeErrorCode.INTEGER_LITERAL_OUT_OF_RANGE:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_ANNOTATION:
+  status: hasFix
+CompileTimeErrorCode.INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_ASSIGNMENT:
+  status: hasFix
+CompileTimeErrorCode.INVALID_CAST_FUNCTION:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_FUNCTION_EXPR:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_LITERAL:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_LITERAL_SET:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_METHOD:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CAST_NEW_EXPR:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_CONSTANT:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_EXTENSION_ARGUMENT_COUNT:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_INLINE_FUNCTION_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_OVERRIDE:
+  status: hasFix
+CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR:
+  status: noFix
+  since: 2.17
+CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_SUPER_FORMAL_PARAMETER_LOCATION:
+  status: needsFix
+  since: 2.17
+CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_SET:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_URI: needsEvaluation
+CompileTimeErrorCode.INVALID_USE_OF_COVARIANT:
+  status: needsEvaluation
+CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE:
+  status: needsEvaluation
+CompileTimeErrorCode.INVOCATION_OF_EXTENSION_WITHOUT_CALL:
+  status: needsEvaluation
+CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION:
+  status: needsEvaluation
+CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION:
+  status: hasFix
+CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE:
+  status: needsEvaluation
+CompileTimeErrorCode.LABEL_UNDEFINED:
+  status: needsEvaluation
+CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED:
+  status: needsEvaluation
+CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.MAIN_FIRST_POSITIONAL_PARAMETER_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS:
+  status: needsEvaluation
+CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS:
+  status: needsEvaluation
+CompileTimeErrorCode.MAIN_IS_NOT_FUNCTION:
+  status: needsEvaluation
+CompileTimeErrorCode.MAP_ENTRY_NOT_IN_MAP:
+  status: needsEvaluation
+CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL:
+  status: needsEvaluation
+CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL:
+  status: needsEvaluation
+CompileTimeErrorCode.MISSING_CONST_IN_SET_LITERAL:
+  status: needsEvaluation
+CompileTimeErrorCode.MISSING_DART_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER:
+  status: hasFix
+CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION:
+  status: hasFix
+CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT:
+  status: hasFix
+CompileTimeErrorCode.MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE:
+  status: hasFix
+CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_DEFERRED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_INSTANTIATE:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_OF_NON_CLASS:
+  status: hasFix
+CompileTimeErrorCode.MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.MIXINS_SUPER_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS:
+  status: needsEvaluation
+CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS:
+  status: needsEvaluation
+CompileTimeErrorCode.NEW_WITH_NON_TYPE:
+  status: hasFix
+CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR:
+  status: hasFix
+CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+  status: hasFix
+CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS:
+  status: needsEvaluation
+CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE:
+  status: needsEvaluation
+CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT:
+  status: hasFix
+CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT:
+  status: hasFix
+CompileTimeErrorCode.NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
+  status: hasFix
+CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR:
+  status: hasFix
+CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE:
+  status: hasFix
+CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE:
+  status: hasFix
+CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO:
+  status: hasFix
+CompileTimeErrorCode.NON_BOOL_CONDITION:
+  status: hasFix
+CompileTimeErrorCode.NON_BOOL_EXPRESSION:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_BOOL_OPERAND:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
+  status: needsFix
+  since: 2.17
+  issue: https://github.com/dart-lang/sdk/issues/48479
+CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_MAP_KEY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_GENERATIVE_IMPLICIT_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_SYNC_FACTORY:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT:
+  status: hasFix
+CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE:
+  status: hasFix
+CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_A_TYPE:
+  status: hasFix
+CompileTimeErrorCode.NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_BINARY_OPERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS:
+  status: hasFix
+CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD:
+  status: hasFix
+CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_INSTANTIATED_BOUND:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_ITERABLE_SPREAD:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_MAP_SPREAD:
+  status: needsEvaluation
+CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD:
+  status: needsEvaluation
+CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
+  status: hasFix
+CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE:
+  status: hasFix
+CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE:
+  status: hasFix
+CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE:
+  status: hasFix
+CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS:
+  status: noFix
+CompileTimeErrorCode.ON_REPEATED:
+  status: needsEvaluation
+CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.PART_OF_NON_PART:
+  status: needsEvaluation
+CompileTimeErrorCode.PART_OF_UNNAMED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT:
+  status: needsFix
+  since: 2.17
+CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
+  status: needsEvaluation
+CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT:
+  status: needsEvaluation
+CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION:
+  status: needsEvaluation
+CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
+  status: needsEvaluation
+CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.PRIVATE_SETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.READ_POTENTIALLY_UNASSIGNED_FINAL:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON:
+  status: needsEvaluation
+CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_NON_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: needsEvaluation
+CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION:
+  status: needsEvaluation
+CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH:
+  status: needsEvaluation
+CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.RETURN_IN_GENERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE:
+  status: needsEvaluation
+CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION:
+  status: hasFix
+CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD:
+  status: hasFix
+CompileTimeErrorCode.RETURN_WITHOUT_VALUE:
+  status: needsEvaluation
+CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.SHARED_DEFERRED_PREFIX:
+  status: needsEvaluation
+CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY:
+  status: needsEvaluation
+CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER:
+  status: needsEvaluation
+CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED:
+  status: needsFix
+  since: 2.17
+CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED:
+  status: needsFix
+  since: 2.17
+  issue: https://github.com/dart-lang/sdk/issues/48480
+CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL:
+  status: needsFix
+  issue: https://github.com/dart-lang/sdk/issues/48359
+CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer a fix to remove the super invocation, but the
+    user really needs to think about what constructor they were trying to invoke
+    and why in order to really fix the issue.
+CompileTimeErrorCode.SUPER_IN_EXTENSION:
+  status: needsEvaluation
+CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT:
+  status: needsEvaluation
+CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR:
+  status: needsEvaluation
+CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT:
+  status: needsEvaluation
+CompileTimeErrorCode.SUPER_INVOCATION_NOT_LAST:
+  status: needsEvaluation
+CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY:
+  status: hasFix
+CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE:
+  status: needsEvaluation
+CompileTimeErrorCode.TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS:
+  status: needsEvaluation
+  since: 2.15
+CompileTimeErrorCode.THROW_OF_INVALID_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.TOP_LEVEL_CYCLE:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD:
+  status: hasFix
+CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_ANNOTATION:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_CLASS:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER:
+  status: needsEvaluation
+CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT:
+  status: needsEvaluation
+CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED:
+  status: needsFix
+  since: 2.17
+  issue: https://github.com/dart-lang/sdk/issues/48481
+CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
+  status: needsFix
+  since: 2.17
+  issue: https://github.com/dart-lang/sdk/issues/48481
+CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_FUNCTION:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_GETTER:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_GETTER_ON_FUNCTION_TYPE:
+  status: needsFix
+  since: 2.15
+CompileTimeErrorCode.UNDEFINED_IDENTIFIER:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_METHOD:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_METHOD_ON_FUNCTION_TYPE:
+  status: needsFix
+  since: 2.15
+CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_OPERATOR:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_SETTER:
+  status: hasFix
+CompileTimeErrorCode.UNDEFINED_SETTER_ON_FUNCTION_TYPE:
+  status: needsFix
+  since: 2.15
+CompileTimeErrorCode.UNDEFINED_SUPER_GETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.UNDEFINED_SUPER_METHOD:
+  status: needsEvaluation
+CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.UNDEFINED_SUPER_SETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER:
+  status: hasFix
+CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE:
+  status: hasFix
+CompileTimeErrorCode.URI_DOES_NOT_EXIST:
+  status: hasFix
+CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED:
+  status: needsEvaluation
+CompileTimeErrorCode.URI_WITH_INTERPOLATION:
+  status: needsEvaluation
+CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION:
+  status: needsEvaluation
+  since: ~2.15
+CompileTimeErrorCode.USE_OF_VOID_RESULT:
+  status: needsEvaluation
+CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We could potentially offer to remove the member, but the user probably needs
+    to think about what they were trying to do and it seems more likely that the
+    right fix is to rename the member.
+CompileTimeErrorCode.VARIABLE_TYPE_MISMATCH:
+  status: needsEvaluation
+CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+  status: needsEvaluation
+CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS:
+  status: needsEvaluation
+CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER:
+  status: needsEvaluation
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS:
+  status: hasFix
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION:
+  status: needsFix
+  since: 2.15
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR:
+  status: hasFix
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM:
+  status: noFix
+  since: 2.17
+  notes: |-
+    We can't know which type arguments to add or remove. (We do have a fix to
+    remove all type arguments that would work here, it just isn't a very good
+    fix to suggest.)
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION:
+  status: hasFix
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION:
+  status: needsFix
+  since: ~2.15
+CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD:
+  status: hasFix
+CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+  status: needsEvaluation
+CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION:
+  status: needsEvaluation
+CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.YIELD_IN_NON_GENERATOR:
+  status: needsEvaluation
+CompileTimeErrorCode.YIELD_EACH_OF_INVALID_TYPE:
+  status: needsEvaluation
+CompileTimeErrorCode.YIELD_OF_INVALID_TYPE:
+  status: hasFix
+FfiCode.ABI_SPECIFIC_INTEGER_INVALID:
+  status: needsEvaluation
+  since: ~2.16
+FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
+  status: needsEvaluation
+  since: ~2.16
+FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
+  status: needsEvaluation
+  since: ~2.16
+FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
+  status: needsEvaluation
+  since: ~2.16
+FfiCode.ANNOTATION_ON_POINTER_FIELD:
+  status: needsEvaluation
+FfiCode.ARGUMENT_MUST_BE_A_CONSTANT:
+  status: needsEvaluation
+FfiCode.CREATION_OF_STRUCT_OR_UNION:
+  status: needsEvaluation
+  since: ~2.15
+FfiCode.EMPTY_STRUCT:
+  status: needsEvaluation
+FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD:
+  status: needsEvaluation
+FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY:
+  status: needsEvaluation
+FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL:
+  status: needsEvaluation
+  since: ~2.15
+FfiCode.FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER:
+  status: needsEvaluation
+  since: ~2.15
+FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS:
+  status: needsEvaluation
+  since: ~2.15
+FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER:
+  status: needsEvaluation
+  since: ~2.15
+FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER:
+  status: needsEvaluation
+FfiCode.FIELD_INITIALIZER_IN_STRUCT:
+  status: needsEvaluation
+FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT:
+  status: needsEvaluation
+  since: ~2.15
+FfiCode.GENERIC_STRUCT_SUBCLASS:
+  status: needsEvaluation
+FfiCode.INVALID_EXCEPTION_VALUE:
+  status: needsEvaluation
+FfiCode.INVALID_FIELD_TYPE_IN_STRUCT:
+  status: needsEvaluation
+FfiCode.LEAF_CALL_MUST_NOT_RETURN_HANDLE:
+  status: needsEvaluation
+FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE:
+  status: needsEvaluation
+FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD:
+  status: needsEvaluation
+FfiCode.MISSING_ANNOTATION_ON_STRUCT_FIELD:
+  status: needsEvaluation
+FfiCode.MISSING_EXCEPTION_VALUE:
+  status: needsEvaluation
+FfiCode.MISSING_FIELD_TYPE_IN_STRUCT:
+  status: needsEvaluation
+FfiCode.MISSING_SIZE_ANNOTATION_CARRAY:
+  status: needsEvaluation
+FfiCode.MUST_BE_A_NATIVE_FUNCTION_TYPE:
+  status: needsEvaluation
+FfiCode.MUST_BE_A_SUBTYPE:
+  status: needsEvaluation
+FfiCode.NON_CONSTANT_TYPE_ARGUMENT:
+  status: needsEvaluation
+FfiCode.NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
+  status: needsEvaluation
+FfiCode.NON_POSITIVE_ARRAY_DIMENSION:
+  status: needsEvaluation
+FfiCode.NON_SIZED_TYPE_ARGUMENT:
+  status: needsEvaluation
+FfiCode.PACKED_ANNOTATION:
+  status: needsEvaluation
+FfiCode.PACKED_ANNOTATION_ALIGNMENT:
+  status: needsEvaluation
+FfiCode.PACKED_NESTING_NON_PACKED:
+  status: needsEvaluation
+FfiCode.SIZE_ANNOTATION_DIMENSIONS:
+  status: needsEvaluation
+FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS:
+  status: needsEvaluation
+FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS:
+  status: needsEvaluation
+FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH:
+  status: needsEvaluation
+FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS:
+  status: needsEvaluation
+FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS:
+  status: needsEvaluation
+FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
+  status: needsEvaluation
+HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
+  status: needsEvaluation
+HintCode.ASSIGNMENT_OF_DO_NOT_STORE:
+  status: needsEvaluation
+HintCode.BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
+  status: hasFix
+HintCode.CAN_BE_NULL_AFTER_NULL_AWARE:
+  status: hasFix
+HintCode.DEAD_CODE:
+  status: hasFix
+HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH:
+  status: hasFix
+HintCode.DEAD_CODE_ON_CATCH_SUBTYPE:
+  status: hasFix
+HintCode.DEPRECATED_EXTENDS_FUNCTION:
+  status: needsEvaluation
+HintCode.DEPRECATED_FUNCTION_CLASS_DECLARATION:
+  status: needsEvaluation
+HintCode.DEPRECATED_IMPLEMENTS_FUNCTION:
+  status: needsEvaluation
+HintCode.DEPRECATED_MEMBER_USE:
+  status: hasFix
+HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE:
+  status: needsEvaluation
+HintCode.DEPRECATED_MEMBER_USE_FROM_SAME_PACKAGE_WITH_MESSAGE:
+  status: needsEvaluation
+HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE:
+  status: hasFix
+HintCode.DEPRECATED_MIXIN_FUNCTION:
+  status: needsEvaluation
+HintCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE:
+  status: hasFix
+HintCode.DIVISION_OPTIMIZATION:
+  status: hasFix
+HintCode.DUPLICATE_HIDDEN_NAME:
+  status: hasFix
+HintCode.DUPLICATE_IGNORE:
+  status: needsEvaluation
+HintCode.DUPLICATE_IMPORT:
+  status: hasFix
+HintCode.DUPLICATE_SHOWN_NAME:
+  status: hasFix
+HintCode.EQUAL_ELEMENTS_IN_SET:
+  status: needsEvaluation
+HintCode.EQUAL_KEYS_IN_MAP:
+  status: needsEvaluation
+HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE:
+  status: needsEvaluation
+HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE:
+  status: needsEvaluation
+HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
+  status: needsEvaluation
+HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_FUNCTION_INVOCATION:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_GENERIC_INVOCATION:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE:
+  status: needsEvaluation
+HintCode.INFERENCE_FAILURE_ON_UNTYPED_PARAMETER:
+  status: needsEvaluation
+HintCode.INVALID_ANNOTATION_TARGET:
+  status: needsEvaluation
+HintCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT:
+  status: needsEvaluation
+HintCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
+  status: needsEvaluation
+HintCode.INVALID_FACTORY_ANNOTATION:
+  status: hasFix
+HintCode.INVALID_FACTORY_METHOD_DECL:
+  status: needsEvaluation
+HintCode.INVALID_FACTORY_METHOD_IMPL:
+  status: needsEvaluation
+HintCode.INVALID_IMMUTABLE_ANNOTATION:
+  status: hasFix
+HintCode.INVALID_INTERNAL_ANNOTATION:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
+  status: needsEvaluation
+HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
+  status: needsEvaluation
+HintCode.INVALID_LITERAL_ANNOTATION:
+  status: hasFix
+HintCode.INVALID_NON_VIRTUAL_ANNOTATION:
+  status: needsEvaluation
+HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
+  status: needsEvaluation
+HintCode.INVALID_REQUIRED_NAMED_PARAM:
+  status: hasFix
+HintCode.INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM:
+  status: hasFix
+HintCode.INVALID_REQUIRED_POSITIONAL_PARAM:
+  status: hasFix
+HintCode.INVALID_SEALED_ANNOTATION:
+  status: hasFix
+HintCode.INVALID_USE_OF_INTERNAL_MEMBER:
+  status: needsEvaluation
+HintCode.INVALID_USE_OF_PROTECTED_MEMBER:
+  status: needsEvaluation
+HintCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER:
+  status: needsEvaluation
+  since: ~2.15
+HintCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER:
+  status: needsEvaluation
+HintCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER:
+  status: needsEvaluation
+HintCode.INVALID_VISIBILITY_ANNOTATION:
+  status: needsEvaluation
+HintCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION:
+  status: needsFix
+  since: ~2.15
+HintCode.MISSING_REQUIRED_PARAM:
+  status: hasFix
+HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS:
+  status: hasFix
+HintCode.MISSING_RETURN:
+  status: hasFix
+HintCode.MIXIN_ON_SEALED_CLASS:
+  status: needsEvaluation
+HintCode.MUST_BE_IMMUTABLE:
+  status: needsEvaluation
+HintCode.MUST_CALL_SUPER:
+  status: needsFix
+  issue: https://github.com/dart-lang/sdk/issues/33985
+HintCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR:
+  status: needsEvaluation
+HintCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW:
+  status: needsEvaluation
+HintCode.NULL_ARGUMENT_TO_NON_NULL_TYPE:
+  status: needsEvaluation
+  since: ~2.15
+HintCode.NULL_AWARE_BEFORE_OPERATOR:
+  status: needsEvaluation
+HintCode.NULL_AWARE_IN_CONDITION:
+  status: needsEvaluation
+HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR:
+  status: needsEvaluation
+HintCode.NULL_CHECK_ALWAYS_FAILS:
+  status: needsEvaluation
+HintCode.NULLABLE_TYPE_IN_CATCH_CLAUSE:
+  status: hasFix
+HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD:
+  status: hasFix
+HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER:
+  status: hasFix
+HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD:
+  status: hasFix
+HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER:
+  status: hasFix
+HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT:
+  status: needsEvaluation
+HintCode.RECEIVER_OF_TYPE_NEVER:
+  status: needsEvaluation
+HintCode.RETURN_OF_DO_NOT_STORE:
+  status: needsEvaluation
+HintCode.RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR:
+  status: needsEvaluation
+HintCode.RETURN_TYPE_INVALID_FOR_CATCH_ERROR:
+  status: needsEvaluation
+HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT:
+  status: hasFix
+HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE:
+  status: hasFix
+HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT:
+  status: hasFix
+HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS:
+  status: needsFix
+  since: 2.15
+HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT:
+  status: hasFix
+HintCode.SDK_VERSION_EXTENSION_METHODS:
+  status: hasFix
+HintCode.SDK_VERSION_GT_GT_GT_OPERATOR:
+  status: hasFix
+HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT:
+  status: hasFix
+HintCode.SDK_VERSION_NEVER:
+  status: needsEvaluation
+HintCode.SDK_VERSION_SET_LITERAL:
+  status: hasFix
+HintCode.SDK_VERSION_UI_AS_CODE:
+  status: hasFix
+HintCode.SDK_VERSION_UI_AS_CODE_IN_CONST_CONTEXT:
+  status: needsEvaluation
+HintCode.STRICT_RAW_TYPE:
+  status: needsEvaluation
+HintCode.SUBTYPE_OF_SEALED_CLASS:
+  status: needsEvaluation
+HintCode.TYPE_CHECK_IS_NOT_NULL:
+  status: hasFix
+HintCode.TYPE_CHECK_IS_NULL:
+  status: hasFix
+HintCode.UNDEFINED_HIDDEN_NAME:
+  status: hasFix
+HintCode.UNDEFINED_REFERENCED_PARAMETER:
+  status: needsEvaluation
+HintCode.UNDEFINED_SHOWN_NAME:
+  status: hasFix
+HintCode.UNIGNORABLE_IGNORE:
+  status: needsEvaluation
+HintCode.UNNECESSARY_CAST:
+  status: hasFix
+HintCode.UNNECESSARY_IGNORE:
+  status: needsEvaluation
+HintCode.UNNECESSARY_IMPORT:
+  status: hasFix
+HintCode.UNNECESSARY_NO_SUCH_METHOD:
+  status: needsEvaluation
+HintCode.UNNECESSARY_NULL_COMPARISON_FALSE:
+  status: hasFix
+HintCode.UNNECESSARY_NULL_COMPARISON_TRUE:
+  status: hasFix
+HintCode.UNNECESSARY_QUESTION_MARK:
+  status: needsEvaluation
+HintCode.UNNECESSARY_TYPE_CHECK_FALSE:
+  status: needsFix
+  issue: https://github.com/dart-lang/sdk/issues/47793
+HintCode.UNNECESSARY_TYPE_CHECK_TRUE:
+  status: needsFix
+  issue: https://github.com/dart-lang/sdk/issues/47793
+HintCode.TEXT_DIRECTION_CODE_POINT_IN_COMMENT:
+  status: needsFix
+  since: ~2.16
+HintCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL:
+  status: needsFix
+  since: ~2.16
+HintCode.UNUSED_CATCH_CLAUSE:
+  status: hasFix
+HintCode.UNUSED_CATCH_STACK:
+  status: hasFix
+HintCode.UNUSED_ELEMENT:
+  status: hasFix
+HintCode.UNUSED_ELEMENT_PARAMETER:
+  status: needsEvaluation
+HintCode.UNUSED_FIELD:
+  status: hasFix
+HintCode.UNUSED_IMPORT:
+  status: hasFix
+HintCode.UNUSED_LABEL:
+  status: hasFix
+HintCode.UNUSED_LOCAL_VARIABLE:
+  status: hasFix
+HintCode.UNUSED_RESULT:
+  status: needsEvaluation
+HintCode.UNUSED_RESULT_WITH_MESSAGE:
+  status: needsEvaluation
+HintCode.UNUSED_SHOWN_NAME:
+  status: hasFix
+LanguageCode.IMPLICIT_DYNAMIC_FIELD:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_FUNCTION:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_INVOKE:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_LIST_LITERAL:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_MAP_LITERAL:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_METHOD:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_PARAMETER:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_RETURN:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_TYPE:
+  status: needsEvaluation
+LanguageCode.IMPLICIT_DYNAMIC_VARIABLE:
+  status: needsEvaluation
+LintCode.always_declare_return_types:
+  status: hasFix
+LintCode.always_put_control_body_on_new_line:
+  status: needsEvaluation
+LintCode.always_put_required_named_parameters_first:
+  status: needsEvaluation
+LintCode.always_require_non_null_named_parameters:
+  status: hasFix
+LintCode.always_specify_types:
+  status: hasFix
+LintCode.always_use_package_imports:
+  status: hasFix
+LintCode.annotate_overrides:
+  status: hasFix
+LintCode.avoid_annotating_with_dynamic:
+  status: hasFix
+LintCode.avoid_as:
+  status: needsEvaluation
+LintCode.avoid_bool_literals_in_conditional_expressions:
+  status: needsEvaluation
+LintCode.avoid_catches_without_on_clauses:
+  status: needsEvaluation
+LintCode.avoid_catching_errors:
+  status: needsEvaluation
+LintCode.avoid_classes_with_only_static_members:
+  status: needsEvaluation
+LintCode.avoid_double_and_int_checks:
+  status: needsEvaluation
+LintCode.avoid_dynamic_calls:
+  status: needsEvaluation
+LintCode.avoid_empty_else:
+  status: hasFix
+LintCode.avoid_equals_and_hash_code_on_mutable_classes:
+  status: needsEvaluation
+LintCode.avoid_escaping_inner_quotes:
+  status: hasFix
+LintCode.avoid_field_initializers_in_const_classes:
+  status: needsEvaluation
+LintCode.avoid_final_parameters:
+  status: needsEvaluation
+LintCode.avoid_function_literals_in_foreach_calls:
+  status: hasFix
+LintCode.avoid_implementing_value_types:
+  status: needsEvaluation
+LintCode.avoid_init_to_null:
+  status: hasFix
+LintCode.avoid_js_rounded_ints:
+  status: needsEvaluation
+LintCode.avoid_multiple_declarations_per_line:
+  status: needsEvaluation
+LintCode.avoid_null_checks_in_equality_operators:
+  status: hasFix
+LintCode.avoid_positional_boolean_parameters:
+  status: needsEvaluation
+LintCode.avoid_print:
+  status: hasFix
+LintCode.avoid_private_typedef_functions:
+  status: hasFix
+LintCode.avoid_redundant_argument_values:
+  status: hasFix
+LintCode.avoid_relative_lib_imports:
+  status: hasFix
+LintCode.avoid_renaming_method_parameters:
+  status: needsEvaluation
+LintCode.avoid_return_types_on_setters:
+  status: hasFix
+LintCode.avoid_returning_null:
+  status: needsEvaluation
+LintCode.avoid_returning_null_for_future:
+  status: hasFix
+LintCode.avoid_returning_null_for_void:
+  status: hasFix
+LintCode.avoid_returning_this:
+  status: needsEvaluation
+LintCode.avoid_setters_without_getters:
+  status: needsEvaluation
+LintCode.avoid_shadowing_type_parameters:
+  status: needsEvaluation
+LintCode.avoid_single_cascade_in_expression_statements:
+  status: hasFix
+LintCode.avoid_slow_async_io:
+  status: needsEvaluation
+LintCode.avoid_type_to_string:
+  status: needsEvaluation
+LintCode.avoid_types_as_parameter_names:
+  status: hasFix
+LintCode.avoid_types_on_closure_parameters:
+  status: hasFix
+LintCode.avoid_unnecessary_containers:
+  status: hasFix
+LintCode.avoid_unused_constructor_parameters:
+  status: hasFix
+LintCode.avoid_void_async:
+  status: hasFix
+LintCode.avoid_web_libraries_in_flutter:
+  status: needsEvaluation
+LintCode.await_only_futures:
+  status: hasFix
+LintCode.camel_case_extensions:
+  status: needsEvaluation
+LintCode.camel_case_types:
+  status: needsEvaluation
+LintCode.cancel_subscriptions:
+  status: needsEvaluation
+LintCode.cascade_invocations:
+  status: needsEvaluation
+LintCode.cast_nullable_to_non_nullable:
+  status: needsEvaluation
+LintCode.close_sinks:
+  status: needsEvaluation
+LintCode.comment_references:
+  status: needsEvaluation
+LintCode.conditional_uri_does_not_exist:
+  status: needsEvaluation
+LintCode.constant_identifier_names:
+  status: needsEvaluation
+LintCode.control_flow_in_finally:
+  status: needsEvaluation
+LintCode.curly_braces_in_flow_control_structures:
+  status: hasFix
+LintCode.depend_on_referenced_packages:
+  status: needsFix
+LintCode.deprecated_consistency:
+  status: needsEvaluation
+LintCode.diagnostic_describe_all_properties:
+  status: hasFix
+LintCode.directives_ordering:
+  status: hasFix
+LintCode.do_not_use_environment:
+  status: needsEvaluation
+LintCode.empty_catches:
+  status: hasFix
+LintCode.empty_constructor_bodies:
+  status: hasFix
+LintCode.empty_statements:
+  status: hasFix
+LintCode.eol_at_end_of_file:
+  status: hasFix
+LintCode.exhaustive_cases:
+  status: hasFix
+LintCode.file_names:
+  status: needsEvaluation
+LintCode.flutter_style_todos:
+  status: needsEvaluation
+LintCode.hash_and_equals:
+  status: hasFix
+LintCode.implementation_imports:
+  status: needsEvaluation
+LintCode.invariant_booleans:
+  status: needsEvaluation
+LintCode.iterable_contains_unrelated_type:
+  status: needsEvaluation
+LintCode.join_return_with_assignment:
+  status: needsEvaluation
+LintCode.leading_newlines_in_multiline_strings:
+  status: hasFix
+LintCode.library_names:
+  status: needsEvaluation
+LintCode.library_prefixes:
+  status: needsEvaluation
+LintCode.library_private_types_in_public_api:
+  status: needsEvaluation
+LintCode.lines_longer_than_80_chars:
+  status: needsEvaluation
+LintCode.list_remove_unrelated_type:
+  status: needsEvaluation
+LintCode.literal_only_boolean_expressions:
+  status: needsEvaluation
+LintCode.missing_whitespace_between_adjacent_strings:
+  status: needsEvaluation
+LintCode.no_adjacent_strings_in_list:
+  status: needsEvaluation
+LintCode.no_default_cases:
+  status: needsEvaluation
+LintCode.no_duplicate_case_values:
+  status: hasFix
+LintCode.no_leading_underscores_for_library_prefixes:
+  status: hasFix
+LintCode.no_leading_underscores_for_local_identifiers:
+  status: hasFix
+LintCode.no_logic_in_create_state:
+  status: needsEvaluation
+LintCode.no_runtimeType_toString:
+  status: needsEvaluation
+LintCode.non_constant_identifier_names:
+  status: hasFix
+LintCode.noop_primitive_operations:
+  status: needsEvaluation
+LintCode.null_check_on_nullable_type_parameter:
+  status: hasFix
+  notes: |-
+    A second fix is possible, in which we make the type parameter not
+    potentially nullable, something like changing `T foo<T>()` to
+    `T foo<T extends Object>()` and `T foo<T extends num?>()` to
+    `T foo<T extends num>()`. This is particularly valuable in the first
+    case, where the choice to implicitly bound the type to `dynamic` may not
+    have been intentional.
+LintCode.null_closures:
+  status: hasFix
+LintCode.omit_local_variable_types:
+  status: hasFix
+LintCode.one_member_abstracts:
+  status: needsEvaluation
+LintCode.only_throw_errors:
+  status: needsEvaluation
+LintCode.overridden_fields:
+  status: needsEvaluation
+LintCode.package_api_docs:
+  status: needsEvaluation
+LintCode.package_names:
+  status: needsEvaluation
+LintCode.package_prefixed_library_names:
+  status: needsEvaluation
+LintCode.parameter_assignments:
+  status: needsEvaluation
+LintCode.prefer_adjacent_string_concatenation:
+  status: hasFix
+LintCode.prefer_asserts_in_initializer_lists:
+  status: needsEvaluation
+LintCode.prefer_asserts_with_message:
+  status: needsEvaluation
+LintCode.prefer_bool_in_asserts:
+  status: needsEvaluation
+LintCode.prefer_collection_literals:
+  status: hasFix
+LintCode.prefer_conditional_assignment:
+  status: hasFix
+LintCode.prefer_const_constructors:
+  status: hasFix
+LintCode.prefer_const_constructors_in_immutables:
+  status: hasFix
+LintCode.prefer_const_declarations:
+  status: hasFix
+LintCode.prefer_const_literals_to_create_immutables:
+  status: hasFix
+LintCode.prefer_constructors_over_static_methods:
+  status: needsEvaluation
+LintCode.prefer_contains:
+  status: hasFix
+LintCode.prefer_double_quotes:
+  status: hasFix
+LintCode.prefer_equal_for_default_values:
+  status: hasFix
+LintCode.prefer_expression_function_bodies:
+  status: hasFix
+LintCode.prefer_final_fields:
+  status: hasFix
+LintCode.prefer_final_in_for_each:
+  status: hasFix
+LintCode.prefer_final_locals:
+  status: hasFix
+LintCode.prefer_final_parameters:
+  status: hasFix
+LintCode.prefer_for_elements_to_map_fromIterable:
+  status: hasFix
+LintCode.prefer_foreach:
+  status: needsEvaluation
+LintCode.prefer_function_declarations_over_variables:
+  status: needsEvaluation
+LintCode.prefer_generic_function_type_aliases:
+  status: hasFix
+LintCode.prefer_if_elements_to_conditional_expressions:
+  status: hasFix
+LintCode.prefer_if_null_operators:
+  status: hasFix
+LintCode.prefer_initializing_formals:
+  status: hasFix
+LintCode.prefer_inlined_adds:
+  status: hasFix
+LintCode.prefer_int_literals:
+  status: hasFix
+LintCode.prefer_interpolation_to_compose_strings:
+  status: hasFix
+LintCode.prefer_is_empty:
+  status: hasFix
+LintCode.prefer_is_not_empty:
+  status: hasFix
+LintCode.prefer_is_not_operator:
+  status: hasFix
+LintCode.prefer_iterable_whereType:
+  status: hasFix
+LintCode.prefer_mixin:
+  status: needsEvaluation
+LintCode.prefer_null_aware_method_calls:
+  status: needsEvaluation
+LintCode.prefer_null_aware_operators:
+  status: hasFix
+LintCode.prefer_relative_imports:
+  status: hasFix
+LintCode.prefer_single_quotes:
+  status: hasFix
+LintCode.prefer_spread_collections:
+  status: hasFix
+LintCode.prefer_typing_uninitialized_variables:
+  status: hasFix
+LintCode.prefer_void_to_null:
+  status: hasFix
+LintCode.provide_deprecation_message:
+  status: needsEvaluation
+LintCode.public_member_api_docs:
+  status: needsEvaluation
+LintCode.recursive_getters:
+  status: needsEvaluation
+LintCode.require_trailing_commas:
+  status: hasFix
+LintCode.secure_pubspec_urls:
+  status: needsEvaluation
+LintCode.sized_box_for_whitespace:
+  status: hasFix
+LintCode.sized_box_shrink_expand:
+  status: needsEvaluation
+LintCode.slash_for_doc_comments:
+  status: hasFix
+LintCode.sort_child_properties_last:
+  status: hasFix
+LintCode.sort_constructors_first:
+  status: hasFix
+LintCode.sort_pub_dependencies:
+  status: needsEvaluation
+LintCode.sort_unnamed_constructors_first:
+  status: hasFix
+LintCode.super_goes_last:
+  status: needsEvaluation
+LintCode.test_types_in_equals:
+  status: needsEvaluation
+LintCode.throw_in_finally:
+  status: needsEvaluation
+LintCode.tighten_type_of_initializing_formals:
+  status: needsEvaluation
+LintCode.type_annotate_public_apis:
+  status: hasFix
+LintCode.type_init_formals:
+  status: hasFix
+LintCode.unawaited_futures:
+  status: hasFix
+LintCode.unnecessary_await_in_return:
+  status: needsEvaluation
+LintCode.unnecessary_brace_in_string_interps:
+  status: hasFix
+LintCode.unnecessary_const:
+  status: hasFix
+LintCode.unnecessary_constructor_name:
+  status: hasFix
+LintCode.unnecessary_final:
+  status: hasFix
+LintCode.unnecessary_getters_setters:
+  status: hasFix
+LintCode.unnecessary_lambdas:
+  status: hasFix
+LintCode.unnecessary_late:
+  status: hasFix
+LintCode.unnecessary_new:
+  status: hasFix
+LintCode.unnecessary_null_aware_assignments:
+  status: needsFix
+LintCode.unnecessary_null_checks:
+  status: needsEvaluation
+LintCode.unnecessary_null_in_if_null_operators:
+  status: hasFix
+LintCode.unnecessary_nullable_for_final_variable_declarations:
+  status: hasFix
+LintCode.unnecessary_overrides:
+  status: hasFix
+LintCode.unnecessary_parenthesis:
+  status: hasFix
+LintCode.unnecessary_raw_strings:
+  status: hasFix
+LintCode.unnecessary_statements:
+  status: needsEvaluation
+LintCode.unnecessary_string_escapes:
+  status: hasFix
+LintCode.unnecessary_string_interpolations:
+  status: hasFix
+LintCode.unnecessary_this:
+  status: hasFix
+LintCode.unrelated_type_equality_checks:
+  status: needsEvaluation
+LintCode.unsafe_html_attribute:
+  status: needsEvaluation
+LintCode.unsafe_html_method:
+  status: needsEvaluation
+LintCode.unsafe_html_constructor:
+  status: needsEvaluation
+LintCode.use_build_context_synchronously:
+  status: needsEvaluation
+LintCode.use_decorated_box:
+  status: needsEvaluation
+LintCode.use_full_hex_values_for_flutter_colors:
+  status: hasFix
+LintCode.use_function_type_syntax_for_parameters:
+  status: hasFix
+LintCode.use_if_null_to_convert_nulls_to_bools:
+  status: needsEvaluation
+LintCode.use_is_even_rather_than_modulo:
+  status: needsEvaluation
+LintCode.use_key_in_widget_constructors:
+  status: hasFix
+LintCode.use_late_for_private_fields_and_variables:
+  status: needsEvaluation
+LintCode.use_named_constants:
+  status: needsEvaluation
+LintCode.use_raw_strings:
+  status: hasFix
+LintCode.use_rethrow_when_possible:
+  status: hasFix
+LintCode.use_setters_to_change_properties:
+  status: needsEvaluation
+LintCode.use_string_buffers:
+  status: needsEvaluation
+LintCode.use_test_throws_matchers:
+  status: needsEvaluation
+LintCode.use_to_and_as_if_applicable:
+  status: needsEvaluation
+LintCode.valid_regexps:
+  status: needsEvaluation
+LintCode.void_checks:
+  status: needsEvaluation
+ManifestWarningCode.CAMERA_PERMISSIONS_INCOMPATIBLE:
+  status: needsEvaluation
+ManifestWarningCode.NO_TOUCHSCREEN_FEATURE:
+  status: needsEvaluation
+ManifestWarningCode.NON_RESIZABLE_ACTIVITY:
+  status: needsEvaluation
+ManifestWarningCode.PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE:
+  status: needsEvaluation
+ManifestWarningCode.SETTING_ORIENTATION_ON_ACTIVITY:
+  status: needsEvaluation
+ManifestWarningCode.UNSUPPORTED_CHROME_OS_FEATURE:
+  status: needsEvaluation
+ManifestWarningCode.UNSUPPORTED_CHROME_OS_HARDWARE:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_CLASS_MEMBER:
+  status: hasFix
+ParserErrorCode.ABSTRACT_ENUM:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_EXTERNAL_FIELD:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_LATE_FIELD:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_STATIC_FIELD:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_STATIC_METHOD:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE:
+  status: needsEvaluation
+ParserErrorCode.ABSTRACT_TYPEDEF:
+  status: needsEvaluation
+ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT:
+  status: needsEvaluation
+ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS:
+  status: needsEvaluation
+ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED:
+  status: needsEvaluation
+ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER:
+  status: needsEvaluation
+ParserErrorCode.BINARY_OPERATOR_WRITTEN_OUT:
+  status: needsEvaluation
+ParserErrorCode.BREAK_OUTSIDE_OF_LOOP:
+  status: needsEvaluation
+ParserErrorCode.CATCH_SYNTAX:
+  status: needsEvaluation
+ParserErrorCode.CATCH_SYNTAX_EXTRA_PARAMETERS:
+  status: needsEvaluation
+ParserErrorCode.CLASS_IN_CLASS:
+  status: needsEvaluation
+ParserErrorCode.COLON_IN_PLACE_OF_IN:
+  status: needsEvaluation
+ParserErrorCode.CONFLICTING_MODIFIERS:
+  status: needsEvaluation
+ParserErrorCode.CONST_AND_FINAL:
+  status: needsEvaluation
+ParserErrorCode.CONST_CLASS:
+  status: needsEvaluation
+ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.CONST_ENUM:
+  status: needsEvaluation
+ParserErrorCode.CONST_FACTORY:
+  status: needsEvaluation
+ParserErrorCode.CONST_METHOD:
+  status: needsEvaluation
+ParserErrorCode.CONST_TYPEDEF:
+  status: needsEvaluation
+ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE:
+  status: needsEvaluation
+ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS:
+  status: needsEvaluation
+  since: ~2.15
+ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP:
+  status: needsEvaluation
+ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE:
+  status: needsEvaluation
+ParserErrorCode.COVARIANT_AND_STATIC:
+  status: needsEvaluation
+ParserErrorCode.COVARIANT_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.COVARIANT_MEMBER:
+  status: needsEvaluation
+ParserErrorCode.COVARIANT_TOP_LEVEL_DECLARATION:
+  status: needsEvaluation
+ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE:
+  status: needsEvaluation
+ParserErrorCode.DEFERRED_AFTER_PREFIX:
+  status: needsEvaluation
+ParserErrorCode.DIRECTIVE_AFTER_DECLARATION:
+  status: needsEvaluation
+ParserErrorCode.DUPLICATE_DEFERRED:
+  status: needsEvaluation
+ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT:
+  status: needsEvaluation
+ParserErrorCode.DUPLICATE_PREFIX:
+  status: needsEvaluation
+ParserErrorCode.DUPLICATED_MODIFIER:
+  status: needsEvaluation
+ParserErrorCode.EMPTY_ENUM_BODY:
+  status: noFix
+  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:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_CASE_OR_DEFAULT:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_CLASS_MEMBER:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_ELSE_OR_COMMA:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_EXECUTABLE:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_INSTEAD:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_STRING_LITERAL:
+  status: needsEvaluation
+ParserErrorCode.EXPECTED_TOKEN:
+  status: hasFix
+ParserErrorCode.EXPECTED_TYPE_NAME:
+  status: needsEvaluation
+ParserErrorCode.EXPERIMENT_NOT_ENABLED:
+  status: needsEvaluation
+ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
+  status: needsEvaluation
+ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER:
+  status: needsEvaluation
+ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_CLASS:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_ENUM:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_FACTORY_REDIRECTION:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_FACTORY_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_FIELD:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_GETTER_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_LATE_FIELD:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_METHOD_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_SETTER_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.EXTERNAL_TYPEDEF:
+  status: needsEvaluation
+ParserErrorCode.EXTRANEOUS_MODIFIER:
+  status: needsEvaluation
+ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION:
+  status: needsEvaluation
+ParserErrorCode.FACTORY_WITH_INITIALIZERS:
+  status: needsEvaluation
+ParserErrorCode.FACTORY_WITHOUT_BODY:
+  status: needsEvaluation
+ParserErrorCode.FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS:
+  status: needsEvaluation
+ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.FINAL_AND_COVARIANT:
+  status: needsEvaluation
+ParserErrorCode.FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.FINAL_AND_VAR:
+  status: needsEvaluation
+ParserErrorCode.FINAL_CLASS:
+  status: needsEvaluation
+ParserErrorCode.FINAL_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.FINAL_ENUM:
+  status: needsEvaluation
+ParserErrorCode.FINAL_METHOD:
+  status: needsEvaluation
+ParserErrorCode.FINAL_TYPEDEF:
+  status: needsEvaluation
+ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR:
+  status: needsEvaluation
+ParserErrorCode.GETTER_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.GETTER_IN_FUNCTION:
+  status: needsEvaluation
+ParserErrorCode.GETTER_WITH_PARAMETERS:
+  status: hasFix
+ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE:
+  status: needsEvaluation
+ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS:
+  status: needsEvaluation
+ParserErrorCode.IMPLEMENTS_BEFORE_ON:
+  status: needsEvaluation
+ParserErrorCode.IMPLEMENTS_BEFORE_WITH:
+  status: needsEvaluation
+ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
+  status: needsEvaluation
+ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH:
+  status: needsEvaluation
+ParserErrorCode.INVALID_AWAIT_IN_FOR:
+  status: needsEvaluation
+ParserErrorCode.INVALID_CODE_POINT:
+  status: needsEvaluation
+ParserErrorCode.INVALID_COMMENT_REFERENCE:
+  status: needsEvaluation
+ParserErrorCode.INVALID_CONSTRUCTOR_NAME:
+  status: needsEvaluation
+ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE:
+  status: needsEvaluation
+ParserErrorCode.INVALID_HEX_ESCAPE:
+  status: needsEvaluation
+ParserErrorCode.INVALID_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION:
+  status: needsEvaluation
+ParserErrorCode.INVALID_OPERATOR:
+  status: needsEvaluation
+ParserErrorCode.INVALID_OPERATOR_FOR_SUPER:
+  status: needsEvaluation
+ParserErrorCode.INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER:
+  status: needsEvaluation
+ParserErrorCode.INVALID_STAR_AFTER_ASYNC:
+  status: needsEvaluation
+ParserErrorCode.INVALID_SUPER_IN_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.INVALID_SYNC:
+  status: needsEvaluation
+ParserErrorCode.INVALID_THIS_IN_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.INVALID_UNICODE_ESCAPE:
+  status: needsEvaluation
+ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION:
+  status: needsEvaluation
+ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST:
+  status: needsEvaluation
+ParserErrorCode.LITERAL_WITH_CLASS_AND_NEW:
+  status: needsEvaluation
+ParserErrorCode.LITERAL_WITH_CLASS:
+  status: needsEvaluation
+ParserErrorCode.LITERAL_WITH_NEW:
+  status: needsEvaluation
+ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER:
+  status: needsEvaluation
+ParserErrorCode.MEMBER_WITH_CLASS_NAME:
+  status: needsEvaluation
+ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR:
+  status: needsEvaluation
+ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.MISSING_CATCH_OR_FINALLY:
+  status: needsEvaluation
+ParserErrorCode.MISSING_CLOSING_PARENTHESIS:
+  status: needsEvaluation
+ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE:
+  status: hasFix
+ParserErrorCode.MISSING_ENUM_BODY:
+  status: needsEvaluation
+ParserErrorCode.MISSING_EXPRESSION_IN_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.MISSING_EXPRESSION_IN_THROW:
+  status: needsEvaluation
+ParserErrorCode.MISSING_FUNCTION_BODY:
+  status: hasFix
+ParserErrorCode.MISSING_FUNCTION_KEYWORD:
+  status: needsEvaluation
+ParserErrorCode.MISSING_FUNCTION_PARAMETERS:
+  status: needsEvaluation
+ParserErrorCode.MISSING_GET:
+  status: needsEvaluation
+ParserErrorCode.MISSING_IDENTIFIER:
+  status: needsEvaluation
+ParserErrorCode.MISSING_INITIALIZER:
+  status: needsEvaluation
+ParserErrorCode.MISSING_KEYWORD_OPERATOR:
+  status: needsEvaluation
+ParserErrorCode.MISSING_METHOD_PARAMETERS:
+  status: needsEvaluation
+ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER:
+  status: needsEvaluation
+ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE:
+  status: needsEvaluation
+ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE:
+  status: needsEvaluation
+ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT:
+  status: needsEvaluation
+ParserErrorCode.MISSING_STAR_AFTER_SYNC:
+  status: needsEvaluation
+ParserErrorCode.MISSING_STATEMENT:
+  status: needsEvaluation
+ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
+  status: needsEvaluation
+ParserErrorCode.MISSING_TYPEDEF_PARAMETERS:
+  status: needsEvaluation
+ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH:
+  status: needsEvaluation
+ParserErrorCode.MIXED_PARAMETER_GROUPS:
+  status: needsEvaluation
+ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.MODIFIER_OUT_OF_ORDER:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_CLAUSES:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_ON_CLAUSES:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_VARIANCE_MODIFIERS:
+  status: needsEvaluation
+ParserErrorCode.MULTIPLE_WITH_CLAUSES:
+  status: needsEvaluation
+ParserErrorCode.NAMED_FUNCTION_EXPRESSION:
+  status: needsEvaluation
+ParserErrorCode.NAMED_FUNCTION_TYPE:
+  status: needsEvaluation
+ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP:
+  status: needsEvaluation
+ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE:
+  status: needsEvaluation
+ParserErrorCode.NATIVE_CLAUSE_SHOULD_BE_ANNOTATION:
+  status: needsEvaluation
+ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
+  status: needsEvaluation
+ParserErrorCode.NON_CONSTRUCTOR_FACTORY:
+  status: needsEvaluation
+ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME:
+  status: needsEvaluation
+ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART:
+  status: needsEvaluation
+ParserErrorCode.NON_STRING_LITERAL_AS_URI:
+  status: needsEvaluation
+ParserErrorCode.NON_USER_DEFINABLE_OPERATOR:
+  status: needsEvaluation
+ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS:
+  status: needsEvaluation
+ParserErrorCode.NULL_AWARE_CASCADE_OUT_OF_ORDER:
+  status: needsEvaluation
+ParserErrorCode.OUT_OF_ORDER_CLAUSES:
+  status: needsEvaluation
+ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT:
+  status: needsEvaluation
+ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP:
+  status: needsEvaluation
+ParserErrorCode.PREFIX_AFTER_COMBINATOR:
+  status: needsEvaluation
+ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY:
+  status: needsEvaluation
+ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.SETTER_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.SETTER_IN_FUNCTION:
+  status: needsEvaluation
+ParserErrorCode.STACK_OVERFLOW:
+  status: needsEvaluation
+ParserErrorCode.STATIC_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.STATIC_GETTER_WITHOUT_BODY:
+  status: needsEvaluation
+ParserErrorCode.STATIC_OPERATOR:
+  status: needsEvaluation
+ParserErrorCode.STATIC_SETTER_WITHOUT_BODY:
+  status: needsEvaluation
+ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION:
+  status: needsEvaluation
+ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE:
+  status: needsEvaluation
+ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES:
+  status: needsEvaluation
+ParserErrorCode.TOP_LEVEL_OPERATOR:
+  status: needsEvaluation
+ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE:
+  status: needsEvaluation
+ParserErrorCode.TYPE_BEFORE_FACTORY:
+  status: needsEvaluation
+ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR:
+  status: needsEvaluation
+ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR:
+  status: needsEvaluation
+ParserErrorCode.TYPEDEF_IN_CLASS:
+  status: needsEvaluation
+ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
+  status: needsEvaluation
+ParserErrorCode.UNEXPECTED_TOKEN:
+  status: needsEvaluation
+ParserErrorCode.UNEXPECTED_TOKENS:
+  status: needsEvaluation
+ParserErrorCode.VAR_AND_TYPE:
+  status: needsEvaluation
+ParserErrorCode.VAR_AS_TYPE_NAME:
+  status: hasFix
+ParserErrorCode.VAR_CLASS:
+  status: needsEvaluation
+ParserErrorCode.VAR_ENUM:
+  status: needsEvaluation
+ParserErrorCode.VAR_RETURN_TYPE:
+  status: needsEvaluation
+ParserErrorCode.VAR_TYPEDEF:
+  status: needsEvaluation
+ParserErrorCode.VOID_WITH_TYPE_ARGUMENTS:
+  status: needsEvaluation
+ParserErrorCode.WITH_BEFORE_EXTENDS:
+  status: needsEvaluation
+ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
+  status: needsEvaluation
+ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP:
+  status: needsEvaluation
+PubspecWarningCode.ASSET_DOES_NOT_EXIST:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.ASSET_FIELD_NOT_LIST:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.ASSET_NOT_STRING:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.DEPRECATED_FIELD:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.FLUTTER_FIELD_NOT_MAP:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.INVALID_DEPENDENCY:
+  status: needsEvaluation
+PubspecWarningCode.MISSING_NAME:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.NAME_NOT_STRING:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.PATH_DOES_NOT_EXIST:
+  status: needsEvaluation
+PubspecWarningCode.PATH_NOT_POSIX:
+  status: needsEvaluation
+  since: ~2.15
+PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST:
+  status: needsEvaluation
+PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY:
+  status: needsEvaluation
+  since: ~2.15
+ScannerErrorCode.EXPECTED_TOKEN:
+  status: needsEvaluation
+ScannerErrorCode.ILLEGAL_CHARACTER:
+  status: needsEvaluation
+ScannerErrorCode.MISSING_DIGIT:
+  status: needsEvaluation
+ScannerErrorCode.MISSING_HEX_DIGIT:
+  status: needsEvaluation
+ScannerErrorCode.MISSING_IDENTIFIER:
+  status: needsEvaluation
+ScannerErrorCode.MISSING_QUOTE:
+  status: needsEvaluation
+ScannerErrorCode.UNABLE_GET_CONTENT:
+  status: needsEvaluation
+ScannerErrorCode.UNEXPECTED_DOLLAR_IN_STRING:
+  status: needsEvaluation
+ScannerErrorCode.UNSUPPORTED_OPERATOR:
+  status: needsEvaluation
+ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT:
+  status: needsEvaluation
+ScannerErrorCode.UNTERMINATED_STRING_LITERAL:
+  status: needsEvaluation
+StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION:
+  status: hasFix
+StaticWarningCode.INVALID_NULL_AWARE_OPERATOR:
+  status: hasFix
+StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT:
+  status: hasFix
+StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED:
+  status: needsEvaluation
+StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL:
+  status: needsEvaluation
+StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH:
+  status: hasFix
+StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION:
+  status: hasFix
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index b4fb0b2..d3411f7 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -508,6 +508,16 @@
     DartFixKindPriority.IN_FILE,
     "Convert to 'package:' imports everywhere in file",
   );
+  static const CONVERT_TO_RAW_STRING = FixKind(
+    'dart.fix.convert.toRawString',
+    DartFixKindPriority.DEFAULT,
+    'Convert to raw string',
+  );
+  static const CONVERT_TO_RAW_STRING_MULTI = FixKind(
+    'dart.fix.convert.toRawString.multi',
+    DartFixKindPriority.IN_FILE,
+    'Convert to raw strings everywhere in file',
+  );
   static const CONVERT_TO_RELATIVE_IMPORT = FixKind(
     'dart.fix.convert.toRelativeImport',
     DartFixKindPriority.DEFAULT,
@@ -941,6 +951,16 @@
     DartFixKindPriority.IN_FILE,
     'Remove unnecessary interpolation braces everywhere in file',
   );
+  static const REMOVE_LEADING_UNDERSCORE = FixKind(
+    'dart.fix.remove.leadingUnderscore',
+    DartFixKindPriority.DEFAULT,
+    'Remove leading underscore',
+  );
+  static const REMOVE_LEADING_UNDERSCORE_MULTI = FixKind(
+    'dart.fix.remove.leadingUnderscore.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove leading underscores in file',
+  );
   static const REMOVE_METHOD_DECLARATION = FixKind(
     'dart.fix.remove.methodDeclaration',
     DartFixKindPriority.DEFAULT,
@@ -1053,6 +1073,16 @@
     DartFixKindPriority.IN_FILE,
     'Remove unnecessary const keywords everywhere in file',
   );
+  static const REMOVE_UNNECESSARY_LATE = FixKind(
+    'dart.fix.remove.unnecessaryLate',
+    DartFixKindPriority.DEFAULT,
+    'Remove unnecessary late keyword',
+  );
+  static const REMOVE_UNNECESSARY_LATE_MULTI = FixKind(
+    'dart.fix.remove.unnecessaryLate.multi',
+    DartFixKindPriority.IN_FILE,
+    'Remove unnecessary late keywords everywhere in file',
+  );
   static const REMOVE_UNNECESSARY_NEW = FixKind(
     'dart.fix.remove.unnecessaryNew',
     DartFixKindPriority.DEFAULT,
@@ -1238,6 +1268,16 @@
     DartFixKindPriority.IN_FILE,
     "Replace 'new' with 'const' where possible in file",
   );
+  static const REPLACE_NULL_CHECK_WITH_CAST = FixKind(
+    'dart.fix.replace.nullCheckWithCast',
+    DartFixKindPriority.DEFAULT,
+    'Replace null check with a cast',
+  );
+  static const REPLACE_NULL_CHECK_WITH_CAST_MULTI = FixKind(
+    'dart.fix.replace.nullCheckWithCast.multi',
+    DartFixKindPriority.IN_FILE,
+    'Replace null checks with casts in file',
+  );
   static const REPLACE_NULL_WITH_CLOSURE = FixKind(
     'dart.fix.replace.nullWithClosure',
     DartFixKindPriority.DEFAULT,
@@ -1278,6 +1318,11 @@
     DartFixKindPriority.DEFAULT,
     "Return 'Future<{0}>'",
   );
+  static const REPLACE_RETURN_TYPE_FUTURE_MULTI = FixKind(
+    'dart.fix.replace.returnTypeFuture.multi',
+    DartFixKindPriority.IN_FILE,
+    "Return a 'Future' where required in file.",
+  );
   static const REPLACE_RETURN_TYPE_ITERABLE = FixKind(
     'dart.fix.replace.returnTypeIterable',
     DartFixKindPriority.DEFAULT,
@@ -1425,6 +1470,26 @@
     DartFixKindPriority.IN_FILE,
     'Move child properties to ends of arguments everywhere in file',
   );
+  static const SORT_CONSTRUCTOR_FIRST = FixKind(
+    'dart.fix.sort.sortConstructorFirst',
+    DartFixKindPriority.DEFAULT,
+    'Move before other members',
+  );
+  static const SORT_CONSTRUCTOR_FIRST_MULTI = FixKind(
+    'dart.fix.sort.sortConstructorFirst.multi',
+    DartFixKindPriority.DEFAULT,
+    'Move all constructors before other members',
+  );
+  static const SORT_UNNAMED_CONSTRUCTOR_FIRST = FixKind(
+    'dart.fix.sort.sortUnnamedConstructorFirst',
+    DartFixKindPriority.DEFAULT,
+    'Move before named constructors',
+  );
+  static const SORT_UNNAMED_CONSTRUCTOR_FIRST_MULTI = FixKind(
+    'dart.fix.sort.sortUnnamedConstructorFirst.multi',
+    DartFixKindPriority.DEFAULT,
+    'Move all unnamed constructors before named constructors',
+  );
   static const UPDATE_SDK_CONSTRAINTS = FixKind(
     'dart.fix.updateSdkConstraints',
     DartFixKindPriority.DEFAULT,
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart
index 4f0972c..bd0dde1 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart
@@ -114,7 +114,7 @@
     if (node is ExtensionOverride) {
       return node.typeArguments;
     } else if (node is InstanceCreationExpression) {
-      return node.constructorName.type2.typeArguments;
+      return node.constructorName.type.typeArguments;
     } else if (node is InvocationExpression) {
       return node.typeArguments;
     } else if (node is NamedType) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
index e512626..0157194 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
@@ -96,7 +96,7 @@
       }
     } else if (node is InstanceCreationExpression) {
       var name = node.constructorName;
-      var className = _nameFromIdentifier(name.type2.name);
+      var className = _nameFromIdentifier(name.type.name);
       var constructorName = name.name?.name ?? '';
       if (components[0] == constructorName && components[1] == className) {
         return true;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
index acceb63..beda821 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
@@ -223,7 +223,7 @@
     //  get a more exact matcher.
     // TODO(brianwilkerson) Use 'new' for the name of the unnamed constructor.
     var constructorName = node.name?.name ?? ''; // ?? 'new';
-    var className = node.type2.name.simpleName;
+    var className = node.type.name.simpleName;
     _addMatcher(
       components: [constructorName, className],
       kinds: const [ElementKind.constructorKind],
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/modify_parameters.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/modify_parameters.dart
index c71ea13..7b052fa 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/modify_parameters.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/modify_parameters.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/change.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/code_template.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/parameter_reference.dart';
+import 'package:analysis_server/src/utilities/index_range.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
@@ -109,14 +110,14 @@
       }
     }
 
-    var insertionRanges = argumentsToInsert.contiguousSubRanges.toList();
-    var deletionRanges = argumentsToDelete.contiguousSubRanges.toList();
+    var insertionRanges = IndexRange.contiguousSubRanges(argumentsToInsert);
+    var deletionRanges = IndexRange.contiguousSubRanges(argumentsToDelete);
     if (insertionRanges.isNotEmpty) {
       /// Write to the [builder] the new arguments in the [insertionRange]. If
       /// [needsInitialComma] is `true` then we need to write a comma before the
       /// first of the new arguments.
       void writeInsertionRange(DartEditBuilder builder,
-          _IndexRange insertionRange, bool needsInitialComma) {
+          IndexRange insertionRange, bool needsInitialComma) {
         var needsComma = needsInitialComma;
         for (var argumentIndex = insertionRange.lower;
             argumentIndex <= insertionRange.upper;
@@ -199,7 +200,7 @@
         }
         if (upper >= lower) {
           builder.addInsertion(offset, (builder) {
-            writeInsertionRange(builder, _IndexRange(lower, upper),
+            writeInsertionRange(builder, IndexRange(lower, upper),
                 nextRemaining > 0 || insertionCount > 0);
           });
         }
@@ -255,7 +256,7 @@
 
   /// Return the range from the list of [ranges] that contains the given
   /// [index], or `null` if there is no such range.
-  _IndexRange? _rangeContaining(List<_IndexRange> ranges, int index) {
+  IndexRange? _rangeContaining(List<IndexRange> ranges, int index) {
     for (var range in ranges) {
       if (index >= range.lower && index <= range.upper) {
         return range;
@@ -295,44 +296,3 @@
   /// invocation site.
   _Data(this.argumentList);
 }
-
-/// A range of indexes within a list.
-class _IndexRange {
-  /// The index of the first element in the range.
-  final int lower;
-
-  /// The index of the last element in the range. This will be the same as the
-  /// [lower] if there is a single element in the range.
-  final int upper;
-
-  /// Initialize a newly created range.
-  _IndexRange(this.lower, this.upper);
-
-  /// Return the number of indices in this range.
-  int get count => upper - lower + 1;
-
-  @override
-  String toString() => '[$lower..$upper]';
-}
-
-extension on List<int> {
-  Iterable<_IndexRange> get contiguousSubRanges sync* {
-    if (isEmpty) {
-      return;
-    }
-    var lower = this[0];
-    var previous = lower;
-    var index = 1;
-    while (index < length) {
-      var current = this[index];
-      if (current == previous + 1) {
-        previous = current;
-      } else {
-        yield _IndexRange(lower, previous);
-        lower = previous = current;
-      }
-      index++;
-    }
-    yield _IndexRange(lower, previous);
-  }
-}
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 92e23b9..6d36d486 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
@@ -99,7 +99,7 @@
         }
       }
     } else if (node is ConstructorName) {
-      var typeName = node.type2.name;
+      var typeName = node.type.name;
       SimpleIdentifier classNameNode;
       if (typeName is SimpleIdentifier) {
         classNameNode = typeName;
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 bae5fc7..11db925 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -61,6 +61,7 @@
 import 'package:analysis_server/src/services/correction/dart/convert_to_null_aware_spread.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_on_type.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_package_import.dart';
+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_where_type.dart';
@@ -117,6 +118,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_if_null_operator.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_initializer.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_interpolation_braces.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_leading_underscore.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_method_declaration.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_name_from_combinator.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_non_null_assertion.dart';
@@ -129,6 +131,7 @@
 import 'package:analysis_server/src/services/correction/dart/remove_type_annotation.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_type_arguments.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_cast.dart';
+import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_late.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_new.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_parentheses.dart';
 import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_raw_string.dart';
@@ -150,6 +153,7 @@
 import 'package:analysis_server/src/services/correction/dart/replace_final_with_const.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_final_with_var.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_new_with_const.dart';
+import 'package:analysis_server/src/services/correction/dart/replace_null_check_with_cast.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_null_with_closure.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_return_type.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_return_type_future.dart';
@@ -169,6 +173,8 @@
 import 'package:analysis_server/src/services/correction/dart/replace_with_tear_off.dart';
 import 'package:analysis_server/src/services/correction/dart/replace_with_var.dart';
 import 'package:analysis_server/src/services/correction/dart/sort_child_property_last.dart';
+import 'package:analysis_server/src/services/correction/dart/sort_constructor_first.dart';
+import 'package:analysis_server/src/services/correction/dart/sort_unnamed_constructor_first.dart';
 import 'package:analysis_server/src/services/correction/dart/update_sdk_constraints.dart';
 import 'package:analysis_server/src/services/correction/dart/use_const.dart';
 import 'package:analysis_server/src/services/correction/dart/use_curly_braces.dart';
@@ -344,6 +350,9 @@
     LintNames.always_specify_types: [
       AddTypeAnnotation.newInstanceBulkFixable,
     ],
+    LintNames.always_use_package_imports: [
+      ConvertToPackageImport.newInstance,
+    ],
     LintNames.annotate_overrides: [
       AddOverride.newInstance,
     ],
@@ -406,6 +415,9 @@
     LintNames.avoid_unnecessary_containers: [
       FlutterRemoveWidget.newInstance,
     ],
+    LintNames.avoid_void_async: [
+      ReplaceReturnTypeFuture.newInstance,
+    ],
     LintNames.await_only_futures: [
       RemoveAwait.newInstance,
     ],
@@ -443,9 +455,18 @@
     LintNames.no_duplicate_case_values: [
       RemoveDuplicateCase.newInstance,
     ],
+    LintNames.no_leading_underscores_for_library_prefixes: [
+      RemoveLeadingUnderscore.newInstance,
+    ],
+    LintNames.no_leading_underscores_for_local_identifiers: [
+      RemoveLeadingUnderscore.newInstance,
+    ],
     LintNames.non_constant_identifier_names: [
       RenameToCamelCase.newInstance,
     ],
+    LintNames.null_check_on_nullable_type_parameter: [
+      ReplaceNullCheckWithCast.newInstance,
+    ],
     LintNames.null_closures: [
       ReplaceNullWithClosure.newInstance,
     ],
@@ -567,6 +588,12 @@
     LintNames.sort_child_properties_last: [
       SortChildPropertyLast.newInstance,
     ],
+    LintNames.sort_constructors_first: [
+      SortConstructorFirst.newInstance,
+    ],
+    LintNames.sort_unnamed_constructors_first: [
+      SortUnnamedConstructorFirst.newInstance,
+    ],
     LintNames.type_annotate_public_apis: [
       AddTypeAnnotation.newInstanceBulkFixable,
     ],
@@ -594,6 +621,9 @@
     LintNames.unnecessary_lambdas: [
       ReplaceWithTearOff.newInstance,
     ],
+    LintNames.unnecessary_late: [
+      RemoveUnnecessaryLate.newInstance,
+    ],
     LintNames.unnecessary_new: [
       RemoveUnnecessaryNew.newInstance,
     ],
@@ -630,6 +660,9 @@
     LintNames.use_key_in_widget_constructors: [
       AddKeyToConstructors.newInstance,
     ],
+    LintNames.use_raw_strings: [
+      ConvertToRawString.newInstance,
+    ],
     LintNames.use_rethrow_when_possible: [
       UseRethrow.newInstance,
     ],
@@ -662,12 +695,7 @@
       DataDriven.newInstance,
       ImportLibrary.forType,
     ],
-    CompileTimeErrorCode
-        .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT: [
-      AddSuperConstructorInvocation.newInstance,
-    ],
-    CompileTimeErrorCode
-        .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS: [
+    CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS: [
       AddSuperConstructorInvocation.newInstance,
     ],
     CompileTimeErrorCode.INVALID_ANNOTATION: [
diff --git a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
index da822b8..93de681 100644
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
@@ -181,7 +181,7 @@
     name = expression.methodName.name;
   } else if (expression is InstanceCreationExpression) {
     var constructorName = expression.constructorName;
-    var namedType = constructorName.type2;
+    var namedType = constructorName.type;
     var typeNameIdentifier = namedType.name;
     // new ClassName()
     if (typeNameIdentifier is SimpleIdentifier) {
diff --git a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
index e4438f2..f3abafa 100644
--- a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
@@ -69,7 +69,7 @@
 
   /// Organize all [Directive]s.
   void _organizeDirectives() {
-    var lineInfo = unit.lineInfo ?? LineInfo.fromContent(code);
+    var lineInfo = unit.lineInfo;
     var hasLibraryDirective = false;
     var directives = <_DirectiveInfo>[];
     // Track the end offset of any library-level comment/annotations that should
diff --git a/pkg/analysis_server/lib/src/services/correction/sort_members.dart b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
index d257984..7fdb383 100644
--- a/pkg/analysis_server/lib/src/services/correction/sort_members.dart
+++ b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
@@ -95,6 +95,8 @@
     for (var unitMember in unit.declarations) {
       if (unitMember is ClassOrMixinDeclaration) {
         _sortClassMembers(unitMember.members);
+      } else if (unitMember is EnumDeclaration) {
+        _sortClassMembers(unitMember.members);
       } else if (unitMember is ExtensionDeclaration) {
         _sortClassMembers(unitMember.members);
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 9066429..bdb7b99 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -29,6 +29,7 @@
     show SourceChange, SourceEdit;
 import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
+import 'package:collection/collection.dart';
 import 'package:path/path.dart' as path;
 
 /// Adds edits to the given [change] that ensure that all the [libraries] are
@@ -160,6 +161,14 @@
   return collector.references;
 }
 
+/// Return references to the [element] inside the [root] node.
+List<SimpleIdentifier> findPrefixElementReferences(
+    AstNode root, PrefixElement element) {
+  var collector = _ElementReferenceCollector(element);
+  root.accept(collector);
+  return collector.references;
+}
+
 /// TODO(scheglov) replace with nodes once there will be
 /// [CompilationUnit.getComments].
 ///
@@ -240,6 +249,9 @@
     if (node is CompilationUnit) {
       return member;
     }
+    if (node is EnumDeclaration) {
+      return member;
+    }
     member = node;
   }
   return null;
@@ -322,7 +334,7 @@
 /// Computes the best URI to import [what] into [from].
 String getLibrarySourceUri(
     path.Context pathContext, LibraryElement from, Uri what) {
-  if (what.scheme == 'file') {
+  if (what.isScheme('file')) {
     var fromFolder = pathContext.dirname(from.source.fullName);
     var relativeFile = pathContext.relative(what.path, from: fromFolder);
     return pathContext.split(relativeFile).join('/');
@@ -788,7 +800,7 @@
     // end
     var endOffset = sourceRange.end;
     var afterEndLineOffset = endOffset;
-    var lineInfo = unit.lineInfo!;
+    var lineInfo = unit.lineInfo;
     var lineStart = lineInfo
         .getOffsetOfLine(lineInfo.getLocation(startLineOffset).lineNumber - 1);
     if (lineStart == startLineOffset) {
@@ -982,6 +994,39 @@
     return ClassMemberLocation(prefix, offset, suffix);
   }
 
+  ClassMemberLocation? prepareEnumNewConstructorLocation(
+    EnumDeclaration enumDeclaration,
+  ) {
+    var indent = getIndent(1);
+
+    var targetMember = enumDeclaration.members
+        .where((e) => e is FieldDeclaration || e is ConstructorDeclaration)
+        .lastOrNull;
+    if (targetMember != null) {
+      return ClassMemberLocation(
+        endOfLine + endOfLine + indent,
+        targetMember.end,
+        '',
+      );
+    }
+
+    var semicolon = enumDeclaration.semicolon;
+    if (semicolon != null) {
+      return ClassMemberLocation(
+        endOfLine + endOfLine + indent,
+        semicolon.end,
+        '',
+      );
+    }
+
+    var lastConstant = enumDeclaration.constants.last;
+    return ClassMemberLocation(
+      ';' + endOfLine + endOfLine + indent,
+      lastConstant.end,
+      '',
+    );
+  }
+
   ClassMemberLocation? prepareNewClassMemberLocation(
       CompilationUnitMember declaration,
       bool Function(ClassMember existingMember) shouldSkip) {
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 ee34219..d6832cf 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -295,15 +295,15 @@
       // ClassDeclarations) and super.visitClassTypeAlias is not sufficient.
       //
       _handleRefEdge(
-        node.superclass2.name.staticElement,
+        node.superclass.name.staticElement,
         const <String>[schema.REF_EDGE],
-        syntacticEntity: node.superclass2,
+        syntacticEntity: node.superclass,
       );
       // TODO(jwren) refactor the following lines into a method that can be used
       // by visitClassDeclaration()
       // extends
       var recordSupertypeVName = _vNameFromElement(
-          node.superclass2.name.staticElement, schema.RECORD_KIND);
+          node.superclass.name.staticElement, schema.RECORD_KIND);
       addEdge(_enclosingClassVName!, schema.EXTENDS_EDGE, recordSupertypeVName);
 
       // implements
@@ -659,7 +659,7 @@
       //   assert (element.enclosingElement != null);
     }
     // visit children
-    _safelyVisitList(constructorName.type2.typeArguments?.arguments);
+    _safelyVisitList(constructorName.type.typeArguments?.arguments);
     _safelyVisit(node.argumentList);
   }
 
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 90e9fbe..472ddf8 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -9,6 +9,7 @@
   static const String always_require_non_null_named_parameters =
       'always_require_non_null_named_parameters';
   static const String always_specify_types = 'always_specify_types';
+  static const String always_use_package_imports = 'always_use_package_imports';
   static const String annotate_overrides = 'annotate_overrides';
   static const String avoid_annotating_with_dynamic =
       'avoid_annotating_with_dynamic';
@@ -42,6 +43,7 @@
       'avoid_unused_constructor_parameters';
   static const String avoid_unnecessary_containers =
       'avoid_unnecessary_containers';
+  static const String avoid_void_async = 'avoid_void_async';
   static const String await_only_futures = 'await_only_futures';
   static const String curly_braces_in_flow_control_structures =
       'curly_braces_in_flow_control_structures';
@@ -57,8 +59,14 @@
   static const String leading_newlines_in_multiline_strings =
       'leading_newlines_in_multiline_strings';
   static const String no_duplicate_case_values = 'no_duplicate_case_values';
+  static const String no_leading_underscores_for_library_prefixes =
+      'no_leading_underscores_for_library_prefixes';
+  static const String no_leading_underscores_for_local_identifiers =
+      'no_leading_underscores_for_local_identifiers';
   static const String non_constant_identifier_names =
       'non_constant_identifier_names';
+  static const String null_check_on_nullable_type_parameter =
+      'null_check_on_nullable_type_parameter';
   static const String null_closures = 'null_closures';
   static const String omit_local_variable_types = 'omit_local_variable_types';
   static const String prefer_adjacent_string_concatenation =
@@ -112,6 +120,8 @@
   static const String slash_for_doc_comments = 'slash_for_doc_comments';
   static const String sort_child_properties_last = 'sort_child_properties_last';
   static const String sort_constructors_first = 'sort_constructors_first';
+  static const String sort_unnamed_constructors_first =
+      'sort_unnamed_constructors_first';
   static const String type_annotate_public_apis = 'type_annotate_public_apis';
   static const String type_init_formals = 'type_init_formals';
   static const String unawaited_futures = 'unawaited_futures';
@@ -124,6 +134,7 @@
   static const String unnecessary_getters_setters =
       'unnecessary_getters_setters';
   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_in_if_null_operators =
       'unnecessary_null_in_if_null_operators';
@@ -142,5 +153,6 @@
       'use_function_type_syntax_for_parameters';
   static const String use_key_in_widget_constructors =
       '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';
 }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart b/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
index 565b9a8..5aaf8ad 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
@@ -52,7 +52,9 @@
     }
     // method
     var field = element.variable;
-    if (field is FieldElement && field.enclosingElement is ClassElement) {
+    if (field is FieldElement &&
+        (field.enclosingElement is ClassElement ||
+            field.enclosingElement is ExtensionElement)) {
       var elements = await getHierarchyMembers(searchEngine, field);
       await Future.forEach(elements, (ClassMemberElement member) async {
         if (member is FieldElement) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index 163572e..b33e29a 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -435,8 +435,13 @@
       return validateCreateFunction(searchEngine, libraryElement, name);
     }
     // method of class
+    ClassElement? classElement;
     if (parent is ClassDeclaration) {
-      var classElement = parent.declaredElement!;
+      classElement = parent.declaredElement!;
+    } else if (parent is EnumDeclaration) {
+      classElement = parent.declaredElement!;
+    }
+    if (classElement != null) {
       return validateCreateMethod(searchEngine,
           AnalysisSessionHelper(resolveResult.session), classElement, name);
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index 1f66fe6..8a99365 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -161,9 +161,10 @@
   {
     var enclosingClassElement = getEnclosingClassElement(node);
     if (enclosingClassElement != null) {
-      var elements = <ClassElement>{};
-      elements.add(enclosingClassElement);
-      elements.addAll(getSuperClasses(enclosingClassElement));
+      var elements = [
+        ...enclosingClassElement.allSupertypes.map((e) => e.element),
+        enclosingClassElement,
+      ];
       for (var classElement in elements) {
         var classMembers = getChildren(classElement);
         for (var classMemberElement in classMembers) {
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 f3cae42..caa3706 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring_internal.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/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
@@ -22,16 +23,16 @@
   final ResourceProvider resourceProvider;
   final pathos.Context pathContext;
   final RefactoringWorkspace refactoringWorkspace;
-  final ResolvedUnitResult resolvedUnit;
   late AnalysisDriver driver;
+  late AnalysisSession _session;
 
   late String oldFile;
   late String newFile;
 
   final packagePrefixedStringPattern = RegExp(r'''^r?['"]+package:''');
 
-  MoveFileRefactoringImpl(this.resourceProvider, this.refactoringWorkspace,
-      this.resolvedUnit, this.oldFile)
+  MoveFileRefactoringImpl(
+      this.resourceProvider, this.refactoringWorkspace, this.oldFile)
       : pathContext = resourceProvider.pathContext;
 
   @override
@@ -54,7 +55,8 @@
     }
 
     driver = drivers.first;
-    if (!driver.resourceProvider.getFile(oldFile).exists) {
+    _session = driver.currentSession;
+    if (!resourceProvider.getResource(oldFile).exists) {
       return RefactoringStatus.fatal('$oldFile does not exist.');
     }
 
@@ -68,24 +70,53 @@
 
   @override
   Future<SourceChange> createChange() async {
-    var changeBuilder = ChangeBuilder(session: resolvedUnit.session);
+    var changeBuilder = ChangeBuilder(session: _session);
+
+    final resource = resourceProvider.getResource(oldFile);
+
+    try {
+      await _appendChangesForResource(changeBuilder, resource, newFile);
+    } on InconsistentAnalysisException {
+      // If an InconsistentAnalysisException occurs, it's likely the user
+      // modified the source and is no longer interested in the results.
+      return SourceChange('Refactor cancelled by file modifications');
+    }
+
+    // If cancellation was requested the results may be incomplete so return
+    // a new empty change instead of a partial one with a descriptive name
+    // so it's clear from any logs that cancellation was processed.
+    if (isCancellationRequested) {
+      return SourceChange('Refactor cancelled');
+    }
+
+    return changeBuilder.sourceChange;
+  }
+
+  Future<void> _appendChangeForFile(
+      ChangeBuilder changeBuilder, File file, String newPath) async {
+    var oldPath = file.path;
+    var oldDir = pathContext.dirname(oldPath);
+    var newDir = pathContext.dirname(newPath);
+
+    final resolvedUnit = await _session.getResolvedUnit(file.path);
+    if (resolvedUnit is! ResolvedUnitResult) {
+      return;
+    }
+
     var element = resolvedUnit.unit.declaredElement;
     if (element == null) {
-      return changeBuilder.sourceChange;
+      return;
     }
 
     var libraryElement = element.library;
 
-    final oldDir = pathContext.dirname(oldFile);
-    final newDir = pathContext.dirname(newFile);
-
     // 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);
       if (libraryResult is! ResolvedLibraryResult) {
-        return changeBuilder.sourceChange;
+        return;
       }
       var definingUnitResult = libraryResult.units.first;
       for (var result in libraryResult.units) {
@@ -99,9 +130,7 @@
             await changeBuilder.addDartFileEdit(
                 result.unit.declaredElement!.source.fullName, (builder) {
               partOfs.forEach((uri) {
-                var newLocation =
-                    pathContext.join(newDir, pathos.basename(newFile));
-                var newUri = _getRelativeUri(newLocation, oldDir);
+                var newUri = _getRelativeUri(newPath, oldDir);
                 builder.addSimpleReplacement(
                     SourceRange(uri.offset, uri.length), "'$newUri'");
               });
@@ -145,27 +174,41 @@
     var references = getSourceReferences(matches);
     for (var reference in references) {
       await changeBuilder.addDartFileEdit(reference.file, (builder) {
-        var newUri = _computeNewUri(reference);
+        var newUri = _computeNewUri(reference, newPath);
         builder.addSimpleReplacement(reference.range, "'$newUri'");
       });
     }
-
-    return changeBuilder.sourceChange;
   }
 
-  /// Computes the URI to use to reference [newFile] from [reference].
-  String _computeNewUri(SourceReference reference) {
+  Future<void> _appendChangesForResource(
+      ChangeBuilder changeBuilder, Resource resource, String newPath) async {
+    if (isCancellationRequested) {
+      return;
+    }
+
+    if (resource is File) {
+      await _appendChangeForFile(changeBuilder, resource, newPath);
+    } else if (resource is Folder) {
+      for (final child in resource.getChildren()) {
+        await _appendChangesForResource(changeBuilder, child,
+            pathContext.join(newPath, pathContext.basename(child.path)));
+      }
+    }
+  }
+
+  /// Computes the URI to use to reference [newPath] from [reference].
+  String _computeNewUri(SourceReference reference, String newPath) {
     var refDir = pathContext.dirname(reference.file);
     // Try to keep package: URI
     if (_isPackageReference(reference)) {
-      var restoredUri = driver.sourceFactory.pathToUri(newFile);
+      var restoredUri = driver.sourceFactory.pathToUri(newPath);
       // If the new URI is not a package: URI, fall back to computing a relative
       // URI below.
       if (restoredUri?.isScheme('package') ?? false) {
         return restoredUri.toString();
       }
     }
-    return _getRelativeUri(newFile, refDir);
+    return _getRelativeUri(newPath, refDir);
   }
 
   String _getRelativeUri(String path, String from) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index 05e0eb3..efe3880 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -20,6 +20,7 @@
 import 'package:analysis_server/src/services/refactoring/rename_local.dart';
 import 'package:analysis_server/src/services/refactoring/rename_unit_member.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -248,16 +249,12 @@
   bool isAvailable();
 }
 
-/// [Refactoring] to move/rename a file.
+/// [Refactoring] to move/rename a file or folder.
 abstract class MoveFileRefactoring implements Refactoring {
   /// Returns a new [MoveFileRefactoring] instance.
-  factory MoveFileRefactoring(
-      ResourceProvider resourceProvider,
-      RefactoringWorkspace workspace,
-      ResolvedUnitResult resolveResult,
-      String oldFilePath) {
-    return MoveFileRefactoringImpl(
-        resourceProvider, workspace, resolveResult, oldFilePath);
+  factory MoveFileRefactoring(ResourceProvider resourceProvider,
+      RefactoringWorkspace workspace, String oldFilePath) {
+    return MoveFileRefactoringImpl(resourceProvider, workspace, oldFilePath);
   }
 
   /// The new file path to which the given file is being moved.
@@ -266,6 +263,8 @@
 
 /// Abstract interface for all refactorings.
 abstract class Refactoring {
+  set cancellationToken(CancellationToken token);
+
   /// The ids of source edits that are not known to be valid.
   ///
   /// An edit is not known to be valid if there was insufficient type
@@ -418,7 +417,7 @@
     // Rename the class when on `new` in an instance creation.
     if (node is InstanceCreationExpression) {
       var creation = node;
-      var typeIdentifier = creation.constructorName.type2.name;
+      var typeIdentifier = creation.constructorName.type.name;
       element = typeIdentifier.staticElement;
       offset = typeIdentifier.offset;
       length = typeIdentifier.length;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
index b31755a..d969475 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
@@ -8,6 +8,7 @@
 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/element/element.dart';
 import 'package:analyzer/src/generated/source.dart';
 
@@ -37,6 +38,11 @@
   @override
   final List<String> potentialEditIds = <String>[];
 
+  CancellationToken? cancellationToken;
+
+  bool get isCancellationRequested =>
+      cancellationToken?.isCancellationRequested ?? false;
+
   @override
   Future<RefactoringStatus> checkAllConditions() async {
     var result = RefactoringStatus();
@@ -72,6 +78,9 @@
   bool get isConstructorTearOff =>
       _match.kind == MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF;
 
+  bool get isInvocationByEnumConstantWithoutArguments =>
+      _match.kind == MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
+
   bool get isResolved => _match.isResolved;
 
   SourceRange get range => _match.sourceRange;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index 91654f8..8065f1f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -13,6 +13,7 @@
 import 'package:analysis_server/src/services/refactoring/visible_ranges_computer.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analysis_server/src/utilities/strings.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -149,20 +150,23 @@
     // check if there is a member with "newName" in the same ClassElement
     for (var newNameMember in getChildren(elementClass, name)) {
       result.addError(
-          format(
-              "Class '{0}' already declares {1} with name '{2}'.",
-              elementClass.displayName,
-              getElementKindName(newNameMember),
-              name),
-          newLocation_fromElement(newNameMember));
+        format(
+          "{0} '{1}' already declares {2} with name '{3}'.",
+          capitalize(elementClass.kind.displayName),
+          elementClass.displayName,
+          getElementKindName(newNameMember),
+          name,
+        ),
+        newLocation_fromElement(newNameMember),
+      );
     }
   }
 
   Future<void> _checkHierarchy({
     required bool isRename,
-    required Set<ClassElement> superClasses,
     required Set<ClassElement> subClasses,
   }) async {
+    var superClasses = elementClass.allSupertypes.map((e) => e.element).toSet();
     // check shadowing in the hierarchy
     var declarations = await searchEngine.searchMemberDeclarations(name);
     for (var declaration in declarations) {
@@ -212,19 +216,18 @@
   Future<RefactoringStatus> validate() async {
     _checkClassAlreadyDeclares();
     // do chained computations
-    var superClasses = getSuperClasses(elementClass);
     var subClasses = await searchEngine.searchAllSubtypes(elementClass);
     // check shadowing of class names
     if (elementClass.name == name) {
       result.addError(
-          format("Created {0} has the same name as the declaring class '{1}'.",
-              elementKind.displayName, name),
-          newLocation_fromElement(elementClass));
+        'Created ${elementKind.displayName} has the same name as the '
+        "declaring ${elementClass.kind.displayName} '$name'.",
+        newLocation_fromElement(elementClass),
+      );
     }
     // check shadowing in the hierarchy
     await _checkHierarchy(
       isRename: false,
-      superClasses: superClasses,
       subClasses: subClasses,
     );
     // done
@@ -272,7 +275,6 @@
   Future<RefactoringStatus> validate() async {
     _checkClassAlreadyDeclares();
     // do chained computations
-    var superClasses = getSuperClasses(elementClass);
     await _prepareReferences();
     var subClasses = await searchEngine.searchAllSubtypes(elementClass);
     // check shadowing of class names
@@ -280,11 +282,8 @@
       var enclosingElement = element.enclosingElement;
       if (enclosingElement is ClassElement && enclosingElement.name == name) {
         result.addError(
-          format(
-            "Renamed {0} has the same name as the declaring class '{1}'.",
-            elementKind.displayName,
-            name,
-          ),
+          'Renamed ${elementKind.displayName} has the same name as the '
+          "declaring ${enclosingElement.kind.displayName} '$name'.",
           newLocation_fromElement(element),
         );
       }
@@ -306,7 +305,6 @@
     // check shadowing in the hierarchy
     await _checkHierarchy(
       isRename: true,
-      superClasses: superClasses,
       subClasses: subClasses,
     );
     // visibility
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
index dc58d49..5e7e7bc 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
@@ -10,8 +10,6 @@
 import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
 import 'package:analysis_server/src/services/refactoring/rename.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
-import 'package:analysis_server/src/services/search/search_engine.dart';
-import 'package:analysis_server/src/services/search/search_engine_internal.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -55,12 +53,6 @@
     // prepare references
     var matches = await searchEngine.searchReferences(element);
     var references = getSourceReferences(matches);
-    // append declaration
-    if (element.isSynthetic) {
-      await _replaceSynthetic();
-    } else {
-      references.add(_createDeclarationReference());
-    }
     // update references
     for (var reference in references) {
       String replacement;
@@ -69,8 +61,24 @@
       } else {
         replacement = reference.isConstructorTearOff ? '.new' : '';
       }
+      if (reference.isInvocationByEnumConstantWithoutArguments) {
+        replacement += '()';
+      }
       reference.addEdit(change, replacement);
     }
+    // Update the declaration.
+    if (element.isSynthetic) {
+      await _replaceSynthetic();
+    } else {
+      doSourceChange_addSourceEdit(
+        change,
+        element.source,
+        newSourceEdit_range(
+          _declarationNameRange(),
+          newName.isNotEmpty ? '.$newName' : '',
+        ),
+      );
+    }
   }
 
   void _analyzePossibleConflicts(RefactoringStatus result) {
@@ -88,25 +96,14 @@
     }
   }
 
-  SourceReference _createDeclarationReference() {
-    SourceRange sourceRange;
+  SourceRange _declarationNameRange() {
     var offset = element.periodOffset;
     var nameEnd = element.nameEnd!;
     if (offset != null) {
-      sourceRange = range.startOffsetEndOffset(offset, nameEnd);
+      return range.startOffsetEndOffset(offset, nameEnd);
     } else {
-      sourceRange = SourceRange(nameEnd, 0);
+      return SourceRange(nameEnd, 0);
     }
-    return SourceReference(SearchMatchImpl(
-        element.source.fullName,
-        element.library.source,
-        element.source,
-        element.library,
-        element,
-        true,
-        true,
-        MatchKind.DECLARATION,
-        sourceRange));
   }
 
   Future<void> _replaceSynthetic() async {
@@ -118,32 +115,46 @@
       return;
     }
 
-    var classNode = result.node;
-    if (classNode is! ClassDeclaration) {
-      return;
-    }
-
     var resolvedUnit = result.resolvedUnit;
     if (resolvedUnit == null) {
       return;
     }
 
-    var utils = CorrectionUtils(resolvedUnit);
-    var location =
-        utils.prepareNewConstructorLocation(resolvedUnit.session, classNode);
-    if (location == null) {
-      return;
-    }
+    var node = result.node;
+    if (node is ClassDeclaration) {
+      var utils = CorrectionUtils(resolvedUnit);
+      var location = utils.prepareNewConstructorLocation(session, node);
+      if (location == null) {
+        return;
+      }
 
-    var header = '${classElement.name}.$newName();';
-    doSourceChange_addElementEdit(
-      change,
-      classElement,
-      SourceEdit(
-        location.offset,
-        0,
-        location.prefix + header + location.suffix,
-      ),
-    );
+      var header = '${classElement.name}.$newName();';
+      doSourceChange_addElementEdit(
+        change,
+        classElement,
+        SourceEdit(
+          location.offset,
+          0,
+          location.prefix + header + location.suffix,
+        ),
+      );
+    } else if (node is EnumDeclaration) {
+      var utils = CorrectionUtils(resolvedUnit);
+      var location = utils.prepareEnumNewConstructorLocation(node);
+      if (location == null) {
+        return;
+      }
+
+      var header = 'const ${classElement.name}.$newName();';
+      doSourceChange_addElementEdit(
+        change,
+        classElement,
+        SourceEdit(
+          location.offset,
+          0,
+          location.prefix + header + location.suffix,
+        ),
+      );
+    }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 05d4116..eda9ad4 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -95,8 +95,10 @@
   // method, field, etc
   if (enclosingElement is ClassElement) {
     var name = member.displayName;
-    var searchClasses = getSuperClasses(enclosingElement);
-    searchClasses.add(enclosingElement);
+    var searchClasses = [
+      ...enclosingElement.allSupertypes.map((e) => e.element),
+      enclosingElement,
+    ];
     for (var superClass in searchClasses) {
       // ignore if super- class does not declare member
       if (getClassMembers(superClass, name).isEmpty) {
@@ -152,49 +154,17 @@
 ///
 /// Excludes: constructors and synthetic elements.
 List<Element> getMembers(ClassElement clazz) {
+  var classElements = [
+    ...clazz.allSupertypes.map((e) => e.element),
+    clazz,
+  ];
   var members = <Element>[];
-  members.addAll(getClassMembers(clazz));
-  var superClasses = getSuperClasses(clazz);
-  for (var superClass in superClasses) {
+  for (var superClass in classElements) {
     members.addAll(getClassMembers(superClass));
   }
   return members;
 }
 
-/// Returns a [Set] with all direct and indirect superclasses of [seed].
-Set<ClassElement> getSuperClasses(ClassElement seed) {
-  Set<ClassElement> result = HashSet<ClassElement>();
-  // prepare queue
-  var queue = <ClassElement>[];
-  queue.add(seed);
-  // process queue
-  while (queue.isNotEmpty) {
-    var current = queue.removeLast();
-    // add if not checked already
-    if (!result.add(current)) {
-      continue;
-    }
-    // append supertype
-    {
-      var superType = current.supertype;
-      if (superType != null) {
-        queue.add(superType.element);
-      }
-    }
-    // append superclass constraints
-    for (var interface in current.superclassConstraints) {
-      queue.add(interface.element);
-    }
-    // append interfaces
-    for (var interface in current.interfaces) {
-      queue.add(interface.element);
-    }
-  }
-  // we don't need "seed" itself
-  result.remove(seed);
-  return result;
-}
-
 /// If the given [element] is a synthetic [PropertyAccessorElement] returns
 /// its variable, otherwise returns [element].
 Element getSyntheticAccessorVariable(Element element) {
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 362216e..09df9a4 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -23,6 +23,11 @@
   /// A reference to an element in which it is being invoked.
   static const MatchKind INVOCATION = MatchKind('INVOCATION');
 
+  /// An invocation of an enum constructor from an enum constant without
+  /// arguments.
+  static const MatchKind INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS =
+      MatchKind('INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS');
+
   /// A reference to an element in which it is referenced.
   static const MatchKind REFERENCE = MatchKind('REFERENCE');
 
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index 059c23e98..2eda0d4 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -242,6 +242,10 @@
     if (kind == SearchResultKind.INVOCATION) {
       return MatchKind.INVOCATION;
     }
+    if (kind ==
+        SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
+      return MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
+    }
     if (kind == SearchResultKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF) {
       return MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF;
     }
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
new file mode 100644
index 0000000..1a6a9ec
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_snippet_producers.dart
@@ -0,0 +1,472 @@
+// 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/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 {
+  final flutter = Flutter.instance;
+  final AnalysisSessionHelper sessionHelper;
+
+  late ClassElement? classWidget;
+
+  FlutterSnippetProducer(DartSnippetRequest request)
+      : sessionHelper = AnalysisSessionHelper(request.analysisSession),
+        super(request);
+
+  @override
+  @mustCallSuper
+  Future<bool> isValid() async {
+    if ((classWidget = await _getClass('Widget')) == null) {
+      return false;
+    }
+
+    return super.isValid();
+  }
+
+  Future<ClassElement?> _getClass(String name) =>
+      sessionHelper.getClass(flutter.widgetsUri, name);
+
+  DartType _getType(
+    ClassElement classElement, [
+    NullabilitySuffix nullabilitySuffix = NullabilitySuffix.none,
+  ]) =>
+      classElement.instantiate(
+        typeArguments: const [],
+        nullabilitySuffix: nullabilitySuffix,
+      );
+}
+
+/// Produces a [Snippet] that creates a Flutter StatefulWidget and related State
+/// class.
+class FlutterStatefulWidgetSnippetProducer extends FlutterSnippetProducer {
+  static const prefix = 'stful';
+  static const label = 'Flutter Stateful Widget';
+
+  late ClassElement? classStatefulWidget;
+  late ClassElement? classState;
+  late ClassElement? classBuildContext;
+  late ClassElement? classKey;
+
+  FlutterStatefulWidgetSnippetProducer(DartSnippetRequest request)
+      : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+
+    // Checked by isValid().
+    final classStatefulWidget = this.classStatefulWidget!;
+    final classState = this.classState!;
+    final classWidget = this.classWidget!;
+    final classBuildContext = this.classBuildContext!;
+    final classKey = this.classKey!;
+
+    // Only include `?` for nulable types like Key? if in a null-safe library.
+    final nullableSuffix = request.unit.libraryElement.isNonNullableByDefault
+        ? NullabilitySuffix.question
+        : NullabilitySuffix.none;
+
+    final className = 'MyWidget';
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        // Write the StatefulWidget class
+        builder.writeClassDeclaration(
+          className,
+          nameGroupName: 'name',
+          superclass: _getType(classStatefulWidget),
+          membersWriter: () {
+            // Add the constructor.
+            builder.write('  ');
+            builder.writeConstructorDeclaration(
+              className,
+              classNameGroupName: 'name',
+              isConst: true,
+              parameterWriter: () {
+                builder.write('{');
+                builder.writeParameter(
+                  'key',
+                  type: _getType(classKey, nullableSuffix),
+                );
+                builder.write('}');
+              },
+              initializerWriter: () => builder.write('super(key: key)'),
+            );
+            builder.writeln();
+            builder.writeln();
+
+            // Add the createState method.
+            builder.writeln('  @override');
+            builder.write('  State<');
+            builder.addSimpleLinkedEdit('name', className);
+            builder.write('> createState() => _');
+            builder.addSimpleLinkedEdit('name', className);
+            builder.writeln('State();');
+          },
+        );
+        builder.writeln();
+        builder.writeln();
+
+        // Write the State class.
+        builder.write('class _');
+        builder.addSimpleLinkedEdit('name', className);
+        builder.write('State extends ');
+        builder.writeReference(classState);
+        builder.write('<');
+        builder.addSimpleLinkedEdit('name', className);
+        builder.writeln('> {');
+        {
+          // Add the build method.
+          builder.writeln('  @override');
+          builder.write('  ');
+          builder.writeFunctionDeclaration(
+            'build',
+            returnType: _getType(classWidget),
+            parameterWriter: () {
+              builder.writeParameter(
+                'context',
+                type: _getType(classBuildContext),
+              );
+            },
+            bodyWriter: () {
+              builder.writeln('{');
+              builder.write('    ');
+              builder.selectHere();
+              builder.writeln();
+              builder.writeln('  }');
+            },
+          );
+        }
+        builder.write('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a StatefulWidget',
+      builder.sourceChange,
+    );
+  }
+
+  @override
+  Future<bool> isValid() async {
+    if (!await super.isValid()) {
+      return false;
+    }
+
+    if ((classStatefulWidget = await _getClass('StatefulWidget')) == null ||
+        (classState = await _getClass('State')) == null ||
+        (classBuildContext = await _getClass('BuildContext')) == null ||
+        (classKey = await _getClass('Key')) == null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  static FlutterStatefulWidgetSnippetProducer newInstance(
+          DartSnippetRequest request) =>
+      FlutterStatefulWidgetSnippetProducer(request);
+}
+
+/// Produces a [Snippet] that creates a Flutter StatefulWidget with a
+/// AnimationController and related State class.
+class FlutterStatefulWidgetWithAnimationControllerSnippetProducer
+    extends FlutterSnippetProducer {
+  static const prefix = 'stanim';
+  static const label = 'Flutter Widget with AnimationController';
+
+  late ClassElement? classStatefulWidget;
+  late ClassElement? classState;
+  late ClassElement? classBuildContext;
+  late ClassElement? classKey;
+  late ClassElement? classAnimationController;
+  late ClassElement? classSingleTickerProviderStateMixin;
+
+  FlutterStatefulWidgetWithAnimationControllerSnippetProducer(
+      DartSnippetRequest request)
+      : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+
+    // Checked by isValid().
+    final classStatefulWidget = this.classStatefulWidget!;
+    final classState = this.classState!;
+    final classWidget = this.classWidget!;
+    final classBuildContext = this.classBuildContext!;
+    final classKey = this.classKey!;
+    final classAnimationController = this.classAnimationController!;
+    final classSingleTickerProviderStateMixin =
+        this.classSingleTickerProviderStateMixin!;
+
+    // Only include `?` for nulable types like Key? if in a null-safe library.
+    final nullableSuffix = request.unit.libraryElement.isNonNullableByDefault
+        ? NullabilitySuffix.question
+        : NullabilitySuffix.none;
+
+    final className = 'MyWidget';
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        // Write the StatefulWidget class
+        builder.writeClassDeclaration(
+          className,
+          nameGroupName: 'name',
+          superclass: _getType(classStatefulWidget),
+          membersWriter: () {
+            // Add the constructor.
+            builder.write('  ');
+            builder.writeConstructorDeclaration(
+              className,
+              classNameGroupName: 'name',
+              isConst: true,
+              parameterWriter: () {
+                builder.write('{');
+                builder.writeParameter(
+                  'key',
+                  type: _getType(classKey, nullableSuffix),
+                );
+                builder.write('}');
+              },
+              initializerWriter: () => builder.write('super(key: key)'),
+            );
+            builder.writeln();
+            builder.writeln();
+
+            // Add the createState method.
+            builder.writeln('  @override');
+            builder.write('  State<');
+            builder.addSimpleLinkedEdit('name', className);
+            builder.write('> createState() => _');
+            builder.addSimpleLinkedEdit('name', className);
+            builder.writeln('State();');
+          },
+        );
+        builder.writeln();
+        builder.writeln();
+
+        // Write the State class.
+        builder.write('class _');
+        builder.addSimpleLinkedEdit('name', className);
+        builder.write('State extends ');
+        builder.writeReference(classState);
+        builder.write('<');
+        builder.addSimpleLinkedEdit('name', className);
+        builder.writeln('>');
+        builder.write('    with ');
+        builder.writeReference(classSingleTickerProviderStateMixin);
+        builder.writeln(' {');
+        builder.write('  late ');
+        builder.writeReference(classAnimationController);
+        builder.writeln(' _controller;');
+        builder.writeln();
+        {
+          // Add the initState method.
+          builder.writeln('  @override');
+          builder.write('  ');
+          builder.writeFunctionDeclaration(
+            'initState',
+            returnType: VoidTypeImpl.instance,
+            bodyWriter: () {
+              builder.writeln('{');
+              builder.writeln('    super.initState();');
+              builder.write('    _controller = ');
+              builder.writeReference(classAnimationController);
+              builder.writeln('(vsync: this);');
+              builder.writeln('  }');
+            },
+          );
+        }
+        builder.writeln();
+        {
+          // Add the dispose method.
+          builder.writeln('  @override');
+          builder.write('  ');
+          builder.writeFunctionDeclaration(
+            'dispose',
+            returnType: VoidTypeImpl.instance,
+            bodyWriter: () {
+              builder.writeln('{');
+              builder.writeln('    super.dispose();');
+              builder.writeln('    _controller.dispose();');
+              builder.writeln('  }');
+            },
+          );
+        }
+        builder.writeln();
+        {
+          // Add the build method.
+          builder.writeln('  @override');
+          builder.write('  ');
+          builder.writeFunctionDeclaration(
+            'build',
+            returnType: _getType(classWidget),
+            parameterWriter: () {
+              builder.writeParameter(
+                'context',
+                type: _getType(classBuildContext),
+              );
+            },
+            bodyWriter: () {
+              builder.writeln('{');
+              builder.write('    ');
+              builder.selectHere();
+              builder.writeln();
+              builder.writeln('  }');
+            },
+          );
+        }
+        builder.write('}');
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a StatefulWidget with an AnimationController',
+      builder.sourceChange,
+    );
+  }
+
+  @override
+  Future<bool> isValid() async {
+    if (!await super.isValid()) {
+      return false;
+    }
+
+    if ((classStatefulWidget = await _getClass('StatefulWidget')) == null ||
+        (classState = await _getClass('State')) == null ||
+        (classBuildContext = await _getClass('BuildContext')) == null ||
+        (classKey = await _getClass('Key')) == null ||
+        (classAnimationController = await _getClass('AnimationController')) ==
+            null ||
+        (classSingleTickerProviderStateMixin =
+                await _getClass('SingleTickerProviderStateMixin')) ==
+            null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  static FlutterStatefulWidgetWithAnimationControllerSnippetProducer
+      newInstance(DartSnippetRequest request) =>
+          FlutterStatefulWidgetWithAnimationControllerSnippetProducer(request);
+}
+
+/// Produces a [Snippet] that creates a Flutter StatelessWidget.
+class FlutterStatelessWidgetSnippetProducer extends FlutterSnippetProducer {
+  static const prefix = 'stless';
+  static const label = 'Flutter Stateless Widget';
+
+  late ClassElement? classStatelessWidget;
+  late ClassElement? classBuildContext;
+  late ClassElement? classKey;
+
+  FlutterStatelessWidgetSnippetProducer(DartSnippetRequest request)
+      : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    final builder = ChangeBuilder(session: request.analysisSession);
+
+    // Checked by isValid().
+    final classStatelessWidget = this.classStatelessWidget!;
+    final classWidget = this.classWidget!;
+    final classBuildContext = this.classBuildContext!;
+    final classKey = this.classKey!;
+
+    // Only include `?` for nulable types like Key? if in a null-safe library.
+    final nullableSuffix = request.unit.libraryElement.isNonNullableByDefault
+        ? NullabilitySuffix.question
+        : NullabilitySuffix.none;
+
+    final className = 'MyWidget';
+    await builder.addDartFileEdit(request.filePath, (builder) {
+      builder.addReplacement(request.replacementRange, (builder) {
+        builder.writeClassDeclaration(
+          className,
+          nameGroupName: 'name',
+          superclass: _getType(classStatelessWidget),
+          membersWriter: () {
+            // Add the constructor.
+            builder.write('  ');
+            builder.writeConstructorDeclaration(
+              className,
+              classNameGroupName: 'name',
+              isConst: true,
+              parameterWriter: () {
+                builder.write('{');
+                builder.writeParameter(
+                  'key',
+                  type: _getType(classKey, nullableSuffix),
+                );
+                builder.write('}');
+              },
+              initializerWriter: () => builder.write('super(key: key)'),
+            );
+            builder.writeln();
+            builder.writeln();
+
+            // Add the build method.
+            builder.writeln('  @override');
+            builder.write('  ');
+            builder.writeFunctionDeclaration(
+              'build',
+              returnType: _getType(classWidget),
+              parameterWriter: () {
+                builder.writeParameter(
+                  'context',
+                  type: _getType(classBuildContext),
+                );
+              },
+              bodyWriter: () {
+                builder.writeln('{');
+                builder.write('    ');
+                builder.selectHere();
+                builder.writeln();
+                builder.writeln('  }');
+              },
+            );
+          },
+        );
+      });
+    });
+
+    return Snippet(
+      prefix,
+      label,
+      'Insert a StatelessWidget',
+      builder.sourceChange,
+    );
+  }
+
+  @override
+  Future<bool> isValid() async {
+    if (!await super.isValid()) {
+      return false;
+    }
+
+    if ((classStatelessWidget = await _getClass('StatelessWidget')) == null ||
+        (classBuildContext = await _getClass('BuildContext')) == null ||
+        (classKey = await _getClass('Key')) == null) {
+      return false;
+    }
+
+    return true;
+  }
+
+  static FlutterStatelessWidgetSnippetProducer newInstance(
+          DartSnippetRequest 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
new file mode 100644
index 0000000..34dc40b
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/snippet_manager.dart
@@ -0,0 +1,193 @@
+// 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/provisional/completion/completion_core.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';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
+
+typedef SnippetProducerGenerator = SnippetProducer Function(DartSnippetRequest);
+
+/// [DartSnippetManager] determines if a snippet request is Dart specific
+/// and forwards those requests to all Snippet Producers that return `true` from
+/// their `isValid()` method.
+class DartSnippetManager {
+  final producerGenerators =
+      const <SnippetContext, List<SnippetProducerGenerator>>{
+    SnippetContext.atTopLevel: [
+      FlutterStatefulWidgetSnippetProducer.newInstance,
+      FlutterStatefulWidgetWithAnimationControllerSnippetProducer.newInstance,
+      FlutterStatelessWidgetSnippetProducer.newInstance,
+    ]
+  };
+
+  Future<List<Snippet>> computeSnippets(
+    DartSnippetRequest request,
+  ) async {
+    var pathContext = request.resourceProvider.pathContext;
+    if (!file_paths.isDart(pathContext, request.filePath)) {
+      return const [];
+    }
+
+    try {
+      final snippets = <Snippet>[];
+      final generators = producerGenerators[request.context];
+      if (generators == null) {
+        return snippets;
+      }
+      for (final generator in generators) {
+        final producer = generator(request);
+        if (await producer.isValid()) {
+          snippets.add(await producer.compute());
+        }
+      }
+      return snippets;
+    } on InconsistentAnalysisException {
+      // The state of the code being analyzed has changed, so results are likely
+      // to be inconsistent. Just abort the operation.
+      throw AbortCompletion();
+    }
+  }
+}
+
+/// The information about a request for a list of snippets within a Dart file.
+class DartSnippetRequest {
+  /// The resolved unit for the file that snippets are being requested for.
+  final ResolvedUnitResult unit;
+
+  /// The path of the file snippets are being requested for.
+  final String filePath;
+
+  /// The offset within the source at which snippets are being
+  /// requested for.
+  final int offset;
+
+  /// The context in which the snippet request is being made.
+  late final SnippetContext context;
+
+  /// The source range that represents the region of text that should be
+  /// replaced if the snippet is selected.
+  late final SourceRange replacementRange;
+
+  DartSnippetRequest({
+    required this.unit,
+    required this.offset,
+  }) : filePath = unit.path {
+    final target = CompletionTarget.forOffset(unit.unit, offset);
+    context = _getContext(target);
+    replacementRange = target.computeReplacementRange(offset);
+  }
+
+  /// The analysis session that produced the elements of the request.
+  AnalysisSession get analysisSession => unit.session;
+
+  /// The resource provider associated with this request.
+  ResourceProvider get resourceProvider => analysisSession.resourceProvider;
+
+  static SnippetContext _getContext(CompletionTarget target) {
+    final entity = target.entity;
+    if (entity is Token) {
+      final tokenType = (entity.beforeSynthetic ?? entity).type;
+
+      if (tokenType == TokenType.MULTI_LINE_COMMENT ||
+          tokenType == TokenType.SINGLE_LINE_COMMENT) {
+        return SnippetContext.inComment;
+      }
+
+      if (tokenType == TokenType.STRING ||
+          tokenType == TokenType.STRING_INTERPOLATION_EXPRESSION ||
+          tokenType == TokenType.STRING_INTERPOLATION_IDENTIFIER) {
+        return SnippetContext.inString;
+      }
+    }
+
+    AstNode? node = target.containingNode;
+    while (node != null) {
+      if (node is Comment) {
+        return SnippetContext.inComment;
+      }
+
+      if (node is StringLiteral) {
+        return SnippetContext.inString;
+      }
+
+      if (node is Block) {
+        return SnippetContext.inBlock;
+      }
+
+      if (node is Statement || node is Expression || node is Annotation) {
+        return SnippetContext.inExpressionOrStatement;
+      }
+
+      if (node is BlockFunctionBody) {
+        return SnippetContext.inBlock;
+      }
+
+      if (node is ClassOrMixinDeclaration || node is ExtensionDeclaration) {
+        return SnippetContext.inClass;
+      }
+
+      node = node.parent;
+    }
+
+    return SnippetContext.atTopLevel;
+  }
+}
+
+class Snippet {
+  /// The text the user will type to use this snippet.
+  final String prefix;
+
+  /// The label/title of this snippet.
+  final String label;
+
+  /// A description of/documentation for the snippet.
+  final String? documentation;
+
+  /// The source changes to be made to insert this snippet.
+  final SourceChange change;
+
+  Snippet(
+    this.prefix,
+    this.label,
+    this.documentation,
+    this.change,
+  );
+}
+
+/// The context in which a snippet request was made.
+///
+/// This is used to filter the available snippets (for example preventing
+/// snippets that create classes showing up when inside an existing class or
+/// function body).
+enum SnippetContext {
+  atTopLevel,
+  inClass,
+  inBlock,
+  inExpressionOrStatement,
+  inComment,
+  inString,
+}
+
+abstract class SnippetProducer {
+  final DartSnippetRequest request;
+
+  SnippetProducer(this.request);
+
+  Future<Snippet> compute();
+
+  Future<bool> isValid() async {
+    // File edit builders will not produce edits for files outside of the
+    // analysis roots so we should not try to produce any snippets.
+    final analysisContext = request.analysisSession.analysisContext;
+    return analysisContext.contextRoot.isAnalyzed(request.filePath);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart b/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
index 95c5384..eedc3c7 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
@@ -3,6 +3,7 @@
 // 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/utilities/index_range.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/source/source_range.dart';
@@ -67,6 +68,30 @@
     }
   }
 
+  /// Return a list of the ranges that cover all of the elements in the [list]
+  /// whose index is in the list of [indexes].
+  List<SourceRange> nodesInList<T extends AstNode>(
+      NodeList<T> list, List<int> indexes) {
+    var ranges = <SourceRange>[];
+    var indexRanges = IndexRange.contiguousSubRanges(indexes);
+    if (indexRanges.length == 1) {
+      var indexRange = indexRanges[0];
+      if (indexRange.lower == 0 && indexRange.upper == list.length - 1) {
+        ranges.add(startEnd(list[indexRange.lower], list[indexRange.upper]));
+        return ranges;
+      }
+    }
+    for (var indexRange in indexRanges) {
+      if (indexRange.lower == 0) {
+        ranges.add(
+            startStart(list[indexRange.lower], list[indexRange.upper + 1]));
+      } else {
+        ranges.add(endEnd(list[indexRange.lower - 1], list[indexRange.upper]));
+      }
+    }
+    return ranges;
+  }
+
   /// Return a source range that covers the given [node] with any leading and
   /// trailing comments.
   ///
diff --git a/pkg/analysis_server/lib/src/utilities/index_range.dart b/pkg/analysis_server/lib/src/utilities/index_range.dart
new file mode 100644
index 0000000..648ec02
--- /dev/null
+++ b/pkg/analysis_server/lib/src/utilities/index_range.dart
@@ -0,0 +1,42 @@
+// 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 range of indexes within a list.
+class IndexRange {
+  /// The index of the first element in the range.
+  final int lower;
+
+  /// The index of the last element in the range. This will be the same as the
+  /// [lower] if there is a single element in the range.
+  final int upper;
+
+  /// Initialize a newly created range.
+  IndexRange(this.lower, this.upper);
+
+  /// Return the number of indices in this range.
+  int get count => upper - lower + 1;
+
+  @override
+  String toString() => '[$lower..$upper]';
+
+  static List<IndexRange> contiguousSubRanges(List<int> indexes) {
+    var ranges = <IndexRange>[];
+    if (indexes.isEmpty) {
+      return ranges;
+    }
+    var lower = indexes[0];
+    var previous = lower;
+    for (var index = 1; index < indexes.length; index++) {
+      var current = indexes[index];
+      if (current == previous + 1) {
+        previous = current;
+      } else {
+        ranges.add(IndexRange(lower, previous));
+        lower = previous = current;
+      }
+    }
+    ranges.add(IndexRange(lower, previous));
+    return ranges;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/utilities/mocks.dart b/pkg/analysis_server/lib/src/utilities/mocks.dart
index bef5102..6ad7371 100644
--- a/pkg/analysis_server/lib/src/utilities/mocks.dart
+++ b/pkg/analysis_server/lib/src/utilities/mocks.dart
@@ -23,7 +23,7 @@
   StreamController<Response> responseController =
       StreamController<Response>.broadcast();
   StreamController<Notification> notificationController =
-      StreamController<Notification>(sync: true);
+      StreamController<Notification>.broadcast(sync: true);
   Completer<Response>? errorCompleter;
 
   List<Response> responsesReceived = [];
@@ -35,6 +35,11 @@
 
   MockServerChannel();
 
+  /// Return the broadcast stream of notifications.
+  Stream<Notification> get notifications {
+    return notificationController.stream;
+  }
+
   @override
   Stream<Request> get requests => requestController.stream;
 
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 39518e8..5f62d61 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -13,7 +13,6 @@
   analyzer_plugin:
     path: ../analyzer_plugin
   args: any
-  cli_util: any
   collection: any
   convert: any
   crypto: any
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index c86b091..59847fe 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -48,7 +48,7 @@
   /// Return a list of the experiments that are to be enabled for tests in this
   /// class, an empty list if there are no experiments that should be enabled.
   List<String> get experiments => [
-        EnableString.constructor_tearoffs,
+        EnableString.enhanced_enums,
         EnableString.named_arguments_anywhere,
         EnableString.super_parameters,
       ];
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index 6d19ce9..440b1b4 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -67,38 +67,7 @@
     await createProject();
   }
 
-  Future<void> test_class_declaration() async {
-    addTestFile('''
-class A<E> {}
-class I1<K, V> {}
-class I2<E> {}
-class M1 {}
-class M2<E> {}
-class B<T> extends A<T> with M1, M2<int> implements I1<int, String>, I2 {}
-''');
-    var hover = await prepareHover('B<T>');
-    expect(hover.containingClassDescription, null);
-    expect(
-        hover.elementDescription,
-        'class B<T> extends A<T> with M1, M2<int> '
-        'implements I1<int, String>, I2<dynamic>');
-    expect(hover.staticType, isNull);
-    expect(hover.propagatedType, isNull);
-  }
-
-  Future<void> test_class_declaration_abstract() async {
-    addTestFile('''
-class A {}
-abstract class B extends A {}
-''');
-    var hover = await prepareHover('B extends');
-    expect(hover.containingClassDescription, null);
-    expect(hover.elementDescription, 'abstract class B extends A');
-    expect(hover.staticType, isNull);
-    expect(hover.propagatedType, isNull);
-  }
-
-  Future<void> test_constructor_named() async {
+  Future<void> test_class_constructor_named() async {
     addTestFile('''
 library my.library;
 class A {
@@ -129,7 +98,7 @@
     }
   }
 
-  Future<void> test_constructor_noKeyword_const() async {
+  Future<void> test_class_constructor_noKeyword_const() async {
     addTestFile('''
 library my.library;
 class A {
@@ -156,7 +125,7 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_constructor_noKeyword_new() async {
+  Future<void> test_class_constructor_noKeyword_new() async {
     addTestFile('''
 library my.library;
 class A {}
@@ -181,7 +150,7 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_constructor_synthetic() async {
+  Future<void> test_class_constructor_synthetic() async {
     addTestFile('''
 library my.library;
 class A {
@@ -207,7 +176,7 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_constructor_synthetic_withTypeArgument() async {
+  Future<void> test_class_constructor_synthetic_withTypeArgument() async {
     addTestFile('''
 library my.library;
 class A<T> {}
@@ -249,7 +218,7 @@
     }
   }
 
-  Future<void> test_constructorReference_named() async {
+  Future<void> test_class_constructorReference_named() async {
     addTestFile('''
 class A<T> {
   /// doc aaa
@@ -276,7 +245,7 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_constructorReference_unnamed_declared() async {
+  Future<void> test_class_constructorReference_unnamed_declared() async {
     addTestFile('''
 class A<T> {
   /// doc aaa
@@ -303,7 +272,7 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_constructorReference_unnamed_declared_new() async {
+  Future<void> test_class_constructorReference_unnamed_declared_new() async {
     addTestFile('''
 class A<T> {
   /// doc aaa
@@ -330,7 +299,7 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_constructorReference_unnamed_synthetic() async {
+  Future<void> test_class_constructorReference_unnamed_synthetic() async {
     addTestFile('''
 class A<T> {}
 
@@ -353,6 +322,269 @@
     expect(hover.parameter, isNull);
   }
 
+  Future<void> test_class_declaration() async {
+    addTestFile('''
+class A<E> {}
+class I1<K, V> {}
+class I2<E> {}
+class M1 {}
+class M2<E> {}
+class B<T> extends A<T> with M1, M2<int> implements I1<int, String>, I2 {}
+''');
+    var hover = await prepareHover('B<T>');
+    expect(hover.containingClassDescription, null);
+    expect(
+        hover.elementDescription,
+        'class B<T> extends A<T> with M1, M2<int> '
+        'implements I1<int, String>, I2<dynamic>');
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+  }
+
+  Future<void> test_class_declaration_abstract() async {
+    addTestFile('''
+class A {}
+abstract class B extends A {}
+''');
+    var hover = await prepareHover('B extends');
+    expect(hover.containingClassDescription, null);
+    expect(hover.elementDescription, 'abstract class B extends A');
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+  }
+
+  Future<void> test_class_getter_synthetic() async {
+    addTestFile('''
+library my.library;
+class A {
+  /// doc aaa
+  /// doc bbb
+  String fff;
+}
+void f(A a) {
+  print(a.fff);
+}
+''');
+    var hover = await prepareHover('fff);');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'String fff');
+    expect(hover.elementKind, 'field');
+    // types
+    expect(hover.staticType, 'String');
+    expect(hover.propagatedType, isNull);
+  }
+
+  Future<void> test_class_method_declaration() async {
+    addTestFile('''
+library my.library;
+class A {
+  /// doc aaa
+  /// doc bbb
+  List<String> mmm(int a, String b) {
+  }
+}
+''');
+    var hover = await prepareHover('mmm(int a');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
+    expect(hover.elementKind, 'method');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_class_method_reference() async {
+    addTestFile('''
+library my.library;
+class A {
+  List<String> mmm(int a, String b) {
+  }
+}
+void f(A a) {
+  a.mmm(42, 'foo');
+}
+''');
+    var hover = await prepareHover('mm(42, ');
+    // range
+    expect(hover.offset, findOffset('mmm(42, '));
+    expect(hover.length, 'mmm'.length);
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
+    expect(hover.elementKind, 'method');
+    expect(hover.isDeprecated, isFalse);
+    // types
+    expect(hover.staticType, 'List<String> Function(int, String)');
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_class_method_reference_deprecated() async {
+    addTestFile('''
+class A {
+  @deprecated
+  static void test() {}
+}
+void f() {
+  A.test();
+}
+''');
+    var hover = await prepareHover('test();');
+    // element
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.elementDescription, 'void test()');
+    expect(hover.elementKind, 'method');
+    expect(hover.isDeprecated, isTrue);
+  }
+
+  Future<void> test_class_method_reference_genericMethod() async {
+    addTestFile('''
+library my.library;
+
+abstract class Stream<T> {
+  Stream<S> transform<S>(StreamTransformer<T, S> streamTransformer);
+}
+abstract class StreamTransformer<T, S> {}
+
+f(Stream<int> s) {
+  s.transform(null);
+}
+''');
+    var hover = await prepareHover('nsform(n');
+    // range
+    expect(hover.offset, findOffset('transform(n'));
+    expect(hover.length, 'transform'.length);
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.elementDescription,
+        'Stream<S> transform<S>(StreamTransformer<int, S> streamTransformer)');
+    expect(hover.elementKind, 'method');
+    expect(hover.isDeprecated, isFalse);
+    // types
+    expect(hover.staticType,
+        'Stream<dynamic> Function(StreamTransformer<int, dynamic>)');
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_class_setter_hasDocumentation() async {
+    addTestFile('''
+class A {
+  /// getting
+  int get foo => 42;
+  /// setting
+  set foo(int x) {}
+}
+void f(A a) {
+  a.foo = 123;
+}
+''');
+    var hover = await prepareHover('foo = ');
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, '''setting''');
+    expect(hover.elementDescription, 'void set foo(int x)');
+    expect(hover.elementKind, 'setter');
+  }
+
+  Future<void> test_class_setter_noDocumentation() async {
+    addTestFile('''
+class A {
+  /// getting
+  int get foo => 42;
+  set foo(int x) {}
+}
+void f(A a) {
+  a.foo = 123;
+}
+''');
+    var hover = await prepareHover('foo = ');
+    expect(hover.containingClassDescription, 'A');
+    expect(hover.dartdoc, '''getting''');
+    expect(hover.elementDescription, 'void set foo(int x)');
+    expect(hover.elementKind, 'setter');
+  }
+
+  Future<void> test_class_setter_super_hasDocumentation() async {
+    addTestFile('''
+class A {
+  /// pgetting
+  int get foo => 42;
+  /// psetting
+  set foo(int x) {}
+}
+class B extends A {
+  /// getting
+  int get foo => 42;
+  set foo(int x) {}
+}
+void f(B b) {
+  b.foo = 123;
+}
+''');
+    var hover = await prepareHover('foo = ');
+    expect(hover.containingClassDescription, 'B');
+    expect(hover.dartdoc, '''psetting\n\nCopied from `A`.''');
+    expect(hover.elementDescription, 'void set foo(int x)');
+    expect(hover.elementKind, 'setter');
+  }
+
+  Future<void> test_class_setter_super_noDocumentation() async {
+    addTestFile('''
+class A {
+  /// pgetting
+  int get foo => 42;
+  set foo(int x) {}
+}
+class B extends A {
+  int get foo => 42;
+  set foo(int x) {}
+}
+void f(B b) {
+  b.foo = 123;
+}
+''');
+    var hover = await prepareHover('foo = ');
+    expect(hover.containingClassDescription, 'B');
+    expect(hover.dartdoc, '''pgetting\n\nCopied from `A`.''');
+    expect(hover.elementDescription, 'void set foo(int x)');
+    expect(hover.elementKind, 'setter');
+  }
+
+  @failingTest
+  Future<void> test_class_setter_super_noSetter() async {
+    addTestFile('''
+class A {
+  /// pgetting
+  int get foo => 42;
+}
+class B extends A {
+  set foo(int x) {}
+}
+void f(B b) {
+  b.foo = 123;
+}
+''');
+    var hover = await prepareHover('foo = ');
+    expect(hover.containingClassDescription, 'B');
+    expect(hover.dartdoc, '''pgetting''');
+    expect(hover.elementDescription, 'void set foo(int x)');
+    expect(hover.elementKind, 'setter');
+  }
+
   Future<void> test_dartdoc_block() async {
     addTestFile('''
 /**
@@ -453,6 +685,131 @@
     expect(hover.propagatedType, isNull);
   }
 
+  Future<void> test_enum_getter() async {
+    addTestFile('''
+library my.library;
+enum E {
+  v;
+  /// doc aaa
+  /// doc bbb
+  int get foo => 0;
+}
+void f(E e) {
+  print(e.foo);
+}
+''');
+    var hover = await prepareHover('foo);');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'E');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'int get foo');
+    expect(hover.elementKind, 'getter');
+  }
+
+  Future<void> test_enum_getter_synthetic() async {
+    addTestFile('''
+library my.library;
+enum E {
+  v;
+  /// doc aaa
+  /// doc bbb
+  final String fff;
+}
+void f(E e) {
+  print(e.fff);
+}
+''');
+    var hover = await prepareHover('fff);');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'E');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'String fff');
+    expect(hover.elementKind, 'field');
+    // types
+    expect(hover.staticType, 'String');
+    expect(hover.propagatedType, isNull);
+  }
+
+  Future<void> test_enum_method_declaration() async {
+    addTestFile('''
+library my.library;
+enum E {
+  v;
+  /// doc aaa
+  /// doc bbb
+  List<String> mmm(int a, String b) {
+  }
+}
+''');
+    var hover = await prepareHover('mmm(int a');
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'E');
+    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
+    expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
+    expect(hover.elementKind, 'method');
+    // types
+    expect(hover.staticType, isNull);
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_enum_method_reference() async {
+    addTestFile('''
+library my.library;
+enum E {
+  v;
+  List<String> mmm(int a, String b) {
+  }
+}
+void f(E e) {
+  e.mmm(42, 'foo');
+}
+''');
+    var hover = await prepareHover('mm(42, ');
+    // range
+    expect(hover.offset, findOffset('mmm(42, '));
+    expect(hover.length, 'mmm'.length);
+    // element
+    expect(hover.containingLibraryName, 'bin/test.dart');
+    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingClassDescription, 'E');
+    expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
+    expect(hover.elementKind, 'method');
+    expect(hover.isDeprecated, isFalse);
+    // types
+    expect(hover.staticType, 'List<String> Function(int, String)');
+    expect(hover.propagatedType, isNull);
+    // no parameter
+    expect(hover.parameter, isNull);
+  }
+
+  Future<void> test_enum_setter_hasDocumentation() async {
+    addTestFile('''
+enum E {
+  v;
+  /// getting
+  int get foo => 42;
+  /// setting
+  set foo(int x) {}
+}
+void f(E e) {
+  e.foo = 123;
+}
+''');
+    var hover = await prepareHover('foo = ');
+    expect(hover.containingClassDescription, 'E');
+    expect(hover.dartdoc, '''setting''');
+    expect(hover.elementDescription, 'void set foo(int x)');
+    expect(hover.elementKind, 'setter');
+  }
+
   Future<void> test_extensionDeclaration() async {
     addTestFile('''
 class A {}
@@ -586,31 +943,6 @@
     expect(hover.parameter, isNull);
   }
 
-  Future<void> test_getter_synthetic() async {
-    addTestFile('''
-library my.library;
-class A {
-  /// doc aaa
-  /// doc bbb
-  String fff;
-}
-void f(A a) {
-  print(a.fff);
-}
-''');
-    var hover = await prepareHover('fff);');
-    // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
-    expect(hover.containingClassDescription, 'A');
-    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
-    expect(hover.elementDescription, 'String fff');
-    expect(hover.elementKind, 'field');
-    // types
-    expect(hover.staticType, 'String');
-    expect(hover.propagatedType, isNull);
-  }
-
   Future<void> test_integerLiteral() async {
     addTestFile('''
 void f() {
@@ -726,109 +1058,6 @@
     expect(hover.propagatedType, null);
   }
 
-  Future<void> test_method_declaration() async {
-    addTestFile('''
-library my.library;
-class A {
-  /// doc aaa
-  /// doc bbb
-  List<String> mmm(int a, String b) {
-  }
-}
-''');
-    var hover = await prepareHover('mmm(int a');
-    // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
-    expect(hover.containingClassDescription, 'A');
-    expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
-    expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
-    expect(hover.elementKind, 'method');
-    // types
-    expect(hover.staticType, isNull);
-    expect(hover.propagatedType, isNull);
-    // no parameter
-    expect(hover.parameter, isNull);
-  }
-
-  Future<void> test_method_reference() async {
-    addTestFile('''
-library my.library;
-class A {
-  List<String> mmm(int a, String b) {
-  }
-}
-void f(A a) {
-  a.mmm(42, 'foo');
-}
-''');
-    var hover = await prepareHover('mm(42, ');
-    // range
-    expect(hover.offset, findOffset('mmm(42, '));
-    expect(hover.length, 'mmm'.length);
-    // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
-    expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
-    expect(hover.elementKind, 'method');
-    expect(hover.isDeprecated, isFalse);
-    // types
-    expect(hover.staticType, 'List<String> Function(int, String)');
-    expect(hover.propagatedType, isNull);
-    // no parameter
-    expect(hover.parameter, isNull);
-  }
-
-  Future<void> test_method_reference_deprecated() async {
-    addTestFile('''
-class A {
-  @deprecated
-  static void test() {}
-}
-void f() {
-  A.test();
-}
-''');
-    var hover = await prepareHover('test();');
-    // element
-    expect(hover.containingLibraryPath, testFile);
-    expect(hover.elementDescription, 'void test()');
-    expect(hover.elementKind, 'method');
-    expect(hover.isDeprecated, isTrue);
-  }
-
-  Future<void> test_method_reference_genericMethod() async {
-    addTestFile('''
-library my.library;
-
-abstract class Stream<T> {
-  Stream<S> transform<S>(StreamTransformer<T, S> streamTransformer);
-}
-abstract class StreamTransformer<T, S> {}
-
-f(Stream<int> s) {
-  s.transform(null);
-}
-''');
-    var hover = await prepareHover('nsform(n');
-    // range
-    expect(hover.offset, findOffset('transform(n'));
-    expect(hover.length, 'transform'.length);
-    // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
-    expect(hover.elementDescription,
-        'Stream<S> transform<S>(StreamTransformer<int, S> streamTransformer)');
-    expect(hover.elementKind, 'method');
-    expect(hover.isDeprecated, isFalse);
-    // types
-    expect(hover.staticType,
-        'Stream<dynamic> Function(StreamTransformer<int, dynamic>)');
-    expect(hover.propagatedType, isNull);
-    // no parameter
-    expect(hover.parameter, isNull);
-  }
-
   Future<void> test_mixin_declaration() async {
     addTestFile('''
 mixin A on B, C implements D, E {}
@@ -1002,110 +1231,6 @@
     expect(hover.staticType, 'int');
   }
 
-  Future<void> test_setter_hasDocumentation() async {
-    addTestFile('''
-class A {
-  /// getting
-  int get foo => 42;
-  /// setting
-  set foo(int x) {}
-}
-void f(A a) {
-  a.foo = 123;
-}
-''');
-    var hover = await prepareHover('foo = ');
-    expect(hover.containingClassDescription, 'A');
-    expect(hover.dartdoc, '''setting''');
-    expect(hover.elementDescription, 'void set foo(int x)');
-    expect(hover.elementKind, 'setter');
-  }
-
-  Future<void> test_setter_noDocumentation() async {
-    addTestFile('''
-class A {
-  /// getting
-  int get foo => 42;
-  set foo(int x) {}
-}
-void f(A a) {
-  a.foo = 123;
-}
-''');
-    var hover = await prepareHover('foo = ');
-    expect(hover.containingClassDescription, 'A');
-    expect(hover.dartdoc, '''getting''');
-    expect(hover.elementDescription, 'void set foo(int x)');
-    expect(hover.elementKind, 'setter');
-  }
-
-  Future<void> test_setter_super_hasDocumentation() async {
-    addTestFile('''
-class A {
-  /// pgetting
-  int get foo => 42;
-  /// psetting
-  set foo(int x) {}
-}
-class B extends A {
-  /// getting
-  int get foo => 42;
-  set foo(int x) {}
-}
-void f(B b) {
-  b.foo = 123;
-}
-''');
-    var hover = await prepareHover('foo = ');
-    expect(hover.containingClassDescription, 'B');
-    expect(hover.dartdoc, '''psetting\n\nCopied from `A`.''');
-    expect(hover.elementDescription, 'void set foo(int x)');
-    expect(hover.elementKind, 'setter');
-  }
-
-  Future<void> test_setter_super_noDocumentation() async {
-    addTestFile('''
-class A {
-  /// pgetting
-  int get foo => 42;
-  set foo(int x) {}
-}
-class B extends A {
-  int get foo => 42;
-  set foo(int x) {}
-}
-void f(B b) {
-  b.foo = 123;
-}
-''');
-    var hover = await prepareHover('foo = ');
-    expect(hover.containingClassDescription, 'B');
-    expect(hover.dartdoc, '''pgetting\n\nCopied from `A`.''');
-    expect(hover.elementDescription, 'void set foo(int x)');
-    expect(hover.elementKind, 'setter');
-  }
-
-  @failingTest
-  Future<void> test_setter_super_noSetter() async {
-    addTestFile('''
-class A {
-  /// pgetting
-  int get foo => 42;
-}
-class B extends A {
-  set foo(int x) {}
-}
-void f(B b) {
-  b.foo = 123;
-}
-''');
-    var hover = await prepareHover('foo = ');
-    expect(hover.containingClassDescription, 'B');
-    expect(hover.dartdoc, '''pgetting''');
-    expect(hover.elementDescription, 'void set foo(int x)');
-    expect(hover.elementKind, 'setter');
-  }
-
   Future<void> test_simpleIdentifier_typedef_functionType() async {
     addTestFile('''
 typedef A = void Function(int);
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index ed4a472..3048a8c 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -656,9 +656,164 @@
     assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'f = 1');
   }
 
-  Future<void> test_ENUM() async {
+  Future<void> test_enum_constant() async {
+    addTestFile('''
+enum MyEnum {AAA, BBB}
+
+void f() {
+  MyEnum.AAA;
+  MyEnum.BBB;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'AAA, ');
+    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB}');
+    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'AAA;');
+    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB;');
+  }
+
+  Future<void> test_enum_constructor() async {
+    addTestFile('''
+const a = 0;
+
+enum E<T> {
+  v<int>.named(a); // 1
+  E.named(T a); // 2
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'v<');
+    assertHasRegion(HighlightRegionType.CLASS, 'int>');
+    assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'named(a)');
+    assertHasRegion(HighlightRegionType.TOP_LEVEL_GETTER_REFERENCE, 'a); // 1');
+    assertHasRegion(HighlightRegionType.ENUM, 'E.named');
+    assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'named(T');
+    assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T a');
+    assertHasRegion(HighlightRegionType.PARAMETER_DECLARATION, 'a); // 2');
+  }
+
+  Future<void> test_enum_field_instance() async {
+    addTestFile('''
+enum E {
+  v;
+  final int a = 0;
+  E(this.a);
+}
+
+void f(E e) {
+  e.a;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int ');
+    assertHasRegion(HighlightRegionType.INSTANCE_FIELD_DECLARATION, 'a = 0');
+    assertHasRegion(HighlightRegionType.PARAMETER_DECLARATION, 'a);');
+    assertHasRegion(HighlightRegionType.INSTANCE_GETTER_REFERENCE, 'a;');
+  }
+
+  Future<void> test_enum_field_static() async {
+    addTestFile('''
+enum E {
+  v;
+  static final int a = 0;
+}
+
+void f() {
+  E.a;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int ');
+    assertHasRegion(HighlightRegionType.STATIC_FIELD_DECLARATION, 'a = 0');
+    assertHasRegion(HighlightRegionType.STATIC_GETTER_REFERENCE, 'a;');
+  }
+
+  Future<void> test_enum_getter_instance() async {
+    addTestFile('''
+enum E {
+  v;
+  int get foo => 0;
+}
+
+void f(E e) {
+  e.foo;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int get');
+    assertHasRegion(HighlightRegionType.INSTANCE_GETTER_DECLARATION, 'foo =>');
+    assertHasRegion(HighlightRegionType.INSTANCE_GETTER_REFERENCE, 'foo;');
+  }
+
+  Future<void> test_enum_getter_static() async {
+    addTestFile('''
+enum E {
+  v;
+  static int get foo => 0;
+}
+
+void f() {
+  E.foo;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int get');
+    assertHasRegion(HighlightRegionType.STATIC_GETTER_DECLARATION, 'foo =>');
+    assertHasRegion(HighlightRegionType.STATIC_GETTER_REFERENCE, 'foo;');
+  }
+
+  Future<void> test_enum_method_instance() async {
+    addTestFile('''
+enum E {
+  v;
+  int foo(int a) {
+    return a;
+  }
+}
+
+void f(E e) {
+  e.foo();
+  e.foo;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int foo');
+    assertHasRegion(HighlightRegionType.INSTANCE_METHOD_DECLARATION, 'foo(int');
+    assertHasRegion(HighlightRegionType.CLASS, 'int a');
+    assertHasRegion(HighlightRegionType.PARAMETER_DECLARATION, 'a)');
+    assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'a;');
+    assertHasRegion(HighlightRegionType.INSTANCE_METHOD_REFERENCE, 'foo();');
+    assertHasRegion(HighlightRegionType.INSTANCE_METHOD_TEAR_OFF, 'foo;');
+  }
+
+  Future<void> test_enum_method_static() async {
+    addTestFile('''
+enum E {
+  v;
+  static int foo(int a) {
+    return a;
+  }
+}
+
+void f() {
+  E.foo();
+  E.foo;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int foo');
+    assertHasRegion(HighlightRegionType.STATIC_METHOD_DECLARATION, 'foo(int');
+    assertHasRegion(HighlightRegionType.CLASS, 'int a');
+    assertHasRegion(HighlightRegionType.PARAMETER_DECLARATION, 'a)');
+    assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'a;');
+    assertHasRegion(HighlightRegionType.STATIC_METHOD_REFERENCE, 'foo();');
+    assertHasRegion(HighlightRegionType.STATIC_METHOD_TEAR_OFF, 'foo;');
+  }
+
+  Future<void> test_enum_name() async {
     addTestFile('''
 enum MyEnum {A, B, C}
+
 MyEnum value;
 ''');
     await prepareHighlights();
@@ -666,19 +821,50 @@
     assertHasRegion(HighlightRegionType.ENUM, 'MyEnum value;');
   }
 
-  Future<void> test_ENUM_CONSTANT() async {
+  Future<void> test_enum_setter_instance() async {
     addTestFile('''
-enum MyEnum {AAA, BBB}
-void f() {
-  print(MyEnum.AAA);
-  print(MyEnum.BBB);
+enum E {
+  v;
+  set foo(int _) {}
+}
+
+void f(E e) {
+  e.foo = 0;
 }
 ''');
     await prepareHighlights();
-    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'AAA, ');
-    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB}');
-    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'AAA);');
-    assertHasRegion(HighlightRegionType.ENUM_CONSTANT, 'BBB);');
+    assertHasRegion(HighlightRegionType.CLASS, 'int _');
+    assertHasRegion(HighlightRegionType.INSTANCE_SETTER_DECLARATION, 'foo(int');
+    assertHasRegion(HighlightRegionType.INSTANCE_SETTER_REFERENCE, 'foo = 0;');
+  }
+
+  Future<void> test_enum_setter_static() async {
+    addTestFile('''
+enum E {
+  v;
+  static set foo(int _) {}
+}
+
+void f() {
+  E.foo = 0;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.CLASS, 'int _');
+    assertHasRegion(HighlightRegionType.STATIC_SETTER_DECLARATION, 'foo(int');
+    assertHasRegion(HighlightRegionType.STATIC_SETTER_REFERENCE, 'foo = 0;');
+  }
+
+  Future<void> test_enum_typeParameter() async {
+    addTestFile('''
+enum E<T> {
+  v;
+  T? foo() => null;
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T>');
+    assertHasRegion(HighlightRegionType.TYPE_PARAMETER, 'T?');
   }
 
   Future<void> test_EXTENSION() async {
@@ -1150,6 +1336,19 @@
     assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'bbb: 2');
   }
 
+  Future<void> test_PARAMETER_named_anywhere() async {
+    addTestFile('''
+void f(int aaa, int bbb, {int? ccc, int? ddd}) {}
+
+void g() {
+  f(0, ccc: 2, 1, ddd: 3);
+}
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'ccc: 2');
+    assertHasRegion(HighlightRegionType.PARAMETER_REFERENCE, 'ddd: 3');
+  }
+
   Future<void> test_PARAMETER_super_children() async {
     addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
index c0deb4e..a9db25d 100644
--- a/pkg/analysis_server/test/analysis/notification_implemented_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -150,7 +150,7 @@
     assertHasImplementedClass('A {');
   }
 
-  Future<void> test_class_implemented() async {
+  Future<void> test_class_implementedBy_class() async {
     addTestFile('''
 class A {}
 class B implements A {}
@@ -159,7 +159,67 @@
     assertHasImplementedClass('A {');
   }
 
-  Future<void> test_class_inMixin() async {
+  Future<void> test_class_implementedBy_enum() async {
+    addTestFile('''
+class A {}
+
+enum E implements A {
+  v
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedClass('A {');
+  }
+
+  Future<void> test_class_implementedBy_enum_getterByGetter() async {
+    addTestFile('''
+class A {
+  int get foo => 0; // A
+}
+
+enum E implements A {
+  v;
+  int get foo => 0; // E
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('foo => 0; // A');
+    assertNoImplementedMember('foo => 0; // E');
+  }
+
+  Future<void> test_class_implementedBy_enum_methodByMethod() async {
+    addTestFile('''
+class A {
+  void foo() {} // A
+}
+
+enum E implements A {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('foo() {} // A');
+    assertNoImplementedMember('foo() {} // E');
+  }
+
+  Future<void> test_class_implementedBy_enum_setterBySetter() async {
+    addTestFile('''
+class A {
+  set foo(int _) {} // A
+}
+
+enum E implements A {
+  v;
+  set foo(int _) {} // E
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('foo(int _) {} // A');
+    assertNoImplementedMember('foo(int _) {} // E');
+  }
+
+  Future<void> test_class_implementedBy_mixin() async {
     addTestFile('''
 class A {} // ref
 class B {} // ref
@@ -174,7 +234,7 @@
     assertHasImplementedClass('D {} // ref');
   }
 
-  Future<void> test_class_mixed() async {
+  Future<void> test_class_mixedBy_class() async {
     addTestFile('''
 class A {}
 class B = Object with A;
@@ -183,6 +243,33 @@
     assertHasImplementedClass('A {');
   }
 
+  Future<void> test_class_mixedBy_enum() async {
+    addTestFile('''
+mixin M {}
+enum E with M {
+  v
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedClass('M {}');
+  }
+
+  Future<void> test_class_mixedBy_enum_methodByMethod() async {
+    addTestFile('''
+class M {
+  void foo() {} // M
+}
+
+enum E with M {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('foo() {} // M');
+    assertNoImplementedMember('foo() {} // E');
+  }
+
   Future<void> test_field_withField() async {
     addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 3598517..506df55 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -92,6 +92,22 @@
     assertHasFileTarget(testFile, offset, length);
   }
 
+  /// TODO(scheglov) Improve target matching.
+  void assertHasTargetInDartCore(String search) {
+    var dartCoreFile = getFile('/sdk/lib/core/core.dart');
+    var dartCoreContent = dartCoreFile.readAsStringSync();
+
+    var offset = dartCoreContent.indexOf(search);
+    expect(offset, isNot(-1));
+
+    if (dartCoreContent.contains(search, offset + search.length)) {
+      fail('Not unique');
+    }
+
+    var length = findIdentifierLength(search);
+    assertHasFileTarget(dartCoreFile.path, offset, length);
+  }
+
   /// Validates that there is a target in [testTargets]  with [testFile], at the
   /// offset of [str] in [testFile], and with the length of  [str].
   void assertHasTargetString(String str) {
@@ -347,19 +363,7 @@
     assertHasRegion('myan // ref');
   }
 
-  Future<void> test_class_fromSDK() async {
-    addTestFile('''
-int V = 42;
-''');
-    await prepareNavigation();
-    assertHasRegion('int V');
-    var targetIndex = testTargetIndexes[0];
-    var target = targets[targetIndex];
-    expect(target.startLine, greaterThan(0));
-    expect(target.startColumn, greaterThan(0));
-  }
-
-  Future<void> test_constructor_named() async {
+  Future<void> test_class_constructor_named() async {
     addTestFile('''
 class A {
   A.named(BBB p) {}
@@ -377,7 +381,7 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
-  Future<void> test_constructor_unnamed() async {
+  Future<void> test_class_constructor_unnamed() async {
     addTestFile('''
 class A {
   A(BBB p) {}
@@ -392,7 +396,7 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
-  Future<void> test_constructorReference_named() async {
+  Future<void> test_class_constructorReference_named() async {
     addTestFile('''
 class A {}
 class B<T> {
@@ -408,7 +412,7 @@
     assertHasRegionTarget('A>', 'A {}');
   }
 
-  Future<void> test_constructorReference_unnamed_declared() async {
+  Future<void> test_class_constructorReference_unnamed_declared() async {
     addTestFile('''
 class A {
   A();
@@ -422,7 +426,7 @@
     assertHasRegionTarget('new;', 'A();', targetLength: 0);
   }
 
-  Future<void> test_constructorReference_unnamed_declared_new() async {
+  Future<void> test_class_constructorReference_unnamed_declared_new() async {
     addTestFile('''
 class A {
   A.new();
@@ -436,7 +440,7 @@
     assertHasRegionTarget('new;', 'new();');
   }
 
-  Future<void> test_constructorReference_unnamed_default() async {
+  Future<void> test_class_constructorReference_unnamed_default() async {
     addTestFile('''
 class A {}
 void f() {
@@ -448,55 +452,7 @@
     assertHasRegionTarget('new;', 'A {}');
   }
 
-  Future<void> test_enum_constant() async {
-    addTestFile('''
-enum E { a, b }
-void f() {
-  E.a;
-}
-''');
-    await prepareNavigation();
-    assertHasRegion('a;');
-    assertHasTarget('a,');
-  }
-
-  Future<void> test_enum_index() async {
-    addTestFile('''
-enum E { a, b }
-void f() {
-  E.a.index;
-}
-''');
-    await prepareNavigation();
-    assertHasRegion('index');
-    assertHasTarget('E {');
-  }
-
-  Future<void> test_enum_values() async {
-    addTestFile('''
-enum E { a, b }
-void f() {
-  E.values;
-}
-''');
-    await prepareNavigation();
-    assertHasRegion('values');
-    assertHasTarget('E');
-  }
-
-  Future<void> test_extension_on() async {
-    addTestFile('''
-class C //1
-{}
-extension E on C //2
-{}
-''');
-    await prepareNavigation();
-    assertHasRegion('C //2');
-    assertHasTarget('C //1');
-  }
-
-  Future<void> test_factoryRedirectingConstructor_implicit() async {
+  Future<void> test_class_factoryRedirectingConstructor_implicit() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -510,7 +466,7 @@
   }
 
   Future<void>
-      test_factoryRedirectingConstructor_implicit_withTypeArgument() async {
+      test_class_factoryRedirectingConstructor_implicit_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -529,7 +485,7 @@
     }
   }
 
-  Future<void> test_factoryRedirectingConstructor_named() async {
+  Future<void> test_class_factoryRedirectingConstructor_named() async {
     addTestFile('''
 class A {
   factory A() = B.named;
@@ -550,7 +506,7 @@
   }
 
   Future<void>
-      test_factoryRedirectingConstructor_named_withTypeArgument() async {
+      test_class_factoryRedirectingConstructor_named_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -575,7 +531,7 @@
     }
   }
 
-  Future<void> test_factoryRedirectingConstructor_unnamed() async {
+  Future<void> test_class_factoryRedirectingConstructor_unnamed() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -590,7 +546,7 @@
   }
 
   Future<void>
-      test_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
+      test_class_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -611,7 +567,7 @@
     }
   }
 
-  Future<void> test_factoryRedirectingConstructor_unresolved() async {
+  Future<void> test_class_factoryRedirectingConstructor_unresolved() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -621,7 +577,7 @@
     // don't check regions, but there should be no exceptions
   }
 
-  Future<void> test_fieldFormalParameter() async {
+  Future<void> test_class_fieldFormalParameter() async {
     addTestFile('''
 class AAA {
   int fff = 123;
@@ -632,7 +588,7 @@
     assertHasRegionTarget('fff);', 'fff = 123');
   }
 
-  Future<void> test_fieldFormalParameter_unresolved() async {
+  Future<void> test_class_fieldFormalParameter_unresolved() async {
     addTestFile('''
 class AAA {
   AAA(this.fff);
@@ -642,6 +598,201 @@
     assertNoRegion('fff);', 3);
   }
 
+  Future<void> test_class_fromSDK() async {
+    addTestFile('''
+int V = 42;
+''');
+    await prepareNavigation();
+    assertHasRegion('int V');
+    var targetIndex = testTargetIndexes[0];
+    var target = targets[targetIndex];
+    expect(target.startLine, greaterThan(0));
+    expect(target.startColumn, greaterThan(0));
+  }
+
+  Future<void> test_enum_constant() async {
+    addTestFile('''
+enum E { a, b }
+void f() {
+  E.a;
+}
+''');
+    await prepareNavigation();
+    assertHasRegion('a;');
+    assertHasTarget('a,');
+  }
+
+  Future<void> test_enum_constructor_named() async {
+    addTestFile('''
+const a = 0;
+
+enum E<T> {
+  v<int>.named(a); // 1
+  E.named(int _) {}
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegionTarget('v<int', 'named(int');
+    assertHasRegion('int>');
+    assertHasRegionTarget('named(a); // 1', 'named(int');
+    assertHasRegionTarget('a); // 1', 'a = 0');
+
+    assertHasRegion('int _');
+  }
+
+  Future<void> test_enum_constructor_unnamed() async {
+    addTestFile('''
+enum E {
+  v1,
+  v2(),
+  v3.new();
+  const E();
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegionTarget('v1', 'E();', targetLength: 0);
+    assertHasRegionTarget('v2()', 'E();', targetLength: 0);
+    assertHasRegionTarget('v3', 'E();', targetLength: 0);
+    assertHasRegionTarget('new()', 'E();', targetLength: 0);
+  }
+
+  Future<void> test_enum_field() async {
+    addTestFile('''
+enum E {
+  v;
+  final int foo = 0;
+  void bar() {
+    foo;
+    foo = 1;
+  }
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegion('int foo');
+    assertHasRegionTarget('foo;', 'foo = 0;');
+    assertHasRegionTarget('foo = 1;', 'foo = 0;');
+  }
+
+  Future<void> test_enum_getter() async {
+    addTestFile('''
+enum E {
+  v;
+  int get foo => 0;
+  void bar() {
+    foo;
+  }
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegion('int get');
+    assertHasRegionTarget('foo;', 'foo =>');
+  }
+
+  Future<void> test_enum_implements() async {
+    addTestFile('''
+class A {}
+
+enum E implements A { // ref
+  v
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegionTarget('A { // ref', 'A {}');
+  }
+
+  Future<void> test_enum_index() async {
+    addTestFile('''
+enum E { a, b }
+void f() {
+  E.a.index;
+}
+''');
+    await prepareNavigation();
+    assertHasRegion('index');
+    assertHasTargetInDartCore('index;');
+  }
+
+  Future<void> test_enum_method() async {
+    addTestFile('''
+enum E {
+  v;
+  void foo(int a) {}
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegion('int ');
+  }
+
+  Future<void> test_enum_setter() async {
+    addTestFile('''
+enum E {
+  v;
+  set foo(int _) {}
+  void bar() {
+    foo = 0;
+  }
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegion('int _');
+    assertHasRegionTarget('foo = 0;', 'foo(');
+  }
+
+  Future<void> test_enum_typeParameter() async {
+    addTestFile('''
+enum E<T> {
+  v(0);
+  const E(T t);
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('T t', 'T>');
+  }
+
+  Future<void> test_enum_values() async {
+    addTestFile('''
+enum E { a, b }
+void f() {
+  E.values;
+}
+''');
+    await prepareNavigation();
+    assertHasRegion('values');
+    assertHasTarget('E');
+  }
+
+  Future<void> test_enum_with() async {
+    addTestFile('''
+mixin M {}
+
+enum E with M { // ref
+  v
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegionTarget('M { // ref', 'M {}');
+  }
+
+  Future<void> test_extension_on() async {
+    addTestFile('''
+class C //1
+{}
+extension E on C //2
+{}
+''');
+    await prepareNavigation();
+    assertHasRegion('C //2');
+    assertHasTarget('C //1');
+  }
+
   Future<void> test_functionReference_className_staticMethod() async {
     addTestFile('''
 class A {
@@ -932,6 +1083,19 @@
     assertNoRegionAt('TEST');
   }
 
+  Future<void> test_namedExpression_name() async {
+    addTestFile('''
+void f(int a, int b, {int? c, int? d}) {}
+
+void g() {
+  f(0, c: 2, 1, d: 3);
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('c: 2', 'c,');
+    assertHasRegionTarget('d: 3', 'd}) {}');
+  }
+
   Future<void> test_operator_arithmetic() async {
     addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index 777e230..5bf1c3b 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -109,6 +109,113 @@
     assertHasOffset('vvv);');
   }
 
+  Future<void> test_enum() async {
+    addTestFile('''
+enum E {
+  v;
+}
+
+void f(E e) {
+  E.v;
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('E e');
+    expect(testOccurrences.element.kind, ElementKind.ENUM);
+    expect(testOccurrences.element.name, 'E');
+    assertHasOffset('E e');
+    assertHasOffset('E.v');
+  }
+
+  Future<void> test_enum_constant() async {
+    addTestFile('''
+enum E {
+  v; // 0
+}
+
+void f() {
+  E.v; // 1
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('v; // 0');
+    expect(testOccurrences.element.kind, ElementKind.ENUM_CONSTANT);
+    expect(testOccurrences.element.name, 'v');
+    assertHasOffset('v; // 1');
+  }
+
+  Future<void> test_enum_field() async {
+    addTestFile('''
+enum E {
+  v;
+  final int foo = 0;
+}
+
+void f(E e) {
+  e.foo;
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('foo = 0');
+    expect(testOccurrences.element.kind, ElementKind.FIELD);
+    expect(testOccurrences.element.name, 'foo');
+    assertHasOffset('foo;');
+  }
+
+  Future<void> test_enum_getter() async {
+    addTestFile('''
+enum E {
+  v;
+  int get foo => 0;
+}
+
+void f(E e) {
+  e.foo;
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('foo => 0');
+    expect(testOccurrences.element.kind, ElementKind.FIELD);
+    expect(testOccurrences.element.name, 'foo');
+    assertHasOffset('foo;');
+  }
+
+  Future<void> test_enum_method() async {
+    addTestFile('''
+enum E {
+  v;
+  void foo() {}
+}
+
+void f(E e) {
+  e.foo();
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('foo() {}');
+    expect(testOccurrences.element.kind, ElementKind.METHOD);
+    expect(testOccurrences.element.name, 'foo');
+    assertHasOffset('foo();');
+  }
+
+  Future<void> test_enum_setter() async {
+    addTestFile('''
+enum E {
+  v;
+  set foo(int _) {}
+}
+
+void f(E e) {
+  e.foo = 0;
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('foo(int _) {}');
+    expect(testOccurrences.element.kind, ElementKind.FIELD);
+    expect(testOccurrences.element.name, 'foo');
+    assertHasOffset('foo = 0;');
+  }
+
   Future<void> test_field() async {
     addTestFile('''
 class A {
@@ -193,6 +300,52 @@
     assertHasOffset('mmm(); // b');
   }
 
+  Future<void> test_parameter_named() async {
+    addTestFile('''
+void f(int aaa, int bbb, {int? ccc, int? ddd}) {
+  ccc;
+  ddd;
+}
+
+void g() {
+  f(0, ccc: 2, 1, ddd: 3);
+}
+''');
+    await prepareOccurrences();
+
+    assertHasRegion('ccc: 2');
+    expect(testOccurrences.element.kind, ElementKind.PARAMETER);
+    assertHasOffset('ccc,');
+    assertHasOffset('ccc;');
+    assertHasOffset('ccc: 2');
+
+    assertHasRegion('ddd: 3');
+    expect(testOccurrences.element.kind, ElementKind.PARAMETER);
+    assertHasOffset('ddd})');
+    assertHasOffset('ddd;');
+    assertHasOffset('ddd: 3');
+  }
+
+  Future<void> test_superFormalParameter_requiredPositional() async {
+    addTestFile('''
+class A {
+  A(int x);
+}
+
+class B extends A {
+  int y;
+
+  B(super.x) : y = x * 2;
+}
+''');
+    await prepareOccurrences();
+    assertHasRegion('x) :');
+    expect(testOccurrences.element.kind, ElementKind.PARAMETER);
+    expect(testOccurrences.element.name, 'x');
+    assertHasOffset('x) :');
+    assertHasOffset('x * 2');
+  }
+
   Future<void> test_topLevelVariable() async {
     addTestFile('''
 var VVV = 1;
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index bc48633..3ce1928 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -142,7 +142,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  Future<void> test_BAD_fieldByMethod() async {
+  Future<void> test_class_BAD_fieldByMethod() async {
     addTestFile('''
 class A {
   int fff; // in A
@@ -155,7 +155,7 @@
     assertNoOverride('fff() {} // in B');
   }
 
-  Future<void> test_BAD_getterByMethod() async {
+  Future<void> test_class_BAD_getterByMethod() async {
     addTestFile('''
 class A {
   get fff => null;
@@ -168,7 +168,7 @@
     assertNoOverride('fff() {}');
   }
 
-  Future<void> test_BAD_getterBySetter() async {
+  Future<void> test_class_BAD_getterBySetter() async {
     addTestFile('''
 class A {
   get fff => null;
@@ -181,7 +181,7 @@
     assertNoOverride('fff(x) {}');
   }
 
-  Future<void> test_BAD_methodByField() async {
+  Future<void> test_class_BAD_methodByField() async {
     addTestFile('''
 class A {
   fff() {} // in A
@@ -194,7 +194,7 @@
     assertNoOverride('fff; // in B');
   }
 
-  Future<void> test_BAD_methodByGetter() async {
+  Future<void> test_class_BAD_methodByGetter() async {
     addTestFile('''
 class A {
   fff() {}
@@ -207,7 +207,7 @@
     assertNoOverride('fff => null');
   }
 
-  Future<void> test_BAD_methodBySetter() async {
+  Future<void> test_class_BAD_methodBySetter() async {
     addTestFile('''
 class A {
   fff(x) {} // A
@@ -220,7 +220,7 @@
     assertNoOverride('fff(x) {} // B');
   }
 
-  Future<void> test_BAD_privateByPrivate_inDifferentLib() async {
+  Future<void> test_class_BAD_privateByPrivate_inDifferentLib() async {
     newFile(join(testFolder, 'lib.dart'), content: r'''
 class A {
   void _m() {}
@@ -236,7 +236,7 @@
     assertNoOverride('_m() {} // in B');
   }
 
-  Future<void> test_BAD_setterByGetter() async {
+  Future<void> test_class_BAD_setterByGetter() async {
     addTestFile('''
 class A {
   set fff(x) {}
@@ -249,7 +249,7 @@
     assertNoOverride('fff => null;');
   }
 
-  Future<void> test_BAD_setterByMethod() async {
+  Future<void> test_class_BAD_setterByMethod() async {
     addTestFile('''
 class A {
   set fff(x) {} // A
@@ -262,7 +262,7 @@
     assertNoOverride('fff(x) {} // B');
   }
 
-  Future<void> test_definedInInterface_ofInterface() async {
+  Future<void> test_class_definedInInterface_ofInterface() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -278,7 +278,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  Future<void> test_definedInInterface_ofSuper() async {
+  Future<void> test_class_definedInInterface_ofSuper() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -294,39 +294,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  Future<void> test_inMixin_interface_method_direct_single() async {
-    addTestFile('''
-class A {
-  m() {} // in A
-}
-
-mixin M implements A {
-  m() {} // in M
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('m() {} // in M');
-    assertNoSuperMember();
-    assertHasInterfaceMember('m() {} // in A');
-  }
-
-  Future<void> test_inMixin_superclassConstraint_method_direct() async {
-    addTestFile('''
-class A {
-  m() {} // in A
-}
-
-mixin M on A {
-  m() {} // in M
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('m() {} // in M');
-    assertHasSuperElement('m() {} // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_interface_method_direct_multiple() async {
+  Future<void> test_class_interface_method_direct_multiple() async {
     addTestFile('''
 class IA {
   m() {} // in IA
@@ -345,7 +313,7 @@
     assertHasInterfaceMember('m() {} // in IB');
   }
 
-  Future<void> test_interface_method_direct_single() async {
+  Future<void> test_class_interface_method_direct_single() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -360,7 +328,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  Future<void> test_interface_method_indirect_single() async {
+  Future<void> test_class_interface_method_indirect_single() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -377,7 +345,7 @@
     assertHasInterfaceMember('m() {} // in A');
   }
 
-  Future<void> test_interface_stopWhenFound() async {
+  Future<void> test_class_interface_stopWhenFound() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -395,7 +363,7 @@
     assertHasInterfaceMember('m() {} // in B');
   }
 
-  Future<void> test_mix_sameMethod() async {
+  Future<void> test_class_mix_sameMethod() async {
     addTestFile('''
 class A {
   m() {} // in A
@@ -412,7 +380,7 @@
     assertNoInterfaceMembers();
   }
 
-  Future<void> test_mix_sameMethod_Object_hashCode() async {
+  Future<void> test_class_mix_sameMethod_Object_hashCode() async {
     addTestFile('''
 class A {}
 abstract class B {}
@@ -426,6 +394,536 @@
     expect(overrideObject.interfaceMembers, isNull);
   }
 
+  Future<void> test_class_staticMembers() async {
+    addTestFile('''
+class A {
+  static int F = 0;
+  static void M() {}
+  static int get G => 0;
+  static void set S(int v) {}
+}
+class B extends A {
+  static int F = 0;
+  static void M() {}
+  static int get G => 0;
+  static void set S(int v) {}
+}
+''');
+    await prepareOverrides();
+    expect(overridesList, isEmpty);
+  }
+
+  Future<void> test_class_super_fieldByField() async {
+    addTestFile('''
+class A {
+  int fff; // in A
+}
+class B extends A {
+  int fff; // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('fff; // in B');
+    assertHasSuperElement('fff; // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_fieldByGetter() async {
+    addTestFile('''
+class A {
+  int fff; // in A
+}
+class B extends A {
+  get fff => 0; // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('fff => 0; // in B');
+    assertHasSuperElement('fff; // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_fieldBySetter() async {
+    addTestFile('''
+class A {
+  int fff; // in A
+}
+class B extends A {
+  set fff(x) {} // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('fff(x) {} // in B');
+    assertHasSuperElement('fff; // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_getterByField() async {
+    addTestFile('''
+class A {
+  get fff => 0; // in A
+  set fff(x) {} // in A
+}
+class B extends A {
+  int fff; // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('fff; // in B');
+    assertHasSuperElement('fff => 0; // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_getterByGetter() async {
+    addTestFile('''
+class A {
+  get fff => 0; // in A
+}
+class B extends A {
+  get fff => 0; // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('fff => 0; // in B');
+    assertHasSuperElement('fff => 0; // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_method_direct() async {
+    addTestFile('''
+class A {
+  m() {} // in A
+}
+class B extends A {
+  m() {} // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('m() {} // in B');
+    assertHasSuperElement('m() {} // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_method_indirect() async {
+    addTestFile('''
+class A {
+  m() {} // in A
+}
+class B extends A {
+}
+class C extends B {
+  m() {} // in C
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('m() {} // in C');
+    assertHasSuperElement('m() {} // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_method_privateByPrivate() async {
+    addTestFile('''
+class A {
+  _m() {} // in A
+}
+class B extends A {
+  _m() {} // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('_m() {} // in B');
+    assertHasSuperElement('_m() {} // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_class_super_method_superTypeCycle() async {
+    addTestFile('''
+class A extends B {
+  m() {} // in A
+}
+class B extends A {
+  m() {} // in B
+}
+''');
+    await prepareOverrides();
+    // must finish
+  }
+
+  Future<void> test_class_super_setterBySetter() async {
+    addTestFile('''
+class A {
+  set fff(x) {} // in A
+}
+class B extends A {
+  set fff(x) {} // in B
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('fff(x) {} // in B');
+    assertHasSuperElement('fff(x) {} // in A');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_enum_interface_getterByGetter() async {
+    addTestFile('''
+class A {
+  int get foo => 0; // A
+}
+
+enum E implements A {
+  v;
+  int get foo => 0; // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo => 0; // E');
+    assertNoSuperMember();
+    assertHasInterfaceMember('foo => 0; // A');
+  }
+
+  Future<void> test_enum_interface_methodByMethod() async {
+    addTestFile('''
+class A {
+  void foo() {} // A
+}
+
+enum E implements A {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo() {} // E');
+    assertNoSuperMember();
+    assertHasInterfaceMember('foo() {} // A');
+  }
+
+  Future<void> test_enum_interface_methodByMethod2() async {
+    addTestFile('''
+class A {
+  void foo() {} // A
+}
+
+class B {
+  void foo() {} // B
+}
+
+enum E implements A, B {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo() {} // E');
+    assertNoSuperMember();
+    assertHasInterfaceMember('foo() {} // A');
+    assertHasInterfaceMember('foo() {} // B');
+  }
+
+  Future<void> test_enum_interface_methodByMethod_indirect() async {
+    addTestFile('''
+abstract class A {
+  void foo(); // A
+}
+
+abstract class B implements A {}
+
+enum E implements B {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo() {} // E');
+    assertNoSuperMember();
+    assertHasInterfaceMember('foo(); // A');
+  }
+
+  Future<void> test_enum_interface_setterBySetter() async {
+    addTestFile('''
+class A {
+  set foo(int _) {} // A
+}
+
+enum E implements A {
+  v;
+  set foo(int _) {} // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo(int _) {} // E');
+    assertNoSuperMember();
+    assertHasInterfaceMember('foo(int _) {} // A');
+  }
+
+  Future<void> test_enum_super_fieldByField() async {
+    addTestFile('''
+mixin M {
+  final int foo = 0; // M
+}
+
+enum E with M {
+  v;
+  final int foo = 0; // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo = 0; // E');
+    assertHasSuperElement('foo = 0; // M');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_enum_super_fieldByGetter() async {
+    addTestFile('''
+mixin M {
+  final int foo = 0; // M
+}
+
+enum E with M {
+  v;
+  int get foo => 0; // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo => 0; // E');
+    assertHasSuperElement('foo = 0; // M');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_enum_super_fieldByMethod() async {
+    addTestFile('''
+mixin M {
+  final int foo = 0; // M
+}
+
+enum E with M {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo() {} // E');
+  }
+
+  Future<void> test_enum_super_fieldBySetter() async {
+    addTestFile('''
+mixin M {
+  final int foo = 0; // M
+}
+
+enum E with M {
+  v;
+  set foo(int _) {} // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo(int _) {} // E');
+  }
+
+  Future<void> test_enum_super_getterByField() async {
+    addTestFile('''
+mixin M {
+  int get foo => 0; // M
+}
+
+enum E with M {
+  v;
+  final int foo = 0; // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo = 0; // E');
+    assertHasSuperElement('foo => 0; // M');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_enum_super_getterByGetter() async {
+    addTestFile('''
+mixin M {
+  int get foo => 0; // M
+}
+
+enum E with M {
+  v;
+  int get foo => 0; // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo => 0; // E');
+    assertHasSuperElement('foo => 0; // M');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_enum_super_getterByMethod() async {
+    addTestFile('''
+mixin M {
+  int get foo => 0; // M
+}
+
+enum E with M {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo() {} // E');
+  }
+
+  Future<void> test_enum_super_getterBySetter() async {
+    addTestFile('''
+mixin M {
+  int get foo => 0; // M
+}
+
+enum E with M {
+  v;
+  set foo(int _) {} // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo(int _) {} // E');
+  }
+
+  Future<void> test_enum_super_methodByField() async {
+    addTestFile('''
+mixin M {
+  void foo() {} // M
+}
+
+enum E with M {
+  v;
+  final int foo = 0; // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo = 0; // E');
+  }
+
+  Future<void> test_enum_super_methodByGetter() async {
+    addTestFile('''
+mixin M {
+  void foo() {} // M
+}
+
+enum E with M {
+  v;
+  int get foo => 0; // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo => 0; // E');
+  }
+
+  Future<void> test_enum_super_methodByMethod() async {
+    addTestFile('''
+mixin M {
+  void foo() {} // M
+}
+
+enum E with M {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo() {} // E');
+    assertHasSuperElement('foo() {} // M');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_enum_super_methodBySetter() async {
+    addTestFile('''
+mixin M {
+  void foo() {} // M
+}
+
+enum E with M {
+  v;
+  set foo(int _) {} // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo(int _) {} // E');
+  }
+
+  Future<void> test_enum_super_setterByField() async {
+    addTestFile('''
+mixin M {
+  set foo(int _) {} // M
+}
+
+enum E with M {
+  v;
+  final int foo = 0; // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo = 0; // E');
+  }
+
+  Future<void> test_enum_super_setterByGetter() async {
+    addTestFile('''
+mixin M {
+  set foo(int _) {} // M
+}
+
+enum E with M {
+  v;
+  int get foo => 0; // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo => 0; // E');
+  }
+
+  Future<void> test_enum_super_setterByMethod() async {
+    addTestFile('''
+mixin M {
+  set foo(int _) {} // M
+}
+
+enum E with M {
+  v;
+  void foo() {} // E
+}
+''');
+    await prepareOverrides();
+    assertNoOverride('foo() {} // E');
+  }
+
+  Future<void> test_enum_super_setterBySetter() async {
+    addTestFile('''
+mixin M {
+  set foo(int _) {} // M
+}
+
+enum E with M {
+  v;
+  set foo(int _) {} // E
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('foo(int _) {} // E');
+    assertHasSuperElement('foo(int _) {} // M');
+    assertNoInterfaceMembers();
+  }
+
+  Future<void> test_mixin_interface_method_direct_single() async {
+    addTestFile('''
+class A {
+  m() {} // in A
+}
+
+mixin M implements A {
+  m() {} // in M
+}
+''');
+    await prepareOverrides();
+    assertHasOverride('m() {} // in M');
+    assertNoSuperMember();
+    assertHasInterfaceMember('m() {} // in A');
+  }
+
   Future<void> test_mixin_method_direct() async {
     addTestFile('''
 class A {
@@ -475,173 +973,19 @@
     assertNoInterfaceMembers();
   }
 
-  Future<void> test_staticMembers() async {
-    addTestFile('''
-class A {
-  static int F = 0;
-  static void M() {}
-  static int get G => 0;
-  static void set S(int v) {}
-}
-class B extends A {
-  static int F = 0;
-  static void M() {}
-  static int get G => 0;
-  static void set S(int v) {}
-}
-''');
-    await prepareOverrides();
-    expect(overridesList, isEmpty);
-  }
-
-  Future<void> test_super_fieldByField() async {
-    addTestFile('''
-class A {
-  int fff; // in A
-}
-class B extends A {
-  int fff; // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('fff; // in B');
-    assertHasSuperElement('fff; // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_fieldByGetter() async {
-    addTestFile('''
-class A {
-  int fff; // in A
-}
-class B extends A {
-  get fff => 0; // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('fff => 0; // in B');
-    assertHasSuperElement('fff; // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_fieldBySetter() async {
-    addTestFile('''
-class A {
-  int fff; // in A
-}
-class B extends A {
-  set fff(x) {} // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('fff(x) {} // in B');
-    assertHasSuperElement('fff; // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_getterByField() async {
-    addTestFile('''
-class A {
-  get fff => 0; // in A
-  set fff(x) {} // in A
-}
-class B extends A {
-  int fff; // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('fff; // in B');
-    assertHasSuperElement('fff => 0; // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_getterByGetter() async {
-    addTestFile('''
-class A {
-  get fff => 0; // in A
-}
-class B extends A {
-  get fff => 0; // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('fff => 0; // in B');
-    assertHasSuperElement('fff => 0; // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_method_direct() async {
+  Future<void> test_mixin_superclassConstraint_method_direct() async {
     addTestFile('''
 class A {
   m() {} // in A
 }
-class B extends A {
-  m() {} // in B
+
+mixin M on A {
+  m() {} // in M
 }
 ''');
     await prepareOverrides();
-    assertHasOverride('m() {} // in B');
+    assertHasOverride('m() {} // in M');
     assertHasSuperElement('m() {} // in A');
     assertNoInterfaceMembers();
   }
-
-  Future<void> test_super_method_indirect() async {
-    addTestFile('''
-class A {
-  m() {} // in A
-}
-class B extends A {
-}
-class C extends B {
-  m() {} // in C
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('m() {} // in C');
-    assertHasSuperElement('m() {} // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_method_privateByPrivate() async {
-    addTestFile('''
-class A {
-  _m() {} // in A
-}
-class B extends A {
-  _m() {} // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('_m() {} // in B');
-    assertHasSuperElement('_m() {} // in A');
-    assertNoInterfaceMembers();
-  }
-
-  Future<void> test_super_method_superTypeCycle() async {
-    addTestFile('''
-class A extends B {
-  m() {} // in A
-}
-class B extends A {
-  m() {} // in B
-}
-''');
-    await prepareOverrides();
-    // must finish
-  }
-
-  Future<void> test_super_setterBySetter() async {
-    addTestFile('''
-class A {
-  set fff(x) {} // in A
-}
-class B extends A {
-  set fff(x) {} // in B
-}
-''');
-    await prepareOverrides();
-    assertHasOverride('fff(x) {} // in B');
-    assertHasSuperElement('fff(x) {} // in A');
-    assertNoInterfaceMembers();
-  }
 }
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 3045889..df45776 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -202,11 +202,7 @@
     server = createAnalysisServer();
     server.pluginManager = pluginManager;
     handler = analysisHandler;
-    // listen for notifications
-    var notificationStream = serverChannel.notificationController.stream;
-    notificationStream.listen((Notification notification) {
-      processNotification(notification);
-    });
+    serverChannel.notifications.listen(processNotification);
   }
 
   @mustCallSuper
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 3546ca2..9ac113c 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -135,10 +135,10 @@
 
     // Track diagnostics that arrive.
     final errorsByFile = <String, List<AnalysisError>>{};
-    channel.notificationController.stream
+    channel.notifications
         .where((notification) => notification.event == 'analysis.errors')
-        .listen((notificaton) {
-      final params = AnalysisErrorsParams.fromNotification(notificaton);
+        .listen((notification) {
+      final params = AnalysisErrorsParams.fromNotification(notification);
       errorsByFile[params.file] = params.errors;
     });
 
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 52c2abf..47c6443 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -4,12 +4,11 @@
 
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
-import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
-import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../domain_completion_test.dart';
 import '../services/completion/dart/completion_check.dart';
 import '../services/completion/dart/completion_contributor_util.dart';
 import 'impl/completion_driver.dart';
@@ -23,30 +22,33 @@
   });
 }
 
-abstract class AbstractCompletionDriverTest with ResourceProviderMixin {
+abstract class AbstractCompletionDriverTest
+    extends PubPackageAnalysisServerTest {
   late CompletionDriver driver;
-  Map<String, String> packageRoots = {};
   late List<CompletionSuggestion> suggestions;
 
-  String get projectName => 'project';
-
-  String get projectPath => '/$projectName';
+  bool get isProtocolVersion2 {
+    return protocol == TestingCompletionProtocol.version2;
+  }
 
   TestingCompletionProtocol get protocol;
 
   AnalysisServerOptions get serverOptions => AnalysisServerOptions();
 
-  bool get supportsAvailableSuggestions;
-
-  String get testFilePath => '$projectPath/bin/test.dart';
+  bool get _isProtocolVersion1 {
+    return protocol == TestingCompletionProtocol.version1;
+  }
 
   Future<void> addProjectFile(String relativePath, String content) async {
-    newFile('$projectPath/$relativePath', content: content);
+    newFile('$testPackageRootPath/$relativePath', content: content);
     // todo (pq): handle more than lib
     expect(relativePath, startsWith('lib/'));
     var packageRelativePath = relativePath.substring(4);
-    var uriStr = 'package:$projectName/$packageRelativePath';
-    await driver.waitForSetWithUri(uriStr);
+    var uriStr = 'package:test/$packageRelativePath';
+
+    if (_isProtocolVersion1) {
+      await driver.waitForSetWithUri(uriStr);
+    }
   }
 
   Future<List<CompletionSuggestion>> addTestFile(String content,
@@ -108,7 +110,7 @@
   }
 
   Future<List<CompletionSuggestion>> getSuggestions() async {
-    if (supportsAvailableSuggestions) {
+    if (_isProtocolVersion1) {
       await driver.waitForSetWithUri('dart:core');
       await driver.waitForSetWithUri('dart:async');
     }
@@ -148,23 +150,20 @@
     }
   }
 
-  @mustCallSuper
+  @override
   Future<void> setUp() async {
-    driver = CompletionDriver(
-      supportsAvailableSuggestions: supportsAvailableSuggestions,
-      projectPath: projectPath,
-      testFilePath: testFilePath,
-      resourceProvider: resourceProvider,
-      serverOptions: serverOptions,
-    );
-    await driver.createProject(packageRoots: packageRoots);
+    super.setUp();
 
-    newPubspecYamlFile(projectPath, '''
-name: project
+    writeTestPackagePubspecYamlFile(r'''
+name: test
 ''');
-    newDotPackagesFile(projectPath, content: '''
-project:${toUri('$projectPath/lib')}
-''');
+
+    driver = CompletionDriver(
+      supportsAvailableSuggestions: _isProtocolVersion1,
+      server: this,
+    );
+    await driver.createProject();
+
     // todo (pq): add logic (possibly to driver) that waits for SDK suggestions
   }
 
@@ -240,9 +239,6 @@
 }
 
 mixin BasicCompletionTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => false;
-
   /// Duplicates (and potentially replaces DeprecatedMemberRelevanceTest).
   Future<void> test_deprecated_member_relevance() async {
     await addTestFile('''
@@ -307,12 +303,6 @@
 }
 
 mixin CompletionWithSuggestionsTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
-  @override
-  String get testFilePath => '$projectPath/lib/test.dart';
-
   Future<void> test_project_filterImports_defaultConstructor() async {
     await addProjectFile('lib/a.dart', r'''
 class A {}
diff --git a/pkg/analysis_server/test/client/impl/abstract_client.dart b/pkg/analysis_server/test/client/impl/abstract_client.dart
deleted file mode 100644
index d1ad27f..0000000
--- a/pkg/analysis_server/test/client/impl/abstract_client.dart
+++ /dev/null
@@ -1,168 +0,0 @@
-// 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.
-
-import 'package:analysis_server/protocol/protocol.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart'
-    hide AnalysisOptions;
-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/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/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/instrumentation/instrumentation.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
-import 'package:matcher/matcher.dart';
-import 'package:meta/meta.dart';
-
-import '../../mocks.dart';
-
-abstract class AbstractClient {
-  final MockServerChannel serverChannel;
-  final TestPluginManager pluginManager;
-  late AnalysisServer server;
-
-  final List<GeneralAnalysisService> generalServices =
-      <GeneralAnalysisService>[];
-  final Map<AnalysisService, List<String>> analysisSubscriptions = {};
-
-  final String projectPath;
-  final String testFilePath;
-  late String testCode;
-
-  final AnalysisServerOptions serverOptions;
-
-  AbstractClient({
-    required this.projectPath,
-    required this.testFilePath,
-    required String sdkPath,
-    required this.serverOptions,
-  })  : serverChannel = MockServerChannel(),
-        pluginManager = TestPluginManager() {
-    server = createAnalysisServer(sdkPath);
-    var notificationStream = serverChannel.notificationController.stream;
-    notificationStream.listen((Notification notification) {
-      processNotification(notification);
-    });
-  }
-
-  AnalysisDomainHandler get analysisHandler =>
-      server.handlers.singleWhere((handler) => handler is AnalysisDomainHandler)
-          as AnalysisDomainHandler;
-
-  AnalysisOptions get analysisOptions => testDriver.analysisOptions;
-
-  CompletionDomainHandler get completionHandler =>
-      server.handlers.whereType<CompletionDomainHandler>().single;
-
-  MemoryResourceProvider get resourceProvider;
-
-  AnalysisDriver get testDriver => server.getAnalysisDriver(testFilePath)!;
-
-  void addAnalysisOptionsFile(String content) {
-    newFile(
-        resourceProvider.pathContext.join(projectPath, 'analysis_options.yaml'),
-        content);
-  }
-
-  void addAnalysisSubscription(AnalysisService service, String file) {
-    // add file to subscription
-    var files = analysisSubscriptions[service];
-    if (files == null) {
-      files = <String>[];
-      analysisSubscriptions[service] = files;
-    }
-    files.add(file);
-    // set subscriptions
-    var request =
-        AnalysisSetSubscriptionsParams(analysisSubscriptions).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
-  void addGeneralAnalysisSubscription(GeneralAnalysisService service) {
-    generalServices.add(service);
-    var request =
-        AnalysisSetGeneralSubscriptionsParams(generalServices).toRequest('0');
-    handleSuccessfulRequest(request);
-  }
-
-  String addTestFile(String content) {
-    newFile(testFilePath, content);
-    testCode = content;
-    return testFilePath;
-  }
-
-  void assertValidId(String id) {
-    expect(id, isNotNull);
-    expect(id.isNotEmpty, isTrue);
-  }
-
-  /// Create an analysis server with the given [sdkPath].
-  AnalysisServer createAnalysisServer(String sdkPath) {
-    createMockSdk(
-      resourceProvider: resourceProvider,
-      root: newFolder(sdkPath),
-    );
-    return AnalysisServer(
-        serverChannel,
-        resourceProvider,
-        serverOptions,
-        DartSdkManager(sdkPath),
-        CrashReportingAttachmentsBuilder.empty,
-        InstrumentationService.NULL_SERVICE);
-  }
-
-  /// Create a project at [projectPath].
-  @mustCallSuper
-  Future<void> createProject({Map<String, String>? packageRoots}) async {
-    newFolder(projectPath);
-
-    await setRoots(
-        included: [projectPath], excluded: [], packageRoots: packageRoots);
-  }
-
-  void expect(actual, matcher, {String reason});
-
-  /// Validate that the given [request] is handled successfully.
-  Response handleSuccessfulRequest(Request request, {RequestHandler? handler}) {
-    handler ??= analysisHandler;
-    var response = handler.handleRequest(request, NotCancelableToken())!;
-    expect(response, isResponseSuccess(request.id));
-    return response;
-  }
-
-  File newFile(String path, String content);
-
-  Folder newFolder(String path);
-
-  void processNotification(Notification notification);
-
-  Future<Response> setRoots({
-    required List<String> included,
-    required List<String> excluded,
-    Map<String, String>? packageRoots,
-  }) async {
-    var request = AnalysisSetAnalysisRootsParams(included, excluded,
-            packageRoots: packageRoots)
-        .toRequest('0');
-    var response = await waitResponse(request);
-    expect(response, isResponseSuccess(request.id));
-    return response;
-  }
-
-  /// Returns a [Future] that completes when the server's analysis is complete.
-  Future waitForTasksFinished() => server.onAnalysisComplete;
-
-  /// Completes with a successful [Response] for the given [request].
-  /// Otherwise fails.
-  Future<Response> waitResponse(Request request,
-      {bool throwOnError = true}) async {
-    return serverChannel.sendRequest(request, throwOnError: throwOnError);
-  }
-}
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 4907915..095db29 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -9,15 +9,12 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart'
     hide AnalysisOptions;
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:matcher/matcher.dart';
 import 'package:meta/meta.dart';
 
 import '../../constants.dart';
-import 'abstract_client.dart';
+import '../../domain_completion_test.dart';
 import 'expect_mixin.dart';
 
 CompletionSuggestion _createCompletionSuggestionFromAvailableSuggestion(
@@ -39,9 +36,16 @@
     }
   }
 
+  // todo (pq): in IDEA, this is "UNKNOWN" but here we need a value; figure out what's up.
+  var suggestionKind = CompletionSuggestionKind.IDENTIFIER;
+  if (suggestion.element.kind == ElementKind.CONSTRUCTOR ||
+      suggestion.element.kind == ElementKind.FUNCTION ||
+      suggestion.element.kind == ElementKind.METHOD) {
+    suggestionKind = CompletionSuggestionKind.INVOCATION;
+  }
+
   return CompletionSuggestion(
-    // todo (pq): in IDEA, this is "UNKNOWN" but here we need a value; figure out what's up.
-    CompletionSuggestionKind.INVOCATION,
+    suggestionKind,
     suggestionSetRelevance + relevanceBoost,
     suggestion.label,
     0,
@@ -56,9 +60,9 @@
   );
 }
 
-class CompletionDriver extends AbstractClient with ExpectMixin {
+class CompletionDriver with ExpectMixin {
+  final PubPackageAnalysisServerTest server;
   final bool supportsAvailableSuggestions;
-  final MemoryResourceProvider _resourceProvider;
 
   Map<String, Completer<void>> receivedSuggestionsCompleters = {};
   List<CompletionSuggestion> suggestions = [];
@@ -78,51 +82,50 @@
 
   CompletionDriver({
     required this.supportsAvailableSuggestions,
-    AnalysisServerOptions? serverOptions,
-    required MemoryResourceProvider resourceProvider,
-    required String projectPath,
-    required String testFilePath,
-  })  : _resourceProvider = resourceProvider,
-        super(
-            serverOptions: serverOptions ?? AnalysisServerOptions(),
-            projectPath: resourceProvider.convertPath(projectPath),
-            testFilePath: resourceProvider.convertPath(testFilePath),
-            sdkPath: resourceProvider.convertPath('/sdk'));
+    required this.server,
+  }) {
+    server.serverChannel.notifications.listen(processNotification);
+  }
 
-  @override
-  MemoryResourceProvider get resourceProvider => _resourceProvider;
-
-  @override
-  String addTestFile(String content, {int? offset}) {
+  void addTestFile(String content, {int? offset}) {
     completionOffset = content.indexOf('^');
     if (offset != null) {
       expect(completionOffset, -1, reason: 'cannot supply offset and ^');
       completionOffset = offset;
-      return super.addTestFile(content);
+      server.newFile(server.testFilePath, content: 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));
     }
-    expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
-    var nextOffset = content.indexOf('^', completionOffset + 1);
-    expect(nextOffset, equals(-1), reason: 'too many ^');
-    return super.addTestFile(content.substring(0, completionOffset) +
-        content.substring(completionOffset + 1));
   }
 
-  @override
-  Future<void> createProject({Map<String, String>? packageRoots}) async {
-    await super.createProject(packageRoots: packageRoots);
+  void assertValidId(String id) {
+    expect(id, isNotNull);
+    expect(id.isNotEmpty, isTrue);
+  }
+
+  Future<void> createProject() async {
+    await server.setRoots(included: [server.workspaceRootPath], excluded: []);
+
     if (supportsAvailableSuggestions) {
-      var request = CompletionSetSubscriptionsParams(
-          [CompletionService.AVAILABLE_SUGGESTION_SETS]).toRequest('0');
-      handleSuccessfulRequest(request, handler: completionHandler);
+      await server.handleRequest(
+        CompletionSetSubscriptionsParams([
+          CompletionService.AVAILABLE_SUGGESTION_SETS,
+        ]).toRequest('0'),
+      );
     }
   }
 
   Future<List<CompletionSuggestion>> getSuggestions() async {
-    await waitForTasksFinished();
-
-    var request = CompletionGetSuggestionsParams(testFilePath, completionOffset)
-        .toRequest('0');
-    var response = await waitResponse(request);
+    var request = CompletionGetSuggestionsParams(
+      server.convertPath(server.testFilePath),
+      completionOffset,
+    ).toRequest('0');
+    var response = await server.handleRequest(request);
     var result = CompletionGetSuggestionsResult.fromResponse(response);
     completionId = result.id;
     assertValidId(completionId);
@@ -131,30 +134,19 @@
   }
 
   Future<List<CompletionSuggestion>> getSuggestions2() async {
-    await waitForTasksFinished();
-
     var request = CompletionGetSuggestions2Params(
-      testFilePath,
+      server.convertPath(server.testFilePath),
       completionOffset,
       1 << 16,
       timeout: 60 * 1000,
     ).toRequest('0');
-    var response = await waitResponse(request);
+    var response = await server.handleRequest(request);
     var result = CompletionGetSuggestions2Result.fromResponse(response);
     replacementOffset = result.replacementOffset;
     replacementLength = result.replacementLength;
     return result.suggestions;
   }
 
-  @override
-  File newFile(String path, String content) =>
-      resourceProvider.newFile(resourceProvider.convertPath(path), content);
-
-  @override
-  Folder newFolder(String path) =>
-      resourceProvider.newFolder(resourceProvider.convertPath(path));
-
-  @override
   @mustCallSuper
   Future<void> processNotification(Notification notification) async {
     if (notification.event == COMPLETION_RESULTS) {
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index fe0da92..21b79b3 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -25,6 +25,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'analysis_abstract.dart';
+import 'domain_completion_test.dart';
 import 'mocks.dart';
 
 void main() {
@@ -44,8 +45,6 @@
 
   String get myPackageTestFilePath => '$myPackageLibPath/test.dart';
 
-  String get workspaceRootPath => '/workspace';
-
   @override
   void setUp() {
     super.setUp();
@@ -347,15 +346,8 @@
 
 @reflectiveTest
 class AnalysisDomainPubTest extends _AnalysisDomainTest {
-  String get testFilePath => '$testPackageLibPath/test.dart';
-
-  String get testPackageLibPath => '$testPackageRootPath/lib';
-
-  String get testPackageRootPath => '$workspaceRootPath/test';
-
-  String get workspaceRootPath => '/home';
-
   Future<void> test_fileSystem_addFile_analysisOptions() async {
+    deleteTestPackageAnalysisOptionsFile();
     var a_path = '$testPackageLibPath/a.dart';
     var b_path = '$testPackageLibPath/b.dart';
 
@@ -389,6 +381,7 @@
   }
 
   Future<void> test_fileSystem_addFile_analysisOptions_analysis() async {
+    deleteTestPackageAnalysisOptionsFile();
     var a_path = '$testPackageLibPath/a.dart';
     var options_path = '$testPackageRootPath/analysis_options.yaml';
 
@@ -460,16 +453,15 @@
   }
 
   Future<void> test_fileSystem_addFile_dart_dotFolder() async {
-    var a_path = '$projectPath/lib/.foo/a.dart';
-    var b_path = '$projectPath/lib/b.dart';
+    var a_path = '$testPackageLibPath/.foo/a.dart';
+    var b_path = '$testPackageLibPath/b.dart';
 
     newFile(b_path, content: r'''
 import '.foo/a.dart';
 void f(A a) {}
 ''');
 
-    await createProject();
-    await pumpEventQueue();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await server.onAnalysisComplete;
 
     // We don't have a.dart, so the import cannot be resolved.
@@ -489,10 +481,10 @@
   }
 
   Future<void> test_fileSystem_addFile_dart_excluded() async {
-    var a_path = '$projectPath/lib/a.dart';
-    var b_path = '$projectPath/lib/b.dart';
+    var a_path = '$testPackageLibPath/a.dart';
+    var b_path = '$testPackageLibPath/b.dart';
 
-    newAnalysisOptionsYamlFile(projectPath, content: r'''
+    newAnalysisOptionsYamlFile(testPackageRootPath, content: r'''
 analyzer:
   exclude:
     - "**/a.dart"
@@ -503,8 +495,7 @@
 void f(A a) {}
 ''');
 
-    await createProject();
-    await pumpEventQueue();
+    await setRoots(included: [workspaceRootPath], excluded: []);
     await server.onAnalysisComplete;
 
     // We don't have a.dart, so the import cannot be resolved.
@@ -524,6 +515,7 @@
   }
 
   Future<void> test_fileSystem_addFile_dotPackagesFile() async {
+    deleteTestPackageConfigJsonFile();
     var aaaLibPath = '/packages/aaa/lib';
     var a_path = '$aaaLibPath/a.dart';
 
@@ -562,12 +554,6 @@
 
     newFile('$testPackageLibPath/a.dart', content: '');
 
-    // Make sure that it is a package.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder(),
-    );
-
     await setRoots(included: [workspaceRootPath], excluded: []);
 
     // No `fix_data.yaml` to analyze yet.
@@ -605,9 +591,9 @@
     assertHasErrors(testFilePath);
 
     // Write `package_config.json`, recreate analysis contexts.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: aaaRootPath),
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRootPath),
     );
 
     await pumpEventQueue();
@@ -857,6 +843,7 @@
   }
 
   Future<void> test_fileSystem_changeFile_dotPackagesFile() async {
+    deleteTestPackageConfigJsonFile();
     var aaaLibPath = '/packages/aaa/lib';
     var a_path = '$aaaLibPath/a.dart';
 
@@ -898,12 +885,6 @@
 
     newFile('$testPackageLibPath/a.dart', content: '');
 
-    // Make sure that it is a package.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder(),
-    );
-
     // This file has an error.
     newFile(path, content: '0: 1');
 
@@ -935,12 +916,6 @@
 class A {}
 ''');
 
-    // Write the empty file, without `package:aaa`.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder(),
-    );
-
     newFile(testFilePath, content: '''
 import 'package:aaa/a.dart';
 void f(A a) {}
@@ -949,13 +924,14 @@
     await setRoots(included: [workspaceRootPath], excluded: []);
     await server.onAnalysisComplete;
 
+    // The default `package_config.json` is without `package:aaa`.
     // We cannot resolve `package:aaa/a.dart`
     assertHasErrors(testFilePath);
 
     // Write `package_config.json`, recreate analysis contexts.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: aaaRootPath),
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRootPath),
     );
 
     await pumpEventQueue();
@@ -1090,6 +1066,7 @@
   }
 
   Future<void> test_fileSystem_deleteFile_dotPackagesFile() async {
+    deleteTestPackageConfigJsonFile();
     var aaaLibPath = '/packages/aaa/lib';
     var a_path = '$aaaLibPath/a.dart';
 
@@ -1130,12 +1107,6 @@
 
     newFile('$testPackageLibPath/a.dart', content: '');
 
-    // Make sure that it is a package.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder(),
-    );
-
     // This file has an error.
     newFile(path, content: '0: 1');
 
@@ -1161,9 +1132,9 @@
 ''');
 
     // Write the empty file, without `package:aaa`.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: aaaRootPath),
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRootPath),
     );
 
     newFile(testFilePath, content: '''
@@ -1193,6 +1164,7 @@
   }
 
   Future<void> test_setRoots_dotPackagesFile() async {
+    deleteTestPackageConfigJsonFile();
     var aaaLibPath = '/packages/aaa/lib';
     var a_path = '$aaaLibPath/a.dart';
 
@@ -1373,13 +1345,7 @@
   Future<void> test_setRoots_notDartFile_fixDataYaml() async {
     var path = '$testPackageLibPath/fix_data.yaml';
 
-    // Make sure that it is a package.
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder(),
-    );
-
-    // So, `lib/fix_data.yaml` will be analyzed.
+    // `lib/fix_data.yaml` will be analyzed.
     newFile(path, content: '0: 1');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
@@ -1395,9 +1361,9 @@
 class A {}
 ''');
 
-    writePackageConfig(
-      '$testPackageRootPath/.dart_tool/package_config.json',
-      PackageConfigFileBuilder()..add(name: 'aaa', rootPath: aaaRootPath),
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'aaa', rootPath: aaaRootPath),
     );
 
     newFile(testFilePath, content: '''
@@ -1454,8 +1420,7 @@
         InstrumentationService.NULL_SERVICE);
     handler = AnalysisDomainHandler(server);
     // listen for notifications
-    var notificationStream = serverChannel.notificationController.stream;
-    notificationStream.listen((Notification notification) {
+    serverChannel.notifications.listen((Notification notification) {
       if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
         var decoded = AnalysisErrorsParams.fromNotification(notification);
         filesErrors[decoded.file] = decoded.errors;
@@ -1763,7 +1728,7 @@
   }
 }
 
-class _AnalysisDomainTest extends AbstractAnalysisTest {
+class _AnalysisDomainTest extends PubPackageAnalysisServerTest {
   final Map<String, List<AnalysisError>> filesErrors = {};
 
   /// The files for which `analysis.flushResults` was received.
@@ -1801,10 +1766,6 @@
     }
   }
 
-  void writePackageConfig(String path, PackageConfigFileBuilder config) {
-    newFile(path, content: config.toContent(toUriStr: toUriStr));
-  }
-
   void _assertAnalyzedFiles({
     required List<String> hasErrors,
     List<String> noErrors = const [],
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 82c6e44..37bf033 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -14,6 +14,7 @@
 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';
@@ -39,6 +40,52 @@
   });
 }
 
+/// 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 {
@@ -149,7 +196,7 @@
             testFilePathPlatform, 0, 'Random', '[foo]:bar')
         .toRequest('0');
 
-    var response = await _handleRequest(request);
+    var response = await handleRequest(request);
     expect(response.error?.code, RequestErrorCode.INVALID_PARAMETER);
     // TODO(scheglov) Check that says "libraryUri".
   }
@@ -161,7 +208,7 @@
         CompletionGetSuggestionDetails2Params('foo', 0, 'Random', 'dart:math')
             .toRequest('0');
 
-    var response = await _handleRequest(request);
+    var response = await handleRequest(request);
     expect(response.error?.code, RequestErrorCode.INVALID_FILE_PATH_FORMAT);
   }
 
@@ -1162,10 +1209,14 @@
     check(response).suggestions.matches([
       (suggestion) => suggestion
         ..completion.isEqualTo('foo01')
-        ..isGetter,
+        ..isGetter
+        ..libraryUri.isNull
+        ..isNotImported.isNull,
       (suggestion) => suggestion
         ..completion.isEqualTo('foo02')
-        ..isGetter,
+        ..isGetter
+        ..libraryUri.isNull
+        ..isNotImported.isNull,
     ]);
   }
 
@@ -1609,6 +1660,29 @@
     ]);
   }
 
+  Future<void> test_prefixed_importPrefix_class() async {
+    await _configureWithWorkspaceRoot();
+
+    var response = await _getTestCodeSuggestions('''
+import 'dart:math' as math;
+
+void f() {
+  math.Rand^
+}
+''');
+
+    check(response)
+      ..assertComplete()
+      ..hasReplacement(left: 4);
+
+    check(response).suggestions.withElementClass.matches([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('Random')
+        ..libraryUri.isEqualTo('dart:math')
+        ..isNotImported.isNull,
+    ]);
+  }
+
   Future<void> test_unprefixed_filters() async {
     await _configureWithWorkspaceRoot();
 
@@ -1664,10 +1738,14 @@
     check(response).suggestions.withElementClass.matches([
       (suggestion) => suggestion
         ..completion.isEqualTo('A01')
-        ..isClass,
+        ..isClass
+        ..libraryUri.isEqualTo('package:test/a.dart')
+        ..isNotImported.isNull,
       (suggestion) => suggestion
         ..completion.isEqualTo('A02')
-        ..isClass,
+        ..isClass
+        ..libraryUri.isEqualTo('package:test/b.dart')
+        ..isNotImported.isNull,
     ]);
   }
 
@@ -1698,10 +1776,14 @@
     check(response).suggestions.matches([
       (suggestion) => suggestion
         ..completion.isEqualTo('foo01')
-        ..isTopLevelVariable,
+        ..isTopLevelVariable
+        ..libraryUri.isEqualTo('package:test/a.dart')
+        ..isNotImported.isNull,
       (suggestion) => suggestion
         ..completion.isEqualTo('foo02')
-        ..isTopLevelVariable,
+        ..isTopLevelVariable
+        ..libraryUri.isEqualTo('package:test/b.dart')
+        ..isNotImported.isNull,
     ]);
   }
 
@@ -1724,7 +1806,8 @@
     check(response).suggestions.withElementClass.matches([
       (suggestion) => suggestion
         ..completion.isEqualTo('math.Random')
-        ..libraryUriToImport.isNull,
+        ..libraryUri.isEqualTo('dart:math')
+        ..isNotImported.isNull,
     ]);
   }
 
@@ -1918,7 +2001,7 @@
       0,
       1 << 10,
     ).toRequest(id);
-    var futureResponse = _handleRequest(request);
+    var futureResponse = handleRequest(request);
     return RequestWithFutureResponse(offset, request, futureResponse);
   }
 }
@@ -2058,8 +2141,8 @@
   Future<void> test_ArgumentList_imported_function_named_param_label3() async {
     addTestFile('void f() { int.parse("16", ^: 16);}');
     await getSuggestions();
-    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ');
-    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ');
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix');
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError');
     expect(suggestions, hasLength(2));
   }
 
@@ -2846,6 +2929,12 @@
     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';
@@ -2862,6 +2951,20 @@
 
   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,
@@ -2877,6 +2980,7 @@
     );
   }
 
+  @mustCallSuper
   void setUp() {
     serverChannel = MockServerChannel();
 
@@ -2888,6 +2992,14 @@
 
     writeTestPackageConfig();
 
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(
+        experiments: experiments,
+      ),
+    );
+
+    serverChannel.notifications.listen(processNotification);
+
     server = AnalysisServer(
       serverChannel,
       resourceProvider,
@@ -2907,6 +3019,13 @@
     );
   }
 
+  void writeTestPackageAnalysisOptionsFile(AnalysisOptionsFileConfig config) {
+    newAnalysisOptionsYamlFile(
+      testPackageRootPath,
+      content: config.toContent(),
+    );
+  }
+
   void writeTestPackageConfig({
     PackageConfigFileBuilder? config,
     String? languageVersion,
@@ -2935,13 +3054,9 @@
     await server.onAnalysisComplete;
   }
 
-  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);
+    var response = await handleRequest(request);
     expect(response, isResponseSuccess(request.id));
     return response;
   }
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 4ae4511..74507b0 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 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_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
@@ -27,15 +28,6 @@
   });
 }
 
-/// Wrapper around the test package's `fail` function.
-///
-/// Unlike the test package's `fail` function, this function is not annotated
-/// with @alwaysThrows, so we can call it at the top of a test method without
-/// causing the rest of the method to be flagged as dead code.
-void _fail(String message) {
-  fail(message);
-}
-
 @reflectiveTest
 class ConvertGetterMethodToMethodTest extends _AbstractGetRefactoring_Test {
   Future<void> test_function() {
@@ -1325,9 +1317,7 @@
 class MoveFileTest extends _AbstractGetRefactoring_Test {
   late MoveFileOptions options;
 
-  @failingTest
-  Future<void> test_OK() {
-    _fail('The move file refactoring is not supported under the new driver');
+  Future<void> test_file_OK() {
     newFile('/project/bin/lib.dart');
     addTestFile('''
 import 'dart:math';
@@ -1335,16 +1325,59 @@
 ''');
     _setOptions('/project/test.dart');
     return assertSuccessfulRefactoring(() {
-      return _sendMoveRequest();
+      return _sendMoveRequest(testFile);
     }, '''
 import 'dart:math';
 import 'bin/lib.dart';
 ''');
   }
 
-  Future<Response> _sendMoveRequest() {
+  Future<void> test_folder_cancel() {
+    newFile('/project/bin/original_folder/file.dart');
+    addTestFile('''
+import 'dart:math';
+import 'original_folder/file.dart';
+''');
+    _setOptions('/project/bin/new_folder');
+    return assertEmptySuccessfulRefactoring(() async {
+      return _sendAndCancelMoveRequest(
+          convertPath('/project/bin/original_folder'));
+    });
+  }
+
+  Future<void> test_folder_OK() {
+    newFile('/project/bin/original_folder/file.dart');
+    addTestFile('''
+import 'dart:math';
+import 'original_folder/file.dart';
+''');
+    _setOptions('/project/bin/new_folder');
+    return assertSuccessfulRefactoring(() async {
+      return _sendMoveRequest(convertPath('/project/bin/original_folder'));
+    }, '''
+import 'dart:math';
+import 'new_folder/file.dart';
+''');
+  }
+
+  Future<Response> _cancelMoveRequest() {
+    // 0 is the id from _sendMoveRequest
+    // 1 is another aribtrary id for the cancel request
+    var request = ServerCancelRequestParams('0').toRequest('1');
+    return serverChannel.sendRequest(request);
+  }
+
+  Future<Response> _sendAndCancelMoveRequest(String item) async {
+    final responses = await Future.wait([
+      _sendMoveRequest(item),
+      _cancelMoveRequest(),
+    ]);
+    return responses.first;
+  }
+
+  Future<Response> _sendMoveRequest(String item) {
     var request = EditGetRefactoringParams(
-            RefactoringKind.MOVE_FILE, testFile, 0, 0, false,
+            RefactoringKind.MOVE_FILE, item, 0, 0, false,
             options: options)
         .toRequest('0');
     return serverChannel.sendRequest(request);
@@ -1860,6 +1893,58 @@
     );
   }
 
+  Future<void> test_enum_constructor_add_toSynthetic() {
+    addTestFile('''
+enum E {
+  v1, v2.new()
+}
+''');
+    return assertSuccessfulRefactoring(
+      () {
+        return sendRenameRequest('new()', 'newName');
+      },
+      '''
+enum E {
+  v1.newName(), v2.newName();
+
+  const E.newName();
+}
+''',
+      feedbackValidator: (feedback) {
+        var renameFeedback = feedback as RenameFeedback;
+        expect(renameFeedback.offset, 17);
+        expect(renameFeedback.length, 4);
+      },
+    );
+  }
+
+  Future<void> test_enum_constructor_change() {
+    addTestFile('''
+enum E {
+  v1.test(), v2.test();
+
+  const E.test();
+}
+''');
+    return assertSuccessfulRefactoring(
+      () {
+        return sendRenameRequest('test();', 'newName');
+      },
+      '''
+enum E {
+  v1.newName(), v2.newName();
+
+  const E.newName();
+}
+''',
+      feedbackValidator: (feedback) {
+        var renameFeedback = feedback as RenameFeedback;
+        expect(renameFeedback.offset, 24);
+        expect(renameFeedback.length, 5);
+      },
+    );
+  }
+
   Future<void> test_feedback() {
     addTestFile('''
 class Test {}
@@ -2201,6 +2286,26 @@
 class _AbstractGetRefactoring_Test extends AbstractAnalysisTest {
   bool shouldWaitForFullAnalysis = true;
 
+  Future assertEmptySuccessfulRefactoring(
+      Future<Response> Function() requestSender,
+      {void Function(RefactoringFeedback?)? feedbackValidator}) async {
+    var result = await getRefactoringResult(requestSender);
+    assertResultProblemsOK(result);
+    if (feedbackValidator != null) {
+      feedbackValidator(result.feedback);
+    }
+    assertNoTestRefactoringResult(result);
+  }
+
+  /// Asserts that the given [EditGetRefactoringResult] does not have a change
+  /// for [testFile].
+  void assertNoTestRefactoringResult(EditGetRefactoringResult result) {
+    var change = result.change!;
+    if (change.edits.any((edit) => edit.file == testFile)) {
+      fail('Found a SourceFileEdit for $testFile in $change');
+    }
+  }
+
   /// Asserts that [problems] has a single ERROR problem.
   void assertResultProblemsError(List<RefactoringProblem> problems,
       [String? message]) {
@@ -2292,7 +2397,9 @@
   Future<void> setUp() async {
     super.setUp();
     await createProject();
-    handler = EditDomainHandler(server);
-    server.handlers = [handler];
+    server.handlers = [
+      EditDomainHandler(server),
+      ServerDomainHandler(server),
+    ];
   }
 }
diff --git a/pkg/analysis_server/test/integration/edit/import_elements_test.dart b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
index 43ecb92..40e370d 100644
--- a/pkg/analysis_server/test/integration/edit/import_elements_test.dart
+++ b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
@@ -4,8 +4,8 @@
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/src/util/sdk.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
-import 'package:cli_util/cli_util.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
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 c12b23d..bf671b2 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -500,9 +500,10 @@
   ///   the normal package: URI resolution mechanism.
   ///
   ///   If a package root is a file, then the analyzer will behave as though
-  ///   that file is a ".packages" file in the source directory. The effect is
-  ///   the same as specifying the file as a "--packages" parameter to the Dart
-  ///   VM when executing any Dart file inside the source directory.
+  ///   that file is a ".dart_tool/package_config.json" file in the source
+  ///   directory. The effect is the same as specifying the file as a
+  ///   "--packages" parameter to the Dart VM when executing any Dart file
+  ///   inside the source directory.
   ///
   ///   Files in any directories that are not overridden by this mapping have
   ///   their package: URI's resolved using the normal pubspec.yaml mechanism.
@@ -993,6 +994,11 @@
   ///   suggestions after filtering is greater than the maxResults, then
   ///   isIncomplete is set to true.
   ///
+  /// completionCaseMatchingMode: CompletionCaseMatchingMode (optional)
+  ///
+  ///   The mode of code completion being invoked. If no value is provided,
+  ///   MATCH_FIRST_CHAR will be assumed.
+  ///
   /// Returns
   ///
   /// replacementOffset: int
@@ -1029,10 +1035,12 @@
   ///   requested maxResults.
   Future<CompletionGetSuggestions2Result> sendCompletionGetSuggestions2(
       String file, int offset, int maxResults,
-      {CompletionMode? completionMode,
+      {CompletionCaseMatchingMode? completionCaseMatchingMode,
+      CompletionMode? completionMode,
       int? invocationCount,
       int? timeout}) async {
     var params = CompletionGetSuggestions2Params(file, offset, maxResults,
+            completionCaseMatchingMode: completionCaseMatchingMode,
             completionMode: completionMode,
             invocationCount: invocationCount,
             timeout: timeout)
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 1e7cde4..ddf2b9b 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -230,6 +230,16 @@
 final Matcher isClosingLabel = LazyMatcher(() => MatchesJsonObject(
     'ClosingLabel', {'offset': isInt, 'length': isInt, 'label': isString}));
 
+/// CompletionCaseMatchingMode
+///
+/// enum {
+///   FIRST_CHAR
+///   ALL_CHARS
+///   NONE
+/// }
+final Matcher isCompletionCaseMatchingMode = MatchesEnum(
+    'CompletionCaseMatchingMode', ['FIRST_CHAR', 'ALL_CHARS', 'NONE']);
+
 /// CompletionId
 ///
 /// String
@@ -305,6 +315,7 @@
           'hasNamedParameters': isBool,
           'parameterName': isString,
           'parameterType': isString,
+          'libraryUri': isString,
           'isNotImported': isBool
         }));
 
@@ -384,8 +395,7 @@
       'parameters': isString,
       'returnType': isString,
       'typeParameters': isString,
-      'aliasedType': isString,
-      'libraryUri': isString
+      'aliasedType': isString
     }));
 
 /// ElementDeclaration
@@ -2148,17 +2158,19 @@
 ///   "file": FilePath
 ///   "offset": int
 ///   "maxResults": int
+///   "completionCaseMatchingMode": optional CompletionCaseMatchingMode
 /// }
-final Matcher isCompletionGetSuggestions2Params = LazyMatcher(() =>
-    MatchesJsonObject('completion.getSuggestions2 params', {
-      'file': isFilePath,
-      'offset': isInt,
-      'maxResults': isInt
-    }, optionalFields: {
-      'completionMode': isCompletionMode,
-      'invocationCount': isInt,
-      'timeout': isInt
-    }));
+final Matcher isCompletionGetSuggestions2Params =
+    LazyMatcher(() => MatchesJsonObject('completion.getSuggestions2 params', {
+          'file': isFilePath,
+          'offset': isInt,
+          'maxResults': isInt
+        }, optionalFields: {
+          'completionCaseMatchingMode': isCompletionCaseMatchingMode,
+          'completionMode': isCompletionMode,
+          'invocationCount': isInt,
+          'timeout': isInt
+        }));
 
 /// completion.getSuggestions2 result
 ///
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 925b13b..9a541dc 100644
--- a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
@@ -341,7 +341,7 @@
   }
 
   Future<void> test_outsideRoot() async {
-    final otherFilePath = '/home/otherProject/foo.dart';
+    final otherFilePath = convertPath('/home/otherProject/foo.dart');
     final otherFileUri = Uri.file(otherFilePath);
     newFile(otherFilePath, content: 'bad code to create error');
     await initialize(
diff --git a/pkg/analysis_server/test/lsp/completion.dart b/pkg/analysis_server/test/lsp/completion.dart
index 6d70a26..ea8d26b 100644
--- a/pkg/analysis_server/test/lsp/completion.dart
+++ b/pkg/analysis_server/test/lsp/completion.dart
@@ -101,10 +101,10 @@
     return null;
   }
 
-  /// Replaces the LSP snippet placeholder '${0:}' with '^' for easier verifying
+  /// Replaces the LSP snippet placeholder '$0' with '^' for easier verifying
   /// of the cursor position in completions.
   String withCaret(String contents, InsertTextFormat? format) =>
       format == InsertTextFormat.Snippet
-          ? contents.replaceFirst(r'${0:}', '^')
+          ? contents.replaceFirst(r'$0', '^')
           : contents;
 }
diff --git a/pkg/analysis_server/test/lsp/completion_dart_test.dart b/pkg/analysis_server/test/lsp/completion_dart_test.dart
index 01f2b09..1b9520b 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/flutter_snippet_producers.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:collection/collection.dart';
@@ -19,6 +20,9 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionTest);
+    defineReflectiveTests(DartSnippetCompletionTest);
+    defineReflectiveTests(FlutterSnippetCompletionTest);
+    defineReflectiveTests(FlutterSnippetCompletionWithNullSafetyTest);
     defineReflectiveTests(CompletionTestWithNullSafetyTest);
   });
 }
@@ -354,7 +358,7 @@
     // Ensure the snippet comes through in the expected format with the expected
     // placeholders.
     expect(item.insertTextFormat, equals(InsertTextFormat.Snippet));
-    expect(item.insertText, equals('setState(() {\n      \${0:}\n    \\});'));
+    expect(item.insertText, equals('setState(() {\n      \$0\n    });'));
     final textEdit = toTextEdit(item.textEdit!);
     expect(textEdit.newText, equals(item.insertText));
     expect(textEdit.range, equals(rangeFromMarkers(content)));
@@ -396,9 +400,9 @@
     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 and a tabstop inside.
+    // 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:})'));
+    expect(item.insertText, equals(r'myFunction($0)'));
     final textEdit = toTextEdit(item.textEdit!);
     expect(textEdit.newText, equals(item.insertText));
     expect(textEdit.range, equals(rangeFromMarkers(content)));
@@ -1143,9 +1147,9 @@
     // Ensure the snippet comes through in the expected format with the expected
     // placeholder.
     expect(item.insertTextFormat, equals(InsertTextFormat.Snippet));
-    expect(item.insertText, equals(r'one: ${0:},'));
+    expect(item.insertText, equals(r'one: $0,'));
     final textEdit = toTextEdit(item.textEdit!);
-    expect(textEdit.newText, equals(r'one: ${0:},'));
+    expect(textEdit.newText, equals(r'one: $0,'));
     expect(
       textEdit.range,
       equals(Range(
@@ -2363,3 +2367,411 @@
     expect(completion.detail, '(int? a, [int b = 1]) → String?');
   }
 }
+
+@reflectiveTest
+class DartSnippetCompletionTest extends SnippetCompletionTest {
+  Future<void> test_snippets_disabled() async {
+    final content = '^';
+
+    // Advertise support (this is done by the editor), but with the user
+    // preference disabled.
+    await provideConfig(
+      () => initialize(
+        textDocumentCapabilities: withCompletionItemSnippetSupport(
+            emptyTextDocumentClientCapabilities),
+        workspaceCapabilities:
+            withConfigurationSupport(emptyWorkspaceClientCapabilities),
+      ),
+      {'enableSnippets': true},
+    );
+
+    await expectNoSnippet(
+      content,
+      FlutterStatelessWidgetSnippetProducer.prefix,
+    );
+  }
+
+  Future<void>
+      test_snippets_flutterStateless_notAvailable_notFlutterProject() async {
+    final content = '''
+class A {}
+
+stle^
+
+class B {}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    await expectNoSnippet(
+      content,
+      FlutterStatelessWidgetSnippetProducer.prefix,
+    );
+  }
+
+  Future<void> test_snippets_notSupported() async {
+    final content = '^';
+
+    // If we don't send support for Snippet CompletionItem kinds, we don't
+    // expect any snippets at all.
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+    expect(res.any((c) => c.kind == CompletionItemKind.Snippet), isFalse);
+  }
+}
+
+@reflectiveTest
+class FlutterSnippetCompletionTest extends SnippetCompletionTest {
+  /// Nullability suffix expected in this test class.
+  ///
+  /// Used to allow all tests to be run in both modes without having to
+  /// duplicate all tests ([FlutterSnippetCompletionWithNullSafetyTest]
+  /// overrides this).
+  String get questionSuffix => '';
+
+  @override
+  void setUp() {
+    super.setUp();
+    writePackageConfig(
+      projectFolderPath,
+      flutter: true,
+    );
+  }
+
+  Future<void> test_snippets_flutterStateful() async {
+    final content = '''
+import 'package:flutter/widgets.dart';
+
+class A {}
+
+stful^
+
+class B {}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: FlutterStatefulWidgetSnippetProducer.prefix,
+      label: FlutterStatefulWidgetSnippetProducer.label,
+    );
+
+    expect(updated, '''
+import 'package:flutter/widgets.dart';
+
+class A {}
+
+class \${1:MyWidget} extends StatefulWidget {
+  const \${1:MyWidget}({Key$questionSuffix key}) : super(key: key);
+
+  @override
+  State<\${1:MyWidget}> createState() => _\${1:MyWidget}State();
+}
+
+class _\${1:MyWidget}State extends State<\${1:MyWidget}> {
+  @override
+  Widget build(BuildContext context) {
+    \$0
+  }
+}
+
+class B {}
+''');
+  }
+
+  Future<void> test_snippets_flutterStatefulWithAnimationController() async {
+    final content = '''
+import 'package:flutter/widgets.dart';
+
+class A {}
+
+stanim^
+
+class B {}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix:
+          FlutterStatefulWidgetWithAnimationControllerSnippetProducer.prefix,
+      label: FlutterStatefulWidgetWithAnimationControllerSnippetProducer.label,
+    );
+
+    expect(updated, '''
+import 'package:flutter/widgets.dart';
+
+class A {}
+
+class \${1:MyWidget} extends StatefulWidget {
+  const \${1:MyWidget}({Key$questionSuffix key}) : super(key: key);
+
+  @override
+  State<\${1:MyWidget}> createState() => _\${1:MyWidget}State();
+}
+
+class _\${1:MyWidget}State extends State<\${1:MyWidget}>
+    with SingleTickerProviderStateMixin {
+  late AnimationController _controller;
+
+  @override
+  void initState() {
+    super.initState();
+    _controller = AnimationController(vsync: this);
+  }
+
+  @override
+  void dispose() {
+    super.dispose();
+    _controller.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    \$0
+  }
+}
+
+class B {}
+''');
+  }
+
+  Future<void> test_snippets_flutterStateless() async {
+    final content = '''
+import 'package:flutter/widgets.dart';
+
+class A {}
+
+stle^
+
+class B {}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: FlutterStatelessWidgetSnippetProducer.prefix,
+      label: FlutterStatelessWidgetSnippetProducer.label,
+    );
+
+    expect(updated, '''
+import 'package:flutter/widgets.dart';
+
+class A {}
+
+class \${1:MyWidget} extends StatelessWidget {
+  const \${1:MyWidget}({Key$questionSuffix key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    \$0
+  }
+}
+
+class B {}
+''');
+  }
+
+  Future<void> test_snippets_flutterStateless_addsImports() async {
+    final content = '''
+class A {}
+
+stle^
+
+class B {}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: FlutterStatelessWidgetSnippetProducer.prefix,
+      label: FlutterStatelessWidgetSnippetProducer.label,
+    );
+
+    expect(updated, '''
+import 'package:flutter/src/foundation/key.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+class A {}
+
+class \${1:MyWidget} extends StatelessWidget {
+  const \${1:MyWidget}({Key$questionSuffix key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    \$0
+  }
+}
+
+class B {}
+''');
+  }
+
+  Future<void> test_snippets_flutterStateless_addsImports_onlyPrefix() async {
+    final content = '''
+stless^
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: FlutterStatelessWidgetSnippetProducer.prefix,
+      label: FlutterStatelessWidgetSnippetProducer.label,
+    );
+
+    expect(updated, '''
+import 'package:flutter/src/foundation/key.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+class \${1:MyWidget} extends StatelessWidget {
+  const \${1:MyWidget}({Key$questionSuffix key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    \$0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_flutterStateless_addsImports_zeroOffset() async {
+    final content = '''
+^
+'''; // Deliberate trailing newline to ensure imports aren't inserted at "end".
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final updated = await expectAndApplySnippet(
+      content,
+      prefix: FlutterStatelessWidgetSnippetProducer.prefix,
+      label: FlutterStatelessWidgetSnippetProducer.label,
+    );
+
+    expect(updated, '''
+import 'package:flutter/src/foundation/key.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+class \${1:MyWidget} extends StatelessWidget {
+  const \${1:MyWidget}({Key$questionSuffix key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    \$0
+  }
+}
+''');
+  }
+
+  Future<void> test_snippets_flutterStateless_notAvailable_notTopLevel() async {
+    final content = '''
+class A {
+
+  stle^
+
+}
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    await expectNoSnippet(
+      content,
+      FlutterStatelessWidgetSnippetProducer.prefix,
+    );
+  }
+
+  Future<void> test_snippets_flutterStateless_outsideAnalysisRoot() async {
+    final content = '''
+stle^
+''';
+
+    await initializeWithSnippetSupportAndPreviewFlag();
+    final otherFileUri = Uri.file(convertPath('/other/file.dart'));
+    await openFile(otherFileUri, withoutMarkers(content));
+    final res = await getCompletion(otherFileUri, positionFromMarker(content));
+    final snippetItems = res.where((c) => c.kind == CompletionItemKind.Snippet);
+    expect(snippetItems, hasLength(0));
+  }
+}
+
+@reflectiveTest
+class FlutterSnippetCompletionWithNullSafetyTest
+    extends FlutterSnippetCompletionTest {
+  @override
+  String get questionSuffix => '?';
+
+  @override
+  String get testPackageLanguageVersion => latestLanguageVersion;
+}
+
+abstract class SnippetCompletionTest extends AbstractLspAnalysisServerTest
+    with CompletionTestMixin {
+  /// Expect that there is a snippet for [prefix] at [position] with the label
+  /// [label] and return the results of applying it to [content].
+  Future<String> expectAndApplySnippet(
+    String content, {
+    required String prefix,
+    required String label,
+  }) async {
+    final snippet = await expectSnippet(
+      content,
+      prefix: prefix,
+      label: label,
+    );
+
+    // Also apply the edit and check that it went in the right place with the
+    // correct formatting. Edit groups will just appear in the raw textmate
+    // snippet syntax here, as we don't do any special handling of them (and
+    // assume what's coded here is correct, and that the client will correctly
+    // interpret them).
+    final updated = applyTextEdits(
+      withoutMarkers(content),
+      [toTextEdit(snippet.textEdit!)]
+          .followedBy(snippet.additionalTextEdits!)
+          .toList(),
+    );
+    return updated;
+  }
+
+  /// Expect that there is no snippet for [prefix] at the position of `^` within
+  /// [content].
+  Future<void> expectNoSnippet(
+    String content,
+    String prefix,
+  ) async {
+    await openFile(mainFileUri, withoutMarkers(content));
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+    final hasSnippet = res.any((c) => c.filterText == prefix);
+    expect(hasSnippet, isFalse);
+  }
+
+  /// Expect that there is a snippet for [prefix] with the label [label] at
+  /// [position] in [content].
+  Future<CompletionItem> expectSnippet(
+    String content, {
+    required String prefix,
+    required String label,
+  }) async {
+    await openFile(mainFileUri, withoutMarkers(content));
+    final res = await getCompletion(mainFileUri, positionFromMarker(content));
+    final item = res.singleWhere(
+      (c) => c.filterText == prefix && c.label == label,
+    );
+    expect(item.insertTextFormat, InsertTextFormat.Snippet);
+    expect(item.insertText, isNull);
+    expect(item.textEdit, isNotNull);
+    return item;
+  }
+
+  Future<void> initializeWithSnippetSupport() => initialize(
+        textDocumentCapabilities: withCompletionItemSnippetSupport(
+            emptyTextDocumentClientCapabilities),
+      );
+
+  Future<void> initializeWithSnippetSupportAndPreviewFlag() => provideConfig(
+        () => initialize(
+          textDocumentCapabilities: withCompletionItemSnippetSupport(
+              emptyTextDocumentClientCapabilities),
+          workspaceCapabilities:
+              withConfigurationSupport(emptyWorkspaceClientCapabilities),
+        ),
+        {'previewEnableSnippets': true},
+      );
+}
diff --git a/pkg/analysis_server/test/lsp/document_symbols_test.dart b/pkg/analysis_server/test/lsp/document_symbols_test.dart
index a37882a..48ddc1b 100644
--- a/pkg/analysis_server/test/lsp/document_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/document_symbols_test.dart
@@ -206,8 +206,10 @@
     newFile(mainFilePath, content: content);
     await initialize(allowEmptyRootUri: true);
 
-    await expectLater(getDocumentSymbols(mainFileUri.toString()),
-        throwsA(isResponseError(ServerErrorCodes.InvalidFilePath)));
+    await expectLater(
+        getDocumentSymbols(mainFileUri.toString()),
+        throwsA(isResponseError(ServerErrorCodes.FileNotAnalyzed,
+            message: 'File is not being analyzed')));
   }
 
   Future<void> test_nonDartFile() async {
diff --git a/pkg/analysis_server/test/lsp/format_test.dart b/pkg/analysis_server/test/lsp/format_test.dart
index 7ffff8a..f3d24e8 100644
--- a/pkg/analysis_server/test/lsp/format_test.dart
+++ b/pkg/analysis_server/test/lsp/format_test.dart
@@ -640,7 +640,8 @@
     await expectLater(
       formatDocument(
           Uri.file(join(projectFolderPath, 'missing.dart')).toString()),
-      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath)),
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'File does not exist')),
     );
   }
 
@@ -649,8 +650,9 @@
 
     await expectLater(
       // Add some invalid path characters to the end of a valid file:// URI.
-      formatDocument(mainFileUri.toString() + '***.dart'),
-      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath)),
+      formatDocument(mainFileUri.toString() + r'***###\\\///:::.dart'),
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'File URI did not contain a valid file path')),
     );
   }
 
@@ -659,7 +661,8 @@
 
     await expectLater(
       formatDocument('a:/a.dart'),
-      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath)),
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'URI was not a valid file:// URI')),
     );
   }
 
diff --git a/pkg/analysis_server/test/lsp/mapping_test.dart b/pkg/analysis_server/test/lsp/mapping_test.dart
index b55938b..196b547 100644
--- a/pkg/analysis_server/test/lsp/mapping_test.dart
+++ b/pkg/analysis_server/test/lsp/mapping_test.dart
@@ -117,38 +117,6 @@
     expect(results2, equals(expectedOrder));
   }
 
-  Future<void> test_tabStopsInSnippets_contains() async {
-    var result = lsp.buildSnippetStringWithTabStops('a, b, c', [3, 1]);
-    expect(result, equals(r'a, ${0:b}, c'));
-  }
-
-  Future<void> test_tabStopsInSnippets_empty() async {
-    var result = lsp.buildSnippetStringWithTabStops('a, b', []);
-    expect(result, equals(r'a, b'));
-  }
-
-  Future<void> test_tabStopsInSnippets_endsWith() async {
-    var result = lsp.buildSnippetStringWithTabStops('a, b', [3, 1]);
-    expect(result, equals(r'a, ${0:b}'));
-  }
-
-  Future<void> test_tabStopsInSnippets_escape() async {
-    var result = lsp.buildSnippetStringWithTabStops(
-        r'te$tstri}ng, te$tstri}ng, te$tstri}ng', [13, 11]);
-    expect(result, equals(r'te\$tstri\}ng, ${0:te\$tstri\}ng}, te\$tstri\}ng'));
-  }
-
-  Future<void> test_tabStopsInSnippets_multiple() async {
-    var result =
-        lsp.buildSnippetStringWithTabStops('a, b, c', [0, 1, 3, 1, 6, 1]);
-    expect(result, equals(r'${1:a}, ${2:b}, ${3:c}'));
-  }
-
-  Future<void> test_tabStopsInSnippets_startsWith() async {
-    var result = lsp.buildSnippetStringWithTabStops('a, b', [0, 1]);
-    expect(result, equals(r'${0:a}, b'));
-  }
-
   /// Verifies that [kind] maps to [expectedKind] when the client supports
   /// [supportedKinds].
   void verifyCompletionItemKind({
diff --git a/pkg/analysis_server/test/lsp/server_test.dart b/pkg/analysis_server/test/lsp/server_test.dart
index 22608c0..48d0109 100644
--- a/pkg/analysis_server/test/lsp/server_test.dart
+++ b/pkg/analysis_server/test/lsp/server_test.dart
@@ -2,11 +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.
 
+import 'dart:io';
+
 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:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../tool/lsp_spec/matchers.dart';
 import 'server_abstract.dart';
 
 void main() {
@@ -44,6 +48,67 @@
     await server.exited.timeout(const Duration(seconds: 10));
   }
 
+  Future<void> test_path_doesNotExist() async {
+    final missingFileUri = Uri.file(join(projectFolderPath, 'missing.dart'));
+    await initialize();
+    await expectLater(
+      getHover(missingFileUri, startOfDocPos),
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'File does not exist')),
+    );
+  }
+
+  Future<void> test_path_invalidFormat() async {
+    await initialize();
+    await expectLater(
+      // Add some invalid path characters to the end of a valid file:// URI.
+      formatDocument(mainFileUri.toString() + r'***###\\\///:::.dart'),
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'File URI did not contain a valid file path')),
+    );
+  }
+
+  Future<void> test_path_missingDriveLetterWindows() async {
+    // This test is only valid on Windows, as a URI in the format:
+    //    file:///foo/bar.dart
+    // is valid for non-Windows platforms, but not valid on Windows as it does
+    // not have a drive letter.
+    if (!Platform.isWindows) {
+      return;
+    }
+    final missingDriveLetterFileUri = Uri.file('/foo/bar.dart');
+    await initialize();
+    await expectLater(
+      getHover(missingDriveLetterFileUri, startOfDocPos),
+      // The Uri.file() above translates to a non-file:// URI of just 'a/b.dart'
+      // so will get the not-file-scheme error message.
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'URI was not an absolute file path (missing drive letter)')),
+    );
+  }
+
+  Future<void> test_path_notFileScheme() async {
+    final relativeFileUri = Uri(scheme: 'foo', path: '/a/b.dart');
+    await initialize();
+    await expectLater(
+      getHover(relativeFileUri, startOfDocPos),
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'URI was not a valid file:// URI')),
+    );
+  }
+
+  Future<void> test_path_relative() async {
+    final relativeFileUri = Uri.file('a/b.dart');
+    await initialize();
+    await expectLater(
+      getHover(relativeFileUri, startOfDocPos),
+      // The Uri.file() above translates to a non-file:// URI of just 'a/b.dart'
+      // so will get the not-file-scheme error message.
+      throwsA(isResponseError(ServerErrorCodes.InvalidFilePath,
+          message: 'URI was not a valid file:// URI')),
+    );
+  }
+
   Future<void> test_shutdown_initialized() async {
     await initialize();
     final response = await sendShutdown();
diff --git a/pkg/analysis_server/test/lsp/snippets_test.dart b/pkg/analysis_server/test/lsp/snippets_test.dart
new file mode 100644
index 0000000..a126c9b
--- /dev/null
+++ b/pkg/analysis_server/test/lsp/snippets_test.dart
@@ -0,0 +1,318 @@
+// 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/lsp/snippets.dart' as lsp;
+import 'package:analysis_server/src/lsp/snippets.dart';
+import 'package:analysis_server/src/protocol_server.dart' as server;
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SnippetsTest);
+    defineReflectiveTests(SnippetBuilderTest);
+  });
+}
+
+@reflectiveTest
+class SnippetBuilderTest {
+  Future<void> test_appendChoice() async {
+    final builder = SnippetBuilder()
+      ..appendChoice({r'a'})
+      ..appendChoice([r'a', r'b', r'a'])
+      ..appendChoice([], placeholderNumber: 6)
+      ..appendChoice([r'aaa', r'bbb'], placeholderNumber: 12)
+      ..appendChoice([r'aaa', r'bbb $ bbb | bbb } bbb']);
+
+    expect(
+      builder.value,
+      r'${1:a}'
+      r'${2|a,b|}'
+      r'$6'
+      r'${12|aaa,bbb|}'
+      r'${13|aaa,bbb \$ bbb \| bbb \} bbb|}',
+    );
+  }
+
+  Future<void> test_appendPlaceholder() async {
+    final builder = SnippetBuilder()
+      ..appendPlaceholder(r'placeholder $ 1')
+      ..appendPlaceholder(r'')
+      ..appendPlaceholder(r'placeholder } 3', placeholderNumber: 6);
+
+    expect(
+      builder.value,
+      r'${1:placeholder \$ 1}'
+      r'$2'
+      r'${6:placeholder \} 3}',
+    );
+  }
+
+  Future<void> test_appendTabStop() async {
+    final builder = SnippetBuilder()
+      ..appendTabStop()
+      ..appendTabStop(placeholderNumber: 10)
+      ..appendTabStop();
+
+    expect(
+      builder.value,
+      r'$1'
+      r'$10'
+      r'$11',
+    );
+  }
+
+  Future<void> test_appendText() async {
+    final builder = SnippetBuilder()
+      ..appendText(r'text 1')
+      ..appendText(r'text ${that needs} escaping $0')
+      ..appendText(r'text 2');
+
+    expect(
+      builder.value,
+      r'text 1'
+      r'text \${that needs} escaping \$0'
+      r'text 2',
+    );
+  }
+
+  Future<void> test_extension_appendPlaceholders() async {
+    final code = r'''
+012345678
+012345678
+012345678
+012345678
+012345678
+''';
+
+    final placeholders = [
+      lsp.SnippetPlaceholder(2, 2),
+      lsp.SnippetPlaceholder(12, 2, isFinal: true),
+      lsp.SnippetPlaceholder(22, 2, suggestions: ['aaa', 'bbb']),
+      lsp.SnippetPlaceholder(32, 2, linkedGroupId: 123),
+      lsp.SnippetPlaceholder(42, 2, linkedGroupId: 123),
+    ];
+
+    final builder = SnippetBuilder()..appendPlaceholders(code, placeholders);
+
+    expect(builder.value, r'''
+01${1:23}45678
+01${0:23}45678
+01${2|23,aaa,bbb|}45678
+01${3:23}45678
+01${3:23}45678
+''');
+  }
+
+  Future<void> test_mixed() async {
+    final builder = SnippetBuilder()
+      ..appendText('text1')
+      ..appendPlaceholder('placeholder')
+      ..appendText('text2')
+      ..appendChoice(['aaa', 'bbb'])
+      ..appendText('text3')
+      ..appendTabStop()
+      ..appendText('text4');
+
+    expect(
+      builder.value,
+      r'text1'
+      r'${1:placeholder}'
+      r'text2'
+      r'${2|aaa,bbb|}'
+      r'text3'
+      r'$3'
+      r'text4',
+    );
+  }
+}
+
+@reflectiveTest
+class SnippetsTest {
+  /// Paths aren't used for anything except filtering edit groups positions
+  /// so the specific values are not important.
+  final mainPath = '/home/test.dart';
+  final otherPath = '/home/other.dart';
+
+  Future<void> test_editGroups_choices() async {
+    var result = lsp.buildSnippetStringForEditGroups(
+      r'''
+var a = 1;
+''',
+      filePath: mainPath,
+      editOffset: 0,
+      editGroups: [
+        server.LinkedEditGroup(
+          [_pos(4)],
+          1,
+          [
+            _suggestion('aaa'),
+            _suggestion(r'bbb${},|'), // test for escaping
+            _suggestion('ccc'),
+          ],
+        ),
+      ],
+    );
+    expect(result, equals(r'''
+var ${1|a,aaa,bbb\${\}\,\|,ccc|} = 1;
+'''));
+  }
+
+  Future<void> test_editGroups_emptyGroup() async {
+    var result = lsp.buildSnippetStringForEditGroups(
+      r'''
+class  {
+  ();
+}
+''',
+      filePath: mainPath,
+      editOffset: 0,
+      editGroups: [
+        server.LinkedEditGroup(
+          [
+            _pos(6),
+            _pos(11),
+          ],
+          0,
+          [],
+        ),
+      ],
+    );
+    expect(result, equals(r'''
+class $1 {
+  $1();
+}
+'''));
+  }
+
+  Future<void> test_editGroups_positionsInOtherFiles() async {
+    var result = lsp.buildSnippetStringForEditGroups(
+      r'''
+class A {
+  A();
+}
+''',
+      filePath: mainPath,
+      editOffset: 0,
+      editGroups: [
+        server.LinkedEditGroup(
+          [
+            _pos(6),
+            _pos(10, otherPath), // Should not be included.
+            _pos(12),
+          ],
+          1,
+          [],
+        ),
+      ],
+    );
+    expect(result, equals(r'''
+class ${1:A} {
+  ${1:A}();
+}
+'''));
+  }
+
+  Future<void> test_editGroups_simpleGroup() async {
+    var result = lsp.buildSnippetStringForEditGroups(
+      r'''
+class A {
+  A();
+}
+''',
+      filePath: mainPath,
+      editOffset: 0,
+      editGroups: [
+        server.LinkedEditGroup(
+          [
+            _pos(6),
+            _pos(12),
+          ],
+          1,
+          [],
+        ),
+      ],
+    );
+    expect(result, equals(r'''
+class ${1:A} {
+  ${1:A}();
+}
+'''));
+  }
+
+  Future<void> test_editGroups_withOffset() async {
+    var result = lsp.buildSnippetStringForEditGroups(
+      r'''
+class A {
+  A();
+}
+''',
+      filePath: mainPath,
+      // This means the edit will be inserted at offset 100, so all linked edit
+      // offsets will be 100 more than in the supplied text.
+      editOffset: 100,
+      editGroups: [
+        server.LinkedEditGroup(
+          [
+            _pos(100 + 6),
+            _pos(100 + 12),
+          ],
+          1,
+          [],
+        ),
+      ],
+    );
+    expect(result, equals(r'''
+class ${1:A} {
+  ${1:A}();
+}
+'''));
+  }
+
+  Future<void> test_tabStops_contains() async {
+    var result = lsp.buildSnippetStringWithTabStops('a, b, c', [3, 1]);
+    expect(result, equals(r'a, ${0:b}, c'));
+  }
+
+  Future<void> test_tabStops_empty() async {
+    var result = lsp.buildSnippetStringWithTabStops('a, b', []);
+    expect(result, equals(r'a, b'));
+  }
+
+  Future<void> test_tabStops_endsWith() async {
+    var result = lsp.buildSnippetStringWithTabStops('a, b', [3, 1]);
+    expect(result, equals(r'a, ${0:b}'));
+  }
+
+  Future<void> test_tabStops_escape() async {
+    var result = lsp.buildSnippetStringWithTabStops(
+        r'te$tstri}ng, te$tstri}ng, te$tstri}ng', [13, 11]);
+    expect(result, equals(r'te\$tstri}ng, ${0:te\$tstri\}ng}, te\$tstri}ng'));
+  }
+
+  Future<void> test_tabStops_multiple() async {
+    var result =
+        lsp.buildSnippetStringWithTabStops('a, b, c', [0, 1, 3, 1, 6, 1]);
+    expect(result, equals(r'${1:a}, ${2:b}, ${3:c}'));
+  }
+
+  Future<void> test_tabStops_null() async {
+    var result = lsp.buildSnippetStringWithTabStops('a, b', null);
+    expect(result, equals(r'a, b'));
+  }
+
+  Future<void> test_tabStops_startsWith() async {
+    var result = lsp.buildSnippetStringWithTabStops('a, b', [0, 1]);
+    expect(result, equals(r'${0:a}, b'));
+  }
+
+  server.Position _pos(int offset, [String? path]) =>
+      server.Position(path ?? mainPath, offset);
+
+  server.LinkedEditSuggestion _suggestion(String text) =>
+      server.LinkedEditSuggestion(
+        text,
+        server.LinkedEditSuggestionKind.TYPE, // We don't use type.
+      );
+}
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index bd22081..5e5c5f5 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -41,6 +41,7 @@
 import 'semantic_tokens_test.dart' as semantic_tokens;
 import 'server_test.dart' as server;
 import 'signature_help_test.dart' as signature_help;
+import 'snippets_test.dart' as snippets;
 import 'super_test.dart' as get_super;
 import 'will_rename_files_test.dart' as will_rename_files;
 import 'workspace_symbols_test.dart' as workspace_symbols;
@@ -85,6 +86,7 @@
     semantic_tokens.main();
     server.main();
     signature_help.main();
+    snippets.main();
     will_rename_files.main();
     workspace_symbols.main();
   }, name: 'lsp');
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/animation.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/animation.dart
new file mode 100644
index 0000000..8dd7d64
--- /dev/null
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/animation.dart
@@ -0,0 +1,5 @@
+// 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.
+
+export 'src/animation/animation_controller.dart';
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/animation/animation_controller.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/animation/animation_controller.dart
new file mode 100644
index 0000000..4c4e4e6
--- /dev/null
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/animation/animation_controller.dart
@@ -0,0 +1,5 @@
+// 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.
+
+class AnimationController {}
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/cupertino/colors.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/cupertino/colors.dart
index 62356d5..92f600e 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/cupertino/colors.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/cupertino/colors.dart
@@ -41,7 +41,6 @@
           darkElevatedColor,
           highContrastElevatedColor,
           darkHighContrastElevatedColor,
-          null,
         );
 
   const CupertinoDynamicColor.withBrightnessAndContrast({
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart
index c2bae69..f8fa737 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart
@@ -7,7 +7,9 @@
 
 mixin Diagnosticable {}
 
-abstract class DiagnosticableTree with Diagnosticable {}
+abstract class DiagnosticableTree with Diagnosticable {
+  const DiagnosticableTree();
+}
 
 class DiagnosticPropertiesBuilder {
   void add(DiagnosticsNode property) {}
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
index 303d1e8..020e8fd 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/basic.dart
@@ -6,6 +6,7 @@
 
 import 'framework.dart';
 
+export 'package:flutter/animation.dart';
 export 'package:flutter/painting.dart';
 export 'package:flutter/rendering.dart';
 
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/ticker_provider.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/ticker_provider.dart
new file mode 100644
index 0000000..f0419ff
--- /dev/null
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/ticker_provider.dart
@@ -0,0 +1,7 @@
+// 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:flutter/src/widgets/framework.dart';
+
+mixin SingleTickerProviderStateMixin<T extends StatefulWidget> on State<T> {}
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/widgets.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/widgets.dart
index 76d58efd..b8eedd8 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/widgets.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/widgets.dart
@@ -8,4 +8,5 @@
 export 'src/widgets/framework.dart';
 export 'src/widgets/gesture_detector.dart';
 export 'src/widgets/icon.dart';
+export 'src/widgets/ticker_provider.dart';
 export 'src/widgets/text.dart';
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 708a951..130ca0d 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -281,24 +281,6 @@
       expect(element.flags, Element.FLAG_CONST | Element.FLAG_STATIC);
     }
     {
-      var engineElement = findElement.field('index', of: 'E2');
-      // create notification Element
-      var element = convertElement(engineElement, withNullability: true);
-      expect(element.kind, ElementKind.FIELD);
-      expect(element.name, 'index');
-      {
-        var location = element.location!;
-        expect(location.file, testFile);
-        expect(location.offset, -1);
-        expect(location.length, 'index'.length);
-        expect(location.startLine, 1);
-        expect(location.startColumn, 0);
-      }
-      expect(element.parameters, isNull);
-      expect(element.returnType, 'int');
-      expect(element.flags, Element.FLAG_FINAL);
-    }
-    {
       var engineElement = findElement.field('values', of: 'E2');
       // create notification Element
       var element = convertElement(engineElement, withNullability: true);
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index 83f3e8f..02e6971 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -256,6 +256,8 @@
     // use SearchResultKind inside the analysis server?
     EnumTester<MatchKind, SearchResultKind>()
         .run(newSearchResultKind_fromEngine, exceptions: {
+      MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
+          SearchResultKind.INVOCATION,
       MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF: SearchResultKind.REFERENCE,
     });
   }
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 326a8eb..2902a26 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -40,7 +40,7 @@
     }
   }
 
-  Future<void> test_constructor_named() async {
+  Future<void> test_class_constructor_named() async {
     addTestFile('''
 /// [new A.named] 1
 class A {
@@ -69,7 +69,7 @@
     assertHasResult(SearchResultKind.REFERENCE, '.named; // 6', 6);
   }
 
-  Future<void> test_constructor_named_potential() async {
+  Future<void> test_class_constructor_named_potential() async {
     // Constructors in other classes shouldn't be considered potential matches.
     // Unresolved method calls should also not be considered potential matches,
     // because constructor call sites are statically bound to their targets.
@@ -92,7 +92,7 @@
     assertHasResult(SearchResultKind.INVOCATION, '.named(1)', 6);
   }
 
-  Future<void> test_constructor_unnamed() async {
+  Future<void> test_class_constructor_unnamed() async {
     addTestFile('''
 /// [new A] 1
 /// [A.new] 2
@@ -123,7 +123,7 @@
     assertHasResult(SearchResultKind.REFERENCE, '.new; // 7', 4);
   }
 
-  Future<void> test_constructor_unnamed_potential() async {
+  Future<void> test_class_constructor_unnamed_potential() async {
     // Constructors in other classes shouldn't be considered potential matches,
     // even if they are also unnamed (since constructor call sites are
     // statically bound to their targets).
@@ -151,26 +151,7 @@
     assertHasResult(SearchResultKind.INVOCATION, '(1)', 0);
   }
 
-  Future<void> test_extension() async {
-    addTestFile('''
-extension E on int {
-  static void foo() {}
-  void bar() {}
-}
-
-void f() {
-  E.foo();
-  E(0).bar();
-}
-''');
-    await findElementReferences('E on int', false);
-    expect(searchElement!.kind, ElementKind.EXTENSION);
-    expect(results, hasLength(2));
-    assertHasResult(SearchResultKind.REFERENCE, 'E.foo();');
-    assertHasResult(SearchResultKind.REFERENCE, 'E(0)');
-  }
-
-  Future<void> test_field_explicit() async {
+  Future<void> test_class_field_explicit() async {
     addTestFile('''
 class A {
   var fff; // declaration
@@ -207,7 +188,7 @@
     assertHasResult(SearchResultKind.READ, 'fff(); // in f()');
   }
 
-  Future<void> test_field_implicit() async {
+  Future<void> test_class_field_implicit() async {
     addTestFile('''
 class A {
   var  get fff => null;
@@ -241,7 +222,7 @@
     }
   }
 
-  Future<void> test_field_inFormalParameter() async {
+  Future<void> test_class_field_inFormalParameter() async {
     addTestFile('''
 class A {
   var fff; // declaration
@@ -260,7 +241,205 @@
     assertHasResult(SearchResultKind.READ, 'fff); // in m()');
   }
 
-  Future<void> test_field_ofExtension_explicit_static() async {
+  Future<void> test_class_method() async {
+    addTestFile('''
+class A {
+  mmm(p) {}
+  m() {
+    mmm(1);
+    print(mmm); // in m()
+  }
+}
+void f(A a) {
+  a.mmm(10);
+  print(a.mmm); // in f()
+}
+''');
+    await findElementReferences('mmm(p) {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(4));
+    assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
+    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
+    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
+    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in f()');
+  }
+
+  Future<void> test_class_method_propagatedType() async {
+    addTestFile('''
+class A {
+  mmm(p) {}
+}
+void f() {
+  var a = new A();
+  a.mmm(10);
+  print(a.mmm);
+}
+''');
+    await findElementReferences('mmm(p) {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(2));
+    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
+    assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
+  }
+
+  Future<void> test_enum_constructor_named() async {
+    addTestFile('''
+/// [new E.named] 1
+enum E {
+  v.named(); // 2
+  const E.named(); // 3
+  const E.other() : this.named(); // 4
+}
+''');
+    await findElementReferences('named(); // 3', false);
+    expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
+    expect(results, hasLength(3));
+    assertHasResult(SearchResultKind.REFERENCE, '.named] 1', 6);
+    assertHasResult(SearchResultKind.INVOCATION, '.named(); // 2', 6);
+    assertHasResult(SearchResultKind.INVOCATION, '.named(); // 4', 6);
+  }
+
+  Future<void> test_enum_constructor_unnamed() async {
+    addTestFile('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+  const E(); // 5
+  const E.other() : this(); // 6
+}
+''');
+    await findElementReferences('E(); // 5', false);
+    expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
+    expect(results, hasLength(5));
+    assertHasResult(SearchResultKind.REFERENCE, '] 1', 0);
+    assertHasResult(SearchResultKind.INVOCATION, ', // 2', 0);
+    assertHasResult(SearchResultKind.INVOCATION, '(), // 3', 0);
+    assertHasResult(SearchResultKind.INVOCATION, '.new(); // 4', 4);
+    assertHasResult(SearchResultKind.INVOCATION, '(); // 6', 0);
+  }
+
+  Future<void> test_enum_field_explicit() async {
+    addTestFile('''
+enum E {
+  v;
+  var fff; // 01
+  E(this.fff); // 02
+  E.named() : fff = 0; // 03
+  void foo() {
+    fff = 0; // 04 
+    fff += 0; // 05
+    fff; // 06
+    fff(); // 07
+  }
+}
+
+void f(E e) {
+  e.fff = 0; // 08
+  e.fff += 0; // 09
+  e.fff; // 10
+  e.fff(); // 11
+}
+''');
+    await findElementReferences('fff; // 01', false);
+    expect(searchElement!.kind, ElementKind.FIELD);
+    expect(results, hasLength(10));
+    assertHasResult(SearchResultKind.WRITE, 'fff); // 02');
+    assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 03');
+    // foo()
+    assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 04');
+    assertHasResult(SearchResultKind.WRITE, 'fff += 0; // 05');
+    assertHasResult(SearchResultKind.READ, 'fff; // 06');
+    assertHasResult(SearchResultKind.READ, 'fff(); // 07');
+    // f()
+    assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 08');
+    assertHasResult(SearchResultKind.WRITE, 'fff += 0; // 09');
+    assertHasResult(SearchResultKind.READ, 'fff; // 10');
+    assertHasResult(SearchResultKind.READ, 'fff(); // 11');
+  }
+
+  Future<void> test_enum_field_implicit() async {
+    addTestFile('''
+enum E {
+  v;
+  int get fff => 0;
+  void set fff(_) {}
+  void foo() {
+    fff; // 1
+    fff = 0; // 2
+  }
+}
+
+void f(E e) {
+  e.fff; // 3
+  e.fff = 0; // 4
+}
+''');
+    {
+      await findElementReferences('fff =>', false);
+      expect(searchElement!.kind, ElementKind.FIELD);
+      expect(results, hasLength(4));
+      assertHasResult(SearchResultKind.READ, 'fff; // 1');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 2');
+      assertHasResult(SearchResultKind.READ, 'fff; // 3');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 4');
+    }
+    {
+      await findElementReferences('fff(_) {}', false);
+      expect(results, hasLength(4));
+      assertHasResult(SearchResultKind.READ, 'fff; // 1');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 2');
+      assertHasResult(SearchResultKind.READ, 'fff; // 3');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 4');
+    }
+  }
+
+  Future<void> test_enum_method() async {
+    addTestFile('''
+enum E {
+  v;
+  void foo() {}
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+  }
+}
+
+void f(E e) {
+  e.foo(); // 3
+  e.foo; // 4
+}
+''');
+    await findElementReferences('foo() {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(4));
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 2');
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
+  }
+
+  Future<void> test_extension() async {
+    addTestFile('''
+extension E on int {
+  static void foo() {}
+  void bar() {}
+}
+
+void f() {
+  E.foo();
+  E(0).bar();
+}
+''');
+    await findElementReferences('E on int', false);
+    expect(searchElement!.kind, ElementKind.EXTENSION);
+    expect(results, hasLength(2));
+    assertHasResult(SearchResultKind.REFERENCE, 'E.foo();');
+    assertHasResult(SearchResultKind.REFERENCE, 'E(0)');
+  }
+
+  Future<void> test_extension_field_explicit_static() async {
     addTestFile('''
 extension E on int {
   static var fff; // declaration
@@ -295,7 +474,7 @@
     assertHasResult(SearchResultKind.READ, 'fff(); // in f()');
   }
 
-  Future<void> test_field_ofExtension_implicit_instance() async {
+  Future<void> test_extension_field_implicit_instance() async {
     addTestFile('''
 extension E on int {
   var get fff => null;
@@ -329,7 +508,7 @@
     }
   }
 
-  Future<void> test_field_ofExtension_implicit_static() async {
+  Future<void> test_extension_field_implicit_static() async {
     addTestFile('''
 extension E on int {
   static var get fff => null;
@@ -363,6 +542,28 @@
     }
   }
 
+  Future<void> test_extension_method() async {
+    addTestFile('''
+extension E on int {
+  void foo() {}
+}
+
+void f() {
+  E(0).foo(); // 1
+  E(0).foo; // 2
+  0.foo(); // 3
+  0.foo; // 4
+}
+''');
+    await findElementReferences('foo() {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(4));
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 2');
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
+  }
+
   Future<void> test_function() async {
     addTestFile('''
 fff(p) {}
@@ -511,69 +712,6 @@
     assertHasResult(SearchResultKind.READ, 'vvv();');
   }
 
-  Future<void> test_method() async {
-    addTestFile('''
-class A {
-  mmm(p) {}
-  m() {
-    mmm(1);
-    print(mmm); // in m()
-  }
-}
-void f(A a) {
-  a.mmm(10);
-  print(a.mmm); // in f()
-}
-''');
-    await findElementReferences('mmm(p) {}', false);
-    expect(searchElement!.kind, ElementKind.METHOD);
-    expect(results, hasLength(4));
-    assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
-    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
-    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
-    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in f()');
-  }
-
-  Future<void> test_method_ofExtension() async {
-    addTestFile('''
-extension E on int {
-  void foo() {}
-}
-
-void f() {
-  E(0).foo(); // 1
-  E(0).foo; // 2
-  0.foo(); // 3
-  0.foo; // 4
-}
-''');
-    await findElementReferences('foo() {}', false);
-    expect(searchElement!.kind, ElementKind.METHOD);
-    expect(results, hasLength(4));
-    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
-    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 2');
-    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
-    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
-  }
-
-  Future<void> test_method_propagatedType() async {
-    addTestFile('''
-class A {
-  mmm(p) {}
-}
-void f() {
-  var a = new A();
-  a.mmm(10);
-  print(a.mmm);
-}
-''');
-    await findElementReferences('mmm(p) {}', false);
-    expect(searchElement!.kind, ElementKind.METHOD);
-    expect(results, hasLength(2));
-    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
-    assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
-  }
-
   Future<void> test_mixin() async {
     addTestFile('''
 mixin A {}
@@ -834,6 +972,23 @@
     assertHasResult(SearchResultKind.REFERENCE, 'ppp.Stream');
   }
 
+  Future<void> test_topFunction_parameter_optionalNamed_anywhere() async {
+    addTestFile('''
+void foo(int a, int b, {int? test}) {
+  test;
+}
+
+void g() {
+  foo(0, test: 2, 1);
+}
+''');
+    await findElementReferences('test})', false);
+    expect(searchElement!.kind, ElementKind.PARAMETER);
+    expect(results, hasLength(2));
+    assertHasResult(SearchResultKind.READ, 'test;');
+    assertHasResult(SearchResultKind.REFERENCE, 'test: 2');
+  }
+
   Future<void> test_topLevelVariable_explicit() async {
     addTestFile('''
 var vvv = 1;
diff --git a/pkg/analysis_server/test/search/member_declarations_test.dart b/pkg/analysis_server/test/search/member_declarations_test.dart
index d838f8e..29e27c9 100644
--- a/pkg/analysis_server/test/search/member_declarations_test.dart
+++ b/pkg/analysis_server/test/search/member_declarations_test.dart
@@ -45,6 +45,185 @@
     return null;
   }
 
+  Future<void> test_class_methodField() async {
+    addTestFile('''
+class A {
+  foo() {}
+  bar() {}
+}
+class B {
+  int foo;
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.FIELD, 'B');
+  }
+
+  Future<void> test_class_methodGetter() async {
+    addTestFile('''
+class A {
+  foo() {}
+  bar() {}
+}
+class B {
+  get foo => null;
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.GETTER, 'B');
+  }
+
+  Future<void> test_class_methodGetterSetter() async {
+    addTestFile('''
+class A {
+  foo() {}
+  bar() {}
+}
+class B {
+  get foo => null;
+  set foo(x) {}
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(3));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.GETTER, 'B');
+    assertHasDeclaration(ElementKind.SETTER, 'B');
+  }
+
+  Future<void> test_class_methodMethod() async {
+    addTestFile('''
+class A {
+  foo() {}
+  bar() {}
+}
+class B {
+  foo() {}
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.METHOD, 'B');
+  }
+
+  Future<void> test_class_methodSetter() async {
+    addTestFile('''
+class A {
+  foo() {}
+  bar() {}
+}
+class B {
+  set foo(x) {}
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.SETTER, 'B');
+  }
+
+  Future<void> test_enum_methodField() async {
+    addTestFile('''
+enum A {
+  v;
+  void foo() {}
+  void bar() {}
+}
+
+enum B {
+  v;
+  int foo;
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.FIELD, 'B');
+  }
+
+  Future<void> test_enum_methodGetter() async {
+    addTestFile('''
+enum A {
+  v;
+  void foo() {}
+  void bar() {}
+}
+
+enum B {
+  v;
+  int get foo => 0;
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.GETTER, 'B');
+  }
+
+  Future<void> test_enum_methodGetterSetter() async {
+    addTestFile('''
+enum A {
+  v;
+  void foo() {}
+  void bar() {}
+}
+
+enum B {
+  v;
+  int get foo => 0;
+  set foo(int x) {}
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(3));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.GETTER, 'B');
+    assertHasDeclaration(ElementKind.SETTER, 'B');
+  }
+
+  Future<void> test_enum_methodMethod() async {
+    addTestFile('''
+enum A {
+  v;
+  void foo() {}
+  void bar() {}
+}
+
+enum B {
+  v;
+  void foo() {}
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.METHOD, 'B');
+  }
+
+  Future<void> test_enums_methodSetter() async {
+    addTestFile('''
+enum A {
+  v;
+  void foo() {}
+  void bar() {}
+}
+
+enum B {
+  v;
+  set foo(int x) {}
+}
+''');
+    await findMemberDeclarations('foo');
+    expect(results, hasLength(2));
+    assertHasDeclaration(ElementKind.METHOD, 'A');
+    assertHasDeclaration(ElementKind.SETTER, 'B');
+  }
+
   Future<void> test_localVariable() async {
     addTestFile('''
 class A {
@@ -69,86 +248,4 @@
     await findMemberDeclarations('foo');
     expect(results, isEmpty);
   }
-
-  Future<void> test_methodField() async {
-    addTestFile('''
-class A {
-  foo() {}
-  bar() {}
-}
-class B {
-  int foo;
-}
-''');
-    await findMemberDeclarations('foo');
-    expect(results, hasLength(2));
-    assertHasDeclaration(ElementKind.METHOD, 'A');
-    assertHasDeclaration(ElementKind.FIELD, 'B');
-  }
-
-  Future<void> test_methodGetter() async {
-    addTestFile('''
-class A {
-  foo() {}
-  bar() {}
-}
-class B {
-  get foo => null;
-}
-''');
-    await findMemberDeclarations('foo');
-    expect(results, hasLength(2));
-    assertHasDeclaration(ElementKind.METHOD, 'A');
-    assertHasDeclaration(ElementKind.GETTER, 'B');
-  }
-
-  Future<void> test_methodGetterSetter() async {
-    addTestFile('''
-class A {
-  foo() {}
-  bar() {}
-}
-class B {
-  get foo => null;
-  set foo(x) {}
-}
-''');
-    await findMemberDeclarations('foo');
-    expect(results, hasLength(3));
-    assertHasDeclaration(ElementKind.METHOD, 'A');
-    assertHasDeclaration(ElementKind.GETTER, 'B');
-    assertHasDeclaration(ElementKind.SETTER, 'B');
-  }
-
-  Future<void> test_methodMethod() async {
-    addTestFile('''
-class A {
-  foo() {}
-  bar() {}
-}
-class B {
-  foo() {}
-}
-''');
-    await findMemberDeclarations('foo');
-    expect(results, hasLength(2));
-    assertHasDeclaration(ElementKind.METHOD, 'A');
-    assertHasDeclaration(ElementKind.METHOD, 'B');
-  }
-
-  Future<void> test_methodSetter() async {
-    addTestFile('''
-class A {
-  foo() {}
-  bar() {}
-}
-class B {
-  set foo(x) {}
-}
-''');
-    await findMemberDeclarations('foo');
-    expect(results, hasLength(2));
-    assertHasDeclaration(ElementKind.METHOD, 'A');
-    assertHasDeclaration(ElementKind.SETTER, 'B');
-  }
 }
diff --git a/pkg/analysis_server/test/search/member_references_test.dart b/pkg/analysis_server/test/search/member_references_test.dart
index a2c7b18..b5df9ae 100644
--- a/pkg/analysis_server/test/search/member_references_test.dart
+++ b/pkg/analysis_server/test/search/member_references_test.dart
@@ -29,75 +29,179 @@
     return waitForSearchResults();
   }
 
-  Future<void> test_fields_explicit() async {
+  Future<void> test_class_fields_explicit() async {
     addTestFile('''
 class A {
   var foo;
 }
+
 class B {
   var foo;
 }
-mainResolved(A a, B b) {
+
+void whenResolved(A a, B b) {
   a.foo = 1;
   b.foo = 2;
-  print(a.foo); // resolved A
-  print(b.foo); // resolved B
+  a.foo; // resolved A
+  b.foo; // resolved B
 }
-mainUnresolved(a, b) {
+
+void whenUnresolved(a, b) {
   a.foo = 10;
   b.foo = 20;
-  print(a.foo); // unresolved A
-  print(b.foo); // unresolved B
+  a.foo; // unresolved A
+  b.foo; // unresolved B
 }
 ''');
     await findMemberReferences('foo');
     assertNoResult(SearchResultKind.WRITE, 'foo = 1;');
     assertNoResult(SearchResultKind.WRITE, 'foo = 2;');
-    assertNoResult(SearchResultKind.READ, 'foo); // resolved A');
-    assertNoResult(SearchResultKind.READ, 'foo); // resolved B');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved A');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved B');
     assertHasRef(SearchResultKind.WRITE, 'foo = 10;', true);
     assertHasRef(SearchResultKind.WRITE, 'foo = 20;', true);
-    assertHasRef(SearchResultKind.READ, 'foo); // unresolved A', true);
-    assertHasRef(SearchResultKind.READ, 'foo); // unresolved B', true);
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved A', true);
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved B', true);
   }
 
-  Future<void> test_fields_implicit() async {
+  Future<void> test_class_fields_implicit() async {
     addTestFile('''
 class A {
-  get foo => null;
+  int get foo => 0;
 }
+
 class B {
-  get foo => null;
+  int get foo => 0;
 }
-mainResolved(A a, B b) {
-  print(a.foo); // resolved A
-  print(b.foo); // resolved B
+
+void whenResolved(A a, B b) {
+  a.foo; // resolved A
+  b.foo; // resolved B
 }
-mainUnresolved(a, b) {
-  print(a.foo); // unresolved A
-  print(b.foo); // unresolved B
+
+void whenUnresolved(a, b) {
+  a.foo; // unresolved A
+  b.foo; // unresolved B
 }
 ''');
     await findMemberReferences('foo');
-    assertNoResult(SearchResultKind.READ, 'foo); // resolved A');
-    assertNoResult(SearchResultKind.READ, 'foo); // resolved B');
-    assertHasRef(SearchResultKind.READ, 'foo); // unresolved A', true);
-    assertHasRef(SearchResultKind.READ, 'foo); // unresolved B', true);
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved A');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved B');
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved A', true);
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved B', true);
   }
 
-  Future<void> test_methods() async {
+  Future<void> test_class_methods() async {
     addTestFile('''
 class A {
-  foo() {}
+  void foo() {}
 }
+
 class B {
-  foo() {}
+  void foo() {}
 }
-mainResolved(A a, B b) {
+
+void whenResolved(A a, B b) {
   a.foo(1);
   b.foo(2);
 }
-mainUnresolved(a, b) {
+
+void whenUnresolved(a, b) {
+  a.foo(10);
+  b.foo(20);
+}
+''');
+    await findMemberReferences('foo');
+    assertNoResult(SearchResultKind.INVOCATION, 'foo(1)');
+    assertNoResult(SearchResultKind.INVOCATION, 'foo(2)');
+    assertHasRef(SearchResultKind.INVOCATION, 'foo(10)', true);
+    assertHasRef(SearchResultKind.INVOCATION, 'foo(20)', true);
+  }
+
+  Future<void> test_enum_fields_explicit() async {
+    addTestFile('''
+enum A {
+  v;
+  final foo = 0;
+}
+
+enum B {
+  v;
+  final foo = 0;
+}
+
+void whenResolved(A a, B b) {
+  a.foo = 1;
+  b.foo = 2;
+  a.foo; // resolved A
+  b.foo; // resolved B
+}
+
+whenUnresolved(a, b) {
+  a.foo = 10;
+  b.foo = 20;
+  a.foo; // unresolved A
+  b.foo; // unresolved B
+}
+''');
+    await findMemberReferences('foo');
+    assertNoResult(SearchResultKind.WRITE, 'foo = 1;');
+    assertNoResult(SearchResultKind.WRITE, 'foo = 2;');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved A');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved B');
+    assertHasRef(SearchResultKind.WRITE, 'foo = 10;', true);
+    assertHasRef(SearchResultKind.WRITE, 'foo = 20;', true);
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved A', true);
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved B', true);
+  }
+
+  Future<void> test_enum_fields_implicit() async {
+    addTestFile('''
+enum A {
+  v;
+  int get foo => 0;
+}
+
+enum B {
+  v;
+  int get foo => 0;
+}
+
+void whenResolved(A a, B b) {
+  a.foo; // resolved A
+  b.foo; // resolved B
+}
+
+void whenUnresolved(a, b) {
+  a.foo; // unresolved A
+  b.foo; // unresolved B
+}
+''');
+    await findMemberReferences('foo');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved A');
+    assertNoResult(SearchResultKind.READ, 'foo; // resolved B');
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved A', true);
+    assertHasRef(SearchResultKind.READ, 'foo; // unresolved B', true);
+  }
+
+  Future<void> test_enum_methods() async {
+    addTestFile('''
+enum A {
+  v;
+  void foo() {}
+}
+
+enum B {
+  v;
+  void foo() {}
+}
+
+void whenResolved(A a, B b) {
+  a.foo(1);
+  b.foo(2);
+}
+
+void whenUnresolved(a, b) {
   a.foo(10);
   b.foo(20);
 }
diff --git a/pkg/analysis_server/test/search/top_level_declarations_test.dart b/pkg/analysis_server/test/search/top_level_declarations_test.dart
index 2242204..977f966 100644
--- a/pkg/analysis_server/test/search/top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/search/top_level_declarations_test.dart
@@ -53,6 +53,31 @@
     return null;
   }
 
+  Future<void> test_enum_startEndPattern() async {
+    addTestFile('''
+enum A {
+  v
+}
+
+enum A2 {
+  v
+}
+
+enum B {
+  v
+}
+
+enum D {
+  v
+}
+''');
+    await findTopLevelDeclarations('^[A-C]\$');
+    assertHasDeclaration(ElementKind.ENUM, 'A');
+    assertHasDeclaration(ElementKind.ENUM, 'B');
+    assertNoDeclaration(ElementKind.ENUM, 'A2');
+    assertNoDeclaration(ElementKind.ENUM, 'D');
+  }
+
   Future<void> test_extensionDeclaration() async {
     addTestFile('''
 extension MyExtension on int {}
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index 28f9cba..c0d0616 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -64,8 +64,7 @@
           'kind': 'CLASS',
           'name': 'B',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 1,
         'interfaces': [],
@@ -77,8 +76,7 @@
           'kind': 'CLASS',
           'name': 'A',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 0,
         'interfaces': [],
@@ -118,8 +116,7 @@
           'kind': 'CLASS',
           'name': 'AAA',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 1,
         'interfaces': [],
@@ -131,8 +128,7 @@
           'kind': 'CLASS',
           'name': 'Object',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'interfaces': [],
         'mixins': [],
@@ -143,8 +139,7 @@
           'kind': 'CLASS',
           'name': 'BBB',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 0,
         'interfaces': [],
@@ -156,8 +151,7 @@
           'kind': 'CLASS',
           'name': 'CCC',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 0,
         'interfaces': [],
@@ -210,8 +204,7 @@
           'kind': 'CLASS',
           'name': 'A',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 1,
         'interfaces': [],
@@ -223,8 +216,7 @@
           'kind': 'CLASS',
           'name': 'Object',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'interfaces': [],
         'mixins': [],
@@ -235,8 +227,7 @@
           'kind': 'CLASS',
           'name': 'B',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 0,
         'interfaces': [],
@@ -248,8 +239,7 @@
           'kind': 'CLASS',
           'name': 'C',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 2,
         'interfaces': [],
@@ -275,8 +265,7 @@
           'kind': 'CLASS',
           'name': 'B',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 1,
         'interfaces': [],
@@ -288,8 +277,7 @@
           'kind': 'CLASS',
           'name': 'A',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 2,
         'interfaces': [],
@@ -301,8 +289,7 @@
           'kind': 'CLASS',
           'name': 'Object',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'interfaces': [],
         'mixins': [],
@@ -313,8 +300,7 @@
           'kind': 'CLASS',
           'name': 'C',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 0,
         'interfaces': [],
@@ -340,8 +326,7 @@
           'kind': 'CLASS',
           'name': 'C',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 1,
         'interfaces': [],
@@ -353,8 +338,7 @@
           'kind': 'CLASS',
           'name': 'B',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 2,
         'interfaces': [],
@@ -366,8 +350,7 @@
           'kind': 'CLASS',
           'name': 'A',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 3,
         'interfaces': [],
@@ -379,8 +362,7 @@
           'kind': 'CLASS',
           'name': 'Object',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'interfaces': [],
         'mixins': [],
@@ -389,255 +371,7 @@
     ]);
   }
 
-  Future<void> test_class_implementsTypes() async {
-    addTestFile('''
-class MA {}
-class MB {}
-class B extends A {
-}
-class T implements MA, MB {
-}
-''');
-    var items = await _getTypeHierarchy('T implements');
-    expect(_toJson(items), [
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'T',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [2, 3],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'Object',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'MA',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'MB',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      }
-    ]);
-  }
-
-  Future<void> test_class_order() async {
-    addTestFile('''
-class A {}
-class D extends A {}
-class C extends A {}
-class B extends A {}
-class G extends B {}
-class F extends B {}
-class E extends A {}
-''');
-    var items = await _getTypeHierarchy('A {}');
-    expect(_toJson(items), [
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'A',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': [2, 3, 4, 5]
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'Object',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'B',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 0,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': [6, 7]
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'C',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 0,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'D',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 0,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'E',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 0,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'F',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 4,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'G',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 4,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      }
-    ]);
-  }
-
-  Future<void> test_class_withTypes() async {
-    addTestFile('''
-class MA {}
-class MB {}
-class B extends A {
-}
-class T extends Object with MA, MB {
-}
-''');
-    var items = await _getTypeHierarchy('T extends Object');
-    expect(_toJson(items), [
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'T',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [],
-        'mixins': [2, 3],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'Object',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'MA',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      },
-      {
-        'classElement': {
-          'kind': 'CLASS',
-          'name': 'MB',
-          'location': anything,
-          'flags': 0,
-          'libraryUri': anything
-        },
-        'superclass': 1,
-        'interfaces': [],
-        'mixins': [],
-        'subclasses': []
-      }
-    ]);
-  }
-
-  Future<void> test_fromField_toMixinGetter() async {
+  Future<void> test_class_fromField_toMixinGetter() async {
     addTestFile('''
 abstract class A {
   var test = 1;
@@ -656,7 +390,7 @@
     expect(memberB.location!.offset, findOffset('test => 2;'));
   }
 
-  Future<void> test_fromField_toMixinSetter() async {
+  Future<void> test_class_fromField_toMixinSetter() async {
     addTestFile('''
 abstract class A {
   var test = 1;
@@ -675,7 +409,68 @@
     expect(memberB.location!.offset, findOffset('test(m) {}'));
   }
 
-  Future<void> test_member_fromField_toField() async {
+  Future<void> test_class_implementsTypes() async {
+    addTestFile('''
+class MA {}
+class MB {}
+class B extends A {
+}
+class T implements MA, MB {
+}
+''');
+    var items = await _getTypeHierarchy('T implements');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'T',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [2, 3],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'MA',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'MB',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      }
+    ]);
+  }
+
+  Future<void> test_class_member_fromField_toField() async {
     addTestFile('''
 class A {
   var test = 1;
@@ -698,7 +493,7 @@
     checkItems(await _getTypeHierarchy('test = 2;'));
   }
 
-  Future<void> test_member_fromField_toGetter() async {
+  Future<void> test_class_member_fromField_toGetter() async {
     addTestFile('''
 class A {
   get test => 1;
@@ -721,7 +516,7 @@
     checkItems(await _getTypeHierarchy('test = 2;'));
   }
 
-  Future<void> test_member_fromField_toSetter() async {
+  Future<void> test_class_member_fromField_toSetter() async {
     addTestFile('''
 class A {
   set test(a) {}
@@ -744,7 +539,7 @@
     checkItems(await _getTypeHierarchy('test = 2;'));
   }
 
-  Future<void> test_member_fromFinalField_toGetter() async {
+  Future<void> test_class_member_fromFinalField_toGetter() async {
     addTestFile('''
 class A {
   get test => 1;
@@ -767,7 +562,7 @@
     checkItems(await _getTypeHierarchy('test = 2;'));
   }
 
-  Future<void> test_member_fromFinalField_toSetter() async {
+  Future<void> test_class_member_fromFinalField_toSetter() async {
     addTestFile('''
 class A {
   set test(x) {}
@@ -783,7 +578,7 @@
     expect(itemB.memberElement!.location!.offset, findOffset('test = 2;'));
   }
 
-  Future<void> test_member_getter() async {
+  Future<void> test_class_member_getter() async {
     addTestFile('''
 class A {
   get test => null; // in A
@@ -815,7 +610,7 @@
         findOffset('test => null; // in D'));
   }
 
-  Future<void> test_member_method() async {
+  Future<void> test_class_member_method() async {
     addTestFile('''
 class A {
   test() {} // in A
@@ -847,7 +642,7 @@
         itemD.memberElement!.location!.offset, findOffset('test() {} // in D'));
   }
 
-  Future<void> test_member_method_private_differentLib() async {
+  Future<void> test_class_member_method_private_differentLib() async {
     newFile(join(testFolder, 'lib.dart'), content: r'''
 import 'test.dart';
 class A {
@@ -881,7 +676,7 @@
     expect(itemD.memberElement, isNotNull);
   }
 
-  Future<void> test_member_method_private_sameLib() async {
+  Future<void> test_class_member_method_private_sameLib() async {
     addTestFile('''
 class A {
   _m() {} // in A
@@ -908,7 +703,7 @@
         itemC.memberElement!.location!.offset, findOffset('_m() {} // in C'));
   }
 
-  Future<void> test_member_ofMixin2_method() async {
+  Future<void> test_class_member_ofMixin2_method() async {
     addTestFile('''
 class M1 {
   void test() {} // in M1
@@ -956,7 +751,7 @@
     }
   }
 
-  Future<void> test_member_ofMixin_getter() async {
+  Future<void> test_class_member_ofMixin_getter() async {
     addTestFile('''
 abstract class Base {
   get test; // in Base
@@ -982,7 +777,7 @@
         member2.location!.offset, findOffset('test => null; // in Derived2'));
   }
 
-  Future<void> test_member_ofMixin_method() async {
+  Future<void> test_class_member_ofMixin_method() async {
     addTestFile('''
 abstract class Base {
   void test(); // in Base
@@ -1007,7 +802,7 @@
     expect(member2.location!.offset, findOffset('test() {} // in Derived2'));
   }
 
-  Future<void> test_member_ofMixin_setter() async {
+  Future<void> test_class_member_ofMixin_setter() async {
     addTestFile('''
 abstract class Base {
   set test(x); // in Base
@@ -1032,7 +827,7 @@
     expect(member2.location!.offset, findOffset('test(x) {} // in Derived2'));
   }
 
-  Future<void> test_member_ofSuperclassConstraint_getter() async {
+  Future<void> test_class_member_ofSuperclassConstraint_getter() async {
     addTestFile('''
 class A {
   get test => 0; // in A
@@ -1051,7 +846,7 @@
     _assertMember(inM, 'test => 0; // in M');
   }
 
-  Future<void> test_member_ofSuperclassConstraint_method() async {
+  Future<void> test_class_member_ofSuperclassConstraint_method() async {
     addTestFile('''
 class A {
   void test() {} // in A
@@ -1070,7 +865,7 @@
     _assertMember(inM, 'test() {} // in M');
   }
 
-  Future<void> test_member_ofSuperclassConstraint_setter() async {
+  Future<void> test_class_member_ofSuperclassConstraint_setter() async {
     addTestFile('''
 class A {
   set test(x) {} // in A
@@ -1089,7 +884,7 @@
     _assertMember(inM, 'test(x) {} // in M');
   }
 
-  Future<void> test_member_operator() async {
+  Future<void> test_class_member_operator() async {
     addTestFile('''
 class A {
   operator ==(x) => null; // in A
@@ -1121,7 +916,7 @@
         findOffset('==(x) => null; // in D'));
   }
 
-  Future<void> test_member_setter() async {
+  Future<void> test_class_member_setter() async {
     addTestFile('''
 class A {
   set test(x) {} // in A
@@ -1153,7 +948,117 @@
         findOffset('test(x) {} // in D'));
   }
 
-  Future<void> test_superOnly() async {
+  Future<void> test_class_order() async {
+    addTestFile('''
+class A {}
+class D extends A {}
+class C extends A {}
+class B extends A {}
+class G extends B {}
+class F extends B {}
+class E extends A {}
+''');
+    var items = await _getTypeHierarchy('A {}');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'A',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': [2, 3, 4, 5]
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'B',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': [6, 7]
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'C',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'D',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'E',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 0,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'F',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 4,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'G',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 4,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      }
+    ]);
+  }
+
+  Future<void> test_class_superOnly() async {
     addTestFile('''
 class A {}
 class B {}
@@ -1167,8 +1072,7 @@
           'kind': 'CLASS',
           'name': 'C',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 1,
         'interfaces': [3],
@@ -1180,8 +1084,7 @@
           'kind': 'CLASS',
           'name': 'A',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 2,
         'interfaces': [],
@@ -1193,8 +1096,7 @@
           'kind': 'CLASS',
           'name': 'Object',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'interfaces': [],
         'mixins': [],
@@ -1205,8 +1107,7 @@
           'kind': 'CLASS',
           'name': 'B',
           'location': anything,
-          'flags': 0,
-          'libraryUri': anything
+          'flags': 0
         },
         'superclass': 2,
         'interfaces': [],
@@ -1216,7 +1117,7 @@
     ]);
   }
 
-  Future<void> test_superOnly_fileDoesNotExist() async {
+  Future<void> test_class_superOnly_fileDoesNotExist() async {
     var request = SearchGetTypeHierarchyParams(
             convertPath('/does/not/exist.dart'), 0,
             superOnly: true)
@@ -1227,6 +1128,337 @@
     expect(items, isNull);
   }
 
+  Future<void> test_class_withTypes() async {
+    addTestFile('''
+class MA {}
+class MB {}
+class B extends A {
+}
+class T extends Object with MA, MB {
+}
+''');
+    var items = await _getTypeHierarchy('T extends Object');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'T',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [2, 3],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'MA',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'MB',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      }
+    ]);
+  }
+
+  Future<void> test_enum_displayName() async {
+    addTestFile('''
+mixin M<T> {}
+
+enum E with M<int> {
+  v;
+}
+''');
+    var items = await _getTypeHierarchy('E with');
+
+    var itemB = items[0];
+    expect(itemB.classElement.name, 'E');
+
+    var itemA = items[itemB.superclass!];
+    expect(itemA.classElement.name, 'Enum');
+    expect(itemA.displayName, isNull);
+
+    expect(itemB.mixins, hasLength(1));
+    var itemM = items[itemB.mixins[0]];
+    expect(itemM.classElement.name, 'M');
+    expect(itemM.displayName, 'M<int>');
+  }
+
+  Future<void> test_enum_implements() async {
+    addTestFile('''
+class A {}
+class B {}
+enum E implements A, B {
+  v;
+}
+''');
+    var items = await _getTypeHierarchy('E implements');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'ENUM',
+          'name': 'E',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [3, 4],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Enum',
+          'location': anything,
+          'flags': 1
+        },
+        'superclass': 2,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'A',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 2,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'B',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 2,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      }
+    ]);
+  }
+
+  Future<void> test_enum_member_getter() async {
+    addTestFile('''
+class A {
+  int get test => 0; // in A
+}
+class B extends A {
+  int get test => 0; // in B
+}
+class C extends B {
+}
+enum E implements C {
+  v;
+  int get test => 0; // in D
+}
+''');
+    var items = await _getTypeHierarchy('test => 0; // in B');
+    var itemB = items[0];
+    var itemA = items[itemB.superclass!];
+    var itemC = items[itemB.subclasses[0]];
+    var itemE = items[itemC.subclasses[0]];
+    expect(itemA.classElement.name, 'A');
+    expect(itemB.classElement.name, 'B');
+    expect(itemC.classElement.name, 'C');
+    expect(itemE.classElement.name, 'E');
+    expect(
+      itemA.memberElement!.location!.offset,
+      findOffset('test => 0; // in A'),
+    );
+    expect(
+      itemB.memberElement!.location!.offset,
+      findOffset('test => 0; // in B'),
+    );
+    expect(itemC.memberElement, isNull);
+    expect(
+      itemE.memberElement!.location!.offset,
+      findOffset('test => 0; // in D'),
+    );
+  }
+
+  Future<void> test_enum_member_method() async {
+    addTestFile('''
+class A {
+  void test() {} // in A
+}
+class B extends A {
+  void test() {} // in B
+}
+class C extends B {
+}
+enum E implements C {
+  v;
+  void test() {} // in E
+}
+''');
+    var items = await _getTypeHierarchy('test() {} // in B');
+    var itemB = items[0];
+    var itemA = items[itemB.superclass!];
+    var itemC = items[itemB.subclasses[0]];
+    var itemE = items[itemC.subclasses[0]];
+    expect(itemA.classElement.name, 'A');
+    expect(itemB.classElement.name, 'B');
+    expect(itemC.classElement.name, 'C');
+    expect(itemE.classElement.name, 'E');
+    expect(
+      itemA.memberElement!.location!.offset,
+      findOffset('test() {} // in A'),
+    );
+    expect(
+      itemB.memberElement!.location!.offset,
+      findOffset('test() {} // in B'),
+    );
+    expect(itemC.memberElement, isNull);
+    expect(
+      itemE.memberElement!.location!.offset,
+      findOffset('test() {} // in E'),
+    );
+  }
+
+  Future<void> test_enum_member_setter() async {
+    addTestFile('''
+class A {
+  set test(int x) {} // in A
+}
+class B extends A {
+  set test(int x) {} // in B
+}
+class C extends B {
+}
+enum E implements C {
+  v;
+  set test(int x) {} // in E
+}
+''');
+    var items = await _getTypeHierarchy('test(int x) {} // in B');
+    var itemB = items[0];
+    var itemA = items[itemB.superclass!];
+    var itemC = items[itemB.subclasses[0]];
+    var itemE = items[itemC.subclasses[0]];
+    expect(itemA.classElement.name, 'A');
+    expect(itemB.classElement.name, 'B');
+    expect(itemC.classElement.name, 'C');
+    expect(itemE.classElement.name, 'E');
+    expect(
+      itemA.memberElement!.location!.offset,
+      findOffset('test(int x) {} // in A'),
+    );
+    expect(
+      itemB.memberElement!.location!.offset,
+      findOffset('test(int x) {} // in B'),
+    );
+    expect(itemC.memberElement, isNull);
+    expect(
+      itemE.memberElement!.location!.offset,
+      findOffset('test(int x) {} // in E'),
+    );
+  }
+
+  Future<void> test_enum_with() async {
+    addTestFile('''
+mixin M {}
+enum E with M {
+  v;
+}
+''');
+    var items = await _getTypeHierarchy('E with');
+    expect(_toJson(items), [
+      {
+        'classElement': {
+          'kind': 'ENUM',
+          'name': 'E',
+          'location': anything,
+          'flags': 0
+        },
+        'superclass': 1,
+        'interfaces': [],
+        'mixins': [3],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Enum',
+          'location': anything,
+          'flags': 1
+        },
+        'superclass': 2,
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'CLASS',
+          'name': 'Object',
+          'location': anything,
+          'flags': 0
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      },
+      {
+        'classElement': {
+          'kind': 'MIXIN',
+          'name': 'M',
+          'location': anything,
+          'flags': 1
+        },
+        'interfaces': [],
+        'mixins': [],
+        'subclasses': []
+      }
+    ]);
+  }
+
   void _assertMember(TypeHierarchyItem item, String search) {
     expect(item.memberElement!.location!.offset, findOffset(search));
   }
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 7bf72fe..142d6f6 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
@@ -168,6 +168,27 @@
     });
   }
 
+  Future<void> test_flutter_InstanceCreationExpression_3() async {
+    // Ensure a trailing comma is not added when only replacing the name.
+    writeTestPackageConfig(flutter: true);
+
+    addTestSource('''
+import 'package:flutter/material.dart';
+
+build() => new Row(
+    ke^: null,
+  );
+''');
+
+    var response = await computeSuggestions2();
+    _checkNamedArguments(response).containsMatch((suggestion) {
+      suggestion
+        ..completion.isEqualTo('key')
+        ..defaultArgumentListString.isNull
+        ..hasSelection(offset: 3);
+    });
+  }
+
   Future<void>
       test_flutter_InstanceCreationExpression_children_dynamic() async {
     // Ensure we don't generate unneeded <dynamic> param if a future API doesn't
@@ -660,17 +681,15 @@
       check: (response) {
         _checkNamedArguments(response).matchesInAnyOrder([
           (suggestion) => suggestion
-            // TODO(scheglov) This does not seem right.
-            ..completion.isEqualTo('two: ')
+            ..completion.isEqualTo('two')
             ..parameterType.isEqualTo('int')
             ..hasEmptyReplacement()
-            ..hasSelection(offset: 5),
+            ..hasSelection(offset: 3),
           (suggestion) => suggestion
-            // TODO(scheglov) This does not seem right.
-            ..completion.isEqualTo('three: ')
+            ..completion.isEqualTo('three')
             ..parameterType.isEqualTo('double')
             ..hasEmptyReplacement()
-            ..hasSelection(offset: 7),
+            ..hasSelection(offset: 5),
         ]);
       },
     );
@@ -740,6 +759,16 @@
 ''');
     await computeAndCheck();
 
+    // Enum constant.
+    addTestSource2('''
+$languageVersionLine
+enum E {
+  v$arguments;
+  const E$parameters;
+}
+''');
+    await computeAndCheck();
+
     // Function expression invocation.
     addTestSource2('''
 $languageVersionLine
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_check.dart b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
index 57a911e..a7094e8 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_check.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_check.dart
@@ -3,9 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer_utilities/check/check.dart';
 import 'package:meta/meta.dart';
 
+typedef CompletionSuggestionChecker = void Function(
+  CompletionSuggestionTarget suggestion,
+);
+
+typedef CompletionSuggestionTarget
+    = CheckTarget<CompletionSuggestionForTesting>;
+
 class CompletionResponseForTesting {
   final int requestOffset;
   final int replacementOffset;
@@ -179,6 +187,16 @@
     element.isNotNull.kind.isConstructor;
   }
 
+  void get isEnum {
+    kind.isIdentifier;
+    element.isNotNull.kind.isEnum;
+  }
+
+  void get isEnumConstant {
+    kind.isIdentifier;
+    element.isNotNull.kind.isEnumConstant;
+  }
+
   void get isField {
     kind.isIdentifier;
     element.isNotNull.kind.isField;
@@ -194,11 +212,30 @@
     element.isNotNull.kind.isGetter;
   }
 
+  void get isImportPrefix {
+    kind.isIdentifier;
+    element.isNotNull.kind.isPrefix;
+  }
+
+  void get isKeywordAny {
+    kind.isKeyword;
+  }
+
   void get isMethodInvocation {
     kind.isInvocation;
     element.isNotNull.kind.isMethod;
   }
 
+  void get isMixin {
+    kind.isIdentifier;
+    element.isNotNull.kind.isMixin;
+  }
+
+  void get isNamedArgument {
+    kind.isNamedArgument;
+    element.isNull;
+  }
+
   @useResult
   CheckTarget<bool?> get isNotImported {
     return nest(
@@ -231,10 +268,18 @@
   }
 
   @useResult
+  CheckTarget<String?> get libraryUri {
+    return nest(
+      value.suggestion.libraryUri,
+      (selected) => 'has libraryUri ${valueStr(selected)}',
+    );
+  }
+
+  @useResult
   CheckTarget<String?> get libraryUriToImport {
     return nest(
       value.suggestion.isNotImported == true
-          ? value.suggestion.element?.libraryUri
+          ? value.suggestion.libraryUri
           : null,
       (selected) => 'has libraryUriToImport ${valueStr(selected)}',
     );
@@ -307,6 +352,11 @@
     selectionOffset.isEqualTo(offset);
     selectionLength.isEqualTo(length);
   }
+
+  void isKeyword(Keyword keyword) {
+    kind.isKeyword;
+    completion.isEqualTo(keyword.lexeme);
+  }
 }
 
 extension CompletionSuggestionKindExtension
@@ -318,6 +368,14 @@
   void get isInvocation {
     isEqualTo(CompletionSuggestionKind.INVOCATION);
   }
+
+  void get isKeyword {
+    isEqualTo(CompletionSuggestionKind.KEYWORD);
+  }
+
+  void get isNamedArgument {
+    isEqualTo(CompletionSuggestionKind.NAMED_ARGUMENT);
+  }
 }
 
 extension CompletionSuggestionsExtension
@@ -352,6 +410,18 @@
       (selected) => 'withElementClass ${valueStr(selected)}',
     );
   }
+
+  @useResult
+  CheckTarget<Iterable<CompletionSuggestionForTesting>> get withKindKeyword {
+    var result = value
+        .where((suggestion) =>
+            suggestion.suggestion.kind == CompletionSuggestionKind.KEYWORD)
+        .toList();
+    return nest(
+      result,
+      (selected) => 'withKindKeyword ${valueStr(selected)}',
+    );
+  }
 }
 
 extension ElementExtension on CheckTarget<Element> {
@@ -381,6 +451,14 @@
     isEqualTo(ElementKind.CONSTRUCTOR);
   }
 
+  void get isEnum {
+    isEqualTo(ElementKind.ENUM);
+  }
+
+  void get isEnumConstant {
+    isEqualTo(ElementKind.ENUM_CONSTANT);
+  }
+
   void get isField {
     isEqualTo(ElementKind.FIELD);
   }
@@ -397,10 +475,18 @@
     isEqualTo(ElementKind.METHOD);
   }
 
+  void get isMixin {
+    isEqualTo(ElementKind.MIXIN);
+  }
+
   void get isParameter {
     isEqualTo(ElementKind.PARAMETER);
   }
 
+  void get isPrefix {
+    isEqualTo(ElementKind.PREFIX);
+  }
+
   void get isSetter {
     isEqualTo(ElementKind.SETTER);
   }
@@ -409,3 +495,10 @@
     isEqualTo(ElementKind.TOP_LEVEL_VARIABLE);
   }
 }
+
+extension KeywordsExtension on Iterable<Keyword> {
+  List<CompletionSuggestionChecker> get asKeywordChecks {
+    return map((e) => (CompletionSuggestionTarget suggestion) =>
+        suggestion.isKeyword(e)).toList();
+  }
+}
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 f721cc8..c05f315 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
@@ -49,7 +49,7 @@
     var builder = SuggestionBuilder(request);
     var contributor = createContributor(request, builder);
     await contributor.computeSuggestions();
-    return builder.suggestions.toList();
+    return builder.suggestions.map((e) => e.build()).toList();
   }
 
   DartCompletionContributor createContributor(
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 842ac90..d154a6e 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
@@ -28,60 +28,285 @@
 }
 
 mixin EnumTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
+  Future<void> test_enumConstantName() async {
+    await _check_locations(
+      declaration: 'enum MyEnum { foo01 }',
+      codeAtCompletion: 'foo0^',
+      validator: (response) {
+        check(response).hasReplacement(left: 4);
 
-  Future<void> test_unprefixed_imported() async {
+        if (isProtocolVersion2) {
+          check(response).suggestions.matches([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum.foo01')
+              ..isEnumConstant,
+          ]);
+          // No other suggestions.
+        } else {
+          check(response).suggestions.includesAll([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum.foo01')
+              ..isEnumConstant,
+            // The response includes much more, such as `MyEnum` itself.
+            // We don't expect though that the client will show it.
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum')
+              ..isEnum,
+          ]);
+        }
+      },
+    );
+  }
+
+  Future<void> test_enumConstantName_imported_withPrefix() async {
+    await addProjectFile('lib/a.dart', r'''
+enum MyEnum { foo01 }
+''');
+
+    var response = await getTestCodeSuggestions('''
+import 'a.dart' as prefix;
+
+void f() {
+  foo0^
+}
+''');
+
+    check(response).hasReplacement(left: 4);
+
+    if (isProtocolVersion2) {
+      check(response).suggestions.matches([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('prefix.MyEnum.foo01')
+          ..isEnumConstant,
+      ]);
+    } else {
+      // TODO(scheglov) This is wrong.
+      check(response).suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('MyEnum.foo01')
+          ..isEnumConstant,
+      ]);
+    }
+  }
+
+  Future<void> test_enumName() async {
+    await _check_locations(
+      declaration: 'enum MyEnum { foo01 }',
+      codeAtCompletion: 'MyEnu^',
+      validator: (response) {
+        check(response).hasReplacement(left: 5);
+
+        if (isProtocolVersion2) {
+          check(response).suggestions.matches([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum')
+              ..isEnum,
+          ]);
+          // No enum constants.
+        } else {
+          check(response).suggestions.includesAll([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum')
+              ..isEnum,
+          ]);
+        }
+      },
+    );
+  }
+
+  Future<void> test_enumName_imported_withPrefix() async {
+    await addProjectFile('lib/a.dart', r'''
+enum MyEnum { foo01 }
+''');
+
+    var response = await getTestCodeSuggestions('''
+import 'a.dart' as prefix;
+
+void f() {
+  MyEnu^
+}
+''');
+
+    check(response).hasReplacement(left: 5);
+
+    if (isProtocolVersion2) {
+      check(response).suggestions.matches([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('prefix.MyEnum')
+          ..isEnum,
+      ]);
+    } else {
+      // TODO(scheglov) This is wrong.
+      check(response).suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('MyEnum')
+          ..isEnum,
+      ]);
+    }
+  }
+
+  @FailingTest(reason: 'element.kind is LIBRARY')
+  Future<void> test_importPrefix() async {
     await addProjectFile('lib/a.dart', r'''
 enum MyEnum { v }
 ''');
 
     var response = await getTestCodeSuggestions('''
-import 'a.dart';
+import 'a.dart' as prefix01;
 
 void f() {
-  ^
+  prefix0^
 }
 ''');
 
-    _checkUnprefixed(response);
+    check(response).hasReplacement(left: 7);
+
+    if (isProtocolVersion2) {
+      check(response).suggestions.matches([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('prefix01')
+          ..isImportPrefix,
+      ]);
+    } else {
+      check(response).suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('prefix01')
+          ..isImportPrefix,
+      ]);
+    }
   }
 
-  Future<void> test_unprefixed_local() async {
-    var response = await getTestCodeSuggestions('''
-enum MyEnum { v }
-
-void f() {
-  ^
-}
-''');
-
-    _checkUnprefixed(response);
-  }
-
-  Future<void> test_unprefixed_notImported() async {
+  Future<void> test_importPrefix_dot() async {
     await addProjectFile('lib/a.dart', r'''
 enum MyEnum { v }
 ''');
 
     var response = await getTestCodeSuggestions('''
+import 'a.dart' as prefix;
+
 void f() {
-  ^
+  prefix.^
 }
 ''');
 
-    _checkUnprefixed(response);
-  }
+    check(response).hasEmptyReplacement();
 
-  void _checkUnprefixed(CompletionResponseForTesting response) {
     check(response).suggestions
       ..includesAll([
-        (suggestion) => suggestion.completion.isEqualTo('MyEnum.v'),
-      ])
-      ..excludesAll([
         (suggestion) => suggestion
-          ..completion.startsWith('MyEnum')
-          ..isConstructorInvocation,
+          ..completion.isEqualTo('MyEnum')
+          ..isEnum,
+      ])
+      // TODO(scheglov) This is wrong.
+      // Should include constants, as [test_nothing_imported_withPrefix] does.
+      ..excludesAll([
+        (suggestion) => suggestion.isEnumConstant,
       ]);
   }
+
+  Future<void> test_nothing() async {
+    await _check_locations(
+      declaration: 'enum MyEnum { v }',
+      codeAtCompletion: '^',
+      validator: (response) {
+        check(response).hasEmptyReplacement();
+
+        check(response).suggestions
+          ..includesAll([
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum')
+              ..isEnum,
+            (suggestion) => suggestion
+              ..completion.isEqualTo('MyEnum.v')
+              ..isEnumConstant,
+          ])
+          ..excludesAll([
+            (suggestion) => suggestion
+              ..completion.startsWith('MyEnum')
+              ..isConstructorInvocation,
+          ]);
+      },
+    );
+  }
+
+  Future<void> test_nothing_imported_withPrefix() async {
+    await addProjectFile('lib/a.dart', r'''
+enum MyEnum { v }
+''');
+
+    var response = await getTestCodeSuggestions('''
+import 'a.dart' as prefix;
+
+void f() {
+  ^
+}
+''');
+
+    check(response).hasEmptyReplacement();
+
+    if (isProtocolVersion2) {
+      check(response).suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('prefix.MyEnum')
+          ..isEnum,
+        (suggestion) => suggestion
+          ..completion.isEqualTo('prefix.MyEnum.v')
+          ..isEnumConstant,
+      ]);
+    } else {
+      // TODO(scheglov) This is wrong.
+      check(response).suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('MyEnum')
+          ..isEnum,
+        (suggestion) => suggestion
+          ..completion.isEqualTo('MyEnum.v')
+          ..isEnumConstant,
+      ]);
+    }
+  }
+
+  Future<void> _check_locations({
+    required String declaration,
+    required String codeAtCompletion,
+    required void Function(CompletionResponseForTesting response) validator,
+  }) async {
+    // local
+    {
+      var response = await getTestCodeSuggestions('''
+$declaration
+void f() {
+  $codeAtCompletion
+}
+''');
+      validator(response);
+    }
+
+    // imported
+    {
+      await addProjectFile('lib/a.dart', '''
+$declaration
+''');
+      var response = await getTestCodeSuggestions('''
+import 'a.dart';
+void f() {
+  $codeAtCompletion
+}
+''');
+      validator(response);
+    }
+
+    // not imported
+    {
+      await addProjectFile('lib/a.dart', '''
+$declaration
+''');
+      var response = await getTestCodeSuggestions('''
+void f() {
+  $codeAtCompletion
+}
+''');
+      validator(response);
+    }
+  }
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/library_test.dart b/pkg/analysis_server/test/services/completion/dart/declaration/library_test.dart
new file mode 100644
index 0000000..e5eea3f
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/library_test.dart
@@ -0,0 +1,42 @@
+// 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(LibraryTest1);
+    defineReflectiveTests(LibraryTest2);
+  });
+}
+
+mixin EnumTestCases on AbstractCompletionDriverTest {
+  Future<void> test_dart_noInternalLibraries() async {
+    var response = await getTestCodeSuggestions('''
+void f() {
+  ^
+}
+''');
+
+    check(response).suggestions.excludesAll([
+      (suggestion) => suggestion.libraryUri.isNotNull.startsWith('dart:_'),
+    ]);
+  }
+}
+
+@reflectiveTest
+class LibraryTest1 extends AbstractCompletionDriverTest with EnumTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class LibraryTest2 extends AbstractCompletionDriverTest with EnumTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart b/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart
index b1de9ef..12cf693 100644
--- a/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart
@@ -5,10 +5,12 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'enum_test.dart' as enum_;
+import 'library_test.dart' as library_;
 
 /// Tests suggestions produced for various kinds of declarations.
 void main() {
   defineReflectiveSuite(() {
     enum_.main();
+    library_.main();
   });
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
deleted file mode 100644
index d63a695..0000000
--- a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
+++ /dev/null
@@ -1,151 +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.
-
-import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
-import 'package:analysis_server/src/services/completion/dart/field_formal_contributor.dart';
-import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analyzer_utilities/check/check.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'completion_check.dart';
-import 'completion_contributor_util.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(FieldFormalContributorTest);
-  });
-}
-
-@reflectiveTest
-class FieldFormalContributorTest extends DartCompletionContributorTest {
-  @override
-  DartCompletionContributor createContributor(
-    DartCompletionRequest request,
-    SuggestionBuilder builder,
-  ) {
-    return FieldFormalContributor(request, builder);
-  }
-
-  /// https://github.com/dart-lang/sdk/issues/39028
-  Future<void> test_mixin_constructor() async {
-    addTestSource('''
-mixin M {
-  var field = 0;
-  M(this.^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response).suggestions.isEmpty;
-  }
-
-  Future<void> test_replacement_left() async {
-    addTestSource('''
-class A {
-  var field = 0;
-  A(this.f^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasReplacement(left: 1)
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('field')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_replacement_right() async {
-    addTestSource('''
-class A {
-  var field = 0;
-  A(this.^f);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasReplacement(right: 1)
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('field')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_suggestions_onlyLocal() async {
-    addTestSource('''
-class A {
-  var inherited = 0;
-}
-
-class B extends A {
-  var first = 0;
-  var second = 1.2;
-  B(this.^);
-  B.constructor() {}
-  void method() {}
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isField
-          ..returnType.isEqualTo('int'),
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isField
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_suggestions_onlyNotSpecified_optionalNamed() async {
-    addTestSource('''
-class Point {
-  final int x;
-  final int y;
-  Point({this.x, this.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('y')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_suggestions_onlyNotSpecified_requiredPositional() async {
-    addTestSource('''
-class Point {
-  final int x;
-  final int y;
-  Point(this.x, this.^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('y')
-          ..isField
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index c2c05ab..1918e2d 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -394,6 +394,7 @@
       Keyword.ABSTRACT,
       Keyword.CONST,
       Keyword.COVARIANT,
+      Keyword.DYNAMIC,
       Keyword.EXTERNAL,
       Keyword.FINAL
     ];
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 c463ed9..235ed40 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
@@ -1658,7 +1658,7 @@
 
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestParameter('e', 'E');
+    assertSuggestLocalVariable('e', 'E');
     assertSuggestMethod('a', 'A', null);
     assertNotSuggested('Object');
     assertNotSuggested('x');
@@ -1671,8 +1671,8 @@
 
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
-    assertSuggestParameter('e', 'Object');
-    assertSuggestParameter('s', 'StackTrace');
+    assertSuggestLocalVariable('e', 'Object');
+    assertSuggestLocalVariable('s', 'StackTrace');
     assertSuggestMethod('a', 'A', null);
     assertNotSuggested('Object');
     assertNotSuggested('x');
diff --git a/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart b/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart
new file mode 100644
index 0000000..d473b9f
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart
@@ -0,0 +1,322 @@
+// 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/ast/token.dart';
+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(ClassBodyTest1);
+    defineReflectiveTests(ClassBodyTest2);
+  });
+}
+
+@reflectiveTest
+class ClassBodyTest1 extends AbstractCompletionDriverTest
+    with ClassBodyTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class ClassBodyTest2 extends AbstractCompletionDriverTest
+    with ClassBodyTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin ClassBodyTestCases on AbstractCompletionDriverTest {
+  /// It does not really matter which classes we list here, in this test
+  /// suite we only need to know that we suggest classes at all.
+  List<CompletionSuggestionChecker> get sampleClassChecks {
+    return const {
+      'Object',
+    }.map((name) {
+      return (CompletionSuggestionTarget suggestion) {
+        suggestion
+          ..completion.isEqualTo(name)
+          ..isClass;
+      };
+    }).toList();
+  }
+
+  Future<void> test_nothing_x() async {
+    await _checkContainers(
+      line: '^',
+      validator: (context, response) {
+        check(response).suggestions
+          ..withKindKeyword.matchesInAnyOrder(
+            {
+              // TODO(scheglov) Not quite right, without static.
+              Keyword.CONST,
+              if (context.isClass || context.isMixin) Keyword.COVARIANT,
+              Keyword.DYNAMIC,
+              // TODO(scheglov) This does not look right, mixin.
+              if (context.isClass || context.isMixin) Keyword.FACTORY,
+              Keyword.FINAL,
+              Keyword.GET,
+              Keyword.LATE,
+              Keyword.OPERATOR,
+              Keyword.SET,
+              Keyword.STATIC,
+              Keyword.VAR,
+              Keyword.VOID,
+            }.asKeywordChecks,
+          )
+          ..includesAll(sampleClassChecks);
+      },
+    );
+  }
+
+  Future<void> test_static_const_x() async {
+    await _checkContainers(
+      line: 'static const ^',
+      validator: (context, response) {
+        check(response).suggestions
+          ..withKindKeyword.matchesInAnyOrder(
+            {
+              Keyword.DYNAMIC,
+              Keyword.VOID,
+            }.asKeywordChecks,
+          )
+          ..includesAll(sampleClassChecks);
+      },
+    );
+  }
+
+  Future<void> test_static_final_Ox() async {
+    await _checkContainers(
+      line: 'static final O^',
+      validator: (context, response) {
+        if (isProtocolVersion2) {
+          check(response).suggestions
+            ..withKindKeyword.isEmpty
+            ..includesAll(sampleClassChecks);
+        } else {
+          check(response).suggestions
+            ..withKindKeyword.matchesInAnyOrder(
+              {
+                Keyword.DYNAMIC,
+                Keyword.VOID,
+              }.asKeywordChecks,
+            )
+            ..includesAll(sampleClassChecks);
+        }
+      },
+    );
+  }
+
+  Future<void> test_static_final_x() async {
+    await _checkContainers(
+      line: 'static final ^',
+      validator: (context, response) {
+        check(response).suggestions
+          ..withKindKeyword.matchesInAnyOrder(
+            {
+              Keyword.DYNAMIC,
+              Keyword.VOID,
+            }.asKeywordChecks,
+          )
+          ..includesAll(sampleClassChecks);
+      },
+    );
+  }
+
+  Future<void> test_static_fx() async {
+    await _checkContainers(
+      line: 'static f^',
+      validator: (context, response) {
+        if (isProtocolVersion2) {
+          check(response).suggestions
+            ..withKindKeyword.matchesInAnyOrder(
+              {
+                Keyword.FINAL,
+              }.asKeywordChecks,
+            )
+            ..includesAll([
+              (suggestion) => suggestion
+                ..completion.isEqualTo('FutureOr')
+                ..isClass,
+            ]);
+        } else {
+          check(response).suggestions
+            ..withKindKeyword.matchesInAnyOrder(
+              {
+                Keyword.ABSTRACT,
+                Keyword.CONST,
+                Keyword.COVARIANT,
+                Keyword.DYNAMIC,
+                Keyword.EXTERNAL,
+                Keyword.FINAL,
+                Keyword.LATE,
+              }.asKeywordChecks,
+            )
+            ..includesAll(sampleClassChecks);
+        }
+      },
+    );
+  }
+
+  Future<void> test_static_late_x() async {
+    await _checkContainers(
+      line: 'static late ^',
+      validator: (context, response) {
+        check(response).suggestions
+          ..withKindKeyword.matchesInAnyOrder(
+            {
+              Keyword.DYNAMIC,
+              Keyword.FINAL,
+            }.asKeywordChecks,
+          )
+          ..includesAll(sampleClassChecks);
+      },
+    );
+  }
+
+  Future<void> test_static_x() async {
+    await _checkContainers(
+      line: 'static ^',
+      validator: (context, response) {
+        check(response).suggestions
+          ..withKindKeyword.matchesInAnyOrder(
+            {
+              Keyword.CONST,
+              Keyword.DYNAMIC,
+              Keyword.FINAL,
+              Keyword.LATE,
+            }.asKeywordChecks,
+          )
+          ..includesAll(sampleClassChecks);
+      },
+    );
+  }
+
+  Future<void> test_static_x_name_eq() async {
+    await _checkContainers(
+      line: 'static ^ name = 0;',
+      validator: (context, response) {
+        check(response).suggestions
+          ..withKindKeyword.matchesInAnyOrder(
+            {
+              // TODO(scheglov) This does not look right.
+              Keyword.ABSTRACT,
+              Keyword.CONST,
+              // TODO(scheglov) This does not look right.
+              Keyword.COVARIANT,
+              Keyword.DYNAMIC,
+              // TODO(scheglov) This does not look right.
+              Keyword.EXTERNAL,
+              Keyword.FINAL,
+              Keyword.LATE,
+            }.asKeywordChecks,
+          )
+          ..includesAll(sampleClassChecks);
+      },
+    );
+  }
+
+  Future<void> test_sx() async {
+    await _checkContainers(
+      line: 's^',
+      validator: (context, response) {
+        if (isProtocolVersion2) {
+          check(response).suggestions
+            ..withKindKeyword.matchesInAnyOrder(
+              {
+                Keyword.SET,
+                Keyword.STATIC,
+              }.asKeywordChecks,
+            )
+            ..includesAll([
+              (suggestion) => suggestion
+                ..completion.isEqualTo('String')
+                ..isClass,
+            ]);
+        } else {
+          check(response).suggestions
+            ..withKindKeyword.matchesInAnyOrder(
+              {
+                // TODO(scheglov) Not quite right, without static.
+                Keyword.CONST,
+                if (context.isClass || context.isMixin) Keyword.COVARIANT,
+                Keyword.DYNAMIC,
+                // TODO(scheglov) This does not look right, mixin.
+                if (context.isClass || context.isMixin) Keyword.FACTORY,
+                Keyword.FINAL,
+                Keyword.GET,
+                Keyword.LATE,
+                Keyword.OPERATOR,
+                Keyword.SET,
+                Keyword.STATIC,
+                Keyword.VAR,
+                Keyword.VOID,
+              }.asKeywordChecks,
+            )
+            ..includesAll(sampleClassChecks);
+        }
+      },
+    );
+  }
+
+  Future<void> _checkContainers({
+    required String line,
+    required void Function(
+      _Context context,
+      CompletionResponseForTesting response,
+    )
+        validator,
+  }) async {
+    // class
+    {
+      var response = await getTestCodeSuggestions('''
+class A {
+  $line
+}
+''');
+      validator(_Context(isClass: true), response);
+    }
+    // enum
+    {
+      var response = await getTestCodeSuggestions('''
+enum E {
+  v;
+  $line
+}
+''');
+      validator(_Context(), response);
+    }
+    // extension
+    {
+      var response = await getTestCodeSuggestions('''
+extension on Object {
+  $line
+}
+''');
+      validator(_Context(), response);
+    }
+    // mixin
+    {
+      var response = await getTestCodeSuggestions('''
+mixin M {
+  $line
+}
+''');
+      validator(_Context(isMixin: true), response);
+    }
+  }
+}
+
+class _Context {
+  final bool isClass;
+  final bool isMixin;
+
+  _Context({
+    this.isClass = false,
+    this.isMixin = false,
+  });
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart b/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart
new file mode 100644
index 0000000..90a8f54
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart
@@ -0,0 +1,42 @@
+// 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(EnumConstantDeclarationTest1);
+    defineReflectiveTests(EnumConstantDeclarationTest2);
+  });
+}
+
+@reflectiveTest
+class EnumConstantDeclarationTest1 extends AbstractCompletionDriverTest
+    with EnumConstantDeclarationTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class EnumConstantDeclarationTest2 extends AbstractCompletionDriverTest
+    with EnumConstantDeclarationTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin EnumConstantDeclarationTestCases on AbstractCompletionDriverTest {
+  Future<void> test_afterName_atEnd() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v^
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+}
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
new file mode 100644
index 0000000..5ebb1ac
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
@@ -0,0 +1,338 @@
+// 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/ast/token.dart';
+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(EnumDeclarationTest1);
+    defineReflectiveTests(EnumDeclarationTest2);
+  });
+}
+
+@reflectiveTest
+class EnumDeclarationTest1 extends AbstractCompletionDriverTest
+    with EnumDeclarationTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class EnumDeclarationTest2 extends AbstractCompletionDriverTest
+    with EnumDeclarationTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+
+  Future<void> test_afterName_w() async {
+    var response = await getTestCodeSuggestions('''
+enum E w^ {
+  v
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      ...{
+        Keyword.WITH,
+      }.asKeywordChecks,
+    ]);
+  }
+}
+
+mixin EnumDeclarationTestCases on AbstractCompletionDriverTest {
+  Future<void> test_afterConstants_noSemicolon() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v ^
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_afterImplements() async {
+    var response = await getTestCodeSuggestions('''
+enum E implements ^ {
+  v
+}
+''');
+
+    check(response).suggestions
+      ..withKindKeyword.isEmpty
+      ..includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('Object')
+          ..isClass,
+      ]);
+  }
+
+  Future<void> test_afterImplementsClause() async {
+    var response = await getTestCodeSuggestions('''
+enum E implements A ^ {
+  v
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      ...{
+        Keyword.WITH,
+      }.asKeywordChecks,
+    ]);
+  }
+
+  Future<void> test_afterName() async {
+    var response = await getTestCodeSuggestions('''
+enum E ^ {
+  v
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      ...{
+        Keyword.IMPLEMENTS,
+        Keyword.WITH,
+      }.asKeywordChecks,
+    ]);
+  }
+
+  Future<void> test_afterName_atEnd() async {
+    var response = await getTestCodeSuggestions('''
+enum E^ {
+  v
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_afterName_atLeftCurlyBracket() async {
+    var response = await getTestCodeSuggestions('''
+enum E ^{
+  v
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      ...{
+        Keyword.IMPLEMENTS,
+        Keyword.WITH,
+      }.asKeywordChecks,
+    ]);
+  }
+
+  Future<void> test_afterName_beforeImplements() async {
+    var response = await getTestCodeSuggestions('''
+enum E ^ implements A {
+  v
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      ...{
+        Keyword.WITH,
+      }.asKeywordChecks,
+    ]);
+  }
+
+  Future<void> test_afterName_hasWith_hasImplements() async {
+    var response = await getTestCodeSuggestions('''
+enum E ^ with M implements A {
+  v
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_afterName_language216() async {
+    var response = await getTestCodeSuggestions('''
+// @dart = 2.16
+enum E ^ {
+  v
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_afterWith() async {
+    var response = await getTestCodeSuggestions('''
+enum E with ^ {
+  v
+}
+''');
+
+    check(response).suggestions
+      ..withKindKeyword.isEmpty
+      ..includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('Object')
+          ..isClass,
+      ]);
+  }
+
+  Future<void> test_afterWithClause() async {
+    var response = await getTestCodeSuggestions('''
+enum E with M ^ {
+  v
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      ...{
+        Keyword.IMPLEMENTS,
+      }.asKeywordChecks,
+    ]);
+  }
+
+  Future<void> test_beforeConstants_hasSemicolon() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+ ^ v;
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_beforeConstants_noSemicolon() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+ ^ v
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_constantName_dot_name_x_argumentList_named() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v.foo0^();
+  const E.foo01();
+  const E.foo02();
+  const E.bar01();
+}
+''');
+
+    if (isProtocolVersion2) {
+      check(response)
+        ..hasReplacement(left: 4)
+        ..suggestions.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('foo01')
+            ..isConstructorInvocation,
+          (suggestion) => suggestion
+            ..completion.isEqualTo('foo02')
+            ..isConstructorInvocation,
+        ]);
+    }
+  }
+
+  Future<void> test_constantName_dot_name_x_semicolon_named() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v.foo0^;
+  const E.foo01();
+  const E.foo02();
+  const E.bar01();
+}
+''');
+
+    if (isProtocolVersion2) {
+      check(response)
+        ..hasReplacement(left: 4)
+        ..suggestions.matchesInAnyOrder([
+          (suggestion) => suggestion
+            ..completion.isEqualTo('foo01')
+            ..isConstructorInvocation,
+          (suggestion) => suggestion
+            ..completion.isEqualTo('foo02')
+            ..isConstructorInvocation,
+        ]);
+    }
+  }
+
+  Future<void> test_constantName_dot_x_argumentList_named() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v.^();
+  const E.foo01();
+  const E.foo02();
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo01')
+        ..isConstructorInvocation,
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo02')
+        ..isConstructorInvocation,
+    ]);
+  }
+
+  Future<void> test_constantName_dot_x_semicolon_named() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v.^;
+  const E.foo01();
+  const E.foo02();
+}
+''');
+
+    check(response).suggestions.matchesInAnyOrder([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo01')
+        ..isConstructorInvocation,
+      (suggestion) => suggestion
+        ..completion.isEqualTo('foo02')
+        ..isConstructorInvocation,
+    ]);
+  }
+
+  Future<void> test_constantName_dot_x_semicolon_unnamed_declared() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v.^;
+  const E();
+}
+''');
+
+    check(response).suggestions.matches([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('new')
+        ..isConstructorInvocation,
+    ]);
+  }
+
+  Future<void> test_constantName_dot_x_unnamed_implicit() async {
+    var response = await getTestCodeSuggestions('''
+enum E {
+  v.^
+}
+''');
+
+    check(response).suggestions.matches([
+      (suggestion) => suggestion
+        ..completion.isEqualTo('new')
+        ..isConstructorInvocation,
+    ]);
+  }
+
+  Future<void> test_constantName_dot_x_unnamed_language216() async {
+    var response = await getTestCodeSuggestions('''
+// @dart = 2.16
+enum E {
+  v.^
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart b/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
new file mode 100644
index 0000000..41f4004
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
@@ -0,0 +1,147 @@
+// 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(FieldFormalParameterTest1);
+    defineReflectiveTests(FieldFormalParameterTest2);
+  });
+}
+
+@reflectiveTest
+class FieldFormalParameterTest1 extends AbstractCompletionDriverTest
+    with SuperFormalParameterTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class FieldFormalParameterTest2 extends AbstractCompletionDriverTest
+    with SuperFormalParameterTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin SuperFormalParameterTestCases on AbstractCompletionDriverTest {
+  /// https://github.com/dart-lang/sdk/issues/39028
+  Future<void> test_mixin_constructor() async {
+    var response = await getTestCodeSuggestions('''
+mixin M {
+  var field = 0;
+  M(this.^);
+}
+''');
+
+    check(response).suggestions.isEmpty;
+  }
+
+  Future<void> test_replacement_left() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  var field = 0;
+  A(this.f^);
+}
+''');
+
+    check(response)
+      ..hasReplacement(left: 1)
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('field')
+          ..isField
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_replacement_right() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  var field = 0;
+  A(this.^f);
+}
+''');
+
+    check(response)
+      ..hasReplacement(right: 1)
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('field')
+          ..isField
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_suggestions_onlyLocal() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  var inherited = 0;
+}
+
+class B extends A {
+  var first = 0;
+  var second = 1.2;
+  B(this.^);
+  B.constructor() {}
+  void method() {}
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isField
+          ..returnType.isEqualTo('int'),
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isField
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_suggestions_onlyNotSpecified_optionalNamed() async {
+    var response = await getTestCodeSuggestions('''
+class Point {
+  final int x;
+  final int y;
+  Point({this.x, this.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('y')
+          ..isField
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_suggestions_onlyNotSpecified_requiredPositional() async {
+    var response = await getTestCodeSuggestions('''
+class Point {
+  final int x;
+  final int y;
+  Point(this.x, this.^);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('y')
+          ..isField
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/named_expression_test.dart b/pkg/analysis_server/test/services/completion/dart/location/named_expression_test.dart
new file mode 100644
index 0000000..c6355ea
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/named_expression_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.
+
+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(NamedExpressionExpressionTest1);
+    defineReflectiveTests(NamedExpressionExpressionTest2);
+  });
+}
+
+@reflectiveTest
+class NamedExpressionExpressionTest1 extends AbstractCompletionDriverTest
+    with NamedExpressionExpressionTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class NamedExpressionExpressionTest2 extends AbstractCompletionDriverTest
+    with NamedExpressionExpressionTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin NamedExpressionExpressionTestCases on AbstractCompletionDriverTest {
+  Future<void> test_beforePositional() async {
+    var response = await getTestCodeSuggestions('''
+void f(int x) {
+  g(b: ^, 0);
+}
+
+void g(int a, {required int b}) {}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('x')
+          ..isParameter,
+      ]);
+  }
+
+  Future<void> test_lastArgument() async {
+    var response = await getTestCodeSuggestions('''
+void f(int x) {
+  g(0, b: ^);
+}
+
+void g(int a, {required int b}) {}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('x')
+          ..isParameter,
+      ]);
+  }
+
+  Future<void> test_onlyArgument() async {
+    var response = await getTestCodeSuggestions('''
+void f(int x) {
+  g(a: ^);
+}
+
+void g({required int a}) {}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.includesAll([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('x')
+          ..isParameter,
+      ]);
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart b/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart
new file mode 100644
index 0000000..2d4144a
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart
@@ -0,0 +1,454 @@
+// 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(SuperFormalParameterTest1);
+    defineReflectiveTests(SuperFormalParameterTest2);
+  });
+}
+
+@reflectiveTest
+class SuperFormalParameterTest1 extends AbstractCompletionDriverTest
+    with SuperFormalParameterTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class SuperFormalParameterTest2 extends AbstractCompletionDriverTest
+    with SuperFormalParameterTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin SuperFormalParameterTestCases on AbstractCompletionDriverTest {
+  Future<void> test_explicit_optionalNamed_hasArgument_named() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B({super.^}) : super(first: 0);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_explicit_optionalNamed_hasArgument_positional() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B({super.^}) : super(0);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  /// It is an error, but the user already typed `super.`, so maybe do it.
+  Future<void> test_explicit_requiredPositional_hasArgument_positional() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A(int first, double second);
+}
+
+class B extends A {
+  B(super.^) : super(0);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_explicitNamed_noOther() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A.named(int first, double second);
+  A(int third)
+}
+
+class B extends A {
+  B(super.^) : super.named();
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_hasNamed_notSuper() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B({int a, super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_hasNamed_notSuper2() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B({int first, super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_hasNamed_super() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B({super.first, super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_hasNamed_super2() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B({super.second, super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_hasPositional_notSuper() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B(int a, {super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_hasPositional_super() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A({int first, double second});
+}
+
+class B extends A {
+  B(super.first, {super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalNamed_noOther() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A(bool first, {int second, double third});
+}
+
+class B extends A {
+  B({super.^});
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+        (suggestion) => suggestion
+          ..completion.isEqualTo('third')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalPositional_hasPositional_notSuper() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A([int first, double second]);
+}
+
+class B extends A {
+  B([int one, super.^]);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalPositional_hasPositional_super() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A([int first, double second, bool third]);
+}
+
+class B extends A {
+  B([super.one, super.^]);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalPositional_hasPositional_super2() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A([int first, double second, bool third]);
+}
+
+class B extends A {
+  B([super.second, super.^]);
+}
+''');
+
+    // It does not matter what is the name of the positional parameter.
+    // Here `super.second` consumes `int first`.
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_optionalPositional_noOther() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A([int first, double second]);
+}
+
+class B extends A {
+  B(super.^);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_implicit_requiredPositional_hasPositional_notSuper() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A(int first, double second);
+}
+
+class B extends A {
+  B(int one, super.^);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+
+  Future<void> test_implicit_requiredPositional_hasPositional_super() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A(int first, double second, bool third);
+}
+
+class B extends A {
+  B(super.one, super.^);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_requiredPositional_hasPositional_super2() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A(int first, double second, bool third);
+}
+
+class B extends A {
+  B(super.second, super.^);
+}
+''');
+
+    // It does not matter what is the name of the positional parameter.
+    // Here `super.second` consumes `int first`.
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('second')
+          ..isParameter
+          ..returnType.isEqualTo('double'),
+      ]);
+  }
+
+  Future<void> test_implicit_requiredPositional_noOther() async {
+    var response = await getTestCodeSuggestions('''
+class A {
+  A(int first, double second);
+  A.named(int third);
+}
+
+class B extends A {
+  B(super.^);
+}
+''');
+
+    check(response)
+      ..hasEmptyReplacement()
+      ..suggestions.matchesInAnyOrder([
+        (suggestion) => suggestion
+          ..completion.isEqualTo('first')
+          ..isParameter
+          ..returnType.isEqualTo('int'),
+      ]);
+  }
+}
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
new file mode 100644
index 0000000..5fc5401
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/location/test_all.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 file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'class_body_test.dart' as class_body;
+import 'enum_constant_test.dart' as enum_constant;
+import 'enum_test.dart' as enum_;
+import 'field_formal_parameter_test.dart' as field_formal_parameter;
+import 'named_expression_test.dart' as named_expression;
+import 'super_formal_parameter_test.dart' as super_formal_parameter;
+
+/// Tests suggestions produced at specific locations.
+void main() {
+  defineReflectiveSuite(() {
+    class_body.main();
+    enum_constant.main();
+    enum_.main();
+    field_formal_parameter.main();
+    named_expression.main();
+    super_formal_parameter.main();
+  });
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart b/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
index f353b8d..018c26d 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
@@ -8,9 +8,6 @@
 import '../../../../client/completion_driver_test.dart';
 
 abstract class CompletionRelevanceTest extends AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   /// Assert that all of the given completions were produced and that the
   /// suggestions are ordered in decreasing order based on relevance scores.
   void assertOrder(List<CompletionSuggestion> suggestions) {
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart
index b6ad9fc..73fa3be 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart
@@ -29,9 +29,6 @@
 }
 
 mixin InstanceMemberTestCases on CompletionRelevanceTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_contextType() async {
     await addTestFile(r'''
 class A {}
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 018a020..ea4ec7e 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
@@ -32,14 +32,15 @@
 mixin NamedArgumentTestCases on CompletionRelevanceTest {
   @override
   Future<void> setUp() async {
-    await super.setUp();
-
     var metaLibFolder = MockPackages.instance.addMeta(resourceProvider);
 
-    newDotPackagesFile(projectPath, content: '''
+    // TODO(scheglov) Use `writeTestPackageConfig` instead
+    newDotPackagesFile(testPackageRootPath, content: '''
 meta:${metaLibFolder.toUri()}
-project:${toUri('$projectPath/lib')}
+project:${toUri(testPackageLibPath)}
 ''');
+
+    await super.setUp();
   }
 
   Future<void> test_required() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/super_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/super_formal_contributor_test.dart
deleted file mode 100644
index 88d16b9..0000000
--- a/pkg/analysis_server/test/services/completion/dart/super_formal_contributor_test.dart
+++ /dev/null
@@ -1,471 +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/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
-import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:analysis_server/src/services/completion/dart/super_formal_contributor.dart';
-import 'package:analyzer_utilities/check/check.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'completion_check.dart';
-import 'completion_contributor_util.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(SuperFormalContributorTest);
-  });
-}
-
-@reflectiveTest
-class SuperFormalContributorTest extends DartCompletionContributorTest {
-  @override
-  DartCompletionContributor createContributor(
-    DartCompletionRequest request,
-    SuggestionBuilder builder,
-  ) {
-    return SuperFormalContributor(request, builder);
-  }
-
-  Future<void> test_explicit_optionalNamed_hasArgument_named() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B({super.^}) : super(first: 0);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_explicit_optionalNamed_hasArgument_positional() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B({super.^}) : super(0);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  /// It is an error, but the user already typed `super.`, so maybe do it.
-  Future<void> test_explicit_requiredPositional_hasArgument_positional() async {
-    addTestSource('''
-class A {
-  A(int first, double second);
-}
-
-class B extends A {
-  B(super.^) : super(0);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_explicitNamed_noOther() async {
-    addTestSource('''
-class A {
-  A.named(int first, double second);
-  A(int third)
-}
-
-class B extends A {
-  B(super.^) : super.named();
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_hasNamed_notSuper() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B({int a, super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_hasNamed_notSuper2() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B({int first, super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_hasNamed_super() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B({super.first, super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_hasNamed_super2() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B({super.second, super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_hasPositional_notSuper() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B(int a, {super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_hasPositional_super() async {
-    addTestSource('''
-class A {
-  A({int first, double second});
-}
-
-class B extends A {
-  B(super.first, {super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalNamed_noOther() async {
-    addTestSource('''
-class A {
-  A(bool first, {int second, double third});
-}
-
-class B extends A {
-  B({super.^});
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-        (suggestion) => suggestion
-          ..completion.isEqualTo('third')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalPositional_hasPositional_notSuper() async {
-    addTestSource('''
-class A {
-  A([int first, double second]);
-}
-
-class B extends A {
-  B([int one, super.^]);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalPositional_hasPositional_super() async {
-    addTestSource('''
-class A {
-  A([int first, double second, bool third]);
-}
-
-class B extends A {
-  B([super.one, super.^]);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalPositional_hasPositional_super2() async {
-    addTestSource('''
-class A {
-  A([int first, double second, bool third]);
-}
-
-class B extends A {
-  B([super.second, super.^]);
-}
-''');
-
-    // It does not matter what is the name of the positional parameter.
-    // Here `super.second` consumes `int first`.
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_optionalPositional_noOther() async {
-    addTestSource('''
-class A {
-  A([int first, double second]);
-}
-
-class B extends A {
-  B(super.^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_implicit_requiredPositional_hasPositional_notSuper() async {
-    addTestSource('''
-class A {
-  A(int first, double second);
-}
-
-class B extends A {
-  B(int one, super.^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-
-  Future<void> test_implicit_requiredPositional_hasPositional_super() async {
-    addTestSource('''
-class A {
-  A(int first, double second, bool third);
-}
-
-class B extends A {
-  B(super.one, super.^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_requiredPositional_hasPositional_super2() async {
-    addTestSource('''
-class A {
-  A(int first, double second, bool third);
-}
-
-class B extends A {
-  B(super.second, super.^);
-}
-''');
-
-    // It does not matter what is the name of the positional parameter.
-    // Here `super.second` consumes `int first`.
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('second')
-          ..isParameter
-          ..returnType.isEqualTo('double'),
-      ]);
-  }
-
-  Future<void> test_implicit_requiredPositional_noOther() async {
-    addTestSource('''
-class A {
-  A(int first, double second);
-  A.named(int third);
-}
-
-class B extends A {
-  B(super.^);
-}
-''');
-
-    var response = await computeSuggestions2();
-    check(response)
-      ..hasEmptyReplacement()
-      ..suggestions.matchesInAnyOrder([
-        (suggestion) => suggestion
-          ..completion.isEqualTo('first')
-          ..isParameter
-          ..returnType.isEqualTo('int'),
-      ]);
-  }
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/test_all.dart b/pkg/analysis_server/test/services/completion/dart/test_all.dart
index 0ed0678..29e4a22 100644
--- a/pkg/analysis_server/test/services/completion/dart/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/test_all.dart
@@ -10,7 +10,6 @@
 import 'completion_manager_test.dart' as completion_manager;
 import 'declaration/test_all.dart' as declaration;
 import 'extension_member_contributor_test.dart' as extension_member_contributor;
-import 'field_formal_contributor_test.dart' as field_formal_contributor_test;
 import 'imported_reference_contributor_test.dart' as imported_ref_test;
 import 'keyword_contributor_test.dart' as keyword_test;
 import 'label_contributor_test.dart' as label_contributor_test;
@@ -18,11 +17,11 @@
 import 'library_prefix_contributor_test.dart' as library_prefix_test;
 import 'local_library_contributor_test.dart' as local_lib_test;
 import 'local_reference_contributor_test.dart' as local_ref_test;
+import 'location/test_all.dart' as location;
 import 'named_constructor_contributor_test.dart' as named_contributor_test;
 import 'override_contributor_test.dart' as override_contributor_test;
 import 'relevance/test_all.dart' as relevance_tests;
 import 'static_member_contributor_test.dart' as static_contributor_test;
-import 'super_formal_contributor_test.dart' as super_formal_contributor;
 import 'type_member_contributor_test.dart' as type_member_contributor_test;
 import 'uri_contributor_test.dart' as uri_contributor_test;
 import 'variable_name_contributor_test.dart' as variable_name_contributor_test;
@@ -35,7 +34,6 @@
     completion_manager.main();
     declaration.main();
     extension_member_contributor.main();
-    field_formal_contributor_test.main();
     imported_ref_test.main();
     keyword_test.main();
     label_contributor_test.main();
@@ -43,11 +41,11 @@
     library_prefix_test.main();
     local_lib_test.main();
     local_ref_test.main();
+    location.main();
     named_contributor_test.main();
     override_contributor_test.main();
     relevance_tests.main();
     static_contributor_test.main();
-    super_formal_contributor.main();
     type_member_contributor_test.main();
     uri_contributor_test.main();
     variable_name_contributor_test.main();
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 47000b2..a5d53f4 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
@@ -1674,6 +1674,8 @@
     assertNotSuggested('values');
   }
 
+  /// TODO(scheglov) move this test into contributor independent suite
+  @FailingTest(reason: 'No index, not local anymore')
   Future<void> test_enumConst_index() async {
     addTestSource('enum E { one, two } void f() {E.one.^}');
     await computeSuggestions();
@@ -1684,6 +1686,8 @@
     assertNotSuggested('values');
   }
 
+  /// TODO(scheglov) move this test into contributor independent suite
+  @FailingTest(reason: 'No index, not local anymore')
   Future<void> test_enumConst_index2() async {
     addTestSource('enum E { one, two } void f() {E.one.i^}');
     await computeSuggestions();
@@ -1694,6 +1698,8 @@
     assertNotSuggested('values');
   }
 
+  /// TODO(scheglov) move this test into contributor independent suite
+  @FailingTest(reason: 'No index, not local anymore')
   Future<void> test_enumConst_index3() async {
     addTestSource('enum E { one, two } void f() {E.one.^ int g;}');
     await computeSuggestions();
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 87042b0..5e7fb27 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -585,6 +585,156 @@
 ''');
   }
 
+  Future<void> test_enum_accessor() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+  set c(x) {}
+  set a(x) {}
+  get a => null;
+  get b => null;
+  set b(x) {}
+  get c => null;
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+  get a => null;
+  set a(x) {}
+  get b => null;
+  set b(x) {}
+  get c => null;
+  set c(x) {}
+}
+''');
+  }
+
+  Future<void> test_enum_accessor_static() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+  get a => null;
+  set a(x) {}
+  static get b => null;
+  static set b(x) {}
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+  static get b => null;
+  static set b(x) {}
+  get a => null;
+  set a(x) {}
+}
+''');
+  }
+
+  Future<void> test_enum_field_static() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+  int b;
+  int a;
+  static int d;
+  static int c;
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+  static int d;
+  static int c;
+  int b;
+  int a;
+}
+''');
+  }
+
+  Future<void> test_enum_method() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+  c() {}
+  a() {}
+  b() {}
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+  a() {}
+  b() {}
+  c() {}
+}
+''');
+  }
+
+  Future<void> test_enum_method_emptyLine() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+
+  b() {}
+
+  a() {}
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+
+  a() {}
+
+  b() {}
+}
+''');
+  }
+
+  Future<void> test_enum_method_ignoreCase() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+  m_C() {}
+  m_a() {}
+  m_B() {}
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+  m_a() {}
+  m_B() {}
+  m_C() {}
+}
+''');
+  }
+
+  Future<void> test_enum_method_static() async {
+    await _parseTestUnit(r'''
+enum E {
+  v;
+  static a() {}
+  b() {}
+}
+''');
+    // validate change
+    _assertSort(r'''
+enum E {
+  v;
+  b() {}
+  static a() {}
+}
+''');
+  }
+
   Future<void> test_extension_accessor() async {
     await _parseTestUnit(r'''
 extension E on int {
diff --git a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
index 8b090db..ee79e97 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
@@ -20,6 +20,28 @@
   @override
   late ConvertGetterToMethodRefactoring refactoring;
 
+  Future<void> test_change_extensionMethod() async {
+    await indexTestUnit('''
+extension A on String {
+  int get test => 1;
+}
+void f(String a) {
+  var va = a.test;
+}
+''');
+    var element = findElement.getter('test', of: 'A');
+    _createRefactoringForElement(element);
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+extension A on String {
+  int test() => 1;
+}
+void f(String a) {
+  var va = a.test();
+}
+''');
+  }
+
   Future<void> test_change_function() async {
     await indexTestUnit('''
 int get test => 42;
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 98584b89..865fbcb 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -11,15 +11,129 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(ExtractMethodEnumTest);
     defineReflectiveTests(ExtractMethodTest);
   });
 }
 
 @reflectiveTest
-class ExtractMethodTest extends RefactoringTest {
-  @override
-  late ExtractMethodRefactoringImpl refactoring;
+class ExtractMethodEnumTest extends _ExtractMethodTest {
+  Future<void> test_bad_conflict_method_alreadyDeclaresMethod() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void res() {}
+  void foo() {
+// start
+    print(0);
+// end
+  }
+}
+''');
+    _createRefactoringForStartEndComments();
+    return _assertConditionsError(
+        "Enum 'E' already declares method with name 'res'.");
+  }
 
+  Future<void> test_bad_conflict_method_shadowsSuperDeclaration() async {
+    await indexTestUnit('''
+mixin M {
+  void res() {}
+}
+
+enum E with M {
+  v;
+  void foo() {
+    res();
+// start
+    print(0);
+// end
+  }
+}
+''');
+    _createRefactoringForStartEndComments();
+    return _assertConditionsError("Created method will shadow method 'M.res'.");
+  }
+
+  Future<void> test_bad_conflict_topLevel_willHideInheritedMemberUsage() async {
+    await indexTestUnit('''
+mixin M {
+  void res() {}
+}
+
+enum E with M {
+  v;
+  void foo() {
+    res();
+  }
+}
+
+void f() {
+// start
+  print(0);
+// end
+}
+''');
+    _createRefactoringForStartEndComments();
+    return _assertConditionsError(
+        "Created function will shadow method 'M.res'.");
+  }
+
+  Future<void> test_singleExpression_method() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void foo() {
+    int a = 1 + 2;
+  }
+}
+''');
+    _createRefactoringForString('1 + 2');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+enum E {
+  v;
+  void foo() {
+    int a = res();
+  }
+
+  int res() => 1 + 2;
+}
+''');
+  }
+
+  Future<void> test_statements_method() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void foo() {
+// start
+    print(0);
+// end
+  }
+}
+''');
+    _createRefactoringForStartEndComments();
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+enum E {
+  v;
+  void foo() {
+// start
+    res();
+// end
+  }
+
+  void res() {
+    print(0);
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ExtractMethodTest extends _ExtractMethodTest {
   Future<void> test_bad_assignmentLeftHandSide() async {
     await indexTestUnit('''
 void f() {
@@ -2877,6 +2991,11 @@
 Completer<int> newCompleter() => null;
 ''');
   }
+}
+
+class _ExtractMethodTest extends RefactoringTest {
+  @override
+  late ExtractMethodRefactoringImpl refactoring;
 
   Future _assertConditionsError(String message) async {
     var status = await refactoring.checkAllConditions();
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index 35d678c..e775831 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -12,17 +12,86 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(InlineMethodEnumTest);
     defineReflectiveTests(InlineMethodTest);
   });
 }
 
 @reflectiveTest
-class InlineMethodTest extends RefactoringTest {
-  @override
-  late InlineMethodRefactoringImpl refactoring;
-  bool? deleteSource;
-  bool? inlineAll;
+class InlineMethodEnumTest extends _InlineMethodTest {
+  Future<void> test_getter_classMember_instance() async {
+    await indexTestUnit(r'''
+enum E {
+  v;
+  final int f = 0;
+  int get result => f + 1;
+}
+void f(E e) {
+  print(e.result);
+}
+''');
+    _createRefactoring('result =>');
+    // validate change
+    return _assertSuccessfulRefactoring(r'''
+enum E {
+  v;
+  final int f = 0;
+}
+void f(E e) {
+  print(e.f + 1);
+}
+''');
+  }
 
+  Future<void> test_getter_classMember_static() async {
+    await indexTestUnit(r'''
+enum E {
+  v;
+  static int get result => 1 + 2;
+}
+void f() {
+  print(E.result);
+}
+''');
+    _createRefactoring('result =>');
+    // validate change
+    return _assertSuccessfulRefactoring(r'''
+enum E {
+  v;
+}
+void f() {
+  print(1 + 2);
+}
+''');
+  }
+
+  Future<void> test_method_singleStatement() async {
+    await indexTestUnit(r'''
+enum E {
+  v;
+  void test() {
+    print(0);
+  }
+  void foo() {
+    test();
+  }
+}
+''');
+    _createRefactoring('test() {');
+    // validate change
+    return _assertSuccessfulRefactoring(r'''
+enum E {
+  v;
+  void foo() {
+    print(0);
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class InlineMethodTest extends _InlineMethodTest {
   Future<void> test_access_FunctionElement() async {
     await indexTestUnit(r'''
 test(a, b) {
@@ -1749,6 +1818,13 @@
 var a = 42;
 ''');
   }
+}
+
+class _InlineMethodTest extends RefactoringTest {
+  @override
+  late InlineMethodRefactoringImpl refactoring;
+  bool? deleteSource;
+  bool? inlineAll;
 
   Future _assertConditionsError(String message) async {
     var status = await refactoring.checkAllConditions();
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 52fe0df..983df07 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -22,14 +22,12 @@
   late MoveFileRefactoring refactoring;
 
   Future<void> test_file_containing_imports_exports_parts() async {
-    var pathA = convertPath('/home/test/000/1111/a.dart');
-    var pathB = convertPath('/home/test/000/1111/b.dart');
-    var pathC = convertPath('/home/test/000/1111/22/c.dart');
-    testFile = convertPath('/home/test/000/1111/test.dart');
-    addSource('/absolute/uri.dart', '');
-    addSource(pathA, 'part of lib;');
-    addSource(pathB, "import 'test.dart';");
-    addSource(pathC, '');
+    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: '');
     verifyNoTestUnitErrors = false;
     await resolveTestCode('''
 library lib;
@@ -43,9 +41,9 @@
     // perform refactoring
     _createRefactoring('/home/test/000/1111/22/new_name.dart');
     await _assertSuccessfulRefactoring();
-    assertNoFileChange(pathA);
-    assertFileChangeResult(pathB, "import '22/new_name.dart';");
-    assertNoFileChange(pathC);
+    assertNoFileChange(fileA.path);
+    assertFileChangeResult(fileB.path, "import '22/new_name.dart';");
+    assertNoFileChange(fileC.path);
     assertFileChangeResult(testFile, '''
 library lib;
 import 'dart:math';
@@ -340,9 +338,34 @@
     assertNoFileChange(testFile);
   }
 
-  @failingTest
   Future<void> test_folder_inside_project() async {
-    fail('Not yet implemented/tested');
+    final pathA = convertPath('/home/test/lib/old/a.dart');
+    final pathB = convertPath('/home/test/lib/old/b.dart');
+    final pathC = convertPath('/home/test/lib/old/nested/c.dart');
+    final pathD = convertPath('/home/test/lib/old/nested/d.dart');
+    testFile = convertPath('/home/test/lib/test.dart');
+    addSource(pathA, '');
+    addSource(pathB, '');
+    addSource(pathC, '');
+    addSource(pathD, '');
+    verifyNoTestUnitErrors = false;
+    await resolveTestCode('''
+import 'old/a.dart';
+import 'package:test/old/b.dart';
+import 'old/nested/c.dart';
+import 'package:test/old/nested/d.dart';
+''');
+    // Rename the whole 'old' folder to 'new''.
+    _createRefactoring('/home/test/lib/new', oldFile: '/home/test/lib/old');
+    await _assertSuccessfulRefactoring();
+    assertNoFileChange(pathA);
+    assertNoFileChange(pathB);
+    assertFileChangeResult(testFile, '''
+import 'new/a.dart';
+import 'package:test/new/b.dart';
+import 'new/nested/c.dart';
+import 'package:test/new/nested/d.dart';
+''');
   }
 
   Future<void> test_folder_outside_workspace_returns_failure() async {
@@ -517,8 +540,8 @@
     // Allow passing an oldName for when we don't want to rename testSource,
     // but otherwise fall back to testSource.fullname
     oldFile = convertPath(oldFile ?? testFile);
-    refactoring = MoveFileRefactoring(
-        resourceProvider, refactoringWorkspace, testAnalysisResult, oldFile);
+    refactoring =
+        MoveFileRefactoring(resourceProvider, refactoringWorkspace, oldFile);
     refactoring.newFile = convertPath(newFile);
   }
 }
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 27a8207..524da05 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
@@ -11,12 +11,13 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(RenameClassMemberTest);
+    defineReflectiveTests(RenameClassMemberClassTest);
+    defineReflectiveTests(RenameClassMemberEnumTest);
   });
 }
 
 @reflectiveTest
-class RenameClassMemberTest extends RenameRefactoringTest {
+class RenameClassMemberClassTest extends RenameRefactoringTest {
   Future<void> test_checkFinalConditions_classNameConflict_sameClass() async {
     await indexTestUnit('''
 class NewName {
@@ -1047,3 +1048,573 @@
 ''');
   }
 }
+
+@reflectiveTest
+class RenameClassMemberEnumTest extends RenameRefactoringTest {
+  Future<void> test_checkFinalConditions_classNameConflict_sameClass() async {
+    await indexTestUnit('''
+enum NewName {
+  v;
+  void test() {}
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'NewName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Renamed method has the same name as the declaring enum 'NewName'.",
+        expectedContextSearch: 'test() {}');
+  }
+
+  Future<void> test_checkFinalConditions_classNameConflict_superClass() async {
+    await indexTestUnit('''
+class NewName {
+  void test() {} // 1
+}
+enum E implements NewName {
+  v;
+  void test() {} // 2
+}
+''');
+    createRenameRefactoringAtString('test() {} // 2');
+    // check status
+    refactoring.newName = 'NewName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Renamed method has the same name as the declaring class 'NewName'.",
+        expectedContextSearch: 'test() {} // 1');
+  }
+
+  Future<void> test_checkFinalConditions_hasMember_MethodElement() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  test() {}
+  newName() {} // existing
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Enum 'E' already declares method with name 'newName'.",
+        expectedContextSearch: 'newName() {} // existing');
+  }
+
+  Future<void> test_checkFinalConditions_OK_dropSuffix() async {
+    await indexTestUnit(r'''
+abstract class A {
+  void testOld();
+}
+enum E implements A {
+  v;
+  void testOld() {}
+}
+''');
+    createRenameRefactoringAtString('testOld() {}');
+    // check status
+    refactoring.newName = 'test';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatusOK(status);
+  }
+
+  Future<void> test_checkFinalConditions_publicToPrivate_used() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+}
+''');
+    await indexUnit('$testPackageLibPath/lib.dart', '''
+import 'test.dart';
+
+void f(E e) {
+  e.test();
+}
+''');
+    createRenameRefactoringAtString('test()');
+    // check status
+    refactoring.newName = '_newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Renamed method will be invisible in '${convertPath("lib/lib.dart")}'.");
+  }
+
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalFunction_inSameClass() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+  void f() {
+    newName() {}
+    test(); // marker
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Usage of renamed method will be shadowed by function 'newName'.",
+        expectedContextSearch: 'test(); // marker');
+  }
+
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_inSameClass() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+  void f() {
+    var newName;
+    test(); // marker
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Usage of renamed method will be shadowed by local variable 'newName'.",
+        expectedContextSearch: 'test(); // marker');
+  }
+
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_OK_qualifiedReference() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+  void f() {
+    var newName;
+    this.test(); // marker
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatusOK(status);
+  }
+
+  Future<void>
+      test_checkFinalConditions_shadowed_byLocalVariable_OK_renamedNotUsed() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+  void f() {
+    var newName;
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatusOK(status);
+  }
+
+  Future<void>
+      test_checkFinalConditions_shadowed_byParameter_inSameClass() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+  void f(newName) {
+    test(); // marker
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Usage of renamed method will be shadowed by parameter 'newName'.",
+        expectedContextSearch: 'test(); // marker');
+  }
+
+  Future<void> test_checkFinalConditions_shadowsSuper_MethodElement() async {
+    await indexTestUnit('''
+mixin M {
+  void newName() {}
+}
+enum E with M {
+  v;
+  void test() {}
+  void f() {
+    newName();
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage: "Renamed method will shadow method 'M.newName'.",
+        expectedContextSearch: 'newName() {}');
+  }
+
+  Future<void>
+      test_checkFinalConditions_shadowsSuper_MethodElement_otherLib() async {
+    var libCode = r'''
+mixin M {
+  void newName() {}
+}
+''';
+    await indexUnit('$testPackageLibPath/lib.dart', libCode);
+    await indexTestUnit('''
+import 'lib.dart';
+enum E with M {
+  v;
+  void test() {}
+  void f() {
+    newName();
+  }
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage: "Renamed method will shadow method 'M.newName'.",
+        expectedContextRange:
+            SourceRange(libCode.indexOf('newName() {}'), 'newName'.length));
+  }
+
+  Future<void> test_checkInitialConditions_operator() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  operator -() => this;
+}
+''');
+    createRenameRefactoringAtString('-()');
+    // check status
+    refactoring.newName = 'newName';
+    var status = await refactoring.checkInitialConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL);
+  }
+
+  Future<void> test_checkNewName_FieldElement() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  final int test = 0;
+}
+''');
+    createRenameRefactoringAtString('test = 0;');
+    // OK
+    refactoring.newName = 'newName';
+    assertRefactoringStatusOK(refactoring.checkNewName());
+  }
+
+  Future<void> test_checkNewName_MethodElement() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+}
+''');
+    createRenameRefactoringAtString('test() {}');
+    // empty
+    refactoring.newName = '';
+    assertRefactoringStatus(
+        refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
+        expectedMessage: 'Method name must not be empty.');
+    // same
+    refactoring.newName = 'test';
+    assertRefactoringStatus(
+        refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
+        expectedMessage:
+            'The new name must be different than the current name.');
+    // OK
+    refactoring.newName = 'newName';
+    assertRefactoringStatusOK(refactoring.checkNewName());
+  }
+
+  Future<void> test_createChange_FieldElement() async {
+    verifyNoTestUnitErrors = false;
+    await indexTestUnit('''
+enum E {
+  v;
+  final int test = 0;
+  void f() {
+    test;
+    test = 1;
+    test += 2;
+  }
+}
+void f(E e) {
+  e.test;
+  e.test = 1;
+  e.test += 2;
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test = 0;');
+    expect(refactoring.refactoringName, 'Rename Field');
+    expect(refactoring.elementKindName, 'field');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+enum E {
+  v;
+  final int newName = 0;
+  void f() {
+    newName;
+    newName = 1;
+    newName += 2;
+  }
+}
+void f(E e) {
+  e.newName;
+  e.newName = 1;
+  e.newName += 2;
+}
+''');
+  }
+
+  Future<void>
+      test_createChange_FieldElement_constructorFieldInitializer() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  final int test;
+  const E() : test = 5;
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test;');
+    expect(refactoring.refactoringName, 'Rename Field');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+enum E {
+  v;
+  final int newName;
+  const E() : newName = 5;
+}
+''');
+  }
+
+  Future<void> test_createChange_FieldElement_fieldFormalParameter() async {
+    await indexTestUnit('''
+enum E {
+  v(0);
+  final int test;
+  const E(this.test);
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test;');
+    expect(refactoring.refactoringName, 'Rename Field');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+enum E {
+  v(0);
+  final int newName;
+  const E(this.newName);
+}
+''');
+  }
+
+  Future<void> test_createChange_MethodElement() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  void test() {}
+  void foo() {
+    test();
+    test;
+  }
+}
+
+void f(E e) {
+  e.test();
+  e.test;
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test() {}');
+    expect(refactoring.refactoringName, 'Rename Method');
+    expect(refactoring.elementKindName, 'method');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+enum E {
+  v;
+  void newName() {}
+  void foo() {
+    newName();
+    newName;
+  }
+}
+
+void f(E e) {
+  e.newName();
+  e.newName;
+}
+''');
+  }
+
+  Future<void> test_createChange_MethodElement_fromInterface() async {
+    await indexTestUnit('''
+class A {
+  void test() {} // A
+}
+
+enum E implements A {
+  v;
+  void test() {}
+  void foo() {
+    test();
+  }
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test() {} // A');
+    expect(refactoring.refactoringName, 'Rename Method');
+    expect(refactoring.elementKindName, 'method');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+class A {
+  void newName() {} // A
+}
+
+enum E implements A {
+  v;
+  void newName() {}
+  void foo() {
+    newName();
+  }
+}
+''');
+  }
+
+  Future<void> test_createChange_MethodElement_fromMixin() async {
+    await indexTestUnit('''
+mixin M {
+  void test() {} // M
+}
+
+enum E with M {
+  v;
+  void test() {}
+  void foo() {
+    test();
+  }
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test() {} // M');
+    expect(refactoring.refactoringName, 'Rename Method');
+    expect(refactoring.elementKindName, 'method');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+mixin M {
+  void newName() {} // M
+}
+
+enum E with M {
+  v;
+  void newName() {}
+  void foo() {
+    newName();
+  }
+}
+''');
+  }
+
+  Future<void> test_createChange_PropertyAccessorElement() async {
+    await indexTestUnit('''
+enum E {
+  v;
+  int get test => 0;
+  set test(int _) {}
+  void f() {
+    test;
+    test = 0;
+  }
+}
+void f(E e) {
+  e.test;
+  e.test = 1;
+  e.test += 2;
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('test => 0;');
+    expect(refactoring.refactoringName, 'Rename Field');
+    expect(refactoring.oldName, 'test');
+    refactoring.newName = 'newName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+enum E {
+  v;
+  int get newName => 0;
+  set newName(int _) {}
+  void f() {
+    newName;
+    newName = 0;
+  }
+}
+void f(E e) {
+  e.newName;
+  e.newName = 1;
+  e.newName += 2;
+}
+''');
+  }
+
+  Future<void> test_createChange_TypeParameterElement() async {
+    await indexTestUnit('''
+enum E<Test> {
+  v;
+  final Test? field = null;
+  final List<Test> items = const [];
+  Test method(Test a) => a;
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('Test> {');
+    expect(refactoring.refactoringName, 'Rename Type Parameter');
+    expect(refactoring.elementKindName, 'type parameter');
+    expect(refactoring.oldName, 'Test');
+    refactoring.newName = 'NewName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+enum E<NewName> {
+  v;
+  final NewName? field = null;
+  final List<NewName> items = const [];
+  NewName method(NewName a) => a;
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 79d6fe7..9a40d78 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -12,12 +12,13 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(RenameConstructorTest);
+    defineReflectiveTests(RenameConstructorClassTest);
+    defineReflectiveTests(RenameConstructorEnumTest);
   });
 }
 
 @reflectiveTest
-class RenameConstructorTest extends RenameRefactoringTest {
+class RenameConstructorClassTest extends _RenameConstructorTest {
   Future<void> test_checkInitialConditions_inSDK() async {
     await indexTestUnit('''
 main() {
@@ -285,7 +286,287 @@
         RenameRefactoring.create(workspace, testAnalysisResult, null);
     expect(refactoring, isNull);
   }
+}
 
+@reflectiveTest
+class RenameConstructorEnumTest extends _RenameConstructorTest {
+  Future<void> test_checkNewName() async {
+    await indexTestUnit('''
+enum E {
+  v.test();
+  const E.test(); // 0
+}
+''');
+    createRenameRefactoringAtString('test(); // 0');
+    expect(refactoring.oldName, 'test');
+    // same
+    refactoring.newName = 'test';
+    assertRefactoringStatus(
+        refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
+        expectedMessage:
+            'The new name must be different than the current name.');
+    // empty
+    refactoring.newName = '';
+    assertRefactoringStatusOK(refactoring.checkNewName());
+    // OK
+    refactoring.newName = 'newName';
+    assertRefactoringStatusOK(refactoring.checkNewName());
+  }
+
+  Future<void> test_checkNewName_hasMember_constructor() async {
+    await indexTestUnit('''
+enum E {
+  v.test();
+  const E.test(); // 0
+  const E.newName(); // existing
+}
+''');
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    // check status
+    refactoring.newName = 'newName';
+    var status = refactoring.checkNewName();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Class 'E' already declares constructor with name 'newName'.",
+        expectedContextSearch: 'newName(); // existing');
+  }
+
+  Future<void> test_checkNewName_hasMember_method() async {
+    await indexTestUnit('''
+enum E {
+  v.test();
+  const E.test(); // 0
+  void newName() {} // existing
+}
+''');
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    // check status
+    refactoring.newName = 'newName';
+    var status = refactoring.checkNewName();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Class 'E' already declares method with name 'newName'.",
+        expectedContextSearch: 'newName() {} // existing');
+  }
+
+  Future<void> test_createChange_add() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3, v4.other();
+  const E(); // 0
+  const E.other() : this();
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring('(); // 0');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName(), v4.other();
+  const E.newName(); // 0
+  const E.other() : this.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasConstructor() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+
+  factory E.other() => throw 0;
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  factory E.other() => throw 0;
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasField() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+
+  final int foo = 0;
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  final int foo = 0;
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasMethod() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+
+  void foo() {}
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  const E.newName();
+
+  void foo() {}
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasSemicolon() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_noSemicolon() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_change() async {
+    await indexTestUnit('''
+/// [E.test]
+enum E {
+  v1.test(), v2.other();
+  const E.test(); // 0
+  const E.other() : this.test();
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, 'test');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.other();
+  const E.newName(); // 0
+  const E.other() : this.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_remove() async {
+    await indexTestUnit('''
+/// [E]
+enum E {
+  v1.test(), v2.other();
+  const E.test(); // 0
+  const E.other() : this.test();
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, 'test');
+    // validate change
+    refactoring.newName = '';
+    return assertSuccessfulRefactoring('''
+/// [E]
+enum E {
+  v1(), v2.other();
+  const E(); // 0
+  const E.other() : this();
+}
+''');
+  }
+
+  void _createEnumConstantRefactoring(String search) {
+    var enumConstant = findNode.enumConstantDeclaration(search);
+    var element = enumConstant.constructorElement;
+    createRenameRefactoringForElement(element);
+  }
+}
+
+class _RenameConstructorTest extends RenameRefactoringTest {
   void _createConstructorDeclarationRefactoring(String search) {
     var element = findNode.constructor(search).declaredElement;
     createRenameRefactoringForElement(element);
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index 9ac31f4..17454ea 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -391,99 +391,6 @@
     }
   }
 
-  Future<void> test_getSuperClasses() async {
-    await _indexTestUnit('''
-class A {}
-class B extends A {}
-class C extends B {}
-class D extends B implements A {}
-class M {}
-class E extends A with M {}
-class F implements A {}
-''');
-    var classA = findElement.class_('A');
-    var classB = findElement.class_('B');
-    var classC = findElement.class_('C');
-    var classD = findElement.class_('D');
-    var classE = findElement.class_('E');
-    var classF = findElement.class_('F');
-    var objectElement = classA.supertype!.element;
-    // Object
-    {
-      var supers = getSuperClasses(objectElement);
-      expect(supers, isEmpty);
-    }
-    // A
-    {
-      var supers = getSuperClasses(classA);
-      expect(supers, unorderedEquals([objectElement]));
-    }
-    // B
-    {
-      var supers = getSuperClasses(classB);
-      expect(supers, unorderedEquals([objectElement, classA]));
-    }
-    // C
-    {
-      var supers = getSuperClasses(classC);
-      expect(supers, unorderedEquals([objectElement, classA, classB]));
-    }
-    // D
-    {
-      var supers = getSuperClasses(classD);
-      expect(supers, unorderedEquals([objectElement, classA, classB]));
-    }
-    // E
-    {
-      var supers = getSuperClasses(classE);
-      expect(supers, unorderedEquals([objectElement, classA]));
-    }
-    // F
-    {
-      var supers = getSuperClasses(classF);
-      expect(supers, unorderedEquals([objectElement, classA]));
-    }
-  }
-
-  Future<void> test_getSuperClasses_superclassConstraints() async {
-    await _indexTestUnit('''
-class A {}
-class B extends A {}
-class C {}
-
-mixin M1 on A {}
-mixin M2 on B {}
-mixin M3 on M1 {}
-mixin M4 on M2 {}
-mixin M5 on A, C {}
-''');
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
-    var c = findElement.class_('C');
-    var m1 = findElement.mixin('M1');
-    var m2 = findElement.mixin('M2');
-    var m3 = findElement.mixin('M3');
-    var m4 = findElement.mixin('M4');
-    var m5 = findElement.mixin('M5');
-    var object = a.supertype!.element;
-
-    _assertSuperClasses(object, []);
-    _assertSuperClasses(a, [object]);
-    _assertSuperClasses(b, [object, a]);
-    _assertSuperClasses(c, [object]);
-
-    _assertSuperClasses(m1, [object, a]);
-    _assertSuperClasses(m2, [object, a, b]);
-    _assertSuperClasses(m3, [object, a, m1]);
-    _assertSuperClasses(m4, [object, a, b, m2]);
-    _assertSuperClasses(m5, [object, a, c]);
-  }
-
-  void _assertSuperClasses(ClassElement element, List<ClassElement> expected) {
-    var supers = getSuperClasses(element);
-    expect(supers, unorderedEquals(expected));
-  }
-
   Future<void> _indexTestUnit(String code) async {
     await resolveTestCode(code);
   }
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 43637ae..0097edb 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -61,7 +61,7 @@
     return SearchEngineImpl(allDrivers);
   }
 
-  Future<void> test_membersOfSubtypes_hasMembers() async {
+  Future<void> test_membersOfSubtypes_classByClass_hasMembers() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 class A {
   void a() {}
@@ -91,6 +91,40 @@
     expect(members, unorderedEquals(['a', 'b']));
   }
 
+  Future<void> test_membersOfSubtypes_enum_implements_hasMembers() async {
+    await resolveTestCode('''
+class A {
+  void foo() {}
+}
+
+enum E implements A {
+  v;
+  void foo() {}
+}
+''');
+
+    var A = findElement.class_('A');
+    var members = await searchEngine.membersOfSubtypes(A);
+    expect(members, unorderedEquals(['foo']));
+  }
+
+  Future<void> test_membersOfSubtypes_enum_with_hasMembers() async {
+    await resolveTestCode('''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  void foo() {}
+}
+''');
+
+    var M = findElement.mixin('M');
+    var members = await searchEngine.membersOfSubtypes(M);
+    expect(members, unorderedEquals(['foo']));
+  }
+
   Future<void> test_membersOfSubtypes_noMembers() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 class A {
@@ -344,6 +378,68 @@
     assertHasOne(a, 'a');
   }
 
+  Future<void> test_searchReferences_enum_constructor_named() async {
+    var code = '''
+enum E {
+  v.named(); // 1
+  const E.named();
+}
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.constructor('named');
+    var matches = await searchEngine.searchReferences(element);
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.INVOCATION &&
+              identical(m.element, findElement.field('v')) &&
+              m.sourceRange.offset == code.indexOf('.named(); // 1') &&
+              m.sourceRange.length == '.named'.length;
+        }),
+      ]),
+    );
+  }
+
+  Future<void> test_searchReferences_enum_constructor_unnamed() async {
+    var code = '''
+enum E {
+  v1, // 1
+  v2(), // 2
+  v3.new(), // 3
+}
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.unnamedConstructor('E');
+    var matches = await searchEngine.searchReferences(element);
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind ==
+                  MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS &&
+              identical(m.element, findElement.field('v1')) &&
+              m.sourceRange.offset == code.indexOf(', // 1') &&
+              m.sourceRange.length == 0;
+        }),
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.INVOCATION &&
+              identical(m.element, findElement.field('v2')) &&
+              m.sourceRange.offset == code.indexOf('(), // 2') &&
+              m.sourceRange.length == 0;
+        }),
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.INVOCATION &&
+              identical(m.element, findElement.field('v3')) &&
+              m.sourceRange.offset == code.indexOf('.new(), // 3') &&
+              m.sourceRange.length == '.new'.length;
+        }),
+      ]),
+    );
+  }
+
   Future<void>
       test_searchReferences_parameter_ofConstructor_super_named() async {
     var code = '''
@@ -374,6 +470,32 @@
     );
   }
 
+  Future<void>
+      test_searchReferences_topFunction_parameter_optionalNamed_anywhere() async {
+    var code = '''
+void foo(int a, int b, {int? test}) {}
+
+void g() {
+  foo(1, test: 0, 2);
+}
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.parameter('test');
+    var matches = await searchEngine.searchReferences(element);
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.REFERENCE &&
+              identical(m.element, findElement.topFunction('g')) &&
+              m.sourceRange.offset == code.indexOf('test: 0') &&
+              m.sourceRange.length == 'test'.length;
+        }),
+      ]),
+    );
+  }
+
   Future<void> test_searchTopLevelDeclarations() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 class A {}
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
new file mode 100644
index 0000000..6edf13b
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/dart/flutter_snippet_producers_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.
+
+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';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FlutterStatefulWidgetSnippetProducerTest);
+    defineReflectiveTests(
+        FlutterStatefulWidgetWithAnimationControllerSnippetProducerTest);
+    defineReflectiveTests(FlutterStatelessWidgetSnippetProducerTest);
+  });
+}
+
+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();
+  }
+
+  /// Checks snippets can produce edits where the imports and snippet will be
+  /// inserted at the same location.
+  ///
+  /// For example, when a document is completely empty besides the snippet
+  /// prefix, the imports will be inserted at offset 0 and the snippet will
+  /// replace from 0 to the end of the typed prefix.
+  Future<void> test_valid_importsAndEditsOverlap() async {
+    writeTestPackageConfig(flutter: true);
+
+    final snippet = await expectValidSnippet('$prefix^');
+    expect(snippet.prefix, prefix);
+
+    // Main edits replace $prefix.length characters starting at $prefix
+    final mainEdit = snippet.change.edits[0].edits[0];
+    expect(mainEdit.offset, testCode.indexOf(prefix));
+    expect(mainEdit.length, prefix.length);
+
+    // Imports inserted at start of doc (0)
+    final importEdit = snippet.change.edits[0].edits[1];
+    expect(importEdit.offset, 0);
+    expect(importEdit.length, 0);
+  }
+
+  Future<void> test_valid_suffixReplacement() async {
+    writeTestPackageConfig(flutter: true);
+
+    final snippet = await expectValidSnippet('''
+class A {}
+
+$prefix^
+''');
+    expect(snippet.prefix, prefix);
+
+    // Main edits replace $prefix.length characters starting at $prefix
+    final mainEdit = snippet.change.edits[0].edits[0];
+    expect(mainEdit.offset, testCode.indexOf(prefix));
+    expect(mainEdit.length, prefix.length);
+
+    // Imports inserted at start of doc (0)
+    final importEdit = snippet.change.edits[0].edits[1];
+    expect(importEdit.offset, 0);
+    expect(importEdit.length, 0);
+  }
+}
+
+@reflectiveTest
+class FlutterStatefulWidgetSnippetProducerTest
+    extends FlutterSnippetProducerTest {
+  @override
+  final generator = FlutterStatefulWidgetSnippetProducer.newInstance;
+
+  @override
+  String get label => FlutterStatefulWidgetSnippetProducer.label;
+
+  @override
+  String get prefix => FlutterStatefulWidgetSnippetProducer.prefix;
+
+  Future<void> test_notValid_notFlutterProject() async {
+    writeTestPackageConfig();
+
+    await expectNotValidSnippet('^');
+  }
+
+  Future<void> test_valid() async {
+    writeTestPackageConfig(flutter: true);
+
+    final snippet = await expectValidSnippet('^');
+    expect(snippet.prefix, 'stful');
+    expect(snippet.label, 'Flutter Stateful Widget');
+    var code = '';
+    expect(snippet.change.edits, hasLength(1));
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+import 'package:flutter/src/foundation/key.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+class MyWidget extends StatefulWidget {
+  const MyWidget({Key? key}) : super(key: key);
+
+  @override
+  State<MyWidget> createState() => _MyWidgetState();
+}
+
+class _MyWidgetState extends State<MyWidget> {
+  @override
+  Widget build(BuildContext context) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 363);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 110},
+          {'file': testFile, 'offset': 152},
+          {'file': testFile, 'offset': 213},
+          {'file': testFile, 'offset': 241},
+          {'file': testFile, 'offset': 268},
+          {'file': testFile, 'offset': 296},
+        ],
+        'length': 8,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class FlutterStatefulWidgetWithAnimationControllerSnippetProducerTest
+    extends FlutterSnippetProducerTest {
+  @override
+  final generator =
+      FlutterStatefulWidgetWithAnimationControllerSnippetProducer.newInstance;
+
+  @override
+  String get label =>
+      FlutterStatefulWidgetWithAnimationControllerSnippetProducer.label;
+
+  @override
+  String get prefix =>
+      FlutterStatefulWidgetWithAnimationControllerSnippetProducer.prefix;
+
+  Future<void> test_notValid_notFlutterProject() async {
+    writeTestPackageConfig();
+
+    await expectNotValidSnippet('^');
+  }
+
+  Future<void> test_valid() async {
+    writeTestPackageConfig(flutter: true);
+
+    final snippet = await expectValidSnippet('^');
+    expect(snippet.prefix, 'stanim');
+    expect(snippet.label, 'Flutter Widget with AnimationController');
+    var code = '';
+    expect(snippet.change.edits, hasLength(1));
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+import 'package:flutter/src/animation/animation_controller.dart';
+import 'package:flutter/src/foundation/key.dart';
+import 'package:flutter/src/widgets/framework.dart';
+import 'package:flutter/src/widgets/ticker_provider.dart';
+
+class MyWidget extends StatefulWidget {
+  const MyWidget({Key? key}) : super(key: key);
+
+  @override
+  State<MyWidget> createState() => _MyWidgetState();
+}
+
+class _MyWidgetState extends State<MyWidget>
+    with SingleTickerProviderStateMixin {
+  late AnimationController _controller;
+
+  @override
+  void initState() {
+    super.initState();
+    _controller = AnimationController(vsync: this);
+  }
+
+  @override
+  void dispose() {
+    super.dispose();
+    _controller.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 766);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 235},
+          {'file': testFile, 'offset': 277},
+          {'file': testFile, 'offset': 338},
+          {'file': testFile, 'offset': 366},
+          {'file': testFile, 'offset': 393},
+          {'file': testFile, 'offset': 421},
+        ],
+        'length': 8,
+        'suggestions': []
+      }
+    ]);
+  }
+}
+
+@reflectiveTest
+class FlutterStatelessWidgetSnippetProducerTest
+    extends FlutterSnippetProducerTest {
+  @override
+  final generator = FlutterStatelessWidgetSnippetProducer.newInstance;
+
+  @override
+  String get label => FlutterStatelessWidgetSnippetProducer.label;
+
+  @override
+  String get prefix => FlutterStatelessWidgetSnippetProducer.prefix;
+
+  Future<void> test_notValid_notFlutterProject() async {
+    writeTestPackageConfig();
+
+    await expectNotValidSnippet('^');
+  }
+
+  Future<void> test_valid() async {
+    writeTestPackageConfig(flutter: true);
+
+    final snippet = await expectValidSnippet('^');
+    expect(snippet.prefix, 'stless');
+    expect(snippet.label, 'Flutter Stateless Widget');
+    var code = '';
+    expect(snippet.change.edits, hasLength(1));
+    snippet.change.edits
+        .forEach((edit) => code = SourceEdit.applySequence(code, edit.edits));
+    expect(code, '''
+import 'package:flutter/src/foundation/key.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+class MyWidget extends StatelessWidget {
+  const MyWidget({Key? key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    
+  }
+}''');
+    expect(snippet.change.selection!.file, testFile);
+    expect(snippet.change.selection!.offset, 249);
+    expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
+      {
+        'positions': [
+          {'file': testFile, 'offset': 110},
+          {'file': testFile, 'offset': 153},
+        ],
+        'length': 8,
+        'suggestions': []
+      }
+    ]);
+  }
+}
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
new file mode 100644
index 0000000..622d84f
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/dart/snippet_manager_test.dart
@@ -0,0 +1,116 @@
+// 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/snippets/dart/snippet_manager.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../abstract_single_unit.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SnippetManagerTest);
+  });
+}
+
+@reflectiveTest
+class SnippetManagerTest extends AbstractSingleUnitTest {
+  Future<void> test_notValidProducers() async {
+    await resolveTestCode('');
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: 0,
+    );
+
+    final manager = _TestDartSnippetManager({
+      SnippetContext.atTopLevel: [_NotValidSnippetProducer.newInstance],
+    });
+    final results = await manager.computeSnippets(request);
+    expect(results, isEmpty);
+  }
+
+  Future<void> test_onlyCreatesForContext() async {
+    await resolveTestCode('');
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: 0,
+    );
+
+    final manager = _TestDartSnippetManager({
+      SnippetContext.atTopLevel: [_ValidSnippetProducer.newInstance],
+      SnippetContext.inClass: [
+        (context) => throw 'Tried to create producer for wrong context',
+      ]
+    });
+    final results = await manager.computeSnippets(request);
+    expect(results, hasLength(1));
+  }
+
+  Future<void> test_validProducers() async {
+    await resolveTestCode('');
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: 0,
+    );
+
+    final manager = _TestDartSnippetManager({
+      SnippetContext.atTopLevel: [_ValidSnippetProducer.newInstance],
+    });
+    final results = await manager.computeSnippets(request);
+    expect(results, hasLength(1));
+    final snippet = results.single;
+    expect(snippet.prefix, 'mysnip');
+    expect(snippet.label, 'My Test Snippet');
+  }
+}
+
+/// A snippet producer that always returns `false` from [isValid] and throws
+/// if [compute] is called.
+class _NotValidSnippetProducer extends SnippetProducer {
+  _NotValidSnippetProducer(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() {
+    throw UnsupportedError(
+      'compute should not be called for a producer '
+      'that returned false from isValid',
+    );
+  }
+
+  @override
+  Future<bool> isValid() async => false;
+
+  static _NotValidSnippetProducer newInstance(DartSnippetRequest request) =>
+      _NotValidSnippetProducer(request);
+}
+
+class _TestDartSnippetManager extends DartSnippetManager {
+  @override
+  final Map<SnippetContext, List<SnippetProducerGenerator>> producerGenerators;
+
+  _TestDartSnippetManager(this.producerGenerators);
+}
+
+/// A snippet producer that always returns `true` from [isValid] and a simple
+/// snippet from [compute].
+class _ValidSnippetProducer extends SnippetProducer {
+  _ValidSnippetProducer(DartSnippetRequest request) : super(request);
+
+  @override
+  Future<Snippet> compute() async {
+    return Snippet(
+      'mysnip',
+      'My Test Snippet',
+      'This is a test snippet',
+      SourceChange('message'),
+    );
+  }
+
+  @override
+  Future<bool> isValid() async => true;
+
+  static _ValidSnippetProducer newInstance(DartSnippetRequest request) =>
+      _ValidSnippetProducer(request);
+}
diff --git a/pkg/analysis_server/test/services/snippets/dart/snippet_request_test.dart b/pkg/analysis_server/test/services/snippets/dart/snippet_request_test.dart
new file mode 100644
index 0000000..fd6a240
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/dart/snippet_request_test.dart
@@ -0,0 +1,495 @@
+// 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/snippets/dart/snippet_manager.dart';
+import 'package:analyzer/src/test_utilities/platform.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(SnippetRequestTest);
+  });
+}
+
+@reflectiveTest
+class SnippetRequestTest extends AbstractSingleUnitTest {
+  SnippetRequestTest() {
+    verifyNoTestUnitErrors = false;
+  }
+
+  Future<void> test_expression_constructor() async {
+    await testRequest(r'''
+final a = new [[^]]
+''', SnippetContext.inExpressionOrStatement);
+  }
+
+  Future<void> test_expression_constructorName() async {
+    await testRequest(r'''
+class A {
+  A.foo();
+}
+final a = new A.[[fo^]]
+''', SnippetContext.inExpressionOrStatement);
+  }
+
+  Future<void> test_inAnnotation() async {
+    await testRequest(r'''
+@[[depre^]]
+class A {}
+''', SnippetContext.inExpressionOrStatement);
+  }
+
+  Future<void> test_inBlock_forBody() async {
+    await testRequest(r'''
+foo() {
+  for (var i = 0; i < 10; i++) {
+    [[^]]
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inClass_atEnd() async {
+    await testRequest(r'''
+class A {
+  foo() {}
+
+  [[^]]
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_atEnd_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  foo() {}
+
+  [[mysnip^]]
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_atStart() async {
+    await testRequest(r'''
+class A {
+  [[^]]
+
+  foo() {}
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_atStart_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  [[mysnip^]]
+
+  foo() {}
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_betweenMembers() async {
+    await testRequest(r'''
+class A {
+  foo() {}
+
+  [[^]]
+
+  bar() {}
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_betweenMembers_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  foo() {}
+
+  [[mysnip^]]
+
+  bar() {}
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_empty() async {
+    await testRequest(r'''
+class A {
+  [[^]]
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inClass_empty_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  [[mysnip^]]
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inComment_dartDoc() async {
+    await testRequest(r'''
+/// [[^]]
+class A {}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inComment_dartDoc_reference_member() async {
+    await testRequest(r'''
+class A {
+  /// [ [[A^]] ]
+  foo() {}
+}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inComment_dartDoc_reference_topLevel() async {
+    await testRequest(r'''
+/// [ [[A^]] ]
+class A {}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inComment_multiline_member() async {
+    await testRequest(r'''
+class A {
+  /*
+   * [[^]]
+   */
+  foo() {}
+}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inComment_multiline_topLevel() async {
+    await testRequest(r'''
+/*
+ * [[^]]
+ */
+class A {}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inComment_singleLine_member() async {
+    await testRequest(r'''
+class A {
+  // [[^]]
+  foo () {}
+}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inComment_singleLine_topLevel() async {
+    await testRequest(r'''
+// [[^]]
+class A {}
+''', SnippetContext.inComment);
+  }
+
+  Future<void> test_inExpression_functionCall() async {
+    await testRequest(r'''
+foo() {
+  print([[^]]
+}
+''', SnippetContext.inExpressionOrStatement);
+  }
+
+  Future<void> test_inExtension() async {
+    await testRequest(r'''
+extension on Object {
+  [[^]]
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inFunction_atEnd() async {
+    await testRequest(r'''
+foo() {
+  var a = 1;
+  [[^]]
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_atEnd_partialIdentifier() async {
+    await testRequest(r'''
+foo() {
+  var a = 1;
+  [[mysnip^]]
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_atStart() async {
+    await testRequest(r'''
+foo() {
+  [[^]]
+  var a = 1;
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_atStart_partialIdentifier() async {
+    await testRequest(r'''
+foo() {
+  [[mysnip^]]
+  var a = 1;
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_betweenStatements() async {
+    await testRequest(r'''
+foo() {
+  var a = 1;
+  [[^]]
+  var b = 1;
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_betweenStatements_partialIdentifier() async {
+    await testRequest(r'''
+foo() {
+  var a = 1;
+  [[mysnip^]]
+  var b = 1;
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_empty() async {
+    await testRequest(r'''
+foo() {
+  [[^]]
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inFunction_empty_partialIdentifier() async {
+    await testRequest(r'''
+foo() {
+  [[mysnip^]]
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_atEnd() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    var a = 1;
+    [[^]]
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_atEnd_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    var a = 1;
+    [[mysnip^]]
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_atStart() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    [[^]]
+    var a = 1;
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_atStart_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    [[mysnip^]]
+    var a = 1;
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_betweenStatements() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    var a = 1;
+    [[^]]
+    var b = 1;
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_betweenStatements_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    var a = 1;
+    [[mysnip^]]
+    var b = 1;
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_empty() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    [[^]]
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMethod_empty_partialIdentifier() async {
+    await testRequest(r'''
+class A {
+  foo() {
+    [[mysnip^]]
+  }
+}
+''', SnippetContext.inBlock);
+  }
+
+  Future<void> test_inMixin() async {
+    await testRequest(r'''
+mixin A {
+  [[^]]
+}
+''', SnippetContext.inClass);
+  }
+
+  Future<void> test_inStatement_forCondition() async {
+    await testRequest(r'''
+foo() {
+  for (var i = [[^]]
+}
+''', SnippetContext.inExpressionOrStatement);
+  }
+
+  Future<void> test_inStatement_variableDeclaration() async {
+    await testRequest(r'''
+foo() {
+  var a = [[^]]
+}
+''', SnippetContext.inExpressionOrStatement);
+  }
+
+  Future<void> test_inString() async {
+    await testRequest(r'''
+const a = '[[^]]';
+''', SnippetContext.inString);
+  }
+
+  Future<void> test_inString_raw() async {
+    await testRequest(r'''
+const a = r'[[^]]';
+''', SnippetContext.inString);
+  }
+
+  Future<void> test_inString_unterminated() async {
+    await testRequest(r'''
+const a = r'[[^]]
+''', SnippetContext.inString);
+  }
+
+  Future<void> test_topLevel_atEnd() async {
+    await testRequest(r'''
+class A {}
+
+[[^]]
+''', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_atEnd_partialIdentifier() async {
+    await testRequest(r'''
+class A {}
+
+[[mysnip^]]
+''', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_atStart() async {
+    await testRequest(r'''
+[[^]]
+
+class A {}
+''', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_atStart_partialIdentifier() async {
+    await testRequest(r'''
+[[mysnip^]]
+
+class A {}
+''', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_betweenClasses() async {
+    await testRequest(r'''
+class A {}
+
+[[^]]
+
+class B {}
+''', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_betweenClasses_partialIdentifier() async {
+    await testRequest(r'''
+class A {}
+
+[[mysnip^]]
+
+class B {}
+''', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_empty() async {
+    await testRequest('[[^]]', SnippetContext.atTopLevel);
+  }
+
+  Future<void> test_topLevel_empty_partialIdentifier() async {
+    await testRequest('[[mysnip^]]', SnippetContext.atTopLevel);
+  }
+
+  /// Checks that [code] produces a context of [expectedContext] where the
+  /// character '^' in [code] represents the supplied offset and the range
+  /// surrounded `[[` by brackets `]]` is the expected replacement range.
+  ///
+  /// `^`, `[[` and `]]` will be removed from the code before resolving.
+  Future<void> testRequest(String code, SnippetContext expectedContext) async {
+    code = normalizeNewlinesForPlatform(code);
+    final offset = offsetFromMarker(code);
+    final expectedReplacementRange = rangeFromMarkers(code);
+    await resolveTestCode(withoutMarkers(code));
+
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: offset,
+    );
+
+    expect(request.filePath, testFile);
+    expect(request.offset, offset);
+    expect(request.context, expectedContext);
+    expect(request.replacementRange, expectedReplacementRange);
+  }
+}
diff --git a/pkg/analysis_server/test/services/snippets/dart/test_all.dart b/pkg/analysis_server/test/services/snippets/dart/test_all.dart
new file mode 100644
index 0000000..907e05a
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/dart/test_all.dart
@@ -0,0 +1,17 @@
+// 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 'package:test_reflective_loader/test_reflective_loader.dart';
+
+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(() {
+    flutter_snippet_producers.main();
+    snippet_manager.main();
+    snippet_request.main();
+  }, name: 'dart');
+}
diff --git a/pkg/analysis_server/test/services/snippets/dart/test_support.dart b/pkg/analysis_server/test/services/snippets/dart/test_support.dart
new file mode 100644
index 0000000..9f2d740
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/dart/test_support.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 'package:analyzer/source/source_range.dart';
+import 'package:test/test.dart';
+
+int offsetFromMarker(String code) {
+  final offset = withoutRangeMarkers(code).indexOf('^');
+  expect(offset, isNot(-1));
+  return offset;
+}
+
+SourceRange rangeFromMarkers(String code) {
+  code = _withoutPositionMarker(code);
+  final start = code.indexOf('[[');
+  final end = code.indexOf(']]');
+  expect(start, isNot(-1));
+  expect(end, isNot(-1));
+  final endAdjusted = end - 2; // Account for the [[ before this marker
+  return SourceRange(start, endAdjusted - start);
+}
+
+String withoutMarkers(String code) =>
+    withoutRangeMarkers(_withoutPositionMarker(code));
+
+String withoutRangeMarkers(String code) =>
+    code.replaceAll('[[', '').replaceAll(']]', '');
+
+String _withoutPositionMarker(String code) => code.replaceAll('^', '');
diff --git a/pkg/analysis_server/test/services/snippets/test_all.dart b/pkg/analysis_server/test/services/snippets/test_all.dart
new file mode 100644
index 0000000..899f5ae
--- /dev/null
+++ b/pkg/analysis_server/test/services/snippets/test_all.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:test_reflective_loader/test_reflective_loader.dart';
+
+import 'dart/test_all.dart' as dart_all;
+
+void main() {
+  defineReflectiveSuite(() {
+    dart_all.main();
+  }, name: 'snippets');
+}
diff --git a/pkg/analysis_server/test/services/test_all.dart b/pkg/analysis_server/test/services/test_all.dart
index 954023d..a6feeba 100644
--- a/pkg/analysis_server/test/services/test_all.dart
+++ b/pkg/analysis_server/test/services/test_all.dart
@@ -9,6 +9,7 @@
 import 'linter/test_all.dart' as linter_all;
 import 'refactoring/test_all.dart' as refactoring_all;
 import 'search/test_all.dart' as search_all;
+import 'snippets/test_all.dart' as snippets_all;
 
 void main() {
   defineReflectiveSuite(() {
@@ -17,5 +18,6 @@
     linter_all.main();
     refactoring_all.main();
     search_all.main();
+    snippets_all.main();
   });
 }
diff --git a/pkg/analysis_server/test/src/cider/rename_test.dart b/pkg/analysis_server/test/src/cider/rename_test.dart
index 02368a6..59f686d 100644
--- a/pkg/analysis_server/test/src/cider/rename_test.dart
+++ b/pkg/analysis_server/test/src/cider/rename_test.dart
@@ -51,6 +51,18 @@
     expect(refactor.refactoringElement.offset, _correctionContext.offset);
   }
 
+  void test_canRename_field_static_private() {
+    var refactor = _compute(r'''
+class A{
+  static const ^_val = 1234;
+}
+''');
+
+    expect(refactor, isNotNull);
+    expect(refactor!.refactoringElement.element.name, '_val');
+    expect(refactor.refactoringElement.offset, _correctionContext.offset);
+  }
+
   void test_canRename_function() {
     var refactor = _compute(r'''
 void ^foo() {
@@ -256,6 +268,42 @@
     ]);
   }
 
+  void test_rename_field() {
+    var result = _rename(r'''
+class A{
+  int get ^x => 5;
+}
+
+void foo() {
+  var m = A().x;
+}
+''', 'y');
+
+    expect(result, isNotNull);
+    expect(result!.matches, [
+      CiderSearchMatch(convertPath('/workspace/dart/test/lib/test.dart'),
+          [CharacterLocation(2, 11), CharacterLocation(6, 15)]),
+    ]);
+  }
+
+  void test_rename_field_static_private() {
+    var result = _rename(r'''
+class A{
+  static const ^_val = 1234;
+}
+
+void foo() {
+  print(A._val);
+}
+''', '_newVal');
+
+    expect(result, isNotNull);
+    expect(result!.matches, [
+      CiderSearchMatch(convertPath('/workspace/dart/test/lib/test.dart'),
+          [CharacterLocation(2, 16), CharacterLocation(6, 11)]),
+    ]);
+  }
+
   void test_rename_function() {
     var result = _rename(r'''
 test() {}
@@ -341,7 +389,7 @@
     ]);
   }
 
-  void test_typeAlias_functionType() {
+  void test_rename_typeAlias_functionType() {
     var result = _rename(r'''
 typedef ^F = void Function();
 void f(F a) {}
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 c215a6c..79818f0 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_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.
 
+import 'dart:convert';
+
 import 'package:analysis_server/src/computer/computer_outline.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -137,6 +139,24 @@
 
 @reflectiveTest
 class OutlineComputerTest extends AbstractOutlineComputerTest {
+  String get testPathJson => jsonOfPath(testPath);
+
+  void assertJsonText(Object object, String expected) {
+    expected = expected.trimRight();
+    var actual = JsonEncoder.withIndent('  ').convert(object);
+    if (actual != expected) {
+      print('-----');
+      print(actual);
+      print('-----');
+    }
+    expect(actual, expected);
+  }
+
+  String jsonOfPath(String path) {
+    path = convertPath(path);
+    return json.encode(path);
+  }
+
   Future<void> test_class() async {
     var unitOutline = await _computeOutline('''
 abstract class A<K, V> {
@@ -382,34 +402,270 @@
     }
   }
 
-  Future<void> test_enum() async {
+  Future<void> test_enum_constants() async {
     var unitOutline = await _computeOutline('''
-enum MyEnum {
-  A, B, C
+enum E {
+  v1, v2
 }
 ''');
+
     var topOutlines = unitOutline.children!;
     expect(topOutlines, hasLength(1));
-    // MyEnum
+
+    assertJsonText(topOutlines[0], '''
+{
+  "element": {
+    "kind": "ENUM",
+    "name": "E",
+    "location": {
+      "file": $testPathJson,
+      "offset": 5,
+      "length": 1,
+      "startLine": 1,
+      "startColumn": 6,
+      "endLine": 1,
+      "endColumn": 7
+    },
+    "flags": 0
+  },
+  "offset": 0,
+  "length": 19,
+  "codeOffset": 0,
+  "codeLength": 19,
+  "children": [
     {
-      var outline_MyEnum = topOutlines[0];
-      var element_MyEnum = outline_MyEnum.element;
-      expect(element_MyEnum.kind, ElementKind.ENUM);
-      expect(element_MyEnum.name, 'MyEnum');
-      {
-        var location = element_MyEnum.location!;
-        expect(location.offset, testCode.indexOf('MyEnum {'));
-        expect(location.length, 'MyEnum'.length);
-      }
-      expect(element_MyEnum.parameters, null);
-      expect(element_MyEnum.returnType, null);
-      // MyEnum children
-      var outlines_MyEnum = outline_MyEnum.children!;
-      expect(outlines_MyEnum, hasLength(3));
-      _isEnumConstant(outlines_MyEnum[0], 'A');
-      _isEnumConstant(outlines_MyEnum[1], 'B');
-      _isEnumConstant(outlines_MyEnum[2], 'C');
+      "element": {
+        "kind": "ENUM_CONSTANT",
+        "name": "v1",
+        "location": {
+          "file": $testPathJson,
+          "offset": 11,
+          "length": 2,
+          "startLine": 2,
+          "startColumn": 3,
+          "endLine": 2,
+          "endColumn": 5
+        },
+        "flags": 0
+      },
+      "offset": 11,
+      "length": 2,
+      "codeOffset": 11,
+      "codeLength": 2
+    },
+    {
+      "element": {
+        "kind": "ENUM_CONSTANT",
+        "name": "v2",
+        "location": {
+          "file": $testPathJson,
+          "offset": 15,
+          "length": 2,
+          "startLine": 2,
+          "startColumn": 7,
+          "endLine": 2,
+          "endColumn": 9
+        },
+        "flags": 0
+      },
+      "offset": 15,
+      "length": 2,
+      "codeOffset": 15,
+      "codeLength": 2
     }
+  ]
+}
+''');
+  }
+
+  Future<void> test_enum_members() async {
+    var unitOutline = await _computeOutline('''
+enum E {
+  v;
+  final int f = 0;
+  const E();
+  const E.named();
+  void aMethod() {}
+  int get aGetter => 0;
+  set aSetter(int value) {}
+}
+''');
+
+    var topOutlines = unitOutline.children!;
+    expect(topOutlines, hasLength(1));
+
+    assertJsonText(topOutlines[0], '''
+{
+  "element": {
+    "kind": "ENUM",
+    "name": "E",
+    "location": {
+      "file": $testPathJson,
+      "offset": 5,
+      "length": 1,
+      "startLine": 1,
+      "startColumn": 6,
+      "endLine": 1,
+      "endColumn": 7
+    },
+    "flags": 0
+  },
+  "offset": 0,
+  "length": 138,
+  "codeOffset": 0,
+  "codeLength": 138,
+  "children": [
+    {
+      "element": {
+        "kind": "ENUM_CONSTANT",
+        "name": "v",
+        "location": {
+          "file": $testPathJson,
+          "offset": 11,
+          "length": 1,
+          "startLine": 2,
+          "startColumn": 3,
+          "endLine": 2,
+          "endColumn": 4
+        },
+        "flags": 0
+      },
+      "offset": 11,
+      "length": 1,
+      "codeOffset": 11,
+      "codeLength": 1
+    },
+    {
+      "element": {
+        "kind": "FIELD",
+        "name": "f",
+        "location": {
+          "file": $testPathJson,
+          "offset": 26,
+          "length": 1,
+          "startLine": 3,
+          "startColumn": 13,
+          "endLine": 3,
+          "endColumn": 14
+        },
+        "flags": 4,
+        "returnType": "int"
+      },
+      "offset": 16,
+      "length": 16,
+      "codeOffset": 26,
+      "codeLength": 5
+    },
+    {
+      "element": {
+        "kind": "CONSTRUCTOR",
+        "name": "E",
+        "location": {
+          "file": $testPathJson,
+          "offset": 41,
+          "length": 1,
+          "startLine": 4,
+          "startColumn": 9,
+          "endLine": 4,
+          "endColumn": 10
+        },
+        "flags": 0,
+        "parameters": "()"
+      },
+      "offset": 35,
+      "length": 10,
+      "codeOffset": 35,
+      "codeLength": 10
+    },
+    {
+      "element": {
+        "kind": "CONSTRUCTOR",
+        "name": "E.named",
+        "location": {
+          "file": $testPathJson,
+          "offset": 56,
+          "length": 5,
+          "startLine": 5,
+          "startColumn": 11,
+          "endLine": 5,
+          "endColumn": 16
+        },
+        "flags": 0,
+        "parameters": "()"
+      },
+      "offset": 48,
+      "length": 16,
+      "codeOffset": 48,
+      "codeLength": 16
+    },
+    {
+      "element": {
+        "kind": "METHOD",
+        "name": "aMethod",
+        "location": {
+          "file": $testPathJson,
+          "offset": 72,
+          "length": 7,
+          "startLine": 6,
+          "startColumn": 8,
+          "endLine": 6,
+          "endColumn": 15
+        },
+        "flags": 0,
+        "parameters": "()",
+        "returnType": "void"
+      },
+      "offset": 67,
+      "length": 17,
+      "codeOffset": 67,
+      "codeLength": 17
+    },
+    {
+      "element": {
+        "kind": "GETTER",
+        "name": "aGetter",
+        "location": {
+          "file": $testPathJson,
+          "offset": 95,
+          "length": 7,
+          "startLine": 7,
+          "startColumn": 11,
+          "endLine": 7,
+          "endColumn": 18
+        },
+        "flags": 0,
+        "returnType": "int"
+      },
+      "offset": 87,
+      "length": 21,
+      "codeOffset": 87,
+      "codeLength": 21
+    },
+    {
+      "element": {
+        "kind": "SETTER",
+        "name": "aSetter",
+        "location": {
+          "file": $testPathJson,
+          "offset": 115,
+          "length": 7,
+          "startLine": 8,
+          "startColumn": 7,
+          "endLine": 8,
+          "endColumn": 14
+        },
+        "flags": 0,
+        "parameters": "(int value)",
+        "returnType": ""
+      },
+      "offset": 111,
+      "length": 25,
+      "codeOffset": 111,
+      "codeLength": 25
+    }
+  ]
+}
+''');
   }
 
   Future<void> test_extension_named() async {
@@ -1350,12 +1606,4 @@
       expect(element.returnType, returnType);
     }
   }
-
-  void _isEnumConstant(Outline outline, String name) {
-    var element = outline.element;
-    expect(element.kind, ElementKind.ENUM_CONSTANT);
-    expect(element.name, name);
-    expect(element.parameters, isNull);
-    expect(element.returnType, isNull);
-  }
 }
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 e55c554..f59bb45 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
@@ -386,6 +386,35 @@
     expect(container.codeLength, 15);
   }
 
+  Future<void> test_enum() async {
+    var unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+enum E {
+  v;
+  Widget build(BuildContext context) {
+    return const Text('A');
+  }
+}
+''');
+
+    expect(_toText(unitOutline), r'''
+(D) E
+  (D) v
+  (D) build
+    Text
+''');
+    var E = unitOutline.children![0];
+    var build = E.children![1];
+    {
+      var textOutline = build.children![0];
+      var text = "const Text('A')";
+      var offset = testCode.indexOf(text);
+      expect(textOutline.offset, offset);
+      expect(textOutline.length, text.length);
+    }
+  }
+
   Future<void> test_genericLabel_invocation() async {
     var unitOutline = await _computeOutline(r'''
 import 'package:flutter/widgets.dart';
@@ -442,6 +471,46 @@
     }
   }
 
+  Future<void> test_namedArgument_anywhere() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+import 'package:flutter/widgets.dart';
+
+class WidgetA extends StatelessWidget {
+  final Widget top;
+  final Widget bottom;
+  final Widget left;
+  final Widget right;
+
+  WidgetA(this.top, this.bottom, {this.left, this.right});
+}
+''');
+    var unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+import 'a.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new WidgetA(
+      const Container(),
+      left: const Text('left'),
+      const Flex(),
+      right: const Text('right'),
+    );
+  }
+}
+''');
+    expect(_toText(unitOutline), r'''
+(D) MyWidget
+  (D) build
+    WidgetA
+      Container
+      left: Text
+      Flex
+      right: Text
+''');
+  }
+
   Future<void> test_parentAssociationLabel() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart b/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
index 9f66816..3ee46d5 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/suggestion_builder_test.dart
@@ -33,7 +33,7 @@
     );
     var builder = SuggestionBuilder(request);
     builder.suggestTopLevelFunction(findElement.topFunction('f'));
-    var suggestions = builder.suggestions.toList();
+    var suggestions = builder.suggestions.map((e) => e.build()).toList();
     expect(suggestions, hasLength(1));
     return suggestions[0];
   }
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
new file mode 100644
index 0000000..fa8e2fe
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_class_to_enum_test.dart
@@ -0,0 +1,567 @@
+// 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(ConvertClassToEnumTest);
+  });
+}
+
+@reflectiveTest
+class ConvertClassToEnumTest extends AssistProcessorTest {
+  @override
+  AssistKind get kind => DartAssistKind.CONVERT_CLASS_TO_ENUM;
+
+  Future<void> test_extends_object_privateClass() async {
+    await resolveTestCode('''
+class _E extends Object {
+  static const _E c = _E();
+
+  const _E();
+}
+''');
+    await assertHasAssistAt('E extends', '''
+enum _E {
+  c
+}
+''');
+  }
+
+  Future<void> test_extends_object_publicClass() async {
+    await resolveTestCode('''
+class E extends Object {
+  static const E c = E._();
+
+  const E._();
+}
+''');
+    await assertHasAssistAt('E extends', '''
+enum E {
+  c._();
+
+  const E._();
+}
+''');
+  }
+
+  Future<void> test_index_namedIndex_first_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(0, 'a');
+  static const _E c1 = _E(1, 'b');
+
+  final int index;
+
+  final String code;
+
+  const _E(this.index, this.code);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0('a'),
+  c1('b');
+
+  final String code;
+
+  const _E(this.code);
+}
+''');
+  }
+
+  Future<void> test_index_namedIndex_last_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E('a', 0);
+  static const _E c1 = _E('b', 1);
+
+  final String code;
+
+  final int index;
+
+  const _E(this.code, this.index);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0('a'),
+  c1('b');
+
+  final String code;
+
+  const _E(this.code);
+}
+''');
+  }
+
+  Future<void> test_index_namedIndex_middle_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E('a', 0, 'b');
+  static const _E c1 = _E('c', 1, 'd');
+
+  final String first;
+
+  final int index;
+
+  final String last;
+
+  const _E(this.first, this.index, this.last);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0('a', 'b'),
+  c1('c', 'd');
+
+  final String first;
+
+  final String last;
+
+  const _E(this.first, this.last);
+}
+''');
+  }
+
+  Future<void> test_index_namedIndex_only_outOfOrder() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(1);
+  static const _E c1 = _E(0);
+
+  final int index;
+
+  const _E(this.index);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c1,
+  c0
+}
+''');
+  }
+
+  Future<void> test_index_namedIndex_only_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(0);
+  static const _E c1 = _E(1);
+
+  final int index;
+
+  const _E(this.index);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0,
+  c1
+}
+''');
+  }
+
+  Future<void> test_index_namedIndex_only_publicClass() async {
+    await resolveTestCode('''
+class E {
+  static const E c0 = E._(0);
+  static const E c1 = E._(1);
+
+  final int index;
+
+  const E._(this.index);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum E {
+  c0._(),
+  c1._();
+
+  const E._();
+}
+''');
+  }
+
+  Future<void> test_index_notNamedIndex_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);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0(0),
+  c1(1);
+
+  final int value;
+
+  const _E(this.value);
+}
+''');
+  }
+
+  Future<void> test_index_notNamedIndex_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 assertHasAssistAt('E {', '''
+enum E {
+  c0._(0),
+  c1._(1);
+
+  final int value;
+
+  const E._(this.value);
+}
+''');
+  }
+
+  Future<void> test_invalid_abstractClass() async {
+    await resolveTestCode('''
+abstract class E {}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_constructorUsedInConstructor() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  // ignore: unused_element
+  const _E({_E e = const _E()});
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_constructorUsedOutsideClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  const _E();
+}
+_E get e => _E();
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_extended() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  const _E();
+}
+class F extends _E  {}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_extends_notObject() async {
+    await resolveTestCode('''
+class E extends C {
+  static const E c = E._();
+
+  const E._();
+}
+class C {
+  const C();
+}
+''');
+    await assertNoAssistAt('E extends');
+  }
+
+  Future<void> test_invalid_factoryConstructor_all() async {
+    await resolveTestCode('''
+class _E {
+  static _E c = _E();
+
+  factory _E() => c;
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_factoryConstructor_some() async {
+    // We could arguably support this case by only converting the static fields
+    // that are initialized by a generative constructor.
+    await resolveTestCode('''
+class _E {
+  static _E c0 = _E._();
+  static _E c1 = _E();
+
+  factory _E() => c0;
+  const _E._();
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  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: '''
+part of 'test.dart';
+''');
+    await resolveTestCode('''
+part 'a.dart';
+
+class E {
+  static const E c = E._();
+
+  const E._();
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_implemented() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  const _E();
+}
+class F implements _E  {}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_indexFieldNotSequential() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(0);
+  static const _E c1 = _E(3);
+
+  final int index;
+
+  const _E(this.index);
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_multipleConstantsInSameFieldDeclaration() async {
+    // Change this test if support is added to cover cases where multiple
+    // constants are defined in a single field declaration.
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E('a'), c1 = _E('b');
+
+  final String s;
+
+  const _E(this.s);
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_nonConstConstructor() async {
+    await resolveTestCode('''
+class _E {
+  static _E c = _E();
+
+  _E();
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_overrides_equal() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  const _E();
+
+  @override
+  int get hashCode => 0;
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_invalid_overrides_hashCode() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  const _E();
+
+  @override
+  bool operator ==(Object other) => true;
+}
+''');
+    await assertNoAssistAt('E {');
+  }
+
+  Future<void> test_minimal_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c = _E();
+
+  const _E();
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c
+}
+''');
+  }
+
+  Future<void> test_minimal_publicClass() async {
+    await resolveTestCode('''
+class E {
+  static const E c = E._();
+
+  const E._();
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum E {
+  c._();
+
+  const E._();
+}
+''');
+  }
+
+  Future<void> test_noIndex_int_privateClass() async {
+    await resolveTestCode('''
+class _E {
+  static const _E c0 = _E(2);
+  static const _E c1 = _E(4);
+
+  final int count;
+
+  const _E(this.count);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0(2),
+  c1(4);
+
+  final int count;
+
+  const _E(this.count);
+}
+''');
+  }
+
+  Future<void> test_noIndex_int_publicClass() async {
+    await resolveTestCode('''
+class E {
+  static const E c0 = E._(2);
+  static const E c1 = E._(4);
+
+  final int count;
+
+  const E._(this.count);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum E {
+  c0._(2),
+  c1._(4);
+
+  final int count;
+
+  const E._(this.count);
+}
+''');
+  }
+
+  Future<void> test_noIndex_notInt_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);
+}
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c0('c0'),
+  c1('c1');
+
+  final String name;
+
+  const _E(this.name);
+}
+''');
+  }
+
+  Future<void> test_noIndex_notInt_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 assertHasAssistAt('E {', '''
+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 c = _E();
+
+  const _E();
+
+  factory _E.withValue(int x) => c;
+}
+
+_E e = _E.withValue(0);
+''');
+    await assertHasAssistAt('E {', '''
+enum _E {
+  c;
+
+  const _E();
+
+  factory _E.withValue(int x) => c;
+}
+
+_E e = _E.withValue(0);
+''');
+  }
+}
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
new file mode 100644
index 0000000..df4f094
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_to_super_initializing_parameter_test.dart
@@ -0,0 +1,484 @@
+// 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/flutter_wrap_column_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart
index fc79cb7..5f53ffdd 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_wrap_column_test.dart
@@ -154,4 +154,36 @@
 }
 ''');
   }
+
+  Future<void> test_selectedWidgetName() async {
+    await resolveTestCode('''
+import 'package:flutter/widgets.dart';
+
+class FakeFlutter {
+  main() {
+    return Container(
+      child: Text('aaa'),
+    );
+  }
+}
+''');
+    await assertHasAssistAt(
+        'Text(',
+        '''
+import 'package:flutter/widgets.dart';
+
+class FakeFlutter {
+  main() {
+    return Container(
+      child: Column(
+        children: [
+          Text('aaa'),
+        ],
+      ),
+    );
+  }
+}
+''',
+        length: 4);
+  }
 }
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 1773afd..2c05865 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
@@ -9,6 +9,7 @@
 import 'add_return_type_test.dart' as add_return_type;
 import 'add_type_annotation_test.dart' as add_type_annotation;
 import 'assign_to_local_variable_test.dart' as assign_to_local_variable;
+import 'convert_class_to_enum_test.dart' as convert_class_to_enum;
 import 'convert_class_to_mixin_test.dart' as convert_class_to_mixin;
 import 'convert_documentation_into_block_test.dart'
     as convert_documentation_into_block;
@@ -41,6 +42,8 @@
 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 '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;
@@ -95,6 +98,7 @@
     add_return_type.main();
     add_type_annotation.main();
     assign_to_local_variable.main();
+    convert_class_to_enum.main();
     convert_class_to_mixin.main();
     convert_documentation_into_block.main();
     convert_documentation_into_line.main();
@@ -122,6 +126,7 @@
     convert_to_set_literal.main();
     convert_to_single_quoted_string.main();
     convert_to_spread.main();
+    convert_to_super_initializing_parameter.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_positional_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
index 5a4616c..dae57ea 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
@@ -19,6 +19,110 @@
   @override
   FixKind get kind => DartFixKind.ADD_MISSING_PARAMETER_POSITIONAL;
 
+  Future<void> test_constructor_callingViaSuper() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B() : super(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [double d]);
+}
+class B extends A {
+  B() : super(1, 2.0);
+}
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48359')
+  Future<void> test_constructor_callingViaSuperParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, super.b);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [double b]);
+}
+class B extends A {
+  B(super.a, super.b);
+}
+''');
+  }
+
+  Future<void> test_constructor_hasOne() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [double d]);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+  }
+
+  Future<void> test_constructor_hasOneFieldFormalParameter() async {
+    await resolveTestCode('''
+class A {
+  int a;
+  A(this.a);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  int a;
+  A(this.a, [double d]);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+  }
+
+  Future<void> test_constructor_hasOneSuperParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a);
+}
+void f() {
+  B(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, [double d]);
+}
+void f() {
+  B(1, 2.0);
+}
+''');
+  }
+
   Future<void> test_function_hasNamed() async {
     await resolveTestCode('''
 test({int a = 0}) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
index 1da0c9d..6aff080 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
@@ -81,6 +81,25 @@
 ''');
   }
 
+  Future<void> test_nonNullable_superParameter() async {
+    await resolveTestCode('''
+class C {
+  C({required int param});
+}
+class D extends C {
+  D({super.param});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({required int param});
+}
+class D extends C {
+  D({required super.param});
+}
+''');
+  }
+
   Future<void> test_withRequiredAnnotation() async {
     writeTestPackageConfig(meta: true);
 
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 bf7c774..f8ba15b 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,7 +72,22 @@
   @override
   String get lintCode => LintNames.require_trailing_commas;
 
-  Future<void> test_comma() async {
+  Future<void> test_named() async {
+    await resolveTestCode('''
+void f({a, b}) {
+  f(a: 'a',
+    b: 'b');
+}
+''');
+    await assertHasFix('''
+void f({a, b}) {
+  f(a: 'a',
+    b: 'b',);
+}
+''');
+  }
+
+  Future<void> test_positional() async {
     await resolveTestCode('''
 void f(a, b) {
   f('a',
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart
index d904bf6..a549699 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_generic_function_syntax_test.dart
@@ -114,14 +114,29 @@
 }
 
 @reflectiveTest
-class UseFunctionTypeSyntaxForParametersTest extends FixProcessorLintTest
-    with WithNullSafetyLintMixin {
+class UseFunctionTypeSyntaxForParametersTest extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.CONVERT_TO_GENERIC_FUNCTION_SYNTAX;
 
   @override
   String get lintCode => LintNames.use_function_type_syntax_for_parameters;
 
+  @FailingTest(issue: 'https://github.com/dart-lang/linter/issues/3212')
+  Future<void> test_functionTypedParameter_fieldFormal() async {
+    await resolveTestCode('''
+class C {
+  String Function(int) f;
+  C(String this.f(int x));
+}
+''');
+    await assertHasFix('''
+class C {
+  String Function(int) f;
+  C(String Function(int x) this.f);
+}
+''');
+  }
+
   Future<void> test_functionTypedParameter_noParameterTypes() async {
     await resolveTestCode('''
 g(String f(x)) {}
@@ -155,4 +170,24 @@
 g(String Function(int x) f) {}
 ''');
   }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/linter/issues/3212')
+  Future<void> test_functionTypedParameter_superParameter() async {
+    await resolveTestCode('''
+class C {
+  C(String Function(int x) f);
+}
+class D extends C {
+  D(String super.f(int x));
+}
+''');
+    await assertHasFix('''
+class C {
+  C(String Function(int x) f);
+}
+class D extends C {
+  D(String Function(int x) super.f);
+}
+''');
+  }
 }
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 c59880a..9e78353 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
@@ -11,13 +11,75 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ConvertToPackageImportBulkTest);
-    defineReflectiveTests(ConvertToPackageImportTest);
+    defineReflectiveTests(
+        ConvertToPackageImport_AvoidRelativeLibImportsBulkTest);
+    defineReflectiveTests(ConvertToPackageImport_AvoidRelativeLibImportsTest);
+    defineReflectiveTests(
+        ConvertToPackageImport_AlwaysUsePackageImportsBulkTest);
+    defineReflectiveTests(ConvertToPackageImport_AlwaysUsePackageImportsTest);
   });
 }
 
 @reflectiveTest
-class ConvertToPackageImportBulkTest extends BulkFixProcessorTest {
+class ConvertToPackageImport_AlwaysUsePackageImportsBulkTest
+    extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.always_use_package_imports;
+
+  Future<void> test_singleFile() async {
+    writeTestPackageConfig(config: PackageConfigFileBuilder());
+    addSource('$testPackageLibPath/foo.dart', 'class Foo {}');
+    addSource('$testPackageLibPath/bar.dart', 'class Bar {}');
+
+    testFile = convertPath('$testPackageLibPath/test.dart');
+
+    await resolveTestCode('''
+import 'foo.dart';
+import 'bar.dart';
+
+var foo = Foo();
+var bar = Bar();
+''');
+    await assertHasFix('''
+import 'package:test/foo.dart';
+import 'package:test/bar.dart';
+
+var foo = Foo();
+var bar = Bar();
+''');
+  }
+}
+
+@reflectiveTest
+class ConvertToPackageImport_AlwaysUsePackageImportsTest
+    extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_TO_PACKAGE_IMPORT;
+
+  @override
+  String get lintCode => LintNames.always_use_package_imports;
+
+  Future<void> test_relativeImport() async {
+    newFile('$testPackageLibPath/foo.dart', content: '''
+class Foo {}
+''');
+    await resolveTestCode('''
+import 'foo.dart';
+
+var foo = Foo();
+''');
+
+    await assertHasFix('''
+import 'package:test/foo.dart';
+
+var foo = Foo();
+''');
+  }
+}
+
+@reflectiveTest
+class ConvertToPackageImport_AvoidRelativeLibImportsBulkTest
+    extends BulkFixProcessorTest {
   @override
   String get lintCode => LintNames.avoid_relative_lib_imports;
 
@@ -42,7 +104,8 @@
 }
 
 @reflectiveTest
-class ConvertToPackageImportTest extends FixProcessorLintTest {
+class ConvertToPackageImport_AvoidRelativeLibImportsTest
+    extends FixProcessorLintTest {
   @override
   FixKind get kind => DartFixKind.CONVERT_TO_PACKAGE_IMPORT;
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_raw_string_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_raw_string_test.dart
new file mode 100644
index 0000000..7a0a79e
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_raw_string_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: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(ConvertToRawStringBulkTest);
+    defineReflectiveTests(ConvertToRawStringTest);
+  });
+}
+
+@reflectiveTest
+class ConvertToRawStringBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.use_raw_strings;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode(r"""
+var a = 'text \\ \$ \\\\' "\\" '${'\\'}';
+var b = '''
+text \\ \$ \\\\
+\\ \$ \\\\
+''';
+""");
+    await assertHasFix(r"""
+var a = r'text \ $ \\' r"\" '${r'\'}';
+var b = r'''
+text \ $ \\
+\ $ \\
+''';
+""");
+  }
+}
+
+@reflectiveTest
+class ConvertToRawStringTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.CONVERT_TO_RAW_STRING;
+
+  @override
+  String get lintCode => LintNames.use_raw_strings;
+
+  Future<void> test_doubleQuotes() async {
+    await resolveTestCode(r'var a = "text \\ \$ \\\\";');
+    await assertHasFix(r'var a = r"text \ $ \\";');
+  }
+
+  Future<void> test_multiLines() async {
+    await resolveTestCode(r"""
+var a = '''
+text \\ \$ \\\\
+\\ \$ \\\\
+''';
+""");
+    await assertHasFix(r"""
+var a = r'''
+text \ $ \\
+\ $ \\
+''';
+""");
+  }
+
+  Future<void> test_singleQuotes() async {
+    await resolveTestCode(r"var a = 'text \\ \$ \\\\';");
+    await assertHasFix(r"var a = r'text \ $ \\';");
+  }
+}
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 fc0eaa0..87e18e9 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
@@ -236,6 +236,7 @@
   void setUp() {
     super.setUp();
     createAnalysisOptionsFile(
+      experiments: experiments,
       lints: [lintCode],
     );
   }
@@ -246,6 +247,7 @@
   /// Return the kind of fixes being tested by this test class.
   FixKind get kind;
 
+  /// Asserts that the resolved compilation unit has a fix which produces [expected] output.
   Future<void> assertHasFix(String expected,
       {bool Function(AnalysisError)? errorFilter,
       int? length,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
index 611de4e..86bdc42 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
@@ -26,10 +26,6 @@
   C({String this.s});
 }
 ''');
-    // TODO(srawlins): Remove the type if the quick fix as is would use the same
-    //  type as the field's type. (brianwilkerson) I would argue that removing
-    //  the type should be a separate fix/assist. There was a reason why the
-    //  user used an explicit type, and we shouldn't remove it when it's valid.
     await assertHasFix('''
 class C {
   String? s;
@@ -208,4 +204,42 @@
 void f<T>({T? s}) {}
 ''');
   }
+
+  Future<void> test_superParameter() async {
+    await resolveTestCode('''
+class C {
+  C({String? s});
+}
+class D extends C {
+  D({String super.s});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({String? s});
+}
+class D extends C {
+  D({String? super.s});
+}
+''');
+  }
+
+  Future<void> test_superParameter_functionTyped() async {
+    await resolveTestCode('''
+class C {
+  C({void s()?});
+}
+class D extends C {
+  D({void super.s()});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({void s()?});
+}
+class D extends C {
+  D({void super.s()?});
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart
index 9d27944..c9ab551 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_argument_test.dart
@@ -107,9 +107,6 @@
 ''');
   }
 
-  @FailingTest(
-    issue: 'https://github.com/dart-lang/linter/issues/3082',
-  )
   Future<void> test_named_betweenRequiredPositional() async {
     await resolveTestCode('''
 void foo(int a, int b, {bool c = true}) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
index 573a033..1992d3f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart
@@ -106,6 +106,25 @@
 ''');
   }
 
+  Future<void> test_parameter_super() async {
+    await resolveTestCode('''
+class C {
+  C({String? s});
+}
+class D extends C {
+  D({super.s = null});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({String? s});
+}
+class D extends C {
+  D({super.s});
+}
+''');
+  }
+
   Future<void> test_topLevel() async {
     await resolveTestCode('''
 var x = null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart
new file mode 100644
index 0000000..3f0a3cd
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_leading_underscore_test.dart
@@ -0,0 +1,160 @@
+// 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(RemoveLeadingUnderscoreBulkTest);
+    defineReflectiveTests(RemoveLeadingUnderscoreForLibraryPrefixesTest);
+    defineReflectiveTests(RemoveLeadingUnderscoreForLocalVariablesTest);
+  });
+}
+
+@reflectiveTest
+class RemoveLeadingUnderscoreBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.no_leading_underscores_for_local_identifiers;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+main() {
+  int _foo = 42;
+  print(_foo);
+  [0, 1, 2].forEach((_bar) {
+    print(_bar);
+  });
+}
+''');
+    await assertHasFix('''
+main() {
+  int foo = 42;
+  print(foo);
+  [0, 1, 2].forEach((bar) {
+    print(bar);
+  });
+}
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveLeadingUnderscoreForLibraryPrefixesTest
+    extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_LEADING_UNDERSCORE;
+
+  @override
+  String get lintCode => LintNames.no_leading_underscores_for_library_prefixes;
+
+  Future<void> test_importPrefix() async {
+    await resolveTestCode('''
+import 'dart:core' as _core;
+_core.int i = 1;
+''');
+    await assertHasFix('''
+import 'dart:core' as core;
+core.int i = 1;
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveLeadingUnderscoreForLocalVariablesTest
+    extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_LEADING_UNDERSCORE;
+
+  @override
+  String get lintCode => LintNames.no_leading_underscores_for_local_identifiers;
+
+  Future<void> test_localVariable() async {
+    await resolveTestCode('''
+void f() {
+  var _foo = 1;
+  print(_foo);
+}
+''');
+    await assertHasFix('''
+void f() {
+  var foo = 1;
+  print(foo);
+}
+''');
+  }
+
+  Future<void> test_parameter_closure() async {
+    await resolveTestCode('''
+void f() {
+  [0, 1, 2].forEach((_foo) {
+    print(_foo);
+  });
+}
+''');
+    await assertHasFix('''
+void f() {
+  [0, 1, 2].forEach((foo) {
+    print(foo);
+  });
+}
+''');
+  }
+
+  Future<void> test_parameter_function() async {
+    await resolveTestCode('''
+void f(int _foo) {
+  print(_foo);
+}
+''');
+    await assertHasFix('''
+void f(int foo) {
+  print(foo);
+}
+''');
+  }
+
+  Future<void> test_parameter_method() async {
+    await resolveTestCode('''
+class A {
+  void f(int _foo) {
+    print(_foo);
+  }
+}
+''');
+    await assertHasFix('''
+class A {
+  void f(int foo) {
+    print(foo);
+  }
+}
+''');
+  }
+
+  Future<void> test_parameter_optionalNamed() async {
+    await resolveTestCode('''
+void f({int? _foo}) {
+  print(_foo);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_parameter_optionalPositional() async {
+    await resolveTestCode('''
+void f([int? _foo]) {
+  print(_foo);
+}
+''');
+    await assertHasFix('''
+void f([int? foo]) {
+  print(foo);
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart
index f92c463..deefa32 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_type_annotation_test.dart
@@ -231,7 +231,7 @@
   @override
   String get lintCode => LintNames.type_init_formals;
 
-  Future<void> test_void() async {
+  Future<void> test_formalFieldParameter() async {
     await resolveTestCode('''
 class C {
   int f;
@@ -245,4 +245,23 @@
 }
 ''');
   }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/linter/issues/3210')
+  Future<void> test_superParameter() async {
+    // If this issue gets closed as "won't fix," remove this test.
+    await resolveTestCode('''
+class C {
+  C(int f);
+}
+class D extends C {
+  D(int super.f);
+}
+''');
+    await assertHasFix('''
+class C {
+  int f;
+  C(super.f);
+}
+''');
+  }
 }
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
new file mode 100644
index 0000000..171d193
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_late_test.dart
@@ -0,0 +1,96 @@
+// 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: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(RemoveUnnecessaryLateBulkTest);
+    defineReflectiveTests(RemoveUnnecessaryLateTest);
+  });
+}
+
+@reflectiveTest
+class RemoveUnnecessaryLateBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.unnecessary_late;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+late String s1 = '';
+late final String s2 = '';
+''');
+    await assertHasFix('''
+String s1 = '';
+final String s2 = '';
+''');
+  }
+}
+
+@reflectiveTest
+class RemoveUnnecessaryLateTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REMOVE_UNNECESSARY_LATE;
+
+  @override
+  String get lintCode => LintNames.unnecessary_late;
+
+  Future<void> test_static() async {
+    await resolveTestCode('''
+class C {
+  static late String s1 = '';
+}
+''');
+    await assertHasFix('''
+class C {
+  static String s1 = '';
+}
+''');
+  }
+
+  Future<void> test_topLevel() async {
+    await resolveTestCode('''
+late String s1 = '';
+''');
+    await assertHasFix('''
+String s1 = '';
+''');
+  }
+
+  Future<void> test_topLevel_multipleVariables_fixFirst() async {
+    await resolveTestCode('''
+late String s1 = '', s2 = '';
+''');
+    await assertHasFix(
+      '''
+String s1 = '', s2 = '';
+''',
+      errorFilter: (error) => error.toString().contains('test.dart(21..27)'),
+    );
+  }
+
+  Future<void> test_topLevel_multipleVariables_fixSecond() async {
+    await resolveTestCode('''
+late String s1 = '', s2 = '';
+''');
+    await assertHasFix(
+      '''
+String s1 = '', s2 = '';
+''',
+      errorFilter: (error) => error.toString().contains('test.dart(12..18)'),
+    );
+  }
+
+  Future<void> test_topLevel_multipleVariables_notAllHaveInitializer() async {
+    await resolveTestCode('''
+late String s1, s2 = '';
+''');
+    await assertNoFix();
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart
index 6c5fb20..39f4ed5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_colon_with_equals_test.dart
@@ -55,4 +55,23 @@
 void f({int a = 1}) => null;
 ''');
   }
+
+  Future<void> test_superParameter() async {
+    await resolveTestCode('''
+class C {
+  C({int? i});
+}
+class D extends C {
+  D({int? super.i: 1});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({int? i});
+}
+class D extends C {
+  D({int? super.i = 1});
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_null_check_with_cast_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_null_check_with_cast_test.dart
new file mode 100644
index 0000000..d99e73f
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_null_check_with_cast_test.dart
@@ -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.
+
+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(ReplaceNullCheckWithCastBulkTest);
+    defineReflectiveTests(ReplaceNullCheckWithCastTest);
+  });
+}
+
+@reflectiveTest
+class ReplaceNullCheckWithCastBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.null_check_on_nullable_type_parameter;
+
+  Future<void> test_singleFile() async {
+    await resolveTestCode('''
+T f<T>(T? result) {
+  if (1==1) {
+    return result!;
+  } else {
+    return result!;
+  }
+}
+''');
+    await assertHasFix('''
+T f<T>(T? result) {
+  if (1==1) {
+    return result as T;
+  } else {
+    return result as T;
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ReplaceNullCheckWithCastTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REPLACE_NULL_CHECK_WITH_CAST;
+
+  @override
+  String get lintCode => LintNames.null_check_on_nullable_type_parameter;
+
+  Future<void> test_simpleIdentifier() async {
+    await resolveTestCode('''
+T run<T>(T? result) {
+  return result!;
+}
+''');
+    await assertHasFix('''
+T run<T>(T? result) {
+  return result as T;
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
index 818dad5..9f22bf1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_future_test.dart
@@ -3,6 +3,7 @@
 // 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/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -11,11 +12,118 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(ReplaceReturnTypeFutureLintBulkTest);
+    defineReflectiveTests(ReplaceReturnTypeFutureLintTest);
     defineReflectiveTests(ReplaceReturnTypeFutureTest);
   });
 }
 
 @reflectiveTest
+class ReplaceReturnTypeFutureLintBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.avoid_void_async;
+
+  Future<void> test_bulk() async {
+    await resolveTestCode('''
+void f1() async {}
+
+void f2() async => null;
+
+class C {
+  void m1() async {}
+
+  void m2() async => null;
+
+  void m3() async {
+    void f() async {};
+    f();
+  }
+}
+''');
+    await assertHasFix('''
+Future<void> f1() async {}
+
+Future<void> f2() async => null;
+
+class C {
+  Future<void> m1() async {}
+
+  Future<void> m2() async => null;
+
+  Future<void> m3() async {
+    Future<void> f() async {};
+    f();
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ReplaceReturnTypeFutureLintTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.REPLACE_RETURN_TYPE_FUTURE;
+
+  @override
+  String get lintCode => LintNames.avoid_void_async;
+
+  Future<void> test_function() async {
+    await resolveTestCode('void f() async {}');
+    await assertHasFix('Future<void> f() async {}');
+  }
+
+  Future<void> test_functionInMethod() async {
+    await resolveTestCode('''
+class C {
+  void m() {
+    void f() async {};
+    f();
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  void m() {
+    Future<void> f() async {};
+    f();
+  }
+}
+''');
+  }
+
+  Future<void> test_functionReturnNull() async {
+    await resolveTestCode('void f() async => null;');
+    await assertHasFix('Future<void> f() async => null;');
+  }
+
+  Future<void> test_method() async {
+    await resolveTestCode('''
+class C {
+  void m() async {}
+}
+''');
+    await assertHasFix('''
+class C {
+  Future<void> m() async {}
+}
+''');
+  }
+
+  Future<void> test_methodReturnNull() async {
+    await resolveTestCode('''
+class C {
+  void m() async => null;
+}
+''');
+    await assertHasFix('''
+class C {
+  Future<void> m() async => null;
+}
+''');
+  }
+}
+
+@reflectiveTest
 class ReplaceReturnTypeFutureTest extends FixProcessorTest {
   @override
   FixKind get kind => DartFixKind.REPLACE_RETURN_TYPE_FUTURE;
@@ -55,6 +163,19 @@
     });
   }
 
+  Future<void> test_method() async {
+    await resolveTestCode('''
+class C {
+  int m() async {}
+}
+''');
+    await assertHasFix('''
+class C {
+  Future<int> m() async {}
+}
+''');
+  }
+
   Future<void> test_simpleTypeName_withImport() async {
     await resolveTestCode('''
 import 'dart:async';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/sort_constructor_first_test.dart b/pkg/analysis_server/test/src/services/correction/fix/sort_constructor_first_test.dart
new file mode 100644
index 0000000..a1f240b
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/sort_constructor_first_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.
+
+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(SortConstructorFirstBulkTest);
+    defineReflectiveTests(SortConstructorFirstTest);
+  });
+}
+
+@reflectiveTest
+class SortConstructorFirstBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.sort_constructors_first;
+
+  Future<void> test_multiple_classes() async {
+    await resolveTestCode('''
+class A {
+  X() {}
+  A();
+}
+
+class B {
+  Y() {}
+  B();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  X() {}
+}
+
+class B {
+  B();
+  Y() {}
+}
+''');
+  }
+
+  Future<void> test_single_class() async {
+    await resolveTestCode('''
+class A {
+  X() {}
+
+  A();
+
+  Y() {}
+
+  A._();
+}
+''');
+    await assertHasFix('''
+class A {
+
+  A();
+
+  A._();
+  X() {}
+
+  Y() {}
+}
+''');
+  }
+}
+
+@reflectiveTest
+class SortConstructorFirstTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.SORT_CONSTRUCTOR_FIRST;
+
+  @override
+  String get lintCode => LintNames.sort_constructors_first;
+
+  Future<void> test_one_fix() async {
+    await resolveTestCode('''
+class A {
+  X() {}
+  A();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  X() {}
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/sort_unnamed_constructor_first_test.dart b/pkg/analysis_server/test/src/services/correction/fix/sort_unnamed_constructor_first_test.dart
new file mode 100644
index 0000000..9eddd90b
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/sort_unnamed_constructor_first_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.
+
+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(SortUnnamedConstructorFirstBulkTest);
+    defineReflectiveTests(SortUnnamedConstructorFirstTest);
+  });
+}
+
+@reflectiveTest
+class SortUnnamedConstructorFirstBulkTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.sort_unnamed_constructors_first;
+
+  Future<void> test_one_fix() async {
+    await resolveTestCode('''
+class A {
+  A.a();
+  A();
+}
+
+class B {
+  B.b();
+  B();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  A.a();
+}
+
+class B {
+  B();
+  B.b();
+}
+''');
+  }
+}
+
+@reflectiveTest
+class SortUnnamedConstructorFirstTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.SORT_UNNAMED_CONSTRUCTOR_FIRST;
+
+  @override
+  String get lintCode => LintNames.sort_unnamed_constructors_first;
+
+  Future<void> test_one_fix() async {
+    await resolveTestCode('''
+class A {
+  A.a();
+  A();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  A.a();
+}
+''');
+  }
+
+  Future<void> test_with_non_constructors() async {
+    await resolveTestCode('''
+class A {
+  static const int i = 0;
+
+  A.a();
+
+  A();
+}
+''');
+    await assertHasFix('''
+class A {
+  static const int i = 0;
+
+  A();
+
+  A.a();
+}
+''');
+  }
+
+  Future<void> test_with_non_constructors_2() async {
+    await resolveTestCode('''
+class A {
+  A.a();
+
+  static const int i = 0;
+
+  A();
+}
+''');
+    await assertHasFix('''
+class A {
+
+  A();
+  A.a();
+
+  static const int i = 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 001e243..5997525 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
@@ -75,6 +75,7 @@
 import 'convert_to_null_aware_test.dart' as convert_to_null_aware;
 import 'convert_to_on_type_test.dart' as convert_to_on_type;
 import 'convert_to_package_import_test.dart' as convert_to_package_import;
+import 'convert_to_raw_string_test.dart' as convert_to_raw_string;
 import 'convert_to_relative_import_test.dart' as convert_to_relative_import;
 import 'convert_to_set_literal_test.dart' as convert_to_set_literal;
 import 'convert_to_single_quoted_string_test.dart'
@@ -143,6 +144,7 @@
 import 'remove_if_null_operator_test.dart' as remove_if_null_operator;
 import 'remove_initializer_test.dart' as remove_initializer;
 import 'remove_interpolation_braces_test.dart' as remove_interpolation_braces;
+import 'remove_leading_underscore_test.dart' as remove_leading_underscore;
 import 'remove_method_declaration_test.dart' as remove_method_declaration;
 import 'remove_name_from_combinator_test.dart' as remove_name_from_combinator;
 import 'remove_non_null_assertion_test.dart' as remove_non_null_assertion_test;
@@ -158,6 +160,7 @@
 import 'remove_type_arguments_test.dart' as remove_type_arguments;
 import 'remove_unnecessary_cast_test.dart' as remove_unnecessary_cast;
 import 'remove_unnecessary_const_test.dart' as remove_unnecessary_const;
+import 'remove_unnecessary_late_test.dart' as remove_unnecessary_late;
 import 'remove_unnecessary_new_test.dart' as remove_unnecessary_new;
 import 'remove_unnecessary_parentheses_test.dart'
     as remove_unnecessary_parentheses;
@@ -185,6 +188,7 @@
 import 'replace_final_with_const_test.dart' as replace_final_with_const;
 import 'replace_final_with_var_test.dart' as replace_final_with_var;
 import 'replace_new_with_const_test.dart' as replace_new_with_const;
+import 'replace_null_check_with_cast_test.dart' as replace_null_check_with_cast;
 import 'replace_null_with_closure_test.dart' as replace_null_with_closure;
 import 'replace_return_type_future_test.dart' as replace_return_type_future;
 import 'replace_return_type_iterable_test.dart' as replace_return_type_iterable;
@@ -206,6 +210,9 @@
 import 'replace_with_tear_off_test.dart' as replace_with_tear_off;
 import 'replace_with_var_test.dart' as replace_with_var;
 import 'sort_child_property_last_test.dart' as sort_properties_last;
+import 'sort_constructor_first_test.dart' as sort_constructor_first_test;
+import 'sort_unnamed_constructor_first_test.dart'
+    as sort_unnamed_constructor_first_test;
 import 'update_sdk_constraints_test.dart' as update_sdk_constraints;
 import 'use_const_test.dart' as use_const;
 import 'use_curly_braces_test.dart' as use_curly_braces;
@@ -278,6 +285,7 @@
     convert_to_null_aware_spread.main();
     convert_to_on_type.main();
     convert_to_package_import.main();
+    convert_to_raw_string.main();
     convert_to_relative_import.main();
     convert_to_set_literal.main();
     convert_to_single_quoted_string.main();
@@ -341,6 +349,7 @@
     remove_if_null_operator.main();
     remove_initializer.main();
     remove_interpolation_braces.main();
+    remove_leading_underscore.main();
     remove_method_declaration.main();
     remove_name_from_combinator.main();
     remove_non_null_assertion_test.main();
@@ -354,6 +363,7 @@
     remove_type_arguments.main();
     remove_unnecessary_cast.main();
     remove_unnecessary_const.main();
+    remove_unnecessary_late.main();
     remove_unnecessary_new.main();
     remove_unnecessary_parentheses.main();
     remove_unnecessary_raw_string.main();
@@ -375,6 +385,7 @@
     replace_final_with_const.main();
     replace_final_with_var.main();
     replace_new_with_const.main();
+    replace_null_check_with_cast.main();
     replace_null_with_closure.main();
     replace_null_with_void.main();
     replace_return_type.main();
@@ -396,6 +407,8 @@
     replace_with_tear_off.main();
     replace_with_var.main();
     sort_properties_last.main();
+    sort_constructor_first_test.main();
+    sort_unnamed_constructor_first_test.main();
     update_sdk_constraints.main();
     use_const.main();
     use_curly_braces.main();
diff --git a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
index e8d35e3..c25bdcd 100644
--- a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
+++ b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
@@ -29,7 +29,7 @@
 
   void _assertArgumentRange(int index, SourceRange expectedRange) {
     var list = _argumentList;
-    expect(range.nodeInListWithComments(testUnit.lineInfo!, list, list[index]),
+    expect(range.nodeInListWithComments(testUnit.lineInfo, list, list[index]),
         expectedRange);
   }
 
@@ -37,7 +37,7 @@
     var class_ = findNode.classDeclaration('class');
     var list = class_.members;
     for (var entry in expectedRanges.entries) {
-      expect(range.nodeWithComments(testUnit.lineInfo!, list[entry.key]),
+      expect(range.nodeWithComments(testUnit.lineInfo, list[entry.key]),
           entry.value);
     }
   }
@@ -45,7 +45,7 @@
   void _assertUnitRanges(Map<int, SourceRange> expectedRanges) {
     var list = testUnit.declarations;
     for (var entry in expectedRanges.entries) {
-      expect(range.nodeWithComments(testUnit.lineInfo!, list[entry.key]),
+      expect(range.nodeWithComments(testUnit.lineInfo, list[entry.key]),
           entry.value);
     }
   }
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index 53e071c..d616586 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -125,7 +125,7 @@
       var statement = statements[0] as ExpressionStatement;
       var creation = statement.expression as InstanceCreationExpression;
       var constructorName = creation.constructorName;
-      var namedType = constructorName.type2;
+      var namedType = constructorName.type;
       var argumentList = creation.argumentList;
       expect(_flutter.identifyWidgetExpression(creation), creation);
       expect(_flutter.identifyWidgetExpression(constructorName), creation);
@@ -142,7 +142,7 @@
       var statement = statements[1] as ExpressionStatement;
       var creation = statement.expression as InstanceCreationExpression;
       var constructorName = creation.constructorName;
-      var namedType = constructorName.type2;
+      var namedType = constructorName.type;
       var argumentList = creation.argumentList;
       expect(_flutter.identifyWidgetExpression(creation), creation);
       expect(_flutter.identifyWidgetExpression(constructorName), creation);
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 2f7a688..301c2ad 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/utilities/null_string_sink.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -11,7 +12,6 @@
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
 
 /// A runner that can request code completion at the location of each identifier
 /// in a Dart file.
@@ -203,8 +203,8 @@
     }
   }
 
-  List<CompletionSuggestion> _filterBy(
-      List<CompletionSuggestion> suggestions, String pattern) {
+  List<CompletionSuggestionBuilder> _filterBy(
+      List<CompletionSuggestionBuilder> suggestions, String pattern) {
     return suggestions
         .where((suggestion) => suggestion.completion.startsWith(pattern))
         .toList();
@@ -220,7 +220,8 @@
 
   /// If the given list of [suggestions] includes a suggestion for the given
   /// [identifier], return the index of the suggestion. Otherwise, return `-1`.
-  int _indexOf(List<CompletionSuggestion> suggestions, String identifier) {
+  int _indexOf(
+      List<CompletionSuggestionBuilder> suggestions, String identifier) {
     for (var i = 0; i < suggestions.length; i++) {
       if (suggestions[i].completion == identifier) {
         return i;
@@ -237,7 +238,7 @@
   }
 
   /// Print information about the given [suggestions].
-  void _printSuggestions(List<CompletionSuggestion> suggestions) {
+  void _printSuggestions(List<CompletionSuggestionBuilder> suggestions) {
     if (suggestions.isEmpty) {
       output.writeln('  No suggestions');
       return;
@@ -248,7 +249,8 @@
     }
   }
 
-  List<CompletionSuggestion> _sort(List<CompletionSuggestion> suggestions) {
+  List<CompletionSuggestionBuilder> _sort(
+      List<CompletionSuggestionBuilder> suggestions) {
     suggestions.sort((first, second) => second.relevance - first.relevance);
     return suggestions;
   }
diff --git a/pkg/analysis_server/test/stress/replay/replay.dart b/pkg/analysis_server/test/stress/replay/replay.dart
index a674281..7de5c96 100644
--- a/pkg/analysis_server/test/stress/replay/replay.dart
+++ b/pkg/analysis_server/test/stress/replay/replay.dart
@@ -404,8 +404,7 @@
   void _runPub(String filePath) {
     var directoryPath = path.dirname(filePath);
     if (Directory(directoryPath).existsSync()) {
-      Process.runSync(
-          '/Users/brianwilkerson/Dev/dart/dart-sdk/bin/pub', ['get'],
+      Process.runSync(Platform.resolvedExecutable, ['pub', 'get'],
           workingDirectory: directoryPath);
     }
   }
diff --git a/pkg/analysis_server/test/test_all.dart b/pkg/analysis_server/test/test_all.dart
index 3e5769cc..bdc3ae4 100644
--- a/pkg/analysis_server/test/test_all.dart
+++ b/pkg/analysis_server/test/test_all.dart
@@ -26,6 +26,7 @@
 import 'socket_server_test.dart' as socket_server;
 import 'src/test_all.dart' as src;
 import 'tool/test_all.dart' as tool;
+import 'verify_error_fix_status_test.dart' as verify_error_fix_status;
 import 'verify_no_solo_test.dart' as verify_no_solo;
 import 'verify_sorted_test.dart' as verify_sorted;
 import 'verify_tests_test.dart' as verify_tests;
@@ -53,6 +54,7 @@
     socket_server.main();
     src.main();
     tool.main();
+    verify_error_fix_status.main();
     verify_no_solo.main();
     verify_sorted.main();
     verify_tests.main();
diff --git a/pkg/analysis_server/test/tool/lsp_spec/matchers.dart b/pkg/analysis_server/test/tool/lsp_spec/matchers.dart
index a424ae1..65bb7ae 100644
--- a/pkg/analysis_server/test/tool/lsp_spec/matchers.dart
+++ b/pkg/analysis_server/test/tool/lsp_spec/matchers.dart
@@ -15,8 +15,13 @@
 Matcher isMapOf(Matcher indexMatcher, Matcher valueMatcher) =>
     MapTypeMatcher(wrapMatcher(indexMatcher), wrapMatcher(valueMatcher));
 
-Matcher isResponseError(ErrorCodes code) => const TypeMatcher<ResponseError>()
-    .having((e) => e.code, 'code', equals(code));
+Matcher isResponseError(ErrorCodes code, {String? message}) {
+  final matcher = const TypeMatcher<ResponseError>()
+      .having((e) => e.code, 'code', equals(code));
+  return message != null
+      ? matcher.having((e) => e.message, 'message', equals(message))
+      : matcher;
+}
 
 Matcher isSimpleType(String name) => SimpleTypeMatcher(name);
 
diff --git a/pkg/analysis_server/test/verify_error_fix_status_test.dart b/pkg/analysis_server/test/verify_error_fix_status_test.dart
new file mode 100644
index 0000000..9da6ca2
--- /dev/null
+++ b/pkg/analysis_server/test/verify_error_fix_status_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/dart/data_driven.dart';
+import 'package:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/src/lint/registry.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:linter/src/rules.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:yaml/yaml.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(VerifyErrorFixStatusTest);
+  });
+}
+
+@reflectiveTest
+class VerifyErrorFixStatusTest {
+  PhysicalResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
+
+  void test_statusFile() {
+    var statusInfo = _statusInfo();
+    var errorCodeNames = _errorCodeNames();
+    var lintRuleNames = _lintRuleNames();
+
+    var errorData = _ErrorData();
+    for (var code in errorCodeValues) {
+      var name = code.uniqueName;
+      if (name.startsWith('TodoCode.')) {
+        // To-do codes are ignored.
+      } else {
+        var info = statusInfo.nodes[name];
+        if (info == null) {
+          errorData.codesWithNoEntry.add(name);
+        } else if (info is YamlMap) {
+          var markedAsHavingFix = info['status'] == 'hasFix';
+          var hasFix = _hasCodeFix(code);
+          if (hasFix) {
+            if (!markedAsHavingFix) {
+              errorData.codesWithFixes.add(name);
+            }
+          } else {
+            if (markedAsHavingFix) {
+              errorData.codesWithoutFixes.add(name);
+            }
+          }
+        }
+      }
+    }
+    for (var name in lintRuleNames) {
+      var info = statusInfo.nodes[name];
+      if (info == null) {
+        errorData.codesWithNoEntry.add(name);
+      } else if (info is YamlMap) {
+        var markedAsHavingFix = info['status'] == 'hasFix';
+        var hasFix = _hasLintFix(name);
+        if (hasFix) {
+          if (!markedAsHavingFix) {
+            errorData.codesWithFixes.add(name);
+          }
+        } else {
+          if (markedAsHavingFix) {
+            errorData.codesWithoutFixes.add(name);
+          }
+        }
+      }
+    }
+
+    for (var key in statusInfo.keys) {
+      if (key is String) {
+        if (!errorCodeNames.contains(key) && !lintRuleNames.contains(key)) {
+          errorData.entriesWithNoCode.add(key);
+        }
+      }
+    }
+
+    if (errorData.isNotEmpty) {
+      fail(_failureMessage(errorData));
+    }
+  }
+
+  /// Return the unique names of the error codes.
+  Set<String> _errorCodeNames() {
+    var codes = errorCodeValues;
+    var codeNames = <String>{};
+    for (var code in codes) {
+      codeNames.add(code.uniqueName);
+    }
+    return codeNames;
+  }
+
+  /// Return a failure message composed from the given lists.
+  String _failureMessage(_ErrorData errorData) {
+    var buffer = StringBuffer();
+    var needsBlankLine = false;
+    if (errorData.codesWithNoEntry.isNotEmpty) {
+      buffer.writeln('Add the following entries:');
+      buffer.writeln();
+      for (var code in errorData.codesWithNoEntry) {
+        buffer.writeln('$code:');
+        buffer.writeln('  status: needsEvaluation');
+      }
+      needsBlankLine = true;
+    }
+    if (errorData.entriesWithNoCode.isNotEmpty) {
+      if (needsBlankLine) {
+        buffer.writeln();
+      }
+      buffer.writeln('Remove the following entries:');
+      for (var code in errorData.entriesWithNoCode) {
+        buffer.writeln('- $code');
+      }
+      needsBlankLine = true;
+    }
+    if (errorData.codesWithFixes.isNotEmpty) {
+      if (needsBlankLine) {
+        buffer.writeln();
+      }
+      buffer.writeln('Mark the following entries as having fixes:');
+      for (var code in errorData.codesWithFixes) {
+        buffer.writeln('- $code');
+      }
+      needsBlankLine = true;
+    }
+    if (errorData.codesWithoutFixes.isNotEmpty) {
+      if (needsBlankLine) {
+        buffer.writeln();
+      }
+      buffer.writeln('Mark the following entries as not having fixes:');
+      for (var code in errorData.codesWithoutFixes) {
+        buffer.writeln('- $code');
+      }
+      needsBlankLine = true;
+    }
+    return buffer.toString();
+  }
+
+  /// Return `true` if the given error [code] has a fix associated with it.
+  bool _hasCodeFix(ErrorCode code) {
+    var producers = FixProcessor.nonLintProducerMap[code];
+    if (producers != null) {
+      return true;
+    }
+    var multiProducers = FixProcessor.nonLintMultiProducerMap[code];
+    if (multiProducers != null) {
+      for (var producer in multiProducers) {
+        if (producer is! DataDriven) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  /// Return `true` if the lint with the given name has a fix associated with
+  /// it.
+  bool _hasLintFix(String codeName) {
+    var name = codeName.substring('LintCode.'.length);
+    var producers = FixProcessor.lintProducerMap[name];
+    return producers != null;
+  }
+
+  /// Return the unique names of the lint rules.
+  Set<String> _lintRuleNames() {
+    registerLintRules();
+    var ruleNames = <String>{};
+    for (var rule in Registry.ruleRegistry.rules) {
+      for (var code in rule.lintCodes) {
+        ruleNames.add(code.uniqueName);
+      }
+    }
+    return ruleNames;
+  }
+
+  /// Return the path to the file containing the status information.
+  String _statusFilePath() {
+    var pathContext = resourceProvider.pathContext;
+    var packageRoot = pathContext.normalize(package_root.packageRoot);
+    return pathContext.join(packageRoot, 'analysis_server', 'lib', 'src',
+        'services', 'correction', 'error_fix_status.yaml');
+  }
+
+  /// Return the content of the file containing the status information, parsed
+  /// as a YAML map.
+  YamlMap _statusInfo() {
+    var statusFile = resourceProvider.getFile(_statusFilePath());
+    var document = loadYamlDocument(statusFile.readAsStringSync());
+    var statusInfo = document.contents;
+    if (statusInfo is! YamlMap) {
+      fail('Expected a YamlMap, found ${statusInfo.runtimeType}');
+    }
+    return statusInfo;
+  }
+}
+
+class _ErrorData {
+  final List<String> codesWithFixes = [];
+  final List<String> codesWithNoEntry = [];
+  final List<String> codesWithoutFixes = [];
+  final List<String> entriesWithNoCode = [];
+
+  bool get isNotEmpty =>
+      codesWithFixes.isNotEmpty ||
+      codesWithNoEntry.isNotEmpty ||
+      codesWithoutFixes.isNotEmpty ||
+      entriesWithNoCode.isNotEmpty;
+}
diff --git a/pkg/analysis_server/test/verify_sorted_test.dart b/pkg/analysis_server/test/verify_sorted_test.dart
index bcde125..37de909 100644
--- a/pkg/analysis_server/test/verify_sorted_test.dart
+++ b/pkg/analysis_server/test/verify_sorted_test.dart
@@ -27,6 +27,10 @@
   group('analyzer_plugin', () {
     buildTestsForAnalyzerPlugin();
   });
+
+  group('nnbd_migration', () {
+    buildTestsForNnbdMigration();
+  });
 }
 
 void buildTests({
@@ -116,6 +120,12 @@
   );
 }
 
+void buildTestsForNnbdMigration() {
+  buildTests(
+      packagePath: 'nnbd_migration',
+      excludedPaths: ['lib/src/front_end/resources/resources.g.dart']);
+}
+
 void buildTestsIn(AnalysisSession session, String testDirPath,
     List<String> excludedPath, Folder directory) {
   var pathContext = session.resourceProvider.pathContext;
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index da9d00b..cdfd1df 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -326,7 +326,7 @@
       'abstractKeyword': node.abstractKeyword,
       'name': node.name,
       'typeParameters': node.typeParameters,
-      'superclass': node.superclass2,
+      'superclass': node.superclass,
       'withClause': node.withClause,
       'implementsClause': node.implementsClause,
     });
@@ -409,7 +409,7 @@
   @override
   void visitConstructorName(ConstructorName node) {
     _visitChildren(node, {
-      'type': node.type2,
+      'type': node.type,
       'name': node.name,
     });
     super.visitConstructorName(node);
@@ -531,7 +531,7 @@
   @override
   void visitExtendsClause(ExtendsClause node) {
     _visitChildren(node, {
-      'superclass': node.superclass2,
+      'superclass': node.superclass,
     });
     super.visitExtendsClause(node);
   }
@@ -775,7 +775,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     _visitChildren(node, {
-      'interfaces': node.interfaces2,
+      'interfaces': node.interfaces,
     });
     super.visitImplementsClause(node);
   }
@@ -986,7 +986,7 @@
   @override
   void visitOnClause(OnClause node) {
     _visitChildren(node, {
-      'superclassConstraints': node.superclassConstraints2,
+      'superclassConstraints': node.superclassConstraints,
     });
     super.visitOnClause(node);
   }
@@ -1286,7 +1286,7 @@
   @override
   void visitWithClause(WithClause node) {
     _visitChildren(node, {
-      'mixinTypes': node.mixinTypes2,
+      'mixinTypes': node.mixinTypes,
     });
     super.visitWithClause(node);
   }
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 7007b15..d6f8764 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -1217,11 +1217,14 @@
     var budget = CompletionBudget(Duration(seconds: 30));
     if (declarationsTracker == null) {
       // available suggestions == false
-      suggestions = await DartCompletionManager(
-              budget: budget,
-              listener: listener,
-              notImportedSuggestions: notImportedSuggestions)
-          .computeSuggestions(dartRequest, performance);
+      var serverSuggestions = await DartCompletionManager(
+        budget: budget,
+        listener: listener,
+        notImportedSuggestions: notImportedSuggestions,
+      ).computeSuggestions(dartRequest, performance);
+      suggestions = serverSuggestions.map((serverSuggestion) {
+        return serverSuggestion.build();
+      }).toList();
     } else {
       // available suggestions == true
       var includedElementKinds = <protocol.ElementKind>{};
@@ -1229,13 +1232,16 @@
       var includedSuggestionRelevanceTagList =
           <protocol.IncludedSuggestionRelevanceTag>[];
       var includedSuggestionSetList = <protocol.IncludedSuggestionSet>[];
-      suggestions = await DartCompletionManager(
+      var serverSuggestions = await DartCompletionManager(
         budget: budget,
         includedElementKinds: includedElementKinds,
         includedElementNames: includedElementNames,
         includedSuggestionRelevanceTags: includedSuggestionRelevanceTagList,
         listener: listener,
       ).computeSuggestions(dartRequest, performance);
+      suggestions = serverSuggestions.map((serverSuggestion) {
+        return serverSuggestion.build();
+      }).toList();
 
       computeIncludedSetList(declarationsTracker, dartRequest,
           includedSuggestionSetList, includedElementNames);
@@ -1923,7 +1929,8 @@
   String? missingCompletionLocationTable;
 
   @override
-  void builtSuggestion(protocol.CompletionSuggestion suggestion) {
+  void builtSuggestion(CompletionSuggestionBuilder suggestionBuilder) {
+    var suggestion = suggestionBuilder.build();
     featureMap[suggestion] = cachedFeatures;
     cachedFeatures = noFeatures;
   }
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index 157e2be..97f3c5c 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -456,7 +456,7 @@
   void visitClassTypeAlias(ClassTypeAlias node) {
     var wasInGenericContext = inGenericContext;
     inGenericContext = inGenericContext || node.typeParameters != null;
-    _recordDataForNode('ClassTypeAlias (superclass)', node.superclass2);
+    _recordDataForNode('ClassTypeAlias (superclass)', node.superclass);
     var context = 'superclass';
     _recordTokenType('ClassDeclaration ($context)', node.withClause);
     context = 'with';
@@ -646,7 +646,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    _recordDataForNode('ExtendsClause (type)', node.superclass2);
+    _recordDataForNode('ExtendsClause (type)', node.superclass);
     super.visitExtendsClause(node);
   }
 
@@ -845,7 +845,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     // At the start of each type name.
-    for (var namedType in node.interfaces2) {
+    for (var namedType in node.interfaces) {
       _recordDataForNode('ImplementsClause (type)', namedType);
     }
     super.visitImplementsClause(node);
@@ -1068,7 +1068,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (var constraint in node.superclassConstraints2) {
+    for (var constraint in node.superclassConstraints) {
       _recordDataForNode('OnClause (type)', constraint);
     }
     super.visitOnClause(node);
@@ -1351,7 +1351,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (var namedType in node.mixinTypes2) {
+    for (var namedType in node.mixinTypes) {
       _recordDataForNode('WithClause (type)', namedType);
     }
     super.visitWithClause(node);
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index 7111493..a50093b 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -463,7 +463,7 @@
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    _recordDataForNode('ClassTypeAlias_superclass', node.superclass2);
+    _recordDataForNode('ClassTypeAlias_superclass', node.superclass);
     var context = 'superclass';
     _recordKeyword('ClassTypeAlias_$context', node.withClause);
     context = 'with';
@@ -643,7 +643,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    _recordDataForNode('ExtendsClause_superclass', node.superclass2);
+    _recordDataForNode('ExtendsClause_superclass', node.superclass);
     super.visitExtendsClause(node);
   }
 
@@ -819,7 +819,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     // At the start of each type name.
-    for (var namedType in node.interfaces2) {
+    for (var namedType in node.interfaces) {
       _recordDataForNode('ImplementsClause_interface', namedType);
     }
     super.visitImplementsClause(node);
@@ -998,7 +998,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (var constraint in node.superclassConstraints2) {
+    for (var constraint in node.superclassConstraints) {
       _recordDataForNode('OnClause_superclassConstraint', constraint);
     }
     super.visitOnClause(node);
@@ -1251,7 +1251,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (var namedType in node.mixinTypes2) {
+    for (var namedType in node.mixinTypes) {
       _recordDataForNode('WithClause_mixinType', namedType);
     }
     super.visitWithClause(node);
diff --git a/pkg/analysis_server/tool/code_completion/visitors.dart b/pkg/analysis_server/tool/code_completion/visitors.dart
index f65c8b6..5783758 100644
--- a/pkg/analysis_server/tool/code_completion/visitors.dart
+++ b/pkg/analysis_server/tool/code_completion/visitors.dart
@@ -653,7 +653,7 @@
           if (constructorName is ConstructorName) {
             var instanceCreationExpression = constructorName.parent;
             if (instanceCreationExpression is InstanceCreationExpression &&
-                constructorName.type2.name == node) {
+                constructorName.type.name == node) {
               if (instanceCreationExpression.keyword != null ||
                   constructorName.name == null) {
                 elementKind = protocol.ElementKind.CONSTRUCTOR;
diff --git a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
index f6cf4f0..3c16118 100644
--- a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
+++ b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
@@ -71,7 +71,7 @@
     writeln(';');
   }
 
-  /// Generate all of the constants associates with the [api].
+  /// Generate all of the constants associated with the [api].
   void generateConstants() {
     writeln("const String PROTOCOL_VERSION = '${api.version}';");
     writeln();
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index 3d8e563..d2dda69 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -216,12 +216,12 @@
    *         not be analyzed.
    * @param packageRoots A mapping from source directories to package roots that should override the
    *         normal package: URI resolution mechanism. If a package root is a file, then the analyzer
-   *         will behave as though that file is a ".packages" file in the source directory. The
-   *         effect is the same as specifying the file as a "--packages" parameter to the Dart VM
-   *         when executing any Dart file inside the source directory. Files in any directories that
-   *         are not overridden by this mapping have their package: URI's resolved using the normal
-   *         pubspec.yaml mechanism. If this field is absent, or the empty map is specified, that
-   *         indicates that the normal pubspec.yaml mechanism should always be used.
+   *         will behave as though that file is a ".dart_tool/package_config.json" file in the source
+   *         directory. The effect is the same as specifying the file as a "--packages" parameter to
+   *         the Dart VM when executing any Dart file inside the source directory. Files in any
+   *         directories that are not overridden by this mapping have their package: URI's resolved
+   *         using the normal pubspec.yaml mechanism. If this field is absent, or the empty map is
+   *         specified, that indicates that the normal pubspec.yaml mechanism should always be used.
    */
   public void analysis_setAnalysisRoots(List<String> included, List<String> excluded, Map<String, String> packageRoots);
 
@@ -440,6 +440,8 @@
    * @param offset The offset within the file at which suggestions are to be made.
    * @param maxResults The maximum number of suggestions to return. If the number of suggestions
    *         after filtering is greater than the maxResults, then isIncomplete is set to true.
+   * @param completionCaseMatchingMode The mode of code completion being invoked. If no value is
+   *         provided, MATCH_FIRST_CHAR will be assumed.
    * @param completionMode The mode of code completion being invoked. If no value is provided, BASIC
    *         will be assumed. BASIC is also the only currently supported.
    * @param invocationCount The number of times that the user has invoked code completion at the same
@@ -449,7 +451,7 @@
    *         field is intended to be used for benchmarking, and usually should not be provided, so
    *         that the default timeout is used.
    */
-  public void completion_getSuggestions2(String file, int offset, int maxResults, String completionMode, int invocationCount, int timeout, GetSuggestions2Consumer consumer);
+  public void completion_getSuggestions2(String file, int offset, int maxResults, String completionCaseMatchingMode, String completionMode, int invocationCount, int timeout, GetSuggestions2Consumer consumer);
 
   /**
    * {@code completion.registerLibraryPaths}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionCaseMatchingMode.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionCaseMatchingMode.java
new file mode 100644
index 0000000..3a4dc2a
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionCaseMatchingMode.java
@@ -0,0 +1,34 @@
+/*
+ * 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 file has been automatically generated. Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+/**
+ * An enumeration of the character case matching modes that the user may set in the client.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class CompletionCaseMatchingMode {
+
+  /**
+   * Match the first character case only when filtering completions, the default for this
+   * enumeration.
+   */
+  public static final String FIRST_CHAR = "FIRST_CHAR";
+
+  /**
+   * Match all character cases when filtering completion lists.
+   */
+  public static final String ALL_CHARS = "ALL_CHARS";
+
+  /**
+   * Do not match character cases when filtering completion lists.
+   */
+  public static final String NONE = "NONE";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
index f73aa41..9bc6c74 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
@@ -176,6 +176,21 @@
   private final String parameterType;
 
   /**
+   * This field is omitted if getSuggestions was used rather than getSuggestions2.
+   *
+   * This field is omitted if this suggestion corresponds to a locally declared element.
+   *
+   * 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.
+   *
+   * 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 package:foo/bar.dart or
+   * file:///home/me/workspace/foo/test/bar_test.dart.
+   */
+  private final String libraryUri;
+
+  /**
    * 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 getSuggestions was used rather than getSuggestions2.
@@ -185,7 +200,7 @@
   /**
    * Constructor for {@link CompletionSuggestion}.
    */
-  public CompletionSuggestion(String kind, int relevance, String completion, String displayText, Integer replacementOffset, Integer replacementLength, int selectionOffset, int selectionLength, boolean isDeprecated, boolean isPotential, String docSummary, String docComplete, String declaringType, String defaultArgumentListString, int[] defaultArgumentListTextRanges, Element element, String returnType, List<String> parameterNames, List<String> parameterTypes, Integer requiredParameterCount, Boolean hasNamedParameters, String parameterName, String parameterType, Boolean isNotImported) {
+  public CompletionSuggestion(String kind, int relevance, String completion, String displayText, Integer replacementOffset, Integer replacementLength, int selectionOffset, int selectionLength, boolean isDeprecated, boolean isPotential, String docSummary, String docComplete, String declaringType, String defaultArgumentListString, int[] defaultArgumentListTextRanges, Element element, String returnType, List<String> parameterNames, List<String> parameterTypes, Integer requiredParameterCount, Boolean hasNamedParameters, String parameterName, String parameterType, String libraryUri, Boolean isNotImported) {
     this.kind = kind;
     this.relevance = relevance;
     this.completion = completion;
@@ -209,6 +224,7 @@
     this.hasNamedParameters = hasNamedParameters;
     this.parameterName = parameterName;
     this.parameterType = parameterType;
+    this.libraryUri = libraryUri;
     this.isNotImported = isNotImported;
   }
 
@@ -240,6 +256,7 @@
         ObjectUtilities.equals(other.hasNamedParameters, hasNamedParameters) &&
         ObjectUtilities.equals(other.parameterName, parameterName) &&
         ObjectUtilities.equals(other.parameterType, parameterType) &&
+        ObjectUtilities.equals(other.libraryUri, libraryUri) &&
         ObjectUtilities.equals(other.isNotImported, isNotImported);
     }
     return false;
@@ -269,8 +286,9 @@
     Boolean hasNamedParameters = jsonObject.get("hasNamedParameters") == null ? null : jsonObject.get("hasNamedParameters").getAsBoolean();
     String parameterName = jsonObject.get("parameterName") == null ? null : jsonObject.get("parameterName").getAsString();
     String parameterType = jsonObject.get("parameterType") == null ? null : jsonObject.get("parameterType").getAsString();
+    String libraryUri = jsonObject.get("libraryUri") == null ? null : jsonObject.get("libraryUri").getAsString();
     Boolean isNotImported = jsonObject.get("isNotImported") == null ? null : jsonObject.get("isNotImported").getAsBoolean();
-    return new CompletionSuggestion(kind, relevance, completion, displayText, replacementOffset, replacementLength, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary, docComplete, declaringType, defaultArgumentListString, defaultArgumentListTextRanges, element, returnType, parameterNames, parameterTypes, requiredParameterCount, hasNamedParameters, parameterName, parameterType, isNotImported);
+    return new CompletionSuggestion(kind, relevance, completion, displayText, replacementOffset, replacementLength, selectionOffset, selectionLength, isDeprecated, isPotential, docSummary, docComplete, declaringType, defaultArgumentListString, defaultArgumentListTextRanges, element, returnType, parameterNames, parameterTypes, requiredParameterCount, hasNamedParameters, parameterName, parameterType, libraryUri, isNotImported);
   }
 
   public static List<CompletionSuggestion> fromJsonArray(JsonArray jsonArray) {
@@ -391,6 +409,23 @@
   }
 
   /**
+   * This field is omitted if getSuggestions was used rather than getSuggestions2.
+   *
+   * This field is omitted if this suggestion corresponds to a locally declared element.
+   *
+   * 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.
+   *
+   * 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 package:foo/bar.dart or
+   * file:///home/me/workspace/foo/test/bar_test.dart.
+   */
+  public String getLibraryUri() {
+    return libraryUri;
+  }
+
+  /**
    * The name of the optional parameter being suggested. This field is omitted if the suggestion is
    * not the addition of an optional argument within an argument list.
    */
@@ -505,6 +540,7 @@
     builder.append(hasNamedParameters);
     builder.append(parameterName);
     builder.append(parameterType);
+    builder.append(libraryUri);
     builder.append(isNotImported);
     return builder.toHashCode();
   }
@@ -578,6 +614,9 @@
     if (parameterType != null) {
       jsonObject.addProperty("parameterType", parameterType);
     }
+    if (libraryUri != null) {
+      jsonObject.addProperty("libraryUri", libraryUri);
+    }
     if (isNotImported != null) {
       jsonObject.addProperty("isNotImported", isNotImported);
     }
@@ -634,6 +673,8 @@
     builder.append(parameterName + ", ");
     builder.append("parameterType=");
     builder.append(parameterType + ", ");
+    builder.append("libraryUri=");
+    builder.append(libraryUri + ", ");
     builder.append("isNotImported=");
     builder.append(isNotImported);
     builder.append("]");
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Element.java b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
index 0648fc7..690f101 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Element.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
@@ -101,15 +101,9 @@
   private final String aliasedType;
 
   /**
-   * If the element belongs to a library, the URI of the library. Otherwise, this field will not be
-   * defined.
-   */
-  private final String libraryUri;
-
-  /**
    * Constructor for {@link Element}.
    */
-  public Element(String kind, String name, Location location, int flags, String parameters, String returnType, String typeParameters, String aliasedType, String libraryUri) {
+  public Element(String kind, String name, Location location, int flags, String parameters, String returnType, String typeParameters, String aliasedType) {
     this.kind = kind;
     this.name = name;
     this.location = location;
@@ -118,7 +112,6 @@
     this.returnType = returnType;
     this.typeParameters = typeParameters;
     this.aliasedType = aliasedType;
-    this.libraryUri = libraryUri;
   }
 
   @Override
@@ -133,8 +126,7 @@
         ObjectUtilities.equals(other.parameters, parameters) &&
         ObjectUtilities.equals(other.returnType, returnType) &&
         ObjectUtilities.equals(other.typeParameters, typeParameters) &&
-        ObjectUtilities.equals(other.aliasedType, aliasedType) &&
-        ObjectUtilities.equals(other.libraryUri, libraryUri);
+        ObjectUtilities.equals(other.aliasedType, aliasedType);
     }
     return false;
   }
@@ -148,8 +140,7 @@
     String returnType = jsonObject.get("returnType") == null ? null : jsonObject.get("returnType").getAsString();
     String typeParameters = jsonObject.get("typeParameters") == null ? null : jsonObject.get("typeParameters").getAsString();
     String aliasedType = jsonObject.get("aliasedType") == null ? null : jsonObject.get("aliasedType").getAsString();
-    String libraryUri = jsonObject.get("libraryUri") == null ? null : jsonObject.get("libraryUri").getAsString();
-    return new Element(kind, name, location, flags, parameters, returnType, typeParameters, aliasedType, libraryUri);
+    return new Element(kind, name, location, flags, parameters, returnType, typeParameters, aliasedType);
   }
 
   public static List<Element> fromJsonArray(JsonArray jsonArray) {
@@ -194,14 +185,6 @@
   }
 
   /**
-   * If the element belongs to a library, the URI of the library. Otherwise, this field will not be
-   * defined.
-   */
-  public String getLibraryUri() {
-    return libraryUri;
-  }
-
-  /**
    * The location of the name in the declaration of the element.
    */
   public Location getLocation() {
@@ -252,7 +235,6 @@
     builder.append(returnType);
     builder.append(typeParameters);
     builder.append(aliasedType);
-    builder.append(libraryUri);
     return builder.toHashCode();
   }
 
@@ -300,9 +282,6 @@
     if (aliasedType != null) {
       jsonObject.addProperty("aliasedType", aliasedType);
     }
-    if (libraryUri != null) {
-      jsonObject.addProperty("libraryUri", libraryUri);
-    }
     return jsonObject;
   }
 
@@ -325,9 +304,7 @@
     builder.append("typeParameters=");
     builder.append(typeParameters + ", ");
     builder.append("aliasedType=");
-    builder.append(aliasedType + ", ");
-    builder.append("libraryUri=");
-    builder.append(libraryUri);
+    builder.append(aliasedType);
     builder.append("]");
     return builder.toString();
   }
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 c315c1c..e858201 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
@@ -40,7 +40,8 @@
   public static final List<LinkedEditGroup> EMPTY_LIST = Lists.newArrayList();
 
   /**
-   * The positions of the regions that should be edited simultaneously.
+   * The positions of the regions (after applying the relevant edits) that should be edited
+   * simultaneously.
    */
   private final List<Position> positions;
 
@@ -102,7 +103,8 @@
   }
 
   /**
-   * The positions of the regions that should be edited simultaneously.
+   * The positions of the regions (after applying the relevant edits) that should be edited
+   * simultaneously.
    */
   public List<Position> getPositions() {
     return positions;
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 51f35a4..5c07676 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.9</version>
+  <version>1.32.10</version>
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -134,6 +134,10 @@
   ignoring the item or treating it with some default/fallback handling.
 </p>
 <h3>Changelog</h3>
+<h4>1.32.10</h4>
+<ul>
+  <li>The <tt>MOVE_FILE</tt> refactor now supports moving/renaming folders.</li>
+</ul>
 <h4>1.32.8</h4>
 <ul>
   <li>Added <tt>server.cancelRequest</tt> to allow clients to request cancellation
@@ -866,7 +870,8 @@
         </p>
         <p>
           If a package root is a file, then the analyzer
-          will behave as though that file is a ".packages" file in the
+          will behave as though that file is a
+          ".dart_tool/package_config.json" file in the
           source directory. The effect is the same as specifying the file
           as a "--packages" parameter to the Dart VM when
           executing any Dart file inside the source directory.
@@ -1507,6 +1512,13 @@
           then <tt>isIncomplete</tt> is set to <tt>true</tt>.
         </p>
       </field>
+      <field name="completionCaseMatchingMode" optional="true">
+        <ref>CompletionCaseMatchingMode</ref>
+        <p>
+          The mode of code completion being invoked. If no value is provided,
+          <tt>MATCH_FIRST_CHAR</tt> will be assumed.
+        </p>
+      </field>
       <field name="completionMode" experimental="true" optional="true">
         <ref>CompletionMode</ref>
         <p>
@@ -4146,6 +4158,32 @@
       </value>
     </enum>
   </type>
+  <type name="CompletionCaseMatchingMode">
+    <p>
+      An enumeration of the character case matching modes that the user may set in the client.
+    </p>
+    <enum>
+      <value>
+        <code>FIRST_CHAR</code>
+        <p>
+          Match the first character case only when filtering completions, the default for this
+          enumeration.
+        </p>
+      </value>
+      <value>
+        <code>ALL_CHARS</code>
+        <p>
+          Match all character cases when filtering completion lists.
+        </p>
+      </value>
+      <value>
+        <code>NONE</code>
+        <p>
+          Do not match character cases when filtering completion lists.
+        </p>
+      </value>
+    </enum>
+  </type>
   <type name="RuntimeCompletionExpression">
     <p>
       An expression for which we want to know its runtime type.
@@ -5874,10 +5912,15 @@
   </refactoring>
   <refactoring kind="MOVE_FILE">
     <p>
-      Move the given file and update all of the references to that file
-      and from it. The move operation is supported in general case - for
-      renaming a file in the same folder, moving it to a different folder
-      or both.
+      Move the given file or folder and update all of the references to
+      and from it. The move operation is supported in general case -
+      for renaming an item in the same folder, moving it to a different
+      folder or both.
+
+      Moving or renaming large folders may take time and clients should
+      consider showing an indicator to the user with the ability to
+      cancel the request (which can be done using
+      <tt>server.cancelRequest</tt>).
     </p>
     <p>
       The refactoring must be activated before an actual file moving
diff --git a/pkg/analysis_server_client/OWNERS b/pkg/analysis_server_client/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/analysis_server_client/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
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 c1a528b..97e7427 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
@@ -612,6 +612,23 @@
   /// if the parameterName field is omitted.
   String? parameterType;
 
+  /// This field is omitted if getSuggestions was used rather than
+  /// getSuggestions2.
+  ///
+  /// This field is omitted if this suggestion corresponds to a locally
+  /// declared element.
+  ///
+  /// 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.
+  ///
+  /// 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 package:foo/bar.dart or
+  /// file:///home/me/workspace/foo/test/bar_test.dart.
+  String? libraryUri;
+
   /// 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
@@ -642,6 +659,7 @@
       this.hasNamedParameters,
       this.parameterName,
       this.parameterType,
+      this.libraryUri,
       this.isNotImported});
 
   factory CompletionSuggestion.fromJson(
@@ -781,6 +799,11 @@
         parameterType = jsonDecoder.decodeString(
             jsonPath + '.parameterType', json['parameterType']);
       }
+      String? libraryUri;
+      if (json.containsKey('libraryUri')) {
+        libraryUri = jsonDecoder.decodeString(
+            jsonPath + '.libraryUri', json['libraryUri']);
+      }
       bool? isNotImported;
       if (json.containsKey('isNotImported')) {
         isNotImported = jsonDecoder.decodeBool(
@@ -804,6 +827,7 @@
           hasNamedParameters: hasNamedParameters,
           parameterName: parameterName,
           parameterType: parameterType,
+          libraryUri: libraryUri,
           isNotImported: isNotImported);
     } else {
       throw jsonDecoder.mismatch(jsonPath, 'CompletionSuggestion', json);
@@ -884,6 +908,10 @@
     if (parameterType != null) {
       result['parameterType'] = parameterType;
     }
+    var libraryUri = this.libraryUri;
+    if (libraryUri != null) {
+      result['libraryUri'] = libraryUri;
+    }
     var isNotImported = this.isNotImported;
     if (isNotImported != null) {
       result['isNotImported'] = isNotImported;
@@ -923,6 +951,7 @@
           hasNamedParameters == other.hasNamedParameters &&
           parameterName == other.parameterName &&
           parameterType == other.parameterType &&
+          libraryUri == other.libraryUri &&
           isNotImported == other.isNotImported;
     }
     return false;
@@ -953,6 +982,7 @@
         hasNamedParameters,
         parameterName,
         parameterType,
+        libraryUri,
         isNotImported,
       ]);
 }
@@ -1234,17 +1264,12 @@
   /// this field will not be defined.
   String? aliasedType;
 
-  /// If the element belongs to a library, the URI of the library. Otherwise,
-  /// this field will not be defined.
-  String? libraryUri;
-
   Element(this.kind, this.name, this.flags,
       {this.location,
       this.parameters,
       this.returnType,
       this.typeParameters,
-      this.aliasedType,
-      this.libraryUri});
+      this.aliasedType});
 
   factory Element.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -1294,18 +1319,12 @@
         aliasedType = jsonDecoder.decodeString(
             jsonPath + '.aliasedType', json['aliasedType']);
       }
-      String? libraryUri;
-      if (json.containsKey('libraryUri')) {
-        libraryUri = jsonDecoder.decodeString(
-            jsonPath + '.libraryUri', json['libraryUri']);
-      }
       return Element(kind, name, flags,
           location: location,
           parameters: parameters,
           returnType: returnType,
           typeParameters: typeParameters,
-          aliasedType: aliasedType,
-          libraryUri: libraryUri);
+          aliasedType: aliasedType);
     } else {
       throw jsonDecoder.mismatch(jsonPath, 'Element', json);
     }
@@ -1344,10 +1363,6 @@
     if (aliasedType != null) {
       result['aliasedType'] = aliasedType;
     }
-    var libraryUri = this.libraryUri;
-    if (libraryUri != null) {
-      result['libraryUri'] = libraryUri;
-    }
     return result;
   }
 
@@ -1364,8 +1379,7 @@
           parameters == other.parameters &&
           returnType == other.returnType &&
           typeParameters == other.typeParameters &&
-          aliasedType == other.aliasedType &&
-          libraryUri == other.libraryUri;
+          aliasedType == other.aliasedType;
     }
     return false;
   }
@@ -1380,7 +1394,6 @@
         returnType,
         typeParameters,
         aliasedType,
-        libraryUri,
       );
 }
 
@@ -2702,7 +2715,8 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 class LinkedEditGroup implements HasToJson {
-  /// The positions of the regions that should be edited simultaneously.
+  /// The positions of the regions (after applying the relevant edits) that
+  /// should be edited simultaneously.
   List<Position> positions;
 
   /// The length of the regions that should be edited simultaneously.
@@ -4359,8 +4373,14 @@
   }
 
   /// Adds [edit] to the [FileEdit] for the given [file].
-  void addEdit(String file, int fileStamp, SourceEdit edit) =>
-      addEditToSourceChange(this, file, fileStamp, edit);
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void addEdit(String file, int fileStamp, SourceEdit edit,
+          {bool insertBeforeExisting = false}) =>
+      addEditToSourceChange(this, file, fileStamp, edit,
+          insertBeforeExisting: insertBeforeExisting);
 
   /// Adds the given [FileEdit].
   void addFileEdit(SourceFileEdit edit) {
@@ -4583,10 +4603,22 @@
   }
 
   /// Adds the given [Edit] to the list.
-  void add(SourceEdit edit) => addEditForSource(this, edit);
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void add(SourceEdit edit, {bool insertBeforeExisting = false}) =>
+      addEditForSource(this, edit, insertBeforeExisting: insertBeforeExisting);
 
   /// Adds the given [Edit]s.
-  void addAll(Iterable<SourceEdit> edits) => addAllEditsForSource(this, edits);
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void addAll(Iterable<SourceEdit> edits,
+          {bool insertBeforeExisting = false}) =>
+      addAllEditsForSource(this, edits,
+          insertBeforeExisting: insertBeforeExisting);
 
   @override
   String toString() => json.encode(toJson());
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 3baa946..e8a4e7e 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.9';
+const String PROTOCOL_VERSION = '1.32.10';
 
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
 const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
@@ -138,6 +138,8 @@
 const String COMPLETION_NOTIFICATION_RESULTS_RESULTS = 'results';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS = 'completion.getSuggestions';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS2 = 'completion.getSuggestions2';
+const String COMPLETION_REQUEST_GET_SUGGESTIONS2_COMPLETION_CASE_MATCHING_MODE =
+    'completionCaseMatchingMode';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS2_COMPLETION_MODE =
     'completionMode';
 const String COMPLETION_REQUEST_GET_SUGGESTIONS2_FILE = 'file';
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 413c551..58d9f35 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
@@ -2583,9 +2583,9 @@
   /// the normal package: URI resolution mechanism.
   ///
   /// If a package root is a file, then the analyzer will behave as though that
-  /// file is a ".packages" file in the source directory. The effect is the
-  /// same as specifying the file as a "--packages" parameter to the Dart VM
-  /// when executing any Dart file inside the source directory.
+  /// file is a ".dart_tool/package_config.json" file in the source directory.
+  /// The effect is the same as specifying the file as a "--packages" parameter
+  /// to the Dart VM when executing any Dart file inside the source directory.
   ///
   /// Files in any directories that are not overridden by this mapping have
   /// their package: URI's resolved using the normal pubspec.yaml mechanism. If
@@ -4215,6 +4215,68 @@
       );
 }
 
+/// CompletionCaseMatchingMode
+///
+/// enum {
+///   FIRST_CHAR
+///   ALL_CHARS
+///   NONE
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class CompletionCaseMatchingMode implements Enum {
+  /// Match the first character case only when filtering completions, the
+  /// default for this enumeration.
+  static const CompletionCaseMatchingMode FIRST_CHAR =
+      CompletionCaseMatchingMode._('FIRST_CHAR');
+
+  /// Match all character cases when filtering completion lists.
+  static const CompletionCaseMatchingMode ALL_CHARS =
+      CompletionCaseMatchingMode._('ALL_CHARS');
+
+  /// Do not match character cases when filtering completion lists.
+  static const CompletionCaseMatchingMode NONE =
+      CompletionCaseMatchingMode._('NONE');
+
+  /// A list containing all of the enum values that are defined.
+  static const List<CompletionCaseMatchingMode> VALUES =
+      <CompletionCaseMatchingMode>[FIRST_CHAR, ALL_CHARS, NONE];
+
+  @override
+  final String name;
+
+  const CompletionCaseMatchingMode._(this.name);
+
+  factory CompletionCaseMatchingMode(String name) {
+    switch (name) {
+      case 'FIRST_CHAR':
+        return FIRST_CHAR;
+      case 'ALL_CHARS':
+        return ALL_CHARS;
+      case 'NONE':
+        return NONE;
+    }
+    throw Exception('Illegal enum value: $name');
+  }
+
+  factory CompletionCaseMatchingMode.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    if (json is String) {
+      try {
+        return CompletionCaseMatchingMode(json);
+      } catch (_) {
+        // Fall through
+      }
+    }
+    throw jsonDecoder.mismatch(jsonPath, 'CompletionCaseMatchingMode', json);
+  }
+
+  @override
+  String toString() => 'CompletionCaseMatchingMode.$name';
+
+  String toJson() => name;
+}
+
 /// completion.existingImports params
 ///
 /// {
@@ -4683,6 +4745,7 @@
 ///   "file": FilePath
 ///   "offset": int
 ///   "maxResults": int
+///   "completionCaseMatchingMode": optional CompletionCaseMatchingMode
 /// }
 ///
 /// Clients may not extend, implement or mix-in this class.
@@ -4698,6 +4761,10 @@
   /// to true.
   int maxResults;
 
+  /// The mode of code completion being invoked. If no value is provided,
+  /// MATCH_FIRST_CHAR will be assumed.
+  CompletionCaseMatchingMode? completionCaseMatchingMode;
+
   /// The mode of code completion being invoked. If no value is provided, BASIC
   /// will be assumed. BASIC is also the only currently supported.
   CompletionMode? completionMode;
@@ -4714,7 +4781,10 @@
   int? timeout;
 
   CompletionGetSuggestions2Params(this.file, this.offset, this.maxResults,
-      {this.completionMode, this.invocationCount, this.timeout});
+      {this.completionCaseMatchingMode,
+      this.completionMode,
+      this.invocationCount,
+      this.timeout});
 
   factory CompletionGetSuggestions2Params.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -4739,6 +4809,13 @@
       } else {
         throw jsonDecoder.mismatch(jsonPath, 'maxResults');
       }
+      CompletionCaseMatchingMode? completionCaseMatchingMode;
+      if (json.containsKey('completionCaseMatchingMode')) {
+        completionCaseMatchingMode = CompletionCaseMatchingMode.fromJson(
+            jsonDecoder,
+            jsonPath + '.completionCaseMatchingMode',
+            json['completionCaseMatchingMode']);
+      }
       CompletionMode? completionMode;
       if (json.containsKey('completionMode')) {
         completionMode = CompletionMode.fromJson(
@@ -4754,6 +4831,7 @@
         timeout = jsonDecoder.decodeInt(jsonPath + '.timeout', json['timeout']);
       }
       return CompletionGetSuggestions2Params(file, offset, maxResults,
+          completionCaseMatchingMode: completionCaseMatchingMode,
           completionMode: completionMode,
           invocationCount: invocationCount,
           timeout: timeout);
@@ -4774,6 +4852,11 @@
     result['file'] = file;
     result['offset'] = offset;
     result['maxResults'] = maxResults;
+    var completionCaseMatchingMode = this.completionCaseMatchingMode;
+    if (completionCaseMatchingMode != null) {
+      result['completionCaseMatchingMode'] =
+          completionCaseMatchingMode.toJson();
+    }
     var completionMode = this.completionMode;
     if (completionMode != null) {
       result['completionMode'] = completionMode.toJson();
@@ -4803,6 +4886,7 @@
       return file == other.file &&
           offset == other.offset &&
           maxResults == other.maxResults &&
+          completionCaseMatchingMode == other.completionCaseMatchingMode &&
           completionMode == other.completionMode &&
           invocationCount == other.invocationCount &&
           timeout == other.timeout;
@@ -4815,6 +4899,7 @@
         file,
         offset,
         maxResults,
+        completionCaseMatchingMode,
         completionMode,
         invocationCount,
         timeout,
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_internal.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_internal.dart
index 399fb51..431cca2 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_internal.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_internal.dart
@@ -13,30 +13,54 @@
     HashMap<String, RefactoringKind>();
 
 /// Adds the given [sourceEdits] to the list in [sourceFileEdit].
+///
+/// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+/// other edits will be inserted such that they appear before them in the
+/// resulting document.
 void addAllEditsForSource(
-    SourceFileEdit sourceFileEdit, Iterable<SourceEdit> edits) {
-  edits.forEach(sourceFileEdit.add);
+    SourceFileEdit sourceFileEdit, Iterable<SourceEdit> edits,
+    {bool insertBeforeExisting = false}) {
+  edits.forEach((edit) =>
+      sourceFileEdit.add(edit, insertBeforeExisting: insertBeforeExisting));
 }
 
 /// Adds the given [sourceEdit] to the list in [sourceFileEdit].
-void addEditForSource(SourceFileEdit sourceFileEdit, SourceEdit sourceEdit) {
+///
+/// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+/// other edits will be inserted such that they appear before them in the
+/// resulting document.
+void addEditForSource(SourceFileEdit sourceFileEdit, SourceEdit sourceEdit,
+    {bool insertBeforeExisting = false}) {
   var edits = sourceFileEdit.edits;
+  var length = edits.length;
   var index = 0;
-  while (index < edits.length && edits[index].offset > sourceEdit.offset) {
+  while (index < length && edits[index].offset > sourceEdit.offset) {
     index++;
   }
+  // If it's an insert and it should be inserted before existing edits, also
+  // skip over any with the same offset.
+  if (insertBeforeExisting && sourceEdit.length == 0) {
+    while (index < length && edits[index].offset >= sourceEdit.offset) {
+      index++;
+    }
+  }
   edits.insert(index, sourceEdit);
 }
 
 /// Adds [edit] to the [FileEdit] for the given [file].
+///
+/// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+/// other edits will be inserted such that they appear before them in the
+/// resulting document.
 void addEditToSourceChange(
-    SourceChange change, String file, int fileStamp, SourceEdit edit) {
+    SourceChange change, String file, int fileStamp, SourceEdit edit,
+    {bool insertBeforeExisting = false}) {
   var fileEdit = change.getFileEdit(file);
   if (fileEdit == null) {
     fileEdit = SourceFileEdit(file, fileStamp);
     change.addFileEdit(fileEdit);
   }
-  fileEdit.add(edit);
+  fileEdit.add(edit, insertBeforeExisting: insertBeforeExisting);
 }
 
 /// Get the result of applying the edit to the given [code]. Access via
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 65409ce..0b6f526 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 3.3.1
+* Report HintCode.OVERRIDE_ON_NON_OVERRIDING_xyz on enum.
+
+## 3.3.0
+* Added `getField` to `ExtensionElement`.
+* Added `isGenerative` to `ConstructorElement`.
+* Added `isDartCoreEnum` to `ClassElement` and `DartType`.
+* Deprecated `superclass2`, `mixinTypes2`, etc. Use `superclass`, `mixinTypes`, etc.
+* APIs for `enhanced-enums` language feature.
+
 ## 3.2.0
 * Deprecated `changes` getter in `File` and `Folder`, use `watch()` instead.
 
diff --git a/pkg/analyzer/OWNERS b/pkg/analyzer/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/analyzer/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
diff --git a/pkg/analyzer/lib/dart/analysis/utilities.dart b/pkg/analyzer/lib/dart/analysis/utilities.dart
index 8cee120..64dfab7 100644
--- a/pkg/analyzer/lib/dart/analysis/utilities.dart
+++ b/pkg/analyzer/lib/dart/analysis/utilities.dart
@@ -82,14 +82,14 @@
       featureSet: featureSet,
     );
   var token = scanner.tokenize();
+  var lineInfo = LineInfo(scanner.lineStarts);
   var parser = Parser(
     source,
     errorCollector,
     featureSet: scanner.featureSet,
+    lineInfo: lineInfo,
   );
   var unit = parser.parseCompilationUnit(token);
-  var lineInfo = LineInfo(scanner.lineStarts);
-  unit.lineInfo = lineInfo;
   ParseStringResult result =
       ParseStringResultImpl(content, unit, errorCollector.errors);
   if (throwIfDiagnostics && result.errors.isNotEmpty) {
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 748df11..d49cca3 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -818,9 +818,6 @@
   /// Return `true` if this class is declared to be an abstract class.
   bool get isAbstract;
 
-  /// Return the 'macro' keyword, or `null` if the keyword was absent.
-  Token? get macroKeyword;
-
   /// Return the native clause for this class, or `null` if the class does not
   /// have a native clause.
   NativeClause? get nativeClause;
@@ -908,14 +905,14 @@
   /// Return `true` if this class is declared to be an abstract class.
   bool get isAbstract;
 
-  /// Return the token for the 'macro' keyword, or `null` if this is not
-  /// defining a macro class.
-  Token? get macroKeyword;
-
   @override
   SimpleIdentifier get name;
 
   /// Return the name of the superclass of the class being declared.
+  NamedType get superclass;
+
+  /// Return the name of the superclass of the class being declared.
+  @Deprecated('Use superclass instead')
   NamedType get superclass2;
 
   /// Return the type parameters for the class, or `null` if the class does not
@@ -1066,7 +1063,7 @@
   LanguageVersionToken? get languageVersionToken;
 
   /// Return the line information for this compilation unit.
-  LineInfo? get lineInfo;
+  LineInfo get lineInfo;
 
   /// Return the script tag at the beginning of the compilation unit, or `null`
   /// if there is no script tag in this compilation unit.
@@ -1342,6 +1339,10 @@
   Token? get period;
 
   /// Return the name of the type defining the constructor.
+  NamedType get type;
+
+  /// Return the name of the type defining the constructor.
+  @Deprecated('Use type instead')
   NamedType get type2;
 }
 
@@ -1654,6 +1655,9 @@
   /// Return the right curly bracket.
   Token get rightBracket;
 
+  /// Return the optional semicolon after the last constant.
+  Token? get semicolon;
+
   /// Returns the type parameters for the enumeration, or `null` if the
   /// enumeration does not have any type parameters.
   TypeParameterList? get typeParameters;
@@ -1780,6 +1784,10 @@
   Token get extendsKeyword;
 
   /// Return the name of the class that is being extended.
+  NamedType get superclass;
+
+  /// Return the name of the class that is being extended.
+  @Deprecated('Use superclass instead')
   NamedType get superclass2;
 }
 
@@ -2677,6 +2685,10 @@
   Token get implementsKeyword;
 
   /// Return the list of the interfaces that are being implemented.
+  NodeList<NamedType> get interfaces;
+
+  /// Return the list of the interfaces that are being implemented.
+  @Deprecated('Use interfaces instead')
   NodeList<NamedType> get interfaces2;
 }
 
@@ -3529,6 +3541,10 @@
   Token get onKeyword;
 
   /// Return the list of the classes are superclass constraints for the mixin.
+  NodeList<NamedType> get superclassConstraints;
+
+  /// Return the list of the classes are superclass constraints for the mixin.
+  @Deprecated('Use superclassConstraints instead')
   NodeList<NamedType> get superclassConstraints2;
 }
 
@@ -4612,6 +4628,10 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class WithClause implements AstNode {
   /// Return the names of the mixins that were specified.
+  NodeList<NamedType> get mixinTypes;
+
+  /// Return the names of the mixins that were specified.
+  @Deprecated('Use mixinTypes instead')
   NodeList<NamedType> get mixinTypes2;
 
   /// Return the token representing the 'with' keyword.
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index 9cb8248..682228e 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -7,6 +7,7 @@
 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/generated/utilities_dart.dart';
 
 /// A collection of factory methods which may be used to create concrete
@@ -119,16 +120,18 @@
   /// [comment] and [metadata] can be `null` if the class does not have the
   /// corresponding attribute. The [abstractKeyword] can be `null` if the class
   /// is not abstract. The [macroKeyword] can be `null` if the class is not a
-  /// macro class. The [typeParameters] can be `null` if the class does not
-  /// have any type parameters. Any or all of the [extendsClause], [withClause],
-  /// and [implementsClause] can be `null` if the class does not have the
-  /// corresponding clause. The list of [members] can be `null` if the class
-  /// does not have any members.
+  /// macro class. The [augmentKeyword] can be `null` if the class is not an
+  /// augmentation class. The [typeParameters] can be `null` if the class does
+  /// not have any type parameters. Any or all of the [extendsClause],
+  /// [withClause], and [implementsClause] can be `null` if the class does not
+  /// have the corresponding clause. The list of [members] can be `null` if the
+  /// class does not have any members.
   ClassDeclaration classDeclaration(
       Comment? comment,
       List<Annotation>? metadata,
       Token? abstractKeyword,
       Token? macroKeyword,
+      Token? augmentKeyword,
       Token classKeyword,
       SimpleIdentifier name,
       TypeParameterList? typeParameters,
@@ -144,7 +147,8 @@
   /// corresponding attribute. The [typeParameters] can be `null` if the class
   /// does not have any type parameters. The [abstractKeyword] can be `null` if
   /// the class is not abstract. The [macroKeyword] can be `null` if the class
-  /// is not a macro class. The [implementsClause] can be `null` if the
+  /// is not a macro class. The [augmentKeyword] can be `null` if the class is
+  /// not an augmentation class.  The [implementsClause] can be `null` if the
   /// class does not implement any interfaces.
   ClassTypeAlias classTypeAlias(
       Comment? comment,
@@ -155,6 +159,7 @@
       Token equals,
       Token? abstractKeyword,
       Token? macroKeyword,
+      Token? augmentKeyword,
       NamedType superclass,
       WithClause withClause,
       ImplementsClause? implementsClause,
@@ -171,13 +176,15 @@
   /// `null` (or omitted) if there are no directives in the compilation unit.
   /// The list of `declarations` can be `null` (or omitted) if there are no
   /// declarations in the compilation unit.
-  CompilationUnit compilationUnit(
-      {required Token beginToken,
-      ScriptTag? scriptTag,
-      List<Directive>? directives,
-      List<CompilationUnitMember>? declarations,
-      required Token endToken,
-      required FeatureSet featureSet});
+  CompilationUnit compilationUnit({
+    required Token beginToken,
+    ScriptTag? scriptTag,
+    List<Directive>? directives,
+    List<CompilationUnitMember>? declarations,
+    required Token endToken,
+    required FeatureSet featureSet,
+    LineInfo? lineInfo,
+  });
 
   /// Returns a newly created conditional expression.
   ConditionalExpression conditionalExpression(
@@ -329,6 +336,7 @@
     required ImplementsClause? implementsClause,
     required Token leftBracket,
     required List<EnumConstantDeclaration> constants,
+    required Token? semicolon,
     required List<ClassMember> members,
     required Token rightBracket,
   });
@@ -396,12 +404,14 @@
 
   /// Returns a newly created field declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the declaration does not have
-  /// the corresponding attribute. The [staticKeyword] can be `null` if the
-  /// field is not a static field.
+  /// the corresponding attribute. The [abstractKeyword], [augmentKeyword],
+  /// [covariantKeyword], [externalKeyword] and [staticKeyword] can be `null` if
+  /// the field does not have the corresponding modifier.
   FieldDeclaration fieldDeclaration2(
       {Comment? comment,
       List<Annotation>? metadata,
       Token? abstractKeyword,
+      Token? augmentKeyword,
       Token? covariantKeyword,
       Token? externalKeyword,
       Token? staticKeyword,
@@ -489,13 +499,15 @@
 
   /// Returns a newly created function declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the function does not have the
-  /// corresponding attribute. The [externalKeyword] can be `null` if the
-  /// function is not an external function. The [returnType] can be `null` if no
-  /// return type was specified. The [propertyKeyword] can be `null` if the
-  /// function is neither a getter or a setter.
+  /// corresponding attribute. The [augmentKeyword] can be `null` if the
+  /// function is not a function augmentation. The [externalKeyword] can be
+  /// `null` if the function is not an external function. The [returnType] can
+  /// be `null` if no return type was specified. The [propertyKeyword] can be
+  /// `null` if the function is neither a getter or a setter.
   FunctionDeclaration functionDeclaration(
       Comment? comment,
       List<Annotation>? metadata,
+      Token? augmentKeyword,
       Token? externalKeyword,
       TypeAnnotation? returnType,
       Token? propertyKeyword,
@@ -617,8 +629,8 @@
     required List<DartType> typeArgumentTypes,
   });
 
-  /// Returns a newly created import directive. Either or both of the
-  /// [comment] and [metadata] can be `null` if the function does not have the
+  /// Returns a newly created import directive. Either or both of the [comment]
+  /// and [metadata] can be `null` if the function does not have the
   /// corresponding attribute. The [deferredKeyword] can be `null` if the import
   /// is not deferred. The [asKeyword] and [prefix] can be `null` if the import
   /// does not specify a prefix. The list of [combinators] can be `null` if
@@ -737,6 +749,7 @@
   MixinDeclaration mixinDeclaration(
       Comment? comment,
       List<Annotation>? metadata,
+      Token? augmentKeyword,
       Token mixinKeyword,
       SimpleIdentifier name,
       TypeParameterList? typeParameters,
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 400e918..e0478a0 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -104,6 +104,10 @@
   /// <i>abstract</i> is different from <i>has unimplemented members</i>.
   bool get isAbstract;
 
+  /// Return `true` if this class represents the class 'Enum' defined in the
+  /// dart:core library.
+  bool get isDartCoreEnum;
+
   /// Return `true` if this class represents the class 'Object' defined in the
   /// dart:core library.
   bool get isDartCoreObject;
@@ -468,6 +472,9 @@
   /// Return `true` if this constructor represents a factory constructor.
   bool get isFactory;
 
+  /// Return `true` if this constructor represents a generative constructor.
+  bool get isGenerative;
+
   @override
   String get name;
 
@@ -1145,6 +1152,11 @@
   /// Return a list containing all of the methods declared in this extension.
   List<MethodElement> get methods;
 
+  /// Return the element representing the field with the given [name] that is
+  /// declared in this extension, or `null` if this extension does not declare a
+  /// field with the given name.
+  FieldElement? getField(String name);
+
   /// Return the element representing the getter with the given [name] that is
   /// declared in this extension, or `null` if this extension does not declare a
   /// getter with the given name.
diff --git a/pkg/analyzer/lib/dart/element/type.dart b/pkg/analyzer/lib/dart/element/type.dart
index e3f102e..2f479bd 100644
--- a/pkg/analyzer/lib/dart/element/type.dart
+++ b/pkg/analyzer/lib/dart/element/type.dart
@@ -69,6 +69,10 @@
   /// dart:core library.
   bool get isDartCoreDouble;
 
+  /// Return `true` if this type represents the type 'Enum' defined in the
+  /// dart:core library.
+  bool get isDartCoreEnum;
+
   /// Return `true` if this type represents the type 'Function' defined in the
   /// dart:core library.
   bool get isDartCoreFunction;
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 3555ef1..1e78252 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -94,6 +94,7 @@
   CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER,
   CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER,
   CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER,
+  CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE,
   CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD,
   CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER,
@@ -104,8 +105,10 @@
   CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD,
   CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS,
+  CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_ENUM,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_EXTENSION,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS,
+  CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN,
   CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN,
@@ -159,6 +162,11 @@
   CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT,
   CompileTimeErrorCode.DUPLICATE_PART,
   CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING,
+  CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR,
+  CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED,
+  CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE,
+  CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER,
+  CompileTimeErrorCode.ENUM_WITH_NAME_VALUES,
   CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET,
   CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP,
   CompileTimeErrorCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS,
@@ -208,6 +216,11 @@
   CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY,
   CompileTimeErrorCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE,
   CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE,
+  CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION,
+  CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE,
+  CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE,
+  CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION,
+  CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE,
   CompileTimeErrorCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE,
   CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS,
   CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
@@ -216,10 +229,7 @@
   CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS,
   CompileTimeErrorCode.IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER,
   CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER,
-  CompileTimeErrorCode
-      .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT,
-  CompileTimeErrorCode
-      .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS,
+  CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS,
   CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY,
   CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY,
   CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES,
@@ -258,6 +268,7 @@
   CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR,
   CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
   CompileTimeErrorCode.INVALID_OVERRIDE,
+  CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
   CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS,
   CompileTimeErrorCode.INVALID_SUPER_FORMAL_PARAMETER_LOCATION,
   CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST,
@@ -323,6 +334,7 @@
   CompileTimeErrorCode.NON_BOOL_EXPRESSION,
   CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION,
   CompileTimeErrorCode.NON_BOOL_OPERAND,
+  CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR,
   CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT,
   CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR,
   CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION,
@@ -337,6 +349,7 @@
   CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE,
   CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
   CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT,
+  CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM,
   CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR,
   CompileTimeErrorCode.NON_GENERATIVE_IMPLICIT_CONSTRUCTOR,
   CompileTimeErrorCode.NON_SYNC_FACTORY,
@@ -408,6 +421,7 @@
   CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED,
   CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED,
   CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL,
+  CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR,
   CompileTimeErrorCode.SUPER_IN_EXTENSION,
   CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT,
   CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
@@ -439,6 +453,8 @@
   CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER,
   CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT,
   CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT,
+  CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED,
+  CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED,
   CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER,
   CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD,
   CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
@@ -466,6 +482,7 @@
   CompileTimeErrorCode.URI_WITH_INTERPOLATION,
   CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION,
   CompileTimeErrorCode.USE_OF_VOID_RESULT,
+  CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM,
   CompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
   CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE,
   CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR,
@@ -474,6 +491,7 @@
   CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS,
   CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION,
   CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
+  CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM,
   CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION,
   CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION,
   CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD,
@@ -717,6 +735,7 @@
   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,
@@ -823,6 +842,7 @@
   ParserErrorCode.MIXED_PARAMETER_GROUPS,
   ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
   ParserErrorCode.MODIFIER_OUT_OF_ORDER,
+  ParserErrorCode.MULTIPLE_CLAUSES,
   ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES,
   ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES,
   ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES,
@@ -846,6 +866,7 @@
   ParserErrorCode.NON_USER_DEFINABLE_OPERATOR,
   ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS,
   ParserErrorCode.NULL_AWARE_CASCADE_OUT_OF_ORDER,
+  ParserErrorCode.OUT_OF_ORDER_CLAUSES,
   ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT,
   ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP,
   ParserErrorCode.PREFIX_AFTER_COMBINATOR,
@@ -869,6 +890,7 @@
   ParserErrorCode.TYPEDEF_IN_CLASS,
   ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP,
   ParserErrorCode.UNEXPECTED_TOKEN,
+  ParserErrorCode.UNEXPECTED_TOKENS,
   ParserErrorCode.VAR_AND_TYPE,
   ParserErrorCode.VAR_AS_TYPE_NAME,
   ParserErrorCode.VAR_CLASS,
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
index 7690c44..cbe95e2 100644
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
+++ b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 
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 be9069c..bd2a210 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([]);
+  var dataStore = SummaryDataStore.tmp();
   dataStore.addBundle('', sdkBundle);
 
   var logger = PerformanceLog(null);
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 103c1a6..2f3fd34 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
@@ -14,7 +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:cli_util/cli_util.dart';
+import 'package:analyzer/src/util/sdk.dart';
 
 /// An implementation of [AnalysisContextCollection].
 class AnalysisContextCollectionImpl implements AnalysisContextCollection {
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index a9c0df3..c999006 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -27,8 +27,8 @@
 import 'package:analyzer/src/summary/summary_sdk.dart';
 import 'package:analyzer/src/summary2/package_bundle_format.dart';
 import 'package:analyzer/src/task/options.dart';
+import 'package:analyzer/src/util/sdk.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
-import 'package:cli_util/cli_util.dart';
 
 /// An implementation of a context builder.
 class ContextBuilderImpl implements ContextBuilder {
@@ -72,7 +72,12 @@
 
     SummaryDataStore? summaryData;
     if (librarySummaryPaths != null) {
-      summaryData = SummaryDataStore(librarySummaryPaths);
+      summaryData = SummaryDataStore.tmp();
+      for (var summaryPath in librarySummaryPaths) {
+        var bytes = resourceProvider.getFile(summaryPath).readAsBytesSync();
+        var bundle = PackageBundleReader(bytes);
+        summaryData.addBundle(summaryPath, bundle);
+      }
     }
 
     var workspace = contextRoot.workspace;
diff --git a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
index c308535..d4d2ed2 100644
--- a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
@@ -31,6 +31,12 @@
       if (member is ClassDeclaration) {
         member.members.forEach(appendClassMemberName);
       }
+      if (member is EnumDeclaration) {
+        for (var constant in member.constants) {
+          appendName(names.classMemberNames, constant.name);
+        }
+        member.members.forEach(appendClassMemberName);
+      }
       if (member is MixinDeclaration) {
         member.members.forEach(appendClassMemberName);
       }
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 d65f695..b8a21dc 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
@@ -173,7 +173,7 @@
 
     NamedType? enclosingSuperClass;
     if (node is ClassDeclaration) {
-      enclosingSuperClass = node.extendsClause?.superclass2;
+      enclosingSuperClass = node.extendsClause?.superclass;
     }
 
     enclosingClassNameSignature =
@@ -290,7 +290,7 @@
     var api = referenceCollector.collect(
       apiTokenSignature,
       typeParameters: node.typeParameters,
-      superClass: node.superclass2,
+      superClass: node.superclass,
       withClause: node.withClause,
       implementsClause: node.implementsClause,
     );
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
index b9b7403..706248e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
@@ -88,11 +88,11 @@
     _visitTypeParameterList(typeParameters2);
 
     // Parts of classes.
-    _visitTypeAnnotation(extendsClause?.superclass2);
+    _visitTypeAnnotation(extendsClause?.superclass);
     _visitTypeAnnotation(superClass);
-    _visitTypeAnnotations(withClause?.mixinTypes2);
-    _visitTypeAnnotations(onClause?.superclassConstraints2);
-    _visitTypeAnnotations(implementsClause?.interfaces2);
+    _visitTypeAnnotations(withClause?.mixinTypes);
+    _visitTypeAnnotations(onClause?.superclassConstraints);
+    _visitTypeAnnotations(implementsClause?.interfaces);
 
     // Parts of executables.
     _visitFormalParameterList(formalParameters);
@@ -305,7 +305,7 @@
   void _visitConstructorName(ConstructorName? node) {
     if (node == null) return;
 
-    _visitConstructor(node.type2, node.name);
+    _visitConstructor(node.type, node.name);
   }
 
   void _visitExpression(Expression? node, {bool get = true, bool set = false}) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 165e57f..84644e4 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -82,7 +82,7 @@
 /// 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 = 201;
+  static const int DATA_VERSION = 209;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
@@ -268,37 +268,6 @@
     _search = Search(this);
   }
 
-  /// Create a new instance of [AnalysisDriver].
-  ///
-  /// The given [SourceFactory] is cloned to ensure that it does not contain a
-  /// reference to a [AnalysisContext] in which it could have been used.
-  @Deprecated('Use the unnamed constructor instead')
-  AnalysisDriver.tmp1({
-    required AnalysisDriverScheduler scheduler,
-    required PerformanceLog logger,
-    required ResourceProvider resourceProvider,
-    required ByteStore byteStore,
-    required SourceFactory sourceFactory,
-    required AnalysisOptionsImpl analysisOptions,
-    required Packages packages,
-    FileContentCache? fileContentCache,
-    bool enableIndex = false,
-    SummaryDataStore? externalSummaries,
-    bool retainDataForTesting = false,
-  }) : this(
-          scheduler: scheduler,
-          logger: logger,
-          resourceProvider: resourceProvider,
-          byteStore: byteStore,
-          sourceFactory: sourceFactory,
-          analysisOptions: analysisOptions,
-          packages: packages,
-          fileContentCache: fileContentCache,
-          enableIndex: enableIndex,
-          externalSummaries: externalSummaries,
-          retainDataForTesting: retainDataForTesting,
-        );
-
   /// Return the set of files explicitly added to analysis using [addFile].
   Set<String> get addedFiles => _fileTracker.addedFiles;
 
@@ -2152,7 +2121,11 @@
 
   FileTracker get fileTracker => driver._fileTracker;
 
-  LibraryContext? get libraryContext => driver._libraryContext;
+  Set<String> get loadedLibraryUriSet {
+    var elementFactory = driver.libraryContext.elementFactory;
+    var libraryReferences = elementFactory.rootReference.children;
+    return libraryReferences.map((e) => e.name).toSet();
+  }
 
   Map<String, ResolvedUnitResult> get priorityResults {
     return driver._priorityResults;
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index ee40393..ca06838 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -147,7 +147,7 @@
     isExpired: IsExpired.enhanced_enums,
     documentation: 'Enhanced Enums',
     experimentalReleaseVersion: null,
-    releaseVersion: null,
+    releaseVersion: Version.parse('2.17.0'),
   );
 
   static final extension_methods = ExperimentalFeature(
@@ -198,7 +198,7 @@
     isExpired: IsExpired.named_arguments_anywhere,
     documentation: 'Named Arguments Anywhere',
     experimentalReleaseVersion: null,
-    releaseVersion: null,
+    releaseVersion: Version.parse('2.17.0'),
   );
 
   static final non_nullable = ExperimentalFeature(
@@ -248,7 +248,7 @@
     isExpired: IsExpired.super_parameters,
     documentation: 'Super-Initializer Parameters',
     experimentalReleaseVersion: null,
-    releaseVersion: null,
+    releaseVersion: Version.parse('2.17.0'),
   );
 
   static final test_experiment = ExperimentalFeature(
@@ -309,7 +309,7 @@
   static const bool control_flow_collections = true;
 
   /// Default state of the experiment "enhanced-enums"
-  static const bool enhanced_enums = false;
+  static const bool enhanced_enums = true;
 
   /// Default state of the experiment "extension-methods"
   static const bool extension_methods = true;
@@ -324,7 +324,7 @@
   static const bool macros = false;
 
   /// Default state of the experiment "named-arguments-anywhere"
-  static const bool named_arguments_anywhere = false;
+  static const bool named_arguments_anywhere = true;
 
   /// Default state of the experiment "non-nullable"
   static const bool non_nullable = true;
@@ -339,7 +339,7 @@
   static const bool spread_collections = true;
 
   /// Default state of the experiment "super-parameters"
-  static const bool super_parameters = false;
+  static const bool super_parameters = true;
 
   /// Default state of the experiment "test-experiment"
   static const bool test_experiment = false;
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 2c3364c..2e1c323 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -550,11 +550,11 @@
       source,
       errorListener,
       featureSet: scanner.featureSet,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = true;
 
     var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = lineInfo;
     unit.languageVersion = LibraryLanguageVersion(
       package: packageLanguageVersion,
       override: scanner.overrideVersion,
@@ -636,7 +636,7 @@
       hasPartOfDirective: hasPartOfDirective,
       imports: imports,
       informativeBytes: writeUnitInformative(unit),
-      lineStarts: Uint32List.fromList(unit.lineInfo!.lineStarts),
+      lineStarts: Uint32List.fromList(unit.lineInfo.lineStarts),
       partOfName: null,
       partOfUri: null,
       parts: parts,
@@ -977,14 +977,18 @@
 /// expensive to work with, if we do this thousand times.
 class FileUriProperties {
   static const int _isDart = 1 << 0;
-  static const int _isSrc = 1 << 1;
+  static const int _isDartInternal = 1 << 1;
+  static const int _isSrc = 1 << 2;
 
   final int _flags;
   final String? packageName;
 
   factory FileUriProperties(Uri uri) {
     if (uri.isScheme('dart')) {
-      return const FileUriProperties._dart();
+      var dartName = uri.pathSegments.firstOrNull;
+      return FileUriProperties._dart(
+        isInternal: dartName != null && dartName.startsWith('_'),
+      );
     } else if (uri.isScheme('package')) {
       var segments = uri.pathSegments;
       if (segments.length >= 2) {
@@ -997,8 +1001,9 @@
     return const FileUriProperties._unknown();
   }
 
-  const FileUriProperties._dart()
-      : _flags = _isDart,
+  const FileUriProperties._dart({
+    required bool isInternal,
+  })  : _flags = _isDart | (isInternal ? _isDartInternal : 0),
         packageName = null;
 
   FileUriProperties._package({
@@ -1013,5 +1018,7 @@
 
   bool get isDart => (_flags & _isDart) != 0;
 
+  bool get isDartInternal => (_flags & _isDartInternal) != 0;
+
   bool get isSrc => (_flags & _isSrc) != 0;
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart b/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart
index 828d7ad..5396bc0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart
@@ -23,7 +23,13 @@
 
 class _AnyFilter implements FileStateFilter {
   @override
-  bool shouldInclude(FileState file) => true;
+  bool shouldInclude(FileState file) {
+    var uri = file.uriProperties;
+    if (uri.isDart) {
+      return !uri.isDartInternal;
+    }
+    return true;
+  }
 }
 
 class _PubFilter implements FileStateFilter {
@@ -66,7 +72,7 @@
   bool shouldInclude(FileState file) {
     var uri = file.uriProperties;
     if (uri.isDart) {
-      return true;
+      return !uri.isDartInternal;
     }
 
     // Normally only package URIs are available.
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index f9aebb6..74c3887 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -634,13 +634,55 @@
       offset = node.period!.offset;
       length = node.name!.end - offset;
     } else {
-      offset = node.type2.end;
+      offset = node.type.end;
       length = 0;
     }
 
     recordRelationOffset(element, kind, offset, length, true);
 
-    node.type2.accept(this);
+    node.type.accept(this);
+  }
+
+  @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    var constructorElement = node.constructorElement;
+    if (constructorElement != null) {
+      int offset;
+      int length;
+      var constructorSelector = node.arguments?.constructorSelector;
+      if (constructorSelector != null) {
+        offset = constructorSelector.period.offset;
+        length = constructorSelector.name.end - offset;
+      } else {
+        offset = node.name.end;
+        length = 0;
+      }
+      recordRelationOffset(
+        constructorElement,
+        node.arguments == null
+            ? IndexRelationKind.IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS
+            : IndexRelationKind.IS_INVOKED_BY,
+        offset,
+        length,
+        true,
+      );
+    }
+
+    super.visitEnumConstantDeclaration(node);
+  }
+
+  @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    _addSubtype(
+      node.name.name,
+      withClause: node.withClause,
+      implementsClause: node.implementsClause,
+      memberNodes: node.members,
+    );
+
+    var declaredElement = node.declaredElement!;
+    recordIsAncestorOf(declaredElement);
+    super.visitEnumDeclaration(node);
   }
 
   @override
@@ -662,7 +704,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    recordSuperType(node.superclass2, IndexRelationKind.IS_EXTENDED_BY);
+    recordSuperType(node.superclass, IndexRelationKind.IS_EXTENDED_BY);
   }
 
   @override
@@ -681,7 +723,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    for (NamedType namedType in node.interfaces2) {
+    for (NamedType namedType in node.interfaces) {
       recordSuperType(namedType, IndexRelationKind.IS_IMPLEMENTED_BY);
     }
   }
@@ -735,7 +777,7 @@
   @override
   void visitNamedType(NamedType node) {
     AstNode parent = node.parent!;
-    if (parent is ClassTypeAlias && parent.superclass2 == node) {
+    if (parent is ClassTypeAlias && parent.superclass == node) {
       recordSuperType(node, IndexRelationKind.IS_EXTENDED_BY);
     } else {
       super.visitNamedType(node);
@@ -744,7 +786,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (NamedType namedType in node.superclassConstraints2) {
+    for (NamedType namedType in node.superclassConstraints) {
       recordSuperType(namedType, IndexRelationKind.IS_IMPLEMENTED_BY);
     }
   }
@@ -865,7 +907,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (NamedType namedType in node.mixinTypes2) {
+    for (NamedType namedType in node.mixinTypes) {
       recordSuperType(namedType, IndexRelationKind.IS_MIXED_IN_BY);
     }
   }
@@ -897,9 +939,9 @@
     }
 
     addSupertype(superclass);
-    withClause?.mixinTypes2.forEach(addSupertype);
-    onClause?.superclassConstraints2.forEach(addSupertype);
-    implementsClause?.interfaces2.forEach(addSupertype);
+    withClause?.mixinTypes.forEach(addSupertype);
+    onClause?.superclassConstraints.forEach(addSupertype);
+    implementsClause?.interfaces.forEach(addSupertype);
 
     void addMemberName(SimpleIdentifier identifier) {
       String name = identifier.name;
@@ -927,7 +969,7 @@
   /// Record the given class as a subclass of its direct superclasses.
   void _addSubtypeForClassDeclaration(ClassDeclaration node) {
     _addSubtype(node.name.name,
-        superclass: node.extendsClause?.superclass2,
+        superclass: node.extendsClause?.superclass,
         withClause: node.withClause,
         implementsClause: node.implementsClause,
         memberNodes: node.members);
@@ -936,7 +978,7 @@
   /// Record the given class as a subclass of its direct superclasses.
   void _addSubtypeForClassTypeAlis(ClassTypeAlias node) {
     _addSubtype(node.name.name,
-        superclass: node.superclass2,
+        superclass: node.superclass,
         withClause: node.withClause,
         implementsClause: node.implementsClause,
         memberNodes: const []);
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 347e551..2322191 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -565,7 +565,7 @@
     String content = file.content;
     var unit = file.parse(errorListener);
 
-    _fileToLineInfo[file] = unit.lineInfo!;
+    _fileToLineInfo[file] = unit.lineInfo;
     _fileToIgnoreInfo[file] = IgnoreInfo.forDart(unit, content);
 
     return unit;
@@ -956,8 +956,16 @@
         return true;
       }
 
-      // We have a contributor that looks at the type, but it is syntactic.
       if (parent is FormalParameter && parent.identifier == node) {
+        // We use elements to access fields.
+        if (parent is FieldFormalParameter) {
+          return false;
+        }
+        // We use elements to access the enclosing constructor.
+        if (parent is SuperFormalParameter) {
+          return false;
+        }
+        // We have a contributor that looks at the type, but it is syntactic.
         return true;
       }
 
@@ -972,6 +980,12 @@
       // The name of a NamedType does not provide any context.
       // So, we don't need to resolve anything.
       if (parent is NamedType) {
+        // `{foo^ print(0);}` looks as `foo print; (0);`.
+        var parent3 = parent.parent?.parent;
+        if (parent3 is VariableDeclarationStatement &&
+            parent3.semicolon.isSynthetic) {
+          return false;
+        }
         return true;
       }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index c9ee80d..6ec80ea 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -39,7 +39,7 @@
   final LibraryContextTestView testView;
   final PerformanceLog logger;
   final ByteStore byteStore;
-  final SummaryDataStore store = SummaryDataStore([]);
+  final SummaryDataStore store = SummaryDataStore.tmp();
 
   late final AnalysisContextImpl analysisContext;
   late LinkedElementFactory elementFactory;
diff --git a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
index 2d5e347..0cc56cb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
@@ -34,16 +34,19 @@
 
   for (CompilationUnitMember declaration in unit.declarations) {
     if (declaration is ClassDeclaration) {
-      _addSubtypedName(declaration.extendsClause?.superclass2);
-      _addSubtypedNames(declaration.withClause?.mixinTypes2);
-      _addSubtypedNames(declaration.implementsClause?.interfaces2);
+      _addSubtypedName(declaration.extendsClause?.superclass);
+      _addSubtypedNames(declaration.withClause?.mixinTypes);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
     } else if (declaration is ClassTypeAlias) {
-      _addSubtypedName(declaration.superclass2);
-      _addSubtypedNames(declaration.withClause.mixinTypes2);
-      _addSubtypedNames(declaration.implementsClause?.interfaces2);
+      _addSubtypedName(declaration.superclass);
+      _addSubtypedNames(declaration.withClause.mixinTypes);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
+    } else if (declaration is EnumDeclaration) {
+      _addSubtypedNames(declaration.withClause?.mixinTypes);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
     } else if (declaration is MixinDeclaration) {
-      _addSubtypedNames(declaration.onClause?.superclassConstraints2);
-      _addSubtypedNames(declaration.implementsClause?.interfaces2);
+      _addSubtypedNames(declaration.onClause?.superclassConstraints);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index e799e6d..d43672d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -136,7 +136,7 @@
   ParseStringResultImpl(this.content, this.unit, this.errors);
 
   @override
-  LineInfo get lineInfo => unit.lineInfo!;
+  LineInfo get lineInfo => unit.lineInfo;
 }
 
 class ResolvedForCompletionResultImpl {
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index cdd7c72..6df7913 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -154,6 +154,7 @@
         var unitResult = await _driver.getUnitElement(file);
         if (unitResult is UnitElementResult) {
           unitResult.element.classes.forEach(addElements);
+          unitResult.element.enums.forEach(addElements);
           unitResult.element.mixins.forEach(addElements);
         }
       }
@@ -534,6 +535,8 @@
     List<SearchResult> results = <SearchResult>[];
     await _addResults(results, element, searchedFiles, const {
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
+      IndexRelationKind.IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
+          SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
       IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF:
           SearchResultKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
@@ -787,6 +790,7 @@
   READ_WRITE,
   WRITE,
   INVOCATION,
+  INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
   REFERENCE,
   REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
 }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 5218135..b033bbe 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -15,7 +15,9 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/to_source_visitor.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/dart/resolver/typed_literal_resolver.dart';
 import 'package:analyzer/src/fasta/token_utils.dart' as util show findPrevious;
+import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart' show LineInfo, Source;
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
@@ -42,19 +44,25 @@
   Token get beginToken => _strings.beginToken!;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..addAll(_strings);
-
-  @override
   Token get endToken => _strings.endToken!;
 
   @override
   NodeListImpl<StringLiteral> get strings => _strings;
 
   @override
+  ChildEntities get _childEntities {
+    return ChildEntities()..addNodeList('strings', strings);
+  }
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAdjacentStrings(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitAdjacentStrings(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _strings.accept(visitor);
   }
@@ -124,17 +132,11 @@
     ]..sort(AstNode.LEXICAL_ORDER);
   }
 
-  /// Return a holder of child entities that subclasses can add to.
+  @override
   ChildEntities get _childEntities {
-    ChildEntities result = ChildEntities();
-    if (_commentIsBeforeAnnotations()) {
-      result
-        ..add(_comment)
-        ..addAll(_metadata);
-    } else {
-      result.addAll(sortedCommentAndAnnotations);
-    }
-    return result;
+    return ChildEntities()
+      ..addNode('documentationComment', documentationComment)
+      ..addNodeList('metadata', metadata);
   }
 
   @override
@@ -235,15 +237,6 @@
   Token get beginToken => atSign;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(atSign)
-    ..add(_name)
-    ..add(_typeArguments)
-    ..add(period)
-    ..add(_constructorName)
-    ..add(_arguments);
-
-  @override
   SimpleIdentifierImpl? get constructorName => _constructorName;
 
   set constructorName(SimpleIdentifier? name) {
@@ -294,6 +287,17 @@
   }
 
   @override
+  ChildEntities get _childEntities {
+    return ChildEntities()
+      ..addToken('atSign', atSign)
+      ..addNode('name', name)
+      ..addNode('typeArguments', typeArguments)
+      ..addToken('period', period)
+      ..addNode('constructorName', constructorName)
+      ..addNode('arguments', arguments);
+  }
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAnnotation(this);
 
   @override
@@ -347,13 +351,6 @@
   @override
   Token get beginToken => leftParenthesis;
 
-  @override
-  // TODO(paulberry): Add commas.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftParenthesis)
-    ..addAll(_arguments)
-    ..add(rightParenthesis);
-
   List<ParameterElement?>? get correspondingStaticParameters =>
       _correspondingStaticParameters;
 
@@ -369,6 +366,13 @@
   Token get endToken => rightParenthesis;
 
   @override
+  // TODO(paulberry): Add commas.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNodeList('arguments', arguments)
+    ..addToken('rightParenthesis', rightParenthesis);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitArgumentList(this);
 
   @override
@@ -427,12 +431,6 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_expression)
-    ..add(asOperator)
-    ..add(_type);
-
-  @override
   Token get endToken => _type.endToken;
 
   @override
@@ -453,9 +451,20 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('expression', expression)
+    ..addToken('asOperator', asOperator)
+    ..addNode('type', type);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAsExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitAsExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
     _type.accept(visitor);
@@ -498,15 +507,6 @@
   Token get beginToken => assertKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(assertKeyword)
-    ..add(leftParenthesis)
-    ..add(_condition)
-    ..add(comma)
-    ..add(_message)
-    ..add(rightParenthesis);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression condition) {
@@ -524,6 +524,15 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('assertKeyword', assertKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('condition', condition)
+    ..addToken('comma', comma)
+    ..addNode('message', message)
+    ..addToken('rightParenthesis', rightParenthesis);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAssertInitializer(this);
 
   @override
@@ -571,16 +580,6 @@
   Token get beginToken => assertKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(assertKeyword)
-    ..add(leftParenthesis)
-    ..add(_condition)
-    ..add(comma)
-    ..add(_message)
-    ..add(rightParenthesis)
-    ..add(semicolon);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression condition) {
@@ -598,6 +597,16 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('assertKeyword', assertKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('condition', condition)
+    ..addToken('comma', comma)
+    ..addNode('message', message)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAssertStatement(this);
 
   @override
@@ -642,12 +651,6 @@
   Token get beginToken => _leftHandSide.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_leftHandSide)
-    ..add(operator)
-    ..add(_rightHandSide);
-
-  @override
   Token get endToken => _rightHandSide.endToken;
 
   @override
@@ -668,6 +671,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('leftHandSide', leftHandSide)
+    ..addToken('operator', operator)
+    ..addNode('rightHandSide', rightHandSide);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => parent;
 
   /// If the AST structure has been resolved, and the function being invoked is
@@ -701,6 +710,11 @@
       visitor.visitAssignmentExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitAssignmentExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _leftHandSide.accept(visitor);
     _rightHandSide.accept(visitor);
@@ -722,6 +736,10 @@
   Map<String, Object>? _propertyMap;
 
   @override
+  Iterable<SyntacticEntity> get childEntities =>
+      _childEntities.syntacticEntities;
+
+  @override
   int get end => offset + length;
 
   @override
@@ -734,6 +752,11 @@
     return endToken.offset + endToken.length - beginToken.offset;
   }
 
+  /// Return properties (tokens and nodes) of this node, with names, in the
+  /// order in which these entities should normally appear, not necessary in
+  /// the order they really are (because of recovery).
+  Iterable<ChildEntity> get namedChildEntities => _childEntities.entities;
+
   @override
   int get offset {
     final beginToken = this.beginToken;
@@ -754,6 +777,8 @@
     return root;
   }
 
+  ChildEntities get _childEntities => ChildEntities();
+
   void detachFromParent() {
     _parent = null;
   }
@@ -843,11 +868,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(awaitKeyword)
-    ..add(_expression);
-
-  @override
   Token get endToken => _expression.endToken;
 
   @override
@@ -861,9 +881,19 @@
   Precedence get precedence => Precedence.prefix;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('awaitKeyword', awaitKeyword)
+    ..addNode('expression', expression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitAwaitExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitAwaitExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
   }
@@ -903,12 +933,6 @@
   Token get beginToken => _leftOperand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_leftOperand)
-    ..add(operator)
-    ..add(_rightOperand);
-
-  @override
   Token get endToken => _rightOperand.endToken;
 
   @override
@@ -929,9 +953,20 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('leftOperand', leftOperand)
+    ..addToken('operator', operator)
+    ..addNode('rightOperand', rightOperand);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBinaryExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitBinaryExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _leftOperand.accept(visitor);
     _rightOperand.accept(visitor);
@@ -981,12 +1016,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(keyword)
-    ..add(star)
-    ..add(_block);
-
-  @override
   Token get endToken => _block.endToken;
 
   @override
@@ -999,9 +1028,19 @@
   bool get isSynchronous => keyword?.lexeme != Keyword.ASYNC.lexeme;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('keyword', keyword)
+    ..addToken('star', star)
+    ..addNode('block', block);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBlockFunctionBody(this);
 
   @override
+  DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
+      resolver.visitBlockFunctionBody(this, imposedType: imposedType);
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _block.accept(visitor);
   }
@@ -1032,18 +1071,18 @@
   Token get beginToken => leftBracket;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftBracket)
-    ..addAll(_statements)
-    ..add(rightBracket);
-
-  @override
   Token get endToken => rightBracket;
 
   @override
   NodeListImpl<Statement> get statements => _statements;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('statements', statements)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBlock(this);
 
   @override
@@ -1072,18 +1111,24 @@
   Token get beginToken => literal;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(literal);
-
-  @override
   Token get endToken => literal;
 
   @override
   bool get isSynthetic => literal.isSynthetic;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('literal', literal);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBooleanLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitBooleanLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -1125,12 +1170,6 @@
   Token get beginToken => breakKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(breakKeyword)
-    ..add(_label)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -1141,6 +1180,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('breakKeyword', breakKeyword)
+    ..addNode('label', label)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitBreakStatement(this);
 
   @override
@@ -1186,11 +1231,6 @@
   NodeListImpl<Expression> get cascadeSections => _cascadeSections;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_target)
-    ..addAll(_cascadeSections);
-
-  @override
   Token get endToken => _cascadeSections.endToken!;
 
   @override
@@ -1209,12 +1249,22 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('target', target)
+    ..addNodeList('cascadeSections', cascadeSections);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => null;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitCascadeExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitCascadeExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _target.accept(visitor);
     _cascadeSections.accept(visitor);
@@ -1310,18 +1360,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(onKeyword)
-    ..add(_exceptionType)
-    ..add(catchKeyword)
-    ..add(leftParenthesis)
-    ..add(_exceptionParameter)
-    ..add(comma)
-    ..add(_stackTraceParameter)
-    ..add(rightParenthesis)
-    ..add(_body);
-
-  @override
   Token get endToken => _body.endToken;
 
   @override
@@ -1346,6 +1384,18 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('onKeyword', onKeyword)
+    ..addNode('exceptionType', exceptionType)
+    ..addToken('catchKeyword', catchKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('exceptionParameter', exceptionParameter)
+    ..addToken('comma', comma)
+    ..addNode('stackTraceParameter', stackTraceParameter)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitCatchClause(this);
 
   @override
@@ -1358,28 +1408,81 @@
 }
 
 /// Helper class to allow iteration of child entities of an AST node.
-class ChildEntities
-    with IterableMixin<SyntacticEntity>
-    implements Iterable<SyntacticEntity> {
+class ChildEntities {
   /// The list of child entities to be iterated over.
-  final List<SyntacticEntity> _entities = [];
+  final List<ChildEntity> entities = [];
 
-  @override
-  Iterator<SyntacticEntity> get iterator => _entities.iterator;
+  List<SyntacticEntity> get syntacticEntities {
+    var result = <SyntacticEntity>[];
+    for (var entity in entities) {
+      var entityValue = entity.value;
+      if (entityValue is SyntacticEntity) {
+        result.add(entityValue);
+      } else if (entityValue is List<Object>) {
+        for (var element in entityValue) {
+          if (element is SyntacticEntity) {
+            result.add(element);
+          }
+        }
+      }
+    }
 
-  /// Add an AST node or token as the next child entity, if it is not `null`.
-  void add(SyntacticEntity? entity) {
-    if (entity != null) {
-      _entities.add(entity);
+    var needsSorting = false;
+    int? lastOffset;
+    for (var entity in result) {
+      if (lastOffset != null && lastOffset > entity.offset) {
+        needsSorting = true;
+        break;
+      }
+      lastOffset = entity.offset;
+    }
+
+    if (needsSorting) {
+      result.sort((a, b) => a.offset - b.offset);
+    }
+
+    return result;
+  }
+
+  void addAll(ChildEntities other) {
+    entities.addAll(other.entities);
+  }
+
+  void addNode(String name, AstNode? value) {
+    if (value != null) {
+      entities.add(
+        ChildEntity(name, value),
+      );
     }
   }
 
-  /// Add the given items as the next child entities, if [items] is not `null`.
-  void addAll(Iterable<SyntacticEntity>? items) {
-    if (items != null) {
-      _entities.addAll(items);
+  void addNodeList(String name, List<AstNode> value) {
+    entities.add(
+      ChildEntity(name, value),
+    );
+  }
+
+  void addToken(String name, Token? value) {
+    if (value != null) {
+      entities.add(
+        ChildEntity(name, value),
+      );
     }
   }
+
+  void addTokenList(String name, List<Token> value) {
+    entities.add(
+      ChildEntity(name, value),
+    );
+  }
+}
+
+/// A named child of an [AstNode], usually a token, node, or a list of nodes.
+class ChildEntity {
+  final String name;
+  final Object value;
+
+  ChildEntity(this.name, this.value);
 }
 
 /// The declaration of a class.
@@ -1396,9 +1499,11 @@
   Token? abstractKeyword;
 
   /// The 'macro' keyword, or `null` if the keyword was absent.
-  @override
   Token? macroKeyword;
 
+  /// The 'augment' keyword, or `null` if the keyword was absent.
+  Token? augmentKeyword;
+
   /// The token representing the 'class' keyword.
   @override
   Token classKeyword;
@@ -1428,6 +1533,7 @@
       List<Annotation>? metadata,
       this.abstractKeyword,
       this.macroKeyword,
+      this.augmentKeyword,
       this.classKeyword,
       SimpleIdentifierImpl name,
       TypeParameterListImpl? typeParameters,
@@ -1444,21 +1550,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(abstractKeyword)
-    ..add(macroKeyword)
-    ..add(classKeyword)
-    ..add(_name)
-    ..add(_typeParameters)
-    ..add(_extendsClause)
-    ..add(_withClause)
-    ..add(_implementsClause)
-    ..add(_nativeClause)
-    ..add(leftBracket)
-    ..addAll(members)
-    ..add(rightBracket);
-
-  @override
   ClassElement? get declaredElement => _name.staticElement as ClassElement?;
 
   @override
@@ -1470,7 +1561,7 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return abstractKeyword ?? macroKeyword ?? classKeyword;
+    return abstractKeyword ?? macroKeyword ?? augmentKeyword ?? classKeyword;
   }
 
   @override
@@ -1491,6 +1582,22 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('abstractKeyword', abstractKeyword)
+    ..addToken('macroKeyword', macroKeyword)
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('classKeyword', classKeyword)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('extendsClause', extendsClause)
+    ..addNode('withClause', withClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addNode('nativeClause', nativeClause)
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('members', members)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitClassDeclaration(this);
 
   @override
@@ -1652,9 +1759,12 @@
 
   /// The token for the 'macro' keyword, or `null` if this is not defining a
   /// macro class.
-  @override
   Token? macroKeyword;
 
+  /// The token for the 'augment' keyword, or `null` if this is not defining an
+  /// augmentation class.
+  Token? augmentKeyword;
+
   /// The name of the superclass of the class being declared.
   NamedTypeImpl _superclass;
 
@@ -1680,6 +1790,7 @@
       this.equals,
       this.abstractKeyword,
       this.macroKeyword,
+      this.augmentKeyword,
       this._superclass,
       this._withClause,
       this._implementsClause,
@@ -1692,24 +1803,11 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(typedefKeyword)
-    ..add(_name)
-    ..add(_typeParameters)
-    ..add(equals)
-    ..add(abstractKeyword)
-    ..add(macroKeyword)
-    ..add(_superclass)
-    ..add(_withClause)
-    ..add(_implementsClause)
-    ..add(semicolon);
-
-  @override
   ClassElement? get declaredElement => _name.staticElement as ClassElement?;
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return abstractKeyword ?? macroKeyword ?? typedefKeyword;
+    return abstractKeyword ?? macroKeyword ?? augmentKeyword ?? typedefKeyword;
   }
 
   @override
@@ -1723,10 +1821,14 @@
   @override
   bool get isAbstract => abstractKeyword != null;
 
+  @override
+  NamedTypeImpl get superclass => _superclass;
+
   set superclass(NamedType superclass) {
     _superclass = _becomeParentOf(superclass as NamedTypeImpl);
   }
 
+  @Deprecated('Use superclass instead')
   @override
   NamedTypeImpl get superclass2 => _superclass;
 
@@ -1745,6 +1847,20 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('typedefKeyword', typedefKeyword)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addToken('equals', equals)
+    ..addToken('abstractKeyword', abstractKeyword)
+    ..addToken('macroKeyword', macroKeyword)
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addNode('superclass', superclass)
+    ..addNode('withClause', withClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitClassTypeAlias(this);
 
   @override
@@ -1759,7 +1875,12 @@
 }
 
 abstract class CollectionElementImpl extends AstNodeImpl
-    implements CollectionElement {}
+    implements CollectionElement {
+  /// Dispatches this collection element to the [resolver], with the given
+  /// [context] information.
+  void resolveElement(
+      ResolverVisitor resolver, CollectionLiteralContext? context);
+}
 
 /// A combinator associated with an import or export directive.
 ///
@@ -1820,10 +1941,6 @@
   Token get beginToken => tokens[0];
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..addAll(tokens);
-
-  @override
   Token get endToken => tokens[tokens.length - 1];
 
   @override
@@ -1839,6 +1956,10 @@
   NodeListImpl<CommentReference> get references => _references;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addTokenList('tokens', tokens);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitComment(this);
 
   @override
@@ -1892,11 +2013,6 @@
   Token get beginToken => newKeyword ?? _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(newKeyword)
-    ..add(_expression);
-
-  @override
   Token get endToken => _expression.endToken;
 
   @override
@@ -1916,6 +2032,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('newKeyword', newKeyword)
+    ..addNode('expression', expression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitCommentReference(this);
 
   @override
@@ -1994,7 +2115,7 @@
 
   /// The line information for this compilation unit.
   @override
-  LineInfo? lineInfo;
+  final LineInfo lineInfo;
 
   /// The language version information.
   LibraryLanguageVersion? languageVersion;
@@ -2013,26 +2134,14 @@
       List<Directive>? directives,
       List<CompilationUnitMember>? declarations,
       this.endToken,
-      this.featureSet) {
+      this.featureSet,
+      this.lineInfo) {
     _becomeParentOf(_scriptTag);
     _directives._initialize(this, directives);
     _declarations._initialize(this, declarations);
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities {
-    ChildEntities result = ChildEntities()..add(_scriptTag);
-    if (_directivesAreBeforeDeclarations) {
-      result
-        ..addAll(_directives)
-        ..addAll(_declarations);
-    } else {
-      result.addAll(sortedDirectivesAndDeclarations);
-    }
-    return result;
-  }
-
-  @override
   NodeListImpl<CompilationUnitMember> get declarations => _declarations;
 
   @override
@@ -2083,6 +2192,14 @@
     ]..sort(AstNode.LEXICAL_ORDER);
   }
 
+  @override
+  ChildEntities get _childEntities {
+    return ChildEntities()
+      ..addNode('scriptTag', scriptTag)
+      ..addNodeList('directives', directives)
+      ..addNodeList('declarations', declarations);
+  }
+
   /// Return `true` if all of the directives are lexically before any
   /// declarations.
   bool get _directivesAreBeforeDeclarations {
@@ -2183,14 +2300,6 @@
   Token get beginToken => _condition.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_condition)
-    ..add(question)
-    ..add(_thenExpression)
-    ..add(colon)
-    ..add(_elseExpression);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression expression) {
@@ -2218,10 +2327,23 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('condition', condition)
+    ..addToken('question', question)
+    ..addNode('thenExpression', thenExpression)
+    ..addToken('colon', colon)
+    ..addNode('elseExpression', elseExpression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitConditionalExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitConditionalExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _condition.accept(visitor);
     _thenExpression.accept(visitor);
@@ -2272,16 +2394,6 @@
   Token get beginToken => ifKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(ifKeyword)
-    ..add(leftParenthesis)
-    ..add(_name)
-    ..add(equalToken)
-    ..add(_value)
-    ..add(rightParenthesis)
-    ..add(_uri);
-
-  @override
   Token get endToken => _uri.endToken;
 
   @override
@@ -2306,6 +2418,16 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('ifKeyword', ifKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('name', name)
+    ..addToken('equalToken', equalToken)
+    ..addNode('value', value)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('uri', uri);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitConfiguration(this);
 
   @override
@@ -2450,20 +2572,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(externalKeyword)
-    ..add(constKeyword)
-    ..add(factoryKeyword)
-    ..add(_returnType)
-    ..add(period)
-    ..add(_name)
-    ..add(_parameters)
-    ..add(separator)
-    ..addAll(initializers)
-    ..add(_redirectedConstructor)
-    ..add(_body);
-
-  @override
   Token get endToken {
     return _body.endToken;
   }
@@ -2508,6 +2616,20 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('externalKeyword', externalKeyword)
+    ..addToken('constKeyword', constKeyword)
+    ..addToken('factoryKeyword', factoryKeyword)
+    ..addNode('returnType', returnType)
+    ..addToken('period', period)
+    ..addNode('name', name)
+    ..addNode('parameters', parameters)
+    ..addToken('separator', separator)
+    ..addNodeList('initializers', initializers)
+    ..addNode('redirectedConstructor', redirectedConstructor)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitConstructorDeclaration(this);
 
@@ -2566,14 +2688,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(thisKeyword)
-    ..add(period)
-    ..add(_fieldName)
-    ..add(equals)
-    ..add(_expression);
-
-  @override
   Token get endToken => _expression.endToken;
 
   @override
@@ -2591,6 +2705,14 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('thisKeyword', thisKeyword)
+    ..addToken('period', period)
+    ..addNode('fieldName', fieldName)
+    ..addToken('equals', equals)
+    ..addNode('expression', expression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitConstructorFieldInitializer(this);
 
@@ -2644,12 +2766,6 @@
   Token get beginToken => _type.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_type)
-    ..add(period)
-    ..add(_name);
-
-  @override
   Token get endToken {
     if (_name != null) {
       return _name!.endToken;
@@ -2664,14 +2780,24 @@
     _name = _becomeParentOf(name as SimpleIdentifierImpl?);
   }
 
+  @override
+  NamedTypeImpl get type => _type;
+
   set type(NamedType type) {
     _type = _becomeParentOf(type as NamedTypeImpl);
   }
 
+  @Deprecated('Use type instead')
   @override
   NamedTypeImpl get type2 => _type;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('type', type)
+    ..addToken('period', period)
+    ..addNode('name', name);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitConstructorName(this);
 
   @override
@@ -2699,10 +2825,6 @@
   Token get beginToken => constructorName.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(constructorName);
-
-  @override
   ConstructorNameImpl get constructorName => _constructorName;
 
   set constructorName(ConstructorNameImpl value) {
@@ -2716,10 +2838,19 @@
   Precedence get precedence => Precedence.postfix;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addNode('constructorName', constructorName);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitConstructorReference(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitConstructorReference(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     constructorName.accept(visitor);
   }
@@ -2744,12 +2875,12 @@
   Token get beginToken => period;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(period)
-    ..add(name);
+  Token get endToken => name.token;
 
   @override
-  Token get endToken => name.token;
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('period', period)
+    ..addNode('name', name);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) {
@@ -2795,12 +2926,6 @@
   Token get beginToken => continueKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(continueKeyword)
-    ..add(_label)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -2811,6 +2936,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('continueKeyword', continueKeyword)
+    ..addNode('label', label)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitContinueStatement(this);
 
   @override
@@ -2860,12 +2991,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_type)
-    ..add(_identifier);
-
-  @override
   LocalVariableElement? get declaredElement {
     return _identifier.staticElement as LocalVariableElement;
   }
@@ -2899,6 +3024,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('type', type)
+    ..addNode('identifier', identifier);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitDeclaredIdentifier(this);
 
   @override
@@ -2964,12 +3095,6 @@
   Token get beginToken => _parameter.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_parameter)
-    ..add(separator)
-    ..add(_defaultValue);
-
-  @override
   Token? get covariantKeyword => null;
 
   @override
@@ -3013,6 +3138,12 @@
   Token? get requiredKeyword => null;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('parameter', parameter)
+    ..addToken('separator', separator)
+    ..addNode('defaultValue', defaultValue);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitDefaultFormalParameter(this);
 
@@ -3106,16 +3237,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(doKeyword)
-    ..add(_body)
-    ..add(whileKeyword)
-    ..add(leftParenthesis)
-    ..add(_condition)
-    ..add(rightParenthesis)
-    ..add(semicolon);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression expression) {
@@ -3126,6 +3247,16 @@
   Token get endToken => semicolon;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('doKeyword', doKeyword)
+    ..addNode('body', body)
+    ..addToken('whileKeyword', whileKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('condition', condition)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitDoStatement(this);
 
   @override
@@ -3152,17 +3283,17 @@
   Token get beginToken => _components.beginToken!;
 
   @override
-  // TODO(paulberry): add "." tokens.
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..addAll(_components);
-
-  @override
   NodeListImpl<SimpleIdentifier> get components => _components;
 
   @override
   Token get endToken => _components.endToken!;
 
   @override
+  // TODO(paulberry): add "." tokens.
+  ChildEntities get _childEntities =>
+      ChildEntities()..addNodeList('components', components);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitDottedName(this);
 
   @override
@@ -3195,15 +3326,21 @@
   Token get beginToken => literal;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(literal);
-
-  @override
   Token get endToken => literal;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('literal', literal);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitDoubleLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitDoubleLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -3228,16 +3365,20 @@
   Token get beginToken => semicolon;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitEmptyFunctionBody(this);
 
   @override
+  DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
+      resolver.visitEmptyFunctionBody(this, imposedType: imposedType);
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // Empty function bodies have no children.
   }
@@ -3259,16 +3400,16 @@
   Token get beginToken => semicolon;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
   bool get isSynthetic => semicolon.isSynthetic;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitEmptyStatement(this);
 
   @override
@@ -3303,13 +3444,13 @@
       (typeArguments ?? constructorSelector ?? argumentList).beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(typeArguments)
-    ..add(constructorSelector)
-    ..add(argumentList);
+  Token get endToken => argumentList.endToken;
 
   @override
-  Token get endToken => argumentList.endToken;
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('typeArguments', typeArguments)
+    ..addNode('constructorSelector', constructorSelector)
+    ..addNode('argumentList', argumentList);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) {
@@ -3351,11 +3492,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(_name)
-    ..add(arguments);
-
-  @override
   FieldElement get declaredElement => _name.staticElement as FieldElement;
 
   @override
@@ -3372,6 +3508,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addNode('name', name)
+    ..addNode('arguments', arguments);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitEnumConstantDeclaration(this);
 
@@ -3414,6 +3555,9 @@
   /// The enumeration constants being declared.
   final NodeListImpl<EnumConstantDeclaration> _constants = NodeListImpl._();
 
+  @override
+  Token? semicolon;
+
   /// The members defined by the enum.
   final NodeListImpl<ClassMember> _members = NodeListImpl._();
 
@@ -3435,6 +3579,7 @@
       this._implementsClause,
       this.leftBracket,
       List<EnumConstantDeclaration> constants,
+      this.semicolon,
       List<ClassMember> members,
       this.rightBracket)
       : super(comment, metadata, name) {
@@ -3446,19 +3591,6 @@
   }
 
   @override
-  // TODO(brianwilkerson) Add commas?
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(enumKeyword)
-    ..add(_name)
-    ..add(_typeParameters)
-    ..add(_withClause)
-    ..add(_implementsClause)
-    ..add(leftBracket)
-    ..addAll(_constants)
-    ..addAll(_members)
-    ..add(rightBracket);
-
-  @override
   NodeListImpl<EnumConstantDeclaration> get constants => _constants;
 
   @override
@@ -3496,6 +3628,20 @@
   }
 
   @override
+  // TODO(brianwilkerson) Add commas?
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('enumKeyword', enumKeyword)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('withClause', withClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('constants', constants)
+    ..addToken('semicolon', semicolon)
+    ..addNodeList('members', members)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitEnumDeclaration(this);
 
   @override
@@ -3541,13 +3687,6 @@
             combinators, semicolon);
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_uri)
-    ..addAll(combinators)
-    ..add(semicolon);
-
-  @override
   ExportElement? get element => super.element as ExportElement?;
 
   @override
@@ -3556,6 +3695,13 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('uri', uri)
+    ..addNodeList('combinators', combinators)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitExportDirective(this);
 
   @override
@@ -3614,14 +3760,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(keyword)
-    ..add(star)
-    ..add(functionDefinition)
-    ..add(_expression)
-    ..add(semicolon);
-
-  @override
   Token get endToken {
     if (semicolon != null) {
       return semicolon!;
@@ -3646,10 +3784,22 @@
   bool get isSynchronous => keyword?.lexeme != Keyword.ASYNC.lexeme;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('keyword', keyword)
+    ..addToken('star', star)
+    ..addToken('functionDefinition', functionDefinition)
+    ..addNode('expression', expression)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitExpressionFunctionBody(this);
 
   @override
+  DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
+      resolver.visitExpressionFunctionBody(this, imposedType: imposedType);
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
   }
@@ -3680,6 +3830,8 @@
       var parent = child.parent;
       if (parent is ConstantContextForExpressionImpl) {
         return true;
+      } else if (parent is EnumConstantArguments) {
+        return true;
       } else if (parent is TypedLiteralImpl && parent.constKeyword != null) {
         // Inside an explicitly `const` list or map literal.
         return true;
@@ -3740,6 +3892,20 @@
 
   @override
   ExpressionImpl get unParenthesized => this;
+
+  @override
+  void resolveElement(
+      ResolverVisitor resolver, CollectionLiteralContext? context) {
+    resolver.analyzeExpression(this, context?.elementType);
+  }
+
+  /// Dispatches this expression to the [resolver], with the given [contextType]
+  /// information.
+  ///
+  /// Note: most code shouldn't call this method directly, but should instead
+  /// call [ResolverVisitor.analyzeExpression], which has some special logic for
+  /// handling dynamic contexts.
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType);
 }
 
 /// An expression used as a statement.
@@ -3765,11 +3931,6 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_expression)
-    ..add(semicolon);
-
-  @override
   Token get endToken {
     if (semicolon != null) {
       return semicolon!;
@@ -3789,6 +3950,11 @@
       _expression.isSynthetic && (semicolon == null || semicolon!.isSynthetic);
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('expression', expression)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitExpressionStatement(this);
 
   @override
@@ -3818,21 +3984,25 @@
   Token get beginToken => extendsKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(extendsKeyword)
-    ..add(_superclass);
+  Token get endToken => _superclass.endToken;
 
   @override
-  Token get endToken => _superclass.endToken;
+  NamedTypeImpl get superclass => _superclass;
 
   set superclass(NamedType name) {
     _superclass = _becomeParentOf(name as NamedTypeImpl);
   }
 
+  @Deprecated('Use superclass instead')
   @override
   NamedTypeImpl get superclass2 => _superclass;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('extendsKeyword', extendsKeyword)
+    ..addNode('superclass', superclass);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitExtendsClause(this);
 
   @override
@@ -3911,17 +4081,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(extensionKeyword)
-    ..add(name)
-    ..add(typeParameters)
-    ..add(onKeyword)
-    ..add(extendedType)
-    ..add(leftBracket)
-    ..addAll(members)
-    ..add(rightBracket);
-
-  @override
   ExtensionElement? get declaredElement => _declaredElement;
 
   /// Set the element declared by this declaration to the given [element].
@@ -3974,6 +4133,17 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('extensionKeyword', extensionKeyword)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addToken('onKeyword', onKeyword)
+    ..addNode('extendedType', extendedType)
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('members', members)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitExtensionDeclaration(this);
 
@@ -4029,12 +4199,6 @@
   Token get beginToken => _extensionName.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_extensionName)
-    ..add(_typeArguments)
-    ..add(_argumentList);
-
-  @override
   Token get endToken => _argumentList.endToken;
 
   @override
@@ -4067,11 +4231,22 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('extensionName', extensionName)
+    ..addNode('typeArguments', typeArguments)
+    ..addNode('argumentList', argumentList);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) {
     return visitor.visitExtensionOverride(this);
   }
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitExtensionOverride(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _extensionName.accept(visitor);
     _typeArguments?.accept(visitor);
@@ -4087,6 +4262,9 @@
   @override
   Token? abstractKeyword;
 
+  /// The 'augment' keyword, or `null` if the keyword was not used.
+  Token? augmentKeyword;
+
   /// The 'covariant' keyword, or `null` if the keyword was not used.
   @override
   Token? covariantKeyword;
@@ -4114,6 +4292,7 @@
       CommentImpl? comment,
       List<Annotation>? metadata,
       this.abstractKeyword,
+      this.augmentKeyword,
       this.covariantKeyword,
       this.externalKeyword,
       this.staticKeyword,
@@ -4124,12 +4303,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(staticKeyword)
-    ..add(_fieldList)
-    ..add(semicolon);
-
-  @override
   Element? get declaredElement => null;
 
   @override
@@ -4144,8 +4317,8 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return Token.lexicallyFirst(abstractKeyword, externalKeyword,
-            covariantKeyword, staticKeyword) ??
+    return Token.lexicallyFirst(abstractKeyword, augmentKeyword,
+            externalKeyword, covariantKeyword, staticKeyword) ??
         _fieldList.beginToken;
   }
 
@@ -4153,6 +4326,12 @@
   bool get isStatic => staticKeyword != null;
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('staticKeyword', staticKeyword)
+    ..addNode('fields', fields)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFieldDeclaration(this);
 
   @override
@@ -4243,15 +4422,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_type)
-    ..add(thisKeyword)
-    ..add(period)
-    ..add(identifier)
-    ..add(_parameters);
-
-  @override
   Token get endToken {
     return question ?? _parameters?.endToken ?? identifier.endToken;
   }
@@ -4287,6 +4457,15 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('type', type)
+    ..addToken('thisKeyword', thisKeyword)
+    ..addToken('period', period)
+    ..addNode('identifier', identifier)
+    ..addNode('parameters', parameters);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitFieldFormalParameter(this);
 
@@ -4319,11 +4498,6 @@
   Token get beginToken => inKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(inKeyword)
-    ..add(_iterable);
-
-  @override
   Token get endToken => _iterable.endToken;
 
   @override
@@ -4334,6 +4508,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('inKeyword', inKeyword)
+    ..addNode('iterable', iterable);
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _iterable.accept(visitor);
   }
@@ -4356,11 +4535,6 @@
   Token get beginToken => _loopVariable.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_loopVariable)
-    ..addAll(super.childEntities);
-
-  @override
   DeclaredIdentifierImpl get loopVariable => _loopVariable;
 
   set loopVariable(DeclaredIdentifier variable) {
@@ -4368,6 +4542,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('loopVariable', loopVariable)
+    ..addAll(super._childEntities);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitForEachPartsWithDeclaration(this);
 
@@ -4395,11 +4574,6 @@
   Token get beginToken => _identifier.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_identifier)
-    ..addAll(super.childEntities);
-
-  @override
   SimpleIdentifierImpl get identifier => _identifier;
 
   set identifier(SimpleIdentifier identifier) {
@@ -4407,6 +4581,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('identifier', identifier)
+    ..addAll(super._childEntities);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitForEachPartsWithIdentifier(this);
 
@@ -4453,15 +4632,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(awaitKeyword)
-    ..add(forKeyword)
-    ..add(leftParenthesis)
-    ..add(_forLoopParts)
-    ..add(rightParenthesis)
-    ..add(_body);
-
-  @override
   Token get endToken => _body.endToken;
 
   @override
@@ -4472,9 +4642,24 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('awaitKeyword', awaitKeyword)
+    ..addToken('forKeyword', forKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('forLoopParts', forLoopParts)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitForElement(this);
 
   @override
+  void resolveElement(
+      ResolverVisitor resolver, CollectionLiteralContext? context) {
+    resolver.visitForElement(this, context: context);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _forLoopParts.accept(visitor);
     _body.accept(visitor);
@@ -4608,25 +4793,6 @@
   Token get beginToken => leftParenthesis;
 
   @override
-  Iterable<SyntacticEntity> get childEntities {
-    // TODO(paulberry): include commas.
-    ChildEntities result = ChildEntities()..add(leftParenthesis);
-    bool leftDelimiterNeeded = leftDelimiter != null;
-    int length = _parameters.length;
-    for (int i = 0; i < length; i++) {
-      FormalParameter parameter = _parameters[i];
-      if (leftDelimiterNeeded && leftDelimiter!.offset < parameter.offset) {
-        result.add(leftDelimiter);
-        leftDelimiterNeeded = false;
-      }
-      result.add(parameter);
-    }
-    return result
-      ..add(rightDelimiter)
-      ..add(rightParenthesis);
-  }
-
-  @override
   Token get endToken => rightParenthesis;
 
   @override
@@ -4643,6 +4809,25 @@
   NodeListImpl<FormalParameter> get parameters => _parameters;
 
   @override
+  ChildEntities get _childEntities {
+    // TODO(paulberry): include commas.
+    var result = ChildEntities()..addToken('leftParenthesis', leftParenthesis);
+    bool leftDelimiterNeeded = leftDelimiter != null;
+    int length = _parameters.length;
+    for (int i = 0; i < length; i++) {
+      FormalParameter parameter = _parameters[i];
+      if (leftDelimiterNeeded && leftDelimiter!.offset < parameter.offset) {
+        result..addToken('leftDelimiter', leftDelimiter);
+        leftDelimiterNeeded = false;
+      }
+      result..addNode('parameter', parameter);
+    }
+    return result
+      ..addToken('rightDelimiter', rightDelimiter)
+      ..addToken('rightParenthesis', rightParenthesis);
+  }
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFormalParameterList(this);
 
   @override
@@ -4679,13 +4864,6 @@
   Token get beginToken => leftSeparator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftSeparator)
-    ..add(_condition)
-    ..add(rightSeparator)
-    ..addAll(_updaters);
-
-  @override
   ExpressionImpl? get condition => _condition;
 
   set condition(Expression? expression) {
@@ -4699,6 +4877,13 @@
   NodeListImpl<Expression> get updaters => _updaters;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftSeparator', leftSeparator)
+    ..addNode('condition', condition)
+    ..addToken('rightSeparator', rightSeparator)
+    ..addNodeList('updaters', updaters);
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _condition?.accept(visitor);
     _updaters.accept(visitor);
@@ -4729,11 +4914,6 @@
   Token get beginToken => _variableList.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_variableList)
-    ..addAll(super.childEntities);
-
-  @override
   VariableDeclarationListImpl get variables => _variableList;
 
   set variables(VariableDeclarationList? variableList) {
@@ -4742,6 +4922,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('variables', variables)
+    ..addAll(super._childEntities);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitForPartsWithDeclarations(this);
 
@@ -4776,11 +4961,6 @@
   Token get beginToken => initialization?.beginToken ?? super.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_initialization)
-    ..addAll(super.childEntities);
-
-  @override
   ExpressionImpl? get initialization => _initialization;
 
   set initialization(Expression? initialization) {
@@ -4788,6 +4968,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('initialization', initialization)
+    ..addAll(super._childEntities);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitForPartsWithExpression(this);
 
@@ -4834,15 +5019,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(awaitKeyword)
-    ..add(forKeyword)
-    ..add(leftParenthesis)
-    ..add(_forLoopParts)
-    ..add(rightParenthesis)
-    ..add(_body);
-
-  @override
   Token get endToken => _body.endToken;
 
   @override
@@ -4853,6 +5029,15 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('awaitKeyword', awaitKeyword)
+    ..addToken('forKeyword', forKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('forLoopParts', forLoopParts)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitForStatement(this);
 
   @override
@@ -4911,6 +5096,12 @@
     }
     return localVariableInfo!.potentiallyMutatedInScope.contains(variable);
   }
+
+  /// Dispatch this function body to the resolver, imposing [imposedType] as the
+  /// return type context for `return` statements.
+  ///
+  /// Return value is the actual return type of the method.
+  DartType resolve(ResolverVisitor resolver, DartType? imposedType);
 }
 
 /// A top-level declaration.
@@ -4923,6 +5114,10 @@
 ///        [Type]? ('get' | 'set')? [SimpleIdentifier] [FormalParameterList]
 class FunctionDeclarationImpl extends NamedCompilationUnitMemberImpl
     implements FunctionDeclaration {
+  /// The token representing the 'augment' keyword, or `null` if this is not an
+  /// function augmentation.
+  Token? augmentKeyword;
+
   /// The token representing the 'external' keyword, or `null` if this is not an
   /// external function.
   @override
@@ -4948,6 +5143,7 @@
   FunctionDeclarationImpl(
       CommentImpl? comment,
       List<Annotation>? metadata,
+      this.augmentKeyword,
       this.externalKeyword,
       this._returnType,
       this.propertyKeyword,
@@ -4959,14 +5155,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(externalKeyword)
-    ..add(_returnType)
-    ..add(propertyKeyword)
-    ..add(_name)
-    ..add(_functionExpression);
-
-  @override
   ExecutableElement? get declaredElement =>
       _name.staticElement as ExecutableElement?;
 
@@ -4975,7 +5163,8 @@
 
   @override
   Token get firstTokenAfterCommentAndMetadata {
-    return externalKeyword ??
+    return augmentKeyword ??
+        externalKeyword ??
         _returnType?.beginToken ??
         propertyKeyword ??
         _name.beginToken;
@@ -5003,6 +5192,15 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('externalKeyword', externalKeyword)
+    ..addNode('returnType', returnType)
+    ..addToken('propertyKeyword', propertyKeyword)
+    ..addNode('name', name)
+    ..addNode('functionExpression', functionExpression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFunctionDeclaration(this);
 
   @override
@@ -5029,10 +5227,6 @@
   Token get beginToken => _functionDeclaration.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_functionDeclaration);
-
-  @override
   Token get endToken => _functionDeclaration.endToken;
 
   @override
@@ -5044,6 +5238,10 @@
   }
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addNode('functionDeclaration', functionDeclaration);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitFunctionDeclarationStatement(this);
 
@@ -5070,6 +5268,11 @@
   /// The body of the function.
   FunctionBodyImpl _body;
 
+  /// If resolution has been performed, this boolean indicates whether a
+  /// function type was supplied via context for this function expression.
+  /// `false` if resolution hasn't been performed yet.
+  bool wasFunctionTypeSupplied = false;
+
   @override
   ExecutableElement? declaredElement;
 
@@ -5098,12 +5301,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_typeParameters)
-    ..add(_parameters)
-    ..add(_body);
-
-  @override
   Token get endToken {
     return _body.endToken;
   }
@@ -5126,9 +5323,20 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('parameters', parameters)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFunctionExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitFunctionExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _typeParameters?.accept(visitor);
     _parameters?.accept(visitor);
@@ -5166,11 +5374,6 @@
   Token get beginToken => _function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_function)
-    ..add(_argumentList);
-
-  @override
   Token get endToken => _argumentList.endToken;
 
   @override
@@ -5184,6 +5387,11 @@
   Precedence get precedence => Precedence.postfix;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('function', function)
+    ..addNode('argumentList', argumentList);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => parent;
 
   @override
@@ -5191,6 +5399,11 @@
       visitor.visitFunctionExpressionInvocation(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitFunctionExpressionInvocation(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _function.accept(visitor);
     _typeArguments?.accept(visitor);
@@ -5222,11 +5435,6 @@
   Token get beginToken => function.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(function)
-    ..add(typeArguments);
-
-  @override
   Token get endToken => typeArguments?.endToken ?? function.endToken;
 
   @override
@@ -5248,9 +5456,19 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('function', function)
+    ..addNode('typeArguments', typeArguments);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFunctionReference(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitFunctionReference(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     function.accept(visitor);
     typeArguments?.accept(visitor);
@@ -5297,15 +5515,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(typedefKeyword)
-    ..add(_returnType)
-    ..add(_name)
-    ..add(_typeParameters)
-    ..add(_parameters)
-    ..add(semicolon);
-
-  @override
   TypeAliasElement? get declaredElement =>
       _name.staticElement as TypeAliasElement?;
 
@@ -5331,6 +5540,15 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('typedefKeyword', typedefKeyword)
+    ..addNode('returnType', returnType)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('parameters', parameters)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitFunctionTypeAlias(this);
 
   @override
@@ -5401,12 +5619,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(_returnType)
-    ..add(identifier)
-    ..add(parameters);
-
-  @override
   Token get endToken => question ?? _parameters.endToken;
 
   @override
@@ -5440,6 +5652,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addNode('returnType', returnType)
+    ..addNode('identifier', identifier)
+    ..addNode('parameters', parameters);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitFunctionTypedFormalParameter(this);
 
@@ -5520,14 +5738,6 @@
   Token get beginToken => _returnType?.beginToken ?? functionKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_returnType)
-    ..add(functionKeyword)
-    ..add(_typeParameters)
-    ..add(_parameters)
-    ..add(question);
-
-  @override
   Token get endToken => question ?? _parameters.endToken;
 
   @override
@@ -5556,6 +5766,14 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('returnType', returnType)
+    ..addToken('functionKeyword', functionKeyword)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('parameters', parameters)
+    ..addToken('question', question);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) {
     return visitor.visitGenericFunctionType(this);
   }
@@ -5603,15 +5821,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..addAll(metadata)
-    ..add(typedefKeyword)
-    ..add(name)
-    ..add(_typeParameters)
-    ..add(equals)
-    ..add(_type);
-
-  @override
   Element? get declaredElement => name.staticElement;
 
   /// The type of function being defined by the alias.
@@ -5645,6 +5854,15 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNodeList('metadata', metadata)
+    ..addToken('typedefKeyword', typedefKeyword)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addToken('equals', equals)
+    ..addNode('type', type);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) {
     return visitor.visitGenericTypeAlias(this);
   }
@@ -5679,17 +5897,17 @@
   Token get beginToken => hideKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(hideKeyword)
-    ..addAll(elements);
-
-  @override
   NodeListImpl<ShowHideClauseElement> get elements => _elements;
 
   @override
   Token get endToken => _elements.endToken!;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('hideKeyword', hideKeyword)
+    ..addNodeList('elements', elements);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitHideClause(this);
 
   @override
@@ -5714,17 +5932,17 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(keyword)
-    ..addAll(_hiddenNames);
-
-  @override
   Token get endToken => _hiddenNames.endToken!;
 
   @override
   NodeListImpl<SimpleIdentifier> get hiddenNames => _hiddenNames;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('keyword', keyword)
+    ..addNodeList('hiddenNames', hiddenNames);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitHideCombinator(this);
 
   @override
@@ -5785,16 +6003,6 @@
   Token get beginToken => ifKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(ifKeyword)
-    ..add(leftParenthesis)
-    ..add(_condition)
-    ..add(rightParenthesis)
-    ..add(_thenElement)
-    ..add(elseKeyword)
-    ..add(_elseElement);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression condition) {
@@ -5819,9 +6027,25 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('ifKeyword', ifKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('condition', condition)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('thenElement', thenElement)
+    ..addToken('elseKeyword', elseKeyword)
+    ..addNode('elseElement', elseElement);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitIfElement(this);
 
   @override
+  void resolveElement(
+      ResolverVisitor resolver, CollectionLiteralContext? context) {
+    resolver.visitIfElement(this, context: context);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _condition.accept(visitor);
     _thenElement.accept(visitor);
@@ -5875,16 +6099,6 @@
   Token get beginToken => ifKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(ifKeyword)
-    ..add(leftParenthesis)
-    ..add(_condition)
-    ..add(rightParenthesis)
-    ..add(_thenStatement)
-    ..add(elseKeyword)
-    ..add(_elseStatement);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression condition) {
@@ -5914,6 +6128,16 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('ifKeyword', ifKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('condition', condition)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('thenStatement', thenStatement)
+    ..addToken('elseKeyword', elseKeyword)
+    ..addNode('elseStatement', elseStatement);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitIfStatement(this);
 
   @override
@@ -5945,18 +6169,22 @@
   Token get beginToken => implementsKeyword;
 
   @override
-  // TODO(paulberry): add commas.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(implementsKeyword)
-    ..addAll(interfaces2);
-
-  @override
   Token get endToken => _interfaces.endToken!;
 
   @override
+  NodeListImpl<NamedType> get interfaces => _interfaces;
+
+  @Deprecated('Use interfaces instead')
+  @override
   NodeListImpl<NamedType> get interfaces2 => _interfaces;
 
   @override
+  // TODO(paulberry): add commas.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('implementsKeyword', implementsKeyword)
+    ..addNodeList('interfaces', interfaces);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitImplementsClause(this);
 
   @override
@@ -5991,11 +6219,6 @@
   Token get beginToken => expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(expression)
-    ..add(typeArguments);
-
-  @override
   Token get endToken => typeArguments?.endToken ?? expression.endToken;
 
   @override
@@ -6017,11 +6240,21 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('expression', expression)
+    ..addNode('typeArguments', typeArguments);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) {
     return visitor.visitImplicitCallReference(this);
   }
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitImplicitCallReference(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     expression.accept(visitor);
     typeArguments?.accept(visitor);
@@ -6037,6 +6270,10 @@
 //         [Combinator]* ';'
 class ImportDirectiveImpl extends NamespaceDirectiveImpl
     implements ImportDirective {
+  /// The token representing the 'augment' keyword, or `null` if the import is
+  /// not a library augmentation import.
+  Token? augmentKeyword;
+
   /// The token representing the 'deferred' keyword, or `null` if the imported
   /// is not deferred.
   @override
@@ -6061,6 +6298,7 @@
       CommentImpl? comment,
       List<Annotation>? metadata,
       Token keyword,
+      this.augmentKeyword,
       StringLiteralImpl libraryUri,
       List<Configuration>? configurations,
       this.deferredKeyword,
@@ -6074,16 +6312,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_uri)
-    ..add(deferredKeyword)
-    ..add(asKeyword)
-    ..add(_prefix)
-    ..addAll(combinators)
-    ..add(semicolon);
-
-  @override
   ImportElement? get element => super.element as ImportElement?;
 
   @override
@@ -6099,6 +6327,17 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addNode('uri', uri)
+    ..addToken('deferredKeyword', deferredKeyword)
+    ..addToken('asKeyword', asKeyword)
+    ..addNode('prefix', prefix)
+    ..addNodeList('combinators', combinators)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitImportDirective(this);
 
   @override
@@ -6166,14 +6405,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_target)
-    ..add(period)
-    ..add(leftBracket)
-    ..add(_index)
-    ..add(rightBracket);
-
-  @override
   Token get endToken => rightBracket;
 
   @override
@@ -6231,6 +6462,14 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('target', target)
+    ..addToken('period', period)
+    ..addToken('leftBracket', leftBracket)
+    ..addNode('index', index)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   AstNode get _nullShortingExtensionCandidate => parent!;
 
   /// If the AST structure has been resolved, and the function being invoked is
@@ -6287,6 +6526,11 @@
   }
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitIndexExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _target?.accept(visitor);
     _index.accept(visitor);
@@ -6345,13 +6589,6 @@
   Token get beginToken => keyword ?? _constructorName.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(keyword)
-    ..add(_constructorName)
-    ..add(_typeArguments)
-    ..add(_argumentList);
-
-  @override
   ConstructorNameImpl get constructorName => _constructorName;
 
   set constructorName(ConstructorName name) {
@@ -6391,10 +6628,22 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('keyword', keyword)
+    ..addNode('constructorName', constructorName)
+    ..addNode('typeArguments', typeArguments)
+    ..addNode('argumentList', argumentList);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitInstanceCreationExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitInstanceCreationExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _constructorName.accept(visitor);
     _typeArguments?.accept(visitor);
@@ -6430,9 +6679,6 @@
   Token get beginToken => literal;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(literal);
-
-  @override
   Token get endToken => literal;
 
   /// Returns whether this literal's [parent] is a [PrefixExpression] of unary
@@ -6448,9 +6694,18 @@
   }
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('literal', literal);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitIntegerLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitIntegerLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -6548,12 +6803,6 @@
   Token get beginToken => leftBracket;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftBracket)
-    ..add(_expression)
-    ..add(rightBracket);
-
-  @override
   Token get endToken => rightBracket ?? _expression.endToken;
 
   @override
@@ -6564,6 +6813,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftBracket', leftBracket)
+    ..addNode('expression', expression)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitInterpolationExpression(this);
 
@@ -6595,9 +6850,6 @@
   Token get beginToken => contents;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(contents);
-
-  @override
   int get contentsEnd => offset + _lexemeHelper.end;
 
   @override
@@ -6609,6 +6861,10 @@
   @override
   StringInterpolation get parent => super.parent as StringInterpolation;
 
+  @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('contents', contents);
+
   StringLexemeHelper get _lexemeHelper {
     String lexeme = contents.lexeme;
     return StringLexemeHelper(lexeme, identical(this, parent.elements.first),
@@ -6691,13 +6947,6 @@
   Token get beginToken => _expression.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_expression)
-    ..add(isOperator)
-    ..add(notOperator)
-    ..add(_type);
-
-  @override
   Token get endToken => _type.endToken;
 
   @override
@@ -6718,9 +6967,21 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('expression', expression)
+    ..addToken('isOperator', isOperator)
+    ..addToken('notOperator', notOperator)
+    ..addNode('type', type);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitIsExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitIsExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
     _type.accept(visitor);
@@ -6753,11 +7014,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..addAll(_labels)
-    ..add(_statement);
-
-  @override
   Token get endToken => _statement.endToken;
 
   @override
@@ -6774,6 +7030,11 @@
   StatementImpl get unlabeled => _statement.unlabeled;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNodeList('labels', labels)
+    ..addNode('statement', statement);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitLabeledStatement(this);
 
   @override
@@ -6804,11 +7065,6 @@
   Token get beginToken => _label.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_label)
-    ..add(colon);
-
-  @override
   Token get endToken => colon;
 
   @override
@@ -6819,6 +7075,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('label', label)
+    ..addToken('colon', colon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitLabel(this);
 
   @override
@@ -6853,12 +7114,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(libraryKeyword)
-    ..add(_name)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -6875,6 +7130,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('libraryKeyword', libraryKeyword)
+    ..addNode('name', name)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitLibraryDirective(this);
 
   @override
@@ -6902,11 +7163,6 @@
   Token get beginToken => _components.beginToken!;
 
   @override
-  // TODO(paulberry): add "." tokens.
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..addAll(_components);
-
-  @override
   NodeListImpl<SimpleIdentifier> get components => _components;
 
   @override
@@ -6936,9 +7192,19 @@
   Element? get staticElement => null;
 
   @override
+  // TODO(paulberry): add "." tokens.
+  ChildEntities get _childEntities =>
+      ChildEntities()..addNodeList('components', components);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitLibraryIdentifier(this);
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitLibraryIdentifier(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _components.accept(visitor);
   }
@@ -6994,22 +7260,27 @@
   }
 
   @override
-  // TODO(paulberry): add commas.
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(leftBracket)
-    ..addAll(_elements)
-    ..add(rightBracket);
-
-  @override
   NodeListImpl<CollectionElement> get elements => _elements;
 
   @override
   Token get endToken => rightBracket;
 
   @override
+  // TODO(paulberry): add commas.
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('elements', elements)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitListLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitListLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _elements.accept(visitor);
@@ -7070,12 +7341,6 @@
   Token get beginToken => _key.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_key)
-    ..add(separator)
-    ..add(_value);
-
-  @override
   Token get endToken => _value.endToken;
 
   @override
@@ -7093,9 +7358,21 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('key', key)
+    ..addToken('separator', separator)
+    ..addNode('value', value);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitMapLiteralEntry(this);
 
   @override
+  void resolveElement(
+      ResolverVisitor resolver, CollectionLiteralContext? context) {
+    resolver.visitMapLiteralEntry(this, context: context);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _key.accept(visitor);
     _value.accept(visitor);
@@ -7189,17 +7466,6 @@
     _body = _becomeParentOf(functionBody as FunctionBodyImpl);
   }
 
-  @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(externalKeyword)
-    ..add(modifierKeyword)
-    ..add(_returnType)
-    ..add(propertyKeyword)
-    ..add(operatorKeyword)
-    ..add(_name)
-    ..add(_parameters)
-    ..add(_body);
-
   /// Return the element associated with this method, or `null` if the AST
   /// structure has not been resolved. The element can either be a
   /// [MethodElement], if this represents the declaration of a normal method, or
@@ -7268,6 +7534,17 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('externalKeyword', externalKeyword)
+    ..addToken('modifierKeyword', modifierKeyword)
+    ..addNode('returnType', returnType)
+    ..addToken('propertyKeyword', propertyKeyword)
+    ..addToken('operatorKeyword', operatorKeyword)
+    ..addNode('name', name)
+    ..addNode('parameters', parameters)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitMethodDeclaration(this);
 
   @override
@@ -7330,13 +7607,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_target)
-    ..add(operator)
-    ..add(_methodName)
-    ..add(_argumentList);
-
-  @override
   Token get endToken => _argumentList.endToken;
 
   @override
@@ -7412,12 +7682,25 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('target', target)
+    ..addToken('operator', operator)
+    ..addNode('methodName', methodName)
+    ..addNode('typeArguments', typeArguments)
+    ..addNode('argumentList', argumentList);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => parent;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitMethodInvocation(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitMethodInvocation(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _target?.accept(visitor);
     _methodName.accept(visitor);
@@ -7436,6 +7719,9 @@
 ///        [RequiresClause]? [ImplementsClause]? '{' [ClassMember]* '}'
 class MixinDeclarationImpl extends ClassOrMixinDeclarationImpl
     implements MixinDeclaration {
+  /// Return the 'augment' keyword, or `null` if the keyword was absent.
+  Token? augmentKeyword;
+
   @override
   Token mixinKeyword;
 
@@ -7453,6 +7739,7 @@
   MixinDeclarationImpl(
       CommentImpl? comment,
       List<Annotation>? metadata,
+      this.augmentKeyword,
       this.mixinKeyword,
       SimpleIdentifierImpl name,
       TypeParameterListImpl? typeParameters,
@@ -7467,17 +7754,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(mixinKeyword)
-    ..add(_name)
-    ..add(_typeParameters)
-    ..add(_onClause)
-    ..add(_implementsClause)
-    ..add(leftBracket)
-    ..addAll(members)
-    ..add(rightBracket);
-
-  @override
   ClassElement? get declaredElement => _name.staticElement as ClassElement?;
 
   @override
@@ -7502,6 +7778,17 @@
   TypeParameterListImpl? get typeParameters => _typeParameters;
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('mixinKeyword', mixinKeyword)
+    ..addNode('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('onClause', onClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('members', members)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitMixinDeclaration(this);
 
   @override
@@ -7560,11 +7847,6 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_name)
-    ..add(_expression);
-
-  @override
   ParameterElement? get element {
     var element = _name.label.staticElement;
     if (element is ParameterElement) {
@@ -7594,9 +7876,19 @@
   Precedence get precedence => Precedence.none;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('name', name)
+    ..addNode('expression', expression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitNamedExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitNamedExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _name.accept(visitor);
     _expression.accept(visitor);
@@ -7635,12 +7927,6 @@
   Token get beginToken => _name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_name)
-    ..add(_typeArguments)
-    ..add(question);
-
-  @override
   Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken;
 
   @override
@@ -7670,6 +7956,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('name', name)
+    ..addNode('typeArguments', typeArguments)
+    ..addToken('question', question);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitNamedType(this);
 
   @override
@@ -7761,11 +8053,6 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(nativeKeyword)
-    ..add(_name);
-
-  @override
   Token get endToken {
     return _name?.endToken ?? nativeKeyword;
   }
@@ -7778,6 +8065,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('nativeKeyword', nativeKeyword)
+    ..addNode('name', name);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitNativeClause(this);
 
   @override
@@ -7816,12 +8108,6 @@
   Token get beginToken => nativeKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(nativeKeyword)
-    ..add(_stringLiteral)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -7832,9 +8118,19 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('nativeKeyword', nativeKeyword)
+    ..addNode('stringLiteral', stringLiteral)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitNativeFunctionBody(this);
 
   @override
+  DartType resolve(ResolverVisitor resolver, DartType? imposedType) =>
+      resolver.visitNativeFunctionBody(this, imposedType: imposedType);
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _stringLiteral?.accept(visitor);
   }
@@ -8030,19 +8326,13 @@
     ]..sort(AstNode.LEXICAL_ORDER);
   }
 
+  @override
   ChildEntities get _childEntities {
-    ChildEntities result = ChildEntities();
-    if (_commentIsBeforeAnnotations()) {
-      result
-        ..add(_comment)
-        ..addAll(_metadata);
-    } else {
-      result.addAll(sortedCommentAndAnnotations);
-    }
-    result
-      ..add(requiredKeyword)
-      ..add(covariantKeyword);
-    return result;
+    return ChildEntities()
+      ..addNode('documentationComment', documentationComment)
+      ..addNodeList('metadata', metadata)
+      ..addToken('requiredKeyword', requiredKeyword)
+      ..addToken('covariantKeyword', covariantKeyword);
   }
 
   @override
@@ -8089,15 +8379,21 @@
   Token get beginToken => literal;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(literal);
-
-  @override
   Token get endToken => literal;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('literal', literal);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitNullLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitNullLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -8150,18 +8446,22 @@
   Token get beginToken => onKeyword;
 
   @override
-  // TODO(paulberry): add commas.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(onKeyword)
-    ..addAll(superclassConstraints2);
-
-  @override
   Token get endToken => _superclassConstraints.endToken!;
 
   @override
+  NodeListImpl<NamedType> get superclassConstraints => _superclassConstraints;
+
+  @Deprecated('Use superclassConstraints instead')
+  @override
   NodeListImpl<NamedType> get superclassConstraints2 => _superclassConstraints;
 
   @override
+  // TODO(paulberry): add commas.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('onKeyword', onKeyword)
+    ..addNodeList('superclassConstraints', superclassConstraints);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitOnClause(this);
 
   @override
@@ -8197,12 +8497,6 @@
   Token get beginToken => leftParenthesis;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftParenthesis)
-    ..add(_expression)
-    ..add(rightParenthesis);
-
-  @override
   Token get endToken => rightParenthesis;
 
   @override
@@ -8227,10 +8521,21 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('expression', expression)
+    ..addToken('rightParenthesis', rightParenthesis);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitParenthesizedExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitParenthesizedExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
   }
@@ -8257,12 +8562,6 @@
       : super(comment, metadata, partUri);
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(partKeyword)
-    ..add(_uri)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -8275,6 +8574,12 @@
   CompilationUnitElement? get uriElement => element as CompilationUnitElement?;
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('partKeyword', partKeyword)
+    ..addNode('uri', uri)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPartDirective(this);
 }
 
@@ -8320,14 +8625,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(partKeyword)
-    ..add(ofKeyword)
-    ..add(_uri)
-    ..add(_libraryName)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -8351,6 +8648,14 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('partKeyword', partKeyword)
+    ..addToken('ofKeyword', ofKeyword)
+    ..addNode('uri', uri)
+    ..addNode('libraryName', libraryName)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPartOfDirective(this);
 
   @override
@@ -8390,11 +8695,6 @@
   Token get beginToken => _operand.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_operand)
-    ..add(operator);
-
-  @override
   Token get endToken => operator;
 
   @override
@@ -8408,6 +8708,11 @@
   Precedence get precedence => Precedence.postfix;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('operand', operand)
+    ..addToken('operator', operator);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => parent;
 
   /// If the AST structure has been resolved, and the function being invoked is
@@ -8429,6 +8734,11 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPostfixExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitPostfixExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _operand.accept(visitor);
   }
@@ -8464,12 +8774,6 @@
   Token get beginToken => _prefix.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_prefix)
-    ..add(period)
-    ..add(_identifier);
-
-  @override
   Token get endToken => _identifier.endToken;
 
   @override
@@ -8512,9 +8816,20 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('prefix', prefix)
+    ..addToken('period', period)
+    ..addNode('identifier', identifier);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPrefixedIdentifier(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitPrefixedIdentifier(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _prefix.accept(visitor);
     _identifier.accept(visitor);
@@ -8550,11 +8865,6 @@
   Token get beginToken => operator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(operator)
-    ..add(_operand);
-
-  @override
   Token get endToken => _operand.endToken;
 
   @override
@@ -8568,6 +8878,11 @@
   Precedence get precedence => Precedence.prefix;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('operator', operator)
+    ..addNode('operand', operand);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => parent;
 
   /// If the AST structure has been resolved, and the function being invoked is
@@ -8589,6 +8904,11 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPrefixExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitPrefixExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _operand.accept(visitor);
   }
@@ -8634,12 +8954,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_target)
-    ..add(operator)
-    ..add(_propertyName);
-
-  @override
   Token get endToken => _propertyName.endToken;
 
   @override
@@ -8697,12 +9011,23 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('target', target)
+    ..addToken('operator', operator)
+    ..addNode('propertyName', propertyName);
+
+  @override
   AstNode? get _nullShortingExtensionCandidate => parent;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitPropertyAccess(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitPropertyAccess(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _target?.accept(visitor);
     _propertyName.accept(visitor);
@@ -8762,13 +9087,6 @@
   Token get beginToken => thisKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(thisKeyword)
-    ..add(period)
-    ..add(_constructorName)
-    ..add(_argumentList);
-
-  @override
   SimpleIdentifierImpl? get constructorName => _constructorName;
 
   set constructorName(SimpleIdentifier? identifier) {
@@ -8779,6 +9097,13 @@
   Token get endToken => _argumentList.endToken;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('thisKeyword', thisKeyword)
+    ..addToken('period', period)
+    ..addNode('constructorName', constructorName)
+    ..addNode('argumentList', argumentList);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitRedirectingConstructorInvocation(this);
 
@@ -8806,19 +9131,24 @@
   Token get beginToken => rethrowKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(rethrowKeyword);
-
-  @override
   Token get endToken => rethrowKeyword;
 
   @override
   Precedence get precedence => Precedence.assignment;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('rethrowKeyword', rethrowKeyword);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitRethrowExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitRethrowExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -8851,12 +9181,6 @@
   Token get beginToken => returnKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(returnKeyword)
-    ..add(_expression)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -8867,6 +9191,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('returnKeyword', returnKeyword)
+    ..addNode('expression', expression)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitReturnStatement(this);
 
   @override
@@ -8892,11 +9222,11 @@
   Token get beginToken => scriptTag;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(scriptTag);
+  Token get endToken => scriptTag;
 
   @override
-  Token get endToken => scriptTag;
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('scriptTag', scriptTag);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitScriptTag(this);
@@ -8957,13 +9287,6 @@
   }
 
   @override
-  // TODO(paulberry): add commas.
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(leftBracket)
-    ..addAll(elements)
-    ..add(rightBracket);
-
-  @override
   NodeListImpl<CollectionElement> get elements => _elements;
 
   @override
@@ -8976,6 +9299,13 @@
   bool get isSet => _resolvedKind == _SetOrMapKind.set;
 
   @override
+  // TODO(paulberry): add commas.
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('elements', elements)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSetOrMapLiteral(this);
 
   void becomeMap() {
@@ -8995,6 +9325,11 @@
   }
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitSetOrMapLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _elements.accept(visitor);
@@ -9022,17 +9357,17 @@
   Token get beginToken => showKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(showKeyword)
-    ..addAll(elements);
-
-  @override
   NodeListImpl<ShowHideClauseElement> get elements => _elements;
 
   @override
   Token get endToken => _elements.endToken!;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('showKeyword', showKeyword)
+    ..addNodeList('elements', elements);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitShowClause(this);
 
   @override
@@ -9058,18 +9393,18 @@
   }
 
   @override
-  // TODO(paulberry): add commas.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(keyword)
-    ..addAll(_shownNames);
-
-  @override
   Token get endToken => _shownNames.endToken!;
 
   @override
   NodeListImpl<SimpleIdentifier> get shownNames => _shownNames;
 
   @override
+  // TODO(paulberry): add commas.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('keyword', keyword)
+    ..addNodeList('shownNames', shownNames);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitShowCombinator(this);
 
   @override
@@ -9102,11 +9437,12 @@
   Token get beginToken => modifier ?? name.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..addAll([if (modifier != null) modifier!, name]);
+  Token get endToken => name.endToken;
 
   @override
-  Token get endToken => name.endToken;
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('modifier', modifier)
+    ..addNode('name', name);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitShowHideElement(this);
@@ -9173,12 +9509,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_type)
-    ..add(identifier);
-
-  @override
   Token get endToken => identifier?.endToken ?? type!.endToken;
 
   @override
@@ -9195,6 +9525,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('type', type)
+    ..addNode('identifier', identifier);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitSimpleFormalParameter(this);
 
@@ -9253,9 +9589,6 @@
   Token get beginToken => token;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(token);
-
-  @override
   Token get endToken => token;
 
   @override
@@ -9319,6 +9652,9 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()..addToken('token', token);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSimpleIdentifier(this);
 
   @override
@@ -9412,6 +9748,11 @@
   }
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitSimpleIdentifier(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -9454,9 +9795,6 @@
   Token get beginToken => literal;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()..add(literal);
-
-  @override
   int get contentsEnd => offset + _helper.end;
 
   @override
@@ -9477,6 +9815,10 @@
   @override
   bool get isSynthetic => literal.isSynthetic;
 
+  @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('literal', literal);
+
   StringLexemeHelper get _helper {
     return StringLexemeHelper(literal.lexeme, true, true);
   }
@@ -9485,6 +9827,11 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSimpleStringLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitSimpleStringLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -9518,11 +9865,6 @@
   Token get beginToken => spreadOperator;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(spreadOperator)
-    ..add(_expression);
-
-  @override
   Token get endToken => _expression.endToken;
 
   @override
@@ -9537,11 +9879,22 @@
       spreadOperator.type == TokenType.PERIOD_PERIOD_PERIOD_QUESTION;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('spreadOperator', spreadOperator)
+    ..addNode('expression', expression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) {
     return visitor.visitSpreadElement(this);
   }
 
   @override
+  void resolveElement(
+      ResolverVisitor resolver, CollectionLiteralContext? context) {
+    resolver.visitSpreadElement(this, context: context);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
   }
@@ -9602,10 +9955,6 @@
   Token get beginToken => _elements.beginToken!;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..addAll(_elements);
-
-  @override
   int get contentsEnd {
     var element = _elements.last as InterpolationString;
     return element.contentsEnd;
@@ -9641,6 +9990,10 @@
   InterpolationStringImpl get lastString =>
       elements.last as InterpolationStringImpl;
 
+  @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addNodeList('elements', elements);
+
   StringLexemeHelper get _firstHelper {
     var lastString = _elements.first as InterpolationString;
     String lexeme = lastString.contents.lexeme;
@@ -9651,6 +10004,11 @@
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitStringInterpolation(this);
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitStringInterpolation(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _elements.accept(visitor);
   }
@@ -9824,13 +10182,6 @@
   Token get beginToken => superKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(superKeyword)
-    ..add(period)
-    ..add(_constructorName)
-    ..add(_argumentList);
-
-  @override
   SimpleIdentifierImpl? get constructorName => _constructorName;
 
   set constructorName(SimpleIdentifier? identifier) {
@@ -9841,6 +10192,13 @@
   Token get endToken => _argumentList.endToken;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('superKeyword', superKeyword)
+    ..addToken('period', period)
+    ..addNode('constructorName', constructorName)
+    ..addNode('argumentList', argumentList);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitSuperConstructorInvocation(this);
 
@@ -9867,19 +10225,24 @@
   Token get beginToken => superKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(superKeyword);
-
-  @override
   Token get endToken => superKeyword;
 
   @override
   Precedence get precedence => Precedence.primary;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('superKeyword', superKeyword);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSuperExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitSuperExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -9966,15 +10329,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_type)
-    ..add(superKeyword)
-    ..add(period)
-    ..add(identifier)
-    ..add(_parameters);
-
-  @override
   Token get endToken {
     return question ?? _parameters?.endToken ?? identifier.endToken;
   }
@@ -10010,6 +10364,16 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('type', type)
+    ..addToken('superKeyword', superKeyword)
+    ..addToken('period', period)
+    ..addNode('identifier', identifier)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('parameters', parameters);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitSuperFormalParameter(this);
 
@@ -10040,14 +10404,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..addAll(labels)
-    ..add(keyword)
-    ..add(_expression)
-    ..add(colon)
-    ..addAll(statements);
-
-  @override
   ExpressionImpl get expression => _expression;
 
   set expression(Expression expression) {
@@ -10055,6 +10411,14 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNodeList('labels', labels)
+    ..addToken('keyword', keyword)
+    ..addNode('expression', expression)
+    ..addToken('colon', colon)
+    ..addNodeList('statements', statements);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSwitchCase(this);
 
   @override
@@ -10077,11 +10441,11 @@
       : super(labels, keyword, colon, statements);
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..addAll(labels)
-    ..add(keyword)
-    ..add(colon)
-    ..addAll(statements);
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNodeList('labels', labels)
+    ..addToken('keyword', keyword)
+    ..addToken('colon', colon)
+    ..addNodeList('statements', statements);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSwitchDefault(this);
@@ -10194,16 +10558,6 @@
   Token get beginToken => switchKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(switchKeyword)
-    ..add(leftParenthesis)
-    ..add(_expression)
-    ..add(rightParenthesis)
-    ..add(leftBracket)
-    ..addAll(_members)
-    ..add(rightBracket);
-
-  @override
   Token get endToken => rightBracket;
 
   @override
@@ -10217,6 +10571,16 @@
   NodeListImpl<SwitchMember> get members => _members;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('switchKeyword', switchKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('expression', expression)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('members', members)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSwitchStatement(this);
 
   @override
@@ -10246,18 +10610,23 @@
   Token get beginToken => poundSign;
 
   @override
-  // TODO(paulberry): add "." tokens.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(poundSign)
-    ..addAll(components);
-
-  @override
   Token get endToken => components[components.length - 1];
 
   @override
+  // TODO(paulberry): add "." tokens.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('poundSign', poundSign)
+    ..addTokenList('components', components);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitSymbolLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitSymbolLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -10279,19 +10648,24 @@
   Token get beginToken => thisKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(thisKeyword);
-
-  @override
   Token get endToken => thisKeyword;
 
   @override
   Precedence get precedence => Precedence.primary;
 
   @override
+  ChildEntities get _childEntities =>
+      ChildEntities()..addToken('thisKeyword', thisKeyword);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitThisExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitThisExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     // There are no children to visit.
   }
@@ -10318,11 +10692,6 @@
   Token get beginToken => throwKeyword;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(throwKeyword)
-    ..add(_expression);
-
-  @override
   Token get endToken {
     return _expression.endToken;
   }
@@ -10338,9 +10707,19 @@
   Precedence get precedence => Precedence.assignment;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('throwKeyword', throwKeyword)
+    ..addNode('expression', expression);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitThrowExpression(this);
 
   @override
+  void resolveExpression(ResolverVisitor visitor, DartType? contextType) {
+    visitor.visitThrowExpression(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _expression.accept(visitor);
   }
@@ -10377,11 +10756,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(_variableList)
-    ..add(semicolon);
-
-  @override
   Element? get declaredElement => null;
 
   @override
@@ -10399,6 +10773,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addNode('variables', variables)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitTopLevelVariableDeclaration(this);
 
@@ -10460,14 +10839,6 @@
   NodeListImpl<CatchClause> get catchClauses => _catchClauses;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(tryKeyword)
-    ..add(_body)
-    ..addAll(_catchClauses)
-    ..add(finallyKeyword)
-    ..add(_finallyBlock);
-
-  @override
   Token get endToken {
     if (_finallyBlock != null) {
       return _finallyBlock!.endToken;
@@ -10487,6 +10858,14 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('tryKeyword', tryKeyword)
+    ..addNode('body', body)
+    ..addNodeList('catchClauses', catchClauses)
+    ..addToken('finallyKeyword', finallyKeyword)
+    ..addNode('finallyBlock', finallyBlock);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitTryStatement(this);
 
   @override
@@ -10566,14 +10945,14 @@
   Token get beginToken => leftBracket;
 
   @override
-  // TODO(paulberry): Add commas.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftBracket)
-    ..addAll(_arguments)
-    ..add(rightBracket);
+  Token get endToken => rightBracket;
 
   @override
-  Token get endToken => rightBracket;
+  // TODO(paulberry): Add commas.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('arguments', arguments)
+    ..addToken('rightBracket', rightBracket);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitTypeArgumentList(this);
@@ -10618,9 +10997,10 @@
     _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?);
   }
 
+  @override
   ChildEntities get _childEntities => ChildEntities()
-    ..add(constKeyword)
-    ..add(_typeArguments);
+    ..addToken('constKeyword', constKeyword)
+    ..addNode('typeArguments', typeArguments);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -10650,10 +11030,6 @@
   Token get beginToken => _typeName.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities =>
-      ChildEntities()..add(_typeName);
-
-  @override
   Token get endToken => _typeName.endToken;
 
   @override
@@ -10669,9 +11045,17 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()..addNode('type', type);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitTypeLiteral(this);
 
   @override
+  void resolveExpression(ResolverVisitor resolver, DartType? contextType) {
+    resolver.visitTypeLiteral(this, contextType: contextType);
+  }
+
+  @override
   void visitChildren(AstVisitor visitor) {
     _typeName.accept(visitor);
   }
@@ -10719,12 +11103,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(_name)
-    ..add(extendsKeyword)
-    ..add(_bound);
-
-  @override
   TypeParameterElement? get declaredElement =>
       _name.staticElement as TypeParameterElement?;
 
@@ -10747,6 +11125,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addNode('name', name)
+    ..addToken('extendsKeyword', extendsKeyword)
+    ..addNode('bound', bound);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitTypeParameter(this);
 
   @override
@@ -10783,18 +11167,18 @@
   Token get beginToken => leftBracket;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(leftBracket)
-    ..addAll(_typeParameters)
-    ..add(rightBracket);
-
-  @override
   Token get endToken => rightBracket;
 
   @override
   NodeListImpl<TypeParameter> get typeParameters => _typeParameters;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('leftBracket', leftBracket)
+    ..addNodeList('typeParameters', typeParameters)
+    ..addToken('rightBracket', rightBracket);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitTypeParameterList(this);
 
   @override
@@ -10928,12 +11312,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(_name)
-    ..add(equals)
-    ..add(_initializer);
-
-  @override
   VariableElement? get declaredElement =>
       _name.staticElement as VariableElement?;
 
@@ -10996,6 +11374,12 @@
   }
 
   @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addNode('name', name)
+    ..addToken('equals', equals)
+    ..addNode('initializer', initializer);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitVariableDeclaration(this);
 
   @override
@@ -11053,13 +11437,6 @@
   }
 
   @override
-  // TODO(paulberry): include commas.
-  Iterable<SyntacticEntity> get childEntities => super._childEntities
-    ..add(keyword)
-    ..add(_type)
-    ..addAll(_variables);
-
-  @override
   Token get endToken => _variables.endToken!;
 
   @override
@@ -11089,6 +11466,13 @@
   NodeListImpl<VariableDeclaration> get variables => _variables;
 
   @override
+  // TODO(paulberry): include commas.
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('type', type)
+    ..addNodeList('variables', variables);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitVariableDeclarationList(this);
 
@@ -11123,11 +11507,6 @@
   Token get beginToken => _variableList.beginToken;
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(_variableList)
-    ..add(semicolon);
-
-  @override
   Token get endToken => semicolon;
 
   @override
@@ -11138,6 +11517,11 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addNode('variables', variables)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitVariableDeclarationStatement(this);
 
@@ -11188,14 +11572,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(whileKeyword)
-    ..add(leftParenthesis)
-    ..add(_condition)
-    ..add(rightParenthesis)
-    ..add(_body);
-
-  @override
   ExpressionImpl get condition => _condition;
 
   set condition(Expression expression) {
@@ -11206,6 +11582,14 @@
   Token get endToken => _body.endToken;
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('whileKeyword', whileKeyword)
+    ..addToken('leftParenthesis', leftParenthesis)
+    ..addNode('condition', condition)
+    ..addToken('rightParenthesis', rightParenthesis)
+    ..addNode('body', body);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitWhileStatement(this);
 
   @override
@@ -11236,18 +11620,22 @@
   Token get beginToken => withKeyword;
 
   @override
-  // TODO(paulberry): add commas.
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(withKeyword)
-    ..addAll(_mixinTypes);
-
-  @override
   Token get endToken => _mixinTypes.endToken!;
 
   @override
+  NodeListImpl<NamedType> get mixinTypes => _mixinTypes;
+
+  @Deprecated('Use mixinTypes instead')
+  @override
   NodeListImpl<NamedType> get mixinTypes2 => _mixinTypes;
 
   @override
+  // TODO(paulberry): add commas.
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('withKeyword', withKeyword)
+    ..addNodeList('mixinTypes', mixinTypes);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitWithClause(this);
 
   @override
@@ -11289,13 +11677,6 @@
   }
 
   @override
-  Iterable<SyntacticEntity> get childEntities => ChildEntities()
-    ..add(yieldKeyword)
-    ..add(star)
-    ..add(_expression)
-    ..add(semicolon);
-
-  @override
   Token get endToken {
     return semicolon;
   }
@@ -11308,6 +11689,13 @@
   }
 
   @override
+  ChildEntities get _childEntities => ChildEntities()
+    ..addToken('yieldKeyword', yieldKeyword)
+    ..addToken('star', star)
+    ..addNode('expression', expression)
+    ..addToken('semicolon', semicolon);
+
+  @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitYieldStatement(this);
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index 37cfef3..e427e92 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/ast/ast_factory.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/ast.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
@@ -156,6 +157,7 @@
           List<Annotation>? metadata,
           Token? abstractKeyword,
           Token? macroKeyword,
+          Token? augmentKeyword,
           Token classKeyword,
           SimpleIdentifier name,
           TypeParameterList? typeParameters,
@@ -170,6 +172,7 @@
           metadata,
           abstractKeyword,
           macroKeyword,
+          augmentKeyword,
           classKeyword,
           name as SimpleIdentifierImpl,
           typeParameters as TypeParameterListImpl?,
@@ -190,6 +193,7 @@
           Token equals,
           Token? abstractKeyword,
           Token? macroKeyword,
+          Token? augmentKeyword,
           NamedType superclass,
           WithClause withClause,
           ImplementsClause? implementsClause,
@@ -203,6 +207,7 @@
           equals,
           abstractKeyword,
           macroKeyword,
+          augmentKeyword,
           superclass as NamedTypeImpl,
           withClause as WithClauseImpl,
           implementsClause as ImplementsClauseImpl?,
@@ -221,9 +226,14 @@
           List<Directive>? directives,
           List<CompilationUnitMember>? declarations,
           required Token endToken,
-          required FeatureSet featureSet}) =>
+          required FeatureSet featureSet,
+          // TODO(dantup): LineInfo should be made required and non-nullable
+          //   when breaking API changes can be made. Callers that do not
+          //   provide lineInfos may have offsets incorrectly mapped to line/col
+          //   for LSP.
+          LineInfo? lineInfo}) =>
       CompilationUnitImpl(beginToken, scriptTag as ScriptTagImpl?, directives,
-          declarations, endToken, featureSet);
+          declarations, endToken, featureSet, lineInfo ?? LineInfo([0]));
 
   @override
   ConditionalExpressionImpl conditionalExpression(
@@ -411,6 +421,7 @@
           implementsClause: null,
           leftBracket: leftBracket,
           constants: constants,
+          semicolon: null,
           members: [],
           rightBracket: rightBracket);
 
@@ -426,6 +437,7 @@
     required Token leftBracket,
     required List<EnumConstantDeclaration> constants,
     required List<ClassMember> members,
+    required Token? semicolon,
     required Token rightBracket,
   }) {
     return EnumDeclarationImpl(
@@ -438,6 +450,7 @@
       implementsClause as ImplementsClauseImpl?,
       leftBracket,
       constants,
+      semicolon,
       members,
       rightBracket,
     );
@@ -532,6 +545,7 @@
           {Comment? comment,
           List<Annotation>? metadata,
           Token? abstractKeyword,
+          Token? augmentKeyword,
           Token? covariantKeyword,
           Token? externalKeyword,
           Token? staticKeyword,
@@ -541,6 +555,7 @@
           comment as CommentImpl?,
           metadata,
           abstractKeyword,
+          augmentKeyword,
           covariantKeyword,
           externalKeyword,
           staticKeyword,
@@ -666,6 +681,7 @@
   FunctionDeclarationImpl functionDeclaration(
           Comment? comment,
           List<Annotation>? metadata,
+          Token? augmentKeyword,
           Token? externalKeyword,
           TypeAnnotation? returnType,
           Token? propertyKeyword,
@@ -674,6 +690,7 @@
       FunctionDeclarationImpl(
           comment as CommentImpl?,
           metadata,
+          augmentKeyword,
           externalKeyword,
           returnType as TypeAnnotationImpl?,
           propertyKeyword,
@@ -859,11 +876,13 @@
           Token? asKeyword,
           SimpleIdentifier? prefix,
           List<Combinator>? combinators,
-          Token semicolon) =>
+          Token semicolon,
+          {Token? augmentKeyword}) =>
       ImportDirectiveImpl(
           comment as CommentImpl?,
           metadata,
           keyword,
+          augmentKeyword,
           libraryUri as StringLiteralImpl,
           configurations,
           deferredKeyword,
@@ -1018,6 +1037,7 @@
   MixinDeclarationImpl mixinDeclaration(
           Comment? comment,
           List<Annotation>? metadata,
+          Token? augmentKeyword,
           Token mixinKeyword,
           SimpleIdentifier name,
           TypeParameterList? typeParameters,
@@ -1029,6 +1049,7 @@
       MixinDeclarationImpl(
           comment as CommentImpl?,
           metadata,
+          augmentKeyword,
           mixinKeyword,
           name as SimpleIdentifierImpl,
           typeParameters as TypeParameterListImpl?,
diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
index 8159d3a..e0bfc35 100644
--- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart
+++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
@@ -52,6 +52,18 @@
   }
 
   @override
+  Element? visitConstructorSelector(ConstructorSelector node) {
+    var parent = node.parent;
+    if (parent is EnumConstantArguments) {
+      var parent2 = parent.parent;
+      if (parent2 is EnumConstantDeclaration) {
+        return parent2.constructorElement;
+      }
+    }
+    return null;
+  }
+
+  @override
   Element? visitExportDirective(ExportDirective node) {
     return node.element;
   }
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 d2c7f88..856da93 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -148,10 +148,11 @@
   }
 
   @override
-  void visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(covariant ClassDeclarationImpl node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.abstractKeyword, suffix: ' ');
     _visitToken(node.macroKeyword, suffix: ' ');
+    _visitToken(node.augmentKeyword, suffix: ' ');
     sink.write('class ');
     _visitNode(node.name);
     _visitNode(node.typeParameters);
@@ -164,17 +165,18 @@
   }
 
   @override
-  void visitClassTypeAlias(ClassTypeAlias node) {
+  void visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     if (node.abstractKeyword != null) {
       sink.write('abstract ');
     }
     _visitToken(node.macroKeyword, suffix: ' ');
+    _visitToken(node.augmentKeyword, suffix: ' ');
     sink.write('class ');
     _visitNode(node.name);
     _visitNode(node.typeParameters);
     sink.write(' = ');
-    _visitNode(node.superclass2);
+    _visitNode(node.superclass);
     _visitNode(node.withClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
     sink.write(';');
@@ -239,7 +241,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    _visitNode(node.type2);
+    _visitNode(node.type);
     _visitNode(node.name, prefix: '.');
   }
 
@@ -335,7 +337,8 @@
     _visitNode(node.implementsClause, prefix: ' ');
     sink.write(' {');
     _visitNodeList(node.constants, separator: ', ');
-    _visitNodeList(node.members, prefix: '; ', separator: ' ');
+    _visitToken(node.semicolon);
+    _visitNodeList(node.members, prefix: ' ', separator: ' ');
     sink.write('}');
   }
 
@@ -375,7 +378,7 @@
   @override
   void visitExtendsClause(ExtendsClause node) {
     sink.write('extends ');
-    _visitNode(node.superclass2);
+    _visitNode(node.superclass);
   }
 
   @override
@@ -621,7 +624,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     sink.write('implements ');
-    _visitNodeList(node.interfaces2, separator: ', ');
+    _visitNodeList(node.interfaces, separator: ', ');
   }
 
   @override
@@ -812,7 +815,7 @@
   @override
   void visitOnClause(OnClause node) {
     sink.write('on ');
-    _visitNodeList(node.superclassConstraints2, separator: ', ');
+    _visitNodeList(node.superclassConstraints, separator: ', ');
   }
 
   @override
@@ -1112,7 +1115,7 @@
   @override
   void visitWithClause(WithClause node) {
     sink.write('with ');
-    _visitNodeList(node.mixinTypes2, separator: ', ');
+    _visitNodeList(node.mixinTypes, separator: ', ');
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 1aca07f..dd78df6 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -255,7 +255,7 @@
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualTokens(node.equals, other.equals) &&
         isEqualTokens(node.abstractKeyword, other.abstractKeyword) &&
-        isEqualNodes(node.superclass2, other.superclass2) &&
+        isEqualNodes(node.superclass, other.superclass) &&
         isEqualNodes(node.withClause, other.withClause) &&
         isEqualNodes(node.implementsClause, other.implementsClause) &&
         isEqualTokens(node.semicolon, other.semicolon);
@@ -338,7 +338,7 @@
   @override
   bool visitConstructorName(ConstructorName node) {
     ConstructorName other = _other as ConstructorName;
-    return isEqualNodes(node.type2, other.type2) &&
+    return isEqualNodes(node.type, other.type) &&
         isEqualTokens(node.period, other.period) &&
         isEqualNodes(node.name, other.name);
   }
@@ -482,7 +482,7 @@
   bool visitExtendsClause(ExtendsClause node) {
     ExtendsClause other = _other as ExtendsClause;
     return isEqualTokens(node.extendsKeyword, other.extendsKeyword) &&
-        isEqualNodes(node.superclass2, other.superclass2);
+        isEqualNodes(node.superclass, other.superclass);
   }
 
   @override
@@ -733,7 +733,7 @@
   bool visitImplementsClause(ImplementsClause node) {
     ImplementsClause other = _other as ImplementsClause;
     return isEqualTokens(node.implementsKeyword, other.implementsKeyword) &&
-        _isEqualNodeLists(node.interfaces2, other.interfaces2);
+        _isEqualNodeLists(node.interfaces, other.interfaces);
   }
 
   @override
@@ -938,7 +938,7 @@
     OnClause other = _other as OnClause;
     return isEqualTokens(node.onKeyword, other.onKeyword) &&
         _isEqualNodeLists(
-            node.superclassConstraints2, other.superclassConstraints2);
+            node.superclassConstraints, other.superclassConstraints);
   }
 
   @override
@@ -1281,7 +1281,7 @@
   bool visitWithClause(WithClause node) {
     WithClause other = _other as WithClause;
     return isEqualTokens(node.withKeyword, other.withKeyword) &&
-        _isEqualNodeLists(node.mixinTypes2, other.mixinTypes2);
+        _isEqualNodeLists(node.mixinTypes, other.mixinTypes);
   }
 
   @override
@@ -1797,7 +1797,7 @@
     } else if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
-    } else if (identical(node.superclass2, _oldNode)) {
+    } else if (identical(node.superclass, _oldNode)) {
       node.superclass = _newNode as NamedType;
       return true;
     } else if (identical(node.withClause, _oldNode)) {
@@ -1908,7 +1908,7 @@
 
   @override
   bool visitConstructorName(covariant ConstructorNameImpl node) {
-    if (identical(node.type2, _oldNode)) {
+    if (identical(node.type, _oldNode)) {
       node.type = _newNode as NamedType;
       return true;
     } else if (identical(node.name, _oldNode)) {
@@ -2061,7 +2061,7 @@
 
   @override
   bool visitExtendsClause(covariant ExtendsClauseImpl node) {
-    if (identical(node.superclass2, _oldNode)) {
+    if (identical(node.superclass, _oldNode)) {
       node.superclass = _newNode as NamedType;
       return true;
     }
@@ -2402,7 +2402,7 @@
 
   @override
   bool visitImplementsClause(covariant ImplementsClauseImpl node) {
-    if (_replaceInList(node.interfaces2)) {
+    if (_replaceInList(node.interfaces)) {
       return true;
     }
     return visitNode(node);
@@ -2674,7 +2674,7 @@
 
   @override
   bool visitOnClause(covariant OnClauseImpl node) {
-    if (_replaceInList(node.superclassConstraints2)) {
+    if (_replaceInList(node.superclassConstraints)) {
       return true;
     }
     return visitNode(node);
@@ -3046,7 +3046,7 @@
 
   @override
   bool visitWithClause(covariant WithClauseImpl node) {
-    if (_replaceInList(node.mixinTypes2)) {
+    if (_replaceInList(node.mixinTypes)) {
       return true;
     }
     return visitNode(node);
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 9af29c4..d51f9d9 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -103,7 +103,11 @@
     if (constKeyword != null) {
       _validateConstructorInitializers(node);
       if (node.factoryKeyword == null) {
-        _validateFieldInitializers(node.parent.classMembers, constKeyword);
+        _validateFieldInitializers(
+          node.parent.classMembers,
+          constKeyword,
+          isEnumDeclaration: node.parent is EnumDeclaration,
+        );
       }
     }
     _validateDefaultValues(node.parameters);
@@ -114,12 +118,28 @@
   void visitConstructorReference(ConstructorReference node) {
     super.visitConstructorReference(node);
     if (node.inConstantContext || node.inConstantExpression) {
-      _checkForConstWithTypeParameters(node.constructorName.type2,
+      _checkForConstWithTypeParameters(node.constructorName.type,
           CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF);
     }
   }
 
   @override
+  visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    super.visitEnumConstantDeclaration(node);
+
+    var argumentList = node.arguments?.argumentList;
+    if (argumentList != null) {
+      _validateConstantArguments(argumentList);
+    }
+
+    var element = node.declaredElement as ConstFieldElementImpl;
+    var result = element.evaluationResult;
+    if (result != null) {
+      _reportErrors(result.errors, null);
+    }
+  }
+
+  @override
   void visitFunctionExpression(FunctionExpression node) {
     super.visitFunctionExpression(node);
     _validateDefaultValues(node.parameters);
@@ -155,7 +175,7 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (node.isConst) {
-      NamedType namedType = node.constructorName.type2;
+      NamedType namedType = node.constructorName.type;
       _checkForConstWithTypeParameters(
           namedType, CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS);
 
@@ -548,11 +568,17 @@
   /// required if the class has a constant constructor, the error is reported at
   /// [constKeyword], the const keyword on such a constant constructor.
   void _validateFieldInitializers(
-      List<ClassMember> members, Token constKeyword) {
+    List<ClassMember> members,
+    Token constKeyword, {
+    required bool isEnumDeclaration,
+  }) {
     for (ClassMember member in members) {
       if (member is FieldDeclaration && !member.isStatic) {
         for (VariableDeclaration variableDeclaration
             in member.fields.variables) {
+          if (isEnumDeclaration && variableDeclaration.name.name == 'values') {
+            continue;
+          }
           var initializer = variableDeclaration.initializer;
           if (initializer != null) {
             // Ignore any errors produced during validation--if the constant
@@ -603,7 +629,7 @@
               .NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY,
         );
 
-        var expressionValueType = _typeSystem.toLegacyType(
+        var expressionValueType = _typeSystem.toLegacyTypeIfOptOut(
           expressionValue.type,
         );
 
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 72131f5..ba68d5e 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -28,6 +28,12 @@
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/task/api/model.dart';
 
+/// During evaluation of enum constants we might need to report an error
+/// that is associated with the [InstanceCreationExpression], but this
+/// expression is synthetic. Instead, we remember the corresponding
+/// [EnumConstantDeclaration] and report the error on it.
+final enumConstantErrorNodes = Expando<EnumConstantDeclaration>();
+
 /// Helper class encapsulating the methods for evaluating constants and
 /// constant instance creation expressions.
 class ConstantEvaluationEngine {
@@ -187,6 +193,18 @@
   /// [callback].
   void computeDependencies(
       ConstantEvaluationTarget constant, ReferenceFinderCallback callback) {
+    if (constant is ConstFieldElementImpl && constant.isEnumConstant) {
+      var enclosing = constant.enclosingElement;
+      if (enclosing is EnumElementImpl) {
+        if (enclosing.name == 'values') {
+          return;
+        }
+        if (constant.name == enclosing.name) {
+          return;
+        }
+      }
+    }
+
     ReferenceFinder referenceFinder = ReferenceFinder(callback);
     if (constant is ConstructorElement) {
       constant = constant.declaration;
@@ -662,7 +680,7 @@
     // The result is already instantiated during resolution;
     // [_dartObjectComputer.typeInstantiate] is unnecessary.
     var typeElement =
-        node.constructorName.type2.name.staticElement as TypeDefiningElement;
+        node.constructorName.type.name.staticElement as TypeDefiningElement;
 
     TypeAliasElement? viaTypeAlias;
     if (typeElement is TypeAliasElementImpl) {
@@ -2541,7 +2559,7 @@
       declaredVariables,
       errorReporter,
       library,
-      node,
+      enumConstantErrorNodes[node] ?? node,
       constructor,
       typeArguments,
       namedNodes: namedNodes,
@@ -2605,7 +2623,7 @@
     DartType type,
   ) {
     if (!isNonNullableByDefault) {
-      type = toLegacyType(type);
+      type = toLegacyTypeIfOptOut(type);
     }
     var objType = obj.type;
     return isSubtypeOf(objType, type);
diff --git a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
index ae554f5..66503bc 100644
--- a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
+++ b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
@@ -188,7 +188,7 @@
     }
 
     if (node is ConstructorReference) {
-      _typeArgumentList(node.constructorName.type2.typeArguments);
+      _typeArgumentList(node.constructorName.type.typeArguments);
       return;
     }
 
diff --git a/pkg/analyzer/lib/src/dart/constant/utilities.dart b/pkg/analyzer/lib/src/dart/constant/utilities.dart
index 62f7b47..38b14dc 100644
--- a/pkg/analyzer/lib/src/dart/constant/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/constant/utilities.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
+import 'package:analyzer/src/dart/element/element.dart';
 
 /// Callback used by [ReferenceFinder] to report that a dependency was found.
 typedef ReferenceFinderCallback = void Function(
@@ -141,6 +142,17 @@
   }
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    super.visitEnumConstantDeclaration(node);
+
+    var element = node.declaredElement as ConstFieldElementImpl;
+    constantsToCompute.add(element);
+
+    var constantInitializer = element.constantInitializer!;
+    enumConstantErrorNodes[constantInitializer] = node;
+  }
+
+  @override
   void visitVariableDeclaration(VariableDeclaration node) {
     super.visitVariableDeclaration(node);
     var initializer = node.initializer;
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index ef76c24..06b9e06 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -167,16 +167,14 @@
     TypeSystemImpl typeSystem,
     DartType type,
   ) {
-    if (type.element!.library!.isDartCore) {
-      if (type.isDartCoreBool) {
-        return DartObjectImpl(typeSystem, type, BoolState.UNKNOWN_VALUE);
-      } else if (type.isDartCoreDouble) {
-        return DartObjectImpl(typeSystem, type, DoubleState.UNKNOWN_VALUE);
-      } else if (type.isDartCoreInt) {
-        return DartObjectImpl(typeSystem, type, IntState.UNKNOWN_VALUE);
-      } else if (type.isDartCoreString) {
-        return DartObjectImpl(typeSystem, type, StringState.UNKNOWN_VALUE);
-      }
+    if (type.isDartCoreBool) {
+      return DartObjectImpl(typeSystem, type, BoolState.UNKNOWN_VALUE);
+    } else if (type.isDartCoreDouble) {
+      return DartObjectImpl(typeSystem, type, DoubleState.UNKNOWN_VALUE);
+    } else if (type.isDartCoreInt) {
+      return DartObjectImpl(typeSystem, type, IntState.UNKNOWN_VALUE);
+    } else if (type.isDartCoreString) {
+      return DartObjectImpl(typeSystem, type, StringState.UNKNOWN_VALUE);
     }
     return DartObjectImpl(typeSystem, type, GenericState.UNKNOWN_VALUE);
   }
diff --git a/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart b/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
index 0a44e08..1a8a0ca 100644
--- a/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
+++ b/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
@@ -183,7 +183,7 @@
         );
       }
     } else {
-      var legacyType = _typeSystem.toLegacyType(type) as InterfaceType;
+      var legacyType = _typeSystem.toLegacyTypeIfOptOut(type) as InterfaceType;
       if (_currentResult == null) {
         _currentResult = legacyType;
       } else {
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index 2e58795..77422fc 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -74,6 +74,8 @@
     _write('enum ');
     _write(element.displayName);
     _writeTypeParameters(element.typeParameters);
+    _writeTypesIfNotEmpty(' with ', element.mixins);
+    _writeTypesIfNotEmpty(' implements ', element.interfaces);
   }
 
   void writeExecutableElement(ExecutableElement element, String name) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index b79c1a0..060903e 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -46,8 +46,19 @@
 
 /// A concrete implementation of a [ClassElement].
 abstract class AbstractClassElementImpl extends _ExistingElementImpl
-    with TypeParameterizedElementMixin
+    with TypeParameterizedElementMixin, HasCompletionData
     implements ClassElement {
+  /// The superclass of the class, or `null` for [Object].
+  InterfaceType? _supertype;
+
+  /// A list containing all of the mixins that are applied to the class being
+  /// extended in order to derive the superclass of this class.
+  List<InterfaceType> _mixins = const [];
+
+  /// A list containing all of the interfaces that are implemented by this
+  /// class.
+  List<InterfaceType> _interfaces = const [];
+
   /// The type defined by the class.
   InterfaceType? _thisType;
 
@@ -61,6 +72,10 @@
   /// A list containing all of the methods contained in this class.
   List<MethodElement> _methods = _Sentinel.methodElement;
 
+  /// This callback is set during mixins inference to handle reentrant calls.
+  List<InterfaceType>? Function(AbstractClassElementImpl)?
+      mixinInferenceCallback;
+
   /// Initialize a newly created class element to have the given [name] at the
   /// given [offset] in the file that contains the declaration of this element.
   AbstractClassElementImpl(String name, int offset) : super(name, offset);
@@ -75,6 +90,12 @@
   }
 
   @override
+  List<InterfaceType> get allSupertypes {
+    var sessionImpl = library.session as AnalysisSessionImpl;
+    return sessionImpl.classHierarchy.implementedInterfaces(this);
+  }
+
+  @override
   String get displayName => name;
 
   @override
@@ -92,6 +113,23 @@
   }
 
   @override
+  List<InterfaceType> get interfaces =>
+      ElementTypeProvider.current.getClassInterfaces(this);
+
+  set interfaces(List<InterfaceType> interfaces) {
+    _interfaces = interfaces;
+  }
+
+  List<InterfaceType> get interfacesInternal {
+    return _interfaces;
+  }
+
+  @override
+  bool get isDartCoreEnum {
+    return name == 'Enum' && library.isDartCore;
+  }
+
+  @override
   bool get isDartCoreObject => false;
 
   @override
@@ -101,9 +139,40 @@
   bool get isMixin => false;
 
   @override
+  List<InterfaceType> get mixins {
+    if (mixinInferenceCallback != null) {
+      var mixins = mixinInferenceCallback!(this);
+      if (mixins != null) {
+        return _mixins = mixins;
+      }
+    }
+
+    return _mixins;
+  }
+
+  set mixins(List<InterfaceType> mixins) {
+    _mixins = mixins;
+  }
+
+  @override
   List<InterfaceType> get superclassConstraints => const <InterfaceType>[];
 
   @override
+  InterfaceType? get supertype {
+    if (_supertype != null) return _supertype!;
+
+    if (hasModifier(Modifier.DART_CORE_OBJECT)) {
+      return null;
+    }
+
+    return _supertype;
+  }
+
+  set supertype(InterfaceType? supertype) {
+    _supertype = supertype;
+  }
+
+  @override
   InterfaceType get thisType {
     if (_thisType == null) {
       List<DartType> typeArguments;
@@ -200,11 +269,6 @@
     required List<DartType> typeArguments,
     required NullabilitySuffix nullabilitySuffix,
   }) {
-    if (typeArguments.length != typeParameters.length) {
-      var ta = 'typeArguments.length (${typeArguments.length})';
-      var tp = 'typeParameters.length (${typeParameters.length})';
-      throw ArgumentError('$ta != $tp');
-    }
     return InterfaceTypeImpl(
       element: this,
       typeArguments: typeArguments,
@@ -325,6 +389,9 @@
     super.visitChildren(visitor);
     safelyVisitChildren(accessors, visitor);
     safelyVisitChildren(fields, visitor);
+    safelyVisitChildren(constructors, visitor);
+    safelyVisitChildren(methods, visitor);
+    safelyVisitChildren(typeParameters, visitor);
   }
 
   /// Return an iterable containing all of the implementations of a getter with
@@ -444,17 +511,6 @@
 
 /// An [AbstractClassElementImpl] which is a class.
 class ClassElementImpl extends AbstractClassElementImpl {
-  /// The superclass of the class, or `null` for [Object].
-  InterfaceType? _supertype;
-
-  /// A list containing all of the mixins that are applied to the class being
-  /// extended in order to derive the superclass of this class.
-  List<InterfaceType> _mixins = const [];
-
-  /// A list containing all of the interfaces that are implemented by this
-  /// class.
-  List<InterfaceType> _interfaces = const [];
-
   /// For classes which are not mixin applications, a list containing all of the
   /// constructors contained in this class, or `null` if the list of
   /// constructors has not yet been built.
@@ -468,9 +524,6 @@
   /// of this class have been inferred.
   bool hasBeenInferred = false;
 
-  /// This callback is set during mixins inference to handle reentrant calls.
-  List<InterfaceType>? Function(ClassElementImpl)? mixinInferenceCallback;
-
   ElementLinkedData? linkedData;
 
   /// Initialize a newly created class element to have the given [name] at the
@@ -493,12 +546,6 @@
   }
 
   @override
-  List<InterfaceType> get allSupertypes {
-    var sessionImpl = library.session as AnalysisSessionImpl;
-    return sessionImpl.classHierarchy.implementedInterfaces(this);
-  }
-
-  @override
   List<ConstructorElement> get constructors {
     if (!identical(_constructors, _Sentinel.constructorElement)) {
       return _constructors;
@@ -611,13 +658,6 @@
   }
 
   @override
-  List<InterfaceType> get interfaces =>
-      ElementTypeProvider.current.getClassInterfaces(this);
-
-  set interfaces(List<InterfaceType> interfaces) {
-    _interfaces = interfaces;
-  }
-
   List<InterfaceType> get interfacesInternal {
     linkedData?.read(this);
     return _interfaces;
@@ -740,19 +780,8 @@
 
   @override
   List<InterfaceType> get mixins {
-    if (mixinInferenceCallback != null) {
-      var mixins = mixinInferenceCallback!(this);
-      if (mixins != null) {
-        return _mixins = mixins;
-      }
-    }
-
     linkedData?.read(this);
-    return _mixins;
-  }
-
-  set mixins(List<InterfaceType> mixins) {
-    _mixins = mixins;
+    return super.mixins;
   }
 
   @override
@@ -768,17 +797,7 @@
   @override
   InterfaceType? get supertype {
     linkedData?.read(this);
-    if (_supertype != null) return _supertype!;
-
-    if (hasModifier(Modifier.DART_CORE_OBJECT)) {
-      return null;
-    }
-
-    return _supertype;
-  }
-
-  set supertype(InterfaceType? supertype) {
-    _supertype = supertype;
+    return super.supertype;
   }
 
   @override
@@ -799,14 +818,6 @@
     this.linkedData = linkedData;
   }
 
-  @override
-  void visitChildren(ElementVisitor visitor) {
-    super.visitChildren(visitor);
-    safelyVisitChildren(constructors, visitor);
-    safelyVisitChildren(methods, visitor);
-    safelyVisitChildren(typeParameters, visitor);
-  }
-
   /// Compute a list of constructors for this class, which is a mixin
   /// application.  If specified, [visitedClasses] is a list of the other mixin
   /// application classes which have been visited on the way to reaching this
@@ -1349,9 +1360,6 @@
   }
 
   @override
-  bool get isStatic => false;
-
-  @override
   ElementKind get kind => ElementKind.CONSTRUCTOR;
 
   @override
@@ -1457,6 +1465,11 @@
     // OK, can be used as default constructor
     return true;
   }
+
+  @override
+  bool get isGenerative {
+    return !isFactory;
+  }
 }
 
 /// A [TopLevelVariableElement] for a top-level 'const' variable that has an
@@ -2675,10 +2688,6 @@
     return _accessors;
   }
 
-  @override
-  List<InterfaceType> get allSupertypes =>
-      <InterfaceType>[...interfaces, supertype];
-
   List<FieldElement> get constants {
     return fields.where((field) => field.isEnumConstant).toList();
   }
@@ -2707,9 +2716,6 @@
   bool get hasStaticMember => true;
 
   @override
-  List<InterfaceType> get interfaces => const [];
-
-  @override
   bool get isAbstract => false;
 
   @override
@@ -2753,17 +2759,14 @@
   }
 
   @override
-  List<InterfaceType> get mixins => const <InterfaceType>[];
-
-  @override
   String get name {
     return super.name!;
   }
 
   @override
-  InterfaceType get supertype {
-    var enumType = library.typeProvider.enumType;
-    return enumType ?? library.typeProvider.objectType;
+  InterfaceType? get supertype {
+    linkedData?.read(this);
+    return super.supertype;
   }
 
   @override
@@ -2772,6 +2775,17 @@
     return super.typeParameters;
   }
 
+  ConstFieldElementImpl? get valuesField {
+    for (var field in fields) {
+      if (field is ConstFieldElementImpl &&
+          field.name == 'values' &&
+          field.isSyntheticEnumField) {
+        return field;
+      }
+    }
+    return null;
+  }
+
   @override
   void appendTo(ElementDisplayStringBuilder builder) {
     builder.writeEnumElement(this);
@@ -2787,7 +2801,7 @@
 
 /// A base class for concrete implementations of an [ExecutableElement].
 abstract class ExecutableElementImpl extends _ExistingElementImpl
-    with TypeParameterizedElementMixin
+    with TypeParameterizedElementMixin, HasCompletionData
     implements ExecutableElement, ElementImplWithFunctionType {
   /// A list containing all of the parameters defined by this executable
   /// element.
@@ -2858,6 +2872,15 @@
   bool get isOperator => false;
 
   @override
+  bool get isStatic {
+    return hasModifier(Modifier.STATIC);
+  }
+
+  set isStatic(bool isStatic) {
+    setModifier(Modifier.STATIC, isStatic);
+  }
+
+  @override
   bool get isSynchronous => !isAsynchronous;
 
   @override
@@ -3002,7 +3025,7 @@
 
 /// A concrete implementation of an [ExtensionElement].
 class ExtensionElementImpl extends _ExistingElementImpl
-    with TypeParameterizedElementMixin
+    with TypeParameterizedElementMixin, HasCompletionData
     implements ExtensionElement {
   /// The type being extended.
   DartType? _extendedType;
@@ -3128,6 +3151,16 @@
   }
 
   @override
+  FieldElement? getField(String name) {
+    for (FieldElement fieldElement in fields) {
+      if (name == fieldElement.name) {
+        return fieldElement;
+      }
+    }
+    return null;
+  }
+
+  @override
   PropertyAccessorElement? getGetter(String getterName) {
     int length = accessors.length;
     for (int i = 0; i < length; i++) {
@@ -3176,6 +3209,7 @@
 
 /// A concrete implementation of a [FieldElement].
 class FieldElementImpl extends PropertyInducingElementImpl
+    with HasCompletionData
     implements FieldElement {
   /// True if this field inherits from a covariant parameter. This happens
   /// when it overrides a field in a supertype that is covariant.
@@ -3217,16 +3251,6 @@
     return hasModifier(Modifier.EXTERNAL);
   }
 
-  @override
-  bool get isStatic {
-    return hasModifier(Modifier.STATIC);
-  }
-
-  /// Set whether this field is static.
-  set isStatic(bool isStatic) {
-    setModifier(Modifier.STATIC, isStatic);
-  }
-
   /// Return `true` if this element is a synthetic enum field.
   ///
   /// It is synthetic because it is not written explicitly in code, but it
@@ -3320,9 +3344,6 @@
   }
 
   @override
-  bool get isStatic => enclosingElement is CompilationUnitElement;
-
-  @override
   ElementKind get kind => ElementKind.FUNCTION;
 
   @override
@@ -3448,6 +3469,11 @@
   }
 }
 
+/// This mixins is added to elements that can have cache completion data.
+mixin HasCompletionData {
+  Object? completionData;
+}
+
 /// A concrete implementation of a [HideElementCombinator].
 class HideElementCombinatorImpl implements HideElementCombinator {
   @override
@@ -4171,16 +4197,6 @@
   }
 
   @override
-  bool get isStatic {
-    return hasModifier(Modifier.STATIC);
-  }
-
-  /// Set whether this method is static.
-  set isStatic(bool isStatic) {
-    setModifier(Modifier.STATIC, isStatic);
-  }
-
-  @override
   ElementKind get kind => ElementKind.METHOD;
 
   @override
@@ -5010,16 +5026,6 @@
   }
 
   @override
-  bool get isStatic {
-    return hasModifier(Modifier.STATIC);
-  }
-
-  /// Set whether this accessor is static.
-  set isStatic(bool isStatic) {
-    setModifier(Modifier.STATIC, isStatic);
-  }
-
-  @override
   ElementKind get kind {
     if (isGetter) {
       return ElementKind.GETTER;
@@ -5077,12 +5083,12 @@
 
   @override
   Element get nonSynthetic {
-    if (enclosingElement is EnumElementImpl) {
-      if (name == 'index' || name == 'values') {
-        return enclosingElement;
-      }
+    final variable = this.variable;
+    if (!variable.isSynthetic) {
+      return variable;
     }
-    return variable;
+    assert(enclosingElement is EnumElementImpl);
+    return enclosingElement;
   }
 
   @override
@@ -5227,6 +5233,7 @@
   Element get nonSynthetic {
     if (isSynthetic) {
       if (enclosingElement is EnumElementImpl) {
+        // TODO(scheglov) remove 'index'?
         if (name == 'index' || name == 'values') {
           return enclosingElement;
         }
@@ -5409,6 +5416,7 @@
 
 /// A concrete implementation of a [TopLevelVariableElement].
 class TopLevelVariableElementImpl extends PropertyInducingElementImpl
+    with HasCompletionData
     implements TopLevelVariableElement {
   /// Initialize a newly created synthetic top-level variable element to have
   /// the given [name] and [offset].
@@ -5443,7 +5451,7 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 class TypeAliasElementImpl extends _ExistingElementImpl
-    with TypeParameterizedElementMixin
+    with TypeParameterizedElementMixin, HasCompletionData
     implements TypeAliasElement {
   /// Is `true` if the element has direct or indirect reference to itself
   /// from anywhere except a class element or type parameter bounds.
@@ -5892,6 +5900,10 @@
   @override
   bool get isStatic => hasModifier(Modifier.STATIC);
 
+  set isStatic(bool isStatic) {
+    setModifier(Modifier.STATIC, isStatic);
+  }
+
   @override
   String get name => super.name!;
 
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index 06fb704..f4077d4 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -551,10 +551,10 @@
       return;
     }
     if (errorNode is ConstructorName &&
-        !(errorNode.type2.type as InterfaceType).element.hasOptionalTypeArgs) {
+        !(errorNode.type.type as InterfaceType).element.hasOptionalTypeArgs) {
       String constructorName = errorNode.name == null
-          ? errorNode.type2.name.name
-          : '${errorNode.type2}.${errorNode.name}';
+          ? errorNode.type.name.name
+          : '${errorNode.type}.${errorNode.name}';
       errorReporter.reportErrorForNode(
           HintCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION,
           errorNode,
diff --git a/pkg/analyzer/lib/src/dart/element/greatest_lower_bound.dart b/pkg/analyzer/lib/src/dart/element/greatest_lower_bound.dart
index fdabfea..92fc5ba 100644
--- a/pkg/analyzer/lib/src/dart/element/greatest_lower_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/greatest_lower_bound.dart
@@ -273,18 +273,13 @@
 
     // The bounds of type parameters must be equal.
     // Otherwise the result is `Never`.
-    var freshTypeFormalTypes =
-        FunctionTypeImpl.relateTypeFormals(f, g, (t, s, _, __) => t == s);
-    if (freshTypeFormalTypes == null) {
+    var fresh = _typeSystem.relateTypeParameters(f.typeFormals, g.typeFormals);
+    if (fresh == null) {
       return NeverTypeImpl.instance;
     }
 
-    var typeFormals = freshTypeFormalTypes
-        .map<TypeParameterElement>((t) => t.element)
-        .toList();
-
-    f = f.instantiate(freshTypeFormalTypes);
-    g = g.instantiate(freshTypeFormalTypes);
+    f = f.instantiate(fresh.typeParameterTypes);
+    g = g.instantiate(fresh.typeParameterTypes);
 
     var fParameters = f.parameters;
     var gParameters = g.parameters;
@@ -379,7 +374,7 @@
     var returnType = getGreatestLowerBound(f.returnType, g.returnType);
 
     return FunctionTypeImpl(
-      typeFormals: typeFormals,
+      typeFormals: fresh.typeParameters,
       parameters: parameters,
       returnType: returnType,
       nullabilitySuffix: NullabilitySuffix.none,
diff --git a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
index df0e9e2..c675895 100644
--- a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
@@ -248,7 +248,7 @@
       return result;
     } else {
       return result.map((e) {
-        return e.mapArguments(typeSystem.toLegacyType);
+        return e.mapArguments(typeSystem.toLegacyTypeIfOptOut);
       }).toSet();
     }
   }
@@ -723,18 +723,13 @@
 
     // The bounds of type parameters must be equal.
     // Otherwise the result is `Function`.
-    var freshTypeFormalTypes =
-        FunctionTypeImpl.relateTypeFormals(f, g, (t, s, _, __) => t == s);
-    if (freshTypeFormalTypes == null) {
+    var fresh = _typeSystem.relateTypeParameters(f.typeFormals, g.typeFormals);
+    if (fresh == null) {
       return _interfaceTypeFunctionNone;
     }
 
-    var typeFormals = freshTypeFormalTypes
-        .map<TypeParameterElement>((t) => t.element)
-        .toList();
-
-    f = f.instantiate(freshTypeFormalTypes);
-    g = g.instantiate(freshTypeFormalTypes);
+    f = f.instantiate(fresh.typeParameterTypes);
+    g = g.instantiate(fresh.typeParameterTypes);
 
     var fParameters = f.parameters;
     var gParameters = g.parameters;
@@ -822,7 +817,7 @@
     var returnType = getLeastUpperBound(f.returnType, g.returnType);
 
     return FunctionTypeImpl(
-      typeFormals: typeFormals,
+      typeFormals: fresh.typeParameters,
       parameters: parameters,
       returnType: returnType,
       nullabilitySuffix: NullabilitySuffix.none,
diff --git a/pkg/analyzer/lib/src/dart/element/subtype.dart b/pkg/analyzer/lib/src/dart/element/subtype.dart
index 4c8850c..9ff6e69 100644
--- a/pkg/analyzer/lib/src/dart/element/subtype.dart
+++ b/pkg/analyzer/lib/src/dart/element/subtype.dart
@@ -20,16 +20,17 @@
 /// https://github.com/dart-lang/language
 /// See `resources/type-system/subtyping.md`
 class SubtypeHelper {
+  final TypeSystemImpl _typeSystem;
   final TypeProviderImpl _typeProvider;
   final InterfaceTypeImpl _nullNone;
   final InterfaceTypeImpl _objectNone;
   final InterfaceTypeImpl _objectQuestion;
 
-  SubtypeHelper(TypeSystemImpl typeSystem)
-      : _typeProvider = typeSystem.typeProvider,
-        _nullNone = typeSystem.nullNone,
-        _objectNone = typeSystem.objectNone,
-        _objectQuestion = typeSystem.objectQuestion;
+  SubtypeHelper(this._typeSystem)
+      : _typeProvider = _typeSystem.typeProvider,
+        _nullNone = _typeSystem.nullNone,
+        _objectNone = _typeSystem.objectNone,
+        _objectQuestion = _typeSystem.objectQuestion;
 
   /// Return `true` if [T0_] is a subtype of [T1_].
   bool isSubtypeOf(DartType T0_, DartType T1_) {
@@ -342,25 +343,13 @@
 
   /// Check that [f] is a subtype of [g].
   bool _isFunctionSubtypeOf(FunctionType f, FunctionType g) {
-    var fTypeFormals = f.typeFormals;
-    var gTypeFormals = g.typeFormals;
-
-    // The number of type parameters must be the same.
-    if (fTypeFormals.length != gTypeFormals.length) {
+    var fresh = _typeSystem.relateTypeParameters(f.typeFormals, g.typeFormals);
+    if (fresh == null) {
       return false;
     }
 
-    // The bounds of type parameters must be equal.
-    var freshTypeFormalTypes =
-        FunctionTypeImpl.relateTypeFormals(f, g, (t, s, _, __) {
-      return isSubtypeOf(t, s) && isSubtypeOf(s, t);
-    });
-    if (freshTypeFormalTypes == null) {
-      return false;
-    }
-
-    f = f.instantiate(freshTypeFormalTypes);
-    g = g.instantiate(freshTypeFormalTypes);
+    f = f.instantiate(fresh.typeParameterTypes);
+    g = g.instantiate(fresh.typeParameterTypes);
 
     if (!isSubtypeOf(f.returnType, g.returnType)) {
       return false;
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 70f398c..92ac1d9 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -180,8 +180,8 @@
       // To test this, we instantiate both types with the same (unique) type
       // variables, and see if the result is equal.
       if (typeFormals.isNotEmpty) {
-        var freshVariables = FunctionTypeImpl.relateTypeFormals(
-            this, other, (t, s, _, __) => t == s);
+        var freshVariables =
+            FunctionTypeImpl.relateTypeFormals(this, other, (t, s) => t == s);
         if (freshVariables == null) {
           return false;
         }
@@ -295,9 +295,7 @@
   static List<TypeParameterType>? relateTypeFormals(
       FunctionType f1,
       FunctionType f2,
-      bool Function(DartType bound2, DartType bound1,
-              TypeParameterElement formal2, TypeParameterElement formal1)
-          relation) {
+      bool Function(DartType bound2, DartType bound1) relation) {
     List<TypeParameterElement> params1 = f1.typeFormals;
     List<TypeParameterElement> params2 = f2.typeFormals;
     return relateTypeFormals2(params1, params2, relation);
@@ -306,9 +304,7 @@
   static List<TypeParameterType>? relateTypeFormals2(
       List<TypeParameterElement> params1,
       List<TypeParameterElement> params2,
-      bool Function(DartType bound2, DartType bound1,
-              TypeParameterElement formal2, TypeParameterElement formal1)
-          relation) {
+      bool Function(DartType bound2, DartType bound1) relation) {
     int count = params1.length;
     if (params2.length != count) {
       return null;
@@ -340,7 +336,7 @@
           .substituteType(bound1);
       bound2 = Substitution.fromPairs(variables2, variablesFresh)
           .substituteType(bound2);
-      if (!relation(bound2, bound1, p2, p1)) {
+      if (!relation(bound2, bound1)) {
         return null;
       }
 
@@ -454,10 +450,19 @@
     required this.typeArguments,
     required this.nullabilitySuffix,
     InstantiatedTypeAliasElement? alias,
-  }) : super(
-          element,
-          alias: alias,
-        );
+  }) : super(element, alias: alias) {
+    var typeParameters = element.typeParameters;
+    if (typeArguments.length != typeParameters.length) {
+      throw ArgumentError(
+        '[typeParameters.length: ${typeParameters.length}]'
+        '[typeArguments.length: ${typeArguments.length}]'
+        '[element: $element]'
+        '[reference: ${element is ClassElementImpl ? element.reference : null}]'
+        '[typeParameters: $typeParameters]'
+        '[typeArguments: $typeArguments]',
+      );
+    }
+  }
 
   @override
   List<PropertyAccessorElement> get accessors {
@@ -532,6 +537,11 @@
   }
 
   @override
+  bool get isDartCoreEnum {
+    return element.isDartCoreEnum;
+  }
+
+  @override
   bool get isDartCoreFunction {
     return element.name == "Function" && element.library.isDartCore;
   }
@@ -988,6 +998,9 @@
   bool get isDartCoreDouble => false;
 
   @override
+  bool get isDartCoreEnum => false;
+
+  @override
   bool get isDartCoreFunction => false;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index b38a654..9097f205 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -30,6 +30,20 @@
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_schema_elimination.dart';
+import 'package:analyzer/src/dart/element/well_bounded.dart';
+
+/// Fresh type parameters created to unify two lists of type parameters.
+class RelatedTypeParameters {
+  static final _empty = RelatedTypeParameters._([], []);
+
+  final List<TypeParameterElement> typeParameters;
+  final List<TypeParameterType> typeParameterTypes;
+
+  RelatedTypeParameters._(
+    this.typeParameters,
+    this.typeParameterTypes,
+  );
+}
 
 /// The [TypeSystem] implementation.
 class TypeSystemImpl implements TypeSystem {
@@ -543,7 +557,7 @@
         typeArguments: typeArguments,
         nullabilitySuffix: nullabilitySuffix,
       );
-      type = toLegacyType(type) as InterfaceType;
+      type = toLegacyTypeIfOptOut(type) as InterfaceType;
       return type;
     } else if (typeAliasElement != null) {
       var typeParameters = typeAliasElement.typeParameters;
@@ -552,7 +566,7 @@
         typeArguments: typeArguments,
         nullabilitySuffix: nullabilitySuffix,
       );
-      type = toLegacyType(type);
+      type = toLegacyTypeIfOptOut(type);
       return type;
     } else {
       throw ArgumentError('Missing element');
@@ -802,6 +816,15 @@
     return false;
   }
 
+  /// Check if [left] is equal to [right].
+  ///
+  /// Implements:
+  /// https://github.com/dart-lang/language
+  /// See `resources/type-system/subtyping.md#type-equality`
+  bool isEqualTo(DartType left, DartType right) {
+    return isSubtypeOf(left, right) && isSubtypeOf(right, left);
+  }
+
   /// A function bounded type is either `Function` itself, or a type variable
   /// whose bound is function bounded, or an intersection (promoted type
   /// parameter type) whose second operand is function bounded.
@@ -1178,6 +1201,17 @@
     return false;
   }
 
+  /// See `15.2 Super-bounded types` in the language specification.
+  TypeBoundedResult isWellBounded(
+    DartType type, {
+    required bool allowSuperBounded,
+  }) {
+    return TypeBoundedHelper(this).isWellBounded(
+      type,
+      allowSuperBounded: allowSuperBounded,
+    );
+  }
+
   /// Returns the least closure of [type] with respect to [typeParameters].
   ///
   /// https://github.com/dart-lang/language
@@ -1283,8 +1317,8 @@
         // TODO(scheglov) waiting for the spec
         // https://github.com/dart-lang/sdk/issues/42605
       } else {
-        srcType = toLegacyType(srcType);
-        destType = toLegacyType(destType);
+        srcType = toLegacyTypeIfOptOut(srcType);
+        destType = toLegacyTypeIfOptOut(destType);
       }
       if (srcType != destType) {
         // Failed to find an appropriate substitution
@@ -1411,6 +1445,72 @@
     }
   }
 
+  /// Given two lists of type parameters, check that that they have the same
+  /// number of elements, and their bounds are equal.
+  ///
+  /// The return value will be a new list of fresh type parameters, that can
+  /// be used to instantiate both function types, allowing further comparison.
+  RelatedTypeParameters? relateTypeParameters(
+    List<TypeParameterElement> typeParameters1,
+    List<TypeParameterElement> typeParameters2,
+  ) {
+    if (typeParameters1.length != typeParameters2.length) {
+      return null;
+    }
+    if (typeParameters1.isEmpty) {
+      return RelatedTypeParameters._empty;
+    }
+
+    var freshTypeParameters = <TypeParameterElementImpl>[];
+    var freshTypeParameterTypes = <TypeParameterType>[];
+    for (var i = 0; i < typeParameters1.length; i++) {
+      var freshTypeParameter = TypeParameterElementImpl(
+        typeParameters1[i].name,
+        -1,
+      );
+      freshTypeParameters.add(freshTypeParameter);
+      freshTypeParameterTypes.add(
+        TypeParameterTypeImpl(
+          element: freshTypeParameter,
+          nullabilitySuffix: NullabilitySuffix.none,
+        ),
+      );
+    }
+
+    var substitution1 = Substitution.fromPairs(
+      typeParameters1,
+      freshTypeParameterTypes,
+    );
+    var substitution2 = Substitution.fromPairs(
+      typeParameters2,
+      freshTypeParameterTypes,
+    );
+
+    for (var i = 0; i < typeParameters1.length; i++) {
+      var bound1 = typeParameters1[i].bound;
+      var bound2 = typeParameters2[i].bound;
+      if (bound1 == null && bound2 == null) {
+        continue;
+      }
+      bound1 ??= DynamicTypeImpl.instance;
+      bound2 ??= DynamicTypeImpl.instance;
+      bound1 = substitution1.substituteType(bound1);
+      bound2 = substitution2.substituteType(bound2);
+      if (!isEqualTo(bound1, bound2)) {
+        return null;
+      }
+
+      if (!bound1.isDynamic) {
+        freshTypeParameters[i].bound = bound1;
+      }
+    }
+
+    return RelatedTypeParameters._(
+      freshTypeParameters,
+      freshTypeParameterTypes,
+    );
+  }
+
   /// Replaces all covariant occurrences of `dynamic`, `void`, and `Object` or
   /// `Object?` with `Null` or `Never` and all contravariant occurrences of
   /// `Null` or `Never` with `Object` or `Object?`.
@@ -1468,17 +1568,10 @@
     return RuntimeTypeEqualityHelper(this).equal(T1, T2);
   }
 
-  DartType toLegacyType(DartType type) {
-    if (isNonNullableByDefault) return type;
-    return NullabilityEliminator.perform(typeProvider, type);
-  }
-
   /// If a legacy library, return the legacy version of the [type].
   /// Otherwise, return the original type.
   DartType toLegacyTypeIfOptOut(DartType type) {
-    if (isNonNullableByDefault) {
-      return type;
-    }
+    if (isNonNullableByDefault) return type;
     return NullabilityEliminator.perform(typeProvider, type);
   }
 
diff --git a/pkg/analyzer/lib/src/dart/element/well_bounded.dart b/pkg/analyzer/lib/src/dart/element/well_bounded.dart
new file mode 100644
index 0000000..9ca8629
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/element/well_bounded.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:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/dart/element/type_system.dart';
+
+class NotWellBoundedTypeResult implements TypeBoundedResult {
+  final String elementName;
+  final List<TypeArgumentIssue> issues;
+
+  NotWellBoundedTypeResult._({
+    required this.elementName,
+    required this.issues,
+  });
+}
+
+class RegularBoundedTypeResult implements WellBoundedTypeResult {
+  const RegularBoundedTypeResult._();
+}
+
+class SuperBoundedTypeResult implements WellBoundedTypeResult {
+  const SuperBoundedTypeResult._();
+}
+
+class TypeArgumentIssue {
+  /// The index for type argument within the passed type arguments.
+  final int index;
+
+  /// The type parameter with the bound that was violated.
+  final TypeParameterElement parameter;
+
+  /// The substituted bound of the [parameter].
+  final DartType parameterBound;
+
+  /// The type argument that violated the [parameterBound].
+  final DartType argument;
+
+  TypeArgumentIssue(
+    this.index,
+    this.parameter,
+    this.parameterBound,
+    this.argument,
+  );
+
+  @override
+  String toString() {
+    return 'TypeArgumentIssue(index=$index, parameter=$parameter, '
+        'parameterBound=$parameterBound, argument=$argument)';
+  }
+}
+
+/// Helper for checking whether a type if well-bounded.
+///
+/// See `15.2 Super-bounded types` in the language specification.
+class TypeBoundedHelper {
+  final TypeSystemImpl typeSystem;
+
+  TypeBoundedHelper(this.typeSystem);
+
+  TypeBoundedResult isWellBounded(
+    DartType type, {
+    required bool allowSuperBounded,
+  }) {
+    var result = _isRegularBounded(type);
+    if (!allowSuperBounded) {
+      return result;
+    }
+
+    return _isSuperBounded(type);
+  }
+
+  TypeBoundedResult _isRegularBounded(DartType type) {
+    List<TypeArgumentIssue>? issues;
+
+    final String elementName;
+    final List<TypeParameterElement> typeParameters;
+    final List<DartType> typeArguments;
+    final alias = type.alias;
+    if (alias != null) {
+      elementName = alias.element.name;
+      typeParameters = alias.element.typeParameters;
+      typeArguments = alias.typeArguments;
+    } else if (type is InterfaceType) {
+      elementName = type.element.name;
+      typeParameters = type.element.typeParameters;
+      typeArguments = type.typeArguments;
+    } else {
+      return const RegularBoundedTypeResult._();
+    }
+
+    final substitution = Substitution.fromPairs(typeParameters, typeArguments);
+    for (var i = 0; i < typeParameters.length; i++) {
+      var typeParameter = typeParameters[i];
+      var typeArgument = typeArguments[i];
+
+      var bound = typeParameter.bound;
+      if (bound == null) {
+        continue;
+      }
+
+      bound = typeSystem.toLegacyTypeIfOptOut(bound);
+      bound = substitution.substituteType(bound);
+
+      if (!typeSystem.isSubtypeOf(typeArgument, bound)) {
+        issues ??= <TypeArgumentIssue>[];
+        issues.add(
+          TypeArgumentIssue(i, typeParameter, bound, typeArgument),
+        );
+      }
+    }
+
+    if (issues == null) {
+      return const RegularBoundedTypeResult._();
+    } else {
+      return NotWellBoundedTypeResult._(
+        elementName: elementName,
+        issues: issues,
+      );
+    }
+  }
+
+  TypeBoundedResult _isSuperBounded(DartType type) {
+    final invertedType = typeSystem.replaceTopAndBottom(type);
+    var result = _isRegularBounded(invertedType);
+    if (result is RegularBoundedTypeResult) {
+      return const SuperBoundedTypeResult._();
+    } else {
+      return result;
+    }
+  }
+}
+
+abstract class TypeBoundedResult {}
+
+class WellBoundedTypeResult implements TypeBoundedResult {}
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 873531a..18488af 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 import "package:analyzer/src/error/analyzer_error_code.dart";
@@ -103,6 +103,7 @@
     "Fields in a struct class whose type is 'Pointer' shouldn't have any "
         "annotations.",
     correctionMessage: "Try removing the annotation.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -163,6 +164,7 @@
     'ARGUMENT_MUST_BE_A_CONSTANT',
     "Argument '{0}' must be a constant.",
     correctionMessage: "Try replacing the value with a literal or const.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -220,6 +222,7 @@
         "be instantiated by a generative constructor.",
     correctionMessage:
         "Try allocating it via allocation, or load from a 'Pointer'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -279,6 +282,7 @@
     "The class '{0}' can't be empty because it's a subclass of '{1}'.",
     correctionMessage:
         "Try adding a field to '{0}' or use a different superclass.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -323,6 +327,7 @@
     "Fields in a struct class must have exactly one annotation indicating the "
         "native type.",
     correctionMessage: "Try removing the extra annotation.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -367,6 +372,7 @@
     'EXTRA_SIZE_ANNOTATION_CARRAY',
     "'Array's must have exactly one 'Array' annotation.",
     correctionMessage: "Try removing the extra annotation.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -465,6 +471,7 @@
         "initializers.",
     correctionMessage:
         "Try removing the field initializer and marking the field as external.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -508,6 +515,7 @@
     "Fields in subclasses of 'Struct' and 'Union' can't have initializers.",
     correctionMessage:
         "Try removing the initializer and marking the field as external.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -550,6 +558,7 @@
     'FIELD_MUST_BE_EXTERNAL_IN_STRUCT',
     "Fields of 'Struct' and 'Union' subclasses must be marked external.",
     correctionMessage: "Try adding the 'external' modifier.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -592,6 +601,7 @@
     "The class '{0}' can't extend 'Struct' or 'Union' because '{0}' is "
         "generic.",
     correctionMessage: "Try removing the type parameters from '{0}'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -644,6 +654,7 @@
         "(the second argument) when the return type of the function is either "
         "'void', 'Handle' or 'Pointer'.",
     correctionMessage: "Try removing the exceptional return value.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -698,6 +709,7 @@
     correctionMessage:
         "Try using 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' "
         "or 'Union'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -758,6 +770,7 @@
     'LEAF_CALL_MUST_NOT_RETURN_HANDLE',
     "FFI leaf call can't return a 'Handle'.",
     correctionMessage: "Try changing the return type to primitive or struct.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -812,6 +825,7 @@
     'LEAF_CALL_MUST_NOT_TAKE_HANDLE',
     "FFI leaf call can't take arguments of type 'Handle'.",
     correctionMessage: "Try changing the argument type to primitive or struct.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -867,6 +881,7 @@
     correctionMessage:
         "Try using a different annotation or changing the declared type to "
         "match.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -912,6 +927,7 @@
     "Fields in a struct class must either have the type 'Pointer' or an "
         "annotation indicating the native type.",
     correctionMessage: "Try adding an annotation.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -961,6 +977,7 @@
         "(the second argument) when the return type of the function is neither "
         "'void', 'Handle', nor 'Pointer'.",
     correctionMessage: "Try adding an exceptional return value.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1012,6 +1029,7 @@
     "Fields in struct classes must have an explicitly declared type of 'int', "
         "'double' or 'Pointer'.",
     correctionMessage: "Try using 'int', 'double' or 'Pointer'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1056,6 +1074,7 @@
     correctionMessage:
         "Try adding an 'Array' annotation, or removing all but one of the "
         "annotations.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1110,6 +1129,7 @@
         "type.",
     correctionMessage:
         "Try changing the type to only use members for 'dart:ffi'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1180,6 +1200,7 @@
     'MUST_BE_A_SUBTYPE',
     "The type '{0}' must be a subtype of '{1}' for '{2}'.",
     correctionMessage: "Try changing one or both of the type arguments.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1231,6 +1252,7 @@
     "The type arguments to '{0}' must be known at compile time, so they can't "
         "be type parameters.",
     correctionMessage: "Try changing the type argument to be a constant type.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1287,6 +1309,7 @@
     correctionMessage:
         "Try changing the function argument in 'NativeFunction' to only use "
         "NativeTypes.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1329,6 +1352,7 @@
     'NON_POSITIVE_ARRAY_DIMENSION',
     "Array dimensions must be positive numbers.",
     correctionMessage: "Try changing the input to a positive number.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1378,6 +1402,7 @@
     correctionMessage:
         "Try using a native integer, 'Float', 'Double', 'Pointer', or subtype "
         "of 'Struct', 'Union', or 'AbiSpecificInteger'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1421,6 +1446,7 @@
     'PACKED_ANNOTATION',
     "Structs must have at most one 'Packed' annotation.",
     correctionMessage: "Try removing extra 'Packed' annotations.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1464,6 +1490,7 @@
     "Only packing to 1, 2, 4, 8, and 16 bytes is supported.",
     correctionMessage:
         "Try changing the 'Packed' annotation alignment to 1, 2, 4, 8, or 16.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1554,6 +1581,7 @@
     correctionMessage:
         "Try packing the nested struct or packing the nested struct more "
         "tightly.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1610,6 +1638,7 @@
     'SIZE_ANNOTATION_DIMENSIONS',
     "'Array's must have an 'Array' annotation that matches the dimensions.",
     correctionMessage: "Try adjusting the arguments in the 'Array' annotation.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1661,6 +1690,7 @@
     'SUBTYPE_OF_FFI_CLASS',
     "The class '{0}' can't extend '{1}'.",
     correctionMessage: "Try extending 'Struct' or 'Union'.",
+    hasPublishedDocs: true,
     uniqueName: 'SUBTYPE_OF_FFI_CLASS_IN_EXTENDS',
   );
 
@@ -1673,6 +1703,7 @@
     'SUBTYPE_OF_FFI_CLASS',
     "The class '{0}' can't implement '{1}'.",
     correctionMessage: "Try implementing 'Allocator' or 'Finalizable'.",
+    hasPublishedDocs: true,
     uniqueName: 'SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS',
   );
 
@@ -1685,6 +1716,7 @@
     'SUBTYPE_OF_FFI_CLASS',
     "The class '{0}' can't mix in '{1}'.",
     correctionMessage: "Try extending 'Struct' or 'Union'.",
+    hasPublishedDocs: true,
     uniqueName: 'SUBTYPE_OF_FFI_CLASS_IN_WITH',
   );
 
@@ -1743,6 +1775,7 @@
         "'Struct', 'Union', or 'AbiSpecificInteger'.",
     correctionMessage:
         "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
+    hasPublishedDocs: true,
     uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS',
   );
 
@@ -1757,6 +1790,7 @@
         "'Struct', 'Union', or 'AbiSpecificInteger'.",
     correctionMessage:
         "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
+    hasPublishedDocs: true,
     uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS',
   );
 
@@ -1771,6 +1805,7 @@
         "'Struct', 'Union', or 'AbiSpecificInteger'.",
     correctionMessage:
         "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
+    hasPublishedDocs: true,
     uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_WITH',
   );
 
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
index 6f9b09b..aa8d8df 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 import "package:analyzer/src/error/analyzer_error_code.dart";
@@ -83,17 +83,76 @@
   /**
    * Users should not assign values marked `@doNotStore`.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the value of a function
+  // (including methods and getters) that is explicitly or implicitly marked by
+  // the `[doNotStore][meta-doNotStore]` annotation is stored in either a field
+  // or top-level variable.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the value of the
+  // function `f` is being stored in the top-level variable `x`:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // @doNotStore
+  // int f() => 1;
+  //
+  // var x = [!f()!];
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Replace references to the field or variable with invocations of the
+  // function producing the value.
   static const HintCode ASSIGNMENT_OF_DO_NOT_STORE = HintCode(
     'ASSIGNMENT_OF_DO_NOT_STORE',
     "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or "
         "top-level variable.",
     correctionMessage: "Try removing the assignment.",
+    hasPublishedDocs: true,
   );
 
   /**
    * Parameters:
    * 0: the name of the declared return type
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a method or function can
+  // implicitly return `null` by falling off the end. While this is valid Dart
+  // code, it's better for the return of `null` to be explicit.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the function `f`
+  // implicitly returns `null`:
+  //
+  // ```dart
+  // String? [!f!]() {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the return of `null` is intentional, then make it explicit:
+  //
+  // ```dart
+  // String? f() {
+  //   return null;
+  // }
+  // ```
+  //
+  // If the function should return a non-null value along that path, then add
+  // the missing return statement:
+  //
+  // ```dart
+  // String? f() {
+  //   return '';
+  // }
+  // ```
   static const HintCode BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE = HintCode(
     'BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE',
     "This function has a nullable return type of '{0}', but ends without "
@@ -461,10 +520,59 @@
   /**
    * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a comment reference (the name
+  // of a declaration enclosed in square brackets in a documentation comment)
+  // uses the keyword `new` to refer to a constructor. This form is deprecated.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the unnamed
+  // constructor is being referenced using `new C`:
+  //
+  // ```dart
+  // /// See [[!new!] C].
+  // class C {
+  //   C();
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the constructor named
+  // `c` is being referenced using `new C.c`:
+  //
+  // ```dart
+  // /// See [[!new!] C.c].
+  // class C {
+  //   C.c();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If you're referencing a named constructor, then remove the keyword `new`:
+  //
+  // ```dart
+  // /// See [C.c].
+  // class C {
+  //   C.c();
+  // }
+  // ```
+  //
+  // If you're referencing the unnamed constructor, then remove the keyword
+  // `new` and append `.new` after the class name:
+  //
+  // ```dart
+  // /// See [C.new].
+  // class C {
+  //   C.c();
+  // }
+  // ```
   static const HintCode DEPRECATED_NEW_IN_COMMENT_REFERENCE = HintCode(
     'DEPRECATED_NEW_IN_COMMENT_REFERENCE',
     "Using the 'new' keyword in a comment reference is deprecated.",
     correctionMessage: "Try referring to a constructor by its name.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -866,7 +974,8 @@
   // ```
   //
   // If type arguments shouldn't be required for the class, then mark the class
-  // with the `@optionalTypeArgs` annotation (from `package:meta`):
+  // with the `[optionalTypeArgs][meta-optionalTypeArgs]` annotation (from
+  // `package:meta`):
   static const HintCode IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION = HintCode(
     'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
     "The imported library defines a top-level function named 'loadLibrary' "
@@ -878,13 +987,49 @@
   );
 
   /**
+   * No parameters.
+   *
    * https://github.com/dart-lang/sdk/issues/44063
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a library that is null safe
+  // imports a library that isn't null safe.
+  //
+  // #### Example
+  //
+  // Given a file named `a.dart` that contains the following:
+  //
+  // ```dart
+  // %uri="lib/a.dart"
+  // // @dart = 2.9
+  //
+  // class A {}
+  // ```
+  //
+  // The following code produces this diagnostic because a library that null
+  // safe is importing a library that isn't null safe:
+  //
+  // ```dart
+  // import [!'a.dart'!];
+  //
+  // A? f() => null;
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If you can migrate the imported library to be null safe, then migrate it
+  // and update or remove the migrated library's language version.
+  //
+  // If you can't migrate the imported library, then the importing library
+  // needs to have a language version that is before 2.12, when null safety was
+  // enabled by default.
   static const HintCode IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE = HintCode(
     'IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE',
-    "The library '{0}' is legacy, and should not be imported into a null safe "
+    "The library '{0}' is legacy, and shouldn't be imported into a null safe "
         "library.",
     correctionMessage: "Try migrating the imported library.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -967,37 +1112,126 @@
    * 0: the name of the annotation
    * 1: the list of valid targets
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an annotation is applied to a
+  // kind of declaration that it doesn't support.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the `optionalTypeArgs`
+  // annotation isn't defined to be valid for top-level variables:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // @[!optionalTypeArgs!]
+  // int x = 0;
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the annotation from the declaration.
   static const HintCode INVALID_ANNOTATION_TARGET = HintCode(
     'INVALID_ANNOTATION_TARGET',
-    "The annotation '{0}' can only be used on {1}",
+    "The annotation '{0}' can only be used on {1}.",
+    hasPublishedDocs: true,
   );
 
   /**
-   * This hint is generated anywhere where an element annotated with `@internal`
-   * is exported as a part of a package's public API.
-   *
    * Parameters:
    * 0: the name of the element
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a [public library][] exports a
+  // declaration that is marked with the `[internal][meta-internal]`
+  // annotation.
+  //
+  // #### Example
+  //
+  // Given a file named `a.dart` in the `src` directory that contains:
+  //
+  // ```dart
+  // %uri="lib/src/a.dart"
+  // import 'package:meta/meta.dart';
+  //
+  // @internal class One {}
+  // ```
+  //
+  // The following code, when found in a [public library][] produces this
+  // diagnostic because the `export` directive is exporting a name that is only
+  // intended to be used internally:
+  //
+  // ```dart
+  // [!export 'src/a.dart';!]
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the export is needed, then add a `hide` clause to hide the internal
+  // names:
+  //
+  // ```dart
+  // export 'src/a.dart' hide One;
+  // ```
+  //
+  // If the export isn't needed, then remove it.
   static const HintCode INVALID_EXPORT_OF_INTERNAL_ELEMENT = HintCode(
     'INVALID_EXPORT_OF_INTERNAL_ELEMENT',
     "The member '{0}' can't be exported as a part of a package's public API.",
     correctionMessage: "Try using a hide clause to hide '{0}'.",
+    hasPublishedDocs: true,
   );
 
   /**
-   * This hint is generated anywhere where an element annotated with `@internal`
-   * is exported indirectly as a part of a package's public API.
-   *
    * Parameters:
    * 0: the name of the element
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a [public library][] exports a
+  // top-level function  with a return type or at least one parameter type that
+  // is marked with the `[internal][meta-internal]` annotation.
+  //
+  // #### Example
+  //
+  // Given a file named `a.dart` in the `src` directory that contains the
+  // following:
+  //
+  // ```dart
+  // %uri="lib/src/a.dart"
+  // import 'package:meta/meta.dart';
+  //
+  // @internal
+  // typedef IntFunction = int Function();
+  //
+  // int f(IntFunction g) => g();
+  // ```
+  //
+  // The following code produces this diagnostic because the function `f` has a
+  // parameter of type `IntFunction`, and `IntFunction` is only intended to be
+  // used internally:
+  //
+  // ```dart
+  // [!export 'src/a.dart' show f;!]
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the function must be public, then make all the types in the function's
+  // signature public types.
+  //
+  // If the function doesn't need to be exported, then stop exporting it,
+  // either by removing it from the `show` clause, adding it to the `hide`
+  // clause, or by removing the export.
   static const HintCode INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY =
       HintCode(
     'INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY',
     "The member '{0}' can't be exported as a part of a package's public API, "
         "but is indirectly exported as part of the signature of '{1}'.",
     correctionMessage: "Try using a hide clause to hide '{0}'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1010,25 +1244,97 @@
   );
 
   /**
-   * This hint is generated anywhere a @factory annotation is associated with
-   * a method that does not declare a return type.
+   * Parameters:
+   * 0: The name of the method
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a method that is annotated with
+  // the `[factory][meta-factory]` annotation has a return type of `void`.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the method `createC`
+  // is annotated with the `[factory][meta-factory]` annotation but doesn't
+  // return any value:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // class Factory {
+  //   @factory
+  //   void [!createC!]() {}
+  // }
+  //
+  // class C {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Change the return type to something other than `void`:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // class Factory {
+  //   @factory
+  //   C createC() => C();
+  // }
+  //
+  // class C {}
+  // ```
   static const HintCode INVALID_FACTORY_METHOD_DECL = HintCode(
     'INVALID_FACTORY_METHOD_DECL',
     "Factory method '{0}' must have a return type.",
+    hasPublishedDocs: true,
   );
 
   /**
-   * This hint is generated anywhere a @factory annotation is associated with
-   * a non-abstract method that can return anything other than a newly allocated
-   * object.
-   *
    * Parameters:
    * 0: the name of the method
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a method that is annotated with
+  // the `[factory][meta-factory]` annotation doesn't return a newly allocated
+  // object.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the method `createC`
+  // returns the value of a field rather than a newly created instance of `C`:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // class Factory {
+  //   C c = C();
+  //
+  //   @factory
+  //   C [!createC!]() => c;
+  // }
+  //
+  // class C {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Change the method to return a newly created instance of the return type:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // class Factory {
+  //   @factory
+  //   C createC() => C();
+  // }
+  //
+  // class C {}
+  // ```
   static const HintCode INVALID_FACTORY_METHOD_IMPL = HintCode(
     'INVALID_FACTORY_METHOD_IMPL',
     "Factory method '{0}' doesn't return a newly allocated object.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1041,108 +1347,153 @@
   );
 
   /**
-   * This hint is generated anywhere a @internal annotation is associated with
-   * an element found in a package's public API.
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a declaration is annotated with
+  // the `[internal][meta-internal]` annotation and that declaration is either
+  // in a [public library][] or has a private name.
+  //
+  // #### Example
+  //
+  // The following code, when in a [public library][], produces this diagnostic
+  // because the `[internal][meta-internal]` annotation can't be applied to
+  // declarations in a [public library][]:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // [!@internal!]
+  // class C {}
+  // ```
+  //
+  // The following code, whether in a public or internal library, produces this
+  // diagnostic because the `[internal][meta-internal]` annotation can't be
+  // applied to declarations with private names:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // [!@internal!]
+  // class _C {}
+  //
+  // void f(_C c) {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the declaration has a private name, then remove the annotation:
+  //
+  // ```dart
+  // class _C {}
+  //
+  // void f(_C c) {}
+  // ```
+  //
+  // If the declaration has a public name and is intended to be internal to the
+  // package, then move the annotated declaration into an internal library (in
+  // other words, a library inside the `src` directory).
+  //
+  // Otherwise, remove the use of the annotation:
+  //
+  // ```dart
+  // class C {}
+  // ```
   static const HintCode INVALID_INTERNAL_ANNOTATION = HintCode(
     'INVALID_INTERNAL_ANNOTATION',
     "Only public elements in a package's private API can be annotated as being "
         "internal.",
+    hasPublishedDocs: true,
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a comment that appears to be an
+  // attempt to specify a language version override doesn't conform to the
+  // requirements for such a comment. For more information, see
+  // [Per-library language version selection](https://dart.dev/guides/language/evolution#per-library-language-version-selection).
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the word `dart` must
+  // be lowercase in such a comment and because there's no equal sign between
+  // the word `dart` and the version number:
+  //
+  // ```dart
+  // [!// @Dart 2.9!]
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the comment is intended to be a language version override, then change
+  // the comment to follow the correct format:
+  //
+  // ```dart
+  // // @dart = 2.9
+  // ```
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    "The Dart language version override number must begin with '@dart'",
+    "The Dart language version override number must begin with '@dart'.",
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment must be specified with an '=' "
-        "character",
+        "character.",
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
   );
 
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The language version override can't specify a version greater than the "
-        "latest known language version: {0}.{1}",
+        "latest known language version: {0}.{1}.",
     correctionMessage: "Try removing the language version override.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
   );
 
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    "The language version override must be before any declaration or "
+    "The language version override must be specified before any declaration or "
         "directive.",
     correctionMessage:
         "Try moving the language version override to the top of the file.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment must be specified with the "
-        "word 'dart' in all lower case",
+        "word 'dart' in all lower case.",
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
@@ -1151,64 +1502,41 @@
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX = HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    "The Dart language version override number can't be prefixed with a letter",
+    "The Dart language version override number can't be prefixed with a "
+        "letter.",
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS =
       HintCode(
     'INVALID_LANGUAGE_VERSION_OVERRIDE',
     "The Dart language version override comment can't be followed by any "
-        "non-whitespace characters",
+        "non-whitespace characters.",
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
   );
 
   /**
-   * Invalid Dart language version comments don't follow the specification [1].
-   * If a comment begins with "@dart" or "dart" (letters in any case),
-   * followed by optional whitespace, followed by optional non-alphanumeric,
-   * non-whitespace characters, followed by optional whitespace, followed by
-   * an optional alphabetical character, followed by a digit, then the
-   * comment is considered to be an attempt at a language version override
-   * comment. If this attempted language version override comment is not a
-   * valid language version override comment, it is reported.
-   *
-   * [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+   * No parameters.
    */
   static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES =
       HintCode(
@@ -1218,6 +1546,7 @@
     correctionMessage:
         "Specify a Dart language version override with a comment like '// "
         "@dart = 2.0'.",
+    hasPublishedDocs: true,
     uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
   );
 
@@ -1226,8 +1555,8 @@
    */
   // #### Description
   //
-  // The analyzer produces this diagnostic when the `@literal` annotation is
-  // applied to anything other than a const constructor.
+  // The analyzer produces this diagnostic when the `[literal][[meta-literal]]`
+  // annotation is applied to anything other than a const constructor.
   //
   // #### Examples
   //
@@ -1364,15 +1693,44 @@
   );
 
   /**
-   * This hint is generated anywhere where a member annotated with `@internal`
-   * is used outside of the package in which it is declared.
-   *
    * Parameters:
    * 0: the name of the member
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a reference to a declaration
+  // that is annotated with the `[internal][meta-internal]` annotation is found
+  // outside the package containing the declaration.
+  //
+  // #### Example
+  //
+  // Given a package `p` that defines a library containing a declaration marked
+  // with the `[internal][meta-internal]` annotation:
+  //
+  // ```dart
+  // %uri="package:p/src/p.dart"
+  // import 'package:meta/meta.dart';
+  //
+  // @internal
+  // class C {}
+  // ```
+  //
+  // The following code produces this diagnostic because it's referencing the
+  // class `C`, which isn't intended to be used outside the package `p`:
+  //
+  // ```dart
+  // import 'package:p/src/p.dart';
+  //
+  // void f([!C!] c) {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the reference to the internal declaration.
   static const HintCode INVALID_USE_OF_INTERNAL_MEMBER = HintCode(
     'INVALID_USE_OF_INTERNAL_MEMBER',
     "The member '{0}' can only be used within its package.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -1396,8 +1754,9 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when an instance member that is
-  // annotated with `visibleForOverriding` is referenced outside the library in
-  // which it's declared for any reason other than to override it.
+  // annotated with `[visibleForOverriding][meta-visibleForOverriding]` is
+  // referenced outside the library in which it's declared for any reason other
+  // than to override it.
   //
   // #### Example
   //
@@ -1472,8 +1831,9 @@
    */
   // #### Description
   //
-  // The analyzer produces this diagnostic when either the `@visibleForTemplate`
-  // or `@visibleForTesting` annotation is applied to a non-public declaration.
+  // The analyzer produces this diagnostic when either the `visibleForTemplate`
+  // or `[visibleForTesting][meta-visibleForTesting]` annotation is applied to
+  // a non-public declaration.
   //
   // #### Example
   //
@@ -1522,9 +1882,10 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when anything other than a public
-  // instance member of a class is annotated with `visibleForOverriding`.
-  // Because only public instance members can be overridden outside the defining
-  // library, there's no value to annotating any other declarations.
+  // instance member of a class is annotated with
+  // `[visibleForOverriding][meta-visibleForOverriding]`. Because only public
+  // instance members can be overridden outside the defining library, there's
+  // no value to annotating any other declarations.
   //
   // #### Example
   //
@@ -1663,9 +2024,9 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when the superclass constraint of a
-  // mixin is a class from a different package that was marked as `@sealed`.
-  // Classes that are sealed can't be extended, implemented, mixed in, or used
-  // as a superclass constraint.
+  // mixin is a class from a different package that was marked as
+  // `[sealed][meta-sealed]`. Classes that are sealed can't be extended,
+  // implemented, mixed in, or used as a superclass constraint.
   //
   // #### Example
   //
@@ -1712,8 +2073,8 @@
   //
   // The analyzer produces this diagnostic when an immutable class defines one
   // or more instance fields that aren't final. A class is immutable if it's
-  // marked as being immutable using the annotation `@immutable` or if it's a
-  // subclass of an immutable class.
+  // marked as being immutable using the annotation
+  // `[immutable][meta-immutable]` or if it's a subclass of an immutable class.
   //
   // #### Example
   //
@@ -1773,8 +2134,8 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a method that overrides a method
-  // that is annotated as `@mustCallSuper` doesn't invoke the overridden method
-  // as required.
+  // that is annotated as `[mustCallSuper][meta-mustCallSuper]` doesn't invoke
+  // the overridden method as required.
   //
   // #### Example
   //
@@ -1831,10 +2192,10 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a constructor that has the
-  // `@literal` annotation is invoked without using the `const` keyword, but all
-  // of the arguments to the constructor are constants. The annotation indicates
-  // that the constructor should be used to create a constant value whenever
-  // possible.
+  // `[literal][meta-literal]` annotation is invoked without using the `const`
+  // keyword, but all of the arguments to the constructor are constants. The
+  // annotation indicates that the constructor should be used to create a
+  // constant value whenever possible.
   //
   // #### Example
   //
@@ -2009,13 +2370,47 @@
   );
 
   /**
-   * This hint indicates that a null literal is null-checked with `!`, but null
-   * is never not null.
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the null check operator (`!`)
+  // is used on an expression whose value can only be `null`. In such a case
+  // the operator always throws an exception, which likely isn't the intended
+  // behavior.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the function `g` will
+  // always return `null`, which means that the null check in `f` will always
+  // throw:
+  //
+  // ```dart
+  // void f() {
+  //   [!g()!!];
+  // }
+  //
+  // Null g() => null;
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If you intend to always throw an exception, then replace the null check
+  // with an explicit `throw` expression to make the intent more clear:
+  //
+  // ```dart
+  // void f() {
+  //   g();
+  //   throw TypeError();
+  // }
+  //
+  // Null g() => null;
+  // ```
   static const HintCode NULL_CHECK_ALWAYS_FAILS = HintCode(
     'NULL_CHECK_ALWAYS_FAILS',
     "This null-check will always throw an exception because the expression "
         "will always evaluate to 'null'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -2145,14 +2540,62 @@
   );
 
   /**
-   * Users should not return values marked `@doNotStore` from functions,
-   * methods or getters not marked `@doNotStore`.
+   * Parameters:
+   * 0: the name of the annotated function being invoked
+   * 1: the name of the function containing the return
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a value that is annotated with
+  // the `[doNotStore][meta-doNotStore]` annotation is returned from a method,
+  // getter, or function that doesn't have the same annotation.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the result of invoking
+  // `f` shouldn't be stored, but the function `g` isn't annotated to preserve
+  // that semantic:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // @doNotStore
+  // int f() => 0;
+  //
+  // int g() => [!f()!];
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the value that shouldn't be stored is the correct value to return, then
+  // mark the function with the `[doNotStore][meta-doNotStore]` annotation:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // @doNotStore
+  // int f() => 0;
+  //
+  // @doNotStore
+  // int g() => f();
+  // ```
+  //
+  // Otherwise, return a different value from the function:
+  //
+  // ```dart
+  // import 'package:meta/meta.dart';
+  //
+  // @doNotStore
+  // int f() => 0;
+  //
+  // int g() => 0;
+  // ```
   static const HintCode RETURN_OF_DO_NOT_STORE = HintCode(
     'RETURN_OF_DO_NOT_STORE',
     "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless "
         "'{1}' is also annotated.",
     correctionMessage: "Annotate '{1}' with 'doNotStore'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -2955,10 +3398,10 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a sealed class (one that either
-  // has the `@sealed` annotation or inherits or mixes in a sealed class) is
-  // referenced in either the `extends`, `implements`, or `with` clause of a
-  // class or mixin declaration if the declaration isn't in the same package as
-  // the sealed class.
+  // has the `[sealed][meta-sealed]` annotation or inherits or mixes in a
+  // sealed class) is referenced in either the `extends`, `implements`, or
+  // `with` clause of a class or mixin declaration if the declaration isn't in
+  // the same package as the sealed class.
   //
   // #### Example
   //
@@ -3213,8 +3656,8 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when an annotation of the form
-  // `@UnusedResult.unless(parameterDefined: parameterName)` specifies a
-  // parameter name that isn't defined by the annotated function.
+  // `[UseResult][meta-UseResult].unless(parameterDefined: parameterName)`
+  // specifies a parameter name that isn't defined by the annotated function.
   //
   // #### Example
   //
@@ -3941,16 +4384,16 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a function annotated with
-  // `useResult` is invoked, and the value returned by that function isn't used.
-  // The value is considered to be used if a member of the value is invoked, if
-  // the value is passed to another function, or if the value is assigned to a
-  // variable or field.
+  // `[useResult][meta-useResult]` is invoked, and the value returned by that
+  // function isn't used. The value is considered to be used if a member of the
+  // value is invoked, if the value is passed to another function, or if the
+  // value is assigned to a variable or field.
   //
   // #### Example
   //
   // The following code produces this diagnostic because the invocation of
   // `c.a()` isn't used, even though the method `a` is annotated with
-  // `useResult`:
+  // `[useResult][meta-useResult]`:
   //
   // ```dart
   // import 'package:meta/meta.dart';
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 1a6f7b2..06dc036 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 
@@ -135,6 +135,9 @@
   ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS,
   ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR,
   ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR,
+  ParserErrorCode.MULTIPLE_CLAUSES,
+  ParserErrorCode.OUT_OF_ORDER_CLAUSES,
+  ParserErrorCode.UNEXPECTED_TOKENS,
 ];
 
 class ParserErrorCode extends ErrorCode {
@@ -458,6 +461,13 @@
     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.",
@@ -781,6 +791,7 @@
     'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
     "Field formal parameters can only be used in a constructor.",
     correctionMessage: "Try removing 'this.'.",
+    hasPublishedDocs: true,
   );
 
   static const ParserErrorCode FINAL_AND_COVARIANT = ParserErrorCode(
@@ -1287,6 +1298,13 @@
     correctionMessage: "Try re-ordering the modifiers.",
   );
 
+  static const ParserErrorCode MULTIPLE_CLAUSES = ParserErrorCode(
+    'MULTIPLE_CLAUSES',
+    "Each '{0}' definition can have at most one '{1}' clause.",
+    correctionMessage:
+        "Try combining all of the '{1}' clauses into a single clause.",
+  );
+
   static const ParserErrorCode MULTIPLE_EXTENDS_CLAUSES = ParserErrorCode(
     'MULTIPLE_EXTENDS_CLAUSES',
     "Each class definition can have at most one extends clause.",
@@ -1461,6 +1479,12 @@
         "sequence.",
   );
 
+  static const ParserErrorCode OUT_OF_ORDER_CLAUSES = ParserErrorCode(
+    'OUT_OF_ORDER_CLAUSES',
+    "The '{0}' clause must come before the '{1}' clause.",
+    correctionMessage: "Try moving the '{0}' clause before the '{1}' clause.",
+  );
+
   static const ParserErrorCode POSITIONAL_AFTER_NAMED_ARGUMENT =
       ParserErrorCode(
     'POSITIONAL_AFTER_NAMED_ARGUMENT',
@@ -1629,6 +1653,11 @@
     correctionMessage: "Try removing the text.",
   );
 
+  static const ParserErrorCode UNEXPECTED_TOKENS = ParserErrorCode(
+    'UNEXPECTED_TOKENS',
+    "Unexpected tokens.",
+  );
+
   static const ParserErrorCode VAR_AND_TYPE = ParserErrorCode(
     'VAR_AND_TYPE',
     "Variables can't be declared using both 'var' and a type name.",
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index 0652729..6e65351 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -495,7 +495,7 @@
     AnalysisErrorListener errorListener = _getErrorListener(file);
     var unit = file.parse(errorListener, content);
 
-    LineInfo lineInfo = unit.lineInfo!;
+    LineInfo lineInfo = unit.lineInfo;
     _fileToLineInfo[file] = lineInfo;
     _fileToIgnoreInfo[file] = IgnoreInfo.forDart(unit, content);
 
diff --git a/pkg/analyzer/lib/src/dart/micro/library_graph.dart b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
index 6476871..9597bff 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_graph.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_graph.dart
@@ -870,10 +870,10 @@
       location.source,
       errorListener,
       featureSet: scanner.featureSet,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = true;
     var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = lineInfo;
 
     // StringToken uses a static instance of StringCanonicalizer, so we need
     // to clear it explicitly once we are done using it for this file.
@@ -961,7 +961,7 @@
       hasPartOfDirective: hasPartOfDirective,
       imports: imports,
       informativeBytes: writeUnitInformative(unit),
-      lineStarts: Uint32List.fromList(unit.lineInfo!.lineStarts),
+      lineStarts: Uint32List.fromList(unit.lineInfo.lineStarts),
       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 ac5a4809..73c6f51 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -204,7 +204,7 @@
             references.add(CiderSearchMatch(
                 path,
                 offsets
-                    .map((offset) => lineInfo?.getLocation(offset))
+                    .map((offset) => lineInfo.getLocation(offset))
                     .toList()));
           }
         });
diff --git a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
index 192c94c..46980c7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
@@ -2,17 +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/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/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/extensions.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/resolver/invocation_inference_helper.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -25,9 +21,6 @@
 
   ErrorReporter get _errorReporter => _resolver.errorReporter;
 
-  bool get _genericMetadataIsEnabled =>
-      _definingLibrary.featureSet.isEnabled(Feature.generic_metadata);
-
   void resolve(
       AnnotationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList) {
     node.typeArguments?.accept(_resolver);
@@ -112,127 +105,35 @@
     constructorElement = _resolver.toLegacyElement(constructorElement);
     constructorName?.staticElement = constructorElement;
     node.element = constructorElement;
+    var annotationInferrer =
+        AnnotationInferrer(constructorName: constructorName);
 
     if (constructorElement == null) {
       _errorReporter.reportErrorForNode(
         CompileTimeErrorCode.INVALID_ANNOTATION,
         node,
       );
-      _resolver.visitArgumentList(argumentList,
+      annotationInferrer.resolveInvocation(
+          resolver: _resolver,
+          node: node,
+          rawType: null,
+          contextType: null,
           whyNotPromotedList: whyNotPromotedList);
       return;
     }
 
-    // If no type parameters, the elements are correct.
-    if (typeParameters.isEmpty) {
-      var typeArgumentList = node.typeArguments;
-      if (typeArgumentList != null) {
-        _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS,
-          typeArgumentList,
-          [
-            typeDisplayName,
-            typeParameters.length,
-            typeArgumentList.arguments.length,
-          ],
-        );
-      }
-      _resolveConstructorInvocationArguments(node);
-      InferenceContext.setType(argumentList, constructorElement.type);
-      _resolver.visitArgumentList(argumentList,
-          whyNotPromotedList: whyNotPromotedList);
-      return;
-    }
-
-    void resolveWithFixedTypeArguments(
-      List<DartType> typeArguments,
-      ConstructorElement constructorElement,
-    ) {
-      var type = instantiateElement(typeArguments);
-      constructorElement = ConstructorMember.from(constructorElement, type);
-      constructorName?.staticElement = constructorElement;
-      node.element = constructorElement;
-      _resolveConstructorInvocationArguments(node);
-
-      InferenceContext.setType(argumentList, constructorElement.type);
-      _resolver.visitArgumentList(argumentList,
-          whyNotPromotedList: whyNotPromotedList);
-    }
-
-    if (!_genericMetadataIsEnabled) {
-      var typeArguments = List.filled(
-        typeParameters.length,
-        DynamicTypeImpl.instance,
-      );
-      resolveWithFixedTypeArguments(typeArguments, constructorElement);
-      return;
-    }
-
-    var typeArgumentList = node.typeArguments;
-    if (typeArgumentList != null) {
-      List<DartType> typeArguments;
-      if (typeArgumentList.arguments.length == typeParameters.length) {
-        typeArguments = typeArgumentList.arguments
-            .map((element) => element.typeOrThrow)
-            .toList();
-        var substitution = Substitution.fromPairs(
-          typeParameters,
-          typeArguments,
-        );
-        for (var i = 0; i < typeParameters.length; i++) {
-          var typeParameter = typeParameters[i];
-          var bound = typeParameter.bound;
-          if (bound != null) {
-            bound = substitution.substituteType(bound);
-            var typeArgument = typeArguments[i];
-            if (!_resolver.typeSystem.isSubtypeOf(typeArgument, bound)) {
-              _errorReporter.reportErrorForNode(
-                CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
-                typeArgumentList.arguments[i],
-                [typeArgument, typeParameter.name, bound],
-              );
-            }
-          }
-        }
-      } else {
-        _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS,
-          typeArgumentList,
-          [
-            typeDisplayName,
-            typeParameters.length,
-            typeArgumentList.arguments.length,
-          ],
-        );
-        typeArguments = List.filled(
-          typeParameters.length,
-          DynamicTypeImpl.instance,
-        );
-      }
-      resolveWithFixedTypeArguments(typeArguments, constructorElement);
-      return;
-    }
-
-    _resolver.visitArgumentList(argumentList,
-        whyNotPromotedList: whyNotPromotedList);
-
     var elementToInfer = ConstructorElementToInfer(
       typeParameters,
       constructorElement,
     );
     var constructorRawType = elementToInfer.asType;
 
-    var inferred = _resolver.inferenceHelper.inferGenericInvoke(
-        node, constructorRawType, typeArgumentList, argumentList, node,
-        isConst: true)!;
-
-    constructorElement = ConstructorMember.from(
-      constructorElement,
-      inferred.returnType as InterfaceType,
-    );
-    constructorName?.staticElement = constructorElement;
-    node.element = constructorElement;
-    _resolveConstructorInvocationArguments(node);
+    annotationInferrer.resolveInvocation(
+        resolver: _resolver,
+        node: node,
+        rawType: constructorRawType,
+        contextType: null,
+        whyNotPromotedList: whyNotPromotedList);
   }
 
   void _extensionGetter(
@@ -432,24 +333,6 @@
     }
   }
 
-  void _resolveConstructorInvocationArguments(AnnotationImpl node) {
-    var argumentList = node.arguments;
-    // error will be reported in ConstantVerifier
-    if (argumentList == null) {
-      return;
-    }
-    // resolve arguments to parameters
-    var constructor = node.element;
-    if (constructor is ConstructorElement) {
-      argumentList.correspondingStaticParameters =
-          ResolverVisitor.resolveArgumentsToParameters(
-        argumentList: argumentList,
-        parameters: constructor.parameters,
-        errorReporter: _errorReporter,
-      );
-    }
-  }
-
   void _typeAliasConstructorInvocation(
     AnnotationImpl node,
     TypeAliasElement typeAliasElement,
@@ -516,7 +399,11 @@
       AnnotationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList) {
     var arguments = node.arguments;
     if (arguments != null) {
-      _resolver.visitArgumentList(arguments,
+      AnnotationInferrer(constructorName: null).resolveInvocation(
+          resolver: _resolver,
+          node: node,
+          rawType: null,
+          contextType: null,
           whyNotPromotedList: whyNotPromotedList);
     }
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
index 718c99b..f9b9cc8 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -42,7 +42,8 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
-  void resolve(AssignmentExpressionImpl node) {
+  void resolve(AssignmentExpressionImpl node,
+      {required DartType? contextType}) {
     var operator = node.operator.type;
     var hasRead = operator != TokenType.EQ;
     var isIfNull = operator == TokenType.QUESTION_QUESTION_EQ;
@@ -69,13 +70,14 @@
     // TODO(scheglov) Use VariableElement and do in resolveForWrite() ?
     _assignmentShared.checkFinalAlreadyAssigned(left);
 
+    DartType? rhsContext;
     {
       var leftType = node.writeType;
       if (writeElement is VariableElement) {
         leftType = _resolver.localVariableTypeProvider
             .getType(left as SimpleIdentifier, isRead: false);
       }
-      _setRhsContext(node, leftType!, operator, right);
+      rhsContext = _computeRhsContext(node, leftType!, operator, right);
     }
 
     var flow = _resolver.flowAnalysis.flow;
@@ -83,11 +85,12 @@
       flow.ifNullExpression_rightBegin(left, node.readType!);
     }
 
-    right.accept(_resolver);
+    _resolver.analyzeExpression(right, rhsContext);
     right = node.rightHandSide;
     var whyNotPromoted = flow?.whyNotPromoted(right);
 
-    _resolveTypes(node, whyNotPromoted: whyNotPromoted);
+    _resolveTypes(node,
+        whyNotPromoted: whyNotPromoted, contextType: contextType);
 
     if (flow != null) {
       if (writeElement is PromotableElement) {
@@ -147,6 +150,28 @@
     return true;
   }
 
+  DartType? _computeRhsContext(AssignmentExpressionImpl node, DartType leftType,
+      TokenType operator, Expression right) {
+    switch (operator) {
+      case TokenType.EQ:
+      case TokenType.QUESTION_QUESTION_EQ:
+        return leftType;
+      case TokenType.AMPERSAND_AMPERSAND_EQ:
+      case TokenType.BAR_BAR_EQ:
+        return _typeProvider.boolType;
+      default:
+        var method = node.staticElement;
+        if (method != null) {
+          var parameters = method.parameters;
+          if (parameters.isNotEmpty) {
+            return _typeSystem.refineNumericInvocationContext(
+                leftType, method, leftType, parameters[0].type);
+          }
+        }
+        return null;
+    }
+  }
+
   void _resolveOperator(AssignmentExpressionImpl node) {
     var left = node.leftHandSide;
     var operator = node.operator;
@@ -200,29 +225,19 @@
   }
 
   void _resolveTypes(AssignmentExpressionImpl node,
-      {required Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
+      {required Map<DartType, NonPromotionReason> Function()? whyNotPromoted,
+      required DartType? contextType}) {
     DartType assignedType;
-    DartType nodeType;
 
     var rightHandSide = node.rightHandSide;
     var operator = node.operator.type;
     if (operator == TokenType.EQ) {
       assignedType = rightHandSide.typeOrThrow;
-      nodeType = assignedType;
     } else if (operator == TokenType.QUESTION_QUESTION_EQ) {
-      var leftType = node.readType!;
-
-      // The LHS value will be used only if it is non-null.
-      if (_isNonNullableByDefault) {
-        leftType = _typeSystem.promoteToNonNull(leftType);
-      }
-
       assignedType = rightHandSide.typeOrThrow;
-      nodeType = _typeSystem.getLeastUpperBound(leftType, assignedType);
     } else if (operator == TokenType.AMPERSAND_AMPERSAND_EQ ||
         operator == TokenType.BAR_BAR_EQ) {
       assignedType = _typeProvider.boolType;
-      nodeType = assignedType;
     } else {
       var operatorElement = node.staticElement;
       if (operatorElement != null) {
@@ -238,14 +253,22 @@
       } else {
         assignedType = DynamicTypeImpl.instance;
       }
-      nodeType = assignedType;
     }
 
-    _inferenceHelper.recordStaticType(node, nodeType);
-    var callReference = _resolver.insertImplicitCallReference(rightHandSide);
-    if (callReference != rightHandSide) {
-      assignedType = callReference.typeOrThrow;
+    DartType nodeType;
+    if (operator == TokenType.QUESTION_QUESTION_EQ) {
+      var leftType = node.readType!;
+
+      // The LHS value will be used only if it is non-null.
+      if (_isNonNullableByDefault) {
+        leftType = _typeSystem.promoteToNonNull(leftType);
+      }
+
+      nodeType = _typeSystem.getLeastUpperBound(leftType, assignedType);
+    } else {
+      nodeType = assignedType;
     }
+    _inferenceHelper.recordStaticType(node, nodeType, contextType: contextType);
 
     // TODO(scheglov) Remove from ErrorVerifier?
     _checkForInvalidAssignment(
@@ -260,32 +283,6 @@
           whyNotPromoted: whyNotPromoted);
     }
   }
-
-  void _setRhsContext(AssignmentExpressionImpl node, DartType leftType,
-      TokenType operator, Expression right) {
-    switch (operator) {
-      case TokenType.EQ:
-      case TokenType.QUESTION_QUESTION_EQ:
-        InferenceContext.setType(right, leftType);
-        break;
-      case TokenType.AMPERSAND_AMPERSAND_EQ:
-      case TokenType.BAR_BAR_EQ:
-        InferenceContext.setType(right, _typeProvider.boolType);
-        break;
-      default:
-        var method = node.staticElement;
-        if (method != null) {
-          var parameters = method.parameters;
-          if (parameters.isNotEmpty) {
-            InferenceContext.setType(
-                right,
-                _typeSystem.refineNumericInvocationContext(
-                    leftType, method, leftType, parameters[0].type));
-          }
-        }
-        break;
-    }
-  }
 }
 
 class AssignmentExpressionShared {
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index 61f364e..0fdb8cc 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -45,7 +45,7 @@
       // Either `new` or `const` has been specified.
       return node;
     }
-    var typeName = node.constructorName.type2.name;
+    var typeName = node.constructorName.type.name;
     if (typeName is SimpleIdentifier) {
       var element = nameScope.lookup(typeName.name).getter;
       if (element is FunctionElement ||
@@ -525,8 +525,8 @@
     required TypeAliasElement element,
   }) {
     var typeName = astFactory.namedType(
-      name: node.constructorName.type2.name,
-      typeArguments: node.constructorName.type2.typeArguments,
+      name: node.constructorName.type.name,
+      typeArguments: node.constructorName.type.typeArguments,
     );
     typeName.type = element.aliasedType;
     typeName.name.staticType = element.aliasedType;
@@ -543,18 +543,24 @@
     return methodInvocation;
   }
 
-  MethodInvocation _toMethodInvocationOfFunctionReference({
+  AstNode _toMethodInvocationOfFunctionReference({
     required InstanceCreationExpression node,
     required Identifier function,
   }) {
+    var period = node.constructorName.period;
+    var constructorId = node.constructorName.name;
+    if (period == null || constructorId == null) {
+      return node;
+    }
+
     var functionReference = astFactory.functionReference(
       function: function,
-      typeArguments: node.constructorName.type2.typeArguments,
+      typeArguments: node.constructorName.type.typeArguments,
     );
     var methodInvocation = astFactory.methodInvocation(
       functionReference,
-      node.constructorName.period,
-      node.constructorName.name!,
+      period,
+      constructorId,
       null,
       node.argumentList,
     );
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 ad08e2b..5e1246d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -39,31 +39,32 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
-  void resolve(BinaryExpressionImpl node) {
+  void resolve(BinaryExpressionImpl node, {required DartType? contextType}) {
     var operator = node.operator.type;
 
     if (operator == TokenType.AMPERSAND_AMPERSAND) {
-      _resolveLogicalAnd(node);
+      _resolveLogicalAnd(node, contextType: contextType);
       return;
     }
 
     if (operator == TokenType.BANG_EQ || operator == TokenType.EQ_EQ) {
-      _resolveEqual(node, notEqual: operator == TokenType.BANG_EQ);
+      _resolveEqual(node,
+          notEqual: operator == TokenType.BANG_EQ, contextType: contextType);
       return;
     }
 
     if (operator == TokenType.BAR_BAR) {
-      _resolveLogicalOr(node);
+      _resolveLogicalOr(node, contextType: contextType);
       return;
     }
 
     if (operator == TokenType.QUESTION_QUESTION) {
-      _resolveIfNull(node);
+      _resolveIfNull(node, contextType: contextType);
       return;
     }
 
     if (operator.isUserDefinableOperator && operator.isBinaryOperator) {
-      _resolveUserDefinable(node);
+      _resolveUserDefinable(node, contextType: contextType);
       return;
     }
 
@@ -75,7 +76,7 @@
           [operator.lexeme]);
     }
 
-    _resolveUnsupportedOperator(node);
+    _resolveUnsupportedOperator(node, contextType: contextType);
   }
 
   /// Set the static type of [node] to be the least upper bound of the static
@@ -83,12 +84,14 @@
   ///
   /// TODO(scheglov) this is duplicate
   void _analyzeLeastUpperBoundTypes(
-      ExpressionImpl node, DartType staticType1, DartType staticType2) {
+      ExpressionImpl node, DartType staticType1, DartType staticType2,
+      {required DartType? contextType}) {
     var staticType = _typeSystem.getLeastUpperBound(staticType1, staticType2);
 
     staticType = _resolver.toLegacyTypeIfOptOut(staticType);
 
-    _inferenceHelper.recordStaticType(node, staticType);
+    _inferenceHelper.recordStaticType(node, staticType,
+        contextType: contextType);
   }
 
   void _checkNonBoolOperand(Expression operand, String operator,
@@ -101,7 +104,8 @@
     );
   }
 
-  void _resolveEqual(BinaryExpressionImpl node, {required bool notEqual}) {
+  void _resolveEqual(BinaryExpressionImpl node,
+      {required bool notEqual, required DartType? contextType}) {
     var left = node.leftOperand;
     left.accept(_resolver);
     left = node.leftOperand;
@@ -126,64 +130,63 @@
       TokenType.EQ_EQ.lexeme,
       promoteLeftTypeToNonNull: true,
     );
-    _resolveUserDefinableType(node);
+    _resolveUserDefinableType(node, contextType: contextType);
     _resolver.checkForArgumentTypeNotAssignableForArgument(node.rightOperand,
         promoteParameterToNullable: true, whyNotPromoted: whyNotPromoted);
   }
 
-  void _resolveIfNull(BinaryExpressionImpl node) {
+  void _resolveIfNull(BinaryExpressionImpl node,
+      {required DartType? contextType}) {
     var left = node.leftOperand;
     var right = node.rightOperand;
     var flow = _resolver.flowAnalysis.flow;
 
-    var leftContextType = InferenceContext.getContext(node);
+    var leftContextType = contextType;
     if (leftContextType != null && _isNonNullableByDefault) {
       leftContextType = _typeSystem.makeNullable(leftContextType);
     }
-    InferenceContext.setType(left, leftContextType);
 
-    left.accept(_resolver);
+    _resolver.analyzeExpression(left, leftContextType);
     left = node.leftOperand;
     var leftType = left.typeOrThrow;
 
-    var rightContextType = InferenceContext.getContext(node);
+    var rightContextType = contextType;
     if (rightContextType == null || rightContextType.isDynamic) {
       rightContextType = leftType;
     }
-    InferenceContext.setType(right, rightContextType);
 
     flow?.ifNullExpression_rightBegin(left, leftType);
-    right.accept(_resolver);
+    _resolver.analyzeExpression(right, rightContextType);
     right = node.rightOperand;
     flow?.ifNullExpression_end();
 
     var rightType = right.typeOrThrow;
     if (_isNonNullableByDefault) {
       var promotedLeftType = _typeSystem.promoteToNonNull(leftType);
-      _analyzeLeastUpperBoundTypes(node, promotedLeftType, rightType);
+      _analyzeLeastUpperBoundTypes(node, promotedLeftType, rightType,
+          contextType: contextType);
     } else {
-      _analyzeLeastUpperBoundTypes(node, leftType, rightType);
+      _analyzeLeastUpperBoundTypes(node, leftType, rightType,
+          contextType: contextType);
     }
     _resolver.checkForArgumentTypeNotAssignableForArgument(right);
   }
 
-  void _resolveLogicalAnd(BinaryExpressionImpl node) {
+  void _resolveLogicalAnd(BinaryExpressionImpl node,
+      {required DartType? contextType}) {
     var left = node.leftOperand;
     var right = node.rightOperand;
     var flow = _resolver.flowAnalysis.flow;
 
-    InferenceContext.setType(left, _typeProvider.boolType);
-    InferenceContext.setType(right, _typeProvider.boolType);
-
     flow?.logicalBinaryOp_begin();
-    left.accept(_resolver);
+    _resolver.analyzeExpression(left, _typeProvider.boolType);
     left = node.leftOperand;
     var leftWhyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(left);
 
     flow?.logicalBinaryOp_rightBegin(left, node, isAnd: true);
     _resolver.checkUnreachableNode(right);
 
-    right.accept(_resolver);
+    _resolver.analyzeExpression(right, _typeProvider.boolType);
     right = node.rightOperand;
     var rightWhyNotPromoted =
         _resolver.flowAnalysis.flow?.whyNotPromoted(right);
@@ -194,26 +197,25 @@
     _checkNonBoolOperand(left, '&&', whyNotPromoted: leftWhyNotPromoted);
     _checkNonBoolOperand(right, '&&', whyNotPromoted: rightWhyNotPromoted);
 
-    _inferenceHelper.recordStaticType(node, _typeProvider.boolType);
+    _inferenceHelper.recordStaticType(node, _typeProvider.boolType,
+        contextType: contextType);
   }
 
-  void _resolveLogicalOr(BinaryExpressionImpl node) {
+  void _resolveLogicalOr(BinaryExpressionImpl node,
+      {required DartType? contextType}) {
     var left = node.leftOperand;
     var right = node.rightOperand;
     var flow = _resolver.flowAnalysis.flow;
 
-    InferenceContext.setType(left, _typeProvider.boolType);
-    InferenceContext.setType(right, _typeProvider.boolType);
-
     flow?.logicalBinaryOp_begin();
-    left.accept(_resolver);
+    _resolver.analyzeExpression(left, _typeProvider.boolType);
     left = node.leftOperand;
     var leftWhyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(left);
 
     flow?.logicalBinaryOp_rightBegin(left, node, isAnd: false);
     _resolver.checkUnreachableNode(right);
 
-    right.accept(_resolver);
+    _resolver.analyzeExpression(right, _typeProvider.boolType);
     right = node.rightOperand;
     var rightWhyNotPromoted =
         _resolver.flowAnalysis.flow?.whyNotPromoted(right);
@@ -224,7 +226,8 @@
     _checkNonBoolOperand(left, '||', whyNotPromoted: leftWhyNotPromoted);
     _checkNonBoolOperand(right, '||', whyNotPromoted: rightWhyNotPromoted);
 
-    _inferenceHelper.recordStaticType(node, _typeProvider.boolType);
+    _inferenceHelper.recordStaticType(node, _typeProvider.boolType,
+        contextType: contextType);
   }
 
   /// If the given [type] is a type parameter, resolve it to the type that should
@@ -234,13 +237,16 @@
   DartType _resolveTypeParameter(DartType type) =>
       type.resolveToBound(_typeProvider.objectType);
 
-  void _resolveUnsupportedOperator(BinaryExpressionImpl node) {
+  void _resolveUnsupportedOperator(BinaryExpressionImpl node,
+      {required DartType? contextType}) {
     node.leftOperand.accept(_resolver);
     node.rightOperand.accept(_resolver);
-    _inferenceHelper.recordStaticType(node, DynamicTypeImpl.instance);
+    _inferenceHelper.recordStaticType(node, DynamicTypeImpl.instance,
+        contextType: contextType);
   }
 
-  void _resolveUserDefinable(BinaryExpressionImpl node) {
+  void _resolveUserDefinable(BinaryExpressionImpl node,
+      {required DartType? contextType}) {
     var left = node.leftOperand;
     var right = node.rightOperand;
 
@@ -251,24 +257,20 @@
     _resolveUserDefinableElement(node, operator.lexeme);
 
     var invokeType = node.staticInvokeType;
+    DartType? rightContextType;
     if (invokeType != null && invokeType.parameters.isNotEmpty) {
       // If this is a user-defined operator, set the right operand context
       // using the operator method's parameter type.
       var rightParam = invokeType.parameters[0];
-      InferenceContext.setType(
-          right,
-          _typeSystem.refineNumericInvocationContext(
-              left.staticType,
-              node.staticElement,
-              InferenceContext.getContext(node),
-              rightParam.type));
+      rightContextType = _typeSystem.refineNumericInvocationContext(
+          left.staticType, node.staticElement, contextType, rightParam.type);
     }
 
-    right.accept(_resolver);
+    _resolver.analyzeExpression(right, rightContextType);
     right = node.rightOperand;
     var whyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(right);
 
-    _resolveUserDefinableType(node);
+    _resolveUserDefinableType(node, contextType: contextType);
     _resolver.checkForArgumentTypeNotAssignableForArgument(right,
         whyNotPromoted: whyNotPromoted);
   }
@@ -340,7 +342,8 @@
     }
   }
 
-  void _resolveUserDefinableType(BinaryExpressionImpl node) {
+  void _resolveUserDefinableType(BinaryExpressionImpl node,
+      {required DartType? contextType}) {
     var leftOperand = node.leftOperand;
 
     DartType leftType;
@@ -352,7 +355,8 @@
     }
 
     if (identical(leftType, NeverTypeImpl.instance)) {
-      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance);
+      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance,
+          contextType: contextType);
       return;
     }
 
@@ -367,6 +371,7 @@
         node.staticElement,
       );
     }
-    _inferenceHelper.recordStaticType(node, staticType);
+    _inferenceHelper.recordStaticType(node, staticType,
+        contextType: contextType);
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
index 4ef8323..db7e1df 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -18,9 +18,10 @@
 
   ConstructorReferenceResolver(this._resolver);
 
-  void resolve(ConstructorReferenceImpl node) {
+  void resolve(ConstructorReferenceImpl node,
+      {required DartType? contextType}) {
     if (!_resolver.isConstructorTearoffsEnabled &&
-        node.constructorName.type2.typeArguments == null) {
+        node.constructorName.type.typeArguments == null) {
       // Only report this if [node] has no explicit type arguments; otherwise
       // the parser has already reported an error.
       _resolver.errorReporter.reportErrorForNode(
@@ -49,7 +50,7 @@
       //
       // Only report errors when the constructor tearoff feature is enabled,
       // to avoid reporting redundant errors.
-      var enclosingElement = node.constructorName.type2.name.staticElement;
+      var enclosingElement = node.constructorName.type.name.staticElement;
       if (enclosingElement is TypeAliasElement) {
         enclosingElement = enclosingElement.aliasedType.element;
       }
@@ -79,10 +80,11 @@
         }
       }
     }
-    _inferArgumentTypes(node);
+    _inferArgumentTypes(node, contextType: contextType);
   }
 
-  void _inferArgumentTypes(ConstructorReferenceImpl node) {
+  void _inferArgumentTypes(ConstructorReferenceImpl node,
+      {required DartType? contextType}) {
     var constructorName = node.constructorName;
     var elementToInfer = _resolver.inferenceHelper.constructorElementToInfer(
       constructorName: constructorName,
@@ -95,7 +97,9 @@
     //
     // Otherwise we'll have a ConstructorElement, and we can skip inference
     // because there's nothing to infer in a non-generic type.
-    if (elementToInfer != null) {
+    if (elementToInfer != null &&
+        elementToInfer.typeParameters.isNotEmpty &&
+        constructorName.type.typeArguments == null) {
       // TODO(leafp): Currently, we may re-infer types here, since we
       // sometimes resolve multiple times.  We should really check that we
       // have not already inferred something.  However, the obvious ways to
@@ -110,7 +114,8 @@
       var constructorType = elementToInfer.asType;
 
       var inferred = _resolver.inferenceHelper.inferTearOff(
-          node, constructorName.name!, constructorType) as FunctionType?;
+          node, constructorName.name!, constructorType,
+          contextType: contextType) as FunctionType?;
 
       if (inferred != null) {
         var inferredReturnType = inferred.returnType as InterfaceType;
@@ -124,7 +129,7 @@
         constructorName.name?.staticElement = constructorElement.declaration;
         node.staticType = inferred;
         // The NamedType child of `constructorName` doesn't have a static type.
-        constructorName.type2.type = null;
+        constructorName.type.type = null;
       }
     } else {
       var constructorElement = constructorName.staticElement;
@@ -134,7 +139,7 @@
         node.staticType = constructorElement.type;
       }
       // The NamedType child of `constructorName` doesn't have a static type.
-      constructorName.type2.type = null;
+      constructorName.type.type = null;
     }
   }
 }
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 517ff5c..15862ca 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -42,6 +42,41 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
+  /// Set the type context for the receiver of the override.
+  ///
+  /// The context of the invocation that is made through the override does
+  /// not affect the type inference of the override and the receiver.
+  DartType? computeOverrideReceiverContextType(ExtensionOverride node) {
+    var element = node.staticElement!;
+    var typeParameters = element.typeParameters;
+
+    var arguments = node.argumentList.arguments;
+    if (arguments.length != 1) {
+      return null;
+    }
+
+    List<DartType> typeArgumentTypes;
+    var typeArguments = node.typeArguments;
+    if (typeArguments != null) {
+      var arguments = typeArguments.arguments;
+      if (arguments.length == typeParameters.length) {
+        typeArgumentTypes = arguments.map((a) => a.typeOrThrow).toList();
+      } else {
+        typeArgumentTypes = _listOfDynamic(typeParameters);
+      }
+    } else {
+      typeArgumentTypes = List.filled(
+        typeParameters.length,
+        UnknownInferredType.instance,
+      );
+    }
+
+    return Substitution.fromPairs(
+      typeParameters,
+      typeArgumentTypes,
+    ).substituteType(element.extendedType);
+  }
+
   /// Return the most specific extension in the current scope for this [type],
   /// that defines the member with the given [name].
   ///
@@ -203,44 +238,6 @@
     }
   }
 
-  /// Set the type context for the receiver of the override.
-  ///
-  /// The context of the invocation that is made through the override does
-  /// not affect the type inference of the override and the receiver.
-  void setOverrideReceiverContextType(ExtensionOverride node) {
-    var element = node.staticElement!;
-    var typeParameters = element.typeParameters;
-
-    var arguments = node.argumentList.arguments;
-    if (arguments.length != 1) {
-      return;
-    }
-
-    List<DartType> typeArgumentTypes;
-    var typeArguments = node.typeArguments;
-    if (typeArguments != null) {
-      var arguments = typeArguments.arguments;
-      if (arguments.length == typeParameters.length) {
-        typeArgumentTypes = arguments.map((a) => a.typeOrThrow).toList();
-      } else {
-        typeArgumentTypes = _listOfDynamic(typeParameters);
-      }
-    } else {
-      typeArgumentTypes = List.filled(
-        typeParameters.length,
-        UnknownInferredType.instance,
-      );
-    }
-
-    var extendedForDownward = Substitution.fromPairs(
-      typeParameters,
-      typeArgumentTypes,
-    ).substituteType(element.extendedType);
-
-    var receiver = arguments[0];
-    InferenceContext.setType(receiver, extendedForDownward);
-  }
-
   void _checkTypeArgumentsMatchingBounds(
     List<TypeParameterElement> typeParameters,
     TypeArgumentList? typeArgumentList,
@@ -254,6 +251,7 @@
         var parameterBound = parameter.bound;
         if (parameterBound != null) {
           parameterBound = substitution.substituteType(parameterBound);
+          parameterBound = _typeSystem.toLegacyTypeIfOptOut(parameterBound);
           if (!_typeSystem.isSubtypeOf(argument, parameterBound)) {
             _errorReporter.reportErrorForNode(
               CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index d243983..dceec2d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/resolver/assignment_expression_resolver.dart';
+import 'package:analyzer/src/dart/resolver/typed_literal_resolver.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -21,12 +22,16 @@
     required ResolverVisitor resolver,
   }) : _resolver = resolver;
 
-  void resolveElement(ForElementImpl node) {
+  void resolveElement(ForElementImpl node, CollectionLiteralContext? context) {
     var forLoopParts = node.forLoopParts;
+    void visitBody() {
+      node.body.resolveElement(_resolver, context);
+    }
+
     if (forLoopParts is ForPartsImpl) {
-      _forParts(node, forLoopParts, node.body);
+      _forParts(node, forLoopParts, visitBody);
     } else if (forLoopParts is ForEachPartsImpl) {
-      _forEachParts(node, node.awaitKeyword != null, forLoopParts, node.body);
+      _forEachParts(node, node.awaitKeyword != null, forLoopParts, visitBody);
     }
   }
 
@@ -34,10 +39,14 @@
     _resolver.checkUnreachableNode(node);
 
     var forLoopParts = node.forLoopParts;
+    void visitBody() {
+      node.body.accept(_resolver);
+    }
+
     if (forLoopParts is ForPartsImpl) {
-      _forParts(node, forLoopParts, node.body);
+      _forParts(node, forLoopParts, visitBody);
     } else if (forLoopParts is ForEachPartsImpl) {
-      _forEachParts(node, node.awaitKeyword != null, forLoopParts, node.body);
+      _forEachParts(node, node.awaitKeyword != null, forLoopParts, visitBody);
     }
   }
 
@@ -66,12 +75,8 @@
     }
   }
 
-  void _forEachParts(
-    AstNode node,
-    bool isAsync,
-    ForEachParts forEachParts,
-    AstNode body,
-  ) {
+  void _forEachParts(AstNode node, bool isAsync, ForEachParts forEachParts,
+      void Function() visitBody) {
     Expression iterable = forEachParts.iterable;
     DeclaredIdentifier? loopVariable;
     SimpleIdentifier? identifier;
@@ -104,14 +109,14 @@
         }
       }
     }
+    InterfaceType? targetType;
     if (valueType != null) {
-      InterfaceType targetType = isAsync
+      targetType = isAsync
           ? _resolver.typeProvider.streamType(valueType)
           : _resolver.typeProvider.iterableType(valueType);
-      InferenceContext.setType(iterable, targetType);
     }
 
-    iterable.accept(_resolver);
+    _resolver.analyzeExpression(iterable, targetType);
     iterable = forEachParts.iterable;
 
     _resolver.nullableDereferenceVerifier.expression(
@@ -140,12 +145,12 @@
           elementType ?? DynamicTypeImpl.instance, null);
     }
 
-    body.accept(_resolver);
+    visitBody();
 
     _resolver.flowAnalysis.flow?.forEach_end();
   }
 
-  void _forParts(AstNode node, ForParts forParts, AstNode body) {
+  void _forParts(AstNode node, ForParts forParts, void Function() visitBody) {
     if (forParts is ForPartsWithDeclarations) {
       forParts.variables.accept(_resolver);
     } else if (forParts is ForPartsWithExpression) {
@@ -156,8 +161,7 @@
 
     var condition = forParts.condition;
     if (condition != null) {
-      InferenceContext.setType(condition, _resolver.typeProvider.boolType);
-      condition.accept(_resolver);
+      _resolver.analyzeExpression(condition, _resolver.typeProvider.boolType);
       condition = forParts.condition!;
       var whyNotPromoted =
           _resolver.flowAnalysis.flow?.whyNotPromoted(condition);
@@ -166,7 +170,7 @@
     }
 
     _resolver.flowAnalysis.for_bodyBegin(node, condition);
-    body.accept(_resolver);
+    visitBody();
 
     _resolver.flowAnalysis.flow?.for_updaterBegin();
     forParts.updaters.accept(_resolver);
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 42070dc..ddbdfdb 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
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/nullable_dereference_verifier.dart';
@@ -36,11 +37,13 @@
       _resolver.nullableDereferenceVerifier;
 
   void resolve(FunctionExpressionInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var function = node.function;
 
     if (function is ExtensionOverrideImpl) {
-      _resolveReceiverExtensionOverride(node, function, whyNotPromotedList);
+      _resolveReceiverExtensionOverride(node, function, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -51,12 +54,14 @@
       // `_resolveReceiverInterfaceType` calls `TypePropertyResolver.resolve`,
       // which does the necessary null checking.
       _resolveReceiverInterfaceType(
-          node, function, receiverType, whyNotPromotedList);
+          node, function, receiverType, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (_checkForUseOfVoidResult(function, receiverType)) {
-      _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList);
+      _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -66,18 +71,21 @@
     );
 
     if (receiverType is FunctionType) {
-      _resolve(node, receiverType, whyNotPromotedList);
+      _resolve(node, receiverType, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (identical(receiverType, NeverTypeImpl.instance)) {
       _errorReporter.reportErrorForNode(
           HintCode.RECEIVER_OF_TYPE_NEVER, function);
-      _unresolved(node, NeverTypeImpl.instance, whyNotPromotedList);
+      _unresolved(node, NeverTypeImpl.instance, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
-    _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList);
+    _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList,
+        contextType: contextType);
   }
 
   /// Check for situations where the result of a method or function is used,
@@ -105,30 +113,24 @@
   }
 
   void _resolve(FunctionExpressionInvocationImpl node, FunctionType rawType,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
-    _inferenceHelper.resolveFunctionExpressionInvocation(
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
+    var returnType =
+        const FunctionExpressionInvocationInferrer().resolveInvocation(
+      resolver: _resolver,
       node: node,
       rawType: rawType,
       whyNotPromotedList: whyNotPromotedList,
+      contextType: contextType,
     );
 
-    var returnType = _inferenceHelper.computeInvokeReturnType(
-      node.staticInvokeType,
-    );
-    _inferenceHelper.recordStaticType(node, returnType);
+    _inferenceHelper.recordStaticType(node, returnType,
+        contextType: contextType);
   }
 
-  void _resolveArguments(FunctionExpressionInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
-    _resolver.visitArgumentList(node.argumentList,
-        whyNotPromotedList: whyNotPromotedList);
-  }
-
-  void _resolveReceiverExtensionOverride(
-    FunctionExpressionInvocationImpl node,
-    ExtensionOverride function,
-    List<WhyNotPromotedGetter> whyNotPromotedList,
-  ) {
+  void _resolveReceiverExtensionOverride(FunctionExpressionInvocationImpl node,
+      ExtensionOverride function, List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var result = _extensionResolver.getOverrideMember(
       function,
       FunctionElement.CALL_METHOD_NAME,
@@ -142,7 +144,8 @@
         function,
         [function.extensionName.name],
       );
-      return _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList);
+      return _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList,
+          contextType: contextType);
     }
 
     if (callElement.isStatic) {
@@ -153,15 +156,15 @@
     }
 
     var rawType = callElement.type;
-    _resolve(node, rawType, whyNotPromotedList);
+    _resolve(node, rawType, whyNotPromotedList, contextType: contextType);
   }
 
   void _resolveReceiverInterfaceType(
-    FunctionExpressionInvocationImpl node,
-    Expression function,
-    InterfaceType receiverType,
-    List<WhyNotPromotedGetter> whyNotPromotedList,
-  ) {
+      FunctionExpressionInvocationImpl node,
+      Expression function,
+      InterfaceType receiverType,
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var result = _typePropertyResolver.resolve(
       receiver: function,
       receiverType: receiverType,
@@ -178,7 +181,8 @@
           function,
         );
       }
-      _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList);
+      _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -187,19 +191,26 @@
         CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION,
         function,
       );
-      _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList);
+      _unresolved(node, DynamicTypeImpl.instance, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     node.staticElement = callElement;
     var rawType = callElement.type;
-    _resolve(node, rawType, whyNotPromotedList);
+    _resolve(node, rawType, whyNotPromotedList, contextType: contextType);
   }
 
   void _unresolved(FunctionExpressionInvocationImpl node, DartType type,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     _setExplicitTypeArgumentTypes(node);
-    _resolveArguments(node, whyNotPromotedList);
+    const FunctionExpressionInvocationInferrer().resolveInvocation(
+        resolver: _resolver,
+        node: node,
+        rawType: null,
+        contextType: contextType,
+        whyNotPromotedList: whyNotPromotedList);
     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 2558708..bcddf19 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_resolver.dart
@@ -30,7 +30,7 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
-  void resolve(FunctionExpressionImpl node) {
+  void resolve(FunctionExpressionImpl node, {required DartType? contextType}) {
     var parent = node.parent;
     // Note: `isFunctionDeclaration` must have an explicit type to work around
     // https://github.com/dart-lang/language/issues/1785.
@@ -42,25 +42,32 @@
           .executableDeclaration_enter(node, node.parameters, true);
     }
 
-    var contextType = InferenceContext.getContext(node);
-    if (contextType is FunctionType) {
-      contextType = _matchTypeParameters(
+    bool wasFunctionTypeSupplied = contextType is FunctionType;
+    node.wasFunctionTypeSupplied = wasFunctionTypeSupplied;
+    DartType? imposedType;
+    if (wasFunctionTypeSupplied) {
+      var instantiatedType = _matchTypeParameters(
         node.typeParameters,
         contextType,
       );
-      if (contextType is FunctionType) {
-        _inferFormalParameters(node.parameters, contextType);
-        InferenceContext.setType(body, contextType.returnType);
+      if (instantiatedType is FunctionType) {
+        _inferFormalParameters(node.parameters, instantiatedType);
+        var returnType = instantiatedType.returnType;
+        if (!returnType.isDynamic) {
+          imposedType = returnType;
+        }
       }
     }
 
-    node.visitChildren(_resolver);
+    node.typeParameters?.accept(_resolver);
+    node.parameters?.accept(_resolver);
+    imposedType = node.body.resolve(_resolver, imposedType);
     if (isFunctionDeclaration) {
       // A side effect of visiting the children is that the parameters are now
       // in scope, so we can visit the documentation comment now.
       parent.documentationComment?.accept(_resolver);
     }
-    _resolve2(node);
+    _resolve2(node, imposedType, contextType: contextType);
 
     if (_resolver.flowAnalysis.flow != null && !isFunctionDeclaration) {
       _resolver.checkForBodyMayCompleteNormally(
@@ -135,13 +142,6 @@
     }
   }
 
-  /// Infers the return type of a local function, either a lambda or
-  /// (in strong mode) a local function declaration.
-  DartType _inferLocalFunctionReturnType(FunctionExpression node) {
-    var body = node.body;
-    return InferenceContext.getContext(body) ?? DynamicTypeImpl.instance;
-  }
-
   /// Given the downward inference [type], return the function type expressed
   /// in terms of the type parameters from [typeParameterList].
   ///
@@ -168,15 +168,16 @@
     }).toList());
   }
 
-  void _resolve2(FunctionExpressionImpl node) {
+  void _resolve2(FunctionExpressionImpl node, DartType? imposedType,
+      {required DartType? contextType}) {
     var functionElement = node.declaredElement as ExecutableElementImpl;
 
     if (_shouldUpdateReturnType(node)) {
-      var returnType = _inferLocalFunctionReturnType(node);
-      functionElement.returnType = returnType;
+      functionElement.returnType = imposedType ?? DynamicTypeImpl.instance;
     }
 
-    _inferenceHelper.recordStaticType(node, functionElement.type);
+    _inferenceHelper.recordStaticType(node, functionElement.type,
+        contextType: contextType);
   }
 
   static bool _shouldUpdateReturnType(FunctionExpression node) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index dedb7b5..0aa5a1e 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -65,7 +65,7 @@
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
           typeArguments,
           [
-            function.constructorName.type2.name.toSource(),
+            function.constructorName.type.name.toSource(),
             function.constructorName.name!.name
           ],
         );
@@ -453,22 +453,26 @@
       return;
     }
 
-    var functionType = _resolveTypeProperty(
+    var propertyType = _resolveTypeProperty(
       receiver: function.prefix,
       name: function.identifier,
       nameErrorEntity: function,
     );
 
-    if (functionType != null) {
-      if (functionType is FunctionType) {
-        function.staticType = functionType;
-        _resolve(
-          node: node,
-          rawType: functionType,
-          name: functionName,
-        );
-        return;
-      }
+    var callMethod = _getCallMethod(node, propertyType);
+    if (callMethod is MethodElement) {
+      _resolveAsImplicitCallReference(node, callMethod);
+      return;
+    }
+
+    if (propertyType is FunctionType) {
+      function.staticType = propertyType;
+      _resolve(
+        node: node,
+        rawType: propertyType,
+        name: functionName,
+      );
+      return;
     }
 
     function.accept(_resolver);
@@ -521,23 +525,20 @@
         nameErrorEntity: function,
       );
 
-      if (functionType == null) {
+      if (functionType is FunctionType) {
+        function.staticType = functionType;
+        _resolve(
+          node: node,
+          rawType: functionType,
+          name: function.propertyName.name,
+        );
+      } else {
         // The target is known, but the method is not; [UNDEFINED_GETTER] is
         // reported elsewhere.
         node.staticType = DynamicTypeImpl.instance;
-        return;
-      } else {
-        if (functionType is FunctionType) {
-          function.staticType = functionType;
-          _resolve(
-            node: node,
-            rawType: functionType,
-            name: function.propertyName.name,
-          );
-        }
-
-        return;
       }
+
+      return;
     }
 
     var propertyElement = _resolver.typePropertyResolver
@@ -826,17 +827,13 @@
       if (receiverElement is ClassElement) {
         var element = _resolveStaticElement(receiverElement, name);
         name.staticElement = element;
-        // TODO(srawlins): Should this use referenceType? E.g. if `element`
-        // is a function-typed static getter.
-        return element?.type;
+        return element?.referenceType;
       } else if (receiverElement is TypeAliasElement) {
         var aliasedType = receiverElement.aliasedType;
         if (aliasedType is InterfaceType) {
           var element = _resolveStaticElement(aliasedType.element, name);
           name.staticElement = element;
-          // TODO(srawlins): Should this use referenceType? E.g. if `element`
-          // is a function-typed static getter.
-          return element?.type;
+          return element?.referenceType;
         } else {
           return null;
         }
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 625037b..bfdf73f 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
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/element/member.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// A resolver for [InstanceCreationExpression] nodes.
@@ -20,7 +20,8 @@
 
   InstanceCreationExpressionResolver(this._resolver);
 
-  void resolve(InstanceCreationExpressionImpl node) {
+  void resolve(InstanceCreationExpressionImpl node,
+      {required DartType? contextType}) {
     // The parser can parse certain code as [InstanceCreationExpression] when it
     // might be an invocation of a method on a [FunctionReference] or
     // [ConstructorReference]. In such a case, it is this resolver's
@@ -36,92 +37,40 @@
     // InstanceCreationExpression needs to be rewritten as a MethodInvocation
     // with a target of `a.m<int>` (a FunctionReference) and a name of `apply`.
     if (node.keyword == null) {
-      var typeNameTypeArguments = node.constructorName.type2.typeArguments;
+      var typeNameTypeArguments = node.constructorName.type.typeArguments;
       if (typeNameTypeArguments != null) {
         // This could be a method call on a function reference or a constructor
         // reference.
-        _resolveWithTypeNameWithTypeArguments(node, typeNameTypeArguments);
+        _resolveWithTypeNameWithTypeArguments(node, typeNameTypeArguments,
+            contextType: contextType);
         return;
       }
     }
 
-    _resolveInstanceCreationExpression(node);
+    _resolveInstanceCreationExpression(node, contextType: contextType);
   }
 
-  void _inferArgumentTypes(covariant InstanceCreationExpressionImpl node) {
+  void _resolveInstanceCreationExpression(InstanceCreationExpressionImpl node,
+      {required DartType? contextType}) {
+    var whyNotPromotedList = <WhyNotPromotedGetter>[];
     var constructorName = node.constructorName;
-    var typeName = constructorName.type2;
-    var typeArguments = typeName.typeArguments;
+    constructorName.accept(_resolver);
+    // Re-assign constructorName in case the node got replaced.
+    constructorName = node.constructorName;
+    _resolver.elementResolver.visitInstanceCreationExpression(node);
     var elementToInfer = _resolver.inferenceHelper.constructorElementToInfer(
       constructorName: constructorName,
       definingLibrary: _resolver.definingLibrary,
     );
-    FunctionType? inferred;
-
-    // If the constructor is generic, we'll have a ConstructorMember that
-    // substitutes in type arguments (possibly `dynamic`) from earlier in
-    // resolution.
-    //
-    // Otherwise we'll have a ConstructorElement, and we can skip inference
-    // because there's nothing to infer in a non-generic type.
-    if (elementToInfer != null) {
-      // TODO(leafp): Currently, we may re-infer types here, since we
-      // sometimes resolve multiple times.  We should really check that we
-      // have not already inferred something.  However, the obvious ways to
-      // check this don't work, since we may have been instantiated
-      // to bounds in an earlier phase, and we *do* want to do inference
-      // in that case.
-
-      // Get back to the uninstantiated generic constructor.
-      // TODO(jmesserly): should we store this earlier in resolution?
-      // Or look it up, instead of jumping backwards through the Member?
-      var rawElement = elementToInfer.element;
-      var constructorType = elementToInfer.asType;
-
-      inferred = _resolver.inferenceHelper.inferArgumentTypesForGeneric(
-          node, constructorType, typeArguments,
-          isConst: node.isConst, errorNode: node.constructorName);
-
-      if (inferred != null) {
-        var arguments = node.argumentList;
-        InferenceContext.setType(arguments, inferred);
-        // Fix up the parameter elements based on inferred method.
-        arguments.correspondingStaticParameters =
-            ResolverVisitor.resolveArgumentsToParameters(
-          argumentList: arguments,
-          parameters: inferred.parameters,
-        );
-
-        constructorName.type2.type = inferred.returnType;
-
-        // Update the static element as well. This is used in some cases, such
-        // as computing constant values. It is stored in two places.
-        var constructorElement = ConstructorMember.from(
-          rawElement,
-          inferred.returnType as InterfaceType,
-        );
-        constructorName.staticElement = constructorElement;
-      }
-    }
-
-    if (inferred == null) {
-      var constructorElement = constructorName.staticElement;
-      if (constructorElement != null) {
-        var type = constructorElement.type;
-        type = _resolver.toLegacyTypeIfOptOut(type) as FunctionType;
-        InferenceContext.setType(node.argumentList, type);
-      }
-    }
-  }
-
-  void _resolveInstanceCreationExpression(InstanceCreationExpressionImpl node) {
-    var whyNotPromotedList = <WhyNotPromotedGetter>[];
-    node.constructorName.accept(_resolver);
-    _inferArgumentTypes(node);
-    _resolver.visitArgumentList(node.argumentList,
+    const InstanceCreationInferrer().resolveInvocation(
+        resolver: _resolver,
+        node: node,
+        rawType: elementToInfer?.asType,
+        contextType: contextType,
         whyNotPromotedList: whyNotPromotedList);
-    _resolver.elementResolver.visitInstanceCreationExpression(node);
-    _resolver.typeAnalyzer.visitInstanceCreationExpression(node);
+    _resolver.inferenceHelper.recordStaticType(
+        node, node.constructorName.type.type!,
+        contextType: contextType);
     _resolver.checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
@@ -132,23 +81,23 @@
   /// The instance creation expression may actually be a method call on a
   /// type-instantiated function reference or constructor reference.
   void _resolveWithTypeNameWithTypeArguments(
-    InstanceCreationExpressionImpl node,
-    TypeArgumentListImpl typeNameTypeArguments,
-  ) {
-    var typeNameName = node.constructorName.type2.name;
+      InstanceCreationExpressionImpl node,
+      TypeArgumentListImpl typeNameTypeArguments,
+      {required DartType? contextType}) {
+    var typeNameName = node.constructorName.type.name;
     if (typeNameName is SimpleIdentifierImpl) {
       // TODO(srawlins): Lookup the name and potentially rewrite `node` as a
       // [MethodInvocation].
-      _resolveInstanceCreationExpression(node);
+      _resolveInstanceCreationExpression(node, contextType: contextType);
       return;
     } else if (typeNameName is PrefixedIdentifierImpl) {
       // TODO(srawlins): Lookup the name and potentially rewrite `node` as a
       // [MethodInvocation].
-      _resolveInstanceCreationExpression(node);
+      _resolveInstanceCreationExpression(node, contextType: contextType);
     } else {
       assert(
           false, 'Unexpected typeNameName type: ${typeNameName.runtimeType}');
-      _resolveInstanceCreationExpression(node);
+      _resolveInstanceCreationExpression(node, 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 765d3d5..945c794 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -9,12 +9,10 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/extensions.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/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/generated/migration.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -46,12 +44,15 @@
   /// For example given the type `class C<T> { C(T arg); }`, the generic
   /// function type is `<T>(T) -> C<T>`.
   FunctionType get asType {
-    return FunctionTypeImpl(
-      typeFormals: typeParameters,
-      parameters: element.parameters,
-      returnType: element.returnType,
-      nullabilitySuffix: NullabilitySuffix.none,
-    );
+    var typeParameters = this.typeParameters;
+    return typeParameters.isEmpty
+        ? element.type
+        : FunctionTypeImpl(
+            typeFormals: typeParameters,
+            parameters: element.parameters,
+            returnType: element.returnType,
+            nullabilitySuffix: NullabilitySuffix.none,
+          );
   }
 }
 
@@ -62,9 +63,6 @@
   final MigrationResolutionHooks? _migrationResolutionHooks;
   final bool _genericMetadataIsEnabled;
 
-  List<DartType>? _typeArgumentTypes;
-  FunctionType? _invokeType;
-
   InvocationInferenceHelper({
     required ResolverVisitor resolver,
     required ErrorReporter errorReporter,
@@ -77,16 +75,6 @@
         _genericMetadataIsEnabled = resolver.definingLibrary.featureSet
             .isEnabled(Feature.generic_metadata);
 
-  /// Compute the return type of the method or function represented by the given
-  /// type that is being invoked.
-  DartType computeInvokeReturnType(DartType? type) {
-    if (type is FunctionType) {
-      return type.returnType;
-    } else {
-      return DynamicTypeImpl.instance;
-    }
-  }
-
   /// If the constructor referenced by the [constructorName] is generic,
   /// and the [constructorName] does not have explicit type arguments,
   /// return the element and type parameters to infer. Otherwise return `null`.
@@ -94,169 +82,53 @@
     required ConstructorName constructorName,
     required LibraryElement definingLibrary,
   }) {
-    List<TypeParameterElement>? typeParameters;
+    List<TypeParameterElement> typeParameters;
     ConstructorElement? rawElement;
 
-    var typeName = constructorName.type2;
-    var typeArguments = typeName.typeArguments;
+    var typeName = constructorName.type;
     var typeElement = typeName.name.staticElement;
     if (typeElement is ClassElement) {
       typeParameters = typeElement.typeParameters;
-      if (typeParameters.isNotEmpty && typeArguments == null) {
-        var constructorIdentifier = constructorName.name;
-        if (constructorIdentifier == null) {
-          rawElement = typeElement.unnamedConstructor;
-        } else {
-          var name = constructorIdentifier.name;
-          rawElement = typeElement.getNamedConstructor(name);
-          if (rawElement != null &&
-              !rawElement.isAccessibleIn(definingLibrary)) {
-            rawElement = null;
-          }
+      var constructorIdentifier = constructorName.name;
+      if (constructorIdentifier == null) {
+        rawElement = typeElement.unnamedConstructor;
+      } else {
+        var name = constructorIdentifier.name;
+        rawElement = typeElement.getNamedConstructor(name);
+        if (rawElement != null && !rawElement.isAccessibleIn(definingLibrary)) {
+          rawElement = null;
         }
       }
     } else if (typeElement is TypeAliasElement) {
       typeParameters = typeElement.typeParameters;
       var aliasedType = typeElement.aliasedType;
       if (aliasedType is InterfaceType) {
-        if (typeParameters.isNotEmpty && typeArguments == null) {
-          var constructorIdentifier = constructorName.name;
-          rawElement = aliasedType.lookUpConstructor(
-            constructorIdentifier?.name,
-            definingLibrary,
-          );
-        }
+        var constructorIdentifier = constructorName.name;
+        rawElement = aliasedType.lookUpConstructor(
+          constructorIdentifier?.name,
+          definingLibrary,
+        );
       }
+    } else {
+      return null;
     }
 
-    if (typeParameters == null || rawElement == null) {
+    if (rawElement == null) {
       return null;
     }
     rawElement = _resolver.toLegacyElement(rawElement);
     return ConstructorElementToInfer(typeParameters, rawElement);
   }
 
-  FunctionType? inferArgumentTypesForGeneric(AstNode inferenceNode,
-      DartType? uninstantiatedType, TypeArgumentList? typeArguments,
-      {AstNode? errorNode, bool isConst = false}) {
-    errorNode ??= inferenceNode;
-    uninstantiatedType = _getFreshType(uninstantiatedType);
-    if (typeArguments == null &&
-        uninstantiatedType is FunctionType &&
-        uninstantiatedType.typeFormals.isNotEmpty) {
-      var typeArguments = _typeSystem.inferGenericFunctionOrType(
-        typeParameters: uninstantiatedType.typeFormals,
-        parameters: const <ParameterElement>[],
-        declaredReturnType: uninstantiatedType.returnType,
-        argumentTypes: const <DartType>[],
-        contextReturnType: InferenceContext.getContext(inferenceNode),
-        downwards: true,
-        isConst: isConst,
-        errorReporter: _errorReporter,
-        errorNode: errorNode,
-        genericMetadataIsEnabled: _genericMetadataIsEnabled,
-      );
-      if (typeArguments != null) {
-        return uninstantiatedType.instantiate(typeArguments);
-      }
-    }
-    return null;
-  }
-
-  void inferArgumentTypesForInvocation(
-    InvocationExpression node,
-    DartType? type,
-  ) {
-    var inferred = inferArgumentTypesForGeneric(node, type, node.typeArguments);
-    InferenceContext.setType(
-        node.argumentList, inferred ?? node.staticInvokeType);
-  }
-
-  /// Given a possibly generic invocation like `o.m(args)` or `(f)(args)` try to
-  /// infer the instantiated generic function type.
-  ///
-  /// This takes into account both the context type, as well as information from
-  /// the argument types.
-  void inferGenericInvocationExpression(
-    InvocationExpressionImpl node,
-    DartType? type,
-  ) {
-    var arguments = node.argumentList;
-    var freshType = _getFreshType(type);
-
-    var inferred = inferGenericInvoke(
-        node, freshType, node.typeArguments, arguments, node.function);
-    if (inferred != null && inferred != node.staticInvokeType) {
-      // Fix up the parameter elements based on inferred method.
-      arguments.correspondingStaticParameters =
-          ResolverVisitor.resolveArgumentsToParameters(
-        argumentList: arguments,
-        parameters: inferred.parameters,
-      );
-      node.staticInvokeType = inferred;
-    }
-  }
-
-  /// Given a possibly generic invocation or instance creation, such as
-  /// `o.m(args)` or `(f)(args)` or `new T(args)` try to infer the instantiated
-  /// generic function type.
-  ///
-  /// This takes into account both the context type, as well as information from
-  /// the argument types.
-  FunctionType? inferGenericInvoke(
-      AstNode node,
-      DartType? fnType,
-      TypeArgumentList? typeArguments,
-      ArgumentList argumentList,
-      AstNode errorNode,
-      {bool isConst = false}) {
-    if (typeArguments == null &&
-        fnType is FunctionType &&
-        fnType.typeFormals.isNotEmpty) {
-      // Get the parameters that correspond to the uninstantiated generic.
-      var typeArgs = _inferUpwards(
-        rawType: fnType,
-        argumentList: argumentList,
-        contextType: InferenceContext.getContext(node),
-        isConst: isConst,
-        errorNode: errorNode,
-      );
-      if (node is InvocationExpressionImpl) {
-        node.typeArgumentTypes = typeArgs;
-      }
-      if (typeArgs != null) {
-        return fnType.instantiate(typeArgs);
-      }
-      return fnType;
-    }
-
-    // There is currently no other place where we set type arguments
-    // for FunctionExpressionInvocation(s), so set it here, if not inferred.
-    if (node is FunctionExpressionInvocationImpl) {
-      if (typeArguments != null) {
-        var typeArgs =
-            typeArguments.arguments.map((n) => n.typeOrThrow).toList();
-        node.typeArgumentTypes = typeArgs;
-      } else {
-        node.typeArgumentTypes = const <DartType>[];
-      }
-    }
-
-    return null;
-  }
-
   /// Given an uninstantiated generic function type, referenced by the
   /// [identifier] in the tear-off [expression], try to infer the instantiated
   /// generic function type from the surrounding context.
-  DartType inferTearOff(
-    Expression expression,
-    SimpleIdentifierImpl identifier,
-    DartType tearOffType,
-  ) {
-    var context = InferenceContext.getContext(expression);
-    if (context is FunctionType && tearOffType is FunctionType) {
+  DartType inferTearOff(Expression expression, SimpleIdentifierImpl identifier,
+      DartType tearOffType,
+      {required DartType? contextType}) {
+    if (contextType is FunctionType && tearOffType is FunctionType) {
       var typeArguments = _typeSystem.inferFunctionTypeInstantiation(
-        context,
+        contextType,
         tearOffType,
         errorReporter: _errorReporter,
         errorNode: expression,
@@ -274,11 +146,11 @@
   ///
   /// @param expression the node whose type is to be recorded
   /// @param type the static type of the node
-  void recordStaticType(ExpressionImpl expression, DartType type) {
+  void recordStaticType(ExpressionImpl expression, DartType type,
+      {required DartType? contextType}) {
     var hooks = _migrationResolutionHooks;
     if (hooks != null) {
-      type = hooks.modifyExpressionType(
-          expression, type, InferenceContext.getContext(expression));
+      type = hooks.modifyExpressionType(expression, type, contextType);
     }
 
     expression.staticType = type;
@@ -287,30 +159,6 @@
     }
   }
 
-  /// Finish resolution of the [FunctionExpressionInvocation].
-  ///
-  /// We have already found the invoked [ExecutableElement], and the [rawType]
-  /// is its not yet instantiated type. Here we perform downwards inference,
-  /// resolution of arguments, and upwards inference.
-  void resolveFunctionExpressionInvocation({
-    required FunctionExpressionInvocationImpl node,
-    required FunctionType rawType,
-    required List<WhyNotPromotedGetter> whyNotPromotedList,
-  }) {
-    _resolveInvocation(
-      rawType: rawType,
-      typeArgumentList: node.typeArguments,
-      argumentList: node.argumentList,
-      contextType: InferenceContext.getContext(node),
-      isConst: false,
-      errorNode: node.function,
-      whyNotPromotedList: whyNotPromotedList,
-    );
-
-    node.typeArgumentTypes = _typeArgumentTypes;
-    node.staticInvokeType = _invokeType;
-  }
-
   /// Finish resolution of the [MethodInvocation].
   ///
   /// We have already found the invoked [ExecutableElement], and the [rawType]
@@ -320,239 +168,16 @@
     required MethodInvocationImpl node,
     required FunctionType rawType,
     required List<WhyNotPromotedGetter> whyNotPromotedList,
+    required DartType? contextType,
   }) {
-    _resolveInvocation(
+    var returnType = MethodInvocationInferrer.forNode(node).resolveInvocation(
+      resolver: _resolver,
+      node: node,
       rawType: rawType,
-      typeArgumentList: node.typeArguments,
-      argumentList: node.argumentList,
-      contextType: InferenceContext.getContext(node),
-      isConst: false,
-      errorNode: node.function,
+      contextType: contextType,
       whyNotPromotedList: whyNotPromotedList,
     );
 
-    node.typeArgumentTypes = _typeArgumentTypes;
-    node.staticInvokeType = _invokeType;
-
-    var returnType = computeInvokeReturnType(_invokeType);
-    var targetType = node.realTarget?.staticType;
-    if (targetType != null) {
-      returnType = _typeSystem.refineNumericInvocationType(
-        targetType,
-        node.methodName.staticElement,
-        [
-          for (var argument in node.argumentList.arguments) argument.typeOrThrow
-        ],
-        returnType,
-      );
-    }
-    recordStaticType(node, returnType);
-  }
-
-  List<DartType>? _inferDownwards({
-    required FunctionType rawType,
-    required DartType? contextType,
-    required bool isConst,
-    required AstNode errorNode,
-  }) {
-    return _typeSystem.inferGenericFunctionOrType(
-      typeParameters: rawType.typeFormals,
-      parameters: const <ParameterElement>[],
-      declaredReturnType: rawType.returnType,
-      argumentTypes: const <DartType>[],
-      contextReturnType: contextType,
-      downwards: true,
-      isConst: isConst,
-      errorReporter: _errorReporter,
-      errorNode: errorNode,
-      genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    );
-  }
-
-  /// TODO(scheglov) Instead of [isConst] sanitize [contextType] before calling.
-  List<DartType>? _inferUpwards({
-    required FunctionType rawType,
-    required DartType? contextType,
-    required ArgumentList argumentList,
-    required bool isConst,
-    required AstNode errorNode,
-  }) {
-    rawType = _getFreshType(rawType) as FunctionType;
-
-    // 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);
-      }
-    }
-    var typeArgs = _typeSystem.inferGenericFunctionOrType(
-      typeParameters: rawType.typeFormals,
-      parameters: params,
-      declaredReturnType: rawType.returnType,
-      argumentTypes: argTypes,
-      contextReturnType: contextType,
-      isConst: isConst,
-      errorReporter: _errorReporter,
-      errorNode: errorNode,
-      genericMetadataIsEnabled: _genericMetadataIsEnabled,
-    );
-    return typeArgs;
-  }
-
-  bool _isCallToIdentical(AstNode? invocation) {
-    if (invocation is MethodInvocation) {
-      var invokedMethod = invocation.methodName.staticElement;
-      return invokedMethod != null &&
-          invokedMethod.name == 'identical' &&
-          invokedMethod.library!.isDartCore;
-    }
-    return false;
-  }
-
-  void _resolveArguments(ArgumentList argumentList,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
-    _resolver.visitArgumentList(argumentList,
-        isIdentical: _isCallToIdentical(argumentList.parent),
-        whyNotPromotedList: whyNotPromotedList);
-  }
-
-  void _resolveInvocation({
-    required FunctionType rawType,
-    required DartType? contextType,
-    required TypeArgumentList? typeArgumentList,
-    required ArgumentListImpl argumentList,
-    required bool isConst,
-    required AstNode errorNode,
-    required List<WhyNotPromotedGetter> whyNotPromotedList,
-  }) {
-    if (typeArgumentList != null) {
-      _resolveInvocationWithTypeArguments(
-        rawType: rawType,
-        typeArgumentList: typeArgumentList,
-        argumentList: argumentList,
-        whyNotPromotedList: whyNotPromotedList,
-      );
-    } else {
-      _resolveInvocationWithoutTypeArguments(
-        rawType: rawType,
-        contextType: contextType,
-        argumentList: argumentList,
-        isConst: isConst,
-        errorNode: errorNode,
-        whyNotPromotedList: whyNotPromotedList,
-      );
-    }
-    _setCorrespondingParameters(argumentList, _invokeType!);
-  }
-
-  void _resolveInvocationWithoutTypeArguments({
-    required FunctionType rawType,
-    required DartType? contextType,
-    required ArgumentList argumentList,
-    required bool isConst,
-    required AstNode errorNode,
-    required List<WhyNotPromotedGetter> whyNotPromotedList,
-  }) {
-    var typeParameters = rawType.typeFormals;
-
-    if (typeParameters.isEmpty) {
-      InferenceContext.setType(argumentList, rawType);
-      _resolveArguments(argumentList, whyNotPromotedList);
-
-      _typeArgumentTypes = const <DartType>[];
-      _invokeType = rawType;
-    } else {
-      rawType = _getFreshType(rawType) as FunctionType;
-
-      var downwardsTypeArguments = _inferDownwards(
-        rawType: rawType,
-        contextType: contextType,
-        isConst: isConst,
-        errorNode: errorNode,
-      )!;
-
-      var downwardsInvokeType = rawType.instantiate(downwardsTypeArguments);
-      InferenceContext.setType(argumentList, downwardsInvokeType);
-
-      _resolveArguments(argumentList, whyNotPromotedList);
-
-      _typeArgumentTypes = _inferUpwards(
-        rawType: rawType,
-        argumentList: argumentList,
-        contextType: contextType,
-        isConst: isConst,
-        errorNode: errorNode,
-      );
-      _invokeType = rawType.instantiate(_typeArgumentTypes!);
-    }
-  }
-
-  void _resolveInvocationWithTypeArguments({
-    required FunctionType rawType,
-    required TypeArgumentList typeArgumentList,
-    required ArgumentList argumentList,
-    required List<WhyNotPromotedGetter> whyNotPromotedList,
-  }) {
-    var typeParameters = rawType.typeFormals;
-
-    List<DartType> typeArguments;
-    if (typeArgumentList.arguments.length != typeParameters.length) {
-      _errorReporter.reportErrorForNode(
-        CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD,
-        typeArgumentList,
-        [
-          rawType,
-          typeParameters.length,
-          typeArgumentList.arguments.length,
-        ],
-      );
-      typeArguments = List.filled(
-        typeParameters.length,
-        DynamicTypeImpl.instance,
-      );
-    } else {
-      typeArguments = typeArgumentList.arguments
-          .map((typeArgument) => typeArgument.typeOrThrow)
-          .toList(growable: true);
-    }
-
-    var invokeType = rawType.instantiate(typeArguments);
-    InferenceContext.setType(argumentList, invokeType);
-
-    _resolveArguments(argumentList, whyNotPromotedList);
-
-    _typeArgumentTypes = typeArguments;
-    _invokeType = invokeType;
-  }
-
-  void _setCorrespondingParameters(
-    ArgumentListImpl argumentList,
-    FunctionType invokeType,
-  ) {
-    var parameters = ResolverVisitor.resolveArgumentsToParameters(
-      argumentList: argumentList,
-      parameters: invokeType.parameters,
-      errorReporter: _errorReporter,
-    );
-    argumentList.correspondingStaticParameters = parameters;
-  }
-
-  static DartType? _getFreshType(DartType? type) {
-    if (type is FunctionType) {
-      var parameters = getFreshTypeParameters(type.typeFormals);
-      return parameters.applyToFunctionType(type);
-    } else {
-      return type;
-    }
+    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
new file mode 100644
index 0000000..c40a4ff
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -0,0 +1,545 @@
+// 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/base/errors.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/member.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+
+/// Specialization of [InvocationInferrer] for performing type inference on AST
+/// nodes of type [Annotation] that resolve to a constructor invocation.
+class AnnotationInferrer extends FullInvocationInferrer<AnnotationImpl> {
+  /// The identifier pointing to the constructor that's being invoked, or `null`
+  /// if a constructor name couldn't be found (should only happen when
+  /// recovering from errors).  If the constructor is generic, this identifier's
+  /// static element will be updated to point to a [ConstructorMember] with type
+  /// arguments filled in.
+  final SimpleIdentifierImpl? constructorName;
+
+  AnnotationInferrer({required this.constructorName}) : super._();
+
+  @override
+  bool get _needsTypeArgumentBoundsCheck => true;
+
+  @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<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+    if (invokeType != null) {
+      var constructorElement = ConstructorMember.from(
+        node.element as ConstructorElement,
+        invokeType.returnType as InterfaceType,
+      );
+      constructorName?.staticElement = constructorElement;
+      node.element = constructorElement;
+      return constructorElement.parameters;
+    }
+    return null;
+  }
+}
+
+/// 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._();
+
+  bool get _needsTypeArgumentBoundsCheck => false;
+
+  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);
+
+    List<DartType>? typeArgumentTypes;
+    FunctionType? invokeType;
+    if (_isGenericInferenceDisabled(resolver)) {
+      if (rawType != null && rawType.typeFormals.isNotEmpty) {
+        typeArgumentTypes = List.filled(
+          rawType.typeFormals.length,
+          DynamicTypeImpl.instance,
+        );
+      } 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);
+        typeArgumentTypes = List.filled(
+          typeParameters.length,
+          DynamicTypeImpl.instance,
+        );
+      } else {
+        typeArgumentTypes = typeArgumentList.arguments
+            .map((typeArgument) => typeArgument.typeOrThrow)
+            .toList(growable: true);
+        if (rawType != null && _needsTypeArgumentBoundsCheck) {
+          var typeParameters = rawType.typeFormals;
+          var substitution = Substitution.fromPairs(
+            typeParameters,
+            typeArgumentTypes,
+          );
+          for (var i = 0; i < typeParameters.length; i++) {
+            var typeParameter = typeParameters[i];
+            var bound = typeParameter.bound;
+            if (bound != null) {
+              bound = resolver.definingLibrary.toLegacyTypeIfOptOut(bound);
+              bound = substitution.substituteType(bound);
+              var typeArgument = typeArgumentTypes[i];
+              if (!resolver.typeSystem.isSubtypeOf(typeArgument, bound)) {
+                resolver.errorReporter.reportErrorForNode(
+                  CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
+                  typeArgumentList.arguments[i],
+                  [typeArgument, typeParameter.name, bound],
+                );
+              }
+            }
+          }
+        }
+      }
+
+      invokeType = rawType?.instantiate(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(
+        typeParameters: rawType.typeFormals,
+        parameters: const <ParameterElement>[],
+        declaredReturnType: rawType.returnType,
+        argumentTypes: const <DartType>[],
+        contextReturnType: contextType,
+        downwards: true,
+        isConst: _getIsConst(node),
+        errorReporter: resolver.errorReporter,
+        errorNode: _getErrorNode(node),
+        genericMetadataIsEnabled: resolver.genericMetadataIsEnabled,
+      )!;
+
+      invokeType = rawType.instantiate(downwardsTypeArguments);
+    }
+
+    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);
+          }
+        }
+        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 [];
+      }
+    }
+
+    var parameters = _storeResult(node, typeArgumentTypes, invokeType);
+    if (parameters != null) {
+      argumentList.correspondingStaticParameters =
+          ResolverVisitor.resolveArgumentsToParameters(
+        argumentList: argumentList,
+        parameters: parameters,
+        errorReporter: resolver.errorReporter,
+      );
+    }
+    var returnType = InvocationInferrer.computeInvokeReturnType(invokeType);
+    return _refineReturnType(resolver, node, returnType);
+  }
+
+  AstNode _getErrorNode(Node node) => node;
+
+  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) {
+    resolver.errorReporter.reportErrorForNode(
+      _wrongNumberOfTypeArgumentsErrorCode,
+      typeArgumentList,
+      [
+        rawType,
+        typeParameters.length,
+        typeArgumentList.arguments.length,
+      ],
+    );
+  }
+
+  List<ParameterElement>? _storeResult(
+      Node node, List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+    return invokeType?.parameters;
+  }
+}
+
+/// Specialization of [InvocationInferrer] for performing type inference on AST
+/// nodes of type [FunctionExpressionInvocation].
+class FunctionExpressionInvocationInferrer
+    extends InvocationExpressionInferrer<FunctionExpressionInvocationImpl> {
+  const FunctionExpressionInvocationInferrer() : super._();
+
+  @override
+  ExpressionImpl _getErrorNode(FunctionExpressionInvocationImpl node) =>
+      node.function;
+}
+
+/// Specialization of [InvocationInferrer] for performing type inference on AST
+/// nodes of type [InstanceCreationExpression].
+class InstanceCreationInferrer
+    extends FullInvocationInferrer<InstanceCreationExpressionImpl> {
+  const InstanceCreationInferrer() : super._();
+
+  @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) {
+    // 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) {
+    // Error reporting for instance creations is done elsewhere.
+  }
+
+  @override
+  List<ParameterElement>? _storeResult(InstanceCreationExpressionImpl node,
+      List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+    if (invokeType != null) {
+      var constructedType = invokeType.returnType;
+      node.constructorName.type.type = constructedType;
+      var constructorElement = ConstructorMember.from(
+        node.constructorName.staticElement!,
+        constructedType as InterfaceType,
+      );
+      node.constructorName.staticElement = constructorElement;
+      return constructorElement.parameters;
+    }
+    return null;
+  }
+}
+
+/// Specialization of [InvocationInferrer] for performing type inference on AST
+/// nodes derived from [InvocationExpression].
+abstract class InvocationExpressionInferrer<
+        Node extends InvocationExpressionImpl>
+    extends FullInvocationInferrer<Node> {
+  const InvocationExpressionInferrer._() : super._();
+
+  @override
+  ArgumentListImpl _getArgumentList(Node node) => node.argumentList;
+
+  @override
+  Expression _getErrorNode(Node node) => node.function;
+
+  @override
+  TypeArgumentListImpl? _getTypeArguments(Node node) => node.typeArguments;
+
+  @override
+  List<ParameterElement>? _storeResult(
+      Node node, List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+    node.typeArgumentTypes = typeArgumentTypes;
+    node.staticInvokeType = invokeType ?? DynamicTypeImpl.instance;
+    return super._storeResult(node, 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._();
+
+  /// 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,
+  }) {
+    var parameters = rawType?.parameters;
+    var namedParameters = <String, ParameterElement>{};
+    if (parameters != null) {
+      for (var i = 0; i < parameters.length; i++) {
+        var parameter = parameters[i];
+        if (parameter.isNamed) {
+          namedParameters[parameter.name] = parameter;
+        }
+      }
+    }
+    var argumentList = _getArgumentList(node);
+    resolver.checkUnreachableNode(argumentList);
+    var flow = resolver.flowAnalysis.flow;
+    var positionalParameterIndex = 0;
+    for (var argument in _iterateArguments(resolver, argumentList)) {
+      ParameterElement? parameter;
+      if (argument is NamedExpression) {
+        parameter = namedParameters[argument.name.label.name];
+      } else if (parameters != null) {
+        while (positionalParameterIndex < parameters.length) {
+          parameter = parameters[positionalParameterIndex++];
+          if (!parameter.isNamed) {
+            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));
+      }
+    }
+  }
+
+  /// 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) {
+    if (type is FunctionType) {
+      return type.returnType;
+    } else {
+      return DynamicTypeImpl.instance;
+    }
+  }
+}
+
+/// Specialization of [InvocationInferrer] for performing type inference on AST
+/// 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._();
+
+  @override
+  DartType? _computeContextForArgument(
+      ResolverVisitor resolver,
+      MethodInvocationImpl node,
+      DartType parameterType,
+      DartType? methodInvocationContext) {
+    var contextType = super._computeContextForArgument(
+        resolver, node, parameterType, methodInvocationContext);
+    var targetType = node.realTarget?.staticType;
+    if (targetType != null) {
+      contextType = resolver.typeSystem.refineNumericInvocationContext(
+          targetType,
+          node.methodName.staticElement,
+          methodInvocationContext,
+          parameterType);
+    }
+    return contextType;
+  }
+
+  @override
+  DartType _refineReturnType(ResolverVisitor resolver,
+      MethodInvocationImpl node, DartType returnType) {
+    var targetType = node.realTarget?.staticType;
+    if (targetType != null) {
+      returnType = resolver.typeSystem.refineNumericInvocationType(
+        targetType,
+        node.methodName.staticElement,
+        [
+          for (var argument in node.argumentList.arguments) argument.typeOrThrow
+        ],
+        returnType,
+      );
+    }
+    return returnType;
+  }
+}
+
+/// Specialization of [InvocationInferrer] for performing type inference on AST
+/// nodes of type [RedirectingConstructorInvocation].
+class RedirectingConstructorInvocationInferrer
+    extends InvocationInferrer<RedirectingConstructorInvocationImpl> {
+  const RedirectingConstructorInvocationInferrer() : super._();
+
+  @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);
+  }
+}
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 2c26796..724f3c1 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/migratable_ast_info_provider.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -76,8 +77,9 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
-  void resolve(MethodInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+  void resolve(
+      MethodInvocationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     _invocation = node;
 
     var nameNode = node.methodName;
@@ -87,7 +89,8 @@
     var receiver = node.realTarget;
 
     if (receiver == null) {
-      _resolveReceiverNull(node, nameNode, name, whyNotPromotedList);
+      _resolveReceiverNull(node, nameNode, name, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -95,7 +98,8 @@
       var receiverElement = receiver.staticElement;
       if (receiverElement is PrefixElement) {
         _resolveReceiverPrefix(
-            node, receiverElement, nameNode, name, whyNotPromotedList);
+            node, receiverElement, nameNode, name, whyNotPromotedList,
+            contextType: contextType);
         return;
       }
     }
@@ -103,20 +107,23 @@
     if (receiver is IdentifierImpl) {
       var receiverElement = receiver.staticElement;
       if (receiverElement is ExtensionElement) {
-        _resolveExtensionMember(node, receiver, receiverElement, nameNode, name,
-            whyNotPromotedList);
+        _resolveExtensionMember(
+            node, receiver, receiverElement, nameNode, name, whyNotPromotedList,
+            contextType: contextType);
         return;
       }
     }
 
     if (receiver is SuperExpressionImpl) {
-      _resolveReceiverSuper(node, receiver, nameNode, name, whyNotPromotedList);
+      _resolveReceiverSuper(node, receiver, nameNode, name, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (receiver is ExtensionOverrideImpl) {
       _resolveExtensionOverride(
-          node, receiver, nameNode, name, whyNotPromotedList);
+          node, receiver, nameNode, name, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -124,13 +131,15 @@
       var element = receiver.staticElement;
       if (element is ClassElement) {
         _resolveReceiverTypeLiteral(
-            node, element, nameNode, name, whyNotPromotedList);
+            node, element, nameNode, name, whyNotPromotedList,
+            contextType: contextType);
         return;
       } else if (element is TypeAliasElement) {
         var aliasedType = element.aliasedType;
         if (aliasedType is InterfaceType) {
           _resolveReceiverTypeLiteral(
-              node, aliasedType.element, nameNode, name, whyNotPromotedList);
+              node, aliasedType.element, nameNode, name, whyNotPromotedList,
+              contextType: contextType);
           return;
         }
       }
@@ -139,17 +148,20 @@
     DartType receiverType = receiver.typeOrThrow;
 
     if (_typeSystem.isDynamicBounded(receiverType)) {
-      _resolveReceiverDynamicBounded(node, whyNotPromotedList);
+      _resolveReceiverDynamicBounded(node, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (receiverType is NeverTypeImpl) {
-      _resolveReceiverNever(node, receiver, receiverType, whyNotPromotedList);
+      _resolveReceiverNever(node, receiver, receiverType, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (receiverType is VoidType) {
-      _reportUseOfVoidType(node, receiver, whyNotPromotedList);
+      _reportUseOfVoidType(node, receiver, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -160,7 +172,8 @@
 
     if (_typeSystem.isFunctionBounded(receiverType)) {
       _resolveReceiverFunctionBounded(
-          node, receiver, receiverType, nameNode, name, whyNotPromotedList);
+          node, receiver, receiverType, nameNode, name, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -175,7 +188,8 @@
         nameNode,
         [name, receiver.type.name.name],
       );
-      _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+      _setDynamicResolution(node,
+          whyNotPromotedList: whyNotPromotedList, contextType: contextType);
       return;
     }
 
@@ -187,6 +201,7 @@
       name: name,
       receiverErrorNode: receiver,
       whyNotPromotedList: whyNotPromotedList,
+      contextType: contextType,
     );
   }
 
@@ -244,10 +259,13 @@
     }
   }
 
-  void _reportInvocationOfNonFunction(MethodInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+  void _reportInvocationOfNonFunction(
+      MethodInvocationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     _setDynamicResolution(node,
-        setNameTypeToDynamic: false, whyNotPromotedList: whyNotPromotedList);
+        setNameTypeToDynamic: false,
+        whyNotPromotedList: whyNotPromotedList,
+        contextType: contextType);
     _resolver.errorReporter.reportErrorForNode(
       CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION,
       node.methodName,
@@ -279,8 +297,10 @@
     required String? prefix,
     required String name,
     required List<WhyNotPromotedGetter> whyNotPromotedList,
+    required DartType? contextType,
   }) {
-    _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+    _setDynamicResolution(node,
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
 
     if (_definingLibrary.shouldIgnoreUndefined(prefix: prefix, name: name)) {
       return;
@@ -294,41 +314,29 @@
   }
 
   void _reportUseOfVoidType(MethodInvocationImpl node, AstNode errorNode,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
-    _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
+    _setDynamicResolution(node,
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
     _resolver.errorReporter.reportErrorForNode(
       CompileTimeErrorCode.USE_OF_VOID_RESULT,
       errorNode,
     );
   }
 
-  /// [InvocationExpression.staticInvokeType] has been set for the [node].
-  /// Use it to set context for arguments, and resolve them.
-  void _resolveArguments(MethodInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
-    // TODO(scheglov) This is bad, don't write raw type, carry it
-    _inferenceHelper.inferArgumentTypesForInvocation(
-      node,
-      node.methodName.staticType,
-    );
-    _resolver.visitArgumentList(node.argumentList,
+  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);
-  }
-
-  void _resolveArguments_finishInference(MethodInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
-    _resolveArguments(node, whyNotPromotedList);
-
-    // TODO(scheglov) This is bad, don't put / get raw FunctionType this way.
-    _inferenceHelper.inferGenericInvocationExpression(
-      node,
-      node.methodName.staticType,
-    );
-
-    DartType staticStaticType = _inferenceHelper.computeInvokeReturnType(
-      node.staticInvokeType,
-    );
-    _inferenceHelper.recordStaticType(node, staticStaticType);
+    _inferenceHelper.recordStaticType(node, staticStaticType,
+        contextType: contextType);
   }
 
   /// Given that we are accessing a property of the given [classElement] with the
@@ -355,13 +363,15 @@
       ExtensionElement extension,
       SimpleIdentifierImpl nameNode,
       String name,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var getter = extension.getGetter(name);
     if (getter != null) {
       getter = _resolver.toLegacyElement(getter);
       nameNode.staticElement = getter;
       _reportStaticAccessToInstanceMember(getter, nameNode);
-      _rewriteAsFunctionExpressionInvocation(node, getter.returnType);
+      _rewriteAsFunctionExpressionInvocation(node, getter.returnType,
+          contextType: contextType);
       return;
     }
 
@@ -370,11 +380,13 @@
       method = _resolver.toLegacyElement(method);
       nameNode.staticElement = method;
       _reportStaticAccessToInstanceMember(method, nameNode);
-      _setResolution(node, method.type, whyNotPromotedList);
+      _setResolution(node, method.type, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
-    _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+    _setDynamicResolution(node,
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
     // This method is only called for named extensions, so we know that
     // `extension.name` is non-`null`.
     _resolver.errorReporter.reportErrorForNode(
@@ -389,12 +401,14 @@
       ExtensionOverride override,
       SimpleIdentifierImpl nameNode,
       String name,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var result = _extensionResolver.getOverrideMember(override, name);
     var member = _resolver.toLegacyElement(result.getter);
 
     if (member == null) {
-      _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+      _setDynamicResolution(node,
+          whyNotPromotedList: whyNotPromotedList, contextType: contextType);
       // Extension overrides always refer to named extensions, so we can safely
       // assume `override.staticElement!.name` is non-`null`.
       _resolver.errorReporter.reportErrorForNode(
@@ -423,53 +437,61 @@
     nameNode.staticElement = member;
 
     if (member is PropertyAccessorElement) {
-      return _rewriteAsFunctionExpressionInvocation(node, member.returnType);
+      return _rewriteAsFunctionExpressionInvocation(node, member.returnType,
+          contextType: contextType);
     }
 
-    _setResolution(node, member.type, whyNotPromotedList);
+    _setResolution(node, member.type, whyNotPromotedList,
+        contextType: contextType);
   }
 
-  void _resolveReceiverDynamicBounded(MethodInvocationImpl node,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+  void _resolveReceiverDynamicBounded(
+      MethodInvocationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var nameNode = node.methodName;
 
     var objectElement = _typeSystem.typeProvider.objectElement;
     var target = objectElement.getMethod(nameNode.name);
 
-    var hasMatchingObjectMethod = false;
+    FunctionType? rawType;
     if (target is MethodElement && !target.isStatic) {
       var arguments = node.argumentList.arguments;
-      hasMatchingObjectMethod = arguments.length == target.parameters.length &&
-          !arguments.any((e) => e is NamedExpression);
+      var hasMatchingObjectMethod =
+          arguments.length == target.parameters.length &&
+              !arguments.any((e) => e is NamedExpression);
       if (hasMatchingObjectMethod) {
         target = _resolver.toLegacyElement(target);
         nameNode.staticElement = target;
-        node.staticInvokeType = target.type;
+        rawType = target.type;
         node.staticType = target.returnType;
       }
     }
 
-    if (!hasMatchingObjectMethod) {
+    if (rawType == null) {
       nameNode.staticType = DynamicTypeImpl.instance;
-      node.staticInvokeType = DynamicTypeImpl.instance;
       node.staticType = DynamicTypeImpl.instance;
     }
 
     _setExplicitTypeArgumentTypes();
-    _resolver.visitArgumentList(node.argumentList,
-        whyNotPromotedList: whyNotPromotedList);
+    MethodInvocationInferrer.forNode(node).resolveInvocation(
+        resolver: _resolver,
+        node: node,
+        rawType: rawType,
+        whyNotPromotedList: whyNotPromotedList,
+        contextType: contextType);
   }
 
   void _resolveReceiverFunctionBounded(
-    MethodInvocationImpl node,
-    Expression receiver,
-    DartType receiverType,
-    SimpleIdentifierImpl nameNode,
-    String name,
-    List<WhyNotPromotedGetter> whyNotPromotedList,
-  ) {
+      MethodInvocationImpl node,
+      Expression receiver,
+      DartType receiverType,
+      SimpleIdentifierImpl nameNode,
+      String name,
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     if (name == FunctionElement.CALL_METHOD_NAME) {
-      _setResolution(node, receiverType, whyNotPromotedList);
+      _setResolution(node, receiverType, whyNotPromotedList,
+          contextType: contextType);
       // TODO(scheglov) Replace this with using FunctionType directly.
       // Here was erase resolution that _setResolution() sets.
       nameNode.staticElement = null;
@@ -485,15 +507,13 @@
       name: name,
       receiverErrorNode: nameNode,
       whyNotPromotedList: whyNotPromotedList,
+      contextType: contextType,
     );
   }
 
-  void _resolveReceiverNever(
-    MethodInvocationImpl node,
-    Expression receiver,
-    DartType receiverType,
-    List<WhyNotPromotedGetter> whyNotPromotedList,
-  ) {
+  void _resolveReceiverNever(MethodInvocationImpl node, Expression receiver,
+      DartType receiverType, List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     _setExplicitTypeArgumentTypes();
 
     if (receiverType == NeverTypeImpl.instanceNullable) {
@@ -507,9 +527,11 @@
           node,
           objectMember.type,
           whyNotPromotedList,
+          contextType: contextType,
         );
       } else {
-        _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+        _setDynamicResolution(node,
+            whyNotPromotedList: whyNotPromotedList, contextType: contextType);
         _resolver.nullableDereferenceVerifier.report(
           CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
           methodName,
@@ -524,7 +546,12 @@
       node.staticInvokeType = _dynamicType;
       node.staticType = NeverTypeImpl.instance;
 
-      _resolveArguments(node, whyNotPromotedList);
+      MethodInvocationInferrer.forNode(node).resolveInvocation(
+          resolver: _resolver,
+          node: node,
+          rawType: null,
+          contextType: contextType,
+          whyNotPromotedList: whyNotPromotedList);
 
       _resolver.errorReporter.reportErrorForNode(
         HintCode.RECEIVER_OF_TYPE_NEVER,
@@ -538,7 +565,12 @@
       node.staticInvokeType = _dynamicType;
       node.staticType = _dynamicType;
 
-      _resolveArguments(node, whyNotPromotedList);
+      MethodInvocationInferrer.forNode(node).resolveInvocation(
+          resolver: _resolver,
+          node: node,
+          rawType: null,
+          contextType: contextType,
+          whyNotPromotedList: whyNotPromotedList);
       return;
     }
   }
@@ -547,7 +579,8 @@
       MethodInvocationImpl node,
       SimpleIdentifierImpl nameNode,
       String name,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var element = nameNode.scopeLookupResult!.getter;
     if (element != null) {
       element = _resolver.toLegacyElement(element);
@@ -557,23 +590,28 @@
         element = multiply.conflictingElements[0];
       }
       if (element is PropertyAccessorElement) {
-        return _rewriteAsFunctionExpressionInvocation(node, element.returnType);
+        return _rewriteAsFunctionExpressionInvocation(node, element.returnType,
+            contextType: contextType);
       }
       if (element is ExecutableElement) {
-        return _setResolution(node, element.type, whyNotPromotedList);
+        return _setResolution(node, element.type, whyNotPromotedList,
+            contextType: contextType);
       }
       if (element is VariableElement) {
         _resolver.checkReadOfNotAssignedLocalVariable(nameNode, element);
         var targetType =
             _localVariableTypeProvider.getType(nameNode, isRead: true);
-        return _rewriteAsFunctionExpressionInvocation(node, targetType);
+        return _rewriteAsFunctionExpressionInvocation(node, targetType,
+            contextType: contextType);
       }
       // TODO(scheglov) This is a questionable distinction.
       if (element is PrefixElement) {
-        _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+        _setDynamicResolution(node,
+            whyNotPromotedList: whyNotPromotedList, contextType: contextType);
         return _reportPrefixIdentifierNotFollowedByDot(nameNode);
       }
-      return _reportInvocationOfNonFunction(node, whyNotPromotedList);
+      return _reportInvocationOfNonFunction(node, whyNotPromotedList,
+          contextType: contextType);
     }
 
     DartType receiverType;
@@ -587,6 +625,7 @@
         prefix: null,
         name: node.methodName.name,
         whyNotPromotedList: whyNotPromotedList,
+        contextType: contextType,
       );
     }
 
@@ -598,6 +637,7 @@
       name: name,
       receiverErrorNode: nameNode,
       whyNotPromotedList: whyNotPromotedList,
+      contextType: contextType,
     );
   }
 
@@ -606,7 +646,8 @@
       PrefixElement prefix,
       SimpleIdentifierImpl nameNode,
       String name,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     // Note: prefix?.bar is reported as an error in ElementResolver.
 
     if (name == FunctionElement.LOAD_LIBRARY_NAME) {
@@ -618,7 +659,8 @@
         if (element is ExecutableElement) {
           nameNode.staticElement = element;
           return _setResolution(
-              node, (element as ExecutableElement).type, whyNotPromotedList);
+              node, (element as ExecutableElement).type, whyNotPromotedList,
+              contextType: contextType);
         }
       }
     }
@@ -633,11 +675,13 @@
     }
 
     if (element is PropertyAccessorElement) {
-      return _rewriteAsFunctionExpressionInvocation(node, element.returnType);
+      return _rewriteAsFunctionExpressionInvocation(node, element.returnType,
+          contextType: contextType);
     }
 
     if (element is ExecutableElement) {
-      return _setResolution(node, element.type, whyNotPromotedList);
+      return _setResolution(node, element.type, whyNotPromotedList,
+          contextType: contextType);
     }
 
     _reportUndefinedFunction(
@@ -645,6 +689,7 @@
       prefix: prefix.name,
       name: name,
       whyNotPromotedList: whyNotPromotedList,
+      contextType: contextType,
     );
   }
 
@@ -653,10 +698,12 @@
       SuperExpression receiver,
       SimpleIdentifierImpl nameNode,
       String name,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var enclosingClass = _resolver.enclosingClass;
     if (SuperContext.of(receiver) != SuperContext.valid) {
-      _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+      _setDynamicResolution(node,
+          whyNotPromotedList: whyNotPromotedList, contextType: contextType);
       return;
     }
 
@@ -671,9 +718,11 @@
     if (target != null) {
       nameNode.staticElement = target;
       if (target is PropertyAccessorElement) {
-        return _rewriteAsFunctionExpressionInvocation(node, target.returnType);
+        return _rewriteAsFunctionExpressionInvocation(node, target.returnType,
+            contextType: contextType);
       }
-      _setResolution(node, target.type, whyNotPromotedList);
+      _setResolution(node, target.type, whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
@@ -683,7 +732,8 @@
     target = _inheritance.getInherited2(enclosingClass, _currentName!);
     if (target != null) {
       nameNode.staticElement = target;
-      _setResolution(node, target.type, whyNotPromotedList);
+      _setResolution(node, target.type, whyNotPromotedList,
+          contextType: contextType);
 
       _resolver.errorReporter.reportErrorForNode(
           CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE,
@@ -693,7 +743,8 @@
     }
 
     // Nothing help, there is no target at all.
-    _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+    _setDynamicResolution(node,
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
     _resolver.errorReporter.reportErrorForNode(
         CompileTimeErrorCode.UNDEFINED_SUPER_METHOD,
         nameNode,
@@ -708,6 +759,7 @@
     required String name,
     required Expression receiverErrorNode,
     required List<WhyNotPromotedGetter> whyNotPromotedList,
+    required DartType? contextType,
   }) {
     var result = _resolver.typePropertyResolver.resolve(
       receiver: receiver,
@@ -730,12 +782,15 @@
       }
 
       if (target is PropertyAccessorElement) {
-        return _rewriteAsFunctionExpressionInvocation(node, target.returnType);
+        return _rewriteAsFunctionExpressionInvocation(node, target.returnType,
+            contextType: contextType);
       }
-      return _setResolution(node, target.type, whyNotPromotedList);
+      return _setResolution(node, target.type, whyNotPromotedList,
+          contextType: contextType);
     }
 
-    _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+    _setDynamicResolution(node,
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
 
     if (!result.needsGetterError) {
       return;
@@ -762,7 +817,8 @@
       ClassElement receiver,
       SimpleIdentifierImpl nameNode,
       String name,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     if (node.isCascaded) {
       receiver = _typeType.element;
     }
@@ -774,16 +830,20 @@
         nameNode.staticElement = element;
         if (element is PropertyAccessorElement) {
           return _rewriteAsFunctionExpressionInvocation(
-              node, element.returnType);
+              node, element.returnType,
+              contextType: contextType);
         }
-        _setResolution(node, element.type, whyNotPromotedList);
+        _setResolution(node, element.type, whyNotPromotedList,
+            contextType: contextType);
       } else {
-        _reportInvocationOfNonFunction(node, whyNotPromotedList);
+        _reportInvocationOfNonFunction(node, whyNotPromotedList,
+            contextType: contextType);
       }
       return;
     }
 
-    _setDynamicResolution(node, whyNotPromotedList: whyNotPromotedList);
+    _setDynamicResolution(node,
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
     if (nameNode.name == 'new') {
       // Attempting to invoke the unnamed constructor via `C.new(`.
       if (_resolver.isConstructorTearoffsEnabled) {
@@ -820,11 +880,11 @@
   /// an [InterfaceType]. So, it should be represented as instead as a
   /// [FunctionExpressionInvocation].
   void _rewriteAsFunctionExpressionInvocation(
-    MethodInvocationImpl node,
-    DartType getterReturnType,
-  ) {
+      MethodInvocationImpl node, DartType getterReturnType,
+      {required DartType? contextType}) {
     var targetType = _resolveTypeParameter(getterReturnType);
-    _inferenceHelper.recordStaticType(node.methodName, targetType);
+    _inferenceHelper.recordStaticType(node.methodName, targetType,
+        contextType: contextType);
 
     ExpressionImpl functionExpression;
     var target = node.target;
@@ -861,20 +921,21 @@
     );
     NodeReplacer.replace(node, invocation);
     node.setProperty(_rewriteResultKey, invocation);
-    InferenceContext.setTypeFromNode(invocation, node);
     _resolver.flowAnalysis.transferTestData(node, invocation);
   }
 
   void _setDynamicResolution(MethodInvocationImpl node,
       {bool setNameTypeToDynamic = true,
-      required List<WhyNotPromotedGetter> whyNotPromotedList}) {
+      required List<WhyNotPromotedGetter> whyNotPromotedList,
+      required DartType? contextType}) {
     if (setNameTypeToDynamic) {
       node.methodName.staticType = _dynamicType;
     }
     node.staticInvokeType = _dynamicType;
     node.staticType = _dynamicType;
     _setExplicitTypeArgumentTypes();
-    _resolveArguments_finishInference(node, whyNotPromotedList);
+    _resolveArguments_finishInference(node, whyNotPromotedList,
+        contextType: contextType);
   }
 
   /// Set explicitly specified type argument types, or empty if not specified.
@@ -894,28 +955,36 @@
   }
 
   void _setResolution(MethodInvocationImpl node, DartType type,
-      List<WhyNotPromotedGetter> whyNotPromotedList) {
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     // TODO(scheglov) We need this for StaticTypeAnalyzer to run inference.
     // But it seems weird. Do we need to know the raw type of a function?!
     node.methodName.staticType = type;
 
     if (type == _dynamicType || _isCoreFunction(type)) {
       _setDynamicResolution(node,
-          setNameTypeToDynamic: false, whyNotPromotedList: whyNotPromotedList);
+          setNameTypeToDynamic: false,
+          whyNotPromotedList: whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (type is FunctionType) {
       _inferenceHelper.resolveMethodInvocation(
-          node: node, rawType: type, whyNotPromotedList: whyNotPromotedList);
+          node: node,
+          rawType: type,
+          whyNotPromotedList: whyNotPromotedList,
+          contextType: contextType);
       return;
     }
 
     if (type is VoidType) {
-      return _reportUseOfVoidType(node, node.methodName, whyNotPromotedList);
+      return _reportUseOfVoidType(node, node.methodName, whyNotPromotedList,
+          contextType: contextType);
     }
 
-    _reportInvocationOfNonFunction(node, whyNotPromotedList);
+    _reportInvocationOfNonFunction(node, whyNotPromotedList,
+        contextType: contextType);
   }
 
   /// Resolver visitor is separated from the elements resolver, which calls
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 969d189..5063c86 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -213,7 +213,7 @@
           typeArguments: typeArguments,
           nullabilitySuffix: nullability,
         );
-        type = typeSystem.toLegacyType(type);
+        type = typeSystem.toLegacyTypeIfOptOut(type);
         return _verifyTypeAliasForContext(node, element, type);
       } else if (_isInstanceCreation(node)) {
         _ErrorHelper(errorReporter).reportNewWithNonType(node);
diff --git a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
index 376a9d7..9667c37f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/dart/resolver/assignment_expression_resolver.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -40,9 +41,9 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
-  void resolve(PostfixExpressionImpl node) {
+  void resolve(PostfixExpressionImpl node, {required DartType? contextType}) {
     if (node.operator.type == TokenType.BANG) {
-      _resolveNullCheck(node);
+      _resolveNullCheck(node, contextType: contextType);
       return;
     }
 
@@ -65,7 +66,7 @@
 
     var receiverType = node.readType!;
     _resolve1(node, receiverType);
-    _resolve2(node, receiverType);
+    _resolve2(node, receiverType, contextType: contextType);
   }
 
   /// Check that the result [type] of a prefix or postfix `++` or `--`
@@ -97,11 +98,11 @@
       // We are invoking a getter and then invoking the returned function.
       //
       FunctionType propertyType = element.type;
-      return _resolver.inferenceHelper.computeInvokeReturnType(
+      return InvocationInferrer.computeInvokeReturnType(
         propertyType.returnType,
       );
     } else if (element is ExecutableElement) {
-      return _resolver.inferenceHelper.computeInvokeReturnType(element.type);
+      return InvocationInferrer.computeInvokeReturnType(element.type);
     }
     return DynamicTypeImpl.instance;
   }
@@ -155,11 +156,13 @@
     }
   }
 
-  void _resolve2(PostfixExpressionImpl node, DartType receiverType) {
+  void _resolve2(PostfixExpressionImpl node, DartType receiverType,
+      {required DartType? contextType}) {
     Expression operand = node.operand;
 
     if (identical(receiverType, NeverTypeImpl.instance)) {
-      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance);
+      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance,
+          contextType: contextType);
     } else {
       DartType operatorReturnType;
       if (receiverType.isDartCoreInt) {
@@ -179,11 +182,13 @@
       }
     }
 
-    _inferenceHelper.recordStaticType(node, receiverType);
+    _inferenceHelper.recordStaticType(node, receiverType,
+        contextType: contextType);
     _resolver.nullShortingTermination(node);
   }
 
-  void _resolveNullCheck(PostfixExpressionImpl node) {
+  void _resolveNullCheck(PostfixExpressionImpl node,
+      {required DartType? contextType}) {
     var operand = node.operand;
 
     if (operand is SuperExpression) {
@@ -191,26 +196,24 @@
         ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR,
         node,
       );
-      _inferenceHelper.recordStaticType(operand, DynamicTypeImpl.instance);
-      _inferenceHelper.recordStaticType(node, DynamicTypeImpl.instance);
+      _inferenceHelper.recordStaticType(operand, DynamicTypeImpl.instance,
+          contextType: contextType);
+      _inferenceHelper.recordStaticType(node, DynamicTypeImpl.instance,
+          contextType: contextType);
       return;
     }
 
-    var contextType = InferenceContext.getContext(node);
-    if (contextType != null) {
-      if (_isNonNullableByDefault) {
-        contextType = _typeSystem.makeNullable(contextType);
-      }
-      InferenceContext.setType(operand, contextType);
+    if (contextType != null && _isNonNullableByDefault) {
+      contextType = _typeSystem.makeNullable(contextType);
     }
 
-    operand.accept(_resolver);
+    _resolver.analyzeExpression(operand, contextType);
     operand = node.operand;
 
     var operandType = operand.typeOrThrow;
 
     var type = _typeSystem.promoteToNonNull(operandType);
-    _inferenceHelper.recordStaticType(node, type);
+    _inferenceHelper.recordStaticType(node, type, contextType: contextType);
 
     _resolver.nullShortingTermination(node);
     _resolver.flowAnalysis.flow?.nonNullAssert_end(operand);
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
index a108a8b..fc71e4f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/assignment_expression_resolver.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -40,14 +41,15 @@
 
   TypeSystemImpl get _typeSystem => _resolver.typeSystem;
 
-  void resolve(PrefixExpressionImpl node) {
+  void resolve(PrefixExpressionImpl node, {required DartType? contextType}) {
     var operator = node.operator.type;
 
     if (operator == TokenType.BANG) {
-      _resolveNegation(node);
+      _resolveNegation(node, contextType: contextType);
       return;
     }
 
+    var operand = node.operand;
     if (operator.isIncrementOperator) {
       var operandResolution = _resolver.resolveForWrite(
         node: node.operand,
@@ -57,7 +59,6 @@
       var readElement = operandResolution.readElement;
       var writeElement = operandResolution.writeElement;
 
-      var operand = node.operand;
       _resolver.setReadElement(operand, readElement);
       _resolver.setWriteElement(operand, writeElement);
       _resolver.migrationResolutionHooks
@@ -65,11 +66,18 @@
 
       _assignmentShared.checkFinalAlreadyAssigned(node.operand);
     } else {
-      node.operand.accept(_resolver);
+      DartType? innerContextType;
+      if (operator == TokenType.MINUS && operand is IntegerLiteralImpl) {
+        // Negated integer literals should undergo int->double conversion in the
+        // same circumstances as non-negated integer literals, so pass the
+        // context type through.
+        innerContextType = contextType;
+      }
+      _resolver.analyzeExpression(operand, innerContextType);
     }
 
     _resolve1(node);
-    _resolve2(node);
+    _resolve2(node, contextType: contextType);
   }
 
   /// Check that the result [type] of a prefix or postfix `++` or `--`
@@ -101,11 +109,11 @@
       // We are invoking a getter and then invoking the returned function.
       //
       var propertyType = element.type;
-      return _resolver.inferenceHelper.computeInvokeReturnType(
+      return InvocationInferrer.computeInvokeReturnType(
         propertyType.returnType,
       );
     } else if (element is ExecutableElement) {
-      return _resolver.inferenceHelper.computeInvokeReturnType(element.type);
+      return InvocationInferrer.computeInvokeReturnType(element.type);
     }
     return DynamicTypeImpl.instance;
   }
@@ -182,10 +190,11 @@
     }
   }
 
-  void _resolve2(PrefixExpressionImpl node) {
+  void _resolve2(PrefixExpressionImpl node, {required DartType? contextType}) {
     TokenType operator = node.operator.type;
     if (identical(node.readType, NeverTypeImpl.instance)) {
-      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance);
+      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance,
+          contextType: contextType);
     } else {
       // The other cases are equivalent to invoking a method.
       var staticMethodElement = node.staticElement;
@@ -206,23 +215,25 @@
           }
         }
       }
-      _inferenceHelper.recordStaticType(node, staticType);
+      _inferenceHelper.recordStaticType(node, staticType,
+          contextType: contextType);
     }
     _resolver.nullShortingTermination(node);
   }
 
-  void _resolveNegation(PrefixExpressionImpl node) {
+  void _resolveNegation(PrefixExpressionImpl node,
+      {required DartType? contextType}) {
     var operand = node.operand;
-    InferenceContext.setType(operand, _typeProvider.boolType);
 
-    operand.accept(_resolver);
+    _resolver.analyzeExpression(operand, _typeProvider.boolType);
     operand = node.operand;
     var whyNotPromoted = _resolver.flowAnalysis.flow?.whyNotPromoted(operand);
 
     _resolver.boolExpressionVerifier.checkForNonBoolNegationExpression(operand,
         whyNotPromoted: whyNotPromoted);
 
-    _inferenceHelper.recordStaticType(node, _typeProvider.boolType);
+    _inferenceHelper.recordStaticType(node, _typeProvider.boolType,
+        contextType: contextType);
 
     _resolver.flowAnalysis.flow?.logicalNot_end(node, operand);
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
index 4a1e23d..08996d4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
@@ -23,7 +23,7 @@
 
   TypeProviderImpl get _typeProvider => _resolver.typeProvider;
 
-  void resolve(PrefixedIdentifierImpl node) {
+  void resolve(PrefixedIdentifierImpl node, {required DartType? contextType}) {
     node.prefix.accept(_resolver);
 
     var resolver = PropertyElementResolver(_resolver);
@@ -44,13 +44,19 @@
     }
 
     if (identical(node.prefix.staticType, NeverTypeImpl.instance)) {
-      _inferenceHelper.recordStaticType(identifier, NeverTypeImpl.instance);
-      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance);
+      _inferenceHelper.recordStaticType(identifier, NeverTypeImpl.instance,
+          contextType: contextType);
+      _inferenceHelper.recordStaticType(node, NeverTypeImpl.instance,
+          contextType: contextType);
       return;
     }
 
     DartType type = DynamicTypeImpl.instance;
-    if (element is ClassElement) {
+    if (result.readElementRequested == null &&
+        result.readElementRecovery != null) {
+      // Since the element came from error recovery logic, its type isn't
+      // trustworthy; leave it as `dynamic`.
+    } else if (element is ClassElement) {
       if (_isExpressionIdentifier(node)) {
         var type = _typeProvider.typeType;
         node.staticType = type;
@@ -90,10 +96,11 @@
       // sites.
       // TODO(srawlins): Switch all resolution to use the latter method, in a
       // breaking change release.
-      type = _inferenceHelper.inferTearOff(node, identifier, type);
+      type = _inferenceHelper.inferTearOff(node, identifier, type,
+          contextType: contextType);
     }
-    _inferenceHelper.recordStaticType(identifier, type);
-    _inferenceHelper.recordStaticType(node, type);
+    _inferenceHelper.recordStaticType(identifier, type, contextType: null);
+    _inferenceHelper.recordStaticType(node, type, contextType: contextType);
   }
 
   /// Return the type that should be recorded for a node that resolved to the given accessor.
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index d0f35da..8e8bce1 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -253,17 +253,20 @@
   }
 
   /// If the [element] is not static, report the error on the [identifier].
-  void _checkForStaticAccessToInstanceMember(
+  ///
+  /// Returns `true` if an error was reported.
+  bool _checkForStaticAccessToInstanceMember(
     SimpleIdentifier identifier,
     ExecutableElement element,
   ) {
-    if (element.isStatic) return;
+    if (element.isStatic) return false;
 
     _errorReporter.reportErrorForNode(
       CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
       identifier,
       [identifier.name],
     );
+    return true;
   }
 
   void _checkForStaticMember(
@@ -494,6 +497,7 @@
     }
 
     ExecutableElement? readElement;
+    ExecutableElement? readElementRecovery;
     if (hasRead) {
       readElement = typeReference.getGetter(propertyName.name);
       if (readElement != null && !_isAccessible(readElement)) {
@@ -509,7 +513,10 @@
 
       if (readElement != null) {
         readElement = _resolver.toLegacyElement(readElement);
-        _checkForStaticAccessToInstanceMember(propertyName, readElement);
+        if (_checkForStaticAccessToInstanceMember(propertyName, readElement)) {
+          readElementRecovery = readElement;
+          readElement = null;
+        }
       } else {
         var code = typeReference.isEnum
             ? CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT
@@ -535,7 +542,10 @@
             [propertyName.name],
           );
         }
-        _checkForStaticAccessToInstanceMember(propertyName, writeElement);
+        if (_checkForStaticAccessToInstanceMember(propertyName, writeElement)) {
+          writeElementRecovery = writeElement;
+          writeElement = null;
+        }
       } else {
         // Recovery, try to use getter.
         writeElementRecovery = typeReference.getGetter(propertyName.name);
@@ -550,6 +560,7 @@
 
     return PropertyElementResolverResult(
       readElementRequested: readElement,
+      readElementRecovery: readElementRecovery,
       writeElementRequested: writeElement,
       writeElementRecovery: writeElementRecovery,
     );
@@ -564,6 +575,7 @@
     var memberName = propertyName.name;
 
     ExecutableElement? readElement;
+    ExecutableElement? readElementRecovery;
     if (hasRead) {
       readElement ??= extension.getGetter(memberName);
       readElement ??= extension.getMethod(memberName);
@@ -579,11 +591,15 @@
         );
       } else {
         readElement = _resolver.toLegacyElement(readElement);
-        _checkForStaticAccessToInstanceMember(propertyName, readElement);
+        if (_checkForStaticAccessToInstanceMember(propertyName, readElement)) {
+          readElementRecovery = readElement;
+          readElement = null;
+        }
       }
     }
 
     ExecutableElement? writeElement;
+    ExecutableElement? writeElementRecovery;
     if (hasWrite) {
       writeElement = extension.getSetter(memberName);
 
@@ -598,13 +614,18 @@
         );
       } else {
         writeElement = _resolver.toLegacyElement(writeElement);
-        _checkForStaticAccessToInstanceMember(propertyName, writeElement);
+        if (_checkForStaticAccessToInstanceMember(propertyName, writeElement)) {
+          writeElementRecovery = writeElement;
+          writeElement = null;
+        }
       }
     }
 
     return PropertyElementResolverResult(
       readElementRequested: readElement,
+      readElementRecovery: readElementRecovery,
       writeElementRequested: writeElement,
+      writeElementRecovery: writeElementRecovery,
     );
   }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 7145bd0..0cef5e5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -235,7 +235,7 @@
           ErrorCode errorCode = withClause == null
               ? CompileTimeErrorCode.EXTENDS_NON_CLASS
               : CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
-          _resolveType(extendsClause.superclass2, errorCode, asClass: true);
+          _resolveType(extendsClause.superclass, errorCode, asClass: true);
         }
 
         _resolveWithClause(withClause);
@@ -265,7 +265,7 @@
         node.typeParameters?.accept(this);
 
         _resolveType(
-          node.superclass2,
+          node.superclass,
           CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS,
           asClass: true,
         );
@@ -409,6 +409,7 @@
   void visitEnumDeclaration(covariant EnumDeclarationImpl node) {
     EnumElementImpl element = _elementWalker!.getEnum();
     node.name.staticElement = element;
+    _namedTypeResolver.enclosingClass = element;
 
     node.metadata.accept(this);
     _setElementAnnotations(node.metadata, element.metadata);
@@ -418,12 +419,17 @@
         _buildTypeParameterElements(node.typeParameters);
         node.typeParameters?.accept(this);
 
+        _resolveWithClause(node.withClause);
+        _resolveImplementsClause(node.implementsClause);
+
         _defineElements(element.accessors);
         _defineElements(element.methods);
         node.constants.accept(this);
         node.members.accept(this);
       });
     });
+
+    _namedTypeResolver.enclosingClass = null;
   }
 
   @override
@@ -774,7 +780,7 @@
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     var newNode = _astRewriter.instanceCreationExpression(_nameScope, node);
     if (newNode != node) {
-      if (node.constructorName.type2.typeArguments != null &&
+      if (node.constructorName.type.typeArguments != null &&
           newNode is MethodInvocation &&
           newNode.target is FunctionReference &&
           !_libraryElement.featureSet.isEnabled(Feature.constructor_tearoffs)) {
@@ -1287,7 +1293,7 @@
     if (clause == null) return;
 
     _resolveTypes(
-      clause.interfaces2,
+      clause.interfaces,
       CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
     );
   }
@@ -1296,7 +1302,7 @@
     if (clause == null) return;
 
     _resolveTypes(
-      clause.superclassConstraints2,
+      clause.superclassConstraints,
       CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE,
     );
   }
@@ -1305,7 +1311,7 @@
     var redirectedConstructor = node.redirectedConstructor;
     if (redirectedConstructor == null) return;
 
-    var namedType = redirectedConstructor.type2;
+    var namedType = redirectedConstructor.type;
     _namedTypeResolver.redirectedConstructor_namedType = namedType;
 
     redirectedConstructor.accept(this);
@@ -1366,7 +1372,7 @@
   void _resolveWithClause(WithClause? clause) {
     if (clause == null) return;
 
-    for (var namedType in clause.mixinTypes2) {
+    for (var namedType in clause.mixinTypes) {
       _namedTypeResolver.withClause_namedType = namedType;
       _resolveType(
         namedType as NamedTypeImpl,
diff --git a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
index 16c0251..35266a2 100644
--- a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
@@ -28,7 +28,7 @@
 
   TypeProviderImpl get _typeProvider => _resolver.typeProvider;
 
-  void resolve(SimpleIdentifierImpl node) {
+  void resolve(SimpleIdentifierImpl node, {required DartType? contextType}) {
     if (node.inDeclarationContext()) {
       return;
     }
@@ -38,7 +38,7 @@
     _resolver.checkReadOfNotAssignedLocalVariable(node, node.staticElement);
 
     _resolve1(node);
-    _resolve2(node);
+    _resolve2(node, contextType: contextType);
   }
 
   /// Return the type that should be recorded for a node that resolved to the given accessor.
@@ -189,7 +189,7 @@
     node.staticElement = element;
   }
 
-  void _resolve2(SimpleIdentifierImpl node) {
+  void _resolve2(SimpleIdentifierImpl node, {required DartType? contextType}) {
     var element = node.staticElement;
 
     if (element is ExtensionElement) {
@@ -242,10 +242,11 @@
       // sites.
       // TODO(srawlins): Switch all resolution to use the latter method, in a
       // breaking change release.
-      staticType =
-          _resolver.inferenceHelper.inferTearOff(node, node, staticType);
+      staticType = _resolver.inferenceHelper
+          .inferTearOff(node, node, staticType, contextType: contextType);
     }
-    _inferenceHelper.recordStaticType(node, staticType);
+    _inferenceHelper.recordStaticType(node, staticType,
+        contextType: contextType);
   }
 
   /// TODO(scheglov) this is duplicate
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 bb7a033..660a6eb 100644
--- a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
@@ -20,6 +20,28 @@
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 
+/// Context for inferring the types of elements of a collection literal.
+class CollectionLiteralContext {
+  /// The type context for ordinary collection elements, if this is a list or
+  /// set literal.  Otherwise `null`.
+  final DartType? elementType;
+
+  /// The type context for spread expressions.
+  final DartType iterableType;
+
+  /// The type context for keys, if this is a map literal.  Otherwise `null`.
+  final DartType? keyType;
+
+  /// The type context for values, if this is a map literal.  Otherwise `null`.
+  final DartType? valueType;
+
+  CollectionLiteralContext(
+      {this.elementType,
+      required this.iterableType,
+      this.keyType,
+      this.valueType});
+}
+
 /// Helper for resolving [ListLiteral]s and [SetOrMapLiteral]s.
 class TypedLiteralResolver {
   final ResolverVisitor _resolver;
@@ -73,7 +95,8 @@
         : NullabilitySuffix.star;
   }
 
-  void resolveListLiteral(ListLiteralImpl node) {
+  void resolveListLiteral(ListLiteralImpl node,
+      {required DartType? contextType}) {
     InterfaceType? listType;
 
     var typeArguments = node.typeArguments?.arguments;
@@ -85,29 +108,30 @@
         }
       }
     } else {
-      listType = _inferListType(node, downwards: true);
+      listType =
+          _inferListType(node, downwards: true, contextType: contextType);
     }
+    CollectionLiteralContext? context;
     if (listType != null) {
       DartType elementType = listType.typeArguments[0];
       DartType iterableType = _typeProvider.iterableType(elementType);
-      _pushCollectionTypesDownToAll(_getListElements(node),
+      context = CollectionLiteralContext(
           elementType: elementType, iterableType: iterableType);
-      InferenceContext.setType(node, listType);
-    } else {
-      InferenceContext.clearType(node);
     }
 
-    node.visitChildren(_resolver);
-    _insertImplicitCallReferences(node);
-    _resolveListLiteral2(node);
+    node.typeArguments?.accept(_resolver);
+    _resolveElements(node.elements, context);
+    _resolveListLiteral2(node, contextType: contextType);
   }
 
-  void resolveSetOrMapLiteral(SetOrMapLiteral node) {
+  void resolveSetOrMapLiteral(SetOrMapLiteral node,
+      {required DartType? contextType}) {
     (node as SetOrMapLiteralImpl).becomeUnresolved();
     var typeArguments = node.typeArguments?.arguments;
 
     InterfaceType? literalType;
-    var literalResolution = _computeSetOrMapResolution(node);
+    var literalResolution =
+        _computeSetOrMapResolution(node, contextType: contextType);
     if (literalResolution.kind == _LiteralResolutionKind.set) {
       if (typeArguments != null && typeArguments.length == 1) {
         var elementType = typeArguments[0].typeOrThrow;
@@ -129,15 +153,17 @@
       assert(literalResolution.kind == _LiteralResolutionKind.ambiguous);
       literalType = null;
     }
+    var elements = _getSetOrMapElements(node);
+    CollectionLiteralContext? context;
     if (literalType is InterfaceType) {
       List<DartType> typeArguments = literalType.typeArguments;
       if (typeArguments.length == 1) {
         DartType elementType = literalType.typeArguments[0];
         DartType iterableType = _typeProvider.iterableType(elementType);
-        _pushCollectionTypesDownToAll(_getSetOrMapElements(node),
+        context = CollectionLiteralContext(
             elementType: elementType, iterableType: iterableType);
         if (!_uiAsCodeEnabled &&
-            _getSetOrMapElements(node).isEmpty &&
+            elements.isEmpty &&
             node.typeArguments == null &&
             node.isMap) {
           // The node is really an empty set literal with no type arguments.
@@ -146,7 +172,7 @@
       } else if (typeArguments.length == 2) {
         DartType keyType = typeArguments[0];
         DartType valueType = typeArguments[1];
-        _pushCollectionTypesDownToAll(_getSetOrMapElements(node),
+        context = CollectionLiteralContext(
             iterableType: literalType, keyType: keyType, valueType: valueType);
       }
       node.contextType = literalType;
@@ -154,9 +180,9 @@
       node.contextType = null;
     }
 
-    node.visitChildren(_resolver);
-    _insertImplicitCallReferences(node);
-    _resolveSetOrMapLiteral2(node);
+    node.typeArguments?.accept(_resolver);
+    _resolveElements(node.elements, context);
+    _resolveSetOrMapLiteral2(node, contextType: contextType);
   }
 
   DartType _computeElementType(CollectionElement element) {
@@ -218,10 +244,10 @@
   }
 
   /// Compute the context type for the given set or map [literal].
-  _LiteralResolution _computeSetOrMapResolution(SetOrMapLiteral literal) {
+  _LiteralResolution _computeSetOrMapResolution(SetOrMapLiteral literal,
+      {required DartType? contextType}) {
     _LiteralResolution typeArgumentsResolution =
         _fromTypeArguments(literal.typeArguments?.arguments);
-    var contextType = InferenceContext.getContext(literal);
     _LiteralResolution contextResolution = _fromContextType(contextType);
     _LeafElements elementCounts = _LeafElements(_getSetOrMapElements(literal));
     _LiteralResolution elementResolution = elementCounts.resolution;
@@ -424,9 +450,8 @@
     }
   }
 
-  InterfaceType? _inferListType(ListLiteral node, {bool downwards = false}) {
-    var contextType = InferenceContext.getContext(node);
-
+  InterfaceType? _inferListType(ListLiteral node,
+      {bool downwards = false, required DartType? contextType}) {
     var element = _typeProvider.listElement;
     var typeParameters = element.typeParameters;
     var genericElementType = typeParameters[0].instantiate(
@@ -599,84 +624,15 @@
     );
   }
 
-  void _insertImplicitCallReference(CollectionElement? node) {
-    if (node is Expression) {
-      _resolver.insertImplicitCallReference(node);
-    } else if (node is MapLiteralEntry) {
-      _insertImplicitCallReference(node.key);
-      _insertImplicitCallReference(node.value);
-    } else if (node is IfElement) {
-      _insertImplicitCallReference(node.thenElement);
-      _insertImplicitCallReference(node.elseElement);
-    } else if (node is ForElement) {
-      _insertImplicitCallReference(node.body);
-    }
-    // Nothing to do for [SpreadElement] as analyzer does not desugar this
-    // element.
-  }
-
-  void _insertImplicitCallReferences(TypedLiteral node) {
-    if (node is ListLiteral) {
-      for (var element in node.elements) {
-        _insertImplicitCallReference(element);
-      }
-    } else if (node is SetOrMapLiteral) {
-      for (var element in node.elements) {
-        _insertImplicitCallReference(element);
-      }
+  void _resolveElements(
+      List<CollectionElement> elements, CollectionLiteralContext? context) {
+    for (var element in elements) {
+      (element as CollectionElementImpl).resolveElement(_resolver, context);
     }
   }
 
-  void _pushCollectionTypesDown(CollectionElement? element,
-      {DartType? elementType,
-      required DartType iterableType,
-      DartType? keyType,
-      DartType? valueType}) {
-    if (element is Expression) {
-      InferenceContext.setType(element, elementType);
-    } else if (element is ForElement) {
-      _pushCollectionTypesDown(element.body,
-          elementType: elementType,
-          iterableType: iterableType,
-          keyType: keyType,
-          valueType: valueType);
-    } else if (element is IfElement) {
-      _pushCollectionTypesDown(element.thenElement,
-          elementType: elementType,
-          iterableType: iterableType,
-          keyType: keyType,
-          valueType: valueType);
-      _pushCollectionTypesDown(element.elseElement,
-          elementType: elementType,
-          iterableType: iterableType,
-          keyType: keyType,
-          valueType: valueType);
-    } else if (element is MapLiteralEntry) {
-      InferenceContext.setType(element.key, keyType);
-      InferenceContext.setType(element.value, valueType);
-    } else if (element is SpreadElement) {
-      if (_isNonNullableByDefault && element.isNullAware) {
-        iterableType = _typeSystem.makeNullable(iterableType);
-      }
-      InferenceContext.setType(element.expression, iterableType);
-    }
-  }
-
-  void _pushCollectionTypesDownToAll(List<CollectionElement> elements,
-      {DartType? elementType,
-      required DartType iterableType,
-      DartType? keyType,
-      DartType? valueType}) {
-    for (CollectionElement element in elements) {
-      _pushCollectionTypesDown(element,
-          elementType: elementType,
-          iterableType: iterableType,
-          keyType: keyType,
-          valueType: valueType);
-    }
-  }
-
-  void _resolveListLiteral2(ListLiteralImpl node) {
+  void _resolveListLiteral2(ListLiteralImpl node,
+      {required DartType? contextType}) {
     var typeArguments = node.typeArguments?.arguments;
 
     // If we have explicit arguments, use them.
@@ -695,7 +651,7 @@
     DartType listDynamicType = _typeProvider.listType(_dynamicType);
 
     // If there are no type arguments, try to infer some arguments.
-    var inferred = _inferListType(node);
+    var inferred = _inferListType(node, contextType: contextType);
 
     if (inferred != listDynamicType) {
       // TODO(brianwilkerson) Determine whether we need to make the inferred
@@ -708,7 +664,8 @@
     node.staticType = listDynamicType;
   }
 
-  void _resolveSetOrMapLiteral2(SetOrMapLiteralImpl node) {
+  void _resolveSetOrMapLiteral2(SetOrMapLiteralImpl node,
+      {required DartType? contextType}) {
     var typeArguments = node.typeArguments?.arguments;
 
     // If we have type arguments, use them.
@@ -748,7 +705,7 @@
     }
     if (_strictInference &&
         _getSetOrMapElements(node).isEmpty &&
-        InferenceContext.getContext(node) == null) {
+        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,
       // as the types of those elements are considered resolved.
diff --git a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
index ca56632..17d7f04 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
@@ -43,14 +43,13 @@
     var isTopLevel =
         element is FieldElement || element is TopLevelVariableElement;
 
-    InferenceContext.setTypeFromNode(initializer, node);
     if (isTopLevel) {
       _resolver.flowAnalysis.topLevelDeclaration_enter(node, null);
     } else if (element.isLate) {
       _resolver.flowAnalysis.flow?.lateInitializer_begin(node);
     }
 
-    initializer.accept(_resolver);
+    _resolver.analyzeExpression(initializer, element.type);
     initializer = node.initializer!;
     var whyNotPromoted =
         _resolver.flowAnalysis.flow?.whyNotPromoted(initializer);
@@ -65,8 +64,6 @@
       _resolver.flowAnalysis.flow?.lateInitializer_end();
     }
 
-    initializer = _resolver.insertImplicitCallReference(initializer);
-
     // Initializers of top-level variables and fields are already included
     // into elements during linking.
     if (element is ConstLocalVariableElementImpl) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
index 0016d66..c8c5504 100644
--- a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
@@ -133,13 +133,30 @@
     }
   }
 
+  DartType? _computeContextType(
+    BodyInferenceContext bodyContext,
+    YieldStatement node,
+  ) {
+    var elementType = bodyContext.contextType;
+    if (elementType != null) {
+      var contextType = elementType;
+      if (node.star != null) {
+        contextType = bodyContext.isSynchronous
+            ? _typeProvider.iterableType(elementType)
+            : _typeProvider.streamType(elementType);
+      }
+      return contextType;
+    } else {
+      return null;
+    }
+  }
+
   void _resolve_generator(
     BodyInferenceContext bodyContext,
     YieldStatement node,
   ) {
-    _setContextType(bodyContext, node);
-
-    node.expression.accept(_resolver);
+    _resolver.analyzeExpression(
+        node.expression, _computeContextType(bodyContext, node));
 
     if (node.star != null) {
       _resolver.nullableDereferenceVerifier.expression(
@@ -167,20 +184,4 @@
 
     _checkForUseOfVoidResult(node.expression);
   }
-
-  void _setContextType(
-    BodyInferenceContext bodyContext,
-    YieldStatement node,
-  ) {
-    var elementType = bodyContext.contextType;
-    if (elementType != null) {
-      var contextType = elementType;
-      if (node.star != null) {
-        contextType = bodyContext.isSynchronous
-            ? _typeProvider.iterableType(elementType)
-            : _typeProvider.streamType(elementType);
-      }
-      InferenceContext.setType(node.expression, contextType);
-    }
-  }
 }
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 45dce24..a151c37 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -32,7 +32,6 @@
 import 'package:analyzer/src/error/null_safe_api_verifier.dart';
 import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
 import 'package:analyzer/src/workspace/workspace.dart';
@@ -529,8 +528,7 @@
     if (node.parent is! FunctionDeclaration) {
       _checkForMissingReturn(node.body, node);
     }
-    var functionType = InferenceContext.getContext(node);
-    if (functionType is! FunctionType) {
+    if (!(node as FunctionExpressionImpl).wasFunctionTypeSupplied) {
       _checkStrictInferenceInParameters(node.parameters, body: node.body);
     }
     super.visitFunctionExpression(node);
@@ -1199,7 +1197,7 @@
       // TODO(jwren) We should modify ConstructorElement.getDisplayName(), or
       // have the logic centralized elsewhere, instead of doing this logic
       // here.
-      String fullConstructorName = constructorName.type2.name.name;
+      String fullConstructorName = constructorName.type.name.name;
       if (constructorName.name != null) {
         fullConstructorName = '$fullConstructorName.${constructorName.name}';
       }
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index edeba68..10bbfb6 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 import "package:analyzer/src/error/analyzer_error_code.dart";
@@ -1605,6 +1605,14 @@
     uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER',
   );
 
+  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.",
+  );
+
   /**
    * Parameters:
    * 0: the name of the abstract method
@@ -1886,6 +1894,20 @@
    * Parameters:
    * 0: the name of the type variable
    */
+  static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_ENUM =
+      CompileTimeErrorCode(
+    'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
+    "'{0}' can't be used to name both a type variable and the enum in which "
+        "the type variable is defined.",
+    correctionMessage: "Try renaming either the type variable or the enum.",
+    hasPublishedDocs: true,
+    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_ENUM',
+  );
+
+  /**
+   * Parameters:
+   * 0: the name of the type variable
+   */
   static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_EXTENSION =
       CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
@@ -1941,6 +1963,20 @@
    * Parameters:
    * 0: the name of the type variable
    */
+  static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM =
+      CompileTimeErrorCode(
+    'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+    "'{0}' can't be used to name both a type variable and a member in this "
+        "enum.",
+    correctionMessage: "Try renaming either the type variable or the member.",
+    hasPublishedDocs: true,
+    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM',
+  );
+
+  /**
+   * Parameters:
+   * 0: the name of the type variable
+   */
   static const CompileTimeErrorCode
       CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION = CompileTimeErrorCode(
     'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
@@ -3040,10 +3076,35 @@
     correctionMessage: "Try calling a different constructor.",
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the label in a `continue`
+  // statement resolves to a label on a `switch` statement.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the label `l`, used to
+  // label a `switch` statement, is used in the `continue` statement:
+  //
+  // ```dart
+  // void f(int i) {
+  //   l: switch (i) {
+  //     case 0:
+  //       continue [!l!];
+  //   }
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Find a different way to achieve the control flow you need; for example, by
+  // introducing a loop that re-executes the `switch` statement.
   static const CompileTimeErrorCode CONTINUE_LABEL_ON_SWITCH =
       CompileTimeErrorCode(
     'CONTINUE_LABEL_ON_SWITCH',
-    "A continue label resolves to switch, must be loop or switch member",
+    "A `continue` label resolves to a `switch` statement, but the label must "
+        "be on a loop or a switch member.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3337,14 +3398,50 @@
   /**
    * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an expression with a value that
+  // is anything other than one of the allowed kinds of values is followed by
+  // type arguments. The allowed kinds of values are:
+  // - generic types,
+  // - generic constructors, and
+  // - generic functions, including top-level functions, static and instance
+  //   members, and local functions.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because `i` is a top-level
+  // variable, which isn't one of the allowed cases:
+  //
+  // ```dart
+  // int i = 1;
+  //
+  // void f() {
+  //   print([!i!]<int>);
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the referenced value is correct, then remove the type arguments:
+  //
+  // ```dart
+  // int i = 1;
+  //
+  // void f() {
+  //   print(i);
+  // }
+  // ```
   static const CompileTimeErrorCode DISALLOWED_TYPE_INSTANTIATION_EXPRESSION =
       CompileTimeErrorCode(
     'DISALLOWED_TYPE_INSTANTIATION_EXPRESSION',
     "Only a generic type, generic function, generic instance method, or "
-        "generic constructor can be type instantiated.",
+        "generic constructor can have type arguments.",
     correctionMessage:
-        "Try instantiating the type(s) of a generic type, generic function, "
-        "generic instance method, or generic constructor.",
+        "Try removing the type arguments, or instantiating the type(s) of a "
+        "generic type, generic function, generic instance method, or generic "
+        "constructor.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -3629,11 +3726,85 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an enum constant has the same
+  // name as the enum in which it's declared.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the enum constant `E`
+  // has the same name as the enclosing enum `E`:
+  //
+  // ```dart
+  // enum E {
+  //   [!E!]
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the name of the enum is correct, then rename the constant:
+  //
+  // ```dart
+  // enum E {
+  //   e
+  // }
+  // ```
+  //
+  // If the name of the constant is correct, then rename the enum:
+  //
+  // ```dart
+  // enum F {
+  //   E
+  // }
+  // ```
   static const CompileTimeErrorCode ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING =
       CompileTimeErrorCode(
     'ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING',
     "The name of the enum constant can't be the same as the enum's name.",
     correctionMessage: "Try renaming the constant.",
+    hasPublishedDocs: true,
+  );
+
+  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.",
+  );
+
+  static const CompileTimeErrorCode
+      ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED = CompileTimeErrorCode(
+    'ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED',
+    "The result of instantiating the enum to bounds is not well-bounded.",
+    correctionMessage: "Try using different bounds for type parameters.",
+  );
+
+  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.",
+  );
+
+  /**
+   * Parameters:
+   * 0: the name of the abstract method
+   * 1: the name of the enclosing enum
+   */
+  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}'.",
+  );
+
+  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.",
   );
 
   /**
@@ -4520,6 +4691,49 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a field or variable marked with
+  // the keyword `external` has an initializer, or when an external field is
+  // initialized in a constructor.
+  //
+  // #### Examples
+  //
+  // The following code produces this diagnostic because the external field `x`
+  // is assigned a value in an initializer:
+  //
+  // ```dart
+  // class C {
+  //   external int x;
+  //   C() : [!x!] = 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the external field `x`
+  // has an initializer:
+  //
+  // ```dart
+  // class C {
+  //   external final int [!x!] = 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because the external top level
+  // variable `x` has an initializer:
+  //
+  // ```dart
+  // external final int [!x!] = 0;
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the initializer:
+  //
+  // ```dart
+  // class C {
+  //   external final int x;
+  // }
+  // ```
   static const CompileTimeErrorCode EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER =
       CompileTimeErrorCode(
     'EXTERNAL_WITH_INITIALIZER',
@@ -4527,6 +4741,7 @@
     correctionMessage:
         "Try removing the field initializer or the 'external' keyword from the "
         "field declaration.",
+    hasPublishedDocs: true,
     uniqueName: 'EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER',
   );
 
@@ -4536,6 +4751,7 @@
     "External fields can't have initializers.",
     correctionMessage:
         "Try removing the initializer or the 'external' keyword.",
+    hasPublishedDocs: true,
     uniqueName: 'EXTERNAL_FIELD_INITIALIZER',
   );
 
@@ -4545,6 +4761,7 @@
     "External variables can't have initializers.",
     correctionMessage:
         "Try removing the initializer or the 'external' keyword.",
+    hasPublishedDocs: true,
     uniqueName: 'EXTERNAL_VARIABLE_INITIALIZER',
   );
 
@@ -4902,15 +5119,47 @@
   );
 
   /**
-   * 7.6.1 Generative Constructors: It is a compile-time error if an
-   * initializing formal is used by a function other than a non-redirecting
-   * generative constructor.
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an initializing formal
+  // parameter is used in the parameter list for anything other than a
+  // constructor.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the initializing
+  // formal parameter `this.x` is being used in the method `m`:
+  //
+  // ```dart
+  // class A {
+  //   int x = 0;
+  //
+  //   m([[!this.x!] = 0]) {}
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Replace the initializing formal parameter with a normal parameter and
+  // assign the field within the body of the method:
+  //
+  // ```dart
+  // class A {
+  //   int x = 0;
+  //
+  //   m([int x = 0]) {
+  //     this.x = x;
+  //   }
+  // }
+  // ```
   static const CompileTimeErrorCode FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR =
       CompileTimeErrorCode(
     'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
     "Initializing formal parameters can only be used in constructors.",
     correctionMessage: "Try using a normal parameter.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -5691,6 +5940,63 @@
   );
 
   /**
+   * Parameters:
+   * 0: the name of member that cannot be declared
+   */
+  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.",
+    uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION',
+  );
+
+  /**
+   * Parameters:
+   * 0: the name of member that cannot be inherited
+   * 1: the name of the class that declares the member
+   */
+  static const CompileTimeErrorCode ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE =
+      CompileTimeErrorCode(
+    'ILLEGAL_CONCRETE_ENUM_MEMBER',
+    "A concrete instance member named '{0}' can't be inherited from '{1}' in a "
+        "class that implements 'Enum'.",
+    correctionMessage: "Try using a different name.",
+    uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE',
+  );
+
+  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.",
+    uniqueName: 'ILLEGAL_ENUM_VALUES_DECLARATION',
+  );
+
+  /**
+   * Parameters:
+   * 0: the name of the class that declares 'values'
+   */
+  static const CompileTimeErrorCode ILLEGAL_ENUM_VALUES_INHERITANCE =
+      CompileTimeErrorCode(
+    'ILLEGAL_ENUM_VALUES',
+    "An instance member named 'values' can't be inherited from '{0}' in a "
+        "class that implements 'Enum'.",
+    correctionMessage: "Try using a different name.",
+    uniqueName: 'ILLEGAL_ENUM_VALUES_INHERITANCE',
+  );
+
+  static const CompileTimeErrorCode ILLEGAL_LANGUAGE_VERSION_OVERRIDE =
+      CompileTimeErrorCode(
+    'ILLEGAL_LANGUAGE_VERSION_OVERRIDE',
+    "The language version must be {0}.",
+    correctionMessage:
+        "Try removing the language version override and migrating the code.",
+  );
+
+  /**
    * No parameters.
    */
   // #### Description
@@ -5901,6 +6207,19 @@
 
   /**
    * Parameters:
+   * 0: the name of the superclass
+   */
+  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.",
+  );
+
+  /**
+   * Parameters:
    * 0: the name of the instance member
    */
   // #### Description
@@ -5959,28 +6278,6 @@
     hasPublishedDocs: true,
   );
 
-  static const CompileTimeErrorCode
-      IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT =
-      CompileTimeErrorCode(
-    'IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT',
-    "The named parameter '{0}' is required in the implicitly invoked unnamed "
-        "constructor of '{1}'.",
-    correctionMessage:
-        "Try declaring corresponding named super-parameter, or explicitly "
-        "invoking a different constructor.",
-  );
-
-  static const CompileTimeErrorCode
-      IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS =
-      CompileTimeErrorCode(
-    'IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS',
-    "The implicitly invoked unnamed constructor of '{0}' expects {1} "
-        "positional arguments, but {2} found.",
-    correctionMessage:
-        "Try declaring positional super-parameters, or explicitly invoking a "
-        "different constructor.",
-  );
-
   /**
    * Parameters:
    * 0: the uri pointing to a library
@@ -6010,17 +6307,46 @@
   );
 
   /**
-   * 14.1 Imports: It is a compile-time error if the specified URI of an
-   * immediate import does not refer to a library declaration.
-   *
    * Parameters:
    * 0: the uri pointing to a non-library declaration
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a [part file][] is imported
+  // into a library.
+  //
+  // #### Example
+  //
+  // Given a [part file][] named `part.dart` containing the following:
+  //
+  // ```dart
+  // %uri="lib/part.dart"
+  // part of lib;
+  //
+  // class C{}
+  // ```
+  //
+  // The following code produces this diagnostic because imported files can't
+  // have a part-of directive:
+  //
+  // ```dart
+  // library lib;
+  //
+  // import [!'part.dart'!];
+  //
+  // C c = C();
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Import the library that contains the [part file][] rather than the
+  // [part file][] itself.
   static const CompileTimeErrorCode IMPORT_OF_NON_LIBRARY =
       CompileTimeErrorCode(
     'IMPORT_OF_NON_LIBRARY',
     "The imported library '{0}' can't have a part-of directive.",
     correctionMessage: "Try importing the library that the part is a part of.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -6121,18 +6447,51 @@
   );
 
   /**
-   * It is a compile-time error if a part file has a different language version
-   * override than its library.
-   *
-   * https://github.com/dart-lang/language/blob/master/accepted/
-   * future-releases/language-versioning/feature-specification.md
-   * #individual-library-language-version-override
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a [part file][] has a language
+  // version override comment that specifies a different language version than
+  // the one being used for the library to which the part belongs.
+  //
+  // #### Example
+  //
+  // Given a [part file][] named `part.dart` that contains the following:
+  //
+  // ```dart
+  // %uri="lib/part.dart"
+  // // @dart = 2.6
+  // part of 'test.dart';
+  // ```
+  //
+  // The following code produces this diagnostic because the parts of a library
+  // must have the same language version as the defining compilation unit:
+  //
+  // ```dart
+  // // @dart = 2.5
+  // part [!'part.dart'!];
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove the language version override from the [part file][], so that it
+  // implicitly uses the same version as the defining compilation unit:
+  //
+  // ```dart
+  // part of 'test.dart';
+  // ```
+  //
+  // If necessary, either adjust the language version override in the defining
+  // compilation unit to be appropriate for the code in the part, or migrate
+  // the code in the [part file][] to be consistent with the new language
+  // version.
   static const CompileTimeErrorCode INCONSISTENT_LANGUAGE_VERSION_OVERRIDE =
       CompileTimeErrorCode(
     'INCONSISTENT_LANGUAGE_VERSION_OVERRIDE',
     "Parts must have exactly the same language version override as the "
         "library.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -6568,6 +6927,7 @@
   // instantiated:
   //
   // ```dart
+  // // @dart = 2.16
   // enum E {a}
   //
   // var e = [!E!]();
@@ -6579,6 +6939,7 @@
   // constants defined in the enum:
   //
   // ```dart
+  // // @dart = 2.16
   // enum E {a}
   //
   // var e = E.a;
@@ -7499,6 +7860,13 @@
     hasPublishedDocs: true,
   );
 
+  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.",
+  );
+
   /**
    * No parameters.
    */
@@ -9154,14 +9522,43 @@
   );
 
   /**
-   * 7.6.1 Generative Constructors: A generative constructor may be redirecting,
-   * in which case its only action is to invoke another generative constructor.
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a constructor redirects to more
+  // than one other constructor in the same class (using `this`).
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the unnamed
+  // constructor in `C` is redirecting to both `this.a` and `this.b`:
+  //
+  // ```dart
+  // class C {
+  //   C() : this.a(), [!this.b()!];
+  //   C.a();
+  //   C.b();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Remove all but one of the redirections:
+  //
+  // ```dart
+  // class C {
+  //   C() : this.a();
+  //   C.a();
+  //   C.b();
+  // }
+  // ```
   static const CompileTimeErrorCode
       MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS = CompileTimeErrorCode(
     'MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
-    "Constructors can have at most one 'this' redirection.",
+    "Constructors can have only one 'this' redirection, at most.",
     correctionMessage: "Try removing all but one of the redirections.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -10141,7 +10538,7 @@
   //
   // #### Example
   //
-  // The following code produces this diagnostic beause `a` isn't a constant:
+  // The following code produces this diagnostic because `a` isn't a constant:
   //
   // ```dart
   // var a = 'a';
@@ -10285,6 +10682,13 @@
     hasPublishedDocs: true,
   );
 
+  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'.",
+  );
+
   /**
    * 13.2 Expression Statements: It is a compile-time error if a non-constant
    * map literal that has no explicit type arguments appears in a place where a
@@ -10298,6 +10702,16 @@
   );
 
   /**
+   * No parameters.
+   */
+  static const CompileTimeErrorCode NON_FINAL_FIELD_IN_ENUM =
+      CompileTimeErrorCode(
+    'NON_FINAL_FIELD_IN_ENUM',
+    "Enum can only declare final fields.",
+    correctionMessage: "Try making the field final.",
+  );
+
+  /**
    * Parameters:
    * 0: the non-generative constructor
    */
@@ -10352,15 +10766,75 @@
   );
 
   /**
-   * An error code for when a class has no explicit constructor, and therefore
-   * a constructor is implicitly defined which uses a factory as a
-   * superinitializer. See [NON_GENERATIVE_CONSTRUCTOR].
-   *
    * Parameters:
    * 0: the name of the superclass
    * 1: the name of the current class
    * 2: the implicitly called factory constructor of the superclass
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a class has an implicit
+  // generative constructor and the superclass has an explicit unnamed factory
+  // constructor. The implicit constructor in the subclass implicitly invokes
+  // the unnamed constructor in the superclass, but generative constructors can
+  // only invoke another generative constructor, not a factory constructor.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the implicit
+  // constructor in `B` invokes the unnamed constructor in `A`, but the
+  // constructor in `A` is a factory constructor, when a generative constructor
+  // is required:
+  //
+  // ```dart
+  // class A {
+  //   factory A() => throw 0;
+  //   A.named();
+  // }
+  //
+  // class [!B!] extends A {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the unnamed constructor in the superclass can be a generative
+  // constructor, then change it to be a generative constructor:
+  //
+  // ```dart
+  // class A {
+  //   A();
+  //   A.named();
+  // }
+  //
+  // class B extends A { }
+  // ```
+  //
+  // If the unnamed constructor can't be a generative constructor and there are
+  // other generative constructors in the superclass, then explicitly invoke
+  // one of them:
+  //
+  // ```dart
+  // class A {
+  //   factory A() => throw 0;
+  //   A.named();
+  // }
+  //
+  // class B extends A {
+  //   B() : super.named();
+  // }
+  // ```
+  //
+  // If there are no generative constructors that can be used and none can be
+  // added, then implement the superclass rather than extending it:
+  //
+  // ```dart
+  // class A {
+  //   factory A() => throw 0;
+  //   A.named();
+  // }
+  //
+  // class B implements A {}
+  // ```
   static const CompileTimeErrorCode NON_GENERATIVE_IMPLICIT_CONSTRUCTOR =
       CompileTimeErrorCode(
     'NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
@@ -10371,6 +10845,7 @@
         "Try adding an explicit constructor that has a different "
         "superinitializer or changing the superclass constructor '{2}' to not "
         "be a factory constructor.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -11201,24 +11676,80 @@
   );
 
   /**
-   * User friendly specialized error for [NON_GENERATIVE_CONSTRUCTOR]. This
-   * handles the case of `class E extends Exception` which will never work
-   * because [Exception] has no generative constructors.
-   *
    * Parameters:
    * 0: the name of the subclass
    * 1: the name of the superclass
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a class that has at least one
+  // generative constructor (whether explicit or implicit) has a superclass
+  // that doesn't have any generative constructors. Every generative
+  // constructor, except the one defined in `Object`, invokes, either
+  // explicitly or implicitly, one of the generative constructors from its
+  // superclass.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the class `B` has an
+  // implicit generative constructor that can't invoke a generative constructor
+  // from `A` because `A` doesn't have any generative constructors:
+  //
+  // ```dart
+  // class A {
+  //   factory A.none() => throw '';
+  // }
+  //
+  // class B extends [!A!] {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the superclass should have a generative constructor, then add one:
+  //
+  // ```dart
+  // class A {
+  //   A();
+  //   factory A.none() => throw '';
+  // }
+  //
+  // class B extends A {}
+  // ```
+  //
+  // If the subclass shouldn't have a generative constructor, then remove it by
+  // adding a factory constructor:
+  //
+  // ```dart
+  // class A {
+  //   factory A.none() => throw '';
+  // }
+  //
+  // class B extends A {
+  //   factory B.none() => throw '';
+  // }
+  // ```
+  //
+  // If the subclass must have a generative constructor but the superclass
+  // can't have one, then implement the superclass instead:
+  //
+  // ```dart
+  // class A {
+  //   factory A.none() => throw '';
+  // }
+  //
+  // class B implements A {}
+  // ```
   static const CompileTimeErrorCode NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS =
       CompileTimeErrorCode(
     'NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS',
-    "The class '{0}' cannot extend '{1}' because '{1}' only has factory "
+    "The class '{0}' can't extend '{1}' because '{1}' only has factory "
         "constructors (no generative constructors), and '{0}' has at least one "
         "generative constructor.",
     correctionMessage:
         "Try implementing the class instead, adding a generative (not factory) "
-        "constructor to the superclass {0}, or a factory constructor to the "
+        "constructor to the superclass '{1}', or a factory constructor to the "
         "subclass.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -11520,8 +12051,8 @@
   // If the library should be using a different file as a part, then change the
   // URI in the part directive to be the URI of the other file.
   //
-  // If the part file should be a part of this library, then update the URI (or
-  // library name) in the part-of directive to be the URI (or name) of the
+  // If the [part file][] should be a part of this library, then update the URI
+  // (or library name) in the part-of directive to be the URI (or name) of the
   // correct library.
   static const CompileTimeErrorCode PART_OF_DIFFERENT_LIBRARY =
       CompileTimeErrorCode(
@@ -11590,13 +12121,14 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a library that doesn't have a
-  // `library` directive (and hence has no name) contains a `part` directive and
-  // the `part of` directive in the part file uses a name to specify the library
-  // that it's a part of.
+  // `library` directive (and hence has no name) contains a `part` directive
+  // and the `part of` directive in the [part file][] uses a name to specify
+  // the library that it's a part of.
   //
   // #### Example
   //
-  // Given a part file named `part_file.dart` containing the following code:
+  // Given a [part file][] named `part_file.dart` containing the following
+  // code:
   //
   // ```dart
   // %uri="lib/part_file.dart"
@@ -11604,8 +12136,8 @@
   // ```
   //
   // The following code produces this diagnostic because the library including
-  // the part file doesn't have a name even though the part file uses a name to
-  // specify which library it's a part of:
+  // the [part file][] doesn't have a name even though the [part file][] uses a
+  // name to specify which library it's a part of:
   //
   // ```dart
   // part [!'part_file.dart'!];
@@ -11613,8 +12145,8 @@
   //
   // #### Common fixes
   //
-  // Change the `part of` directive in the part file to specify its library by
-  // URI:
+  // Change the `part of` directive in the [part file][] to specify its library
+  // by URI:
   //
   // ```dart
   // part of 'test.dart';
@@ -11742,22 +12274,61 @@
   );
 
   /**
-   * From the `Static Types` section of the spec:
-   *
-   *     A type T is malformed if:
-   *     - T has the form id or the form prefix.id, and in the enclosing lexical
-   *       scope, the name id (respectively prefix.id) does not denote a type.
-   *
-   * In particular, this means that if an import prefix is shadowed by a local
-   * declaration, it is an error to try to use it as a prefix for a type name.
+   * Parameters:
+   * 0: the prefix being shadowed
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when an import prefix is used in a
+  // context where it isn't visible because it was shadowed by a local
+  // declaration.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the prefix `a` is
+  // being used to access the class `Future`, but isn't visible because it's
+  // shadowed by the parameter `a`:
+  //
+  // ```dart
+  // import 'dart:async' as a;
+  //
+  // a.Future? f(int a) {
+  //   [!a!].Future? x;
+  //   return x;
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Rename either the prefix:
+  //
+  // ```dart
+  // import 'dart:async' as p;
+  //
+  // p.Future? f(int a) {
+  //   p.Future? x;
+  //   return x;
+  // }
+  // ```
+  //
+  // Or rename the local variable:
+  //
+  // ```dart
+  // import 'dart:async' as a;
+  //
+  // a.Future? f(int p) {
+  //   a.Future? x;
+  //   return x;
+  // }
+  // ```
   static const CompileTimeErrorCode PREFIX_SHADOWED_BY_LOCAL_DECLARATION =
       CompileTimeErrorCode(
     'PREFIX_SHADOWED_BY_LOCAL_DECLARATION',
-    "The prefix '{0}' can't be used here because it is shadowed by a local "
+    "The prefix '{0}' can't be used here because it's shadowed by a local "
         "declaration.",
     correctionMessage:
         "Try renaming either the prefix or the local declaration.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -11853,20 +12424,97 @@
     hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a private setter is used in a
+  // library where it isn't visible.
+  //
+  // #### Example
+  //
+  // Given a file named `a.dart` that contains the following:
+  //
+  // ```dart
+  // %uri="lib/a.dart"
+  // class A {
+  //   static int _f = 0;
+  // }
+  // ```
+  //
+  // The following code produces this diagnostic because it references the
+  // private setter `_f` even though the setter isn't visible:
+  //
+  // ```dart
+  // import 'a.dart';
+  //
+  // void f() {
+  //   A.[!_f!] = 0;
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If you're able to make the setter public, then do so:
+  //
+  // ```dart
+  // %uri="lib/a.dart"
+  // class A {
+  //   static int f = 0;
+  // }
+  // ```
+  //
+  // If you aren't able to make the setter public, then find a different way to
+  // implement the code.
   static const CompileTimeErrorCode PRIVATE_SETTER = CompileTimeErrorCode(
     'PRIVATE_SETTER',
-    "The setter '{0}' is private and can't be accessed outside of the library "
+    "The setter '{0}' is private and can't be accessed outside the library "
         "that declares it.",
     correctionMessage: "Try making it public.",
+    hasPublishedDocs: true,
   );
 
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a final local variable that
+  // isn't initialized at the declaration site is read at a point where the
+  // compiler can't prove that the variable is always initialized before it's
+  // referenced.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the final local
+  // variable `x` is read (on line 3) when it's possible that it hasn't yet
+  // been initialized:
+  //
+  // ```dart
+  // int f() {
+  //   final int x;
+  //   return [!x!];
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Ensure that the variable has been initialized before it's read:
+  //
+  // ```dart
+  // int f(bool b) {
+  //   final int x;
+  //   if (b) {
+  //     x = 0;
+  //   } else {
+  //     x = 1;
+  //   }
+  //   return x;
+  // }
+  // ```
   static const CompileTimeErrorCode READ_POTENTIALLY_UNASSIGNED_FINAL =
       CompileTimeErrorCode(
     'READ_POTENTIALLY_UNASSIGNED_FINAL',
-    "The final variable '{0}' can't be read because it is potentially "
+    "The final variable '{0}' can't be read because it's potentially "
         "unassigned at this point.",
     correctionMessage:
         "Ensure that it is assigned on necessary execution paths.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -12222,15 +12870,51 @@
   );
 
   /**
-   * A factory constructor can't redirect to a non-generative constructor of an
-   * abstract class.
+   * Parameters:
+   * 0: the name of the redirecting constructor
+   * 1: the name of the abstract class defining the constructor being redirected to
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a constructor redirects to a
+  // constructor in an abstract class.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the factory
+  // constructor in `A` redirects to a constructor in `B`, but `B` is an
+  // abstract class:
+  //
+  // ```dart
+  // class A {
+  //   factory A() = [!B!];
+  // }
+  //
+  // abstract class B implements A {}
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the code redirects to the correct constructor, then change the class so
+  // that it isn't abstract:
+  //
+  // ```dart
+  // class A {
+  //   factory A() = B;
+  // }
+  //
+  // class B implements A {}
+  // ```
+  //
+  // Otherwise, change the factory constructor so that it either redirects to a
+  // constructor in a concrete class, or has a concrete implementation.
   static const CompileTimeErrorCode REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR =
       CompileTimeErrorCode(
     'REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR',
     "The redirecting constructor '{0}' can't redirect to a constructor of the "
         "abstract class '{1}'.",
     correctionMessage: "Try redirecting to a constructor of a different class.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -12377,9 +13061,57 @@
   );
 
   /**
-   * 7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with
-   * the const modifier but <i>k'</i> is not a constant constructor.
+   * Parameters:
+   * 0: the name of the constructor
+   * 1: the name of the class containing the constructor
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when a constructor redirects to a
+  // constructor that doesn't exist.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the factory
+  // constructor in `A` redirects to a constructor in `B` that doesn't exist:
+  //
+  // ```dart
+  // class A {
+  //   factory A() = [!B.name!];
+  // }
+  //
+  // class B implements A {
+  //   B();
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // If the constructor being redirected to is correct, then define the
+  // constructor:
+  //
+  // ```dart
+  // class A {
+  //   factory A() = B.name;
+  // }
+  //
+  // class B implements A {
+  //   B();
+  //   B.name();
+  // }
+  // ```
+  //
+  // If a different constructor should be invoked, then update the redirect:
+  //
+  // ```dart
+  // class A {
+  //   factory A() = B;
+  // }
+  //
+  // class B implements A {
+  //   B();
+  // }
+  // ```
   static const CompileTimeErrorCode REDIRECT_TO_MISSING_CONSTRUCTOR =
       CompileTimeErrorCode(
     'REDIRECT_TO_MISSING_CONSTRUCTOR',
@@ -12387,6 +13119,7 @@
     correctionMessage:
         "Try redirecting to a different constructor, or define the constructor "
         "named '{0}'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -13190,6 +13923,13 @@
     hasPublishedDocs: true,
   );
 
+  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.",
+  );
+
   /**
    * No parameters.
    */
@@ -13295,17 +14035,46 @@
   );
 
   /**
-   * It is an error if any case of a switch statement except the last case (the
-   * default case if present) may complete normally. The previous syntactic
-   * restriction requiring the last statement of each case to be one of an
-   * enumerated list of statements (break, continue, return, throw, or rethrow)
-   * is removed.
+   * No parameters.
    */
+  // #### Description
+  //
+  // The analyzer produces this diagnostic when the statements following a
+  // `case` label in a `switch` statement could fall through to the next `case`
+  // or `default` label.
+  //
+  // #### Example
+  //
+  // The following code produces this diagnostic because the `case` label with
+  //  a value of zero (`0`) falls through to the `default` statements:
+  //
+  // ```dart
+  // void f(int a) {
+  //   switch (a) {
+  //     [!case!] 0:
+  //       print(0);
+  //     default:
+  //       return;
+  //   }
+  // }
+  // ```
+  //
+  // #### Common fixes
+  //
+  // Change the flow of control so that the `case` won't fall through. There
+  // are several ways that this can be done, including adding one of the
+  // following at the end of the current list of statements:
+  // - a `return` statement,
+  // - a `throw` expression,
+  // - a `break` statement,
+  // - a `continue`, or
+  // - an invocation of a function or method whose return type is `Never`.
   static const CompileTimeErrorCode SWITCH_CASE_COMPLETES_NORMALLY =
       CompileTimeErrorCode(
     'SWITCH_CASE_COMPLETES_NORMALLY',
-    "The 'case' should not complete normally.",
-    correctionMessage: "Try adding 'break', or 'return', etc.",
+    "The 'case' shouldn't complete normally.",
+    correctionMessage: "Try adding 'break', 'return', or 'throw'.",
+    hasPublishedDocs: true,
   );
 
   /**
@@ -14169,8 +14938,8 @@
 
   /**
    * Parameters:
-   * 0: the name of the enumeration constant that is not defined
-   * 1: the name of the enumeration used to access the constant
+   * 0: the name of the enum constant that is not defined
+   * 1: the name of the enum used to access the constant
    */
   // #### Description
   //
@@ -14220,6 +14989,30 @@
 
   /**
    * Parameters:
+   * 0: the name of the constructor that is undefined
+   */
+  static const CompileTimeErrorCode UNDEFINED_ENUM_CONSTRUCTOR_NAMED =
+      CompileTimeErrorCode(
+    'UNDEFINED_ENUM_CONSTRUCTOR',
+    "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}'.",
+    uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_NAMED',
+  );
+
+  static const CompileTimeErrorCode UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED =
+      CompileTimeErrorCode(
+    'UNDEFINED_ENUM_CONSTRUCTOR',
+    "The enum doesn't have an unnamed constructor.",
+    correctionMessage:
+        "Try adding the name of an existing constructor, or defining an "
+        "unnamed constructor.",
+    uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED',
+  );
+
+  /**
+   * Parameters:
    * 0: the name of the getter that is undefined
    * 1: the name of the extension that was explicitly specified
    */
@@ -15447,6 +16240,13 @@
     hasPublishedDocs: true,
   );
 
+  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.",
+  );
+
   /**
    * Parameters:
    * 0: the type of the object being assigned.
@@ -15759,6 +16559,19 @@
 
   /**
    * Parameters:
+   * 0: the number of type parameters that were declared
+   * 1: the number of type arguments provided
+   */
+  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.",
+  );
+
+  /**
+   * Parameters:
    * 0: the name of the extension being referenced
    * 1: the number of type parameters that were declared
    * 2: the number of type arguments provided
@@ -16404,7 +17217,7 @@
   // #### Description
   //
   // The analyzer produces this diagnostic when a `switch` statement for an enum
-  // doesn't include an option for one of the values in the enumeration.
+  // doesn't include an option for one of the values in the enum.
   //
   // Note that `null` is always a possible value for an enum and therefore also
   // must be handled.
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index 2978a39..496f77d 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -17,7 +17,7 @@
   bool _isInNativeClass = false;
 
   /// When a new class or mixin is entered, [_initFieldsMap] initializes this
-  /// map, and [leaveClassOrMixin] resets it.
+  /// map, and [leaveClass] resets it.
   ///
   /// [_InitState.notInit] or [_InitState.initInDeclaration] is set for each
   /// field. Later [verify] is called to verify each constructor of the class.
@@ -35,9 +35,17 @@
   })  : _typeSystem = typeSystem,
         _errorReporter = errorReporter;
 
-  void enterClass(ClassDeclaration node) {
+  void enterClass(ClassDeclaration node, ClassElementImpl element) {
     _isInNativeClass = node.nativeClause != null;
-    _initFieldsMap(node.declaredElement!);
+    _initFieldsMap(element.fields);
+  }
+
+  void enterEnum(EnumDeclaration node, EnumElementImpl element) {
+    _isInNativeClass = false;
+    _initFieldsMap(
+      element.fields,
+      enumConstants: element.constants,
+    );
   }
 
   void leaveClass() {
@@ -55,7 +63,7 @@
       return;
     }
 
-    if (node.parent is! ClassDeclaration) {
+    if (!(node.parent is ClassDeclaration || node.parent is EnumDeclaration)) {
       return;
     }
 
@@ -93,13 +101,27 @@
     _reportNotInitializedNonNullable(node, notInitNonNullableFields);
   }
 
-  void _initFieldsMap(ClassElement element) {
+  void _initFieldsMap(
+    List<FieldElement> fields, {
+    List<FieldElement>? enumConstants,
+  }) {
     _initialFieldMap = <FieldElement, _InitState>{};
-    for (var field in element.fields) {
-      if (!field.isSynthetic) {
-        _initialFieldMap![field] = field.hasInitializer
-            ? _InitState.initInDeclaration
-            : _InitState.notInit;
+
+    for (var field in fields) {
+      if (field.isSynthetic) {
+        continue;
+      }
+      if (enumConstants != null && field.name == 'index') {
+        continue;
+      }
+      _initialFieldMap![field] = field.hasInitializer
+          ? _InitState.initInDeclaration
+          : _InitState.notInit;
+    }
+
+    if (enumConstants != null) {
+      for (var field in enumConstants) {
+        _initialFieldMap![field] = _InitState.initInDeclaration;
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 113dae0..623f429 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -8,21 +8,20 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/error/codes.dart';
 
 class DuplicateDefinitionVerifier {
-  static final Set<String> _enumInstanceMembers = {
-    'hashCode',
-    'index',
-    FunctionElement.NO_SUCH_METHOD_METHOD_NAME,
-    'runtimeType',
-    'toString',
-  };
-
+  final InheritanceManager3 _inheritanceManager;
   final LibraryElement _currentLibrary;
   final ErrorReporter _errorReporter;
 
-  DuplicateDefinitionVerifier(this._currentLibrary, this._errorReporter);
+  DuplicateDefinitionVerifier(
+    this._inheritanceManager,
+    this._currentLibrary,
+    this._errorReporter,
+  );
 
   /// Check that the exception and stack trace parameters have different names.
   void checkCatchClause(CatchClause node) {
@@ -45,31 +44,132 @@
 
   /// Check that there are no members with the same name.
   void checkEnum(EnumDeclaration node) {
-    ClassElement element = node.declaredElement!;
+    var enumElement = node.declaredElement as EnumElementImpl;
+    var enumName = enumElement.name;
 
-    Map<String, Element> staticGetters = {
-      'values': element.getGetter('values')!
-    };
+    var constructorNames = <String>{};
+    var instanceGetters = <String, Element>{};
+    var instanceSetters = <String, Element>{};
+    var staticGetters = <String, Element>{};
+    var staticSetters = <String, Element>{};
 
     for (EnumConstantDeclaration constant in node.constants) {
       _checkDuplicateIdentifier(staticGetters, constant.name);
+      _checkValuesDeclarationInEnum(constant.name);
     }
 
-    String enumName = element.name;
-    for (EnumConstantDeclaration constant in node.constants) {
-      SimpleIdentifier identifier = constant.name;
-      String name = identifier.name;
-      if (name == enumName) {
+    for (var member in node.members) {
+      if (member is ConstructorDeclaration) {
+        if (member.returnType.name == enumElement.name) {
+          var name = member.declaredElement!.name;
+          if (!constructorNames.add(name)) {
+            if (name.isEmpty) {
+              _errorReporter.reportErrorForName(
+                CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT,
+                member,
+              );
+            } else {
+              _errorReporter.reportErrorForName(
+                CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME,
+                member,
+                arguments: [name],
+              );
+            }
+          }
+        }
+      } else if (member is FieldDeclaration) {
+        for (var field in member.fields.variables) {
+          var identifier = field.name;
+          _checkDuplicateIdentifier(
+            member.isStatic ? staticGetters : instanceGetters,
+            identifier,
+            setterScope: member.isStatic ? staticSetters : instanceSetters,
+          );
+          _checkValuesDeclarationInEnum(identifier);
+        }
+      } else if (member is MethodDeclaration) {
+        _checkDuplicateIdentifier(
+          member.isStatic ? staticGetters : instanceGetters,
+          member.name,
+          setterScope: member.isStatic ? staticSetters : instanceSetters,
+        );
+        _checkValuesDeclarationInEnum(member.name);
+      }
+    }
+
+    if (enumName == 'values') {
+      _errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.ENUM_WITH_NAME_VALUES,
+        node.name,
+      );
+    }
+
+    for (var constant in node.constants) {
+      if (constant.name.name == enumName) {
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING,
-          identifier,
+          constant.name,
         );
-      } else if (_enumInstanceMembers.contains(name)) {
-        _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE,
-          identifier,
-          [enumName, name, enumName],
-        );
+      }
+    }
+
+    _checkConflictingConstructorAndStatic(
+      classElement: enumElement,
+      staticGetters: staticGetters,
+      staticSetters: staticSetters,
+    );
+
+    for (var accessor in enumElement.accessors) {
+      var baseName = accessor.displayName;
+      if (accessor.isStatic) {
+        var instance = _getInterfaceMember(enumElement, baseName);
+        if (instance != null && baseName != 'values') {
+          _errorReporter.reportErrorForElement(
+            CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE,
+            accessor,
+            [enumName, baseName, enumName],
+          );
+        }
+      } else {
+        var inherited = _getInheritedMember(enumElement, baseName);
+        if (inherited is MethodElement) {
+          _errorReporter.reportErrorForElement(
+            CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD,
+            accessor,
+            [
+              enumElement.displayName,
+              baseName,
+              inherited.enclosingElement.displayName,
+            ],
+          );
+        }
+      }
+    }
+
+    for (var method in enumElement.methods) {
+      var baseName = method.displayName;
+      if (method.isStatic) {
+        var instance = _getInterfaceMember(enumElement, baseName);
+        if (instance != null) {
+          _errorReporter.reportErrorForElement(
+            CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE,
+            method,
+            [enumName, baseName, enumName],
+          );
+        }
+      } else {
+        var inherited = _getInheritedMember(enumElement, baseName);
+        if (inherited is PropertyAccessorElement) {
+          _errorReporter.reportErrorForElement(
+            CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD,
+            method,
+            [
+              enumElement.displayName,
+              baseName,
+              inherited.enclosingElement.displayName,
+            ],
+          );
+        }
       }
     }
   }
@@ -297,37 +397,17 @@
       }
     }
 
+    _checkConflictingConstructorAndStatic(
+      classElement: element,
+      staticGetters: staticGetters,
+      staticSetters: staticSetters,
+    );
+
     // Check for local static members conflicting with local instance members.
+    // TODO(scheglov) This code is duplicated for enums. But for classes it is
+    // separated also into ErrorVerifier - where we check inherited.
     for (ClassMember member in members) {
-      if (member is ConstructorDeclaration) {
-        var nameNode = member.name;
-        if (nameNode != null) {
-          String name = nameNode.name;
-          var staticMember = staticGetters[name] ?? staticSetters[name];
-          if (staticMember != null) {
-            if (staticMember is PropertyAccessorElement) {
-              CompileTimeErrorCode errorCode;
-              if (staticMember.isSynthetic) {
-                errorCode = CompileTimeErrorCode
-                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD;
-              } else if (staticMember.isGetter) {
-                errorCode = CompileTimeErrorCode
-                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER;
-              } else {
-                errorCode = CompileTimeErrorCode
-                    .CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER;
-              }
-              _errorReporter.reportErrorForNode(errorCode, nameNode, [name]);
-            } else {
-              _errorReporter.reportErrorForNode(
-                CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
-                nameNode,
-                [name],
-              );
-            }
-          }
-        }
-      } else if (member is FieldDeclaration) {
+      if (member is FieldDeclaration) {
         if (member.isStatic) {
           for (VariableDeclaration field in member.fields.variables) {
             SimpleIdentifier identifier = field.name;
@@ -359,6 +439,37 @@
     }
   }
 
+  void _checkConflictingConstructorAndStatic({
+    required ClassElement classElement,
+    required Map<String, Element> staticGetters,
+    required Map<String, Element> staticSetters,
+  }) {
+    for (var constructor in classElement.constructors) {
+      var name = constructor.name;
+      var staticMember = staticGetters[name] ?? staticSetters[name];
+      if (staticMember is PropertyAccessorElement) {
+        CompileTimeErrorCode errorCode;
+        if (staticMember.isSynthetic) {
+          errorCode =
+              CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD;
+        } else if (staticMember.isGetter) {
+          errorCode =
+              CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER;
+        } else {
+          errorCode =
+              CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER;
+        }
+        _errorReporter.reportErrorForElement(errorCode, constructor, [name]);
+      } else if (staticMember is MethodElement) {
+        _errorReporter.reportErrorForElement(
+          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
+          constructor,
+          [name],
+        );
+      }
+    }
+  }
+
   /// Check whether the given [element] defined by the [identifier] is already
   /// in one of the scopes - [getterScope] or [setterScope], and produce an
   /// error if it is.
@@ -425,6 +536,43 @@
     }
   }
 
+  void _checkValuesDeclarationInEnum(SimpleIdentifier name) {
+    if (name.name == 'values') {
+      _errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM,
+        name,
+      );
+    }
+  }
+
+  ExecutableElement? _getInheritedMember(
+      ClassElement element, String baseName) {
+    var libraryUri = _currentLibrary.source.uri;
+
+    var getterName = Name(libraryUri, baseName);
+    var getter = _inheritanceManager.getInherited2(element, getterName);
+    if (getter != null) {
+      return getter;
+    }
+
+    var setterName = Name(libraryUri, '$baseName=');
+    return _inheritanceManager.getInherited2(element, setterName);
+  }
+
+  ExecutableElement? _getInterfaceMember(
+      ClassElement element, String baseName) {
+    var libraryUri = _currentLibrary.source.uri;
+
+    var getterName = Name(libraryUri, baseName);
+    var getter = _inheritanceManager.getMember2(element, getterName);
+    if (getter != null) {
+      return getter;
+    }
+
+    var setterName = Name(libraryUri, '$baseName=');
+    return _inheritanceManager.getMember2(element, setterName);
+  }
+
   static bool _isGetterSetterPair(Element a, Element b) {
     if (a is PropertyAccessorElement && b is PropertyAccessorElement) {
       return a.isGetter && b.isSetter || a.isSetter && b.isGetter;
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 76860af..f835414 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
@@ -32,42 +31,14 @@
 
   bool get _isNonNullableByDefault => _typeSystem.isNonNullableByDefault;
 
-  void checkExtension(ExtensionDeclaration node) {
-    for (var getterNode in node.members) {
-      if (getterNode is MethodDeclaration && getterNode.isGetter) {
-        checkGetter(getterNode.name,
-            getterNode.declaredElement as PropertyAccessorElement);
+  void checkExtension(ExtensionElement element) {
+    for (var getter in element.accessors) {
+      if (getter.isGetter) {
+        _checkLocalGetter(getter);
       }
     }
   }
 
-  void checkGetter(
-    SimpleIdentifier nameNode,
-    PropertyAccessorElement getter,
-  ) {
-    assert(getter.isGetter);
-
-    var setter = getter.correspondingSetter;
-    if (setter == null) {
-      return;
-    }
-
-    var getterType = _getGetterType(getter);
-    var setterType = _getSetterType(setter);
-    if (setterType == null) {
-      return;
-    }
-
-    if (!_match(getterType, setterType)) {
-      var name = nameNode.name;
-      _errorReporter.reportErrorForNode(
-        _errorCode,
-        nameNode,
-        [name, getterType, setterType, name],
-      );
-    }
-  }
-
   void checkInterface(ClassElement classElement, Interface interface) {
     var libraryUri = classElement.library.source.uri;
 
@@ -113,6 +84,33 @@
     }
   }
 
+  void checkStaticAccessors(List<PropertyAccessorElement> accessors) {
+    for (var getter in accessors) {
+      if (getter.isStatic && getter.isGetter) {
+        _checkLocalGetter(getter);
+      }
+    }
+  }
+
+  void _checkLocalGetter(PropertyAccessorElement getter) {
+    assert(getter.isGetter);
+    var setter = getter.correspondingSetter;
+    if (setter != null) {
+      var getterType = _getGetterType(getter);
+      var setterType = _getSetterType(setter);
+      if (setterType != null) {
+        if (!_match(getterType, setterType)) {
+          var name = getter.name;
+          _errorReporter.reportErrorForElement(
+            _errorCode,
+            getter,
+            [name, getterType, setterType, name],
+          );
+        }
+      }
+    }
+  }
+
   bool _match(DartType getterType, DartType setterType) {
     return _isNonNullableByDefault
         ? _typeSystem.isSubtypeOf(getterType, setterType)
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index b6d1951..0e38986 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -45,7 +45,7 @@
           classNameNode: declaration.name,
           implementsClause: declaration.implementsClause,
           members: declaration.members,
-          superclass: declaration.extendsClause?.superclass2,
+          superclass: declaration.extendsClause?.superclass,
           withClause: declaration.withClause,
         ).verify();
       } else if (declaration is ClassTypeAlias) {
@@ -58,7 +58,20 @@
           library: library,
           classNameNode: declaration.name,
           implementsClause: declaration.implementsClause,
-          superclass: declaration.superclass2,
+          superclass: declaration.superclass,
+          withClause: declaration.withClause,
+        ).verify();
+      } else if (declaration is EnumDeclaration) {
+        _ClassVerifier(
+          typeSystem: _typeSystem,
+          typeProvider: _typeProvider,
+          inheritance: _inheritance,
+          reporter: _reporter,
+          featureSet: unit.featureSet,
+          library: library,
+          classNameNode: declaration.name,
+          implementsClause: declaration.implementsClause,
+          members: declaration.members,
           withClause: declaration.withClause,
         ).verify();
       } else if (declaration is MixinDeclaration) {
@@ -94,7 +107,7 @@
   final FeatureSet featureSet;
   final LibraryElementImpl library;
   final Uri libraryUri;
-  final ClassElementImpl classElement;
+  final AbstractClassElementImpl classElement;
 
   final SimpleIdentifier classNameNode;
   final List<ClassMember> members;
@@ -105,6 +118,9 @@
 
   final List<InterfaceType> directSuperInterfaces = [];
 
+  late final implementsDartCoreEnum =
+      classElement.allSupertypes.any((e) => e.isDartCoreEnum);
+
   _ClassVerifier({
     required this.typeSystem,
     required this.typeProvider,
@@ -119,7 +135,7 @@
     this.superclass,
     this.withClause,
   })  : libraryUri = library.source.uri,
-        classElement = classNameNode.staticElement as ClassElementImpl;
+        classElement = classNameNode.staticElement as AbstractClassElementImpl;
 
   bool get _isNonNullableByDefault => typeSystem.isNonNullableByDefault;
 
@@ -128,6 +144,16 @@
       return;
     }
 
+    if (!classElement.isEnum &&
+        !classElement.isAbstract &&
+        implementsDartCoreEnum) {
+      reporter.reportErrorForNode(
+        CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE,
+        classNameNode,
+      );
+      return;
+    }
+
     if (_checkForRecursiveInterfaceInheritance(classElement)) {
       return;
     }
@@ -152,7 +178,7 @@
     //   class C extends S&M2 { ...members of C... }
     // So, we need to check members of each mixin against superinterfaces
     // of `S`, and superinterfaces of all previous mixins.
-    var mixinNodes = withClause?.mixinTypes2;
+    var mixinNodes = withClause?.mixinTypes;
     var mixinTypes = classElement.mixins;
     for (var i = 0; i < mixinTypes.length; i++) {
       var mixinType = mixinTypes[i];
@@ -171,6 +197,12 @@
           var fieldElement = field.declaredElement as FieldElement;
           _checkDeclaredMember(field.name, libraryUri, fieldElement.getter);
           _checkDeclaredMember(field.name, libraryUri, fieldElement.setter);
+          if (!member.isStatic && !classElement.isEnum) {
+            _checkIllegalEnumValuesDeclaration(field.name);
+          }
+          if (!member.isStatic) {
+            _checkIllegalConcreteEnumMemberDeclaration(field.name);
+          }
         }
       } else if (member is MethodDeclaration) {
         var hasError = _reportNoCombinedSuperSignature(member);
@@ -180,9 +212,18 @@
 
         _checkDeclaredMember(member.name, libraryUri, member.declaredElement,
             methodParameterNodes: member.parameters?.parameters);
+        if (!(member.isStatic || member.isAbstract || member.isSetter)) {
+          _checkIllegalConcreteEnumMemberDeclaration(member.name);
+        }
+        if (!member.isStatic && !classElement.isEnum) {
+          _checkIllegalEnumValuesDeclaration(member.name);
+        }
       }
     }
 
+    _checkIllegalConcreteEnumMemberInheritance();
+    _checkIllegalEnumValuesInheritance();
+
     GetterSetterTypesVerifier(
       typeSystem: typeSystem,
       errorReporter: reporter,
@@ -201,10 +242,16 @@
 
         // No concrete implementation of the name.
         if (concreteElement == null) {
-          if (!_reportConcreteClassWithAbstractMember(name.name)) {
-            inheritedAbstract ??= [];
-            inheritedAbstract.add(interfaceElement);
+          if (_reportConcreteClassWithAbstractMember(name.name)) {
+            continue;
           }
+          // We already reported ILLEGAL_ENUM_VALUES_INHERITANCE.
+          if (classElement.isEnum &&
+              const {'values', 'values='}.contains(name.name)) {
+            continue;
+          }
+          inheritedAbstract ??= [];
+          inheritedAbstract.add(interfaceElement);
           continue;
         }
 
@@ -332,8 +379,25 @@
     }
 
     DartType type = namedType.typeOrThrow;
-    if (type is InterfaceType &&
-        typeProvider.isNonSubtypableClass(type.element)) {
+    if (type is! InterfaceType) {
+      return false;
+    }
+
+    var interfaceElement = type.element;
+
+    if (interfaceElement.isDartCoreEnum &&
+        library.featureSet.isEnabled(Feature.enhanced_enums)) {
+      if (classElement.isAbstract || classElement.isEnum) {
+        return false;
+      }
+      reporter.reportErrorForNode(
+        CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE,
+        namedType,
+      );
+      return true;
+    }
+
+    if (typeProvider.isNonSubtypableClass(interfaceElement)) {
       reporter.reportErrorForNode(errorCode, namedType, [type]);
       return true;
     }
@@ -347,7 +411,7 @@
   bool _checkDirectSuperTypes() {
     var hasError = false;
     if (implementsClause != null) {
-      for (var namedType in implementsClause!.interfaces2) {
+      for (var namedType in implementsClause!.interfaces) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
@@ -357,7 +421,7 @@
       }
     }
     if (onClause != null) {
-      for (var namedType in onClause!.superclassConstraints2) {
+      for (var namedType in onClause!.superclassConstraints) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
@@ -375,18 +439,43 @@
       }
     }
     if (withClause != null) {
-      for (var namedType in withClause!.mixinTypes2) {
+      for (var namedType in withClause!.mixinTypes) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
         )) {
           hasError = true;
         }
+        if (classElement.isEnum && _checkEnumMixin(namedType)) {
+          hasError = true;
+        }
       }
     }
     return hasError;
   }
 
+  bool _checkEnumMixin(NamedType namedType) {
+    DartType type = namedType.typeOrThrow;
+    if (type is! InterfaceType) {
+      return false;
+    }
+
+    var interfaceElement = type.element;
+    if (interfaceElement.isEnum) {
+      return false;
+    }
+
+    if (interfaceElement.fields.every((e) => e.isStatic || e.isSynthetic)) {
+      return false;
+    }
+
+    reporter.reportErrorForNode(
+      CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE,
+      namedType,
+    );
+    return true;
+  }
+
   void _checkForOptionalParametersDifferentDefaultValues(
     MethodElement baseExecutable,
     MethodElement derivedExecutable,
@@ -557,6 +646,81 @@
     return false;
   }
 
+  void _checkIllegalConcreteEnumMemberDeclaration(SimpleIdentifier name) {
+    if (implementsDartCoreEnum &&
+        const {'index', 'hashCode', '=='}.contains(name.name)) {
+      reporter.reportErrorForNode(
+        CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION,
+        name,
+        [name.name],
+      );
+    }
+  }
+
+  void _checkIllegalConcreteEnumMemberInheritance() {
+    // We ignore mixins because they don't inherit and members.
+    // But to support `super.foo()` invocations we put members from superclass
+    // constraints into the `superImplemented` bucket, the same we look below.
+    if (classElement.isMixin) {
+      return;
+    }
+
+    if (implementsDartCoreEnum) {
+      var concreteMap = inheritance.getInheritedConcreteMap2(classElement);
+
+      void checkSingle(
+        String memberName,
+        bool Function(ClassElement enclosingClass) filter,
+      ) {
+        var member = concreteMap[Name(libraryUri, memberName)];
+        if (member != null) {
+          var enclosingClass = member.enclosingElement;
+          if (enclosingClass is ClassElement && filter(enclosingClass)) {
+            reporter.reportErrorForNode(
+              CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE,
+              classNameNode,
+              [memberName, enclosingClass.name],
+            );
+          }
+        }
+      }
+
+      checkSingle('hashCode', (e) => !e.isDartCoreObject);
+      checkSingle('==', (e) => !e.isDartCoreObject);
+      checkSingle('index', (e) => !e.isDartCoreEnum);
+    }
+  }
+
+  void _checkIllegalEnumValuesDeclaration(SimpleIdentifier name) {
+    if (implementsDartCoreEnum && name.name == 'values') {
+      reporter.reportErrorForNode(
+        CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION,
+        name,
+      );
+    }
+  }
+
+  void _checkIllegalEnumValuesInheritance() {
+    if (implementsDartCoreEnum) {
+      var getter = inheritance.getInherited2(
+        classElement,
+        Name(libraryUri, 'values'),
+      );
+      var setter = inheritance.getInherited2(
+        classElement,
+        Name(libraryUri, 'values='),
+      );
+      var inherited = getter ?? setter;
+      if (inherited != null) {
+        reporter.reportErrorForNode(
+          CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE,
+          classNameNode,
+          [inherited.enclosingElement.name!],
+        );
+      }
+    }
+  }
+
   /// Return the error code that should be used when the given class [element]
   /// references itself directly.
   ErrorCode _getRecursiveErrorCode(ClassElement element) {
@@ -587,9 +751,12 @@
     bool checkMemberNameCombo(ClassMember member, String memberName) {
       if (memberName == name) {
         reporter.reportErrorForNode(
-            CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
-            member,
-            [name, classElement.name]);
+          classElement.isEnum
+              ? CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER
+              : CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
+          member,
+          [name, classElement.name],
+        );
         return true;
       } else {
         return false;
diff --git a/pkg/analyzer/lib/src/error/override_verifier.dart b/pkg/analyzer/lib/src/error/override_verifier.dart
index 795a093..5a87250 100644
--- a/pkg/analyzer/lib/src/error/override_verifier.dart
+++ b/pkg/analyzer/lib/src/error/override_verifier.dart
@@ -37,6 +37,13 @@
   }
 
   @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    _currentClass = node.declaredElement;
+    super.visitEnumDeclaration(node);
+    _currentClass = null;
+  }
+
+  @override
   void visitFieldDeclaration(FieldDeclaration node) {
     for (VariableDeclaration field in node.fields.variables) {
       var fieldElement = field.declaredElement as FieldElement;
diff --git a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
index 19ca635..0e553d3 100644
--- a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
+++ b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
@@ -18,13 +18,22 @@
   RequiredParametersVerifier(this._errorReporter);
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    _check(
+      parameters: node.constructorElement?.parameters,
+      arguments: node.arguments?.argumentList.arguments ?? <Expression>[],
+      errorNode: node.name,
+    );
+  }
+
+  @override
   void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
     var type = node.staticInvokeType;
     if (type is FunctionType) {
       _check(
-        type.parameters,
-        node.argumentList,
-        node,
+        parameters: type.parameters,
+        arguments: node.argumentList.arguments,
+        errorNode: node,
       );
     }
   }
@@ -32,9 +41,9 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     _check(
-      node.constructorName.staticElement?.parameters,
-      node.argumentList,
-      node.constructorName,
+      parameters: node.constructorName.staticElement?.parameters,
+      arguments: node.argumentList.arguments,
+      errorNode: node.constructorName,
     );
   }
 
@@ -43,15 +52,19 @@
     if (node.methodName.name == FunctionElement.CALL_METHOD_NAME) {
       var targetType = node.realTarget?.staticType;
       if (targetType is FunctionType) {
-        _check(targetType.parameters, node.argumentList, node.argumentList);
+        _check(
+          parameters: targetType.parameters,
+          arguments: node.argumentList.arguments,
+          errorNode: node.argumentList,
+        );
         return;
       }
     }
 
     _check(
-      _executableElement(node.methodName.staticElement)?.parameters,
-      node.argumentList,
-      node.methodName,
+      parameters: _executableElement(node.methodName.staticElement)?.parameters,
+      arguments: node.argumentList.arguments,
+      errorNode: node.methodName,
     );
   }
 
@@ -59,26 +72,31 @@
   void visitRedirectingConstructorInvocation(
       RedirectingConstructorInvocation node) {
     _check(
-      _executableElement(node.staticElement)?.parameters,
-      node.argumentList,
-      node,
+      parameters: _executableElement(node.staticElement)?.parameters,
+      arguments: node.argumentList.arguments,
+      errorNode: node,
     );
   }
 
   @override
-  void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
+  void visitSuperConstructorInvocation(
+    SuperConstructorInvocation node, {
+    ConstructorElement? enclosingConstructor,
+  }) {
     _check(
-      _executableElement(node.staticElement)?.parameters,
-      node.argumentList,
-      node,
+      parameters: _executableElement(node.staticElement)?.parameters,
+      enclosingConstructor: enclosingConstructor,
+      arguments: node.argumentList.arguments,
+      errorNode: node,
     );
   }
 
-  void _check(
-    List<ParameterElement>? parameters,
-    ArgumentList argumentList,
-    AstNode node,
-  ) {
+  void _check({
+    required List<ParameterElement>? parameters,
+    ConstructorElement? enclosingConstructor,
+    required List<Expression> arguments,
+    required AstNode errorNode,
+  }) {
     if (parameters == null) {
       return;
     }
@@ -86,10 +104,11 @@
     for (ParameterElement parameter in parameters) {
       if (parameter.isRequiredNamed) {
         String parameterName = parameter.name;
-        if (!_containsNamedExpression(argumentList, parameterName)) {
+        if (!_containsNamedExpression(
+            enclosingConstructor, arguments, parameterName)) {
           _errorReporter.reportErrorForNode(
             CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT,
-            node,
+            errorNode,
             [parameterName],
           );
         }
@@ -98,18 +117,19 @@
         var annotation = _requiredAnnotation(parameter);
         if (annotation != null) {
           String parameterName = parameter.name;
-          if (!_containsNamedExpression(argumentList, parameterName)) {
+          if (!_containsNamedExpression(
+              enclosingConstructor, arguments, parameterName)) {
             var reason = annotation.reason;
             if (reason != null) {
               _errorReporter.reportErrorForNode(
                 HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS,
-                node,
+                errorNode,
                 [parameterName, reason],
               );
             } else {
               _errorReporter.reportErrorForNode(
                 HintCode.MISSING_REQUIRED_PARAM,
-                node,
+                errorNode,
                 [parameterName],
               );
             }
@@ -119,8 +139,11 @@
     }
   }
 
-  static bool _containsNamedExpression(ArgumentList args, String name) {
-    NodeList<Expression> arguments = args.arguments;
+  static bool _containsNamedExpression(
+    ConstructorElement? enclosingConstructor,
+    List<Expression> arguments,
+    String name,
+  ) {
     for (int i = arguments.length - 1; i >= 0; i--) {
       Expression expression = arguments[i];
       if (expression is NamedExpression) {
@@ -129,6 +152,12 @@
         }
       }
     }
+
+    if (enclosingConstructor != null) {
+      return enclosingConstructor.parameters.any((e) =>
+          e is SuperFormalParameterElement && e.isNamed && e.name == name);
+    }
+
     return false;
   }
 
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index e6a4df3..b3d3b24 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -34,7 +34,7 @@
   ///
   /// @param unit the compilation unit containing the to-do comments
   void findIn(CompilationUnit unit) {
-    _gatherTodoComments(unit.beginToken, unit.lineInfo!);
+    _gatherTodoComments(unit.beginToken, unit.lineInfo);
   }
 
   /// Search the comment tokens reachable from the given token and create errors
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index 1488253..aadad6e 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -33,7 +33,7 @@
       _libraryElement.typeSystem as TypeSystemImpl;
 
   void checkConstructorReference(ConstructorReference node) {
-    var classElement = node.constructorName.type2.name.staticElement;
+    var classElement = node.constructorName.type.name.staticElement;
     List<TypeParameterElement> typeParameters;
     if (classElement is TypeAliasElement) {
       typeParameters = classElement.typeParameters;
@@ -46,7 +46,7 @@
     if (typeParameters.isEmpty) {
       return;
     }
-    var typeArgumentList = node.constructorName.type2.typeArguments;
+    var typeArgumentList = node.constructorName.type.typeArguments;
     if (typeArgumentList == null) {
       return;
     }
@@ -91,6 +91,55 @@
     }
   }
 
+  void checkEnumConstantDeclaration(EnumConstantDeclaration node) {
+    var constructorElement = node.constructorElement;
+    if (constructorElement == null) {
+      return;
+    }
+
+    var enumElement = constructorElement.enclosingElement;
+    var typeParameters = enumElement.typeParameters;
+
+    var typeArgumentList = node.arguments?.typeArguments;
+    var typeArgumentNodes = typeArgumentList?.arguments;
+    if (typeArgumentList != null &&
+        typeArgumentNodes != null &&
+        typeArgumentNodes.length != typeParameters.length) {
+      _errorReporter.reportErrorForNode(
+        CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM,
+        typeArgumentList,
+        [typeParameters.length, typeArgumentNodes.length],
+      );
+    }
+
+    if (typeParameters.isEmpty) {
+      return;
+    }
+
+    // Check that type arguments are regular-bounded.
+    var typeArguments = constructorElement.returnType.typeArguments;
+    var substitution = Substitution.fromPairs(typeParameters, typeArguments);
+    for (var i = 0; i < typeArguments.length; i++) {
+      var typeParameter = typeParameters[i];
+      var typeArgument = typeArguments[i];
+
+      var bound = typeParameter.bound;
+      if (bound == null) {
+        continue;
+      }
+
+      bound = substitution.substituteType(bound);
+
+      if (!_typeSystem.isSubtypeOf(typeArgument, bound)) {
+        _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
+          typeArgumentNodes?[i] ?? node.name,
+          [typeArgument, typeParameter.name, bound],
+        );
+      }
+    }
+  }
+
   void checkFunctionExpressionInvocation(FunctionExpressionInvocation node) {
     _checkInvocationTypeArguments(
       node.typeArguments?.arguments,
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 e9d4b77..dcac77f 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,18 @@
   }
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    usedElements.addElement(node.constructorElement?.declaration);
+
+    var argumentList = node.arguments?.argumentList;
+    if (argumentList != null) {
+      _addParametersForArguments(argumentList);
+    }
+
+    super.visitEnumConstantDeclaration(node);
+  }
+
+  @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
     var enclosingExecOld = _enclosingExec;
     try {
@@ -134,10 +146,7 @@
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    for (var argument in node.argumentList.arguments) {
-      var parameter = argument.staticParameterElement;
-      usedElements.addElement(parameter);
-    }
+    _addParametersForArguments(node.argumentList);
     super.visitInstanceCreationExpression(node);
   }
 
@@ -168,10 +177,7 @@
   void visitMethodInvocation(MethodInvocation node) {
     var function = node.methodName.staticElement;
     if (function is FunctionElement || function is MethodElement) {
-      for (var argument in node.argumentList.arguments) {
-        var parameter = argument.staticParameterElement;
-        usedElements.addElement(parameter);
-      }
+      _addParametersForArguments(node.argumentList);
     }
     super.visitMethodInvocation(node);
   }
@@ -251,8 +257,10 @@
           element.name == 'values') {
         // If the 'values' static accessor of the enum is accessed, then all of
         // the enum values have been read.
-        for (var value in enclosingElement.fields) {
-          usedElements.readMembers.add(value.getter!);
+        for (var field in enclosingElement.fields) {
+          if (field.isEnumConstant) {
+            usedElements.readMembers.add(field.getter!);
+          }
         }
       } else if ((enclosingElement is ClassElement ||
               enclosingElement is ExtensionElement) &&
@@ -289,6 +297,13 @@
     }
   }
 
+  void _addParametersForArguments(ArgumentList argumentList) {
+    for (var argument in argumentList.arguments) {
+      var parameter = argument.staticParameterElement;
+      usedElements.addElement(parameter);
+    }
+  }
+
   /// Marks the [element] of [node] as used in the library.
   void _useIdentifierElement(
     Identifier node,
@@ -492,14 +507,24 @@
       return false;
     }
     var enclosingElement = element.enclosingElement;
-    if (enclosingElement is ClassElement &&
-        enclosingElement.isPrivate &&
-        (element.isStatic || element is ConstructorElement)) {
-      return false;
-    } else if (enclosingElement is ExtensionElement &&
-        enclosingElement.isPrivate) {
-      return false;
+
+    if (enclosingElement is ClassElement) {
+      if (enclosingElement.isEnum) {
+        if (element is ConstructorElement && element.isGenerative) {
+          return false;
+        }
+      }
+      if (enclosingElement.isPrivate) {
+        if (element.isStatic || element is ConstructorElement) {
+          return false;
+        }
+      }
     }
+
+    if (enclosingElement is ExtensionElement) {
+      return enclosingElement.isPublic;
+    }
+
     return true;
   }
 
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index db03646..9526d94 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -58,14 +58,16 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
 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,
-        EnumConstantArgumentsImpl,
         ConstructorSelectorImpl,
+        EnumConstantArgumentsImpl,
         EnumConstantDeclarationImpl,
         EnumDeclarationImpl,
         ExtensionDeclarationImpl,
@@ -76,6 +78,7 @@
         TypeArgumentListImpl,
         TypeParameterImpl;
 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';
@@ -170,8 +173,10 @@
 
   final FeatureSet _featureSet;
 
+  final LineInfo _lineInfo;
+
   AstBuilder(ErrorReporter? errorReporter, this.fileUri, this.isFullAst,
-      this._featureSet,
+      this._featureSet, this._lineInfo,
       [Uri? uri])
       : errorReporter = FastaErrorReporter(errorReporter),
         enableNonNullable = _featureSet.isEnabled(Feature.non_nullable),
@@ -248,25 +253,28 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     assert(classDeclaration == null &&
         mixinDeclaration == null &&
         extensionDeclaration == null);
     push(_Modifiers()..abstractKeyword = abstractToken);
-    if (macroToken != null && !enableMacros) {
-      var feature = ExperimentalFeatures.macros;
-      handleRecoverableError(
-          templateExperimentNotEnabled.withArguments(
-            feature.enableString,
-            _versionAsString(ExperimentStatus.currentVersion),
-          ),
-          macroToken,
-          macroToken);
-      // Pretend that 'macro' didn't occur while this feature is incomplete.
-      macroToken = null;
+    if (!enableMacros) {
+      if (macroToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            macroToken,
+            macroToken);
+        // Pretend that 'macro' didn't occur while this feature is incomplete.
+        macroToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
@@ -359,6 +367,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -366,6 +375,10 @@
       Token? getOrSet,
       Token name) {
     _Modifiers modifiers = _Modifiers();
+    if (augmentToken != null) {
+      assert(augmentToken.isModifier);
+      modifiers.augmentKeyword = augmentToken;
+    }
     if (externalToken != null) {
       assert(externalToken.isModifier);
       modifiers.externalKeyword = externalToken;
@@ -389,34 +402,42 @@
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
     assert(classDeclaration == null &&
         mixinDeclaration == null &&
         extensionDeclaration == null);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     push(_Modifiers()..abstractKeyword = abstractToken);
-    if (macroToken != null && !enableMacros) {
-      var feature = ExperimentalFeatures.macros;
-      handleRecoverableError(
-          templateExperimentNotEnabled.withArguments(
-            feature.enableString,
-            _versionAsString(ExperimentStatus.currentVersion),
-          ),
-          macroToken,
-          macroToken);
-      // Pretend that 'macro' didn't occur while this feature is incomplete.
-      macroToken = null;
+    if (!enableMacros) {
+      if (macroToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            macroToken,
+            macroToken);
+        // Pretend that 'macro' didn't occur while this feature is incomplete.
+        macroToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
-    push(_Modifiers()..externalKeyword = externalToken);
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
+    push(_Modifiers()
+      ..augmentKeyword = augmentToken
+      ..externalKeyword = externalToken);
   }
 
   @override
@@ -943,6 +964,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -994,6 +1016,7 @@
         comment: comment,
         metadata: metadata,
         abstractKeyword: abstractToken,
+        augmentKeyword: augmentToken,
         covariantKeyword: covariantKeyword,
         externalKeyword: externalToken,
         staticKeyword: staticToken,
@@ -1109,7 +1132,8 @@
         directives: directives,
         declarations: declarations,
         endToken: endToken,
-        featureSet: _featureSet);
+        featureSet: _featureSet,
+        lineInfo: _lineInfo);
     push(unit);
   }
 
@@ -1370,6 +1394,7 @@
   @override
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1384,8 +1409,17 @@
       // an error at this point, but we include them in order to get navigation,
       // search, etc.
     }
-    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
-        lateToken, varFinalOrConst, count, beginToken, endToken);
+    endClassFields(
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        count,
+        beginToken,
+        endToken);
   }
 
   @override
@@ -1776,7 +1810,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     assert(optional('import', importKeyword));
     assert(optionalOrNull(';', semicolon));
     debugEvent("Import");
@@ -1790,6 +1824,21 @@
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, importKeyword);
 
+    if (!enableMacros) {
+      if (augmentToken != null) {
+        var feature = ExperimentalFeatures.macros;
+        handleRecoverableError(
+            templateExperimentNotEnabled.withArguments(
+              feature.enableString,
+              _versionAsString(ExperimentStatus.currentVersion),
+            ),
+            augmentToken,
+            augmentToken);
+        // Pretend that 'augment' didn't occur while this feature is incomplete.
+        augmentToken = null;
+      }
+    }
+
     directives.add(ast.importDirective(
         comment,
         metadata,
@@ -1800,7 +1849,8 @@
         asKeyword,
         prefix,
         combinators,
-        semicolon ?? Tokens.semicolon()));
+        semicolon ?? Tokens.semicolon(),
+        augmentKeyword: augmentToken));
   }
 
   @override
@@ -1960,7 +2010,7 @@
     FunctionExpression functionExpression =
         ast.functionExpression(typeParameters, parameters, body);
     var functionDeclaration = ast.functionDeclaration(
-        null, metadata, null, returnType, null, name, functionExpression);
+        null, metadata, null, null, returnType, null, name, functionExpression);
     push(ast.functionDeclarationStatement(functionDeclaration));
   }
 
@@ -2036,6 +2086,7 @@
   @override
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -2044,8 +2095,17 @@
       int count,
       Token beginToken,
       Token endToken) {
-    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
-        lateToken, varFinalOrConst, count, beginToken, endToken);
+    endClassFields(
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        count,
+        beginToken,
+        endToken);
   }
 
   @override
@@ -2088,6 +2148,7 @@
     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 modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2103,6 +2164,7 @@
         equalsToken,
         abstractKeyword,
         macroKeyword,
+        augmentKeyword,
         superclass,
         withClause,
         implementsClause,
@@ -2367,12 +2429,14 @@
     var name = pop() as SimpleIdentifier;
     var returnType = pop() as TypeAnnotation?;
     var modifiers = pop() as _Modifiers?;
+    var augmentKeyword = modifiers?.augmentKeyword;
     var externalKeyword = modifiers?.externalKeyword;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
     declarations.add(ast.functionDeclaration(
         comment,
         metadata,
+        augmentKeyword,
         externalKeyword,
         returnType,
         getOrSet,
@@ -2688,6 +2752,7 @@
     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 modifiers = pop() as _Modifiers?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
@@ -2701,6 +2766,7 @@
       metadata,
       abstractKeyword,
       macroKeyword,
+      augmentKeyword,
       classKeyword,
       name,
       typeParameters,
@@ -2814,11 +2880,12 @@
     debugEvent("EnumElement");
     var tmpArguments = pop() as MethodInvocationImpl?;
     var tmpConstructor = pop() as ConstructorNameImpl?;
+    var constant = pop() as EnumConstantDeclarationImpl;
 
     if (!enableEnhancedEnums &&
         (tmpArguments != null ||
             tmpConstructor != null &&
-                (tmpConstructor.type2.typeArguments != null ||
+                (tmpConstructor.type.typeArguments != null ||
                     tmpConstructor.name != null))) {
       Token token = tmpArguments != null
           ? tmpArguments.argumentList.beginToken
@@ -2834,31 +2901,44 @@
       );
     }
 
-    var constant = pop() as EnumConstantDeclarationImpl;
+    var argumentList = tmpArguments?.argumentList;
+
+    TypeArgumentListImpl? typeArguments;
+    ConstructorSelectorImpl? constructorSelector;
+    if (tmpConstructor != null) {
+      typeArguments = tmpConstructor.type.typeArguments;
+      var constructorNamePeriod = tmpConstructor.period;
+      var constructorNameId = tmpConstructor.name;
+      if (constructorNamePeriod != null && constructorNameId != null) {
+        constructorSelector = ConstructorSelectorImpl(
+          period: constructorNamePeriod,
+          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.
-    if (tmpArguments != null) {
-      TypeArgumentListImpl? typeArguments;
-      ConstructorSelectorImpl? constructorName;
-      if (tmpConstructor != null) {
-        typeArguments = tmpConstructor.type2.typeArguments;
-        var constructorNamePeriod = tmpConstructor.period;
-        var constructorNameId = tmpConstructor.name;
-        if (constructorNamePeriod != null && constructorNameId != null) {
-          constructorName = ConstructorSelectorImpl(
-            period: constructorNamePeriod,
-            name: constructorNameId,
-          );
-        }
-      }
+    if (argumentList != null) {
       constant = EnumConstantDeclarationImpl(
         documentationComment: constant.documentationComment,
         metadata: constant.metadata,
         name: constant.name,
         arguments: EnumConstantArgumentsImpl(
           typeArguments: typeArguments,
-          constructorSelector: constructorName,
-          argumentList: tmpArguments.argumentList,
+          constructorSelector: constructorSelector,
+          argumentList: argumentList,
         ),
       );
     }
@@ -2873,6 +2953,10 @@
     var constants = popTypedList2<EnumConstantDeclaration>(elementsCount);
     enumDeclaration!.constants.addAll(constants);
 
+    if (optional(';', elementsEndToken)) {
+      enumDeclaration!.semicolon = elementsEndToken;
+    }
+
     if (!enableEnhancedEnums && optional(';', elementsEndToken)) {
       var feature = ExperimentalFeatures.enhanced_enums;
       handleRecoverableError(
@@ -2930,6 +3014,7 @@
         implementsClause: implementsClause,
         leftBracket: leftBrace,
         constants: [],
+        semicolon: null,
         members: [],
         rightBracket: leftBrace.endGroup!,
       ),
@@ -3509,6 +3594,7 @@
 
     var implementsClause = pop(NullValue.IdentifierList) as ImplementsClause?;
     var onClause = pop(NullValue.IdentifierList) as OnClause?;
+    var augmentKeyword = pop(NullValue.Token) as Token?;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop() as SimpleIdentifier;
     var metadata = pop() as List<Annotation>?;
@@ -3517,6 +3603,7 @@
     mixinDeclaration = ast.mixinDeclaration(
       comment,
       metadata,
+      augmentKeyword,
       mixinKeyword,
       name,
       typeParameters,
@@ -3723,7 +3810,7 @@
     var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClause?;
     var declaration = declarations.last as ClassDeclarationImpl;
     if (extendsClause != null) {
-      if (declaration.extendsClause?.superclass2 == null) {
+      if (declaration.extendsClause?.superclass == null) {
         declaration.extendsClause = extendsClause;
       }
     }
@@ -3731,15 +3818,15 @@
       if (declaration.withClause == null) {
         declaration.withClause = withClause;
       } else {
-        declaration.withClause!.mixinTypes2.addAll(withClause.mixinTypes2);
+        declaration.withClause!.mixinTypes.addAll(withClause.mixinTypes);
       }
     }
     if (implementsClause != null) {
       if (declaration.implementsClause == null) {
         declaration.implementsClause = implementsClause;
       } else {
-        declaration.implementsClause!.interfaces2
-            .addAll(implementsClause.interfaces2);
+        declaration.implementsClause!.interfaces
+            .addAll(implementsClause.interfaces);
       }
     }
   }
@@ -3781,16 +3868,16 @@
       if (mixinDeclaration!.onClause == null) {
         mixinDeclaration!.onClause = onClause;
       } else {
-        mixinDeclaration!.onClause!.superclassConstraints2
-            .addAll(onClause.superclassConstraints2);
+        mixinDeclaration!.onClause!.superclassConstraints
+            .addAll(onClause.superclassConstraints);
       }
     }
     if (implementsClause != null) {
       if (mixinDeclaration!.implementsClause == null) {
         mixinDeclaration!.implementsClause = implementsClause;
       } else {
-        mixinDeclaration!.implementsClause!.interfaces2
-            .addAll(implementsClause.interfaces2);
+        mixinDeclaration!.implementsClause!.interfaces
+            .addAll(implementsClause.interfaces);
       }
     }
   }
@@ -4257,12 +4344,13 @@
     return ast.variableDeclaration(name, equals, initializer);
   }
 
-  ArgumentList _syntheticArgumentList(Token precedingToken) {
-    int syntheticOffset = precedingToken.end;
-    return ast.argumentList(
-        SyntheticToken(TokenType.OPEN_PAREN, syntheticOffset),
-        [],
-        SyntheticToken(TokenType.CLOSE_PAREN, syntheticOffset));
+  ArgumentListImpl _syntheticArgumentList(Token precedingToken) {
+    var syntheticOffset = precedingToken.end;
+    var left = SyntheticToken(TokenType.OPEN_PAREN, syntheticOffset)
+      ..previous = precedingToken;
+    var right = SyntheticToken(TokenType.CLOSE_PAREN, syntheticOffset)
+      ..previous = left;
+    return ast.argumentList(left, [], right);
   }
 
   SimpleIdentifier _tmpSimpleIdentifier() {
@@ -4314,6 +4402,7 @@
 /// of modifiers.
 class _Modifiers {
   Token? abstractKeyword;
+  Token? augmentKeyword;
   Token? externalKeyword;
   Token? finalConstOrVarKeyword;
   Token? staticKeyword;
diff --git a/pkg/analyzer/lib/src/file_system/file_system.dart b/pkg/analyzer/lib/src/file_system/file_system.dart
index b7b4655..d7bfadf 100644
--- a/pkg/analyzer/lib/src/file_system/file_system.dart
+++ b/pkg/analyzer/lib/src/file_system/file_system.dart
@@ -37,5 +37,5 @@
   Uri restoreAbsolute(Source source) => pathToUri(source.fullName);
 
   /// Return `true` if the given [uri] is a `file` URI.
-  static bool isFileUri(Uri uri) => uri.scheme == FILE_SCHEME;
+  static bool isFileUri(Uri uri) => uri.isScheme(FILE_SCHEME);
 }
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index b32cea7..93bcdab 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -153,7 +153,7 @@
   }
 
   void visitConstructorName(covariant ConstructorNameImpl node) {
-    var type = node.type2.type;
+    var type = node.type.type;
     if (type == null) {
       return;
     }
@@ -271,10 +271,12 @@
   }
 
   void visitMethodInvocation(MethodInvocation node,
-      {List<WhyNotPromotedGetter>? whyNotPromotedList}) {
+      {List<WhyNotPromotedGetter>? whyNotPromotedList,
+      required DartType? contextType}) {
     whyNotPromotedList ??= [];
     _methodInvocationResolver.resolve(
-        node as MethodInvocationImpl, whyNotPromotedList);
+        node as MethodInvocationImpl, whyNotPromotedList,
+        contextType: contextType);
   }
 
   void visitMixinDeclaration(MixinDeclaration node) {
@@ -368,7 +370,7 @@
     // TODO(brianwilkerson) Defer this check until we know there's an error (by
     // in-lining _resolveArgumentsToFunction below).
     var declaration = node.thisOrAncestorOfType<ClassDeclaration>();
-    var superclassName = declaration?.extendsClause?.superclass2.name;
+    var superclassName = declaration?.extendsClause?.superclass.name;
     if (superclassName != null &&
         _resolver.definingLibrary
             .shouldIgnoreUndefinedIdentifier(superclassName)) {
diff --git a/pkg/analyzer/lib/src/generated/element_type_provider.dart b/pkg/analyzer/lib/src/generated/element_type_provider.dart
index ba2554c..c089385 100644
--- a/pkg/analyzer/lib/src/generated/element_type_provider.dart
+++ b/pkg/analyzer/lib/src/generated/element_type_provider.dart
@@ -32,7 +32,7 @@
   void freshTypeParameterCreated(TypeParameterElement newTypeParameter,
       TypeParameterElement oldTypeParameter) {}
 
-  List<InterfaceType> getClassInterfaces(ClassElementImpl element) =>
+  List<InterfaceType> getClassInterfaces(AbstractClassElementImpl element) =>
       element.interfacesInternal;
 
   /// Queries the parameters of an executable element's signature.
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 6741d98..bc9aba5 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -224,6 +224,10 @@
   @override
   VersionConstraint? sdkVersionConstraint;
 
+  /// The constraint on the language version for every Dart file.
+  /// Violations will be reported as analysis errors.
+  VersionConstraint? sourceLanguageConstraint;
+
   ExperimentStatus _contextFeatures = ExperimentStatus();
 
   /// The language version to use for libraries that are not in a package.
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 6746259..01ff198 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -26,6 +26,7 @@
 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';
+import 'package:analyzer/src/dart/element/well_bounded.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
 import 'package:analyzer/src/dart/resolver/variance.dart';
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
@@ -73,6 +74,9 @@
   /// for the kind of the function body, e.g. not `Future` for `async`.
   bool hasLegalReturnType = true;
 
+  /// The number of enclosing [CatchClause] in this executable.
+  int catchClauseLevel = 0;
+
   EnclosingExecutableContext(this.element,
       {bool? isAsynchronous, this.catchErrorOnErrorReturnType})
       : isAsynchronous =
@@ -163,11 +167,6 @@
   /// The manager for the inheritance mappings.
   final InheritanceManager3 _inheritanceManager;
 
-  /// A flag indicating whether the visitor is currently within a catch clause.
-  ///
-  /// See [visitCatchClause].
-  bool _isInCatchClause = false;
-
   /// A flag indicating whether the visitor is currently within a comment.
   bool _isInComment = false;
 
@@ -246,10 +245,9 @@
             _UninstantiatedBoundChecker(errorReporter),
         _checkUseVerifier = UseResultVerifier(errorReporter),
         _requiredParametersVerifier = RequiredParametersVerifier(errorReporter),
-        _duplicateDefinitionVerifier =
-            DuplicateDefinitionVerifier(_currentLibrary, errorReporter) {
+        _duplicateDefinitionVerifier = DuplicateDefinitionVerifier(
+            _inheritanceManager, _currentLibrary, errorReporter) {
     _isInSystemLibrary = _currentLibrary.source.uri.isScheme('dart');
-    _isInCatchClause = false;
     _isInStaticVariableDeclaration = false;
     _isInConstructorInitializer = false;
     _intType = _typeProvider.intType;
@@ -408,13 +406,12 @@
   @override
   void visitCatchClause(CatchClause node) {
     _duplicateDefinitionVerifier.checkCatchClause(node);
-    bool previousIsInCatchClause = _isInCatchClause;
     try {
-      _isInCatchClause = true;
+      _enclosingExecutable.catchClauseLevel++;
       _checkForTypeAnnotationDeferredClass(node.exceptionType);
       super.visitCatchClause(node);
     } finally {
-      _isInCatchClause = previousIsInCatchClause;
+      _enclosingExecutable.catchClauseLevel--;
     }
   }
 
@@ -422,15 +419,16 @@
   void visitClassDeclaration(ClassDeclaration node) {
     var outerClass = _enclosingClass;
     try {
+      var element = node.declaredElement as ClassElementImpl;
       _isInNativeClass = node.nativeClause != null;
-      _enclosingClass = node.declaredElement as ClassElementImpl;
+      _enclosingClass = element;
 
       List<ClassMember> members = node.members;
       _duplicateDefinitionVerifier.checkClass(node);
       _checkForBuiltInIdentifierAsName(
           node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       _checkForConflictingClassTypeVariableErrorCodes();
-      var superclass = node.extendsClause?.superclass2;
+      var superclass = node.extendsClause?.superclass;
       var implementsClause = node.implementsClause;
       var withClause = node.withClause;
 
@@ -442,11 +440,17 @@
       }
 
       _checkForConflictingClassMembers();
-      _constructorFieldsVerifier.enterClass(node);
+      _constructorFieldsVerifier.enterClass(node, element);
       _checkForFinalNotInitializedInClass(members);
       _checkForBadFunctionUse(node);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
       _checkForMainFunction(node.name);
+
+      GetterSetterTypesVerifier(
+        typeSystem: typeSystem,
+        errorReporter: errorReporter,
+      ).checkStaticAccessors(element.accessors);
+
       super.visitClassDeclaration(node);
     } finally {
       _isInNativeClass = false;
@@ -463,7 +467,7 @@
     try {
       _enclosingClass = node.declaredElement as ClassElementImpl;
       _checkClassInheritance(
-          node, node.superclass2, node.withClause, node.implementsClause);
+          node, node.superclass, node.withClause, node.implementsClause);
       _checkForMainFunction(node.name);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
     } finally {
@@ -484,9 +488,17 @@
 
   @override
   void visitCompilationUnit(CompilationUnit node) {
+    var element = node.declaredElement as CompilationUnitElement;
     _featureSet = node.featureSet;
     _duplicateDefinitionVerifier.checkUnit(node);
     _checkForDeferredPrefixCollisions(node);
+    _checkForIllegalLanguageOverride(node);
+
+    GetterSetterTypesVerifier(
+      typeSystem: typeSystem,
+      errorReporter: errorReporter,
+    ).checkStaticAccessors(element.accessors);
+
     super.visitCompilationUnit(node);
     _featureSet = null;
   }
@@ -495,6 +507,7 @@
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     var element = node.declaredElement!;
     _withEnclosingExecutable(element, () {
+      _checkForNonConstGenerativeEnumConstructor(node);
       _checkForInvalidModifierOnBody(
           node.body, CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR);
       if (!_checkForConstConstructorWithNonConstSuper(node)) {
@@ -533,6 +546,7 @@
   @override
   void visitConstructorReference(ConstructorReference node) {
     _typeArgumentsVerifier.checkConstructorReference(node);
+    _checkForInvalidGenerativeConstructorReference(node.constructorName);
   }
 
   @override
@@ -555,13 +569,44 @@
   }
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    _requiredParametersVerifier.visitEnumConstantDeclaration(node);
+    _typeArgumentsVerifier.checkEnumConstantDeclaration(node);
+    super.visitEnumConstantDeclaration(node);
+  }
+
+  @override
   void visitEnumDeclaration(EnumDeclaration node) {
     var outerClass = _enclosingClass;
     try {
-      _enclosingClass = node.declaredElement;
+      var element = node.declaredElement as EnumElementImpl;
+      _enclosingClass = element;
       _duplicateDefinitionVerifier.checkEnum(node);
+
+      _checkForBuiltInIdentifierAsName(
+          node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+      _checkForConflictingEnumTypeVariableErrorCodes(element);
+      var implementsClause = node.implementsClause;
+      var withClause = node.withClause;
+
+      if (implementsClause != null || withClause != null) {
+        _checkClassInheritance(node, null, withClause, implementsClause);
+      }
+
+      _constructorFieldsVerifier.enterEnum(node, element);
+      _checkForFinalNotInitializedInClass(node.members);
+      _checkForWrongTypeParameterVarianceInSuperinterfaces();
+      _checkForMainFunction(node.name);
+      _checkForEnumInstantiatedToBoundsIsNotWellBounded(node, element);
+
+      GetterSetterTypesVerifier(
+        typeSystem: typeSystem,
+        errorReporter: errorReporter,
+      ).checkStaticAccessors(element.accessors);
+
       super.visitEnumDeclaration(node);
     } finally {
+      _constructorFieldsVerifier.leaveClass();
       _enclosingClass = outerClass;
     }
   }
@@ -591,7 +636,8 @@
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
-    _enclosingExtension = node.declaredElement;
+    var element = node.declaredElement!;
+    _enclosingExtension = element;
     _duplicateDefinitionVerifier.checkExtension(node);
     _checkForConflictingExtensionTypeVariableErrorCodes();
     _checkForFinalNotInitializedInClass(node.members);
@@ -599,7 +645,7 @@
     GetterSetterTypesVerifier(
       typeSystem: typeSystem,
       errorReporter: errorReporter,
-    ).checkExtension(node);
+    ).checkExtension(element);
 
     final name = node.name;
     if (name != null) {
@@ -627,6 +673,7 @@
       _checkForNotInitializedNonNullableStaticField(node);
       _checkForWrongTypeParameterVarianceInField(node);
       _checkForLateFinalFieldWithConstConstructor(node);
+      _checkForNonFinalFieldInEnum(node);
       super.visitFieldDeclaration(node);
     } finally {
       _isInStaticVariableDeclaration = false;
@@ -698,13 +745,6 @@
     _withEnclosingExecutable(functionElement, () {
       SimpleIdentifier identifier = node.name;
       TypeAnnotation? returnType = node.returnType;
-      if (node.isGetter) {
-        GetterSetterTypesVerifier(
-          typeSystem: typeSystem,
-          errorReporter: errorReporter,
-        ).checkGetter(
-            node.name, node.declaredElement as PropertyAccessorElement);
-      }
       if (node.isSetter) {
         FunctionExpression functionExpression = node.functionExpression;
         _checkForWrongNumberOfParametersForSetter(
@@ -802,7 +842,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces2.forEach(_checkForImplicitDynamicType);
+    node.interfaces.forEach(_checkForImplicitDynamicType);
     super.visitImplementsClause(node);
   }
 
@@ -837,11 +877,11 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     ConstructorName constructorName = node.constructorName;
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     DartType type = namedType.typeOrThrow;
     if (type is InterfaceType) {
       _checkForConstOrNewWithAbstractClass(node, namedType, type);
-      _checkForConstOrNewWithEnum(node, namedType, type);
+      _checkForInvalidGenerativeConstructorReference(constructorName);
       _checkForConstOrNewWithMixin(node, namedType, type);
       _requiredParametersVerifier.visitInstanceCreationExpression(node);
       if (node.isConst) {
@@ -889,13 +929,6 @@
   void visitMethodDeclaration(MethodDeclaration node) {
     _withEnclosingExecutable(node.declaredElement!, () {
       var returnType = node.returnType;
-      if (node.isStatic && node.isGetter) {
-        GetterSetterTypesVerifier(
-          typeSystem: typeSystem,
-          errorReporter: errorReporter,
-        ).checkGetter(
-            node.name, node.declaredElement as PropertyAccessorElement);
-      }
       if (node.isSetter) {
         _checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
         _checkForNonVoidReturnTypeForSetter(returnType);
@@ -1124,7 +1157,10 @@
 
   @override
   void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
-    _requiredParametersVerifier.visitSuperConstructorInvocation(node);
+    _requiredParametersVerifier.visitSuperConstructorInvocation(
+      node,
+      enclosingConstructor: _enclosingExecutable.element.ifTypeOrNull(),
+    );
     _isInConstructorInitializer = true;
     try {
       super.visitSuperConstructorInvocation(node);
@@ -1298,7 +1334,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes2.forEach(_checkForImplicitDynamicType);
+    node.mixinTypes.forEach(_checkForImplicitDynamicType);
     super.visitWithClause(node);
   }
 
@@ -1318,7 +1354,7 @@
         !_checkForNoGenerativeConstructorsInSuperclass(superclass)) {
       _checkForImplicitDynamicType(superclass);
       _checkForExtendsDeferredClass(superclass);
-      _checkForRepeatedType(implementsClause?.interfaces2,
+      _checkForRepeatedType(implementsClause?.interfaces,
           CompileTimeErrorCode.IMPLEMENTS_REPEATED);
       _checkImplementsSuperClass(implementsClause);
       _checkMixinsSuperClass(withClause);
@@ -1392,9 +1428,9 @@
     bool problemReported = false;
     int mixinTypeIndex = -1;
     for (int mixinNameIndex = 0;
-        mixinNameIndex < withClause.mixinTypes2.length;
+        mixinNameIndex < withClause.mixinTypes.length;
         mixinNameIndex++) {
-      NamedType mixinName = withClause.mixinTypes2[mixinNameIndex];
+      NamedType mixinName = withClause.mixinTypes[mixinNameIndex];
       DartType mixinType = mixinName.typeOrThrow;
       if (mixinType is InterfaceType) {
         mixinTypeIndex++;
@@ -1444,7 +1480,7 @@
     if (redirectedElement == null) {
       // If the element is null, we check for the
       // REDIRECT_TO_MISSING_CONSTRUCTOR case
-      NamedType constructorNamedType = redirectedConstructor.type2;
+      NamedType constructorNamedType = redirectedConstructor.type;
       DartType redirectedType = constructorNamedType.typeOrThrow;
       if (redirectedType.element != null && !redirectedType.isDynamic) {
         // Prepare the constructor name
@@ -1624,15 +1660,15 @@
     }
 
     if (extendsClause != null) {
-      var superElement = extendsClause.superclass2.name.staticElement;
+      var superElement = extendsClause.superclass.name.staticElement;
       if (superElement != null && superElement.name == "Function") {
         errorReporter.reportErrorForNode(
-            HintCode.DEPRECATED_EXTENDS_FUNCTION, extendsClause.superclass2);
+            HintCode.DEPRECATED_EXTENDS_FUNCTION, extendsClause.superclass);
       }
     }
 
     if (implementsClause != null) {
-      for (var interface in implementsClause.interfaces2) {
+      for (var interface in implementsClause.interfaces) {
         var type = interface.type;
         if (type != null && type.isDartCoreFunction) {
           errorReporter.reportErrorForNode(
@@ -1645,7 +1681,7 @@
     }
 
     if (withClause != null) {
-      for (NamedType type in withClause.mixinTypes2) {
+      for (NamedType type in withClause.mixinTypes) {
         var mixinElement = type.name.staticElement;
         if (mixinElement != null && mixinElement.name == "Function") {
           errorReporter.reportErrorForNode(
@@ -1822,6 +1858,32 @@
     }
   }
 
+  void _checkForConflictingEnumTypeVariableErrorCodes(
+    EnumElementImpl element,
+  ) {
+    for (var typeParameter in element.typeParameters) {
+      var name = typeParameter.name;
+      // name is same as the name of the enclosing enum
+      if (element.name == name) {
+        errorReporter.reportErrorForElement(
+          CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_ENUM,
+          typeParameter,
+          [name],
+        );
+      }
+      // check members
+      if (element.getMethod(name) != null ||
+          element.getGetter(name) != null ||
+          element.getSetter(name) != null) {
+        errorReporter.reportErrorForElement(
+          CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM,
+          typeParameter,
+          [name],
+        );
+      }
+    }
+  }
+
   /// Verify all conflicts between type variable and enclosing extension.
   ///
   /// See [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_EXTENSION], and
@@ -1877,6 +1939,10 @@
   /// field initializers, and assert initializers.
   void _checkForConflictingInitializerErrorCodes(
       ConstructorDeclaration declaration) {
+    var enclosingClass = _enclosingClass;
+    if (enclosingClass == null) {
+      return;
+    }
     // Count and check each redirecting initializer.
     var redirectingInitializerCount = 0;
     var superInitializerCount = 0;
@@ -1892,7 +1958,7 @@
           RedirectingConstructorInvocation invocation = initializer;
           var redirectingElement = invocation.staticElement;
           if (redirectingElement == null) {
-            String enclosingNamedType = _enclosingClass!.displayName;
+            String enclosingNamedType = enclosingClass.displayName;
             String constructorStrName = enclosingNamedType;
             if (invocation.constructorName != null) {
               constructorStrName += ".${invocation.constructorName!.name}";
@@ -1919,7 +1985,12 @@
         );
         redirectingInitializerCount++;
       } else if (initializer is SuperConstructorInvocation) {
-        if (superInitializerCount == 1) {
+        if (enclosingClass.isEnum) {
+          errorReporter.reportErrorForToken(
+            CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR,
+            initializer.superKeyword,
+          );
+        } else if (superInitializerCount == 1) {
           // Only report the second (first illegal) superinitializer.
           errorReporter.reportErrorForNode(
               CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS, initializer);
@@ -1933,9 +2004,11 @@
     if (redirectingInitializerCount > 0) {
       for (ConstructorInitializer initializer in declaration.initializers) {
         if (initializer is SuperConstructorInvocation) {
-          errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
-              initializer);
+          if (!enclosingClass.isEnum) {
+            errorReporter.reportErrorForNode(
+                CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
+                initializer);
+          }
         }
         if (initializer is ConstructorFieldInitializer) {
           errorReporter.reportErrorForNode(
@@ -1949,10 +2022,11 @@
         }
       }
     }
-    if (redirectingInitializerCount == 0 &&
+    if (!enclosingClass.isEnum &&
+        redirectingInitializerCount == 0 &&
         superInitializerCount == 1 &&
         superInitializer != declaration.initializers.last) {
-      var superNamedType = _enclosingClass!.supertype!.element.displayName;
+      var superNamedType = enclosingClass.supertype!.element.displayName;
       var constructorStrName = superNamedType;
       var constructorName = superInitializer.constructorName;
       if (constructorName != null) {
@@ -2136,21 +2210,6 @@
     }
   }
 
-  /// Verify that the given instance creation [expression] is not being invoked
-  /// on an enum. The [namedType] is the [NamedType] of the [ConstructorName] from
-  /// the [InstanceCreationExpression], this is the AST node that the error is
-  /// attached to. The [type] is the type being constructed with this
-  /// [InstanceCreationExpression].
-  ///
-  /// See [CompileTimeErrorCode.INSTANTIATE_ENUM].
-  void _checkForConstOrNewWithEnum(InstanceCreationExpression expression,
-      NamedType namedType, InterfaceType type) {
-    if (type.element.isEnum) {
-      errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.INSTANTIATE_ENUM, namedType);
-    }
-  }
-
   /// Verify that the given [expression] is not a mixin instantiation.
   void _checkForConstOrNewWithMixin(InstanceCreationExpression expression,
       NamedType namedType, InterfaceType type) {
@@ -2411,6 +2470,25 @@
     return true;
   }
 
+  void _checkForEnumInstantiatedToBoundsIsNotWellBounded(
+    EnumDeclaration node,
+    EnumElementImpl element,
+  ) {
+    var valuesFieldType = element.valuesField?.type;
+    if (valuesFieldType is InterfaceType) {
+      var isWellBounded = typeSystem.isWellBounded(
+        valuesFieldType.typeArguments.single,
+        allowSuperBounded: true,
+      );
+      if (isWellBounded is NotWellBoundedTypeResult) {
+        errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED,
+          node.name,
+        );
+      }
+    }
+  }
+
   /// Check that if the visiting library is not system, then any given library
   /// should not be SDK internal library. The [exportElement] is the
   /// [ExportElement] retrieved from the node, if the element in the node was
@@ -2687,6 +2765,34 @@
     }
   }
 
+  void _checkForIllegalLanguageOverride(CompilationUnit node) {
+    var sourceLanguageConstraint = _options.sourceLanguageConstraint;
+    if (sourceLanguageConstraint == null) {
+      return;
+    }
+
+    var languageVersion = _currentLibrary.languageVersion.effective;
+    if (sourceLanguageConstraint.allows(languageVersion)) {
+      return;
+    }
+
+    var languageVersionToken = node.languageVersionToken;
+    if (languageVersionToken != null) {
+      errorReporter.reportErrorForToken(
+        CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE,
+        languageVersionToken,
+        ['$sourceLanguageConstraint'],
+      );
+    } else {
+      errorReporter.reportErrorForOffset(
+        CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE,
+        0,
+        0,
+        ['$sourceLanguageConstraint'],
+      );
+    }
+  }
+
   /// Verify that the given implements [clause] does not implement classes such
   /// as 'num' or 'String'.
   ///
@@ -2697,7 +2803,7 @@
       return false;
     }
     bool foundError = false;
-    for (NamedType type in clause.interfaces2) {
+    for (NamedType type in clause.interfaces) {
       if (_checkForExtendsOrImplementsDisallowedClass(
           type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)) {
         foundError = true;
@@ -2889,6 +2995,25 @@
     }
   }
 
+  void _checkForInvalidGenerativeConstructorReference(ConstructorName node) {
+    var constructorElement = node.staticElement;
+    if (constructorElement != null &&
+        constructorElement.isGenerative &&
+        constructorElement.enclosingElement.isEnum) {
+      if (_currentLibrary.featureSet.isEnabled(Feature.enhanced_enums)) {
+        errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          node,
+        );
+      } else {
+        errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.INSTANTIATE_ENUM,
+          node.type,
+        );
+      }
+    }
+  }
+
   /// Verify that if the given [identifier] is part of a constructor
   /// initializer, then it does not implicitly reference 'this' expression.
   ///
@@ -3382,7 +3507,7 @@
       return false;
     }
 
-    for (NamedType mixinType in withClause.mixinTypes2) {
+    for (NamedType mixinType in withClause.mixinTypes) {
       DartType type = mixinType.typeOrThrow;
       if (type is InterfaceType) {
         LibraryElement library = type.element.library;
@@ -3537,6 +3662,17 @@
     return false;
   }
 
+  void _checkForNonConstGenerativeEnumConstructor(ConstructorDeclaration node) {
+    if (_enclosingClass?.isEnum == true &&
+        node.constKeyword == null &&
+        node.factoryKeyword == null) {
+      errorReporter.reportErrorForName(
+        CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR,
+        node,
+      );
+    }
+  }
+
   /// Verify the given map [literal] either:
   /// * has `const modifier`
   /// * has explicit type arguments
@@ -3567,6 +3703,23 @@
         CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT, literal);
   }
 
+  void _checkForNonFinalFieldInEnum(FieldDeclaration node) {
+    if (node.isStatic) return;
+
+    var variableList = node.fields;
+    if (variableList.isFinal) return;
+
+    var enclosingClass = _enclosingClass;
+    if (enclosingClass == null || !enclosingClass.isEnum) {
+      return;
+    }
+
+    errorReporter.reportErrorForNode(
+      CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM,
+      variableList.variables.first.name,
+    );
+  }
+
   /// Verify that the given method [declaration] of operator `[]=`, has `void`
   /// return type.
   ///
@@ -3695,7 +3848,7 @@
       return false;
     }
     bool problemReported = false;
-    for (NamedType namedType in onClause.superclassConstraints2) {
+    for (NamedType namedType in onClause.superclassConstraints) {
       DartType type = namedType.typeOrThrow;
       if (type is InterfaceType) {
         if (_checkForExtendsOrImplementsDisallowedClass(
@@ -3889,6 +4042,7 @@
           redirectedConstructor,
           [constructorStrName, redirectedClass.name]);
     }
+    _checkForInvalidGenerativeConstructorReference(redirectedConstructor);
   }
 
   /// Check whether the redirecting constructor, [element], is const, and
@@ -3954,7 +4108,7 @@
   ///
   /// See [CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH].
   void _checkForRethrowOutsideCatch(RethrowExpression expression) {
-    if (!_isInCatchClause) {
+    if (_enclosingExecutable.catchClauseLevel == 0) {
       errorReporter.reportErrorForNode(
           CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH, expression);
     }
@@ -4281,22 +4435,11 @@
     );
 
     if (requiredPositionalParameterCount >
-        superParametersResult.positionalArgumentCount) {
+            superParametersResult.positionalArgumentCount ||
+        requiredNamedParameters.isNotEmpty) {
       reportError(
-        CompileTimeErrorCode
-            .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS,
-        [
-          superType,
-          requiredPositionalParameterCount,
-          superParametersResult.positionalArgumentCount,
-        ],
-      );
-    }
-    for (var requiredNamedParameterName in requiredNamedParameters) {
-      reportError(
-        CompileTimeErrorCode
-            .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT,
-        [requiredNamedParameterName, superType],
+        CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS,
+        [superType],
       );
     }
   }
@@ -4742,7 +4885,7 @@
       return;
     }
 
-    for (var interfaceNode in implementsClause.interfaces2) {
+    for (var interfaceNode in implementsClause.interfaces) {
       var type = interfaceNode.type;
       if (type is InterfaceType && type.element == superElement) {
         errorReporter.reportErrorForNode(
@@ -4764,11 +4907,11 @@
         !_checkForImplementsClauseErrorCodes(implementsClause)) {
 //      _checkForImplicitDynamicType(superclass);
       _checkForRepeatedType(
-        onClause?.superclassConstraints2,
+        onClause?.superclassConstraints,
         CompileTimeErrorCode.ON_REPEATED,
       );
       _checkForRepeatedType(
-        implementsClause?.interfaces2,
+        implementsClause?.interfaces,
         CompileTimeErrorCode.IMPLEMENTS_REPEATED,
       );
       _checkForConflictingGenerics(node);
@@ -4789,7 +4932,7 @@
       return;
     }
 
-    for (var mixinNode in withClause.mixinTypes2) {
+    for (var mixinNode in withClause.mixinTypes) {
       var type = mixinNode.type;
       if (type is InterfaceType && type.element == superElement) {
         errorReporter.reportErrorForNode(
@@ -5155,3 +5298,11 @@
     }
   }
 }
+
+extension on Object? {
+  /// If the target is [T], return it, otherwise `null`.
+  T? ifTypeOrNull<T>() {
+    final self = this;
+    return self is T ? self : null;
+  }
+}
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index 3735ddd..34d16ab 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -78,7 +78,7 @@
     // Only the Allocator, Opaque and Struct class may be extended.
     var extendsClause = node.extendsClause;
     if (extendsClause != null) {
-      final NamedType superclass = extendsClause.superclass2;
+      final NamedType superclass = extendsClause.superclass;
       final ffiClass = superclass.ffiClass;
       if (ffiClass != null) {
         final className = ffiClass.name;
@@ -133,14 +133,14 @@
 
     var implementsClause = node.implementsClause;
     if (implementsClause != null) {
-      for (NamedType type in implementsClause.interfaces2) {
+      for (NamedType type in implementsClause.interfaces) {
         checkSupertype(type, FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS,
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS);
       }
     }
     var withClause = node.withClause;
     if (withClause != null) {
-      for (NamedType type in withClause.mixinTypes2) {
+      for (NamedType type in withClause.mixinTypes) {
         checkSupertype(type, FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH,
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH);
       }
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 9ffdfb3..1d7b7a3 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -30,17 +30,20 @@
   final AstBuilder astBuilder;
 
   Parser(Source source, AnalysisErrorListener errorListener,
-      {required FeatureSet featureSet, bool allowNativeClause = true})
+      {required FeatureSet featureSet,
+      bool allowNativeClause = true,
+      required LineInfo lineInfo})
       : astBuilder = AstBuilder(
-            ErrorReporter(
-              errorListener,
-              source,
-              isNonNullableByDefault:
-                  featureSet.isEnabled(Feature.non_nullable),
-            ),
-            source.uri,
-            true,
-            featureSet) {
+          ErrorReporter(
+            errorListener,
+            source,
+            isNonNullableByDefault: featureSet.isEnabled(Feature.non_nullable),
+          ),
+          source.uri,
+          true,
+          featureSet,
+          lineInfo,
+        ) {
     fastaParser = fasta.Parser(astBuilder);
     astBuilder.parser = fastaParser;
     astBuilder.allowNativeClause = allowNativeClause;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 5820062..92f03a7 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.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/dart/element/nullability_suffix.dart';
@@ -42,6 +43,7 @@
 import 'package:analyzer/src/dart/resolver/function_reference_resolver.dart';
 import 'package:analyzer/src/dart/resolver/instance_creation_expression_resolver.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
+import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
 import 'package:analyzer/src/dart/resolver/lexical_lookup.dart';
 import 'package:analyzer/src/dart/resolver/method_invocation_resolver.dart';
 import 'package:analyzer/src/dart/resolver/postfix_expression_resolver.dart';
@@ -69,6 +71,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/static_type_analyzer.dart';
 import 'package:analyzer/src/generated/this_access_tracker.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/generated/variable_type_provider.dart';
 import 'package:analyzer/src/util/ast_data_extractor.dart';
 import 'package:meta/meta.dart';
@@ -80,11 +83,6 @@
 /// Maintains and manages contextual type information used for
 /// inferring types.
 class InferenceContext {
-  // TODO(leafp): Consider replacing these node properties with a
-  // hash table help in an instance of this class.
-  static const String _typeProperty =
-      'analyzer.src.generated.InferenceContext.contextType';
-
   final ResolverVisitor _resolver;
 
   /// The type system in use.
@@ -105,20 +103,17 @@
     }
   }
 
-  void popFunctionBodyContext(FunctionBody node) {
+  DartType popFunctionBodyContext(FunctionBody node) {
     var context = _bodyContexts.removeLast();
 
     var flow = _resolver.flowAnalysis.flow;
 
-    var resultType = context.computeInferredReturnType(
+    return context.computeInferredReturnType(
       endOfBlockIsReachable: flow == null || flow.isReachable,
     );
-
-    setType(node, resultType);
   }
 
-  void pushFunctionBodyContext(FunctionBody node) {
-    var imposedType = getContext(node);
+  void pushFunctionBodyContext(FunctionBody node, DartType? imposedType) {
     _bodyContexts.add(
       BodyInferenceContext(
         typeSystem: _typeSystem,
@@ -127,38 +122,6 @@
       ),
     );
   }
-
-  /// Clear the type information associated with [node].
-  static void clearType(AstNode? node) {
-    node?.setProperty(_typeProperty, null);
-  }
-
-  /// Look for contextual type information attached to [node], and returns
-  /// the type if found.
-  ///
-  /// The returned type may be partially or completely unknown, denoted with an
-  /// unknown type `_`, for example `List<_>` or `(_, int) -> void`.
-  /// You can use [TypeSystemImpl.upperBoundForType] or
-  /// [TypeSystemImpl.lowerBoundForType] if you would prefer a known type
-  /// that represents the bound of the context type.
-  static DartType? getContext(AstNode? node) =>
-      node?.getProperty(_typeProperty);
-
-  /// Attach contextual type information [type] to [node] for use during
-  /// inference.
-  static void setType(AstNode? node, DartType? type) {
-    if (type == null || type.isDynamic) {
-      clearType(node);
-    } else {
-      node?.setProperty(_typeProperty, type);
-    }
-  }
-
-  /// Attach contextual type information [type] to [node] for use during
-  /// inference.
-  static void setTypeFromNode(AstNode innerNode, AstNode outerNode) {
-    setType(innerNode, getContext(outerNode));
-  }
 }
 
 /// Instances of the class `ResolverVisitor` are used to resolve the nodes
@@ -286,6 +249,8 @@
 
   late final AnnotationResolver _annotationResolver = AnnotationResolver(this);
 
+  final bool genericMetadataIsEnabled;
+
   /// Initialize a newly created visitor to resolve the nodes in an AST node.
   ///
   /// The [definingLibrary] is the element for the library containing the node
@@ -338,7 +303,9 @@
           isNonNullableByDefault: definingLibrary.isNonNullableByDefault,
         ),
         _featureSet = featureSet,
-        migrationResolutionHooks = migrationResolutionHooks {
+        migrationResolutionHooks = migrationResolutionHooks,
+        genericMetadataIsEnabled =
+            definingLibrary.featureSet.isEnabled(Feature.generic_metadata) {
     var analysisOptions =
         definingLibrary.context.analysisOptions as AnalysisOptionsImpl;
 
@@ -441,19 +408,19 @@
   bool get _isNonNullableByDefault =>
       _featureSet.isEnabled(Feature.non_nullable);
 
+  void analyzeExpression(Expression expression, DartType? contextType) {
+    if (contextType != null && contextType.isDynamic) {
+      contextType = null;
+    }
+    (expression as ExpressionImpl).resolveExpression(this, contextType);
+  }
+
   /// Verify that the arguments in the given [argumentList] can be assigned to
   /// their corresponding parameters.
   ///
   /// See [CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE].
   void checkForArgumentTypesNotAssignableInList(ArgumentList argumentList,
       List<WhyNotPromotedGetter> whyNotPromotedList) {
-    for (var argument in argumentList.arguments) {
-      if (argument is NamedExpression) {
-        insertImplicitCallReference(argument.expression);
-      } else {
-        insertImplicitCallReference(argument);
-      }
-    }
     var arguments = argumentList.arguments;
     for (int i = 0; i < arguments.length; i++) {
       checkForArgumentTypeNotAssignableForArgument(arguments[i],
@@ -664,7 +631,8 @@
   ///
   /// If an [FunctionReference] is inserted, returns it; otherwise, returns
   /// [expression].
-  ExpressionImpl insertGenericFunctionInstantiation(Expression expression) {
+  ExpressionImpl insertGenericFunctionInstantiation(Expression expression,
+      {required DartType? contextType}) {
     expression as ExpressionImpl;
     if (!isConstructorTearoffsEnabled) {
       // Temporarily, only create [ImplicitCallReference] nodes under the
@@ -675,7 +643,7 @@
     }
 
     var staticType = expression.staticType;
-    var context = InferenceContext.getContext(expression);
+    var context = contextType;
     if (context == null ||
         staticType is! FunctionType ||
         staticType.typeFormals.isEmpty) {
@@ -715,70 +683,6 @@
     return genericFunctionInstantiation;
   }
 
-  /// If `expression` should be treated as `expression.call`, inserts an
-  /// [ImplicitCallReferece] node which wraps [expression].
-  ///
-  /// If an [ImplicitCallReferece] is inserted, returns it; otherwise, returns
-  /// [expression].
-  ExpressionImpl insertImplicitCallReference(Expression expression) {
-    expression as ExpressionImpl;
-    if (!isConstructorTearoffsEnabled) {
-      // Temporarily, only create [ImplicitCallReference] nodes under the
-      // 'constructor-tearoffs' feature.
-      // TODO(srawlins): When we are ready to make a breaking change release to
-      // the analyzer package, remove this exception.
-      return expression;
-    }
-
-    var parent = expression.parent;
-    if (parent is CascadeExpression && parent.target == expression) {
-      // Do not perform an "implicit tear-off conversion" here. It should only
-      // be performed on [parent]. See
-      // https://github.com/dart-lang/language/issues/1873.
-      return expression;
-    }
-    var context = InferenceContext.getContext(expression);
-    var callMethod =
-        getImplicitCallMethod(expression.typeOrThrow, context, expression);
-    if (callMethod == null || context == null) {
-      return expression;
-    }
-
-    // `expression` is to be treated as `expression.call`.
-    context = typeSystem.flatten(context);
-    var callMethodType = callMethod.type;
-    List<DartType> typeArgumentTypes;
-    if (isConstructorTearoffsEnabled &&
-        callMethodType.typeFormals.isNotEmpty &&
-        context is FunctionType) {
-      typeArgumentTypes = typeSystem.inferFunctionTypeInstantiation(
-        context,
-        callMethodType,
-        errorReporter: errorReporter,
-        errorNode: expression,
-        // If the constructor-tearoffs feature is enabled, then so is
-        // generic-metadata.
-        genericMetadataIsEnabled: true,
-      )!;
-      if (typeArgumentTypes.isNotEmpty) {
-        callMethodType = callMethodType.instantiate(typeArgumentTypes);
-      }
-    } else {
-      typeArgumentTypes = [];
-    }
-    var callReference = astFactory.implicitCallReference(
-      expression: expression,
-      staticElement: callMethod,
-      typeArguments: null,
-      typeArgumentTypes: typeArgumentTypes,
-    );
-    NodeReplacer.replace(expression, callReference, parent: parent);
-
-    callReference.staticType = callMethodType;
-
-    return callReference;
-  }
-
   /// If we reached a null-shorting termination, and the [node] has null
   /// shorting, make the type of the [node] nullable.
   void nullShortingTermination(ExpressionImpl node,
@@ -875,8 +779,7 @@
         hasWrite: true,
       );
 
-      InferenceContext.setType(node.index, result.indexContextType);
-      node.index.accept(this);
+      analyzeExpression(node.index, result.indexContextType);
       var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(node.index);
       checkIndexExpressionIndex(
         node.index,
@@ -1059,10 +962,11 @@
   }
 
   @override
-  void visitAdjacentStrings(AdjacentStrings node) {
+  void visitAdjacentStrings(AdjacentStrings node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitAdjacentStrings(node as AdjacentStringsImpl);
+    typeAnalyzer.visitAdjacentStrings(node as AdjacentStringsImpl,
+        contextType: contextType);
   }
 
   @override
@@ -1076,97 +980,21 @@
   }
 
   @override
-  void visitArgumentList(ArgumentList node,
-      {bool isIdentical = false,
-      List<WhyNotPromotedGetter>? whyNotPromotedList}) {
-    whyNotPromotedList ??= [];
-    var callerType = InferenceContext.getContext(node);
-    NodeList<Expression> arguments = node.arguments;
-    if (callerType is FunctionType) {
-      var parameters = callerType.parameters;
-
-      var namedParameters = <String, ParameterElement>{};
-      for (var i = 0; i < parameters.length; i++) {
-        var parameter = parameters[i];
-        if (parameter.isNamed) {
-          namedParameters[parameter.name] = parameter;
-        }
-      }
-
-      var parent = node.parent;
-      DartType? targetType;
-      Element? methodElement;
-      DartType? invocationContext;
-      if (parent is MethodInvocation) {
-        targetType = parent.realTarget?.staticType;
-        methodElement = parent.methodName.staticElement;
-        invocationContext = InferenceContext.getContext(parent);
-      }
-
-      //TODO(leafp): Consider using the parameter elements here instead.
-      //TODO(leafp): Make sure that the parameter elements are getting
-      // setup correctly with inference.
-      var positionalParameterIndex = 0;
-      for (var i = 0; i < arguments.length; i++) {
-        var argument = arguments[i];
-        ParameterElement? parameter;
-        if (argument is NamedExpression) {
-          parameter = namedParameters[argument.name.label.name];
-        } else {
-          while (positionalParameterIndex < parameters.length) {
-            parameter = parameters[positionalParameterIndex++];
-            if (!parameter.isNamed) {
-              break;
-            }
-          }
-        }
-        if (parameter != null) {
-          var parameterType = parameter.type;
-          if (targetType != null) {
-            InferenceContext.setType(
-                argument,
-                typeSystem.refineNumericInvocationContext(targetType,
-                    methodElement, invocationContext, parameterType));
-          } else {
-            InferenceContext.setType(argument, parameterType);
-          }
-        }
-      }
-    }
-    checkUnreachableNode(node);
-    int length = arguments.length;
-    var flow = flowAnalysis.flow;
-    for (var i = 0; i < length; i++) {
-      if (isIdentical && length > 1 && i == 1) {
-        var firstArg = arguments[0];
-        flow?.equalityOp_rightBegin(firstArg, firstArg.typeOrThrow);
-      }
-      arguments[i].accept(this);
-      if (flow != null) {
-        whyNotPromotedList.add(flow.whyNotPromoted(arguments[i]));
-      }
-    }
-    if (isIdentical && length > 1) {
-      var secondArg = arguments[1];
-      flow?.equalityOp_end(
-          node.parent as Expression, secondArg, secondArg.typeOrThrow);
-    }
-  }
-
-  @override
-  void visitAsExpression(AsExpression node) {
+  void visitAsExpression(AsExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitAsExpression(node as AsExpressionImpl);
+    typeAnalyzer.visitAsExpression(node as AsExpressionImpl,
+        contextType: contextType);
     flowAnalysis.asExpression(node);
-    insertGenericFunctionInstantiation(node);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
   void visitAssertInitializer(AssertInitializer node) {
-    InferenceContext.setType(node.condition, typeProvider.boolType);
     flowAnalysis.flow?.assert_begin();
-    node.condition.accept(this);
+    analyzeExpression(node.condition, typeProvider.boolType);
     boolExpressionVerifier.checkForNonBoolExpression(
       node.condition,
       errorCode: CompileTimeErrorCode.NON_BOOL_EXPRESSION,
@@ -1179,9 +1007,8 @@
 
   @override
   void visitAssertStatement(AssertStatement node) {
-    InferenceContext.setType(node.condition, typeProvider.boolType);
     flowAnalysis.flow?.assert_begin();
-    node.condition.accept(this);
+    analyzeExpression(node.condition, typeProvider.boolType);
     boolExpressionVerifier.checkForNonBoolExpression(
       node.condition,
       errorCode: CompileTimeErrorCode.NON_BOOL_EXPRESSION,
@@ -1193,33 +1020,41 @@
   }
 
   @override
-  void visitAssignmentExpression(AssignmentExpression node) {
-    _assignmentExpressionResolver.resolve(node as AssignmentExpressionImpl);
-    insertGenericFunctionInstantiation(node);
+  void visitAssignmentExpression(AssignmentExpression node,
+      {DartType? contextType}) {
+    _assignmentExpressionResolver.resolve(node as AssignmentExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
-  void visitAwaitExpression(AwaitExpression node) {
-    var contextType = InferenceContext.getContext(node);
+  void visitAwaitExpression(AwaitExpression node, {DartType? contextType}) {
+    DartType? futureUnion;
     if (contextType != null) {
-      var futureUnion = _createFutureOr(contextType);
-      InferenceContext.setType(node.expression, futureUnion);
+      futureUnion = _createFutureOr(contextType);
     }
     checkUnreachableNode(node);
-    node.visitChildren(this);
-    typeAnalyzer.visitAwaitExpression(node as AwaitExpressionImpl);
-    insertGenericFunctionInstantiation(node);
+    analyzeExpression(node.expression, futureUnion);
+    typeAnalyzer.visitAwaitExpression(node as AwaitExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
-  void visitBinaryExpression(BinaryExpression node) {
+  void visitBinaryExpression(BinaryExpression node, {DartType? contextType}) {
     var migrationResolutionHooks = this.migrationResolutionHooks;
     if (migrationResolutionHooks != null) {
-      migrationResolutionHooks.reportBinaryExpressionContext(
-          node, InferenceContext.getContext(node));
+      migrationResolutionHooks.reportBinaryExpressionContext(node, contextType);
     }
-    _binaryExpressionResolver.resolve(node as BinaryExpressionImpl);
-    insertGenericFunctionInstantiation(node);
+    _binaryExpressionResolver.resolve(node as BinaryExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
@@ -1229,24 +1064,27 @@
   }
 
   @override
-  void visitBlockFunctionBody(BlockFunctionBody node) {
+  DartType visitBlockFunctionBody(BlockFunctionBody node,
+      {DartType? imposedType}) {
     try {
-      inferenceContext.pushFunctionBodyContext(node);
+      inferenceContext.pushFunctionBodyContext(node, imposedType);
       _thisAccessTracker.enterFunctionBody(node);
       checkUnreachableNode(node);
       node.visitChildren(this);
     } finally {
       _thisAccessTracker.exitFunctionBody(node);
-      inferenceContext.popFunctionBodyContext(node);
+      imposedType = inferenceContext.popFunctionBodyContext(node);
     }
+    return imposedType;
   }
 
   @override
-  void visitBooleanLiteral(BooleanLiteral node) {
+  void visitBooleanLiteral(BooleanLiteral node, {DartType? contextType}) {
     flowAnalysis.flow?.booleanLiteral(node, node.value);
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitBooleanLiteral(node as BooleanLiteralImpl);
+    typeAnalyzer.visitBooleanLiteral(node as BooleanLiteralImpl,
+        contextType: contextType);
   }
 
   @override
@@ -1260,9 +1098,9 @@
   }
 
   @override
-  void visitCascadeExpression(covariant CascadeExpressionImpl node) {
-    InferenceContext.setTypeFromNode(node.target, node);
-    node.target.accept(this);
+  void visitCascadeExpression(covariant CascadeExpressionImpl node,
+      {DartType? contextType}) {
+    analyzeExpression(node.target, contextType);
 
     if (node.isNullAware) {
       flowAnalysis.flow!.nullAwareAccess_rightBegin(
@@ -1272,9 +1110,10 @@
 
     node.cascadeSections.accept(this);
 
-    typeAnalyzer.visitCascadeExpression(node);
+    typeAnalyzer.visitCascadeExpression(node, contextType: contextType);
 
     nullShortingTermination(node);
+    _insertImplicitCallReference(node, contextType: contextType);
   }
 
   @override
@@ -1336,43 +1175,42 @@
   }
 
   @override
-  void visitConditionalExpression(ConditionalExpression node) {
+  void visitConditionalExpression(ConditionalExpression node,
+      {DartType? contextType}) {
     Expression condition = node.condition;
     var flow = flowAnalysis.flow;
     flow?.conditional_conditionBegin();
 
     // TODO(scheglov) Do we need these checks for null?
-    InferenceContext.setType(node.condition, typeProvider.boolType);
-    condition.accept(this);
+    analyzeExpression(node.condition, typeProvider.boolType);
     condition = node.condition;
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
     boolExpressionVerifier.checkForNonBoolCondition(condition,
         whyNotPromoted: whyNotPromoted);
 
-    InferenceContext.setTypeFromNode(node.thenExpression, node);
-
     if (flow != null) {
       flow.conditional_thenBegin(condition, node);
       checkUnreachableNode(node.thenExpression);
     }
-    node.thenExpression.accept(this);
+    analyzeExpression(node.thenExpression, contextType);
     nullSafetyDeadCodeVerifier.flowEnd(node.thenExpression);
 
     Expression elseExpression = node.elseExpression;
-    InferenceContext.setTypeFromNode(elseExpression, node);
 
     if (flow != null) {
       flow.conditional_elseBegin(node.thenExpression);
       checkUnreachableNode(elseExpression);
-      elseExpression.accept(this);
+      analyzeExpression(elseExpression, contextType);
       flow.conditional_end(node, elseExpression);
       nullSafetyDeadCodeVerifier.flowEnd(elseExpression);
     } else {
-      elseExpression.accept(this);
+      analyzeExpression(elseExpression, contextType);
     }
     elseExpression = node.elseExpression;
 
-    typeAnalyzer.visitConditionalExpression(node as ConditionalExpressionImpl);
+    typeAnalyzer.visitConditionalExpression(node as ConditionalExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(node, contextType: contextType);
   }
 
   @override
@@ -1382,12 +1220,11 @@
   }
 
   @override
-  void visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(covariant ConstructorDeclarationImpl node) {
     flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
     flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
 
     var returnType = node.declaredElement!.type.returnType;
-    InferenceContext.setType(node.body, returnType);
 
     var outerFunction = _enclosingFunction;
     try {
@@ -1395,7 +1232,14 @@
       assert(_thisType == null);
       _setupThisType();
       checkUnreachableNode(node);
-      node.visitChildren(this);
+      node.documentationComment?.accept(this);
+      node.metadata.accept(this);
+      node.returnType.accept(this);
+      node.name?.accept(this);
+      node.parameters.accept(this);
+      node.initializers.accept(this);
+      node.redirectedConstructor?.accept(this);
+      node.body.resolve(this, returnType.isDynamic ? null : returnType);
       elementResolver.visitConstructorDeclaration(node);
     } finally {
       _enclosingFunction = outerFunction;
@@ -1422,20 +1266,12 @@
     var fieldElement = enclosingClass!.getField(node.fieldName.name);
     var fieldType = fieldElement?.type;
     var expression = node.expression;
-    InferenceContext.setType(expression, fieldType);
-    expression.accept(this);
+    analyzeExpression(expression, fieldType);
     expression = node.expression;
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(expression);
     elementResolver.visitConstructorFieldInitializer(
         node as ConstructorFieldInitializerImpl);
     if (fieldElement != null) {
-      if (fieldType != null && expression.staticType != null) {
-        var callReference = insertImplicitCallReference(expression);
-        if (expression != callReference) {
-          checkForInvalidAssignment(node.fieldName, callReference,
-              whyNotPromoted: whyNotPromoted);
-        }
-      }
       var enclosingConstructor = enclosingFunction as ConstructorElement;
       checkForFieldInitializerNotAssignable(node, fieldElement,
           isConstConstructor: enclosingConstructor.isConst,
@@ -1445,13 +1281,15 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    node.type2.accept(this);
+    node.type.accept(this);
     elementResolver.visitConstructorName(node as ConstructorNameImpl);
   }
 
   @override
-  void visitConstructorReference(covariant ConstructorReferenceImpl node) {
-    _constructorReferenceResolver.resolve(node);
+  void visitConstructorReference(covariant ConstructorReferenceImpl node,
+      {DartType? contextType}) {
+    _constructorReferenceResolver.resolve(node, contextType: contextType);
+    _insertImplicitCallReference(node, contextType: contextType);
   }
 
   @override
@@ -1479,13 +1317,16 @@
 
   @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
-    InferenceContext.setType(node.defaultValue, node.declaredElement?.type);
     checkUnreachableNode(node);
-    node.visitChildren(this);
+    node.parameter.accept(this);
+    var defaultValue = node.defaultValue;
+    if (defaultValue != null) {
+      analyzeExpression(defaultValue, node.declaredElement?.type);
+    }
     ParameterElement element = node.declaredElement!;
 
     if (element is DefaultParameterElementImpl && node.isOfLocalFunction) {
-      element.constantInitializer = node.defaultValue;
+      element.constantInitializer = defaultValue;
     }
   }
 
@@ -1499,8 +1340,7 @@
     node.body.accept(this);
 
     flowAnalysis.flow?.doStatement_conditionBegin();
-    InferenceContext.setType(condition, typeProvider.boolType);
-    condition.accept(this);
+    analyzeExpression(condition, typeProvider.boolType);
     condition = node.condition;
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
     boolExpressionVerifier.checkForNonBoolCondition(condition,
@@ -1510,19 +1350,21 @@
   }
 
   @override
-  void visitDoubleLiteral(DoubleLiteral node) {
+  void visitDoubleLiteral(DoubleLiteral node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitDoubleLiteral(node as DoubleLiteralImpl);
+    typeAnalyzer.visitDoubleLiteral(node as DoubleLiteralImpl,
+        contextType: contextType);
   }
 
   @override
-  void visitEmptyFunctionBody(EmptyFunctionBody node) {
-    if (resolveOnlyCommentInFunctionBody) {
-      return;
+  DartType visitEmptyFunctionBody(EmptyFunctionBody node,
+      {DartType? imposedType}) {
+    if (!resolveOnlyCommentInFunctionBody) {
+      checkUnreachableNode(node);
+      node.visitChildren(this);
     }
-    checkUnreachableNode(node);
-    node.visitChildren(this);
+    return imposedType ?? typeProvider.dynamicType;
   }
 
   @override
@@ -1548,27 +1390,66 @@
     var element = node.declaredElement as ConstFieldElementImpl;
     var initializer = element.constantInitializer;
     if (initializer is InstanceCreationExpression) {
-      var constructor = initializer.constructorName.staticElement;
-      node.constructorElement = constructor;
-      var arguments = node.arguments;
-      if (arguments != null) {
-        var argumentList = arguments.argumentList;
-        if (constructor != null) {
-          InferenceContext.setType(argumentList, constructor.type);
+      var constructorName = initializer.constructorName;
+      var constructorElement = constructorName.staticElement;
+      if (constructorElement != null) {
+        node.constructorElement = constructorElement;
+        if (!constructorElement.isConst && constructorElement.isFactory) {
+          errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR,
+            node.arguments?.constructorSelector?.name ?? node.name,
+          );
+        }
+      } else {
+        var typeName = constructorName.type.name;
+        if (typeName.staticElement is EnumElementImpl) {
+          var nameNode = node.arguments?.constructorSelector?.name;
+          if (nameNode != null) {
+            errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED,
+              nameNode,
+              [nameNode.name],
+            );
+          } else {
+            errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED,
+              node.name,
+            );
+          }
+        }
+      }
+      if (constructorElement != null) {
+        var arguments = node.arguments;
+        if (arguments != null) {
+          var argumentList = arguments.argumentList;
           argumentList.correspondingStaticParameters =
               ResolverVisitor.resolveArgumentsToParameters(
             argumentList: argumentList,
-            parameters: constructor.parameters,
+            parameters: constructorElement.parameters,
+            errorReporter: errorReporter,
           );
           for (var argument in argumentList.arguments) {
-            var parameter = argument.staticParameterElement;
-            if (parameter != null) {
-              InferenceContext.setType(argument, parameter.type);
-            }
-            argument.accept(this);
+            analyzeExpression(argument, argument.staticParameterElement?.type);
+          }
+          arguments.typeArguments?.accept(this);
+
+          var whyNotPromotedList =
+              <Map<DartType, NonPromotionReason> Function()>[];
+          checkForArgumentTypesNotAssignableInList(
+              argumentList, whyNotPromotedList);
+        } else if (definingLibrary.featureSet
+            .isEnabled(Feature.enhanced_enums)) {
+          var requiredParameterCount = constructorElement.parameters
+              .where((e) => e.isRequiredPositional)
+              .length;
+          if (requiredParameterCount != 0) {
+            errorReporter.reportErrorForNode(
+              CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS,
+              node.name,
+              [requiredParameterCount, 0],
+            );
           }
         }
-        arguments.typeArguments?.accept(this);
       }
     }
 
@@ -1599,30 +1480,30 @@
   }
 
   @override
-  void visitExpressionFunctionBody(ExpressionFunctionBody node) {
+  DartType visitExpressionFunctionBody(ExpressionFunctionBody node,
+      {DartType? imposedType}) {
     if (resolveOnlyCommentInFunctionBody) {
-      return;
+      return imposedType ?? typeProvider.dynamicType;
     }
 
     try {
-      inferenceContext.pushFunctionBodyContext(node);
-      InferenceContext.setType(
-        node.expression,
-        inferenceContext.bodyContext!.contextType,
-      );
+      inferenceContext.pushFunctionBodyContext(node, imposedType);
       _thisAccessTracker.enterFunctionBody(node);
 
       checkUnreachableNode(node);
-      node.visitChildren(this);
-      insertImplicitCallReference(node.expression);
+      analyzeExpression(
+        node.expression,
+        inferenceContext.bodyContext!.contextType,
+      );
 
       flowAnalysis.flow?.handleExit();
 
       inferenceContext.bodyContext!.addReturnExpression(node.expression);
     } finally {
       _thisAccessTracker.exitFunctionBody(node);
-      inferenceContext.popFunctionBodyContext(node);
+      imposedType = inferenceContext.popFunctionBodyContext(node);
     }
+    return imposedType;
   }
 
   @override
@@ -1651,13 +1532,28 @@
   }
 
   @override
-  void visitExtensionOverride(ExtensionOverride node) {
+  void visitExtensionOverride(covariant ExtensionOverrideImpl node,
+      {DartType? contextType}) {
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     node.extensionName.accept(this);
     node.typeArguments?.accept(this);
 
-    ExtensionMemberResolver(this).setOverrideReceiverContextType(node);
-    visitArgumentList(node.argumentList,
+    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);
 
     extensionResolver.resolveOverride(node, whyNotPromotedList);
@@ -1686,8 +1582,8 @@
   }
 
   @override
-  void visitForElement(ForElement node) {
-    _forResolver.resolveElement(node as ForElementImpl);
+  void visitForElement(ForElement node, {CollectionLiteralContext? context}) {
+    _forResolver.resolveElement(node as ForElementImpl, context);
   }
 
   @override
@@ -1719,13 +1615,16 @@
     );
 
     var functionType = node.declaredElement!.type;
-    InferenceContext.setType(node.functionExpression, functionType);
 
     var outerFunction = _enclosingFunction;
     try {
       _enclosingFunction = node.declaredElement;
       checkUnreachableNode(node);
-      node.visitChildren(this);
+      node.documentationComment?.accept(this);
+      node.metadata.accept(this);
+      node.returnType?.accept(this);
+      node.name.accept(this);
+      analyzeExpression(node.functionExpression, functionType);
       elementResolver.visitFunctionDeclaration(node);
     } finally {
       _enclosingFunction = outerFunction;
@@ -1756,30 +1655,35 @@
   }
 
   @override
-  void visitFunctionExpression(covariant FunctionExpressionImpl node) {
+  void visitFunctionExpression(covariant FunctionExpressionImpl node,
+      {DartType? contextType}) {
     var outerFunction = _enclosingFunction;
     _enclosingFunction = node.declaredElement;
 
-    _functionExpressionResolver.resolve(node);
-    insertGenericFunctionInstantiation(node);
+    _functionExpressionResolver.resolve(node, contextType: contextType);
+    insertGenericFunctionInstantiation(node, contextType: contextType);
 
     _enclosingFunction = outerFunction;
   }
 
   @override
-  void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
+  void visitFunctionExpressionInvocation(FunctionExpressionInvocation node,
+      {DartType? contextType}) {
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     node.function.accept(this);
     _functionExpressionInvocationResolver.resolve(
-        node as FunctionExpressionInvocationImpl, whyNotPromotedList);
+        node as FunctionExpressionInvocationImpl, whyNotPromotedList,
+        contextType: contextType);
     nullShortingTermination(node);
-    insertGenericFunctionInstantiation(node);
+    var replacement =
+        insertGenericFunctionInstantiation(node, contextType: contextType);
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
+    _insertImplicitCallReference(replacement, contextType: contextType);
   }
 
   @override
-  void visitFunctionReference(FunctionReference node) {
+  void visitFunctionReference(FunctionReference node, {DartType? contextType}) {
     _functionReferenceResolver.resolve(node as FunctionReferenceImpl);
   }
 
@@ -1814,11 +1718,10 @@
   void visitHideCombinator(HideCombinator node) {}
 
   @override
-  void visitIfElement(IfElement node) {
+  void visitIfElement(IfElement node, {CollectionLiteralContext? context}) {
     flowAnalysis.flow?.ifStatement_conditionBegin();
     Expression condition = node.condition;
-    InferenceContext.setType(condition, typeProvider.boolType);
-    condition.accept(this);
+    analyzeExpression(condition, typeProvider.boolType);
     condition = node.condition;
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
 
@@ -1826,13 +1729,13 @@
         whyNotPromoted: whyNotPromoted);
 
     flowAnalysis.flow?.ifStatement_thenBegin(condition, node);
-    node.thenElement.accept(this);
+    (node.thenElement as CollectionElementImpl).resolveElement(this, context);
     nullSafetyDeadCodeVerifier.flowEnd(node.thenElement);
 
     var elseElement = node.elseElement;
     if (elseElement != null) {
       flowAnalysis.flow?.ifStatement_elseBegin();
-      elseElement.accept(this);
+      (elseElement as CollectionElementImpl).resolveElement(this, context);
       nullSafetyDeadCodeVerifier.flowEnd(elseElement);
     }
 
@@ -1846,8 +1749,7 @@
 
     Expression condition = node.condition;
 
-    InferenceContext.setType(condition, typeProvider.boolType);
-    condition.accept(this);
+    analyzeExpression(condition, typeProvider.boolType);
     condition = node.condition;
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
 
@@ -1875,9 +1777,11 @@
   }
 
   @override
-  void visitImplicitCallReference(ImplicitCallReference node) {
+  void visitImplicitCallReference(ImplicitCallReference node,
+      {DartType? contextType}) {
     checkUnreachableNode(node);
-    node.visitChildren(this);
+    analyzeExpression(node.expression, null);
+    node.typeArguments?.accept(this);
   }
 
   @override
@@ -1888,7 +1792,8 @@
   }
 
   @override
-  void visitIndexExpression(covariant IndexExpressionImpl node) {
+  void visitIndexExpression(covariant IndexExpressionImpl node,
+      {DartType? contextType}) {
     node.target?.accept(this);
     startNullAwareIndexExpression(node);
 
@@ -1901,8 +1806,7 @@
     var element = result.readElement;
     node.staticElement = element as MethodElement?;
 
-    InferenceContext.setType(node.index, result.indexContextType);
-    node.index.accept(this);
+    analyzeExpression(node.index, result.indexContextType);
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(node.index);
     checkIndexExpressionIndex(
       node.index,
@@ -1919,23 +1823,28 @@
     } else {
       type = DynamicTypeImpl.instance;
     }
-    inferenceHelper.recordStaticType(node, type);
-    insertGenericFunctionInstantiation(node);
+    inferenceHelper.recordStaticType(node, type, contextType: contextType);
+    var replacement =
+        insertGenericFunctionInstantiation(node, contextType: contextType);
 
     nullShortingTermination(node);
+    _insertImplicitCallReference(replacement, contextType: contextType);
   }
 
   @override
   void visitInstanceCreationExpression(
-      covariant InstanceCreationExpressionImpl node) {
-    _instanceCreationExpressionResolver.resolve(node);
+      covariant InstanceCreationExpressionImpl node,
+      {DartType? contextType}) {
+    _instanceCreationExpressionResolver.resolve(node, contextType: contextType);
+    _insertImplicitCallReference(node, contextType: contextType);
   }
 
   @override
-  void visitIntegerLiteral(IntegerLiteral node) {
+  void visitIntegerLiteral(IntegerLiteral node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitIntegerLiteral(node);
+    typeAnalyzer.visitIntegerLiteral(node as IntegerLiteralImpl,
+        contextType: contextType);
   }
 
   @override
@@ -1951,10 +1860,11 @@
   }
 
   @override
-  void visitIsExpression(IsExpression node) {
+  void visitIsExpression(IsExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitIsExpression(node as IsExpressionImpl);
+    typeAnalyzer.visitIsExpression(node as IsExpressionImpl,
+        contextType: contextType);
     flowAnalysis.isExpression(node);
   }
 
@@ -1977,27 +1887,30 @@
   }
 
   @override
-  void visitLibraryIdentifier(LibraryIdentifier node) {}
+  void visitLibraryIdentifier(LibraryIdentifier node,
+      {DartType? contextType}) {}
 
   @override
-  void visitListLiteral(covariant ListLiteralImpl node) {
+  void visitListLiteral(covariant ListLiteralImpl node,
+      {DartType? contextType}) {
     checkUnreachableNode(node);
-    _typedLiteralResolver.resolveListLiteral(node);
+    _typedLiteralResolver.resolveListLiteral(node, contextType: contextType);
   }
 
   @override
-  void visitMapLiteralEntry(MapLiteralEntry node) {
+  void visitMapLiteralEntry(MapLiteralEntry node,
+      {CollectionLiteralContext? context}) {
     checkUnreachableNode(node);
-    node.visitChildren(this);
+    analyzeExpression(node.key, context?.keyType);
+    analyzeExpression(node.value, context?.valueType);
   }
 
   @override
-  void visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
     flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
     flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
 
     DartType returnType = node.declaredElement!.returnType;
-    InferenceContext.setType(node.body, returnType);
 
     var outerFunction = _enclosingFunction;
     try {
@@ -2005,7 +1918,13 @@
       assert(_thisType == null);
       _setupThisType();
       checkUnreachableNode(node);
-      node.visitChildren(this);
+      node.documentationComment?.accept(this);
+      node.metadata.accept(this);
+      node.returnType?.accept(this);
+      node.name.accept(this);
+      node.typeParameters?.accept(this);
+      node.parameters?.accept(this);
+      node.body.resolve(this, returnType.isDynamic ? null : returnType);
       elementResolver.visitMethodDeclaration(node);
     } finally {
       _enclosingFunction = outerFunction;
@@ -2024,7 +1943,8 @@
   }
 
   @override
-  void visitMethodInvocation(covariant MethodInvocationImpl node) {
+  void visitMethodInvocation(covariant MethodInvocationImpl node,
+      {DartType? contextType}) {
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     var target = node.target;
     target?.accept(this);
@@ -2046,19 +1966,22 @@
 
     node.typeArguments?.accept(this);
     elementResolver.visitMethodInvocation(node,
-        whyNotPromotedList: whyNotPromotedList);
+        whyNotPromotedList: whyNotPromotedList, contextType: contextType);
 
     var functionRewrite = MethodInvocationResolver.getRewriteResult(node);
     if (functionRewrite != null) {
       _resolveRewrittenFunctionExpressionInvocation(
-          functionRewrite, whyNotPromotedList);
+          functionRewrite, whyNotPromotedList,
+          contextType: contextType);
       nullShortingTermination(node, discardType: true);
     } else {
       nullShortingTermination(node);
     }
-    insertGenericFunctionInstantiation(node);
+    var replacement =
+        insertGenericFunctionInstantiation(node, contextType: contextType);
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
+    _insertImplicitCallReference(replacement, contextType: contextType);
   }
 
   @override
@@ -2078,11 +2001,12 @@
   }
 
   @override
-  void visitNamedExpression(NamedExpression node) {
-    InferenceContext.setTypeFromNode(node.expression, node);
+  void visitNamedExpression(NamedExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
-    node.visitChildren(this);
-    typeAnalyzer.visitNamedExpression(node as NamedExpressionImpl);
+    node.name.accept(this);
+    analyzeExpression(node.expression, contextType);
+    typeAnalyzer.visitNamedExpression(node as NamedExpressionImpl,
+        contextType: contextType);
     // Any "why not promoted" information that flow analysis had associated with
     // `node.expression` now needs to be forwarded to `node`, so that when
     // `visitArgumentList` iterates through the arguments, it will find it.
@@ -2105,17 +2029,20 @@
   }
 
   @override
-  void visitNativeFunctionBody(NativeFunctionBody node) {
+  DartType visitNativeFunctionBody(NativeFunctionBody node,
+      {DartType? imposedType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
+    return imposedType ?? typeProvider.dynamicType;
   }
 
   @override
-  void visitNullLiteral(NullLiteral node) {
+  void visitNullLiteral(NullLiteral node, {DartType? contextType}) {
     flowAnalysis.flow?.nullLiteral(node);
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitNullLiteral(node as NullLiteralImpl);
+    typeAnalyzer.visitNullLiteral(node as NullLiteralImpl,
+        contextType: contextType);
   }
 
   @override
@@ -2125,12 +2052,13 @@
   }
 
   @override
-  void visitParenthesizedExpression(ParenthesizedExpression node) {
-    InferenceContext.setTypeFromNode(node.expression, node);
+  void visitParenthesizedExpression(ParenthesizedExpression node,
+      {DartType? contextType}) {
     checkUnreachableNode(node);
-    node.visitChildren(this);
-    typeAnalyzer
-        .visitParenthesizedExpression(node as ParenthesizedExpressionImpl);
+    analyzeExpression(node.expression, contextType);
+    typeAnalyzer.visitParenthesizedExpression(
+        node as ParenthesizedExpressionImpl,
+        contextType: contextType);
     flowAnalysis.flow?.parenthesizedExpression(node, node.expression);
   }
 
@@ -2149,25 +2077,35 @@
   }
 
   @override
-  void visitPostfixExpression(PostfixExpression node) {
-    _postfixExpressionResolver.resolve(node as PostfixExpressionImpl);
-    insertGenericFunctionInstantiation(node);
+  void visitPostfixExpression(PostfixExpression node, {DartType? contextType}) {
+    _postfixExpressionResolver.resolve(node as PostfixExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
-  void visitPrefixedIdentifier(covariant PrefixedIdentifierImpl node) {
-    _prefixedIdentifierResolver.resolve(node);
-    insertGenericFunctionInstantiation(node);
+  void visitPrefixedIdentifier(covariant PrefixedIdentifierImpl node,
+      {DartType? contextType}) {
+    _prefixedIdentifierResolver.resolve(node, contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
-  void visitPrefixExpression(PrefixExpression node) {
-    _prefixExpressionResolver.resolve(node as PrefixExpressionImpl);
-    insertGenericFunctionInstantiation(node);
+  void visitPrefixExpression(PrefixExpression node, {DartType? contextType}) {
+    _prefixExpressionResolver.resolve(node as PrefixExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
-  void visitPropertyAccess(covariant PropertyAccessImpl node) {
+  void visitPropertyAccess(covariant PropertyAccessImpl node,
+      {DartType? contextType}) {
     node.target?.accept(this);
     startNullAwarePropertyAccess(node);
 
@@ -2200,14 +2138,17 @@
       // sites.
       // TODO(srawlins): Switch all resolution to use the latter method, in a
       // breaking change release.
-      type = inferenceHelper.inferTearOff(node, propertyName, type);
+      type = inferenceHelper.inferTearOff(node, propertyName, type,
+          contextType: contextType);
     }
 
-    inferenceHelper.recordStaticType(propertyName, type);
-    inferenceHelper.recordStaticType(node, type);
-    insertGenericFunctionInstantiation(node);
+    inferenceHelper.recordStaticType(propertyName, type, contextType: null);
+    inferenceHelper.recordStaticType(node, type, contextType: contextType);
+    var replacement =
+        insertGenericFunctionInstantiation(node, contextType: contextType);
 
     nullShortingTermination(node);
+    _insertImplicitCallReference(replacement, contextType: contextType);
   }
 
   @override
@@ -2221,44 +2162,47 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     elementResolver.visitRedirectingConstructorInvocation(
         node as RedirectingConstructorInvocationImpl);
-    InferenceContext.setType(node.argumentList, node.staticElement?.type);
-    visitArgumentList(node.argumentList,
+    const RedirectingConstructorInvocationInferrer().resolveInvocation(
+        resolver: this,
+        node: node,
+        rawType: node.staticElement?.type,
+        contextType: null,
         whyNotPromotedList: whyNotPromotedList);
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
 
   @override
-  void visitRethrowExpression(RethrowExpression node) {
+  void visitRethrowExpression(RethrowExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitRethrowExpression(node as RethrowExpressionImpl);
+    typeAnalyzer.visitRethrowExpression(node as RethrowExpressionImpl,
+        contextType: contextType);
     flowAnalysis.flow?.handleExit();
   }
 
   @override
   void visitReturnStatement(ReturnStatement node) {
-    InferenceContext.setType(
-      node.expression,
-      inferenceContext.bodyContext?.contextType,
-    );
-
     checkUnreachableNode(node);
-    node.visitChildren(this);
-
-    inferenceContext.bodyContext?.addReturnExpression(node.expression);
-    flowAnalysis.flow?.handleExit();
-
     var expression = node.expression;
     if (expression != null) {
-      insertImplicitCallReference(expression);
+      analyzeExpression(
+        expression,
+        inferenceContext.bodyContext?.contextType,
+      );
+      // Pick up the expression again in case it was rewritten.
+      expression = node.expression;
     }
+
+    inferenceContext.bodyContext?.addReturnExpression(expression);
+    flowAnalysis.flow?.handleExit();
   }
 
   @override
-  void visitSetOrMapLiteral(SetOrMapLiteral node) {
+  void visitSetOrMapLiteral(SetOrMapLiteral node, {DartType? contextType}) {
     checkUnreachableNode(node);
-    _typedLiteralResolver.resolveSetOrMapLiteral(node);
+    _typedLiteralResolver.resolveSetOrMapLiteral(node,
+        contextType: contextType);
   }
 
   @override
@@ -2272,22 +2216,32 @@
   }
 
   @override
-  void visitSimpleIdentifier(covariant SimpleIdentifierImpl node) {
-    _simpleIdentifierResolver.resolve(node);
-    insertGenericFunctionInstantiation(node);
+  void visitSimpleIdentifier(covariant SimpleIdentifierImpl node,
+      {DartType? contextType}) {
+    _simpleIdentifierResolver.resolve(node, contextType: contextType);
+    _insertImplicitCallReference(
+        insertGenericFunctionInstantiation(node, contextType: contextType),
+        contextType: contextType);
   }
 
   @override
-  void visitSimpleStringLiteral(SimpleStringLiteral node) {
+  void visitSimpleStringLiteral(SimpleStringLiteral node,
+      {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitSimpleStringLiteral(node as SimpleStringLiteralImpl);
+    typeAnalyzer.visitSimpleStringLiteral(node as SimpleStringLiteralImpl,
+        contextType: contextType);
   }
 
   @override
-  void visitSpreadElement(SpreadElement node) {
+  void visitSpreadElement(SpreadElement node,
+      {CollectionLiteralContext? context}) {
+    var iterableType = context?.iterableType;
+    if (iterableType != null && _isNonNullableByDefault && node.isNullAware) {
+      iterableType = typeSystem.makeNullable(iterableType);
+    }
     checkUnreachableNode(node);
-    node.visitChildren(this);
+    analyzeExpression(node.expression, iterableType);
 
     if (!node.isNullAware) {
       nullableDereferenceVerifier.expression(
@@ -2298,10 +2252,12 @@
   }
 
   @override
-  void visitStringInterpolation(StringInterpolation node) {
+  void visitStringInterpolation(StringInterpolation node,
+      {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitStringInterpolation(node as StringInterpolationImpl);
+    typeAnalyzer.visitStringInterpolation(node as StringInterpolationImpl,
+        contextType: contextType);
   }
 
   @override
@@ -2314,19 +2270,23 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     elementResolver.visitSuperConstructorInvocation(
         node as SuperConstructorInvocationImpl);
-    InferenceContext.setType(node.argumentList, node.staticElement?.type);
-    visitArgumentList(node.argumentList,
+    const SuperConstructorInvocationInferrer().resolveInvocation(
+        resolver: this,
+        node: node,
+        rawType: node.staticElement?.type,
+        contextType: null,
         whyNotPromotedList: whyNotPromotedList);
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
 
   @override
-  void visitSuperExpression(SuperExpression node) {
+  void visitSuperExpression(SuperExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
     elementResolver.visitSuperExpression(node);
-    typeAnalyzer.visitSuperExpression(node as SuperExpressionImpl);
+    typeAnalyzer.visitSuperExpression(node as SuperExpressionImpl,
+        contextType: contextType);
   }
 
   @override
@@ -2339,10 +2299,10 @@
   void visitSwitchCase(SwitchCase node) {
     checkUnreachableNode(node);
 
-    InferenceContext.setType(
-        node.expression, _enclosingSwitchStatementExpressionType);
     checkUnreachableNode(node);
-    node.visitChildren(this);
+    node.labels.accept(this);
+    analyzeExpression(node.expression, _enclosingSwitchStatementExpressionType);
+    node.statements.accept(this);
 
     var flow = flowAnalysis.flow;
     if (flow != null && flow.isReachable && _isNonNullableByDefault) {
@@ -2400,24 +2360,28 @@
   }
 
   @override
-  void visitSymbolLiteral(SymbolLiteral node) {
+  void visitSymbolLiteral(SymbolLiteral node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitSymbolLiteral(node as SymbolLiteralImpl);
+    typeAnalyzer.visitSymbolLiteral(node as SymbolLiteralImpl,
+        contextType: contextType);
   }
 
   @override
-  void visitThisExpression(ThisExpression node) {
+  void visitThisExpression(ThisExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitThisExpression(node as ThisExpressionImpl);
+    typeAnalyzer.visitThisExpression(node as ThisExpressionImpl,
+        contextType: contextType);
+    _insertImplicitCallReference(node, contextType: contextType);
   }
 
   @override
-  void visitThrowExpression(ThrowExpression node) {
+  void visitThrowExpression(ThrowExpression node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
-    typeAnalyzer.visitThrowExpression(node as ThrowExpressionImpl);
+    typeAnalyzer.visitThrowExpression(node as ThrowExpressionImpl,
+        contextType: contextType);
     flowAnalysis.flow?.handleExit();
   }
 
@@ -2445,10 +2409,10 @@
       flow.tryCatchStatement_bodyBegin();
     }
     body.accept(this);
+    nullSafetyDeadCodeVerifier.flowEnd(node.body);
+    nullSafetyDeadCodeVerifier.tryStatementEnter(node);
     if (catchClauses.isNotEmpty) {
       flow.tryCatchStatement_bodyEnd(body);
-      nullSafetyDeadCodeVerifier.flowEnd(node.body);
-      nullSafetyDeadCodeVerifier.tryStatementEnter(node);
 
       var catchLength = catchClauses.length;
       for (var i = 0; i < catchLength; ++i) {
@@ -2464,8 +2428,8 @@
       }
 
       flow.tryCatchStatement_end();
-      nullSafetyDeadCodeVerifier.tryStatementExit(node);
     }
+    nullSafetyDeadCodeVerifier.tryStatementExit(node);
 
     if (finallyBlock != null) {
       flow.tryFinallyStatement_finallyBegin(
@@ -2482,7 +2446,7 @@
   }
 
   @override
-  void visitTypeLiteral(TypeLiteral node) {
+  void visitTypeLiteral(TypeLiteral node, {DartType? contextType}) {
     checkUnreachableNode(node);
     node.visitChildren(this);
   }
@@ -2522,10 +2486,6 @@
   @override
   void visitVariableDeclarationList(VariableDeclarationList node) {
     flowAnalysis.variableDeclarationList(node);
-    for (VariableDeclaration decl in node.variables) {
-      VariableElement variableElement = decl.declaredElement!;
-      InferenceContext.setType(decl, variableElement.type);
-    }
     checkUnreachableNode(node);
     node.visitChildren(this);
     elementResolver.visitVariableDeclarationList(node);
@@ -2542,10 +2502,9 @@
     checkUnreachableNode(node);
 
     Expression condition = node.condition;
-    InferenceContext.setType(condition, typeProvider.boolType);
 
     flowAnalysis.flow?.whileStatement_conditionBegin(node);
-    condition.accept(this);
+    analyzeExpression(condition, typeProvider.boolType);
     condition = node.condition;
     var whyNotPromoted = flowAnalysis.flow?.whyNotPromoted(condition);
 
@@ -2580,6 +2539,63 @@
     return typeProvider.futureOrType(type);
   }
 
+  /// If `expression` should be treated as `expression.call`, inserts an
+  /// [ImplicitCallReference] node which wraps [expression].
+  void _insertImplicitCallReference(ExpressionImpl expression,
+      {required DartType? contextType}) {
+    var parent = expression.parent;
+    if (_shouldSkipImplicitCallReferenceDueToForm(expression, parent)) {
+      return;
+    }
+    var staticType = expression.staticType;
+    if (staticType == null) {
+      return;
+    }
+    DartType? context;
+    if (parent is AssignmentExpression) {
+      context = parent.writeType;
+    } else {
+      context = contextType;
+    }
+    var callMethod = getImplicitCallMethod(staticType, context, expression);
+    if (callMethod == null || context == null) {
+      return;
+    }
+
+    // `expression` is to be treated as `expression.call`.
+    context = typeSystem.flatten(context);
+    var callMethodType = callMethod.type;
+    List<DartType> typeArgumentTypes;
+    if (isConstructorTearoffsEnabled &&
+        callMethodType.typeFormals.isNotEmpty &&
+        context is FunctionType) {
+      typeArgumentTypes = typeSystem.inferFunctionTypeInstantiation(
+        context,
+        callMethodType,
+        errorReporter: errorReporter,
+        errorNode: expression,
+        // If the constructor-tearoffs feature is enabled, then so is
+        // generic-metadata.
+        genericMetadataIsEnabled: true,
+      )!;
+      if (typeArgumentTypes.isNotEmpty) {
+        callMethodType = callMethodType.instantiate(typeArgumentTypes);
+      }
+    } else {
+      typeArgumentTypes = [];
+    }
+
+    var callReference = astFactory.implicitCallReference(
+      expression: expression,
+      staticElement: callMethod,
+      typeArguments: null,
+      typeArgumentTypes: typeArgumentTypes,
+    );
+    NodeReplacer.replace(expression, callReference, parent: parent);
+
+    callReference.staticType = callMethodType;
+  }
+
   /// Continues resolution of a [FunctionExpressionInvocation] that was created
   /// from a rewritten [MethodInvocation]. The target function is already
   /// resolved.
@@ -2588,9 +2604,9 @@
   /// ordinary method invocation. So, we need to perform the same null shorting
   /// as for method invocations.
   void _resolveRewrittenFunctionExpressionInvocation(
-    FunctionExpressionInvocation node,
-    List<WhyNotPromotedGetter> whyNotPromotedList,
-  ) {
+      FunctionExpressionInvocation node,
+      List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required DartType? contextType}) {
     var function = node.function;
 
     if (function is PropertyAccess &&
@@ -2607,7 +2623,8 @@
     }
 
     _functionExpressionInvocationResolver.resolve(
-        node as FunctionExpressionInvocationImpl, whyNotPromotedList);
+        node as FunctionExpressionInvocationImpl, whyNotPromotedList,
+        contextType: contextType);
 
     nullShortingTermination(node);
   }
@@ -2624,6 +2641,34 @@
     }
   }
 
+  bool _shouldSkipImplicitCallReferenceDueToForm(
+      Expression expression, AstNode? parent) {
+    while (parent is ParenthesizedExpression) {
+      expression = parent;
+      parent = expression.parent;
+    }
+    if (parent is CascadeExpression && parent.target == expression) {
+      // Do not perform an "implicit tear-off conversion" here. It should only
+      // be performed on [parent]. See
+      // https://github.com/dart-lang/language/issues/1873.
+      return true;
+    }
+    if (parent is ConditionalExpression &&
+        (parent.thenExpression == expression ||
+            parent.elseExpression == expression)) {
+      // Do not perform an "implicit tear-off conversion" on the branches of a
+      // conditional expression.
+      return true;
+    }
+    if (parent is BinaryExpression &&
+        parent.operator.type == TokenType.QUESTION_QUESTION) {
+      // Do not perform an "implicit tear-off conversion" on the branches of a
+      // `??` operator.
+      return true;
+    }
+    return false;
+  }
+
   /// Given an [argumentList] and the [parameters] related to the element that
   /// will be invoked using those arguments, compute the list of parameters that
   /// correspond to the list of arguments.
@@ -2766,30 +2811,34 @@
             migrationResolutionHooks);
 
   @override
-  void visitConditionalExpression(covariant ConditionalExpressionImpl node) {
+  void visitConditionalExpression(covariant ConditionalExpressionImpl node,
+      {DartType? contextType}) {
     var conditionalKnownValue =
         _migrationResolutionHooks.getConditionalKnownValue(node);
     if (conditionalKnownValue == null) {
-      super.visitConditionalExpression(node);
+      super.visitConditionalExpression(node, contextType: contextType);
       return;
     } else {
       var subexpressionToKeep =
           conditionalKnownValue ? node.thenExpression : node.elseExpression;
       subexpressionToKeep.accept(this);
-      inferenceHelper.recordStaticType(node, subexpressionToKeep.typeOrThrow);
+      inferenceHelper.recordStaticType(node, subexpressionToKeep.typeOrThrow,
+          contextType: contextType);
     }
   }
 
   @override
-  void visitIfElement(IfElement node) {
+  void visitIfElement(IfElement node, {CollectionLiteralContext? context}) {
     var conditionalKnownValue =
         _migrationResolutionHooks.getConditionalKnownValue(node);
     if (conditionalKnownValue == null) {
-      super.visitIfElement(node);
+      super.visitIfElement(node, context: context);
       return;
     } else {
-      (conditionalKnownValue ? node.thenElement : node.elseElement)
-          ?.accept(this);
+      var element = conditionalKnownValue ? node.thenElement : node.elseElement;
+      if (element != null) {
+        (element as CollectionElementImpl).resolveElement(this, context);
+      }
     }
   }
 
@@ -2975,7 +3024,7 @@
     node.documentationComment?.accept(this);
     node.name.accept(this);
     node.typeParameters?.accept(this);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
   }
@@ -3059,6 +3108,13 @@
       ClassElement element = node.declaredElement!;
       node.metadata.accept(this);
 
+      nameScope = TypeParameterScope(
+        nameScope,
+        element.typeParameters,
+      );
+      _setNodeNameScope(node, nameScope);
+      visitEnumDeclarationInScope(node);
+
       nameScope = ClassScope(nameScope, element);
       visitEnumMembersInScope(node);
     } finally {
@@ -3066,6 +3122,13 @@
     }
   }
 
+  void visitEnumDeclarationInScope(EnumDeclaration node) {
+    node.name.accept(this);
+    node.typeParameters?.accept(this);
+    node.withClause?.accept(this);
+    node.implementsClause?.accept(this);
+  }
+
   void visitEnumMembersInScope(EnumDeclaration node) {
     node.documentationComment?.accept(this);
     node.constants.accept(this);
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index ed375ff..77865a9 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -31,7 +31,7 @@
 
   @Deprecated('Use uri.isScheme("dart") instead')
   @override
-  bool get isInSystemLibrary => uri.scheme == 'dart';
+  bool get isInSystemLibrary => uri.isScheme('dart');
 
   @override
   String get shortName => pathos.basename(fullName);
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 6bd3016..946b08f 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -6,7 +6,6 @@
 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/member.dart' show ConstructorMember;
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
@@ -47,8 +46,10 @@
 
   /// The Dart Language Specification, 12.5: <blockquote>The static type of a string literal is
   /// `String`.</blockquote>
-  void visitAdjacentStrings(covariant AdjacentStringsImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.stringType);
+  void visitAdjacentStrings(covariant AdjacentStringsImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.stringType,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.32: <blockquote>... the cast expression <i>e as T</i> ...
@@ -57,31 +58,39 @@
   /// scope.
   ///
   /// The static type of a cast expression <i>e as T</i> is <i>T</i>.</blockquote>
-  void visitAsExpression(covariant AsExpressionImpl node) {
-    _inferenceHelper.recordStaticType(node, _getType(node.type));
+  void visitAsExpression(covariant AsExpressionImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _getType(node.type),
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 16.29 (Await Expressions):
   ///
   ///   The static type of [the expression "await e"] is flatten(T) where T is
   ///   the static type of e.
-  void visitAwaitExpression(covariant AwaitExpressionImpl node) {
+  void visitAwaitExpression(covariant AwaitExpressionImpl node,
+      {required DartType? contextType}) {
     var resultType = node.expression.typeOrThrow;
     resultType = _typeSystem.flatten(resultType);
-    _inferenceHelper.recordStaticType(node, resultType);
+    _inferenceHelper.recordStaticType(node, resultType,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.4: <blockquote>The static type of a boolean literal is
   /// bool.</blockquote>
-  void visitBooleanLiteral(covariant BooleanLiteralImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.boolType);
+  void visitBooleanLiteral(covariant BooleanLiteralImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.boolType,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.15.2: <blockquote>A cascaded method invocation expression
   /// of the form <i>e..suffix</i> is equivalent to the expression <i>(t) {t.suffix; return
   /// t;}(e)</i>.</blockquote>
-  void visitCascadeExpression(covariant CascadeExpressionImpl node) {
-    _inferenceHelper.recordStaticType(node, node.target.typeOrThrow);
+  void visitCascadeExpression(covariant CascadeExpressionImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, node.target.typeOrThrow,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.19: <blockquote> ... a conditional expression <i>c</i> of
@@ -91,14 +100,18 @@
   ///
   /// The static type of <i>c</i> is the least upper bound of the static type of <i>e<sub>2</sub></i>
   /// and the static type of <i>e<sub>3</sub></i>.</blockquote>
-  void visitConditionalExpression(covariant ConditionalExpressionImpl node) {
-    _analyzeLeastUpperBound(node, node.thenExpression, node.elseExpression);
+  void visitConditionalExpression(covariant ConditionalExpressionImpl node,
+      {required DartType? contextType}) {
+    _analyzeLeastUpperBound(node, node.thenExpression, node.elseExpression,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.3: <blockquote>The static type of a literal double is
   /// double.</blockquote>
-  void visitDoubleLiteral(covariant DoubleLiteralImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.doubleType);
+  void visitDoubleLiteral(covariant DoubleLiteralImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.doubleType,
+        contextType: contextType);
   }
 
   void visitExtensionOverride(ExtensionOverride node) {
@@ -141,20 +154,6 @@
     node.staticType = _dynamicType;
   }
 
-  /// The Dart Language Specification, 12.11.1: <blockquote>The static type of a new expression of
-  /// either the form <i>new T.id(a<sub>1</sub>, &hellip;, a<sub>n</sub>)</i> or the form <i>new
-  /// T(a<sub>1</sub>, &hellip;, a<sub>n</sub>)</i> is <i>T</i>.</blockquote>
-  ///
-  /// The Dart Language Specification, 12.11.2: <blockquote>The static type of a constant object
-  /// expression of either the form <i>const T.id(a<sub>1</sub>, &hellip;, a<sub>n</sub>)</i> or the
-  /// form <i>const T(a<sub>1</sub>, &hellip;, a<sub>n</sub>)</i> is <i>T</i>. </blockquote>
-  void visitInstanceCreationExpression(
-      covariant InstanceCreationExpressionImpl node) {
-    _inferInstanceCreationExpression(node);
-    _inferenceHelper.recordStaticType(
-        node, node.constructorName.type2.typeOrThrow);
-  }
-
   /// <blockquote>
   /// An integer literal has static type \code{int}, unless the surrounding
   /// static context type is a type which \code{int} is not assignable to, and
@@ -170,16 +169,16 @@
   /// type of $e$ is the same as the static type of an integer literal with the
   /// same contexttype
   /// </blockquote>
-  void visitIntegerLiteral(IntegerLiteral node) {
-    // Check the parent context for negated integer literals.
-    var context = InferenceContext.getContext(
-        (node as IntegerLiteralImpl).immediatelyNegated ? node.parent : node);
-    if (context == null ||
-        _typeSystem.isAssignableTo(_typeProvider.intType, context) ||
-        !_typeSystem.isAssignableTo(_typeProvider.doubleType, context)) {
-      _inferenceHelper.recordStaticType(node, _typeProvider.intType);
+  void visitIntegerLiteral(IntegerLiteralImpl node,
+      {required DartType? contextType}) {
+    if (contextType == null ||
+        _typeSystem.isAssignableTo(_typeProvider.intType, contextType) ||
+        !_typeSystem.isAssignableTo(_typeProvider.doubleType, contextType)) {
+      _inferenceHelper.recordStaticType(node, _typeProvider.intType,
+          contextType: contextType);
     } else {
-      _inferenceHelper.recordStaticType(node, _typeProvider.doubleType);
+      _inferenceHelper.recordStaticType(node, _typeProvider.doubleType,
+          contextType: contextType);
     }
   }
 
@@ -187,106 +186,133 @@
   /// denote a type available in the current lexical scope.
   ///
   /// The static type of an is-expression is `bool`.</blockquote>
-  void visitIsExpression(covariant IsExpressionImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.boolType);
+  void visitIsExpression(covariant IsExpressionImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.boolType,
+        contextType: contextType);
   }
 
   void visitMethodInvocation(MethodInvocation node) {
     throw StateError('Should not be invoked');
   }
 
-  void visitNamedExpression(covariant NamedExpressionImpl node) {
+  void visitNamedExpression(covariant NamedExpressionImpl node,
+      {required DartType? contextType}) {
     Expression expression = node.expression;
-    _inferenceHelper.recordStaticType(node, expression.typeOrThrow);
+    _inferenceHelper.recordStaticType(node, expression.typeOrThrow,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.2: <blockquote>The static type of `null` is bottom.
   /// </blockquote>
-  void visitNullLiteral(covariant NullLiteralImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.nullType);
+  void visitNullLiteral(covariant NullLiteralImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.nullType,
+        contextType: contextType);
   }
 
-  void visitParenthesizedExpression(
-      covariant ParenthesizedExpressionImpl node) {
+  void visitParenthesizedExpression(covariant ParenthesizedExpressionImpl node,
+      {required DartType? contextType}) {
     Expression expression = node.expression;
-    _inferenceHelper.recordStaticType(node, expression.typeOrThrow);
+    _inferenceHelper.recordStaticType(node, expression.typeOrThrow,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.9: <blockquote>The static type of a rethrow expression is
   /// bottom.</blockquote>
-  void visitRethrowExpression(covariant RethrowExpressionImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.bottomType);
+  void visitRethrowExpression(covariant RethrowExpressionImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.bottomType,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.5: <blockquote>The static type of a string literal is
   /// `String`.</blockquote>
-  void visitSimpleStringLiteral(covariant SimpleStringLiteralImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.stringType);
+  void visitSimpleStringLiteral(covariant SimpleStringLiteralImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.stringType,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.5: <blockquote>The static type of a string literal is
   /// `String`.</blockquote>
-  void visitStringInterpolation(covariant StringInterpolationImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.stringType);
+  void visitStringInterpolation(covariant StringInterpolationImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.stringType,
+        contextType: contextType);
   }
 
-  void visitSuperExpression(covariant SuperExpressionImpl node) {
+  void visitSuperExpression(covariant SuperExpressionImpl node,
+      {required DartType? contextType}) {
     var thisType = _resolver.thisType;
     _resolver.flowAnalysis.flow?.thisOrSuper(node, thisType ?? _dynamicType);
     if (thisType == null ||
         node.thisOrAncestorOfType<ExtensionDeclaration>() != null) {
       // TODO(brianwilkerson) Report this error if it hasn't already been
       // reported.
-      _inferenceHelper.recordStaticType(node, _dynamicType);
+      _inferenceHelper.recordStaticType(node, _dynamicType,
+          contextType: contextType);
     } else {
-      _inferenceHelper.recordStaticType(node, thisType);
+      _inferenceHelper.recordStaticType(node, thisType,
+          contextType: contextType);
     }
   }
 
-  void visitSymbolLiteral(covariant SymbolLiteralImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.symbolType);
+  void visitSymbolLiteral(covariant SymbolLiteralImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.symbolType,
+        contextType: contextType);
   }
 
   /// The Dart Language Specification, 12.10: <blockquote>The static type of `this` is the
   /// interface of the immediately enclosing class.</blockquote>
-  void visitThisExpression(covariant ThisExpressionImpl node) {
+  void visitThisExpression(covariant ThisExpressionImpl node,
+      {required DartType? contextType}) {
     var thisType = _resolver.thisType;
     _resolver.flowAnalysis.flow?.thisOrSuper(node, thisType ?? _dynamicType);
     if (thisType == null) {
       // TODO(brianwilkerson) Report this error if it hasn't already been
       // reported.
-      _inferenceHelper.recordStaticType(node, _dynamicType);
+      _inferenceHelper.recordStaticType(node, _dynamicType,
+          contextType: contextType);
     } else {
-      _inferenceHelper.recordStaticType(node, thisType);
+      _inferenceHelper.recordStaticType(node, thisType,
+          contextType: contextType);
     }
   }
 
   /// The Dart Language Specification, 12.8: <blockquote>The static type of a throw expression is
   /// bottom.</blockquote>
-  void visitThrowExpression(covariant ThrowExpressionImpl node) {
-    _inferenceHelper.recordStaticType(node, _typeProvider.bottomType);
+  void visitThrowExpression(covariant ThrowExpressionImpl node,
+      {required DartType? contextType}) {
+    _inferenceHelper.recordStaticType(node, _typeProvider.bottomType,
+        contextType: contextType);
   }
 
   /// Set the static type of [node] to be the least upper bound of the static
   /// types of subexpressions [expr1] and [expr2].
   void _analyzeLeastUpperBound(
-      ExpressionImpl node, Expression expr1, Expression expr2) {
+      ExpressionImpl node, Expression expr1, Expression expr2,
+      {required DartType? contextType}) {
     var staticType1 = expr1.typeOrThrow;
     var staticType2 = expr2.typeOrThrow;
 
-    _analyzeLeastUpperBoundTypes(node, staticType1, staticType2);
+    _analyzeLeastUpperBoundTypes(node, staticType1, staticType2,
+        contextType: contextType);
   }
 
   /// Set the static type of [node] to be the least upper bound of the static
   /// types [staticType1] and [staticType2].
   void _analyzeLeastUpperBoundTypes(
-      ExpressionImpl node, DartType staticType1, DartType staticType2) {
+      ExpressionImpl node, DartType staticType1, DartType staticType2,
+      {required DartType? contextType}) {
     DartType staticType =
         _typeSystem.getLeastUpperBound(staticType1, staticType2);
 
     staticType = _resolver.toLegacyTypeIfOptOut(staticType);
 
-    _inferenceHelper.recordStaticType(node, staticType);
+    _inferenceHelper.recordStaticType(node, staticType,
+        contextType: contextType);
   }
 
   /// Return the type represented by the given type [annotation].
@@ -299,55 +325,4 @@
     }
     return type;
   }
-
-  /// Given an instance creation of a possibly generic type, infer the type
-  /// arguments using the current context type as well as the argument types.
-  void _inferInstanceCreationExpression(InstanceCreationExpressionImpl node) {
-    // TODO(leafp): Currently, we may re-infer types here, since we
-    // sometimes resolve multiple times.  We should really check that we
-    // have not already inferred something.  However, the obvious ways to
-    // check this don't work, since we may have been instantiated
-    // to bounds in an earlier phase, and we *do* want to do inference
-    // in that case.
-
-    // Get back to the uninstantiated generic constructor.
-    // TODO(jmesserly): should we store this earlier in resolution?
-    // Or look it up, instead of jumping backwards through the Member?
-    var constructorName = node.constructorName;
-    var elementToInfer = _resolver.inferenceHelper.constructorElementToInfer(
-      constructorName: constructorName,
-      definingLibrary: _resolver.definingLibrary,
-    );
-
-    // If the constructor is not generic, we are done.
-    if (elementToInfer == null) {
-      return;
-    }
-
-    var typeName = constructorName.type2;
-    var typeArguments = typeName.typeArguments;
-
-    var constructorType = elementToInfer.asType;
-    var arguments = node.argumentList;
-    var inferred = _resolver.inferenceHelper.inferGenericInvoke(
-        node, constructorType, typeArguments, arguments, constructorName,
-        isConst: node.isConst);
-
-    if (inferred != null) {
-      // Fix up the parameter elements based on inferred method.
-      arguments.correspondingStaticParameters =
-          ResolverVisitor.resolveArgumentsToParameters(
-        argumentList: arguments,
-        parameters: inferred.parameters,
-      );
-      typeName.type = inferred.returnType;
-      // Update the static element as well. This is used in some cases, such as
-      // computing constant values. It is stored in two places.
-      var constructorElement = ConstructorMember.from(
-        elementToInfer.element,
-        inferred.returnType as InterfaceType,
-      );
-      constructorName.staticElement = constructorElement;
-    }
-  }
 }
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 9fb88ca..34986e6 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -241,7 +242,8 @@
           WithClause? withClause,
           ImplementsClause? implementsClause,
           {List<ClassMember> members = const [],
-          bool isMacro = false}) =>
+          bool isMacro = false,
+          bool isAugmentation = false}) =>
       astFactory.classDeclaration(
           null,
           null,
@@ -249,6 +251,7 @@
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
           isMacro ? TokenFactory.tokenFromString('macro') : null,
+          isAugmentation ? TokenFactory.tokenFromString('augment') : null,
           TokenFactory.tokenFromKeyword(Keyword.CLASS),
           identifier3(name),
           typeParameters,
@@ -266,7 +269,8 @@
           NamedType superclass,
           WithClause withClause,
           ImplementsClause? implementsClause,
-          {bool isMacro = false}) =>
+          {bool isMacro = false,
+          bool isAugmentation = false}) =>
       astFactory.classTypeAlias(
           null,
           null,
@@ -278,6 +282,7 @@
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
           isMacro ? TokenFactory.tokenFromString('macro') : null,
+          isAugmentation ? TokenFactory.tokenFromString('augment') : null,
           superclass,
           withClause,
           implementsClause,
@@ -319,7 +324,8 @@
           directives: directives,
           declarations: declarations,
           endToken: TokenFactory.tokenFromType(TokenType.EOF),
-          featureSet: FeatureSet.latestLanguageVersion());
+          featureSet: FeatureSet.latestLanguageVersion(),
+          lineInfo: LineInfo.fromContent(''));
 
   static CompilationUnitImpl compilationUnit9(
           {String? scriptTag,
@@ -333,7 +339,8 @@
           directives: directives,
           declarations: declarations,
           endToken: TokenFactory.tokenFromType(TokenType.EOF),
-          featureSet: featureSet);
+          featureSet: featureSet,
+          lineInfo: LineInfo.fromContent(''));
 
   static ConditionalExpressionImpl conditionalExpression(Expression condition,
           Expression thenExpression, Expression elseExpression) =>
@@ -639,6 +646,7 @@
           null,
           null,
           null,
+          null,
           type,
           keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
           identifier3(name),
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
deleted file mode 100644
index c457420..0000000
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ /dev/null
@@ -1,8 +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.
-
-@Deprecated("Use package:analyzer/src/dart/element/type_system.dart instead")
-library type_system_generated;
-
-export 'package:analyzer/src/dart/element/type_system.dart';
diff --git a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
index 4b37ce5..d2f6b13 100644
--- a/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
+++ b/pkg/analyzer/lib/src/ignore_comments/ignore_info.dart
@@ -77,7 +77,7 @@
   /// Initialize a newly created instance of this class to represent the ignore
   /// comments in the given compilation [unit].
   IgnoreInfo.forDart(CompilationUnit unit, String content) {
-    var lineInfo = unit.lineInfo!;
+    var lineInfo = unit.lineInfo;
     for (var comment in unit.ignoreComments) {
       var lexeme = comment.lexeme;
       if (lexeme.contains('ignore:')) {
diff --git a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
index 8ac1bdd..3e8424e 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
index e1565ec..cc54c3a 100644
--- a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
+++ b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
@@ -5,7 +5,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
 import "package:analyzer/error/error.dart";
 
@@ -514,7 +514,7 @@
   // name: local_package
   // ```
   //
-  // If the path is wrong, then replace it with a the correct path.
+  // If the path is wrong, then replace it with the correct path.
   static const PubspecWarningCode PATH_PUBSPEC_DOES_NOT_EXIST =
       PubspecWarningCode(
     'PATH_PUBSPEC_DOES_NOT_EXIST',
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index b5a3097..e39cd99 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -1317,7 +1317,7 @@
   }
 
   void _buildFileDeclarations(CompilationUnit unit) {
-    lineInfo = unit.lineInfo!;
+    lineInfo = unit.lineInfo;
     lineStarts = lineInfo.lineStarts;
 
     isLibrary = true;
diff --git a/pkg/analyzer/lib/src/source/package_map_resolver.dart b/pkg/analyzer/lib/src/source/package_map_resolver.dart
index 9b96f99..c1d3bf0 100644
--- a/pkg/analyzer/lib/src/source/package_map_resolver.dart
+++ b/pkg/analyzer/lib/src/source/package_map_resolver.dart
@@ -79,6 +79,6 @@
 
   /// Returns `true` if [uri] is a `package` URI.
   static bool isPackageUri(Uri uri) {
-    return uri.scheme == PACKAGE_SCHEME;
+    return uri.isScheme(PACKAGE_SCHEME);
   }
 }
diff --git a/pkg/analyzer/lib/src/source/source_resource.dart b/pkg/analyzer/lib/src/source/source_resource.dart
index 9334b31..3e4adf7 100644
--- a/pkg/analyzer/lib/src/source/source_resource.dart
+++ b/pkg/analyzer/lib/src/source/source_resource.dart
@@ -80,7 +80,7 @@
 
   @Deprecated('Use uri.isScheme("dart") instead')
   @override
-  bool get isInSystemLibrary => uri.scheme == DartUriResolver.DART_SCHEME;
+  bool get isInSystemLibrary => uri.isScheme(DartUriResolver.DART_SCHEME);
 
   @Deprecated('Not used anymore')
   @override
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 44e5dc8..67e3358 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -68,6 +68,12 @@
   /// Right: location.
   IS_INVOKED_BY,
 
+  /// Left: an unnamed constructor.
+  ///   Is invoked by an enum constant, without arguments, which is special
+  ///   because when the name given, an empty argument list must be added.
+  /// Right: location.
+  IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+
   /// Left: any element.
   ///   Is referenced (and not invoked, read/written) at.
   /// Right: location.
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index a17feaf..adb8e7d 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -496,6 +496,12 @@
   /// Right: location.
   IS_INVOKED_BY,
 
+  /// Left: an unnamed constructor.
+  ///   Is invoked by an enum constant, without arguments, which is special
+  ///   because when the name given, an empty argument list must be added.
+  /// Right: location.
+  IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+
   /// Left: any element.
   ///   Is referenced (and not invoked, read/written) at.
   /// Right: location.
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index a332f28..f9c96037 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -123,11 +123,14 @@
 
   /// 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);
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index bb34ac0..3713497 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([]);
+    var dataStore = SummaryDataStore.tmp();
     // 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 114c5ec..df1bb2d 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -207,7 +207,7 @@
       atSign: Tokens.at(),
       name: name,
       typeArguments: typeArguments,
-      period: Tokens.period(),
+      period: constructorName != null ? Tokens.period() : null,
       constructorName: constructorName,
       arguments: arguments,
     );
@@ -240,7 +240,7 @@
       Tokens.assert_(),
       Tokens.openParenthesis(),
       condition,
-      Tokens.comma(),
+      message != null ? Tokens.comma() : null,
       message,
       Tokens.closeParenthesis(),
     );
@@ -855,6 +855,7 @@
     var node = astFactory.mixinDeclaration(
       null,
       metadata,
+      null,
       Tokens.mixin_(),
       name,
       typeParameters,
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index e03af22..d9a70fa 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -166,7 +166,7 @@
     // We need to inform the applier about the right shape of the AST.
     // _sink.writeByte(node.name != null ? 1 : 0);
 
-    _writeNode(node.type2);
+    _writeNode(node.type);
     _writeOptionalNode(node.name);
 
     _sink.writeElement(node.staticElement);
diff --git a/pkg/analyzer/lib/src/summary2/ast_resolver.dart b/pkg/analyzer/lib/src/summary2/ast_resolver.dart
index ead4620..e3976e43 100644
--- a/pkg/analyzer/lib/src/summary2/ast_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_resolver.dart
@@ -93,14 +93,11 @@
       node.accept(_resolutionVisitor);
       // Node may have been rewritten so get it again.
       node = getNode();
-      if (contextType != null) {
-        InferenceContext.setType(node, contextType);
-      }
       node.accept(_scopeResolverVisitor);
     }
     _prepareEnclosingDeclarations();
     _flowAnalysis.topLevelDeclaration_enter(node.parent!, null);
-    node.accept(_resolverVisitor);
+    _resolverVisitor.analyzeExpression(node, contextType);
     _flowAnalysis.topLevelDeclaration_exit();
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index b30141a..7f45994 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -142,7 +142,7 @@
   }
 
   @override
-  void visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(covariant ClassDeclarationImpl node) {
     _compilationUnitMember(node);
     _token(node.abstractKeyword);
     _token(node.macroKeyword);
@@ -159,7 +159,7 @@
   }
 
   @override
-  void visitClassTypeAlias(ClassTypeAlias node) {
+  void visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
     _compilationUnitMember(node);
     _token(node.abstractKeyword);
     _token(node.macroKeyword);
@@ -167,7 +167,7 @@
     node.name.accept(this);
     node.typeParameters?.accept(this);
     _token(node.equals);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
     _token(node.semicolon);
@@ -231,7 +231,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    node.type2.accept(this);
+    node.type.accept(this);
     _token(node.period);
     node.name?.accept(this);
   }
@@ -242,6 +242,12 @@
   }
 
   @override
+  void visitConstructorSelector(ConstructorSelector node) {
+    _token(node.period);
+    node.name.accept(this);
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     _token(node.continueKeyword);
     node.label?.accept(this);
@@ -296,9 +302,17 @@
   }
 
   @override
+  void visitEnumConstantArguments(EnumConstantArguments node) {
+    node.typeArguments?.accept(this);
+    node.constructorSelector?.accept(this);
+    node.argumentList.accept(this);
+  }
+
+  @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     _declaration(node);
     node.name.accept(this);
+    node.arguments?.accept(this);
   }
 
   @override
@@ -306,8 +320,13 @@
     _compilationUnitMember(node);
     _token(node.enumKeyword);
     node.name.accept(this);
+    node.typeParameters?.accept(this);
+    node.withClause?.accept(this);
+    node.implementsClause?.accept(this);
     _token(node.leftBracket);
-    _nodeList(node.constants, node.rightBracket);
+    _nodeList(node.constants, node.semicolon ?? node.rightBracket);
+    _token(node.semicolon);
+    node.members.accept(this);
     _token(node.rightBracket);
   }
 
@@ -338,7 +357,7 @@
   @override
   void visitExtendsClause(ExtendsClause node) {
     _token(node.extendsKeyword);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
   }
 
   @override
@@ -572,7 +591,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     _token(node.implementsKeyword);
-    _nodeList(node.interfaces2, node.endToken.next);
+    _nodeList(node.interfaces, node.endToken.next);
   }
 
   @override
@@ -740,7 +759,7 @@
   @override
   void visitOnClause(OnClause node) {
     _token(node.onKeyword);
-    _nodeList(node.superclassConstraints2, node.endToken.next);
+    _nodeList(node.superclassConstraints, node.endToken.next);
   }
 
   @override
@@ -877,6 +896,18 @@
   }
 
   @override
+  void visitSuperFormalParameter(SuperFormalParameter node) {
+    _normalFormalParameter(node);
+    _token(node.keyword);
+    node.type?.accept(this);
+    _token(node.superKeyword);
+    _token(node.period);
+    node.identifier.accept(this);
+    node.typeParameters?.accept(this);
+    node.parameters?.accept(this);
+  }
+
+  @override
   void visitSwitchCase(SwitchCase node) {
     _nodeList(node.labels);
     _token(node.keyword);
@@ -1005,7 +1036,7 @@
   @override
   void visitWithClause(WithClause node) {
     _token(node.withKeyword);
-    _nodeList(node.mixinTypes2, node.endToken.next);
+    _nodeList(node.mixinTypes, node.endToken.next);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 53915eb..6400c29 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -276,6 +276,9 @@
       unitElement: element.enclosingElement,
     );
     _readTypeParameters(reader, element.typeParameters);
+    element.supertype = reader._readOptionalInterfaceType();
+    element.mixins = reader._readInterfaceTypeList();
+    element.interfaces = reader._readInterfaceTypeList();
     applyConstantOffsets?.perform();
   }
 }
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 489d45d..6cc91be 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -176,6 +176,10 @@
     _resolutionSink._writeAnnotationList(element.metadata);
 
     _writeTypeParameters(element.typeParameters, () {
+      _resolutionSink.writeType(element.supertype);
+      _resolutionSink._writeTypeList(element.mixins);
+      _resolutionSink._writeTypeList(element.interfaces);
+
       _writeList(
         element.fields.where((e) {
           return !e.isSynthetic ||
diff --git a/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart b/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
index 0449c8c..cafb22c 100644
--- a/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
@@ -18,12 +18,16 @@
 
   void resolve() {
     for (var unitElement in _libraryElement.units) {
-      var classElements = [...unitElement.classes, ...unitElement.mixins];
+      var classElements = [
+        ...unitElement.classes,
+        ...unitElement.enums,
+        ...unitElement.mixins,
+      ];
       for (var classElement in classElements) {
         for (var constructorElement in classElement.constructors) {
           _constructor(
             unitElement as CompilationUnitElementImpl,
-            classElement as ClassElementImpl,
+            classElement as AbstractClassElementImpl,
             constructorElement as ConstructorElementImpl,
           );
         }
@@ -33,7 +37,7 @@
 
   void _constructor(
     CompilationUnitElementImpl unitElement,
-    ClassElementImpl classElement,
+    AbstractClassElementImpl classElement,
     ConstructorElementImpl element,
   ) {
     if (element.isSynthetic) return;
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 667c275..a8fdcde 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -150,7 +150,7 @@
       }
     });
 
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
   }
@@ -220,9 +220,6 @@
       hasConstConstructor: true,
     );
 
-    var needsImplicitConstructor =
-        !node.members.any((e) => e is ConstructorDeclaration);
-
     // Build fields for all enum constants.
     var constants = node.constants;
     var valuesElements = <Expression>[];
@@ -231,6 +228,7 @@
       var name = constant.name.name;
       var field = ConstFieldElementImpl(name, constant.name.offset)
         ..hasImplicitType = true
+        ..hasInitializer = true
         ..isConst = true
         ..isEnumConstant = true
         ..isStatic = true
@@ -243,7 +241,7 @@
       );
 
       var constructorSelector = constant.arguments?.constructorSelector;
-      var constructorName = constructorSelector?.name.name ?? '';
+      var constructorName = constructorSelector?.name.name;
 
       var initializer = astFactory.instanceCreationExpression(
         null,
@@ -254,10 +252,12 @@
             ),
             typeArguments: constant.arguments?.typeArguments,
           ),
-          Tokens.period(),
-          astFactory.simpleIdentifier(
-            StringToken(TokenType.STRING, constructorName, -1),
-          ),
+          constructorName != null ? Tokens.period() : null,
+          constructorName != null
+              ? astFactory.simpleIdentifier(
+                  StringToken(TokenType.STRING, constructorName, -1),
+                )
+              : null,
         ),
         astFactory.argumentList(
           Tokens.openParenthesis(),
@@ -339,22 +339,18 @@
       holder.addNonSyntheticField(valuesField);
     }
 
-    // TODO(scheglov) implement
-    // node.extendsClause?.accept(this);
-    // node.withClause?.accept(this);
-    // node.implementsClause?.accept(this);
-
-    // Build the 'index' field.
-    var indexField = ConstFieldElementImpl('index', -1)
-      ..isFinal = true
-      ..isSynthetic = true;
-    holder.addNonSyntheticField(indexField);
+    node.withClause?.accept(this);
+    node.implementsClause?.accept(this);
 
     _withEnclosing(holder, () {
       node.typeParameters?.accept(this);
       _visitPropertyFirst<FieldDeclaration>(node.members);
     });
 
+    var needsImplicitConstructor = !holder.constructors.any(
+      (e) => e.name.isEmpty || e.isGenerative,
+    );
+
     if (needsImplicitConstructor) {
       holder.addConstructor(
         ConstructorElementImpl('', -1)
@@ -363,20 +359,11 @@
       );
     }
 
-    MethodElementImpl? syntheticToStringMethod;
-    if (holder.getMethod('toString').element == null) {
-      syntheticToStringMethod = MethodElementImpl('toString', -1)
-        ..isSynthetic = true;
-      holder.addMethod(name, syntheticToStringMethod);
-    }
-
     _libraryBuilder.implicitEnumNodes.add(
       ImplicitEnumNodes(
         element: element,
-        indexField: indexField,
         valuesTypeNode: valuesTypeNode,
         valuesField: valuesField,
-        syntheticToStringMethod: syntheticToStringMethod,
       ),
     );
 
@@ -386,7 +373,7 @@
     element.methods = holder.methods;
     element.typeParameters = holder.typeParameters;
 
-    // TODO(scheglov) resolve field formals
+    _resolveConstructorFieldFormals(element);
   }
 
   @override
@@ -403,7 +390,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
   }
 
   @override
@@ -420,7 +407,7 @@
     node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
-    var refName = name ?? 'extension-${_nextUnnamedExtensionId++}';
+    var refName = name ?? '${_nextUnnamedExtensionId++}';
     var reference = _enclosingContext.addExtension(refName, element);
 
     if (name != null) {
@@ -565,6 +552,7 @@
     if (node.isGetter) {
       var element = PropertyAccessorElementImpl(name, nameOffset);
       element.isGetter = true;
+      element.isStatic = true;
 
       reference = _enclosingContext.addGetter(name, element);
       executableElement = element;
@@ -573,6 +561,7 @@
     } else if (node.isSetter) {
       var element = PropertyAccessorElementImpl(name, nameOffset);
       element.isSetter = true;
+      element.isStatic = true;
 
       reference = _enclosingContext.addSetter(name, element);
       executableElement = element;
@@ -580,6 +569,7 @@
       _buildSyntheticVariable(name: name, accessorElement: element);
     } else {
       var element = FunctionElementImpl(name, nameOffset);
+      element.isStatic = true;
       reference = _enclosingContext.addFunction(name, element);
       executableElement = element;
     }
@@ -754,7 +744,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces2.accept(this);
+    node.interfaces.accept(this);
   }
 
   @override
@@ -814,6 +804,14 @@
       element.isGetter = true;
       element.isStatic = node.isStatic;
 
+      // `class Enum {}` in `dart:core` declares `int get index` as abstract.
+      // But the specification says that practically a different class
+      // implementing `Enum` is used as a superclass, so `index` should be
+      // considered to have non-abstract implementation.
+      if (_enclosingContext.isDartCoreEnum && name == 'index') {
+        element.isAbstract = false;
+      }
+
       reference = _enclosingContext.addGetter(name, element);
       executableElement = element;
 
@@ -902,7 +900,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    node.superclassConstraints2.accept(this);
+    node.superclassConstraints.accept(this);
   }
 
   @override
@@ -1099,7 +1097,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes2.accept(this);
+    node.mixinTypes.accept(this);
   }
 
   List<ElementAnnotation> _buildAnnotations(List<Annotation> nodeList) {
@@ -1117,9 +1115,6 @@
     _withEnclosing(holder, () {
       _visitPropertyFirst<FieldDeclaration>(node.members);
     });
-    element.accessors = holder.propertyAccessors;
-    element.fields = holder.properties.whereType<FieldElement>().toList();
-    element.methods = holder.methods;
 
     if (holder.constructors.isEmpty) {
       holder.addConstructor(
@@ -1127,18 +1122,12 @@
       );
     }
 
-    var constructors = holder.constructors;
-    element.constructors = constructors;
+    element.accessors = holder.propertyAccessors;
+    element.constructors = holder.constructors;
+    element.fields = holder.properties.whereType<FieldElement>().toList();
+    element.methods = holder.methods;
 
-    // We have all fields and constructors.
-    // Now we can resolve field formal parameters.
-    for (var constructor in constructors) {
-      for (var parameter in constructor.parameters) {
-        if (parameter is FieldFormalParameterElementImpl) {
-          parameter.field = element.getField(parameter.name);
-        }
-      }
-    }
+    _resolveConstructorFieldFormals(element);
   }
 
   void _buildExecutableElementChildren({
@@ -1204,6 +1193,16 @@
     node?.accept(this);
   }
 
+  void _resolveConstructorFieldFormals(AbstractClassElementImpl element) {
+    for (var constructor in element.constructors) {
+      for (var parameter in constructor.parameters) {
+        if (parameter is FieldFormalParameterElementImpl) {
+          parameter.field = element.getField(parameter.name);
+        }
+      }
+    }
+  }
+
   Uri? _selectAbsoluteUri(NamespaceDirective directive) {
     var relativeUriStr = _selectRelativeUri(
       directive.configurations,
@@ -1372,6 +1371,11 @@
     this.hasConstConstructor = false,
   });
 
+  bool get isDartCoreEnum {
+    final element = this.element;
+    return element is ClassElementImpl && element.isDartCoreEnum;
+  }
+
   Reference addClass(String name, ClassElementImpl element) {
     classes.add(element);
     return _bindReference('@class', name, element);
diff --git a/pkg/analyzer/lib/src/summary2/element_flags.dart b/pkg/analyzer/lib/src/summary2/element_flags.dart
index ff4cdbc..201c671 100644
--- a/pkg/analyzer/lib/src/summary2/element_flags.dart
+++ b/pkg/analyzer/lib/src/summary2/element_flags.dart
@@ -119,6 +119,7 @@
   static const int _isAsynchronous = 1 << 1;
   static const int _isExternal = 1 << 2;
   static const int _isGenerator = 1 << 3;
+  static const int _isStatic = 1 << 4;
 
   static void read(SummaryDataReader reader, FunctionElementImpl element) {
     var byte = reader.readByte();
@@ -126,6 +127,7 @@
     element.isAsynchronous = (byte & _isAsynchronous) != 0;
     element.isExternal = (byte & _isExternal) != 0;
     element.isGenerator = (byte & _isGenerator) != 0;
+    element.isStatic = (byte & _isStatic) != 0;
   }
 
   static void write(BufferedSink sink, FunctionElementImpl element) {
@@ -134,6 +136,7 @@
     result |= element.isAsynchronous ? _isAsynchronous : 0;
     result |= element.isExternal ? _isExternal : 0;
     result |= element.isGenerator ? _isGenerator : 0;
+    result |= element.isStatic ? _isStatic : 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 1d68050..e2bf8ca 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -1051,7 +1051,7 @@
     sink.writeUInt30(unit.offset);
     sink.writeUInt30(unit.length);
 
-    sink.writeUint30List(unit.lineInfo?.lineStarts ?? [0]);
+    sink.writeUint30List(unit.lineInfo.lineStarts);
 
     _writeLibraryName(unit);
 
@@ -1740,7 +1740,7 @@
   void _applyToEnumConstantInitializer(ConstFieldElementImpl element) {
     var initializer = element.constantInitializer;
     if (initializer is InstanceCreationExpression) {
-      initializer.constructorName.type2.typeArguments?.accept(this);
+      initializer.constructorName.type.typeArguments?.accept(this);
       for (var argument in initializer.argumentList.arguments) {
         argument.accept(this);
       }
@@ -1754,6 +1754,7 @@
   @override
   void visitAnnotation(Annotation node) {
     _tokenOrNull(node.atSign);
+    _tokenOrNull(node.period);
     super.visitAnnotation(node);
   }
 
@@ -1774,6 +1775,7 @@
   void visitAssertInitializer(AssertInitializer node) {
     _tokenOrNull(node.assertKeyword);
     _tokenOrNull(node.leftParenthesis);
+    _tokenOrNull(node.comma);
     _tokenOrNull(node.rightParenthesis);
     super.visitAssertInitializer(node);
   }
@@ -1811,7 +1813,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    node.type2.accept(this);
+    node.type.accept(this);
     _tokenOrNull(node.period);
     node.name?.accept(this);
   }
@@ -1824,6 +1826,8 @@
   @override
   void visitFormalParameterList(FormalParameterList node) {
     _tokenOrNull(node.leftParenthesis);
+    _tokenOrNull(node.leftDelimiter);
+    _tokenOrNull(node.rightDelimiter);
     _tokenOrNull(node.rightParenthesis);
     super.visitFormalParameterList(node);
   }
@@ -1835,6 +1839,15 @@
   }
 
   @override
+  void visitIfElement(IfElement node) {
+    _tokenOrNull(node.ifKeyword);
+    _tokenOrNull(node.leftParenthesis);
+    _tokenOrNull(node.rightParenthesis);
+    _tokenOrNull(node.elseKeyword);
+    super.visitIfElement(node);
+  }
+
+  @override
   void visitIndexExpression(IndexExpression node) {
     _tokenOrNull(node.leftBracket);
     _tokenOrNull(node.rightBracket);
@@ -1872,6 +1885,12 @@
   }
 
   @override
+  void visitLabel(Label node) {
+    _tokenOrNull(node.colon);
+    super.visitLabel(node);
+  }
+
+  @override
   void visitListLiteral(ListLiteral node) {
     _tokenOrNull(node.constKeyword);
     _tokenOrNull(node.leftBracket);
@@ -1880,6 +1899,12 @@
   }
 
   @override
+  void visitMapLiteralEntry(MapLiteralEntry node) {
+    _tokenOrNull(node.separator);
+    super.visitMapLiteralEntry(node);
+  }
+
+  @override
   void visitMethodInvocation(MethodInvocation node) {
     node.target?.accept(this);
     _tokenOrNull(node.operator);
@@ -1889,6 +1914,12 @@
   }
 
   @override
+  void visitNamedType(NamedType node) {
+    _tokenOrNull(node.question);
+    super.visitNamedType(node);
+  }
+
+  @override
   void visitNullLiteral(NullLiteral node) {
     _tokenOrNull(node.literal);
   }
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index aa57e1e..36f7c25 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -22,17 +22,13 @@
 
 class ImplicitEnumNodes {
   final EnumElementImpl element;
-  final FieldElementImpl indexField;
   final ast.NamedTypeImpl valuesTypeNode;
   final ConstFieldElementImpl valuesField;
-  final MethodElementImpl? syntheticToStringMethod;
 
   ImplicitEnumNodes({
     required this.element,
-    required this.indexField,
     required this.valuesTypeNode,
     required this.valuesField,
-    required this.syntheticToStringMethod,
   });
 }
 
@@ -134,7 +130,8 @@
   void buildEnumChildren() {
     var typeProvider = element.typeProvider;
     for (var enum_ in implicitEnumNodes) {
-      enum_.indexField.type = typeProvider.intType;
+      enum_.element.supertype =
+          typeProvider.enumType ?? typeProvider.objectType;
       var valuesType = typeProvider.listType(
         element.typeSystem.instantiateToBounds2(
           classElement: enum_.element,
@@ -143,7 +140,6 @@
       );
       enum_.valuesTypeNode.type = valuesType;
       enum_.valuesField.type = valuesType;
-      enum_.syntheticToStringMethod?.returnType = typeProvider.stringType;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 21183bd..01ddaa6 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -71,9 +71,10 @@
 
     var reader = _libraryReaders[uriStr];
     if (reader == null) {
+      var libraryUriList = rootReference.children.map((e) => e.name).toList();
       throw ArgumentError(
         'Missing library: $uriStr\n'
-        'Available libraries: ${_libraryReaders.keys.toList()}',
+        'Available libraries: $libraryUriList',
       );
     }
 
diff --git a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
index 63659bb7..faac307 100644
--- a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
@@ -78,7 +78,15 @@
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
     node.metadata.accept(this);
-    node.constants.accept(this);
+    node.typeParameters?.accept(this);
+
+    _scope = LinkingNodeContext.get(node).scope;
+    try {
+      node.constants.accept(this);
+      node.members.accept(this);
+    } finally {
+      _scope = _libraryScope;
+    }
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/named_type_builder.dart b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
index e6cd97a..9b4f698 100644
--- a/pkg/analyzer/lib/src/summary2/named_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
@@ -103,7 +103,7 @@
         typeArguments: arguments,
         nullabilitySuffix: nullabilitySuffix,
       );
-      type = typeSystem.toLegacyType(type) as InterfaceType;
+      type = typeSystem.toLegacyTypeIfOptOut(type) as InterfaceType;
       _type = type;
     } else if (element is TypeAliasElementImpl) {
       var aliasedType = _getAliasedType(element);
@@ -114,7 +114,7 @@
         typeArguments: arguments,
         nullabilitySuffix: nullabilitySuffix,
       );
-      type = typeSystem.toLegacyType(type);
+      type = typeSystem.toLegacyTypeIfOptOut(type);
       _type = type;
     } else if (element is NeverElementImpl) {
       if (typeSystem.isNonNullableByDefault) {
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index dd5b4cc..1cecbd4 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -80,7 +80,7 @@
     LinkingNodeContext(node, scope);
 
     node.typeParameters?.accept(this);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
     nodesToBuildType.addDeclaration(node);
@@ -122,10 +122,8 @@
     scope = TypeParameterScope(scope, element.typeParameters);
 
     node.typeParameters?.accept(this);
-    // TODO(scheglov) implement
-    // node.extendsClause?.accept(this);
-    // node.implementsClause?.accept(this);
-    // node.withClause?.accept(this);
+    node.implementsClause?.accept(this);
+    node.withClause?.accept(this);
 
     scope = ClassScope(scope, element);
     LinkingNodeContext(node, scope);
@@ -141,7 +139,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
   }
 
   @override
@@ -289,7 +287,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces2.accept(this);
+    node.interfaces.accept(this);
   }
 
   @override
@@ -386,7 +384,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    node.superclassConstraints2.accept(this);
+    node.superclassConstraints.accept(this);
   }
 
   @override
@@ -444,7 +442,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes2.accept(this);
+    node.mixinTypes.accept(this);
   }
 
   NullabilitySuffix _getNullabilitySuffix(bool hasQuestion) {
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 004c65b..993aa69 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -351,6 +351,7 @@
         _unitElement = unit as CompilationUnitElementImpl;
         unit.classes.forEach(_addClassConstructorFieldFormals);
         unit.classes.forEach(_addClassElementFields);
+        unit.enums.forEach(_addClassConstructorFieldFormals);
         unit.enums.forEach(_addClassElementFields);
         unit.extensions.forEach(_addExtensionElementFields);
         unit.mixins.forEach(_addClassElementFields);
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 795d229..f69284f 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -122,7 +122,7 @@
 
     var extendsClause = node.extendsClause;
     if (extendsClause != null) {
-      var type = extendsClause.superclass2.type;
+      var type = extendsClause.superclass.type;
       if (type is InterfaceType && _isInterfaceTypeClass(type)) {
         element.supertype = type;
       } else {
@@ -135,18 +135,18 @@
     }
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause?.mixinTypes2,
+      node.withClause?.mixinTypes,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
   void _classTypeAlias(ClassTypeAlias node) {
     var element = node.declaredElement as ClassElementImpl;
 
-    var superType = node.superclass2.type;
+    var superType = node.superclass.type;
     if (superType is InterfaceType && _isInterfaceTypeInterface(superType)) {
       element.supertype = superType;
     } else {
@@ -154,11 +154,11 @@
     }
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause.mixinTypes2,
+      node.withClause.mixinTypes,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
@@ -223,7 +223,15 @@
   }
 
   void _enumDeclaration(EnumDeclaration node) {
-    // TODO(scheglov) implement
+    var element = node.declaredElement as EnumElementImpl;
+
+    element.mixins = _toInterfaceTypeList(
+      node.withClause?.mixinTypes,
+    );
+
+    element.interfaces = _toInterfaceTypeList(
+      node.implementsClause?.interfaces,
+    );
   }
 
   void _extensionDeclaration(ExtensionDeclaration node) {
@@ -294,7 +302,7 @@
     var element = node.declaredElement as MixinElementImpl;
 
     var constraints = _toInterfaceTypeList(
-      node.onClause?.superclassConstraints2,
+      node.onClause?.superclassConstraints,
     );
     if (constraints.isEmpty) {
       constraints = [_objectType(element)];
@@ -302,7 +310,7 @@
     element.superclassConstraints = constraints;
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
@@ -362,7 +370,7 @@
 
 /// Performs mixins inference in a [ClassDeclaration].
 class _MixinInference {
-  final ClassElementImpl element;
+  final AbstractClassElementImpl element;
   final TypeSystemImpl typeSystem;
   final FeatureSet featureSet;
   final InterfaceType classType;
@@ -387,7 +395,7 @@
   void perform(WithClause? withClause) {
     if (withClause == null) return;
 
-    for (var mixinNode in withClause.mixinTypes2) {
+    for (var mixinNode in withClause.mixinTypes) {
       var mixinType = _inferSingle(mixinNode as NamedTypeImpl);
       interfacesMerger.addWithSupertypes(mixinType);
     }
@@ -512,14 +520,15 @@
   /// we are inferring the [element] now, i.e. there is a loop.
   ///
   /// This is an error. So, we return the empty list, and break the loop.
-  List<InterfaceType> _callbackWhenLoop(ClassElementImpl element) {
+  List<InterfaceType> _callbackWhenLoop(AbstractClassElementImpl element) {
     element.mixinInferenceCallback = null;
     return <InterfaceType>[];
   }
 
   /// This method is invoked when mixins are asked from the [element], and
   /// we are not inferring the [element] now, i.e. there is no loop.
-  List<InterfaceType>? _callbackWhenRecursion(ClassElementImpl element) {
+  List<InterfaceType>? _callbackWhenRecursion(
+      AbstractClassElementImpl element) {
     var node = _linker.getLinkingNode(element);
     if (node != null) {
       _inferDeclaration(node);
@@ -528,7 +537,7 @@
     return null;
   }
 
-  void _infer(ClassElementImpl element, WithClause? withClause) {
+  void _infer(AbstractClassElementImpl element, WithClause? withClause) {
     if (withClause != null) {
       element.mixinInferenceCallback = _callbackWhenLoop;
       try {
@@ -537,7 +546,7 @@
       } finally {
         element.mixinInferenceCallback = null;
         element.mixins = _toInterfaceTypeList(
-          withClause.mixinTypes2,
+          withClause.mixinTypes,
         );
       }
     }
@@ -550,6 +559,9 @@
     } else if (node is ClassTypeAlias) {
       var element = node.declaredElement as ClassElementImpl;
       _infer(element, node.withClause);
+    } else if (node is EnumDeclaration) {
+      var element = node.declaredElement as EnumElementImpl;
+      _infer(element, node.withClause);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart
index 7159665..0c572a2 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_element.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/test_utilities/function_ast_visitor.dart';
+import 'package:collection/src/iterable_extensions.dart';
 
 /// Helper for finding elements declared in the resolved [unit].
 class FindElement extends _FindElementBase {
@@ -406,147 +407,27 @@
   }
 
   FieldElement field(String name, {String? of}) {
-    FieldElement? result;
-
-    void findIn(List<FieldElement> fields) {
-      for (var field in fields) {
-        if (field.name == name) {
-          if (result != null) {
-            throw StateError('Not unique: $name');
-          }
-          result = field;
-        }
-      }
-    }
-
-    for (var enum_ in unitElement.enums) {
-      if (of != null && enum_.name != of) {
-        continue;
-      }
-      findIn(enum_.fields);
-    }
-
-    for (var class_ in unitElement.classes) {
-      if (of != null && class_.name != of) {
-        continue;
-      }
-      findIn(class_.fields);
-    }
-
-    for (var mixin in unitElement.mixins) {
-      if (of != null && mixin.name != of) {
-        continue;
-      }
-      findIn(mixin.fields);
-    }
-
-    for (var extension in unitElement.extensions) {
-      if (of != null && extension.name != of) {
-        continue;
-      }
-      findIn(extension.fields);
-    }
-
-    if (result != null) {
-      return result!;
-    }
-    throw StateError('Not found: $name');
+    return _findInClassesLike(
+      className: of,
+      fromClass: (element) => element.getField(name),
+      fromExtension: (element) => element.getField(name),
+    );
   }
 
   PropertyAccessorElement getter(String name, {String? of}) {
-    PropertyAccessorElement? result;
-
-    void findIn(List<PropertyAccessorElement> accessors) {
-      for (var accessor in accessors) {
-        if (accessor.isGetter && accessor.displayName == name) {
-          if (result != null) {
-            throw StateError('Not unique: $name');
-          }
-          result = accessor;
-        }
-      }
-    }
-
-    for (var enum_ in unitElement.enums) {
-      if (of != null && enum_.name != of) {
-        continue;
-      }
-      findIn(enum_.accessors);
-    }
-
-    for (var extension_ in unitElement.extensions) {
-      if (of != null && extension_.name != of) {
-        continue;
-      }
-      findIn(extension_.accessors);
-    }
-
-    for (var class_ in unitElement.classes) {
-      if (of != null && class_.name != of) {
-        continue;
-      }
-      findIn(class_.accessors);
-    }
-
-    for (var mixin in unitElement.mixins) {
-      if (of != null && mixin.name != of) {
-        continue;
-      }
-      findIn(mixin.accessors);
-    }
-
-    if (result != null) {
-      return result!;
-    }
-    throw StateError('Not found: $name');
+    return _findInClassesLike(
+      className: of,
+      fromClass: (element) => element.getGetter(name),
+      fromExtension: (element) => element.getGetter(name),
+    );
   }
 
   MethodElement method(String name, {String? of}) {
-    MethodElement? result;
-
-    void findIn(List<MethodElement> methods) {
-      for (var method in methods) {
-        if (method.name == name) {
-          if (result != null) {
-            throw StateError('Not unique: $name');
-          }
-          result = method;
-        }
-      }
-    }
-
-    for (var class_ in unitElement.classes) {
-      if (of != null && class_.name != of) {
-        continue;
-      }
-      findIn(class_.methods);
-    }
-
-    for (var enum_ in unitElement.enums) {
-      if (of != null && enum_.name != of) {
-        continue;
-      }
-      findIn(enum_.methods);
-    }
-
-    for (var extension_ in unitElement.extensions) {
-      if (of != null && extension_.name != of) {
-        continue;
-      }
-      findIn(extension_.methods);
-    }
-
-    for (var mixin in unitElement.mixins) {
-      if (of != null && mixin.name != of) {
-        continue;
-      }
-      findIn(mixin.methods);
-    }
-
-    if (result != null) {
-      return result!;
-    }
-    throw StateError('Not found: $name');
+    return _findInClassesLike(
+      className: of,
+      fromClass: (element) => element.getMethod(name),
+      fromExtension: (element) => element.getMethod(name),
+    );
   }
 
   ClassElement mixin(String name) {
@@ -581,44 +462,11 @@
   }
 
   PropertyAccessorElement setter(String name, {String? of}) {
-    PropertyAccessorElement? result;
-
-    void findIn(List<PropertyAccessorElement> accessors) {
-      for (var accessor in accessors) {
-        if (accessor.isSetter && accessor.displayName == name) {
-          if (result != null) {
-            throw StateError('Not unique: $name');
-          }
-          result = accessor;
-        }
-      }
-    }
-
-    for (var extension_ in unitElement.extensions) {
-      if (of != null && extension_.name != of) {
-        continue;
-      }
-      findIn(extension_.accessors);
-    }
-
-    for (var class_ in unitElement.classes) {
-      if (of != null && class_.name != of) {
-        continue;
-      }
-      findIn(class_.accessors);
-    }
-
-    for (var mixin in unitElement.mixins) {
-      if (of != null && mixin.name != of) {
-        continue;
-      }
-      findIn(mixin.accessors);
-    }
-
-    if (result != null) {
-      return result!;
-    }
-    throw StateError('Not found: $name');
+    return _findInClassesLike(
+      className: of,
+      fromClass: (element) => element.getSetter(name),
+      fromExtension: (element) => element.getSetter(name),
+    );
   }
 
   FunctionElement topFunction(String name) {
@@ -657,7 +505,43 @@
   }
 
   ConstructorElement unnamedConstructor(String name) {
-    return class_(name).unnamedConstructor!;
+    return _findInClassesLike(
+      className: name,
+      fromClass: (e) => e.unnamedConstructor,
+      fromExtension: (_) => null,
+    );
+  }
+
+  T _findInClassesLike<T extends Element>({
+    required String? className,
+    required T? Function(ClassElement element) fromClass,
+    required T? Function(ExtensionElement element) fromExtension,
+  }) {
+    bool filter(Element element) {
+      return className == null || element.name == className;
+    }
+
+    var classes = [
+      ...unitElement.classes,
+      ...unitElement.enums,
+      ...unitElement.mixins,
+    ];
+
+    var results = [
+      ...classes.where(filter).map(fromClass),
+      ...unitElement.extensions.where(filter).map(fromExtension),
+    ].whereNotNull().toList();
+
+    var result = results.singleOrNull;
+    if (result != null) {
+      return result;
+    }
+
+    if (results.isEmpty) {
+      throw StateError('Not found');
+    } else {
+      throw StateError('Not unique');
+    }
   }
 }
 
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index b25d26f..d137ec9 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -127,6 +127,10 @@
     return _node(search, (n) => n is ConstructorReference);
   }
 
+  ConstructorSelector constructorSelector(String search) {
+    return _node(search, (n) => n is ConstructorSelector);
+  }
+
   ContinueStatement continueStatement(String search) {
     return _node(search, (n) => n is ContinueStatement);
   }
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_packages.dart b/pkg/analyzer/lib/src/test_utilities/mock_packages.dart
index 9c4b72b..5c68765 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_packages.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_packages.dart
@@ -51,25 +51,62 @@
     libFolder.getChildAssumingFile('meta.dart').writeAsStringSync(r'''
 library meta;
 
-const _AlwaysThrows alwaysThrows = const _AlwaysThrows();
-const _DoNotStore doNotStore = _DoNotStore();
-const _Factory factory = const _Factory();
-const Immutable immutable = const Immutable();
-const _Internal internal = const Internal();
-const _Literal literal = const _Literal();
-const _MustCallSuper mustCallSuper = const _MustCallSuper();
-const _NonVirtual nonVirtual = const _NonVirtual();
-const _OptionalTypeArgs optionalTypeArgs = const _OptionalTypeArgs();
-const _Protected protected = const _Protected();
-const Required required = const Required();
-const _Sealed sealed = const _Sealed();
-const UseResult useResult = UseResult();
-const _VisibleForOverriding visibleForOverriding = _VisibleForOverriding();
-const _VisibleForTesting visibleForTesting = const _VisibleForTesting();
+import 'meta_meta.dart';
 
-class _AlwaysThrows {
-  const _AlwaysThrows();
+const _AlwaysThrows alwaysThrows = _AlwaysThrows();
+
+@Deprecated('Use the `covariant` modifier instead')
+const _Checked checked = _Checked();
+
+const _DoNotStore doNotStore = _DoNotStore();
+
+const _Experimental experimental = _Experimental();
+
+const _Factory factory = _Factory();
+
+const Immutable immutable = Immutable();
+
+const _Internal internal = _Internal();
+
+const _IsTest isTest = _IsTest();
+
+const _IsTestGroup isTestGroup = _IsTestGroup();
+
+const _Literal literal = _Literal();
+
+const _MustCallSuper mustCallSuper = _MustCallSuper();
+
+const _NonVirtual nonVirtual = _NonVirtual();
+
+const _OptionalTypeArgs optionalTypeArgs = _OptionalTypeArgs();
+
+const _Protected protected = _Protected();
+
+const Required required = Required();
+
+const _Sealed sealed = _Sealed();
+
+const UseResult useResult = UseResult();
+
+@Deprecated('No longer has meaning')
+const _Virtual virtual = _Virtual();
+
+const _VisibleForOverriding visibleForOverriding = _VisibleForOverriding();
+
+const _VisibleForTesting visibleForTesting = _VisibleForTesting();
+
+class Immutable {
+  final String reason;
+
+  const Immutable([this.reason = '']);
 }
+
+class Required {
+  final String reason;
+
+  const Required([this.reason = '']);
+}
+
 @Target({
   TargetKind.field,
   TargetKind.function,
@@ -77,50 +114,91 @@
   TargetKind.method,
   TargetKind.topLevelVariable,
 })
+class UseResult {
+  final String reason;
+
+  final String? parameterDefined;
+
+  const UseResult([this.reason = '']) : parameterDefined = null;
+
+  const UseResult.unless({required this.parameterDefined, this.reason = ''});
+}
+
+class _AlwaysThrows {
+  const _AlwaysThrows();
+}
+
+class _Checked {
+  const _Checked();
+}
+
+@Target({
+  TargetKind.classType,
+  TargetKind.function,
+  TargetKind.getter,
+  TargetKind.library,
+  TargetKind.method,
+})
 class _DoNotStore {
   const _DoNotStore();
 }
+
+class _Experimental {
+  const _Experimental();
+}
+
 class _Factory {
   const _Factory();
 }
-class Immutable {
-  final String reason;
-  const Immutable([this.reason]);
-}
+
 class _Internal {
-  const Internal();
+  const _Internal();
 }
+
+class _IsTest {
+  const _IsTest();
+}
+
+class _IsTestGroup {
+  const _IsTestGroup();
+}
+
 class _Literal {
   const _Literal();
 }
+
 class _MustCallSuper {
   const _MustCallSuper();
 }
+
 class _NonVirtual {
   const _NonVirtual();
 }
+
+@Target({
+  TargetKind.classType,
+  TargetKind.extension,
+  TargetKind.function,
+  TargetKind.method,
+  TargetKind.mixinType,
+  TargetKind.typedefType,
+})
 class _OptionalTypeArgs {
   const _OptionalTypeArgs();
 }
+
 class _Protected {
   const _Protected();
 }
-class Required {
-  final String reason;
-  const Required([this.reason]);
-}
+
 class _Sealed {
   const _Sealed();
 }
-class UseResult {
-  final String? parameterDefined;
-  final String reason;
-  const UseResult([this.reason = '']);
-  const UseResult.unless({required this.parameterDefined, this.reason = ''});
-}
+
 class _VisibleForOverriding {
   const _VisibleForOverriding();
 }
+
 class _VisibleForTesting {
   const _VisibleForTesting();
 }
@@ -128,10 +206,12 @@
     libFolder.getChildAssumingFile('meta_meta.dart').writeAsStringSync(r'''
 library meta_meta;
 
+@Target({TargetKind.classType})
 class Target {
   final Set<TargetKind> kinds;
   const Target(this.kinds);
 }
+
 enum TargetKind {
   classType,
   enumType,
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index 84784c3..d1cb139 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -624,6 +624,8 @@
 
 class Type {}
 
+class TypeError extends Error {}
+
 class UnsupportedError {
   UnsupportedError(String message);
 }
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 c082771..867272e 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -14,6 +14,11 @@
 
   String convertPath(String path) => resourceProvider.convertPath(path);
 
+  void deleteAnalysisOptionsYamlFile(String directoryPath) {
+    var path = join(directoryPath, file_paths.analysisOptionsYaml);
+    deleteFile(path);
+  }
+
   void deleteFile(String path) {
     String convertedPath = convertPath(path);
     resourceProvider.deleteFile(convertedPath);
@@ -24,6 +29,15 @@
     resourceProvider.deleteFolder(convertedPath);
   }
 
+  void deletePackageConfigJsonFile(String directoryPath) {
+    var path = join(
+      directoryPath,
+      file_paths.dotDartTool,
+      file_paths.packageConfigJson,
+    );
+    deleteFile(path);
+  }
+
   File getFile(String path) {
     String convertedPath = convertPath(path);
     return resourceProvider.getFile(convertedPath);
diff --git a/pkg/analyzer/lib/src/util/sdk.dart b/pkg/analyzer/lib/src/util/sdk.dart
index d588cc3..6e73efb 100644
--- a/pkg/analyzer/lib/src/util/sdk.dart
+++ b/pkg/analyzer/lib/src/util/sdk.dart
@@ -6,27 +6,5 @@
 
 import 'package:path/path.dart' as path;
 
-String getSdkPath([List<String>? args]) {
-  // Look for --dart-sdk on the command line.
-  if (args != null) {
-    int index = args.indexOf('--dart-sdk');
-
-    if (index != -1 && (index + 1 < args.length)) {
-      return args[index + 1];
-    }
-
-    for (String arg in args) {
-      if (arg.startsWith('--dart-sdk=')) {
-        return arg.substring('--dart-sdk='.length);
-      }
-    }
-  }
-
-  // Look in env['DART_SDK']
-  if (Platform.environment['DART_SDK'] != null) {
-    return Platform.environment['DART_SDK']!;
-  }
-
-  // Use Platform.resolvedExecutable.
-  return path.dirname(path.dirname(Platform.resolvedExecutable));
-}
+/// Return the path to the runtime Dart SDK.
+String getSdkPath() => path.dirname(path.dirname(Platform.resolvedExecutable));
diff --git a/pkg/analyzer/lib/src/workspace/bazel.dart b/pkg/analyzer/lib/src/workspace/bazel.dart
index 5198c44..7350937 100644
--- a/pkg/analyzer/lib/src/workspace/bazel.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel.dart
@@ -83,7 +83,7 @@
   }
 
   Source? _resolveAbsolute(Uri uri) {
-    if (uri.scheme == 'file') {
+    if (uri.isScheme('file')) {
       var path = fileUriToNormalizedPath(_context, uri);
       var pathRelativeToRoot = _workspace._relativeToRoot(path);
       if (pathRelativeToRoot == null) return null;
@@ -91,7 +91,7 @@
       var file = _workspace.findFile(fullFilePath);
       return file?.createSource(uri);
     }
-    if (uri.scheme != 'package') {
+    if (!uri.isScheme('package')) {
       return null;
     }
     String uriPath = Uri.decodeComponent(uri.path);
@@ -692,13 +692,16 @@
           .getFolder(root)
           .getChildAssumingFile('BUILD')
           .readAsStringSync();
-      var hasNonNullableFlag = buildContent
+      var flattenedBuildContent = buildContent
           .split('\n')
           .map((e) => e.trim())
           .where((e) => !e.startsWith('#'))
           .map((e) => e.replaceAll(' ', ''))
-          .join()
-          .contains('dart_package(null_safety=True');
+          .join();
+      var hasNonNullableFlag = const {
+        'dart_package(null_safety=True',
+        'dart_package(sound_null_safety=True',
+      }.any(flattenedBuildContent.contains);
       if (hasNonNullableFlag) {
         // Enabled by default.
       } else {
diff --git a/pkg/analyzer/lib/src/workspace/package_build.dart b/pkg/analyzer/lib/src/workspace/package_build.dart
index 4e06f04..c30333e 100644
--- a/pkg/analyzer/lib/src/workspace/package_build.dart
+++ b/pkg/analyzer/lib/src/workspace/package_build.dart
@@ -73,7 +73,7 @@
 
   @override
   Source? resolveAbsolute(Uri uri) {
-    if (uri.scheme != 'package') {
+    if (!uri.isScheme('package')) {
       return null;
     }
 
diff --git a/pkg/analyzer/lib/src/workspace/workspace.dart b/pkg/analyzer/lib/src/workspace/workspace.dart
index 34ab9c1..035744b 100644
--- a/pkg/analyzer/lib/src/workspace/workspace.dart
+++ b/pkg/analyzer/lib/src/workspace/workspace.dart
@@ -82,7 +82,7 @@
   /// example, the case of a [InSummarySource]). In this case, use
   /// [workspace]'s package URI resolver to fetch the file path.
   String? filePathFromSource(Source source) {
-    if (source.uri.scheme == 'package') {
+    if (source.uri.isScheme('package')) {
       return workspace.packageUriResolver.resolveAbsolute(source.uri)?.fullName;
     } else {
       return source.fullName;
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index d791d4c..477c268 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -1551,6 +1551,9 @@
     comment: |-
       Parameters:
       0: the name of the member
+  NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
+    problemMessage: Generative enum constructors must be 'const'.
+    correctionMessage: Try adding the keyword 'const'.
   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."
@@ -1632,6 +1635,9 @@
     correctionMessage: "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import."
     hasPublishedDocs: true
     comment: No parameters.
+  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.
   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}'."
@@ -1849,6 +1855,14 @@
       ```dart
       class C<T> {}
       ```
+  CONFLICTING_TYPE_VARIABLE_AND_ENUM:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
+    problemMessage: "'{0}' can't be used to name both a type variable and the enum in which the type variable is defined."
+    correctionMessage: Try renaming either the type variable or the enum.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
   CONFLICTING_TYPE_VARIABLE_AND_EXTENSION:
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
     problemMessage: "'{0}' can't be used to name both a type variable and the extension in which the type variable is defined."
@@ -1908,6 +1922,14 @@
     comment: |-
       Parameters:
       0: the name of the type variable
+  CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM:
+    sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+    problemMessage: "'{0}' can't be used to name both a type variable and a member in this enum."
+    correctionMessage: Try renaming either the type variable or the member.
+    hasPublishedDocs: true
+    comment: |-
+      Parameters:
+      0: the name of the type variable
   CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION:
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
     problemMessage: "'{0}' can't be used to name both a type variable and a member in this extension."
@@ -2758,7 +2780,32 @@
       Parameters:
       0: the name of the type
   CONTINUE_LABEL_ON_SWITCH:
-    problemMessage: A continue label resolves to switch, must be loop or switch member
+    problemMessage: A `continue` label resolves to a `switch` statement, but the label must be on a loop or a switch member.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the label in a `continue`
+      statement resolves to a label on a `switch` statement.
+
+      #### Example
+
+      The following code produces this diagnostic because the label `l`, used to
+      label a `switch` statement, is used in the `continue` statement:
+
+      ```dart
+      void f(int i) {
+        l: switch (i) {
+          case 0:
+            continue [!l!];
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Find a different way to achieve the control flow you need; for example, by
+      introducing a loop that re-executes the `switch` statement.
   COULD_NOT_INFER:
     problemMessage: "Couldn't infer type parameter '{0}'.{1}"
     comment: |-
@@ -3073,9 +3120,45 @@
       }
       ```
   DISALLOWED_TYPE_INSTANTIATION_EXPRESSION:
-    problemMessage: Only a generic type, generic function, generic instance method, or generic constructor can be type instantiated.
-    correctionMessage: Try instantiating the type(s) of a generic type, generic function, generic instance method, or generic constructor.
+    problemMessage: Only a generic type, generic function, generic instance method, or generic constructor can have type arguments.
+    correctionMessage: Try removing the type arguments, or instantiating the type(s) of a generic type, generic function, generic instance method, or generic constructor.
     comment: No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an expression with a value that
+      is anything other than one of the allowed kinds of values is followed by
+      type arguments. The allowed kinds of values are:
+      - generic types,
+      - generic constructors, and
+      - generic functions, including top-level functions, static and instance
+        members, and local functions.
+
+      #### Example
+
+      The following code produces this diagnostic because `i` is a top-level
+      variable, which isn't one of the allowed cases:
+
+      ```dart
+      int i = 1;
+
+      void f() {
+        print([!i!]<int>);
+      }
+      ```
+
+      #### Common fixes
+
+      If the referenced value is correct, then remove the type arguments:
+
+      ```dart
+      int i = 1;
+
+      void f() {
+        print(i);
+      }
+      ```
   DUPLICATE_CONSTRUCTOR_NAME:
     sharedName: DUPLICATE_CONSTRUCTOR
     problemMessage: "The constructor with name '{0}' is already defined."
@@ -3332,6 +3415,60 @@
   ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
     problemMessage: "The name of the enum constant can't be the same as the enum's name."
     correctionMessage: Try renaming the constant.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an enum constant has the same
+      name as the enum in which it's declared.
+
+      #### Example
+
+      The following code produces this diagnostic because the enum constant `E`
+      has the same name as the enclosing enum `E`:
+
+      ```dart
+      enum E {
+        [!E!]
+      }
+      ```
+
+      #### Common fixes
+
+      If the name of the enum is correct, then rename the constant:
+
+      ```dart
+      enum E {
+        e
+      }
+      ```
+
+      If the name of the constant is correct, then rename the enum:
+
+      ```dart
+      enum F {
+        E
+      }
+      ```
+  ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR:
+    problemMessage: The invoked constructor isn't a const constructor.
+    correctionMessage: Try invoking a const generative constructor.
+  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.
+  ENUM_WITH_ABSTRACT_MEMBER:
+    problemMessage: "'{0}' must have a method body because '{1}' is an enum."
+    correctionMessage: "Try adding a body to '{0}'."
+    comment: |-
+      Parameters:
+      0: the name of the abstract method
+      1: the name of the enclosing enum
+  ENUM_WITH_NAME_VALUES:
+    problemMessage: The name 'values' is not a valid name for an enum.
+    correctionMessage: Try using a different name.
   EQUAL_ELEMENTS_IN_CONST_SET:
     problemMessage: "Two elements in a constant set literal can't be equal."
     correctionMessage: Change or remove the duplicate element.
@@ -3975,14 +4112,61 @@
     sharedName: EXTERNAL_WITH_INITIALIZER
     problemMessage: External fields can't have initializers.
     correctionMessage: "Try removing the field initializer or the 'external' keyword from the field declaration."
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a field or variable marked with
+      the keyword `external` has an initializer, or when an external field is
+      initialized in a constructor.
+
+      #### Examples
+
+      The following code produces this diagnostic because the external field `x`
+      is assigned a value in an initializer:
+
+      ```dart
+      class C {
+        external int x;
+        C() : [!x!] = 0;
+      }
+      ```
+
+      The following code produces this diagnostic because the external field `x`
+      has an initializer:
+
+      ```dart
+      class C {
+        external final int [!x!] = 0;
+      }
+      ```
+
+      The following code produces this diagnostic because the external top level
+      variable `x` has an initializer:
+
+      ```dart
+      external final int [!x!] = 0;
+      ```
+
+      #### Common fixes
+
+      Remove the initializer:
+
+      ```dart
+      class C {
+        external final int x;
+      }
+      ```
   EXTERNAL_FIELD_INITIALIZER:
     sharedName: EXTERNAL_WITH_INITIALIZER
     problemMessage: External fields can't have initializers.
     correctionMessage: "Try removing the initializer or the 'external' keyword."
+    hasPublishedDocs: true
   EXTERNAL_VARIABLE_INITIALIZER:
     sharedName: EXTERNAL_WITH_INITIALIZER
     problemMessage: External variables can't have initializers.
     correctionMessage: "Try removing the initializer or the 'external' keyword."
+    hasPublishedDocs: true
   EXTRA_POSITIONAL_ARGUMENTS:
     problemMessage: "Too many positional arguments: {0} expected, but {1} found."
     correctionMessage: Try removing the extra arguments.
@@ -4314,9 +4498,42 @@
     problemMessage: Initializing formal parameters can only be used in constructors.
     correctionMessage: Try using a normal parameter.
     comment: |-
-      7.6.1 Generative Constructors: It is a compile-time error if an
-      initializing formal is used by a function other than a non-redirecting
-      generative constructor.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an initializing formal
+      parameter is used in the parameter list for anything other than a
+      constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the initializing
+      formal parameter `this.x` is being used in the method `m`:
+
+      ```dart
+      class A {
+        int x = 0;
+
+        m([[!this.x!] = 0]) {}
+      }
+      ```
+
+      #### Common fixes
+
+      Replace the initializing formal parameter with a normal parameter and
+      assign the field within the body of the method:
+
+      ```dart
+      class A {
+        int x = 0;
+
+        m([int x = 0]) {
+          this.x = x;
+        }
+      }
+      ```
   FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
     problemMessage: "The redirecting constructor can't have a field initializer."
     correctionMessage: Try initializing the field in the constructor being redirected to.
@@ -4989,6 +5206,35 @@
       ```dart
       int f() => 0;
       ```
+  ILLEGAL_ENUM_VALUES_DECLARATION:
+    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.
+  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.
+    comment: |-
+      Parameters:
+      0: the name of the class that declares 'values'
+  ILLEGAL_LANGUAGE_VERSION_OVERRIDE:
+    problemMessage: The language version must be {0}.
+    correctionMessage: Try removing the language version override and migrating the code.
+  ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION:
+    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.
+    comment: |-
+      Parameters:
+      0: the name of member that cannot be declared
+  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.
+    comment: |-
+      Parameters:
+      0: the name of member that cannot be inherited
+      1: the name of the class that declares the member
   ILLEGAL_SYNC_GENERATOR_RETURN_TYPE:
     problemMessage: "Functions marked 'sync*' must have a return type that is a supertype of 'Iterable<T>' for some type 'T'."
     correctionMessage: "Try fixing the return type of the function, or removing the modifier 'sync*' from the function body."
@@ -5192,12 +5438,12 @@
         int get defaultX => 0;
       }
       ```
-  IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT:
-    problemMessage: The named parameter '{0}' is required in the implicitly invoked unnamed constructor of '{1}'.
-    correctionMessage: Try declaring corresponding named super-parameter, or explicitly invoking a different constructor.
-  IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS:
-    problemMessage: The implicitly invoked unnamed constructor of '{0}' expects {1} positional arguments, but {2} found.
-    correctionMessage: Try declaring positional super-parameters, or explicitly invoking a different constructor.
+  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.
+    comment: |-
+      Parameters:
+      0: the name of the superclass
   IMPORT_INTERNAL_LIBRARY:
     problemMessage: "The library '{0}' is internal and can't be imported."
     hasPublishedDocs: true
@@ -5226,11 +5472,41 @@
     problemMessage: "The imported library '{0}' can't have a part-of directive."
     correctionMessage: Try importing the library that the part is a part of.
     comment: |-
-      14.1 Imports: It is a compile-time error if the specified URI of an
-      immediate import does not refer to a library declaration.
-
       Parameters:
       0: the uri pointing to a non-library declaration
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a [part file][] is imported
+      into a library.
+
+      #### Example
+
+      Given a [part file][] named `part.dart` containing the following:
+
+      ```dart
+      %uri="lib/part.dart"
+      part of lib;
+
+      class C{}
+      ```
+
+      The following code produces this diagnostic because imported files can't
+      have a part-of directive:
+
+      ```dart
+      library lib;
+
+      import [!'part.dart'!];
+
+      C c = C();
+      ```
+
+      #### Common fixes
+
+      Import the library that contains the [part file][] rather than the
+      [part file][] itself.
   INCONSISTENT_CASE_EXPRESSION_TYPES:
     problemMessage: "Case expressions must have the same types, '{0}' isn't a '{1}'."
     comment: |-
@@ -5312,12 +5588,46 @@
   INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
     problemMessage: Parts must have exactly the same language version override as the library.
     comment: |-
-      It is a compile-time error if a part file has a different language version
-      override than its library.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
 
-      https://github.com/dart-lang/language/blob/master/accepted/
-      future-releases/language-versioning/feature-specification.md
-      #individual-library-language-version-override
+      The analyzer produces this diagnostic when a [part file][] has a language
+      version override comment that specifies a different language version than
+      the one being used for the library to which the part belongs.
+
+      #### Example
+
+      Given a [part file][] named `part.dart` that contains the following:
+
+      ```dart
+      %uri="lib/part.dart"
+      // @dart = 2.6
+      part of 'test.dart';
+      ```
+
+      The following code produces this diagnostic because the parts of a library
+      must have the same language version as the defining compilation unit:
+
+      ```dart
+      // @dart = 2.5
+      part [!'part.dart'!];
+      ```
+
+      #### Common fixes
+
+      Remove the language version override from the [part file][], so that it
+      implicitly uses the same version as the defining compilation unit:
+
+      ```dart
+      part of 'test.dart';
+      ```
+
+      If necessary, either adjust the language version override in the defining
+      compilation unit to be appropriate for the code in the part, or migrate
+      the code in the [part file][] to be consistent with the new language
+      version.
   INITIALIZER_FOR_NON_EXISTENT_FIELD:
     problemMessage: "'{0}' isn't a field in the enclosing class."
     correctionMessage: "Try correcting the name to match an existing field, or defining a field named '{0}'."
@@ -5710,6 +6020,7 @@
       instantiated:
 
       ```dart
+      // @dart = 2.16
       enum E {a}
 
       var e = [!E!]();
@@ -5721,6 +6032,7 @@
       constants defined in the enum:
 
       ```dart
+      // @dart = 2.16
       enum E {a}
 
       var e = E.a;
@@ -6501,6 +6813,9 @@
         void m2(String s) {}
       }
       ```
+  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.
   INVALID_REFERENCE_TO_THIS:
     problemMessage: "Invalid reference to 'this' expression."
     hasPublishedDocs: true
@@ -7871,11 +8186,41 @@
       9.1 Mixin Application: It is a compile-time error if <i>S</i> does not
       denote a class available in the immediately enclosing scope.
   MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS:
-    problemMessage: "Constructors can have at most one 'this' redirection."
+    problemMessage: Constructors can have only one 'this' redirection, at most.
     correctionMessage: Try removing all but one of the redirections.
     comment: |-
-      7.6.1 Generative Constructors: A generative constructor may be redirecting,
-      in which case its only action is to invoke another generative constructor.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor redirects to more
+      than one other constructor in the same class (using `this`).
+
+      #### Example
+
+      The following code produces this diagnostic because the unnamed
+      constructor in `C` is redirecting to both `this.a` and `this.b`:
+
+      ```dart
+      class C {
+        C() : this.a(), [!this.b()!];
+        C.a();
+        C.b();
+      }
+      ```
+
+      #### Common fixes
+
+      Remove all but one of the redirections:
+
+      ```dart
+      class C {
+        C() : this.a();
+        C.a();
+        C.b();
+      }
+      ```
   MULTIPLE_SUPER_INITIALIZERS:
     problemMessage: "A constructor can have at most one 'super' initializer."
     correctionMessage: "Try removing all but one of the 'super' initializers."
@@ -8625,7 +8970,7 @@
 
       #### Example
 
-      The following code produces this diagnostic beause `a` isn't a constant:
+      The following code produces this diagnostic because `a` isn't a constant:
 
       ```dart
       var a = 'a';
@@ -8728,6 +9073,10 @@
       13.2 Expression Statements: It is a compile-time error if a non-constant
       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.
+    correctionMessage: Try making the field final.
+    comment: No parameters.
   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.
@@ -8780,14 +9129,76 @@
     problemMessage: "The unnamed constructor of superclass '{0}' (called by the default constructor of '{1}') must be a generative constructor, but factory found."
     correctionMessage: "Try adding an explicit constructor that has a different superinitializer or changing the superclass constructor '{2}' to not be a factory constructor."
     comment: |-
-      An error code for when a class has no explicit constructor, and therefore
-      a constructor is implicitly defined which uses a factory as a
-      superinitializer. See [NON_GENERATIVE_CONSTRUCTOR].
-
       Parameters:
       0: the name of the superclass
       1: the name of the current class
       2: the implicitly called factory constructor of the superclass
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class has an implicit
+      generative constructor and the superclass has an explicit unnamed factory
+      constructor. The implicit constructor in the subclass implicitly invokes
+      the unnamed constructor in the superclass, but generative constructors can
+      only invoke another generative constructor, not a factory constructor.
+
+      #### Example
+
+      The following code produces this diagnostic because the implicit
+      constructor in `B` invokes the unnamed constructor in `A`, but the
+      constructor in `A` is a factory constructor, when a generative constructor
+      is required:
+
+      ```dart
+      class A {
+        factory A() => throw 0;
+        A.named();
+      }
+
+      class [!B!] extends A {}
+      ```
+
+      #### Common fixes
+
+      If the unnamed constructor in the superclass can be a generative
+      constructor, then change it to be a generative constructor:
+
+      ```dart
+      class A {
+        A();
+        A.named();
+      }
+
+      class B extends A { }
+      ```
+
+      If the unnamed constructor can't be a generative constructor and there are
+      other generative constructors in the superclass, then explicitly invoke
+      one of them:
+
+      ```dart
+      class A {
+        factory A() => throw 0;
+        A.named();
+      }
+
+      class B extends A {
+        B() : super.named();
+      }
+      ```
+
+      If there are no generative constructors that can be used and none can be
+      added, then implement the superclass rather than extending it:
+
+      ```dart
+      class A {
+        factory A() => throw 0;
+        A.named();
+      }
+
+      class B implements A {}
+      ```
   NON_SYNC_FACTORY:
     problemMessage: "Factory bodies can't use 'async', 'async*', or 'sync*'."
     hasPublishedDocs: true
@@ -9509,16 +9920,73 @@
          constructor
       1: the name of the subclass that does not contain any explicit constructors
   NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS:
-    problemMessage: "The class '{0}' cannot extend '{1}' because '{1}' only has factory constructors (no generative constructors), and '{0}' has at least one generative constructor."
-    correctionMessage: "Try implementing the class instead, adding a generative (not factory) constructor to the superclass {0}, or a factory constructor to the subclass."
+    problemMessage: "The class '{0}' can't extend '{1}' because '{1}' only has factory constructors (no generative constructors), and '{0}' has at least one generative constructor."
+    correctionMessage: "Try implementing the class instead, adding a generative (not factory) constructor to the superclass '{1}', or a factory constructor to the subclass."
     comment: |-
-      User friendly specialized error for [NON_GENERATIVE_CONSTRUCTOR]. This
-      handles the case of `class E extends Exception` which will never work
-      because [Exception] has no generative constructors.
-
       Parameters:
       0: the name of the subclass
       1: the name of the superclass
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a class that has at least one
+      generative constructor (whether explicit or implicit) has a superclass
+      that doesn't have any generative constructors. Every generative
+      constructor, except the one defined in `Object`, invokes, either
+      explicitly or implicitly, one of the generative constructors from its
+      superclass.
+
+      #### Example
+
+      The following code produces this diagnostic because the class `B` has an
+      implicit generative constructor that can't invoke a generative constructor
+      from `A` because `A` doesn't have any generative constructors:
+
+      ```dart
+      class A {
+        factory A.none() => throw '';
+      }
+
+      class B extends [!A!] {}
+      ```
+
+      #### Common fixes
+
+      If the superclass should have a generative constructor, then add one:
+
+      ```dart
+      class A {
+        A();
+        factory A.none() => throw '';
+      }
+
+      class B extends A {}
+      ```
+
+      If the subclass shouldn't have a generative constructor, then remove it by
+      adding a factory constructor:
+
+      ```dart
+      class A {
+        factory A.none() => throw '';
+      }
+
+      class B extends A {
+        factory B.none() => throw '';
+      }
+      ```
+
+      If the subclass must have a generative constructor but the superclass
+      can't have one, then implement the superclass instead:
+
+      ```dart
+      class A {
+        factory A.none() => throw '';
+      }
+
+      class B implements A {}
+      ```
   NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
     problemMessage: "A class can't extend a nullable type."
     correctionMessage: Try removing the question mark.
@@ -9788,8 +10256,8 @@
       If the library should be using a different file as a part, then change the
       URI in the part directive to be the URI of the other file.
 
-      If the part file should be a part of this library, then update the URI (or
-      library name) in the part-of directive to be the URI (or name) of the
+      If the [part file][] should be a part of this library, then update the URI
+      (or library name) in the part-of directive to be the URI (or name) of the
       correct library.
   PART_OF_NON_PART:
     problemMessage: "The included part '{0}' must have a part-of directive."
@@ -9849,13 +10317,14 @@
       #### Description
 
       The analyzer produces this diagnostic when a library that doesn't have a
-      `library` directive (and hence has no name) contains a `part` directive and
-      the `part of` directive in the part file uses a name to specify the library
-      that it's a part of.
+      `library` directive (and hence has no name) contains a `part` directive
+      and the `part of` directive in the [part file][] uses a name to specify
+      the library that it's a part of.
 
       #### Example
 
-      Given a part file named `part_file.dart` containing the following code:
+      Given a [part file][] named `part_file.dart` containing the following
+      code:
 
       ```dart
       %uri="lib/part_file.dart"
@@ -9863,8 +10332,8 @@
       ```
 
       The following code produces this diagnostic because the library including
-      the part file doesn't have a name even though the part file uses a name to
-      specify which library it's a part of:
+      the [part file][] doesn't have a name even though the [part file][] uses a
+      name to specify which library it's a part of:
 
       ```dart
       part [!'part_file.dart'!];
@@ -9872,8 +10341,8 @@
 
       #### Common fixes
 
-      Change the `part of` directive in the part file to specify its library by
-      URI:
+      Change the `part of` directive in the [part file][] to specify its library
+      by URI:
 
       ```dart
       part of 'test.dart';
@@ -9968,17 +10437,57 @@
 
       If the name is wrong, then correct the name.
   PREFIX_SHADOWED_BY_LOCAL_DECLARATION:
-    problemMessage: "The prefix '{0}' can't be used here because it is shadowed by a local declaration."
+    problemMessage: "The prefix '{0}' can't be used here because it's shadowed by a local declaration."
     correctionMessage: Try renaming either the prefix or the local declaration.
     comment: |-
-      From the `Static Types` section of the spec:
+      Parameters:
+      0: the prefix being shadowed
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
 
-          A type T is malformed if:
-          - T has the form id or the form prefix.id, and in the enclosing lexical
-            scope, the name id (respectively prefix.id) does not denote a type.
+      The analyzer produces this diagnostic when an import prefix is used in a
+      context where it isn't visible because it was shadowed by a local
+      declaration.
 
-      In particular, this means that if an import prefix is shadowed by a local
-      declaration, it is an error to try to use it as a prefix for a type name.
+      #### Example
+
+      The following code produces this diagnostic because the prefix `a` is
+      being used to access the class `Future`, but isn't visible because it's
+      shadowed by the parameter `a`:
+
+      ```dart
+      import 'dart:async' as a;
+
+      a.Future? f(int a) {
+        [!a!].Future? x;
+        return x;
+      }
+      ```
+
+      #### Common fixes
+
+      Rename either the prefix:
+
+      ```dart
+      import 'dart:async' as p;
+
+      p.Future? f(int a) {
+        p.Future? x;
+        return x;
+      }
+      ```
+
+      Or rename the local variable:
+
+      ```dart
+      import 'dart:async' as a;
+
+      a.Future? f(int p) {
+        a.Future? x;
+        return x;
+      }
+      ```
   PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
     problemMessage: "The private name '{0}', defined by '{1}', conflicts with the same name defined by '{2}'."
     correctionMessage: "Try removing '{1}' from the 'with' clause."
@@ -10063,11 +10572,90 @@
       }
       ```
   PRIVATE_SETTER:
-    problemMessage: "The setter '{0}' is private and can't be accessed outside of the library that declares it."
+    problemMessage: "The setter '{0}' is private and can't be accessed outside the library that declares it."
     correctionMessage: Try making it public.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a private setter is used in a
+      library where it isn't visible.
+
+      #### Example
+
+      Given a file named `a.dart` that contains the following:
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {
+        static int _f = 0;
+      }
+      ```
+
+      The following code produces this diagnostic because it references the
+      private setter `_f` even though the setter isn't visible:
+
+      ```dart
+      import 'a.dart';
+
+      void f() {
+        A.[!_f!] = 0;
+      }
+      ```
+
+      #### Common fixes
+
+      If you're able to make the setter public, then do so:
+
+      ```dart
+      %uri="lib/a.dart"
+      class A {
+        static int f = 0;
+      }
+      ```
+
+      If you aren't able to make the setter public, then find a different way to
+      implement the code.
   READ_POTENTIALLY_UNASSIGNED_FINAL:
-    problemMessage: "The final variable '{0}' can't be read because it is potentially unassigned at this point."
+    problemMessage: "The final variable '{0}' can't be read because it's potentially unassigned at this point."
     correctionMessage: Ensure that it is assigned on necessary execution paths.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a final local variable that
+      isn't initialized at the declaration site is read at a point where the
+      compiler can't prove that the variable is always initialized before it's
+      referenced.
+
+      #### Example
+
+      The following code produces this diagnostic because the final local
+      variable `x` is read (on line 3) when it's possible that it hasn't yet
+      been initialized:
+
+      ```dart
+      int f() {
+        final int x;
+        return [!x!];
+      }
+      ```
+
+      #### Common fixes
+
+      Ensure that the variable has been initialized before it's read:
+
+      ```dart
+      int f(bool b) {
+        final int x;
+        if (b) {
+          x = 0;
+        } else {
+          x = 1;
+        }
+        return x;
+      }
+      ```
   RECURSIVE_COMPILE_TIME_CONSTANT:
     problemMessage: The compile-time constant expression depends on itself.
     hasPublishedDocs: true
@@ -10371,8 +10959,45 @@
     problemMessage: "The redirecting constructor '{0}' can't redirect to a constructor of the abstract class '{1}'."
     correctionMessage: Try redirecting to a constructor of a different class.
     comment: |-
-      A factory constructor can't redirect to a non-generative constructor of an
-      abstract class.
+      Parameters:
+      0: the name of the redirecting constructor
+      1: the name of the abstract class defining the constructor being redirected to
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor redirects to a
+      constructor in an abstract class.
+
+      #### Example
+
+      The following code produces this diagnostic because the factory
+      constructor in `A` redirects to a constructor in `B`, but `B` is an
+      abstract class:
+
+      ```dart
+      class A {
+        factory A() = [!B!];
+      }
+
+      abstract class B implements A {}
+      ```
+
+      #### Common fixes
+
+      If the code redirects to the correct constructor, then change the class so
+      that it isn't abstract:
+
+      ```dart
+      class A {
+        factory A() = B;
+      }
+
+      class B implements A {}
+      ```
+
+      Otherwise, change the factory constructor so that it either redirects to a
+      constructor in a concrete class, or has a concrete implementation.
   REDIRECT_TO_INVALID_FUNCTION_TYPE:
     problemMessage: "The redirected constructor '{0}' has incompatible parameters with '{1}'."
     correctionMessage: Try redirecting to a different constructor.
@@ -10511,8 +11136,58 @@
     problemMessage: "The constructor '{0}' couldn't be found in '{1}'."
     correctionMessage: "Try redirecting to a different constructor, or define the constructor named '{0}'."
     comment: |-
-      7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with
-      the const modifier but <i>k'</i> is not a constant constructor.
+      Parameters:
+      0: the name of the constructor
+      1: the name of the class containing the constructor
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a constructor redirects to a
+      constructor that doesn't exist.
+
+      #### Example
+
+      The following code produces this diagnostic because the factory
+      constructor in `A` redirects to a constructor in `B` that doesn't exist:
+
+      ```dart
+      class A {
+        factory A() = [!B.name!];
+      }
+
+      class B implements A {
+        B();
+      }
+      ```
+
+      #### Common fixes
+
+      If the constructor being redirected to is correct, then define the
+      constructor:
+
+      ```dart
+      class A {
+        factory A() = B.name;
+      }
+
+      class B implements A {
+        B();
+        B.name();
+      }
+      ```
+
+      If a different constructor should be invoked, then update the redirect:
+
+      ```dart
+      class A {
+        factory A() = B;
+      }
+
+      class B implements A {
+        B();
+      }
+      ```
   REDIRECT_TO_NON_CLASS:
     problemMessage: "The name '{0}' isn't a type and can't be used in a redirected constructor."
     correctionMessage: Try redirecting to a different constructor.
@@ -11371,6 +12046,9 @@
         B(int x) : assert(x >= 0), super(x);
       }
       ```
+  SUPER_IN_ENUM_CONSTRUCTOR:
+    problemMessage: The enum constructor can't have a 'super' initializer.
+    correctionMessage: Try removing the 'super' invocation.
   SUPER_IN_EXTENSION:
     problemMessage: "The 'super' keyword can't be used in an extension because an extension doesn't have a superclass."
     hasPublishedDocs: true
@@ -11461,14 +12139,44 @@
       }
       ```
   SWITCH_CASE_COMPLETES_NORMALLY:
-    problemMessage: "The 'case' should not complete normally."
-    correctionMessage: "Try adding 'break', or 'return', etc."
+    problemMessage: "The 'case' shouldn't complete normally."
+    correctionMessage: "Try adding 'break', 'return', or 'throw'."
     comment: |-
-      It is an error if any case of a switch statement except the last case (the
-      default case if present) may complete normally. The previous syntactic
-      restriction requiring the last statement of each case to be one of an
-      enumerated list of statements (break, continue, return, throw, or rethrow)
-      is removed.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the statements following a
+      `case` label in a `switch` statement could fall through to the next `case`
+      or `default` label.
+
+      #### Example
+
+      The following code produces this diagnostic because the `case` label with
+       a value of zero (`0`) falls through to the `default` statements:
+
+      ```dart
+      void f(int a) {
+        switch (a) {
+          [!case!] 0:
+            print(0);
+          default:
+            return;
+        }
+      }
+      ```
+
+      #### Common fixes
+
+      Change the flow of control so that the `case` won't fall through. There
+      are several ways that this can be done, including adding one of the
+      following at the end of the current list of statements:
+      - a `return` statement,
+      - a `throw` expression,
+      - a `break` statement,
+      - a `continue`, or
+      - an invocation of a function or method whose return type is `Never`.
   SWITCH_EXPRESSION_NOT_ASSIGNABLE:
     problemMessage: "Type '{0}' of the switch expression isn't assignable to the type '{1}' of case expressions."
     hasPublishedDocs: true
@@ -12196,8 +12904,8 @@
     hasPublishedDocs: true
     comment: |-
       Parameters:
-      0: the name of the enumeration constant that is not defined
-      1: the name of the enumeration used to access the constant
+      0: the name of the enum constant that is not defined
+      1: the name of the enum used to access the constant
     documentation: |-
       #### Description
 
@@ -12235,6 +12943,17 @@
 
       var e = E.b;
       ```
+  UNDEFINED_ENUM_CONSTRUCTOR_NAMED:
+    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}'.
+    comment: |-
+      Parameters:
+      0: the name of the constructor that is undefined
+  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.
   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}'."
@@ -13308,6 +14027,9 @@
 
       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:
+    problemMessage: A member named 'values' can't be declared in an enum.
+    correctionMessage: Try using a different name.
   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"
@@ -13563,6 +14285,13 @@
       }
       C f() => C.named();
       ```
+  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.
+    comment: |-
+      Parameters:
+      0: the number of type parameters that were declared
+      1: the number of type arguments provided
   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.
@@ -13834,6 +14563,7 @@
     problemMessage: "Fields in a struct class whose type is 'Pointer' shouldn't have any annotations."
     correctionMessage: Try removing the annotation.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -13875,6 +14605,7 @@
     comment: |-
       Parameters:
       0: the name of the argument
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -13930,6 +14661,7 @@
     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'."
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -13984,6 +14716,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the superclass
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14036,6 +14769,7 @@
     problemMessage: Fields in a struct class must have exactly one annotation indicating the native type.
     correctionMessage: Try removing the extra annotation.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14075,6 +14809,7 @@
     problemMessage: "'Array's must have exactly one 'Array' annotation."
     correctionMessage: Try removing the extra annotation.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14137,6 +14872,7 @@
     problemMessage: "Constructors in subclasses of 'Struct' and 'Union' can't have field initializers."
     correctionMessage: Try removing the field initializer and marking the field as external.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14181,6 +14917,7 @@
     problemMessage: "Fields in subclasses of 'Struct' and 'Union' can't have initializers."
     correctionMessage: Try removing the initializer and marking the field as external.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14219,6 +14956,7 @@
     problemMessage: "Fields of 'Struct' and 'Union' subclasses must be marked external."
     correctionMessage: "Try adding the 'external' modifier."
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14259,6 +14997,7 @@
     comment: |-
       Parameters:
       0: the name of the struct class
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14295,6 +15034,7 @@
     problemMessage: "The method 'Pointer.fromFunction' can't have an exceptional return value (the second argument) when the return type of the function is either 'void', 'Handle' or 'Pointer'."
     correctionMessage: Try removing the exceptional return value.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14343,6 +15083,7 @@
     comment: |-
       Parameters:
       0: the type of the field
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14388,6 +15129,7 @@
     problemMessage: "FFI leaf call can't return a 'Handle'."
     correctionMessage: Try changing the return type to primitive or struct.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14444,6 +15186,7 @@
     problemMessage: "FFI leaf call can't take arguments of type 'Handle'."
     correctionMessage: Try changing the argument type to primitive or struct.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14494,6 +15237,7 @@
     problemMessage: "The annotation doesn't match the declared type of the field."
     correctionMessage: Try using a different annotation or changing the declared type to match.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14543,6 +15287,7 @@
     problemMessage: "Fields in a struct class must either have the type 'Pointer' or an annotation indicating the native type."
     correctionMessage: Try adding an annotation.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14583,6 +15328,7 @@
     problemMessage: "The method 'Pointer.fromFunction' must have an exceptional return value (the second argument) when the return type of the function is neither 'void', 'Handle', nor 'Pointer'."
     correctionMessage: Try adding an exceptional return value.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14628,6 +15374,7 @@
     comment: |-
       Parameters:
       0: the type of the field
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14673,6 +15420,7 @@
     problemMessage: "Fields of type 'Array' must have exactly one 'Array' annotation."
     correctionMessage: "Try adding an 'Array' annotation, or removing all but one of the annotations."
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14714,6 +15462,7 @@
       Parameters:
       0: the type that should be a valid dart:ffi native type.
       1: the name of the function whose invocation depends on this relationship
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14764,6 +15513,7 @@
       0: the type that should be a subtype
       1: the supertype that the subtype is compared to
       2: the name of the function whose invocation depends on this relationship
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14829,6 +15579,7 @@
     comment: |-
       Parameters:
       0: the name of the function, method, or constructor having type arguments
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14876,6 +15627,7 @@
     comment: |-
       Parameters:
       0: the type that should be a valid dart:ffi native type.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14924,6 +15676,7 @@
     problemMessage: Array dimensions must be positive numbers.
     correctionMessage: Try changing the input to a positive number.
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -14964,6 +15717,7 @@
     comment: |-
       Parameters:
       0: the type of the field
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15004,6 +15758,7 @@
     problemMessage: "Structs must have at most one 'Packed' annotation."
     correctionMessage: "Try removing extra 'Packed' annotations."
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15043,6 +15798,7 @@
     problemMessage: Only packing to 1, 2, 4, 8, and 16 bytes is supported.
     correctionMessage: "Try changing the 'Packed' annotation alignment to 1, 2, 4, 8, or 16."
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15084,6 +15840,7 @@
       Parameters:
       0: the name of the outer struct
       1: the name of the struct being nested
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15165,6 +15922,7 @@
     problemMessage: "'Array's must have an 'Array' annotation that matches the dimensions."
     correctionMessage: "Try adjusting the arguments in the 'Array' annotation."
     comment: No parameters.
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15221,6 +15979,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the class being extended, implemented, or mixed in
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15270,6 +16029,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the class being extended, implemented, or mixed in
+    hasPublishedDocs: true
   SUBTYPE_OF_FFI_CLASS_IN_WITH:
     sharedName: SUBTYPE_OF_FFI_CLASS
     problemMessage: "The class '{0}' can't mix in '{1}'."
@@ -15278,6 +16038,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the class being extended, implemented, or mixed in
+    hasPublishedDocs: true
   SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS:
     sharedName: SUBTYPE_OF_STRUCT_CLASS
     problemMessage: "The class '{0}' can't extend '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
@@ -15286,6 +16047,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the class being extended, implemented, or mixed in
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -15339,6 +16101,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the class being extended, implemented, or mixed in
+    hasPublishedDocs: true
   SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
     sharedName: SUBTYPE_OF_STRUCT_CLASS
     problemMessage: "The class '{0}' can't mix in '{1}' because '{1}' is a subtype of 'Struct', 'Union', or 'AbiSpecificInteger'."
@@ -15347,6 +16110,7 @@
       Parameters:
       0: the name of the subclass
       1: the name of the class being extended, implemented, or mixed in
+    hasPublishedDocs: true
 HintCode:
   ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
     problemMessage: "The argument type '{0}' can't be assigned to the parameter type '{1} Function(Object)' or '{1} Function(Object, StackTrace)'."
@@ -15412,6 +16176,33 @@
     problemMessage: "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or top-level variable."
     correctionMessage: Try removing the assignment.
     comment: Users should not assign values marked `@doNotStore`.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the value of a function
+      (including methods and getters) that is explicitly or implicitly marked by
+      the `[doNotStore][meta-doNotStore]` annotation is stored in either a field
+      or top-level variable.
+
+      #### Example
+
+      The following code produces this diagnostic because the value of the
+      function `f` is being stored in the top-level variable `x`:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @doNotStore
+      int f() => 1;
+
+      var x = [!f()!];
+      ```
+
+      #### Common fixes
+
+      Replace references to the field or variable with invocations of the
+      function producing the value.
   BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
     problemMessage: "This function has a nullable return type of '{0}', but ends without returning a value."
     correctionMessage: "Try adding a return statement, or if no value is ever returned, try changing the return type to 'void'."
@@ -15419,6 +16210,40 @@
     comment: |-
       Parameters:
       0: the name of the declared return type
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method or function can
+      implicitly return `null` by falling off the end. While this is valid Dart
+      code, it's better for the return of `null` to be explicit.
+
+      #### Example
+
+      The following code produces this diagnostic because the function `f`
+      implicitly returns `null`:
+
+      ```dart
+      String? [!f!]() {}
+      ```
+
+      #### Common fixes
+
+      If the return of `null` is intentional, then make it explicit:
+
+      ```dart
+      String? f() {
+        return null;
+      }
+      ```
+
+      If the function should return a non-null value along that path, then add
+      the missing return statement:
+
+      ```dart
+      String? f() {
+        return '';
+      }
+      ```
   CAN_BE_NULL_AFTER_NULL_AWARE:
     problemMessage: "The receiver uses '?.', so its value can be null."
     correctionMessage: "Replace the '.' with a '?.' in the invocation."
@@ -15676,6 +16501,56 @@
     problemMessage: "Using the 'new' keyword in a comment reference is deprecated."
     correctionMessage: Try referring to a constructor by its name.
     comment: No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a comment reference (the name
+      of a declaration enclosed in square brackets in a documentation comment)
+      uses the keyword `new` to refer to a constructor. This form is deprecated.
+
+      #### Examples
+
+      The following code produces this diagnostic because the unnamed
+      constructor is being referenced using `new C`:
+
+      ```dart
+      /// See [[!new!] C].
+      class C {
+        C();
+      }
+      ```
+
+      The following code produces this diagnostic because the constructor named
+      `c` is being referenced using `new C.c`:
+
+      ```dart
+      /// See [[!new!] C.c].
+      class C {
+        C.c();
+      }
+      ```
+
+      #### Common fixes
+
+      If you're referencing a named constructor, then remove the keyword `new`:
+
+      ```dart
+      /// See [C.c].
+      class C {
+        C.c();
+      }
+      ```
+
+      If you're referencing the unnamed constructor, then remove the keyword
+      `new` and append `.new` after the class name:
+
+      ```dart
+      /// See [C.new].
+      class C {
+        C.c();
+      }
+      ```
   DEPRECATED_MIXIN_FUNCTION:
     sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
     problemMessage: "Mixing in 'Function' is deprecated."
@@ -16074,11 +16949,50 @@
       ```
 
       If type arguments shouldn't be required for the class, then mark the class
-      with the `@optionalTypeArgs` annotation (from `package:meta`):
+      with the `[optionalTypeArgs][meta-optionalTypeArgs]` annotation (from
+      `package:meta`):
   IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE:
-    problemMessage: "The library '{0}' is legacy, and should not be imported into a null safe library."
+    problemMessage: "The library '{0}' is legacy, and shouldn't be imported into a null safe library."
     correctionMessage: Try migrating the imported library.
-    comment: "https://github.com/dart-lang/sdk/issues/44063"
+    comment: |-
+      No parameters.
+
+      https://github.com/dart-lang/sdk/issues/44063
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a library that is null safe
+      imports a library that isn't null safe.
+
+      #### Example
+
+      Given a file named `a.dart` that contains the following:
+
+      ```dart
+      %uri="lib/a.dart"
+      // @dart = 2.9
+
+      class A {}
+      ```
+
+      The following code produces this diagnostic because a library that null
+      safe is importing a library that isn't null safe:
+
+      ```dart
+      import [!'a.dart'!];
+
+      A? f() => null;
+      ```
+
+      #### Common fixes
+
+      If you can migrate the imported library to be null safe, then migrate it
+      and update or remove the migrated library's language version.
+
+      If you can't migrate the imported library, then the importing library
+      needs to have a language version that is before 2.12, when null safety was
+      enabled by default.
   INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
     problemMessage: "The type argument(s) of '{0}' can't be inferred."
     correctionMessage: "Use explicit type argument(s) for '{0}'."
@@ -16126,29 +17040,121 @@
       When "strict-inference" in enabled, function parameters must be
       declared with a specific type, or inherit a type.
   INVALID_ANNOTATION_TARGET:
-    problemMessage: "The annotation '{0}' can only be used on {1}"
+    problemMessage: "The annotation '{0}' can only be used on {1}."
     comment: |-
       Parameters:
       0: the name of the annotation
       1: the list of valid targets
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when an annotation is applied to a
+      kind of declaration that it doesn't support.
+
+      #### Example
+
+      The following code produces this diagnostic because the `optionalTypeArgs`
+      annotation isn't defined to be valid for top-level variables:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @[!optionalTypeArgs!]
+      int x = 0;
+      ```
+
+      #### Common fixes
+
+      Remove the annotation from the declaration.
   INVALID_EXPORT_OF_INTERNAL_ELEMENT:
     problemMessage: "The member '{0}' can't be exported as a part of a package's public API."
     correctionMessage: "Try using a hide clause to hide '{0}'."
     comment: |-
-      This hint is generated anywhere where an element annotated with `@internal`
-      is exported as a part of a package's public API.
-
       Parameters:
       0: the name of the element
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a [public library][] exports a
+      declaration that is marked with the `[internal][meta-internal]`
+      annotation.
+
+      #### Example
+
+      Given a file named `a.dart` in the `src` directory that contains:
+
+      ```dart
+      %uri="lib/src/a.dart"
+      import 'package:meta/meta.dart';
+
+      @internal class One {}
+      ```
+
+      The following code, when found in a [public library][] produces this
+      diagnostic because the `export` directive is exporting a name that is only
+      intended to be used internally:
+
+      ```dart
+      [!export 'src/a.dart';!]
+      ```
+
+      #### Common fixes
+
+      If the export is needed, then add a `hide` clause to hide the internal
+      names:
+
+      ```dart
+      export 'src/a.dart' hide One;
+      ```
+
+      If the export isn't needed, then remove it.
   INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
     problemMessage: "The member '{0}' can't be exported as a part of a package's public API, but is indirectly exported as part of the signature of '{1}'."
     correctionMessage: "Try using a hide clause to hide '{0}'."
     comment: |-
-      This hint is generated anywhere where an element annotated with `@internal`
-      is exported indirectly as a part of a package's public API.
-
       Parameters:
       0: the name of the element
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a [public library][] exports a
+      top-level function  with a return type or at least one parameter type that
+      is marked with the `[internal][meta-internal]` annotation.
+
+      #### Example
+
+      Given a file named `a.dart` in the `src` directory that contains the
+      following:
+
+      ```dart
+      %uri="lib/src/a.dart"
+      import 'package:meta/meta.dart';
+
+      @internal
+      typedef IntFunction = int Function();
+
+      int f(IntFunction g) => g();
+      ```
+
+      The following code produces this diagnostic because the function `f` has a
+      parameter of type `IntFunction`, and `IntFunction` is only intended to be
+      used internally:
+
+      ```dart
+      [!export 'src/a.dart' show f;!]
+      ```
+
+      #### Common fixes
+
+      If the function must be public, then make all the types in the function's
+      signature public types.
+
+      If the function doesn't need to be exported, then stop exporting it,
+      either by removing it from the `show` clause, adding it to the `hide`
+      clause, or by removing the export.
   INVALID_FACTORY_ANNOTATION:
     problemMessage: Only methods can be annotated as factories.
     comment: |-
@@ -16157,17 +17163,91 @@
   INVALID_FACTORY_METHOD_DECL:
     problemMessage: "Factory method '{0}' must have a return type."
     comment: |-
-      This hint is generated anywhere a @factory annotation is associated with
-      a method that does not declare a return type.
+      Parameters:
+      0: The name of the method
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method that is annotated with
+      the `[factory][meta-factory]` annotation has a return type of `void`.
+
+      #### Example
+
+      The following code produces this diagnostic because the method `createC`
+      is annotated with the `[factory][meta-factory]` annotation but doesn't
+      return any value:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class Factory {
+        @factory
+        void [!createC!]() {}
+      }
+
+      class C {}
+      ```
+
+      #### Common fixes
+
+      Change the return type to something other than `void`:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class Factory {
+        @factory
+        C createC() => C();
+      }
+
+      class C {}
+      ```
   INVALID_FACTORY_METHOD_IMPL:
     problemMessage: "Factory method '{0}' doesn't return a newly allocated object."
     comment: |-
-      This hint is generated anywhere a @factory annotation is associated with
-      a non-abstract method that can return anything other than a newly allocated
-      object.
-
       Parameters:
       0: the name of the method
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a method that is annotated with
+      the `[factory][meta-factory]` annotation doesn't return a newly allocated
+      object.
+
+      #### Example
+
+      The following code produces this diagnostic because the method `createC`
+      returns the value of a field rather than a newly created instance of `C`:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class Factory {
+        C c = C();
+
+        @factory
+        C [!createC!]() => c;
+      }
+
+      class C {}
+      ```
+
+      #### Common fixes
+
+      Change the method to return a newly created instance of the return type:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      class Factory {
+        @factory
+        C createC() => C();
+      }
+
+      class C {}
+      ```
   INVALID_IMMUTABLE_ANNOTATION:
     problemMessage: Only classes can be annotated as being immutable.
     comment: |-
@@ -16176,121 +17256,145 @@
   INVALID_INTERNAL_ANNOTATION:
     problemMessage: "Only public elements in a package's private API can be annotated as being internal."
     comment: |-
-      This hint is generated anywhere a @internal annotation is associated with
-      an element found in a package's public API.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a declaration is annotated with
+      the `[internal][meta-internal]` annotation and that declaration is either
+      in a [public library][] or has a private name.
+
+      #### Example
+
+      The following code, when in a [public library][], produces this diagnostic
+      because the `[internal][meta-internal]` annotation can't be applied to
+      declarations in a [public library][]:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      [!@internal!]
+      class C {}
+      ```
+
+      The following code, whether in a public or internal library, produces this
+      diagnostic because the `[internal][meta-internal]` annotation can't be
+      applied to declarations with private names:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      [!@internal!]
+      class _C {}
+      
+      void f(_C c) {}
+      ```
+
+      #### Common fixes
+
+      If the declaration has a private name, then remove the annotation:
+
+      ```dart
+      class _C {}
+
+      void f(_C c) {}
+      ```
+
+      If the declaration has a public name and is intended to be internal to the
+      package, then move the annotated declaration into an internal library (in
+      other words, a library inside the `src` directory).
+
+      Otherwise, remove the use of the annotation:
+
+      ```dart
+      class C {}
+      ```
   INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: "The language version override can't specify a version greater than the latest known language version: {0}.{1}"
+    problemMessage: "The language version override can't specify a version greater than the latest known language version: {0}.{1}."
     correctionMessage: Try removing the language version override.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: "The Dart language version override number must begin with '@dart'"
+    problemMessage: "The Dart language version override number must begin with '@dart'."
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
 
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      The analyzer produces this diagnostic when a comment that appears to be an
+      attempt to specify a language version override doesn't conform to the
+      requirements for such a comment. For more information, see
+      [Per-library language version selection](https://dart.dev/guides/language/evolution#per-library-language-version-selection).
+
+      #### Example
+
+      The following code produces this diagnostic because the word `dart` must
+      be lowercase in such a comment and because there's no equal sign between
+      the word `dart` and the version number:
+
+      ```dart
+      [!// @Dart 2.9!]
+      ```
+
+      #### Common fixes
+
+      If the comment is intended to be a language version override, then change
+      the comment to follow the correct format:
+
+      ```dart
+      // @dart = 2.9
+      ```
   INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: The language version override must be before any declaration or directive.
+    problemMessage: The language version override must be specified before any declaration or directive.
     correctionMessage: Try moving the language version override to the top of the file.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: "The Dart language version override comment must be specified with the word 'dart' in all lower case"
+    problemMessage: "The Dart language version override comment must be specified with the word 'dart' in all lower case."
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
-
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      No parameters.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     problemMessage: "The Dart language version override comment must be specified with a version number, like '2.0', after the '=' character."
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
-
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      No parameters.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: "The Dart language version override number can't be prefixed with a letter"
+    problemMessage: "The Dart language version override number can't be prefixed with a letter."
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
-
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      No parameters.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: "The Dart language version override comment can't be followed by any non-whitespace characters"
+    problemMessage: "The Dart language version override comment can't be followed by any non-whitespace characters."
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
-
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      No parameters.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     problemMessage: The Dart language version override comment must be specified with exactly two slashes.
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
-
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      No parameters.
+    hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
-    problemMessage: "The Dart language version override comment must be specified with an '=' character"
+    problemMessage: "The Dart language version override comment must be specified with an '=' character."
     correctionMessage: "Specify a Dart language version override with a comment like '// @dart = 2.0'."
     comment: |-
-      Invalid Dart language version comments don't follow the specification [1].
-      If a comment begins with "@dart" or "dart" (letters in any case),
-      followed by optional whitespace, followed by optional non-alphanumeric,
-      non-whitespace characters, followed by optional whitespace, followed by
-      an optional alphabetical character, followed by a digit, then the
-      comment is considered to be an attempt at a language version override
-      comment. If this attempted language version override comment is not a
-      valid language version override comment, it is reported.
-
-      [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+      No parameters.
+    hasPublishedDocs: true
   INVALID_LITERAL_ANNOTATION:
     problemMessage: Only const constructors can have the `@literal` annotation.
     hasPublishedDocs: true
@@ -16298,8 +17402,8 @@
     documentation: |-
       #### Description
 
-      The analyzer produces this diagnostic when the `@literal` annotation is
-      applied to anything other than a const constructor.
+      The analyzer produces this diagnostic when the `[literal][[meta-literal]]`
+      annotation is applied to anything other than a const constructor.
 
       #### Examples
 
@@ -16469,11 +17573,41 @@
   INVALID_USE_OF_INTERNAL_MEMBER:
     problemMessage: "The member '{0}' can only be used within its package."
     comment: |-
-      This hint is generated anywhere where a member annotated with `@internal`
-      is used outside of the package in which it is declared.
-
       Parameters:
       0: the name of the member
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a reference to a declaration
+      that is annotated with the `[internal][meta-internal]` annotation is found
+      outside the package containing the declaration.
+
+      #### Example
+
+      Given a package `p` that defines a library containing a declaration marked
+      with the `[internal][meta-internal]` annotation:
+
+      ```dart
+      %uri="package:p/src/p.dart"
+      import 'package:meta/meta.dart';
+
+      @internal
+      class C {}
+      ```
+
+      The following code produces this diagnostic because it's referencing the
+      class `C`, which isn't intended to be used outside the package `p`:
+
+      ```dart
+      import 'package:p/src/p.dart';
+
+      void f([!C!] c) {}
+      ```
+
+      #### Common fixes
+
+      Remove the reference to the internal declaration.
   INVALID_USE_OF_PROTECTED_MEMBER:
     problemMessage: "The member '{0}' can only be used within instance members of subclasses of '{1}'."
     comment: |-
@@ -16493,8 +17627,9 @@
       #### Description
 
       The analyzer produces this diagnostic when an instance member that is
-      annotated with `visibleForOverriding` is referenced outside the library in
-      which it's declared for any reason other than to override it.
+      annotated with `[visibleForOverriding][meta-visibleForOverriding]` is
+      referenced outside the library in which it's declared for any reason other
+      than to override it.
 
       #### Example
 
@@ -16558,8 +17693,9 @@
     documentation: |-
       #### Description
 
-      The analyzer produces this diagnostic when either the `@visibleForTemplate`
-      or `@visibleForTesting` annotation is applied to a non-public declaration.
+      The analyzer produces this diagnostic when either the `visibleForTemplate`
+      or `[visibleForTesting][meta-visibleForTesting]` annotation is applied to
+      a non-public declaration.
 
       #### Example
 
@@ -16603,9 +17739,10 @@
       #### Description
 
       The analyzer produces this diagnostic when anything other than a public
-      instance member of a class is annotated with `visibleForOverriding`.
-      Because only public instance members can be overridden outside the defining
-      library, there's no value to annotating any other declarations.
+      instance member of a class is annotated with
+      `[visibleForOverriding][meta-visibleForOverriding]`. Because only public
+      instance members can be overridden outside the defining library, there's
+      no value to annotating any other declarations.
 
       #### Example
 
@@ -16729,9 +17866,9 @@
       #### Description
 
       The analyzer produces this diagnostic when the superclass constraint of a
-      mixin is a class from a different package that was marked as `@sealed`.
-      Classes that are sealed can't be extended, implemented, mixed in, or used
-      as a superclass constraint.
+      mixin is a class from a different package that was marked as
+      `[sealed][meta-sealed]`. Classes that are sealed can't be extended,
+      implemented, mixed in, or used as a superclass constraint.
 
       #### Example
 
@@ -16770,8 +17907,8 @@
 
       The analyzer produces this diagnostic when an immutable class defines one
       or more instance fields that aren't final. A class is immutable if it's
-      marked as being immutable using the annotation `@immutable` or if it's a
-      subclass of an immutable class.
+      marked as being immutable using the annotation
+      `[immutable][meta-immutable]` or if it's a subclass of an immutable class.
 
       #### Example
 
@@ -16826,8 +17963,8 @@
       #### Description
 
       The analyzer produces this diagnostic when a method that overrides a method
-      that is annotated as `@mustCallSuper` doesn't invoke the overridden method
-      as required.
+      that is annotated as `[mustCallSuper][meta-mustCallSuper]` doesn't invoke
+      the overridden method as required.
 
       #### Example
 
@@ -16892,10 +18029,10 @@
       #### Description
 
       The analyzer produces this diagnostic when a constructor that has the
-      `@literal` annotation is invoked without using the `const` keyword, but all
-      of the arguments to the constructor are constants. The annotation indicates
-      that the constructor should be used to create a constant value whenever
-      possible.
+      `[literal][meta-literal]` annotation is invoked without using the `const`
+      keyword, but all of the arguments to the constructor are constants. The
+      annotation indicates that the constructor should be used to create a
+      constant value whenever possible.
 
       #### Example
 
@@ -17022,8 +18159,43 @@
   NULL_CHECK_ALWAYS_FAILS:
     problemMessage: "This null-check will always throw an exception because the expression will always evaluate to 'null'."
     comment: |-
-      This hint indicates that a null literal is null-checked with `!`, but null
-      is never not null.
+      No parameters.
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when the null check operator (`!`)
+      is used on an expression whose value can only be `null`. In such a case
+      the operator always throws an exception, which likely isn't the intended
+      behavior.
+
+      #### Example
+
+      The following code produces this diagnostic because the function `g` will
+      always return `null`, which means that the null check in `f` will always
+      throw:
+
+      ```dart
+      void f() {
+        [!g()!!];
+      }
+
+      Null g() => null;
+      ```
+
+      #### Common fixes
+
+      If you intend to always throw an exception, then replace the null check
+      with an explicit `throw` expression to make the intent more clear:
+
+      ```dart
+      void f() {
+        g();
+        throw TypeError();
+      }
+
+      Null g() => null;
+      ```
   OVERRIDE_ON_NON_OVERRIDING_FIELD:
     sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
     problemMessage: "The field doesn't override an inherited getter or setter."
@@ -17122,8 +18294,57 @@
     problemMessage: "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless '{1}' is also annotated."
     correctionMessage: "Annotate '{1}' with 'doNotStore'."
     comment: |-
-      Users should not return values marked `@doNotStore` from functions,
-      methods or getters not marked `@doNotStore`.
+      Parameters:
+      0: the name of the annotated function being invoked
+      1: the name of the function containing the return
+    hasPublishedDocs: true
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a value that is annotated with
+      the `[doNotStore][meta-doNotStore]` annotation is returned from a method,
+      getter, or function that doesn't have the same annotation.
+
+      #### Example
+
+      The following code produces this diagnostic because the result of invoking
+      `f` shouldn't be stored, but the function `g` isn't annotated to preserve
+      that semantic:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @doNotStore
+      int f() => 0;
+
+      int g() => [!f()!];
+      ```
+
+      #### Common fixes
+
+      If the value that shouldn't be stored is the correct value to return, then
+      mark the function with the `[doNotStore][meta-doNotStore]` annotation:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @doNotStore
+      int f() => 0;
+
+      @doNotStore
+      int g() => f();
+      ```
+
+      Otherwise, return a different value from the function:
+
+      ```dart
+      import 'package:meta/meta.dart';
+
+      @doNotStore
+      int f() => 0;
+
+      int g() => 0;
+      ```
   SDK_VERSION_ASYNC_EXPORTED_FROM_CORE:
     problemMessage: "The class '{0}' wasn't exported from 'dart:core' until version 2.1, but this code is required to be able to run on earlier versions."
     correctionMessage: "Try either importing 'dart:async' or updating the SDK constraints."
@@ -17782,10 +19003,10 @@
       #### Description
 
       The analyzer produces this diagnostic when a sealed class (one that either
-      has the `@sealed` annotation or inherits or mixes in a sealed class) is
-      referenced in either the `extends`, `implements`, or `with` clause of a
-      class or mixin declaration if the declaration isn't in the same package as
-      the sealed class.
+      has the `[sealed][meta-sealed]` annotation or inherits or mixes in a
+      sealed class) is referenced in either the `extends`, `implements`, or
+      `with` clause of a class or mixin declaration if the declaration isn't in
+      the same package as the sealed class.
 
       #### Example
 
@@ -18009,8 +19230,8 @@
       #### Description
 
       The analyzer produces this diagnostic when an annotation of the form
-      `@UnusedResult.unless(parameterDefined: parameterName)` specifies a
-      parameter name that isn't defined by the annotated function.
+      `[UseResult][meta-UseResult].unless(parameterDefined: parameterName)`
+      specifies a parameter name that isn't defined by the annotated function.
 
       #### Example
 
@@ -18654,16 +19875,16 @@
       #### Description
 
       The analyzer produces this diagnostic when a function annotated with
-      `useResult` is invoked, and the value returned by that function isn't used.
-      The value is considered to be used if a member of the value is invoked, if
-      the value is passed to another function, or if the value is assigned to a
-      variable or field.
+      `[useResult][meta-useResult]` is invoked, and the value returned by that
+      function isn't used. The value is considered to be used if a member of the
+      value is invoked, if the value is passed to another function, or if the
+      value is assigned to a variable or field.
 
       #### Example
 
       The following code produces this diagnostic because the invocation of
       `c.a()` isn't used, even though the method `a` is annotated with
-      `useResult`:
+      `[useResult][meta-useResult]`:
 
       ```dart
       import 'package:meta/meta.dart';
@@ -18903,6 +20124,9 @@
   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.
@@ -19596,7 +20820,7 @@
       name: local_package
       ```
 
-      If the path is wrong, then replace it with a the correct path.
+      If the path is wrong, then replace it with the correct path.
   UNNECESSARY_DEV_DEPENDENCY:
     problemMessage: "The dev dependency on {0} is unnecessary because there is also a normal dependency on that package."
     correctionMessage: Try removing the dev dependency.
@@ -19832,7 +21056,7 @@
       #### Description
 
       The analyzer produces this diagnostic when a `switch` statement for an enum
-      doesn't include an option for one of the values in the enumeration.
+      doesn't include an option for one of the values in the enum.
 
       Note that `null` is always a possible value for an enum and therefore also
       must be handled.
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 5994057..064de4b 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 3.2.0
+version: 3.3.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,8 +7,7 @@
   sdk: '>=2.14.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^34.0.0
-  cli_util: ^0.3.0
+  _fe_analyzer_shared: ^36.0.0
   collection: ^1.15.0
   convert: ^3.0.0
   crypto: ^3.0.0
diff --git a/pkg/analyzer/test/dart/analysis/utilities_test.dart b/pkg/analyzer/test/dart/analysis/utilities_test.dart
index 36bdc90..c1aa179 100644
--- a/pkg/analyzer/test/dart/analysis/utilities_test.dart
+++ b/pkg/analyzer/test/dart/analysis/utilities_test.dart
@@ -10,10 +10,11 @@
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:path/path.dart' as p;
-import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../../util/feature_sets.dart';
+
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UtilitiesTest);
@@ -91,10 +92,7 @@
     String content = '''
 int? f() => 1;
 ''';
-    var featureSet = FeatureSet.fromEnableFlags2(
-      sdkLanguageVersion: Version.parse('2.9.0'),
-      flags: [],
-    );
+    var featureSet = FeatureSets.language_2_9;
     expect(featureSet.isEnabled(Feature.non_nullable), isFalse);
     ParseStringResult result = _withMemoryFile(
         content,
@@ -180,10 +178,7 @@
     String content = '''
 int? f() => 1;
 ''';
-    var featureSet = FeatureSet.fromEnableFlags2(
-      sdkLanguageVersion: Version.parse('2.9.0'),
-      flags: [],
-    );
+    var featureSet = FeatureSets.language_2_9;
     expect(featureSet.isEnabled(Feature.non_nullable), isFalse);
     ParseStringResult result = parseString(
         content: content, throwIfDiagnostics: false, featureSet: featureSet);
diff --git a/pkg/analyzer/test/error/error_test.dart b/pkg/analyzer/test/error/error_test.dart
index 0cce128..afad0dc 100644
--- a/pkg/analyzer/test/error/error_test.dart
+++ b/pkg/analyzer/test/error/error_test.dart
@@ -37,7 +37,7 @@
       if (declaration is ClassDeclaration) {
         var extendsClause = declaration.extendsClause;
         if (extendsClause != null &&
-            extendsClause.superclass2.name.name == 'ErrorCode') {
+            extendsClause.superclass.name.name == 'ErrorCode') {
           String className = declaration.name.name;
           for (ClassMember member in declaration.members) {
             if (member is FieldDeclaration && member.isStatic) {
diff --git a/pkg/analyzer/test/generated/class_member_parser_test.dart b/pkg/analyzer/test/generated/class_member_parser_test.dart
index 28b8faf..1917bae 100644
--- a/pkg/analyzer/test/generated/class_member_parser_test.dart
+++ b/pkg/analyzer/test/generated/class_member_parser_test.dart
@@ -23,8 +23,8 @@
     implements AbstractParserViaProxyTestCase {
   void test_parse_member_called_late() {
     var unit = parseCompilationUnit(
-        'class C { void late() { new C().late(); } }',
-        featureSet: nonNullable);
+      'class C { void late() { new C().late(); } }',
+    );
     var declaration = unit.declarations[0] as ClassDeclaration;
     var method = declaration.members[0] as MethodDeclaration;
 
@@ -380,7 +380,6 @@
   void test_parseClassMember_finalAndCovariantLateWithInitializer() {
     createParser(
       'covariant late final int f = 0;',
-      featureSet: nonNullable,
     );
     parser.parseClassMember('C');
     assertErrors(errors: [
@@ -1137,7 +1136,7 @@
     expect(constructor.separator!.type, TokenType.EQ);
     expect(constructor.initializers, isEmpty);
     expect(constructor.redirectedConstructor, isNotNull);
-    expect(constructor.redirectedConstructor!.type2.name.name, 'prefix.B');
+    expect(constructor.redirectedConstructor!.type.name.name, 'prefix.B');
     expect(constructor.redirectedConstructor!.period!.type, TokenType.PERIOD);
     expect(constructor.redirectedConstructor!.name!.name, 'foo');
     expect(constructor.body, isEmptyFunctionBody);
@@ -1187,7 +1186,7 @@
     expect(constructor.separator!.type, TokenType.EQ);
     expect(constructor.initializers, isEmpty);
     expect(constructor.redirectedConstructor, isNotNull);
-    expect(constructor.redirectedConstructor!.type2.name.name, 'B');
+    expect(constructor.redirectedConstructor!.type.name.name, 'B');
     expect(constructor.redirectedConstructor!.period, isNull);
     expect(constructor.redirectedConstructor!.name, isNull);
     expect(constructor.body, isEmptyFunctionBody);
@@ -1438,7 +1437,7 @@
   }
 
   void test_parseField_abstract() {
-    createParser('abstract int i;', featureSet: nonNullable);
+    createParser('abstract int i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1448,7 +1447,7 @@
   }
 
   void test_parseField_abstract_external() {
-    createParser('abstract external int i;', featureSet: nonNullable);
+    createParser('abstract external int i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1461,7 +1460,7 @@
   }
 
   void test_parseField_abstract_late() {
-    createParser('abstract late int? i;', featureSet: nonNullable);
+    createParser('abstract late int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1473,7 +1472,7 @@
   }
 
   void test_parseField_abstract_late_final() {
-    createParser('abstract late final int? i;', featureSet: nonNullable);
+    createParser('abstract late final int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1485,7 +1484,7 @@
   }
 
   void test_parseField_abstract_static() {
-    createParser('abstract static int? i;', featureSet: nonNullable);
+    createParser('abstract static int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1497,7 +1496,7 @@
   }
 
   void test_parseField_const_late() {
-    createParser('const late T f = 0;', featureSet: nonNullable);
+    createParser('const late T f = 0;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1523,7 +1522,7 @@
   }
 
   void test_parseField_external() {
-    createParser('external int i;', featureSet: nonNullable);
+    createParser('external int i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1533,7 +1532,7 @@
   }
 
   void test_parseField_external_abstract() {
-    createParser('external abstract int i;', featureSet: nonNullable);
+    createParser('external abstract int i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1546,7 +1545,7 @@
   }
 
   void test_parseField_external_late() {
-    createParser('external late int? i;', featureSet: nonNullable);
+    createParser('external late int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1558,7 +1557,7 @@
   }
 
   void test_parseField_external_late_final() {
-    createParser('external late final int? i;', featureSet: nonNullable);
+    createParser('external late final int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1570,7 +1569,7 @@
   }
 
   void test_parseField_external_static() {
-    createParser('external static int? i;', featureSet: nonNullable);
+    createParser('external static int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1580,7 +1579,7 @@
   }
 
   void test_parseField_final_late() {
-    createParser('final late T f;', featureSet: nonNullable);
+    createParser('final late T f;');
     ClassMember member = parser.parseClassMember('C');
     assertErrors(errors: [
       expectedError(ParserErrorCode.MODIFIER_OUT_OF_ORDER, 6, 4),
@@ -1606,7 +1605,7 @@
   }
 
   void test_parseField_late() {
-    createParser('late T f;', featureSet: nonNullable);
+    createParser('late T f;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1630,7 +1629,7 @@
   }
 
   void test_parseField_late_const() {
-    createParser('late const T f = 0;', featureSet: nonNullable);
+    createParser('late const T f = 0;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
@@ -1656,7 +1655,7 @@
   }
 
   void test_parseField_late_final() {
-    createParser('late final T f;', featureSet: nonNullable);
+    createParser('late final T f;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1680,7 +1679,7 @@
   }
 
   void test_parseField_late_var() {
-    createParser('late var f;', featureSet: nonNullable);
+    createParser('late var f;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     expect(member, isFieldDeclaration);
@@ -1703,7 +1702,7 @@
   }
 
   void test_parseField_non_abstract() {
-    createParser('int i;', featureSet: nonNullable);
+    createParser('int i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1713,7 +1712,7 @@
   }
 
   void test_parseField_non_external() {
-    createParser('int i;', featureSet: nonNullable);
+    createParser('int i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertNoErrors();
@@ -1723,7 +1722,7 @@
   }
 
   void test_parseField_var_late() {
-    createParser('var late f;', featureSet: nonNullable);
+    createParser('var late f;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(errors: [
diff --git a/pkg/analyzer/test/generated/constant_test.dart b/pkg/analyzer/test/generated/constant_test.dart
index e52a181..7e7f0ab 100644
--- a/pkg/analyzer/test/generated/constant_test.dart
+++ b/pkg/analyzer/test/generated/constant_test.dart
@@ -5,7 +5,9 @@
 @deprecated
 library analyzer.test.constant_test;
 
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/constant.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -48,6 +50,25 @@
     await _assertValueInt(74 ^ 42, "74 ^ 42");
   }
 
+  test_conditionalExpression_unknownCondition_dynamic() async {
+    await assertErrorsInCode('''
+const bool kIsWeb = identical(0, 0.0);
+const x = kIsWeb ? a : b;
+''', [
+      error(CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, 58,
+          1),
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 58, 1),
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 62, 1),
+      error(CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, 62,
+          1),
+    ]);
+
+    var x_result = findElement.topVar('x').evaluationResult;
+    assertDartObjectText(x_result.value, r'''
+dynamic <unknown>
+''');
+  }
+
   test_constructorInvocation_fieldInitializer() async {
     var result = await _getExpressionValue("const C(2)", context: '''
 class C {
@@ -392,6 +413,92 @@
 ''');
   }
 
+  /// Enum constants can reference other constants.
+  test_object_enum_enhanced_constants() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v1(42), v2(v1);
+  final Object? a;
+  const E([this.a]);
+}
+''');
+
+    assertDartObjectText(findElement.field('v2').evaluationResult.value, r'''
+E
+  _name: String v2
+  a: E
+    _name: String v1
+    a: int 42
+    index: int 0
+  index: int 1
+''');
+  }
+
+  test_object_enum_enhanced_named() async {
+    await resolveTestCode('''
+enum E<T> {
+  v1<double>.named(10),
+  v2.named(20);
+  final T f;
+  const E.named(this.f);
+}
+
+const x1 = E.v1;
+const x2 = E.v2;
+''');
+
+    _assertTopVarConstValue('x1', r'''
+E<double>
+  _name: String v1
+  f: double 10.0
+  index: int 0
+''');
+
+    _assertTopVarConstValue('x2', r'''
+E<int>
+  _name: String v2
+  f: int 20
+  index: int 1
+''');
+  }
+
+  test_object_enum_enhanced_unnamed() async {
+    await resolveTestCode('''
+enum E<T> {
+  v1<int>(10),
+  v2(20),
+  v3('abc');
+  final T f;
+  const E(this.f);
+}
+
+const x1 = E.v1;
+const x2 = E.v2;
+const x3 = E.v3;
+''');
+
+    _assertTopVarConstValue('x1', r'''
+E<int>
+  _name: String v1
+  f: int 10
+  index: int 0
+''');
+
+    _assertTopVarConstValue('x2', r'''
+E<int>
+  _name: String v2
+  f: int 20
+  index: int 1
+''');
+
+    _assertTopVarConstValue('x3', r'''
+E<String>
+  _name: String v3
+  f: String abc
+  index: int 2
+''');
+  }
+
   test_parenthesizedExpression() async {
     await _assertValueString("a", "('a')");
   }
@@ -521,3 +628,14 @@
     return element.evaluationResult!;
   }
 }
+
+extension on VariableElement {
+  EvaluationResultImpl get evaluationResult {
+    var constVariable = this as ConstVariableElement;
+    var evaluationResult = constVariable.evaluationResult;
+    if (evaluationResult == null) {
+      fail('Not evaluated: $this');
+    }
+    return evaluationResult;
+  }
+}
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index 41a03fc..139bb79 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -11,6 +11,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../util/ast_type_matchers.dart';
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 
 main() {
@@ -1683,9 +1684,9 @@
 
   void test_invalidTypedef() {
     parseCompilationUnit("typedef var Function(var arg);", errors: [
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 7),
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 3),
       expectedError(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, 8, 3),
-      expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 3),
       expectedError(ParserErrorCode.VAR_RETURN_TYPE, 8, 3),
       expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 29, 1),
     ]);
@@ -2431,7 +2432,7 @@
   }
 
   void test_positionalAfterNamedArgument() {
-    createParser('(x: 1, 2)');
+    createParser('(x: 1, 2)', featureSet: FeatureSets.language_2_16);
     ArgumentList list = parser.parseArgumentList();
     expectNotNullIfNoErrors(list);
     listener.assertErrors(
diff --git a/pkg/analyzer/test/generated/expression_parser_test.dart b/pkg/analyzer/test/generated/expression_parser_test.dart
index 356ecc9..5749b4d 100644
--- a/pkg/analyzer/test/generated/expression_parser_test.dart
+++ b/pkg/analyzer/test/generated/expression_parser_test.dart
@@ -4,14 +4,12 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
     show AbstractScanner;
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/ast.dart'
     show InstanceCreationExpressionImpl;
 import 'package:analyzer/src/dart/scanner/scanner.dart';
 import 'package:analyzer/src/generated/testing/token_factory.dart';
-import 'package:pub_semver/src/version.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -27,11 +25,6 @@
 /// Tests of the fasta parser based on [ExpressionParserTestMixin].
 @reflectiveTest
 class ExpressionParserTest extends FastaParserTestCase {
-  final beforeUiAsCode = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.2.0'),
-    flags: [],
-  );
-
   void test_binaryExpression_allOperators() {
     // https://github.com/dart-lang/sdk/issues/36255
     for (TokenType type in TokenType.all) {
@@ -671,7 +664,7 @@
     expect(instanceCreation.keyword, isNotNull);
     ConstructorName name = instanceCreation.constructorName;
     expect(name, isNotNull);
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(instanceCreation.argumentList, isNotNull);
@@ -1044,7 +1037,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type.name.name, 'A.B');
     expect(type.typeArguments, isNull);
     expect(name.period, isNull);
@@ -1061,7 +1054,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNotNull);
@@ -1079,7 +1072,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNotNull);
@@ -1096,7 +1089,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNull);
@@ -1113,7 +1106,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNull);
@@ -1130,7 +1123,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNull);
@@ -1147,7 +1140,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNotNull);
@@ -1164,7 +1157,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNotNull);
@@ -1182,7 +1175,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNull);
@@ -1427,7 +1420,7 @@
     expect(expression.keyword, isNotNull);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(expression.argumentList, isNotNull);
diff --git a/pkg/analyzer/test/generated/extension_methods_parser_test.dart b/pkg/analyzer/test/generated/extension_methods_parser_test.dart
index a7409c6..5c2a5c1 100644
--- a/pkg/analyzer/test/generated/extension_methods_parser_test.dart
+++ b/pkg/analyzer/test/generated/extension_methods_parser_test.dart
@@ -2,13 +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:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:pub_semver/src/version.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 
 main() {
@@ -153,8 +152,7 @@
   }
 
   void test_parse_toplevel_member_called_late_calling_self() {
-    var unit = parseCompilationUnit('void late() { late(); }',
-        featureSet: nonNullable);
+    var unit = parseCompilationUnit('void late() { late(); }');
     var method = unit.declarations[0] as FunctionDeclaration;
 
     expect(method.documentationComment, isNull);
@@ -228,10 +226,7 @@
         expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 0, 9),
         expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 15, 1)
       ],
-      featureSet: FeatureSet.fromEnableFlags2(
-        sdkLanguageVersion: Version.parse('2.3.0'),
-        flags: [],
-      ),
+      featureSet: FeatureSets.language_2_3,
     );
   }
 
diff --git a/pkg/analyzer/test/generated/formal_parameter_parser_test.dart b/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
index 0b5d7b9..64b9988 100644
--- a/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
+++ b/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
@@ -9,6 +9,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../util/ast_type_matchers.dart';
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 import 'test_support.dart';
 
@@ -34,7 +35,7 @@
     } else {
       fail('$kind');
     }
-    createParser(parametersCode, featureSet: nonNullable);
+    createParser(parametersCode);
     FormalParameterList list =
         parserProxy.parseFormalParameterList(inFunctionType: false);
     assertErrors(errors: errors);
@@ -77,7 +78,7 @@
   void test_functionTyped_named_nullable_disabled() {
     ParameterKind kind = ParameterKind.NAMED;
     var defaultParameter = parseFormalParameter('a()? : null', kind,
-            featureSet: preNonNullable,
+            featureSet: FeatureSets.language_2_9,
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as DefaultFormalParameter;
     var functionParameter =
@@ -96,7 +97,7 @@
   void test_functionTyped_positional_nullable_disabled() {
     ParameterKind kind = ParameterKind.POSITIONAL;
     var defaultParameter = parseFormalParameter('a()? = null', kind,
-            featureSet: preNonNullable,
+            featureSet: FeatureSets.language_2_9,
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as DefaultFormalParameter;
     var functionParameter =
@@ -115,7 +116,7 @@
   void test_functionTyped_required_nullable_disabled() {
     ParameterKind kind = ParameterKind.REQUIRED;
     var functionParameter = parseFormalParameter('a()?', kind,
-            featureSet: preNonNullable,
+            featureSet: FeatureSets.language_2_9,
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
diff --git a/pkg/analyzer/test/generated/function_reference_parser_test.dart b/pkg/analyzer/test/generated/function_reference_parser_test.dart
index 2c0c918..6fd9460 100644
--- a/pkg/analyzer/test/generated/function_reference_parser_test.dart
+++ b/pkg/analyzer/test/generated/function_reference_parser_test.dart
@@ -7,6 +7,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 
 main() {
@@ -36,68 +37,54 @@
   }
 
   void test_feature_disabled() {
-    expect_f_a_b((parseStatement('f<a, b>;', featureSet: preConstructorTearoffs)
-            as ExpressionStatement)
-        .expression);
+    expect_f_a_b(
+        (parseStatement('f<a, b>;', featureSet: FeatureSets.language_2_13)
+                as ExpressionStatement)
+            .expression);
     listener.assertErrors([
       expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 1, 6),
     ]);
   }
 
   void test_followingToken_accepted_closeBrace() {
-    expect_f_a_b((parseExpression('{f<a, b>}', featureSet: constructorTearoffs)
-            as SetOrMapLiteral)
-        .elements[0]);
+    expect_f_a_b((parseExpression('{f<a, b>}') as SetOrMapLiteral).elements[0]);
   }
 
   void test_followingToken_accepted_closeBracket() {
-    expect_f_a_b((parseExpression('[f<a, b>]', featureSet: constructorTearoffs)
-            as ListLiteral)
-        .elements[0]);
+    expect_f_a_b((parseExpression('[f<a, b>]') as ListLiteral).elements[0]);
   }
 
   void test_followingToken_accepted_closeParen() {
-    expect_f_a_b((parseExpression('g(f<a, b>)', featureSet: constructorTearoffs)
-            as MethodInvocation)
+    expect_f_a_b((parseExpression('g(f<a, b>)') as MethodInvocation)
         .argumentList
         .arguments[0]);
   }
 
   void test_followingToken_accepted_colon() {
-    expect_f_a_b(
-        ((parseExpression('{f<a, b>: null}', featureSet: constructorTearoffs)
-                    as SetOrMapLiteral)
-                .elements[0] as MapLiteralEntry)
-            .key);
+    expect_f_a_b(((parseExpression('{f<a, b>: null}') as SetOrMapLiteral)
+            .elements[0] as MapLiteralEntry)
+        .key);
   }
 
   void test_followingToken_accepted_comma() {
     expect_f_a_b(
-        (parseExpression('[f<a, b>, null]', featureSet: constructorTearoffs)
-                as ListLiteral)
-            .elements[0]);
+        (parseExpression('[f<a, b>, null]') as ListLiteral).elements[0]);
   }
 
   void test_followingToken_accepted_equals() {
     expect_f_a_b(
-        (parseExpression('f<a, b> == null', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
+        (parseExpression('f<a, b> == null') as BinaryExpression).leftOperand);
   }
 
   void test_followingToken_accepted_not_equals() {
     expect_f_a_b(
-        (parseExpression('f<a, b> != null', featureSet: constructorTearoffs)
-                as BinaryExpression)
-            .leftOperand);
+        (parseExpression('f<a, b> != null') as BinaryExpression).leftOperand);
   }
 
   void test_followingToken_accepted_openParen() {
     // This is a special case because when a `(` follows `<typeArguments>` it is
     // parsed as a MethodInvocation rather than a GenericInstantiation.
-    var methodInvocation =
-        parseExpression('f<a, b>()', featureSet: constructorTearoffs)
-            as MethodInvocation;
+    var methodInvocation = parseExpression('f<a, b>()') as MethodInvocation;
     expect(methodInvocation.methodName.name, 'f');
     var typeArgs = methodInvocation.typeArguments!.arguments;
     expect(typeArgs, hasLength(2));
@@ -110,10 +97,9 @@
     // This is a special case because `f<a, b>.methodName(...)` is parsed as an
     // InstanceCreationExpression.
     var instanceCreationExpression =
-        parseExpression('f<a, b>.toString()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('f<a, b>.toString()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var type = constructorName.type2;
+    var type = constructorName.type;
     expect((type.name as SimpleIdentifier).name, 'f');
     var typeArgs = type.typeArguments!.arguments;
     expect(typeArgs, hasLength(2));
@@ -125,81 +111,60 @@
 
   void test_followingToken_accepted_period_methodInvocation_generic() {
     expect_f_a_b(
-        (parseExpression('f<a, b>.foo<c>()', featureSet: constructorTearoffs)
-                as MethodInvocation)
-            .target!);
+        (parseExpression('f<a, b>.foo<c>()') as MethodInvocation).target!);
   }
 
   void test_followingToken_accepted_period_propertyAccess() {
     expect_f_a_b(
-        (parseExpression('f<a, b>.hashCode', featureSet: constructorTearoffs)
-                as PropertyAccess)
-            .target!);
+        (parseExpression('f<a, b>.hashCode') as PropertyAccess).target!);
   }
 
   void test_followingToken_accepted_semicolon() {
-    expect_f_a_b((parseStatement('f<a, b>;', featureSet: constructorTearoffs)
-            as ExpressionStatement)
-        .expression);
+    expect_f_a_b(
+        (parseStatement('f<a, b>;') as ExpressionStatement).expression);
     listener.assertNoErrors();
   }
 
   void test_followingToken_rejected_ampersand() {
-    expect_two_args(parseExpression('f(a<b,c>&d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>&d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_as() {
-    expect_two_args(
-        parseExpression('f(a<b,c>as)', featureSet: constructorTearoffs)
-            as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>as)') as MethodInvocation);
   }
 
   void test_followingToken_rejected_asterisk() {
-    expect_two_args(parseExpression('f(a<b,c>*d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>*d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_bang_openBracket() {
-    expect_two_args(
-        parseExpression('f(a<b,c>![d])', featureSet: constructorTearoffs)
-            as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>![d])') as MethodInvocation);
   }
 
   void test_followingToken_rejected_bang_paren() {
-    expect_two_args(
-        parseExpression('f(a<b,c>!(d))', featureSet: constructorTearoffs)
-            as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>!(d))') as MethodInvocation);
   }
 
   void test_followingToken_rejected_bar() {
-    expect_two_args(parseExpression('f(a<b,c>|d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>|d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_caret() {
-    expect_two_args(parseExpression('f(a<b,c>^d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>^d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_is() {
-    var methodInvocation = parseExpression('f(a<b,c> is int)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation = parseExpression('f(a<b,c> is int)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
+    ]) as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
     expect(arguments, hasLength(2));
     expect(arguments[0], TypeMatcher<BinaryExpression>());
@@ -210,22 +175,18 @@
     // Note: in principle we could parse this as a generic instantiation of a
     // generic instantiation, but such an expression would be meaningless so we
     // reject it at the parser level.
-    parseExpression('f<a><b>', featureSet: constructorTearoffs, errors: [
+    parseExpression('f<a><b>', errors: [
       expectedError(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 3, 1),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 7, 0),
     ]);
   }
 
   void test_followingToken_rejected_minus() {
-    expect_two_args(
-        parseExpression('f(a<b,c>-d)', featureSet: constructorTearoffs)
-            as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>-d)') as MethodInvocation);
   }
 
   void test_followingToken_rejected_openBracket() {
-    expect_two_args(
-        parseExpression('f(a<b,c>[d])', featureSet: constructorTearoffs)
-            as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>[d])') as MethodInvocation);
   }
 
   void test_followingToken_rejected_openBracket_error() {
@@ -233,34 +194,25 @@
     // `<` and `>` as delimiting type arguments, but the parser doesn't have
     // enough lookahead to see that this is the only possible error-free parse;
     // it commits to interpreting `<` and `>` as operators when it sees the `[`.
-    expect_two_args(parseExpression('f(a<b,c>[d]>e)',
-        featureSet: constructorTearoffs,
-        errors: [
-          expectedError(
-              ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 11, 1),
-        ]) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>[d]>e)', errors: [
+      expectedError(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 11, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_openBracket_unambiguous() {
-    expect_two_args(
-        parseExpression('f(a<b,c>[d, e])', featureSet: constructorTearoffs)
-            as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>[d, e])') as MethodInvocation);
   }
 
   void test_followingToken_rejected_percent() {
-    expect_two_args(parseExpression('f(a<b,c>%d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>%d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_period_period() {
-    var methodInvocation = parseExpression('f(a<b,c>..toString())',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation = parseExpression('f(a<b,c>..toString())', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+    ]) as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
     expect(arguments, hasLength(2));
     expect(arguments[0], TypeMatcher<BinaryExpression>());
@@ -268,19 +220,15 @@
   }
 
   void test_followingToken_rejected_plus() {
-    expect_two_args(parseExpression('f(a<b,c>+d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>+d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_question() {
-    var methodInvocation = parseExpression('f(a<b,c> ? null : null)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation = parseExpression('f(a<b,c> ? null : null)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 1),
+    ]) as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
     expect(arguments, hasLength(2));
     expect(arguments[0], TypeMatcher<BinaryExpression>());
@@ -288,28 +236,22 @@
   }
 
   void test_followingToken_rejected_question_period_methodInvocation() {
-    expect_two_args(parseExpression('f(a<b,c>?.toString())',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>?.toString())', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_question_period_methodInvocation_generic() {
-    expect_two_args(parseExpression('f(a<b,c>?.foo<c>())',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>?.foo<c>())', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_question_period_period() {
-    var methodInvocation = parseExpression('f(a<b,c>?..toString())',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 3),
-          expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 8),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation = parseExpression('f(a<b,c>?..toString())', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 3),
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 8),
+    ]) as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
     expect(arguments, hasLength(3));
     expect(arguments[0], TypeMatcher<BinaryExpression>());
@@ -318,43 +260,33 @@
   }
 
   void test_followingToken_rejected_question_period_propertyAccess() {
-    expect_two_args(parseExpression('f(a<b,c>?.hashCode)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>?.hashCode)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_question_question() {
-    expect_two_args(parseExpression('f(a<b,c> ?? d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c> ?? d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_slash() {
-    expect_two_args(parseExpression('f(a<b,c>/d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>/d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+    ]) as MethodInvocation);
   }
 
   void test_followingToken_rejected_tilde_slash() {
-    expect_two_args(parseExpression('f(a<b,c>~/d)',
-        errors: [
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
-        ],
-        featureSet: constructorTearoffs) as MethodInvocation);
+    expect_two_args(parseExpression('f(a<b,c>~/d)', errors: [
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+    ]) as MethodInvocation);
   }
 
   void test_functionReference_after_indexExpression() {
     // Note: this is not legal Dart, but it's important that we do error
     // recovery and don't crash the parser.
-    var functionReference =
-        parseExpression('x[0]<a, b>', featureSet: constructorTearoffs)
-            as FunctionReference;
+    var functionReference = parseExpression('x[0]<a, b>') as FunctionReference;
     expect(functionReference.function, TypeMatcher<IndexExpression>());
     var typeArgs = functionReference.typeArguments!.arguments;
     expect(typeArgs, hasLength(2));
@@ -365,9 +297,7 @@
   void test_functionReference_after_indexExpression_bang() {
     // Note: this is not legal Dart, but it's important that we do error
     // recovery and don't crash the parser.
-    var functionReference =
-        parseExpression('x[0]!<a, b>', featureSet: constructorTearoffs)
-            as FunctionReference;
+    var functionReference = parseExpression('x[0]!<a, b>') as FunctionReference;
     expect(functionReference.function, TypeMatcher<PostfixExpression>());
     var typeArgs = functionReference.typeArguments!.arguments;
     expect(typeArgs, hasLength(2));
@@ -379,8 +309,7 @@
     // Note: this is not legal Dart, but it's important that we do error
     // recovery and don't crash the parser.
     var functionReference =
-        parseExpression('x[0]()<a, b>', featureSet: constructorTearoffs)
-            as FunctionReference;
+        parseExpression('x[0]()<a, b>') as FunctionReference;
     expect(functionReference.function,
         TypeMatcher<FunctionExpressionInvocation>());
     var typeArgs = functionReference.typeArguments!.arguments;
@@ -392,9 +321,7 @@
   void test_functionReference_after_indexExpression_nullAware() {
     // Note: this is not legal Dart, but it's important that we do error
     // recovery and don't crash the parser.
-    var functionReference =
-        parseExpression('x?[0]<a, b>', featureSet: constructorTearoffs)
-            as FunctionReference;
+    var functionReference = parseExpression('x?[0]<a, b>') as FunctionReference;
     expect(functionReference.function, TypeMatcher<IndexExpression>());
     var typeArgs = functionReference.typeArguments!.arguments;
     expect(typeArgs, hasLength(2));
@@ -403,9 +330,7 @@
   }
 
   void test_methodTearoff() {
-    var functionReference =
-        parseExpression('f().m<a, b>', featureSet: constructorTearoffs)
-            as FunctionReference;
+    var functionReference = parseExpression('f().m<a, b>') as FunctionReference;
     var function = functionReference.function as PropertyAccess;
     var target = function.target as MethodInvocation;
     expect(target.methodName.name, 'f');
@@ -418,8 +343,7 @@
 
   void test_methodTearoff_cascaded() {
     var cascadeExpression =
-        parseExpression('f()..m<a, b>', featureSet: constructorTearoffs)
-            as CascadeExpression;
+        parseExpression('f()..m<a, b>') as CascadeExpression;
     var functionReference =
         cascadeExpression.cascadeSections[0] as FunctionReference;
     var function = functionReference.function as PropertyAccess;
@@ -433,8 +357,7 @@
 
   void test_prefixedIdentifier() {
     var functionReference =
-        parseExpression('prefix.f<a, b>', featureSet: constructorTearoffs)
-            as FunctionReference;
+        parseExpression('prefix.f<a, b>') as FunctionReference;
     var function = functionReference.function as PrefixedIdentifier;
     expect(function.prefix.name, 'prefix');
     expect(function.identifier.name, 'f');
@@ -445,8 +368,8 @@
   }
 
   void test_three_identifiers() {
-    var functionReference = parseExpression('prefix.ClassName.m<a, b>',
-        featureSet: constructorTearoffs) as FunctionReference;
+    var functionReference =
+        parseExpression('prefix.ClassName.m<a, b>') as FunctionReference;
     var function = functionReference.function as PropertyAccess;
     var target = function.target as PrefixedIdentifier;
     expect(target.prefix.name, 'prefix');
diff --git a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
index 9e967e9..cfaf099 100644
--- a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
+++ b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
@@ -2,13 +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:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 import 'test_support.dart';
 
@@ -30,10 +29,7 @@
     return parseCompilationUnit(
       content,
       errors: combinedErrors,
-      featureSet: FeatureSet.fromEnableFlags2(
-        sdkLanguageVersion: Version.parse('2.12.0'),
-        flags: [],
-      ),
+      featureSet: FeatureSets.language_2_12,
     );
   }
 }
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index 54794d7..51d910d 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -10,16 +10,82 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidCodeTest);
-    defineReflectiveTests(InvalidCodeWithNullSafetyTest);
+    defineReflectiveTests(InvalidCodeWithoutNullSafetyTest);
   });
 }
 
+@reflectiveTest
+class InvalidCodeTest extends PubPackageResolutionTest {
+  test_functionExpression_emptyBody() async {
+    await _assertCanBeAnalyzed(r'''
+var v = <T>();
+''');
+  }
+
+  test_functionExpressionInvocation_mustBeNullShortingTerminated() async {
+    // It looks like MethodInvocation, but because `8` is not SimpleIdentifier,
+    // we parse it as FunctionExpressionInvocation.
+    await _assertCanBeAnalyzed(r'''
+var v = a?.8(b);
+''');
+  }
+
+  test_inAnnotation_noFlow_labeledStatement() async {
+    await _assertCanBeAnalyzed('''
+@A(() { label: })
+typedef F = void Function();
+''');
+  }
+
+  test_inDefaultValue_noFlow_ifExpression() async {
+    await _assertCanBeAnalyzed('''
+typedef void F({a = [if (true) 0]});
+''');
+  }
+
+  test_inDefaultValue_noFlow_ifStatement() async {
+    await _assertCanBeAnalyzed('''
+typedef void F([a = () { if (true) 0; }]);
+''');
+  }
+
+  test_issue_40837() async {
+    await _assertCanBeAnalyzed('''
+class A {
+  const A(_);
+}
+
+@A(() => 0)
+class B {}
+''');
+  }
+
+  test_methodInvocation_ofGenericClass_generic_static_fromLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A<T> {
+  static void foo<T2>() {}
+}
+''');
+    await _assertCanBeAnalyzed('''
+// @dart = 2.9
+import 'a.dart';
+
+const bar = A.foo();
+''');
+  }
+
+  Future<void> _assertCanBeAnalyzed(String text) async {
+    await resolveTestCode(text);
+    assertHasTestErrors();
+  }
+}
+
 /// Tests for various end-to-end cases when invalid code caused exceptions
 /// in one or another Analyzer subsystem. We are not interested not in specific
 /// errors generated, but we want to make sure that there is at least one,
 /// and analysis finishes without exceptions.
 @reflectiveTest
-class InvalidCodeTest extends PubPackageResolutionTest
+class InvalidCodeWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   // TODO(https://github.com/dart-lang/sdk/issues/44666): Use null safety in
   //  test cases.
@@ -409,69 +475,3 @@
     assertHasTestErrors();
   }
 }
-
-@reflectiveTest
-class InvalidCodeWithNullSafetyTest extends PubPackageResolutionTest {
-  test_functionExpression_emptyBody() async {
-    await _assertCanBeAnalyzed(r'''
-var v = <T>();
-''');
-  }
-
-  test_functionExpressionInvocation_mustBeNullShortingTerminated() async {
-    // It looks like MethodInvocation, but because `8` is not SimpleIdentifier,
-    // we parse it as FunctionExpressionInvocation.
-    await _assertCanBeAnalyzed(r'''
-var v = a?.8(b);
-''');
-  }
-
-  test_inAnnotation_noFlow_labeledStatement() async {
-    await _assertCanBeAnalyzed('''
-@A(() { label: })
-typedef F = void Function();
-''');
-  }
-
-  test_inDefaultValue_noFlow_ifExpression() async {
-    await _assertCanBeAnalyzed('''
-typedef void F({a = [if (true) 0]});
-''');
-  }
-
-  test_inDefaultValue_noFlow_ifStatement() async {
-    await _assertCanBeAnalyzed('''
-typedef void F([a = () { if (true) 0; }]);
-''');
-  }
-
-  test_issue_40837() async {
-    await _assertCanBeAnalyzed('''
-class A {
-  const A(_);
-}
-
-@A(() => 0)
-class B {}
-''');
-  }
-
-  test_methodInvocation_ofGenericClass_generic_static_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A<T> {
-  static void foo<T2>() {}
-}
-''');
-    await _assertCanBeAnalyzed('''
-// @dart = 2.9
-import 'a.dart';
-
-const bar = A.foo();
-''');
-  }
-
-  Future<void> _assertCanBeAnalyzed(String text) async {
-    await resolveTestCode(text);
-    assertHasTestErrors();
-  }
-}
diff --git a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
index bd35b65..7beae7f 100644
--- a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
+++ b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
@@ -7,6 +7,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 
 main() {
@@ -21,139 +22,128 @@
   void test_constructor_field_initializer() {
     // Even though `C() : this.new();` is allowed, `C() : this.new = ...;`
     // should not be.
-    parseCompilationUnit(
-        '''
+    parseCompilationUnit('''
 class C {
   C() : this.new = null;
 }
-''',
-        featureSet: constructorTearoffs,
-        errors: [
-          expectedError(
-              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 18, 4),
-          expectedError(ParserErrorCode.MISSING_IDENTIFIER, 23, 3),
-          expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 23, 3),
-          expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 23, 3),
-          expectedError(ParserErrorCode.MISSING_KEYWORD_OPERATOR, 27, 1),
-          expectedError(ParserErrorCode.INVALID_OPERATOR, 27, 1),
-          expectedError(ParserErrorCode.MISSING_METHOD_PARAMETERS, 27, 1),
-          expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 29, 4),
-          expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 29, 4),
-          expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 33, 1),
-        ]);
+''', errors: [
+      expectedError(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 18, 4),
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 23, 3),
+      expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 23, 3),
+      expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 23, 3),
+      expectedError(ParserErrorCode.MISSING_KEYWORD_OPERATOR, 27, 1),
+      expectedError(ParserErrorCode.INVALID_OPERATOR, 27, 1),
+      expectedError(ParserErrorCode.MISSING_METHOD_PARAMETERS, 27, 1),
+      expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 29, 4),
+      expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 29, 4),
+      expectedError(ParserErrorCode.EXPECTED_CLASS_MEMBER, 33, 1),
+    ]);
   }
 
   void test_constructor_invocation_const() {
     var instanceCreationExpression =
-        parseExpression('const C.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('const C.new()') as InstanceCreationExpression;
     // Parsing treats `new` as an identifier, so `D.new` is classified as a
     // type.  Resolution will change the type to `D` and the name to `new` if
     // appropriate.
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'C');
     expect(typeName.identifier.name, 'new');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name, isNull);
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_const_generic() {
     var instanceCreationExpression =
-        parseExpression('const C<int>.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('const C<int>.new()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as SimpleIdentifier;
+    var typeName = constructorName.type.name as SimpleIdentifier;
     expect(typeName.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_const_prefixed() {
     var instanceCreationExpression =
-        parseExpression('const prefix.C.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('const prefix.C.new()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_const_prefixed_generic() {
     var instanceCreationExpression = parseExpression(
-        'const prefix.C<int>.new()',
-        featureSet: constructorTearoffs) as InstanceCreationExpression;
+      'const prefix.C<int>.new()',
+    ) as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_explicit() {
     var instanceCreationExpression =
-        parseExpression('new C.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('new C.new()') as InstanceCreationExpression;
     // Parsing treats `new` as an identifier, so `D.new` is classified as a
     // type.  Resolution will change the type to `D` and the name to `new` if
     // appropriate.
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'C');
     expect(typeName.identifier.name, 'new');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name, isNull);
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_explicit_generic() {
     var instanceCreationExpression =
-        parseExpression('new C<int>.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('new C<int>.new()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as SimpleIdentifier;
+    var typeName = constructorName.type.name as SimpleIdentifier;
     expect(typeName.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_explicit_prefixed() {
     var instanceCreationExpression =
-        parseExpression('new prefix.C.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('new prefix.C.new()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_explicit_prefixed_generic() {
-    var instanceCreationExpression = parseExpression('new prefix.C<int>.new()',
-        featureSet: constructorTearoffs) as InstanceCreationExpression;
+    var instanceCreationExpression = parseExpression(
+      'new prefix.C<int>.new()',
+    ) as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_implicit() {
-    var methodInvocation =
-        parseExpression('C.new()', featureSet: constructorTearoffs)
-            as MethodInvocation;
+    var methodInvocation = parseExpression('C.new()') as MethodInvocation;
     var target = methodInvocation.target as SimpleIdentifier;
     expect(target.name, 'C');
     expect(methodInvocation.methodName.name, 'new');
@@ -163,20 +153,18 @@
 
   void test_constructor_invocation_implicit_generic() {
     var instanceCreationExpression =
-        parseExpression('C<int>.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('C<int>.new()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as SimpleIdentifier;
+    var typeName = constructorName.type.name as SimpleIdentifier;
     expect(typeName.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
 
   void test_constructor_invocation_implicit_prefixed() {
     var methodInvocation =
-        parseExpression('prefix.C.new()', featureSet: constructorTearoffs)
-            as MethodInvocation;
+        parseExpression('prefix.C.new()') as MethodInvocation;
     var target = methodInvocation.target as PrefixedIdentifier;
     expect(target.prefix.name, 'prefix');
     expect(target.identifier.name, 'C');
@@ -187,13 +175,12 @@
 
   void test_constructor_invocation_implicit_prefixed_generic() {
     var instanceCreationExpression =
-        parseExpression('prefix.C<int>.new()', featureSet: constructorTearoffs)
-            as InstanceCreationExpression;
+        parseExpression('prefix.C<int>.new()') as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -203,7 +190,7 @@
 class C {
   C.new();
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
@@ -216,7 +203,7 @@
   factory C.new() => C._();
   C._();
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members[0] as ConstructorDeclaration;
@@ -224,17 +211,13 @@
   }
 
   void test_constructor_tearoff() {
-    var prefixedIdentifier =
-        parseExpression('C.new', featureSet: constructorTearoffs)
-            as PrefixedIdentifier;
+    var prefixedIdentifier = parseExpression('C.new') as PrefixedIdentifier;
     expect(prefixedIdentifier.prefix.name, 'C');
     expect(prefixedIdentifier.identifier.name, 'new');
   }
 
   void test_constructor_tearoff_generic() {
-    var propertyAccess =
-        parseExpression('C<int>.new', featureSet: constructorTearoffs)
-            as PropertyAccess;
+    var propertyAccess = parseExpression('C<int>.new') as PropertyAccess;
     var target = propertyAccess.target as FunctionReference;
     var className = target.function as SimpleIdentifier;
     expect(className.name, 'C');
@@ -243,8 +226,8 @@
   }
 
   void test_constructor_tearoff_generic_method_invocation() {
-    var methodInvocation = parseExpression('C<int>.new.toString()',
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation =
+        parseExpression('C<int>.new.toString()') as MethodInvocation;
     var target = methodInvocation.target as PropertyAccess;
     var functionReference = target.target as FunctionReference;
     var className = functionReference.function as SimpleIdentifier;
@@ -266,8 +249,7 @@
 
   void test_constructor_tearoff_method_invocation() {
     var methodInvocation =
-        parseExpression('C.new.toString()', featureSet: constructorTearoffs)
-            as MethodInvocation;
+        parseExpression('C.new.toString()') as MethodInvocation;
     var target = methodInvocation.target as PrefixedIdentifier;
     expect(target.prefix.name, 'C');
     expect(target.identifier.name, 'new');
@@ -277,9 +259,7 @@
   }
 
   void test_constructor_tearoff_prefixed() {
-    var propertyAccess =
-        parseExpression('prefix.C.new', featureSet: constructorTearoffs)
-            as PropertyAccess;
+    var propertyAccess = parseExpression('prefix.C.new') as PropertyAccess;
     var target = propertyAccess.target as PrefixedIdentifier;
     expect(target.prefix.name, 'prefix');
     expect(target.identifier.name, 'C');
@@ -287,9 +267,7 @@
   }
 
   void test_constructor_tearoff_prefixed_generic() {
-    var propertyAccess =
-        parseExpression('prefix.C<int>.new', featureSet: constructorTearoffs)
-            as PropertyAccess;
+    var propertyAccess = parseExpression('prefix.C<int>.new') as PropertyAccess;
     var target = propertyAccess.target as FunctionReference;
     var className = target.function as PrefixedIdentifier;
     expect(className.prefix.name, 'prefix');
@@ -299,8 +277,9 @@
   }
 
   void test_constructor_tearoff_prefixed_generic_method_invocation() {
-    var methodInvocation = parseExpression('prefix.C<int>.new.toString()',
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation = parseExpression(
+      'prefix.C<int>.new.toString()',
+    ) as MethodInvocation;
     var target = methodInvocation.target as PropertyAccess;
     var functionReference = target.target as FunctionReference;
     var className = functionReference.function as PrefixedIdentifier;
@@ -314,8 +293,9 @@
   }
 
   void test_constructor_tearoff_prefixed_method_invocation() {
-    var methodInvocation = parseExpression('prefix.C.new.toString()',
-        featureSet: constructorTearoffs) as MethodInvocation;
+    var methodInvocation = parseExpression(
+      'prefix.C.new.toString()',
+    ) as MethodInvocation;
     var target = methodInvocation.target as PropertyAccess;
     var prefixedIdentifier = target.target as PrefixedIdentifier;
     expect(prefixedIdentifier.prefix.name, 'prefix');
@@ -333,7 +313,7 @@
   C.new();
 }
 ''',
-        featureSet: preConstructorTearoffs,
+        featureSet: FeatureSets.language_2_13,
         errors: [
           expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 14, 3),
         ]);
@@ -348,7 +328,7 @@
 class C {
   factory C() = D.new;
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
@@ -357,10 +337,10 @@
     // type.  Resolution will change the type to `D` and the name to `new` if
     // appropriate.
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as PrefixedIdentifier;
+    var typeName = redirectedConstructor.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'D');
     expect(typeName.identifier.name, 'new');
-    expect(redirectedConstructor.type2.typeArguments, isNull);
+    expect(redirectedConstructor.type.typeArguments, isNull);
     expect(redirectedConstructor.name, isNull);
   }
 
@@ -369,15 +349,15 @@
 class C {
   factory C() = D<int>.new;
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as SimpleIdentifier;
+    var typeName = redirectedConstructor.type.name as SimpleIdentifier;
     expect(typeName.name, 'D');
-    expect(redirectedConstructor.type2.typeArguments!.arguments, hasLength(1));
+    expect(redirectedConstructor.type.typeArguments!.arguments, hasLength(1));
     expect(redirectedConstructor.name!.name, 'new');
   }
 
@@ -386,16 +366,16 @@
 class C {
   factory C() = prefix.D.new;
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as PrefixedIdentifier;
+    var typeName = redirectedConstructor.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'D');
-    expect(redirectedConstructor.type2.typeArguments, isNull);
+    expect(redirectedConstructor.type.typeArguments, isNull);
     expect(redirectedConstructor.name!.name, 'new');
   }
 
@@ -404,16 +384,16 @@
 class C {
   factory C() = prefix.D<int>.new;
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as PrefixedIdentifier;
+    var typeName = redirectedConstructor.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'D');
-    expect(redirectedConstructor.type2.typeArguments!.arguments, hasLength(1));
+    expect(redirectedConstructor.type.typeArguments!.arguments, hasLength(1));
     expect(redirectedConstructor.name!.name, 'new');
   }
 
@@ -422,7 +402,7 @@
 class C extends B {
   C() : super.new();
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
@@ -438,7 +418,7 @@
   C.named() : this.new();
   C();
 }
-''', featureSet: constructorTearoffs);
+''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members[0] as ConstructorDeclaration;
diff --git a/pkg/analyzer/test/generated/nnbd_parser_test.dart b/pkg/analyzer/test/generated/nnbd_parser_test.dart
index 53a1772..62c9f59 100644
--- a/pkg/analyzer/test/generated/nnbd_parser_test.dart
+++ b/pkg/analyzer/test/generated/nnbd_parser_test.dart
@@ -12,6 +12,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../util/ast_type_matchers.dart';
+import '../util/feature_sets.dart';
 import 'parser_test_base.dart';
 import 'test_support.dart';
 
@@ -201,7 +202,7 @@
   void test_enableNonNullable_false() {
     parseCompilationUnit('main() { x is String? ? (x + y) : z; }',
         errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 20, 1)],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 
   void test_for() {
@@ -227,7 +228,7 @@
   void test_functionTypedFormalParameter_nullable_disabled() {
     parseCompilationUnit('void f(void p()?) {}',
         errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 15, 1)],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 
   test_fuzz_38113() async {
@@ -235,9 +236,9 @@
     parseCompilationUnit(r'+t{{r?this}}', errors: [
       expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1),
       expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 1, 1),
-      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 4),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 4),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 10, 1),
     ]);
   }
 
@@ -301,7 +302,7 @@
   void test_indexExpression_nullable_disabled() {
     parseCompilationUnit('main(a) { a?[0]; }',
         errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 11, 1)],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 
   void test_is_nullable() {
@@ -357,7 +358,7 @@
 main() {
   f(new C());
 }
-''', featureSet: preNonNullable);
+''', featureSet: FeatureSets.language_2_9);
   }
 
   void test_late_as_identifier_optOut() {
@@ -547,7 +548,7 @@
           expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 5, 1),
           expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 21, 1),
         ],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
     var function = unit.declarations[0] as FunctionDeclaration;
     var body = function.functionExpression.body as BlockFunctionBody;
     var statement = body.block.statements[0] as VariableDeclarationStatement;
@@ -609,7 +610,7 @@
           expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 5, 1),
           expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 21, 1),
         ],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 
   void test_nullCheckMethodResult() {
@@ -746,7 +747,7 @@
   void test_nullCheckOnLiteral_disabled() {
     parseCompilationUnit('f() { var x = 0!; }',
         errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 15, 1)],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 
   void test_nullCheckOnLiteralDouble() {
@@ -825,7 +826,7 @@
   void test_nullCheckOnValue_disabled() {
     parseCompilationUnit('f(Point p) { var x = p.y! + 7; }',
         errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 24, 1)],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 
   void test_nullCheckParenthesizedExpression() {
@@ -871,6 +872,6 @@
   void test_typeName_nullable_disabled() {
     parseCompilationUnit('int? x;',
         errors: [expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 3, 1)],
-        featureSet: preNonNullable);
+        featureSet: FeatureSets.language_2_9);
   }
 }
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 8891e87..bc4e648 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
 import 'package:test/test.dart';
@@ -21,6 +22,17 @@
 @reflectiveTest
 class NonErrorResolverTest extends PubPackageResolutionTest
     with NonErrorResolverTestCases {
+  test_async_callback_in_with_unknown_return_type_context() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  R run<R>(R Function() action);
+}
+f(C c) {
+  c.run(() async {});
+}
+''');
+  }
+
   test_await_flattened() async {
     await assertNoErrorsInCode('''
 Future<Future<int>>? ffi() => null;
@@ -51,6 +63,20 @@
 ''');
   }
 
+  test_generic_staticParameterElement_annotation() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C.named({arg});
+}
+@C<bool>.named(arg: true)
+test() {}
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
   test_inconsistentMethodInheritance_accessors_typeParameters1() async {
     await assertNoErrorsInCode(r'''
 abstract class A<E> {
@@ -94,6 +120,23 @@
 ''');
   }
 
+  test_no_call_tearoff_on_promoted_var() async {
+    await assertNoErrorsInCode('''
+class B {
+  Object call() => '';
+}
+void test(Object x) {
+  x as Object Function();
+  x; // promoted
+  x = B(); // No implicit tearoff of `.call`, demotes x
+  x; // demoted
+}
+''');
+    assertType(findNode.simple('x; // promoted'), 'Object Function()');
+    assertType(findNode.assignment('x = B()'), 'B');
+    assertType(findNode.simple('x; // demoted'), 'Object');
+  }
+
   test_typedef_not_function() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 typedef F = int;
@@ -1339,6 +1382,103 @@
 ''');
   }
 
+  test_generic_staticParameterElement_annotation_implicitTypeArg() async {
+    var required = isNullSafetyEnabled ? 'required' : '';
+    await assertNoErrorsInCode('''
+class C<T> {
+  const C.named({$required T arg});
+}
+@C.named(arg: true)
+test() {}
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_explicitNew() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+test() => new C<bool>.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_explicitNew_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+C<bool> test() => new C.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_implicitNew() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+test() => C<bool>.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_instanceCreation_implicitNew_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C.named({arg});
+}
+C<bool> test() => C.named(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    expect(y, TypeMatcher<ParameterMember>());
+    expect(y.declaration, findElement.parameter('arg'));
+  }
+
+  test_generic_staticParameterElement_methodCall() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  T method<T>({arg});
+}
+test(C c) => c.method<bool>(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
+  test_generic_staticParameterElement_methodCall_implicitTypeArg() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  T method<T>({arg});
+}
+bool test(C c) => c.method<bool>(arg: true);
+''');
+    var x = findNode.namedExpression('arg: true');
+    var y = x.staticParameterElement!;
+    // Note: the staticParameterElement is synthetic; see
+    // https://github.com/dart-lang/sdk/issues/48500
+    expect(y, isNot(TypeMatcher<ParameterMember>()));
+    expect(y.enclosingElement, isNull);
+  }
+
   test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() async {
     await assertNoErrorsInCode('''
 // @dart = 2.9
@@ -1471,6 +1611,20 @@
 ''');
   }
 
+  test_implicit_call_tearoff_assignment_rhs() async {
+    await assertNoErrorsInCode('''
+class C {
+  void call() {}
+}
+test() {
+  void Function() f;
+  f = C();
+  return f;
+}
+''');
+    assertType(findNode.assignment('f = C()'), 'void Function()');
+  }
+
   test_importDuplicatedLibraryName() async {
     newFile("$testPackageLibPath/lib.dart", content: "library lib;");
     await assertErrorsInCode(r'''
@@ -3292,4 +3446,34 @@
 }
 ''');
   }
+
+  test_yieldStar_inside_method_async() async {
+    await assertNoErrorsInCode('''
+class A {
+  m() async* {
+    yield* Stream.fromIterable([1]);
+  }
+}
+''');
+
+    assertType(
+        findNode
+            .yieldStatement('yield* Stream.fromIterable([1]);')
+            .expression
+            .staticType,
+        'Stream<int>');
+  }
+
+  test_yieldStar_inside_method_sync() async {
+    await assertNoErrorsInCode('''
+class A {
+  m() sync* {
+    yield* [1];
+  }
+}
+''');
+
+    assertType(findNode.yieldStatement('yield* [1];').expression.staticType,
+        'List<int>');
+  }
 }
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index d588af2..1b59a3a 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -86,9 +86,10 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token beginToken, Token? abstractToken, Token? macroToken, Token name) {
-    super.beginClassDeclaration(beginToken, abstractToken, macroToken, name);
+  void beginClassDeclaration(Token beginToken, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
+    super.beginClassDeclaration(
+        beginToken, abstractToken, macroToken, augmentToken, name);
     begin('ClassDeclaration');
   }
 
@@ -367,20 +368,22 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
       Token? varFinalOrConst,
       Token? getOrSet,
       Token name) {
-    super.beginMethod(declarationKind, externalToken, staticToken,
+    super.beginMethod(declarationKind, augmentToken, externalToken, staticToken,
         covariantToken, varFinalOrConst, getOrSet, name);
     begin('Method');
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
-    super.beginMixinDeclaration(mixinKeyword, name);
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
+    super.beginMixinDeclaration(augmentToken, mixinKeyword, name);
     begin('MixinDeclaration');
   }
 
@@ -391,10 +394,10 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token beginToken, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token beginToken, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     super.beginNamedMixinApplication(
-        beginToken, abstractToken, macroToken, name);
+        beginToken, abstractToken, macroToken, augmentToken, name);
     begin('NamedMixinApplication');
   }
 
@@ -477,8 +480,9 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
-    super.beginTopLevelMethod(lastConsumed, externalToken);
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
+    super.beginTopLevelMethod(lastConsumed, augmentToken, externalToken);
     begin('TopLevelMethod');
   }
 
@@ -630,6 +634,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -642,6 +647,7 @@
     expectIn('Member');
     super.endClassFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -756,6 +762,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -767,6 +774,7 @@
     expectIn('Member');
     super.endEnumFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -817,6 +825,7 @@
   @override
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -829,6 +838,7 @@
     expectIn('Member');
     super.endExtensionFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -966,9 +976,9 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     end('Import');
-    super.endImport(importKeyword, semicolon);
+    super.endImport(importKeyword, augmentToken, semicolon);
   }
 
   @override
@@ -1076,6 +1086,7 @@
   @override
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1088,6 +1099,7 @@
     expectIn('Member');
     super.endMixinFields(
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index 4c2d5a6..e565e23 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -14,7 +14,6 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/ast.dart' show CompilationUnitImpl;
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
@@ -28,6 +27,7 @@
 import 'package:pub_semver/src/version.dart';
 import 'package:test/test.dart';
 
+import '../util/feature_sets.dart';
 import 'parser_fasta_listener.dart';
 import 'test_support.dart';
 
@@ -221,25 +221,6 @@
     implements AbstractParserTestCase {
   static final List<ErrorCode> NO_ERROR_COMPARISON = <ErrorCode>[];
 
-  final constructorTearoffs = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: ExperimentStatus.currentVersion,
-    flags: [EnableString.constructor_tearoffs],
-  );
-
-  final controlFlow = FeatureSet.latestLanguageVersion();
-
-  final spread = FeatureSet.latestLanguageVersion();
-
-  final nonNullable = FeatureSet.latestLanguageVersion();
-
-  final preConstructorTearoffs = FeatureSet.fromEnableFlags2(
-      sdkLanguageVersion: Version.parse('2.13.0'), flags: []);
-
-  final preNonNullable = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.9.0'),
-    flags: [],
-  );
-
   late ParserProxy parserProxy;
 
   late Token _fastaTokens;
@@ -298,10 +279,12 @@
             ? ScannerConfiguration.nonNullable
             : ScannerConfiguration.classic,
         includeComments: true);
+    var lineInfo = LineInfo(result.lineStarts);
     _fastaTokens = result.tokens;
     parserProxy = ParserProxy(_fastaTokens, featureSet,
         allowNativeClause: allowNativeClause,
-        expectedEndOffset: expectedEndOffset);
+        expectedEndOffset: expectedEndOffset,
+        lineInfo: lineInfo);
   }
 
   @override
@@ -435,8 +418,8 @@
       source,
       isNonNullableByDefault: false,
     );
-    AstBuilder astBuilder =
-        AstBuilder(errorReporter, source.uri, true, featureSet!);
+    AstBuilder astBuilder = AstBuilder(errorReporter, source.uri, true,
+        featureSet!, LineInfo.fromContent(content));
     fasta.Parser parser = fasta.Parser(astBuilder);
     astBuilder.parser = parser;
     astBuilder.allowNativeClause = allowNativeClause;
@@ -762,19 +745,26 @@
   /// Creates a [ParserProxy] which is prepared to begin parsing at the given
   /// Fasta token.
   factory ParserProxy(Token firstToken, FeatureSet featureSet,
-      {bool allowNativeClause = false, int? expectedEndOffset}) {
+      {bool allowNativeClause = false,
+      int? expectedEndOffset,
+      required LineInfo lineInfo}) {
     TestSource source = TestSource();
     var errorListener = GatheringErrorListener(checkRanges: true);
     return ParserProxy._(firstToken, source, errorListener, featureSet,
         allowNativeClause: allowNativeClause,
-        expectedEndOffset: expectedEndOffset);
+        expectedEndOffset: expectedEndOffset,
+        lineInfo: lineInfo);
   }
 
   ParserProxy._(Token firstToken, Source source, this.errorListener,
       FeatureSet featureSet,
-      {bool allowNativeClause = false, this.expectedEndOffset})
+      {bool allowNativeClause = false,
+      this.expectedEndOffset,
+      required LineInfo lineInfo})
       : super(source, errorListener,
-            featureSet: featureSet, allowNativeClause: allowNativeClause) {
+            featureSet: featureSet,
+            allowNativeClause: allowNativeClause,
+            lineInfo: lineInfo) {
     _eventListener = ForwardingTestListener(astBuilder);
     fastaParser.listener = _eventListener;
     currentToken = firstToken;
@@ -815,6 +805,7 @@
         null,
         null,
         null,
+        null,
         Token(Keyword.CLASS, 0),
         astFactory.simpleIdentifier(
             fasta.StringToken.fromString(TokenType.IDENTIFIER, className, 6)),
@@ -1047,12 +1038,14 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
-    listener.setLineInfo(source, result.lineStarts);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
+    listener.setLineInfo(source, lineInfo);
 
     parser = analyzer.Parser(
       source,
       listener,
       featureSet: featureSet,
+      lineInfo: lineInfo,
     );
     parser.allowNativeClause = allowNativeClause;
     parser.parseFunctionBodies = parseFunctionBodies;
@@ -1165,12 +1158,14 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
-    listener.setLineInfo(source, result.lineStarts);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
+    listener.setLineInfo(source, lineInfo);
 
     analyzer.Parser parser = analyzer.Parser(
       source,
       listener,
-      featureSet: FeatureSet.latestLanguageVersion(),
+      featureSet: FeatureSets.latestWithExperiments,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     CompilationUnit unit = parser.parseCompilationUnit(result.tokens);
@@ -1193,15 +1188,16 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
 
     analyzer.Parser parser = analyzer.Parser(
       source,
       listener,
       featureSet: FeatureSet.latestLanguageVersion(),
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     var unit = parser.parseCompilationUnit(result.tokens);
-    unit.lineInfo = LineInfo(result.lineStarts);
     return unit;
   }
 
@@ -1470,12 +1466,14 @@
 
     fasta.ScannerResult result =
         fasta.scanString(content, includeComments: true);
-    listener.setLineInfo(source, result.lineStarts);
+    LineInfo lineInfo = LineInfo(result.lineStarts);
+    listener.setLineInfo(source, lineInfo);
 
     analyzer.Parser parser = analyzer.Parser(
       source,
       listener,
       featureSet: FeatureSet.latestLanguageVersion(),
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     Statement statement = parser.parseStatement(result.tokens);
diff --git a/pkg/analyzer/test/generated/recovery_parser_test.dart b/pkg/analyzer/test/generated/recovery_parser_test.dart
index 1ae179e..196e3ca 100644
--- a/pkg/analyzer/test/generated/recovery_parser_test.dart
+++ b/pkg/analyzer/test/generated/recovery_parser_test.dart
@@ -880,9 +880,7 @@
   }
 
   void test_incompleteForEach2() {
-    var statement =
-        parseStatement('for (String item i) {}', featureSet: controlFlow)
-            as ForStatement;
+    var statement = parseStatement('for (String item i) {}') as ForStatement;
     listener.assertErrors([
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 12, 4),
       expectedError(ParserErrorCode.EXPECTED_TOKEN, 17, 1)
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 08cf6ac..8dff3c5 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -193,7 +193,8 @@
             featureSet: featureSet,
           );
     Token result = scanner.tokenize();
-    listener.setLineInfo(TestSource(), scanner.lineStarts);
+    LineInfo lineInfo = LineInfo(scanner.lineStarts);
+    listener.setLineInfo(TestSource(), lineInfo);
     return result;
   }
 }
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index e183e2a..6237d6f 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -1175,7 +1175,7 @@
     ConstructorName name = parseConstructorName('A.n');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
   }
@@ -1184,7 +1184,7 @@
     ConstructorName name = parseConstructorName('p.A.n');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNotNull);
     expect(name.name, isNotNull);
   }
@@ -1193,7 +1193,7 @@
     ConstructorName name = parseConstructorName('A');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
   }
@@ -1202,7 +1202,7 @@
     ConstructorName name = parseConstructorName('p.A');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
   }
@@ -1250,8 +1250,8 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.extendsKeyword, isNotNull);
-    expect(clause.superclass2, isNotNull);
-    expect(clause.superclass2, isNamedType);
+    expect(clause.superclass, isNotNull);
+    expect(clause.superclass, isNamedType);
   }
 
   void test_parseFunctionBody_block() {
@@ -1385,7 +1385,7 @@
     ImplementsClause clause = parseImplementsClause('implements A, B, C');
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
-    expect(clause.interfaces2, hasLength(3));
+    expect(clause.interfaces, hasLength(3));
     expect(clause.implementsKeyword, isNotNull);
   }
 
@@ -1393,7 +1393,7 @@
     ImplementsClause clause = parseImplementsClause('implements A');
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
-    expect(clause.interfaces2, hasLength(1));
+    expect(clause.interfaces, hasLength(1));
     expect(clause.implementsKeyword, isNotNull);
   }
 
@@ -1436,7 +1436,7 @@
     var creation = body.expression as InstanceCreationExpressionImpl;
     expect(creation.keyword, isNull);
     ConstructorName constructorName = creation.constructorName;
-    expect(constructorName.type2.toSource(), 'C<E>');
+    expect(constructorName.type.toSource(), 'C<E>');
     expect(constructorName.period, isNotNull);
     expect(constructorName.name, isNotNull);
     expect(creation.argumentList, isNotNull);
@@ -1471,7 +1471,7 @@
     var creation = body.expression as InstanceCreationExpression;
     expect(creation.keyword, isNull);
     ConstructorName constructorName = creation.constructorName;
-    expect(constructorName.type2.toSource(), 'p.C<E>');
+    expect(constructorName.type.toSource(), 'p.C<E>');
     expect(constructorName.period, isNotNull);
     expect(constructorName.name, isNotNull);
     expect(creation.argumentList, isNotNull);
@@ -1990,8 +1990,8 @@
   }
 
   void test_parseVariableDeclaration_final_late() {
-    var statement = parseStatement('final late a;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement =
+        parseStatement('final late a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertErrors(
         errors: [expectedError(ParserErrorCode.MODIFIER_OUT_OF_ORDER, 6, 4)]);
@@ -2001,8 +2001,7 @@
   }
 
   void test_parseVariableDeclaration_late() {
-    var statement = parseStatement('late a;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement = parseStatement('late a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertErrors(errors: [
       expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 5, 1)
@@ -2013,8 +2012,8 @@
   }
 
   void test_parseVariableDeclaration_late_final() {
-    var statement = parseStatement('late final a;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement =
+        parseStatement('late final a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertNoErrors();
     expect(declarationList.keyword!.lexeme, 'final');
@@ -2023,8 +2022,8 @@
   }
 
   void test_parseVariableDeclaration_late_init() {
-    var statement = parseStatement('late a = 0;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement =
+        parseStatement('late a = 0;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertErrors(errors: [
       expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 5, 1)
@@ -2035,8 +2034,7 @@
   }
 
   void test_parseVariableDeclaration_late_type() {
-    var statement = parseStatement('late A a;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement = parseStatement('late A a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertNoErrors();
     expect(declarationList.lateKeyword, isNotNull);
@@ -2046,8 +2044,8 @@
   }
 
   void test_parseVariableDeclaration_late_var() {
-    var statement = parseStatement('late var a;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement =
+        parseStatement('late var a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertNoErrors();
     expect(declarationList.lateKeyword, isNotNull);
@@ -2057,8 +2055,8 @@
   }
 
   void test_parseVariableDeclaration_late_var_init() {
-    var statement = parseStatement('late var a = 0;', featureSet: nonNullable)
-        as VariableDeclarationStatement;
+    var statement =
+        parseStatement('late var a = 0;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertNoErrors();
     expect(declarationList.lateKeyword, isNotNull);
@@ -2081,7 +2079,7 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.withKeyword, isNotNull);
-    expect(clause.mixinTypes2, hasLength(3));
+    expect(clause.mixinTypes, hasLength(3));
   }
 
   void test_parseWithClause_single() {
@@ -2089,7 +2087,7 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.withKeyword, isNotNull);
-    expect(clause.mixinTypes2, hasLength(1));
+    expect(clause.mixinTypes, hasLength(1));
   }
 
   void test_typeAlias_37733() {
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index ff93ba2..702d950 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -256,7 +256,6 @@
     var forStatement = parseStatement(
       'await for (element in list) {}',
       inAsync: true,
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNotNull);
@@ -273,7 +272,6 @@
   void test_parseForStatement_each_finalExternal() {
     var forStatement = parseStatement(
       'for (final external in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -290,7 +288,6 @@
   void test_parseForStatement_each_finalRequired() {
     var forStatement = parseStatement(
       'for (final required in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -325,7 +322,6 @@
   void test_parseForStatement_each_genericFunctionType2() {
     var forStatement = parseStatement(
       'for (void Function<T>(T) element in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -359,7 +355,6 @@
   void test_parseForStatement_each_identifier2() {
     var forStatement = parseStatement(
       'for (element in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -394,7 +389,6 @@
   void test_parseForStatement_each_noType_metadata2() {
     var forStatement = parseStatement(
       'for (@A var element in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -429,7 +423,6 @@
   void test_parseForStatement_each_type2() {
     var forStatement = parseStatement(
       'for (A element in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -463,7 +456,6 @@
   void test_parseForStatement_each_var2() {
     var forStatement = parseStatement(
       'for (var element in list) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.awaitKeyword, isNull);
@@ -497,7 +489,6 @@
   void test_parseForStatement_loop_c2() {
     var forStatement = parseStatement(
       'for (; i < count;) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -533,7 +524,6 @@
   void test_parseForStatement_loop_cu2() {
     var forStatement = parseStatement(
       'for (; i < count; i++) {}',
-      featureSet: controlFlow,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -569,7 +559,6 @@
   void test_parseForStatement_loop_ecu2() {
     var forStatement = parseStatement(
       'for (i--; i < count; i++) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -607,7 +596,6 @@
   void test_parseForStatement_loop_i2() {
     var forStatement = parseStatement(
       'for (var i = 0;;) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -649,7 +637,6 @@
   void test_parseForStatement_loop_i_withMetadata2() {
     var forStatement = parseStatement(
       'for (@A var i = 0;;) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -690,7 +677,6 @@
   void test_parseForStatement_loop_ic2() {
     var forStatement = parseStatement(
       'for (var i = 0; i < count;) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -730,7 +716,6 @@
   void test_parseForStatement_loop_icu2() {
     var forStatement = parseStatement(
       'for (var i = 0; i < count; i++) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -771,7 +756,6 @@
   void test_parseForStatement_loop_iicuu2() {
     var forStatement = parseStatement(
       'for (int i = 0, j = count; i < j; i++, j--) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -811,7 +795,6 @@
   void test_parseForStatement_loop_iu2() {
     var forStatement = parseStatement(
       'for (var i = 0;; i++) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -848,7 +831,6 @@
   void test_parseForStatement_loop_u2() {
     var forStatement = parseStatement(
       'for (;; i++) {}',
-      featureSet: spread,
     ) as ForStatement;
     assertNoErrors();
     expect(forStatement.forKeyword, isNotNull);
@@ -949,7 +931,7 @@
   }
 
   void test_parseLocalVariable_external() {
-    parseStatement('external int i;', featureSet: nonNullable);
+    parseStatement('external int i;');
     assertErrors(errors: [
       expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 0, 8),
     ]);
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 4cde594..cfbc48c 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -372,7 +372,7 @@
     var exp = stmt.expression as InstanceCreationExpression;
     ClassElement elementB = AstFinder.getClass(unit, "B").declaredElement!;
     ClassElement elementA = AstFinder.getClass(unit, "A").declaredElement!;
-    expect(exp.constructorName.type2.typeOrThrow.element, elementB);
+    expect(exp.constructorName.type.typeOrThrow.element, elementB);
     _isInstantiationOf(_hasElement(elementB))([
       _isType(elementA.typeParameters[0]
           .instantiate(nullabilitySuffix: NullabilitySuffix.star))
@@ -2372,7 +2372,7 @@
     var bConstructor = b.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
-    var typeName = redirected.type2;
+    var typeName = redirected.type;
     assertType(typeName.type, 'A<T2, U2>');
     assertType(typeName.type, 'A<T2, U2>');
 
@@ -2408,7 +2408,7 @@
     var bConstructor = b.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
-    var typeName = redirected.type2;
+    var typeName = redirected.type;
     assertType(typeName.type, 'A<T2, U2>');
     assertType(typeName.type, 'A<T2, U2>');
 
@@ -4087,11 +4087,15 @@
   v = 3;
   v; // marker
 }''');
-    if (hasAssignmentLeftResolution) {
-      assertTypeDynamic(findNode.simple('v ='));
-    } else {
-      assertTypeNull(findNode.simple('v ='));
-    }
+    assertAssignment(
+      findNode.assignment('= 3'),
+      readElement: null,
+      readType: null,
+      writeElement: findElement.localVar('v'),
+      writeType: 'dynamic',
+      operatorElement: null,
+      type: 'int',
+    );
     assertTypeDynamic(findNode.simple('v; // marker'));
   }
 
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index 927a542..b34ef50 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -398,10 +398,9 @@
     _errors.add(error);
   }
 
-  /// Set the line information associated with the given [source] to the given
-  /// list of [lineStarts].
-  void setLineInfo(Source source, List<int> lineStarts) {
-    _lineInfoMap[source] = LineInfo(lineStarts);
+  /// Set the line information associated with the given [source] to [lineInfo].
+  void setLineInfo(Source source, LineInfo lineInfo) {
+    _lineInfoMap[source] = lineInfo;
   }
 }
 
@@ -530,9 +529,9 @@
   @Deprecated('Use Source.uri instead')
   @override
   UriKind get uriKind {
-    if (uri.scheme == 'dart') {
+    if (uri.isScheme('dart')) {
       return UriKind.DART_URI;
-    } else if (uri.scheme == 'package') {
+    } else if (uri.isScheme('package')) {
       return UriKind.PACKAGE_URI;
     }
     return UriKind.FILE_URI;
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index bde8059..8bb9be2 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -398,7 +398,7 @@
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.implementsClause!.implementsKeyword, isNotNull);
-    expect(typeAlias.implementsClause!.interfaces2.length, 1);
+    expect(typeAlias.implementsClause!.interfaces.length, 1);
     expect(typeAlias.semicolon, isNotNull);
   }
 
@@ -414,7 +414,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.withClause.withKeyword, isNotNull);
-    expect(typeAlias.withClause.mixinTypes2.length, 1);
+    expect(typeAlias.withClause.mixinTypes.length, 1);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
   }
@@ -935,7 +935,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNotNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -953,7 +953,7 @@
     expect(typeAlias.typeParameters!.typeParameters, hasLength(1));
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -971,7 +971,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -989,7 +989,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -1949,7 +1949,7 @@
     expect(declaration.onClause, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces2;
+    NodeList<NamedType> interfaces = implementsClause.interfaces;
     expect(interfaces, hasLength(1));
     expect(interfaces[0].name.name, 'B');
     expect(interfaces[0].typeArguments, isNull);
@@ -1971,7 +1971,7 @@
     expect(declaration.onClause, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces2;
+    NodeList<NamedType> interfaces = implementsClause.interfaces;
     expect(interfaces, hasLength(2));
     expect(interfaces[0].name.name, 'B');
     expect(interfaces[0].typeArguments!.arguments, hasLength(1));
@@ -2013,7 +2013,7 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints2;
+    NodeList<NamedType> constraints = onClause.superclassConstraints;
     expect(constraints, hasLength(1));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
@@ -2035,7 +2035,7 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints2;
+    NodeList<NamedType> constraints = onClause.superclassConstraints;
     expect(constraints, hasLength(2));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
@@ -2059,13 +2059,13 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints2;
+    NodeList<NamedType> constraints = onClause.superclassConstraints;
     expect(constraints, hasLength(1));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces2;
+    NodeList<NamedType> interfaces = implementsClause.interfaces;
     expect(interfaces, hasLength(1));
     expect(interfaces[0].name.name, 'C');
     expect(interfaces[0].typeArguments, isNull);
@@ -2139,34 +2139,29 @@
   }
 
   void test_parseTopLevelVariable_external() {
-    var unit = parseCompilationUnit('external int i;', featureSet: nonNullable);
+    var unit = parseCompilationUnit('external int i;');
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     expect(declaration.externalKeyword, isNotNull);
   }
 
   void test_parseTopLevelVariable_external_late() {
-    var unit = parseCompilationUnit('external late int? i;',
-        featureSet: nonNullable,
-        errors: [
-          expectedError(ParserErrorCode.EXTERNAL_LATE_FIELD, 0, 8),
-        ]);
+    var unit = parseCompilationUnit('external late int? i;', errors: [
+      expectedError(ParserErrorCode.EXTERNAL_LATE_FIELD, 0, 8),
+    ]);
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     expect(declaration.externalKeyword, isNotNull);
   }
 
   void test_parseTopLevelVariable_external_late_final() {
-    var unit = parseCompilationUnit('external late final int? i;',
-        featureSet: nonNullable,
-        errors: [
-          expectedError(ParserErrorCode.EXTERNAL_LATE_FIELD, 0, 8),
-        ]);
+    var unit = parseCompilationUnit('external late final int? i;', errors: [
+      expectedError(ParserErrorCode.EXTERNAL_LATE_FIELD, 0, 8),
+    ]);
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     expect(declaration.externalKeyword, isNotNull);
   }
 
   void test_parseTopLevelVariable_final_late() {
     var unit = parseCompilationUnit('final late a;',
-        featureSet: nonNullable,
         errors: [expectedError(ParserErrorCode.MODIFIER_OUT_OF_ORDER, 6, 4)]);
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
@@ -2176,11 +2171,9 @@
   }
 
   void test_parseTopLevelVariable_late() {
-    var unit = parseCompilationUnit('late a;',
-        featureSet: nonNullable,
-        errors: [
-          expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 5, 1)
-        ]);
+    var unit = parseCompilationUnit('late a;', errors: [
+      expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 5, 1)
+    ]);
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
     expect(declarationList.keyword, isNull);
@@ -2189,7 +2182,7 @@
   }
 
   void test_parseTopLevelVariable_late_final() {
-    var unit = parseCompilationUnit('late final a;', featureSet: nonNullable);
+    var unit = parseCompilationUnit('late final a;');
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
     expect(declarationList.keyword!.lexeme, 'final');
@@ -2198,11 +2191,9 @@
   }
 
   void test_parseTopLevelVariable_late_init() {
-    var unit = parseCompilationUnit('late a = 0;',
-        featureSet: nonNullable,
-        errors: [
-          expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 5, 1)
-        ]);
+    var unit = parseCompilationUnit('late a = 0;', errors: [
+      expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 5, 1)
+    ]);
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
     expect(declarationList.keyword, isNull);
@@ -2211,7 +2202,7 @@
   }
 
   void test_parseTopLevelVariable_late_type() {
-    var unit = parseCompilationUnit('late A a;', featureSet: nonNullable);
+    var unit = parseCompilationUnit('late A a;');
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
     expect(declarationList.lateKeyword, isNotNull);
@@ -2221,7 +2212,7 @@
   }
 
   void test_parseTopLevelVariable_non_external() {
-    var unit = parseCompilationUnit('int i;', featureSet: nonNullable);
+    var unit = parseCompilationUnit('int i;');
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     expect(declaration.externalKeyword, isNull);
   }
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index dfaa5e0..4db863b 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -2,11 +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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 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/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
@@ -14,6 +12,8 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../util/feature_sets.dart';
+
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(BooleanArrayTest);
@@ -457,7 +457,7 @@
       source: findNode.classTypeAlias('B<U>'),
       childAccessors: [
         (node) => node.documentationComment!,
-        (node) => node.superclass2,
+        (node) => node.superclass,
         (node) => node.implementsClause!,
         (node) => node.name,
         (node) => node.typeParameters!,
@@ -604,7 +604,7 @@
       destination: findNode.constructorName('A.foo'),
       source: findNode.constructorName('B.bar'),
       childAccessors: [
-        (node) => node.type2,
+        (node) => node.type,
         (node) => node.name!,
       ],
     );
@@ -797,7 +797,7 @@
       destination: findNode.extendsClause('A0'),
       source: findNode.extendsClause('B0'),
       childAccessors: [
-        (node) => node.superclass2,
+        (node) => node.superclass,
       ],
     );
   }
@@ -1122,8 +1122,8 @@
     var node = findNode.implementsClause('implements');
     _assertReplaceInList(
       destination: node,
-      child: node.interfaces2[0],
-      replacement: node.interfaces2[1],
+      child: node.interfaces[0],
+      replacement: node.interfaces[1],
     );
   }
 
@@ -1950,8 +1950,8 @@
     var node = findNode.withClause('with');
     _assertReplaceInList(
       destination: node,
-      child: node.mixinTypes2[0],
-      replacement: node.mixinTypes2[1],
+      child: node.mixinTypes[0],
+      replacement: node.mixinTypes[1],
     );
   }
 
@@ -2041,13 +2041,7 @@
   FindNode _parseStringToFindNode(String content) {
     var parseResult = parseString(
       content: content,
-      featureSet: FeatureSet.fromEnableFlags2(
-        sdkLanguageVersion: ExperimentStatus.currentVersion,
-        flags: [
-          Feature.enhanced_enums.enableString,
-          Feature.super_parameters.enableString,
-        ],
-      ),
+      featureSet: FeatureSets.latestWithExperiments,
     );
     return FindNode(parseResult.content, parseResult.unit);
   }
diff --git a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
index 7401b6c..2ba48a6 100644
--- a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
@@ -55,9 +55,9 @@
     TypeArgumentList? typeArguments;
     List<DartType> typeArgumentTypes;
     if (node is InstanceCreationExpression) {
-      typeArguments = node.constructorName.type2.typeArguments;
+      typeArguments = node.constructorName.type.typeArguments;
       typeArgumentTypes =
-          (node.constructorName.type2.type as InterfaceType).typeArguments;
+          (node.constructorName.type.type as InterfaceType).typeArguments;
     } else if (node is InvocationExpression) {
       typeArguments = node.typeArguments;
       typeArgumentTypes = node.typeArgumentTypes!;
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 d56b63b..ebf8025 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -670,7 +670,7 @@
 
     var constructorName = constC.constructorName;
     expect(constructorName.staticElement, constructorC);
-    expect(constructorName.type2.type, interfaceTypeNone(elementC));
+    expect(constructorName.type.type, interfaceTypeNone(elementC));
   }
 
   test_annotation_unprefixed_topLevelVariable() async {
@@ -796,11 +796,20 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('>>> 3'),
-      element: findElement.method('>>>'),
-      type: 'A',
-    );
+    assertResolvedNodeText(findNode.binary('>>> 3'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@54
+    staticType: A
+  operator: >>>
+  rightOperand: IntegerLiteral
+    literal: 3
+    staticType: int
+  staticElement: self::@class::A::@method::>>>
+  staticInvokeType: A Function(int)
+  staticType: A
+''');
   }
 
   test_binaryExpression_ifNull() async {
@@ -1309,7 +1318,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(aUnnamed));
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.type, interfaceTypeNone(aElement));
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1329,7 +1338,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(aNamed));
 
-      var namedType = constructorName.type2;
+      var namedType = constructorName.type;
       expect(namedType.type, interfaceTypeNone(aElement));
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1378,7 +1387,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(actualMember));
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.type, auType);
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1400,7 +1409,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(actualMember));
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.type, auType);
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1522,24 +1531,13 @@
 
     {
       var prefixed = findNode.prefixed('a.v = 1;');
-      if (hasAssignmentLeftResolution) {
-        assertElement(prefixed, v.setter);
-        assertType(prefixed, 'int');
-      } else {
-        assertElementNull(prefixed);
-        assertTypeNull(prefixed);
-      }
+      assertElementNull(prefixed);
+      assertTypeNull(prefixed);
 
       assertElement(prefixed.prefix, import.prefix);
       assertType(prefixed.prefix, null);
 
-      if (hasAssignmentLeftResolution) {
-        assertElement(prefixed.identifier, v.setter);
-        assertType(prefixed.identifier, 'int');
-      } else {
-        assertElementNull(prefixed.identifier);
-        assertTypeNull(prefixed.identifier);
-      }
+      assertUnresolvedSimpleIdentifier(prefixed.identifier);
     }
   }
 
@@ -1696,9 +1694,6 @@
 ''');
     await resolveTestFile();
 
-    var enumNode = result.unit.declarations[0] as EnumDeclaration;
-    ClassElement enumElement = enumNode.declaredElement!;
-
     List<Statement> mainStatements = _getMainStatements(result);
 
     var statement = mainStatements[0] as ExpressionStatement;
@@ -1707,7 +1702,7 @@
 
     var methodElement = invocation.methodName.staticElement as MethodElement;
     expect(methodElement.name, 'toString');
-    expect(methodElement.enclosingElement, same(enumElement));
+    expect(methodElement.enclosingElement, same(objectElement));
   }
 
   test_error_unresolvedTypeAnnotation() async {
@@ -1770,13 +1765,7 @@
 
     {
       var fRef = findNode.simple('f = 1;');
-      if (hasAssignmentLeftResolution) {
-        assertMember(fRef, findElement.setter('f'), {'T': 'int'});
-        assertType(fRef, 'int');
-      } else {
-        assertElementNull(fRef);
-        assertTypeNull(fRef);
-      }
+      assertUnresolvedSimpleIdentifier(fRef);
     }
   }
 
@@ -2069,7 +2058,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       Identifier typeIdentifier = namedType.name;
@@ -2087,7 +2076,7 @@
       expect(constructorName.staticElement, namedConstructor);
       expect(constructorName.name!.staticType, isNull);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2122,7 +2111,7 @@
     expect(constructorName.name, isNull);
     expect(constructorName.staticElement, constructorElement);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.typeArguments, isNull);
 
     Identifier typeIdentifier = namedType.name;
@@ -2163,7 +2152,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       Identifier typeIdentifier = namedType.name;
@@ -2185,7 +2174,7 @@
       expect(constructorName.name!.staticElement, namedConstructor);
       expect(constructorName.name!.staticType, isNull);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2237,7 +2226,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as PrefixedIdentifier;
@@ -2267,7 +2256,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as PrefixedIdentifier;
@@ -2297,7 +2286,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments!.arguments, hasLength(1));
       _assertNamedTypeSimple(
           namedType.typeArguments!.arguments[0], typeProvider.boolType);
@@ -2352,7 +2341,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2374,7 +2363,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments!.arguments, hasLength(1));
       _assertNamedTypeSimple(
           namedType.typeArguments!.arguments[0], typeProvider.boolType);
@@ -2399,7 +2388,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2422,7 +2411,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments!.arguments, hasLength(1));
       _assertNamedTypeSimple(
           namedType.typeArguments!.arguments[0], typeProvider.boolType);
@@ -2454,7 +2443,7 @@
       assertMember(creation, defaultConstructor, {'K': 'int', 'V': 'double'});
       assertType(creation, 'C<int, double>');
 
-      var namedType = creation.constructorName.type2;
+      var namedType = creation.constructorName.type;
       assertNamedType(namedType, cElement, 'C<int, double>');
 
       var typeArguments = namedType.typeArguments!.arguments;
@@ -2473,7 +2462,7 @@
       assertMember(creation, namedConstructor, {'K': 'num', 'V': 'String'});
       assertType(creation, 'C<num, String>');
 
-      var namedType = creation.constructorName.type2;
+      var namedType = creation.constructorName.type;
       assertNamedType(namedType, cElement, 'C<num, String>');
 
       var typeArguments = namedType.typeArguments!.arguments;
@@ -3069,7 +3058,7 @@
       ConstructorName constructorName = creation.constructorName;
       expect(constructorName.name, isNull);
 
-      NamedType type = constructorName.type2;
+      NamedType type = constructorName.type;
       expect(type.typeArguments, isNull);
       assertElement(type.name, c);
       assertTypeNull(type.name);
@@ -3086,7 +3075,7 @@
       ConstructorName constructorName = creation.constructorName;
       expect(constructorName.name!.name, 'named');
 
-      NamedType type = constructorName.type2;
+      NamedType type = constructorName.type;
       expect(type.typeArguments, isNull);
       assertElement(type.name, c);
       assertType(type.name, 'C<bool>');
@@ -3103,7 +3092,7 @@
       ConstructorName constructorName = creation.constructorName;
       expect(constructorName.name!.name, 'named2');
 
-      NamedType type = constructorName.type2;
+      NamedType type = constructorName.type;
       assertTypeArguments(type.typeArguments!, [doubleType]);
       assertElement(type.name, c);
       assertType(type.name, 'C<double>');
@@ -5614,7 +5603,7 @@
       assertElement(creation, c.unnamedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C');
+      assertNamedType(creation.constructorName.type, c, 'C');
     }
 
     {
@@ -5623,7 +5612,7 @@
       assertElement(creation, namedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C');
+      assertNamedType(creation.constructorName.type, c, 'C');
       assertElement(creation.constructorName.name, namedConstructor);
     }
   }
@@ -5650,7 +5639,7 @@
       assertElement(creation, c.unnamedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C',
+      assertNamedType(creation.constructorName.type, c, 'C',
           expectedPrefix: import.prefix);
     }
 
@@ -5660,7 +5649,7 @@
       assertElement(creation, namedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C',
+      assertNamedType(creation.constructorName.type, c, 'C',
           expectedPrefix: import.prefix);
       assertElement(creation.constructorName.name, namedConstructor);
     }
@@ -5684,7 +5673,7 @@
       assertMember(creation, c.unnamedConstructor!, {'T': 'int'});
       assertType(creation, 'C<int>');
 
-      assertNamedType(creation.constructorName.type2, c, 'C<int>');
+      assertNamedType(creation.constructorName.type, c, 'C<int>');
       assertNamedType(findNode.namedType('int>'), intElement, 'int');
     }
 
@@ -5694,7 +5683,7 @@
       assertMember(creation, namedConstructor, {'T': 'String'});
       assertType(creation, 'C<String>');
 
-      assertNamedType(creation.constructorName.type2, c, 'C<String>');
+      assertNamedType(creation.constructorName.type, c, 'C<String>');
       assertNamedType(findNode.namedType('String>'), stringElement, 'String');
 
       assertMember(
@@ -5944,13 +5933,7 @@
     await resolveTestFile();
 
     var xRef = findNode.simple('x ++');
-    if (hasAssignmentLeftResolution) {
-      assertElement(xRef, findElement.parameter('x'));
-      assertType(xRef, 'int');
-    } else {
-      // assertElementNull(xRef);
-      assertTypeNull(xRef);
-    }
+    assertUnresolvedSimpleIdentifier(xRef, disableElementCheck: true);
   }
 
   test_postfixExpression_local() async {
@@ -5982,13 +5965,7 @@
       expect(postfix.staticType, typeProvider.intType);
 
       var operand = postfix.operand as SimpleIdentifier;
-      if (hasAssignmentLeftResolution) {
-        expect(operand.staticElement, same(v));
-        expect(operand.staticType, typeProvider.intType);
-      } else {
-        // expect(operand.staticElement, same(v));
-        expect(operand.staticType, isNull);
-      }
+      assertUnresolvedSimpleIdentifier(operand, disableElementCheck: true);
     }
   }
 
@@ -6004,11 +5981,6 @@
     addTestFile(content);
 
     await resolveTestFile();
-    CompilationUnit unit = result.unit;
-
-    var cClassDeclaration = unit.declarations[1] as ClassDeclaration;
-    ClassElement cClassElement = cClassDeclaration.declaredElement!;
-    FieldElement fElement = cClassElement.getField('f')!;
 
     List<Statement> mainStatements = _getMainStatements(result);
 
@@ -6021,20 +5993,10 @@
       expect(postfix.staticType, typeProvider.intType);
 
       var propertyAccess = postfix.operand as PropertyAccess;
-      if (hasAssignmentLeftResolution) {
-        expect(propertyAccess.staticType, typeProvider.intType);
-      } else {
-        assertTypeNull(propertyAccess);
-      }
+      assertUnresolvedPropertyAccess(propertyAccess);
 
       SimpleIdentifier propertyName = propertyAccess.propertyName;
-      if (hasAssignmentLeftResolution) {
-        expect(propertyName.staticElement, same(fElement.setter));
-        expect(propertyName.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(propertyName);
-        assertTypeNull(propertyName);
-      }
+      assertUnresolvedSimpleIdentifier(propertyName);
     }
   }
 
@@ -6060,13 +6022,7 @@
     await resolveTestFile();
 
     var xRef = findNode.simple('x++');
-    if (hasAssignmentLeftResolution) {
-      assertElement(xRef, findElement.parameter('x'));
-      assertType(xRef, 'int');
-    } else {
-      // assertElementNull(xRef);
-      assertTypeNull(xRef);
-    }
+    assertUnresolvedSimpleIdentifier(xRef, disableElementCheck: true);
   }
 
   test_prefix_increment_of_prefix_increment() async {
@@ -6078,13 +6034,7 @@
     await resolveTestFile();
 
     var xRef = findNode.simple('x;');
-    if (hasAssignmentLeftResolution) {
-      assertElement(xRef, findElement.parameter('x'));
-      assertType(xRef, 'int');
-    } else {
-      // assertElementNull(xRef);
-      assertTypeNull(xRef);
-    }
+    assertUnresolvedSimpleIdentifier(xRef, disableElementCheck: true);
   }
 
   test_prefixedIdentifier_classInstance_instanceField() async {
@@ -6268,14 +6218,7 @@
       var assignment = statement.expression as AssignmentExpression;
       var left = assignment.leftHandSide as PrefixedIdentifier;
       assertPrefix(left.prefix);
-
-      if (hasAssignmentLeftResolution) {
-        expect(left.identifier.staticElement, same(mySetter));
-        expect(left.identifier.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(left.identifier);
-        assertTypeNull(left.identifier);
-      }
+      assertUnresolvedSimpleIdentifier(left.identifier);
     }
   }
 
@@ -6309,13 +6252,7 @@
       expect(prefix.staticType, typeProvider.intType);
 
       var operand = prefix.operand as SimpleIdentifier;
-      if (hasAssignmentLeftResolution) {
-        expect(operand.staticElement, same(v));
-        expect(operand.staticType, typeProvider.intType);
-      } else {
-        // assertElementNull(operand);
-        assertTypeNull(operand);
-      }
+      assertUnresolvedSimpleIdentifier(operand, disableElementCheck: true);
     }
 
     {
@@ -6396,20 +6333,10 @@
       expect(prefix.staticType, typeProvider.intType);
 
       var propertyAccess = prefix.operand as PropertyAccess;
-      if (hasAssignmentLeftResolution) {
-        expect(propertyAccess.staticType, typeProvider.intType);
-      } else {
-        assertTypeNull(propertyAccess);
-      }
+      assertUnresolvedPropertyAccess(propertyAccess);
 
       SimpleIdentifier propertyName = propertyAccess.propertyName;
-      if (hasAssignmentLeftResolution) {
-        expect(propertyName.staticElement, same(fElement.setter));
-        expect(propertyName.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(propertyName.staticElement);
-        assertTypeNull(propertyName);
-      }
+      assertUnresolvedSimpleIdentifier(propertyName);
     }
 
     {
@@ -6635,8 +6562,6 @@
     var methodElement = aNode.members[0].declaredElement as MethodElement;
     var getterElement =
         aNode.members[1].declaredElement as PropertyAccessorElement;
-    var setterElement =
-        aNode.members[2].declaredElement as PropertyAccessorElement;
     var operatorElement = aNode.members[3].declaredElement as MethodElement;
 
     var testNode = bNode.members[0] as MethodDeclaration;
@@ -6694,13 +6619,7 @@
       var assignment = statement.expression as AssignmentExpression;
 
       var identifier = assignment.leftHandSide as SimpleIdentifier;
-      if (hasAssignmentLeftResolution) {
-        expect(identifier.staticElement, same(setterElement));
-        expect(identifier.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(identifier);
-        assertTypeNull(identifier);
-      }
+      assertUnresolvedSimpleIdentifier(identifier);
     }
 
     // this.setter = 4;
@@ -6714,13 +6633,7 @@
       expect(
           target.staticType, interfaceTypeNone(bNode.declaredElement!)); // raw
 
-      if (hasAssignmentLeftResolution) {
-        expect(propertyAccess.propertyName.staticElement, same(setterElement));
-        expect(propertyAccess.propertyName.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(propertyAccess.propertyName);
-        assertTypeNull(propertyAccess.propertyName);
-      }
+      assertUnresolvedSimpleIdentifier(propertyAccess.propertyName);
     }
 
     // super + 5;
@@ -6763,8 +6676,6 @@
     var methodElement = aNode.members[0].declaredElement as MethodElement;
     var getterElement =
         aNode.members[1].declaredElement as PropertyAccessorElement;
-    var setterElement =
-        aNode.members[2].declaredElement as PropertyAccessorElement;
     var operatorElement = aNode.members[3].declaredElement as MethodElement;
 
     var testNode = aNode.members[4] as MethodDeclaration;
@@ -6823,13 +6734,7 @@
       var assignment = statement.expression as AssignmentExpression;
 
       var identifier = assignment.leftHandSide as SimpleIdentifier;
-      if (hasAssignmentLeftResolution) {
-        expect(identifier.staticElement, same(setterElement));
-        expect(identifier.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(identifier);
-        assertTypeNull(identifier);
-      }
+      assertUnresolvedSimpleIdentifier(identifier);
     }
 
     // this.setter = 4;
@@ -6842,13 +6747,7 @@
       var target = propertyAccess.target as ThisExpression;
       expect(target.staticType, thisTypeA); // raw
 
-      if (hasAssignmentLeftResolution) {
-        expect(propertyAccess.propertyName.staticElement, same(setterElement));
-        expect(propertyAccess.propertyName.staticType, typeProvider.intType);
-      } else {
-        assertElementNull(propertyAccess.propertyName);
-        assertTypeNull(propertyAccess.propertyName);
-      }
+      assertUnresolvedSimpleIdentifier(propertyAccess.propertyName);
     }
 
     // this + 5;
@@ -6941,7 +6840,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType superClass = dNode.extendsClause!.superclass2;
+      NamedType superClass = dNode.extendsClause!.superclass;
       expect(superClass.type, expectedType);
 
       var identifier = superClass.name as SimpleIdentifier;
@@ -6955,7 +6854,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType mixinType = dNode.withClause!.mixinTypes2[0];
+      NamedType mixinType = dNode.withClause!.mixinTypes[0];
       expect(mixinType.type, expectedType);
 
       var identifier = mixinType.name as SimpleIdentifier;
@@ -6969,7 +6868,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType implementedType = dNode.implementsClause!.interfaces2[0];
+      NamedType implementedType = dNode.implementsClause!.interfaces[0];
       expect(implementedType.type, expectedType);
 
       var identifier = implementedType.name as SimpleIdentifier;
@@ -7010,7 +6909,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType superClass = dNode.superclass2;
+      NamedType superClass = dNode.superclass;
       expect(superClass.type, expectedType);
 
       var identifier = superClass.name as SimpleIdentifier;
@@ -7024,7 +6923,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType mixinType = dNode.withClause.mixinTypes2[0];
+      NamedType mixinType = dNode.withClause.mixinTypes[0];
       expect(mixinType.type, expectedType);
 
       var identifier = mixinType.name as SimpleIdentifier;
@@ -7038,7 +6937,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType interfaceType = dNode.implementsClause!.interfaces2[0];
+      NamedType interfaceType = dNode.implementsClause!.interfaces[0];
       expect(interfaceType.type, expectedType);
 
       var identifier = interfaceType.name as SimpleIdentifier;
@@ -7943,7 +7842,7 @@
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -7975,7 +7874,7 @@
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8019,7 +7918,7 @@
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8057,7 +7956,7 @@
 
     ConstructorName constructorName = creation.constructorName;
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8103,7 +8002,7 @@
 
     ConstructorName constructorName = creation.constructorName;
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8150,7 +8049,7 @@
 
     ConstructorName constructorName = creation.constructorName;
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     assertType(namedType, 'Random');
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8274,13 +8173,7 @@
     assertTypeDynamic(postfix);
 
     var aRef = postfix.operand as SimpleIdentifier;
-    if (hasAssignmentLeftResolution) {
-      assertElementNull(aRef);
-      assertTypeDynamic(aRef);
-    } else {
-      assertElementNull(aRef);
-      assertTypeNull(aRef);
-    }
+    assertUnresolvedSimpleIdentifier(aRef);
   }
 
   test_unresolved_postfix_operator() async {
@@ -8299,13 +8192,7 @@
     assertType(postfix, 'A');
 
     var aRef = postfix.operand as SimpleIdentifier;
-    if (hasAssignmentLeftResolution) {
-      assertElement(aRef, findElement.topSet('a'));
-      assertType(aRef, 'A');
-    } else {
-      assertElementNull(aRef);
-      assertTypeNull(aRef);
-    }
+    assertUnresolvedSimpleIdentifier(aRef);
   }
 
   test_unresolved_prefix_operand() async {
@@ -8322,13 +8209,7 @@
     assertTypeDynamic(prefix);
 
     var aRef = prefix.operand as SimpleIdentifier;
-    if (hasAssignmentLeftResolution) {
-      assertElementNull(aRef);
-      assertTypeDynamic(aRef);
-    } else {
-      assertElementNull(aRef);
-      assertTypeNull(aRef);
-    }
+    assertUnresolvedSimpleIdentifier(aRef);
   }
 
   test_unresolved_prefix_operator() async {
@@ -8347,13 +8228,7 @@
     assertTypeDynamic(prefix);
 
     var aRef = prefix.operand as SimpleIdentifier;
-    if (hasAssignmentLeftResolution) {
-      assertElement(aRef, findElement.topSet('a'));
-      assertType(aRef, 'A');
-    } else {
-      assertElementNull(aRef);
-      assertTypeNull(aRef);
-    }
+    assertUnresolvedSimpleIdentifier(aRef);
   }
 
   test_unresolved_prefixedIdentifier_identifier() async {
@@ -8619,7 +8494,7 @@
     var constructorElement = classElement.unnamedConstructor;
     expect(constructorName.staticElement, constructorElement);
 
-    var namedType = constructorName.type2;
+    var namedType = constructorName.type;
     expect(namedType.typeArguments, isNull);
 
     var typeIdentifier = namedType.name as SimpleIdentifier;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 807866c..afefd83 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -3436,17 +3436,11 @@
 }
 
 extension on AnalysisDriver {
-  Set<String> get loadedLibraryUriSet {
-    var elementFactory = this.test.libraryContext!.elementFactory;
-    var libraryReferences = elementFactory.rootReference.children;
-    return libraryReferences.map((e) => e.name).toSet();
-  }
-
   void assertLoadedLibraryUriSet({
     Iterable<String>? included,
     Iterable<String>? excluded,
   }) {
-    var uriSet = loadedLibraryUriSet;
+    var uriSet = this.test.loadedLibraryUriSet;
     if (included != null) {
       expect(uriSet, containsAll(included));
     }
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 539ff59..3cc2617 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -200,6 +200,40 @@
         unorderedEquals(['a', 'b', 'd', 'e', 'f', 'g']));
   }
 
+  test_definedClassMemberNames_enum() {
+    String path = convertPath('/aaa/lib/a.dart');
+    newFile(path, content: r'''
+enum E1 {
+  v1;
+  int field1, field2;
+  const E1();
+  const E1.namedConstructor();
+  void method() {}
+  get getter => 0;
+  set setter(_) {}
+}
+
+enum E2 {
+  v2;
+  get getter2 => 0;
+}
+''');
+    FileState file = fileSystemState.getFileForPath(path);
+    expect(
+      file.definedClassMemberNames,
+      unorderedEquals([
+        'v1',
+        'field1',
+        'field2',
+        'method',
+        'getter',
+        'setter',
+        'v2',
+        'getter2',
+      ]),
+    );
+  }
+
   test_definedTopLevelNames() {
     String path = convertPath('/aaa/lib/a.dart');
     newFile(path, content: r'''
@@ -439,7 +473,7 @@
     );
   }
 
-  test_getFilesSubtypingName() {
+  test_getFilesSubtypingName_class() {
     String a = convertPath('/a.dart');
     String b = convertPath('/b.dart');
 
@@ -476,6 +510,75 @@
     );
   }
 
+  test_getFilesSubtypingName_enum_implements() {
+    String a = convertPath('/a.dart');
+    String b = convertPath('/b.dart');
+
+    newFile(a, content: r'''
+class A {}
+enum E1 implements A {
+  v
+}
+''');
+    newFile(b, content: r'''
+class A {}
+enum E2 implements A {
+  v
+}
+''');
+
+    FileState aFile = fileSystemState.getFileForPath(a);
+    FileState bFile = fileSystemState.getFileForPath(b);
+
+    expect(
+      fileSystemState.getFilesSubtypingName('A'),
+      unorderedEquals([aFile, bFile]),
+    );
+
+    // Change b.dart so that it does not subtype A.
+    newFile(b, content: r'''
+class C {}
+enum E2 implements C {
+  v
+}
+''');
+    bFile.refresh();
+    expect(
+      fileSystemState.getFilesSubtypingName('A'),
+      unorderedEquals([aFile]),
+    );
+    expect(
+      fileSystemState.getFilesSubtypingName('C'),
+      unorderedEquals([bFile]),
+    );
+  }
+
+  test_getFilesSubtypingName_enum_with() {
+    String a = convertPath('/a.dart');
+    String b = convertPath('/b.dart');
+
+    newFile(a, content: r'''
+mixin M {}
+enum E1 with M {
+  v
+}
+''');
+    newFile(b, content: r'''
+mixin M {}
+enum E2 with M {
+  v
+}
+''');
+
+    FileState aFile = fileSystemState.getFileForPath(a);
+    FileState bFile = fileSystemState.getFileForPath(b);
+
+    expect(
+      fileSystemState.getFilesSubtypingName('M'),
+      unorderedEquals([aFile, bFile]),
+    );
+  }
+
   test_hasUri() {
     Uri uri = Uri.parse('package:aaa/foo.dart');
     String templatePath = convertPath('/aaa/lib/foo.dart');
@@ -783,7 +886,7 @@
       if (file is LibraryCycle) {
         return !file.libraries.any((file) => file.uri.isScheme('dart'));
       } else if (file is FileState) {
-        return file.uri.scheme != 'dart';
+        return !file.uri.isScheme('dart');
       } else if (file == null) {
         return true;
       } else {
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 9375dc1..4c31935 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -215,6 +215,19 @@
       ..isReferencedAt('B; // 3', false);
   }
 
+  test_isImplementedBy_enum() async {
+    await _indexTestUnit('''
+class A {} // 1
+enum E implements A { // 2
+  v;
+}
+''');
+    ClassElement elementA = findElement.class_('A');
+    assertThat(elementA)
+      ..isImplementedAt('A { // 2', false)
+      ..isReferencedAt('A { // 2', false);
+  }
+
   test_isImplementedBy_MixinDeclaration_implementsClause() async {
     await _indexTestUnit('''
 class A {} // 1
@@ -269,7 +282,7 @@
     assertThat(element).isInvokedAt('loadLibrary(); // 2', true);
   }
 
-  test_isInvokedBy_MethodElement() async {
+  test_isInvokedBy_MethodElement_class() async {
     await _indexTestUnit('''
 class A {
   foo() {}
@@ -284,6 +297,26 @@
       ..isInvokedAt('foo(); // nq', false);
   }
 
+  test_isInvokedBy_MethodElement_enum() async {
+    await _indexTestUnit('''
+enum E {
+  v;
+  void foo() {}
+  void bar() {
+    this.foo(); // q1
+    foo(); // nq
+  }
+}
+void f(E e) {
+  e.foo(); // q2
+}
+''');
+    assertThat(findElement.method('foo'))
+      ..isInvokedAt('foo(); // q1', true)
+      ..isInvokedAt('foo(); // nq', false)
+      ..isInvokedAt('foo(); // q2', true);
+  }
+
   test_isInvokedBy_MethodElement_ofNamedExtension_instance() async {
     await _indexTestUnit('''
 extension E on int {
@@ -351,7 +384,7 @@
     assertThat(element).isInvokedAt('foo();', true);
   }
 
-  test_isInvokedBy_operator_binary() async {
+  test_isInvokedBy_operator_class_binary() async {
     await _indexTestUnit('''
 class A {
   operator +(other) => this;
@@ -371,7 +404,7 @@
       ..isInvokedAt('++;', true, length: 2);
   }
 
-  test_isInvokedBy_operator_index() async {
+  test_isInvokedBy_operator_class_index() async {
     await _indexTestUnit('''
 class A {
   operator [](i) => null;
@@ -388,7 +421,7 @@
     assertThat(writeElement).isInvokedAt('[1]', true, length: 1);
   }
 
-  test_isInvokedBy_operator_prefix() async {
+  test_isInvokedBy_operator_class_prefix() async {
     await _indexTestUnit('''
 class A {
   A operator ~() => this;
@@ -401,6 +434,58 @@
     assertThat(element).isInvokedAt('~a', true, length: 1);
   }
 
+  test_isInvokedBy_operator_enum_binary() async {
+    await _indexTestUnit('''
+enum E {
+  v;
+  int operator +(other) => 0;
+}
+void f(E e) {
+  e + 1;
+  e += 2;
+  ++e;
+  e++;
+}
+''');
+    assertThat(findElement.method('+'))
+      ..isInvokedAt('+ 1', true, length: 1)
+      ..isInvokedAt('+= 2', true, length: 2)
+      ..isInvokedAt('++e', true, length: 2)
+      ..isInvokedAt('++;', true, length: 2);
+  }
+
+  test_isInvokedBy_operator_enum_index() async {
+    await _indexTestUnit('''
+enum E {
+  v;
+  int operator [](int index) => 0;
+  operator []=(int index, int value) {}
+}
+void f(E e) {
+  e[0];
+  e[1] = 42;
+}
+''');
+    MethodElement readElement = findElement.method('[]');
+    MethodElement writeElement = findElement.method('[]=');
+    assertThat(readElement).isInvokedAt('[0]', true, length: 1);
+    assertThat(writeElement).isInvokedAt('[1]', true, length: 1);
+  }
+
+  test_isInvokedBy_operator_enum_prefix() async {
+    await _indexTestUnit('''
+enum E {
+  e;
+  int operator ~() => 0;
+}
+void f(E e) {
+  ~e;
+}
+''');
+    MethodElement element = findElement.method('~');
+    assertThat(element).isInvokedAt('~e', true, length: 1);
+  }
+
   test_isMixedBy_ClassDeclaration_TypeAliasElement() async {
     await _indexTestUnit('''
 class A<T> {}
@@ -465,6 +550,18 @@
     assertThat(elementA).isMixedInAt('A; // 2', false);
   }
 
+  test_isMixedInBy_enum_mixin() async {
+    await _indexTestUnit('''
+mixin M {} // 1
+enum E with M { // 2
+  v
+}
+''');
+    assertThat(findElement.mixin('M'))
+      ..isMixedInAt('M { // 2', false)
+      ..isReferencedAt('M { // 2', false);
+  }
+
   test_isReferencedAt_PropertyAccessorElement_field_call() async {
     await _indexTestUnit('''
 class A {
@@ -659,6 +756,141 @@
     // No exception, even though a.dart is a part of b.dart part.
   }
 
+  test_isReferencedBy_ConstructorElement_class_named() async {
+    await _indexTestUnit('''
+/// [new A.foo] 1
+class A {
+  A.foo() {}
+  A.bar() : this.foo(); // 2
+}
+class B extends A {
+  B() : super.foo(); // 3
+  factory B.bar() = A.foo; // 4
+}
+void f() {
+  A.foo(); // 5
+  A.foo; // 6
+}
+''');
+    var element = findElement.constructor('foo');
+    assertThat(element)
+      ..hasRelationCount(6)
+      ..isReferencedAt('.foo] 1', true, length: 4)
+      ..isInvokedAt('.foo(); // 2', true, length: 4)
+      ..isInvokedAt('.foo(); // 3', true, length: 4)
+      ..isReferencedAt('.foo; // 4', true, length: 4)
+      ..isInvokedAt('.foo(); // 5', true, length: 4)
+      ..isReferencedByConstructorTearOffAt('.foo; // 6', length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_class_namedOnlyWithDot() async {
+    await _indexTestUnit('''
+class A {
+  A.named() {}
+}
+main() {
+  new A.named();
+}
+''');
+    // has ".named()", but does not have "named()"
+    var constructorName = findNode.constructorName('.named();');
+    var offsetWithoutDot = constructorName.name!.offset;
+    var offsetWithDot = constructorName.period!.offset;
+    expect(index.usedElementOffsets, isNot(contains(offsetWithoutDot)));
+    expect(index.usedElementOffsets, contains(offsetWithDot));
+  }
+
+  test_isReferencedBy_ConstructorElement_class_redirection() async {
+    await _indexTestUnit('''
+class A {
+  A() : this.bar(); // 1
+  A.foo() : this(); // 2
+  A.bar();
+}
+''');
+    var constA = findElement.unnamedConstructor('A');
+    var constA_bar = findElement.constructor('bar');
+    assertThat(constA).isInvokedAt('(); // 2', true, length: 0);
+    assertThat(constA_bar).isInvokedAt('.bar(); // 1', true, length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_class_unnamed_declared() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {
+  A() {}
+  A.other() : this(); // 2
+}
+class B extends A {
+  B() : super(); // 3
+  factory B.other() = A; // 4
+}
+void f() {
+  A(); // 5
+  A.new; // 6
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(6)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isInvokedAt('(); // 2', true, length: 0)
+      ..isInvokedAt('(); // 3', true, length: 0)
+      ..isReferencedAt('; // 4', true, length: 0)
+      ..isInvokedAt('(); // 5', true, length: 0)
+      ..isReferencedByConstructorTearOffAt('.new; // 6', length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_class_unnamed_declared_new() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {
+  A.new() {}
+  A.other() : this(); // 2
+}
+class B extends A {
+  B() : super(); // 3
+  factory B.bar() = A; // 4
+}
+void f() {
+  A(); // 5
+  A.new; // 6
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(6)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isInvokedAt('(); // 2', true, length: 0)
+      ..isInvokedAt('(); // 3', true, length: 0)
+      ..isReferencedAt('; // 4', true, length: 0)
+      ..isInvokedAt('(); // 5', true, length: 0)
+      ..isReferencedByConstructorTearOffAt('.new; // 6', length: 4);
+  }
+
+  test_isReferencedBy_ConstructorElement_class_unnamed_synthetic() async {
+    await _indexTestUnit('''
+/// [new A] 1
+class A {}
+class B extends A {
+  B() : super(); // 2
+  factory B.bar() = A; // 3
+}
+void f() {
+  A(); // 4
+  A.new; // 5
+}
+''');
+    var element = findElement.unnamedConstructor('A');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isInvokedAt('(); // 2', true, length: 0)
+      ..isReferencedAt('; // 3', true, length: 0)
+      ..isInvokedAt('(); // 4', true, length: 0)
+      ..isReferencedByConstructorTearOffAt('.new; // 5', length: 4);
+  }
+
   test_isReferencedBy_ConstructorElement_classTypeAlias() async {
     await _indexTestUnit('''
 class M {}
@@ -698,139 +930,81 @@
     // No additional validation, but it should not fail with stack overflow.
   }
 
-  test_isReferencedBy_ConstructorElement_named() async {
+  test_isReferencedBy_ConstructorElement_enum_named() async {
     await _indexTestUnit('''
-/// [new A.foo] 1
-class A {
-  A.foo() {}
-  A.bar() : this.foo(); // 2
-}
-class B extends A {
-  B() : super.foo(); // 3
-  factory B.bar() = A.foo; // 4
-}
-void f() {
-  A.foo(); // 5
-  A.foo; // 6
+/// [new E.foo] 1
+enum E {
+  v.foo(); // 2
+  E.foo();
+  E.bar() : this.foo(); // 3
 }
 ''');
     var element = findElement.constructor('foo');
     assertThat(element)
-      ..hasRelationCount(6)
+      ..hasRelationCount(3)
       ..isReferencedAt('.foo] 1', true, length: 4)
       ..isInvokedAt('.foo(); // 2', true, length: 4)
-      ..isInvokedAt('.foo(); // 3', true, length: 4)
-      ..isReferencedAt('.foo; // 4', true, length: 4)
-      ..isInvokedAt('.foo(); // 5', true, length: 4)
-      ..isReferencedByConstructorTearOffAt('.foo; // 6', length: 4);
+      ..isInvokedAt('.foo(); // 3', true, length: 4);
   }
 
-  test_isReferencedBy_ConstructorElement_namedOnlyWithDot() async {
+  test_isReferencedBy_ConstructorElement_enum_unnamed_declared() async {
     await _indexTestUnit('''
-class A {
-  A.named() {}
-}
-main() {
-  new A.named();
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+  E();
+  E.other() : this(); // 5
 }
 ''');
-    // has ".named()", but does not have "named()"
-    var constructorName = findNode.constructorName('.named();');
-    var offsetWithoutDot = constructorName.name!.offset;
-    var offsetWithDot = constructorName.period!.offset;
-    expect(index.usedElementOffsets, isNot(contains(offsetWithoutDot)));
-    expect(index.usedElementOffsets, contains(offsetWithDot));
-  }
-
-  test_isReferencedBy_ConstructorElement_redirection() async {
-    await _indexTestUnit('''
-class A {
-  A() : this.bar(); // 1
-  A.foo() : this(); // 2
-  A.bar();
-}
-''');
-    var constA = findElement.unnamedConstructor('A');
-    var constA_bar = findElement.constructor('bar');
-    assertThat(constA).isInvokedAt('(); // 2', true, length: 0);
-    assertThat(constA_bar).isInvokedAt('.bar(); // 1', true, length: 4);
-  }
-
-  test_isReferencedBy_ConstructorElement_unnamed_declared() async {
-    await _indexTestUnit('''
-/// [new A] 1
-class A {
-  A() {}
-  A.other() : this(); // 2
-}
-class B extends A {
-  B() : super(); // 3
-  factory B.other() = A; // 4
-}
-void f() {
-  A(); // 5
-  A.new; // 6
-}
-''');
-    var element = findElement.unnamedConstructor('A');
-    assertThat(element)
-      ..hasRelationCount(6)
-      ..isReferencedAt('] 1', true, length: 0)
-      ..isInvokedAt('(); // 2', true, length: 0)
-      ..isInvokedAt('(); // 3', true, length: 0)
-      ..isReferencedAt('; // 4', true, length: 0)
-      ..isInvokedAt('(); // 5', true, length: 0)
-      ..isReferencedByConstructorTearOffAt('.new; // 6', length: 4);
-  }
-
-  test_isReferencedBy_ConstructorElement_unnamed_declared_new() async {
-    await _indexTestUnit('''
-/// [new A] 1
-class A {
-  A.new() {}
-  A.other() : this(); // 2
-}
-class B extends A {
-  B() : super(); // 3
-  factory B.bar() = A; // 4
-}
-void f() {
-  A(); // 5
-  A.new; // 6
-}
-''');
-    var element = findElement.unnamedConstructor('A');
-    assertThat(element)
-      ..hasRelationCount(6)
-      ..isReferencedAt('] 1', true, length: 0)
-      ..isInvokedAt('(); // 2', true, length: 0)
-      ..isInvokedAt('(); // 3', true, length: 0)
-      ..isReferencedAt('; // 4', true, length: 0)
-      ..isInvokedAt('(); // 5', true, length: 0)
-      ..isReferencedByConstructorTearOffAt('.new; // 6', length: 4);
-  }
-
-  test_isReferencedBy_ConstructorElement_unnamed_synthetic() async {
-    await _indexTestUnit('''
-/// [new A] 1
-class A {}
-class B extends A {
-  B() : super(); // 2
-  factory B.bar() = A; // 3
-}
-void f() {
-  A(); // 4
-  A.new; // 5
-}
-''');
-    var element = findElement.unnamedConstructor('A');
+    var element = findElement.unnamedConstructor('E');
     assertThat(element)
       ..hasRelationCount(5)
       ..isReferencedAt('] 1', true, length: 0)
-      ..isInvokedAt('(); // 2', true, length: 0)
-      ..isReferencedAt('; // 3', true, length: 0)
-      ..isInvokedAt('(); // 4', true, length: 0)
-      ..isReferencedByConstructorTearOffAt('.new; // 5', length: 4);
+      ..isInvokedByEnumConstantWithoutArgumentsAt(', // 2', length: 0)
+      ..isInvokedAt('(), // 3', true, length: 0)
+      ..isInvokedAt('.new(); // 4', true, length: 4)
+      ..isInvokedAt('(); // 5', true, length: 0);
+  }
+
+  test_isReferencedBy_ConstructorElement_enum_unnamed_declared_new() async {
+    await _indexTestUnit('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+  E.new() {}
+  E.other() : this(); // 5
+}
+''');
+    var element = findElement.unnamedConstructor('E');
+    assertThat(element)
+      ..hasRelationCount(5)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isInvokedByEnumConstantWithoutArgumentsAt(', // 2', length: 0)
+      ..isInvokedAt('(), // 3', true, length: 0)
+      ..isInvokedAt('.new(); // 4', true, length: 4)
+      ..isInvokedAt('(); // 5', true, length: 0);
+  }
+
+  test_isReferencedBy_ConstructorElement_enum_unnamed_synthetic() async {
+    await _indexTestUnit('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+}
+''');
+    var element = findElement.unnamedConstructor('E');
+    assertThat(element)
+      ..hasRelationCount(4)
+      ..isReferencedAt('] 1', true, length: 0)
+      ..isInvokedByEnumConstantWithoutArgumentsAt(', // 2', length: 0)
+      ..isInvokedAt('(), // 3', true, length: 0)
+      ..isInvokedAt('.new(); // 4', true, length: 4);
   }
 
   test_isReferencedBy_DynamicElement() async {
@@ -854,7 +1028,7 @@
     assertThat(element)..isReferencedAt('E(0).foo()', false);
   }
 
-  test_isReferencedBy_FieldElement() async {
+  test_isReferencedBy_FieldElement_class() async {
     await _indexTestUnit('''
 class A {
   var field;
@@ -884,7 +1058,7 @@
     assertThat(field)..isReferencedAt('field: 4', true);
   }
 
-  test_isReferencedBy_FieldElement_multiple() async {
+  test_isReferencedBy_FieldElement_class_multiple() async {
     await _indexTestUnit('''
 class A {
   var aaa;
@@ -918,7 +1092,72 @@
     }
   }
 
-  test_isReferencedBy_FieldElement_ofEnum() async {
+  test_isReferencedBy_FieldElement_class_synthetic_hasGetter() async {
+    await _indexTestUnit('''
+class A {
+  A() : f = 42;
+  int get f => 0;
+}
+''');
+    ClassElement element2 = findElement.class_('A');
+    assertThat(element2.getField('f')!).isWrittenAt('f = 42', true);
+  }
+
+  test_isReferencedBy_FieldElement_class_synthetic_hasGetterSetter() async {
+    await _indexTestUnit('''
+class A {
+  A() : f = 42;
+  int get f => 0;
+  set f(_) {}
+}
+''');
+    ClassElement element2 = findElement.class_('A');
+    assertThat(element2.getField('f')!).isWrittenAt('f = 42', true);
+  }
+
+  test_isReferencedBy_FieldElement_class_synthetic_hasSetter() async {
+    await _indexTestUnit('''
+class A {
+  A() : f = 42;
+  set f(_) {}
+}
+''');
+    ClassElement element2 = findElement.class_('A');
+    assertThat(element2.getField('f')!).isWrittenAt('f = 42', true);
+  }
+
+  test_isReferencedBy_FieldElement_enum() async {
+    await _indexTestUnit('''
+enum E {
+  v;
+  int? field; // a compile-time error
+  E({this.field});
+  void foo() {
+    field = 2; // nq
+    field; // nq
+  }
+}
+void f(E e) {
+  e.field = 3; // q
+  e.field; // q
+  E(field: 4);
+}
+''');
+    FieldElement field = findElement.field('field');
+    PropertyAccessorElement getter = field.getter!;
+    PropertyAccessorElement setter = field.setter!;
+    // E()
+    assertThat(field)..isWrittenAt('field});', true);
+    // foo()
+    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);
+  }
+
+  test_isReferencedBy_FieldElement_enum_index() async {
     await _indexTestUnit('''
 enum MyEnum {
   A, B, C
@@ -933,44 +1172,44 @@
     ClassElement enumElement = findElement.enum_('MyEnum');
     assertThat(enumElement.getGetter('values')!)
       ..isReferencedAt('values);', true);
-    assertThat(enumElement.getGetter('index')!)
+    assertThat(typeProvider.enumElement!.getGetter('index')!)
       ..isReferencedAt('index);', true);
     assertThat(enumElement.getGetter('A')!)..isReferencedAt('A);', true);
     assertThat(enumElement.getGetter('B')!)..isReferencedAt('B);', true);
   }
 
-  test_isReferencedBy_FieldElement_synthetic_hasGetter() async {
+  test_isReferencedBy_FieldElement_enum_synthetic_hasGetter() async {
     await _indexTestUnit('''
-class A {
-  A() : f = 42;
+enum E {
+  v;
+  E() : f = 42;
   int get f => 0;
 }
 ''');
-    ClassElement element2 = findElement.class_('A');
-    assertThat(element2.getField('f')!).isWrittenAt('f = 42', true);
+    assertThat(findElement.field('f')).isWrittenAt('f = 42', true);
   }
 
-  test_isReferencedBy_FieldElement_synthetic_hasGetterSetter() async {
+  test_isReferencedBy_FieldElement_enum_synthetic_hasGetterSetter() async {
     await _indexTestUnit('''
-class A {
-  A() : f = 42;
+enum E {
+  v;
+  E() : f = 42;
   int get f => 0;
   set f(_) {}
 }
 ''');
-    ClassElement element2 = findElement.class_('A');
-    assertThat(element2.getField('f')!).isWrittenAt('f = 42', true);
+    assertThat(findElement.field('f')).isWrittenAt('f = 42', true);
   }
 
-  test_isReferencedBy_FieldElement_synthetic_hasSetter() async {
+  test_isReferencedBy_FieldElement_enum_synthetic_hasSetter() async {
     await _indexTestUnit('''
-class A {
-  A() : f = 42;
+enum E {
+  v;
+  E() : f = 42;
   set f(_) {}
 }
 ''');
-    ClassElement element2 = findElement.class_('A');
-    assertThat(element2.getField('f')!).isWrittenAt('f = 42', true);
+    assertThat(findElement.field('f')).isWrittenAt('f = 42', true);
   }
 
   test_isReferencedBy_FunctionElement() async {
@@ -1031,7 +1270,7 @@
     assertThat(element)..isReferencedAt('A] text', false);
   }
 
-  test_isReferencedBy_MethodElement() async {
+  test_isReferencedBy_MethodElement_class() async {
     await _indexTestUnit('''
 class A {
   method() {}
@@ -1046,6 +1285,26 @@
       ..isReferencedAt('method); // nq', false);
   }
 
+  test_isReferencedBy_MethodElement_enum() async {
+    await _indexTestUnit('''
+enum E {
+  v;
+  void foo() {}
+  void bar() {
+    this.foo; // q1
+    foo; // nq
+  }
+}
+void f(E e) {
+  e.foo; // q2
+}
+''');
+    assertThat(findElement.method('foo'))
+      ..isReferencedAt('foo; // q1', true)
+      ..isReferencedAt('foo; // nq', false)
+      ..isReferencedAt('foo; // q2', true);
+  }
+
   test_isReferencedBy_MultiplyDefinedElement() async {
     newFile('$testPackageLibPath/a1.dart', content: 'class A {}');
     newFile('$testPackageLibPath/a2.dart', content: 'class A {}');
@@ -1488,6 +1747,36 @@
     expect(index.subtypes, isEmpty);
   }
 
+  test_subtypes_enum_implements() async {
+    String libP = 'package:test/test.dart;package:test/test.dart';
+    await _indexTestUnit('''
+class A {}
+
+enum E implements A {
+  v;
+  void foo() {}
+}
+''');
+
+    expect(index.subtypes, hasLength(1));
+    _assertSubtype(0, '$libP;A', 'E', ['foo']);
+  }
+
+  test_subtypes_enum_with() async {
+    String libP = 'package:test/test.dart;package:test/test.dart';
+    await _indexTestUnit('''
+mixin M {}
+
+enum E with M {
+  v;
+  void foo() {}
+}
+''');
+
+    expect(index.subtypes, hasLength(1));
+    _assertSubtype(0, '$libP;M', 'E', ['foo']);
+  }
+
   test_subtypes_mixinDeclaration() async {
     String libP = 'package:test/lib.dart;package:test/lib.dart';
     newFile('$testPackageLibPath/lib.dart', content: '''
@@ -1641,6 +1930,16 @@
         test._expectedLocation(search, isQualified, length: length));
   }
 
+  void isInvokedByEnumConstantWithoutArgumentsAt(String search,
+      {required int length}) {
+    test._assertHasRelation(
+      element,
+      relations,
+      IndexRelationKind.IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+      test._expectedLocation(search, true, length: length),
+    );
+  }
+
   void isMixedInAt(String search, bool isQualified, {int? length}) {
     test._assertHasRelation(
         element,
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 e241371..d570325 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
@@ -87,7 +87,7 @@
 
   void foo2() {
     print(0);
-    bar^;
+    bar^
     print(1);
   }
 
@@ -96,7 +96,7 @@
 ''');
 
     result.assertResolvedNodes([
-      'void foo2() {print(0); bar; print(1);}',
+      'void foo2() {print(0); bar print; (1);}',
     ]);
   }
 
@@ -139,7 +139,7 @@
 
   B() {
     print(0);
-    bar^;
+    bar^
     print(1);
   }
 
@@ -148,7 +148,20 @@
 ''');
 
     result.assertResolvedNodes([
-      'B() {print(0); bar; print(1);}',
+      'B() {print(0); bar print; (1);}',
+    ]);
+  }
+
+  test_constructorDeclaration_fieldFormalParameter_name() async {
+    var result = _resolveTestCode(r'''
+class A {
+  final int f;
+  A(this.^);
+}
+''');
+
+    result.assertResolvedNodes([
+      'A(this.);',
     ]);
   }
 
@@ -201,6 +214,23 @@
     result.assertResolvedNodes([]);
   }
 
+  test_constructorDeclaration_superFormalParameter_name() async {
+    var result = _resolveTestCode(r'''
+class A {
+  A(int first, double second);
+  A.named(int third);
+}
+
+class B extends A {
+  B(super.^);
+}
+''');
+
+    result.assertResolvedNodes([
+      'B(super.);',
+    ]);
+  }
+
   test_doubleLiteral() async {
     var result = _resolveTestCode(r'''
 var v = 1.2^;
@@ -216,7 +246,7 @@
 
   void foo2() {
     print(0);
-    bar^;
+    bar^
     print(1);
   }
 
@@ -225,7 +255,7 @@
 ''');
 
     result.assertResolvedNodes([
-      'void foo2() {print(0); bar; print(1);}',
+      'void foo2() {print(0); bar print; (1);}',
     ]);
   }
 
@@ -267,6 +297,24 @@
 
 void foo2() {
   print(0);
+  bar^
+  print(1);
+}
+
+void foo3() {}
+''');
+
+    result.assertResolvedNodes([
+      'void foo2() {print(0); bar print; (1);}',
+    ]);
+  }
+
+  test_functionDeclaration_body_withSemicolon() async {
+    var result = _resolveTestCode(r'''
+void foo1() {}
+
+void foo2() {
+  print(0);
   bar^;
   print(1);
 }
@@ -366,7 +414,7 @@
 
   void foo2() {
     print(0);
-    bar^;
+    bar^
     print(1);
   }
 
@@ -375,7 +423,7 @@
 ''');
 
     result.assertResolvedNodes([
-      'void foo2() {print(0); bar; print(1);}',
+      'void foo2() {print(0); bar print; (1);}',
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 8e54e31..6c5e71d 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -89,6 +89,28 @@
         unorderedEquals([a.methods[0], b.fields[0]]));
   }
 
+  test_classMembers_enum() async {
+    await resolveTestCode('''
+enum E1 {
+  v;
+  void test() {}
+}
+
+enum E2 {
+  v;
+  final int test = 0;
+}
+''');
+
+    expect(
+      await _findClassMembers('test'),
+      unorderedEquals([
+        findElement.method('test', of: 'E1'),
+        findElement.field('test', of: 'E2'),
+      ]),
+    );
+  }
+
   test_classMembers_importNotDart() async {
     await resolveTestCode('''
 import 'not-dart.txt';
@@ -596,7 +618,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_named() async {
+  test_searchReferences_ConstructorElement_class_named() async {
     await resolveTestCode('''
 /// [new A.named] 1
 class A {
@@ -638,7 +660,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
+  test_searchReferences_ConstructorElement_class_named_viaTypeAlias() async {
     await resolveTestCode('''
 class A<T> {
   A.named();
@@ -663,7 +685,7 @@
     ]);
   }
 
-  test_searchReferences_ConstructorElement_unnamed_declared() async {
+  test_searchReferences_ConstructorElement_class_unnamed_declared() async {
     await resolveTestCode('''
 /// [new A] 1
 class A {
@@ -703,7 +725,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_unnamed_otherFile() async {
+  test_searchReferences_ConstructorElement_class_unnamed_otherFile() async {
     String other = convertPath('$testPackageLibPath/other.dart');
     String otherCode = '''
 import 'test.dart';
@@ -733,7 +755,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_unnamed_synthetic() async {
+  test_searchReferences_ConstructorElement_class_unnamed_synthetic() async {
     await resolveTestCode('''
 /// [new A] 1
 class A {}
@@ -767,6 +789,91 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_ConstructorElement_enum_named() async {
+    await resolveTestCode('''
+/// [new E.named] 1
+enum E {
+  v.named(); // 2
+  const E.named();
+  const E.other() : this.named(); // 3
+}
+''');
+    var element = findElement.constructor('named');
+    var expected = [
+      _expectIdQ(
+          findElement.enum_('E'), SearchResultKind.REFERENCE, '.named] 1',
+          length: '.named'.length),
+      _expectIdQ(findElement.field('v', of: 'E'), SearchResultKind.INVOCATION,
+          '.named(); // 2',
+          length: '.named'.length),
+      _expectIdQ(findElement.constructor('other', of: 'E'),
+          SearchResultKind.INVOCATION, '.named(); // 3',
+          length: '.named'.length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ConstructorElement_enum_unnamed_declared() async {
+    await resolveTestCode('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+  const E();
+  const E.other() : this(); // 5
+}
+''');
+    var element = findElement.unnamedConstructor('E');
+    var expected = [
+      _expectIdQ(findElement.enum_('E'), SearchResultKind.REFERENCE, '] 1',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v1'),
+          SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+          ', // 2',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v2'), SearchResultKind.INVOCATION, '(), // 3',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v3'), SearchResultKind.INVOCATION, '.new(); // 4',
+          length: '.new'.length),
+      _expectIdQ(findElement.constructor('other'), SearchResultKind.INVOCATION,
+          '(); // 5',
+          length: 0),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ConstructorElement_enum_unnamed_synthetic() async {
+    await resolveTestCode('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+}
+''');
+    var element = findElement.unnamedConstructor('E');
+    var expected = [
+      _expectIdQ(findElement.enum_('E'), SearchResultKind.REFERENCE, '] 1',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v1'),
+          SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+          ', // 2',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v2'), SearchResultKind.INVOCATION, '(), // 3',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v3'), SearchResultKind.INVOCATION, '.new(); // 4',
+          length: '.new'.length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_ExtensionElement() async {
     await resolveTestCode('''
 extension E on int {
@@ -788,7 +895,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_FieldElement() async {
+  test_searchReferences_FieldElement_class() async {
     await resolveTestCode('''
 class A {
   var field;
@@ -822,33 +929,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_FieldElement_ofEnum() async {
-    await resolveTestCode('''
-enum MyEnum {
-  A, B, C
-}
-main() {
-  print(MyEnum.A.index);
-  print(MyEnum.values);
-  print(MyEnum.A);
-  print(MyEnum.B);
-}
-''');
-    var enumElement = findElement.enum_('MyEnum');
-    var main = findElement.function('main');
-    await _verifyReferences(enumElement.getField('index')!,
-        [_expectIdQ(main, SearchResultKind.READ, 'index);')]);
-    await _verifyReferences(enumElement.getField('values')!,
-        [_expectIdQ(main, SearchResultKind.READ, 'values);')]);
-    await _verifyReferences(enumElement.getField('A')!, [
-      _expectIdQ(main, SearchResultKind.READ, 'A.index);'),
-      _expectIdQ(main, SearchResultKind.READ, 'A);')
-    ]);
-    await _verifyReferences(enumElement.getField('B')!,
-        [_expectIdQ(main, SearchResultKind.READ, 'B);')]);
-  }
-
-  test_searchReferences_FieldElement_synthetic() async {
+  test_searchReferences_FieldElement_class_synthetic() async {
     await resolveTestCode('''
 class A {
   get field => null;
@@ -878,6 +959,54 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_FieldElement_enum() async {
+    await resolveTestCode('''
+enum E {
+  v(field: 0);
+  final int field;
+  const E({required this.field}); // 1
+}
+
+void f(E e) {
+  e.field; // 2
+}
+''');
+    await _verifyReferences(findElement.field('field'), [
+      _expectIdQ(
+          findElement.field('v'), SearchResultKind.REFERENCE, 'field: 0'),
+      _expectIdQ(findElement.parameter('field'), SearchResultKind.WRITE,
+          'field}); // 1'),
+      _expectIdQ(
+          findElement.topFunction('f'), SearchResultKind.READ, 'field; // 2'),
+    ]);
+  }
+
+  test_searchReferences_FieldElement_enum_values() async {
+    await resolveTestCode('''
+enum MyEnum {
+  A, B, C
+}
+main() {
+  print(MyEnum.A.index);
+  print(MyEnum.values);
+  print(MyEnum.A);
+  print(MyEnum.B);
+}
+''');
+    var enumElement = findElement.enum_('MyEnum');
+    var main = findElement.function('main');
+    await _verifyReferences(typeProvider.enumElement!.getField('index')!,
+        [_expectIdQ(main, SearchResultKind.READ, 'index);')]);
+    await _verifyReferences(enumElement.getField('values')!,
+        [_expectIdQ(main, SearchResultKind.READ, 'values);')]);
+    await _verifyReferences(enumElement.getField('A')!, [
+      _expectIdQ(main, SearchResultKind.READ, 'A.index);'),
+      _expectIdQ(main, SearchResultKind.READ, 'A);')
+    ]);
+    await _verifyReferences(enumElement.getField('B')!,
+        [_expectIdQ(main, SearchResultKind.READ, 'B);')]);
+  }
+
   test_searchReferences_FunctionElement() async {
     await resolveTestCode('''
 test() {}
@@ -1264,55 +1393,35 @@
     await _verifyReferences(method, expected);
   }
 
-  test_searchReferences_MethodElement_extension_named() async {
+  test_searchReferences_MethodElement_enum() async {
     await resolveTestCode('''
-extension E on int {
+enum E {
+  v;
   void foo() {}
-
   void bar() {
     foo(); // 1
     this.foo(); // 2
-    print(foo); // 3
-    print(this.foo); // 4
   }
 }
-''');
-    var foo = findElement.method('foo');
-    var bar = findElement.method('bar');
-    var expected = [
-      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
-      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
-    ];
-    await _verifyReferences(foo, expected);
-  }
 
-  test_searchReferences_MethodElement_extension_unnamed() async {
-    await resolveTestCode('''
-extension on int {
-  void foo() {}
-
-  void bar() {
-    foo(); // 1
-    this.foo(); // 2
-    print(foo); // 3
-    print(this.foo); // 4
-  }
+void f(E e) {
+  e.foo(); // 3
+  e.foo; // 4
 }
 ''');
-    var foo = findElement.method('foo');
-    var bar = findElement.method('bar');
-    var expected = [
-      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
-      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
-    ];
-    await _verifyReferences(foo, expected);
+    await _verifyReferences(findElement.method('foo'), [
+      _expectId(findElement.method('bar'), SearchResultKind.INVOCATION,
+          'foo(); // 1'),
+      _expectIdQ(findElement.method('bar'), SearchResultKind.INVOCATION,
+          'foo(); // 2'),
+      _expectIdQ(findElement.topFunction('f'), SearchResultKind.INVOCATION,
+          'foo(); // 3'),
+      _expectIdQ(findElement.topFunction('f'), SearchResultKind.REFERENCE,
+          'foo; // 4'),
+    ]);
   }
 
-  test_searchReferences_MethodElement_ofExtension_instance() async {
+  test_searchReferences_MethodElement_extension_instance() async {
     await resolveTestCode('''
 extension E on int {
   void foo() {}
@@ -1348,7 +1457,31 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_MethodElement_ofExtension_static() async {
+  test_searchReferences_MethodElement_extension_named() async {
+    await resolveTestCode('''
+extension E on int {
+  void foo() {}
+
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+    print(foo); // 3
+    print(this.foo); // 4
+  }
+}
+''');
+    var foo = findElement.method('foo');
+    var bar = findElement.method('bar');
+    var expected = [
+      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
+    ];
+    await _verifyReferences(foo, expected);
+  }
+
+  test_searchReferences_MethodElement_extension_static() async {
     await resolveTestCode('''
 extension E on int {
   static void foo() {}
@@ -1376,6 +1509,30 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_MethodElement_extension_unnamed() async {
+    await resolveTestCode('''
+extension on int {
+  void foo() {}
+
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+    print(foo); // 3
+    print(this.foo); // 4
+  }
+}
+''');
+    var foo = findElement.method('foo');
+    var bar = findElement.method('bar');
+    var expected = [
+      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
+    ];
+    await _verifyReferences(foo, expected);
+  }
+
   test_searchReferences_MethodMember_class() async {
     await resolveTestCode('''
 class A<T> {
@@ -2024,6 +2181,29 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_TypeParameterElement_ofEnum() async {
+    await resolveTestCode('''
+enum E<T> {
+  v;
+  final T a;
+  void foo(T b) {}
+}
+''');
+    var element = findElement.typeParameter('T');
+    await _verifyReferences(element, [
+      _expectId(
+        findElement.field('a'),
+        SearchResultKind.REFERENCE,
+        'T a',
+      ),
+      _expectId(
+        findElement.parameter('b'),
+        SearchResultKind.REFERENCE,
+        'T b',
+      ),
+    ]);
+  }
+
   test_searchReferences_TypeParameterElement_ofLocalFunction() async {
     await resolveTestCode('''
 main() {
@@ -2107,7 +2287,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_subtypes() async {
+  test_subtypes_class() async {
     await resolveTestCode('''
 class A {}
 
@@ -2162,7 +2342,7 @@
     }
   }
 
-  test_subtypes_discover() async {
+  test_subtypes_class_discover() async {
     var aaaPackageRootPath = '$packagesRootPath/aaa';
     var bbbPackageRootPath = '$packagesRootPath/bbb';
 
@@ -2232,7 +2412,7 @@
     expect(b.members, ['method1']);
   }
 
-  test_subTypes_discover() async {
+  test_subTypes_class_discover() async {
     var aaaPackageRootPath = '$packagesRootPath/aaa';
     var bbbPackageRootPath = '$packagesRootPath/bbb';
     var cccPackageRootPath = '$packagesRootPath/ccc';
@@ -2273,7 +2453,7 @@
     assertHasResult(cccFilePath, 'C', not: true);
   }
 
-  test_subtypes_files() async {
+  test_subtypes_class_files() async {
     String pathB = convertPath('$testPackageLibPath/b.dart');
     String pathC = convertPath('$testPackageLibPath/c.dart');
     newFile(pathB, content: r'''
@@ -2302,6 +2482,59 @@
     expect(c.id, endsWith('c.dart;C'));
   }
 
+  test_subtypes_class_partWithoutLibrary() async {
+    await resolveTestCode('''
+part of lib;
+
+class A {}
+class B extends A {}
+''');
+    var a = findElement.class_('A');
+
+    List<SubtypeResult> subtypes =
+        await driver.search.subtypes(SearchedFiles(), type: a);
+    expect(subtypes, hasLength(1));
+
+    SubtypeResult b = subtypes.singleWhere((r) => r.name == 'B');
+    expect(b.libraryUri, testUriStr);
+    expect(b.id, '$testUriStr;$testUriStr;B');
+  }
+
+  test_subtypes_enum() async {
+    await resolveTestCode('''
+class A {}
+
+enum E1 implements A {
+  v;
+  void methodE1() {}
+}
+
+enum E2 with A {
+  v;
+  void methodE2() {}
+}
+
+class B {}
+''');
+
+    var subtypes = await driver.search.subtypes(
+      SearchedFiles(),
+      type: findElement.class_('A'),
+    );
+    expect(subtypes, hasLength(2));
+
+    var resultE1 = subtypes.singleWhere((r) => r.name == 'E1');
+    var resultE2 = subtypes.singleWhere((r) => r.name == 'E2');
+
+    expect(resultE1.libraryUri, testUriStr);
+    expect(resultE1.id, '$testUriStr;$testUriStr;E1');
+    expect(resultE1.members, ['methodE1']);
+
+    expect(resultE2.libraryUri, testUriStr);
+    expect(resultE2.id, '$testUriStr;$testUriStr;E2');
+    expect(resultE2.members, ['methodE2']);
+  }
+
   test_subtypes_mixin_superclassConstraints() async {
     await resolveTestCode('''
 class A {
@@ -2341,24 +2574,6 @@
     }
   }
 
-  test_subtypes_partWithoutLibrary() async {
-    await resolveTestCode('''
-part of lib;
-
-class A {}
-class B extends A {}
-''');
-    var a = findElement.class_('A');
-
-    List<SubtypeResult> subtypes =
-        await driver.search.subtypes(SearchedFiles(), type: a);
-    expect(subtypes, hasLength(1));
-
-    SubtypeResult b = subtypes.singleWhere((r) => r.name == 'B');
-    expect(b.libraryUri, testUriStr);
-    expect(b.id, '$testUriStr;$testUriStr;B');
-  }
-
   test_topLevelElements() async {
     await resolveTestCode('''
 class A {} // A
diff --git a/pkg/analyzer/test/src/dart/ast/ast_test.dart b/pkg/analyzer/test/src/dart/ast/ast_test.dart
index 84635ce..c388c0b 100644
--- a/pkg/analyzer/test/src/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/ast_test.dart
@@ -120,6 +120,16 @@
     testUnit = parseCompilationUnit(source) as CompilationUnitImpl;
   }
 
+  test_inConstantContext_enumConstant_true() {
+    parse('''
+enum E {
+  v([]);
+  const E(_);
+}
+''');
+    assertInContext('[]', true);
+  }
+
   test_inConstantContext_instanceCreation_annotation_true() {
     parse('''
 @C(C(0))
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 c594940..4bd8ed4 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -63,6 +63,18 @@
     expect(element, isConstructorElement);
   }
 
+  test_locate_ConstructorSelector_EnumConstantArguments_EnumConstantDeclaration() async {
+    await resolveTestCode(r'''
+enum E {
+  v.named(); // 0
+  const E.named();
+}
+''');
+    var node = findNode.constructorSelector('named(); // 0');
+    var element = ElementLocator.locate(node);
+    expect(element, findElement.constructor('named'));
+  }
+
   test_locate_ExportDirective() async {
     await resolveTestCode("export 'dart:code';");
     var node = findNode.export('export');
diff --git a/pkg/analyzer/test/src/dart/ast/parse_base.dart b/pkg/analyzer/test/src/dart/ast/parse_base.dart
index a088dc9..e8e2609 100644
--- a/pkg/analyzer/test/src/dart/ast/parse_base.dart
+++ b/pkg/analyzer/test/src/dart/ast/parse_base.dart
@@ -33,22 +33,23 @@
       );
 
     var token = scanner.tokenize();
+    var lineInfo = LineInfo(scanner.lineStarts);
     featureSet = scanner.featureSet;
 
     var parser = Parser(
       source,
       errorListener,
       featureSet: featureSet,
+      lineInfo: lineInfo,
     );
     parser.enableOptionalNewAndConst = true;
 
     var unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = LineInfo(scanner.lineStarts);
 
     return ParseResult(
       path,
       content,
-      unit.lineInfo!,
+      unit.lineInfo,
       unit,
       errorListener.errors,
     );
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 eac40aa..17ba251 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
@@ -2,11 +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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 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/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/to_source_visitor.dart';
 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
@@ -16,6 +14,8 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../../../util/feature_sets.dart';
+
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ToSourceVisitorTest);
@@ -211,6 +211,13 @@
             Keyword.ABSTRACT, "C", null, null, null, null));
   }
 
+  void test_visitClassDeclaration_abstractAugment() {
+    ClassDeclaration declaration = AstTestFactory.classDeclaration(
+        Keyword.ABSTRACT, "C", null, null, null, null,
+        isAugmentation: true);
+    _assertSource("abstract augment class C {}", declaration);
+  }
+
   void test_visitClassDeclaration_abstractMacro() {
     ClassDeclaration declaration = AstTestFactory.classDeclaration(
         Keyword.ABSTRACT, "C", null, null, null, null,
@@ -218,6 +225,13 @@
     _assertSource("abstract macro class C {}", declaration);
   }
 
+  void test_visitClassDeclaration_augment() {
+    ClassDeclaration declaration = AstTestFactory.classDeclaration(
+        null, "C", null, null, null, null,
+        isAugmentation: true);
+    _assertSource("augment class C {}", declaration);
+  }
+
   void test_visitClassDeclaration_empty() {
     _assertSource("class C {}",
         AstTestFactory.classDeclaration(null, "C", null, null, null, null));
@@ -406,6 +420,19 @@
             AstTestFactory.implementsClause([AstTestFactory.namedType4("I")])));
   }
 
+  void test_visitClassTypeAlias_abstractAugment() {
+    _assertSource(
+        "abstract augment class C = S with M1;",
+        AstTestFactory.classTypeAlias(
+            "C",
+            null,
+            Keyword.ABSTRACT,
+            AstTestFactory.namedType4("S"),
+            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
+            null,
+            isAugmentation: true));
+  }
+
   void test_visitClassTypeAlias_abstractMacro() {
     _assertSource(
         "abstract macro class C = S with M1;",
@@ -419,6 +446,19 @@
             isMacro: true));
   }
 
+  void test_visitClassTypeAlias_augment() {
+    _assertSource(
+        "augment class C = S with M1;",
+        AstTestFactory.classTypeAlias(
+            "C",
+            null,
+            null,
+            AstTestFactory.namedType4("S"),
+            AstTestFactory.withClause([AstTestFactory.namedType4("M1")]),
+            null,
+            isAugmentation: true));
+  }
+
   void test_visitClassTypeAlias_generic() {
     _assertSource(
         "class C<E> = S<E> with M1<E>;",
@@ -3477,13 +3517,7 @@
   FindNode _parseStringToFindNode(String content) {
     var parseResult = parseString(
       content: content,
-      featureSet: FeatureSet.fromEnableFlags2(
-        sdkLanguageVersion: ExperimentStatus.currentVersion,
-        flags: [
-          Feature.enhanced_enums.enableString,
-          Feature.super_parameters.enableString,
-        ],
-      ),
+      featureSet: FeatureSets.latestWithExperiments,
     );
     return FindNode(parseResult.content, parseResult.unit);
   }
diff --git a/pkg/analyzer/test/src/dart/constant/utilities_test.dart b/pkg/analyzer/test/src/dart/constant/utilities_test.dart
index 906c7e0..99bd23a 100644
--- a/pkg/analyzer/test/src/dart/constant/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/utilities_test.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
-import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/generated/constant.dart';
@@ -53,15 +52,6 @@
     expect(_findAnnotations(), contains(_node));
   }
 
-  void test_visitAnnotation_enumConstant() {
-    // Analyzer ignores annotations on enum constant declarations.
-    Annotation annotation = AstTestFactory.annotation2(
-        AstTestFactory.identifier3('A'), null, AstTestFactory.argumentList());
-    _node = astFactory.enumConstantDeclaration(
-        null, <Annotation>[annotation], AstTestFactory.identifier3('C'));
-    expect(_findConstants(), isEmpty);
-  }
-
   /// Test an annotation that represents the invocation of a constant
   /// constructor.
   void test_visitAnnotation_invocation() {
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 2b46b93..e39414a 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -692,8 +692,8 @@
     FieldElement b2Element = B.getField('B2')!;
     expect(b2Element.isEnumConstant, isTrue);
 
-    FieldElement indexElement = B.getField('index')!;
-    expect(indexElement.isEnumConstant, isFalse);
+    FieldElement valuesElement = B.getField('values')!;
+    expect(valuesElement.isEnumConstant, isFalse);
   }
 }
 
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 73da833..704c6ed 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -12,12 +12,295 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InheritanceManager3Test);
-    defineReflectiveTests(InheritanceManager3WithNullSafetyTest);
+    defineReflectiveTests(InheritanceManager3WithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class InheritanceManager3Test extends _InheritanceManager3Base {
+  test_getInheritedMap_topMerge_method() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.6
+class A {
+  void foo({int a}) {}
+}
+''');
+
+    await resolveTestCode('''
+import 'a.dart';
+
+class B {
+  void foo({required int? a}) {}
+}
+
+class C implements A, B {
+  void foo({int? a}) {}
+}
+''');
+
+    _assertInheritedMap('C', r'''
+A.foo: void Function({int a})
+''');
+  }
+
+  test_getMember_mixin_notMerge_replace() async {
+    await resolveTestCode('''
+class A<T> {
+  T foo() => throw 0;
+}
+
+mixin M<T> {
+  T foo() => throw 1;
+}
+
+class X extends A<dynamic> with M<Object?> {}
+class Y extends A<Object?> with M<dynamic> {}
+''');
+    _assertGetMember2(
+      className: 'X',
+      name: 'foo',
+      expected: 'M.foo: Object? Function()',
+    );
+    _assertGetMember2(
+      className: 'Y',
+      name: 'foo',
+      expected: 'M.foo: dynamic Function()',
+    );
+  }
+
+  test_getMember_optIn_inheritsOptIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  int foo(int a, int? b) => 0;
+}
+''');
+    await resolveTestCode('''
+import 'a.dart';
+class B extends A {
+  int? bar(int a) => 0;
+}
+''');
+    _assertGetMember(
+      className: 'B',
+      name: 'foo',
+      expected: 'A.foo: int Function(int, int?)',
+    );
+    _assertGetMember(
+      className: 'B',
+      name: 'bar',
+      expected: 'B.bar: int? Function(int)',
+    );
+  }
+
+  test_getMember_optIn_inheritsOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.6
+class A {
+  int foo(int a, int b) => 0;
+}
+''');
+    await resolveTestCode('''
+import 'a.dart';
+class B extends A {
+  int? bar(int a) => 0;
+}
+''');
+    _assertGetMember(
+      className: 'B',
+      name: 'foo',
+      expected: 'A.foo: int* Function(int*, int*)*',
+    );
+    _assertGetMember(
+      className: 'B',
+      name: 'bar',
+      expected: 'B.bar: int? Function(int)',
+    );
+  }
+
+  test_getMember_optIn_topMerge_getter_existing() async {
+    await resolveTestCode('''
+class A {
+  dynamic get foo => 0;
+}
+
+class B {
+  Object? get foo => 0;
+}
+
+class X extends A implements B {}
+''');
+
+    _assertGetMember(
+      className: 'X',
+      name: 'foo',
+      expected: 'B.foo: Object? Function()',
+    );
+  }
+
+  test_getMember_optIn_topMerge_getter_synthetic() async {
+    await resolveTestCode('''
+abstract class A {
+  Future<void> get foo;
+}
+
+abstract class B {
+  Future<dynamic> get foo;
+}
+
+abstract class X extends A implements B {}
+''');
+
+    _assertGetMember(
+      className: 'X',
+      name: 'foo',
+      expected: 'X.foo: Future<Object?> Function()',
+    );
+  }
+
+  test_getMember_optIn_topMerge_method() async {
+    await resolveTestCode('''
+class A {
+  Object? foo(dynamic x) {}
+}
+
+class B {
+  dynamic foo(Object? x) {}
+}
+
+class X extends A implements B {}
+''');
+
+    _assertGetMember(
+      className: 'X',
+      name: 'foo',
+      expected: 'X.foo: Object? Function(Object?)',
+    );
+  }
+
+  test_getMember_optIn_topMerge_setter_existing() async {
+    await resolveTestCode('''
+class A {
+  set foo(dynamic _) {}
+}
+
+class B {
+  set foo(Object? _) {}
+}
+
+class X extends A implements B {}
+''');
+
+    _assertGetMember(
+      className: 'X',
+      name: 'foo=',
+      expected: 'B.foo=: void Function(Object?)',
+    );
+  }
+
+  test_getMember_optIn_topMerge_setter_synthetic() async {
+    await resolveTestCode('''
+abstract class A {
+  set foo(Future<void> _);
+}
+
+abstract class B {
+  set foo(Future<dynamic> _);
+}
+
+abstract class X extends A implements B {}
+''');
+
+    _assertGetMember(
+      className: 'X',
+      name: 'foo=',
+      expected: 'X.foo=: void Function(Future<Object?>)',
+    );
+  }
+
+  test_getMember_optOut_inheritsOptIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  int foo(int a, int? b) => 0;
+}
+''');
+    await resolveTestCode('''
+// @dart = 2.6
+import 'a.dart';
+class B extends A {
+  int bar(int a) => 0;
+}
+''');
+    _assertGetMember2(
+      className: 'B',
+      name: 'foo',
+      expected: 'A.foo: int* Function(int*, int*)*',
+    );
+
+    _assertGetMember2(
+      className: 'B',
+      name: 'bar',
+      expected: 'B.bar: int* Function(int*)*',
+    );
+  }
+
+  test_getMember_optOut_mixesOptIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  int foo(int a, int? b) => 0;
+}
+''');
+    await resolveTestCode('''
+// @dart = 2.6
+import 'a.dart';
+class B with A {
+  int bar(int a) => 0;
+}
+''');
+    _assertGetMember2(
+      className: 'B',
+      name: 'foo',
+      expected: 'A.foo: int* Function(int*, int*)*',
+    );
+    _assertGetMember2(
+      className: 'B',
+      name: 'bar',
+      expected: 'B.bar: int* Function(int*)*',
+    );
+  }
+
+  test_getMember_optOut_passOptIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  int foo(int a, int? b) => 0;
+}
+''');
+    newFile('$testPackageLibPath/b.dart', content: r'''
+// @dart = 2.6
+import 'a.dart';
+class B extends A {
+  int bar(int a) => 0;
+}
+''');
+    await resolveTestCode('''
+import 'b.dart';
+class C extends B {}
+''');
+    _assertGetMember(
+      className: 'C',
+      name: 'foo',
+      expected: 'A.foo: int* Function(int*, int*)*',
+    );
+    _assertGetMember(
+      className: 'C',
+      name: 'bar',
+      expected: 'B.bar: int* Function(int*)*',
+    );
+  }
+}
+
+@reflectiveTest
+class InheritanceManager3WithoutNullSafetyTest
+    extends _InheritanceManager3Base {
   test_getInherited_closestSuper() async {
     await resolveTestCode('''
 class A {
@@ -1122,288 +1405,6 @@
   }
 }
 
-@reflectiveTest
-class InheritanceManager3WithNullSafetyTest extends _InheritanceManager3Base {
-  test_getInheritedMap_topMerge_method() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.6
-class A {
-  void foo({int a}) {}
-}
-''');
-
-    await resolveTestCode('''
-import 'a.dart';
-
-class B {
-  void foo({required int? a}) {}
-}
-
-class C implements A, B {
-  void foo({int? a}) {}
-}
-''');
-
-    _assertInheritedMap('C', r'''
-A.foo: void Function({int a})
-''');
-  }
-
-  test_getMember_mixin_notMerge_replace() async {
-    await resolveTestCode('''
-class A<T> {
-  T foo() => throw 0;
-}
-
-mixin M<T> {
-  T foo() => throw 1;
-}
-
-class X extends A<dynamic> with M<Object?> {}
-class Y extends A<Object?> with M<dynamic> {}
-''');
-    _assertGetMember2(
-      className: 'X',
-      name: 'foo',
-      expected: 'M.foo: Object? Function()',
-    );
-    _assertGetMember2(
-      className: 'Y',
-      name: 'foo',
-      expected: 'M.foo: dynamic Function()',
-    );
-  }
-
-  test_getMember_optIn_inheritsOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  int foo(int a, int? b) => 0;
-}
-''');
-    await resolveTestCode('''
-import 'a.dart';
-class B extends A {
-  int? bar(int a) => 0;
-}
-''');
-    _assertGetMember(
-      className: 'B',
-      name: 'foo',
-      expected: 'A.foo: int Function(int, int?)',
-    );
-    _assertGetMember(
-      className: 'B',
-      name: 'bar',
-      expected: 'B.bar: int? Function(int)',
-    );
-  }
-
-  test_getMember_optIn_inheritsOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.6
-class A {
-  int foo(int a, int b) => 0;
-}
-''');
-    await resolveTestCode('''
-import 'a.dart';
-class B extends A {
-  int? bar(int a) => 0;
-}
-''');
-    _assertGetMember(
-      className: 'B',
-      name: 'foo',
-      expected: 'A.foo: int* Function(int*, int*)*',
-    );
-    _assertGetMember(
-      className: 'B',
-      name: 'bar',
-      expected: 'B.bar: int? Function(int)',
-    );
-  }
-
-  test_getMember_optIn_topMerge_getter_existing() async {
-    await resolveTestCode('''
-class A {
-  dynamic get foo => 0;
-}
-
-class B {
-  Object? get foo => 0;
-}
-
-class X extends A implements B {}
-''');
-
-    _assertGetMember(
-      className: 'X',
-      name: 'foo',
-      expected: 'B.foo: Object? Function()',
-    );
-  }
-
-  test_getMember_optIn_topMerge_getter_synthetic() async {
-    await resolveTestCode('''
-abstract class A {
-  Future<void> get foo;
-}
-
-abstract class B {
-  Future<dynamic> get foo;
-}
-
-abstract class X extends A implements B {}
-''');
-
-    _assertGetMember(
-      className: 'X',
-      name: 'foo',
-      expected: 'X.foo: Future<Object?> Function()',
-    );
-  }
-
-  test_getMember_optIn_topMerge_method() async {
-    await resolveTestCode('''
-class A {
-  Object? foo(dynamic x) {}
-}
-
-class B {
-  dynamic foo(Object? x) {}
-}
-
-class X extends A implements B {}
-''');
-
-    _assertGetMember(
-      className: 'X',
-      name: 'foo',
-      expected: 'X.foo: Object? Function(Object?)',
-    );
-  }
-
-  test_getMember_optIn_topMerge_setter_existing() async {
-    await resolveTestCode('''
-class A {
-  set foo(dynamic _) {}
-}
-
-class B {
-  set foo(Object? _) {}
-}
-
-class X extends A implements B {}
-''');
-
-    _assertGetMember(
-      className: 'X',
-      name: 'foo=',
-      expected: 'B.foo=: void Function(Object?)',
-    );
-  }
-
-  test_getMember_optIn_topMerge_setter_synthetic() async {
-    await resolveTestCode('''
-abstract class A {
-  set foo(Future<void> _);
-}
-
-abstract class B {
-  set foo(Future<dynamic> _);
-}
-
-abstract class X extends A implements B {}
-''');
-
-    _assertGetMember(
-      className: 'X',
-      name: 'foo=',
-      expected: 'X.foo=: void Function(Future<Object?>)',
-    );
-  }
-
-  test_getMember_optOut_inheritsOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  int foo(int a, int? b) => 0;
-}
-''');
-    await resolveTestCode('''
-// @dart = 2.6
-import 'a.dart';
-class B extends A {
-  int bar(int a) => 0;
-}
-''');
-    _assertGetMember2(
-      className: 'B',
-      name: 'foo',
-      expected: 'A.foo: int* Function(int*, int*)*',
-    );
-
-    _assertGetMember2(
-      className: 'B',
-      name: 'bar',
-      expected: 'B.bar: int* Function(int*)*',
-    );
-  }
-
-  test_getMember_optOut_mixesOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  int foo(int a, int? b) => 0;
-}
-''');
-    await resolveTestCode('''
-// @dart = 2.6
-import 'a.dart';
-class B with A {
-  int bar(int a) => 0;
-}
-''');
-    _assertGetMember2(
-      className: 'B',
-      name: 'foo',
-      expected: 'A.foo: int* Function(int*, int*)*',
-    );
-    _assertGetMember2(
-      className: 'B',
-      name: 'bar',
-      expected: 'B.bar: int* Function(int*)*',
-    );
-  }
-
-  test_getMember_optOut_passOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  int foo(int a, int? b) => 0;
-}
-''');
-    newFile('$testPackageLibPath/b.dart', content: r'''
-// @dart = 2.6
-import 'a.dart';
-class B extends A {
-  int bar(int a) => 0;
-}
-''');
-    await resolveTestCode('''
-import 'b.dart';
-class C extends B {}
-''');
-    _assertGetMember(
-      className: 'C',
-      name: 'foo',
-      expected: 'A.foo: int* Function(int*, int*)*',
-    );
-    _assertGetMember(
-      className: 'C',
-      name: 'bar',
-      expected: 'B.bar: int* Function(int*)*',
-    );
-  }
-}
-
 class _InheritanceManager3Base extends PubPackageResolutionTest {
   late final InheritanceManager3 manager;
 
diff --git a/pkg/analyzer/test/src/dart/element/subtype_test.dart b/pkg/analyzer/test/src/dart/element/subtype_test.dart
index 481f288..884d010 100644
--- a/pkg/analyzer/test/src/dart/element/subtype_test.dart
+++ b/pkg/analyzer/test/src/dart/element/subtype_test.dart
@@ -1479,6 +1479,41 @@
     );
   }
 
+  test_functionType_74() {
+    var T1 = typeParameter('T');
+    var R1 = typeParameter(
+      'R',
+      bound: typeParameterType(
+        T1,
+        nullabilitySuffix: NullabilitySuffix.none,
+      ),
+    );
+
+    var T2 = typeParameter('T');
+    var R2 = typeParameter(
+      'R',
+      bound: typeParameterType(
+        T2,
+        nullabilitySuffix: NullabilitySuffix.none,
+      ),
+    );
+
+    // Note, the order `R extends T`, then `T` is important.
+    // We test that all type parameters replaced at once, not as we go.
+    isSubtype(
+      functionTypeNone(
+        typeFormals: [R1, T1],
+        returnType: voidNone,
+      ),
+      functionTypeNone(
+        typeFormals: [R2, T2],
+        returnType: voidNone,
+      ),
+      strT0: 'void Function<R extends T, T>()',
+      strT1: 'void Function<R extends T, T>()',
+    );
+  }
+
   test_functionType_generic_nested() {
     var E0 = typeParameter('E0');
     var F0 = typeParameter('F0');
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 4044e88..de30fd9 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
@@ -222,7 +222,7 @@
 @reflectiveTest
 class FileResolverTest extends FileResolutionTest {
   @override
-  bool typeToStringWithNullability = false;
+  bool isNullSafetyEnabled = false;
 
   test_analysisOptions_default_fromPackageUri() async {
     newFile('/workspace/dart/analysis_options/lib/default.yaml', content: r'''
@@ -911,7 +911,7 @@
   }
 
   test_nullSafety_enabled() async {
-    typeToStringWithNullability = true;
+    isNullSafetyEnabled = true;
 
     newFile('/workspace/dart/test/BUILD', content: r'''
 dart_package(
@@ -934,7 +934,7 @@
   }
 
   test_nullSafety_notEnabled() async {
-    typeToStringWithNullability = true;
+    isNullSafetyEnabled = true;
 
     await assertErrorsInCode(r'''
 void f(int? a) {}
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index ce3713b..3ee6a27 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -701,7 +701,7 @@
   }
 
   test_nullAware_context() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     await assertNoErrorsInCode('''
 T f<T>() => throw Error();
 g(int$question a) {
@@ -1721,7 +1721,7 @@
   }
 
   test_simpleIdentifier_parameter_compound_ifNull() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     await assertNoErrorsInCode('''
 void f(num$question x) {
   x ??= 0;
@@ -1747,8 +1747,8 @@
   }
 
   test_simpleIdentifier_parameter_compound_ifNull2() async {
-    var question = typeToStringWithNullability ? '?' : '';
-    var errorOffset = typeToStringWithNullability ? 77 : 76;
+    var question = isNullSafetyEnabled ? '?' : '';
+    var errorOffset = isNullSafetyEnabled ? 77 : 76;
     await assertErrorsInCode('''
 class A {}
 class B extends A {}
@@ -1780,7 +1780,7 @@
   }
 
   test_simpleIdentifier_parameter_compound_ifNull_notAssignableType() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     var code = '''
 void f(double$question a, int b) {
   a ??= b;
@@ -2294,7 +2294,7 @@
   }
 
   test_simpleIdentifier_topGetter_topSetter_compound_ifNull2() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     await assertErrorsInCode('''
 void f() {
   x ??= C();
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 1adb108..77954c0 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -47,6 +47,38 @@
     );
   }
 
+  test_conditional_else() async {
+    await assertNoErrorsInCode('''
+abstract class A {}
+abstract class C extends A {
+  void call();
+}
+void Function() f(A a, bool b, C c, dynamic d) => b ? d : (b ? a : c);
+''');
+    // `c` is in the "else" position of a conditional expression, so implicit
+    // call tearoff logic should not apply to it.
+    var expr = findNode.conditionalExpression('b ? a : c');
+    expect(expr.thenExpression, TypeMatcher<SimpleIdentifier>());
+    // Therefore the type of `b ? a : c` should be `A`.
+    assertType(expr, 'A');
+  }
+
+  test_conditional_then() async {
+    await assertNoErrorsInCode('''
+abstract class A {}
+abstract class C extends A {
+  void call();
+}
+void Function() f(A a, bool b, C c, dynamic d) => b ? d : (b ? c : a);
+''');
+    // `c` is in the "then" position of a conditional expression, so implicit
+    // call tearoff logic should not apply to it.
+    var expr = findNode.conditionalExpression('b ? c : a');
+    expect(expr.thenExpression, TypeMatcher<SimpleIdentifier>());
+    // Therefore the type of `b ? c : a` should be `A`.
+    assertType(expr, 'A');
+  }
+
   test_explicitTypeArguments() async {
     await assertNoErrorsInCode('''
 class C {
@@ -66,7 +98,26 @@
     );
   }
 
-  test_ifNull() async {
+  test_ifNull_lhs() async {
+    await assertErrorsInCode('''
+abstract class A {}
+abstract class C extends A {
+  void call();
+}
+
+void Function() f(A a, bool b, C c, dynamic d) => b ? d : c ?? a;
+''', [
+      error(StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION, 130, 1),
+    ]);
+    // `c` is on the LHS of an if-null expression, so implicit call tearoff
+    // logic should not apply to it.
+    var expr = findNode.binary('c ?? a');
+    expect(expr.leftOperand, TypeMatcher<SimpleIdentifier>());
+    // Therefore the type of `c ?? a` should be `A`.
+    assertType(expr, 'A');
+  }
+
+  test_ifNull_rhs() async {
     await assertNoErrorsInCode('''
 abstract class C {
   void call(int t) => t;
@@ -163,6 +214,16 @@
     );
   }
 
+  test_parenthesized_cascade_target() async {
+    await assertNoErrorsInCode('''
+abstract class C {
+  void call();
+  void m();
+}
+void Function() f(C c) => (c)..m();
+''');
+  }
+
   test_prefixedIdentifier() async {
     await assertNoErrorsInCode('''
 abstract class C {
@@ -455,7 +516,7 @@
       expectedSubstitution: {'T': 'int'},
     );
     _assertTypeArgumentList(
-      creation.constructorName.type2.typeArguments,
+      creation.constructorName.type.typeArguments,
       ['int'],
     );
     expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
@@ -493,7 +554,7 @@
       expectedSubstitution: {'T': 'int'},
     );
     _assertTypeArgumentList(
-      creation.constructorName.type2.typeArguments,
+      creation.constructorName.type.typeArguments,
       ['int'],
     );
     expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
diff --git a/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
index cd5dd24..8a3ba86 100644
--- a/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
@@ -9,39 +9,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AwaitExpressionResolutionTest);
-    defineReflectiveTests(AwaitExpressionResolutionWithNullSafetyTest);
+    defineReflectiveTests(AwaitExpressionResolutionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class AwaitExpressionResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  test_future() async {
-    await assertNoErrorsInCode(r'''
-f(Future<int> a) async {
-  await a;
-}
-''');
-
-    assertType(findNode.awaitExpression('await a'), 'int');
-  }
-
-  test_futureOr() async {
-    await assertNoErrorsInCode(r'''
-import 'dart:async';
-
-f(FutureOr<int> a) async {
-  await a;
-}
-''');
-
-    assertType(findNode.awaitExpression('await a'), 'int');
-  }
-}
-
-@reflectiveTest
-class AwaitExpressionResolutionWithNullSafetyTest
-    extends PubPackageResolutionTest {
+class AwaitExpressionResolutionTest extends PubPackageResolutionTest {
   test_futureOrQ() async {
     await assertNoErrorsInCode(r'''
 import 'dart:async';
@@ -64,3 +37,29 @@
     assertType(findNode.awaitExpression('await a'), 'int?');
   }
 }
+
+@reflectiveTest
+class AwaitExpressionResolutionWithoutNullSafetyTest
+    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+  test_future() async {
+    await assertNoErrorsInCode(r'''
+f(Future<int> a) async {
+  await a;
+}
+''');
+
+    assertType(findNode.awaitExpression('await a'), 'int');
+  }
+
+  test_futureOr() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+
+f(FutureOr<int> a) async {
+  await a;
+}
+''');
+
+    assertType(findNode.awaitExpression('await a'), 'int');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
index 47869ef..e3c07756 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -25,19 +24,32 @@
 int g() => f(null) ?? 0;
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('f(null)'),
-      element: findElement.topFunction('f'),
-      typeArgumentTypes: ['int?'],
-      invokeType: 'int? Function(int?)',
-      type: 'int?',
-    );
-
-    assertBinaryExpression(
-      findNode.binary('?? 0'),
-      element: null,
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('?? 0'), r'''
+BinaryExpression
+  leftOperand: 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: int? Function(int?)
+    staticType: int?
+    typeArgumentTypes
+      int?
+  operator: ??
+  rightOperand: IntegerLiteral
+    literal: 0
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: int
+''');
   }
 
   test_ifNull_nullableInt_int() async {
@@ -47,11 +59,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('x ?? y'),
-      element: null,
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('x ?? y'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: int?
+  operator: ??
+  rightOperand: SimpleIdentifier
+    token: y
+    staticElement: y@19
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: int
+''');
   }
 
   test_ifNull_nullableInt_nullableDouble() async {
@@ -61,11 +83,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('x ?? y'),
-      element: null,
-      type: 'num?',
-    );
+    assertResolvedNodeText(findNode.binary('x ?? y'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: int?
+  operator: ??
+  rightOperand: SimpleIdentifier
+    token: y
+    staticElement: y@23
+    staticType: double?
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: num?
+''');
   }
 
   test_ifNull_nullableInt_nullableInt() async {
@@ -75,11 +107,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('x ?? x'),
-      element: null,
-      type: 'int?',
-    );
+    assertResolvedNodeText(findNode.binary('x ?? x'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: int?
+  operator: ??
+  rightOperand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: int?
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: int?
+''');
   }
 
   test_plus_int_never() async {
@@ -89,8 +131,21 @@
 }
 ''');
 
-    assertBinaryExpression(findNode.binary('a + b'),
-        element: numElement.getMethod('+'), type: 'num');
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@15
+    staticType: Never
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: num
+''');
   }
 
   test_plus_never_int() async {
@@ -103,11 +158,21 @@
       error(HintCode.DEAD_CODE, 26, 2),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: isNull,
-      type: 'Never',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@8
+    staticType: Never
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@15
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: Never
+''');
   }
 }
 
@@ -119,14 +184,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a != b'),
-      element: elementMatcher(
-        numElement.getMethod('=='),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'bool',
-    );
+    assertResolvedNodeText(findNode.binary('a != b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: !=
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::==
+  staticInvokeType: bool Function(Object)
+  staticType: bool
+''');
   }
 
   test_bangEq_extensionOverride_left() async {
@@ -140,11 +212,31 @@
       error(CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR, 46, 2),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('!= 0'),
-      element: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.binary('!= 0'), r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@34
+          staticType: int
+      rightParenthesis: )
+    extendedType: int
+    staticType: null
+  operator: !=
+  rightOperand: IntegerLiteral
+    literal: 0
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
   }
 
   test_bangEqEq() async {
@@ -156,14 +248,21 @@
       error(ScannerErrorCode.UNSUPPORTED_OPERATOR, 22, 1),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('a !== b'),
-      element: null,
-      type: 'dynamic',
-    );
-
-    assertType(findNode.simple('a !=='), 'int');
-    assertType(findNode.simple('b;'), 'int');
+    assertResolvedNodeText(findNode.binary('a !== b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: !==
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
   }
 
   test_eqEq() async {
@@ -173,14 +272,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a == b'),
-      element: elementMatcher(
-        numElement.getMethod('=='),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'bool',
-    );
+    assertResolvedNodeText(findNode.binary('a == b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: ==
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::==
+  staticInvokeType: bool Function(Object)
+  staticType: bool
+''');
   }
 
   test_eqEq_extensionOverride_left() async {
@@ -194,11 +300,31 @@
       error(CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR, 46, 2),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('== 0'),
-      element: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.binary('== 0'), r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@34
+          staticType: int
+      rightParenthesis: )
+    extendedType: int
+    staticType: null
+  operator: ==
+  rightOperand: IntegerLiteral
+    literal: 0
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
   }
 
   test_eqEqEq() async {
@@ -210,29 +336,46 @@
       error(ScannerErrorCode.UNSUPPORTED_OPERATOR, 22, 1),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('a === b'),
-      element: null,
-      type: 'dynamic',
-    );
-
-    assertType(findNode.simple('a ==='), 'int');
-    assertType(findNode.simple('b;'), 'int');
+    assertResolvedNodeText(findNode.binary('a === b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: ===
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
   }
 
   test_ifNull() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     await assertNoErrorsInCode('''
 f(int$question a, double b) {
   a ?? b;
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a ?? b'),
-      element: null,
-      type: 'num',
-    );
+    assertResolvedNodeText(findNode.binary('a ?? b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: int?
+  operator: ??
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@17
+    staticType: double
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: num
+''');
   }
 
   test_logicalAnd() async {
@@ -242,11 +385,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a && b'),
-      element: boolElement.getMethod('&&'),
-      type: 'bool',
-    );
+    assertResolvedNodeText(findNode.binary('a && b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: bool
+  operator: &&
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@15
+    staticType: bool
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: bool
+''');
   }
 
   test_logicalOr() async {
@@ -256,11 +409,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a || b'),
-      element: boolElement.getMethod('||'),
-      type: 'bool',
-    );
+    assertResolvedNodeText(findNode.binary('a || b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: bool
+  operator: ||
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@15
+    staticType: bool
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: bool
+''');
   }
 
   test_minus_int_context_int() async {
@@ -283,14 +446,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a - b'),
-      element: elementMatcher(
-        numElement.getMethod('-'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    assertResolvedNodeText(findNode.binary('a - b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: -
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@16
+    staticType: double
+  staticElement: dart:core::@class::num::@method::-
+  staticInvokeType: num Function(num)
+  staticType: double
+''');
   }
 
   test_minus_int_int() async {
@@ -300,14 +470,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a - b'),
-      element: elementMatcher(
-        numElement.getMethod('-'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('a - b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: -
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::-
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
   }
 
   test_mod_int_context_int() async {
@@ -330,14 +507,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a % b'),
-      element: elementMatcher(
-        numElement.getMethod('%'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    assertResolvedNodeText(findNode.binary('a % b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: %
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@16
+    staticType: double
+  staticElement: dart:core::@class::num::@method::%
+  staticInvokeType: num Function(num)
+  staticType: double
+''');
   }
 
   test_mod_int_int() async {
@@ -347,14 +531,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a % b'),
-      element: elementMatcher(
-        numElement.getMethod('%'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('a % b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: %
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::%
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
   }
 
   test_plus_double_context_double() async {
@@ -401,14 +592,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        doubleElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@20
+    staticType: dynamic
+  staticElement: dart:core::@class::double::@method::+
+  staticInvokeType: double Function(num)
+  staticType: double
+''');
   }
 
   test_plus_int_context_double() async {
@@ -485,14 +683,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@16
+    staticType: double
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: double
+''');
   }
 
   test_plus_int_dynamic() async {
@@ -502,14 +707,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'num',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@17
+    staticType: dynamic
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: num
+''');
   }
 
   test_plus_int_int() async {
@@ -519,14 +731,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
   }
 
   test_plus_int_int_target_rewritten() async {
@@ -536,14 +755,28 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a() + b'),
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('a() + b'), r'''
+BinaryExpression
+  leftOperand: FunctionExpressionInvocation
+    function: SimpleIdentifier
+      token: a
+      staticElement: a@17
+      staticType: int Function()
+    argumentList: ArgumentList
+      leftParenthesis: (
+      rightParenthesis: )
+    staticElement: <null>
+    staticInvokeType: int Function()
+    staticType: int
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@24
+    staticType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
   }
 
   test_plus_int_int_via_extension_explicit() async {
@@ -556,14 +789,32 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('E(a) + b'),
-      element: elementMatcher(
-        findElement.method('+', of: 'E'),
-        isLegacy: false,
-      ),
-      type: 'String',
-    );
+    assertResolvedNodeText(findNode.binary('E(a) + b'), r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@66
+          staticType: int
+      rightParenthesis: )
+    extendedType: int
+    staticType: null
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@73
+    staticType: int
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: String Function(int)
+  staticType: String
+''');
   }
 
   test_plus_int_num() async {
@@ -573,14 +824,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'num',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: num
+''');
   }
 
   test_plus_num_context_int() async {
@@ -664,14 +922,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        findElement.method('+', of: 'A'),
-        isLegacy: false,
-      ),
-      type: 'String',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@59
+    staticType: A
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@69
+    staticType: double
+  staticElement: self::@class::A::@method::+
+  staticInvokeType: String Function(double)
+  staticType: String
+''');
   }
 
   test_plus_other_int_via_extension_explicit() async {
@@ -685,14 +950,32 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('E(a) + b'),
-      element: elementMatcher(
-        findElement.method('+', of: 'E'),
-        isLegacy: false,
-      ),
-      type: 'String',
-    );
+    assertResolvedNodeText(findNode.binary('E(a) + b'), r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@73
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@80
+    staticType: int
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: String Function(int)
+  staticType: String
+''');
   }
 
   test_plus_other_int_via_extension_implicit() async {
@@ -706,14 +989,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + b'),
-      element: elementMatcher(
-        findElement.method('+', of: 'E'),
-        isLegacy: false,
-      ),
-      type: 'String',
-    );
+    assertResolvedNodeText(findNode.binary('a + b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@73
+    staticType: A
+  operator: +
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@80
+    staticType: int
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: String Function(int)
+  staticType: String
+''');
   }
 
   test_receiverTypeParameter_bound_dynamic() async {
@@ -723,11 +1013,20 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + 0'),
-      element: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.binary('a + 0'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@23
+    staticType: T
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 0
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
   }
 
   test_receiverTypeParameter_bound_num() async {
@@ -737,14 +1036,20 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a + 0'),
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'num',
-    );
+    assertResolvedNodeText(findNode.binary('a + 0'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@19
+    staticType: T
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 0
+    staticType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticInvokeType: num Function(num)
+  staticType: num
+''');
   }
 
   test_slash() async {
@@ -754,14 +1059,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a / b'),
-      element: elementMatcher(
-        numElement.getMethod('/'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    assertResolvedNodeText(findNode.binary('a / b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: /
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::/
+  staticInvokeType: double Function(num)
+  staticType: double
+''');
   }
 
   test_star_int_context_int() async {
@@ -784,14 +1096,21 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a * b'),
-      element: elementMatcher(
-        numElement.getMethod('*'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    assertResolvedNodeText(findNode.binary('a * b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: *
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@16
+    staticType: double
+  staticElement: dart:core::@class::num::@method::*
+  staticInvokeType: num Function(num)
+  staticType: double
+''');
   }
 
   test_star_int_int() async {
@@ -801,13 +1120,20 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('a * b'),
-      element: elementMatcher(
-        numElement.getMethod('*'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.binary('a * b'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: *
+  rightOperand: SimpleIdentifier
+    token: b
+    staticElement: b@13
+    staticType: int
+  staticElement: dart:core::@class::num::@method::*
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index fd7aa57..c2ee4c7 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -2,9 +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/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -123,364 +121,6 @@
     );
   }
 
-  test_error_conflictingConstructorAndStaticField_field() async {
-    await assertErrorsInCode(r'''
-class C {
-  C.foo();
-  static int foo = 0;
-}
-''', [
-      error(
-          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 14, 3),
-    ]);
-  }
-
-  test_error_conflictingConstructorAndStaticField_getter() async {
-    await assertErrorsInCode(r'''
-class C {
-  C.foo();
-  static int get foo => 0;
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER, 14,
-          3),
-    ]);
-  }
-
-  test_error_conflictingConstructorAndStaticField_OK_notSameClass() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  static int foo = 0;
-}
-class B extends A {
-  B.foo();
-}
-''');
-  }
-
-  test_error_conflictingConstructorAndStaticField_OK_notStatic() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  C.foo();
-  int foo = 0;
-}
-''');
-  }
-
-  test_error_conflictingConstructorAndStaticField_setter() async {
-    await assertErrorsInCode(r'''
-class C {
-  C.foo();
-  static void set foo(_) {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER, 14,
-          3),
-    ]);
-  }
-
-  test_error_conflictingConstructorAndStaticMethod() async {
-    await assertErrorsInCode(r'''
-class C {
-  C.foo();
-  static void foo() {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD, 14,
-          3),
-    ]);
-  }
-
-  test_error_conflictingConstructorAndStaticMethod_OK_notSameClass() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  static void foo() {}
-}
-class B extends A {
-  B.foo();
-}
-''');
-  }
-
-  test_error_conflictingConstructorAndStaticMethod_OK_notStatic() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  C.foo();
-  void foo() {}
-}
-''');
-  }
-
-  test_error_conflictingFieldAndMethod_inSuper_field() async {
-    await assertErrorsInCode(r'''
-class A {
-  foo() {}
-}
-class B extends A {
-  int foo = 0;
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
-    ]);
-  }
-
-  test_error_conflictingFieldAndMethod_inSuper_getter() async {
-    await assertErrorsInCode(r'''
-class A {
-  foo() {}
-}
-class B extends A {
-  get foo => 0;
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
-    ]);
-  }
-
-  test_error_conflictingFieldAndMethod_inSuper_setter() async {
-    await assertErrorsInCode(r'''
-class A {
-  foo() {}
-}
-class B extends A {
-  set foo(_) {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
-    ]);
-  }
-
-  test_error_conflictingMethodAndField_inSuper_field() async {
-    await assertErrorsInCode(r'''
-class A {
-  int foo = 0;
-}
-class B extends A {
-  foo() {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 49, 3),
-    ]);
-  }
-
-  test_error_conflictingMethodAndField_inSuper_getter() async {
-    await assertErrorsInCode(r'''
-class A {
-  get foo => 0;
-}
-class B extends A {
-  foo() {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 50, 3),
-    ]);
-  }
-
-  test_error_conflictingMethodAndField_inSuper_setter() async {
-    await assertErrorsInCode(r'''
-class A {
-  set foo(_) {}
-}
-class B extends A {
-  foo() {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 50, 3),
-    ]);
-  }
-
-  test_error_duplicateConstructorNamed() async {
-    await assertErrorsInCode(r'''
-class C {
-  C.foo();
-  C.foo();
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, 23, 5),
-    ]);
-  }
-
-  test_error_duplicateConstructorNamed_oneIsInvalid() async {
-    await assertErrorsInCode(r'''
-class A {}
-class C {
-  A.foo();
-  C.foo();
-}
-''', [
-      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 23, 1),
-    ]);
-  }
-
-  test_error_duplicateConstructorUnnamed() async {
-    await assertErrorsInCode(r'''
-class C {
-  C();
-  C();
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 19, 1),
-    ]);
-  }
-
-  test_error_duplicateConstructorUnnamed_bothNew() async {
-    await assertErrorsInCode(r'''
-class C {
-  C.new();
-  C.new();
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 23, 5),
-    ]);
-  }
-
-  test_error_duplicateConstructorUnnamed_oneIsInvalid() async {
-    await assertErrorsInCode(r'''
-class A {}
-class C {
-  A.new();
-  C();
-}
-''', [
-      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 23, 1),
-    ]);
-  }
-
-  test_error_duplicateConstructorUnnamed_oneNew() async {
-    await assertErrorsInCode(r'''
-class C {
-  C();
-  C.new();
-}
-''', [
-      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 19, 5),
-    ]);
-  }
-
-  test_error_extendsNonClass_dynamic() async {
-    await assertErrorsInCode(r'''
-class A extends dynamic {}
-''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 16, 7),
-    ]);
-
-    var a = findElement.class_('A');
-    assertType(a.supertype, 'Object');
-  }
-
-  test_error_extendsNonClass_enum() async {
-    await assertErrorsInCode(r'''
-enum E { ONE }
-class A extends E {}
-''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 31, 1),
-    ]);
-
-    var a = findElement.class_('A');
-    assertType(a.supertype, 'Object');
-
-    var eRef = findNode.namedType('E {}');
-    assertNamedType(eRef, findElement.enum_('E'), 'E');
-  }
-
-  test_error_extendsNonClass_mixin() async {
-    await assertErrorsInCode(r'''
-mixin M {}
-class A extends M {} // ref
-''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
-    ]);
-
-    var a = findElement.class_('A');
-    assertType(a.supertype, 'Object');
-
-    var mRef = findNode.namedType('M {} // ref');
-    assertNamedType(mRef, findElement.mixin('M'), 'M');
-  }
-
-  test_error_extendsNonClass_variable() async {
-    await assertErrorsInCode(r'''
-int v = 0;
-class A extends v {}
-''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
-    ]);
-
-    var a = findElement.class_('A');
-    assertType(a.supertype, 'Object');
-  }
-
-  test_error_extendsNonClass_variable_generic() async {
-    await assertErrorsInCode(r'''
-int v = 0;
-class A extends v<int> {}
-''', [
-      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
-    ]);
-
-    var a = findElement.class_('A');
-    assertType(a.supertype, 'Object');
-  }
-
-  test_error_memberWithClassName_field() async {
-    await assertErrorsInCode(r'''
-class C {
-  int C = 42;
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 16, 1),
-    ]);
-  }
-
-  test_error_memberWithClassName_getter() async {
-    await assertErrorsInCode(r'''
-class C {
-  int get C => 0;
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 20, 1),
-    ]);
-  }
-
-  test_error_memberWithClassName_getter_static() async {
-    await assertErrorsInCode(r'''
-class C {
-  static int get C => 0;
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 27, 1),
-    ]);
-
-    var method = findNode.methodDeclaration('C =>');
-    expect(method.isGetter, isTrue);
-    expect(method.isStatic, isTrue);
-    assertElement(method, findElement.getter('C'));
-  }
-
-  test_error_memberWithClassName_setter() async {
-    await assertErrorsInCode(r'''
-class C {
-  set C(_) {}
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 16, 1),
-    ]);
-  }
-
-  test_error_memberWithClassName_setter_static() async {
-    await assertErrorsInCode(r'''
-class C {
-  static set C(_) {}
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 23, 1),
-    ]);
-
-    var method = findNode.methodDeclaration('C(_)');
-    expect(method.isSetter, isTrue);
-    expect(method.isStatic, isTrue);
-  }
-
   test_issue32815() async {
     await assertErrorsInCode(r'''
 class A<T> extends B<T> {}
@@ -503,230 +143,4 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 150, 1),
     ]);
   }
-
-  test_recursiveInterfaceInheritance_extends() async {
-    await assertErrorsInCode(r'''
-class A extends B {}
-class B extends A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_extends_implements() async {
-    await assertErrorsInCode(r'''
-class A extends B {}
-class B implements A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_implements() async {
-    await assertErrorsInCode(r'''
-class A implements B {}
-class B implements A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 30, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_mixin() async {
-    await assertErrorsInCode(r'''
-class M1 = Object with M2;
-class M2 = Object with M1;
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 2),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 33, 2),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_mixin_superclass() async {
-    // Make sure we don't get CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS in
-    // addition--that would just be confusing.
-    await assertErrorsInCode('''
-class C = D with M;
-class D = C with M;
-class M {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 26, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_tail() async {
-    await assertErrorsInCode(r'''
-abstract class A implements A {}
-class B implements A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS, 15,
-          1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_tail2() async {
-    await assertErrorsInCode(r'''
-abstract class A implements B {}
-abstract class B implements A {}
-class C implements A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 15, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 48, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritance_tail3() async {
-    await assertErrorsInCode(r'''
-abstract class A implements B {}
-abstract class B implements C {}
-abstract class C implements A {}
-class D implements A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 15, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 48, 1),
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 81, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritanceExtends() async {
-    await assertErrorsInCode(r'''
-class A extends A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS, 6, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritanceExtends_abstract() async {
-    await assertErrorsInCode(r'''
-class C extends C {
-  var bar = 0;
-  m();
-}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS, 6, 1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritanceImplements() async {
-    await assertErrorsInCode('''
-class A implements A {}
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS, 6,
-          1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritanceImplements_typeAlias() async {
-    await assertErrorsInCode(r'''
-class A {}
-class M {}
-class B = A with M implements B;
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS, 28,
-          1),
-    ]);
-  }
-
-  test_recursiveInterfaceInheritanceWith() async {
-    await assertErrorsInCode(r'''
-class M = Object with M;
-''', [
-      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH, 6, 1),
-    ]);
-  }
-
-  test_undefinedSuperGetter() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  get g {
-    return super.g;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 58, 1),
-    ]);
-  }
-
-  test_undefinedSuperMethod() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  m() {
-    return super.m();
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_METHOD, 56, 1),
-    ]);
-  }
-
-  test_undefinedSuperOperator_binaryExpression() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  operator +(value) {
-    return super + value;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 1),
-    ]);
-  }
-
-  test_undefinedSuperOperator_indexBoth() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  operator [](index) {
-    return super[index]++;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 7),
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 7),
-    ]);
-  }
-
-  test_undefinedSuperOperator_indexGetter() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  operator [](index) {
-    return super[index + 1];
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 11),
-    ]);
-  }
-
-  test_undefinedSuperOperator_indexSetter() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  operator []=(index, value) {
-    super[index] = 0;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 71, 7),
-    ]);
-  }
-
-  test_undefinedSuperSetter() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  f() {
-    super.m = 0;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_SETTER, 49, 1),
-    ]);
-  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 2e49834..286ec22 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -16,12 +16,187 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConstantResolutionTest);
-    defineReflectiveTests(ConstantResolutionWithNullSafetyTest);
+    defineReflectiveTests(ConstantResolutionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class ConstantResolutionTest extends PubPackageResolutionTest
+class ConstantResolutionTest extends PubPackageResolutionTest {
+  test_constructor_nullSafe_fromLegacy_super() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  const A(List<Object> a);
+}
+
+class B extends A {
+  const B(List<Object> a) : super(a);
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.8
+import 'a.dart';
+
+const a = <dynamic>[];
+const b = B(a);
+''');
+
+    var b = findElement.topVar('b');
+    assertType(b.computeConstantValue()!.type, 'B*');
+  }
+
+  test_constructor_nullSafe_fromLegacy_this() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  const A(List<Object> a) : this(a);
+  const A.second(List<Object> a);
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.8
+import 'a.dart';
+
+const a = <dynamic>[];
+const b = A(a);
+''');
+
+    var b = findElement.topVar('b');
+    assertType(b.computeConstantValue()!.type, 'A*');
+  }
+
+  test_context_eliminateTypeVariables() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  const A({List<T> a = const []});
+}
+''');
+    assertType(findNode.listLiteral('const []'), 'List<Never>');
+  }
+
+  test_context_eliminateTypeVariables_functionType() async {
+    await assertNoErrorsInCode(r'''
+class A<T, U> {
+  const A({List<T Function(U)> a = const []});
+}
+''');
+    assertType(
+      findNode.listLiteral('const []'),
+      'List<Never Function(Object?)>',
+    );
+  }
+
+  test_field_optIn_fromOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  static const foo = 42;
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.5
+import 'a.dart';
+
+const bar = A.foo;
+''');
+
+    var bar = findElement.topVar('bar');
+    _assertIntValue(bar, 42);
+  }
+
+  test_fromEnvironment_optOut_fromOptIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.5
+
+const cBool = const bool.fromEnvironment('foo', defaultValue: false);
+const cInt = const int.fromEnvironment('foo', defaultValue: 1);
+const cString = const String.fromEnvironment('foo', defaultValue: 'bar');
+''');
+
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+const vBool = cBool;
+const vInt = cInt;
+const vString = cString;
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
+
+    DartObjectImpl evaluate(String name) {
+      return findElement.topVar(name).computeConstantValue() as DartObjectImpl;
+    }
+
+    expect(evaluate('vBool').toBoolValue(), false);
+    expect(evaluate('vInt').toIntValue(), 1);
+    expect(evaluate('vString').toStringValue(), 'bar');
+  }
+
+  test_topLevelVariable_optIn_fromOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+const foo = 42;
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.5
+import 'a.dart';
+
+const bar = foo;
+''');
+
+    var bar = findElement.topVar('bar');
+    assertType(bar.type, 'int*');
+    _assertIntValue(bar, 42);
+  }
+
+  test_topLevelVariable_optOut2() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+const a = 42;
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: r'''
+import 'a.dart';
+
+const b = a;
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.5
+import 'b.dart';
+
+const c = b;
+''');
+
+    var c = findElement.topVar('c');
+    assertType(c.type, 'int*');
+    _assertIntValue(c, 42);
+  }
+
+  test_topLevelVariable_optOut3() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+const a = int.fromEnvironment('a', defaultValue: 42);
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart';
+
+const b = a;
+''');
+
+    var c = findElement.topVar('b');
+    assertType(c.type, 'int*');
+    _assertIntValue(c, 42);
+  }
+
+  void _assertIntValue(VariableElement element, int value) {
+    expect(element.computeConstantValue()!.toIntValue(), value);
+  }
+}
+
+@reflectiveTest
+class ConstantResolutionWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_constantValue_defaultParameter_noDefaultValue() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
@@ -251,178 +426,3 @@
 ''');
   }
 }
-
-@reflectiveTest
-class ConstantResolutionWithNullSafetyTest extends PubPackageResolutionTest {
-  test_constructor_nullSafe_fromLegacy_super() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  const A(List<Object> a);
-}
-
-class B extends A {
-  const B(List<Object> a) : super(a);
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.8
-import 'a.dart';
-
-const a = <dynamic>[];
-const b = B(a);
-''');
-
-    var b = findElement.topVar('b');
-    assertType(b.computeConstantValue()!.type, 'B*');
-  }
-
-  test_constructor_nullSafe_fromLegacy_this() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  const A(List<Object> a) : this(a);
-  const A.second(List<Object> a);
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.8
-import 'a.dart';
-
-const a = <dynamic>[];
-const b = A(a);
-''');
-
-    var b = findElement.topVar('b');
-    assertType(b.computeConstantValue()!.type, 'A*');
-  }
-
-  test_context_eliminateTypeVariables() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {
-  const A({List<T> a = const []});
-}
-''');
-    assertType(findNode.listLiteral('const []'), 'List<Never>');
-  }
-
-  test_context_eliminateTypeVariables_functionType() async {
-    await assertNoErrorsInCode(r'''
-class A<T, U> {
-  const A({List<T Function(U)> a = const []});
-}
-''');
-    assertType(
-      findNode.listLiteral('const []'),
-      'List<Never Function(Object?)>',
-    );
-  }
-
-  test_field_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  static const foo = 42;
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.5
-import 'a.dart';
-
-const bar = A.foo;
-''');
-
-    var bar = findElement.topVar('bar');
-    _assertIntValue(bar, 42);
-  }
-
-  test_fromEnvironment_optOut_fromOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.5
-
-const cBool = const bool.fromEnvironment('foo', defaultValue: false);
-const cInt = const int.fromEnvironment('foo', defaultValue: 1);
-const cString = const String.fromEnvironment('foo', defaultValue: 'bar');
-''');
-
-    await assertErrorsInCode(r'''
-import 'a.dart';
-
-const vBool = cBool;
-const vInt = cInt;
-const vString = cString;
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
-    ]);
-
-    DartObjectImpl evaluate(String name) {
-      return findElement.topVar(name).computeConstantValue() as DartObjectImpl;
-    }
-
-    expect(evaluate('vBool').toBoolValue(), false);
-    expect(evaluate('vInt').toIntValue(), 1);
-    expect(evaluate('vString').toStringValue(), 'bar');
-  }
-
-  test_topLevelVariable_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-const foo = 42;
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.5
-import 'a.dart';
-
-const bar = foo;
-''');
-
-    var bar = findElement.topVar('bar');
-    assertType(bar.type, 'int*');
-    _assertIntValue(bar, 42);
-  }
-
-  test_topLevelVariable_optOut2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-const a = 42;
-''');
-
-    newFile('$testPackageLibPath/b.dart', content: r'''
-import 'a.dart';
-
-const b = a;
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.5
-import 'b.dart';
-
-const c = b;
-''');
-
-    var c = findElement.topVar('c');
-    assertType(c.type, 'int*');
-    _assertIntValue(c, 42);
-  }
-
-  test_topLevelVariable_optOut3() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-const a = int.fromEnvironment('a', defaultValue: 42);
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart';
-
-const b = a;
-''');
-
-    var c = findElement.topVar('b');
-    assertType(c.type, 'int*');
-    _assertIntValue(c, 42);
-  }
-
-  void _assertIntValue(VariableElement element, int value) {
-    expect(element.computeConstantValue()!.toIntValue(), value);
-  }
-}
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 0b2478b..a48aaa1 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -30,18 +30,47 @@
 const a = TA<int, String>.foo;
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA<int, String>.foo;'),
-      elementMatcher(classElement.getNamedConstructor('foo')!,
-          substitution: {'T': 'String', 'U': 'int'}),
-      classElement,
-      'A<String, int> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA<int, String>.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        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: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::foo
+        substitution: {T: String, U: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::foo
+      substitution: {T: String, U: int}
+  staticType: A<String, int> Function()
+''');
   }
 
-  test_alias_generic_const_differingNumberOfTypeParamters() async {
+  test_alias_generic_const_differingNumberOfTypeParameters() async {
     await assertNoErrorsInCode('''
 class A<T, U> {
   A.foo() {}
@@ -51,15 +80,38 @@
 const x = TA<int>.foo;
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA<int>.foo;'),
-      elementMatcher(classElement.getNamedConstructor('foo')!,
-          substitution: {'T': 'int', 'U': 'String'}),
-      classElement,
-      'A<int, String> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA<int>.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::foo
+        substitution: {T: int, U: String}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::foo
+      substitution: {T: int, U: String}
+  staticType: A<int, String> Function()
+''');
   }
 
   test_alias_generic_named() async {
@@ -74,15 +126,44 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA<int, String>.foo;'),
-      elementMatcher(classElement.getNamedConstructor('foo')!,
-          substitution: {'T': 'String', 'U': 'int'}),
-      classElement,
-      'A<String, int> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA<int, String>.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        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: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::foo
+        substitution: {T: String, U: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::foo
+      substitution: {T: String, U: int}
+  staticType: A<String, int> Function()
+''');
   }
 
   test_alias_generic_uninstantiated_const() async {
@@ -95,14 +176,24 @@
 const a = TA.foo;
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA.foo;'),
-      classElement.getNamedConstructor('foo'),
-      classElement,
-      'A<U, T> Function<T, U>()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A<U, T> Function<T, U>()
+''');
   }
 
   test_alias_generic_unnamed() async {
@@ -117,15 +208,38 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_alias_genericWithBound_unnamed() async {
@@ -140,15 +254,38 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_alias_genericWithBound_unnamed_badBound() async {
@@ -165,15 +302,38 @@
       error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 75, 6),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('TA<String>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'String'}),
-      classElement,
-      'A<String> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA<String>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: String
+              staticElement: dart:core::@class::String
+              staticType: null
+            type: String
+        rightBracket: >
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: String}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: String}
+  staticType: A<String> Function()
+''');
   }
 
   test_class_generic_const() async {
@@ -185,14 +345,38 @@
 const a = A<int>.new;
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_generic_named() async {
@@ -206,14 +390,38 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.foo;'),
-      elementMatcher(classElement.getNamedConstructor('foo')!,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::foo
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::foo
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_generic_named_cascade() async {
@@ -269,14 +477,38 @@
           messageContains: ["The constructor 'A.foo'"]),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.foo<int>;'),
-      elementMatcher(classElement.getNamedConstructor('foo')!,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.foo<int>;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::foo
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::foo
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_generic_new_typeArgs() async {
@@ -294,14 +526,38 @@
           messageContains: ["The constructor 'A.new'"]),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.new<int>;'),
-      elementMatcher(classElement.unnamedConstructor!,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.new<int>;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_generic_nonConstructor() async {
@@ -318,13 +574,34 @@
           51, 8),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.i;'),
-      null,
-      classElement,
-      'dynamic',
-    );
+    var node = findNode.constructorReference('A<int>.i;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: i
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_class_generic_nothing_hasNamedConstructor() async {
@@ -340,13 +617,34 @@
       error(ParserErrorCode.MISSING_IDENTIFIER, 49, 1),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.;'),
-      null,
-      classElement,
-      'dynamic',
-    );
+    var node = findNode.constructorReference('A<int>.;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: <empty> <synthetic>
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_class_generic_unnamed() async {
@@ -360,14 +658,38 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_generic_unnamed_partOfPropertyAccess() async {
@@ -381,14 +703,38 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.new'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.new');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_genericWithBound_unnamed() async {
@@ -402,14 +748,38 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_class_genericWithBound_unnamed_badBound() async {
@@ -425,14 +795,38 @@
       error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 52, 6),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<String>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'String'}),
-      classElement,
-      'A<String> Function()',
-    );
+    var node = findNode.constructorReference('A<String>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: String
+              staticElement: dart:core::@class::String
+              staticType: null
+            type: String
+        rightBracket: >
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: String}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: String}
+  staticType: A<String> Function()
+''');
   }
 
   test_prefixedAlias_generic_unnamed() async {
@@ -449,18 +843,46 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.TA<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-      expectedTypeNameElement:
-          findElement.importFind('package:test/a.dart').typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('a.TA<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: TA
+          staticElement: package:test/a.dart::@typeAlias::TA
+          staticType: null
+        staticElement: package:test/a.dart::@typeAlias::TA
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      type: null
+    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}
+  staticType: A<int> Function()
+''');
   }
 
   test_prefixedClass_generic_named() async {
@@ -476,16 +898,46 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.A<int>.foo;'),
-      elementMatcher(classElement.getNamedConstructor('foo')!,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-    );
+    var node = findNode.constructorReference('a.A<int>.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          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: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: package:test/a.dart::@class::A::@constructor::foo
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: package:test/a.dart::@class::A::@constructor::foo
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_prefixedClass_generic_targetOfFunctionCall() async {
@@ -504,16 +956,46 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.A<int>.new'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-    );
+    var node = findNode.constructorReference('a.A<int>.new');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          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: null
+    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}
+  staticType: A<int> Function()
+''');
   }
 
   test_prefixedClass_generic_unnamed() async {
@@ -529,16 +1011,46 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.A<int>.new;'),
-      elementMatcher(classElement.unnamedConstructor,
-          substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-    );
+    var node = findNode.constructorReference('a.A<int>.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          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: null
+    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}
+  staticType: A<int> Function()
+''');
   }
 }
 
@@ -557,13 +1069,24 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_abstractClass_generative() async {
@@ -583,13 +1106,24 @@
           5),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_abstractClass_redirecting() async {
@@ -611,13 +1145,24 @@
           5),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_class_generic_inferFromContext_badTypeArgument() async {
@@ -634,14 +1179,26 @@
           contextMessages: [message('/home/test/lib/test.dart', 39, 9)]),
     ]);
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.getNamedConstructor('foo')!;
-    assertConstructorReference(
-      findNode.constructorReference('A.foo;'),
-      constructorElement,
-      classElement,
-      'A<Never> Function()',
-    );
+    var node = findNode.constructorReference('A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+      tearOffTypeArgumentTypes
+        Never
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A<Never> Function()
+''');
   }
 
   test_class_generic_named_inferTypeFromContext() async {
@@ -655,14 +1212,26 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.getNamedConstructor('foo')!;
-    assertConstructorReference(
-      findNode.constructorReference('A.foo;'),
-      constructorElement,
-      classElement,
-      'A<int> Function()',
-    );
+    var node = findNode.constructorReference('A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+      tearOffTypeArgumentTypes
+        int
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A<int> Function()
+''');
   }
 
   test_class_generic_named_uninstantiated() async {
@@ -676,14 +1245,24 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.getNamedConstructor('foo')!;
-    assertConstructorReference(
-      findNode.constructorReference('A.foo;'),
-      constructorElement,
-      classElement,
-      'A<T> Function<T>()',
-    );
+    var node = findNode.constructorReference('A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A<T> Function<T>()
+''');
   }
 
   test_class_generic_named_uninstantiated_bound() async {
@@ -697,14 +1276,24 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.getNamedConstructor('foo')!;
-    assertConstructorReference(
-      findNode.constructorReference('A.foo;'),
-      constructorElement,
-      classElement,
-      'A<T> Function<T extends num>()',
-    );
+    var node = findNode.constructorReference('A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A<T> Function<T extends num>()
+''');
   }
 
   test_class_nonGeneric_const() async {
@@ -716,13 +1305,24 @@
 const a1 = A.new;
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_class_nonGeneric_named() async {
@@ -736,13 +1336,24 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.foo;'),
-      classElement.getNamedConstructor('foo')!,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A Function()
+''');
   }
 
   test_class_nonGeneric_unnamed() async {
@@ -756,13 +1367,24 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_prefixedAlias_nonGeneric_named() async {
@@ -779,17 +1401,32 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.TA.foo;'),
-      classElement.getNamedConstructor('foo'),
-      classElement,
-      'A Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-      expectedTypeNameElement:
-          findElement.importFind('package:test/a.dart').typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('a.TA.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: TA
+          staticElement: package:test/a.dart::@typeAlias::TA
+          staticType: null
+        staticElement: package:test/a.dart::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::A::@constructor::foo
+      staticType: null
+    staticElement: package:test/a.dart::@class::A::@constructor::foo
+  staticType: A Function()
+''');
   }
 
   test_prefixedAlias_nonGeneric_unnamed() async {
@@ -806,17 +1443,32 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.TA.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-      expectedTypeNameElement:
-          findElement.importFind('package:test/a.dart').typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('a.TA.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: TA
+          staticElement: package:test/a.dart::@typeAlias::TA
+          staticType: null
+        staticElement: package:test/a.dart::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: package:test/a.dart::@class::A::@constructor::•
+      staticType: null
+    staticElement: package:test/a.dart::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_prefixedClass_nonGeneric_named() async {
@@ -832,15 +1484,32 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.A.foo;'),
-      classElement.getNamedConstructor('foo'),
-      classElement,
-      'A Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-    );
+    var node = findNode.constructorReference('a.A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          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: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::A::@constructor::foo
+      staticType: null
+    staticElement: package:test/a.dart::@class::A::@constructor::foo
+  staticType: A Function()
+''');
   }
 
   test_prefixedClass_nonGeneric_unnamed() async {
@@ -856,15 +1525,32 @@
 }
 ''');
 
-    var classElement =
-        findElement.importFind('package:test/a.dart').class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('a.A.new;'),
-      classElement.unnamedConstructor,
-      classElement,
-      'A Function()',
-      expectedPrefix: findElement.import('package:test/a.dart').prefix,
-    );
+    var node = findNode.constructorReference('a.A.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: a
+          staticElement: self::@prefix::a
+          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: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: package:test/a.dart::@class::A::@constructor::•
+      staticType: null
+    staticElement: package:test/a.dart::@class::A::@constructor::•
+  staticType: A Function()
+''');
   }
 
   test_typeAlias_generic_const() async {
@@ -877,15 +1563,24 @@
 const a = TA.new;
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.unnamedConstructor!;
-    assertConstructorReference(
-      findNode.constructorReference('TA.new;'),
-      constructorElement,
-      classElement,
-      'A<T> Function<T>()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::A::@constructor::•
+      staticType: null
+    staticElement: self::@class::A::@constructor::•
+  staticType: A<T> Function<T>()
+''');
   }
 
   test_typeAlias_generic_named_uninstantiated() async {
@@ -900,15 +1595,24 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.getNamedConstructor('foo')!;
-    assertConstructorReference(
-      findNode.constructorReference('TA.foo;'),
-      constructorElement,
-      findElement.class_('A'),
-      'A<String, U> Function<U>()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A<String, U> Function<U>()
+''');
   }
 
   test_typeAlias_instantiated_const() async {
@@ -921,15 +1625,28 @@
 const a = TA.new;
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.unnamedConstructor!;
-    assertConstructorReference(
-      findNode.constructorReference('TA.new;'),
-      elementMatcher(constructorElement, substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA.new;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::•
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::•
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 
   test_typeAlias_instantiated_named() async {
@@ -944,15 +1661,28 @@
 }
 ''');
 
-    var classElement = findElement.class_('A');
-    var constructorElement = classElement.getNamedConstructor('foo')!;
-    assertConstructorReference(
-      findNode.constructorReference('TA.foo;'),
-      elementMatcher(constructorElement, substitution: {'T': 'int'}),
-      classElement,
-      'A<int> Function()',
-      expectedTypeNameElement: findElement.typeAlias('TA'),
-    );
+    var node = findNode.constructorReference('TA.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: TA
+        staticElement: self::@typeAlias::TA
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::foo
+        substitution: {T: int}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::foo
+      substitution: {T: int}
+  staticType: A<int> Function()
+''');
   }
 }
 
@@ -972,13 +1702,34 @@
       error(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 52, 5),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A<int>.i;'),
-      null,
-      classElement,
-      'dynamic',
-    );
+    var node = findNode.constructorReference('A<int>.i;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  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: null
+    period: .
+    name: SimpleIdentifier
+      token: i
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_constructorTearoff() async {
@@ -994,12 +1745,23 @@
       error(HintCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS, 39, 5),
     ]);
 
-    var classElement = findElement.class_('A');
-    assertConstructorReference(
-      findNode.constructorReference('A.foo;'),
-      classElement.getNamedConstructor('foo')!,
-      classElement,
-      'A Function()',
-    );
+    var node = findNode.constructorReference('A.foo;');
+    assertResolvedNodeText(node, r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: A
+        staticElement: self::@class::A
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@constructor::foo
+      staticType: null
+    staticElement: self::@class::A::@constructor::foo
+  staticType: A Function()
+''');
   }
 }
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 3f5a183..7d4c7a1 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -212,6 +212,10 @@
     );
   }
 
+  /// Override this method to update [analysisOptions] for every context root,
+  /// the default or already updated with `analysis_options.yaml` file.
+  void updateAnalysisOptions(AnalysisOptionsImpl analysisOptions) {}
+
   /// Call this method if the test needs to use the empty byte store, without
   /// any information cached.
   void useEmptyByteStore() {
@@ -241,6 +245,7 @@
       resourceProvider: resourceProvider,
       retainDataForTesting: retainDataForTesting,
       sdkPath: sdkRoot.path,
+      updateAnalysisOptions: updateAnalysisOptions,
     );
 
     verifyCreatedCollection();
@@ -263,6 +268,9 @@
         EnableString.super_parameters,
       ];
 
+  @override
+  bool get isNullSafetyEnabled => true;
+
   /// The path that is not in [workspaceRootPath], contains external packages.
   String get packagesRootPath => '/packages';
 
@@ -276,9 +284,6 @@
 
   String get testPackageRootPath => '$workspaceRootPath/test';
 
-  @override
-  bool get typeToStringWithNullability => true;
-
   String get workspaceRootPath => '/home';
 
   @override
@@ -440,12 +445,17 @@
   String? get testPackageLanguageVersion => '2.14';
 }
 
+mixin WithoutEnhancedEnumsMixin on PubPackageResolutionTest {
+  @override
+  String? get testPackageLanguageVersion => '2.16';
+}
+
 mixin WithoutNullSafetyMixin on PubPackageResolutionTest {
   @override
-  String? get testPackageLanguageVersion => '2.9';
+  bool get isNullSafetyEnabled => false;
 
   @override
-  bool get typeToStringWithNullability => false;
+  String? get testPackageLanguageVersion => '2.9';
 }
 
 mixin WithStrictCastsMixin on PubPackageResolutionTest {
diff --git a/pkg/analyzer/test/src/dart/resolution/dart_object_printer.dart b/pkg/analyzer/test/src/dart/resolution/dart_object_printer.dart
index ccb6a78..8124576 100644
--- a/pkg/analyzer/test/src/dart/resolution/dart_object_printer.dart
+++ b/pkg/analyzer/test/src/dart/resolution/dart_object_printer.dart
@@ -4,6 +4,7 @@
 
 import 'dart:collection';
 
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/constant/value.dart';
 
 /// Prints [DartObjectImpl] as a tree, with values and fields.
@@ -15,7 +16,14 @@
   void write(DartObjectImpl? object, String indent) {
     if (object != null) {
       var type = object.type;
-      if (type.isDartCoreDouble) {
+      if (object.isUnknown) {
+        sink.write(
+          type.getDisplayString(
+            withNullability: true,
+          ),
+        );
+        sink.writeln(' <unknown>');
+      } else if (type.isDartCoreDouble) {
         sink.write('double ');
         sink.writeln(object.toDoubleValue());
       } else if (type.isDartCoreInt) {
@@ -24,6 +32,17 @@
       } else if (type.isDartCoreString) {
         sink.write('String ');
         sink.writeln(object.toStringValue());
+      } else if (type.isDartCoreList) {
+        var newIndent = '$indent  ';
+        sink.writeln('List');
+        sink.write(newIndent);
+        sink.writeln(
+            'elementType: ${(type as InterfaceType).typeArguments[0]}');
+        var elements = object.toListValue()!;
+        for (int i = 0; i < elements.length; i++) {
+          sink.write(newIndent);
+          write(elements[i] as DartObjectImpl, newIndent);
+        }
       } else if (object.isUserDefinedObject) {
         var newIndent = '$indent  ';
         var typeStr = type.getDisplayString(withNullability: true);
diff --git a/pkg/analyzer/test/src/dart/resolution/enum_test.dart b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
index 43cf553..81e03b3 100644
--- a/pkg/analyzer/test/src/dart/resolution/enum_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/enum_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.
 
+import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -185,12 +187,14 @@
   }
 
   test_constructor_unresolved_named() async {
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 enum E {
   v.named(42);
   const E(int a);
 }
-''');
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED, 13, 5),
+    ]);
 
     assertEnumConstant(
       findNode.enumConstantDeclaration('v'),
@@ -202,12 +206,14 @@
   }
 
   test_constructor_unresolved_unnamed() async {
-    await assertNoErrorsInCode(r'''
+    await assertErrorsInCode(r'''
 enum E {
   v(42);
   const E.named(int a);
 }
-''');
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED, 11, 1),
+    ]);
 
     assertEnumConstant(
       findNode.enumConstantDeclaration('v'),
@@ -232,6 +238,26 @@
     );
   }
 
+  test_getter() async {
+    await assertNoErrorsInCode(r'''
+enum E<T> {
+  v;
+  T get foo => throw 0;
+}
+''');
+
+    assertElement(
+      findNode.methodDeclaration('get foo'),
+      findElement.getter('foo', of: 'E'),
+    );
+
+    assertNamedType(
+      findNode.namedType('T get'),
+      findElement.typeParameter('T'),
+      'T',
+    );
+  }
+
   test_inference_listLiteral() async {
     await assertNoErrorsInCode(r'''
 enum E1 {a, b}
@@ -244,6 +270,21 @@
     assertType(v.type, 'List<Enum>');
   }
 
+  test_interfaces() async {
+    await assertNoErrorsInCode(r'''
+class I {}
+enum E implements I { // ref
+  v;
+}
+''');
+
+    assertNamedType(
+      findNode.namedType('I { // ref'),
+      findElement.class_('I'),
+      'I',
+    );
+  }
+
   test_isEnumConstant() async {
     await assertNoErrorsInCode(r'''
 enum E {
@@ -254,7 +295,6 @@
     expect(findElement.field('a').isEnumConstant, isTrue);
     expect(findElement.field('b').isEnumConstant, isTrue);
 
-    expect(findElement.field('index').isEnumConstant, isFalse);
     expect(findElement.field('values').isEnumConstant, isFalse);
   }
 
@@ -303,6 +343,68 @@
     );
   }
 
+  test_mixins() async {
+    await assertNoErrorsInCode(r'''
+mixin M {}
+enum E with M { // ref
+  v;
+}
+''');
+
+    assertNamedType(
+      findNode.namedType('M { // ref'),
+      findElement.mixin('M'),
+      'M',
+    );
+  }
+
+  test_mixins_inference() async {
+    await assertNoErrorsInCode(r'''
+mixin M1<T> {}
+mixin M2<T> on M1<T> {}
+enum E with M1<int>, M2 {
+  v;
+}
+''');
+
+    assertNamedType(
+      findNode.namedType('M1<int>'),
+      findElement.mixin('M1'),
+      'M1<int>',
+    );
+
+    assertNamedType(
+      findNode.namedType('M2 {'),
+      findElement.mixin('M2'),
+      'M2<int>',
+    );
+  }
+
+  test_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E<T> {
+  v;
+  set foo(T a) {}
+}
+''');
+
+    assertElement(
+      findNode.methodDeclaration('set foo'),
+      findElement.setter('foo'),
+    );
+
+    assertElement(
+      findNode.simpleFormalParameter('a) {}'),
+      findElement.setter('foo').parameter('a'),
+    );
+
+    assertNamedType(
+      findNode.namedType('T a'),
+      findElement.typeParameter('T'),
+      'T',
+    );
+  }
+
   test_value_underscore() async {
     await assertNoErrorsInCode(r'''
 enum E { _ }
@@ -314,7 +416,7 @@
 
     assertPropertyAccess2(
       findNode.propertyAccess('index'),
-      element: findElement.getter('index', of: 'E'),
+      element: typeProvider.enumElement!.getGetter('index')!,
       type: 'int',
     );
   }
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 3a737e2..cfc5917 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
@@ -2,11 +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/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.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';
@@ -32,12 +28,31 @@
 }
 ''');
 
-    assertIndexExpression(
-      findNode.index('[0]'),
-      readElement: findElement.method('[]', of: 'E'),
-      writeElement: null,
-      type: 'int?',
-    );
+    assertResolvedNodeText(findNode.index('[0]'), r'''
+IndexExpression
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@71
+          staticType: int?
+      rightParenthesis: )
+    extendedType: int
+    staticType: null
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: self::@extension::E::@method::[]
+  staticType: int?
+''');
   }
 
   test_indexExpression_write_nullAware() async {
@@ -114,24 +129,6 @@
 }
 
 mixin ExtensionOverrideTestCases on PubPackageResolutionTest {
-  late ExtensionElement extension;
-  late ExtensionOverride extensionOverride;
-
-  void findDeclarationAndOverride(
-      {required String declarationName,
-      required String overrideSearch,
-      String? declarationUri}) {
-    if (declarationUri == null) {
-      ExtensionDeclaration declaration =
-          findNode.extensionDeclaration('extension $declarationName');
-      extension = declaration.declaredElement as ExtensionElement;
-    } else {
-      extension =
-          findElement.importFind(declarationUri).extension_(declarationName);
-    }
-    extensionOverride = findNode.extensionOverride(overrideSearch);
-  }
-
   test_call_noPrefix_noTypeArguments() async {
     await assertNoErrorsInCode('''
 class A {}
@@ -142,9 +139,65 @@
   E(a)('');
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
-    validateCall();
+
+    var node = findNode.functionExpressionInvocation('E(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@68
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: self::@extension::E::@method::call
+  staticInvokeType: int Function(String)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@68
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: self::@extension::E::@method::call
+  staticInvokeType: int* Function(String*)*
+  staticType: int*
+''');
+    }
   }
 
   test_call_noPrefix_typeArguments() async {
@@ -158,9 +211,93 @@
   E<String>(a)('');
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E<T>', overrideSearch: 'E<S');
-    validateOverride(typeArguments: [stringType]);
-    validateCall();
+
+    var node = findNode.functionExpressionInvocation('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: String
+            staticElement: dart:core::@class::String
+            staticType: null
+          type: String
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@66
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      String
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: MethodMember
+    base: self::@extension::E::@method::call
+    substitution: {T: String}
+  staticInvokeType: int Function(String)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: String
+            staticElement: dart:core::@class::String
+            staticType: null
+          type: String*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@66
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      String*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: MethodMember
+    base: self::@extension::E::@method::call
+    substitution: {T: String*}
+  staticInvokeType: int* Function(String*)*
+  staticType: int*
+''');
+    }
   }
 
   test_call_prefix_noTypeArguments() async {
@@ -176,12 +313,81 @@
   p.E(a)('');
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E(a)');
-    validateOverride();
-    validateCall();
+
+    var node = findNode.functionExpressionInvocation('E(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: package:test/lib.dart::@extension::E::@method::call
+  staticInvokeType: int Function(String)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: package:test/lib.dart::@extension::E::@method::call
+  staticInvokeType: int* Function(String*)*
+  staticType: int*
+''');
+    }
   }
 
   test_call_prefix_typeArguments() async {
@@ -198,12 +404,109 @@
   p.E<String>(a)('');
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E<S');
-    validateOverride(typeArguments: [stringType]);
-    validateCall();
+
+    var node = findNode.functionExpressionInvocation('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: String
+            staticElement: dart:core::@class::String
+            staticType: null
+          type: String
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      String
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: MethodMember
+    base: package:test/lib.dart::@extension::E::@method::call
+    substitution: {T: String}
+  staticInvokeType: int Function(String)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: String
+            staticElement: dart:core::@class::String
+            staticType: null
+          type: String*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      String*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: ''
+    rightParenthesis: )
+  staticElement: MethodMember
+    base: package:test/lib.dart::@extension::E::@method::call
+    substitution: {T: String*}
+  staticInvokeType: int* Function(String*)*
+  staticType: int*
+''');
+    }
   }
 
   test_getter_noPrefix_noTypeArguments() async {
@@ -216,14 +519,59 @@
   E(a).g;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
 
-    assertPropertyAccess2(
-      findNode.propertyAccess('.g'),
-      element: findElement.getter('g'),
-      type: 'int',
-    );
+    var node = findNode.propertyAccess('E(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@59
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: self::@extension::E::@getter::g
+    staticType: int
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@59
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: self::@extension::E::@getter::g
+    staticType: int*
+  staticType: int*
+''');
+    }
   }
 
   test_getter_noPrefix_noTypeArguments_functionExpressionInvocation() async {
@@ -238,17 +586,81 @@
   E(a).g(0);
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
 
-    var invocation = findNode.functionExpressionInvocation('g(0)');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var function = invocation.function as PropertyAccess;
-    assertElement(function.propertyName, findElement.getter('g', of: 'E'));
-    assertType(function.propertyName, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('E(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@87
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: g
+      staticElement: self::@extension::E::@getter::g
+      staticType: double Function(int)
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@87
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: g
+      staticElement: self::@extension::E::@getter::g
+      staticType: double* Function(int*)*
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_getter_noPrefix_typeArguments() async {
@@ -261,17 +673,87 @@
   E<int>(a).g;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
 
-    assertPropertyAccess2(
-      findNode.propertyAccess('.g'),
-      element: elementMatcher(
-        findElement.getter('g'),
-        substitution: {'T': 'int'},
-      ),
-      type: 'int',
-    );
+    var node = findNode.propertyAccess('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@62
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      int
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: PropertyAccessorMember
+      base: self::@extension::E::@getter::g
+      substitution: {T: int}
+    staticType: int
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@62
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      int*
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: PropertyAccessorMember
+      base: self::@extension::E::@getter::g
+      substitution: {T: int*}
+    staticType: int*
+  staticType: int*
+''');
+    }
   }
 
   test_getter_prefix_noTypeArguments() async {
@@ -287,18 +769,75 @@
   p.E(a).g;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E(a)');
-    validateOverride();
 
-    var importFind = findElement.importFind('package:test/lib.dart');
-    assertPropertyAccess2(
-      findNode.propertyAccess('.g'),
-      element: importFind.getter('g'),
-      type: 'int',
-    );
+    var node = findNode.propertyAccess('E(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: package:test/lib.dart::@extension::E::@getter::g
+    staticType: int
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: package:test/lib.dart::@extension::E::@getter::g
+    staticType: int*
+  staticType: int*
+''');
+    }
   }
 
   test_getter_prefix_typeArguments() async {
@@ -314,21 +853,103 @@
   p.E<int>(a).g;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
 
-    var importFind = findElement.importFind('package:test/lib.dart');
-    assertPropertyAccess2(
-      findNode.propertyAccess('.g'),
-      element: elementMatcher(
-        importFind.getter('g'),
-        substitution: {'T': 'int'},
-      ),
-      type: 'int',
-    );
+    var node = findNode.propertyAccess('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      int
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: PropertyAccessorMember
+      base: package:test/lib.dart::@extension::E::@getter::g
+      substitution: {T: int}
+    staticType: int
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      int*
+  operator: .
+  propertyName: SimpleIdentifier
+    token: g
+    staticElement: PropertyAccessorMember
+      base: package:test/lib.dart::@extension::E::@getter::g
+      substitution: {T: int*}
+    staticType: int*
+  staticType: int*
+''');
+    }
   }
 
   test_method_noPrefix_noTypeArguments() async {
@@ -341,9 +962,67 @@
   E(a).m();
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
-    validateInvocation();
+
+    var node = findNode.methodInvocation('E(a)');
+    if (isNullSafetyEnabled) {
+      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@55
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: self::@extension::E::@method::m
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      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@55
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: self::@extension::E::@method::m
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_method_noPrefix_typeArguments() async {
@@ -356,9 +1035,95 @@
   E<int>(a).m();
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
-    validateInvocation();
+
+    var node = findNode.methodInvocation('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@58
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      int
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: MethodMember
+      base: self::@extension::E::@method::m
+      substitution: {T: int}
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@58
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: MethodMember
+      base: self::@extension::E::@method::m
+      substitution: {T: int*}
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_method_prefix_noTypeArguments() async {
@@ -374,12 +1139,83 @@
   p.E(a).m();
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E(a)');
-    validateOverride();
-    validateInvocation();
+
+    var node = findNode.methodInvocation('E(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: package:test/lib.dart::@extension::E::@method::m
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: package:test/lib.dart::@extension::E::@method::m
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_method_prefix_typeArguments() async {
@@ -395,12 +1231,111 @@
   p.E<int>(a).m();
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
-    validateInvocation();
+
+    var node = findNode.methodInvocation('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      int
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: MethodMember
+      base: package:test/lib.dart::@extension::E::@method::m
+      substitution: {T: int}
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: m
+    staticElement: MethodMember
+      base: package:test/lib.dart::@extension::E::@method::m
+      substitution: {T: int*}
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_operator_noPrefix_noTypeArguments() async {
@@ -413,9 +1348,61 @@
   E(a) + 1;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
-    validateBinaryExpression();
+
+    var node = findNode.binary('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@74
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@74
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int*
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_operator_noPrefix_typeArguments() async {
@@ -428,9 +1415,85 @@
   E<int>(a) + 1;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
-    validateBinaryExpression();
+
+    var node = findNode.binary('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@77
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      int
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@77
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      int*
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int*
+  staticElement: self::@extension::E::@method::+
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_operator_onTearOff() async {
@@ -446,8 +1509,73 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER, 45, 1),
     ]);
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(0)');
-    validateOverride();
+
+    var node = findNode.postfix('++;');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          IntegerLiteral
+            literal: 0
+            staticType: int
+        rightParenthesis: )
+      extendedType: int
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: v
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@extension::E::@method::v
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          IntegerLiteral
+            literal: 0
+            staticType: int*
+        rightParenthesis: )
+      extendedType: int*
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: v
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@extension::E::@method::v
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    }
   }
 
   test_operator_prefix_noTypeArguments() async {
@@ -463,12 +1591,77 @@
   p.E(a) + 1;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E(a)');
-    validateOverride();
-    validateBinaryExpression();
+
+    var node = findNode.binary('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int
+  staticElement: package:test/lib.dart::@extension::E::@method::+
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int*
+  staticElement: package:test/lib.dart::@extension::E::@method::+
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_operator_prefix_typeArguments() async {
@@ -484,12 +1677,101 @@
   p.E<int>(a) + 1;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
-    validateBinaryExpression();
+
+    var node = findNode.binary('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+    typeArgumentTypes
+      int
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int
+  staticElement: package:test/lib.dart::@extension::E::@method::+
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ExtensionOverride
+    extensionName: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: p
+        staticElement: self::@prefix::p
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: E
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      staticElement: package:test/lib.dart::@extension::E
+      staticType: null
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+            staticElement: dart:core::@class::int
+            staticType: null
+          type: int*
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: a
+          staticElement: a@35
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+    typeArgumentTypes
+      int*
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 1
+    staticType: int*
+  staticElement: package:test/lib.dart::@extension::E::@method::+
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_setter_noPrefix_noTypeArguments() async {
@@ -502,18 +1784,81 @@
   E(a).s = 0;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
 
-    assertAssignment(
-      findNode.assignment('s ='),
-      readElement: null,
-      readType: null,
-      writeElement: findElement.setter('s', of: 'E'),
-      writeType: 'int',
-      operatorElement: null,
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@59
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: self::@extension::E::@setter::s
+  writeType: int
+  staticElement: <null>
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@59
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: <null>
+  readType: null
+  writeElement: self::@extension::E::@setter::s
+  writeType: int*
+  staticElement: <null>
+  staticType: int*
+''');
+    }
   }
 
   test_setter_noPrefix_typeArguments() async {
@@ -526,21 +1871,109 @@
   E<int>(a).s = 0;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
 
-    assertAssignment(
-      findNode.assignment('s ='),
-      readElement: null,
-      readType: null,
-      writeElement: elementMatcher(
-        findElement.setter('s', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      writeType: 'int',
-      operatorElement: null,
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@62
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+      typeArgumentTypes
+        int
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: PropertyAccessorMember
+    base: self::@extension::E::@setter::s
+    substitution: {T: int}
+  writeType: int
+  staticElement: <null>
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int*
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@62
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+      typeArgumentTypes
+        int*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: <null>
+  readType: null
+  writeElement: PropertyAccessorMember
+    base: self::@extension::E::@setter::s
+    substitution: {T: int*}
+  writeType: int*
+  staticElement: <null>
+  staticType: int*
+''');
+    }
   }
 
   test_setter_prefix_noTypeArguments() async {
@@ -556,22 +1989,97 @@
   p.E(a).s = 0;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E(a)');
-    validateOverride();
 
-    var importFind = findElement.importFind('package:test/lib.dart');
-    assertAssignment(
-      findNode.assignment('s ='),
-      readElement: null,
-      readType: null,
-      writeElement: importFind.setter('s', of: 'E'),
-      writeType: 'int',
-      operatorElement: null,
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: package:test/lib.dart::@extension::E::@setter::s
+  writeType: int
+  staticElement: <null>
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: <null>
+  readType: null
+  writeElement: package:test/lib.dart::@extension::E::@setter::s
+  writeType: int*
+  staticElement: <null>
+  staticType: int*
+''');
+    }
   }
 
   test_setter_prefix_typeArguments() async {
@@ -587,25 +2095,125 @@
   p.E<int>(a).s = 0;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
 
-    var importFind = findElement.importFind('package:test/lib.dart');
-    assertAssignment(
-      findNode.assignment('s ='),
-      readElement: null,
-      readType: null,
-      writeElement: elementMatcher(
-        importFind.setter('s', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      writeType: 'int',
-      operatorElement: null,
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+      typeArgumentTypes
+        int
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: PropertyAccessorMember
+    base: package:test/lib.dart::@extension::E::@setter::s
+    substitution: {T: int}
+  writeType: int
+  staticElement: <null>
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int*
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+      typeArgumentTypes
+        int*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: <null>
+  readType: null
+  writeElement: PropertyAccessorMember
+    base: package:test/lib.dart::@extension::E::@setter::s
+    substitution: {T: int*}
+  writeType: int*
+  staticElement: <null>
+  staticType: int*
+''');
+    }
   }
 
   test_setterAndGetter_noPrefix_noTypeArguments() async {
@@ -619,21 +2227,83 @@
   E(a).s += 0;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E ', overrideSearch: 'E(a)');
-    validateOverride();
 
-    assertAssignment(
-      findNode.assignment('s +='),
-      readElement: findElement.getter('s', of: 'E'),
-      readType: 'int',
-      writeElement: findElement.setter('s', of: 'E'),
-      writeType: 'int',
-      operatorElement: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@77
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: self::@extension::E::@getter::s
+  readType: int
+  writeElement: self::@extension::E::@setter::s
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@77
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: self::@extension::E::@getter::s
+  readType: int*
+  writeElement: self::@extension::E::@setter::s
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_setterAndGetter_noPrefix_typeArguments() async {
@@ -647,27 +2317,115 @@
   E<int>(a).s += 0;
 }
 ''');
-    findDeclarationAndOverride(declarationName: 'E', overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
 
-    assertAssignment(
-      findNode.assignment('s +='),
-      readElement: elementMatcher(
-        findElement.getter('s', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      readType: 'int',
-      writeElement: elementMatcher(
-        findElement.setter('s', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      writeType: 'int',
-      operatorElement: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@80
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+      typeArgumentTypes
+        int
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: PropertyAccessorMember
+    base: self::@extension::E::@getter::s
+    substitution: {T: int}
+  readType: int
+  writeElement: PropertyAccessorMember
+    base: self::@extension::E::@setter::s
+    substitution: {T: int}
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int*
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@80
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+      typeArgumentTypes
+        int*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: PropertyAccessorMember
+    base: self::@extension::E::@getter::s
+    substitution: {T: int*}
+  readType: int*
+  writeElement: PropertyAccessorMember
+    base: self::@extension::E::@setter::s
+    substitution: {T: int*}
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_setterAndGetter_prefix_noTypeArguments() async {
@@ -684,25 +2442,99 @@
   p.E(a).s += 0;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E(a)');
-    validateOverride();
 
-    var importFind = findElement.importFind('package:test/lib.dart');
-    assertAssignment(
-      findNode.assignment('s +='),
-      readElement: importFind.getter('s', of: 'E'),
-      readType: 'int',
-      writeElement: importFind.setter('s', of: 'E'),
-      writeType: 'int',
-      operatorElement: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: package:test/lib.dart::@extension::E::@getter::s
+  readType: int
+  writeElement: package:test/lib.dart::@extension::E::@setter::s
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: package:test/lib.dart::@extension::E::@getter::s
+  readType: int*
+  writeElement: package:test/lib.dart::@extension::E::@setter::s
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_setterAndGetter_prefix_typeArguments() async {
@@ -719,31 +2551,131 @@
   p.E<int>(a).s += 0;
 }
 ''');
-    findDeclarationAndOverride(
-        declarationName: 'E',
-        declarationUri: 'package:test/lib.dart',
-        overrideSearch: 'E<int>');
-    validateOverride(typeArguments: [intType]);
 
-    var importFind = findElement.importFind('package:test/lib.dart');
-    assertAssignment(
-      findNode.assignment('s +='),
-      readElement: elementMatcher(
-        importFind.getter('s', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      readType: 'int',
-      writeElement: elementMatcher(
-        importFind.setter('s', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      writeType: 'int',
-      operatorElement: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.assignment('(a)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+      typeArgumentTypes
+        int
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int
+  readElement: PropertyAccessorMember
+    base: package:test/lib.dart::@extension::E::@getter::s
+    substitution: {T: int}
+  readType: int
+  writeElement: PropertyAccessorMember
+    base: package:test/lib.dart::@extension::E::@setter::s
+    substitution: {T: int}
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PropertyAccess
+    target: ExtensionOverride
+      extensionName: PrefixedIdentifier
+        prefix: SimpleIdentifier
+          token: p
+          staticElement: self::@prefix::p
+          staticType: null
+        period: .
+        identifier: SimpleIdentifier
+          token: E
+          staticElement: package:test/lib.dart::@extension::E
+          staticType: null
+        staticElement: package:test/lib.dart::@extension::E
+        staticType: null
+      typeArguments: TypeArgumentList
+        leftBracket: <
+        arguments
+          NamedType
+            name: SimpleIdentifier
+              token: int
+              staticElement: dart:core::@class::int
+              staticType: null
+            type: int*
+        rightBracket: >
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@35
+            staticType: A*
+        rightParenthesis: )
+      extendedType: A*
+      staticType: null
+      typeArgumentTypes
+        int*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: s
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: +=
+  rightHandSide: IntegerLiteral
+    literal: 0
+    staticType: int*
+  readElement: PropertyAccessorMember
+    base: package:test/lib.dart::@extension::E::@getter::s
+    substitution: {T: int*}
+  readType: int*
+  writeElement: PropertyAccessorMember
+    base: package:test/lib.dart::@extension::E::@setter::s
+    substitution: {T: int*}
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_tearOff() async {
@@ -756,59 +2688,59 @@
 
 f(C c) => E(c).a;
 ''');
-    var identifier = findNode.simple('a;');
-    assertElement(identifier, findElement.method('a'));
-    assertType(identifier, 'void Function(int)');
-  }
 
-  void validateBinaryExpression() {
-    BinaryExpression binary = extensionOverride.parent as BinaryExpression;
-    Element? resolvedElement = binary.staticElement;
-    expect(resolvedElement, extension.getMethod('+'));
-  }
-
-  void validateCall() {
-    FunctionExpressionInvocation invocation =
-        extensionOverride.parent as FunctionExpressionInvocation;
-    Element? resolvedElement = invocation.staticElement;
-    expect(resolvedElement, extension.getMethod('call'));
-
-    NodeList<Expression> arguments = invocation.argumentList.arguments;
-    for (int i = 0; i < arguments.length; i++) {
-      expect(arguments[i].staticParameterElement, isNotNull);
-    }
-  }
-
-  void validateInvocation() {
-    MethodInvocation invocation = extensionOverride.parent as MethodInvocation;
-
-    assertMethodInvocation(
-      invocation,
-      extension.getMethod('m'),
-      'void Function()',
-    );
-
-    NodeList<Expression> arguments = invocation.argumentList.arguments;
-    for (int i = 0; i < arguments.length; i++) {
-      expect(arguments[i].staticParameterElement, isNotNull);
-    }
-  }
-
-  void validateOverride({List<DartType>? typeArguments}) {
-    expect(extensionOverride.extensionName.staticElement, extension);
-
-    expect(extensionOverride.staticType, isNull);
-    expect(extensionOverride.extensionName.staticType, isNull);
-
-    if (typeArguments == null) {
-      expect(extensionOverride.typeArguments, isNull);
+    var node = findNode.propertyAccess('E(c)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: c
+          staticElement: c@57
+          staticType: C
+      rightParenthesis: )
+    extendedType: C
+    staticType: null
+  operator: .
+  propertyName: SimpleIdentifier
+    token: a
+    staticElement: self::@extension::E::@method::a
+    staticType: void Function(int)
+  staticType: void Function(int)
+''');
     } else {
-      expect(
-          extensionOverride.typeArguments!.arguments
-              .map((annotation) => annotation.type),
-          unorderedEquals(typeArguments));
+      assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: E
+      staticElement: self::@extension::E
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: c
+          staticElement: c@57
+          staticType: C*
+      rightParenthesis: )
+    extendedType: C*
+    staticType: null
+  operator: .
+  propertyName: SimpleIdentifier
+    token: a
+    staticElement: self::@extension::E::@method::a
+    staticType: void Function(int*)*
+  staticType: void Function(int*)*
+''');
     }
-    expect(extensionOverride.argumentList.arguments, hasLength(1));
   }
 }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.dart b/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.dart
index b0070ea..11916bd 100644
--- a/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/field_formal_parameter_test.dart
@@ -16,7 +16,7 @@
 class FieldFormalParameterResolutionTest extends PubPackageResolutionTest {
   /// There was a crash.
   /// https://github.com/dart-lang/sdk/issues/46968
-  test_hasTypeParameters() async {
+  test_class_hasTypeParameters() async {
     await assertNoErrorsInCode(r'''
 class A {
   T Function<T>(T) f;
@@ -24,4 +24,19 @@
 }
 ''');
   }
+
+  test_enum() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(0);
+  final int f;
+  const E(this.f);
+}
+''');
+
+    assertFieldFormalParameter(
+      findNode.fieldFormalParameter('this.f'),
+      element: findElement.fieldFormalParameter('f'),
+    );
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
index 031eb7e..0ed4d13 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
@@ -10,49 +10,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FunctionExpressionInvocationTest);
-    defineReflectiveTests(FunctionExpressionInvocationWithNullSafetyTest);
+    defineReflectiveTests(FunctionExpressionInvocationWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class FunctionExpressionInvocationTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  test_dynamic_withoutTypeArguments() async {
-    await assertNoErrorsInCode(r'''
-main() {
-  (main as dynamic)(0);
-}
-''');
-
-    assertFunctionExpressionInvocation(
-      findNode.functionExpressionInvocation('(0)'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
-  }
-
-  test_dynamic_withTypeArguments() async {
-    await assertNoErrorsInCode(r'''
-main() {
-  (main as dynamic)<bool, int>(0);
-}
-''');
-
-    assertFunctionExpressionInvocation(
-      findNode.functionExpressionInvocation('(0)'),
-      element: null,
-      typeArgumentTypes: ['bool', 'int'],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
-  }
-}
-
-@reflectiveTest
-class FunctionExpressionInvocationWithNullSafetyTest
-    extends PubPackageResolutionTest {
+class FunctionExpressionInvocationTest extends PubPackageResolutionTest {
   test_call_infer_fromArguments() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -230,3 +193,39 @@
     );
   }
 }
+
+@reflectiveTest
+class FunctionExpressionInvocationWithoutNullSafetyTest
+    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+  test_dynamic_withoutTypeArguments() async {
+    await assertNoErrorsInCode(r'''
+main() {
+  (main as dynamic)(0);
+}
+''');
+
+    assertFunctionExpressionInvocation(
+      findNode.functionExpressionInvocation('(0)'),
+      element: null,
+      typeArgumentTypes: [],
+      invokeType: 'dynamic',
+      type: 'dynamic',
+    );
+  }
+
+  test_dynamic_withTypeArguments() async {
+    await assertNoErrorsInCode(r'''
+main() {
+  (main as dynamic)<bool, int>(0);
+}
+''');
+
+    assertFunctionExpressionInvocation(
+      findNode.functionExpressionInvocation('(0)'),
+      element: null,
+      typeArgumentTypes: ['bool', 'int'],
+      invokeType: 'dynamic',
+      type: 'dynamic',
+    );
+  }
+}
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 a2dab45..10b5c99 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -28,10 +28,71 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('as void Function<T>(T);'),
-        null,
-        'void Function(int)');
+    assertResolvedNodeText(
+        findNode.functionReference('as void Function<T>(T);'), r'''
+FunctionReference
+  function: AsExpression
+    expression: ParenthesizedExpression
+      leftParenthesis: (
+      expression: AsExpression
+        expression: SimpleIdentifier
+          token: f
+          staticElement: f@43
+          staticType: void Function<T>(T)
+        asOperator: as
+        type: NamedType
+          name: SimpleIdentifier
+            token: dynamic
+            staticElement: dynamic@-1
+            staticType: null
+          type: dynamic
+        staticType: dynamic
+      rightParenthesis: )
+      staticType: dynamic
+    asOperator: as
+    type: GenericFunctionType
+      returnType: NamedType
+        name: SimpleIdentifier
+          token: void
+          staticElement: <null>
+          staticType: null
+        type: void
+      functionKeyword: Function
+      typeParameters: TypeParameterList
+        leftBracket: <
+        typeParameters
+          TypeParameter
+            name: SimpleIdentifier
+              token: T
+              staticElement: T@89
+              staticType: null
+            declaredElement: T@89
+        rightBracket: >
+      parameters: FormalParameterList
+        leftParenthesis: (
+        parameter: SimpleFormalParameter
+          type: NamedType
+            name: SimpleIdentifier
+              token: T
+              staticElement: T@89
+              staticType: null
+            type: T
+          declaredElement: @-1
+          declaredElementType: T
+        rightParenthesis: )
+      declaredElement: GenericFunctionTypeElement
+        parameters
+          <empty>
+            kind: required positional
+            type: T
+        returnType: void
+        type: void Function<T>(T)
+      type: void Function<T>(T)
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_assignmentExpression() async {
@@ -42,8 +103,28 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('g = f;'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('g = f;'), r'''
+FunctionReference
+  function: AssignmentExpression
+    leftHandSide: SimpleIdentifier
+      token: g
+      staticElement: <null>
+      staticType: null
+    operator: =
+    rightHandSide: SimpleIdentifier
+      token: f
+      staticElement: f@71
+      staticType: void Function<T>(T)
+    readElement: <null>
+    readType: null
+    writeElement: self::@setter::g
+    writeType: void Function<T>(T)
+    staticElement: <null>
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_assignmentExpression_compound() async {
@@ -59,8 +140,27 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('f += 1'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('f += 1'), r'''
+FunctionReference
+  function: AssignmentExpression
+    leftHandSide: SimpleIdentifier
+      token: f
+      staticElement: f@144
+      staticType: null
+    operator: +=
+    rightHandSide: IntegerLiteral
+      literal: 1
+      staticType: int
+    readElement: f@144
+    readType: void Function<T>(T)
+    writeElement: f@144
+    writeType: void Function<T>(T)
+    staticElement: self::@extension::0::@method::+
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_awaitExpression() async {
@@ -70,8 +170,19 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('await f'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('await f'), r'''
+FunctionReference
+  function: AwaitExpression
+    awaitKeyword: await
+    expression: SimpleIdentifier
+      token: f
+      staticElement: f@59
+      staticType: Future<void Function<T>(T)>
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_binaryExpression() async {
@@ -87,8 +198,24 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('c + 1'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('c + 1'), r'''
+FunctionReference
+  function: BinaryExpression
+    leftOperand: SimpleIdentifier
+      token: c
+      staticElement: c@108
+      staticType: C
+    operator: +
+    rightOperand: IntegerLiteral
+      literal: 1
+      staticType: int
+    staticElement: self::@class::C::@method::+
+    staticInvokeType: void Function<T>(T) Function(int)
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_cascadeExpression() async {
@@ -98,8 +225,16 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('f..toString()'), null,
-        'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('f..toString()'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: f
+    staticElement: f@43
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_constructorReference() async {
@@ -114,11 +249,25 @@
 
     // TODO(srawlins): Leave the constructor reference uninstantiated, then
     // perform generic function instantiation as a wrapping node.
-    assertConstructorReference(
-        findNode.constructorReference('C.new'),
-        findElement.unnamedConstructor('C'),
-        findElement.class_('C'),
-        'C<int> Function(int)');
+    assertResolvedNodeText(findNode.constructorReference('C.new'), r'''
+ConstructorReference
+  constructorName: ConstructorName
+    type: NamedType
+      name: SimpleIdentifier
+        token: C
+        staticElement: self::@class::C
+        staticType: null
+      type: null
+    period: .
+    name: SimpleIdentifier
+      token: new
+      staticElement: self::@class::C::@constructor::•
+      staticType: null
+      tearOffTypeArgumentTypes
+        int
+    staticElement: self::@class::C::@constructor::•
+  staticType: C<int> Function(int)
+''');
   }
 
   test_functionExpression() async {
@@ -128,8 +277,45 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('<T>(T a) {};'), null, 'Null Function(int)');
+    assertResolvedNodeText(findNode.functionReference('<T>(T a) {};'), r'''
+FunctionReference
+  function: FunctionExpression
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: SimpleIdentifier
+            token: T
+            staticElement: T@37
+            staticType: null
+          declaredElement: T@37
+      rightBracket: >
+    parameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: SimpleIdentifier
+            token: T
+            staticElement: T@37
+            staticType: null
+          type: T
+        identifier: SimpleIdentifier
+          token: a
+          staticElement: a@42
+          staticType: null
+        declaredElement: a@42
+        declaredElementType: T
+      rightParenthesis: )
+    body: BlockFunctionBody
+      block: Block
+        leftBracket: {
+        rightBracket: }
+    declaredElement: @36
+    staticType: Null Function<T>(T)
+  staticType: Null Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_functionExpressionInvocation() async {
@@ -139,8 +325,27 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('(f)()'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('(f)()'), r'''
+FunctionReference
+  function: FunctionExpressionInvocation
+    function: ParenthesizedExpression
+      leftParenthesis: (
+      expression: SimpleIdentifier
+        token: f
+        staticElement: f@54
+        staticType: void Function<T>(T) Function()
+      rightParenthesis: )
+      staticType: void Function<T>(T) Function()
+    argumentList: ArgumentList
+      leftParenthesis: (
+      rightParenthesis: )
+    staticElement: <null>
+    staticInvokeType: void Function<T>(T) Function()
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_functionReference() async {
@@ -152,8 +357,16 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('f;'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('f;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: f
+    staticElement: f@61
+    staticType: void Function<U>(U)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_implicitCallReference() async {
@@ -178,8 +391,26 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('f[0];'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('f[0];'), r'''
+FunctionReference
+  function: IndexExpression
+    target: SimpleIdentifier
+      token: f
+      staticElement: f@49
+      staticType: List<void Function<T>(T)>
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: MethodMember
+      base: dart:core::@class::List::@method::[]
+      substitution: {E: void Function<T>(T)}
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_methodInvocation() async {
@@ -194,8 +425,27 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('c.m();'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('c.m();'), r'''
+FunctionReference
+  function: MethodInvocation
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@100
+      staticType: C
+    operator: .
+    methodName: SimpleIdentifier
+      token: m
+      staticElement: self::@class::C::@method::m
+      staticType: void Function<T>(T) Function()
+    argumentList: ArgumentList
+      leftParenthesis: (
+      rightParenthesis: )
+    staticInvokeType: void Function<T>(T) Function()
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_postfixExpression_compound() async {
@@ -211,8 +461,24 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('f++'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('f++'), r'''
+FunctionReference
+  function: PostfixExpression
+    operand: SimpleIdentifier
+      token: f
+      staticElement: f@144
+      staticType: null
+    operator: ++
+    readElement: f@144
+    readType: void Function<T>(T)
+    writeElement: f@144
+    writeType: void Function<T>(T)
+    staticElement: self::@extension::0::@method::+
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_prefixedIdentifier() async {
@@ -226,8 +492,24 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('c.f;'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('c.f;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: c
+      staticElement: c@68
+      staticType: C
+    period: .
+    identifier: SimpleIdentifier
+      token: f
+      staticElement: self::@class::C::@getter::f
+      staticType: void Function<T>(T)
+    staticElement: self::@class::C::@getter::f
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_prefixExpression_compound() async {
@@ -243,8 +525,24 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('++f'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('++f'), r'''
+FunctionReference
+  function: PrefixExpression
+    operator: ++
+    operand: SimpleIdentifier
+      token: f
+      staticElement: f@144
+      staticType: null
+    readElement: f@144
+    readType: void Function<T>(T)
+    writeElement: f@144
+    writeType: void Function<T>(T)
+    staticElement: self::@extension::0::@method::+
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_propertyAccess() async {
@@ -258,8 +556,27 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('(c).f;'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('(c).f;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: ParenthesizedExpression
+      leftParenthesis: (
+      expression: SimpleIdentifier
+        token: c
+        staticElement: c@68
+        staticType: C
+      rightParenthesis: )
+      staticType: C
+    operator: .
+    propertyName: SimpleIdentifier
+      token: f
+      staticElement: self::@class::C::@getter::f
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_simpleIdentifier() async {
@@ -269,8 +586,16 @@
 }
 ''');
 
-    assertFunctionReference(
-        findNode.functionReference('f;'), null, 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('f;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: f
+    staticElement: f@43
+    staticType: void Function<T>(T)
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 }
 
@@ -285,8 +610,41 @@
 var x = (A.foo)<int>;
 ''');
 
-    assertFunctionReference(findNode.functionReference('(A.foo)<int>;'),
-        findElement.constructor('foo'), 'A<int> Function()');
+    assertResolvedNodeText(findNode.functionReference('(A.foo)<int>;'), r'''
+FunctionReference
+  function: ParenthesizedExpression
+    leftParenthesis: (
+    expression: ConstructorReference
+      constructorName: ConstructorName
+        type: NamedType
+          name: SimpleIdentifier
+            token: A
+            staticElement: self::@class::A
+            staticType: null
+          type: null
+        period: .
+        name: SimpleIdentifier
+          token: foo
+          staticElement: self::@class::A::@constructor::foo
+          staticType: null
+        staticElement: self::@class::A::@constructor::foo
+      staticType: A<T> Function<T>()
+    rightParenthesis: )
+    staticType: A<T> Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: A<int> Function()
+  typeArgumentTypes
+    int
+''');
   }
 
   test_constructorFunction_unnamed() async {
@@ -298,8 +656,41 @@
 var x = (A.new)<int>;
 ''');
 
-    assertFunctionReference(findNode.functionReference('(A.new)<int>;'),
-        findElement.unnamedConstructor('A'), 'A<int> Function()');
+    assertResolvedNodeText(findNode.functionReference('(A.new)<int>;'), r'''
+FunctionReference
+  function: ParenthesizedExpression
+    leftParenthesis: (
+    expression: ConstructorReference
+      constructorName: ConstructorName
+        type: NamedType
+          name: SimpleIdentifier
+            token: A
+            staticElement: self::@class::A
+            staticType: null
+          type: null
+        period: .
+        name: SimpleIdentifier
+          token: new
+          staticElement: self::@class::A::@constructor::•
+          staticType: null
+        staticElement: self::@class::A::@constructor::•
+      staticType: A<T> Function<T>()
+    rightParenthesis: )
+    staticType: A<T> Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: A<int> Function()
+  typeArgumentTypes
+    int
+''');
   }
 
   test_constructorReference() async {
@@ -315,8 +706,35 @@
           messageContains: ["'A.foo'"]),
     ]);
 
-    assertFunctionReference(findNode.functionReference('A.foo<int>;'),
-        findElement.constructor('foo'), 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('A.foo<int>;'), r'''
+FunctionReference
+  function: ConstructorReference
+    constructorName: ConstructorName
+      type: NamedType
+        name: SimpleIdentifier
+          token: A
+          staticElement: self::@class::A
+          staticType: null
+        type: null
+      period: .
+      name: SimpleIdentifier
+        token: foo
+        staticElement: self::@class::A::@constructor::foo
+        staticType: null
+      staticElement: self::@class::A::@constructor::foo
+    staticType: A<T> Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_constructorReference_prefixed() async {
@@ -328,14 +746,44 @@
           5,
           messageContains: ["'a.Future.delayed'"]),
     ]);
-    assertFunctionReference(
-        findNode.functionReference('a.Future.delayed<int>;'),
-        findElement
-            .import('dart:async')
-            .importedLibrary!
-            .getType('Future')!
-            .getNamedConstructor('delayed'),
-        'dynamic');
+    assertResolvedNodeText(
+        findNode.functionReference('a.Future.delayed<int>;'), r'''
+FunctionReference
+  function: ConstructorReference
+    constructorName: ConstructorName
+      type: NamedType
+        name: PrefixedIdentifier
+          prefix: SimpleIdentifier
+            token: a
+            staticElement: self::@prefix::a
+            staticType: null
+          period: .
+          identifier: SimpleIdentifier
+            token: Future
+            staticElement: dart:async::@class::Future
+            staticType: null
+          staticElement: dart:async::@class::Future
+          staticType: null
+        type: null
+      period: .
+      name: SimpleIdentifier
+        token: delayed
+        staticElement: dart:async::@class::Future::@constructor::delayed
+        staticType: null
+      staticElement: dart:async::@class::Future::@constructor::delayed
+    staticType: Future<T> Function<T>(Duration, [FutureOr<T> Function()?])
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_dynamicTyped() async {
@@ -350,8 +798,24 @@
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 31, 1),
     ]);
 
-    assertFunctionReference(findNode.functionReference('i<int>;'),
-        findElement.topGet('i'), 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('i<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: i
+    staticElement: self::@getter::i
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_dynamicTyped_targetOfMethodCall() async {
@@ -366,8 +830,24 @@
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 31, 1),
     ]);
 
-    assertFunctionReference(findNode.functionReference('i<int>.foo();'),
-        findElement.topGet('i'), 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('i<int>.foo();'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: i
+    staticElement: self::@getter::i
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_explicitReceiver_dynamicTyped() async {
@@ -382,10 +862,38 @@
           29, 23),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('f().instanceMethod<int>;'),
-        null,
-        'dynamic');
+    assertResolvedNodeText(
+        findNode.functionReference('f().instanceMethod<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: MethodInvocation
+      methodName: SimpleIdentifier
+        token: f
+        staticElement: self::@function::f
+        staticType: dynamic Function()
+      argumentList: ArgumentList
+        leftParenthesis: (
+        rightParenthesis: )
+      staticInvokeType: dynamic Function()
+      staticType: dynamic
+    operator: .
+    propertyName: SimpleIdentifier
+      token: instanceMethod
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_explicitReceiver_unknown() async {
@@ -397,8 +905,32 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 1),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: <null>
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_explicitReceiver_unknown_multipleProperties() async {
@@ -414,8 +946,39 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 1),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: a
+        staticElement: <null>
+        staticType: dynamic
+      period: .
+      identifier: SimpleIdentifier
+        token: b
+        staticElement: <null>
+        staticType: dynamic
+      staticElement: <null>
+      staticType: dynamic
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_extension() async {
@@ -431,11 +994,24 @@
     ]);
 
     var reference = findNode.functionReference('E<int>;');
-    assertFunctionReference(
-      reference,
-      findElement.extension_('E'),
-      'dynamic',
-    );
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: E
+    staticElement: self::@extension::E
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_extension_prefixed() async {
@@ -455,11 +1031,32 @@
 
     assertImportPrefix(findNode.simple('a.E'), findElement.prefix('a'));
     var reference = findNode.functionReference('E<int>;');
-    assertFunctionReference(
-      reference,
-      findElement.importFind('package:test/a.dart').extension_('E'),
-      'dynamic',
-    );
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: self::@prefix::a
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: E
+      staticElement: package:test/a.dart::@extension::E
+      staticType: dynamic
+    staticElement: package:test/a.dart::@extension::E
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_extensionGetter_extensionOverride() async {
@@ -478,8 +1075,42 @@
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 67, 8),
     ]);
 
-    assertFunctionReference(findNode.functionReference('foo<int>;'),
-        findElement.getter('foo'), 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@60
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@extension::E::@getter::foo
+      staticType: int
+    staticType: int
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_extensionMethod() async {
@@ -496,8 +1127,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@extension::E::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_extensionMethod_explicitReceiver_this() async {
@@ -514,8 +1163,32 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@extension::E::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_extensionMethod_extensionOverride() async {
@@ -534,8 +1207,44 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@78
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@extension::E::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_extensionMethod_extensionOverride_cascade() async {
@@ -556,8 +1265,29 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    operator: ..
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@extension::E::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_extensionMethod_extensionOverride_static() async {
@@ -577,8 +1307,44 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@69
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@extension::E::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_extensionMethod_extensionOverride_unknown() async {
@@ -594,8 +1360,42 @@
       error(CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER, 51, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: ExtensionOverride
+      extensionName: SimpleIdentifier
+        token: E
+        staticElement: self::@extension::E
+        staticType: null
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          SimpleIdentifier
+            token: a
+            staticElement: a@39
+            staticType: A
+        rightParenthesis: )
+      extendedType: A
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_extensionMethod_fromClassDeclaration() async {
@@ -612,8 +1412,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@extension::E::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_extensionMethod_unknown() async {
@@ -629,8 +1447,24 @@
           messageContains: ["for the type 'double'"]),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_function_call() async {
@@ -642,8 +1476,34 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo.call<int>;'), null,
-        'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo.call<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@function::foo
+      staticType: void Function<T>(T)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_function_call_tooFewTypeArgs() async {
@@ -658,8 +1518,35 @@
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION, 52, 5),
     ]);
 
-    assertFunctionReference(findNode.functionReference('foo.call<int>;'), null,
-        'void Function(dynamic, dynamic)');
+    assertResolvedNodeText(findNode.functionReference('foo.call<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@function::foo
+      staticType: void Function<T, U>(T, U)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(dynamic, dynamic)
+  typeArgumentTypes
+    dynamic
+    dynamic
+''');
   }
 
   test_function_call_tooManyTypeArgs() async {
@@ -674,8 +1561,32 @@
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION, 46, 5),
     ]);
 
-    assertFunctionReference(findNode.functionReference('foo.call<int>;'), null,
-        'void Function(String)');
+    assertResolvedNodeText(findNode.functionReference('foo.call<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@function::foo
+      staticType: void Function(String)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(String)
+''');
   }
 
   test_function_call_typeArgNotMatchingBound() async {
@@ -687,8 +1598,34 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo.call<String>;'),
-        null, 'void Function(String)');
+    assertResolvedNodeText(findNode.functionReference('foo.call<String>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@function::foo
+      staticType: void Function<T extends num>(T)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: String
+          staticElement: dart:core::@class::String
+          staticType: null
+        type: String
+    rightBracket: >
+  staticType: void Function(String)
+  typeArgumentTypes
+    String
+''');
   }
 
   test_function_extensionOnFunction() async {
@@ -706,8 +1643,34 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo.m<int>;'),
-        findElement.method('m'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo.m<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@function::foo
+      staticType: void Function<T>(T)
+    period: .
+    identifier: SimpleIdentifier
+      token: m
+      staticElement: self::@extension::0::@method::m
+      staticType: null
+    staticElement: self::@extension::0::@method::m
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_function_extensionOnFunction_static() async {
@@ -729,8 +1692,34 @@
           1),
     ]);
 
-    assertFunctionReference(findNode.functionReference('foo.m<int>;'),
-        findElement.method('m'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo.m<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@function::foo
+      staticType: void Function<T>(T)
+    period: .
+    identifier: SimpleIdentifier
+      token: m
+      staticElement: self::@extension::0::@method::m
+      staticType: null
+    staticElement: self::@extension::0::@method::m
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_implicitCallTearoff() async {
@@ -748,6 +1737,51 @@
         findElement.method('call'), 'int Function(int)');
   }
 
+  test_implicitCallTearoff_class_staticGetter() async {
+    await assertNoErrorsInCode('''
+class C {
+  static const v = C();
+  const C();
+  T call<T>(T t) => t;
+}
+
+void f() {
+  C.v<int>;
+}
+''');
+
+    var node = findNode.implicitCallReference('C.v<int>');
+    assertResolvedNodeText(node, r'''
+ImplicitCallReference
+  expression: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: C
+      staticElement: self::@class::C
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: v
+      staticElement: self::@class::C::@getter::v
+      staticType: null
+    staticElement: self::@class::C::@getter::v
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticElement: self::@class::C::@method::call
+  staticType: int Function(int)
+  typeArgumentTypes
+    int
+''');
+  }
+
   test_implicitCallTearoff_extensionOnNullable() async {
     await assertNoErrorsInCode('''
 Object? v = null;
@@ -766,6 +1800,62 @@
         'void Function(int, String)');
   }
 
+  test_implicitCallTearoff_prefix_class_staticGetter() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class C {
+  static const v = C();
+  const C();
+  T call<T>(T t) => t;
+}
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.C.v<int>;
+}
+''');
+
+    var node = findNode.implicitCallReference('C.v<int>');
+    assertResolvedNodeText(node, r'''
+ImplicitCallReference
+  expression: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        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
+    operator: .
+    propertyName: SimpleIdentifier
+      token: v
+      staticElement: package:test/a.dart::@class::C::@getter::v
+      staticType: C
+    staticType: C
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticElement: package:test/a.dart::@class::C::@method::call
+  staticType: int Function(int)
+  typeArgumentTypes
+    int
+''');
+  }
+
   test_implicitCallTearoff_prefixed() async {
     newFile('$testPackageLibPath/a.dart', content: '''
 class C {
@@ -836,8 +1926,34 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo<int>;'),
-        findElement.getter('foo'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@51
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: null
+    staticElement: self::@class::A::@getter::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceGetter_functionTyped() async {
@@ -852,8 +1968,26 @@
 
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo<int>;'),
-        findElement.getter('foo'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceGetter_functionTyped_inherited() async {
@@ -869,8 +2003,26 @@
 
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo<int>;'),
-        findElement.getter('foo'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod() async {
@@ -885,8 +2037,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_call() async {
@@ -904,7 +2074,34 @@
     // TODO(srawlins): PropertyElementResolver does not return an element for
     // `.call`. If we want `findElement.method('foo')` here, we must change the
     // policy over there.
-    assertFunctionReference(reference, null, 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@method::foo
+      staticType: void Function<T>(T)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_call() async {
@@ -922,7 +2119,41 @@
     // TODO(srawlins): PropertyElementResolver does not return an element for
     // `.call`. If we want `findElement.method('foo')` here, we must change the
     // policy over there.
-    assertFunctionReference(reference, null, 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: c
+        staticElement: c@46
+        staticType: C
+      period: .
+      identifier: SimpleIdentifier
+        token: foo
+        staticElement: self::@class::C::@method::foo
+        staticType: void Function<T>(T)
+      staticElement: self::@class::C::@method::foo
+      staticType: void Function<T>(T)
+    operator: .
+    propertyName: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_field() async {
@@ -941,8 +2172,78 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: self::@class::B::@getter::a
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: null
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
+  }
+
+  test_instanceMethod_explicitReceiver_getter_wrongNumberOfTypeArguments() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+void f(A a) {
+  // Extra `()` to force reading the type.
+  ((a).foo<double>);
+}
+''');
+
+    var reference = findNode.functionReference('foo<double>');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: ParenthesizedExpression
+      leftParenthesis: (
+      expression: SimpleIdentifier
+        token: a
+        staticElement: a@42
+        staticType: A
+      rightParenthesis: )
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: int
+    staticType: int
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: double
+          staticElement: dart:core::@class::double
+          staticType: null
+        type: double
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_instanceMethod_explicitReceiver_otherExpression() async {
@@ -956,8 +2257,47 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('(a ?? b).foo<int>;'),
-        findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(
+        findNode.functionReference('(a ?? b).foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: ParenthesizedExpression
+      leftParenthesis: (
+      expression: BinaryExpression
+        leftOperand: SimpleIdentifier
+          token: a
+          staticElement: a@45
+          staticType: A?
+        operator: ??
+        rightOperand: SimpleIdentifier
+          token: b
+          staticElement: b@50
+          staticType: A
+        staticElement: <null>
+        staticInvokeType: null
+        staticType: A
+      rightParenthesis: )
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_receiverIsNotIdentifier_call() async {
@@ -973,7 +2313,40 @@
     // TODO(srawlins): PropertyElementResolver does not return an element for
     // `.call`. If we want `findElement.method('foo')` here, we must change the
     // policy over there.
-    assertFunctionReference(reference, null, 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: PropertyAccess
+      target: ListLiteral
+        leftBracket: [
+        rightBracket: ]
+        staticType: List<dynamic>
+      operator: .
+      propertyName: SimpleIdentifier
+        token: foo
+        staticElement: self::@extension::0::@method::foo
+        staticType: void Function<T>(T)
+      staticType: void Function<T>(T)
+    operator: .
+    propertyName: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_super() async {
@@ -989,8 +2362,32 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_super_noMethod() async {
@@ -1006,8 +2403,30 @@
       error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 30, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_instanceMethod_explicitReceiver_super_noSuper() async {
@@ -1021,8 +2440,30 @@
       error(CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT, 10, 5),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: dynamic
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_instanceMethod_explicitReceiver_targetOfFunctionCall() async {
@@ -1040,8 +2481,34 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@81
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: null
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_this() async {
@@ -1056,8 +2523,32 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_topLevelVariable() async {
@@ -1074,8 +2565,34 @@
 
     assertIdentifierTopGetRef(findNode.simple('a.'), 'a');
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: self::@getter::a
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: null
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_topLevelVariable_prefix() async {
@@ -1096,10 +2613,41 @@
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference,
-        findElement.importFind('package:test/a.dart').method('foo'),
-        'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: a
+        staticElement: package:test/a.dart::@getter::a
+        staticType: A
+      staticElement: package:test/a.dart::@getter::a
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_topLevelVariable_prefix_unknown() async {
@@ -1119,8 +2667,39 @@
 
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: a
+        staticElement: package:test/a.dart::@getter::a
+        staticType: A
+      staticElement: package:test/a.dart::@getter::a
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_instanceMethod_explicitReceiver_typeParameter() async {
@@ -1132,8 +2711,32 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 15, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: T
+      staticElement: T@4
+      staticType: Type
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_instanceMethod_explicitReceiver_variable() async {
@@ -1148,8 +2751,34 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@41
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: null
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_explicitReceiver_variable_cascade() async {
@@ -1164,8 +2793,29 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    operator: ..
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_inherited() async {
@@ -1182,8 +2832,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_targetOfFunctionCall() async {
@@ -1201,8 +2869,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_instanceMethod_unknown() async {
@@ -1217,8 +2903,24 @@
           messageContains: ["for the type 'A'"]),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_localFunction() async {
@@ -1231,8 +2933,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.localFunction('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@20
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_localVariable() async {
@@ -1243,8 +2963,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.parameter('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@31
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_localVariable_call() async {
@@ -1261,7 +2999,34 @@
     // TODO(srawlins): PropertyElementResolver does not return an element for
     // `.call`. If we want `findElement.method('foo')` here, we must change the
     // policy over there.
-    assertFunctionReference(reference, null, 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: fn
+      staticElement: fn@40
+      staticType: void Function<T>(T)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_localVariable_call_tooManyTypeArgs() async {
@@ -1281,7 +3046,32 @@
     // TODO(srawlins): PropertyElementResolver does not return an element for
     // `.call`. If we want `findElement.method('fn')` here, we must change the
     // policy over there.
-    assertFunctionReference(reference, null, 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: fn
+      staticElement: fn@55
+      staticType: void Function(int)
+    period: .
+    identifier: SimpleIdentifier
+      token: call
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: void Function(int)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+''');
   }
 
   test_localVariable_typeVariable_boundToFunction() async {
@@ -1295,7 +3085,24 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(reference, findElement.parameter('foo'), 'dynamic');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@31
+    staticType: T
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_localVariable_typeVariable_functionTyped() async {
@@ -1306,8 +3113,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.parameter('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@42
+    staticType: T
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_localVariable_typeVariable_nonFunction() async {
@@ -1321,7 +3146,24 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(reference, findElement.parameter('foo'), 'dynamic');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@14
+    staticType: T
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_neverTyped() async {
@@ -1336,8 +3178,24 @@
           CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION, 38, 1),
     ]);
 
-    assertFunctionReference(findNode.functionReference('i<int>;'),
-        findElement.topGet('i'), 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('i<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: i
+    staticElement: self::@getter::i
+    staticType: Never
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_nonGenericFunction() async {
@@ -1355,8 +3213,24 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function()');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function()
+''');
   }
 
   test_otherExpression() async {
@@ -1400,8 +3274,32 @@
           19, 5),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('a.foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('a.foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@12
+      staticType: dynamic
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_staticMethod() async {
@@ -1416,8 +3314,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_staticMethod_explicitReceiver() async {
@@ -1432,8 +3348,34 @@
 ''');
 
     assertClassRef(findNode.simple('A.'), findElement.class_('A'));
-    assertFunctionReference(findNode.functionReference('foo<int>;'),
-        findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      staticElement: self::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: null
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_staticMethod_explicitReceiver_importPrefix() async {
@@ -1454,10 +3396,41 @@
     assertClassRef(findNode.simple('A.'),
         findElement.importFind('package:test/a.dart').class_('A'));
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference,
-        findElement.importFind('package:test/a.dart').method('foo'),
-        'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: a
+        staticElement: self::@prefix::a
+        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
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_staticMethod_explicitReceiver_prefix_typeAlias() async {
@@ -1478,10 +3451,41 @@
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference,
-        findElement.importFind('package:test/a.dart').method('foo'),
-        'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: TA
+        staticElement: package:test/a.dart::@typeAlias::TA
+        staticType: Type
+      staticElement: package:test/a.dart::@typeAlias::TA
+      staticType: Type
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_staticMethod_explicitReceiver_typeAlias() async {
@@ -1498,8 +3502,34 @@
 
     assertTypeAliasRef(findNode.simple('TA.'), findElement.typeAlias('TA'));
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: TA
+      staticElement: self::@typeAlias::TA
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@method::foo
+      staticType: null
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_staticMethod_explicitReciver_prefix() async {
@@ -1519,10 +3549,41 @@
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference,
-        findElement.importFind('package:test/a.dart').method('foo'),
-        'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PropertyAccess
+    target: 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
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::A::@method::foo
+      staticType: void Function<T>(T)
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_tooFewTypeArguments() async {
@@ -1540,8 +3601,27 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(reference, findElement.method('foo'),
-        'void Function(dynamic, dynamic)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T, U>(T, U)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(dynamic, dynamic)
+  typeArgumentTypes
+    dynamic
+    dynamic
+''');
   }
 
   test_tooManyTypeArguments() async {
@@ -1559,8 +3639,32 @@
     ]);
 
     var reference = findNode.functionReference('foo<int, int>;');
-    assertFunctionReference(
-        reference, findElement.method('foo'), 'void Function(dynamic)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(dynamic)
+  typeArgumentTypes
+    dynamic
+''');
   }
 
   test_topLevelFunction() async {
@@ -1573,8 +3677,26 @@
 ''');
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.topFunction('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_topLevelFunction_importPrefix() async {
@@ -1591,11 +3713,34 @@
 
     assertImportPrefix(findNode.simple('a.f'), findElement.prefix('a'));
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-      reference,
-      findElement.importFind('package:test/a.dart').topFunction('foo'),
-      'void Function(int)',
-    );
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: self::@prefix::a
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@function::foo
+      staticType: void Function<T>(T)
+    staticElement: package:test/a.dart::@function::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_topLevelFunction_importPrefix_asTargetOfFunctionCall() async {
@@ -1615,11 +3760,34 @@
 
     assertImportPrefix(findNode.simple('a.f'), findElement.prefix('a'));
     var reference = findNode.functionReference('foo<int>');
-    assertFunctionReference(
-      reference,
-      findElement.importFind('package:test/a.dart').topFunction('foo'),
-      'void Function(int)',
-    );
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: self::@prefix::a
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@function::foo
+      staticType: void Function<T>(T)
+    staticElement: package:test/a.dart::@function::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_topLevelFunction_prefix_unknownPrefix() async {
@@ -1631,8 +3799,32 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 10, 6),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: <null>
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_topLevelFunction_targetOfCall() async {
@@ -1644,8 +3836,26 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo<int>.call;'),
-        findElement.topFunction('foo'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>.call;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
     assertSimpleIdentifier(findNode.simple('call;'),
         element: null, type: 'void Function(int)');
   }
@@ -1662,8 +3872,26 @@
 }
 ''');
 
-    assertFunctionReference(findNode.functionReference('foo<int>'),
-        findElement.topFunction('foo'), 'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_topLevelVariable_prefix() async {
@@ -1680,10 +3908,34 @@
 
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'),
-        findElement.importFind('package:test/a.dart').topGet('foo'),
-        'void Function(int)');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@getter::foo
+      staticType: void Function<T>(T)
+    staticElement: package:test/a.dart::@getter::foo
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 
   test_topLevelVariable_prefix_unknownIdentifier() async {
@@ -1702,8 +3954,39 @@
 
     assertImportPrefix(
         findNode.simple('prefix.'), findElement.prefix('prefix'));
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        staticType: null
+      period: .
+      identifier: SimpleIdentifier
+        token: a
+        staticElement: <null>
+        staticType: dynamic
+      staticElement: <null>
+      staticType: dynamic
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_typeAlias_function_unknownProperty() async {
@@ -1715,8 +3998,32 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: Cb
+      staticElement: self::@typeAlias::Cb
+      staticType: Type
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_typeAlias_typeVariable_unknownProperty() async {
@@ -1728,8 +4035,32 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 29, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: T
+      staticElement: self::@typeAlias::T
+      staticType: Type
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_unknownIdentifier() async {
@@ -1741,8 +4072,24 @@
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 15, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_unknownIdentifier_explicitReceiver() async {
@@ -1758,8 +4105,32 @@
       error(CompileTimeErrorCode.UNDEFINED_GETTER, 41, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@30
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: dynamic
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 
   test_unknownIdentifier_importPrefix() async {
@@ -1774,8 +4145,32 @@
       error(CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME, 40, 3),
     ]);
 
-    assertFunctionReference(
-        findNode.functionReference('foo<int>;'), null, 'dynamic');
+    assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: self::@prefix::a
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: dynamic
+''');
   }
 }
 
@@ -1795,7 +4190,25 @@
     ]);
 
     var reference = findNode.functionReference('foo<int>;');
-    assertFunctionReference(
-        reference, findElement.parameter('foo'), 'void Function(int)');
+    assertResolvedNodeText(reference, r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@31
+    staticType: void Function<T>(T)
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  staticType: void Function(int)
+  typeArgumentTypes
+    int
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
index 384b9be..9ad7b3b 100644
--- a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
@@ -20,12 +20,20 @@
 void f({a = b?[0]}) {}
 ''');
 
-    assertIndexExpression(
-      findNode.index('[0]'),
-      readElement: null,
-      writeElement: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.index('[0]'), r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: b
+    staticElement: <null>
+    staticType: dynamic
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_invalid_inDefaultValue_nullAware2() async {
@@ -33,12 +41,20 @@
 typedef void F({a = b?[0]});
 ''');
 
-    assertIndexExpression(
-      findNode.index('[0]'),
-      readElement: null,
-      writeElement: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.index('[0]'), r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: b
+    staticElement: <null>
+    staticType: dynamic
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_read() async {
@@ -55,12 +71,20 @@
     var indexElement = findElement.method('[]');
 
     var indexExpression = findNode.index('a[0]');
-    assertIndexExpression(
-      indexExpression,
-      readElement: indexElement,
-      writeElement: null,
-      type: 'bool',
-    );
+    assertResolvedNodeText(indexExpression, r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@61
+    staticType: A
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: self::@class::A::@method::[]
+  staticType: bool
+''');
     assertParameterElement(
       indexExpression.index,
       indexElement.parameters[0],
@@ -78,21 +102,29 @@
 }
 ''');
 
-    var indexElement = findElement.method('[]');
+    assertResolvedNodeText(findNode.index('..[0]'), r'''
+IndexExpression
+  period: ?..
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: self::@class::A::@method::[]
+  staticType: bool
+''');
 
-    assertIndexExpression(
-      findNode.index('..[0]'),
-      readElement: indexElement,
-      writeElement: null,
-      type: 'bool',
-    );
-
-    assertIndexExpression(
-      findNode.index('..[1]'),
-      readElement: indexElement,
-      writeElement: null,
-      type: 'bool',
-    );
+    assertResolvedNodeText(findNode.index('..[1]'), r'''
+IndexExpression
+  period: ..
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 1
+    staticType: int
+  rightBracket: ]
+  staticElement: self::@class::A::@method::[]
+  staticType: bool
+''');
 
     assertType(findNode.cascade('a?'), 'A?');
   }
@@ -111,15 +143,22 @@
     var indexElement = findElement.method('[]');
 
     var indexExpression = findNode.index('a[0]');
-    assertIndexExpression(
-      indexExpression,
-      readElement: elementMatcher(
-        indexElement,
-        substitution: {'T': 'double'},
-      ),
-      writeElement: null,
-      type: 'double',
-    );
+    assertResolvedNodeText(indexExpression, r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@72
+    staticType: A<double>
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: MethodMember
+    base: self::@class::A::@method::[]
+    substitution: {T: double}
+  staticType: double
+''');
     assertParameterElement(
       indexExpression.index,
       elementMatcher(
@@ -140,15 +179,21 @@
 }
 ''');
 
-    var indexElement = findElement.method('[]');
-
     var indexExpression = findNode.index('a?[0]');
-    assertIndexExpression(
-      indexExpression,
-      readElement: indexElement,
-      writeElement: null,
-      type: 'bool?',
-    );
+    assertResolvedNodeText(indexExpression, r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@62
+    staticType: A?
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: self::@class::A::@method::[]
+  staticType: bool?
+''');
   }
 
   test_readWrite_assignment() async {
@@ -168,14 +213,6 @@
     var numPlusElement = numElement.getMethod('+')!;
 
     var indexExpression = findNode.index('a[0]');
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        indexExpression,
-        readElement: indexElement,
-        writeElement: indexEqElement,
-        type: 'num',
-      );
-    }
     assertParameterElement(
       indexExpression.index,
       indexEqElement.parameters[0],
@@ -217,20 +254,6 @@
     var doublePlusElement = doubleElement.getMethod('+')!;
 
     var indexExpression = findNode.index('a[0]');
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        indexExpression,
-        readElement: elementMatcher(
-          indexElement,
-          substitution: {'T': 'double'},
-        ),
-        writeElement: elementMatcher(
-          indexEqElement,
-          substitution: {'T': 'double'},
-        ),
-        type: 'double',
-      );
-    }
     assertParameterElement(
       indexExpression.index,
       elementMatcher(
@@ -281,14 +304,6 @@
     var numPlusElement = numElement.getMethod('+')!;
 
     var indexExpression = findNode.index('a?[0]');
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        indexExpression,
-        readElement: indexElement,
-        writeElement: indexEqElement,
-        type: 'num',
-      );
-    }
     assertParameterElement(
       indexExpression.index,
       indexEqElement.parameters[0],
@@ -324,14 +339,6 @@
     var indexEqElement = findElement.method('[]=');
 
     var indexExpression = findNode.index('a[0]');
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        indexExpression,
-        readElement: null,
-        writeElement: indexEqElement,
-        type: null,
-      );
-    }
     assertParameterElement(
       indexExpression.index,
       indexEqElement.parameters[0],
@@ -364,8 +371,6 @@
 }
 ''');
 
-    var indexEqElement = findElement.method('[]=');
-
     assertAssignment(
       findNode.assignment('[0]'),
       readElement: null,
@@ -386,22 +391,6 @@
       type: 'A',
     );
 
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        findNode.index('..[0]'),
-        readElement: null,
-        writeElement: indexEqElement,
-        type: null,
-      );
-
-      assertIndexExpression(
-        findNode.index('..[1]'),
-        readElement: null,
-        writeElement: indexEqElement,
-        type: null,
-      );
-    }
-
     assertType(findNode.cascade('a?'), 'A?');
   }
 
@@ -419,17 +408,6 @@
     var indexEqElement = findElement.method('[]=');
 
     var indexExpression = findNode.index('a[0]');
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        indexExpression,
-        readElement: null,
-        writeElement: elementMatcher(
-          indexEqElement,
-          substitution: {'T': 'double'},
-        ),
-        type: null,
-      );
-    }
     assertParameterElement(
       indexExpression.index,
       elementMatcher(
@@ -474,14 +452,6 @@
     var indexEqElement = findElement.method('[]=');
 
     var indexExpression = findNode.index('a?[0]');
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        indexExpression,
-        readElement: null,
-        writeElement: indexEqElement,
-        type: null,
-      );
-    }
     assertParameterElement(
       indexExpression.index,
       indexEqElement.parameters[0],
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index 2cd36d7..458a44b 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -5,10 +5,8 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/test_utilities/find_element.dart';
-import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../summary/resolved_ast_printer.dart';
 import 'context_collection_resolution.dart';
 
 main() {
@@ -30,14 +28,14 @@
 ''');
 
     var annotation = findNode.annotation('@a');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
   atSign: @
-  element: self::@getter::a
   name: SimpleIdentifier
+    token: a
     staticElement: self::@getter::a
     staticType: null
-    token: a
+  element: self::@getter::a
 ''');
     _assertAnnotationValueText(annotation, '''
 int 42
@@ -97,6 +95,32 @@
 ''');
   }
 
+  test_onEnumConstant() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  @v
+  v;
+}
+''');
+
+    var annotation = findNode.annotation('@v');
+    assertResolvedNodeText(annotation, '''
+Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: v
+    staticElement: self::@enum::E::@getter::v
+    staticType: null
+  element: self::@enum::E::@getter::v
+''');
+
+    _assertAnnotationValueText(annotation, '''
+E
+  _name: String v
+  index: int 0
+''');
+  }
+
   test_onFieldFormal() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -110,35 +134,35 @@
 }
 ''');
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: A
+    staticElement: self::@class::A
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       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
-          leftParenthesis: (
           rightParenthesis: )
-        constructorName: ConstructorName
-          staticElement: self::@class::A::@constructor::•
-          type: NamedType
-            name: SimpleIdentifier
-              staticElement: self::@class::A
-              staticType: null
-              token: A
-            type: A
         staticType: A
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: self::@class::A::@constructor::•
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
 ''');
     _assertAnnotationValueText(annotation, r'''
 A
@@ -162,21 +186,21 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, '''
+    assertResolvedNodeText(annotation, '''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: A
+    staticElement: self::@class::A
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 3
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: self::@class::A::@constructor::•
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
 ''');
 
     final localVariable = findElement.localVar('x');
@@ -452,29 +476,29 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      staticElement: self::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: named
+      staticElement: self::@class::A::@constructor::named
+      staticType: null
+    staticElement: self::@class::A::@constructor::named
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: self::@class::A::@constructor::named
-  name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: self::@class::A::@constructor::named
-      staticType: null
-      token: named
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@class::A
-      staticType: null
-      token: A
-    staticElement: self::@class::A::@constructor::named
-    staticType: null
 ''');
     _assertAnnotationValueText(annotation, '''
 A
@@ -498,22 +522,22 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
   atSign: @
-  element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: self::@class::A::@getter::foo
-      staticType: null
-      token: foo
-    period: .
     prefix: SimpleIdentifier
+      token: A
       staticElement: self::@class::A
       staticType: null
-      token: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: null
     staticElement: self::@class::A::@getter::foo
     staticType: null
+  element: self::@class::A::@getter::foo
 ''');
     _assertAnnotationValueText(annotation, '''
 int 42
@@ -532,21 +556,21 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: A
+    staticElement: self::@class::A
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: self::@class::A::@constructor::•
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
 ''');
     _assertAnnotationValueText(annotation, r'''
 A
@@ -559,6 +583,104 @@
     );
   }
 
+  test_value_genericClass_downwards_inference_namedConstructor() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  final List<List<T>> f;
+  const A.named(this.f);
+}
+
+@A.named([])
+void f() {}
+''');
+
+    var annotation = findNode.annotation('@A');
+    assertResolvedNodeText(annotation, r'''
+Annotation
+  atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      staticElement: self::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: named
+      staticElement: ConstructorMember
+        base: self::@class::A::@constructor::named
+        substitution: {T: Object?}
+      staticType: null
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: Object?}
+    staticType: null
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      ListLiteral
+        leftBracket: [
+        rightBracket: ]
+        staticType: List<List<Object?>>
+    rightParenthesis: )
+  element: ConstructorMember
+    base: self::@class::A::@constructor::named
+    substitution: {T: Object?}
+''');
+    _assertAnnotationValueText(annotation, '''
+A<Object?>
+  f: List
+    elementType: List<Object?>
+''');
+    assertElement2(
+      findNode.listLiteral('[]').staticParameterElement,
+      declaration: findElement.fieldFormalParameter('f'),
+      substitution: {'T': 'Object?'},
+    );
+  }
+
+  test_value_genericClass_downwards_inference_unnamedConstructor() async {
+    await assertNoErrorsInCode(r'''
+ class A<T> {
+  final List<List<T>> f;
+  const A(this.f);
+}
+
+@A([])
+void f() {}
+''');
+
+    var annotation = findNode.annotation('@A');
+    assertResolvedNodeText(annotation, r'''
+Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: A
+    staticElement: self::@class::A
+    staticType: null
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      ListLiteral
+        leftBracket: [
+        rightBracket: ]
+        staticType: List<List<Object?>>
+    rightParenthesis: )
+  element: ConstructorMember
+    base: self::@class::A::@constructor::•
+    substitution: {T: Object?}
+''');
+    _assertAnnotationValueText(annotation, r'''
+A<Object?>
+  f: List
+    elementType: List<Object?>
+''');
+    assertElement2(
+      findNode.listLiteral('[]').staticParameterElement,
+      declaration: findElement.fieldFormalParameter('f'),
+      substitution: {'T': 'Object?'},
+    );
+  }
+
   test_value_genericClass_inference_namedConstructor() async {
     await assertNoErrorsInCode(r'''
 class A<T> {
@@ -571,35 +693,35 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
-  element: ConstructorMember
-    base: self::@class::A::@constructor::named
-    substitution: {T: int}
   name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      staticElement: self::@class::A
+      staticType: null
+    period: .
     identifier: SimpleIdentifier
+      token: named
       staticElement: ConstructorMember
         base: self::@class::A::@constructor::named
         substitution: {T: int}
       staticType: null
-      token: named
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@class::A
-      staticType: null
-      token: A
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
+  element: ConstructorMember
+    base: self::@class::A::@constructor::named
+    substitution: {T: int}
 ''');
     _assertAnnotationValueText(annotation, '''
 A<int>
@@ -624,23 +746,23 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: A
+    staticElement: self::@class::A
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -663,22 +785,22 @@
 void f() {}
 ''');
 
-    _assertResolvedNodeText(findNode.annotation('@A'), r'''
+    assertResolvedNodeText(findNode.annotation('@A'), r'''
 Annotation
   atSign: @
-  element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: self::@class::A::@getter::foo
-      staticType: null
-      token: foo
-    period: .
     prefix: SimpleIdentifier
+      token: A
       staticElement: self::@class::A
       staticType: null
-      token: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: null
     staticElement: self::@class::A::@getter::foo
     staticType: null
+  element: self::@class::A::@getter::foo
 ''');
   }
 
@@ -694,35 +816,35 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
-  element: ConstructorMember
-    base: self::@class::A::@constructor::named
-    substitution: {T: dynamic}
   name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      staticElement: self::@class::A
+      staticType: null
+    period: .
     identifier: SimpleIdentifier
+      token: named
       staticElement: ConstructorMember
         base: self::@class::A::@constructor::named
         substitution: {T: dynamic}
       staticType: null
-      token: named
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@class::A
-      staticType: null
-      token: A
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
       substitution: {T: dynamic}
     staticType: null
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
+  element: ConstructorMember
+    base: self::@class::A::@constructor::named
+    substitution: {T: dynamic}
 ''');
     _assertAnnotationValueText(annotation, '''
 A<dynamic>
@@ -741,22 +863,22 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
   atSign: @
-  element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: self::@class::A::@getter::foo
-      staticType: null
-      token: foo
-    period: .
     prefix: SimpleIdentifier
+      token: A
       staticElement: self::@class::A
       staticType: null
-      token: A
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: null
     staticElement: self::@class::A::@getter::foo
     staticType: null
+  element: self::@class::A::@getter::foo
 ''');
     _assertAnnotationValueText(annotation, '''
 <null>
@@ -775,39 +897,40 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
+  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: >
+  period: .
   constructorName: SimpleIdentifier
+    token: named
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
-    token: named
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, '''
 A<int>
@@ -832,33 +955,33 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  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: >
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -884,23 +1007,23 @@
 ''');
 
     var annotation = findNode.annotation('@A');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: A
+    staticElement: self::@class::A
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: dynamic}
-  name: SimpleIdentifier
-    staticElement: self::@class::A
-    staticType: null
-    token: A
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<dynamic>
@@ -929,23 +1052,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -973,23 +1096,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -1014,23 +1137,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -1054,23 +1177,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -1095,23 +1218,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -1138,23 +1261,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -1179,33 +1302,33 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@class::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@class::B
-    staticType: null
-    token: B
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -1319,26 +1442,27 @@
 ''');
 
     var annotation = findNode.annotation('@prefix.B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
   atSign: @
-  constructorName: SimpleIdentifier
-    staticElement: package:test/a.dart::@class::A::@getter::foo
-    staticType: null
-    token: foo
-  element: package:test/a.dart::@class::A::@getter::foo
   name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: package:test/a.dart::@typeAlias::B
-      staticType: null
-      token: B
-    period: .
     prefix: SimpleIdentifier
+      token: prefix
       staticElement: self::@prefix::prefix
       staticType: null
-      token: prefix
+    period: .
+    identifier: SimpleIdentifier
+      token: B
+      staticElement: package:test/a.dart::@typeAlias::B
+      staticType: null
     staticElement: package:test/a.dart::@typeAlias::B
     staticType: null
+  period: .
+  constructorName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@class::A::@getter::foo
+    staticType: null
+  element: package:test/a.dart::@class::A::@getter::foo
 ''');
     _assertAnnotationValueText(annotation, '''
 int 42
@@ -1362,37 +1486,38 @@
 ''');
 
     var annotation = findNode.annotation('@prefix.B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: B
+      staticElement: package:test/a.dart::@typeAlias::B
+      staticType: null
+    staticElement: package:test/a.dart::@typeAlias::B
+    staticType: null
+  period: .
   constructorName: SimpleIdentifier
+    token: named
     staticElement: ConstructorMember
       base: package:test/a.dart::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
-    token: named
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
   element: ConstructorMember
     base: package:test/a.dart::@class::A::@constructor::named
     substitution: {T: int}
-  name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: package:test/a.dart::@typeAlias::B
-      staticType: null
-      token: B
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@prefix::prefix
-      staticType: null
-      token: prefix
-    staticElement: package:test/a.dart::@typeAlias::B
-    staticType: null
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1423,31 +1548,31 @@
 ''');
 
     var annotation = findNode.annotation('@prefix.B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: B
+      staticElement: package:test/a.dart::@typeAlias::B
+      staticType: null
+    staticElement: package:test/a.dart::@typeAlias::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: package:test/a.dart::@class::A::@constructor::•
     substitution: {T: int}
-  name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: package:test/a.dart::@typeAlias::B
-      staticType: null
-      token: B
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@prefix::prefix
-      staticType: null
-      token: prefix
-    staticElement: package:test/a.dart::@typeAlias::B
-    staticType: null
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1478,47 +1603,48 @@
 ''');
 
     var annotation = findNode.annotation('@prefix.B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: B
+      staticElement: package:test/a.dart::@typeAlias::B
+      staticType: null
+    staticElement: package:test/a.dart::@typeAlias::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  period: .
   constructorName: SimpleIdentifier
+    token: named
     staticElement: ConstructorMember
       base: package:test/a.dart::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
-    token: named
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
   element: ConstructorMember
     base: package:test/a.dart::@class::A::@constructor::named
     substitution: {T: int}
-  name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: package:test/a.dart::@typeAlias::B
-      staticType: null
-      token: B
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@prefix::prefix
-      staticType: null
-      token: prefix
-    staticElement: package:test/a.dart::@typeAlias::B
-    staticType: null
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1549,41 +1675,41 @@
 ''');
 
     var annotation = findNode.annotation('@prefix.B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: B
+      staticElement: package:test/a.dart::@typeAlias::B
+      staticType: null
+    staticElement: package:test/a.dart::@typeAlias::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: package:test/a.dart::@class::A::@constructor::•
     substitution: {T: int}
-  name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: package:test/a.dart::@typeAlias::B
-      staticType: null
-      token: B
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@prefix::prefix
-      staticType: null
-      token: prefix
-    staticElement: package:test/a.dart::@typeAlias::B
-    staticType: null
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1610,22 +1736,22 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
   atSign: @
-  element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: self::@class::A::@getter::foo
-      staticType: null
-      token: foo
-    period: .
     prefix: SimpleIdentifier
+      token: B
       staticElement: self::@typeAlias::B
       staticType: null
-      token: B
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: null
     staticElement: self::@class::A::@getter::foo
     staticType: null
+  element: self::@class::A::@getter::foo
 ''');
     _assertAnnotationValueText(annotation, '''
 int 42
@@ -1647,9 +1773,32 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  period: .
+  constructorName: SimpleIdentifier
+    token: named
+    staticElement: ConstructorMember
+      base: self::@class::A::@constructor::named
+      substitution: {T: int, U: double}
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
@@ -1657,32 +1806,10 @@
       DoubleLiteral
         literal: 1.2
         staticType: double
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
-  constructorName: SimpleIdentifier
-    staticElement: ConstructorMember
-      base: self::@class::A::@constructor::named
-      substitution: {T: int, U: double}
-    staticType: null
-    token: named
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: int, U: double}
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int, double>
@@ -1718,9 +1845,25 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
@@ -1728,26 +1871,10 @@
       DoubleLiteral
         literal: 1.2
         staticType: double
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int, U: double}
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int, double>
@@ -1782,35 +1909,35 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
-  element: ConstructorMember
-    base: self::@class::A::@constructor::named
-    substitution: {T: int}
   name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: B
+      staticElement: self::@typeAlias::B
+      staticType: null
+    period: .
     identifier: SimpleIdentifier
+      token: named
       staticElement: ConstructorMember
         base: self::@class::A::@constructor::named
         substitution: {T: int}
       staticType: null
-      token: named
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@typeAlias::B
-      staticType: null
-      token: B
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
+  element: ConstructorMember
+    base: self::@class::A::@constructor::named
+    substitution: {T: int}
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1838,23 +1965,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1882,39 +2009,40 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  period: .
   constructorName: SimpleIdentifier
+    token: named
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
-    token: named
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1942,33 +2070,33 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
-  typeArguments: TypeArgumentList
-    arguments
-      NamedType
-        name: SimpleIdentifier
-          staticElement: dart:core::@class::int
-          staticType: null
-          token: int
-        type: int
-    leftBracket: <
-    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1996,35 +2124,35 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
-  arguments: ArgumentList
-    arguments
-      IntegerLiteral
-        literal: 42
-        staticType: int
-    leftParenthesis: (
-    rightParenthesis: )
   atSign: @
-  element: ConstructorMember
-    base: self::@class::A::@constructor::named
-    substitution: {T: int}
   name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: B
+      staticElement: self::@typeAlias::B
+      staticType: null
+    period: .
     identifier: SimpleIdentifier
+      token: named
       staticElement: ConstructorMember
         base: self::@class::A::@constructor::named
         substitution: {T: int}
       staticType: null
-      token: named
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@typeAlias::B
-      staticType: null
-      token: B
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
       substitution: {T: int}
     staticType: null
+  arguments: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 42
+        staticType: int
+    rightParenthesis: )
+  element: ConstructorMember
+    base: self::@class::A::@constructor::named
+    substitution: {T: int}
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -2052,23 +2180,23 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -2096,29 +2224,29 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: B
+      staticElement: self::@typeAlias::B
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: named
+      staticElement: self::@class::A::@constructor::named
+      staticType: null
+    staticElement: self::@class::A::@constructor::named
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: self::@class::A::@constructor::named
-  name: PrefixedIdentifier
-    identifier: SimpleIdentifier
-      staticElement: self::@class::A::@constructor::named
-      staticType: null
-      token: named
-    period: .
-    prefix: SimpleIdentifier
-      staticElement: self::@typeAlias::B
-      staticType: null
-      token: B
-    staticElement: self::@class::A::@constructor::named
-    staticType: null
 ''');
     _assertAnnotationValueText(annotation, r'''
 A
@@ -2145,21 +2273,21 @@
 ''');
 
     var annotation = findNode.annotation('@B');
-    _assertResolvedNodeText(annotation, r'''
+    assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign: @
+  name: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
   arguments: ArgumentList
+    leftParenthesis: (
     arguments
       IntegerLiteral
         literal: 42
         staticType: int
-    leftParenthesis: (
     rightParenthesis: )
-  atSign: @
   element: self::@class::A::@constructor::•
-  name: SimpleIdentifier
-    staticElement: self::@typeAlias::B
-    staticType: null
-    token: B
 ''');
     _assertAnnotationValueText(annotation, r'''
 A
@@ -2184,24 +2312,4 @@
     var value = annotation.computeConstantValue();
     assertDartObjectText(value, expected);
   }
-
-  void _assertResolvedNodeText(AstNode node, String expected) {
-    var actual = _resolvedNodeText(node);
-    if (actual != expected) {
-      print(actual);
-    }
-    expect(actual, expected);
-  }
-
-  String _resolvedNodeText(AstNode node) {
-    var buffer = StringBuffer();
-    node.accept(
-      ResolvedAstPrinter(
-        selfUriStr: result.uri.toString(),
-        sink: buffer,
-        indent: '',
-      ),
-    );
-    return buffer.toString();
-  }
 }
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 c564c0c..41cc3bc 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -3,24 +3,959 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
-import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
 
 main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(MethodInvocationResolutionWithoutNullSafetyTest);
     defineReflectiveTests(MethodInvocationResolutionTest);
-    defineReflectiveTests(MethodInvocationResolutionWithNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class MethodInvocationResolutionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, MethodInvocationResolutionTestCases {}
+    with MethodInvocationResolutionTestCases {
+  test_hasReceiver_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {}
+''');
+
+    await assertErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart' deferred as a;
+
+main() {
+  a.loadLibrary();
+}
+''', [
+      error(HintCode.UNUSED_IMPORT, 22, 8),
+    ]);
+
+    var node = findNode.methodInvocation('loadLibrary()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: self::@prefix::a
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: FunctionMember
+      base: loadLibrary@-1
+      isLegacy: true
+    staticType: Future<dynamic>* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Future<dynamic>* Function()*
+  staticType: Future<dynamic>*
+''');
+  }
+
+  test_hasReceiver_interfaceQ_Function_call_checked() async {
+    await assertNoErrorsInCode(r'''
+void f(Function? foo) {
+  foo?.call();
+}
+''');
+
+    var node = findNode.methodInvocation('foo?.call()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@17
+    staticType: Function?
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+  }
+
+  test_hasReceiver_interfaceQ_Function_call_unchecked() async {
+    await assertErrorsInCode(r'''
+void f(Function? foo) {
+  foo.call();
+}
+''', [
+      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
+          30, 4),
+    ]);
+
+    var node = findNode.methodInvocation('foo.call()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@17
+    staticType: Function?
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+  }
+
+  test_hasReceiver_interfaceQ_nullShorting() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  C foo() => throw 0;
+  C bar() => throw 0;
+}
+
+void testShort(C? c) {
+  c?.foo().bar();
+}
+''');
+
+    var node = findNode.methodInvocation('bar();');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: MethodInvocation
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@75
+      staticType: C?
+    operator: ?.
+    methodName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@method::foo
+      staticType: C Function()
+    argumentList: ArgumentList
+      leftParenthesis: (
+      rightParenthesis: )
+    staticInvokeType: C Function()
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: bar
+    staticElement: self::@class::C::@method::bar
+    staticType: C Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: C Function()
+  staticType: C?
+''');
+  }
+
+  test_hasReceiver_interfaceQ_nullShorting_getter() async {
+    await assertNoErrorsInCode(r'''
+abstract class C {
+  void Function(C) get foo;
+}
+
+void f(C? c) {
+  c?.foo(c);
+}
+''');
+
+    var node = findNode.functionExpressionInvocation('foo(c);');
+    assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@60
+      staticType: C?
+    operator: ?.
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: void Function(C)
+    staticType: void Function(C)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: c
+        staticElement: c@60
+        staticType: C
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(C)
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_interfaceType_enum() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  void foo() {}
+}
+
+void f(E e) {
+  e.foo();
+}
+''');
+
+    var node = findNode.methodInvocation('e.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: e
+    staticElement: e@42
+    staticType: E
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@enum::E::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_interfaceType_enum_fromMixin() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+}
+
+void f(E e) {
+  e.foo();
+}
+''');
+
+    var node = findNode.methodInvocation('e.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: e
+    staticElement: e@70
+    staticType: E
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@mixin::M::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_defined() async {
+    await assertErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+void f(A? a) {
+  a.foo();
+}
+''', [
+      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
+          48, 3),
+    ]);
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@39
+    staticType: A?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_defined_extension() async {
+    await assertErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+extension E on A {
+  void foo() {}
+}
+
+void f(A? a) {
+  a.foo();
+}
+''', [
+      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
+          86, 3),
+    ]);
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@77
+    staticType: A?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_defined_extensionQ() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+extension E on A? {
+  void foo() {}
+}
+
+void f(A? a) {
+  a.foo();
+}
+''');
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@78
+    staticType: A?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@extension::E::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_defined_extensionQ2() async {
+    await assertNoErrorsInCode(r'''
+extension E<T> on T? {
+  T foo() => throw 0;
+}
+
+void f(int? a) {
+  a.foo();
+}
+''');
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@60
+    staticType: int?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: MethodMember
+      base: self::@extension::E::@method::foo
+      substitution: {T: int}
+    staticType: int Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: int Function()
+  staticType: int
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_notDefined() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+void f(A? a) {
+  a.foo();
+}
+''', [
+      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
+          31, 3),
+    ]);
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@22
+    staticType: A?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_notDefined_extension() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+extension E on A {
+  void foo() {}
+}
+
+void f(A? a) {
+  a.foo();
+}
+''', [
+      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
+          69, 3),
+    ]);
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@60
+    staticType: A?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+  }
+
+  test_hasReceiver_interfaceTypeQ_notDefined_extensionQ() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+extension E on A? {
+  void foo() {}
+}
+
+void f(A? a) {
+  a.foo();
+}
+''');
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@61
+    staticType: A?
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@extension::E::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_hasReceiver_typeAlias_staticMethod() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static void foo(int _) {}
+}
+
+typedef B = A;
+
+void f() {
+  B.foo(0);
+}
+''');
+
+    var node = findNode.methodInvocation('foo(0)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
+  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_hasReceiver_typeAlias_staticMethod_generic() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  static void foo(int _) {}
+}
+
+typedef B<T> = A<T>;
+
+void f() {
+  B.foo(0);
+}
+''');
+
+    var node = findNode.methodInvocation('foo(0)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: B
+    staticElement: self::@typeAlias::B
+    staticType: null
+  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_hasReceiver_typeParameter_promotedToNonNullable() async {
+    await assertNoErrorsInCode('''
+void f<T>(T? t) {
+  if (t is int) {
+    t.abs();
+  }
+}
+''');
+
+    var node = findNode.methodInvocation('t.abs()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: t
+    staticElement: t@13
+    staticType: T & int
+  operator: .
+  methodName: SimpleIdentifier
+    token: abs
+    staticElement: dart:core::@class::int::@method::abs
+    staticType: int Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: int Function()
+  staticType: int
+''');
+  }
+
+  test_hasReceiver_typeParameter_promotedToOtherTypeParameter() async {
+    await assertNoErrorsInCode('''
+abstract class A {}
+
+abstract class B extends A {
+  void foo();
+}
+
+void f<T extends A, U extends B>(T a) {
+  if (a is U) {
+    a.foo();
+  }
+}
+''');
+
+    var node = findNode.methodInvocation('a.foo()');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@102
+    staticType: T & U
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::B::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+  }
+
+  test_namedArgument_anywhere() async {
+    await assertNoErrorsInCode('''
+class A {}
+class B {}
+class C {}
+class D {}
+
+void foo(A a, B b, {C? c, D? d}) {}
+
+T g1<T>() => throw 0;
+T g2<T>() => throw 0;
+T g3<T>() => throw 0;
+T g4<T>() => throw 0;
+
+void f() {
+  foo(g1(), c: g3(), g2(), d: g4());
+}
+''');
+
+    var node = findNode.methodInvocation('foo(g');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(A, B, {C? c, D? d})
+  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::@function::foo::@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::@function::foo::@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: )
+  staticInvokeType: void Function(A, B, {C? c, D? d})
+  staticType: void
+''');
+
+    var g1 = findNode.methodInvocation('g1()');
+    assertParameterElement(g1, findElement.parameter('a'));
+
+    var g2 = findNode.methodInvocation('g2()');
+    assertParameterElement(g2, findElement.parameter('b'));
+
+    var named_g3 = findNode.namedExpression('c: g3()');
+    assertParameterElement(named_g3, findElement.parameter('c'));
+
+    var named_g4 = findNode.namedExpression('d: g4()');
+    assertParameterElement(named_g4, findElement.parameter('d'));
+  }
+
+  test_nullShorting_cascade_firstMethodInvocation() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int foo() => 0;
+  int bar() => 0;
+}
+
+void f(A? a) {
+  a?..foo()..bar();
+}
+''');
+
+    var node = findNode.cascade('a?..');
+    assertResolvedNodeText(node, r'''
+CascadeExpression
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@59
+    staticType: A?
+  cascadeSections
+    MethodInvocation
+      operator: ?..
+      methodName: SimpleIdentifier
+        token: foo
+        staticElement: self::@class::A::@method::foo
+        staticType: int Function()
+      argumentList: ArgumentList
+        leftParenthesis: (
+        rightParenthesis: )
+      staticInvokeType: int Function()
+      staticType: int
+    MethodInvocation
+      operator: ..
+      methodName: SimpleIdentifier
+        token: bar
+        staticElement: self::@class::A::@method::bar
+        staticType: int Function()
+      argumentList: ArgumentList
+        leftParenthesis: (
+        rightParenthesis: )
+      staticInvokeType: int Function()
+      staticType: int
+  staticType: A?
+''');
+  }
+
+  test_nullShorting_cascade_firstPropertyAccess() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+  int bar() => 0;
+}
+
+void f(A? a) {
+  a?..foo..bar();
+}
+''');
+
+    var node = findNode.cascade('a?..');
+    assertResolvedNodeText(node, r'''
+CascadeExpression
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@61
+    staticType: A?
+  cascadeSections
+    PropertyAccess
+      operator: ?..
+      propertyName: SimpleIdentifier
+        token: foo
+        staticElement: self::@class::A::@getter::foo
+        staticType: int
+      staticType: int
+    MethodInvocation
+      operator: ..
+      methodName: SimpleIdentifier
+        token: bar
+        staticElement: self::@class::A::@method::bar
+        staticType: int Function()
+      argumentList: ArgumentList
+        leftParenthesis: (
+        rightParenthesis: )
+      staticInvokeType: int Function()
+      staticType: int
+  staticType: A?
+''');
+  }
+
+  test_nullShorting_cascade_nullAwareInside() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int? foo() => 0;
+}
+
+main() {
+  A a = A()..foo()?.abs();
+  a;
+}
+''');
+
+    var node = findNode.cascade('A()..');
+    assertResolvedNodeText(node, r'''
+CascadeExpression
+  target: 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: (
+      rightParenthesis: )
+    staticType: A
+  cascadeSections
+    MethodInvocation
+      target: MethodInvocation
+        operator: ..
+        methodName: SimpleIdentifier
+          token: foo
+          staticElement: self::@class::A::@method::foo
+          staticType: int? Function()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: int? Function()
+        staticType: int?
+      operator: ?.
+      methodName: SimpleIdentifier
+        token: abs
+        staticElement: dart:core::@class::int::@method::abs
+        staticType: int Function()
+      argumentList: ArgumentList
+        leftParenthesis: (
+        rightParenthesis: )
+      staticInvokeType: int Function()
+      staticType: int
+  staticType: A
+''');
+  }
+
+  test_typeArgumentTypes_generic_inferred_leftTop_dynamic() async {
+    await assertNoErrorsInCode('''
+void foo<T extends Object>(T? value) {}
+
+void f(dynamic o) {
+  foo(o);
+}
+''');
+
+    var node = findNode.methodInvocation('foo(o)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T extends Object>(T?)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: o
+        staticElement: o@56
+        staticType: dynamic
+    rightParenthesis: )
+  staticInvokeType: void Function(Object?)
+  staticType: void
+  typeArgumentTypes
+    Object
+''');
+  }
+
+  test_typeArgumentTypes_generic_inferred_leftTop_void() async {
+    await assertNoErrorsInCode('''
+void foo<T extends Object>(List<T?> value) {}
+
+void f(List<void> o) {
+  foo(o);
+}
+''');
+
+    var node = findNode.methodInvocation('foo(o)');
+    assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T extends Object>(List<T?>)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: o
+        staticElement: o@65
+        staticType: List<void>
+    rightParenthesis: )
+  staticInvokeType: void Function(List<Object?>)
+  staticType: void
+  typeArgumentTypes
+    Object
+''');
+  }
+}
 
 mixin MethodInvocationResolutionTestCases on PubPackageResolutionTest {
   test_clamp_double_context_double() async {
@@ -32,10 +967,118 @@
 h(double x) {}
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'),
-        [typeStringByNullability(nullable: 'double', legacy: 'num')]);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'),
-        [typeStringByNullability(nullable: 'double', legacy: 'num')]);
+    var node = findNode.methodInvocation('h(a');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(double)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@36
+          staticType: double
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: dart:core::@class::num::@method::clamp
+          staticType: num Function(num, num)
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: double Function()
+              staticType: double
+              typeArgumentTypes
+                double
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: double Function()
+              staticType: double
+              typeArgumentTypes
+                double
+          rightParenthesis: )
+        staticInvokeType: num Function(num, num)
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(double)
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(double*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@36
+          staticType: double*
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: MethodMember
+            base: dart:core::@class::num::@method::clamp
+            isLegacy: true
+          staticType: num* Function(num*, num*)*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+          rightParenthesis: )
+        staticInvokeType: num* Function(num*, num*)*
+        staticType: num*
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(double*)*
+  staticType: dynamic
+''');
+    }
   }
 
   test_clamp_double_context_int() async {
@@ -51,8 +1094,118 @@
           error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 45, 17),
         ], legacy: []));
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'), ['num']);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'), ['num']);
+    var node = findNode.methodInvocation('h(a');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@36
+          staticType: double
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: dart:core::@class::num::@method::clamp
+          staticType: num Function(num, num)
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num Function()
+              staticType: num
+              typeArgumentTypes
+                num
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num Function()
+              staticType: num
+              typeArgumentTypes
+                num
+          rightParenthesis: )
+        staticInvokeType: num Function(num, num)
+        staticType: num
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(int)
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@36
+          staticType: double*
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: MethodMember
+            base: dart:core::@class::num::@method::clamp
+            isLegacy: true
+          staticType: num* Function(num*, num*)*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+          rightParenthesis: )
+        staticInvokeType: num* Function(num*, num*)*
+        staticType: num*
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(int*)*
+  staticType: dynamic
+''');
+    }
   }
 
   test_clamp_double_context_none() async {
@@ -63,8 +1216,96 @@
 }
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'), ['num']);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'), ['num']);
+    var node = findNode.methodInvocation('a.clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@36
+    staticType: double
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T Function<T>()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num Function()
+        staticType: num
+        typeArgumentTypes
+          num
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T Function<T>()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num Function()
+        staticType: num
+        typeArgumentTypes
+          num
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@36
+    staticType: double*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T* Function<T>()*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num* Function()*
+        staticType: num*
+        typeArgumentTypes
+          num*
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T* Function<T>()*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num* Function()*
+        staticType: num*
+        typeArgumentTypes
+          num*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_double_double_double() async {
@@ -74,13 +1315,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType:
-            typeStringByNullability(nullable: 'double', legacy: 'num'));
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@19
+        staticType: double
+      SimpleIdentifier
+        token: c
+        staticElement: c@29
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@19
+        staticType: double*
+      SimpleIdentifier
+        token: c
+        staticElement: c@29
+        staticType: double*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_double_double_int() async {
@@ -90,12 +1382,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@19
+        staticType: double
+      SimpleIdentifier
+        token: c
+        staticElement: c@26
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@19
+        staticType: double*
+      SimpleIdentifier
+        token: c
+        staticElement: c@26
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_double_int_double() async {
@@ -105,12 +1449,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@26
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@26
+        staticType: double*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_double_int_int() async {
@@ -120,12 +1516,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@23
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@9
+    staticType: double*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@23
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_context_double() async {
@@ -141,8 +1589,118 @@
           error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 42, 17),
         ], legacy: []));
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'), ['num']);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'), ['num']);
+    var node = findNode.methodInvocation('h(a');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(double)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@33
+          staticType: int
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: dart:core::@class::num::@method::clamp
+          staticType: num Function(num, num)
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num Function()
+              staticType: num
+              typeArgumentTypes
+                num
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num Function()
+              staticType: num
+              typeArgumentTypes
+                num
+          rightParenthesis: )
+        staticInvokeType: num Function(num, num)
+        staticType: num
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(double)
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(double*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@33
+          staticType: int*
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: MethodMember
+            base: dart:core::@class::num::@method::clamp
+            isLegacy: true
+          staticType: num* Function(num*, num*)*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+          rightParenthesis: )
+        staticInvokeType: num* Function(num*, num*)*
+        staticType: num*
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(double*)*
+  staticType: dynamic
+''');
+    }
   }
 
   test_clamp_int_context_int() async {
@@ -154,10 +1712,118 @@
 h(int x) {}
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'),
-        [typeStringByNullability(nullable: 'int', legacy: 'num')]);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'),
-        [typeStringByNullability(nullable: 'int', legacy: 'num')]);
+    var node = findNode.methodInvocation('h(a');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@33
+          staticType: int
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: dart:core::@class::num::@method::clamp
+          staticType: num Function(num, num)
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: int Function()
+              staticType: int
+              typeArgumentTypes
+                int
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: int Function()
+              staticType: int
+              typeArgumentTypes
+                int
+          rightParenthesis: )
+        staticInvokeType: num Function(num, num)
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(int)
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@33
+          staticType: int*
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: MethodMember
+            base: dart:core::@class::num::@method::clamp
+            isLegacy: true
+          staticType: num* Function(num*, num*)*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: num* Function()*
+              staticType: num*
+              typeArgumentTypes
+                num*
+          rightParenthesis: )
+        staticInvokeType: num* Function(num*, num*)*
+        staticType: num*
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(int*)*
+  staticType: dynamic
+''');
+    }
   }
 
   test_clamp_int_context_none() async {
@@ -168,8 +1834,96 @@
 }
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'), ['num']);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'), ['num']);
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@33
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T Function<T>()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num Function()
+        staticType: num
+        typeArgumentTypes
+          num
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T Function<T>()
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num Function()
+        staticType: num
+        typeArgumentTypes
+          num
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@33
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T* Function<T>()*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num* Function()*
+        staticType: num*
+        typeArgumentTypes
+          num*
+      MethodInvocation
+        methodName: SimpleIdentifier
+          token: f
+          staticElement: self::@function::f
+          staticType: T* Function<T>()*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          rightParenthesis: )
+        staticInvokeType: num* Function()*
+        staticType: num*
+        typeArgumentTypes
+          num*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_double_double() async {
@@ -179,12 +1933,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double
+      SimpleIdentifier
+        token: c
+        staticElement: c@26
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double*
+      SimpleIdentifier
+        token: c
+        staticElement: c@26
+        staticType: double*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_double_dynamic() async {
@@ -194,12 +2000,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double
+      SimpleIdentifier
+        token: c
+        staticElement: c@27
+        staticType: dynamic
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double*
+      SimpleIdentifier
+        token: c
+        staticElement: c@27
+        staticType: dynamic
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_double_int() async {
@@ -209,12 +2067,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double
+      SimpleIdentifier
+        token: c
+        staticElement: c@23
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double*
+      SimpleIdentifier
+        token: c
+        staticElement: c@23
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_dynamic_double() async {
@@ -224,12 +2134,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@17
+        staticType: dynamic
+      SimpleIdentifier
+        token: c
+        staticElement: c@27
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@17
+        staticType: dynamic
+      SimpleIdentifier
+        token: c
+        staticElement: c@27
+        staticType: double*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_dynamic_int() async {
@@ -239,12 +2201,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@17
+        staticType: dynamic
+      SimpleIdentifier
+        token: c
+        staticElement: c@24
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@17
+        staticType: dynamic
+      SimpleIdentifier
+        token: c
+        staticElement: c@24
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_int_double() async {
@@ -254,12 +2268,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@23
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@23
+        staticType: double*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_int_dynamic() async {
@@ -269,12 +2335,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@24
+        staticType: dynamic
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@24
+        staticType: dynamic
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_int_int() async {
@@ -284,12 +2402,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: typeStringByNullability(nullable: 'int', legacy: 'num'));
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@20
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@20
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_int_int_from_cascade() async {
@@ -303,12 +2473,56 @@
           error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 6),
         ]));
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: typeStringByNullability(nullable: 'int', legacy: 'num'));
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  operator: ..
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@20
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  operator: ..
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@20
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_int_int_via_extension_explicit() async {
@@ -321,11 +2535,84 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp(b'),
-        elementMatcher(findElement.extension_('E').getMethod('clamp')),
-        'String Function(int, int)',
-        expectedType: 'String');
+    var node = findNode.methodInvocation('clamp(b');
+    if (isNullSafetyEnabled) {
+      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@65
+          staticType: int
+      rightParenthesis: )
+    extendedType: int
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@extension::E::@method::clamp
+    staticType: String Function(int, int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@72
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@79
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: String Function(int, int)
+  staticType: String
+''');
+    } else {
+      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@65
+          staticType: int*
+      rightParenthesis: )
+    extendedType: int*
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@extension::E::@method::clamp
+    staticType: String* Function(int*, int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@72
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@79
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: String* Function(int*, int*)*
+  staticType: String*
+''');
+    }
   }
 
   test_clamp_int_int_never() async {
@@ -335,12 +2622,64 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@22
+        staticType: Never
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@22
+        staticType: Null*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_int_never_int() async {
@@ -354,12 +2693,64 @@
           error(HintCode.DEAD_CODE, 40, 3),
         ], legacy: []));
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'),
-        elementMatcher(numElement.getMethod('clamp'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num, num)',
-        expectedType: 'num');
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: dart:core::@class::num::@method::clamp
+    staticType: num Function(num, num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@15
+        staticType: Never
+      SimpleIdentifier
+        token: c
+        staticElement: c@22
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num, num)
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::clamp
+      isLegacy: true
+    staticType: num* Function(num*, num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@15
+        staticType: Null*
+      SimpleIdentifier
+        token: c
+        staticElement: c@22
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*, num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_clamp_never_int_int() async {
@@ -376,10 +2767,62 @@
           error(CompileTimeErrorCode.UNDEFINED_METHOD, 31, 5),
         ]));
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp'), isNull, 'dynamic',
-        expectedType:
-            typeStringByNullability(nullable: 'Never', legacy: 'dynamic'));
+    var node = findNode.methodInvocation('clamp');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@8
+    staticType: Never
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@15
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@22
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: Never
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@8
+    staticType: Null*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@15
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@22
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_clamp_other_context_int() async {
@@ -398,8 +2841,116 @@
           error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 94, 17),
         ], legacy: []));
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f(),'), ['String']);
-    assertTypeArgumentTypes(findNode.methodInvocation('f())'), ['String']);
+    var node = findNode.methodInvocation('h(a');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@85
+          staticType: A
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: self::@class::A::@method::clamp
+          staticType: num Function(String, String)
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: String Function()
+              staticType: String
+              typeArgumentTypes
+                String
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T Function<T>()
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: String Function()
+              staticType: String
+              typeArgumentTypes
+                String
+          rightParenthesis: )
+        staticInvokeType: num Function(String, String)
+        staticType: num
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(int)
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: h
+    staticElement: self::@function::h
+    staticType: dynamic Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      MethodInvocation
+        target: SimpleIdentifier
+          token: a
+          staticElement: a@85
+          staticType: A*
+        operator: .
+        methodName: SimpleIdentifier
+          token: clamp
+          staticElement: self::@class::A::@method::clamp
+          staticType: num* Function(String*, String*)*
+        argumentList: ArgumentList
+          leftParenthesis: (
+          arguments
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: String* Function()*
+              staticType: String*
+              typeArgumentTypes
+                String*
+            MethodInvocation
+              methodName: SimpleIdentifier
+                token: f
+                staticElement: self::@function::f
+                staticType: T* Function<T>()*
+              argumentList: ArgumentList
+                leftParenthesis: (
+                rightParenthesis: )
+              staticInvokeType: String* Function()*
+              staticType: String*
+              typeArgumentTypes
+                String*
+          rightParenthesis: )
+        staticInvokeType: num* Function(String*, String*)*
+        staticType: num*
+    rightParenthesis: )
+  staticInvokeType: dynamic Function(int*)*
+  staticType: dynamic
+''');
+    }
   }
 
   test_clamp_other_int_int() async {
@@ -412,11 +2963,62 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp(b'),
-        elementMatcher(findElement.class_('A').getMethod('clamp')),
-        'String Function(int, int)',
-        expectedType: 'String');
+    var node = findNode.methodInvocation('clamp(b');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@55
+    staticType: A
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@class::A::@method::clamp
+    staticType: String Function(int, int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@62
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@69
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: String Function(int, int)
+  staticType: String
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@55
+    staticType: A*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@class::A::@method::clamp
+    staticType: String* Function(int*, int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@62
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@69
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: String* Function(int*, int*)*
+  staticType: String*
+''');
+    }
   }
 
   test_clamp_other_int_int_via_extension_explicit() async {
@@ -430,11 +3032,84 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp(b'),
-        elementMatcher(findElement.extension_('E').getMethod('clamp')),
-        'String Function(int, int)',
-        expectedType: 'String');
+    var node = findNode.methodInvocation('clamp(b');
+    if (isNullSafetyEnabled) {
+      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@72
+          staticType: A
+      rightParenthesis: )
+    extendedType: A
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@extension::E::@method::clamp
+    staticType: String Function(int, int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@79
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@86
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: String Function(int, int)
+  staticType: String
+''');
+    } else {
+      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@72
+          staticType: A*
+      rightParenthesis: )
+    extendedType: A*
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@extension::E::@method::clamp
+    staticType: String* Function(int*, int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@79
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@86
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: String* Function(int*, int*)*
+  staticType: String*
+''');
+    }
   }
 
   test_clamp_other_int_int_via_extension_implicit() async {
@@ -448,11 +3123,62 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('clamp(b'),
-        elementMatcher(findElement.extension_('E').getMethod('clamp')),
-        'String Function(int, int)',
-        expectedType: 'String');
+    var node = findNode.methodInvocation('clamp(b');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@72
+    staticType: A
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@extension::E::@method::clamp
+    staticType: String Function(int, int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@79
+        staticType: int
+      SimpleIdentifier
+        token: c
+        staticElement: c@86
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: String Function(int, int)
+  staticType: String
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@72
+    staticType: A*
+  operator: .
+  methodName: SimpleIdentifier
+    token: clamp
+    staticElement: self::@extension::E::@method::clamp
+    staticType: String* Function(int*, int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@79
+        staticType: int*
+      SimpleIdentifier
+        token: c
+        staticElement: c@86
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: String* Function(int*, int*)*
+  staticType: String*
+''');
+    }
   }
 
   test_demoteType() async {
@@ -467,10 +3193,48 @@
 
 ''');
 
-    assertTypeArgumentTypes(
-      findNode.methodInvocation('test(s)'),
-      ['S'],
-    );
+    var node = findNode.methodInvocation('test(s)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: test
+    staticElement: self::@function::test
+    staticType: void Function<T>(T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: s
+        staticElement: s@34
+        staticType: S & int
+    rightParenthesis: )
+  staticInvokeType: void Function(S)
+  staticType: void
+  typeArgumentTypes
+    S
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: test
+    staticElement: self::@function::test
+    staticType: void Function<T>(T*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: s
+        staticElement: s@34
+        staticType: S* & int*
+    rightParenthesis: )
+  staticInvokeType: void Function(S*)*
+  staticType: void
+  typeArgumentTypes
+    S*
+''');
+    }
   }
 
   test_error_ambiguousImport_topFunction() async {
@@ -492,9 +3256,42 @@
       error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 46, 3),
     ]);
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertInvokeType(invocation, 'void Function(int)');
-    assertType(invocation, 'void');
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_error_ambiguousImport_topFunction_prefixed() async {
@@ -516,9 +3313,52 @@
       error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 58, 3),
     ]);
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertInvokeType(invocation, 'void Function(int)');
-    assertType(invocation, 'void');
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: p
+    staticElement: self::@prefix::p
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: p
+    staticElement: self::@prefix::p
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_error_instanceAccessToStaticMember_method() async {
@@ -533,13 +3373,53 @@
 ''', [
       error(CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, 59, 3),
     ]);
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo(0)'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function(int)',
-      type: 'void',
-    );
+
+    var node = findNode.methodInvocation('a.foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@50
+    staticType: A
+  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
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@50
+    staticType: A*
+  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_error_invocationOfNonFunction_interface_hasCall_field() async {
@@ -555,14 +3435,36 @@
       error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION, 69, 1),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('c();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var cRef = invocation.function as SimpleIdentifier;
-    assertElement(cRef, findElement.parameter('c'));
-    assertType(cRef, 'C');
+    var node = findNode.functionExpressionInvocation('c();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: c
+    staticElement: c@62
+    staticType: C
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: c
+    staticElement: c@62
+    staticType: C*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_OK_dynamicGetter_instance() async {
@@ -576,15 +3478,50 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as PropertyAccess;
-    assertTypeDynamic(foo);
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertTypeDynamic(foo.propertyName);
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@33
+      staticType: C
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: dynamic
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@33
+      staticType: C*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: dynamic
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_OK_dynamicGetter_superClass() async {
@@ -600,14 +3537,36 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.getter('foo'));
-    assertTypeDynamic(foo);
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_OK_dynamicGetter_thisClass() async {
@@ -621,14 +3580,36 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.getter('foo'));
-    assertTypeDynamic(foo);
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_OK_Function() async {
@@ -638,13 +3619,50 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(1, 2);');
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.parameter('foo'));
-    assertType(foo, 'Function');
+    var node = findNode.functionExpressionInvocation('foo(1, 2);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@11
+    staticType: Function
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int
+      IntegerLiteral
+        literal: 2
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@11
+    staticType: Function*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+      IntegerLiteral
+        literal: 2
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_OK_functionTypeTypeParameter() async {
@@ -661,14 +3679,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.getter('foo'));
-    assertType(foo, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_parameter() async {
@@ -680,14 +3728,36 @@
       error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION, 21, 3),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.parameter('foo'));
-    assertType(foo, 'Object');
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@12
+    staticType: Object
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@12
+    staticType: Object*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_parameter_dynamic() async {
@@ -697,14 +3767,36 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.parameter('foo'));
-    assertTypeDynamic(foo);
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@9
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@9
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_static_hasTarget() async {
@@ -720,15 +3812,50 @@
       error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION, 46, 5),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'int');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'int');
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: C
+      staticElement: self::@class::C
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: int
+    staticType: int
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: C
+      staticElement: self::@class::C
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: int*
+    staticType: int*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_static_noTarget() async {
@@ -744,14 +3871,36 @@
       error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION, 48, 3),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.getter('foo'));
-    assertType(foo, 'int');
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: int
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: int*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_invocationOfNonFunction_super_getter() async {
@@ -769,17 +3918,48 @@
       error(CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION, 68, 9),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'int');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'int');
-
-    assertSuperExpression(foo.target);
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: int
+    staticType: int
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: int*
+    staticType: int*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_prefixIdentifierNotFollowedByDot() async {
@@ -797,19 +3977,47 @@
       error(CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, 39, 6),
     ]);
 
-    var import = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.methodInvocation('foo();');
-    assertMethodInvocation(
-      invocation,
-      import.topFunction('foo'),
-      'void Function()',
-    );
-    assertImportPrefix(invocation.target, import.prefix);
+    var node = findNode.methodInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@function::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@function::foo
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_error_prefixIdentifierNotFollowedByDot_deferred() async {
-    var question = typeToStringWithNullability ? '?' : '';
     await assertErrorsInCode(r'''
 import 'dart:math' deferred as math;
 
@@ -821,16 +4029,46 @@
       error(CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, 49, 4),
     ]);
 
-    var import = findElement.importFind('dart:math');
-
-    var invocation = findNode.methodInvocation('loadLibrary()');
-    assertMethodInvocation(
-      invocation,
-      import.importedLibrary.loadLibraryFunction,
-      'Future<dynamic> Function()',
-      expectedType: 'Future<dynamic>$question',
-    );
-    assertImportPrefix(invocation.target, import.prefix);
+    var node = findNode.methodInvocation('loadLibrary()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: loadLibrary@-1
+    staticType: Future<dynamic> Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Future<dynamic> Function()
+  staticType: Future<dynamic>?
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: FunctionMember
+      base: loadLibrary@-1
+      isLegacy: true
+    staticType: Future<dynamic>* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Future<dynamic>* Function()*
+  staticType: Future<dynamic>*
+''');
+    }
   }
 
   test_error_prefixIdentifierNotFollowedByDot_invoke() async {
@@ -843,11 +4081,35 @@
 ''', [
       error(CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, 39, 3),
     ]);
-    _assertInvalidInvocation(
-      'foo()',
-      findElement.import('dart:math').prefix,
-      dynamicNameType: true,
-    );
+
+    var node = findNode.methodInvocation('foo()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@prefix::foo
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@prefix::foo
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedFunction() async {
@@ -858,7 +4120,43 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_FUNCTION, 11, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0)');
+
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedFunction_hasTarget_importPrefix() async {
@@ -871,7 +4169,53 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_FUNCTION, 45, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedIdentifier_target() async {
@@ -882,7 +4226,53 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 11, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: bar
+    staticElement: <null>
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: bar
+    staticElement: <null>
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_hasTarget_class() async {
@@ -894,7 +4284,53 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 24, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_hasTarget_class_arguments() async {
@@ -909,7 +4345,54 @@
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 36, 3),
     ]);
 
-    _assertUnresolvedMethodInvocation('foo(x);');
+    var node = findNode.methodInvocation('foo(x);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: x
+        staticElement: self::@getter::x
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: x
+        staticElement: self::@getter::x
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
     assertTopGetRef('x)', 'x');
   }
 
@@ -927,7 +4410,53 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 76, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_hasTarget_class_typeArguments() async {
@@ -941,11 +4470,68 @@
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 25, 3),
     ]);
 
-    _assertUnresolvedMethodInvocation(
-      'foo<int>();',
-      expectedTypeArguments: ['int'],
-    );
-    assertNamedType(findNode.namedType('int>'), intElement, 'int');
+    var node = findNode.methodInvocation('foo<int>();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int*
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+  typeArgumentTypes
+    int*
+''');
+    }
   }
 
   test_error_undefinedMethod_hasTarget_class_typeParameter() async {
@@ -956,7 +4542,45 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 34, 1),
     ]);
-    _assertUnresolvedMethodInvocation('C.T();');
+
+    var node = findNode.methodInvocation('C.T();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: T
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: T
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_hasTarget_instance() async {
@@ -967,7 +4591,51 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 14, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: IntegerLiteral
+    literal: 42
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: IntegerLiteral
+    literal: 42
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_hasTarget_localVariable_function() async {
@@ -979,7 +4647,53 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 30, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: v
+    staticElement: v@15
+    staticType: Null Function()
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: v
+    staticElement: v@15
+    staticType: Null* Function()*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_noTarget() async {
@@ -992,7 +4706,43 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 25, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_null() async {
@@ -1001,12 +4751,48 @@
   null.foo();
 }
 ''', [
-      if (typeToStringWithNullability)
+      if (isNullSafetyEnabled)
         error(CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE, 16, 3)
       else
         error(CompileTimeErrorCode.UNDEFINED_METHOD, 16, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo();');
+
+    var node = findNode.methodInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: NullLiteral
+    literal: null
+    staticType: Null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: NullLiteral
+    literal: null
+    staticType: Null*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_object_call() async {
@@ -1036,7 +4822,43 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_METHOD, 53, 4),
     ]);
-    _assertUnresolvedMethodInvocation('_foo(0);');
+
+    var node = findNode.methodInvocation('_foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: _foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: _foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_undefinedMethod_typeLiteral_cascadeTarget() async {
@@ -1078,8 +4900,51 @@
 ''', [
       error(CompileTimeErrorCode.UNDEFINED_SUPER_METHOD, 62, 3),
     ]);
-    _assertUnresolvedMethodInvocation('foo(0);');
-    assertSuperExpression(findNode.super_('super.foo'));
+
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SuperExpression
+    superKeyword: super
+    staticType: B*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_unqualifiedReferenceToNonLocalStaticMember_method() async {
@@ -1101,13 +4966,42 @@
       error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 75, 1),
     ]);
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('foo(0)'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   /// The primary purpose of this test is to ensure that we are only getting a
@@ -1124,8 +5018,53 @@
 ''', [
       error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 7, 14),
     ]);
-    _assertUnresolvedMethodInvocation('foo(1);');
-    _assertUnresolvedMethodInvocation('bar(2);');
+
+    var node = findNode.methodInvocation('foo(1);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: p
+    staticElement: self::@prefix::p
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: p
+    staticElement: self::@prefix::p
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   /// The primary purpose of this test is to ensure that we are only getting a
@@ -1142,8 +5081,43 @@
 ''', [
       error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 7, 14),
     ]);
-    _assertUnresolvedMethodInvocation('foo(1);');
-    _assertUnresolvedMethodInvocation('bar(2);');
+
+    var node = findNode.methodInvocation('foo(1);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_useOfVoidResult_name_getter() async {
@@ -1160,15 +5134,54 @@
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 61, 5),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'void');
-    assertMember(foo.propertyName, findElement.getter('foo'), {'T': 'void'});
-    assertType(foo.propertyName, 'void');
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@54
+      staticType: C<void>
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: PropertyAccessorMember
+        base: self::@class::C::@getter::foo
+        substitution: {T: void}
+      staticType: void
+    staticType: void
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@54
+      staticType: C<void>*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: PropertyAccessorMember
+        base: self::@class::C::@getter::foo
+        substitution: {T: void}
+      staticType: void
+    staticType: void
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_useOfVoidResult_name_localVariable() async {
@@ -1181,14 +5194,36 @@
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.localVar('foo'));
-    assertType(foo, 'void');
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_useOfVoidResult_name_topFunction() async {
@@ -1201,11 +5236,35 @@
 ''', [
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 3),
     ]);
-    assertMethodInvocation(
-      findNode.methodInvocation('foo()()'),
-      findElement.topFunction('foo'),
-      'void Function()',
-    );
+
+    var node = findNode.methodInvocation('foo()()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_error_useOfVoidResult_name_topVariable() async {
@@ -1219,14 +5278,36 @@
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 22, 3),
     ]);
 
-    var invocation = findNode.functionExpressionInvocation('foo();');
-    assertElementNull(invocation);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.topGet('foo'));
-    assertType(foo, 'void');
+    var node = findNode.functionExpressionInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: void
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: void
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_useOfVoidResult_receiver() async {
@@ -1238,13 +5319,45 @@
 ''', [
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
     ]);
-    assertMethodInvocation2(
-      findNode.methodInvocation('toString()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+
+    var node = findNode.methodInvocation('toString()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_useOfVoidResult_receiver_cascade() async {
@@ -1256,13 +5369,37 @@
 ''', [
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
     ]);
-    assertMethodInvocation2(
-      findNode.methodInvocation('toString()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+
+    var node = findNode.methodInvocation('toString()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  operator: ..
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  operator: ..
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_useOfVoidResult_receiver_withNull() async {
@@ -1274,13 +5411,45 @@
 ''', [
       error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
     ]);
-    assertMethodInvocation2(
-      findNode.methodInvocation('toString()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+
+    var node = findNode.methodInvocation('toString()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_error_wrongNumberOfTypeArgumentsMethod_01() async {
@@ -1293,11 +5462,55 @@
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD, 29, 5),
     ]);
-    assertMethodInvocation(
-      findNode.methodInvocation('foo<int>()'),
-      findElement.topFunction('foo'),
-      'void Function()',
-    );
+
+    var node = findNode.methodInvocation('foo<int>()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function()*
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int*
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
     assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
@@ -1311,12 +5524,61 @@
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD, 67, 5),
     ]);
-    assertMethodInvocation(
-      findNode.methodInvocation('foo<int>()'),
-      findElement.topFunction('foo'),
-      'Map<dynamic, dynamic> Function()',
-      expectedTypeArguments: ['dynamic', 'dynamic'],
-    );
+
+    var node = findNode.methodInvocation('foo<int>()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: Map<T, U> Function<T extends num, U>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Map<dynamic, dynamic> Function()
+  staticType: Map<dynamic, dynamic>
+  typeArgumentTypes
+    dynamic
+    dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: Map<T*, U*>* Function<T extends num*, U>()*
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int*
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Map<dynamic, dynamic>* Function()*
+  staticType: Map<dynamic, dynamic>*
+  typeArgumentTypes
+    dynamic
+    dynamic
+''');
+    }
     assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
@@ -1331,16 +5593,58 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as PropertyAccess;
-    assertClassRef(foo.target, findElement.class_('C'));
-    assertType(foo, 'double Function(int)');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: C
+      staticElement: self::@class::C
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: double Function(int)
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: C
+      staticElement: self::@class::C
+      staticType: null
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: double* Function(int*)*
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_hasReceiver_class_staticMethod() async {
@@ -1354,13 +5658,53 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0);');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo'),
-      'void Function(int)',
-    );
-    assertClassRef(invocation.target, findElement.class_('C'));
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: C
+    staticElement: self::@class::C
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
+    assertClassRef(node.target, findElement.class_('C'));
   }
 
   test_hasReceiver_deferredImportPrefix_loadLibrary() async {
@@ -1374,16 +5718,46 @@
       error(HintCode.UNUSED_IMPORT, 7, 11),
     ]);
 
-    var import = findElement.importFind('dart:math');
-
-    var invocation = findNode.methodInvocation('loadLibrary()');
-    assertImportPrefix(invocation.target, import.prefix);
-
-    assertMethodInvocation(
-      invocation,
-      import.importedLibrary.loadLibraryFunction,
-      'Future<dynamic> Function()',
-    );
+    var node = findNode.methodInvocation('loadLibrary()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: loadLibrary@-1
+    staticType: Future<dynamic> Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Future<dynamic> Function()
+  staticType: Future<dynamic>
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: FunctionMember
+      base: loadLibrary@-1
+      isLegacy: true
+    staticType: Future<dynamic>* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: Future<dynamic>* Function()*
+  staticType: Future<dynamic>*
+''');
+    }
   }
 
   test_hasReceiver_deferredImportPrefix_loadLibrary_extraArgument() async {
@@ -1398,18 +5772,72 @@
       error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 66, 5),
     ]);
 
-    var import = findElement.importFind('dart:math');
-
-    var invocation = findNode.methodInvocation('loadLibrary(1 + 2)');
-    assertImportPrefix(invocation.target, import.prefix);
-
-    assertMethodInvocation(
-      invocation,
-      import.importedLibrary.loadLibraryFunction,
-      'Future<dynamic> Function()',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    var node = findNode.methodInvocation('loadLibrary(1 + 2)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: loadLibrary@-1
+    staticType: Future<dynamic> 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: Future<dynamic> Function()
+  staticType: Future<dynamic>
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: loadLibrary
+    staticElement: FunctionMember
+      base: loadLibrary@-1
+      isLegacy: true
+    staticType: Future<dynamic>* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      BinaryExpression
+        leftOperand: IntegerLiteral
+          literal: 1
+          staticType: int*
+        operator: +
+        rightOperand: IntegerLiteral
+          literal: 2
+          staticType: int*
+        staticElement: MethodMember
+          base: dart:core::@class::num::@method::+
+          isLegacy: true
+        staticInvokeType: num* Function(num*)*
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: Future<dynamic>* Function()*
+  staticType: Future<dynamic>*
+''');
+    }
   }
 
   test_hasReceiver_dynamic_hash() async {
@@ -1418,13 +5846,59 @@
   a.hash(0, 1);
 }
 ''');
-    assertMethodInvocation2(
-      findNode.methodInvocation('hash('),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+
+    var node = findNode.methodInvocation('hash(');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@15
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: hash
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+      IntegerLiteral
+        literal: 1
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@15
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: hash
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_hasReceiver_functionTyped() async {
@@ -1436,14 +5910,52 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('call(0)');
-    assertMethodInvocation(
-      invocation,
-      null,
-      'void Function(int)',
-    );
-    assertElement(invocation.target, findElement.topFunction('foo'));
-    assertType(invocation.target, 'void Function(int)');
+    var node = findNode.methodInvocation('call(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(int)
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(int*)*
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_hasReceiver_functionTyped_generic() async {
@@ -1455,15 +5967,56 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('call(0)');
-    assertMethodInvocation(
-      invocation,
-      null,
-      'void Function(int)',
-      expectedTypeArguments: ['int'],
-    );
-    assertElement(invocation.target, findElement.topFunction('foo'));
-    assertType(invocation.target, 'void Function<T>(T)');
+    var node = findNode.methodInvocation('call(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>(T)
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>(T*)*
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+  typeArgumentTypes
+    int*
+''');
+    }
   }
 
   test_hasReceiver_importPrefix_topFunction() async {
@@ -1479,16 +6032,62 @@
 }
 ''');
 
-    var import = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.methodInvocation('foo(1, 2)');
-    assertMethodInvocation(
-      invocation,
-      import.topFunction('foo'),
-      'int Function(int, int)',
-      expectedTypeArguments: ['int'],
-    );
-    assertImportPrefix(invocation.target, import.prefix);
+    var node = findNode.methodInvocation('foo(1, 2)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@function::foo
+    staticType: T Function<T extends num>(T, T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int
+      IntegerLiteral
+        literal: 2
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: int Function(int, int)
+  staticType: int
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@function::foo
+    staticType: T* Function<T extends num*>(T*, T*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+      IntegerLiteral
+        literal: 2
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: int* Function(int*, int*)*
+  staticType: int*
+  typeArgumentTypes
+    int*
+''');
+    }
   }
 
   test_hasReceiver_importPrefix_topGetter() async {
@@ -1504,19 +6103,70 @@
 }
 ''');
 
-    var import = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.functionExpressionInvocation('foo(1, 2);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'int Function(int, int)');
-    assertType(invocation, 'int');
-
-    var foo = invocation.function as PrefixedIdentifier;
-    assertType(foo, 'T Function<T>(T, T)');
-    assertElement(foo.identifier, import.topGet('foo'));
-    assertType(foo.identifier, 'T Function<T>(T, T)');
-
-    assertImportPrefix(foo.prefix, import.prefix);
+    var node = findNode.functionExpressionInvocation('foo(1, 2);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@getter::foo
+      staticType: T Function<T>(T, T)
+    staticElement: package:test/a.dart::@getter::foo
+    staticType: T Function<T>(T, T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int
+      IntegerLiteral
+        literal: 2
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: int Function(int, int)
+  staticType: int
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@getter::foo
+      staticType: T* Function<T>(T*, T*)*
+    staticElement: package:test/a.dart::@getter::foo
+    staticType: T* Function<T>(T*, T*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+      IntegerLiteral
+        literal: 2
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: int* Function(int*, int*)*
+  staticType: int*
+  typeArgumentTypes
+    int*
+''');
+    }
   }
 
   test_hasReceiver_instance_Function_call_localVariable() async {
@@ -1527,7 +6177,53 @@
   foo.call(0);
 }
 ''');
-    _assertInvalidInvocation('call(0)', null);
+
+    var node = findNode.methodInvocation('call(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@44
+    staticType: Function
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: foo@44
+    staticType: Function*
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_hasReceiver_instance_Function_call_topVariable() async {
@@ -1538,7 +6234,53 @@
   foo.call(0);
 }
 ''');
-    _assertInvalidInvocation('call(0)', null);
+
+    var node = findNode.methodInvocation('call(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: Function
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: Function*
+  operator: .
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_hasReceiver_instance_getter() async {
@@ -1552,15 +6294,58 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'double Function(int)');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@71
+      staticType: C
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: double Function(int)
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@71
+      staticType: C*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: double* Function(int*)*
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   /// It is important to use this expression as an initializer of a top-level
@@ -1581,19 +6366,44 @@
 var v = C()..foo(0) = 0;
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0)');
-    assertFunctionExpressionInvocation(
-      invocation,
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'double Function(int)',
-      type: 'double',
-    );
-    assertSimpleIdentifier(
-      invocation.function,
-      element: findElement.getter('foo'),
-      type: 'double Function(int)',
-    );
+    var node = findNode.functionExpressionInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_hasReceiver_instance_getter_switchStatementExpression() async {
@@ -1610,15 +6420,50 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo()');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'int Function()');
-    assertType(invocation, 'int');
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'int Function()');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'int Function()');
+    var node = findNode.functionExpressionInvocation('foo()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@65
+      staticType: C
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: int Function()
+    staticType: int Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: int Function()
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SimpleIdentifier
+      token: c
+      staticElement: c@65
+      staticType: C*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::C::@getter::foo
+      staticType: int* Function()*
+    staticType: int* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: int* Function()*
+  staticType: int*
+''');
+    }
   }
 
   test_hasReceiver_instance_method() async {
@@ -1632,14 +6477,52 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0);');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo'),
-      'void Function(int)',
-      expectedMethodNameType: 'void Function(int)',
-    );
-    assertTypeArgumentTypes(invocation, []);
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: c
+    staticElement: c@43
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: c
+    staticElement: c@43
+    staticType: C*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_hasReceiver_instance_method_generic() async {
@@ -1655,15 +6538,56 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0);');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo'),
-      'int Function(int)',
-      expectedMethodNameType: 'int Function(int)',
-      expectedTypeArguments: ['int'],
-    );
-    assertTypeArgumentTypes(invocation, ['int']);
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: c
+    staticElement: c@58
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: T Function<T>(T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: int Function(int)
+  staticType: int
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: c
+    staticElement: c@58
+    staticType: C*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: T* Function<T>(T*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: int* Function(int*)*
+  staticType: int*
+  typeArgumentTypes
+    int*
+''');
+    }
   }
 
   test_hasReceiver_instance_method_issue30552() async {
@@ -1687,12 +6611,50 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation("foo('hi')");
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo', of: 'I2'),
-      'void Function(Object)',
-    );
+    var node = findNode.methodInvocation("foo('hi')");
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: c
+    staticElement: c@182
+    staticType: C
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::I2::@method::foo
+    staticType: void Function(Object)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: 'hi'
+    rightParenthesis: )
+  staticInvokeType: void Function(Object)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: c
+    staticElement: c@182
+    staticType: C*
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::I2::@method::foo
+    staticType: void Function(Object*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleStringLiteral
+        literal: 'hi'
+    rightParenthesis: )
+  staticInvokeType: void Function(Object*)*
+  staticType: void
+''');
+    }
   }
 
   test_hasReceiver_instance_typeParameter() async {
@@ -1711,12 +6673,52 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0);');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo'),
-      'void Function(int)',
-    );
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: self::@class::C::@getter::a
+    staticType: T
+  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
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: self::@class::C::@getter::a
+    staticType: T*
+  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_hasReceiver_prefixed_class_staticGetter() async {
@@ -1734,21 +6736,74 @@
 }
 ''');
 
-    var import = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'double Function(int)');
-    assertElement(foo.propertyName, import.class_('C').getGetter('foo'));
-    assertType(foo.propertyName, 'double Function(int)');
-
-    var target = foo.target as PrefixedIdentifier;
-    assertImportPrefix(target.prefix, import.prefix);
-    assertClassRef(target.identifier, import.class_('C'));
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        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
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::C::@getter::foo
+      staticType: double Function(int)
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: PrefixedIdentifier
+      prefix: SimpleIdentifier
+        token: prefix
+        staticElement: self::@prefix::prefix
+        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
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: package:test/a.dart::@class::C::@getter::foo
+      staticType: double* Function(int*)*
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_hasReceiver_prefixed_class_staticMethod() async {
@@ -1766,18 +6821,68 @@
 }
 ''');
 
-    var import = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertMethodInvocation(
-      invocation,
-      import.class_('C').getMethod('foo'),
-      'void Function(int)',
-    );
-
-    var target = invocation.target as PrefixedIdentifier;
-    assertImportPrefix(target.prefix, import.prefix);
-    assertClassRef(target.identifier, import.class_('C'));
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      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
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@class::C::@method::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      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
+  operator: .
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@class::C::@method::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_hasReceiver_super_getter() async {
@@ -1793,17 +6898,56 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'double Function(int)');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'double Function(int)');
-
-    assertSuperExpression(foo.target);
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: double Function(int)
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: double* Function(int*)*
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_hasReceiver_super_method() async {
@@ -1819,13 +6963,50 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0);');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo', of: 'A'),
-      'void Function(int)',
-    );
-    assertSuperExpression(invocation.target);
+    var node = findNode.methodInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      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
+''');
+    } else {
+      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_invalid_inDefaultValue_nullAware() async {
@@ -1833,13 +7014,44 @@
 void f({a = b?.foo()}) {}
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('?.foo()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+    var node = findNode.methodInvocation('?.foo()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: b
+    staticElement: <null>
+    staticType: dynamic
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: b
+    staticElement: <null>
+    staticType: dynamic
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_invalid_inDefaultValue_nullAware2() async {
@@ -1847,17 +7059,48 @@
 typedef void F({a = b?.foo()});
 ''');
 
-    assertMethodInvocation2(
-      findNode.methodInvocation('?.foo()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+    var node = findNode.methodInvocation('?.foo()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: b
+    staticElement: <null>
+    staticType: dynamic
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: b
+    staticElement: <null>
+    staticType: dynamic
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_namedArgument() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     await assertNoErrorsInCode('''
 void foo({int$question a, bool$question b}) {}
 
@@ -1866,14 +7109,76 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(b:');
-    assertMethodInvocation(
-      invocation,
-      findElement.topFunction('foo'),
-      'void Function({int$question a, bool$question b})',
-    );
-    assertNamedParameterRef('b: false', 'b');
-    assertNamedParameterRef('a: 0', 'a');
+    var node = findNode.methodInvocation('foo(b:');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function({int? a, bool? b})
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: b
+            staticElement: self::@function::foo::@parameter::b
+            staticType: null
+          colon: :
+        expression: BooleanLiteral
+          literal: false
+          staticType: bool
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: a
+            staticElement: self::@function::foo::@parameter::a
+            staticType: null
+          colon: :
+        expression: IntegerLiteral
+          literal: 0
+          staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function({int? a, bool? b})
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function({int* a, bool* b})*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: b
+            staticElement: self::@function::foo::@parameter::b
+            staticType: null
+          colon: :
+        expression: BooleanLiteral
+          literal: false
+          staticType: bool*
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: a
+            staticElement: self::@function::foo::@parameter::a
+            staticType: null
+          colon: :
+        expression: IntegerLiteral
+          literal: 0
+          staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function({int* a, bool* b})*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_getter_superClass() async {
@@ -1889,14 +7194,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.getter('foo'));
-    assertType(foo, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_noReceiver_getter_thisClass() async {
@@ -1910,14 +7245,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.getter('foo'));
-    assertType(foo, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@getter::foo
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_noReceiver_importPrefix() async {
@@ -1930,7 +7295,35 @@
 ''', [
       error(CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, 40, 4),
     ]);
-    assertElement(findNode.simple('math()'), findElement.prefix('math'));
+
+    var node = findNode.methodInvocation('math()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: math
+    staticElement: self::@prefix::math
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_noReceiver_localFunction() async {
@@ -1942,12 +7335,42 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertMethodInvocation(
-      invocation,
-      findElement.localFunction('foo'),
-      'void Function(int)',
-    );
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: foo@16
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_localVariable_call() async {
@@ -1961,14 +7384,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('c(0);');
-    assertElement(invocation, findElement.method('call', of: 'C'));
-    assertInvokeType(invocation, 'void Function(int)');
-    assertType(invocation, 'void');
-
-    var cRef = invocation.function as SimpleIdentifier;
-    assertElement(cRef, findElement.parameter('c'));
-    assertType(cRef, 'C');
+    var node = findNode.functionExpressionInvocation('c(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: c
+    staticElement: c@44
+    staticType: C
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: self::@class::C::@method::call
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: c
+    staticElement: c@44
+    staticType: C*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: self::@class::C::@method::call
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_localVariable_promoted() async {
@@ -1981,14 +7434,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'void Function(int)');
-    assertType(invocation, 'void');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.localVar('foo'));
-    assertType(foo, 'void Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@15
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@15
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_method_superClass() async {
@@ -2004,12 +7487,42 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo'),
-      'void Function(int)',
-    );
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  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
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  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_noReceiver_method_thisClass() async {
@@ -2023,12 +7536,42 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertMethodInvocation(
-      invocation,
-      findElement.method('foo'),
-      'void Function(int)',
-    );
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::C::@method::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_parameter() async {
@@ -2038,18 +7581,48 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'void Function(int)');
-    assertType(invocation, 'void');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.parameter('foo'));
-    assertType(foo, 'void Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@26
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: foo@26
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_parameter_call_nullAware() async {
-    var question = typeToStringWithNullability ? '?' : '';
+    var question = isNullSafetyEnabled ? '?' : '';
     await assertNoErrorsInCode('''
 double Function(int)$question foo;
 
@@ -2058,11 +7631,51 @@
 }
     ''');
 
-    var invocation = findNode.methodInvocation('call(1)');
-    if (typeToStringWithNullability) {
-      assertType(invocation.target, 'double Function(int)?');
+    var node = findNode.methodInvocation('call(1)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: double Function(int)?
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: double Function(int)
+  staticType: double?
+''');
     } else {
-      assertTypeLegacy(invocation.target);
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: double* Function(int*)*
+  operator: ?.
+  methodName: SimpleIdentifier
+    token: call
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 1
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
     }
   }
 
@@ -2075,18 +7688,36 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('a();');
-    assertFunctionExpressionInvocation(
-      invocation,
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
-
-    var aRef = invocation.function as SimpleIdentifier;
-    assertElement(aRef, findElement.parameter('a'));
-    assertType(aRef, 'void Function()');
+    var node = findNode.functionExpressionInvocation('a();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: a
+    staticElement: a@39
+    staticType: void Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function()
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: a
+    staticElement: a@39
+    staticType: void Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function()*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_topFunction() async {
@@ -2098,13 +7729,42 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertMethodInvocation(
-      invocation,
-      findElement.topFunction('foo'),
-      'void Function(int)',
-      expectedMethodNameType: 'void Function(int)',
-    );
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_noReceiver_topGetter() async {
@@ -2116,14 +7776,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'double Function(int)');
-    assertType(invocation, 'double');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.topGet('foo'));
-    assertType(foo, 'double Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: double Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double Function(int)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: double* Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: double* Function(int*)*
+  staticType: double*
+''');
+    }
   }
 
   test_noReceiver_topVariable() async {
@@ -2135,14 +7825,44 @@
 }
 ''');
 
-    var invocation = findNode.functionExpressionInvocation('foo(0);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'void Function(int)');
-    assertType(invocation, 'void');
-
-    var foo = invocation.function as SimpleIdentifier;
-    assertElement(foo, findElement.topGet('foo'));
-    assertType(foo, 'void Function(int)');
+    var node = findNode.functionExpressionInvocation('foo(0);');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+FunctionExpressionInvocation
+  function: SimpleIdentifier
+    token: foo
+    staticElement: self::@getter::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticElement: <null>
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
+    }
   }
 
   test_objectMethodOnDynamic_argumentsDontMatch() async {
@@ -2151,15 +7871,55 @@
   a.toString(b);
 }
 ''');
-    assertMethodInvocation2(
-      findNode.methodInvocation('toString(b)'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
 
-    assertType(findNode.simple('b);'), 'int');
+    var node = findNode.methodInvocation('toString(b)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@14
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@14
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
   }
 
   test_objectMethodOnDynamic_argumentsMatch() async {
@@ -2168,16 +7928,47 @@
   a.toString();
 }
 ''');
-    assertMethodInvocation2(
-      findNode.methodInvocation('toString()'),
-      element: elementMatcher(
-        objectElement.getMethod('toString'),
-        isLegacy: isLegacyLibrary,
-      ),
-      typeArgumentTypes: [],
-      invokeType: 'String Function()',
-      type: 'String',
-    );
+
+    var node = findNode.methodInvocation('toString()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: dart:core::@class::Object::@method::toString
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: String Function()
+  staticType: String
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@7
+    staticType: dynamic
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: MethodMember
+      base: dart:core::@class::Object::@method::toString
+      isLegacy: true
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: String* Function()*
+  staticType: String*
+''');
+    }
   }
 
   test_objectMethodOnFunction() async {
@@ -2189,12 +7980,46 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('toString();');
-    assertMethodInvocation(
-      invocation,
-      typeProvider.objectType.getMethod('toString'),
-      'String Function()',
-    );
+    var node = findNode.methodInvocation('toString();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: void Function()
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: dart:core::@class::Object::@method::toString
+    staticType: String Function()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: String Function()
+  staticType: String
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: void Function()*
+  operator: .
+  methodName: SimpleIdentifier
+    token: toString
+    staticElement: MethodMember
+      base: dart:core::@class::Object::@method::toString
+      isLegacy: true
+    staticType: String* Function()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: String* Function()*
+  staticType: String*
+''');
+    }
   }
 
   test_remainder_int_context_cascaded() async {
@@ -2206,7 +8031,38 @@
 h(int x) {}
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'), ['num']);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num Function()
+  staticType: num
+  typeArgumentTypes
+    num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_remainder_int_context_int() async {
@@ -2218,8 +8074,38 @@
 h(int x) {}
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'),
-        [typeStringByNullability(nullable: 'int', legacy: 'num')]);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: int Function()
+  staticType: int
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_remainder_int_context_int_target_rewritten() async {
@@ -2231,8 +8117,38 @@
 h(int x) {}
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'),
-        [typeStringByNullability(nullable: 'int', legacy: 'num')]);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: int Function()
+  staticType: int
+  typeArgumentTypes
+    int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_remainder_int_context_int_via_extension_explicit() async {
@@ -2249,7 +8165,38 @@
       error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 98, 19),
     ]);
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'), ['num']);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num Function()
+  staticType: num
+  typeArgumentTypes
+    num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_remainder_int_context_none() async {
@@ -2260,7 +8207,38 @@
 }
 ''');
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'), ['num']);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num Function()
+  staticType: num
+  typeArgumentTypes
+    num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_remainder_int_double() async {
@@ -2270,13 +8248,56 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('remainder'),
-        elementMatcher(numElement.getMethod('remainder'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num)',
-        expectedType:
-            typeStringByNullability(nullable: 'double', legacy: 'num'));
+    var node = findNode.methodInvocation('remainder');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: remainder
+    staticElement: dart:core::@class::num::@method::remainder
+    staticType: num Function(num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double
+    rightParenthesis: )
+  staticInvokeType: num Function(num)
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: remainder
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::remainder
+      isLegacy: true
+    staticType: num* Function(num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@16
+        staticType: double*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_remainder_int_int() async {
@@ -2286,12 +8307,56 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('remainder'),
-        elementMatcher(numElement.getMethod('remainder'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num)',
-        expectedType: typeStringByNullability(nullable: 'int', legacy: 'num'));
+    var node = findNode.methodInvocation('remainder');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: remainder
+    staticElement: dart:core::@class::num::@method::remainder
+    staticType: num Function(num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@6
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: remainder
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::remainder
+      isLegacy: true
+    staticType: num* Function(num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@13
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_remainder_int_int_target_rewritten() async {
@@ -2301,12 +8366,70 @@
 }
 ''');
 
-    assertMethodInvocation(
-        findNode.methodInvocation('remainder'),
-        elementMatcher(numElement.getMethod('remainder'),
-            isLegacy: isLegacyLibrary),
-        'num Function(num)',
-        expectedType: typeStringByNullability(nullable: 'int', legacy: 'num'));
+    var node = findNode.methodInvocation('remainder');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: FunctionExpressionInvocation
+    function: SimpleIdentifier
+      token: a
+      staticElement: a@17
+      staticType: int Function()
+    argumentList: ArgumentList
+      leftParenthesis: (
+      rightParenthesis: )
+    staticElement: <null>
+    staticInvokeType: int Function()
+    staticType: int
+  operator: .
+  methodName: SimpleIdentifier
+    token: remainder
+    staticElement: dart:core::@class::num::@method::remainder
+    staticType: num Function(num)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@24
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: num Function(num)
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  target: FunctionExpressionInvocation
+    function: SimpleIdentifier
+      token: a
+      staticElement: a@17
+      staticType: int* Function()*
+    argumentList: ArgumentList
+      leftParenthesis: (
+      rightParenthesis: )
+    staticElement: <null>
+    staticInvokeType: int* Function()*
+    staticType: int*
+  operator: .
+  methodName: SimpleIdentifier
+    token: remainder
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::remainder
+      isLegacy: true
+    staticType: num* Function(num*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      SimpleIdentifier
+        token: b
+        staticElement: b@24
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: num* Function(num*)*
+  staticType: num*
+''');
+    }
   }
 
   test_remainder_other_context_int_via_extension_explicit() async {
@@ -2324,7 +8447,38 @@
       error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 105, 19),
     ]);
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'), ['num']);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num Function()
+  staticType: num
+  typeArgumentTypes
+    num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_remainder_other_context_int_via_extension_implicit() async {
@@ -2342,7 +8496,38 @@
       error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 105, 16),
     ]);
 
-    assertTypeArgumentTypes(findNode.methodInvocation('f()'), ['num']);
+    var node = findNode.methodInvocation('f()');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T Function<T>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num Function()
+  staticType: num
+  typeArgumentTypes
+    num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: f
+    staticElement: self::@function::f
+    staticType: T* Function<T>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: num* Function()*
+  staticType: num*
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_syntheticName() async {
@@ -2358,13 +8543,76 @@
       error(CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, 18, 13),
     ]);
 
-    assertMethodInvocation2(
-      findNode.methodInvocation(');'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
+    var node = findNode.methodInvocation(');');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: <empty> <synthetic>
+    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
+      ListLiteral
+        leftBracket: [
+        elements
+          IntegerLiteral
+            literal: 0
+            staticType: int
+        rightBracket: ]
+        staticType: List<int>
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: <empty> <synthetic>
+    staticElement: <null>
+    staticType: dynamic
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      BinaryExpression
+        leftOperand: IntegerLiteral
+          literal: 1
+          staticType: int*
+        operator: +
+        rightOperand: IntegerLiteral
+          literal: 2
+          staticType: int*
+        staticElement: MethodMember
+          base: dart:core::@class::num::@method::+
+          isLegacy: true
+        staticInvokeType: num* Function(num*)*
+        staticType: int*
+      ListLiteral
+        leftBracket: [
+        elements
+          IntegerLiteral
+            literal: 0
+            staticType: int*
+        rightBracket: ]
+        staticType: List<int*>*
+    rightParenthesis: )
+  staticInvokeType: dynamic
+  staticType: dynamic
+''');
+    }
 
     assertType(findNode.binary('1 + 2'), 'int');
     assertType(findNode.listLiteral('[0]'), 'List<int>');
@@ -2381,8 +8629,48 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 52, 1),
     ]);
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertTypeArgumentTypes(invocation, ['int', 'bool']);
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: U Function<T, U>(T)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: bool Function(int)
+  staticType: bool
+  typeArgumentTypes
+    int
+    bool
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: U* Function<T, U>(T*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: bool* Function(int*)*
+  staticType: bool*
+  typeArgumentTypes
+    int*
+    bool*
+''');
+    }
   }
 
   test_typeArgumentTypes_generic_instantiateToBounds() async {
@@ -2394,8 +8682,38 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo();');
-    assertTypeArgumentTypes(invocation, ['num']);
+    var node = findNode.methodInvocation('foo();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T extends num>()
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+  typeArgumentTypes
+    num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T extends num*>()*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+  typeArgumentTypes
+    num*
+''');
+    }
   }
 
   test_typeArgumentTypes_generic_typeArguments_notBounds() async {
@@ -2408,8 +8726,59 @@
 ''', [
       error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 45, 4),
     ]);
-    var invocation = findNode.methodInvocation('foo<bool>();');
-    assertTypeArgumentTypes(invocation, ['bool']);
+
+    var node = findNode.methodInvocation('foo<bool>();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T extends num>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: bool
+          staticElement: dart:core::@class::bool
+          staticType: null
+        type: bool
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+  typeArgumentTypes
+    bool
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T extends num*>()*
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: bool
+          staticElement: dart:core::@class::bool
+          staticType: null
+        type: bool*
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+  typeArgumentTypes
+    bool*
+''');
+    }
   }
 
   test_typeArgumentTypes_generic_typeArguments_wrongNumber() async {
@@ -2422,8 +8791,71 @@
 ''', [
       error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD, 32, 13),
     ]);
-    var invocation = findNode.methodInvocation('foo<int, double>();');
-    assertTypeArgumentTypes(invocation, ['dynamic']);
+
+    var node = findNode.methodInvocation('foo<int, double>();');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int
+      NamedType
+        name: SimpleIdentifier
+          token: double
+          staticElement: dart:core::@class::double
+          staticType: null
+        type: double
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()
+  staticType: void
+  typeArgumentTypes
+    dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function<T>()*
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: SimpleIdentifier
+          token: int
+          staticElement: dart:core::@class::int
+          staticType: null
+        type: int*
+      NamedType
+        name: SimpleIdentifier
+          token: double
+          staticElement: dart:core::@class::double
+          staticType: null
+        type: double*
+    rightBracket: >
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  staticInvokeType: void Function()*
+  staticType: void
+  typeArgumentTypes
+    dynamic
+''');
+    }
   }
 
   test_typeArgumentTypes_notGeneric() async {
@@ -2435,596 +8867,46 @@
 }
 ''');
 
-    var invocation = findNode.methodInvocation('foo(0)');
-    assertTypeArgumentTypes(invocation, []);
-  }
-
-  void _assertInvalidInvocation(String search, Element? expectedElement,
-      {String? expectedMethodNameType,
-      String? expectedNameType,
-      List<String> expectedTypeArguments = const <String>[],
-      bool dynamicNameType = false}) {
-    var invocation = findNode.methodInvocation(search);
-    if (dynamicNameType) {
-      assertTypeDynamic(invocation.methodName);
+    var node = findNode.methodInvocation('foo(0)');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(int)
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int
+    rightParenthesis: )
+  staticInvokeType: void Function(int)
+  staticType: void
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+MethodInvocation
+  methodName: SimpleIdentifier
+    token: foo
+    staticElement: self::@function::foo
+    staticType: void Function(int*)*
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      IntegerLiteral
+        literal: 0
+        staticType: int*
+    rightParenthesis: )
+  staticInvokeType: void Function(int*)*
+  staticType: void
+''');
     }
-    // TODO(scheglov) I think `invokeType` should be `null`.
-    assertMethodInvocation(
-      invocation,
-      expectedElement,
-      'dynamic',
-      expectedMethodNameType: expectedMethodNameType,
-      expectedNameType: expectedNameType,
-      expectedType: 'dynamic',
-      expectedTypeArguments: expectedTypeArguments,
-    );
-    assertTypeArgumentTypes(invocation, expectedTypeArguments);
-  }
-
-  void _assertUnresolvedMethodInvocation(
-    String search, {
-    List<String> expectedTypeArguments = const <String>[],
-  }) {
-    // TODO(scheglov) clean up
-    _assertInvalidInvocation(
-      search,
-      null,
-      expectedTypeArguments: expectedTypeArguments,
-    );
-//    var invocation = findNode.methodInvocation(search);
-//    assertTypeDynamic(invocation.methodName);
-//    // TODO(scheglov) I think `invokeType` should be `null`.
-//    assertMethodInvocation(
-//      invocation,
-//      null,
-//      'dynamic',
-//      expectedType: 'dynamic',
-//    );
   }
 }
 
 @reflectiveTest
-class MethodInvocationResolutionWithNullSafetyTest
-    extends PubPackageResolutionTest with MethodInvocationResolutionTestCases {
-  test_hasReceiver_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {}
-''');
-
-    await assertErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart' deferred as a;
-
-main() {
-  a.loadLibrary();
-}
-''', [
-      error(HintCode.UNUSED_IMPORT, 22, 8),
-    ]);
-
-    var import = findElement.importFind('package:test/a.dart');
-
-    var invocation = findNode.methodInvocation('loadLibrary()');
-    assertImportPrefix(invocation.target, import.prefix);
-
-    assertMethodInvocation(
-      invocation,
-      import.importedLibrary.loadLibraryFunction,
-      'Future<dynamic>* Function()*',
-    );
-  }
-
-  test_hasReceiver_interfaceQ_Function_call_checked() async {
-    await assertNoErrorsInCode(r'''
-void f(Function? foo) {
-  foo?.call();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('foo?.call()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
-  }
-
-  test_hasReceiver_interfaceQ_Function_call_unchecked() async {
-    await assertErrorsInCode(r'''
-void f(Function? foo) {
-  foo.call();
-}
-''', [
-      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
-          30, 4),
-    ]);
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('foo.call()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
-  }
-
-  test_hasReceiver_interfaceQ_nullShorting() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  C foo() => throw 0;
-  C bar() => throw 0;
-}
-
-void testShort(C? c) {
-  c?.foo().bar();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('c?.foo()'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'C Function()',
-      type: 'C',
-    );
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('bar();'),
-      element: findElement.method('bar'),
-      typeArgumentTypes: [],
-      invokeType: 'C Function()',
-      type: 'C?',
-    );
-  }
-
-  test_hasReceiver_interfaceQ_nullShorting_getter() async {
-    await assertNoErrorsInCode(r'''
-abstract class C {
-  void Function(C) get foo;
-}
-
-void f(C? c) {
-  c?.foo(c); // 1
-}
-''');
-
-    var invocation = findNode.functionExpressionInvocation('foo(c);');
-    assertElementNull(invocation);
-    assertInvokeType(invocation, 'void Function(C)');
-    assertType(invocation, 'void');
-
-    var foo = invocation.function as PropertyAccess;
-    assertType(foo, 'void Function(C)');
-    assertElement(foo.propertyName, findElement.getter('foo'));
-    assertType(foo.propertyName, 'void Function(C)');
-
-    assertSimpleIdentifier(
-      findNode.simple('c); // 1'),
-      element: findElement.parameter('c'),
-      type: 'C',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_defined() async {
-    await assertErrorsInCode(r'''
-class A {
-  void foo() {}
-}
-
-void f(A? a) {
-  a.foo();
-}
-''', [
-      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
-          48, 3),
-    ]);
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_defined_extension() async {
-    await assertErrorsInCode(r'''
-class A {
-  void foo() {}
-}
-
-extension E on A {
-  void foo() {}
-}
-
-void f(A? a) {
-  a.foo();
-}
-''', [
-      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
-          86, 3),
-    ]);
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: findElement.method('foo', of: 'A'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_defined_extensionQ() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  void foo() {}
-}
-
-extension E on A? {
-  void foo() {}
-}
-
-void f(A? a) {
-  a.foo();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: findElement.method('foo', of: 'E'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_defined_extensionQ2() async {
-    await assertNoErrorsInCode(r'''
-extension E<T> on T? {
-  T foo() => throw 0;
-}
-
-void f(int? a) {
-  a.foo();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: elementMatcher(
-        findElement.method('foo', of: 'E'),
-        substitution: {'T': 'int'},
-      ),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_notDefined() async {
-    await assertErrorsInCode(r'''
-class A {}
-
-void f(A? a) {
-  a.foo();
-}
-''', [
-      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
-          31, 3),
-    ]);
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_notDefined_extension() async {
-    await assertErrorsInCode(r'''
-class A {}
-
-extension E on A {
-  void foo() {}
-}
-
-void f(A? a) {
-  a.foo();
-}
-''', [
-      error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
-          69, 3),
-    ]);
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: null,
-      typeArgumentTypes: [],
-      invokeType: 'dynamic',
-      type: 'dynamic',
-    );
-  }
-
-  test_hasReceiver_interfaceTypeQ_notDefined_extensionQ() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-extension E on A? {
-  void foo() {}
-}
-
-void f(A? a) {
-  a.foo();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: findElement.method('foo', of: 'E'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
-  }
-
-  test_hasReceiver_typeAlias_staticMethod() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  static void foo(int _) {}
-}
-
-typedef B = A;
-
-void f() {
-  B.foo(0);
-}
-''');
-
-    assertMethodInvocation(
-      findNode.methodInvocation('foo(0)'),
-      findElement.method('foo'),
-      'void Function(int)',
-    );
-
-    assertTypeAliasRef(
-      findNode.simple('B.foo'),
-      findElement.typeAlias('B'),
-    );
-  }
-
-  test_hasReceiver_typeAlias_staticMethod_generic() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {
-  static void foo(int _) {}
-}
-
-typedef B<T> = A<T>;
-
-void f() {
-  B.foo(0);
-}
-''');
-
-    assertMethodInvocation(
-      findNode.methodInvocation('foo(0)'),
-      findElement.method('foo'),
-      'void Function(int)',
-    );
-
-    assertTypeAliasRef(
-      findNode.simple('B.foo'),
-      findElement.typeAlias('B'),
-    );
-  }
-
-  test_hasReceiver_typeParameter_promotedToNonNullable() async {
-    await assertNoErrorsInCode('''
-void f<T>(T? t) {
-  if (t is int) {
-    t.abs();
-  }
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('t.abs()'),
-      element: intElement.getMethod('abs'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-  }
-
-  test_hasReceiver_typeParameter_promotedToOtherTypeParameter() async {
-    await assertNoErrorsInCode('''
-abstract class A {}
-
-abstract class B extends A {
-  void foo();
-}
-
-void f<T extends A, U extends B>(T a) {
-  if (a is U) {
-    a.foo();
-  }
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('a.foo()'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'void Function()',
-      type: 'void',
-    );
-  }
-
-  test_namedArgument_anywhere() async {
-    await assertNoErrorsInCode('''
-class A {}
-class B {}
-class C {}
-class D {}
-
-void foo(A a, B b, {C? c, D? d}) {}
-
-T g1<T>() => throw 0;
-T g2<T>() => throw 0;
-T g3<T>() => throw 0;
-T g4<T>() => throw 0;
-
-void f() {
-  foo(g1(), c: g3(), g2(), d: g4());
-}
-''');
-
-    assertMethodInvocation(
-      findNode.methodInvocation('foo(g'),
-      findElement.topFunction('foo'),
-      'void Function(A, B, {C? c, D? d})',
-    );
-
-    var g1 = findNode.methodInvocation('g1()');
-    assertType(g1, 'A');
-    assertParameterElement(g1, findElement.parameter('a'));
-
-    var g2 = findNode.methodInvocation('g2()');
-    assertType(g2, 'B');
-    assertParameterElement(g2, findElement.parameter('b'));
-
-    var named_g3 = findNode.namedExpression('c: g3()');
-    assertType(named_g3.expression, 'C?');
-    assertParameterElement(named_g3, findElement.parameter('c'));
-    assertNamedParameterRef('c:', 'c');
-
-    var named_g4 = findNode.namedExpression('d: g4()');
-    assertType(named_g4.expression, 'D?');
-    assertParameterElement(named_g4, findElement.parameter('d'));
-    assertNamedParameterRef('d:', 'd');
-  }
-
-  test_nullShorting_cascade_firstMethodInvocation() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int foo() => 0;
-  int bar() => 0;
-}
-
-void f(A? a) {
-  a?..foo()..bar();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..foo()'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..bar()'),
-      element: findElement.method('bar'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertType(findNode.cascade('a?'), 'A?');
-  }
-
-  test_nullShorting_cascade_firstPropertyAccess() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int get foo => 0;
-  int bar() => 0;
-}
-
-void f(A? a) {
-  a?..foo..bar();
-}
-''');
-
-    assertPropertyAccess2(
-      findNode.propertyAccess('..foo'),
-      element: findElement.getter('foo'),
-      type: 'int',
-    );
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..bar()'),
-      element: findElement.method('bar'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertType(findNode.cascade('a?'), 'A?');
-  }
-
-  test_nullShorting_cascade_nullAwareInside() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int? foo() => 0;
-}
-
-main() {
-  A a = A()..foo()?.abs();
-  a;
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..foo()'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'int? Function()',
-      type: 'int?',
-    );
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('.abs()'),
-      element: intElement.getMethod('abs'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertType(findNode.cascade('A()'), 'A');
-  }
-
-  test_typeArgumentTypes_generic_inferred_leftTop_dynamic() async {
-    await assertNoErrorsInCode('''
-void foo<T extends Object>(T? value) {}
-
-void f(dynamic o) {
-  foo(o);
-}
-''');
-
-    assertTypeArgumentTypes(
-      findNode.methodInvocation('foo(o)'),
-      ['Object'],
-    );
-  }
-
-  test_typeArgumentTypes_generic_inferred_leftTop_void() async {
-    await assertNoErrorsInCode('''
-void foo<T extends Object>(List<T?> value) {}
-
-void f(List<void> o) {
-  foo(o);
-}
-''');
-
-    assertTypeArgumentTypes(
-      findNode.methodInvocation('foo(o)'),
-      ['Object'],
-    );
-  }
-}
+class MethodInvocationResolutionWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, MethodInvocationResolutionTestCases {}
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index fb6d6b1f..3187d2a 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_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:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -190,743 +189,6 @@
     );
   }
 
-  test_error_builtInIdentifierAsTypeName() async {
-    await assertErrorsInCode(r'''
-mixin as {}
-''', [
-      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 2),
-    ]);
-  }
-
-  test_error_builtInIdentifierAsTypeName_OK_on() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-mixin on on A {}
-
-mixin M on on {}
-
-mixin M2 implements on {}
-
-class B = A with on;
-class C = B with M;
-class D = Object with M2;
-''');
-  }
-
-  test_error_conflictingTypeVariableAndClass() async {
-    await assertErrorsInCode(r'''
-mixin M<M> {}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN, 8, 1),
-    ]);
-  }
-
-  test_error_conflictingTypeVariableAndMember_field() async {
-    await assertErrorsInCode(r'''
-mixin M<T> {
-  var T;
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN, 8,
-          1),
-    ]);
-  }
-
-  test_error_conflictingTypeVariableAndMember_getter() async {
-    await assertErrorsInCode(r'''
-mixin M<T> {
-  get T => null;
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN, 8,
-          1),
-    ]);
-  }
-
-  test_error_conflictingTypeVariableAndMember_method() async {
-    await assertErrorsInCode(r'''
-mixin M<T> {
-  T() {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN, 8,
-          1),
-    ]);
-  }
-
-  test_error_conflictingTypeVariableAndMember_method_static() async {
-    await assertErrorsInCode(r'''
-mixin M<T> {
-  static T() {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN, 8,
-          1),
-    ]);
-  }
-
-  test_error_conflictingTypeVariableAndMember_setter() async {
-    await assertErrorsInCode(r'''
-mixin M<T> {
-  void set T(_) {}
-}
-''', [
-      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN, 8,
-          1),
-    ]);
-  }
-
-  test_error_finalNotInitialized() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  final int f;
-}
-''', [
-      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 22, 1),
-    ]);
-  }
-
-  test_error_finalNotInitialized_OK() async {
-    await assertNoErrorsInCode(r'''
-mixin M {
-  final int f = 0;
-}
-''');
-  }
-
-  test_error_implementsClause_deferredClass() async {
-    await assertErrorsInCode(r'''
-import 'dart:math' deferred as math;
-mixin M implements math.Random {}
-''', [
-      error(CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS, 56, 11),
-    ]);
-    var mathImport = findElement.import('dart:math');
-    var randomElement = mathImport.importedLibrary!.getType('Random')!;
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, ['Random']);
-
-    var typeRef = findNode.namedType('Random {}');
-    assertNamedType(typeRef, randomElement, 'Random',
-        expectedPrefix: mathImport.prefix);
-  }
-
-  test_error_implementsClause_disallowedClass_int() async {
-    await assertErrorsInCode(r'''
-mixin M implements int {}
-''', [
-      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 19, 3),
-    ]);
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, ['int']);
-
-    var typeRef = findNode.namedType('int {}');
-    assertNamedType(typeRef, intElement, 'int');
-  }
-
-  test_error_implementsClause_nonClass_void() async {
-    await assertErrorsInCode(r'''
-mixin M implements void {}
-''', [
-      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 19, 4),
-      error(ParserErrorCode.EXPECTED_TYPE_NAME, 19, 4),
-    ]);
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, []);
-
-    var typeRef = findNode.namedType('void {}');
-    assertNamedType(typeRef, null, 'void');
-  }
-
-  test_error_memberWithClassName_getter() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  int get M => 0;
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 20, 1),
-    ]);
-  }
-
-  test_error_memberWithClassName_getter_static() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  static int get M => 0;
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 27, 1),
-    ]);
-  }
-
-  test_error_memberWithClassName_setter() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  void set M(_) {}
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 21, 1),
-    ]);
-  }
-
-  test_error_memberWithClassName_setter_static() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  static void set M(_) {}
-}
-''', [
-      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 28, 1),
-    ]);
-  }
-
-  test_error_mixinApplicationConcreteSuperInvokedMemberType_method() async {
-    await assertErrorsInCode(r'''
-class I {
-  void foo([int? p]) {}
-}
-
-class A {
-  void foo(int? p) {}
-}
-
-abstract class B extends A implements I {
-  void foo([int? p]);
-}
-
-mixin M on I {
-  void bar() {
-    super.foo(42);
-  }
-}
-
-abstract class X extends B with M {}
-''', [
-      error(
-          CompileTimeErrorCode
-              .MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE,
-          227,
-          1),
-    ]);
-  }
-
-  test_error_mixinApplicationConcreteSuperInvokedMemberType_OK_method_overriddenInMixin() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {
-  void remove(T x) {}
-}
-
-mixin M<U> on A<U> {
-  void remove(Object? x) {
-    super.remove(x as U);
-  }
-}
-
-class X<T> = A<T> with M<T>;
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_getter() async {
-    await assertErrorsInCode(r'''
-abstract class A {
-  int get foo;
-}
-
-mixin M on A {
-  void bar() {
-    super.foo;
-  }
-}
-
-abstract class X extends A with M {}
-''', [
-      error(
-          CompileTimeErrorCode
-              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
-          121,
-          1),
-    ]);
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_inNextMixin() async {
-    await assertErrorsInCode('''
-abstract class A {
-  void foo();
-}
-
-mixin M1 on A {
-  void foo() {
-    super.foo();
-  }
-}
-
-mixin M2 on A {
-  void foo() {}
-}
-
-class X extends A with M1, M2 {}
-''', [
-      error(
-          CompileTimeErrorCode
-              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
-          149,
-          2),
-    ]);
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_inSameMixin() async {
-    await assertErrorsInCode('''
-abstract class A {
-  void foo();
-}
-
-mixin M on A {
-  void foo() {
-    super.foo();
-  }
-}
-
-class X extends A with M {}
-''', [
-      error(
-          CompileTimeErrorCode
-              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
-          113,
-          1),
-    ]);
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_method() async {
-    await assertErrorsInCode(r'''
-abstract class A {
-  void foo();
-}
-
-mixin M on A {
-  void bar() {
-    super.foo();
-  }
-}
-
-abstract class X extends A with M {}
-''', [
-      error(
-          CompileTimeErrorCode
-              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
-          122,
-          1),
-    ]);
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_hasNSM() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  void foo();
-}
-
-mixin M on A {
-  void bar() {
-    super.foo();
-  }
-}
-
-class C implements A {
-  noSuchMethod(_) {}
-}
-
-class X extends C with M {}
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_hasNSM2() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  void foo();
-}
-
-mixin M on A {
-  void bar() {
-    super.foo();
-  }
-}
-
-/// Class `B` has noSuchMethod forwarder for `foo`.
-class B implements A {
-  noSuchMethod(_) {}
-}
-
-/// Class `C` is abstract, but it inherits noSuchMethod forwarders from `B`.
-abstract class C extends B {}
-
-class X extends C with M {}
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_inPreviousMixin() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  void foo();
-}
-
-mixin M1 {
-  void foo() {}
-}
-
-mixin M2 on A {
-  void bar() {
-    super.foo();
-  }
-}
-
-class X extends A with M1, M2 {}
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_inSuper_fromMixin() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  void foo();
-}
-
-mixin M1 {
-  void foo() {}
-}
-
-class B extends A with M1 {}
-
-mixin M2 on A {
-  void bar() {
-    super.foo();
-  }
-}
-
-class X extends B with M2 {}
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_notInvoked() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  void foo();
-}
-
-mixin M on A {}
-
-abstract class X extends A with M {}
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_OK_super_covariant() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  bar(num n) {}
-}
-
-mixin M on A {
-  test() {
-    super.bar(3.14);
-  }
-}
-
-class B implements A {
-  bar(covariant int i) {}
-}
-
-class C extends B with M {}
-''');
-  }
-
-  test_error_mixinApplicationNoConcreteSuperInvokedMember_setter() async {
-    await assertErrorsInCode(r'''
-abstract class A {
-  void set foo(_);
-}
-
-mixin M on A {
-  void bar() {
-    super.foo = 0;
-  }
-}
-
-abstract class X extends A with M {}
-''', [
-      error(
-          CompileTimeErrorCode
-              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
-          129,
-          1),
-    ]);
-  }
-
-  test_error_mixinApplicationNotImplementedInterface() async {
-    await assertErrorsInCode(r'''
-class A {}
-
-mixin M on A {}
-
-class X = Object with M;
-''', [
-      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
-          51, 1),
-    ]);
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_generic() async {
-    await assertErrorsInCode(r'''
-class A<T> {}
-
-mixin M on A<int> {}
-
-class X = A<double> with M;
-''', [
-      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
-          62, 1),
-    ]);
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_noMemberErrors() async {
-    await assertErrorsInCode(r'''
-class A {
-  void foo() {}
-}
-
-mixin M on A {
-  void bar() {
-    super.foo();
-  }
-}
-
-class C {
-  noSuchMethod(_) {}
-}
-
-class X = C with M;
-''', [
-      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
-          134, 1),
-    ]);
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_OK_0() async {
-    await assertNoErrorsInCode(r'''
-mixin M {}
-
-class X = Object with M;
-''');
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_OK_1() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-mixin M on A {}
-
-class X = A with M;
-''');
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_OK_generic() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-mixin M<T> on A<T> {}
-
-class B<T> implements A<T> {}
-
-class C<T> = B<T> with M<T>;
-''');
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_OK_previousMixin() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-
-mixin M1 implements A {}
-
-mixin M2 on A {}
-
-class X = Object with M1, M2;
-''');
-  }
-
-  test_error_mixinApplicationNotImplementedInterface_oneOfTwo() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B {}
-class C {}
-
-mixin M on A, B {}
-
-class X = C with M;
-''', [
-      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
-          71, 1),
-    ]);
-  }
-
-  test_error_mixinInstantiate_default() async {
-    await assertErrorsInCode(r'''
-mixin M {}
-
-main() {
-  new M();
-}
-''', [
-      error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 27, 1),
-    ]);
-
-    var creation = findNode.instanceCreation('M();');
-    var m = findElement.mixin('M');
-    assertInstanceCreation(creation, m, 'M');
-  }
-
-  test_error_mixinInstantiate_named() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  M.named() {}
-}
-
-main() {
-  new M.named();
-}
-''', [
-      error(ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR, 12, 1),
-      error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 43, 1),
-    ]);
-
-    var creation = findNode.instanceCreation('M.named();');
-    var m = findElement.mixin('M');
-    assertInstanceCreation(creation, m, 'M', constructorName: 'named');
-  }
-
-  test_error_mixinInstantiate_undefined() async {
-    await assertErrorsInCode(r'''
-mixin M {}
-
-main() {
-  new M.named();
-}
-''', [
-      error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 27, 1),
-    ]);
-
-    var creation = findNode.instanceCreation('M.named();');
-    var m = findElement.mixin('M');
-    assertElement(creation.constructorName.type2.name, m);
-  }
-
-  test_error_onClause_deferredClass() async {
-    await assertErrorsInCode(r'''
-import 'dart:math' deferred as math;
-mixin M on math.Random {}
-''', [
-      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS,
-          48, 11),
-    ]);
-    var mathImport = findElement.import('dart:math');
-    var randomElement = mathImport.importedLibrary!.getType('Random')!;
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, ['Random']);
-
-    var typeRef = findNode.namedType('Random {}');
-    assertNamedType(typeRef, randomElement, 'Random',
-        expectedPrefix: mathImport.prefix);
-  }
-
-  test_error_onClause_disallowedClass_int() async {
-    await assertErrorsInCode(r'''
-mixin M on int {}
-''', [
-      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
-          11, 3),
-    ]);
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, ['int']);
-
-    var typeRef = findNode.namedType('int {}');
-    assertNamedType(typeRef, intElement, 'int');
-  }
-
-  test_error_onClause_nonInterface_dynamic() async {
-    await assertErrorsInCode(r'''
-mixin M on dynamic {}
-''', [
-      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE, 11,
-          7),
-    ]);
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, ['Object']);
-
-    var typeRef = findNode.namedType('dynamic {}');
-    assertNamedType(typeRef, dynamicElement, 'dynamic');
-  }
-
-  test_error_onClause_nonInterface_enum() async {
-    await assertErrorsInCode(r'''
-enum E {E1, E2, E3}
-mixin M on E {}
-''', [
-      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE, 31,
-          1),
-    ]);
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, ['Object']);
-
-    var typeRef = findNode.namedType('E {}');
-    assertNamedType(typeRef, findElement.enum_('E'), 'E');
-  }
-
-  test_error_onClause_nonInterface_void() async {
-    await assertErrorsInCode(r'''
-mixin M on void {}
-''', [
-      error(ParserErrorCode.EXPECTED_TYPE_NAME, 11, 4),
-      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE, 11,
-          4),
-    ]);
-
-    var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, ['Object']);
-
-    var typeRef = findNode.namedType('void {}');
-    assertNamedType(typeRef, null, 'void');
-  }
-
-  test_error_onClause_OK_mixin() async {
-    await assertNoErrorsInCode(r'''
-mixin A {}
-mixin B on A {} // ref
-''');
-
-    var b = findElement.mixin('B');
-    assertElementTypes(b.superclassConstraints, ['A']);
-  }
-
-  test_error_undefinedSuperMethod() async {
-    await assertErrorsInCode(r'''
-class A {}
-
-mixin M on A {
-  void bar() {
-    super.foo(42);
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SUPER_METHOD, 52, 3),
-    ]);
-
-    var invocation = findNode.methodInvocation('foo(42)');
-    assertElementNull(invocation.methodName);
-    assertInvokeTypeDynamic(invocation);
-    assertTypeDynamic(invocation);
-  }
-
   test_field() async {
     await assertNoErrorsInCode(r'''
 mixin M<T> {
diff --git a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
new file mode 100644
index 0000000..76fafef
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
@@ -0,0 +1,122 @@
+// 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' as io;
+
+import 'package:analyzer/source/line_info.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+class NodeTextExpectationsCollector {
+  static const updatingIsEnabled = false;
+
+  static const assertMethods = {
+    'ResolutionTest.assertResolvedNodeText',
+  };
+
+  static final Map<String, _File> _files = {};
+
+  static void add(String actual) {
+    if (!updatingIsEnabled) {
+      return;
+    }
+
+    var traceLines = '${StackTrace.current}'.split('\n');
+    for (var traceIndex = 0; traceIndex < traceLines.length; traceIndex++) {
+      var traceLine = traceLines[traceIndex];
+      for (var assertMethod in assertMethods) {
+        if (traceLine.contains(' $assertMethod ')) {
+          var invocationLine = traceLines[traceIndex + 1];
+          var locationMatch = RegExp(
+            r'file://(.+_test.dart):(\d+):',
+          ).firstMatch(invocationLine);
+          if (locationMatch == null) {
+            fail('Cannot parse: $invocationLine');
+          }
+
+          var path = locationMatch.group(1)!;
+          var line = int.parse(locationMatch.group(2)!);
+          var file = _getFile(path);
+
+          var invocationOffset = file.lineInfo.getOffsetOfLine(line - 1);
+
+          const String rawStringPrefix = "r'''";
+          var expectationOffset = file.content.indexOf(
+            rawStringPrefix,
+            invocationOffset,
+          );
+          expectationOffset += rawStringPrefix.length;
+          var expectationEnd = file.content.indexOf("'''", expectationOffset);
+
+          file.replacements.add(
+            _Replacement(
+              expectationOffset,
+              expectationEnd,
+              '\n' + actual,
+            ),
+          );
+        }
+      }
+    }
+  }
+
+  static void _apply() {
+    for (var file in _files.values) {
+      file.applyReplacements();
+    }
+    _files.clear();
+  }
+
+  static _File _getFile(String path) {
+    return _files[path] ??= _File(path);
+  }
+}
+
+@reflectiveTest
+class UpdateNodeTextExpectations {
+  test_applyReplacements() {
+    NodeTextExpectationsCollector._apply();
+  }
+}
+
+class _File {
+  final String path;
+  final String content;
+  final LineInfo lineInfo;
+  final List<_Replacement> replacements = [];
+
+  factory _File(String path) {
+    var content = io.File(path).readAsStringSync();
+    return _File._(
+      path: path,
+      content: content,
+      lineInfo: LineInfo.fromContent(content),
+    );
+  }
+
+  _File._({
+    required this.path,
+    required this.content,
+    required this.lineInfo,
+  });
+
+  void applyReplacements() {
+    replacements.sort((a, b) => b.offset - a.offset);
+    var newCode = content;
+    replacements.forEach((replacement) {
+      newCode = newCode.substring(0, replacement.offset) +
+          replacement.text +
+          newCode.substring(replacement.end);
+    });
+    io.File(path).writeAsStringSync(newCode);
+  }
+}
+
+class _Replacement {
+  final int offset;
+  final int end;
+  final String text;
+
+  _Replacement(this.offset, this.end, this.text);
+}
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 8340942..7c4aad2 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
@@ -18,7 +18,7 @@
 @reflectiveTest
 class NonNullableBazelWorkspaceTest extends BazelWorkspaceResolutionTest {
   @override
-  bool get typeToStringWithNullability => true;
+  bool get isNullSafetyEnabled => true;
 
   test_buildFile_legacy_commentedOut() async {
     newFile('$myPackageRootPath/BUILD', content: r'''
@@ -125,6 +125,21 @@
     assertType(findNode.namedType('int v'), 'int');
   }
 
+  test_buildFile_nonNullable_soundNullSafety() async {
+    newFile('$myPackageRootPath/BUILD', content: r'''
+dart_package(
+  sound_null_safety = True
+)
+''');
+
+    await resolveFileCode(
+      '$myPackageRootPath/lib/a.dart',
+      'int v = 0;',
+    );
+    assertNoErrorsInResult();
+    assertType(findNode.namedType('int v'), 'int');
+  }
+
   test_buildFile_nonNullable_withComments() async {
     newFile('$myPackageRootPath/BUILD', content: r'''
 dart_package(
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 5b7cc34..89408dc 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
@@ -437,7 +437,7 @@
 class NullableTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   @override
-  bool get typeToStringWithNullability => true;
+  bool get isNullSafetyEnabled => true;
 
   test_class_hierarchy() async {
     await assertNoErrorsInCode('''
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 93e9187..daa949c 100644
--- a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
@@ -132,7 +132,7 @@
 
     var constructorName = creation.constructorName;
 
-    var typeName = constructorName.type2;
+    var typeName = constructorName.type;
     assertType(typeName, 'C<int>');
 
     var pC = typeName.name as PrefixedIdentifier;
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 3cfabd6..1846448 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -30,15 +30,27 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('foo++'),
-      readElement: findElement.getter('foo'),
-      readType: 'int',
-      writeElement: findElement.setter('foo'),
-      writeType: 'int',
-      element: numElement.getMethod('+'),
-      type: 'int?',
-    );
+    assertResolvedNodeText(findNode.postfix('foo++'), r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@38
+      staticType: A?
+    operator: ?.
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::foo
+  readType: int
+  writeElement: self::@class::A::@setter::foo
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int?
+''');
   }
 
   test_inc_simpleIdentifier_parameter_depromote() async {
@@ -55,19 +67,20 @@
 }
 ''');
 
-    if (hasAssignmentLeftResolution) {
-      assertType(findNode.simple('x++;'), 'A');
-    }
-
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.parameter('x'),
-      readType: 'A',
-      writeElement: findElement.parameter('x'),
-      writeType: 'Object',
-      element: findElement.method('+'),
-      type: 'A',
-    );
+    assertResolvedNodeText(findNode.postfix('x++'), r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@63
+    staticType: null
+  operator: ++
+  readElement: x@63
+  readType: A
+  writeElement: x@63
+  writeType: Object
+  staticElement: self::@class::A::@method::+
+  staticType: A
+''');
 
     assertType(findNode.simple('x; // ref'), 'Object');
   }
@@ -79,15 +92,16 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x!'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.postfix('x!'), r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: int?
+  operator: !
+  staticElement: <null>
+  staticType: int
+''');
   }
 
   test_nullCheck_functionExpressionInvocation_rewrite() async {
@@ -106,25 +120,41 @@
 }
 ''');
 
-    assertIndexExpression(
-      findNode.index('a['),
-      readElement: elementMatcher(
-        mapElement.getMethod('[]'),
-        substitution: {'K': 'String', 'V': 'int'},
-      ),
-      writeElement: null,
-      type: 'int?',
-    );
+    assertResolvedNodeText(findNode.index('a['), r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: a
+    staticElement: a@24
+    staticType: Map<String, int>
+  leftBracket: [
+  index: SimpleStringLiteral
+    literal: 'foo'
+  rightBracket: ]
+  staticElement: MethodMember
+    base: dart:core::@class::Map::@method::[]
+    substitution: {K: String, V: int}
+  staticType: int?
+''');
 
-    assertPostfixExpression(
-      findNode.postfix(']!'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.postfix(']!'), r'''
+PostfixExpression
+  operand: IndexExpression
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@24
+      staticType: Map<String, int>
+    leftBracket: [
+    index: SimpleStringLiteral
+      literal: 'foo'
+    rightBracket: ]
+    staticElement: MethodMember
+      base: dart:core::@class::Map::@method::[]
+      substitution: {K: String, V: int}
+    staticType: int?
+  operator: !
+  staticElement: <null>
+  staticType: int
+''');
   }
 
   test_nullCheck_null() async {
@@ -154,15 +184,28 @@
       type: 'int?',
     );
 
-    assertPostfixExpression(
-      findNode.postfix('f(null)!'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.postfix('f(null)!'), r'''
+PostfixExpression
+  operand: 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: int? Function(int?)
+    staticType: int?
+    typeArgumentTypes
+      int?
+  operator: !
+  staticElement: <null>
+  staticType: int
+''');
   }
 
   /// See https://github.com/dart-lang/language/issues/1163
@@ -243,15 +286,15 @@
 
     assertTypeDynamic(findNode.super_('super!'));
 
-    assertPostfixExpression(
-      findNode.postfix('super!'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.postfix('super!'), r'''
+PostfixExpression
+  operand: SuperExpression
+    superKeyword: super
+    staticType: dynamic
+  operator: !
+  staticElement: <null>
+  staticType: dynamic
+''');
 
     assertMethodInvocation2(
       findNode.methodInvocation('foo();'),
@@ -270,15 +313,16 @@
 ''');
 
     var postfixExpression = findNode.postfix('x!');
-    assertPostfixExpression(
-      postfixExpression,
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'T & Object',
-    );
+    assertResolvedNodeText(postfixExpression, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: T?
+  operator: !
+  staticElement: <null>
+  staticType: T & Object
+''');
   }
 
   test_nullCheck_typeParameter_already_promoted() async {
@@ -291,15 +335,16 @@
 ''');
 
     var postfixExpression = findNode.postfix('x!');
-    assertPostfixExpression(
-      postfixExpression,
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'T & num',
-    );
+    assertResolvedNodeText(postfixExpression, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: T? & num?
+  operator: !
+  staticElement: <null>
+  staticType: T & num
+''');
   }
 }
 
@@ -311,18 +356,40 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x--'),
-      readElement: findElement.parameter('x'),
-      readType: 'int',
-      writeElement: findElement.parameter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('-'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x--');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  operator: --
+  readElement: x@11
+  readType: int
+  writeElement: x@11
+  writeType: int
+  staticElement: dart:core::@class::num::@method::-
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  operator: --
+  readElement: x@11
+  readType: int*
+  writeElement: x@11
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::-
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_indexExpression_instance() async {
@@ -337,18 +404,56 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('a[0]++'),
-      readElement: findElement.method('[]'),
-      readType: 'int',
-      writeElement: findElement.method('[]='),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('a[0]++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: IndexExpression
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@91
+      staticType: A
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@method::[]
+  readType: int
+  writeElement: self::@class::A::@method::[]=
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: IndexExpression
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@91
+      staticType: A*
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@method::[]
+  readType: int*
+  writeElement: self::@class::A::@method::[]=
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_indexExpression_super() async {
@@ -365,18 +470,54 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('[0]++'),
-      readElement: findElement.method('[]'),
-      readType: 'int',
-      writeElement: findElement.method('[]='),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('[0]++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: IndexExpression
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@method::[]
+  readType: int
+  writeElement: self::@class::A::@method::[]=
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: IndexExpression
+    target: SuperExpression
+      superKeyword: super
+      staticType: B*
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@method::[]
+  readType: int*
+  writeElement: self::@class::A::@method::[]=
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_indexExpression_this() async {
@@ -391,18 +532,54 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('[0]++'),
-      readElement: findElement.method('[]'),
-      readType: 'int',
-      writeElement: findElement.method('[]='),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('[0]++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: IndexExpression
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@method::[]
+  readType: int
+  writeElement: self::@class::A::@method::[]=
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: IndexExpression
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A*
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@method::[]
+  readType: int*
+  writeElement: self::@class::A::@method::[]=
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_notLValue_parenthesized() async {
@@ -414,15 +591,44 @@
       error(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 16, 2),
     ]);
 
-    assertPostfixExpression(
-      findNode.postfix('(0)++'),
-      readElement: null,
-      readType: 'dynamic',
-      writeElement: null,
-      writeType: 'dynamic',
-      element: null,
-      type: 'dynamic',
-    );
+    var node = findNode.postfix('(0)++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightParenthesis: )
+    staticType: int
+  operator: ++
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightParenthesis: )
+    staticType: int*
+  operator: ++
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    }
   }
 
   test_inc_notLValue_simpleIdentifier_typeLiteral() async {
@@ -434,15 +640,38 @@
       error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 13, 3),
     ]);
 
-    assertPostfixExpression(
-      findNode.postfix('int++'),
-      readElement: intElement,
-      readType: 'dynamic',
-      writeElement: intElement,
-      writeType: 'dynamic',
-      element: null,
-      type: 'dynamic',
-    );
+    var node = findNode.postfix('int++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: int
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: dart:core::@class::int
+  readType: dynamic
+  writeElement: dart:core::@class::int
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: int
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: dart:core::@class::int
+  readType: dynamic
+  writeElement: dart:core::@class::int
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    }
   }
 
   test_inc_notLValue_simpleIdentifier_typeLiteral_typeParameter() async {
@@ -454,19 +683,41 @@
       error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 16, 1),
     ]);
 
-    var postfix = findNode.postfix('T++');
-    assertPostfixExpression(
-      postfix,
-      readElement: findElement.typeParameter('T'),
-      readType: 'dynamic',
-      writeElement: findElement.typeParameter('T'),
-      writeType: 'dynamic',
-      element: null,
-      type: 'dynamic',
-    );
+    var node = findNode.postfix('T++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: T
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: T@7
+  readType: dynamic
+  writeElement: T@7
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: T
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: T@7
+  readType: dynamic
+  writeElement: T@7
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      postfix.operand,
+      node.operand,
     );
   }
 
@@ -481,18 +732,56 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@35
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@35
+      staticType: A*
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_prefixedIdentifier_topLevel() async {
@@ -509,21 +798,58 @@
 
     var importFind = findElement.importFind('package:test/a.dart');
 
-    var postfix = findNode.postfix('x++');
-    assertPostfixExpression(
-      postfix,
-      readElement: importFind.topGet('x'),
-      readType: 'int',
-      writeElement: importFind.topSet('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: p
+      staticElement: self::@prefix::p
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: package:test/a.dart::@getter::x
+  readType: int
+  writeElement: package:test/a.dart::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: p
+      staticElement: self::@prefix::p
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: package:test/a.dart::@getter::x
+  readType: int*
+  writeElement: package:test/a.dart::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
-    var prefixed = postfix.operand as PrefixedIdentifier;
+    var prefixed = node.operand as PrefixedIdentifier;
     assertImportPrefix(prefixed.prefix, importFind.prefix);
   }
 
@@ -538,18 +864,72 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: 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: (
+        rightParenthesis: )
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: 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: (
+        rightParenthesis: )
+      staticType: A*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_propertyAccess_super() async {
@@ -569,18 +949,52 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.getter('x', of: 'A'),
-      readType: 'int',
-      writeElement: findElement.setter('x', of: 'A'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_propertyAccess_this() async {
@@ -595,18 +1009,52 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PropertyAccess
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  operator: ++
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_simpleIdentifier_parameter_double() async {
@@ -616,18 +1064,40 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.parameter('x'),
-      readType: 'double',
-      writeElement: findElement.parameter('x'),
-      writeType: 'double',
-      element: elementMatcher(
-        doubleElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: null
+  operator: ++
+  readElement: x@14
+  readType: double
+  writeElement: x@14
+  writeType: double
+  staticElement: dart:core::@class::double::@method::+
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: null
+  operator: ++
+  readElement: x@14
+  readType: double*
+  writeElement: x@14
+  writeType: double*
+  staticElement: MethodMember
+    base: dart:core::@class::double::@method::+
+    isLegacy: true
+  staticType: double*
+''');
+    }
   }
 
   test_inc_simpleIdentifier_parameter_int() async {
@@ -637,18 +1107,40 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.parameter('x'),
-      readType: 'int',
-      writeElement: findElement.parameter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  operator: ++
+  readElement: x@11
+  readType: int
+  writeElement: x@11
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  operator: ++
+  readElement: x@11
+  readType: int*
+  writeElement: x@11
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_simpleIdentifier_parameter_num() async {
@@ -658,18 +1150,40 @@
 }
 ''');
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.parameter('x'),
-      readType: 'num',
-      writeElement: findElement.parameter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'num',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  operator: ++
+  readElement: x@11
+  readType: num
+  writeElement: x@11
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  operator: ++
+  readElement: x@11
+  readType: num*
+  writeElement: x@11
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: num*
+''');
+    }
   }
 
   test_inc_simpleIdentifier_thisGetter_superSetter() async {
@@ -686,22 +1200,43 @@
 }
 ''');
 
-    var postfix = findNode.postfix('x++');
-    assertPostfixExpression(
-      postfix,
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::B::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@class::B::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      postfix.operand,
+      node.operand,
     );
   }
 
@@ -716,22 +1251,43 @@
 }
 ''');
 
-    var postfix = findNode.postfix('x++');
-    assertPostfixExpression(
-      postfix,
-      readElement: findElement.topGet('x'),
-      readType: 'int',
-      writeElement: findElement.topSet('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@getter::x
+  readType: int
+  writeElement: self::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@getter::x
+  readType: int*
+  writeElement: self::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      postfix.operand,
+      node.operand,
     );
   }
 
@@ -748,22 +1304,43 @@
 }
 ''');
 
-    var postfix = findNode.postfix('x++');
-    assertPostfixExpression(
-      postfix,
-      readElement: findElement.topGet('x'),
-      readType: 'int',
-      writeElement: findElement.topSet('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.postfix('x++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@getter::x
+  readType: int
+  writeElement: self::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: self::@getter::x
+  readType: int*
+  writeElement: self::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      postfix.operand,
+      node.operand,
     );
   }
 }
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 3408237..59238ca 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_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:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -33,15 +32,23 @@
           55, 6),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('!a'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: boolElement.getMethod('!'),
-      type: 'bool',
-    );
+    assertResolvedNodeText(findNode.prefix('!a'), r'''
+PrefixExpression
+  operator: !
+  operand: PropertyAccess
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@47
+      staticType: A?
+    operator: ?.
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: bool
+    staticType: bool?
+  staticElement: <null>
+  staticType: bool
+''');
   }
 
   test_minus_no_nullShorting() async {
@@ -58,15 +65,23 @@
           50, 1),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('-a'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: intElement.getMethod('unary-'),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.prefix('-a'), r'''
+PrefixExpression
+  operator: -
+  operand: PropertyAccess
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@43
+      staticType: A?
+    operator: ?.
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: int
+    staticType: int?
+  staticElement: dart:core::@class::int::@method::unary-
+  staticType: int
+''');
   }
 
   test_plusPlus_depromote() async {
@@ -82,19 +97,20 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'A',
-      writeElement: findElement.parameter('x'),
-      writeType: 'Object',
-      element: findElement.method('+'),
-      type: 'Object',
-    );
-
-    if (hasAssignmentLeftResolution) {
-      assertType(findNode.simple('x;'), 'A');
-    }
+    assertResolvedNodeText(findNode.prefix('++x'), r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@63
+    staticType: null
+  readElement: x@63
+  readType: A
+  writeElement: x@63
+  writeType: Object
+  staticElement: self::@class::A::@method::+
+  staticType: Object
+''');
   }
 
   test_plusPlus_nullShorting() async {
@@ -108,15 +124,27 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++a'),
-      readElement: findElement.getter('foo'),
-      readType: 'int',
-      writeElement: findElement.setter('foo'),
-      writeType: 'int',
-      element: numElement.getMethod('+'),
-      type: 'int?',
-    );
+    assertResolvedNodeText(findNode.prefix('++a'), r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@38
+      staticType: A?
+    operator: ?.
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::foo
+  readType: int
+  writeElement: self::@class::A::@setter::foo
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int?
+''');
   }
 
   test_tilde_no_nullShorting() async {
@@ -133,15 +161,23 @@
           50, 1),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('~a'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: intElement.getMethod('~'),
-      type: 'int',
-    );
+    assertResolvedNodeText(findNode.prefix('~a'), r'''
+PrefixExpression
+  operator: ~
+  operand: PropertyAccess
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@43
+      staticType: A?
+    operator: ?.
+    propertyName: SimpleIdentifier
+      token: foo
+      staticElement: self::@class::A::@getter::foo
+      staticType: int
+    staticType: int?
+  staticElement: dart:core::@class::int::@method::~
+  staticType: int
+''');
   }
 }
 
@@ -165,15 +201,46 @@
       type: 'bool',
     );
 
-    assertPrefixExpression(
-      findNode.prefix('!f()'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: boolElement.getMethod('!'),
-      type: 'bool',
-    );
+    var node = findNode.prefix('!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>
+  staticType: 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>
+  staticType: bool*
+''');
+    }
   }
 
   test_bang_bool_localVariable() async {
@@ -183,15 +250,30 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('!x'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: boolElement.getMethod('!'),
-      type: 'bool',
-    );
+    var node = findNode.prefix('!x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: !
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: bool
+  staticElement: <null>
+  staticType: bool
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: !
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@12
+    staticType: bool*
+  staticElement: <null>
+  staticType: bool*
+''');
+    }
   }
 
   test_bang_int_localVariable() async {
@@ -203,15 +285,30 @@
       error(CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION, 19, 1),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('!x'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: null,
-      type: 'bool',
-    );
+    var node = findNode.prefix('!x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: !
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: int
+  staticElement: <null>
+  staticType: bool
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: !
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: int*
+  staticElement: <null>
+  staticType: bool*
+''');
+    }
   }
 
   test_inc_indexExpression_instance() async {
@@ -226,18 +323,56 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.method('[]'),
-      readType: 'int',
-      writeElement: findElement.method('[]='),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: IndexExpression
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@91
+      staticType: A
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@method::[]
+  readType: int
+  writeElement: self::@class::A::@method::[]=
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: IndexExpression
+    target: SimpleIdentifier
+      token: a
+      staticElement: a@91
+      staticType: A*
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@method::[]
+  readType: int*
+  writeElement: self::@class::A::@method::[]=
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_indexExpression_super() async {
@@ -254,18 +389,54 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.method('[]'),
-      readType: 'int',
-      writeElement: findElement.method('[]='),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: IndexExpression
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@method::[]
+  readType: int
+  writeElement: self::@class::A::@method::[]=
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: IndexExpression
+    target: SuperExpression
+      superKeyword: super
+      staticType: B*
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@method::[]
+  readType: int*
+  writeElement: self::@class::A::@method::[]=
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_inc_indexExpression_this() async {
@@ -280,18 +451,54 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.method('[]'),
-      readType: 'int',
-      writeElement: findElement.method('[]='),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: IndexExpression
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@method::[]
+  readType: int
+  writeElement: self::@class::A::@method::[]=
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: IndexExpression
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A*
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int*
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@method::[]
+  readType: int*
+  writeElement: self::@class::A::@method::[]=
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_minus_simpleIdentifier_parameter_int() async {
@@ -301,18 +508,32 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('-x'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: elementMatcher(
-        intElement.getMethod('unary-'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('-x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: -
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: int
+  staticElement: dart:core::@class::int::@method::unary-
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: -
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::int::@method::unary-
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_notLValue_extensionOverride() async {
@@ -332,15 +553,60 @@
       error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 103, 1),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('++Ext'),
-      readElement: null,
-      readType: 'dynamic',
-      writeElement: null,
-      writeType: 'dynamic',
-      element: findElement.method('+'),
-      type: 'int',
-    );
+    var node = findNode.prefix('++Ext');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: Ext
+      staticElement: self::@extension::Ext
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: c
+          staticElement: c@89
+          staticType: C
+      rightParenthesis: )
+    extendedType: C
+    staticType: null
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: self::@extension::Ext::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: ExtensionOverride
+    extensionName: SimpleIdentifier
+      token: Ext
+      staticElement: self::@extension::Ext
+      staticType: null
+    argumentList: ArgumentList
+      leftParenthesis: (
+      arguments
+        SimpleIdentifier
+          token: c
+          staticElement: c@89
+          staticType: C*
+      rightParenthesis: )
+    extendedType: C*
+    staticType: null
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: self::@extension::Ext::@method::+
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_notLValue_simpleIdentifier_typeLiteral() async {
@@ -352,15 +618,38 @@
       error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 15, 3),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('++int'),
-      readElement: intElement,
-      readType: 'dynamic',
-      writeElement: intElement,
-      writeType: 'dynamic',
-      element: null,
-      type: 'dynamic',
-    );
+    var node = findNode.prefix('++int');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: int
+    staticElement: <null>
+    staticType: null
+  readElement: dart:core::@class::int
+  readType: dynamic
+  writeElement: dart:core::@class::int
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: int
+    staticElement: <null>
+    staticType: null
+  readElement: dart:core::@class::int
+  readType: dynamic
+  writeElement: dart:core::@class::int
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+    }
   }
 
   test_plusPlus_prefixedIdentifier_instance() async {
@@ -374,18 +663,56 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@35
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: a
+      staticElement: a@35
+      staticType: A*
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_prefixedIdentifier_topLevel() async {
@@ -400,24 +727,56 @@
 }
 ''');
 
-    var importFind = findElement.importFind('package:test/a.dart');
-
-    var prefix = findNode.prefix('++');
-    assertPrefixExpression(
-      prefix,
-      readElement: importFind.topGet('x'),
-      readType: 'int',
-      writeElement: importFind.topSet('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
-
-    var prefixed = prefix.operand as PrefixedIdentifier;
-    assertImportPrefix(prefixed.prefix, importFind.prefix);
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: p
+      staticElement: self::@prefix::p
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  readElement: package:test/a.dart::@getter::x
+  readType: int
+  writeElement: package:test/a.dart::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: p
+      staticElement: self::@prefix::p
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  readElement: package:test/a.dart::@getter::x
+  readType: int*
+  writeElement: package:test/a.dart::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_propertyAccess_instance() async {
@@ -431,18 +790,72 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: 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: (
+        rightParenthesis: )
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: 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: (
+        rightParenthesis: )
+      staticType: A*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_propertyAccess_super() async {
@@ -462,18 +875,52 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.getter('x', of: 'A'),
-      readType: 'int',
-      writeElement: findElement.setter('x', of: 'A'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: SuperExpression
+      superKeyword: super
+      staticType: B*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_propertyAccess_this() async {
@@ -488,18 +935,52 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++'),
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PropertyAccess
+    target: ThisExpression
+      thisKeyword: this
+      staticType: A*
+    operator: .
+    propertyName: SimpleIdentifier
+      token: x
+      staticElement: <null>
+      staticType: null
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_simpleIdentifier_parameter_double() async {
@@ -509,18 +990,40 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'double',
-      writeElement: findElement.parameter('x'),
-      writeType: 'double',
-      element: elementMatcher(
-        doubleElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'double',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: null
+  readElement: x@14
+  readType: double
+  writeElement: x@14
+  writeType: double
+  staticElement: dart:core::@class::double::@method::+
+  staticType: double
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: null
+  readElement: x@14
+  readType: double*
+  writeElement: x@14
+  writeType: double*
+  staticElement: MethodMember
+    base: dart:core::@class::double::@method::+
+    isLegacy: true
+  staticType: double*
+''');
+    }
   }
 
   test_plusPlus_simpleIdentifier_parameter_int() async {
@@ -530,18 +1033,40 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'int',
-      writeElement: findElement.parameter('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  readElement: x@11
+  readType: int
+  writeElement: x@11
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  readElement: x@11
+  readType: int*
+  writeElement: x@11
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_plusPlus_simpleIdentifier_parameter_num() async {
@@ -551,18 +1076,40 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'num',
-      writeElement: findElement.parameter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'num',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  readElement: x@11
+  readType: num
+  writeElement: x@11
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: null
+  readElement: x@11
+  readType: num*
+  writeElement: x@11
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: num*
+''');
+    }
   }
 
   test_plusPlus_simpleIdentifier_parameter_typeParameter() async {
@@ -577,18 +1124,40 @@
       ], legacy: []),
     );
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'T',
-      writeElement: findElement.parameter('x'),
-      writeType: 'T',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'num',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@24
+    staticType: null
+  readElement: x@24
+  readType: T
+  writeElement: x@24
+  writeType: T
+  staticElement: dart:core::@class::num::@method::+
+  staticType: num
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@24
+    staticType: null
+  readElement: x@24
+  readType: T*
+  writeElement: x@24
+  writeType: T*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: num*
+''');
+    }
   }
 
   test_plusPlus_simpleIdentifier_thisGetter_superSetter() async {
@@ -605,22 +1174,43 @@
 }
 ''');
 
-    var prefix = findNode.prefix('++x');
-    assertPrefixExpression(
-      prefix,
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::B::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::B::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      prefix.operand,
+      node.operand,
     );
   }
 
@@ -635,22 +1225,43 @@
 }
 ''');
 
-    var prefix = findNode.prefix('++x');
-    assertPrefixExpression(
-      prefix,
-      readElement: findElement.getter('x'),
-      readType: 'int',
-      writeElement: findElement.setter('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int
+  writeElement: self::@class::A::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@class::A::@getter::x
+  readType: int*
+  writeElement: self::@class::A::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      prefix.operand,
+      node.operand,
     );
   }
 
@@ -665,22 +1276,43 @@
 }
 ''');
 
-    var prefix = findNode.prefix('++x');
-    assertPrefixExpression(
-      prefix,
-      readElement: findElement.topGet('x'),
-      readType: 'int',
-      writeElement: findElement.topSet('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@getter::x
+  readType: int
+  writeElement: self::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@getter::x
+  readType: int*
+  writeElement: self::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      prefix.operand,
+      node.operand,
     );
   }
 
@@ -697,22 +1329,43 @@
 }
 ''');
 
-    var prefix = findNode.prefix('++x');
-    assertPrefixExpression(
-      prefix,
-      readElement: findElement.topGet('x'),
-      readType: 'int',
-      writeElement: findElement.topSet('x'),
-      writeType: 'num',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@getter::x
+  readType: int
+  writeElement: self::@setter::x
+  writeType: num
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@getter::x
+  readType: int*
+  writeElement: self::@setter::x
+  writeType: num*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
 
     assertSimpleIdentifierAssignmentTarget(
-      prefix.operand,
+      node.operand,
     );
   }
 
@@ -727,18 +1380,40 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.topGet('x'),
-      readType: 'int',
-      writeElement: findElement.topSet('x'),
-      writeType: 'int',
-      element: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('++x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@getter::x
+  readType: int
+  writeElement: self::@setter::x
+  writeType: int
+  staticElement: dart:core::@class::num::@method::+
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: self::@getter::x
+  readType: int*
+  writeElement: self::@setter::x
+  writeType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::num::@method::+
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 
   test_tilde_simpleIdentifier_parameter_int() async {
@@ -748,18 +1423,32 @@
 }
 ''');
 
-    assertPrefixExpression(
-      findNode.prefix('~x'),
-      readElement: null,
-      readType: null,
-      writeElement: null,
-      writeType: null,
-      element: elementMatcher(
-        intElement.getMethod('~'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
+    var node = findNode.prefix('~x');
+    if (isNullSafetyEnabled) {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ~
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: int
+  staticElement: dart:core::@class::int::@method::~
+  staticType: int
+''');
+    } else {
+      assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ~
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@11
+    staticType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::int::@method::~
+    isLegacy: true
+  staticType: int*
+''');
+    }
   }
 }
 
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 f0523f1..998efbf 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -46,6 +46,73 @@
     );
   }
 
+  test_enum_read() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  int get foo => 0;
+}
+
+void f(E e) {
+  e.foo;
+}
+''');
+
+    var prefixed = findNode.prefixed('e.foo');
+    assertPrefixedIdentifier(
+      prefixed,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.parameter('e'),
+      type: 'E',
+    );
+
+    assertSimpleIdentifier(
+      prefixed.identifier,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+  }
+
+  test_enum_write() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  set foo(int _) {}
+}
+
+void f(E e) {
+  e.foo = 1;
+}
+''');
+
+    var assignment = findNode.assignment('foo = 1');
+    assertAssignment(
+      assignment,
+      readElement: null,
+      readType: null,
+      writeElement: findElement.setter('foo'),
+      writeType: 'int',
+      operatorElement: null,
+      type: 'int',
+    );
+
+    var prefixed = assignment.leftHandSide as PrefixedIdentifier;
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.parameter('e'),
+      type: 'E',
+    );
+
+    assertSimpleIdentifierAssignmentTarget(
+      prefixed.identifier,
+    );
+  }
+
   test_hasReceiver_typeAlias_staticGetter() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -137,6 +204,202 @@
 }
 
 mixin PrefixedIdentifierResolutionTestCases on PubPackageResolutionTest {
+  test_class_read() async {
+    await assertNoErrorsInCode('''
+class A {
+  int foo = 0;
+}
+
+void f(A a) {
+  a.foo;
+}
+''');
+
+    var prefixed = findNode.prefixed('a.foo');
+    assertPrefixedIdentifier(
+      prefixed,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.parameter('a'),
+      type: 'A',
+    );
+
+    assertSimpleIdentifier(
+      prefixed.identifier,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+  }
+
+  test_class_read_staticMethod_generic() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  static void foo<U>(int a, U u) {}
+}
+
+void f() {
+  A.foo;
+}
+''');
+
+    var prefixed = findNode.prefixed('A.foo');
+    assertPrefixedIdentifier(
+      prefixed,
+      element: findElement.method('foo'),
+      type: 'void Function<U>(int, U)',
+    );
+
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.class_('A'),
+      type: null,
+    );
+
+    assertSimpleIdentifier(
+      prefixed.identifier,
+      element: findElement.method('foo'),
+      type: 'void Function<U>(int, U)',
+    );
+  }
+
+  test_class_read_staticMethod_ofGenericClass() async {
+    await assertNoErrorsInCode('''
+class A<T> {
+  static void foo(int a) {}
+}
+
+void f() {
+  A.foo;
+}
+''');
+
+    var prefixed = findNode.prefixed('A.foo');
+    assertPrefixedIdentifier(
+      prefixed,
+      element: findElement.method('foo'),
+      type: 'void Function(int)',
+    );
+
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.class_('A'),
+      type: null,
+    );
+
+    assertSimpleIdentifier(
+      prefixed.identifier,
+      element: findElement.method('foo'),
+      type: 'void Function(int)',
+    );
+  }
+
+  test_class_read_typedef_functionType() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+typedef A = void Function();
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as p;
+
+void f() {
+  p.A;
+}
+''');
+
+    var importFind = findElement.importFind('package:test/a.dart');
+    var A = importFind.typeAlias('A');
+
+    var prefixed = findNode.prefixed('p.A');
+    assertPrefixedIdentifier(
+      prefixed,
+      element: A,
+      type: 'Type',
+    );
+
+    assertImportPrefix(prefixed.prefix, importFind.prefix);
+
+    assertSimpleIdentifier(
+      prefixed.identifier,
+      element: A,
+      type: 'Type',
+    );
+  }
+
+  test_class_readWrite_assignment() async {
+    await assertNoErrorsInCode('''
+class A {
+  int foo = 0;
+}
+
+void f(A a) {
+  a.foo += 1;
+}
+''');
+
+    var assignment = findNode.assignment('foo += 1');
+    assertAssignment(
+      assignment,
+      readElement: findElement.getter('foo'),
+      readType: 'int',
+      writeElement: findElement.setter('foo'),
+      writeType: 'int',
+      operatorElement: elementMatcher(
+        numElement.getMethod('+'),
+        isLegacy: isLegacyLibrary,
+      ),
+      type: 'int',
+    );
+
+    var prefixed = assignment.leftHandSide as PrefixedIdentifier;
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.parameter('a'),
+      type: 'A',
+    );
+
+    assertSimpleIdentifierAssignmentTarget(
+      prefixed.identifier,
+    );
+  }
+
+  test_class_write() async {
+    await assertNoErrorsInCode('''
+class A {
+  int foo = 0;
+}
+
+void f(A a) {
+  a.foo = 1;
+}
+''');
+
+    var assignment = findNode.assignment('foo = 1');
+    assertAssignment(
+      assignment,
+      readElement: null,
+      readType: null,
+      writeElement: findElement.setter('foo'),
+      writeType: 'int',
+      operatorElement: null,
+      type: 'int',
+    );
+
+    var prefixed = assignment.leftHandSide as PrefixedIdentifier;
+    assertSimpleIdentifier(
+      prefixed.prefix,
+      element: findElement.parameter('a'),
+      type: 'A',
+    );
+
+    assertSimpleIdentifierAssignmentTarget(
+      prefixed.identifier,
+    );
+  }
+
   test_dynamic_explicitCore_withPrefix() async {
     await assertNoErrorsInCode(r'''
 import 'dart:core' as mycore;
@@ -190,218 +453,6 @@
     );
     assertType(identifier, 'A');
   }
-
-  test_read() async {
-    await assertNoErrorsInCode('''
-class A {
-  int foo = 0;
-}
-
-void f(A a) {
-  a.foo;
-}
-''');
-
-    var prefixed = findNode.prefixed('a.foo');
-    assertPrefixedIdentifier(
-      prefixed,
-      element: findElement.getter('foo'),
-      type: 'int',
-    );
-
-    assertSimpleIdentifier(
-      prefixed.prefix,
-      element: findElement.parameter('a'),
-      type: 'A',
-    );
-
-    assertSimpleIdentifier(
-      prefixed.identifier,
-      element: findElement.getter('foo'),
-      type: 'int',
-    );
-  }
-
-  test_read_staticMethod_generic() async {
-    await assertNoErrorsInCode('''
-class A<T> {
-  static void foo<U>(int a, U u) {}
-}
-
-void f() {
-  A.foo;
-}
-''');
-
-    var prefixed = findNode.prefixed('A.foo');
-    assertPrefixedIdentifier(
-      prefixed,
-      element: findElement.method('foo'),
-      type: 'void Function<U>(int, U)',
-    );
-
-    assertSimpleIdentifier(
-      prefixed.prefix,
-      element: findElement.class_('A'),
-      type: null,
-    );
-
-    assertSimpleIdentifier(
-      prefixed.identifier,
-      element: findElement.method('foo'),
-      type: 'void Function<U>(int, U)',
-    );
-  }
-
-  test_read_staticMethod_ofGenericClass() async {
-    await assertNoErrorsInCode('''
-class A<T> {
-  static void foo(int a) {}
-}
-
-void f() {
-  A.foo;
-}
-''');
-
-    var prefixed = findNode.prefixed('A.foo');
-    assertPrefixedIdentifier(
-      prefixed,
-      element: findElement.method('foo'),
-      type: 'void Function(int)',
-    );
-
-    assertSimpleIdentifier(
-      prefixed.prefix,
-      element: findElement.class_('A'),
-      type: null,
-    );
-
-    assertSimpleIdentifier(
-      prefixed.identifier,
-      element: findElement.method('foo'),
-      type: 'void Function(int)',
-    );
-  }
-
-  test_read_typedef_functionType() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-typedef A = void Function();
-''');
-
-    await assertNoErrorsInCode('''
-import 'a.dart' as p;
-
-void f() {
-  p.A;
-}
-''');
-
-    var importFind = findElement.importFind('package:test/a.dart');
-    var A = importFind.typeAlias('A');
-
-    var prefixed = findNode.prefixed('p.A');
-    assertPrefixedIdentifier(
-      prefixed,
-      element: A,
-      type: 'Type',
-    );
-
-    assertImportPrefix(prefixed.prefix, importFind.prefix);
-
-    assertSimpleIdentifier(
-      prefixed.identifier,
-      element: A,
-      type: 'Type',
-    );
-  }
-
-  test_readWrite_assignment() async {
-    await assertNoErrorsInCode('''
-class A {
-  int foo = 0;
-}
-
-void f(A a) {
-  a.foo += 1;
-}
-''');
-
-    var assignment = findNode.assignment('foo += 1');
-    assertAssignment(
-      assignment,
-      readElement: findElement.getter('foo'),
-      readType: 'int',
-      writeElement: findElement.setter('foo'),
-      writeType: 'int',
-      operatorElement: elementMatcher(
-        numElement.getMethod('+'),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'int',
-    );
-
-    var prefixed = assignment.leftHandSide as PrefixedIdentifier;
-    if (hasAssignmentLeftResolution) {
-      assertPrefixedIdentifier(
-        prefixed,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
-    assertSimpleIdentifier(
-      prefixed.prefix,
-      element: findElement.parameter('a'),
-      type: 'A',
-    );
-
-    assertSimpleIdentifierAssignmentTarget(
-      prefixed.identifier,
-    );
-  }
-
-  test_write() async {
-    await assertNoErrorsInCode('''
-class A {
-  int foo = 0;
-}
-
-void f(A a) {
-  a.foo = 1;
-}
-''');
-
-    var assignment = findNode.assignment('foo = 1');
-    assertAssignment(
-      assignment,
-      readElement: null,
-      readType: null,
-      writeElement: findElement.setter('foo'),
-      writeType: 'int',
-      operatorElement: null,
-      type: 'int',
-    );
-
-    var prefixed = assignment.leftHandSide as PrefixedIdentifier;
-    if (hasAssignmentLeftResolution) {
-      assertPrefixedIdentifier(
-        prefixed,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
-    assertSimpleIdentifier(
-      prefixed.prefix,
-      element: findElement.parameter('a'),
-      type: 'A',
-    );
-
-    assertSimpleIdentifierAssignmentTarget(
-      prefixed.identifier,
-    );
-  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
index d2faf92..d4b57a6 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
@@ -170,6 +170,90 @@
 
     assertType(findNode.cascade('foo?'), 'A?');
   }
+
+  test_ofEnum_read() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  int get foo => 0;
+}
+
+void f(E e) {
+  (e).foo;
+}
+''');
+
+    var propertyAccess = findNode.propertyAccess('foo;');
+    assertPropertyAccess2(
+      propertyAccess,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+
+    assertSimpleIdentifier(
+      propertyAccess.propertyName,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+  }
+
+  test_ofEnum_read_fromMixin() async {
+    await assertNoErrorsInCode('''
+mixin M on Enum {
+  int get foo => 0;
+}
+
+enum E with M {
+  v;
+}
+
+void f(E e) {
+  (e).foo;
+}
+''');
+
+    var propertyAccess = findNode.propertyAccess('foo;');
+    assertPropertyAccess2(
+      propertyAccess,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+
+    assertSimpleIdentifier(
+      propertyAccess.propertyName,
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+  }
+
+  test_ofEnum_write() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  set foo(int _) {}
+}
+
+void f(E e) {
+  (e).foo = 1;
+}
+''');
+
+    var assignment = findNode.assignment('foo = 1');
+    assertAssignment(
+      assignment,
+      readElement: null,
+      readType: null,
+      writeElement: findElement.setter('foo'),
+      writeType: 'int',
+      operatorElement: null,
+      type: 'int',
+    );
+
+    var propertyAccess = assignment.leftHandSide as PropertyAccess;
+    assertSimpleIdentifierAssignmentTarget(
+      propertyAccess.propertyName,
+    );
+  }
 }
 
 mixin PropertyAccessResolutionTestCases on PubPackageResolutionTest {
@@ -227,15 +311,6 @@
       ),
       type: 'int',
     );
-
-    var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'num',
-      );
-    }
   }
 
   test_extensionOverride_write() async {
@@ -261,19 +336,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
-    assertSimpleIdentifierAssignmentTarget(
-      propertyAccess.propertyName,
-    );
   }
 
   test_functionType_call_read() async {
@@ -339,15 +401,6 @@
       ),
       type: 'int',
     );
-
-    var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
   }
 
   test_instanceCreation_write() async {
@@ -371,19 +424,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
-    assertSimpleIdentifierAssignmentTarget(
-      propertyAccess.propertyName,
-    );
   }
 
   test_invalid_inDefaultValue_nullAware() async {
@@ -575,15 +615,6 @@
       ),
       type: 'int',
     );
-
-    var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'num',
-      );
-    }
   }
 
   test_ofExtension_write() async {
@@ -609,19 +640,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
-    assertSimpleIdentifierAssignmentTarget(
-      propertyAccess.propertyName,
-    );
   }
 
   test_super_read() async {
@@ -683,21 +701,9 @@
     );
 
     var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
     assertSuperExpression(
       propertyAccess.target,
     );
-
-    assertSimpleIdentifierAssignmentTarget(
-      propertyAccess.propertyName,
-    );
   }
 
   test_super_write() async {
@@ -725,21 +731,9 @@
     );
 
     var propertyAccess = assignment.leftHandSide as PropertyAccess;
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess2(
-        propertyAccess,
-        element: findElement.setter('foo'),
-        type: 'int',
-      );
-    }
-
     assertSuperExpression(
       propertyAccess.target,
     );
-
-    assertSimpleIdentifierAssignmentTarget(
-      propertyAccess.propertyName,
-    );
   }
 
   test_targetTypeParameter_dynamicBounded() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 71d4a5a..0495690 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -25,7 +25,9 @@
 import 'package:test/test.dart';
 
 import '../../../generated/test_support.dart';
+import '../../summary/resolved_ast_printer.dart';
 import 'dart_object_printer.dart';
+import 'node_text_expectations.dart';
 
 final isDynamicType = TypeMatcher<DynamicTypeImpl>();
 
@@ -51,9 +53,6 @@
 
   ClassElement get futureElement => typeProvider.futureElement;
 
-  /// TODO(scheglov) https://github.com/dart-lang/sdk/issues/43608
-  bool get hasAssignmentLeftResolution => false;
-
   ClassElement get intElement => typeProvider.intType.element;
 
   InterfaceType get intType => typeProvider.intType;
@@ -62,6 +61,8 @@
     return !result.libraryElement.isNonNullableByDefault;
   }
 
+  bool get isNullSafetyEnabled => false;
+
   ClassElement get listElement => typeProvider.listElement;
 
   ClassElement get mapElement => typeProvider.mapElement;
@@ -84,9 +85,6 @@
 
   TypeSystemImpl get typeSystem => result.typeSystem as TypeSystemImpl;
 
-  /// Whether `DartType.toString()` with nullability should be asked.
-  bool get typeToStringWithNullability => false;
-
   VoidType get voidType => VoidTypeImpl.instance;
 
   void addTestFile(String content) {
@@ -111,15 +109,8 @@
     );
     assertElement(node.staticElement, operatorElement);
     assertType(node, type);
-  }
 
-  void assertBinaryExpression(
-    BinaryExpression node, {
-    required Object? element,
-    required String type,
-  }) {
-    assertElement(node.staticElement, element);
-    assertType(node, type);
+    _assertUnresolvedAssignmentTarget(node.leftHandSide);
   }
 
   /// Assert that the given [identifier] is a reference to a class, in the
@@ -162,36 +153,6 @@
     }
   }
 
-  void assertConstructorReference(
-    ConstructorReference node,
-    Object? expectedConstructorElement,
-    ClassElement expectedClassElement,
-    String expectedType, {
-    PrefixElement? expectedPrefix,
-    Element? expectedTypeNameElement,
-  }) {
-    var actualConstructorName = node.constructorName.name;
-    if (actualConstructorName != null) {
-      assertConstructorElement(
-        actualConstructorName.staticElement as ConstructorElement?,
-        expectedConstructorElement,
-      );
-    }
-
-    assertElement(node, expectedConstructorElement);
-    assertType(node, expectedType);
-
-    var namedType = node.constructorName.type2;
-    expectedTypeNameElement ??= expectedClassElement;
-    assertNamedType(
-      namedType, expectedTypeNameElement,
-      // The [NamedType] child node of the [ConstructorName] should not have a
-      // static type.
-      null,
-      expectedPrefix: expectedPrefix,
-    );
-  }
-
   void assertConstructors(ClassElement class_, List<String> expected) {
     expect(
       class_.constructors.map((c) {
@@ -275,7 +236,7 @@
 
   void assertElementString(Element element, String expected) {
     var str = element.getDisplayString(
-      withNullability: typeToStringWithNullability,
+      withNullability: isNullSafetyEnabled,
     );
     expect(str, expected);
   }
@@ -370,6 +331,13 @@
     assertElementTypes(node.typeArgumentTypes, typeArgumentTypes);
   }
 
+  void assertFieldFormalParameter(
+    FieldFormalParameter node, {
+    required FieldFormalParameterElement element,
+  }) {
+    assertElement(node.declaredElement, element);
+  }
+
   void assertFunctionExpressionInvocation(
     FunctionExpressionInvocation node, {
     required ExecutableElement? element,
@@ -383,14 +351,6 @@
     assertType(node, type);
   }
 
-  void assertFunctionReference(
-      FunctionReference node, Element? expectedElement, String expectedType) {
-    if (expectedElement != null) {
-      assertElement(node, expectedElement);
-    }
-    assertType(node, expectedType);
-  }
-
   void assertHasTestErrors() {
     expect(result.errors, isNotEmpty);
   }
@@ -425,35 +385,9 @@
     assertTypeNull(identifier);
   }
 
-  void assertIndexExpression(
-    IndexExpression node, {
-    required Object? readElement,
-    required Object? writeElement,
-    required String? type,
-  }) {
-    var isRead = node.inGetterContext();
-    var isWrite = node.inSetterContext();
-    if (isRead && isWrite) {
-      assertElement(node.staticElement, writeElement);
-    } else if (isRead) {
-      assertElement(node.staticElement, readElement);
-    } else {
-      expect(isWrite, isTrue);
-      assertElement(node.staticElement, writeElement);
-    }
-
-    if (isRead) {
-      assertType(node, type);
-    } else {
-      // TODO(scheglov) enforce this
-//      expect(type, isNull);
-//      assertTypeNull(node);
-    }
-  }
-
   /// TODO(srawlins): Refactor to accept an `Object? expectedConstructor` which
   /// can accept `elementMatcher` for generics, and simplify, similar to
-  /// [assertConstructorReference].
+  /// `assertConstructorReference`.
   void assertInstanceCreation(
     InstanceCreationExpression creation,
     ClassElement expectedClassElement,
@@ -493,7 +427,7 @@
 
     assertType(creation, expectedType);
 
-    var namedType = creation.constructorName.type2;
+    var namedType = creation.constructorName.type;
     expectedTypeNameElement ??= expectedClassElement;
     assertNamedType(namedType, expectedTypeNameElement, expectedType,
         expectedPrefix: expectedPrefix);
@@ -659,26 +593,6 @@
     assertType(parameterElement.type, expected);
   }
 
-  void assertPostfixExpression(
-    PostfixExpression node, {
-    required Object? readElement,
-    required String? readType,
-    required Object? writeElement,
-    required String? writeType,
-    required Object? element,
-    required String type,
-  }) {
-    assertCompoundAssignment(
-      node,
-      readElement: readElement,
-      readType: readType,
-      writeElement: writeElement,
-      writeType: writeType,
-    );
-    assertElement(node.staticElement, element);
-    assertType(node, type);
-  }
-
   void assertPrefixedIdentifier(
     PrefixedIdentifier node, {
     required Object? element,
@@ -688,26 +602,6 @@
     assertType(node, type);
   }
 
-  void assertPrefixExpression(
-    PrefixExpression node, {
-    required Object? readElement,
-    required String? readType,
-    required Object? writeElement,
-    required String? writeType,
-    required Object? element,
-    required String type,
-  }) {
-    assertCompoundAssignment(
-      node,
-      readElement: readElement,
-      readType: readType,
-      writeElement: writeElement,
-      writeType: writeType,
-    );
-    assertElement(node.staticElement, element);
-    assertType(node, type);
-  }
-
   void assertPropertyAccess(
     PropertyAccess access,
     Element expectedElement,
@@ -726,6 +620,15 @@
     assertType(node.staticType, type);
   }
 
+  void assertResolvedNodeText(AstNode node, String expected) {
+    var actual = _resolvedNodeText(node);
+    if (actual != expected) {
+      print(actual);
+      NodeTextExpectationsCollector.add(actual);
+    }
+    expect(actual, expected);
+  }
+
   void assertSimpleFormalParameter(
     SimpleFormalParameter node, {
     required ParameterElement element,
@@ -875,6 +778,40 @@
     expect(node.staticType, isNull);
   }
 
+  void assertUnresolvedIndexExpression(IndexExpression node) {
+    assertElementNull(node);
+    assertTypeNull(node);
+  }
+
+  void assertUnresolvedPrefixedIdentifier(PrefixedIdentifier node) {
+    assertElementNull(node);
+    assertTypeNull(node);
+    assertUnresolvedSimpleIdentifier(node.identifier);
+  }
+
+  /// TODO(scheglov) Remove [disableElementCheck]
+  void assertUnresolvedPropertyAccess(
+    PropertyAccess node, {
+    bool disableElementCheck = false,
+  }) {
+    if (!disableElementCheck) {
+      assertElementNull(node);
+    }
+    assertTypeNull(node);
+    assertUnresolvedSimpleIdentifier(node.propertyName);
+  }
+
+  /// TODO(scheglov) Remove [disableElementCheck]
+  void assertUnresolvedSimpleIdentifier(
+    SimpleIdentifier node, {
+    bool disableElementCheck = false,
+  }) {
+    if (!disableElementCheck) {
+      assertElementNull(node);
+    }
+    assertTypeNull(node);
+  }
+
   /// TODO(scheglov) Remove `?` from [declaration].
   Matcher elementMatcher(
     Element? declaration, {
@@ -905,7 +842,7 @@
     required List<ExpectedError> nullable,
     required List<ExpectedError> legacy,
   }) {
-    if (typeToStringWithNullability) {
+    if (isNullSafetyEnabled) {
       return nullable;
     } else {
       return legacy;
@@ -1011,19 +948,35 @@
   /// Return a textual representation of the [type] that is appropriate for
   /// tests.
   String typeString(DartType type) =>
-      type.getDisplayString(withNullability: typeToStringWithNullability);
+      type.getDisplayString(withNullability: isNullSafetyEnabled);
 
   String typeStringByNullability({
     required String nullable,
     required String legacy,
   }) {
-    if (typeToStringWithNullability) {
+    if (isNullSafetyEnabled) {
       return nullable;
     } else {
       return legacy;
     }
   }
 
+  /// Nodes that are targets of an assignment should not be resolved,
+  /// instead the enclosing [CompoundAssignmentExpression] is resolved.
+  void _assertUnresolvedAssignmentTarget(Expression node) {
+    if (node is IndexExpression) {
+      assertUnresolvedIndexExpression(node);
+    } else if (node is PrefixedIdentifier) {
+      assertUnresolvedPrefixedIdentifier(node);
+    } else if (node is PropertyAccess) {
+      assertUnresolvedPropertyAccess(node);
+    } else if (node is SimpleIdentifier) {
+      assertUnresolvedSimpleIdentifier(node, disableElementCheck: true);
+    } else {
+      // Not LValue.
+    }
+  }
+
   Matcher _elementMatcher(Object? elementOrMatcher) {
     if (elementOrMatcher is Element) {
       return _ElementMatcher(this, declaration: elementOrMatcher);
@@ -1046,6 +999,18 @@
             "'${classElement.name}'.");
   }
 
+  String _resolvedNodeText(AstNode node) {
+    var buffer = StringBuffer();
+    node.accept(
+      ResolvedAstPrinter(
+        selfUriStr: result.uri.toString(),
+        sink: buffer,
+        indent: '',
+      ),
+    );
+    return buffer.toString();
+  }
+
   static String _extractReturnType(String invokeType) {
     int functionIndex = invokeType.indexOf(' Function');
     expect(functionIndex, isNonNegative);
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index d47a2dc..e37f2e8 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -17,6 +17,23 @@
 @reflectiveTest
 class SimpleIdentifierResolutionTest extends PubPackageResolutionTest
     with SimpleIdentifierResolutionTestCases {
+  test_enum_typeParameter_in_method() async {
+    await assertNoErrorsInCode('''
+enum E<T> {
+  v;
+  void foo() {
+    T;
+  }
+}
+''');
+
+    assertSimpleIdentifier(
+      findNode.simple('T;'),
+      element: findElement.typeParameter('T'),
+      type: 'Type',
+    );
+  }
+
   test_functionReference() async {
     await assertErrorsInCode('''
 // @dart = 2.7
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
index 759b9e5..5ff9302 100644
--- a/pkg/analyzer/test/src/dart/resolution/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -49,6 +49,7 @@
 import 'method_invocation_test.dart' as method_invocation;
 import 'mixin_test.dart' as mixin_resolution;
 import 'namespace_test.dart' as namespace;
+import 'node_text_expectations.dart';
 import 'non_nullable_bazel_workspace_test.dart' as non_nullable_bazel_workspace;
 import 'non_nullable_test.dart' as non_nullable;
 import 'optional_const_test.dart' as optional_const;
@@ -128,5 +129,6 @@
     type_literal.main();
     type_name.main();
     yield_statement.main();
+    defineReflectiveTests(UpdateNodeTextExpectations);
   }, name: 'resolution');
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
index 45cef2a..c189677 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
@@ -8,14 +8,14 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ForElementWithNullSafetyTest);
-    defineReflectiveTests(IfElementWithNullSafetyTest);
-    defineReflectiveTests(SpreadElementWithNullSafetyTest);
+    defineReflectiveTests(ForElementTest);
+    defineReflectiveTests(IfElementTest);
+    defineReflectiveTests(SpreadElementTest);
   });
 }
 
 @reflectiveTest
-class ForElementWithNullSafetyTest extends PubPackageResolutionTest {
+class ForElementTest extends PubPackageResolutionTest {
   test_list_awaitForIn_dynamic_downward() async {
     await resolveTestCode('''
 void f() async {
@@ -192,7 +192,7 @@
 }
 
 @reflectiveTest
-class IfElementWithNullSafetyTest extends PubPackageResolutionTest {
+class IfElementTest extends PubPackageResolutionTest {
   test_list_downward() async {
     await resolveTestCode('''
 void f() {
@@ -228,7 +228,7 @@
 }
 
 @reflectiveTest
-class SpreadElementWithNullSafetyTest extends PubPackageResolutionTest {
+class SpreadElementTest extends PubPackageResolutionTest {
   test_list_downward() async {
     await resolveTestCode('''
 void f() {
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 8711811..8112a55 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
@@ -146,8 +146,6 @@
   a.foo = 0;
 }
 ''');
-    var propertyAccess = findNode.prefixed('.foo =');
-
     assertAssignment(
       findNode.assignment('foo ='),
       readElement: null,
@@ -160,14 +158,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertMember(
-        propertyAccess,
-        findElement.setter('foo', of: 'E'),
-        {'T': 'int'},
-      );
-    }
   }
 
   test_implicit_targetTypeParameter_hasBound_methodInvocation() async {
@@ -265,17 +255,6 @@
         type: 'S',
       );
 
-      if (hasAssignmentLeftResolution) {
-        assertPropertyAccess2(
-          findNode.propertyAccess('.test'),
-          element: elementMatcher(
-            findElement.setter('test'),
-            substitution: {'T': 'S'},
-          ),
-          type: 'S',
-        );
-      }
-
       assertTypeArgumentTypes(
         findNode.methodInvocation('g()'),
         ['S'],
@@ -294,17 +273,6 @@
         type: 'num',
       );
 
-      if (hasAssignmentLeftResolution) {
-        assertPropertyAccess2(
-          findNode.propertyAccess('.test'),
-          element: elementMatcher(
-            findElement.setter('test'),
-            substitution: {'T': 'num'},
-          ),
-          type: 'num',
-        );
-      }
-
       assertTypeArgumentTypes(
         findNode.methodInvocation('g()'),
         ['num'],
@@ -465,15 +433,6 @@
       operatorElement: null,
       type: 'double',
     );
-
-    if (hasAssignmentLeftResolution) {
-      var propertyAccess = findNode.propertyAccess('.foo =');
-      assertMember(
-        propertyAccess,
-        findElement.setter('foo', of: 'E'),
-        {'T': 'num'},
-      );
-    }
   }
 
   test_override_inferTypeArguments_error_couldNotInfer() async {
@@ -606,14 +565,5 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      var propertyAccess = findNode.propertyAccess('.foo =');
-      assertMember(
-        propertyAccess,
-        findElement.setter('foo', of: 'E'),
-        {'T': 'int'},
-      );
-    }
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart
index 7db248a..93b026c 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart
@@ -8,12 +8,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ThrowWithNullSafetyTest);
+    defineReflectiveTests(ThrowTest);
   });
 }
 
 @reflectiveTest
-class ThrowWithNullSafetyTest extends PubPackageResolutionTest {
+class ThrowTest extends PubPackageResolutionTest {
   test_downward() async {
     await resolveTestCode('''
 void f() {
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 99398a5..2e4fc17 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -856,5 +856,5 @@
 class TypeNameResolutionWithoutNullSafetyTest extends PubPackageResolutionTest
     with TypeNameResolutionTestCases, WithoutNullSafetyMixin {
   @override
-  bool get typeToStringWithNullability => true;
+  bool get isNullSafetyEnabled => true;
 }
diff --git a/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart b/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
index c78f9a4..7e64d5d 100644
--- a/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
+++ b/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_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:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
@@ -10,11 +9,11 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/legacy_type_asserter.dart';
 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
-import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../../generated/test_analysis_context.dart';
+import '../../../util/feature_sets.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -150,12 +149,7 @@
                 AstTestFactory.formalParameterList(),
                 AstTestFactory.expressionFunctionBody(e)))
       ],
-      featureSet: nonNullable
-          ? FeatureSet.latestLanguageVersion()
-          : FeatureSet.fromEnableFlags2(
-              sdkLanguageVersion: Version.parse('2.9.0'),
-              flags: [],
-            ),
+      featureSet: nonNullable ? FeatureSets.latest : FeatureSets.language_2_9,
     );
   }
 }
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 762abe6..da65cb3 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
@@ -368,14 +368,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess(
-        findNode.propertyAccess('super.foo'),
-        findElement.setter('foo', of: 'A'),
-        'int',
-      );
-    }
   }
 
   test_propertyAccess_setter_mixin_implements() async {
@@ -432,14 +424,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess(
-        findNode.propertyAccess('super.foo'),
-        findElement.setter('foo', of: 'A'),
-        'int',
-      );
-    }
   }
 
   test_propertyAccess_setter_superHasNoSuchMethod() async {
@@ -466,14 +450,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess(
-        findNode.propertyAccess('super.foo'),
-        findElement.setter('foo', of: 'A'),
-        'int',
-      );
-    }
   }
 
   test_propertyAccess_setter_superSuperHasConcrete() async {
@@ -504,13 +480,5 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertPropertyAccess(
-        findNode.propertyAccess('super.foo'),
-        findElement.setter('foo', of: 'A'),
-        'int',
-      );
-    }
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart
index 79b9f6e..46fccef 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_extension_member_access_test.dart
@@ -342,11 +342,15 @@
 ''', [
       error(CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS, 88, 1),
     ]);
-    var access = findNode.propertyAccess('0.a');
-    assertElementNull(access);
-    if (hasAssignmentLeftResolution) {
-      assertTypeDynamic(access);
-    }
+    assertAssignment(
+      findNode.assignment('= 3'),
+      readElement: null,
+      readType: null,
+      writeElement: null,
+      writeType: 'dynamic',
+      operatorElement: null,
+      type: 'int',
+    );
   }
 
   test_unnamed_extensions() async {
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 226eafa..59d97c5 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
@@ -85,6 +85,27 @@
 ''');
   }
 
+  test_enumConstant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0);
+  const E(String a);
+}
+''', [
+      error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 13, 1),
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 13, 1),
+    ]);
+  }
+
+  test_enumConstant_implicitDouble() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(0);
+  const E(double a);
+}
+''');
+  }
+
   test_expressionFromConstructorTearoff_withoutTypeArgs() async {
     await assertNoErrorsInCode('''
 class C<T> {
@@ -219,6 +240,17 @@
     ]);
   }
 
+  test_annotation_type_arguments_inferred() async {
+    await assertNoErrorsInCode('''
+@C([])
+int i = 0;
+
+class C<T> {
+  const C(List<List<T>> arg);
+}
+''');
+  }
+
   test_annotation_unnamedConstructor() async {
     await assertErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart
index 9b3c6ea..93ccda1 100644
--- a/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assert_in_redirecting_constructor_test.dart
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class AssertInRedirectingConstructorTest extends PubPackageResolutionTest {
-  test_assertBeforeRedirection() async {
+  test_class_assertBeforeRedirection() async {
     await assertErrorsInCode(r'''
 class A {}
 class B {
@@ -25,7 +25,7 @@
 ''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 34, 13)]);
   }
 
-  test_justAssert() async {
+  test_class_justAssert() async {
     await assertNoErrorsInCode(r'''
 class A {}
 class B {
@@ -35,7 +35,7 @@
 ''');
   }
 
-  test_justRedirection() async {
+  test_class_justRedirection() async {
     await assertNoErrorsInCode(r'''
 class A {}
 class B {
@@ -45,7 +45,7 @@
 ''');
   }
 
-  test_redirectionBeforeAssert() async {
+  test_class_redirectionBeforeAssert() async {
     await assertErrorsInCode(r'''
 class A {}
 class B {
@@ -54,4 +54,43 @@
 }
 ''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 47, 13)]);
   }
+
+  test_enum_assertBeforeRedirection() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(42);
+  const E(int x) : assert(x > 0), this.name();
+  const E.name();
+}
+''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 37, 13)]);
+  }
+
+  test_enum_justAssert() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(42);
+  const E(int x) : assert(x > 0);
+}
+''');
+  }
+
+  test_enum_justRedirection() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(0);
+  const E(int x) : this.name();
+  const E.name();
+}
+''');
+  }
+
+  test_enum_redirectionBeforeAssert() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(42);
+  const E(int x) : this.name(), assert(x > 0);
+  const E.name();
+}
+''', [error(CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR, 50, 13)]);
+  }
 }
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 8ae77f0..a0c388c 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
@@ -73,6 +73,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_classMemberVariable() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -107,6 +108,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_classStaticVariable() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -197,6 +199,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_topLevelVariable() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -212,6 +215,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_topLevelVariable_assignment_field() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -228,6 +232,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_topLevelVariable_assignment_functionExpression() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -273,6 +278,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_topLevelVariable_binaryExpression() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -310,6 +316,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_topLevelVariable_ternary() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
index ae2f294..3cf147a 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
@@ -10,13 +10,40 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssignmentToFinalLocalTest);
-    defineReflectiveTests(AssignmentToFinalLocalWithNullSafetyTest);
+    defineReflectiveTests(AssignmentToFinalLocalWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class AssignmentToFinalLocalTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+class AssignmentToFinalLocalTest extends PubPackageResolutionTest {
+  test_localVariable_late() async {
+    await assertNoErrorsInCode('''
+void f() {
+  late final int a;
+  a = 1;
+  a;
+}
+''');
+  }
+
+  test_parameter_superFormal() async {
+    await assertErrorsInCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  var x;
+  B(super.a) : x = (() { a = 0; });
+}
+''', [
+      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 78, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class AssignmentToFinalLocalWithoutNullSafetyTest
+    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
   test_localVariable() async {
     await assertErrorsInCode('''
 f() {
@@ -150,31 +177,3 @@
     ]);
   }
 }
-
-@reflectiveTest
-class AssignmentToFinalLocalWithNullSafetyTest
-    extends PubPackageResolutionTest {
-  test_localVariable_late() async {
-    await assertNoErrorsInCode('''
-void f() {
-  late final int a;
-  a = 1;
-  a;
-}
-''');
-  }
-
-  test_parameter_superFormal() async {
-    await assertErrorsInCode('''
-class A {
-  A(int a);
-}
-class B extends A {
-  var x;
-  B(super.a) : x = (() { a = 0; });
-}
-''', [
-      error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 78, 1),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart
index 2923bf7..71eb8e1 100644
--- a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_name_test.dart
@@ -23,6 +23,16 @@
     ]);
   }
 
+  test_enum() async {
+    await assertErrorsInCode('''
+enum as {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 5, 2),
+    ]);
+  }
+
   test_mixin() async {
     await assertErrorsInCode('''
 mixin as {}
@@ -30,4 +40,20 @@
       error(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME, 6, 2),
     ]);
   }
+
+  test_mixin_OK_on() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+mixin on on A {}
+
+mixin M on on {}
+
+mixin M2 implements on {}
+
+class B = A with on;
+class C = B with M;
+class D = Object with M2;
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
index 2af52ed..ecd9733 100644
--- a/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
@@ -10,104 +10,14 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CaseExpressionTypeImplementsEqualsTest);
-    defineReflectiveTests(CaseExpressionTypeImplementsEqualsWithNullSafetyTest);
+    defineReflectiveTests(
+      CaseExpressionTypeImplementsEqualsWithoutNullSafetyTest,
+    );
   });
 }
 
 @reflectiveTest
-class CaseExpressionTypeImplementsEqualsTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
-  test_declares() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  final int value;
-
-  const A(this.value);
-
-  bool operator==(Object other);
-}
-
-class B extends A {
-  const B(int value) : super(value);
-}
-
-void f(e) {
-  switch (e) {
-    case const B(0):
-      break;
-    case const B(1):
-      break;
-  }
-}
-''');
-  }
-
-  test_implements() async {
-    await assertErrorsInCode(r'''
-class A {
-  final int value;
-
-  const A(this.value);
-
-  bool operator ==(Object other) {
-    return false;
-  }
-}
-
-void f(e) {
-  switch (e) {
-    case A(0):
-      break;
-  }
-}
-''', [
-      error(
-          CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS, 128, 6),
-    ]);
-  }
-
-  test_int() async {
-    await assertNoErrorsInCode(r'''
-void f(e) {
-  switch (e) {
-    case 0:
-      break;
-  }
-}
-''');
-  }
-
-  test_Object() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  final int value;
-  const A(this.value);
-}
-
-void f(e) {
-  switch (e) {
-    case A(0):
-      break;
-  }
-}
-''');
-  }
-
-  test_String() async {
-    await assertNoErrorsInCode(r'''
-void f(e) {
-  switch (e) {
-    case '0':
-      break;
-  }
-}
-''');
-  }
-}
-
-@reflectiveTest
-class CaseExpressionTypeImplementsEqualsWithNullSafetyTest
-    extends PubPackageResolutionTest {
+class CaseExpressionTypeImplementsEqualsTest extends PubPackageResolutionTest {
   test_declares() async {
     await assertNoErrorsInCode(r'''
 abstract class A {
@@ -195,3 +105,94 @@
 ''');
   }
 }
+
+@reflectiveTest
+class CaseExpressionTypeImplementsEqualsWithoutNullSafetyTest
+    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
+  test_declares() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  final int value;
+
+  const A(this.value);
+
+  bool operator==(Object other);
+}
+
+class B extends A {
+  const B(int value) : super(value);
+}
+
+void f(e) {
+  switch (e) {
+    case const B(0):
+      break;
+    case const B(1):
+      break;
+  }
+}
+''');
+  }
+
+  test_implements() async {
+    await assertErrorsInCode(r'''
+class A {
+  final int value;
+
+  const A(this.value);
+
+  bool operator ==(Object other) {
+    return false;
+  }
+}
+
+void f(e) {
+  switch (e) {
+    case A(0):
+      break;
+  }
+}
+''', [
+      error(
+          CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS, 128, 6),
+    ]);
+  }
+
+  test_int() async {
+    await assertNoErrorsInCode(r'''
+void f(e) {
+  switch (e) {
+    case 0:
+      break;
+  }
+}
+''');
+  }
+
+  test_Object() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  final int value;
+  const A(this.value);
+}
+
+void f(e) {
+  switch (e) {
+    case A(0):
+      break;
+  }
+}
+''');
+  }
+
+  test_String() async {
+    await assertNoErrorsInCode(r'''
+void f(e) {
+  switch (e) {
+    case '0':
+      break;
+  }
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/concrete_class_has_enum_superinterface_test.dart b/pkg/analyzer/test/src/diagnostics/concrete_class_has_enum_superinterface_test.dart
new file mode 100644
index 0000000..2a8c23e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/concrete_class_has_enum_superinterface_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:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NonAbstractClassHasEnumSuperinterfaceTest);
+  });
+}
+
+@reflectiveTest
+class NonAbstractClassHasEnumSuperinterfaceTest
+    extends PubPackageResolutionTest {
+  test_class_abstract() async {
+    await assertNoErrorsInCode('''
+abstract class A implements Enum {}
+''');
+  }
+
+  test_class_concrete() async {
+    await assertErrorsInCode('''
+class A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE, 19, 4),
+    ]);
+  }
+
+  test_class_concrete_indirect() async {
+    await assertErrorsInCode('''
+abstract class A implements Enum {}
+class B implements A {}
+''', [
+      error(CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE, 42, 1),
+    ]);
+  }
+
+  test_classTypeAlias_concrete() async {
+    await assertErrorsInCode('''
+class M {}
+class A = Object with M implements Enum;
+''', [
+      error(CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE, 46, 4),
+    ]);
+  }
+
+  test_classTypeAlias_concrete_indirect() async {
+    await assertErrorsInCode('''
+mixin M {}
+abstract class A implements Enum {}
+class B = Object with M implements A;
+''', [
+      error(CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE, 53, 1),
+    ]);
+  }
+
+  test_enum() async {
+    await assertNoErrorsInCode('''
+enum E implements Enum {
+  v
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
index 3faf721..d81ddad 100644
--- a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
@@ -10,40 +10,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConcreteClassWithAbstractMemberTest);
-    defineReflectiveTests(ConcreteClassWithAbstractMemberWithNullSafetyTest);
+    defineReflectiveTests(ConcreteClassWithAbstractMemberWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class ConcreteClassWithAbstractMemberTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, ConcreteClassWithAbstractMemberTestCases {}
-
-mixin ConcreteClassWithAbstractMemberTestCases on PubPackageResolutionTest {
-  test_direct() async {
-    await assertErrorsInCode('''
-class A {
-  m();
-}''', [
-      error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 4),
-    ]);
-  }
-
-  test_noSuchMethod_interface() async {
-    await assertErrorsInCode('''
-class I {
-  noSuchMethod(v) => '';
-}
-class A implements I {
-  m();
-}''', [
-      error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 62, 4),
-    ]);
-  }
-}
-
-@reflectiveTest
-class ConcreteClassWithAbstractMemberWithNullSafetyTest
-    extends PubPackageResolutionTest
     with ConcreteClassWithAbstractMemberTestCases {
   test_abstract_field() async {
     await assertErrorsInCode('''
@@ -85,3 +57,31 @@
 ''');
   }
 }
+
+mixin ConcreteClassWithAbstractMemberTestCases on PubPackageResolutionTest {
+  test_direct() async {
+    await assertErrorsInCode('''
+class A {
+  m();
+}''', [
+      error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 4),
+    ]);
+  }
+
+  test_noSuchMethod_interface() async {
+    await assertErrorsInCode('''
+class I {
+  noSuchMethod(v) => '';
+}
+class A implements I {
+  m();
+}''', [
+      error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 62, 4),
+    ]);
+  }
+}
+
+@reflectiveTest
+class ConcreteClassWithAbstractMemberWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, ConcreteClassWithAbstractMemberTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_constructor_and_static_field_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_constructor_and_static_field_test.dart
new file mode 100644
index 0000000..2447ef9
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_constructor_and_static_field_test.dart
@@ -0,0 +1,135 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConflictingConstructorAndStaticFieldTest);
+  });
+}
+
+@reflectiveTest
+class ConflictingConstructorAndStaticFieldTest
+    extends PubPackageResolutionTest {
+  test_class_instance_field() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  C.foo();
+  int foo = 0;
+}
+''');
+  }
+
+  test_class_static_field() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.foo();
+  static int foo = 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 14, 3),
+    ]);
+  }
+
+  test_class_static_getter() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.foo();
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER, 14,
+          3),
+    ]);
+  }
+
+  test_class_static_notSameClass() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static int foo = 0;
+}
+class B extends A {
+  B.foo();
+}
+''');
+  }
+
+  test_class_static_setter() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.foo();
+  static void set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER, 14,
+          3),
+    ]);
+  }
+
+  test_enum_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo.foo();
+  const E.foo();
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 32, 3),
+    ]);
+  }
+
+  test_enum_instance_field() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  final int foo = 0;
+}
+''');
+  }
+
+  test_enum_static_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  static int foo = 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD, 30, 3),
+    ]);
+  }
+
+  test_enum_static_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER, 30,
+          3),
+    ]);
+  }
+
+  test_enum_static_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  static void set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER, 30,
+          3),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_constructor_and_static_method_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_constructor_and_static_method_test.dart
new file mode 100644
index 0000000..2ce27da
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_constructor_and_static_method_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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConflictingConstructorAndStaticMethodTest);
+  });
+}
+
+@reflectiveTest
+class ConflictingConstructorAndStaticMethodTest
+    extends PubPackageResolutionTest {
+  test_class_instance() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  C.foo();
+  void foo() {}
+}
+''');
+  }
+
+  test_class_notSameClass() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  static void foo() {}
+}
+class B extends A {
+  B.foo();
+}
+''');
+  }
+
+  test_class_static() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.foo();
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD, 14,
+          3),
+    ]);
+  }
+
+  test_enum_instance() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  void foo() {}
+}
+''');
+  }
+
+  test_enum_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD, 30,
+          3),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_field_and_method_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_field_and_method_test.dart
new file mode 100644
index 0000000..62220d0
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_field_and_method_test.dart
@@ -0,0 +1,101 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConflictingFieldAndMethodTest);
+  });
+}
+
+@reflectiveTest
+class ConflictingFieldAndMethodTest extends PubPackageResolutionTest {
+  test_class_inSuper_field() async {
+    await assertErrorsInCode(r'''
+class A {
+  foo() {}
+}
+class B extends A {
+  int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
+    ]);
+  }
+
+  test_class_inSuper_getter() async {
+    await assertErrorsInCode(r'''
+class A {
+  foo() {}
+}
+class B extends A {
+  get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
+    ]);
+  }
+
+  test_class_inSuper_setter() async {
+    await assertErrorsInCode(r'''
+class A {
+  foo() {}
+}
+class B extends A {
+  set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 49, 3),
+    ]);
+  }
+
+  test_enum_inMixin_field() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  final int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 62, 3),
+    ]);
+  }
+
+  test_enum_inMixin_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 60, 3),
+    ]);
+  }
+
+  test_enum_inMixin_setter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  set foo(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, 56, 3),
+    ]);
+  }
+}
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 2754202..cfa5128 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
@@ -176,6 +176,32 @@
     ]);
   }
 
+  test_enum_implements() async {
+    await assertErrorsInCode('''
+class I<T> {}
+class A implements I<int> {}
+class B implements I<String> {}
+enum E implements A, B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES, 80, 1),
+    ]);
+  }
+
+  test_enum_with() async {
+    await assertErrorsInCode('''
+class I<T> {}
+mixin M1 implements I<int> {}
+mixin M2 implements I<String> {}
+enum E with M1, M2 {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES, 82, 1),
+    ]);
+  }
+
   test_mixin_on_implements() async {
     await assertErrorsInCode('''
 class I<T> {}
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_method_and_field_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_method_and_field_test.dart
new file mode 100644
index 0000000..903c338
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_method_and_field_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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConflictingMethodAndFieldTest);
+  });
+}
+
+@reflectiveTest
+class ConflictingMethodAndFieldTest extends PubPackageResolutionTest {
+  test_class_inSuper_field() async {
+    await assertErrorsInCode(r'''
+class A {
+  int foo = 0;
+}
+class B extends A {
+  foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 49, 3),
+    ]);
+  }
+
+  test_class_inSuper_getter() async {
+    await assertErrorsInCode(r'''
+class A {
+  get foo => 0;
+}
+class B extends A {
+  foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 50, 3),
+    ]);
+  }
+
+  test_class_inSuper_setter() async {
+    await assertErrorsInCode(r'''
+class A {
+  set foo(_) {}
+}
+class B extends A {
+  foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 50, 3),
+    ]);
+  }
+
+  test_enum_inMixin_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int get foo => 0;
+}
+
+enum E with M {
+  v;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 61, 3),
+    ]);
+  }
+
+  test_enum_inMixin_setter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  set foo(int _) {}
+}
+
+enum E with M {
+  v;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, 61, 3),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
index 85205db..179896d 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
@@ -451,7 +451,7 @@
 
 @reflectiveTest
 class ConflictingStaticAndInstanceEnumTest extends PubPackageResolutionTest {
-  test_hashCode() async {
+  test_constant_hashCode() async {
     await assertErrorsInCode(r'''
 enum E {
   a, hashCode, b
@@ -461,7 +461,7 @@
     ]);
   }
 
-  test_index() async {
+  test_constant_index() async {
     await assertErrorsInCode(r'''
 enum E {
   a, index, b
@@ -471,7 +471,7 @@
     ]);
   }
 
-  test_noSuchMethod() async {
+  test_constant_noSuchMethod() async {
     await assertErrorsInCode(r'''
 enum E {
   a, noSuchMethod, b
@@ -481,7 +481,7 @@
     ]);
   }
 
-  test_runtimeType() async {
+  test_constant_runtimeType() async {
     await assertErrorsInCode(r'''
 enum E {
   a, runtimeType, b
@@ -491,7 +491,18 @@
     ]);
   }
 
-  test_toString() async {
+  test_constant_this_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+    ]);
+  }
+
+  test_constant_toString() async {
     await assertErrorsInCode(r'''
 enum E {
   a, toString, b
@@ -500,10 +511,280 @@
       error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 14, 8),
     ]);
   }
+
+  test_field_dartCoreEnum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static final int hashCode = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 33, 8),
+    ]);
+  }
+
+  test_field_mixin_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int get foo => 0;
+}
+
+enum E with M {
+  v;
+  static final int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 73, 3),
+    ]);
+  }
+
+  test_field_mixin_method() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  static final int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 69, 3),
+    ]);
+  }
+
+  test_field_mixin_setter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  set foo(int _) {}
+}
+
+enum E with M {
+  v;
+  static final int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 73, 3),
+    ]);
+  }
+
+  test_field_this_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+    ]);
+  }
+
+  test_field_this_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static final int foo = 0;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 33, 3),
+    ]);
+  }
+
+  test_field_this_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static final int foo = 0;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 33, 3),
+    ]);
+  }
+
+  test_field_this_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static final int foo = 0;
+  set foo(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 33, 3),
+    ]);
+  }
+
+  test_getter_this_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int get foo => 0;
+  set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 31, 3),
+    ]);
+  }
+
+  test_method_dartCoreEnum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int hashCode() => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 27, 8),
+    ]);
+  }
+
+  test_method_mixin_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int get foo => 0;
+}
+
+enum E with M {
+  v;
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 68, 3),
+    ]);
+  }
+
+  test_method_mixin_method() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 64, 3),
+    ]);
+  }
+
+  test_method_mixin_setter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  set foo(int _) {}
+}
+
+enum E with M {
+  v;
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 68, 3),
+    ]);
+  }
+
+  test_method_this_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+    ]);
+  }
+
+  test_method_this_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 28, 3),
+    ]);
+  }
+
+  test_method_this_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 28, 3),
+    ]);
+  }
+
+  test_method_this_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+  set foo(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 28, 3),
+    ]);
+  }
+
+  test_setter_this_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static set foo(_) {}
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 27, 3),
+    ]);
+  }
 }
 
 @reflectiveTest
 class ConflictingStaticAndInstanceMixinTest extends PubPackageResolutionTest {
+  test_dartCoreEnum_index_field() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  static int index = 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 31, 5),
+    ]);
+  }
+
+  test_dartCoreEnum_index_getter() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  static int get index => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 35, 5),
+    ]);
+  }
+
+  test_dartCoreEnum_index_method() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  static int index() => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 31, 5),
+    ]);
+  }
+
+  test_dartCoreEnum_index_setter() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  static set index(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 31, 5),
+    ]);
+  }
+
   test_inConstraint_getter_getter() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_container_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_container_test.dart
index ecf579a..14f3ce5 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_container_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_container_test.dart
@@ -10,6 +10,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConflictingTypeVariableAndClassTest);
+    defineReflectiveTests(ConflictingTypeVariableAndEnumTest);
     defineReflectiveTests(ConflictingTypeVariableAndExtensionTest);
     defineReflectiveTests(ConflictingTypeVariableAndMixinTest);
   });
@@ -27,6 +28,19 @@
 }
 
 @reflectiveTest
+class ConflictingTypeVariableAndEnumTest extends PubPackageResolutionTest {
+  test_conflict() async {
+    await assertErrorsInCode(r'''
+enum E<E> {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_ENUM, 7, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
 class ConflictingTypeVariableAndExtensionTest extends PubPackageResolutionTest {
   test_conflict() async {
     await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart
index efab14b..00ce562 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_type_variable_and_member_test.dart
@@ -10,6 +10,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConflictingTypeVariableAndMemberClassTest);
+    defineReflectiveTests(ConflictingTypeVariableAndMemberEnumTest);
     defineReflectiveTests(ConflictingTypeVariableAndMemberExtensionTest);
     defineReflectiveTests(ConflictingTypeVariableAndMemberMixinTest);
   });
@@ -86,6 +87,46 @@
 }
 
 @reflectiveTest
+class ConflictingTypeVariableAndMemberEnumTest
+    extends PubPackageResolutionTest {
+  test_getter() async {
+    await assertErrorsInCode(r'''
+enum A<T> {
+  v;
+  get T => null;
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM, 7, 1),
+    ]);
+  }
+
+  test_method() async {
+    await assertErrorsInCode(r'''
+enum A<T> {
+  v;
+  void T() {}
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM, 7, 1),
+    ]);
+  }
+
+  test_setter() async {
+    await assertErrorsInCode(r'''
+enum A<T> {
+  v;
+  set T(x) {}
+}
+''', [
+      error(
+          CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM, 7, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
 class ConflictingTypeVariableAndMemberExtensionTest
     extends PubPackageResolutionTest {
   test_getter() async {
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 cdd3c81..5cb3c4e 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
@@ -104,6 +104,32 @@
     ]);
   }
 
+  test_enum_int_null() async {
+    await assertErrorsInCode(r'''
+const dynamic a = null;
+
+enum E {
+  v(a);
+  const E(int a);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 38, 1),
+    ]);
+  }
+
+  test_enum_int_String() async {
+    await assertErrorsInCode(r'''
+const dynamic a = '0';
+
+enum E {
+  v(a);
+  const E(int a);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 37, 1),
+    ]);
+  }
+
   test_int_to_double_reference_from_other_library_other_file_after() async {
     newFile('$testPackageLibPath/other.dart', content: '''
 import 'test.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
index 3b94c24..5ef6e88 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ConstConstructorWithFieldInitializedByNonConstTest
     extends PubPackageResolutionTest {
-  test_factoryConstructor() async {
+  test_class_factoryConstructor() async {
     await assertNoErrorsInCode(r'''
 class A {
   final List<int> list = f();
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_instanceField() async {
+  test_class_instanceField() async {
     await assertErrorsInCode(r'''
 class A {
   final int i = f();
@@ -50,7 +50,7 @@
     ]);
   }
 
-  test_staticField() async {
+  test_class_staticField() async {
     await assertNoErrorsInCode(r'''
 class A {
   static final int i = f();
@@ -61,4 +61,32 @@
 }
 ''');
   }
+
+  test_enum_instanceField() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int i = f();
+  const E();
+}
+int f() => 0;
+''', [
+      error(
+          CompileTimeErrorCode
+              .CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
+          37,
+          5),
+    ]);
+  }
+
+  test_enum_staticField() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static final int i = f();
+  const E();
+}
+int f() => 0;
+''');
+  }
 }
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 6c17ac2..f5911ee 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
@@ -53,6 +53,18 @@
       error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 129, 18),
     ]);
   }
+
+  test_enum_constructor_initializer_asExpression() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v();
+  final int x;
+  const E({int? x}) : x = x as int;
+}
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 11, 3),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
index 85b1174..3fe5d0c 100644
--- a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
@@ -16,19 +16,21 @@
 
 @reflectiveTest
 class ConstNotInitializedTest extends PubPackageResolutionTest
-    with ConstNotInitializedTestCases {}
-
-mixin ConstNotInitializedTestCases on PubPackageResolutionTest {
-  test_extension_static() async {
+    with ConstNotInitializedTestCases {
+  test_enum_static() async {
     await assertErrorsInCode('''
-extension E on String {
+enum E {
+  v;
   static const F;
-}''', [
-      error(CompileTimeErrorCode.CONST_NOT_INITIALIZED, 39, 1),
+}
+''', [
+      error(CompileTimeErrorCode.CONST_NOT_INITIALIZED, 29, 1),
     ]);
   }
+}
 
-  test_instanceField_static() async {
+mixin ConstNotInitializedTestCases on PubPackageResolutionTest {
+  test_class_static() async {
     await assertErrorsInCode(r'''
 class A {
   static const F;
@@ -38,6 +40,16 @@
     ]);
   }
 
+  test_extension_static() async {
+    await assertErrorsInCode('''
+extension E on String {
+  static const F;
+}
+''', [
+      error(CompileTimeErrorCode.CONST_NOT_INITIALIZED, 39, 1),
+    ]);
+  }
+
   test_local() async {
     await assertErrorsInCode(r'''
 f() {
@@ -49,7 +61,7 @@
     ]);
   }
 
-  test_top_level() async {
+  test_topLevel() async {
     await assertErrorsInCode('''
 const F;
 ''', [
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_non_constant_argument_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_non_constant_argument_test.dart
index e21d023..91e3a9e 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_non_constant_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_non_constant_argument_test.dart
@@ -47,6 +47,28 @@
     ]);
   }
 
+  test_enumConstant() async {
+    await assertErrorsInCode(r'''
+var a = 42;
+
+enum E {
+  v(a);
+  const E(_);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 26, 1),
+    ]);
+  }
+
+  test_enumConstant_constantContext() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v([]);
+  const E(_);
+}
+''');
+  }
+
   test_instanceCreation() async {
     await assertErrorsInCode(r'''
 class A {
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 3e89e8f..70ce1ae 100644
--- a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
@@ -10,12 +10,81 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CouldNotInferTest);
-    defineReflectiveTests(CouldNotInferWithNullSafetyTest);
+    defineReflectiveTests(CouldNotInferWithoutNullSafetyTest);
   });
 }
 
+/// TODO(https://github.com/dart-lang/sdk/issues/44078): Add tests with
+/// non-function typedefs.
 @reflectiveTest
-class CouldNotInferTest extends PubPackageResolutionTest
+class CouldNotInferTest extends PubPackageResolutionTest {
+  test_constructor_nullSafe_fromLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class C<T extends Object> {
+  C(T t);
+}
+''');
+
+    await assertNoErrorsInCode('''
+// @dart = 2.8
+import 'a.dart';
+
+void f(dynamic a) {
+  C(a);
+}
+''');
+  }
+
+  test_functionType() async {
+    await assertNoErrorsInCode('''
+void f<X>() {}
+
+main() {
+  [f];
+}
+''');
+  }
+
+  test_functionType_optOutOfGenericMetadata() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+void f<X>() {}
+''');
+    await assertErrorsInCode('''
+// @dart=2.12
+import 'a.dart';
+main() {
+  [f];
+}
+''', [
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 42, 3),
+    ]);
+  }
+
+  test_instanceCreation_viaTypeAlias_notWellBounded() async {
+    await assertErrorsInCode('''
+class C<X> {
+  C();
+  factory C.foo() => C();
+  factory C.bar() = C;
+}
+typedef G<X> = X Function(X);
+typedef A<X extends G<C<X>>> = C<X>;
+
+void f() {
+  A(); // Error.
+  A.foo(); // Error.
+  A.bar(); // Error.
+}
+''', [
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 152, 1),
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 169, 5),
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 190, 5),
+    ]);
+  }
+}
+
+@reflectiveTest
+class CouldNotInferWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_constructors_inferenceFBounded() async {
     await assertErrorsInCode('''
@@ -267,72 +336,3 @@
     ]);
   }
 }
-
-/// TODO(https://github.com/dart-lang/sdk/issues/44078): Add tests with
-/// non-function typedefs.
-@reflectiveTest
-class CouldNotInferWithNullSafetyTest extends PubPackageResolutionTest {
-  test_constructor_nullSafe_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
-class C<T extends Object> {
-  C(T t);
-}
-''');
-
-    await assertNoErrorsInCode('''
-// @dart = 2.8
-import 'a.dart';
-
-void f(dynamic a) {
-  C(a);
-}
-''');
-  }
-
-  test_functionType() async {
-    await assertNoErrorsInCode('''
-void f<X>() {}
-
-main() {
-  [f];
-}
-''');
-  }
-
-  test_functionType_optOutOfGenericMetadata() async {
-    newFile('$testPackageLibPath/a.dart', content: '''
-void f<X>() {}
-''');
-    await assertErrorsInCode('''
-// @dart=2.12
-import 'a.dart';
-main() {
-  [f];
-}
-''', [
-      error(CompileTimeErrorCode.COULD_NOT_INFER, 42, 3),
-    ]);
-  }
-
-  test_instanceCreation_viaTypeAlias_notWellBounded() async {
-    await assertErrorsInCode('''
-class C<X> {
-  C();
-  factory C.foo() => C();
-  factory C.bar() = C;
-}
-typedef G<X> = X Function(X);
-typedef A<X extends G<C<X>>> = C<X>;
-
-void f() {
-  A(); // Error.
-  A.foo(); // Error.
-  A.bar(); // Error.
-}
-''', [
-      error(CompileTimeErrorCode.COULD_NOT_INFER, 152, 1),
-      error(CompileTimeErrorCode.COULD_NOT_INFER, 169, 5),
-      error(CompileTimeErrorCode.COULD_NOT_INFER, 190, 5),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
index e2ba5bb..1ef5d39 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
@@ -140,6 +140,24 @@
       error(HintCode.DEAD_CODE, 111, 10),
     ]);
   }
+
+  test_try_finally() async {
+    await assertErrorsInCode('''
+main() {
+  try {
+    foo();
+    print('dead');
+  } finally {
+    print('alive');
+  }
+  print('dead');
+}
+Never foo() => throw 'exception';
+''', [
+      error(HintCode.DEAD_CODE, 32, 14),
+      error(HintCode.DEAD_CODE, 87, 14),
+    ]);
+  }
 }
 
 mixin DeadCodeTestCases on PubPackageResolutionTest {
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 4c9a2d6..0b7b7e8 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -11,7 +11,8 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(DeprecatedMemberUse_BasicWorkspaceTest);
     defineReflectiveTests(
-        DeprecatedMemberUse_BasicWorkspace_WithNullSafetyTest);
+      DeprecatedMemberUse_BasicWorkspace_WithoutNullSafetyTest,
+    );
     defineReflectiveTests(DeprecatedMemberUse_BazelWorkspaceTest);
     defineReflectiveTests(DeprecatedMemberUse_GnWorkspaceTest);
     defineReflectiveTests(DeprecatedMemberUse_PackageBuildWorkspaceTest);
@@ -29,8 +30,12 @@
 }
 
 @reflectiveTest
-class DeprecatedMemberUse_BasicWorkspace_WithNullSafetyTest
+class DeprecatedMemberUse_BasicWorkspace_WithoutNullSafetyTest
     extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, DeprecatedMemberUse_BasicWorkspaceTestCases {}
+
+@reflectiveTest
+class DeprecatedMemberUse_BasicWorkspaceTest extends PubPackageResolutionTest
     with DeprecatedMemberUse_BasicWorkspaceTestCases {
   test_instanceCreation_namedParameter_fromLegacy() async {
     newFile('$workspaceRootPath/aaa/lib/a.dart', content: r'''
@@ -107,10 +112,6 @@
   }
 }
 
-@reflectiveTest
-class DeprecatedMemberUse_BasicWorkspaceTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, DeprecatedMemberUse_BasicWorkspaceTestCases {}
-
 mixin DeprecatedMemberUse_BasicWorkspaceTestCases on PubPackageResolutionTest {
   @override
   void setUp() {
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_test.dart
new file mode 100644
index 0000000..5ac5636
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_test.dart
@@ -0,0 +1,109 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DuplicateConstructorDefaultTest);
+  });
+}
+
+@reflectiveTest
+class DuplicateConstructorDefaultTest extends PubPackageResolutionTest {
+  test_class_empty_empty() async {
+    await assertErrorsInCode(r'''
+class C {
+  C();
+  C();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 19, 1),
+    ]);
+  }
+
+  test_class_empty_new() async {
+    await assertErrorsInCode(r'''
+class C {
+  C();
+  C.new();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 19, 5),
+    ]);
+  }
+
+  test_class_new_empty() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.new();
+  C();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 23, 1),
+    ]);
+  }
+
+  test_class_new_new() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.new();
+  C.new();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 23, 5),
+    ]);
+  }
+
+  test_enum_empty_empty() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E();
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 35, 1),
+    ]);
+  }
+
+  test_enum_empty_new() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E();
+  const E.new();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 35, 5),
+    ]);
+  }
+
+  test_enum_new_empty() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E.new();
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 39, 1),
+    ]);
+  }
+
+  test_enum_new_new() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E.new();
+  const E.new();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, 39, 5),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_test.dart
new file mode 100644
index 0000000..166ce79
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_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:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DuplicateConstructorNameTest);
+  });
+}
+
+@reflectiveTest
+class DuplicateConstructorNameTest extends PubPackageResolutionTest {
+  test_class() async {
+    await assertErrorsInCode(r'''
+class C {
+  C.foo();
+  C.foo();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, 23, 5),
+    ]);
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  const E.foo();
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, 45, 5),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index 66df7dcab..7fec331 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -13,6 +13,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(DuplicateDefinitionTest);
     defineReflectiveTests(DuplicateDefinitionClassTest);
+    defineReflectiveTests(DuplicateDefinitionEnumTest);
     defineReflectiveTests(DuplicateDefinitionExtensionTest);
     defineReflectiveTests(DuplicateDefinitionMixinTest);
   });
@@ -327,6 +328,385 @@
 }
 
 @reflectiveTest
+class DuplicateDefinitionEnumTest extends PubPackageResolutionTest {
+  test_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo, foo
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 16, 3),
+    ]);
+  }
+
+  test_instance_field_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int foo = 0;
+  final int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 47, 3),
+    ]);
+  }
+
+  test_instance_field_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int foo = 0;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 45, 3),
+    ]);
+  }
+
+  test_instance_field_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int foo = 0;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 42, 3),
+    ]);
+  }
+
+  test_instance_fieldFinal_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int foo = 0;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 45, 3),
+    ]);
+  }
+
+  test_instance_fieldFinal_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  final int foo = 0;
+  set foo(int x) {}
+}
+''');
+  }
+
+  test_instance_getter_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  int get foo => 0;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 44, 3),
+    ]);
+  }
+
+  test_instance_getter_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  int get foo => 0;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 41, 3),
+    ]);
+  }
+
+  test_instance_getter_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  int get foo => 0;
+  set foo(_) {}
+}
+''');
+  }
+
+  test_instance_method_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void foo() {}
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 40, 3),
+    ]);
+  }
+
+  test_instance_method_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void foo() {}
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 37, 3),
+    ]);
+  }
+
+  test_instance_method_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void foo() {}
+  set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 36, 3),
+    ]);
+  }
+
+  test_instance_setter_getter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  set foo(_) {}
+  int get foo => 0;
+}
+''');
+  }
+
+  test_instance_setter_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  set foo(_) {}
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 37, 3),
+    ]);
+  }
+
+  test_instance_setter_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void set foo(_) {}
+  void set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 46, 3),
+    ]);
+  }
+
+  test_static_constant_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  static int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 29, 3),
+    ]);
+  }
+
+  test_static_constant_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 33, 3),
+    ]);
+  }
+
+  test_static_constant_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 30, 3),
+    ]);
+  }
+
+  test_static_constant_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  foo;
+  static set foo(_) {}
+}
+''');
+  }
+
+  test_static_field_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int foo = 0;
+  static int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 49, 3),
+    ]);
+  }
+
+  test_static_field_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int foo = 0;
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 53, 3),
+    ]);
+  }
+
+  test_static_field_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int foo = 0;
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 50, 3),
+    ]);
+  }
+
+  test_static_fieldFinal_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static final int foo = 0;
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 59, 3),
+    ]);
+  }
+
+  test_static_fieldFinal_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static final int foo = 0;
+  static set foo(int x) {}
+}
+''');
+  }
+
+  test_static_getter_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int get foo => 0;
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 58, 3),
+    ]);
+  }
+
+  test_static_getter_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int get foo => 0;
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 55, 3),
+    ]);
+  }
+
+  test_static_getter_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static int get foo => 0;
+  static set foo(_) {}
+}
+''');
+  }
+
+  test_static_method_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+  static int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 54, 3),
+    ]);
+  }
+
+  test_static_method_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 51, 3),
+    ]);
+  }
+
+  test_static_method_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+  static set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 50, 3),
+    ]);
+  }
+
+  test_static_setter_getter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static set foo(_) {}
+  static int get foo => 0;
+}
+''');
+  }
+
+  test_static_setter_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static set foo(_) {}
+  static void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 51, 3),
+    ]);
+  }
+
+  test_static_setter_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void set foo(_) {}
+  static void set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 60, 3),
+    ]);
+  }
+}
+
+@reflectiveTest
 class DuplicateDefinitionExtensionTest extends PubPackageResolutionTest {
   test_extendedType_instance() async {
     await assertNoErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_named_argument_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_named_argument_test.dart
index 74bca78..2b2b9aa 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_named_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_named_argument_test.dart
@@ -54,6 +54,17 @@
 ''', [error(CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT, 88, 1)]);
   }
 
+  test_enumConstant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(a: 0, a: 1);
+  const E({required int a});
+}
+''', [
+      error(CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT, 19, 1),
+    ]);
+  }
+
   test_function() async {
     await assertErrorsInCode(r'''
 f({a, b}) {}
diff --git a/pkg/analyzer/test/src/diagnostics/enum_constant_with_non_const_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/enum_constant_with_non_const_constructor_test.dart
new file mode 100644
index 0000000..a113a8a
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/enum_constant_with_non_const_constructor_test.dart
@@ -0,0 +1,54 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EnumConstantWithNonConstConstructorTest);
+  });
+}
+
+@reflectiveTest
+class EnumConstantWithNonConstConstructorTest extends PubPackageResolutionTest {
+  test_named() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.named();
+  factory E.named() => throw 0;
+  const E(); 
+}
+''', [
+      error(
+          CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR, 13, 5),
+    ]);
+  }
+
+  test_unnamed_withArguments() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v();
+  factory E() => throw 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR, 11, 1),
+    ]);
+  }
+
+  test_unnamed_withoutArguments() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  factory E() => throw 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR, 11, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/enum_instantiated_to_bounds_is_not_well_bounded_test.dart b/pkg/analyzer/test/src/diagnostics/enum_instantiated_to_bounds_is_not_well_bounded_test.dart
new file mode 100644
index 0000000..2a07dc5
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/enum_instantiated_to_bounds_is_not_well_bounded_test.dart
@@ -0,0 +1,33 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EnumInstantiatedToBoundsIsNotWellBoundedTest);
+  });
+}
+
+@reflectiveTest
+class EnumInstantiatedToBoundsIsNotWellBoundedTest
+    extends PubPackageResolutionTest {
+  test_enum_it() async {
+    await assertErrorsInCode('''
+typedef A<X> = X Function(X);
+
+enum E<T extends A<T>, U> {
+  v<Never, int>()
+}
+''', [
+      error(
+          CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED,
+          36,
+          1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/enum_mixin_with_instance_variable_test.dart b/pkg/analyzer/test/src/diagnostics/enum_mixin_with_instance_variable_test.dart
new file mode 100644
index 0000000..756833d
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/enum_mixin_with_instance_variable_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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EnumMixinWithInstanceVariableTest);
+  });
+}
+
+@reflectiveTest
+class EnumMixinWithInstanceVariableTest extends PubPackageResolutionTest {
+  test_field_instance() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  var foo = 0;
+}
+
+enum E with M {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE, 40, 1),
+    ]);
+  }
+
+  test_field_instance_final() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  final foo = 0;
+}
+
+enum E with M {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE, 42, 1),
+    ]);
+  }
+
+  test_field_static() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  static var foo = 0;
+}
+
+enum E with M {
+  v
+}
+''');
+  }
+
+  test_getter_instance() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int get foo => 0;
+}
+
+enum E with M {
+  v
+}
+''');
+  }
+
+  test_setter_instance() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  set foo(int _) {}
+}
+
+enum E with M {
+  v
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/enum_with_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/enum_with_abstract_member_test.dart
new file mode 100644
index 0000000..3f5d7d3
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/enum_with_abstract_member_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EnumWithAbstractMemberTest);
+  });
+}
+
+@reflectiveTest
+class EnumWithAbstractMemberTest extends PubPackageResolutionTest {
+  test_getter() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  int get foo;
+}
+''', [
+      error(CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER, 16, 12),
+    ]);
+  }
+
+  test_method() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  void foo();
+}
+''', [
+      error(CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER, 16, 11),
+    ]);
+  }
+
+  test_setter() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  set foo(int _);
+}
+''', [
+      error(CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER, 16, 15),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/enum_with_name_values_test.dart b/pkg/analyzer/test/src/diagnostics/enum_with_name_values_test.dart
new file mode 100644
index 0000000..8166ec8
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/enum_with_name_values_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EnumWithNameValuesTest);
+  });
+}
+
+@reflectiveTest
+class EnumWithNameValuesTest extends PubPackageResolutionTest {
+  test_name() async {
+    await assertErrorsInCode(r'''
+enum values {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ENUM_WITH_NAME_VALUES, 5, 6),
+    ]);
+  }
+}
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 ab697b0..e38a3bb 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
@@ -15,6 +15,71 @@
 
 @reflectiveTest
 class ExtendsNonClassTest extends PubPackageResolutionTest {
+  test_class_dynamic() async {
+    await assertErrorsInCode(r'''
+class A extends dynamic {}
+''', [
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 16, 7),
+    ]);
+
+    var a = findElement.class_('A');
+    assertType(a.supertype, 'Object');
+  }
+
+  test_class_enum() async {
+    await assertErrorsInCode(r'''
+enum E { ONE }
+class A extends E {}
+''', [
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 31, 1),
+    ]);
+
+    var a = findElement.class_('A');
+    assertType(a.supertype, 'Object');
+
+    var eRef = findNode.namedType('E {}');
+    assertNamedType(eRef, findElement.enum_('E'), 'E');
+  }
+
+  test_class_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+class A extends M {} // ref
+''', [
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
+    ]);
+
+    var a = findElement.class_('A');
+    assertType(a.supertype, 'Object');
+
+    var mRef = findNode.namedType('M {} // ref');
+    assertNamedType(mRef, findElement.mixin('M'), 'M');
+  }
+
+  test_class_variable() async {
+    await assertErrorsInCode(r'''
+int v = 0;
+class A extends v {}
+''', [
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
+    ]);
+
+    var a = findElement.class_('A');
+    assertType(a.supertype, 'Object');
+  }
+
+  test_class_variable_generic() async {
+    await assertErrorsInCode(r'''
+int v = 0;
+class A extends v<int> {}
+''', [
+      error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 27, 1),
+    ]);
+
+    var a = findElement.class_('A');
+    assertType(a.supertype, 'Object');
+  }
+
   test_Never() async {
     await assertErrorsInCode('''
 class A extends Never {}
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
index c669f19..87e39b2 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
@@ -11,12 +11,42 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionOverrideArgumentNotAssignableTest);
     defineReflectiveTests(
-        ExtensionOverrideArgumentNotAssignableWithNullSafetyTest);
+      ExtensionOverrideArgumentNotAssignableWithoutNullSafetyTest,
+    );
   });
 }
 
 @reflectiveTest
 class ExtensionOverrideArgumentNotAssignableTest
+    extends PubPackageResolutionTest {
+  test_override_onNonNullable() async {
+    await assertErrorsInCode(r'''
+extension E on String {
+  void m() {}
+}
+f() {
+  E(null).m();
+}
+''', [
+      error(CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE, 50,
+          4),
+    ]);
+  }
+
+  test_override_onNullable() async {
+    await assertNoErrorsInCode(r'''
+extension E on String? {
+  void m() {}
+}
+f() {
+  E(null).m();
+}
+''');
+  }
+}
+
+@reflectiveTest
+class ExtensionOverrideArgumentNotAssignableWithoutNullSafetyTest
     extends PubPackageResolutionTest with WithoutNullSafetyMixin {
   test_subtype() async {
     await assertNoErrorsInCode('''
@@ -61,32 +91,3 @@
     ]);
   }
 }
-
-@reflectiveTest
-class ExtensionOverrideArgumentNotAssignableWithNullSafetyTest
-    extends PubPackageResolutionTest {
-  test_override_onNonNullable() async {
-    await assertErrorsInCode(r'''
-extension E on String {
-  void m() {}
-}
-f() {
-  E(null).m();
-}
-''', [
-      error(CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE, 50,
-          4),
-    ]);
-  }
-
-  test_override_onNullable() async {
-    await assertNoErrorsInCode(r'''
-extension E on String? {
-  void m() {}
-}
-f() {
-  E(null).m();
-}
-''');
-  }
-}
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 a1caf5d..038a4ef 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,19 @@
     ]);
   }
 
+  test_enumConstant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0);
+  const E({int? a});
+}
+''', [
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 13,
+          1),
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 33, 1),
+    ]);
+  }
+
   test_functionExpressionInvocation() async {
     await assertErrorsInCode('''
 main() {
@@ -126,6 +139,16 @@
     ]);
   }
 
+  test_enumConstant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0)
+}
+''', [
+      error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 13, 1),
+    ]);
+  }
+
   test_functionExpressionInvocation() async {
     await assertErrorsInCode('''
 main() {
diff --git a/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart b/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
index 915db60..99c0eb9 100644
--- a/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
@@ -3,11 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer_utilities/check/check.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../util/ast_check.dart';
-import '../../util/token_check.dart';
 import 'parser_diagnostics.dart';
 
 main() {
@@ -27,10 +24,14 @@
     parseResult.assertErrors([
       error(ParserErrorCode.EXTRANEOUS_MODIFIER, 14, 5),
     ]);
-    check(parseResult.findNode.simpleFormalParameter('a);'))
-      ..keyword.isKeywordConst
-      ..type.isNull
-      ..identifier.isNotNull;
+
+    var node = parseResult.findNode.simpleFormalParameter('a);');
+    assertParsedNodeText(node, r'''
+SimpleFormalParameter
+  keyword: const
+  identifier: SimpleIdentifier
+    token: a
+''');
   }
 
   test_simpleFormalParameter_var() async {
@@ -40,10 +41,14 @@
 }
 ''');
     parseResult.assertNoErrors();
-    check(parseResult.findNode.simpleFormalParameter('a);'))
-      ..keyword.isKeywordVar
-      ..type.isNull
-      ..identifier.isNotNull;
+
+    var node = parseResult.findNode.simpleFormalParameter('a);');
+    assertParsedNodeText(node, r'''
+SimpleFormalParameter
+  keyword: var
+  identifier: SimpleIdentifier
+    token: a
+''');
   }
 
   test_superFormalParameter_var() async {
@@ -55,12 +60,15 @@
     parseResult.assertErrors([
       error(ParserErrorCode.EXTRANEOUS_MODIFIER, 14, 3),
     ]);
-    check(parseResult.findNode.superFormalParameter('super.a'))
-      ..keyword.isKeywordVar
-      ..superKeyword.isKeywordSuper
-      ..type.isNull
-      ..identifier.isNotNull
-      ..typeParameters.isNull
-      ..parameters.isNull;
+
+    var node = parseResult.findNode.superFormalParameter('super.a');
+    assertParsedNodeText(node, r'''
+SuperFormalParameter
+  keyword: var
+  superKeyword: super
+  period: .
+  identifier: SimpleIdentifier
+    token: a
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initialized_by_multiple_initializers_test.dart b/pkg/analyzer/test/src/diagnostics/field_initialized_by_multiple_initializers_test.dart
index 6744663..d766eac 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initialized_by_multiple_initializers_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initialized_by_multiple_initializers_test.dart
@@ -19,7 +19,7 @@
   static const _errorCode =
       CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS;
 
-  test_more_than_two_initializers() async {
+  test_class_more_than_two_initializers() async {
     await assertErrorsInCode(r'''
 class A {
   int x;
@@ -31,7 +31,7 @@
     ]);
   }
 
-  test_multiple_names() async {
+  test_class_multiple_names() async {
     await assertErrorsInCode(r'''
 class A {
   int x;
@@ -44,7 +44,7 @@
     ]);
   }
 
-  test_one_initializer() async {
+  test_class_one_initializer() async {
     await assertNoErrorsInCode(r'''
 class A {
   int x;
@@ -54,7 +54,7 @@
 ''');
   }
 
-  test_two_initializers() async {
+  test_class_two_initializers() async {
     await assertErrorsInCode(r'''
 class A {
   int x;
@@ -64,4 +64,29 @@
       error(_errorCode, 34, 1),
     ]);
   }
+
+  test_enum_one_initializer() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  final int x;
+  final int y;
+  const E() : x = 0, y = 0;
+}
+''');
+  }
+
+  test_enum_two_initializers() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int x;
+  const E() : x = 0, x = 1;
+}
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 11, 1),
+      error(CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS, 50,
+          1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart
index 63a379d..9bf6c15 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class FieldInitializedInInitializerAndDeclarationTest
     extends PubPackageResolutionTest {
-  test_both() async {
+  test_class_both() async {
     await assertErrorsInCode('''
 class A {
   final int x = 0;
@@ -29,4 +29,20 @@
           1),
     ]);
   }
+
+  test_enum_both() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final int x = 0;
+  const E() : x = 1;
+}
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 11, 1),
+      error(
+          CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
+          47,
+          1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initialized_in_parameter_and_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/field_initialized_in_parameter_and_initializer_test.dart
index 1de0aff..e43a898 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initialized_in_parameter_and_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initialized_in_parameter_and_initializer_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class FinalInitializedInParameterAndInitializerTest
     extends PubPackageResolutionTest {
-  test_initializingFormal_initializer() async {
+  test_class_fieldFormalParameter_initializer() async {
     await assertErrorsInCode(r'''
 class A {
   int x;
@@ -27,4 +27,18 @@
           33, 1),
     ]);
   }
+
+  test_enum_fieldFormalParameter_initializer() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0);
+  final int x;
+  const E(this.x) : x = 1;
+}
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 11, 4),
+      error(CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER,
+          52, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
index eb9adaa..a028a27 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_factory_constructor_test.dart
@@ -16,7 +16,7 @@
 
 @reflectiveTest
 class FieldInitializerFactoryConstructorTest extends PubPackageResolutionTest {
-  test_fieldFormalParameter() async {
+  test_class_fieldFormalParameter() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 0;
@@ -27,7 +27,7 @@
     ]);
   }
 
-  test_functionTypedParameter() async {
+  test_class_fieldFormalParameter_functionTyped() async {
     await assertErrorsInCode(r'''
 class A {
   int Function()? x;
@@ -40,4 +40,21 @@
       error(ParserErrorCode.MISSING_FUNCTION_BODY, 56, 1),
     ]);
   }
+
+  test_enum_fieldFormalParameter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int x = 0;
+  const E();
+  factory E._(this.x) => throw 0;
+}
+
+void f() {
+  E._(0);
+}
+''', [
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR, 60, 6),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
index 767bfa9..eb14c4f 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
@@ -18,7 +18,7 @@
 
 @reflectiveTest
 class FieldInitializerNotAssignableTest extends PubPackageResolutionTest {
-  test_implicitCallReference() async {
+  test_class_implicitCallReference() async {
     await assertNoErrorsInCode('''
 class C {
   void call(int p) {}
@@ -30,7 +30,7 @@
 ''');
   }
 
-  test_implicitCallReference_genericFunctionInstantiation() async {
+  test_class_implicitCallReference_genericFunctionInstantiation() async {
     await assertNoErrorsInCode('''
 class C {
   void call<T>(T p) {}
@@ -42,7 +42,7 @@
 ''');
   }
 
-  test_unrelated() async {
+  test_class_unrelated() async {
     await assertErrorsInCode('''
 class A {
   int x;
@@ -52,6 +52,20 @@
       error(CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, 31, 2),
     ]);
   }
+
+  test_enum_unrelated() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final int x;
+  const E() : x = '';
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH, 11, 1),
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, 47, 2),
+      error(CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE, 47, 2),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart
index 0ac15d2..6c4537f 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_redirecting_constructor_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class FieldInitializerRedirectingConstructorTest
     extends PubPackageResolutionTest {
-  test_afterRedirection() async {
+  test_class_afterRedirection() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 0;
@@ -29,7 +29,7 @@
     ]);
   }
 
-  test_beforeRedirection() async {
+  test_class_beforeRedirection() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 0;
@@ -42,7 +42,7 @@
     ]);
   }
 
-  test_redirectionOnly() async {
+  test_class_redirectionOnly() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 0;
@@ -54,4 +54,46 @@
           6),
     ]);
   }
+
+  test_enum_afterRedirection() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int x;
+  const E.named() : x = 0;
+  const E() : this.named(), x = 42;
+}
+''', [
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 84,
+          6),
+    ]);
+  }
+
+  test_enum_beforeRedirection() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int x;
+  const E.named() : x = 0;
+  const E() : x = 42, this.named();
+}
+''', [
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 70,
+          6),
+    ]);
+  }
+
+  test_enum_redirectionOnly() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0);
+  final int x;
+  const E.named() : x = 0;
+  const E(this.x) : this.named();
+}
+''', [
+      error(CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR, 69,
+          6),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart
index f3ff4aa..7f098e3 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class FieldInitializingFormalNotAssignableTest
     extends PubPackageResolutionTest {
-  test_dynamic() async {
+  test_class_dynamic() async {
     await assertErrorsInCode('''
 class A {
   int x;
@@ -28,7 +28,7 @@
     ]);
   }
 
-  test_unrelated() async {
+  test_class_unrelated() async {
     await assertErrorsInCode('''
 class A {
   int x;
@@ -39,4 +39,31 @@
           13),
     ]);
   }
+
+  test_enum_dynamic() async {
+    await assertErrorsInCode('''
+enum E {
+  v(0);
+  final int x;
+  const E(dynamic this.x);
+}
+''', [
+      error(CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 42,
+          14),
+    ]);
+  }
+
+  test_enum_unrelated() async {
+    await assertErrorsInCode('''
+enum E {
+  v('');
+  final int x;
+  const E(String this.x);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 13, 2),
+      error(CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 43,
+          13),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart
index 0817c4e..d7a4b8e 100644
--- a/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class FinalInitializedInDeclarationAndConstructorTest
     extends PubPackageResolutionTest {
-  test_initializingFormal() async {
+  test_class_fieldFormalParameter() async {
     await assertErrorsInCode('''
 class A {
   final x = 0;
@@ -29,4 +29,20 @@
           1),
     ]);
   }
+
+  test_enum_fieldFormalParameter() async {
+    await assertErrorsInCode('''
+enum E {
+  v(0);
+  final x = 0;
+  const E(this.x);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 11, 4),
+      error(
+          CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
+          47,
+          1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart
index 3bd3afc..b85364f 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class FinalNotInitializedConstructorTest extends PubPackageResolutionTest {
-  test_1() async {
+  test_class_1() async {
     await assertErrorsInCode('''
 class A {
   final int x;
@@ -26,7 +26,7 @@
     ]);
   }
 
-  test_2() async {
+  test_class_2() async {
     await assertErrorsInCode('''
 class A {
   final int a;
@@ -38,21 +38,22 @@
     ]);
   }
 
-  test_3Plus() async {
+  test_class_3Plus() async {
     await assertErrorsInCode('''
-class A {
+enum E {
+  v;
   final int a;
   final int b;
   final int c;
-  A() {}
+  const E();
 }
 ''', [
       error(
-          CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS, 57, 1),
+          CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS, 67, 1),
     ]);
   }
 
-  Future<void> test_redirecting_error() async {
+  Future<void> test_class_redirecting_error() async {
     await assertErrorsInCode('''
 class A {
   final int x;
@@ -64,7 +65,7 @@
     ]);
   }
 
-  Future<void> test_redirecting_no_error() async {
+  Future<void> test_class_redirecting_no_error() async {
     await assertNoErrorsInCode('''
 class A {
   final int x;
@@ -74,7 +75,7 @@
 ''');
   }
 
-  Future<void> test_two_constructors_no_errors() async {
+  Future<void> test_class_two_constructors_no_errors() async {
     await assertNoErrorsInCode('''
 class A {
   final int x;
@@ -83,4 +84,64 @@
 }
 ''');
   }
+
+  test_enum_1() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final int x;
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, 37, 1),
+    ]);
+  }
+
+  test_enum_2() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final int a;
+  final int b;
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2, 52, 1),
+    ]);
+  }
+
+  Future<void> test_enum_redirecting_error() async {
+    await assertErrorsInCode('''
+enum E {
+  v1, v2._();
+  final int x;
+  const E() : this._();
+  const E._();
+}
+''', [
+      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, 70, 1),
+    ]);
+  }
+
+  Future<void> test_enum_redirecting_no_error() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v1, v2._();
+  final int x;
+  const E() : this._();
+  const E._() : x = 0;
+}
+''');
+  }
+
+  Future<void> test_enum_two_constructors_no_errors() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v1.zero(), v2.one();
+  final int x;
+  const E.zero() : x = 0;
+  const E.one() : x = 1;
+}
+''');
+  }
 }
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 270c1bd..f24221e 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
@@ -10,12 +10,185 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FinalNotInitializedTest);
-    defineReflectiveTests(FinalNotInitializedWithNullSafetyTest);
+    defineReflectiveTests(FinalNotInitializedWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class FinalNotInitializedTest extends PubPackageResolutionTest
+class FinalNotInitializedTest extends PubPackageResolutionTest {
+  test_class_field_abstract() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract final int x;
+}
+''');
+  }
+
+  test_class_field_abstract_with_constructor() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract final int x;
+  A();
+}
+''');
+  }
+
+  test_class_field_external() async {
+    await assertNoErrorsInCode('''
+class A {
+  external final int x;
+}
+''');
+  }
+
+  test_class_field_external_static() async {
+    await assertNoErrorsInCode('''
+class A {
+  external static final int x;
+}
+''');
+  }
+
+  test_class_field_external_with_constructor() async {
+    await assertNoErrorsInCode('''
+class A {
+  external final int x;
+  A();
+}
+''');
+  }
+
+  test_class_field_late_noConstructor_noInitializer() async {
+    await assertNoErrorsInCode('''
+class C {
+  late final f;
+}
+''');
+  }
+
+  test_class_field_late_unnamedConstructor_noInitializer() async {
+    await assertNoErrorsInCode('''
+class C {
+  late final f;
+  C();
+}
+''');
+  }
+
+  test_class_field_noConstructor_initializer() async {
+    await assertNoErrorsInCode('''
+class C {
+  final f = 1;
+}
+''');
+  }
+
+  test_class_field_noConstructor_noInitializer() async {
+    await assertErrorsInCode('''
+abstract class A {
+  final int x;
+}
+''', [
+      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 31, 1),
+    ]);
+  }
+
+  test_class_field_unnamedConstructor_constructorInitializer() async {
+    await assertNoErrorsInCode('''
+class C {
+  final f;
+  C() : f = 2;
+}
+''');
+  }
+
+  test_class_field_unnamedConstructor_fieldFormalParameter() async {
+    await assertNoErrorsInCode('''
+class C {
+  final f;
+  C(this.f);
+}
+''');
+  }
+
+  test_class_field_unnamedConstructor_initializer() async {
+    await assertNoErrorsInCode('''
+class C {
+  final f = 1;
+  C();
+}
+''');
+  }
+
+  test_enum_field_constructorFieldInitializer() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  final int x;
+  const E() : x = 0;
+}
+''');
+  }
+
+  test_enum_field_fieldFormalParameter() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v(0);
+  final int x;
+  const E(this.x);
+}
+''');
+  }
+
+  test_enum_field_hasInitializer() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  final int x = 0;
+}
+''');
+  }
+
+  test_enum_field_noConstructor_noInitializer() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final int x;
+}
+''', [
+      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 26, 1),
+    ]);
+  }
+
+  test_localVariable_initializer() async {
+    await assertErrorsInCode('''
+f() {
+  late final x = 1;
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 19, 1),
+    ]);
+  }
+
+  test_localVariable_noInitializer() async {
+    await assertErrorsInCode('''
+f() {
+  late final x;
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 19, 1),
+    ]);
+  }
+
+  test_topLevel_external() async {
+    await assertNoErrorsInCode('''
+external final int x;
+''');
+  }
+}
+
+@reflectiveTest
+class FinalNotInitializedWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_class_instanceField_final_factoryConstructor_only() async {
     await assertNoErrorsInCode('''
@@ -80,137 +253,12 @@
       error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 22, 1),
     ]);
   }
-}
 
-@reflectiveTest
-class FinalNotInitializedWithNullSafetyTest extends PubPackageResolutionTest {
-  test_field_abstract() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract final int x;
+  test_mixin_OK() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  final int f = 0;
 }
 ''');
   }
-
-  test_field_abstract_with_constructor() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract final int x;
-  A();
-}
-''');
-  }
-
-  test_field_external() async {
-    await assertNoErrorsInCode('''
-class A {
-  external final int x;
-}
-''');
-  }
-
-  test_field_external_with_constructor() async {
-    await assertNoErrorsInCode('''
-class A {
-  external final int x;
-  A();
-}
-''');
-  }
-
-  test_field_noConstructor_initializer() async {
-    await assertNoErrorsInCode('''
-class C {
-  late final f = 1;
-}
-''');
-  }
-
-  test_field_noConstructor_noInitializer() async {
-    await assertNoErrorsInCode('''
-class C {
-  late final f;
-}
-''');
-  }
-
-  test_field_ofClass() async {
-    await assertErrorsInCode('''
-abstract class A {
-  final int x;
-}
-''', [
-      error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 31, 1),
-    ]);
-  }
-
-  test_field_unnamedConstructor_constructorInitializer() async {
-    await assertNoErrorsInCode('''
-class C {
-  late final f;
-  C() : f = 2;
-}
-''');
-  }
-
-  test_field_unnamedConstructor_fieldFormalParameter() async {
-    await assertNoErrorsInCode('''
-class C {
-  late final f;
-  C(this.f);
-}
-''');
-  }
-
-  test_field_unnamedConstructor_initializer() async {
-    await assertNoErrorsInCode('''
-class C {
-  late final f = 1;
-  C();
-}
-''');
-  }
-
-  test_field_unnamedConstructor_noInitializer() async {
-    await assertNoErrorsInCode('''
-class C {
-  late final f;
-  C();
-}
-''');
-  }
-
-  test_localVariable_initializer() async {
-    await assertErrorsInCode('''
-f() {
-  late final x = 1;
-}
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 19, 1),
-    ]);
-  }
-
-  test_localVariable_noInitializer() async {
-    await assertErrorsInCode('''
-f() {
-  late final x;
-}
-''', [
-      error(HintCode.UNUSED_LOCAL_VARIABLE, 19, 1),
-    ]);
-  }
-
-  test_static_field_external() async {
-    await assertNoErrorsInCode('''
-class A {
-  external static final int x;
-}
-''');
-  }
-
-  test_variable_external() async {
-    await assertNoErrorsInCode('''
-external final int x;
-''');
-  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart b/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
index b9c031c..9ebed01 100644
--- a/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
@@ -3,11 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer_utilities/check/check.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../util/ast_check.dart';
-import '../../util/token_check.dart';
 import 'parser_diagnostics.dart';
 
 main() {
@@ -27,12 +24,24 @@
     parseResult.assertErrors([
       error(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, 14, 3),
     ]);
-    check(parseResult.findNode.superFormalParameter('super.a'))
-      ..keyword.isNull
-      ..superKeyword.isKeywordSuper
-      ..type.isNull
-      ..identifier.isNotNull
-      ..typeParameters.isNotNull.typeParameters.hasLength(1)
-      ..parameters.isNotNull;
+
+    var node = parseResult.findNode.superFormalParameter('super.a');
+    assertParsedNodeText(node, r'''
+SuperFormalParameter
+  superKeyword: super
+  period: .
+  identifier: SimpleIdentifier
+    token: a
+  typeParameters: TypeParameterList
+    leftBracket: <
+    typeParameters
+      TypeParameter
+        name: SimpleIdentifier
+          token: T
+    rightBracket: >
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+''');
   }
 }
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 ec81014..f20aedb 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
@@ -46,6 +46,17 @@
 ''');
   }
 
+  test_class_instance_field() async {
+    await assertErrorsInCode('''
+class C {
+  final num foo = 0;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 22, 3),
+    ]);
+  }
+
   test_class_instance_interfaces() async {
     await assertErrorsInCode(r'''
 class A {
@@ -213,6 +224,108 @@
     ]);
   }
 
+  test_class_static_field() async {
+    await assertErrorsInCode('''
+class C {
+  static final num foo = 0;
+  static set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 29, 3),
+    ]);
+  }
+
+  test_enum_instance_mixinGetter_mixinSetter() async {
+    await assertErrorsInCode('''
+mixin M1 {
+  num get foo => 0;
+}
+
+mixin M2 {
+  set foo(int v) {}
+}
+
+enum E with M1, M2 {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 73, 1),
+    ]);
+  }
+
+  test_enum_instance_mixinGetter_thisSetter() async {
+    await assertErrorsInCode('''
+mixin M {
+  num get foo => 0;
+}
+
+enum E with M {
+  v;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 60, 3),
+    ]);
+  }
+
+  test_enum_instance_superGetter_thisSetter_index() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  set index(String _) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 5),
+    ]);
+  }
+
+  test_enum_instance_thisField_thisSetter() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final num foo = 0;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 26, 3),
+    ]);
+  }
+
+  test_enum_instance_thisGetter_thisSetter() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  num get foo => 0;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 24, 3),
+    ]);
+  }
+
+  test_enum_static() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  static num get foo => 0;
+  static set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 31, 3),
+    ]);
+  }
+
+  test_enum_static_field() async {
+    await assertErrorsInCode('''
+enum E {
+  foo;
+  static set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 11, 3),
+    ]);
+  }
+
   test_extension_instance() async {
     await assertErrorsInCode('''
 extension E on Object {
@@ -235,6 +348,17 @@
     ]);
   }
 
+  test_extension_static_field() async {
+    await assertErrorsInCode('''
+extension E on Object {
+  static final int foo = 0;
+  static set foo(String v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 43, 3),
+    ]);
+  }
+
   test_topLevel() async {
     await assertErrorsInCode('''
 int get foo => 0;
@@ -266,4 +390,13 @@
 set foo(int v) {}
 ''');
   }
+
+  test_topLevel_variable() async {
+    await assertErrorsInCode('''
+final int foo = 0;
+set foo(String v) {}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 10, 3),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_concrete_enum_member_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_concrete_enum_member_declaration_test.dart
new file mode 100644
index 0000000..bd3820e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/illegal_concrete_enum_member_declaration_test.dart
@@ -0,0 +1,231 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(IllegalConcreteEnumMemberDeclarationClassTest);
+    defineReflectiveTests(IllegalConcreteEnumMemberDeclarationEnumTest);
+    defineReflectiveTests(IllegalConcreteEnumMemberDeclarationMixinTest);
+  });
+}
+
+@reflectiveTest
+class IllegalConcreteEnumMemberDeclarationClassTest
+    extends PubPackageResolutionTest {
+  test_hashCode_field() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  int hashCode = 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 41, 8),
+    ]);
+  }
+
+  test_hashCode_getter() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  int get hashCode => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 45, 8),
+    ]);
+  }
+
+  test_hashCode_getter_abstract() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  int get hashCode;
+}
+''');
+  }
+
+  test_hashCode_setter() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  set hashCode(int _) {}
+}
+''');
+  }
+
+  test_index_field() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  int index = 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 41, 5),
+    ]);
+  }
+
+  test_index_getter() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  int get index => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 45, 5),
+    ]);
+  }
+
+  test_index_getter_abstract() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  int get index;
+}
+''');
+  }
+
+  test_index_setter() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  set index(int _) {}
+}
+''');
+  }
+
+  test_operatorEqEq() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  bool operator ==(Object other) => false;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 51, 2),
+    ]);
+  }
+}
+
+@reflectiveTest
+class IllegalConcreteEnumMemberDeclarationEnumTest
+    extends PubPackageResolutionTest {
+  test_index_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int index = 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 26, 5),
+    ]);
+  }
+
+  test_index_field_notInitializer() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int index;
+  const E();
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 26, 5),
+    ]);
+  }
+
+  test_index_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  int get index => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 24, 5),
+    ]);
+  }
+
+  test_index_getter_abstract() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  int get index;
+}
+''');
+  }
+
+  test_index_setter() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  set index(int _) {}
+}
+''');
+  }
+
+  test_operatorEqEq() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  bool operator ==(Object other) => false;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 30, 2),
+    ]);
+  }
+}
+
+@reflectiveTest
+class IllegalConcreteEnumMemberDeclarationMixinTest
+    extends PubPackageResolutionTest {
+  test_index_field() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  int index = 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 24, 5),
+    ]);
+  }
+
+  test_index_getter() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  int get index => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 28, 5),
+    ]);
+  }
+
+  test_index_getter_abstract() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  int get index;
+}
+''');
+  }
+
+  test_index_setter() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  set index(int _) {}
+}
+''');
+  }
+
+  test_operatorEqEq() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  bool operator ==(Object other) => false;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION, 34, 2),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_concrete_enum_member_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_concrete_enum_member_inheritance_test.dart
new file mode 100644
index 0000000..e5c9989
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/illegal_concrete_enum_member_inheritance_test.dart
@@ -0,0 +1,278 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(IllegalConcreteEnumMemberDeclarationClassTest);
+    defineReflectiveTests(IllegalConcreteEnumMemberDeclarationEnumTest);
+    defineReflectiveTests(IllegalConcreteEnumMemberDeclarationMixinTest);
+  });
+}
+
+@reflectiveTest
+class IllegalConcreteEnumMemberDeclarationClassTest
+    extends PubPackageResolutionTest {
+  test_hashCode_field_fromExtends() async {
+    await assertErrorsInCode(r'''
+class A {
+  int hashCode = 0;
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 48, 1),
+    ]);
+  }
+
+  test_hashCode_field_fromImplements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int hashCode = 0;
+}
+
+abstract class B implements A, Enum {}
+''');
+  }
+
+  test_hashCode_field_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int hashCode = 0;
+}
+
+abstract class B with M implements Enum {}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 48, 1),
+    ]);
+  }
+
+  test_hashCode_getter() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get hashCode => 0;
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 53, 1),
+    ]);
+  }
+
+  test_hashCode_getter_abstract() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int get hashCode;
+}
+
+abstract class B with M implements Enum {}
+''');
+  }
+
+  test_hashCode_setter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  set hashCode(int _) {}
+}
+
+abstract class B extends A implements Enum {}
+''');
+  }
+
+  test_operatorEqEq_fromExtends() async {
+    await assertErrorsInCode(r'''
+class A {
+  bool operator ==(Object other) => false;
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 71, 1),
+    ]);
+  }
+
+  test_operatorEqEq_fromImplements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  bool operator ==(Object other) => false;
+}
+
+abstract class B implements A, Enum {}
+''');
+  }
+
+  test_operatorEqEq_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  bool operator ==(Object other) => false;
+}
+
+abstract class B with M implements Enum {}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 71, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class IllegalConcreteEnumMemberDeclarationEnumTest
+    extends PubPackageResolutionTest {
+  test_hashCode_getter_fromImplements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get hashCode => 0;
+}
+
+enum E implements A {
+  v;
+}
+''');
+  }
+
+  test_hashCode_getter_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int get hashCode => 0;
+}
+
+enum E with M {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 43, 1),
+    ]);
+  }
+
+  test_hashCode_setter_fromWith() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  set hashCode(int _) {}
+}
+
+enum E with M {
+  v;
+}
+''');
+  }
+
+  test_index_getter_fromImplements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get index => 0;
+}
+
+enum E implements A {
+  v;
+}
+''');
+  }
+
+  test_index_getter_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int get index => 0;
+}
+
+enum E with M {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 40, 1),
+    ]);
+  }
+
+  test_index_setter_fromWith() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  set index(int _) {}
+}
+
+enum E with M {
+  v;
+}
+''');
+  }
+
+  test_operatorEqEq_fromImplements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  bool operator ==(Object other) => false;
+}
+
+enum E implements A {
+  v;
+}
+''');
+  }
+
+  test_operatorEqEq_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  bool operator ==(Object other) => false;
+}
+
+enum E with M {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE, 61, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class IllegalConcreteEnumMemberDeclarationMixinTest
+    extends PubPackageResolutionTest {
+  test_hashCode_getter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get hashCode => 0;
+}
+
+mixin M on A implements Enum {}
+''');
+  }
+
+  test_hashCode_getter_abstract() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  int get hashCode;
+}
+
+mixin M on A implements Enum {}
+''');
+  }
+
+  test_hashCode_setter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  set hashCode(int _) {}
+}
+
+mixin M on A implements Enum {}
+''');
+  }
+
+  test_operatorEqEq() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  bool operator ==(Object other) => false;
+}
+
+mixin M on A implements Enum {}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_enum_values_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_declaration_test.dart
new file mode 100644
index 0000000..c7e818f
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_declaration_test.dart
@@ -0,0 +1,161 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(IllegalEnumValuesDeclarationTest);
+  });
+}
+
+@reflectiveTest
+class IllegalEnumValuesDeclarationTest extends PubPackageResolutionTest {
+  test_class_field() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  int values = 0;
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 41, 6),
+    ]);
+  }
+
+  test_class_field_static() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  static int values = 0;
+}
+''');
+  }
+
+  test_class_getter() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  int get values => 0;
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 45, 6),
+    ]);
+  }
+
+  test_class_getter_static() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  static int get values => 0;
+}
+''');
+  }
+
+  test_class_method() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  void values() {}
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 42, 6),
+    ]);
+  }
+
+  test_class_method_static() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  static void values() {}
+}
+''');
+  }
+
+  test_class_setter() async {
+    await assertErrorsInCode(r'''
+abstract class A implements Enum {
+  set values(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 41, 6),
+    ]);
+  }
+
+  test_class_setter_static() async {
+    await assertNoErrorsInCode(r'''
+abstract class A implements Enum {
+  static set values(int _) {}
+}
+''');
+  }
+
+  test_mixin_field() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  int values = 0;
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 24, 6),
+    ]);
+  }
+
+  test_mixin_field_static() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  static int values = 0;
+}
+''');
+  }
+
+  test_mixin_getter() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  int get values => 0;
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 28, 6),
+    ]);
+  }
+
+  test_mixin_getter_static() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  static int get values => 0;
+}
+''');
+  }
+
+  test_mixin_method() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  void values() {}
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 25, 6),
+    ]);
+  }
+
+  test_mixin_method_static() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  static void values() {}
+}
+''');
+  }
+
+  test_mixin_setter() async {
+    await assertErrorsInCode(r'''
+mixin M on Enum {
+  set values(int _) {}
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION, 24, 6),
+    ]);
+  }
+
+  test_mixin_setter_static() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  static set values(int _) {}
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart
new file mode 100644
index 0000000..4c32c16
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart
@@ -0,0 +1,207 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(IllegalEnumValuesInheritanceTest);
+  });
+}
+
+@reflectiveTest
+class IllegalEnumValuesInheritanceTest extends PubPackageResolutionTest {
+  test_class_field_fromExtends() async {
+    await assertErrorsInCode(r'''
+class A {
+  int values = 0;
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 46, 1),
+    ]);
+  }
+
+  test_class_field_fromImplements() async {
+    await assertErrorsInCode(r'''
+class A {
+  int values = 0;
+}
+
+abstract class B implements A, Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 46, 1),
+    ]);
+  }
+
+  test_class_field_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int values = 0;
+}
+
+abstract class B with M implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 46, 1),
+    ]);
+  }
+
+  test_class_getter() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get values => 0;
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 51, 1),
+    ]);
+  }
+
+  test_class_method() async {
+    await assertErrorsInCode(r'''
+class A {
+  void values() {}
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 47, 1),
+    ]);
+  }
+
+  test_class_setter() async {
+    await assertErrorsInCode(r'''
+class A {
+  set values(int _) {}
+}
+
+abstract class B extends A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 51, 1),
+    ]);
+  }
+
+  test_enum_getter_fromImplements() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get values => 0;
+}
+
+enum E implements A {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 41, 1),
+    ]);
+  }
+
+  test_enum_method_fromImplements() async {
+    await assertErrorsInCode(r'''
+class A {
+  int values() => 0;
+}
+
+enum E implements A {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 39, 1),
+    ]);
+  }
+
+  test_enum_method_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int values() => 0;
+}
+
+enum E with M {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 39, 1),
+    ]);
+  }
+
+  test_enum_setter_fromImplements() async {
+    await assertErrorsInCode(r'''
+class A {
+  set values(int _) {}
+}
+
+enum E implements A {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 41, 1),
+    ]);
+  }
+
+  test_enum_setter_fromWith() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  set values(int _) {}
+}
+
+enum E with M {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 41, 1),
+    ]);
+  }
+
+  test_mixin_field() async {
+    await assertErrorsInCode(r'''
+class A {
+  int values = 0;
+}
+
+mixin M on A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 37, 1),
+    ]);
+  }
+
+  test_mixin_getter() async {
+    await assertErrorsInCode(r'''
+class A {
+  int get values => 0;
+}
+
+mixin M on A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 42, 1),
+    ]);
+  }
+
+  test_mixin_method() async {
+    await assertErrorsInCode(r'''
+class A {
+  int values() => 0;
+}
+
+mixin M on A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 40, 1),
+    ]);
+  }
+
+  test_mixin_setter() async {
+    await assertErrorsInCode(r'''
+class A {
+  set values(int _) {}
+}
+
+mixin M on A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 42, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_language_version_override_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_language_version_override_test.dart
new file mode 100644
index 0000000..3076cbb5a
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/illegal_language_version_override_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:pub_semver/src/version_constraint.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(IllegalLanguageVersionOverrideTest);
+  });
+}
+
+@reflectiveTest
+class IllegalLanguageVersionOverrideTest extends PubPackageResolutionTest {
+  test_hasOverride_equal() async {
+    await assertNoErrorsInCode(r'''
+// @dart = 2.12
+void f() {}
+''');
+  }
+
+  test_hasOverride_greater() async {
+    await assertNoErrorsInCode(r'''
+// @dart = 2.14
+void f() {}
+''');
+  }
+
+  test_hasOverride_less() async {
+    await assertErrorsInCode(r'''
+// @dart = 2.9
+int a = null;
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE, 0, 14),
+    ]);
+  }
+
+  test_hasPackageLanguage_less_hasOverride_greater() async {
+    writeTestPackageConfig(
+      PackageConfigFileBuilder(),
+      languageVersion: '2.9',
+    );
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.12
+void f() {}
+''');
+  }
+
+  test_hasPackageLanguage_less_noOverride_less() async {
+    writeTestPackageConfig(
+      PackageConfigFileBuilder(),
+      languageVersion: '2.9',
+    );
+
+    await assertErrorsInCode(r'''
+void f() {}
+''', [
+      error(CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE, 0, 0),
+    ]);
+  }
+
+  test_noOverride() async {
+    await assertNoErrorsInCode(r'''
+void f() {}
+''');
+  }
+
+  @override
+  void updateAnalysisOptions(AnalysisOptionsImpl analysisOptions) {
+    analysisOptions.sourceLanguageConstraint =
+        VersionConstraint.parse('>= 2.12.0');
+  }
+}
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 56e199e..bfa2a8d 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class ImplementsDeferredClassTest extends PubPackageResolutionTest {
-  test_implements() async {
+  test_class_implements() async {
     newFile('$testPackageLibPath/lib1.dart', content: '''
 library lib1;
 class A {}
@@ -29,7 +29,7 @@
     ]);
   }
 
-  test_implements_interfaceTypeTypedef() async {
+  test_class_implements_interfaceTypeTypedef() async {
     newFile('$testPackageLibPath/lib1.dart', content: '''
 library lib1;
 class A {}
@@ -44,7 +44,7 @@
     ]);
   }
 
-  test_mixinApplication() async {
+  test_classTypeAlias() async {
     newFile('$testPackageLibPath/lib1.dart', content: '''
 library lib1;
 class A {}
@@ -59,4 +59,22 @@
       error(CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS, 100, 3),
     ]);
   }
+
+  test_mixin() async {
+    await assertErrorsInCode(r'''
+import 'dart:math' deferred as math;
+mixin M implements math.Random {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS, 56, 11),
+    ]);
+    var mathImport = findElement.import('dart:math');
+    var randomElement = mathImport.importedLibrary!.getType('Random')!;
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.interfaces, ['Random']);
+
+    var typeRef = findNode.namedType('Random {}');
+    assertNamedType(typeRef, randomElement, 'Random',
+        expectedPrefix: mathImport.prefix);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/implements_disallowed_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_disallowed_class_test.dart
index 64e25bc..c36452c 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_disallowed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_disallowed_class_test.dart
@@ -23,6 +23,30 @@
     ]);
   }
 
+  test_class_dartCoreEnum_abstract() async {
+    await assertNoErrorsInCode('''
+abstract class A implements Enum {}
+''');
+  }
+
+  test_class_dartCoreEnum_language216_abstract() async {
+    await assertErrorsInCode('''
+// @dart = 2.16
+abstract class A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 44, 4),
+    ]);
+  }
+
+  test_class_dartCoreEnum_language216_concrete() async {
+    await assertErrorsInCode('''
+// @dart = 2.16
+class A implements Enum {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 35, 4),
+    ]);
+  }
+
   test_class_double() async {
     await assertErrorsInCode('''
 class A implements double {}
@@ -49,6 +73,16 @@
     ]);
   }
 
+  test_class_FutureOr_typedef() async {
+    await assertErrorsInCode('''
+import 'dart:async';
+typedef F = FutureOr<void>;
+class A implements F {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 68, 1),
+    ]);
+  }
+
   test_class_FutureOr_typeVariable() async {
     await assertErrorsInCode('''
 import 'dart:async';
@@ -109,6 +143,33 @@
     ]);
   }
 
+  test_classTypeAlias_dartCoreEnum_abstract() async {
+    await assertNoErrorsInCode('''
+class M {}
+abstract class A = Object with M implements Enum;
+''');
+  }
+
+  test_classTypeAlias_dartCoreEnum_language216_abstract() async {
+    await assertErrorsInCode('''
+// @dart = 2.16
+mixin M {}
+abstract class A = Object with M implements Enum;
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 71, 4),
+    ]);
+  }
+
+  test_classTypeAlias_dartCoreEnum_language216_concrete() async {
+    await assertErrorsInCode('''
+// @dart = 2.16
+mixin M {}
+class A = Object with M implements Enum;
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 62, 4),
+    ]);
+  }
+
   test_classTypeAlias_double() async {
     await assertErrorsInCode(r'''
 class A {}
@@ -180,4 +241,43 @@
       error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 60, 3),
     ]);
   }
+
+  test_enum_int() async {
+    await assertErrorsInCode('''
+enum E implements int {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 18, 3),
+    ]);
+  }
+
+  test_mixin_dartCoreEnum() async {
+    await assertNoErrorsInCode('''
+mixin M implements Enum {}
+''');
+  }
+
+  test_mixin_dartCoreEnum_language216() async {
+    await assertErrorsInCode('''
+// @dart = 2.16
+mixin M implements Enum {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 35, 4),
+    ]);
+  }
+
+  test_mixin_int() async {
+    await assertErrorsInCode(r'''
+mixin M implements int {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, 19, 3),
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.interfaces, ['int']);
+
+    var typeRef = findNode.namedType('int {}');
+    assertNamedType(typeRef, intElement, 'int');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
index 01890bb..8ce99b4 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
@@ -17,6 +17,17 @@
 @reflectiveTest
 class ImplementsNonClassTest extends PubPackageResolutionTest
     with ImplementsNonClassTestCases {
+  test_inEnum_topLevelVariable() async {
+    await assertErrorsInCode(r'''
+int A = 7;
+enum E implements A {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 29, 1),
+    ]);
+  }
+
   test_Never() async {
     await assertErrorsInCode('''
 class A implements Never {}
@@ -27,16 +38,7 @@
 }
 
 mixin ImplementsNonClassTestCases on PubPackageResolutionTest {
-  test_class() async {
-    await assertErrorsInCode(r'''
-int A = 7;
-class B implements A {}
-''', [
-      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 30, 1),
-    ]);
-  }
-
-  test_dynamic() async {
+  test_inClass_dynamic() async {
     await assertErrorsInCode('''
 class A implements dynamic {}
 ''', [
@@ -44,7 +46,7 @@
     ]);
   }
 
-  test_enum() async {
+  test_inClass_enum() async {
     await assertErrorsInCode(r'''
 enum E { ONE }
 class A implements E {}
@@ -53,7 +55,16 @@
     ]);
   }
 
-  test_typeAlias() async {
+  test_inClass_topLevelVariable() async {
+    await assertErrorsInCode(r'''
+int A = 7;
+class B implements A {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 30, 1),
+    ]);
+  }
+
+  test_inClassTypeAlias() async {
     await assertErrorsInCode(r'''
 class A {}
 class M {}
@@ -63,6 +74,14 @@
       error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 63, 1),
     ]);
   }
+
+  test_inMixin_dynamic() async {
+    await assertErrorsInCode(r'''
+mixin M implements dynamic {}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 19, 7),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart b/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
index 1cf6c42..d9cdfa7 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
@@ -61,6 +61,58 @@
     ]);
   }
 
+  test_enum_implements_2times() async {
+    await assertErrorsInCode(r'''
+class A {}
+enum E implements A, A { // ref
+  v
+}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_REPEATED, 32, 1),
+    ]);
+
+    var A = findElement.class_('A');
+    assertNamedType(findNode.namedType('A, A { // ref'), A, 'A');
+    assertNamedType(findNode.namedType('A { // ref'), A, 'A');
+  }
+
+  test_enum_implements_2times_viaTypeAlias() async {
+    await assertErrorsInCode(r'''
+class A {}
+typedef B = A;
+enum E implements A, B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_REPEATED, 47, 1),
+    ]);
+
+    assertNamedType(
+      findNode.namedType('A, B {'),
+      findElement.class_('A'),
+      'A',
+    );
+
+    assertNamedType(
+      findNode.namedType('B {'),
+      findElement.typeAlias('B'),
+      'A',
+    );
+  }
+
+  test_enum_implements_4times() async {
+    await assertErrorsInCode(r'''
+class A {} class C{}
+enum E implements A, A, A, A {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.IMPLEMENTS_REPEATED, 42, 1),
+      error(CompileTimeErrorCode.IMPLEMENTS_REPEATED, 45, 1),
+      error(CompileTimeErrorCode.IMPLEMENTS_REPEATED, 48, 1),
+    ]);
+  }
+
   test_mixin_implements_2times() async {
     await assertErrorsInCode(r'''
 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 e26ef2b..8045084 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
@@ -10,13 +10,36 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InconsistentCaseExpressionTypesTest);
-    defineReflectiveTests(InconsistentCaseExpressionTypesWithNullSafetyTest);
+    defineReflectiveTests(InconsistentCaseExpressionTypesWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class InconsistentCaseExpressionTypesTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+class InconsistentCaseExpressionTypesTest extends PubPackageResolutionTest {
+  test_int_none_legacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+const a = 0;
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.8
+import 'a.dart';
+
+void f(int e) {
+  switch (e) {
+    case a:
+      break;
+    case 1:
+      break;
+  }
+}
+''');
+  }
+}
+
+@reflectiveTest
+class InconsistentCaseExpressionTypesWithoutNullSafetyTest
+    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
   test_dynamic() async {
     // Even though A.S and S have a static type of "dynamic", we should see
     // that they match 'abc', because they are constant strings.
@@ -112,27 +135,3 @@
     ]);
   }
 }
-
-@reflectiveTest
-class InconsistentCaseExpressionTypesWithNullSafetyTest
-    extends PubPackageResolutionTest {
-  test_int_none_legacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-const a = 0;
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.8
-import 'a.dart';
-
-void f(int e) {
-  switch (e) {
-    case a:
-      break;
-    case 1:
-      break;
-  }
-}
-''');
-  }
-}
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 e048093..67cc9aa 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
@@ -47,6 +47,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_functionType_optionalTypeArgs() async {
     await assertNoErrorsInCode('''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart
index 755e118..01c03c3 100644
--- a/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializing_formal_for_non_existent_field_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class InitializingFormalForNonExistentFieldTest
     extends PubPackageResolutionTest {
-  test_nonExistent() async {
+  test_class_nonExistent() async {
     await assertErrorsInCode(r'''
 class A {
   A(this.x) {}
@@ -27,7 +27,7 @@
     ]);
   }
 
-  test_notInEnclosingClass() async {
+  test_class_notInEnclosingClass() async {
     await assertErrorsInCode(r'''
 class A {
   int x = 1;
@@ -41,7 +41,7 @@
     ]);
   }
 
-  test_optional() async {
+  test_class_optional() async {
     await assertErrorsInCode(r'''
 class A {
   A([this.x]) {}
@@ -52,7 +52,7 @@
     ]);
   }
 
-  test_synthetic() async {
+  test_class_synthetic() async {
     await assertErrorsInCode(r'''
 class A {
   int get x => 1;
@@ -63,4 +63,52 @@
           6),
     ]);
   }
+
+  test_enum_existing() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(0);
+  final int x;
+  const E(this.x);
+}
+''');
+  }
+
+  test_enum_optional() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E([this.x]);
+}
+''', [
+      error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, 25,
+          6),
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 30, 1),
+    ]);
+  }
+
+  test_enum_required() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0);
+  const E(this.x);
+}
+''', [
+      error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, 27,
+          6),
+    ]);
+  }
+
+  test_enum_synthetic() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(0);
+  const E(this.x);
+  int get x => 1;
+}
+''', [
+      error(CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, 27,
+          6),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
index 620441c..fb52e33 100644
--- a/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instance_access_to_static_member_test.dart
@@ -169,13 +169,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertElement(
-        findNode.simple('a = 2;'),
-        findElement.setter('a'),
-      );
-    }
   }
 
   test_method_reference() async {
diff --git a/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart b/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart
index 0fd804c..2d6b19e 100644
--- a/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart
@@ -14,7 +14,8 @@
 }
 
 @reflectiveTest
-class InstantiateEnumTest extends PubPackageResolutionTest {
+class InstantiateEnumTest extends PubPackageResolutionTest
+    with WithoutEnhancedEnumsMixin {
   test_const() async {
     await assertErrorsInCode(r'''
 enum E { ONE }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
index 726f456..babc082 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
@@ -74,6 +74,19 @@
     ]);
   }
 
+  test_invalid_interfaceType_enum_interfaces() async {
+    await assertErrorsInCode('''
+class I {}
+class J {}
+enum E implements J {
+  v
+}
+I x = E.v;
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 56, 3),
+    ]);
+  }
+
   test_invalid_noCall_functionContext() async {
     await assertErrorsInCode('''
 class C {}
@@ -261,6 +274,16 @@
 ''');
   }
 
+  test_valid_interfaceType_enum_interfaces() async {
+    await assertNoErrorsInCode('''
+class I {}
+enum E implements I {
+  v
+}
+I x = E.v;
+''');
+  }
+
   test_valid_nonGenericCall() async {
     await assertNoErrorsInCode('''
 class C {
@@ -360,11 +383,16 @@
 }
 ''');
 
-    assertFunctionReference(
-      findNode.functionReference('f;'),
-      findElement.parameter('f'),
-      'int Function()',
-    );
+    assertResolvedNodeText(findNode.functionReference('f;'), r'''
+FunctionReference
+  function: SimpleIdentifier
+    token: f
+    staticElement: f@49
+    staticType: int Function<T extends int>()
+  staticType: int Function()
+  typeArgumentTypes
+    int
+''');
   }
 
   test_functionTearoff_inferredTypeArgs() async {
@@ -428,7 +456,6 @@
   x = null;
 }
 ''', [
-      if (hasAssignmentLeftResolution) error(HintCode.DEAD_CODE, 24, 5),
       error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 24, 4),
     ]);
   }
@@ -441,7 +468,6 @@
   x = null;
 }
 ''', [
-      if (hasAssignmentLeftResolution) error(HintCode.DEAD_CODE, 37, 5),
       error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 37, 4),
     ]);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_constructor_name_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_constructor_name_test.dart
index 049f378..667bf55 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_constructor_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_constructor_name_test.dart
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class InvalidConstructorNameTest extends PubPackageResolutionTest {
-  test_notEnclosingClassName_defined() async {
+  test_class_notEnclosingClassName_defined() async {
     await assertErrorsInCode(r'''
 class A {
   B() : super();
@@ -26,7 +26,32 @@
     ]);
   }
 
-  test_notEnclosingClassName_undefined() async {
+  test_class_notEnclosingClassName_named() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {
+  A.foo();
+  B.foo();
+}
+''', [
+      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 23, 1),
+    ]);
+  }
+
+  test_class_notEnclosingClassName_new() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+class B {
+  A.new();
+  B();
+}
+''', [
+      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 24, 1),
+    ]);
+  }
+
+  test_class_notEnclosingClassName_undefined() async {
     await assertErrorsInCode(r'''
 class A {
   B() : super();
@@ -35,4 +60,18 @@
       error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 12, 1),
     ]);
   }
+
+  test_enum_named() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+enum E {
+  v.foo();
+  const A.foo();
+  const E.foo();
+}
+''', [
+      error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 40, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
index 5985dde..883271d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
@@ -16,7 +16,54 @@
 
 @reflectiveTest
 class InvalidImplementationOverrideTest extends PubPackageResolutionTest
-    with InvalidImplementationOverrideTestCases {}
+    with InvalidImplementationOverrideTestCases {
+  test_enum_getter_abstractOverridesConcrete() async {
+    await assertErrorsInCode('''
+mixin M {
+  num get foo => 0;
+}
+enum E with M {
+  v;
+  int get foo;
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE, 37, 1),
+    ]);
+  }
+
+  test_enum_method_abstractOverridesConcrete() async {
+    await assertErrorsInCode('''
+mixin M {
+  num foo() => 0;
+}
+enum E with M {
+  v;
+  int foo();
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE, 35, 1),
+    ]);
+  }
+
+  test_enum_method_mixin_toString() async {
+    await assertErrorsInCode('''
+abstract class I {
+  String toString([int? value]);
+}
+
+enum E1 implements I {
+  v
+}
+
+enum E2 implements I {
+  v;
+  String toString([int? value]) => '';
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE, 60, 2),
+    ]);
+  }
+}
 
 mixin InvalidImplementationOverrideTestCases on PubPackageResolutionTest {
   test_class_generic_method_generic_hasCovariantParameter() async {
@@ -28,7 +75,7 @@
 ''');
   }
 
-  test_getter_abstractOverridesConcrete() async {
+  test_class_getter_abstractOverridesConcrete() async {
     await assertErrorsInCode('''
 class A {
   num get g => 7;
@@ -41,7 +88,7 @@
     ]);
   }
 
-  test_method_abstractOverridesConcrete() async {
+  test_class_method_abstractOverridesConcrete() async {
     await assertErrorsInCode('''
 class A	{
   int add(int a, int b) => a + b;
@@ -56,7 +103,7 @@
     ]);
   }
 
-  test_method_abstractOverridesConcrete_expandedParameterType() async {
+  test_class_method_abstractOverridesConcrete_expandedParameterType() async {
     await assertErrorsInCode('''
 class A {
   int add(int a) => a;
@@ -69,7 +116,7 @@
     ]);
   }
 
-  test_method_abstractOverridesConcrete_expandedParameterType_covariant() async {
+  test_class_method_abstractOverridesConcrete_expandedParameterType_covariant() async {
     await assertNoErrorsInCode('''
 class A {
   int add(covariant int a) => a;
@@ -80,7 +127,7 @@
 ''');
   }
 
-  test_method_abstractOverridesConcrete_withOptional() async {
+  test_class_method_abstractOverridesConcrete_withOptional() async {
     await assertErrorsInCode('''
 class A {
   int add() => 7;
@@ -93,7 +140,7 @@
     ]);
   }
 
-  test_method_abstractOverridesConcreteInMixin() async {
+  test_class_method_abstractOverridesConcreteInMixin() async {
     await assertErrorsInCode('''
 mixin M {
   int add(int a, int b) => a + b;
@@ -108,7 +155,7 @@
     ]);
   }
 
-  test_method_abstractOverridesConcreteViaMixin() async {
+  test_class_method_abstractOverridesConcreteViaMixin() async {
     await assertErrorsInCode('''
 class A {
   int add(int a, int b) => a + b;
@@ -124,7 +171,7 @@
     ]);
   }
 
-  test_method_covariant_inheritance_merge() async {
+  test_class_method_covariant_inheritance_merge() async {
     await assertNoErrorsInCode(r'''
 class A {}
 class B extends A {}
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 016d36b..c44810c 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
@@ -11,13 +11,53 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidOverrideDifferentDefaultValuesNamedTest);
     defineReflectiveTests(
-      InvalidOverrideDifferentDefaultValuesNamedWithNullSafetyTest,
+      InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest,
     );
   });
 }
 
 @reflectiveTest
 class InvalidOverrideDifferentDefaultValuesNamedTest
+    extends InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest {
+  test_concrete_equal_optIn_extends_optOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+class A {
+  void foo({int a = 0}) {}
+}
+''');
+
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  void foo({int a = 0}) {}
+}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
+  }
+
+  test_concrete_equal_optOut_extends_optIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  void foo({int a = 0}) {}
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart';
+
+class B extends A {
+  void foo({int a = 0}) {}
+}
+''');
+  }
+}
+
+@reflectiveTest
+class InvalidOverrideDifferentDefaultValuesNamedWithoutNullSafetyTest
     extends PubPackageResolutionTest {
   test_abstract_different_base_value() async {
     await assertErrorsInCode(
@@ -304,43 +344,3 @@
     );
   }
 }
-
-@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesNamedWithNullSafetyTest
-    extends InvalidOverrideDifferentDefaultValuesNamedTest {
-  test_concrete_equal_optIn_extends_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-class A {
-  void foo({int a = 0}) {}
-}
-''');
-
-    await assertErrorsInCode(r'''
-import 'a.dart';
-
-class B extends A {
-  void foo({int a = 0}) {}
-}
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
-    ]);
-  }
-
-  test_concrete_equal_optOut_extends_optIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  void foo({int a = 0}) {}
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart';
-
-class B extends A {
-  void foo({int a = 0}) {}
-}
-''');
-  }
-}
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 fb62381..9c9fe63 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
@@ -9,15 +9,57 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(InvalidOverrideDifferentDefaultValuesPositionalTest);
     defineReflectiveTests(
-      InvalidOverrideDifferentDefaultValuesPositionalWithNullSafetyTest,
+      InvalidOverrideDifferentDefaultValuesPositionalTest,
+    );
+    defineReflectiveTests(
+      InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest,
     );
   });
 }
 
 @reflectiveTest
 class InvalidOverrideDifferentDefaultValuesPositionalTest
+    extends InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest {
+  test_concrete_equal_optIn_extends_optOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+// @dart = 2.7
+class A {
+  void foo([int a = 0]) {}
+}
+''');
+
+    await assertErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  void foo([int a = 0]) {}
+}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
+  }
+
+  test_concrete_equal_optOut_extends_optIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  void foo([int a = 0]) {}
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart';
+
+class B extends A {
+  void foo([int a = 0]) {}
+}
+''');
+  }
+}
+
+@reflectiveTest
+class InvalidOverrideDifferentDefaultValuesPositionalWithoutNullSafetyTest
     extends PubPackageResolutionTest {
   test_abstract_different_base_value() async {
     await assertErrorsInCode(
@@ -319,43 +361,3 @@
     );
   }
 }
-
-@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesPositionalWithNullSafetyTest
-    extends InvalidOverrideDifferentDefaultValuesPositionalTest {
-  test_concrete_equal_optIn_extends_optOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-// @dart = 2.7
-class A {
-  void foo([int a = 0]) {}
-}
-''');
-
-    await assertErrorsInCode(r'''
-import 'a.dart';
-
-class B extends A {
-  void foo([int a = 0]) {}
-}
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
-    ]);
-  }
-
-  test_concrete_equal_optOut_extends_optIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  void foo([int a = 0]) {}
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import 'a.dart';
-
-class B extends A {
-  void foo([int a = 0]) {}
-}
-''');
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index 2b5c527..cc85b0c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
@@ -10,12 +10,492 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InvalidOverrideTest);
-    defineReflectiveTests(InvalidOverrideWithNullSafetyTest);
+    defineReflectiveTests(InvalidOverrideWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class InvalidOverrideTest extends PubPackageResolutionTest
+class InvalidOverrideTest extends PubPackageResolutionTest {
+  test_abstract_field_covariant_inheritance() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract covariant num x;
+}
+abstract class B implements A {
+  void set x(Object value); // Implicitly covariant
+}
+abstract class C implements B {
+  int get x;
+  void set x(int value); // Ok because covariant
+}
+''');
+  }
+
+  test_external_field_covariant_inheritance() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  external covariant num x;
+}
+abstract class B implements A {
+  void set x(Object value); // Implicitly covariant
+}
+abstract class C implements B {
+  int get x;
+  void set x(int value); // Ok because covariant
+}
+''');
+  }
+
+  test_getter_overrides_abstract_field_covariant_invalid() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract covariant int x;
+}
+abstract class B implements A {
+  num get x;
+  void set x(num value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 91, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 44, 1)]),
+    ]);
+  }
+
+  test_getter_overrides_abstract_field_covariant_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract covariant num x;
+}
+abstract class B implements A {
+  int get x;
+}
+''');
+  }
+
+  test_getter_overrides_abstract_field_final_invalid() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract final int x;
+}
+abstract class B implements A {
+  num get x;
+  void set x(num value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 87, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 40, 1)]),
+    ]);
+  }
+
+  test_getter_overrides_abstract_field_final_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract final num x;
+}
+abstract class B implements A {
+  int get x;
+}
+''');
+  }
+
+  test_getter_overrides_abstract_field_invalid() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+abstract class B implements A {
+  num get x;
+  void set x(num value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 81, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 34, 1)]),
+    ]);
+  }
+
+  test_getter_overrides_abstract_field_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract num x;
+}
+abstract class B implements A {
+  int get x;
+}
+''');
+  }
+
+  test_getter_overrides_external_field_covariant_invalid() async {
+    await assertErrorsInCode('''
+class A {
+  external covariant int x;
+}
+abstract class B implements A {
+  num get x;
+  void set x(num value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 82, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 35, 1)]),
+    ]);
+  }
+
+  test_getter_overrides_external_field_covariant_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external covariant num x;
+}
+abstract class B implements A {
+  int get x;
+}
+''');
+  }
+
+  test_getter_overrides_external_field_final_invalid() async {
+    await assertErrorsInCode('''
+class A {
+  external final int x;
+}
+abstract class B implements A {
+  num get x;
+  void set x(num value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 78, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 31, 1)]),
+    ]);
+  }
+
+  test_getter_overrides_external_field_final_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external final num x;
+}
+abstract class B implements A {
+  int get x;
+}
+''');
+  }
+
+  test_getter_overrides_external_field_invalid() async {
+    await assertErrorsInCode('''
+class A {
+  external int x;
+}
+abstract class B implements A {
+  num get x;
+  void set x(num value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 72, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 25, 1)]),
+    ]);
+  }
+
+  test_getter_overrides_external_field_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external num x;
+}
+abstract class B implements A {
+  int get x;
+}
+''');
+  }
+
+  test_issue48468() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo<T extends R, R>();
+}
+
+class B implements A {
+  void foo<T extends R, R>() {}
+}
+''');
+  }
+
+  test_method_parameter_functionTyped_optOut_extends_optIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+abstract class A {
+  A catchError(void Function(Object) a);
+}
+''');
+
+    await assertNoErrorsInCode('''
+// @dart=2.6
+import 'a.dart';
+
+class B implements A {
+  A catchError(void Function(dynamic) a) => this;
+}
+''');
+  }
+
+  test_method_parameter_interfaceOptOut_concreteOptIn() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  void foo(Object a) {}
+}
+''');
+
+    await assertNoErrorsInCode('''
+// @dart=2.6
+import 'a.dart';
+
+class B extends A {
+  void foo(dynamic a);
+}
+''');
+  }
+
+  test_mixedInheritance_1() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class B {
+  List<int Function(int)> get a => [];
+  set a(List<int Function(int)> _) {}
+  int Function(int) m(int Function(int) x) => x;
+}
+
+class Bq {
+  List<int? Function(int?)> get a => [];
+  set a(List<int? Function(int?)> _) {}
+  int? Function(int?) m(int? Function(int?) x) => x;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: r'''
+// @dart = 2.7
+import 'a.dart';
+
+class C with B {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'a.dart';
+import 'b.dart';
+
+class D extends C implements Bq {}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
+  }
+
+  test_mixedInheritance_2() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class B {
+  List<int Function(int)> get a => [];
+  set a(List<int Function(int)> _) {}
+  int Function(int) m(int Function(int) x) => x;
+}
+
+class Bq {
+  List<int? Function(int?)> get a => [];
+  set a(List<int? Function(int?)> _) {}
+  int? Function(int?) m(int? Function(int?) x) => x;
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: r'''
+// @dart = 2.7
+import 'a.dart';
+
+class C extends B with Bq {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'b.dart';
+
+class D extends C {
+  List<int Function(int)> get a => [];
+  set a(List<int Function(int)> _) {}
+  int Function(int) m(int Function(int) x) => x;
+}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
+    ]);
+  }
+
+  test_setter_overrides_abstract_field_covariant_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract covariant num x;
+}
+abstract class B implements A {
+  int get x;
+  void set x(int value);
+}
+''');
+  }
+
+  test_setter_overrides_abstract_field_final_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract final num x;
+}
+abstract class B implements A {
+  int get x;
+  void set x(int value);
+}
+''');
+  }
+
+  test_setter_overrides_abstract_field_invalid() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract num x;
+}
+abstract class B implements A {
+  int get x;
+  void set x(int value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 95, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 34, 1)]),
+    ]);
+  }
+
+  test_setter_overrides_abstract_field_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+abstract class B implements A {
+  void set x(num value);
+}
+''');
+  }
+
+  test_setter_overrides_external_field_covariant_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external covariant num x;
+}
+abstract class B implements A {
+  int get x;
+  void set x(int value);
+}
+''');
+  }
+
+  test_setter_overrides_external_field_final_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external final num x;
+}
+abstract class B implements A {
+  int get x;
+  void set x(int value);
+}
+''');
+  }
+
+  test_setter_overrides_external_field_invalid() async {
+    await assertErrorsInCode('''
+class A {
+  external num x;
+}
+abstract class B implements A {
+  int get x;
+  void set x(int value);
+}
+''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 86, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 25, 1)]),
+    ]);
+  }
+
+  test_setter_overrides_external_field_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external int x;
+}
+abstract class B implements A {
+  void set x(num value);
+}
+''');
+  }
+
+  test_viaLegacy_class() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A1 {
+  int m() => 0;
+  int get g => 0;
+  set s(int? _) {}
+}
+
+class A2 {
+  int? m() => 0;
+  int? get g => 0;
+  set s(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: r'''
+// @dart=2.6
+import 'a.dart';
+
+class L extends A2 implements A1 {}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart';
+import 'b.dart';
+
+class X1 extends L implements A1 {}
+class X2 extends L implements A2 {}
+
+class Y extends L {
+  int? get g => 0;
+  int? m() => 0;
+  set s(int _) {}
+}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
+  }
+
+  test_viaLegacy_mixin() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A1 {
+  int m() => 0;
+  int get g => 0;
+  set s(int? _) {}
+}
+
+mixin A2 {
+  int? m() => 0;
+  int? get g => 0;
+  set s(int _) {}
+}
+''');
+
+    newFile('$testPackageLibPath/b.dart', content: r'''
+// @dart=2.6
+import 'a.dart';
+
+class L extends Object with A2 implements A1 {}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart';
+import 'b.dart';
+
+class X1 extends L implements A1 {}
+class X2 extends L implements A2 {}
+
+class Y extends L {
+  int? get g => 0;
+  int? m() => 0;
+  set s(int _) {}
+}
+''', [
+      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
+    ]);
+  }
+}
+
+@reflectiveTest
+class InvalidOverrideWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_getter_returnType() async {
     await assertErrorsInCode('''
@@ -630,471 +1110,3 @@
     ]);
   }
 }
-
-@reflectiveTest
-class InvalidOverrideWithNullSafetyTest extends PubPackageResolutionTest {
-  test_abstract_field_covariant_inheritance() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract covariant num x;
-}
-abstract class B implements A {
-  void set x(Object value); // Implicitly covariant
-}
-abstract class C implements B {
-  int get x;
-  void set x(int value); // Ok because covariant
-}
-''');
-  }
-
-  test_external_field_covariant_inheritance() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  external covariant num x;
-}
-abstract class B implements A {
-  void set x(Object value); // Implicitly covariant
-}
-abstract class C implements B {
-  int get x;
-  void set x(int value); // Ok because covariant
-}
-''');
-  }
-
-  test_getter_overrides_abstract_field_covariant_invalid() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract covariant int x;
-}
-abstract class B implements A {
-  num get x;
-  void set x(num value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 91, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 44, 1)]),
-    ]);
-  }
-
-  test_getter_overrides_abstract_field_covariant_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract covariant num x;
-}
-abstract class B implements A {
-  int get x;
-}
-''');
-  }
-
-  test_getter_overrides_abstract_field_final_invalid() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract final int x;
-}
-abstract class B implements A {
-  num get x;
-  void set x(num value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 87, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 40, 1)]),
-    ]);
-  }
-
-  test_getter_overrides_abstract_field_final_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract final num x;
-}
-abstract class B implements A {
-  int get x;
-}
-''');
-  }
-
-  test_getter_overrides_abstract_field_invalid() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-abstract class B implements A {
-  num get x;
-  void set x(num value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 81, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 34, 1)]),
-    ]);
-  }
-
-  test_getter_overrides_abstract_field_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract num x;
-}
-abstract class B implements A {
-  int get x;
-}
-''');
-  }
-
-  test_getter_overrides_external_field_covariant_invalid() async {
-    await assertErrorsInCode('''
-class A {
-  external covariant int x;
-}
-abstract class B implements A {
-  num get x;
-  void set x(num value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 82, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 35, 1)]),
-    ]);
-  }
-
-  test_getter_overrides_external_field_covariant_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external covariant num x;
-}
-abstract class B implements A {
-  int get x;
-}
-''');
-  }
-
-  test_getter_overrides_external_field_final_invalid() async {
-    await assertErrorsInCode('''
-class A {
-  external final int x;
-}
-abstract class B implements A {
-  num get x;
-  void set x(num value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 78, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 31, 1)]),
-    ]);
-  }
-
-  test_getter_overrides_external_field_final_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external final num x;
-}
-abstract class B implements A {
-  int get x;
-}
-''');
-  }
-
-  test_getter_overrides_external_field_invalid() async {
-    await assertErrorsInCode('''
-class A {
-  external int x;
-}
-abstract class B implements A {
-  num get x;
-  void set x(num value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 72, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 25, 1)]),
-    ]);
-  }
-
-  test_getter_overrides_external_field_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external num x;
-}
-abstract class B implements A {
-  int get x;
-}
-''');
-  }
-
-  test_method_parameter_functionTyped_optOut_extends_optIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-abstract class A {
-  A catchError(void Function(Object) a);
-}
-''');
-
-    await assertNoErrorsInCode('''
-// @dart=2.6
-import 'a.dart';
-
-class B implements A {
-  A catchError(void Function(dynamic) a) => this;
-}
-''');
-  }
-
-  test_method_parameter_interfaceOptOut_concreteOptIn() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  void foo(Object a) {}
-}
-''');
-
-    await assertNoErrorsInCode('''
-// @dart=2.6
-import 'a.dart';
-
-class B extends A {
-  void foo(dynamic a);
-}
-''');
-  }
-
-  test_mixedInheritance_1() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class B {
-  List<int Function(int)> get a => [];
-  set a(List<int Function(int)> _) {}
-  int Function(int) m(int Function(int) x) => x;
-}
-
-class Bq {
-  List<int? Function(int?)> get a => [];
-  set a(List<int? Function(int?)> _) {}
-  int? Function(int?) m(int? Function(int?) x) => x;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', content: r'''
-// @dart = 2.7
-import 'a.dart';
-
-class C with B {}
-''');
-
-    await assertErrorsInCode(r'''
-import 'a.dart';
-import 'b.dart';
-
-class D extends C implements Bq {}
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
-    ]);
-  }
-
-  test_mixedInheritance_2() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class B {
-  List<int Function(int)> get a => [];
-  set a(List<int Function(int)> _) {}
-  int Function(int) m(int Function(int) x) => x;
-}
-
-class Bq {
-  List<int? Function(int?)> get a => [];
-  set a(List<int? Function(int?)> _) {}
-  int? Function(int?) m(int? Function(int?) x) => x;
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', content: r'''
-// @dart = 2.7
-import 'a.dart';
-
-class C extends B with Bq {}
-''');
-
-    await assertErrorsInCode(r'''
-import 'b.dart';
-
-class D extends C {
-  List<int Function(int)> get a => [];
-  set a(List<int Function(int)> _) {}
-  int Function(int) m(int Function(int) x) => x;
-}
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 7, 8),
-    ]);
-  }
-
-  test_setter_overrides_abstract_field_covariant_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract covariant num x;
-}
-abstract class B implements A {
-  int get x;
-  void set x(int value);
-}
-''');
-  }
-
-  test_setter_overrides_abstract_field_final_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract final num x;
-}
-abstract class B implements A {
-  int get x;
-  void set x(int value);
-}
-''');
-  }
-
-  test_setter_overrides_abstract_field_invalid() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract num x;
-}
-abstract class B implements A {
-  int get x;
-  void set x(int value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 95, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 34, 1)]),
-    ]);
-  }
-
-  test_setter_overrides_abstract_field_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-abstract class B implements A {
-  void set x(num value);
-}
-''');
-  }
-
-  test_setter_overrides_external_field_covariant_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external covariant num x;
-}
-abstract class B implements A {
-  int get x;
-  void set x(int value);
-}
-''');
-  }
-
-  test_setter_overrides_external_field_final_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external final num x;
-}
-abstract class B implements A {
-  int get x;
-  void set x(int value);
-}
-''');
-  }
-
-  test_setter_overrides_external_field_invalid() async {
-    await assertErrorsInCode('''
-class A {
-  external num x;
-}
-abstract class B implements A {
-  int get x;
-  void set x(int value);
-}
-''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 86, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 25, 1)]),
-    ]);
-  }
-
-  test_setter_overrides_external_field_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external int x;
-}
-abstract class B implements A {
-  void set x(num value);
-}
-''');
-  }
-
-  test_viaLegacy_class() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A1 {
-  int m() => 0;
-  int get g => 0;
-  set s(int? _) {}
-}
-
-class A2 {
-  int? m() => 0;
-  int? get g => 0;
-  set s(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', content: r'''
-// @dart=2.6
-import 'a.dart';
-
-class L extends A2 implements A1 {}
-''');
-
-    await assertErrorsInCode('''
-import 'a.dart';
-import 'b.dart';
-
-class X1 extends L implements A1 {}
-class X2 extends L implements A2 {}
-
-class Y extends L {
-  int? get g => 0;
-  int? m() => 0;
-  set s(int _) {}
-}
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
-    ]);
-  }
-
-  test_viaLegacy_mixin() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A1 {
-  int m() => 0;
-  int get g => 0;
-  set s(int? _) {}
-}
-
-mixin A2 {
-  int? m() => 0;
-  int? get g => 0;
-  set s(int _) {}
-}
-''');
-
-    newFile('$testPackageLibPath/b.dart', content: r'''
-// @dart=2.6
-import 'a.dart';
-
-class L extends Object with A2 implements A1 {}
-''');
-
-    await assertErrorsInCode('''
-import 'a.dart';
-import 'b.dart';
-
-class X1 extends L implements A1 {}
-class X2 extends L implements A2 {}
-
-class Y extends L {
-  int? get g => 0;
-  int? m() => 0;
-  set s(int _) {}
-}
-''', [
-      error(HintCode.IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE, 24, 8),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_generative_enum_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_generative_enum_constructor_test.dart
new file mode 100644
index 0000000..4ea7470
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_generative_enum_constructor_test.dart
@@ -0,0 +1,210 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(InvalidReferenceToGenerativeEnumConstructorTest);
+  });
+}
+
+@reflectiveTest
+class InvalidReferenceToGenerativeEnumConstructorTest
+    extends PubPackageResolutionTest {
+  test_factory_named() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v();
+
+  factory E.named() => v;
+}
+
+void f() {
+  E.named;
+  E.named();
+}
+''');
+  }
+
+  test_factory_unnamed() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v.named();
+
+  const E.named();
+  factory E() => v;
+}
+
+void f() {
+  E.new;
+  E();
+}
+''');
+  }
+
+  test_generative_named_constructorReference() async {
+    await assertErrorsInCode('''
+enum E {
+  v.named();
+
+  const E.named();
+}
+
+void f() {
+  E.named;
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          58,
+          7),
+    ]);
+  }
+
+  test_generative_named_instanceCreation_implicitNew() async {
+    await assertErrorsInCode('''
+enum E {
+  v.named();
+
+  const E.named();
+}
+
+void f() {
+  E.named();
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          58,
+          7),
+    ]);
+  }
+
+  test_generative_named_redirectingConstructorInvocation() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+
+  const E() : this.named();
+  const E.named();
+}
+''');
+  }
+
+  test_generative_named_redirectingFactory() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+
+  const factory E() = E.named;
+  const E.named();
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          37,
+          7),
+    ]);
+  }
+
+  test_generative_unnamed_constructorReference() async {
+    await assertErrorsInCode('''
+enum E {
+  v
+}
+
+void f() {
+  E.new;
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          29,
+          5),
+    ]);
+  }
+
+  test_generative_unnamed_instanceCreation_explicitConst() async {
+    await assertErrorsInCode('''
+enum E {
+  v
+}
+
+void f() {
+  const E();
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          35,
+          1),
+    ]);
+  }
+
+  test_generative_unnamed_instanceCreation_explicitNew() async {
+    await assertErrorsInCode('''
+enum E {
+  v
+}
+
+void f() {
+  new E();
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          33,
+          1),
+    ]);
+  }
+
+  test_generative_unnamed_instanceCreation_implicitNew() async {
+    await assertErrorsInCode('''
+enum E {
+  v
+}
+
+void f() {
+  E();
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          29,
+          1),
+    ]);
+  }
+
+  test_generative_unnamed_redirectingConstructorInvocation() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v1,
+  v2.named();
+
+  const E();
+  const E.named() : this();
+}
+''');
+  }
+
+  test_generative_unnamed_redirectingFactory() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+
+  const factory E.named() = E;
+  const E();
+}
+''', [
+      error(
+          CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
+          43,
+          1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart
index 688771e..47b76c5 100644
--- a/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/late_final_field_with_const_constructor_test.dart
@@ -87,7 +87,27 @@
 ''');
   }
 
-  test_inExtension() async {
+  test_enum_instance_hasInitializer() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  late final f = 0;
+}
+''', [
+      error(_errorCode, 16, 4),
+    ]);
+  }
+
+  test_enum_static() async {
+    await assertNoErrorsInCode('''
+enum E {
+  v;
+  static late final f = 0;
+}
+''');
+  }
+
+  test_extension() async {
     // https://github.com/dart-lang/sdk/issues/46952
     // This test is here because the code that tests for
     // LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR is where the referenced issue was
diff --git a/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart b/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart
index a8e490c..1c09427 100644
--- a/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_first_positional_parameter_type_test.dart
@@ -10,13 +10,31 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MainFirstPositionalParameterTest);
-    defineReflectiveTests(MainFirstPositionalParameterWithNullSafetyTest);
+    defineReflectiveTests(MainFirstPositionalParameterWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class MainFirstPositionalParameterTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, MainFirstPositionalParameterTestCases {}
+    with MainFirstPositionalParameterTestCases {
+  test_positionalRequired_listOfStringQuestion() async {
+    await assertNoErrorsInCode('''
+void main(List<String?> args) {}
+''');
+  }
+
+  test_positionalRequired_listQuestionOfString() async {
+    await assertNoErrorsInCode('''
+void main(List<String>? args) {}
+''');
+  }
+
+  test_positionalRequired_objectQuestion() async {
+    await assertNoErrorsInCode('''
+void main(Object? args) {}
+''');
+  }
+}
 
 mixin MainFirstPositionalParameterTestCases on PubPackageResolutionTest {
   test_positionalOptional_listOfInt() async {
@@ -72,24 +90,6 @@
 }
 
 @reflectiveTest
-class MainFirstPositionalParameterWithNullSafetyTest
+class MainFirstPositionalParameterWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with MainFirstPositionalParameterTestCases {
-  test_positionalRequired_listOfStringQuestion() async {
-    await assertNoErrorsInCode('''
-void main(List<String?> args) {}
-''');
-  }
-
-  test_positionalRequired_listQuestionOfString() async {
-    await assertNoErrorsInCode('''
-void main(List<String>? args) {}
-''');
-  }
-
-  test_positionalRequired_objectQuestion() async {
-    await assertNoErrorsInCode('''
-void main(Object? args) {}
-''');
-  }
-}
+    with WithoutNullSafetyMixin, MainFirstPositionalParameterTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart b/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart
index 46a8f2f..65e103e 100644
--- a/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_has_required_named_parameters_test.dart
@@ -10,13 +10,21 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MainHasRequiredNamedParametersTest);
-    defineReflectiveTests(MainHasRequiredNamedParametersWithNullSafetyTest);
+    defineReflectiveTests(MainHasRequiredNamedParametersWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class MainHasRequiredNamedParametersTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, MainHasRequiredNamedParametersTestCases {}
+    with MainHasRequiredNamedParametersTestCases {
+  test_namedRequired() async {
+    await assertErrorsInCode('''
+void main({required List<String> a}) {}
+''', [
+      error(CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS, 5, 4),
+    ]);
+  }
+}
 
 mixin MainHasRequiredNamedParametersTestCases on PubPackageResolutionTest {
   test_namedOptional() async {
@@ -28,14 +36,6 @@
 }
 
 @reflectiveTest
-class MainHasRequiredNamedParametersWithNullSafetyTest
+class MainHasRequiredNamedParametersWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with MainHasRequiredNamedParametersTestCases {
-  test_namedRequired() async {
-    await assertErrorsInCode('''
-void main({required List<String> a}) {}
-''', [
-      error(CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS, 5, 4),
-    ]);
-  }
-}
+    with WithoutNullSafetyMixin, MainHasRequiredNamedParametersTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart b/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart
index b08a039..e1061f8 100644
--- a/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_has_too_many_required_positional_parameters_test.dart
@@ -9,9 +9,11 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(MainHasTooManyRequiredPositionalParametersTest);
     defineReflectiveTests(
-      MainHasTooManyRequiredPositionalParametersWithNullSafetyTest,
+      MainHasTooManyRequiredPositionalParametersTest,
+    );
+    defineReflectiveTests(
+      MainHasTooManyRequiredPositionalParametersWithoutNullSafetyTest,
     );
   });
 }
@@ -19,9 +21,20 @@
 @reflectiveTest
 class MainHasTooManyRequiredPositionalParametersTest
     extends PubPackageResolutionTest
-    with
-        WithoutNullSafetyMixin,
-        MainHasTooManyRequiredPositionalParametersTestCases {}
+    with MainHasTooManyRequiredPositionalParametersTestCases {
+  test_positionalRequired_3_namedRequired_1() async {
+    await resolveTestCode('''
+void main(args, int a, int b, {required int c}) {}
+''');
+    assertErrorsInResult(expectedErrorsByNullability(nullable: [
+      error(CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS, 5, 4),
+      error(
+          CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS,
+          5,
+          4),
+    ], legacy: []));
+  }
+}
 
 mixin MainHasTooManyRequiredPositionalParametersTestCases
     on PubPackageResolutionTest {
@@ -93,19 +106,8 @@
 }
 
 @reflectiveTest
-class MainHasTooManyRequiredPositionalParametersWithNullSafetyTest
+class MainHasTooManyRequiredPositionalParametersWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with MainHasTooManyRequiredPositionalParametersTestCases {
-  test_positionalRequired_3_namedRequired_1() async {
-    await resolveTestCode('''
-void main(args, int a, int b, {required int c}) {}
-''');
-    assertErrorsInResult(expectedErrorsByNullability(nullable: [
-      error(CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS, 5, 4),
-      error(
-          CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS,
-          5,
-          4),
-    ], legacy: []));
-  }
-}
+    with
+        WithoutNullSafetyMixin,
+        MainHasTooManyRequiredPositionalParametersTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart b/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart
index 2060e25..2cf8747 100644
--- a/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/main_is_not_function_test.dart
@@ -10,13 +10,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MainIsNotFunctionTest);
-    defineReflectiveTests(MainIsNotFunctionWithNullSafetyTest);
+    defineReflectiveTests(MainIsNotFunctionWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class MainIsNotFunctionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, MainIsNotFunctionTestCases {}
+    with MainIsNotFunctionTestCases {}
 
 mixin MainIsNotFunctionTestCases on PubPackageResolutionTest {
   test_class() async {
@@ -39,6 +39,17 @@
     ], legacy: []));
   }
 
+  test_enum() async {
+    await resolveTestCode('''
+enum main {
+  v
+}
+''');
+    assertErrorsInResult(expectedErrorsByNullability(nullable: [
+      error(CompileTimeErrorCode.MAIN_IS_NOT_FUNCTION, 5, 4),
+    ], legacy: []));
+  }
+
   test_function() async {
     await assertNoErrorsInCode('''
 void main() {}
@@ -93,5 +104,5 @@
 }
 
 @reflectiveTest
-class MainIsNotFunctionWithNullSafetyTest extends PubPackageResolutionTest
-    with MainIsNotFunctionTestCases {}
+class MainIsNotFunctionWithoutNullSafetyTest extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, MainIsNotFunctionTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart b/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart
index abe984c..0c2cbc9 100644
--- a/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/member_with_class_name_test.dart
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class MemberWithClassNameTest extends PubPackageResolutionTest {
-  test_field() async {
+  test_class_field() async {
     await assertErrorsInCode(r'''
 class A {
   int A = 0;
@@ -25,7 +25,7 @@
     ]);
   }
 
-  test_field_multiple() async {
+  test_class_field_multiple() async {
     await assertErrorsInCode(r'''
 class A {
   int z = 0, A = 0, b = 0;
@@ -35,7 +35,7 @@
     ]);
   }
 
-  test_getter() async {
+  test_class_getter() async {
     await assertErrorsInCode(r'''
 class A {
   get A => 0;
@@ -45,8 +45,133 @@
     ]);
   }
 
-  test_method() async {
+  test_class_getter_static() async {
+    await assertErrorsInCode(r'''
+class A {
+  static int get A => 0;
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 27, 1),
+    ]);
+  }
+
+  test_class_method() async {
     // No test because a method named the same as the enclosing class is
     // indistinguishable from a constructor.
   }
+
+  test_class_setter() async {
+    await assertErrorsInCode(r'''
+class A {
+  set A(_) {}
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 16, 1),
+    ]);
+  }
+
+  test_class_setter_static() async {
+    await assertErrorsInCode(r'''
+class A {
+  static set A(_) {}
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 23, 1),
+    ]);
+  }
+
+  test_enum_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int E = 0;
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 26, 1),
+    ]);
+  }
+
+  test_enum_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  int get E => 0;
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 24, 1),
+    ]);
+  }
+
+  test_enum_getter_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int get E => 0;
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 31, 1),
+    ]);
+  }
+
+  test_enum_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  set E(int _) {}
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 20, 1),
+    ]);
+  }
+
+  test_enum_setter_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static set E(int _) {}
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 27, 1),
+    ]);
+  }
+
+  test_mixin_getter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  int get M => 0;
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 20, 1),
+    ]);
+  }
+
+  test_mixin_getter_static() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  static int get M => 0;
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 27, 1),
+    ]);
+  }
+
+  test_mixin_setter() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  void set M(_) {}
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 21, 1),
+    ]);
+  }
+
+  test_mixin_setter_static() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  static void set M(_) {}
+}
+''', [
+      error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 28, 1),
+    ]);
+  }
 }
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 604be9a..e089c34 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
@@ -11,12 +11,277 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MissingRequiredParamTest);
-    defineReflectiveTests(MissingRequiredParamWithNullSafetyTest);
+    defineReflectiveTests(MissingRequiredParamWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class MissingRequiredParamTest extends PubPackageResolutionTest
+class MissingRequiredParamTest extends PubPackageResolutionTest {
+  test_constructor_legacy_argumentGiven() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  A({required int a});
+}
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import "a.dart";
+
+void f() {
+  A(a: 0);
+}
+''');
+  }
+
+  test_constructor_legacy_missingArgument() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  A({required int a});
+}
+''');
+    await assertErrorsInCode(r'''
+// @dart = 2.7
+import "a.dart";
+
+void f() {
+  A();
+}
+''', [
+      error(HintCode.MISSING_REQUIRED_PARAM, 46, 1),
+    ]);
+  }
+
+  test_constructor_nullSafe_argumentGiven() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  C({required int a}) {}
+}
+
+main() {
+  new C(a: 2);
+}
+''');
+  }
+
+  test_constructor_nullSafe_missingArgument() async {
+    await assertErrorsInCode(r'''
+class C {
+  C({required int a}) {}
+}
+main() {
+  new C();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 52, 1),
+    ]);
+  }
+
+  test_constructor_nullSafe_redirectingConstructorCall() async {
+    await assertErrorsInCode(r'''
+class C {
+  C({required int x});
+  C.named() : this();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 47, 6),
+    ]);
+  }
+
+  test_constructor_nullSafe_superCall() async {
+    await assertErrorsInCode(r'''
+class C {
+  C({required int a}) {}
+}
+
+class D extends C {
+  D() : super();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 66, 7),
+    ]);
+  }
+
+  test_constructor_superFormalParameter() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  A({required int a});
+}
+
+class B extends A {
+  B({required super.a}) : super();
+}
+''');
+  }
+
+  test_enumConstant_withArguments() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v();
+  const E({required int a});
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 11, 1),
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 11, 3),
+    ]);
+  }
+
+  test_enumConstant_withoutArguments() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E({required int a});
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 11, 1),
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 11, 1),
+    ]);
+  }
+
+  test_function() async {
+    await assertErrorsInCode(r'''
+void f({required int a}) {}
+
+main() {
+  f();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 40, 1),
+    ]);
+  }
+
+  test_function_call() async {
+    await assertErrorsInCode(r'''
+void f({required int a}) {}
+
+main() {
+  f.call();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 46, 2),
+    ]);
+  }
+
+  test_function_legacy_argumentGiven() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+void foo({required int a}) {}
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import "a.dart";
+
+void f() {
+  foo(a: 0);
+}
+''');
+  }
+
+  test_function_legacy_missingArgument() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+void foo({required int a}) {}
+''');
+    await assertErrorsInCode(r'''
+// @dart = 2.7
+import "a.dart";
+
+void f() {
+  foo();
+}
+''', [
+      error(HintCode.MISSING_REQUIRED_PARAM, 46, 3),
+    ]);
+  }
+
+  test_functionInvocation() async {
+    await assertErrorsInCode(r'''
+void Function({required int a}) f() => throw '';
+g() {
+  f()();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 57, 5),
+    ]);
+  }
+
+  test_method() async {
+    await assertErrorsInCode(r'''
+class A {
+  void m({required int a}) {}
+}
+f() {
+  new A().m();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 58, 1),
+    ]);
+  }
+
+  test_method_inOtherLib() async {
+    newFile('$testPackageLibPath/a_lib.dart', content: r'''
+class A {
+  void m({required int a}) {}
+}
+''');
+    await assertErrorsInCode(r'''
+import "a_lib.dart";
+f() {
+  new A().m();
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 37, 1),
+    ]);
+  }
+
+  test_method_legacy_argumentGiven() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  void foo({required int a}) {}
+}
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import "a.dart";
+
+void f(A a) {
+  a.foo(a: 0);
+}
+''');
+  }
+
+  test_method_legacy_missingArgument() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  void foo({required int a}) {}
+}
+''');
+    await assertErrorsInCode(r'''
+// @dart = 2.7
+import "a.dart";
+
+void f(A a) {
+  a.foo();
+}
+''', [
+      error(HintCode.MISSING_REQUIRED_PARAM, 51, 3),
+    ]);
+  }
+
+  test_typedef_function() async {
+    await assertErrorsInCode(r'''
+String test(C c) => c.m()();
+
+typedef String F({required String x});
+
+class C {
+  F m() => ({required String x}) => throw '';
+}
+''', [
+      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 20, 7),
+    ]);
+  }
+}
+
+@reflectiveTest
+class MissingRequiredParamWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   @override
   void setUp() {
@@ -241,232 +506,3 @@
     assertErrorsInResolvedUnit(result, expectedErrors);
   }
 }
-
-@reflectiveTest
-class MissingRequiredParamWithNullSafetyTest extends PubPackageResolutionTest {
-  test_constructor_legacy_argumentGiven() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  A({required int a});
-}
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import "a.dart";
-
-void f() {
-  A(a: 0);
-}
-''');
-  }
-
-  test_constructor_legacy_missingArgument() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  A({required int a});
-}
-''');
-    await assertErrorsInCode(r'''
-// @dart = 2.7
-import "a.dart";
-
-void f() {
-  A();
-}
-''', [
-      error(HintCode.MISSING_REQUIRED_PARAM, 46, 1),
-    ]);
-  }
-
-  test_constructor_nullSafe_argumentGiven() async {
-    await assertNoErrorsInCode(r'''
-class C {
-  C({required int a}) {}
-}
-
-main() {
-  new C(a: 2);
-}
-''');
-  }
-
-  test_constructor_nullSafe_missingArgument() async {
-    await assertErrorsInCode(r'''
-class C {
-  C({required int a}) {}
-}
-main() {
-  new C();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 52, 1),
-    ]);
-  }
-
-  test_constructor_nullSafe_redirectingConstructorCall() async {
-    await assertErrorsInCode(r'''
-class C {
-  C({required int x});
-  C.named() : this();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 47, 6),
-    ]);
-  }
-
-  test_constructor_nullSafe_superCall() async {
-    await assertErrorsInCode(r'''
-class C {
-  C({required int a}) {}
-}
-
-class D extends C {
-  D() : super();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 66, 7),
-    ]);
-  }
-
-  test_function() async {
-    await assertErrorsInCode(r'''
-void f({required int a}) {}
-
-main() {
-  f();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 40, 1),
-    ]);
-  }
-
-  test_function_call() async {
-    await assertErrorsInCode(r'''
-void f({required int a}) {}
-
-main() {
-  f.call();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 46, 2),
-    ]);
-  }
-
-  test_function_legacy_argumentGiven() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-void foo({required int a}) {}
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import "a.dart";
-
-void f() {
-  foo(a: 0);
-}
-''');
-  }
-
-  test_function_legacy_missingArgument() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-void foo({required int a}) {}
-''');
-    await assertErrorsInCode(r'''
-// @dart = 2.7
-import "a.dart";
-
-void f() {
-  foo();
-}
-''', [
-      error(HintCode.MISSING_REQUIRED_PARAM, 46, 3),
-    ]);
-  }
-
-  test_functionInvocation() async {
-    await assertErrorsInCode(r'''
-void Function({required int a}) f() => throw '';
-g() {
-  f()();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 57, 5),
-    ]);
-  }
-
-  test_method() async {
-    await assertErrorsInCode(r'''
-class A {
-  void m({required int a}) {}
-}
-f() {
-  new A().m();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 58, 1),
-    ]);
-  }
-
-  test_method_inOtherLib() async {
-    newFile('$testPackageLibPath/a_lib.dart', content: r'''
-class A {
-  void m({required int a}) {}
-}
-''');
-    await assertErrorsInCode(r'''
-import "a_lib.dart";
-f() {
-  new A().m();
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 37, 1),
-    ]);
-  }
-
-  test_method_legacy_argumentGiven() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  void foo({required int a}) {}
-}
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.7
-import "a.dart";
-
-void f(A a) {
-  a.foo(a: 0);
-}
-''');
-  }
-
-  test_method_legacy_missingArgument() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A {
-  void foo({required int a}) {}
-}
-''');
-    await assertErrorsInCode(r'''
-// @dart = 2.7
-import "a.dart";
-
-void f(A a) {
-  a.foo();
-}
-''', [
-      error(HintCode.MISSING_REQUIRED_PARAM, 51, 3),
-    ]);
-  }
-
-  test_typedef_function() async {
-    await assertErrorsInCode(r'''
-String test(C c) => c.m()();
-
-typedef String F({required String x});
-
-class C {
-  F m() => ({required String x}) => throw '';
-}
-''', [
-      error(CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT, 20, 7),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
index 9f75275..4c1104b 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
@@ -10,12 +10,62 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MissingReturnTest);
-    defineReflectiveTests(MissingReturnWithNullSafetyTest);
+    defineReflectiveTests(MissingReturnWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class MissingReturnTest extends PubPackageResolutionTest
+class MissingReturnTest extends PubPackageResolutionTest {
+  test_function_async_block_futureOrVoid() async {
+    await assertNoErrorsInCode('''
+import 'dart:async';
+FutureOr<void> f() async {}
+''');
+  }
+
+  test_function_async_block_void() async {
+    await assertNoErrorsInCode('''
+void f() async {}
+''');
+  }
+
+  test_function_sync_block_dynamic() async {
+    await assertNoErrorsInCode('''
+dynamic f() {}
+''');
+  }
+
+  test_function_sync_block_Never() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+Never foo() {
+  throw 0;
+}
+''');
+    await assertNoErrorsInCode(r'''
+// @dart = 2.8
+import 'a.dart';
+
+int f() {
+  foo();
+}
+''');
+  }
+
+  test_function_sync_block_Null() async {
+    await assertNoErrorsInCode('''
+Null f() {}
+''');
+  }
+
+  test_function_sync_block_void() async {
+    await assertNoErrorsInCode('''
+void f() {}
+''');
+  }
+}
+
+@reflectiveTest
+class MissingReturnWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_alwaysThrows() async {
     writeTestPackageConfigWithMeta();
@@ -214,53 +264,3 @@
     ]);
   }
 }
-
-@reflectiveTest
-class MissingReturnWithNullSafetyTest extends PubPackageResolutionTest {
-  test_function_async_block_futureOrVoid() async {
-    await assertNoErrorsInCode('''
-import 'dart:async';
-FutureOr<void> f() async {}
-''');
-  }
-
-  test_function_async_block_void() async {
-    await assertNoErrorsInCode('''
-void f() async {}
-''');
-  }
-
-  test_function_sync_block_dynamic() async {
-    await assertNoErrorsInCode('''
-dynamic f() {}
-''');
-  }
-
-  test_function_sync_block_Never() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-Never foo() {
-  throw 0;
-}
-''');
-    await assertNoErrorsInCode(r'''
-// @dart = 2.8
-import 'a.dart';
-
-int f() {
-  foo();
-}
-''');
-  }
-
-  test_function_sync_block_Null() async {
-    await assertNoErrorsInCode('''
-Null f() {}
-''');
-  }
-
-  test_function_sync_block_void() async {
-    await assertNoErrorsInCode('''
-void f() {}
-''');
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_application_concrete_super_invoked_member_type_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_application_concrete_super_invoked_member_type_test.dart
new file mode 100644
index 0000000..4b37af3
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/mixin_application_concrete_super_invoked_member_type_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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinApplicationConcreteSuperInvokedMemberTypeTest);
+  });
+}
+
+@reflectiveTest
+class MixinApplicationConcreteSuperInvokedMemberTypeTest
+    extends PubPackageResolutionTest {
+  test_class_method() async {
+    await assertErrorsInCode(r'''
+class I {
+  void foo([int? p]) {}
+}
+
+class A {
+  void foo(int? p) {}
+}
+
+abstract class B extends A implements I {
+  void foo([int? p]);
+}
+
+mixin M on I {
+  void bar() {
+    super.foo(42);
+  }
+}
+
+abstract class X extends B with M {}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE,
+          227,
+          1),
+    ]);
+  }
+
+  test_class_method_OK_overriddenInMixin() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {
+  void remove(T x) {}
+}
+
+mixin M<U> on A<U> {
+  void remove(Object? x) {
+    super.remove(x as U);
+  }
+}
+
+class X<T> = A<T> with M<T>;
+''');
+  }
+
+  test_enum_method() async {
+    await assertErrorsInCode(r'''
+abstract class I {
+  void foo([int? p]);
+}
+
+mixin M1 {
+  void foo(int? p) {}
+}
+
+mixin M2 implements I {}
+
+mixin M3 on I {
+  void bar() {
+    super.foo(42);
+  }
+}
+
+enum E with M1, M2, M3 {
+  v;
+  void foo([int? p]) {}
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE,
+          183,
+          2),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_application_no_concrete_super_invoked_member_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_application_no_concrete_super_invoked_member_test.dart
new file mode 100644
index 0000000..77c785a
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/mixin_application_no_concrete_super_invoked_member_test.dart
@@ -0,0 +1,393 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinApplicationNoConcreteSuperInvokedMemberTest);
+  });
+}
+
+@reflectiveTest
+class MixinApplicationNoConcreteSuperInvokedMemberTest
+    extends PubPackageResolutionTest {
+  test_class_getter() async {
+    await assertErrorsInCode(r'''
+abstract class A {
+  int get foo;
+}
+
+mixin M on A {
+  void bar() {
+    super.foo;
+  }
+}
+
+abstract class X extends A with M {}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          121,
+          1),
+    ]);
+  }
+
+  test_class_inNextMixin() async {
+    await assertErrorsInCode('''
+abstract class A {
+  void foo();
+}
+
+mixin M1 on A {
+  void foo() {
+    super.foo();
+  }
+}
+
+mixin M2 on A {
+  void foo() {}
+}
+
+class X extends A with M1, M2 {}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          149,
+          2),
+    ]);
+  }
+
+  test_class_inSameMixin() async {
+    await assertErrorsInCode('''
+abstract class A {
+  void foo();
+}
+
+mixin M on A {
+  void foo() {
+    super.foo();
+  }
+}
+
+class X extends A with M {}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          113,
+          1),
+    ]);
+  }
+
+  test_class_method() async {
+    await assertErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+abstract class X extends A with M {}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          122,
+          1),
+    ]);
+  }
+
+  test_class_OK_hasNSM() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+class C implements A {
+  noSuchMethod(_) {}
+}
+
+class X extends C with M {}
+''');
+  }
+
+  test_class_OK_hasNSM2() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+/// Class `B` has noSuchMethod forwarder for `foo`.
+class B implements A {
+  noSuchMethod(_) {}
+}
+
+/// Class `C` is abstract, but it inherits noSuchMethod forwarders from `B`.
+abstract class C extends B {}
+
+class X extends C with M {}
+''');
+  }
+
+  test_class_OK_inPreviousMixin() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M1 {
+  void foo() {}
+}
+
+mixin M2 on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+class X extends A with M1, M2 {}
+''');
+  }
+
+  test_class_OK_inSuper_fromMixin() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M1 {
+  void foo() {}
+}
+
+class B extends A with M1 {}
+
+mixin M2 on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+class X extends B with M2 {}
+''');
+  }
+
+  test_class_OK_notInvoked() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+mixin M on A {}
+
+abstract class X extends A with M {}
+''');
+  }
+
+  test_class_OK_super_covariant() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  bar(num n) {}
+}
+
+mixin M on A {
+  test() {
+    super.bar(3.14);
+  }
+}
+
+class B implements A {
+  bar(covariant int i) {}
+}
+
+class C extends B with M {}
+''');
+  }
+
+  test_class_setter() async {
+    await assertErrorsInCode(r'''
+abstract class A {
+  void set foo(_);
+}
+
+mixin M on A {
+  void bar() {
+    super.foo = 0;
+  }
+}
+
+abstract class X extends A with M {}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          129,
+          1),
+    ]);
+  }
+
+  test_enum_getter() async {
+    await assertErrorsInCode(r'''
+mixin M1 {
+  int get foo;
+}
+
+mixin M2 on M1 {
+  void bar() {
+    super.foo;
+  }
+}
+
+enum E with M1, M2 {
+  v;
+  int get foo => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          99,
+          2),
+    ]);
+  }
+
+  test_enum_getter_exists() async {
+    await assertNoErrorsInCode(r'''
+mixin M1 {
+  int get foo => 0;
+}
+
+mixin M2 on M1 {
+  void bar() {
+    super.foo;
+  }
+}
+
+enum E with M1, M2 {
+  v
+}
+''');
+  }
+
+  test_enum_getter_index() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {
+  void foo() {
+    super.index;
+  }
+}
+
+enum E with M {
+  v
+}
+''');
+  }
+
+  test_enum_method() async {
+    await assertErrorsInCode(r'''
+mixin M1 {
+  void foo();
+}
+
+mixin M2 on M1 {
+  void bar() {
+    super.foo();
+  }
+}
+
+enum E with M1, M2 {
+  v;
+  void foo() {}
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          100,
+          2),
+    ]);
+  }
+
+  test_enum_method_exists() async {
+    await assertNoErrorsInCode(r'''
+mixin M1 {
+  void foo() {}
+}
+
+mixin M2 on M1 {
+  void bar() {
+    super.foo();
+  }
+}
+
+enum E with M1, M2 {
+  v
+}
+''');
+  }
+
+  test_enum_OK_getter_inPreviousMixin() async {
+    await assertNoErrorsInCode(r'''
+mixin M1 {
+  int get foo => 0;
+}
+
+mixin M2 on M1 {
+  void bar() {
+    super.foo;
+  }
+}
+
+enum E with M1, M2 {
+  v;
+}
+''');
+  }
+
+  test_enum_setter() async {
+    await assertErrorsInCode(r'''
+mixin M1 {
+  set foo(int _);
+}
+
+mixin M2 on M1 {
+  void bar() {
+    super.foo = 0;
+  }
+}
+
+enum E with M1, M2 {
+  v;
+  set foo(int _) {}
+}
+''', [
+      error(
+          CompileTimeErrorCode
+              .MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER,
+          106,
+          2),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
index 0266782..8fb3ea2 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
@@ -16,7 +16,16 @@
 @reflectiveTest
 class MixinApplicationNotImplementedInterfaceTest
     extends PubPackageResolutionTest {
-  test_matchingClass_inPreviousMixin_new_syntax() async {
+  test_class_matchingInterface() async {
+    await assertNoErrorsInCode('''
+abstract class A<T> {}
+class B {}
+mixin M<T> on A<T> {}
+class C extends A<int> with M {}
+''');
+  }
+
+  test_class_matchingInterface_inPreviousMixin() async {
     await assertNoErrorsInCode('''
 abstract class A<T> {}
 class B {}
@@ -26,28 +35,7 @@
 ''');
   }
 
-  test_matchingClass_new_syntax() async {
-    await assertNoErrorsInCode('''
-abstract class A<T> {}
-class B {}
-mixin M<T> on A<T> {}
-class C extends A<int> with M {}
-''');
-  }
-
-  test_noMatchingClass_namedMixinApplication_new_syntax() async {
-    await assertErrorsInCode('''
-abstract class A<T> {}
-class B {}
-mixin M<T> on A<T> {}
-class C = Object with M;
-''', [
-      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
-          78, 1),
-    ]);
-  }
-
-  test_noMatchingClass_new_syntax() async {
+  test_class_noMatchingInterface() async {
     await assertErrorsInCode('''
 abstract class A<T> {}
 class B {}
@@ -59,16 +47,7 @@
     ]);
   }
 
-  test_noMatchingClass_noSuperclassConstraint_new_syntax() async {
-    await assertNoErrorsInCode('''
-abstract class A<T> {}
-class B {}
-mixin M<T> {}
-class C extends Object with M {}
-''');
-  }
-
-  test_noMatchingClass_typeParametersSupplied_new_syntax() async {
+  test_class_noMatchingInterface_withTypeArguments() async {
     await assertErrorsInCode('''
 abstract class A<T> {}
 class B {}
@@ -80,7 +59,39 @@
     ]);
   }
 
-  test_recursiveSubtypeCheck_new_syntax() async {
+  test_class_noMemberErrors() async {
+    await assertErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+mixin M on A {
+  void bar() {
+    super.foo();
+  }
+}
+
+class C {
+  noSuchMethod(_) {}
+}
+
+class X = C with M;
+''', [
+      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
+          134, 1),
+    ]);
+  }
+
+  test_class_noSuperclassConstraint() async {
+    await assertNoErrorsInCode('''
+abstract class A<T> {}
+class B {}
+mixin M<T> {}
+class C extends Object with M {}
+''');
+  }
+
+  test_class_recursiveSubtypeCheck() async {
     // See dartbug.com/32353 for a detailed explanation.
     await assertErrorsInCode('''
 class ioDirectory implements ioFileSystemEntity {}
@@ -114,4 +125,138 @@
         result.unit.declaredElement!.getType('_LocalDirectory')!.mixins;
     assertType(mixins[0], 'ForwardingDirectory<_LocalDirectory>');
   }
+
+  test_classTypeAlias_generic() async {
+    await assertErrorsInCode(r'''
+class A<T> {}
+
+mixin M on A<int> {}
+
+class X = A<double> with M;
+''', [
+      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
+          62, 1),
+    ]);
+  }
+
+  test_classTypeAlias_noMatchingInterface() async {
+    await assertErrorsInCode('''
+abstract class A<T> {}
+class B {}
+mixin M<T> on A<T> {}
+class C = Object with M;
+''', [
+      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
+          78, 1),
+    ]);
+  }
+
+  test_classTypeAlias_notGeneric() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+mixin M on A {}
+
+class X = Object with M;
+''', [
+      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
+          51, 1),
+    ]);
+  }
+
+  test_classTypeAlias_OK_0() async {
+    await assertNoErrorsInCode(r'''
+mixin M {}
+
+class X = Object with M;
+''');
+  }
+
+  test_classTypeAlias_OK_1() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+mixin M on A {}
+
+class X = A with M;
+''');
+  }
+
+  test_classTypeAlias_OK_generic() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+mixin M<T> on A<T> {}
+
+class B<T> implements A<T> {}
+
+class C<T> = B<T> with M<T>;
+''');
+  }
+
+  test_classTypeAlias_OK_previousMixin() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+
+mixin M1 implements A {}
+
+mixin M2 on A {}
+
+class X = Object with M1, M2;
+''');
+  }
+
+  test_classTypeAlias_oneOfTwo() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class C {}
+
+mixin M on A, B {}
+
+class X = C with M;
+''', [
+      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
+          71, 1),
+    ]);
+  }
+
+  test_enum_matchingInterface_inPreviousMixin() async {
+    await assertNoErrorsInCode('''
+abstract class A {}
+
+mixin M1 implements A {}
+
+mixin M2 on A {}
+
+enum E with M1, M2 {
+  v
+}
+''');
+  }
+
+  test_enum_noMatchingInterface() async {
+    await assertErrorsInCode('''
+abstract class A {}
+
+mixin M on A {}
+
+enum E with M {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE,
+          50, 1),
+    ]);
+  }
+
+  test_enum_noSuperclassConstraint() async {
+    await assertNoErrorsInCode('''
+mixin M {}
+
+enum E with M {
+  v;
+}
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_class_declares_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_class_declares_constructor_test.dart
index baece03..c826797 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_class_declares_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_class_declares_constructor_test.dart
@@ -15,7 +15,7 @@
 
 @reflectiveTest
 class MixinClassDeclaresConstructorTest extends PubPackageResolutionTest {
-  test_classDeclaration() async {
+  test_class() async {
     await assertErrorsInCode(
       r'''
 class A {
@@ -29,7 +29,7 @@
     );
   }
 
-  test_typeAlias() async {
+  test_classTypeAlias() async {
     await assertErrorsInCode(
       r'''
 class A {
@@ -42,4 +42,21 @@
       ],
     );
   }
+
+  test_enum() async {
+    await assertErrorsInCode(
+      r'''
+class A {
+  A() {}
+}
+
+enum E with A {
+  v
+}
+''',
+      [
+        error(CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR, 34, 1),
+      ],
+    );
+  }
 }
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 a9bccb9..b8a8c67 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart
@@ -30,6 +30,20 @@
     ]);
   }
 
+  test_enum() async {
+    newFile('$testPackageLibPath/a.dart', content: '''
+class A {}
+''');
+    await assertErrorsInCode('''
+import 'a.dart' deferred as a;
+enum E with a.A {
+  v;
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_DEFERRED_CLASS, 43, 3),
+    ]);
+  }
+
   test_mixin_deferred_class() async {
     newFile('$testPackageLibPath/lib1.dart', content: '''
 library lib1;
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 6dc76c1..2ba1557 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
@@ -9,36 +9,17 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(MixinInferenceNoPossibleSubstitutionTest);
     defineReflectiveTests(
-      MixinInferenceNoPossibleSubstitutionWithNullSafetyTest,
+      MixinInferenceNoPossibleSubstitutionTest,
+    );
+    defineReflectiveTests(
+      MixinInferenceNoPossibleSubstitutionWithoutNullSafetyTest,
     );
   });
 }
 
 @reflectiveTest
 class MixinInferenceNoPossibleSubstitutionTest extends PubPackageResolutionTest
-    with
-        WithoutNullSafetyMixin,
-        MixinInferenceNoPossibleSubstitutionTestCases {}
-
-mixin MixinInferenceNoPossibleSubstitutionTestCases on ResolutionTest {
-  test_valid_single() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-
-mixin M<T> on A<T> {}
-
-class X extends A<int> with M {}
-''');
-
-    assertType(findNode.namedType('M {}'), 'M<int>');
-  }
-}
-
-@reflectiveTest
-class MixinInferenceNoPossibleSubstitutionWithNullSafetyTest
-    extends PubPackageResolutionTest
     with MixinInferenceNoPossibleSubstitutionTestCases {
   test_valid_nonNullableMixins_legacyApplication() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
@@ -59,3 +40,24 @@
     assertType(findNode.namedType('C {}'), 'C<int*>*');
   }
 }
+
+mixin MixinInferenceNoPossibleSubstitutionTestCases on ResolutionTest {
+  test_valid_single() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+
+mixin M<T> on A<T> {}
+
+class X extends A<int> with M {}
+''');
+
+    assertType(findNode.namedType('M {}'), 'M<int>');
+  }
+}
+
+@reflectiveTest
+class MixinInferenceNoPossibleSubstitutionWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with
+        WithoutNullSafetyMixin,
+        MixinInferenceNoPossibleSubstitutionTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_inherits_from_not_object_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_inherits_from_not_object_test.dart
index 5af77a8..7fff8ae 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_inherits_from_not_object_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_inherits_from_not_object_test.dart
@@ -15,54 +15,7 @@
 
 @reflectiveTest
 class MixinInheritsFromNotObjectTest extends PubPackageResolutionTest {
-  test_classAlias_class_extends() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {}
-class C = Object with B;
-''', [
-      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 54, 1),
-    ]);
-  }
-
-  test_classAlias_class_with() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends Object with A {}
-class C = Object with B;
-''', [
-      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 66, 1),
-    ]);
-  }
-
-  test_classAlias_classAlias_with() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-class B = Object with A;
-class C = Object with B;
-''');
-  }
-
-  test_classAlias_classAlias_with2() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B {}
-class C = Object with A, B;
-class D = Object with C;
-''', [
-      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 72, 1),
-    ]);
-  }
-
-  test_classAlias_mixin() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-mixin B on A {}
-class C = A with B;
-''');
-  }
-
-  test_classDeclaration_class_extends() async {
+  test_class_class_extends() async {
     await assertErrorsInCode(r'''
 class A {}
 class B extends A {}
@@ -72,7 +25,7 @@
     ]);
   }
 
-  test_classDeclaration_class_extends_Object() async {
+  test_class_class_extends_Object() async {
     await assertNoErrorsInCode(r'''
 class A {}
 class B extends Object {}
@@ -80,7 +33,7 @@
 ''');
   }
 
-  test_classDeclaration_class_with() async {
+  test_class_class_with() async {
     await assertErrorsInCode(r'''
 class A {}
 class B extends Object with A {}
@@ -90,7 +43,7 @@
     ]);
   }
 
-  test_classDeclaration_classAlias_with() async {
+  test_class_classTypeAlias_with() async {
     await assertNoErrorsInCode(r'''
 class A {}
 class B = Object with A;
@@ -98,7 +51,7 @@
 ''');
   }
 
-  test_classDeclaration_classAlias_with2() async {
+  test_class_classTypeAlias_with2() async {
     await assertErrorsInCode(r'''
 class A {}
 class B {}
@@ -109,11 +62,115 @@
     ]);
   }
 
-  test_classDeclaration_mixin() async {
+  test_class_mixin() async {
     await assertNoErrorsInCode(r'''
 class A {}
 mixin B on A {}
 class C extends A with B {}
 ''');
   }
+
+  test_classTypeAlias_class_extends() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {}
+class C = Object with B;
+''', [
+      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 54, 1),
+    ]);
+  }
+
+  test_classTypeAlias_class_with() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends Object with A {}
+class C = Object with B;
+''', [
+      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 66, 1),
+    ]);
+  }
+
+  test_classTypeAlias_classAlias_with() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B = Object with A;
+class C = Object with B;
+''');
+  }
+
+  test_classTypeAlias_classAlias_with2() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class C = Object with A, B;
+class D = Object with C;
+''', [
+      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 72, 1),
+    ]);
+  }
+
+  test_classTypeAlias_mixin() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+mixin B on A {}
+class C = A with B;
+''');
+  }
+
+  test_enum_class_extends() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {}
+enum E with B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 44, 1),
+    ]);
+  }
+
+  test_enum_class_extends_Object() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends Object {}
+enum E with B {
+  v
+}
+''');
+  }
+
+  test_enum_class_with() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends Object with A {}
+enum E with B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 56, 1),
+    ]);
+  }
+
+  test_enum_classTypeAlias_with() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B = Object with A;
+enum E with B {
+  v
+}
+''');
+  }
+
+  test_enum_classTypeAlias_with2() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class C = Object with A, B;
+enum E with C {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, 62, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
new file mode 100644
index 0000000..8dd5c55
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
@@ -0,0 +1,69 @@
+// 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/error/syntactic_errors.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinInstantiateTest);
+  });
+}
+
+@reflectiveTest
+class MixinInstantiateTest extends PubPackageResolutionTest {
+  test_namedConstructor() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  M.named() {}
+}
+
+main() {
+  new M.named();
+}
+''', [
+      error(ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR, 12, 1),
+      error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 43, 1),
+    ]);
+
+    var creation = findNode.instanceCreation('M.named();');
+    var m = findElement.mixin('M');
+    assertInstanceCreation(creation, m, 'M', constructorName: 'named');
+  }
+
+  test_namedConstructor_undefined() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+
+main() {
+  new M.named();
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 27, 1),
+    ]);
+
+    var creation = findNode.instanceCreation('M.named();');
+    var m = findElement.mixin('M');
+    assertElement(creation.constructorName.type.name, m);
+  }
+
+  test_unnamedConstructor() async {
+    await assertErrorsInCode(r'''
+mixin M {}
+
+main() {
+  new M();
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_INSTANTIATE, 27, 1),
+    ]);
+
+    var creation = findNode.instanceCreation('M();');
+    var m = findElement.mixin('M');
+    assertInstanceCreation(creation, m, 'M');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_of_disallowed_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_of_disallowed_class_test.dart
index b72300b..8b32940 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_of_disallowed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_of_disallowed_class_test.dart
@@ -163,4 +163,14 @@
       error(CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, 36, 3),
     ]);
   }
+
+  test_enum_int() async {
+    await assertErrorsInCode('''
+enum E with int {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, 12, 3),
+    ]);
+  }
 }
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 47c9fd2..beb970a 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
@@ -17,6 +17,36 @@
 @reflectiveTest
 class MixinOfNonClassTest extends PubPackageResolutionTest
     with MixinOfNonClassTestCases {
+  test_enum_enum() async {
+    await assertErrorsInCode(r'''
+enum E1 { v }
+enum E2 with E1 { v }
+''', [
+      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 27, 2),
+    ]);
+  }
+
+  test_enum_topLevelVariable() async {
+    await assertErrorsInCode(r'''
+int A = 7;
+enum E with A {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 23, 1),
+    ]);
+  }
+
+  test_enum_undefined() async {
+    await assertErrorsInCode(r'''
+enum E with M {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 12, 1),
+    ]);
+  }
+
   test_Never() async {
     await assertErrorsInCode('''
 class A with Never {}
@@ -27,16 +57,7 @@
 }
 
 mixin MixinOfNonClassTestCases on PubPackageResolutionTest {
-  test_class() async {
-    await assertErrorsInCode(r'''
-int A = 7;
-class B extends Object with A {}
-''', [
-      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 39, 1),
-    ]);
-  }
-
-  test_enum() async {
+  test_class_enum() async {
     await assertErrorsInCode(r'''
 enum E { ONE }
 class A extends Object with E {}
@@ -45,19 +66,16 @@
     ]);
   }
 
-  @failingTest
-  test_non_class() async {
-    // TODO(brianwilkerson) Compare with MIXIN_WITH_NON_CLASS_SUPERCLASS.
-    // TODO(brianwilkerson) Fix the offset and length.
+  test_class_topLevelVariable() async {
     await assertErrorsInCode(r'''
-var A;
-class B extends Object mixin A {}
+int A = 7;
+class B extends Object with A {}
 ''', [
-      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 0, 0),
+      error(CompileTimeErrorCode.MIXIN_OF_NON_CLASS, 39, 1),
     ]);
   }
 
-  test_typeAlias() async {
+  test_class_typeAlias() async {
     await assertErrorsInCode(r'''
 class A {}
 int B = 7;
@@ -67,7 +85,7 @@
     ]);
   }
 
-  test_undefined() async {
+  test_class_undefined() async {
     await assertErrorsInCode(r'''
 class C with M {}
 ''', [
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart
new file mode 100644
index 0000000..4985163
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart
@@ -0,0 +1,37 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinSuperClassConstraintDeferredClassTest);
+  });
+}
+
+@reflectiveTest
+class MixinSuperClassConstraintDeferredClassTest
+    extends PubPackageResolutionTest {
+  test_error_onClause_deferredClass() async {
+    await assertErrorsInCode(r'''
+import 'dart:math' deferred as math;
+mixin M on math.Random {}
+''', [
+      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS,
+          48, 11),
+    ]);
+    var mathImport = findElement.import('dart:math');
+    var randomElement = mathImport.importedLibrary!.getType('Random')!;
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, ['Random']);
+
+    var typeRef = findNode.namedType('Random {}');
+    assertNamedType(typeRef, randomElement, 'Random',
+        expectedPrefix: mathImport.prefix);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_disallowed_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_disallowed_class_test.dart
new file mode 100644
index 0000000..20d8612
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_disallowed_class_test.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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinSuperClassConstraintDisallowedClassTest);
+  });
+}
+
+@reflectiveTest
+class MixinSuperClassConstraintDisallowedClassTest
+    extends PubPackageResolutionTest {
+  test_dartCoreEnum() async {
+    await assertNoErrorsInCode(r'''
+mixin M on Enum {}
+''');
+  }
+
+  test_dartCoreEnum_language216() async {
+    await assertErrorsInCode(r'''
+// @dart = 2.16
+mixin M on Enum {}
+''', [
+      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
+          27, 4),
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, ['Enum']);
+
+    var typeRef = findNode.namedType('Enum {}');
+    assertNamedType(
+      typeRef,
+      findElement.importFind('dart:core').class_('Enum'),
+      'Enum',
+    );
+  }
+
+  test_int() async {
+    await assertErrorsInCode(r'''
+mixin M on int {}
+''', [
+      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
+          11, 3),
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, ['int']);
+
+    var typeRef = findNode.namedType('int {}');
+    assertNamedType(typeRef, intElement, 'int');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
index 08db55e..282e9eb 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_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/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -16,6 +17,37 @@
 @reflectiveTest
 class MixinSuperClassConstraintNonInterfaceTest
     extends PubPackageResolutionTest {
+  test_dynamic() async {
+    await assertErrorsInCode(r'''
+mixin M on dynamic {}
+''', [
+      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE, 11,
+          7),
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, ['Object']);
+
+    var typeRef = findNode.namedType('dynamic {}');
+    assertNamedType(typeRef, dynamicElement, 'dynamic');
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E { v }
+mixin M on E {}
+''', [
+      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE, 24,
+          1),
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, ['Object']);
+
+    var typeRef = findNode.namedType('E {}');
+    assertNamedType(typeRef, findElement.enum_('E'), 'E');
+  }
+
   test_Never() async {
     await assertErrorsInCode('''
 mixin M on Never {}
@@ -24,4 +56,20 @@
           5),
     ]);
   }
+
+  test_void() async {
+    await assertErrorsInCode(r'''
+mixin M on void {}
+''', [
+      error(ParserErrorCode.EXPECTED_TYPE_NAME, 11, 4),
+      error(CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE, 11,
+          4),
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, ['Object']);
+
+    var typeRef = findNode.namedType('void {}');
+    assertNamedType(typeRef, null, 'void');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/multiple_redirecting_constructor_invocations_test.dart b/pkg/analyzer/test/src/diagnostics/multiple_redirecting_constructor_invocations_test.dart
index 293caf5..7bc51a3 100644
--- a/pkg/analyzer/test/src/diagnostics/multiple_redirecting_constructor_invocations_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/multiple_redirecting_constructor_invocations_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class MultipleRedirectingConstructorInvocationsTest
     extends PubPackageResolutionTest {
-  test_twoNamedConstructorInvocations() async {
+  test_class_twoNamed() async {
     await assertErrorsInCode(r'''
 class A {
   A() : this.a(), this.b();
@@ -28,4 +28,18 @@
           28, 8),
     ]);
   }
+
+  test_enum_twoNamed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E() : this.foo(), this.bar();
+  const E.foo();
+  const E.bar();
+}
+''', [
+      error(CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS,
+          40, 10),
+    ]);
+  }
 }
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 a94e1c1..1d80a8d 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
@@ -10,95 +10,13 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NoDefaultSuperConstructorTest);
-    defineReflectiveTests(NoDefaultSuperConstructorWithNullSafetyTest);
+    defineReflectiveTests(NoDefaultSuperConstructorWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class NoDefaultSuperConstructorTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, NoDefaultSuperConstructorTestCases {
-  test_super_requiredPositional_subclass_explicit() async {
-    await assertErrorsInCode(r'''
-class A {
-  A(p);
-}
-class B extends A {
-  B();
-}
-''', [
-      error(CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, 42, 1),
-    ]);
-  }
-}
-
-mixin NoDefaultSuperConstructorTestCases on PubPackageResolutionTest {
-  test_super_implicit_subclass_explicit() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-class B extends A {
-  B();
-}
-''');
-  }
-
-  test_super_implicit_subclass_implicit() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-class B extends A {}
-''');
-  }
-
-  test_super_noParameters() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  A();
-}
-class B extends A {
-  B();
-}
-''');
-  }
-
-  test_super_requiredPositional_subclass_explicit_language214() async {
-    await assertErrorsInCode(r'''
-// @dart = 2.14
-class A {
-  A(p);
-}
-class B extends A {
-  B();
-}
-''', [
-      error(CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, 58, 1),
-    ]);
-  }
-
-  test_super_requiredPositional_subclass_external() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  A(p);
-}
-class B extends A {
-  external B();
-}
-''');
-  }
-
-  test_super_requiredPositional_subclass_implicit() async {
-    await assertErrorsInCode(r'''
-class A {
-  A(p);
-}
-class B extends A {}
-''', [
-      error(CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, 26, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
-class NoDefaultSuperConstructorWithNullSafetyTest
-    extends PubPackageResolutionTest with NoDefaultSuperConstructorTestCases {
+    with NoDefaultSuperConstructorTestCases {
   test_super_optionalNamed_subclass_explicit() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -200,11 +118,8 @@
   B();
 }
 ''', [
-      error(
-          CompileTimeErrorCode
-              .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT,
-          58,
-          1),
+      error(CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS,
+          58, 1),
     ]);
   }
 
@@ -239,11 +154,8 @@
   B({required super.a});
 }
 ''', [
-      error(
-          CompileTimeErrorCode
-              .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_MISSING_REQUIRED_ARGUMENT,
-          75,
-          1),
+      error(CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS,
+          75, 1),
     ]);
   }
 
@@ -278,11 +190,8 @@
   B();
 }
 ''', [
-      error(
-          CompileTimeErrorCode
-              .IMPLICIT_UNNAMED_SUPER_CONSTRUCTOR_INVOCATION_NOT_ENOUGH_POSITIONAL_ARGUMENTS,
-          42,
-          1),
+      error(CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS,
+          42, 1),
     ]);
   }
 
@@ -319,3 +228,86 @@
 ''');
   }
 }
+
+mixin NoDefaultSuperConstructorTestCases on PubPackageResolutionTest {
+  test_super_implicit_subclass_explicit() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends A {
+  B();
+}
+''');
+  }
+
+  test_super_implicit_subclass_implicit() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends A {}
+''');
+  }
+
+  test_super_noParameters() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  A();
+}
+class B extends A {
+  B();
+}
+''');
+  }
+
+  test_super_requiredPositional_subclass_explicit_language214() async {
+    await assertErrorsInCode(r'''
+// @dart = 2.14
+class A {
+  A(p);
+}
+class B extends A {
+  B();
+}
+''', [
+      error(CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, 58, 1),
+    ]);
+  }
+
+  test_super_requiredPositional_subclass_external() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  A(p);
+}
+class B extends A {
+  external B();
+}
+''');
+  }
+
+  test_super_requiredPositional_subclass_implicit() async {
+    await assertErrorsInCode(r'''
+class A {
+  A(p);
+}
+class B extends A {}
+''', [
+      error(CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, 26, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class NoDefaultSuperConstructorWithoutNullSafetyTest
+    extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, NoDefaultSuperConstructorTestCases {
+  test_super_requiredPositional_subclass_explicit() async {
+    await assertErrorsInCode(r'''
+class A {
+  A(p);
+}
+class B extends A {
+  B();
+}
+''', [
+      error(CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, 42, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
index 92d76ac..028a5c4 100644
--- a/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
@@ -9,18 +9,287 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(NonAbstractClassInheritsAbstractMemberTest);
     defineReflectiveTests(
-        NonAbstractClassInheritsAbstractMemberWithNullSafetyTest);
+      NonAbstractClassInheritsAbstractMemberTest,
+    );
+    defineReflectiveTests(
+      NonAbstractClassInheritsAbstractMemberWithoutNullSafetyTest,
+    );
   });
 }
 
 @reflectiveTest
 class NonAbstractClassInheritsAbstractMemberTest
     extends PubPackageResolutionTest
-    with
-        WithoutNullSafetyMixin,
-        NonAbstractClassInheritsAbstractMemberTestCases {}
+    with NonAbstractClassInheritsAbstractMemberTestCases {
+  test_abstract_field_final_implement_getter() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract final int x;
+}
+class B implements A {
+  int get x => 0;
+}
+''');
+  }
+
+  test_abstract_field_final_implement_none() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract final int x;
+}
+class B implements A {}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          51,
+          1),
+    ]);
+  }
+
+  test_abstract_field_implement_getter() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+class B implements A {
+  int get x => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          45,
+          1),
+    ]);
+  }
+
+  test_abstract_field_implement_getter_and_setter() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+class B implements A {
+  int get x => 0;
+  void set x(int value) {}
+}
+''');
+  }
+
+  test_abstract_field_implement_none() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+class B implements A {}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
+          45,
+          1),
+    ]);
+  }
+
+  test_abstract_field_implement_setter() async {
+    await assertErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+class B implements A {
+  void set x(int value) {}
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          45,
+          1),
+    ]);
+  }
+
+  test_enum_getter_fromInterface() async {
+    await assertErrorsInCode('''
+class A {
+  int get foo => 0;
+}
+
+enum E implements A {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          38,
+          1),
+    ]);
+  }
+
+  test_enum_getter_fromMixin() async {
+    await assertErrorsInCode('''
+mixin M {
+  int get foo;
+}
+
+enum E with M {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          33,
+          1),
+    ]);
+  }
+
+  test_enum_method_fromInterface() async {
+    await assertErrorsInCode('''
+class A {
+  void foo() {}
+}
+
+enum E implements A {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          34,
+          1),
+    ]);
+  }
+
+  test_enum_method_fromMixin() async {
+    await assertErrorsInCode('''
+mixin M {
+  void foo();
+}
+
+enum E with M {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          32,
+          1),
+    ]);
+  }
+
+  test_enum_setter_fromInterface() async {
+    await assertErrorsInCode('''
+class A {
+  set foo(int _) {}
+}
+
+enum E implements A {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          38,
+          1),
+    ]);
+  }
+
+  test_enum_setter_fromMixin() async {
+    await assertErrorsInCode('''
+mixin M {
+  set foo(int _);
+}
+
+enum E with M {
+  v;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          36,
+          1),
+    ]);
+  }
+
+  test_external_field_final_implement_getter() async {
+    await assertNoErrorsInCode('''
+class A {
+  external final int x;
+}
+class B implements A {
+  int get x => 0;
+}
+''');
+  }
+
+  test_external_field_final_implement_none() async {
+    await assertErrorsInCode('''
+class A {
+  external final int x;
+}
+class B implements A {}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          42,
+          1),
+    ]);
+  }
+
+  test_external_field_implement_getter() async {
+    await assertErrorsInCode('''
+class A {
+  external int x;
+}
+class B implements A {
+  int get x => 0;
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          36,
+          1),
+    ]);
+  }
+
+  test_external_field_implement_getter_and_setter() async {
+    await assertNoErrorsInCode('''
+class A {
+  external int x;
+}
+class B implements A {
+  int get x => 0;
+  void set x(int value) {}
+}
+''');
+  }
+
+  test_external_field_implement_none() async {
+    await assertErrorsInCode('''
+class A {
+  external int x;
+}
+class B implements A {}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
+          36,
+          1),
+    ]);
+  }
+
+  test_external_field_implement_setter() async {
+    await assertErrorsInCode('''
+class A {
+  external int x;
+}
+class B implements A {
+  void set x(int value) {}
+}
+''', [
+      error(
+          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+          36,
+          1),
+    ]);
+  }
+}
 
 mixin NonAbstractClassInheritsAbstractMemberTestCases
     on PubPackageResolutionTest {
@@ -616,172 +885,8 @@
 }
 
 @reflectiveTest
-class NonAbstractClassInheritsAbstractMemberWithNullSafetyTest
+class NonAbstractClassInheritsAbstractMemberWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with NonAbstractClassInheritsAbstractMemberTestCases {
-  test_abstract_field_final_implement_getter() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract final int x;
-}
-class B implements A {
-  int get x => 0;
-}
-''');
-  }
-
-  test_abstract_field_final_implement_none() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract final int x;
-}
-class B implements A {}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-          51,
-          1),
-    ]);
-  }
-
-  test_abstract_field_implement_getter() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-class B implements A {
-  int get x => 0;
-}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-          45,
-          1),
-    ]);
-  }
-
-  test_abstract_field_implement_getter_and_setter() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-class B implements A {
-  int get x => 0;
-  void set x(int value) {}
-}
-''');
-  }
-
-  test_abstract_field_implement_none() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-class B implements A {}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
-          45,
-          1),
-    ]);
-  }
-
-  test_abstract_field_implement_setter() async {
-    await assertErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-class B implements A {
-  void set x(int value) {}
-}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-          45,
-          1),
-    ]);
-  }
-
-  test_external_field_final_implement_getter() async {
-    await assertNoErrorsInCode('''
-class A {
-  external final int x;
-}
-class B implements A {
-  int get x => 0;
-}
-''');
-  }
-
-  test_external_field_final_implement_none() async {
-    await assertErrorsInCode('''
-class A {
-  external final int x;
-}
-class B implements A {}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-          42,
-          1),
-    ]);
-  }
-
-  test_external_field_implement_getter() async {
-    await assertErrorsInCode('''
-class A {
-  external int x;
-}
-class B implements A {
-  int get x => 0;
-}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-          36,
-          1),
-    ]);
-  }
-
-  test_external_field_implement_getter_and_setter() async {
-    await assertNoErrorsInCode('''
-class A {
-  external int x;
-}
-class B implements A {
-  int get x => 0;
-  void set x(int value) {}
-}
-''');
-  }
-
-  test_external_field_implement_none() async {
-    await assertErrorsInCode('''
-class A {
-  external int x;
-}
-class B implements A {}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
-          36,
-          1),
-    ]);
-  }
-
-  test_external_field_implement_setter() async {
-    await assertErrorsInCode('''
-class A {
-  external int x;
-}
-class B implements A {
-  void set x(int value) {}
-}
-''', [
-      error(
-          CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-          36,
-          1),
-    ]);
-  }
-}
+    with
+        WithoutNullSafetyMixin,
+        NonAbstractClassInheritsAbstractMemberTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
index 3f99747..03a7c93 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
@@ -9,16 +9,84 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(NonBoolConditionTest);
+    defineReflectiveTests(NonBoolConditionWithoutNullSafetyTest);
     defineReflectiveTests(
         NonBoolConditionWithoutNullSafetyAndNoImplicitCastsTest);
-    defineReflectiveTests(NonBoolConditionWithNullSafetyTest);
+    defineReflectiveTests(NonBoolConditionTest);
     defineReflectiveTests(NonBoolConditionWithStrictCastsTest);
   });
 }
 
 @reflectiveTest
-class NonBoolConditionTest extends PubPackageResolutionTest
+class NonBoolConditionTest extends PubPackageResolutionTest {
+  test_if_null() async {
+    await assertErrorsInCode(r'''
+void f(Null a) {
+  if (a) {}
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 23, 1),
+    ]);
+  }
+
+  test_ternary_condition_null() async {
+    await assertErrorsInCode(r'''
+void f(Null a) {
+  a ? 0 : 1;
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 19, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class NonBoolConditionWithoutNullSafetyAndNoImplicitCastsTest
+    extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, WithNoImplicitCastsMixin {
+  test_map_ifElement_condition_dynamic() async {
+    await assertErrorsWithNoImplicitCasts(r'''
+void f(dynamic c) {
+  <int, int>{if (c) 0: 0};
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 37, 1),
+    ]);
+  }
+
+  test_map_ifElement_condition_object() async {
+    await assertErrorsWithNoImplicitCasts(r'''
+void f(Object c) {
+  <int, int>{if (c) 0: 0};
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 36, 1),
+    ]);
+  }
+
+  test_set_ifElement_condition_dynamic() async {
+    await assertErrorsWithNoImplicitCasts(r'''
+void f(dynamic c) {
+  <int>{if (c) 0};
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 32, 1),
+    ]);
+  }
+
+  test_set_ifElement_condition_object() async {
+    await assertErrorsWithNoImplicitCasts(r'''
+void f(Object c) {
+  <int>{if (c) 0};
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 31, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class NonBoolConditionWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_conditional() async {
     await assertErrorsInCode('''
@@ -216,74 +284,6 @@
 }
 
 @reflectiveTest
-class NonBoolConditionWithNullSafetyTest extends PubPackageResolutionTest {
-  test_if_null() async {
-    await assertErrorsInCode(r'''
-void f(Null a) {
-  if (a) {}
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 23, 1),
-    ]);
-  }
-
-  test_ternary_condition_null() async {
-    await assertErrorsInCode(r'''
-void f(Null a) {
-  a ? 0 : 1;
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 19, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
-class NonBoolConditionWithoutNullSafetyAndNoImplicitCastsTest
-    extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, WithNoImplicitCastsMixin {
-  test_map_ifElement_condition_dynamic() async {
-    await assertErrorsWithNoImplicitCasts(r'''
-void f(dynamic c) {
-  <int, int>{if (c) 0: 0};
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 37, 1),
-    ]);
-  }
-
-  test_map_ifElement_condition_object() async {
-    await assertErrorsWithNoImplicitCasts(r'''
-void f(Object c) {
-  <int, int>{if (c) 0: 0};
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 36, 1),
-    ]);
-  }
-
-  test_set_ifElement_condition_dynamic() async {
-    await assertErrorsWithNoImplicitCasts(r'''
-void f(dynamic c) {
-  <int>{if (c) 0};
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 32, 1),
-    ]);
-  }
-
-  test_set_ifElement_condition_object() async {
-    await assertErrorsWithNoImplicitCasts(r'''
-void f(Object c) {
-  <int>{if (c) 0};
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_CONDITION, 31, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
 class NonBoolConditionWithStrictCastsTest extends PubPackageResolutionTest
     with WithStrictCastsMixin {
   test_map_ifElement_condition() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
index f0578ad..6b7c2c2 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
@@ -10,14 +10,27 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NonBoolNegationExpressionTest);
-    defineReflectiveTests(NonBoolNegationExpressionWithNullSafetyTest);
+    defineReflectiveTests(NonBoolNegationExpressionWithoutNullSafetyTest);
     defineReflectiveTests(NonBoolNegationExpressionWithStrictCastsTest);
   });
 }
 
 @reflectiveTest
-class NonBoolNegationExpressionTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin {
+class NonBoolNegationExpressionTest extends PubPackageResolutionTest {
+  test_null() async {
+    await assertErrorsInCode('''
+void m(Null x) {
+  !x;
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION, 20, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class NonBoolNegationExpressionWithoutNullSafetyTest
+    extends PubPackageResolutionTest with WithoutNullSafetyMixin {
   test_nonBool() async {
     await assertErrorsInCode(r'''
 f() {
@@ -48,20 +61,6 @@
 }
 
 @reflectiveTest
-class NonBoolNegationExpressionWithNullSafetyTest
-    extends PubPackageResolutionTest {
-  test_null() async {
-    await assertErrorsInCode('''
-void m(Null x) {
-  !x;
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION, 20, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
 class NonBoolNegationExpressionWithStrictCastsTest
     extends PubPackageResolutionTest with WithStrictCastsMixin {
   test_negation() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
index 1b25120..027813b 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
@@ -10,13 +10,38 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NonBoolOperandTest);
-    defineReflectiveTests(NonBoolOperandWithNullSafetyTest);
+    defineReflectiveTests(NonBoolOperandWithoutNullSafetyTest);
     defineReflectiveTests(NonBoolOperandWithStrictCastsTest);
   });
 }
 
 @reflectiveTest
-class NonBoolOperandTest extends PubPackageResolutionTest
+class NonBoolOperandTest extends PubPackageResolutionTest {
+  test_and_null() async {
+    await assertErrorsInCode(r'''
+m() {
+  Null x;
+  if(x && true) {}
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_OPERAND, 21, 1),
+    ]);
+  }
+
+  test_or_null() async {
+    await assertErrorsInCode(r'''
+m() {
+  Null x;
+  if(x || false) {}
+}
+''', [
+      error(CompileTimeErrorCode.NON_BOOL_OPERAND, 21, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class NonBoolOperandWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_and_left() async {
     await assertErrorsInCode(r'''
@@ -88,31 +113,6 @@
 }
 
 @reflectiveTest
-class NonBoolOperandWithNullSafetyTest extends PubPackageResolutionTest {
-  test_and_null() async {
-    await assertErrorsInCode(r'''
-m() {
-  Null x;
-  if(x && true) {}
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_OPERAND, 21, 1),
-    ]);
-  }
-
-  test_or_null() async {
-    await assertErrorsInCode(r'''
-m() {
-  Null x;
-  if(x || false) {}
-}
-''', [
-      error(CompileTimeErrorCode.NON_BOOL_OPERAND, 21, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
 class NonBoolOperandWithStrictCastsTest extends PubPackageResolutionTest
     with WithStrictCastsMixin {
   test_and() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_const_generative_enum_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/non_const_generative_enum_constructor_test.dart
new file mode 100644
index 0000000..6b9eaef
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/non_const_generative_enum_constructor_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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NonConstGenerativeEnumConstructorTest);
+  });
+}
+
+@reflectiveTest
+class NonConstGenerativeEnumConstructorTest extends PubPackageResolutionTest {
+  test_generative_const() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  const E();
+}
+''');
+  }
+
+  test_generative_nonConst_named() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.named();
+  E.named();
+}
+''', [
+      error(CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR, 24, 7),
+    ]);
+  }
+
+  test_generative_nonConst_unnamed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  E();
+}
+''', [
+      error(CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR, 16, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/non_final_field_in_enum_test.dart b/pkg/analyzer/test/src/diagnostics/non_final_field_in_enum_test.dart
new file mode 100644
index 0000000..e35f6d35
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/non_final_field_in_enum_test.dart
@@ -0,0 +1,37 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NonFinalFieldInEnumTest);
+  });
+}
+
+@reflectiveTest
+class NonFinalFieldInEnumTest extends PubPackageResolutionTest {
+  test_instance_notFinal() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  int foo = 0;
+}
+''', [
+      error(CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM, 20, 3),
+    ]);
+  }
+
+  test_static_notFinal() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static int foo = 0;
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart
index dcb8a8f..78a8782 100644
--- a/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_enough_positional_arguments_test.dart
@@ -57,6 +57,30 @@
     ]);
   }
 
+  test_enumConstant_withArgumentList() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v();
+  const E(int a);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 11, 3),
+      error(CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS, 12, 2),
+    ]);
+  }
+
+  test_enumConstant_withoutArgumentList() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E(int a);
+}
+''', [
+      error(CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, 11, 1),
+      error(CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS, 11, 1),
+    ]);
+  }
+
   test_functionExpression() async {
     await assertErrorsInCode('''
 main() {
diff --git a/pkg/analyzer/test/src/diagnostics/null_safety_read_write_test.dart b/pkg/analyzer/test/src/diagnostics/null_safety_read_write_test.dart
index ef2d1d9..b4dece1 100644
--- a/pkg/analyzer/test/src/diagnostics/null_safety_read_write_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_safety_read_write_test.dart
@@ -10,12 +10,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ReadWriteWithNullSafetyTest);
+    defineReflectiveTests(ReadWriteTest);
   });
 }
 
 @reflectiveTest
-class ReadWriteWithNullSafetyTest extends PubPackageResolutionTest {
+class ReadWriteTest extends PubPackageResolutionTest {
   @override
   bool get retainDataForTesting => true;
 
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
index 21454e6..5b5ba51 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
@@ -15,27 +15,18 @@
 
 @reflectiveTest
 class OverrideOnNonOverridingFieldTest extends PubPackageResolutionTest {
-  test_inInterface() async {
+  test_class() async {
     await assertErrorsInCode(r'''
 class A {
-  int get a => 0;
-  void set b(_) {}
-  int c = 0;
+  @override
+  int? foo;
 }
-class B implements A {
-  @override
-  final int a = 1;
-  @override
-  int b = 0;
-  @override
-  int c = 0;
-}''', [
-      error(CompileTimeErrorCode.INVALID_OVERRIDE, 134, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 39, 1)]),
+''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD, 29, 3),
     ]);
   }
 
-  test_inSuperclass() async {
+  test_class_extends() async {
     await assertErrorsInCode(r'''
 class A {
   int get a => 0;
@@ -55,15 +46,71 @@
     ]);
   }
 
-  test_invalid() async {
+  test_class_implements() async {
     await assertErrorsInCode(r'''
 class A {
+  int get a => 0;
+  void set b(_) {}
+  int c = 0;
 }
-class B extends A {
+class B implements A {
   @override
-  final int m = 1;
+  final int a = 1;
+  @override
+  int b = 0;
+  @override
+  int c = 0;
 }''', [
-      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD, 56, 1),
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 134, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 39, 1)]),
     ]);
   }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  @override
+  final int foo = 0;
+}
+''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD, 38, 3),
+    ]);
+  }
+
+  test_enum_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get a => 0;
+  void set b(int _) {}
+}
+
+enum E implements A {
+  v;
+  @override
+  int get a => 0;
+
+  @override
+  void set b(int _) {}
+}
+''');
+  }
+
+  test_enum_with() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int get a => 0;
+  void set b(int _) {}
+}
+
+enum E with M {
+  v;
+  @override
+  int get a => 0;
+
+  @override
+  void set b(int _) {}
+}
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart
index 44ce6f8..edef46f 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart
@@ -15,42 +15,84 @@
 
 @reflectiveTest
 class OverrideOnNonOverridingGetterTest extends PubPackageResolutionTest {
-  test_inInterface() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int get m => 0;
-}
-class B implements A {
-  @override
-  int get m => 1;
-}''');
-  }
-
-  test_inSupertype() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int get m => 0;
-}
-class B extends A {
-  @override
-  int get m => 1;
-}''');
-  }
-
-  test_invalid_class() async {
+  test_class() async {
     await assertErrorsInCode(r'''
-class A {}
-
-class B extends A {
+class A {
   @override
-  int get foo => 1;
+  int get foo => 0;
 }
 ''', [
-      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, 54, 3),
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, 32, 3),
     ]);
   }
 
-  test_invalid_extension() async {
+  test_class_extends() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  @override
+  int get foo => 0;
+}
+''');
+  }
+
+  test_class_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+class B implements A {
+  @override
+  int get foo => 0;
+}
+''');
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  @override
+  int get foo => 0;
+}
+''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, 36, 3),
+    ]);
+  }
+
+  test_enum_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+enum E implements A {
+  v;
+  @override
+  int get foo => 0;
+}
+''');
+  }
+
+  test_enum_with() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int get foo => 0;
+}
+
+enum E with M {
+  v;
+  @override
+  int get foo => 0;
+}
+''');
+  }
+
+  test_extension() async {
     await assertErrorsInCode(r'''
 extension E on int {
   @override
@@ -61,16 +103,14 @@
     ]);
   }
 
-  test_invalid_mixin() async {
+  test_mixin() async {
     await assertErrorsInCode(r'''
-class A {}
-
-mixin M on A {
+mixin M {
   @override
-  int get foo => 1;
+  int get foo => 0;
 }
 ''', [
-      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, 49, 3),
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, 32, 3),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart
index 2d47c68..e70f549 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart
@@ -15,18 +15,56 @@
 
 @reflectiveTest
 class OverrideOnNonOverridingMethodTest extends PubPackageResolutionTest {
-  test_inInterface() async {
+  test_class() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+class B extends A {
+  @override
+  void foo() {}
+}
+''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, 51, 3),
+    ]);
+  }
+
+  test_class_extends() async {
     await assertNoErrorsInCode(r'''
 class A {
-  int m() => 1;
+  void foo() {}
 }
-class B implements A {
+
+class B extends A {
   @override
-  int m() => 1;
+  void foo() {}
 }''');
   }
 
-  test_inInterfaces() async {
+  test_class_extends_abstract() async {
+    await assertNoErrorsInCode(r'''
+abstract class A {
+  void foo();
+}
+
+class B extends A {
+  @override
+  void foo() {}
+}''');
+  }
+
+  test_class_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+class B implements A {
+  @override
+  void foo() {}
+}''');
+  }
+
+  test_class_implements2() async {
     await assertNoErrorsInCode(r'''
 abstract class I {
   void foo(int _);
@@ -42,42 +80,19 @@
 }''');
   }
 
-  test_inSuperclass() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int m() => 1;
-}
-class B extends A {
-  @override
-  int m() => 1;
-}''');
-  }
-
-  test_inSuperclass_abstract() async {
-    await assertNoErrorsInCode(r'''
-abstract class A {
-  int m();
-}
-class B extends A {
-  @override
-  int m() => 1;
-}''');
-  }
-
-  test_invalid_class() async {
+  test_enum() async {
     await assertErrorsInCode(r'''
-class A {}
-
-class B extends A {
+enum E {
+  v;
   @override
   void foo() {}
 }
 ''', [
-      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, 51, 3),
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, 33, 3),
     ]);
   }
 
-  test_invalid_extension() async {
+  test_extension() async {
     await assertErrorsInCode(r'''
 extension E on int {
   @override
@@ -88,7 +103,7 @@
     ]);
   }
 
-  test_invalid_mixin() async {
+  test_mixin() async {
     await assertErrorsInCode(r'''
 class A {}
 
@@ -100,4 +115,30 @@
       error(HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, 46, 3),
     ]);
   }
+
+  test_mixin_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+mixin M implements A {
+  @override
+  void foo() {}
+}
+''');
+  }
+
+  test_mixin_on() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void foo() {}
+}
+
+mixin M on A {
+  @override
+  void foo() {}
+}
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart
index ae370bf..b6c9e1f 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart
@@ -15,29 +15,7 @@
 
 @reflectiveTest
 class OverrideOnNonOverridingSetterTest extends PubPackageResolutionTest {
-  test_inInterface() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  set m(int x) {}
-}
-class B implements A {
-  @override
-  set m(int x) {}
-}''');
-  }
-
-  test_inSupertype() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  set m(int x) {}
-}
-class B extends A {
-  @override
-  set m(int x) {}
-}''');
-  }
-
-  test_invalid_class() async {
+  test_class() async {
     await assertErrorsInCode(r'''
 class A {}
 
@@ -50,7 +28,69 @@
     ]);
   }
 
-  test_invalid_extension() async {
+  test_class_extends() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  set m(int x) {}
+}
+class B extends A {
+  @override
+  set m(int x) {}
+}''');
+  }
+
+  test_class_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  set m(int x) {}
+}
+class B implements A {
+  @override
+  set m(int x) {}
+}''');
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  @override
+  set foo(int _) {}
+}
+''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER, 32, 3),
+    ]);
+  }
+
+  test_enum_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  set foo(int _) {}
+}
+
+enum E implements A {
+  v;
+  @override
+  set foo(int _) {}
+}
+''');
+  }
+
+  test_enum_with() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  set foo(int _) {}
+}
+
+enum E with M {
+  v;
+  @override
+  set foo(int _) {}
+}
+''');
+  }
+
+  test_extension() async {
     await assertErrorsInCode(r'''
 extension E on int {
   @override
@@ -61,7 +101,7 @@
     ]);
   }
 
-  test_invalid_mixin() async {
+  test_mixin() async {
     await assertErrorsInCode(r'''
 class A {}
 
diff --git a/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart b/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart
index 975d781..8aae0fe 100644
--- a/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart
+++ b/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart
@@ -2,16 +2,34 @@
 // for 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/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/utilities.dart';
+import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
+import 'package:test/test.dart';
 
 import '../../generated/test_support.dart';
+import '../../util/feature_sets.dart';
+import '../summary/resolved_ast_printer.dart';
 
 class ParserDiagnosticsTest {
+  /// TODO(scheglov) Enable [withCheckingLinking] everywhere.
+  void assertParsedNodeText(
+    AstNode node,
+    String expected, {
+    bool withCheckingLinking = false,
+  }) {
+    var actual = _parsedNodeText(
+      node,
+      withCheckingLinking: withCheckingLinking,
+    );
+    if (actual != expected) {
+      print(actual);
+    }
+    expect(actual, expected);
+  }
+
   ExpectedError error(
     ErrorCode code,
     int offset,
@@ -35,16 +53,27 @@
   ParseStringResult parseStringWithErrors(String content) {
     return parseString(
       content: content,
-      featureSet: FeatureSet.fromEnableFlags2(
-        sdkLanguageVersion: ExperimentStatus.currentVersion,
-        flags: [
-          Feature.enhanced_enums.enableString,
-          Feature.super_parameters.enableString,
-        ],
-      ),
+      featureSet: FeatureSets.latestWithExperiments,
       throwIfDiagnostics: false,
     );
   }
+
+  String _parsedNodeText(
+    AstNode node, {
+    required bool withCheckingLinking,
+  }) {
+    var buffer = StringBuffer();
+    node.accept(
+      ResolvedAstPrinter(
+        selfUriStr: null,
+        sink: buffer,
+        indent: '',
+        withCheckingLinking: withCheckingLinking,
+        withResolution: false,
+      ),
+    );
+    return buffer.toString();
+  }
 }
 
 extension ParseStringResultExtension on ParseStringResult {
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 4ded8b3..60dea5a 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
@@ -264,4 +264,107 @@
       error(CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION, 35, 1),
     ]);
   }
+
+  test_enum_getter_mixinAndMixin() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+mixin A {
+  int get _foo => 0;
+}
+
+mixin B {
+  int get _foo => 0;
+}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart';
+
+enum E with A, B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION, 33, 1),
+    ]);
+  }
+
+  test_enum_method_interfaceAndMixin_same() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+mixin A {
+  void _foo() {}
+}
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart';
+
+mixin B implements A {}
+enum E with B, A {
+  v
+}
+''');
+  }
+
+  test_enum_method_mixinAndMixin() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+mixin A {
+  void _foo() {}
+}
+
+mixin B {
+  void _foo() {}
+}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart';
+
+enum E with A, B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION, 33, 1),
+    ]);
+  }
+
+  test_enum_method_staticAndInstanceElement() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+mixin A {
+  static void _foo() {}
+}
+
+mixin B {
+  void _foo() {}
+}
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart';
+
+enum E with A, B {
+  v
+}
+''');
+  }
+
+  test_enum_setter_mixinAndMixin() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+mixin A {
+  set _foo(int _) {}
+}
+
+mixin B {
+  set _foo(int _) {}
+}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart';
+
+enum E with A, B {
+  v
+}
+''', [
+      error(CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION, 33, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/private_setter_test.dart b/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
index be8cabb..2768242 100644
--- a/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
@@ -42,13 +42,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertElement(
-        findNode.simple('_foo = 0'),
-        aImport.setter('_foo'),
-      );
-    }
   }
 
   test_typeLiteral_privateField_sameLibrary() async {
@@ -93,13 +86,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertElement(
-        findNode.simple('_foo = 0'),
-        aImport.setter('_foo'),
-      );
-    }
   }
 
   test_typeLiteral_privateSetter_differentLibrary_noGetter() async {
@@ -129,13 +115,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertElement(
-        findNode.simple('_foo = 0'),
-        aImport.setter('_foo'),
-      );
-    }
   }
 
   test_typeLiteral_privateSetter_sameLibrary() async {
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 a120a6f..ae6f8b6 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
@@ -26,13 +26,28 @@
       error(HintCode.DEAD_CODE, 25, 6),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('x =='),
-      element: null,
-      type: 'Never',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.binary('x =='), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: Never
+  operator: ==
+  rightOperand: 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
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: Never
+''');
   }
 
   test_binaryExpression_never_plus() async {
@@ -45,13 +60,32 @@
       error(HintCode.DEAD_CODE, 24, 8),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('x +'),
-      element: null,
-      type: 'Never',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.binary('x +'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: Never
+  operator: +
+  rightOperand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: 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: )
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: Never
+''');
   }
 
   test_binaryExpression_neverQ_eqEq() async {
@@ -61,13 +95,28 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('x =='),
-      element: objectElement.getMethod('=='),
-      type: 'bool',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.binary('x =='), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: Never?
+  operator: ==
+  rightOperand: 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
+  staticElement: dart:core::@class::Object::@method::==
+  staticInvokeType: bool Function(Object)
+  staticType: bool
+''');
   }
 
   test_binaryExpression_neverQ_plus() async {
@@ -82,13 +131,32 @@
           1),
     ]);
 
-    assertBinaryExpression(
-      findNode.binary('x +'),
-      element: null,
-      type: 'dynamic',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.binary('x +'), r'''
+BinaryExpression
+  leftOperand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: Never?
+  operator: +
+  rightOperand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: 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: )
+    staticType: int
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
   }
 
   test_conditionalExpression_falseBranch() async {
@@ -138,12 +206,20 @@
       error(HintCode.DEAD_CODE, 22, 3),
     ]);
 
-    assertIndexExpression(
-      findNode.index('x[0]'),
-      readElement: null,
-      writeElement: null,
-      type: 'Never',
-    );
+    assertResolvedNodeText(findNode.index('x[0]'), r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: Never
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: <null>
+  staticType: Never
+''');
   }
 
   test_indexExpression_never_readWrite() async {
@@ -166,15 +242,6 @@
       type: 'dynamic',
     );
 
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        findNode.index('x[0]'),
-        readElement: null,
-        writeElement: null,
-        type: 'dynamic',
-      );
-    }
-
     assertType(findNode.binary('1 + 2'), 'int');
   }
 
@@ -188,14 +255,39 @@
       error(HintCode.DEAD_CODE, 22, 11),
     ]);
 
-    assertIndexExpression(
-      findNode.index('x[0]'),
-      readElement: null,
-      writeElement: null,
-      type: 'Never',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.assignment('x[0]'), r'''
+AssignmentExpression
+  leftHandSide: IndexExpression
+    target: SimpleIdentifier
+      token: x
+      staticElement: x@13
+      staticType: Never
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: =
+  rightHandSide: 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
+  readElement: <null>
+  readType: null
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: int
+''');
   }
 
   test_indexExpression_neverQ_read() async {
@@ -208,12 +300,20 @@
           22, 1),
     ]);
 
-    assertIndexExpression(
-      findNode.index('x[0]'),
-      readElement: null,
-      writeElement: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.index('x[0]'), r'''
+IndexExpression
+  target: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: Never?
+  leftBracket: [
+  index: IntegerLiteral
+    literal: 0
+    staticType: int
+  rightBracket: ]
+  staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_indexExpression_neverQ_readWrite() async {
@@ -236,15 +336,6 @@
       type: 'dynamic',
     );
 
-    if (hasAssignmentLeftResolution) {
-      assertIndexExpression(
-        findNode.index('x[0]'),
-        readElement: null,
-        writeElement: null,
-        type: 'dynamic',
-      );
-    }
-
     assertType(findNode.binary('1 + 2'), 'int');
   }
 
@@ -258,14 +349,39 @@
           22, 1),
     ]);
 
-    assertIndexExpression(
-      findNode.index('x[0]'),
-      readElement: null,
-      writeElement: null,
-      type: 'dynamic',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.assignment('x[0]'), r'''
+AssignmentExpression
+  leftHandSide: IndexExpression
+    target: SimpleIdentifier
+      token: x
+      staticElement: x@14
+      staticType: Never?
+    leftBracket: [
+    index: IntegerLiteral
+      literal: 0
+      staticType: int
+    rightBracket: ]
+    staticElement: <null>
+    staticType: null
+  operator: =
+  rightHandSide: 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
+  readElement: <null>
+  readType: null
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: int
+''');
   }
 
   test_invocationArgument() async {
@@ -347,15 +463,20 @@
       error(HintCode.RECEIVER_OF_TYPE_NEVER, 20, 1),
     ]);
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.parameter('x'),
-      readType: 'Never',
-      writeElement: findElement.parameter('x'),
-      writeType: 'Never',
-      element: null,
-      type: 'Never',
-    );
+    assertResolvedNodeText(findNode.postfix('x++'), r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: null
+  operator: ++
+  readElement: x@13
+  readType: Never
+  writeElement: x@13
+  writeType: Never
+  staticElement: <null>
+  staticType: Never
+''');
   }
 
   test_postfixExpression_neverQ_plusPlus() async {
@@ -368,15 +489,20 @@
           22, 2),
     ]);
 
-    assertPostfixExpression(
-      findNode.postfix('x++'),
-      readElement: findElement.parameter('x'),
-      readType: 'Never?',
-      writeElement: findElement.parameter('x'),
-      writeType: 'Never?',
-      element: null,
-      type: 'Never?',
-    );
+    assertResolvedNodeText(findNode.postfix('x++'), r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: null
+  operator: ++
+  readElement: x@14
+  readType: Never?
+  writeElement: x@14
+  writeType: Never?
+  staticElement: <null>
+  staticType: Never?
+''');
   }
 
   test_prefixExpression_never_plusPlus() async {
@@ -389,15 +515,20 @@
       error(HintCode.RECEIVER_OF_TYPE_NEVER, 22, 1),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'Never',
-      writeElement: findElement.parameter('x'),
-      writeType: 'Never',
-      element: null,
-      type: 'Never',
-    );
+    assertResolvedNodeText(findNode.prefix('++x'), r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@13
+    staticType: null
+  readElement: x@13
+  readType: Never
+  writeElement: x@13
+  writeType: Never
+  staticElement: <null>
+  staticType: Never
+''');
   }
 
   test_prefixExpression_neverQ_plusPlus() async {
@@ -410,15 +541,20 @@
           21, 2),
     ]);
 
-    assertPrefixExpression(
-      findNode.prefix('++x'),
-      readElement: findElement.parameter('x'),
-      readType: 'Never?',
-      writeElement: findElement.parameter('x'),
-      writeType: 'Never?',
-      element: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.prefix('++x'), r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: x@14
+    staticType: null
+  readElement: x@14
+  readType: Never?
+  writeElement: x@14
+  writeType: Never?
+  staticElement: <null>
+  staticType: dynamic
+''');
   }
 
   test_propertyAccess_never_read() async {
@@ -567,16 +703,37 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('=='),
-      element: elementMatcher(
-        objectElement.getMethod('=='),
-        isLegacy: isLegacyLibrary,
-      ),
-      type: 'bool',
-    );
-
-    assertType(findNode.binary('1 + 2'), 'int');
+    assertResolvedNodeText(findNode.binary('=='), r'''
+BinaryExpression
+  leftOperand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: ThrowExpression
+      throwKeyword: throw
+      expression: SimpleStringLiteral
+        literal: ''
+      staticType: Never*
+    rightParenthesis: )
+    staticType: Never*
+  operator: ==
+  rightOperand: BinaryExpression
+    leftOperand: IntegerLiteral
+      literal: 1
+      staticType: int*
+    operator: +
+    rightOperand: IntegerLiteral
+      literal: 2
+      staticType: int*
+    staticElement: MethodMember
+      base: dart:core::@class::num::@method::+
+      isLegacy: true
+    staticInvokeType: num* Function(num*)*
+    staticType: int*
+  staticElement: MethodMember
+    base: dart:core::@class::Object::@method::==
+    isLegacy: true
+  staticInvokeType: bool* Function(Object*)*
+  staticType: bool*
+''');
   }
 
   test_binaryExpression_plus() async {
@@ -586,11 +743,39 @@
 }
 ''');
 
-    assertBinaryExpression(
-      findNode.binary('+ ('),
-      element: null,
-      type: 'dynamic',
-    );
+    assertResolvedNodeText(findNode.binary('+ ('), r'''
+BinaryExpression
+  leftOperand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: ThrowExpression
+      throwKeyword: throw
+      expression: SimpleStringLiteral
+        literal: ''
+      staticType: Never*
+    rightParenthesis: )
+    staticType: Never*
+  operator: +
+  rightOperand: ParenthesizedExpression
+    leftParenthesis: (
+    expression: BinaryExpression
+      leftOperand: IntegerLiteral
+        literal: 1
+        staticType: int*
+      operator: +
+      rightOperand: IntegerLiteral
+        literal: 2
+        staticType: int*
+      staticElement: MethodMember
+        base: dart:core::@class::num::@method::+
+        isLegacy: true
+      staticInvokeType: num* Function(num*)*
+      staticType: int*
+    rightParenthesis: )
+    staticType: int*
+  staticElement: <null>
+  staticInvokeType: null
+  staticType: dynamic
+''');
 
     assertType(findNode.binary('1 + 2'), 'int');
   }
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 325c407..e65cbff 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
@@ -25,6 +25,42 @@
     ]);
   }
 
+  test_enum_constant_values() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(values);
+  const E(Object a);
+}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 11, 1),
+    ]);
+  }
+
+  test_enum_constants() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v1(v2), v2(v1);
+  const E(E other);
+}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 11, 2),
+      error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 19, 2),
+    ]);
+  }
+
+  test_enum_fields() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static const x = y + 1;
+  static const y = x + 1;
+}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 29, 1),
+      error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 55, 1),
+    ]);
+  }
+
   test_field() async {
     await assertErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_extends_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_extends_test.dart
new file mode 100644
index 0000000..a3123c8
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_extends_test.dart
@@ -0,0 +1,37 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RecursiveInterfaceInheritanceExtendsTest);
+  });
+}
+
+@reflectiveTest
+class RecursiveInterfaceInheritanceExtendsTest
+    extends PubPackageResolutionTest {
+  test_class() async {
+    await assertErrorsInCode(r'''
+class A extends A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS, 6, 1),
+    ]);
+  }
+
+  test_class_abstract() async {
+    await assertErrorsInCode(r'''
+class C extends C {
+  var foo = 0;
+  bar();
+}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS, 6, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_implements_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_implements_test.dart
new file mode 100644
index 0000000..aaf824b
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_implements_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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RecursiveInterfaceInheritanceImplementsTest);
+  });
+}
+
+@reflectiveTest
+class RecursiveInterfaceInheritanceImplementsTest
+    extends PubPackageResolutionTest {
+  test_class() async {
+    await assertErrorsInCode('''
+class A implements A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS, 6,
+          1),
+    ]);
+  }
+
+  test_class_tail() async {
+    await assertErrorsInCode(r'''
+abstract class A implements A {}
+class B implements A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS, 15,
+          1),
+    ]);
+  }
+
+  test_classTypeAlias() async {
+    await assertErrorsInCode(r'''
+class A {}
+class M {}
+class B = A with M implements B;
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS, 28,
+          1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_test.dart
index 472f7914..eee8fc5 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_test.dart
@@ -15,7 +15,27 @@
 
 @reflectiveTest
 class RecursiveInterfaceInheritanceTest extends PubPackageResolutionTest {
-  test_loop() async {
+  test_class_extends() async {
+    await assertErrorsInCode(r'''
+class A extends B {}
+class B extends A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
+    ]);
+  }
+
+  test_class_extends_implements() async {
+    await assertErrorsInCode(r'''
+class A extends B {}
+class B implements A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 27, 1),
+    ]);
+  }
+
+  test_class_implements() async {
     await assertErrorsInCode('''
 class A implements B {}
 class B implements A {}
@@ -25,7 +45,7 @@
     ]);
   }
 
-  test_loop_generic() async {
+  test_class_implements_generic() async {
     await assertErrorsInCode('''
 class A<T> implements B<T> {}
 class B<T> implements A<T> {}
@@ -35,7 +55,7 @@
     ]);
   }
 
-  test_loop_generic_typeArgument() async {
+  test_class_implements_generic_typeArgument() async {
     await assertErrorsInCode('''
 class A<T> implements B<List<T>> {}
 class B<T> implements A<List<T>> {}
@@ -44,4 +64,51 @@
       error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 42, 1),
     ]);
   }
+
+  test_class_implements_tail2() async {
+    await assertErrorsInCode(r'''
+abstract class A implements B {}
+abstract class B implements A {}
+class C implements A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 15, 1),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 48, 1),
+    ]);
+  }
+
+  test_class_implements_tail3() async {
+    await assertErrorsInCode(r'''
+abstract class A implements B {}
+abstract class B implements C {}
+abstract class C implements A {}
+class D implements A {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 15, 1),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 48, 1),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 81, 1),
+    ]);
+  }
+
+  test_classTypeAlias_mixin() async {
+    await assertErrorsInCode(r'''
+class M1 = Object with M2;
+class M2 = Object with M1;
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 2),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 33, 2),
+    ]);
+  }
+
+  test_classTypeAlias_mixin_superclass() async {
+    // Make sure we don't get CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS in
+    // addition--that would just be confusing.
+    await assertErrorsInCode('''
+class C = D with M;
+class D = C with M;
+class M {}
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 26, 1),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_with_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_with_test.dart
new file mode 100644
index 0000000..b9130d5
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_with_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(RecursiveInterfaceInheritanceWithTest);
+  });
+}
+
+@reflectiveTest
+class RecursiveInterfaceInheritanceWithTest extends PubPackageResolutionTest {
+  test_classTypeAlias() async {
+    await assertErrorsInCode(r'''
+class M = Object with M;
+''', [
+      error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH, 6, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_generative_to_missing_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_generative_to_missing_constructor_test.dart
index 14a4018..75e2fc7 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_generative_to_missing_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_generative_to_missing_constructor_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class RedirectGenerativeToNonGenerativeConstructorTest
     extends PubPackageResolutionTest {
-  test_missing() async {
+  test_class_missing() async {
     await assertErrorsInCode(r'''
 class A {
   A() : this.noSuchConstructor();
@@ -26,4 +26,16 @@
           24),
     ]);
   }
+
+  test_enum_missing() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E() : this.noSuchConstructor();
+}
+''', [
+      error(CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR, 28,
+          24),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/rethrow_outside_catch_test.dart b/pkg/analyzer/test/src/diagnostics/rethrow_outside_catch_test.dart
index ee8c262..717c3a4 100644
--- a/pkg/analyzer/test/src/diagnostics/rethrow_outside_catch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/rethrow_outside_catch_test.dart
@@ -17,9 +17,37 @@
 class RethrowOutsideCatchTest extends PubPackageResolutionTest {
   test_insideCatch() async {
     await assertNoErrorsInCode(r'''
-class A {
-  void m() {
-    try {} catch (e) {rethrow;}
+void f() {
+  try {} catch (e) {
+    rethrow;
+  }
+}
+''');
+  }
+
+  test_insideCatch_insideClosure() async {
+    await assertErrorsInCode(r'''
+void f() {
+  try {} catch (e) {
+    () {
+      rethrow;
+    };
+  }
+}
+''', [
+      error(CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH, 47, 7),
+    ]);
+  }
+
+  test_insideCatch_insideClosure_insideCatch() async {
+    await assertNoErrorsInCode(r'''
+void f() {
+  try {} catch (e1) {
+    () {
+      try {} catch (e2) {
+        rethrow;
+      }
+    };
   }
 }
 ''');
@@ -27,11 +55,11 @@
 
   test_withoutCatch() async {
     await assertErrorsInCode(r'''
-f() {
+void f() {
   rethrow;
 }
 ''', [
-      error(CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH, 8, 7),
+      error(CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH, 13, 7),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
index bd97b34..b464d2c 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_do_not_store_test.dart
@@ -9,8 +9,8 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ReturnOfDoNotStoreTest);
     defineReflectiveTests(ReturnOfDoNotStoreInTestsTest);
+    defineReflectiveTests(ReturnOfDoNotStoreTest);
   });
 }
 
@@ -22,6 +22,7 @@
     writeTestPackageConfigWithMeta();
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_noHintsInTestDir() async {
     // Code that is in a test dir (the default for PubPackageResolutionTests)
     // should not trigger the hint.
@@ -58,6 +59,7 @@
     writeTestPackageConfigWithMeta();
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_returnFromClosureInFunction() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -74,6 +76,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_returnFromFunction() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -96,6 +99,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_returnFromGetter() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -117,6 +121,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_returnFromGetter_binaryExpression() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -134,6 +139,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_returnFromGetter_ternary() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
@@ -153,6 +159,7 @@
     ]);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48476')
   test_returnFromMethod() async {
     await assertErrorsInCode('''
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart b/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart
index 3ae9041..8c13030 100644
--- a/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart
@@ -101,6 +101,17 @@
     ]);
   }
 
+  test_propertyAccess_field_toplevel_generic() async {
+    await assertErrorsInCode('''
+class C<T> {
+  List<T> t = [];
+}
+var x = C.t;
+''', [
+      error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 43, 1),
+    ]);
+  }
+
   test_propertyAccess_getter() async {
     await assertErrorsInCode('''
 class A {
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_enum_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_enum_constructor_test.dart
new file mode 100644
index 0000000..6823298
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/super_in_enum_constructor_test.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:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SuperInEnumConstructorTest);
+  });
+}
+
+@reflectiveTest
+class SuperInEnumConstructorTest extends PubPackageResolutionTest {
+  test_hasRedirect() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E.named();
+  const E() : this.named(), super();
+}
+''', [
+      error(CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR, 61, 5),
+    ]);
+  }
+
+  test_one() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E() : super();
+}
+''', [
+      error(CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR, 28, 5),
+    ]);
+  }
+
+  test_two() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E() : super(), super();
+}
+''', [
+      error(CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR, 28, 5),
+      error(CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR, 37, 5),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 2529d3a..8bfc4e8 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -4,6 +4,7 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../dart/resolution/node_text_expectations.dart';
 import 'abi_specific_integer_mapping_test.dart' as abi_specific_integer_mapping;
 import 'abstract_class_member_test.dart' as abstract_class_member;
 import 'abstract_field_constructor_initializer_test.dart'
@@ -62,10 +63,18 @@
 import 'cast_to_non_type_test.dart' as cast_to_non_type;
 import 'class_instantiation_access_to_member_test.dart'
     as class_instantiation_access_to_member;
+import 'concrete_class_has_enum_superinterface_test.dart'
+    as concrete_class_has_enum_superinterface;
 import 'concrete_class_with_abstract_member_test.dart'
     as concrete_class_with_abstract_member;
+import 'conflicting_constructor_and_static_field_test.dart'
+    as conflicting_constructor_and_static_field;
+import 'conflicting_constructor_and_static_method_test.dart'
+    as conflicting_constructor_and_static_method;
+import 'conflicting_field_and_method_test.dart' as conflicting_field_and_method;
 import 'conflicting_generic_interfaces_test.dart'
     as conflicting_generic_interfaces;
+import 'conflicting_method_and_field_test.dart' as conflicting_method_and_field;
 import 'conflicting_static_and_instance_test.dart'
     as conflicting_static_and_instance;
 import 'conflicting_type_variable_and_container_test.dart'
@@ -136,6 +145,9 @@
 import 'deprecated_member_use_test.dart' as deprecated_member_use;
 import 'deprecated_mixin_function_test.dart' as deprecated_mixin_function;
 import 'division_optimization_test.dart' as division_optimization;
+import 'duplicate_constructor_default_test.dart'
+    as duplicate_constructor_default;
+import 'duplicate_constructor_name_test.dart' as duplicate_constructor_name;
 import 'duplicate_definition_test.dart' as duplicate_definition;
 import 'duplicate_field_formal_parameter_test.dart'
     as duplicate_field_formal_parameter;
@@ -147,6 +159,14 @@
 import 'duplicate_shown_name_test.dart' as duplicate_shown_name;
 import 'enum_constant_same_name_as_enclosing_test.dart'
     as enum_constant_same_name_as_enclosing;
+import 'enum_constant_with_non_const_constructor_test.dart'
+    as enum_constant_with_non_const_constructor;
+import 'enum_instantiated_to_bounds_is_not_well_bounded_test.dart'
+    as enum_instantiated_to_bounds_is_not_well_bounded;
+import 'enum_mixin_with_instance_variable_test.dart'
+    as enum_mixin_with_instance_variable;
+import 'enum_with_abstract_member_test.dart' as enum_with_abstract_member;
+import 'enum_with_name_values_test.dart' as enum_with_name_values;
 import 'equal_elements_in_const_set_test.dart' as equal_elements_in_const_set;
 import 'equal_elements_in_set_test.dart' as equal_elements_in_set;
 import 'equal_keys_in_const_map_test.dart' as equal_keys_in_const_map;
@@ -241,6 +261,16 @@
 import 'illegal_async_generator_return_type_test.dart'
     as illegal_async_generator_return_type;
 import 'illegal_async_return_type_test.dart' as illegal_async_return_type;
+import 'illegal_concrete_enum_member_declaration_test.dart'
+    as illegal_concrete_enum_member_declaration;
+import 'illegal_concrete_enum_member_inheritance_test.dart'
+    as illegal_concrete_enum_member_inheritance;
+import 'illegal_enum_values_declaration_test.dart'
+    as illegal_enum_values_declaration;
+import 'illegal_enum_values_inheritance_test.dart'
+    as illegal_enum_values_inheritance;
+import 'illegal_language_version_override_test.dart'
+    as illegal_language_version_override;
 import 'illegal_sync_generator_return_type_test.dart'
     as illegal_sync_generator_return_type;
 import 'implements_deferred_class_test.dart' as implements_deferred_class;
@@ -341,6 +371,8 @@
 import 'invalid_override_of_non_virtual_member_test.dart'
     as invalid_override_of_non_virtual_member;
 import 'invalid_override_test.dart' as invalid_override;
+import 'invalid_reference_to_generative_enum_constructor_test.dart'
+    as invalid_reference_to_generative_enum_constructor;
 import 'invalid_reference_to_this_test.dart' as invalid_reference_to_this;
 import 'invalid_required_named_param_test.dart' as invalid_required_named_param;
 import 'invalid_required_optional_positional_param_test.dart'
@@ -413,6 +445,10 @@
 import 'missing_return_test.dart' as missing_return;
 import 'missing_size_annotation_carray_test.dart'
     as missing_size_annotation_carray;
+import 'mixin_application_concrete_super_invoked_member_type_test.dart'
+    as mixin_application_concrete_super_invoked_member_type;
+import 'mixin_application_no_concrete_super_invoked_member_test.dart'
+    as mixin_application_no_concrete_super_invoked_member;
 import 'mixin_application_not_implemented_interface_test.dart'
     as mixin_application_not_implemented_interface;
 import 'mixin_class_declares_constructor_test.dart'
@@ -423,6 +459,7 @@
     as mixin_inference_no_possible_substitution;
 import 'mixin_inherits_from_not_object_test.dart'
     as mixin_inherits_from_not_object;
+import 'mixin_instantiate_test.dart' as mixin_instantiate_test;
 import 'mixin_of_disallowed_class_test.dart' as mixin_of_disallowed_class;
 import 'mixin_of_non_class_test.dart' as mixin_of_non_class;
 import 'mixin_of_type_alias_expands_to_type_parameter_test.dart'
@@ -430,6 +467,10 @@
 import 'mixin_on_sealed_class_test.dart' as mixin_on_sealed_class;
 import 'mixin_on_type_alias_expands_to_type_parameter_test.dart'
     as mixin_on_type_alias_expands_to_type_parameter;
+import 'mixin_super_class_constraint_deferred_class_test.dart'
+    as mixin_super_class_constraint_deferred_class;
+import 'mixin_super_class_constraint_disallowed_class_test.dart'
+    as mixin_super_class_constraint_disallowed_class;
 import 'mixin_super_class_constraint_non_interface_test.dart'
     as mixin_super_class_constraint_non_interface;
 import 'mixin_with_non_class_superclass_test.dart'
@@ -464,6 +505,8 @@
 import 'non_bool_operand_test.dart' as non_bool_operand;
 import 'non_const_call_to_literal_constructor_test.dart'
     as non_const_call_to_literal_constructor;
+import 'non_const_generative_enum_constructor_test.dart'
+    as non_const_generative_enum_constructor;
 import 'non_const_map_as_expression_statement_test.dart'
     as non_const_map_as_expression_statement;
 import 'non_constant_annotation_constructor_test.dart'
@@ -486,6 +529,7 @@
 import 'non_constant_map_value_test.dart' as non_constant_map_value;
 import 'non_constant_set_element_test.dart' as non_constant_set_element;
 import 'non_constant_type_argument_test.dart' as non_constant_type_argument;
+import 'non_final_field_in_enum_test.dart' as non_final_field_in_enum;
 import 'non_generative_constructor_test.dart' as non_generative_constructor;
 import 'non_generative_implicit_constructor_test.dart'
     as non_generative_implicit_constructor;
@@ -564,8 +608,14 @@
 import 'recursive_constructor_redirect_test.dart'
     as recursive_constructor_redirect;
 import 'recursive_factory_redirect_test.dart' as recursive_factory_redirect;
+import 'recursive_interface_inheritance_extends_test.dart'
+    as recursive_interface_inheritance_extends;
+import 'recursive_interface_inheritance_implements_test.dart'
+    as recursive_interface_inheritance_implements;
 import 'recursive_interface_inheritance_test.dart'
     as recursive_interface_inheritance;
+import 'recursive_interface_inheritance_with_test.dart'
+    as recursive_interface_inheritance_with;
 import 'redirect_generative_to_missing_constructor_test.dart'
     as redirect_generative_to_missing_constructor;
 import 'redirect_generative_to_non_generative_constructor_test.dart'
@@ -634,6 +684,7 @@
     as super_formal_parameter_without_associated_named;
 import 'super_formal_parameter_without_associated_positional_test.dart'
     as super_formal_parameter_without_associated_positional;
+import 'super_in_enum_constructor_test.dart' as super_in_enum_constructor;
 import 'super_in_extension_test.dart' as super_in_extension;
 import 'super_in_invalid_context_test.dart' as super_in_invalid_context;
 import 'super_in_redirecting_constructor_test.dart'
@@ -674,6 +725,10 @@
 import 'undefined_constructor_in_initializer_test.dart'
     as undefined_constructor_in_initializer;
 import 'undefined_enum_constant_test.dart' as undefined_enum_constant;
+import 'undefined_enum_constructor_named_test.dart'
+    as undefined_enum_constructor_named;
+import 'undefined_enum_constructor_unnamed_test.dart'
+    as undefined_enum_constructor_unnamed;
 import 'undefined_extension_getter_test.dart' as undefined_extension_getter;
 import 'undefined_extension_method_test.dart' as undefined_extension_method;
 import 'undefined_extension_operator_test.dart' as undefined_extension_operator;
@@ -690,6 +745,10 @@
     as undefined_referenced_parameter;
 import 'undefined_setter_test.dart' as undefined_setter;
 import 'undefined_shown_name_test.dart' as undefined_shown_name;
+import 'undefined_super_getter_test.dart' as undefined_super_getter;
+import 'undefined_super_method_test.dart' as undefined_super_method;
+import 'undefined_super_operator_test.dart' as undefined_super_operator;
+import 'undefined_super_setter_test.dart' as undefined_super_setter;
 import 'unignorable_ignore_test.dart' as unignorable_ignore;
 import 'unnecessary_cast_test.dart' as unnecessary_cast;
 import 'unnecessary_ignore_test.dart' as unnecessary_ignore;
@@ -718,12 +777,15 @@
 import 'use_of_native_extension_test.dart' as use_of_native_extension;
 import 'use_of_nullable_value_test.dart' as use_of_nullable_value_test;
 import 'use_of_void_result_test.dart' as use_of_void_result;
+import 'values_declaration_in_enum_test.dart' as values_declaration_in_enum;
 import 'variable_type_mismatch_test.dart' as variable_type_mismatch;
 import 'void_with_type_arguments_test.dart' as void_with_type_arguments_test;
 import 'wrong_number_of_parameters_for_operator_test.dart'
     as wrong_number_of_parameters_for_operator;
 import 'wrong_number_of_parameters_for_setter_test.dart'
     as wrong_number_of_parameters_for_setter;
+import 'wrong_number_of_type_arguments_enum_test.dart'
+    as wrong_number_of_type_arguments_enum;
 import 'wrong_number_of_type_arguments_extension_test.dart'
     as wrong_number_of_type_arguments_extension;
 import 'wrong_number_of_type_arguments_test.dart'
@@ -778,8 +840,13 @@
     case_expression_type_is_not_switch_expression_subtype.main();
     cast_to_non_type.main();
     class_instantiation_access_to_member.main();
+    concrete_class_has_enum_superinterface.main();
     concrete_class_with_abstract_member.main();
+    conflicting_constructor_and_static_field.main();
+    conflicting_constructor_and_static_method.main();
+    conflicting_field_and_method.main();
     conflicting_generic_interfaces.main();
+    conflicting_method_and_field.main();
     conflicting_static_and_instance.main();
     conflicting_type_variable_and_container.main();
     conflicting_type_variable_and_member.main();
@@ -826,6 +893,8 @@
     deprecated_member_use.main();
     deprecated_mixin_function.main();
     division_optimization.main();
+    duplicate_constructor_default.main();
+    duplicate_constructor_name.main();
     duplicate_definition.main();
     duplicate_field_formal_parameter.main();
     duplicate_hidden_name.main();
@@ -835,6 +904,11 @@
     duplicate_part.main();
     duplicate_shown_name.main();
     enum_constant_same_name_as_enclosing.main();
+    enum_constant_with_non_const_constructor.main();
+    enum_instantiated_to_bounds_is_not_well_bounded.main();
+    enum_mixin_with_instance_variable.main();
+    enum_with_abstract_member.main();
+    enum_with_name_values.main();
     equal_elements_in_const_set.main();
     equal_elements_in_set.main();
     equal_keys_in_const_map.main();
@@ -895,6 +969,11 @@
     if_element_condition_from_deferred_library.main();
     illegal_async_generator_return_type.main();
     illegal_async_return_type.main();
+    illegal_concrete_enum_member_declaration.main();
+    illegal_concrete_enum_member_inheritance.main();
+    illegal_enum_values_declaration.main();
+    illegal_enum_values_inheritance.main();
+    illegal_language_version_override.main();
     illegal_sync_generator_return_type.main();
     implements_deferred_class.main();
     implements_disallowed_class.main();
@@ -961,6 +1040,7 @@
     invalid_override_different_default_values_positional.main();
     invalid_override_of_non_virtual_member.main();
     invalid_override.main();
+    invalid_reference_to_generative_enum_constructor.main();
     invalid_reference_to_this.main();
     invalid_required_named_param.main();
     invalid_required_optional_positional_param.main();
@@ -1005,17 +1085,22 @@
     missing_required_param.main();
     missing_return.main();
     missing_size_annotation_carray.main();
+    mixin_application_concrete_super_invoked_member_type.main();
+    mixin_application_no_concrete_super_invoked_member.main();
     mixin_application_not_implemented_interface.main();
     mixin_class_declares_constructor.main();
     mixin_declares_constructor.main();
     mixin_deferred_class.main();
     mixin_inference_no_possible_substitution.main();
     mixin_inherits_from_not_object.main();
+    mixin_instantiate_test.main();
     mixin_of_disallowed_class.main();
     mixin_of_non_class.main();
     mixin_of_type_alias_expands_to_type_parameter.main();
     mixin_on_sealed_class.main();
     mixin_on_type_alias_expands_to_type_parameter.main();
+    mixin_super_class_constraint_deferred_class.main();
+    mixin_super_class_constraint_disallowed_class.main();
     mixin_super_class_constraint_non_interface.main();
     mixin_with_non_class_superclass.main();
     mixins_super_class.main();
@@ -1039,6 +1124,7 @@
     non_bool_negation_expression.main();
     non_bool_operand.main();
     non_const_call_to_literal_constructor.main();
+    non_const_generative_enum_constructor.main();
     non_const_map_as_expression_statement.main();
     non_constant_annotation_constructor.main();
     non_constant_list_element.main();
@@ -1054,6 +1140,7 @@
     non_constant_map_value_from_deferred_library.main();
     non_constant_set_element.main();
     non_constant_type_argument.main();
+    non_final_field_in_enum.main();
     non_generative_constructor.main();
     non_generative_implicit_constructor.main();
     non_native_function_type_argument_to_pointer.main();
@@ -1108,7 +1195,10 @@
     recursive_compile_time_constant.main();
     recursive_constructor_redirect.main();
     recursive_factory_redirect.main();
+    recursive_interface_inheritance_extends.main();
+    recursive_interface_inheritance_implements.main();
     recursive_interface_inheritance.main();
+    recursive_interface_inheritance_with.main();
     redirect_generative_to_missing_constructor.main();
     redirect_generative_to_non_generative_constructor.main();
     redirect_to_abstract_class_constructor.main();
@@ -1151,6 +1241,7 @@
     super_formal_parameter_type_is_not_subtype_of_associated.main();
     super_formal_parameter_without_associated_named.main();
     super_formal_parameter_without_associated_positional.main();
+    super_in_enum_constructor.main();
     super_in_extension.main();
     super_in_invalid_context.main();
     super_in_redirecting_constructor.main();
@@ -1179,6 +1270,8 @@
     undefined_constructor_in_initializer_default.main();
     undefined_constructor_in_initializer.main();
     undefined_enum_constant.main();
+    undefined_enum_constructor_named.main();
+    undefined_enum_constructor_unnamed.main();
     undefined_extension_getter.main();
     undefined_extension_method.main();
     undefined_extension_operator.main();
@@ -1194,6 +1287,10 @@
     undefined_referenced_parameter.main();
     undefined_setter.main();
     undefined_shown_name.main();
+    undefined_super_getter.main();
+    undefined_super_method.main();
+    undefined_super_operator.main();
+    undefined_super_setter.main();
     unignorable_ignore.main();
     unnecessary_import.main();
     unnecessary_cast.main();
@@ -1219,15 +1316,18 @@
     use_of_native_extension.main();
     use_of_nullable_value_test.main();
     use_of_void_result.main();
+    values_declaration_in_enum.main();
     variable_type_mismatch.main();
     void_with_type_arguments_test.main();
     wrong_number_of_parameters_for_operator.main();
     wrong_number_of_parameters_for_setter.main();
+    wrong_number_of_type_arguments_enum.main();
     wrong_number_of_type_arguments_extension.main();
     wrong_number_of_type_arguments.main();
     wrong_type_parameter_variance_in_superinterface.main();
     yield_each_in_non_generator.main();
     yield_in_non_generator.main();
     yield_of_invalid_type.main();
+    defineReflectiveTests(UpdateNodeTextExpectations);
   }, name: 'diagnostics');
 }
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 3149899..a4c3dd6 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
@@ -11,15 +11,352 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeArgumentNotMatchingBoundsTest);
     defineReflectiveTests(
-      TypeArgumentNotMatchingBoundsWithNullSafetyTest,
+      TypeArgumentNotMatchingBoundsWithoutNullSafetyTest,
     );
   });
 }
 
 @reflectiveTest
 class TypeArgumentNotMatchingBoundsTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, TypeArgumentNotMatchingBoundsTestCases {
-  test_regression_42196_Null() async {
+    with TypeArgumentNotMatchingBoundsTestCases {
+  test_enum_inferred() async {
+    await assertErrorsInCode('''
+enum E<T extends int> {
+  v('');
+  const E(T t);
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 26, 1),
+    ]);
+  }
+
+  test_enum_superBounded() async {
+    await assertNoErrorsInCode('''
+enum E<T extends E<T>> {
+  v<Never>()
+}
+''');
+  }
+
+  test_enum_withTypeArguments() async {
+    await assertErrorsInCode('''
+enum E<T extends int> {
+  v<String>()
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 28, 6),
+    ]);
+  }
+
+  test_extends_optIn_fromOptOut_Null() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A<X extends int> {}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart=2.6
+import 'a.dart';
+
+class A1<T extends Null> extends A<T> {}
+''');
+  }
+
+  test_extends_optIn_fromOptOut_otherTypeParameter() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+void foo<T extends U, U>() {
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart=2.6
+import 'a.dart';
+
+class A {}
+class B extends A {}
+
+main() {
+  foo<B, A>();
+}
+''');
+  }
+
+  test_extensionOverride_optIn_fromOptOut_Null() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+extension E<X extends int> on List<X> {
+  void m() {}
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart=2.6
+import 'a.dart';
+
+f() => E<Null>([]).m();
+''');
+  }
+
+  test_functionReference() async {
+    await assertErrorsInCode('''
+void foo<T extends num>(T a) {}
+void bar() {
+  foo<String>;
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 51, 6),
+    ]);
+  }
+
+  test_functionReference_matching() async {
+    await assertNoErrorsInCode('''
+void foo<T extends num>(T a) {}
+void bar() {
+  foo<int>;
+}
+''');
+  }
+
+  test_functionReference_regularBounded() async {
+    await assertNoErrorsInCode('''
+void foo<T>(T a) {}
+void bar() {
+  foo<String>;
+}
+''');
+  }
+
+  test_genericFunctionTypeArgument_invariant() async {
+    await assertErrorsInCode(r'''
+typedef F = T Function<T>(T);
+typedef FB<T extends F> = S Function<S extends T>(S);
+class CB<T extends F> {}
+void f(CB<FB<F>> a) {}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 119, 5,
+          contextMessages: [message('/home/test/lib/test.dart', 116, 9)]),
+    ]);
+  }
+
+  test_genericFunctionTypeArgument_regularBounded() async {
+    await assertNoErrorsInCode(r'''
+typedef F1 = T Function<T>(T);
+typedef F2 = S Function<S>(S);
+class CB<T extends F1> {}
+void f(CB<F2> a) {}
+''');
+  }
+
+  test_instanceCreation_optIn_fromOptOut_Null() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A<X extends int> {}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart=2.6
+import 'a.dart';
+
+f() => A<Null>();
+''');
+  }
+
+  test_metadata_matching() async {
+    await assertNoErrorsInCode(r'''
+class A<T extends num> {
+  const A();
+}
+
+@A<int>()
+void f() {}
+''');
+  }
+
+  test_metadata_notMatching() async {
+    await assertErrorsInCode(r'''
+class A<T extends num> {
+  const A();
+}
+
+@A<String>()
+void f() {}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 44, 6),
+    ]);
+  }
+
+  test_metadata_notMatching_viaTypeAlias() async {
+    await assertErrorsInCode(r'''
+class A<T> {
+  const A();
+}
+
+typedef B<T extends num> = A<T>;
+
+@B<String>()
+void f() {}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 66, 6),
+    ]);
+  }
+
+  test_methodInvocation_genericFunctionTypeArgument_match() async {
+    await assertNoErrorsInCode(r'''
+typedef F = void Function<T extends num>();
+void f<T extends void Function<X extends num>()>() {}
+void g() {
+  f<F>();
+}
+''');
+  }
+
+  test_methodInvocation_genericFunctionTypeArgument_mismatch() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+typedef F = void Function<T extends A>();
+void f<T extends void Function<U extends B>()>() {}
+void g() {
+  f<F>();
+}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 131, 1),
+    ]);
+  }
+
+  test_methodInvocation_optIn_fromOptOut_Null() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A {
+  void m<X extends int>() {}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart=2.6
+import 'a.dart';
+
+f() => A().m<Null>();
+''');
+  }
+
+  test_nonFunctionTypeAlias_body_typeArgument_mismatch() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class G<T extends A> {}
+typedef X = G<B>;
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 60, 1),
+    ]);
+  }
+
+  test_nonFunctionTypeAlias_body_typeArgument_regularBounded() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends A {}
+class G<T extends A> {}
+typedef X = G<B>;
+''');
+  }
+
+  test_nonFunctionTypeAlias_body_typeArgument_superBounded() async {
+    await assertNoErrorsInCode(r'''
+class A<T extends A<T>> {}
+typedef X = List<A>;
+''');
+  }
+
+  test_nonFunctionTypeAlias_interfaceType_body_mismatch() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class G<T extends A> {}
+typedef X = G<B>;
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 60, 1),
+    ]);
+  }
+
+  test_nonFunctionTypeAlias_interfaceType_body_regularBounded() async {
+    await assertNoErrorsInCode(r'''
+class A<T> {}
+typedef X<T> = A;
+''');
+  }
+
+  test_nonFunctionTypeAlias_interfaceType_body_superBounded() async {
+    await assertErrorsInCode(r'''
+class A<T extends A<T>> {}
+typedef X<T> = A;
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 42, 1,
+          contextMessages: [message('/home/test/lib/test.dart', 42, 1)]),
+    ]);
+  }
+
+  test_nonFunctionTypeAlias_interfaceType_parameter() async {
+    await assertErrorsInCode(r'''
+class A {}
+typedef X<T extends A> = Map<int, T>;
+void f(X<String> a) {}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 58, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 56, 9)]),
+    ]);
+  }
+
+  test_nonFunctionTypeAlias_interfaceType_parameter_regularBounded() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B extends A {}
+typedef X<T extends A> = Map<int, T>;
+void f(X<B> a) {}
+''');
+  }
+
+  Future<void> test_nonFunctionTypeAlias_parameter() async {
+    await assertErrorsInCode('''
+class A {}
+class B extends A {}
+class D<T> {}
+typedef Alias<T extends B> = D<T>;
+main() {
+  D d = Alias<A>();
+}
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 94, 1),
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 104, 1),
+    ]);
+  }
+
+  test_notRegularBounded_notSuperBounded_parameter_invariant() async {
+    await assertErrorsInCode(r'''
+typedef A<X> = X Function(X);
+typedef G<X extends A<X>> = void Function<Y extends X>();
+foo(G g) {}
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 92, 1,
+          contextMessages: [
+            message('/home/test/lib/test.dart', 92, 1),
+            message('/home/test/lib/test.dart', 92, 1)
+          ]),
+    ]);
+  }
+
+  test_redirectingConstructor_optIn_fromOptOut_Null() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+import 'test.dart';
+
+class A<X extends int> implements B {}
+''');
+
+    await assertNoErrorsInCode(r'''
+// @dart=2.6
+import 'a.dart';
+
+class B {
+  factory B() = A<Null>;
+}
+''');
+  }
+
+  test_regression_42196() async {
     await assertNoErrorsInCode(r'''
 typedef G<X> = Function(X);
 class A<X extends G<A<X,Y>>, Y extends X> {}
@@ -27,10 +364,75 @@
 test<X>() { print("OK"); }
 
 main() {
-  test<A<G<A<Null, Null>>, dynamic>>();
+  test<A<G<A<Never, Never>>, dynamic>>();
 }
 ''');
   }
+
+  test_regression_42196_object() async {
+    await assertNoErrorsInCode(r'''
+typedef G<X> = Function(X);
+class A<X extends G<A<X, Y>>, Y extends Never> {}
+
+test<X>() { print("OK"); }
+
+main() {
+  test<A<G<A<Never, Never>>, Object?>>();
+}
+''');
+  }
+
+  test_regression_42196_void() async {
+    await assertNoErrorsInCode(r'''
+typedef G<X> = Function(X);
+class A<X extends G<A<X, Y>>, Y extends Never> {}
+
+test<X>() { print("OK"); }
+
+main() {
+  test<A<G<A<Never, Never>>, void>>();
+}
+''');
+  }
+
+  test_superBounded() async {
+    await assertNoErrorsInCode(r'''
+class A<X extends A<X>> {}
+
+A get foo => throw 0;
+''');
+  }
+
+  test_typeLiteral_class() async {
+    await assertErrorsInCode('''
+class C<T extends int> {}
+var t = C<String>;
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 36, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 34, 9)]),
+    ]);
+  }
+
+  test_typeLiteral_functionTypeAlias() async {
+    await assertErrorsInCode('''
+typedef Cb<T extends int> = void Function();
+var t = Cb<String>;
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 56, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 53, 10)]),
+    ]);
+  }
+
+  test_typeLiteral_typeAlias() async {
+    await assertErrorsInCode('''
+class C {}
+typedef D<T extends int> = C;
+var t = D<String>;
+''', [
+      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 51, 6,
+          contextMessages: [message('/home/test/lib/test.dart', 49, 9)]),
+    ]);
+  }
 }
 
 mixin TypeArgumentNotMatchingBoundsTestCases on PubPackageResolutionTest {
@@ -428,244 +830,10 @@
 }
 
 @reflectiveTest
-class TypeArgumentNotMatchingBoundsWithNullSafetyTest
+class TypeArgumentNotMatchingBoundsWithoutNullSafetyTest
     extends PubPackageResolutionTest
-    with TypeArgumentNotMatchingBoundsTestCases {
-  test_extends_optIn_fromOptOut_Null() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class A<X extends int> {}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart=2.6
-import 'a.dart';
-
-class A1<T extends Null> extends A<T> {}
-''');
-  }
-
-  test_extends_optIn_fromOptOut_otherTypeParameter() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-void foo<T extends U, U>() {
-}
-''');
-
-    await assertNoErrorsInCode(r'''
-// @dart=2.6
-import 'a.dart';
-
-class A {}
-class B extends A {}
-
-main() {
-  foo<B, A>();
-}
-''');
-  }
-
-  test_functionReference() async {
-    await assertErrorsInCode('''
-void foo<T extends num>(T a) {}
-void bar() {
-  foo<String>;
-}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 51, 6),
-    ]);
-  }
-
-  test_functionReference_matching() async {
-    await assertNoErrorsInCode('''
-void foo<T extends num>(T a) {}
-void bar() {
-  foo<int>;
-}
-''');
-  }
-
-  test_functionReference_regularBounded() async {
-    await assertNoErrorsInCode('''
-void foo<T>(T a) {}
-void bar() {
-  foo<String>;
-}
-''');
-  }
-
-  test_genericFunctionTypeArgument_invariant() async {
-    await assertErrorsInCode(r'''
-typedef F = T Function<T>(T);
-typedef FB<T extends F> = S Function<S extends T>(S);
-class CB<T extends F> {}
-void f(CB<FB<F>> a) {}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 119, 5,
-          contextMessages: [message('/home/test/lib/test.dart', 116, 9)]),
-    ]);
-  }
-
-  test_genericFunctionTypeArgument_regularBounded() async {
-    await assertNoErrorsInCode(r'''
-typedef F1 = T Function<T>(T);
-typedef F2 = S Function<S>(S);
-class CB<T extends F1> {}
-void f(CB<F2> a) {}
-''');
-  }
-
-  test_metadata_matching() async {
-    await assertNoErrorsInCode(r'''
-class A<T extends num> {
-  const A();
-}
-
-@A<int>()
-void f() {}
-''');
-  }
-
-  test_metadata_notMatching() async {
-    await assertErrorsInCode(r'''
-class A<T extends num> {
-  const A();
-}
-
-@A<String>()
-void f() {}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 44, 6),
-    ]);
-  }
-
-  test_metadata_notMatching_viaTypeAlias() async {
-    await assertErrorsInCode(r'''
-class A<T> {
-  const A();
-}
-
-typedef B<T extends num> = A<T>;
-
-@B<String>()
-void f() {}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 66, 6),
-    ]);
-  }
-
-  test_methodInvocation_genericFunctionTypeArgument_match() async {
-    await assertNoErrorsInCode(r'''
-typedef F = void Function<T extends num>();
-void f<T extends void Function<X extends num>()>() {}
-void g() {
-  f<F>();
-}
-''');
-  }
-
-  test_methodInvocation_genericFunctionTypeArgument_mismatch() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B {}
-typedef F = void Function<T extends A>();
-void f<T extends void Function<U extends B>()>() {}
-void g() {
-  f<F>();
-}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 131, 1),
-    ]);
-  }
-
-  test_nonFunctionTypeAlias_body_typeArgument_mismatch() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B {}
-class G<T extends A> {}
-typedef X = G<B>;
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 60, 1),
-    ]);
-  }
-
-  test_nonFunctionTypeAlias_body_typeArgument_regularBounded() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-class B extends A {}
-class G<T extends A> {}
-typedef X = G<B>;
-''');
-  }
-
-  test_nonFunctionTypeAlias_body_typeArgument_superBounded() async {
-    await assertNoErrorsInCode(r'''
-class A<T extends A<T>> {}
-typedef X = List<A>;
-''');
-  }
-
-  test_nonFunctionTypeAlias_interfaceType_body_mismatch() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B {}
-class G<T extends A> {}
-typedef X = G<B>;
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 60, 1),
-    ]);
-  }
-
-  test_nonFunctionTypeAlias_interfaceType_body_regularBounded() async {
-    await assertNoErrorsInCode(r'''
-class A<T> {}
-typedef X<T> = A;
-''');
-  }
-
-  test_nonFunctionTypeAlias_interfaceType_body_superBounded() async {
-    await assertErrorsInCode(r'''
-class A<T extends A<T>> {}
-typedef X<T> = A;
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 42, 1,
-          contextMessages: [message('/home/test/lib/test.dart', 42, 1)]),
-    ]);
-  }
-
-  test_nonFunctionTypeAlias_interfaceType_parameter() async {
-    await assertErrorsInCode(r'''
-class A {}
-typedef X<T extends A> = Map<int, T>;
-void f(X<String> a) {}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 58, 6,
-          contextMessages: [message('/home/test/lib/test.dart', 56, 9)]),
-    ]);
-  }
-
-  test_nonFunctionTypeAlias_interfaceType_parameter_regularBounded() async {
-    await assertNoErrorsInCode(r'''
-class A {}
-class B extends A {}
-typedef X<T extends A> = Map<int, T>;
-void f(X<B> a) {}
-''');
-  }
-
-  test_notRegularBounded_notSuperBounded_parameter_invariant() async {
-    await assertErrorsInCode(r'''
-typedef A<X> = X Function(X);
-typedef G<X extends A<X>> = void Function<Y extends X>();
-foo(G g) {}
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 92, 1,
-          contextMessages: [
-            message('/home/test/lib/test.dart', 92, 1),
-            message('/home/test/lib/test.dart', 92, 1)
-          ]),
-    ]);
-  }
-
-  test_regression_42196() async {
+    with WithoutNullSafetyMixin, TypeArgumentNotMatchingBoundsTestCases {
+  test_regression_42196_Null() async {
     await assertNoErrorsInCode(r'''
 typedef G<X> = Function(X);
 class A<X extends G<A<X,Y>>, Y extends X> {}
@@ -673,73 +841,8 @@
 test<X>() { print("OK"); }
 
 main() {
-  test<A<G<A<Never, Never>>, dynamic>>();
+  test<A<G<A<Null, Null>>, dynamic>>();
 }
 ''');
   }
-
-  test_regression_42196_object() async {
-    await assertNoErrorsInCode(r'''
-typedef G<X> = Function(X);
-class A<X extends G<A<X, Y>>, Y extends Never> {}
-
-test<X>() { print("OK"); }
-
-main() {
-  test<A<G<A<Never, Never>>, Object?>>();
-}
-''');
-  }
-
-  test_regression_42196_void() async {
-    await assertNoErrorsInCode(r'''
-typedef G<X> = Function(X);
-class A<X extends G<A<X, Y>>, Y extends Never> {}
-
-test<X>() { print("OK"); }
-
-main() {
-  test<A<G<A<Never, Never>>, void>>();
-}
-''');
-  }
-
-  test_superBounded() async {
-    await assertNoErrorsInCode(r'''
-class A<X extends A<X>> {}
-
-A get foo => throw 0;
-''');
-  }
-
-  test_typeLiteral_class() async {
-    await assertErrorsInCode('''
-class C<T extends int> {}
-var t = C<String>;
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 36, 6,
-          contextMessages: [message('/home/test/lib/test.dart', 34, 9)]),
-    ]);
-  }
-
-  test_typeLiteral_functionTypeAlias() async {
-    await assertErrorsInCode('''
-typedef Cb<T extends int> = void Function();
-var t = Cb<String>;
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 56, 6,
-          contextMessages: [message('/home/test/lib/test.dart', 53, 10)]),
-    ]);
-  }
-
-  test_typeLiteral_typeAlias() async {
-    await assertErrorsInCode('''
-class C {}
-typedef D<T extends int> = C;
-var t = D<String>;
-''', [
-      error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 51, 6,
-          contextMessages: [message('/home/test/lib/test.dart', 49, 9)]),
-    ]);
-  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_named_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_named_test.dart
new file mode 100644
index 0000000..3531158
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_named_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedEnumConstructorNamedTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedEnumConstructorNamedTest extends PubPackageResolutionTest {
+  test_it() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.named()
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED, 13, 5),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_unnamed_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_unnamed_test.dart
new file mode 100644
index 0000000..30fac95
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_unnamed_test.dart
@@ -0,0 +1,39 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedEnumConstructorUnnamedTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedEnumConstructorUnnamedTest extends PubPackageResolutionTest {
+  test_withArguments() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v();
+  const E.named();
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED, 11, 1),
+    ]);
+  }
+
+  test_withoutArguments() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  const E.named();
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED, 11, 1),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index ae2410c..2f1bacb 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -11,13 +11,181 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedGetterTest);
-    defineReflectiveTests(UndefinedGetterWithNullSafetyTest);
+    defineReflectiveTests(UndefinedGetterWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class UndefinedGetterTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, UndefinedGetterTestCases {}
+    with UndefinedGetterTestCases {
+  test_functionAlias_typeInstantiated_getter() async {
+    await assertErrorsInCode('''
+typedef Fn<T> = void Function(T);
+
+void bar() {
+  Fn<int>.foo;
+}
+
+extension E on Type {
+  int get foo => 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER_ON_FUNCTION_TYPE, 58, 3),
+    ]);
+  }
+
+  test_functionAlias_typeInstantiated_getter_parenthesized() async {
+    await assertNoErrorsInCode('''
+typedef Fn<T> = void Function(T);
+
+void bar() {
+  (Fn<int>).foo;
+}
+
+extension E on Type {
+  int get foo => 1;
+}
+''');
+  }
+
+  test_get_from_abstract_field_final_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract final int x;
+}
+int f(A a) => a.x;
+''');
+  }
+
+  test_get_from_abstract_field_valid() async {
+    await assertNoErrorsInCode('''
+abstract class A {
+  abstract int x;
+}
+int f(A a) => a.x;
+''');
+  }
+
+  test_get_from_external_field_final_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external final int x;
+}
+int f(A a) => a.x;
+''');
+  }
+
+  test_get_from_external_field_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external int x;
+}
+int f(A a) => a.x;
+''');
+  }
+
+  test_get_from_external_static_field_final_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external static final int x;
+}
+int f() => A.x;
+''');
+  }
+
+  test_get_from_external_static_field_valid() async {
+    await assertNoErrorsInCode('''
+class A {
+  external static int x;
+}
+int f() => A.x;
+''');
+  }
+
+  test_new_cascade() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c..new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
+    ]);
+  }
+
+  test_new_dynamic() async {
+    await assertErrorsInCode('''
+f(dynamic d) {
+  d.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 19, 3),
+    ]);
+  }
+
+  test_new_expression() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c1, C c2) {
+  (c1 ?? c2).new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 3),
+    ]);
+  }
+
+  test_new_nullAware() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C? c) {
+  c?.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
+    ]);
+  }
+
+  test_new_prefixedIdentifier() async {
+    await assertErrorsInCode('''
+class C {}
+
+abstract class D {
+  C get c;
+}
+
+f(D d) {
+  d.c.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 60, 3),
+    ]);
+  }
+
+  test_new_simpleIdentifier() async {
+    await assertErrorsInCode('''
+class C {}
+
+f(C c) {
+  c.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 25, 3),
+    ]);
+  }
+
+  test_new_typeVariable() async {
+    await assertErrorsInCode('''
+f<T>(T t) {
+  t.new;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_GETTER, 16, 3),
+    ]);
+  }
+}
 
 mixin UndefinedGetterTestCases on PubPackageResolutionTest {
   test_compoundAssignment_hasSetter_instance() async {
@@ -386,173 +554,5 @@
 }
 
 @reflectiveTest
-class UndefinedGetterWithNullSafetyTest extends PubPackageResolutionTest
-    with UndefinedGetterTestCases {
-  test_functionAlias_typeInstantiated_getter() async {
-    await assertErrorsInCode('''
-typedef Fn<T> = void Function(T);
-
-void bar() {
-  Fn<int>.foo;
-}
-
-extension E on Type {
-  int get foo => 1;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER_ON_FUNCTION_TYPE, 58, 3),
-    ]);
-  }
-
-  test_functionAlias_typeInstantiated_getter_parenthesized() async {
-    await assertNoErrorsInCode('''
-typedef Fn<T> = void Function(T);
-
-void bar() {
-  (Fn<int>).foo;
-}
-
-extension E on Type {
-  int get foo => 1;
-}
-''');
-  }
-
-  test_get_from_abstract_field_final_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract final int x;
-}
-int f(A a) => a.x;
-''');
-  }
-
-  test_get_from_abstract_field_valid() async {
-    await assertNoErrorsInCode('''
-abstract class A {
-  abstract int x;
-}
-int f(A a) => a.x;
-''');
-  }
-
-  test_get_from_external_field_final_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external final int x;
-}
-int f(A a) => a.x;
-''');
-  }
-
-  test_get_from_external_field_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external int x;
-}
-int f(A a) => a.x;
-''');
-  }
-
-  test_get_from_external_static_field_final_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external static final int x;
-}
-int f() => A.x;
-''');
-  }
-
-  test_get_from_external_static_field_valid() async {
-    await assertNoErrorsInCode('''
-class A {
-  external static int x;
-}
-int f() => A.x;
-''');
-  }
-
-  test_new_cascade() async {
-    await assertErrorsInCode('''
-class C {}
-
-f(C? c) {
-  c..new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
-    ]);
-  }
-
-  test_new_dynamic() async {
-    await assertErrorsInCode('''
-f(dynamic d) {
-  d.new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 19, 3),
-    ]);
-  }
-
-  test_new_expression() async {
-    await assertErrorsInCode('''
-class C {}
-
-f(C? c1, C c2) {
-  (c1 ?? c2).new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 42, 3),
-    ]);
-  }
-
-  test_new_nullAware() async {
-    await assertErrorsInCode('''
-class C {}
-
-f(C? c) {
-  c?.new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 27, 3),
-    ]);
-  }
-
-  test_new_prefixedIdentifier() async {
-    await assertErrorsInCode('''
-class C {}
-
-abstract class D {
-  C get c;
-}
-
-f(D d) {
-  d.c.new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 60, 3),
-    ]);
-  }
-
-  test_new_simpleIdentifier() async {
-    await assertErrorsInCode('''
-class C {}
-
-f(C c) {
-  c.new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 25, 3),
-    ]);
-  }
-
-  test_new_typeVariable() async {
-    await assertErrorsInCode('''
-f<T>(T t) {
-  t.new;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_GETTER, 16, 3),
-    ]);
-  }
-}
+class UndefinedGetterWithoutNullSafetyTest extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, UndefinedGetterTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_named_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_named_parameter_test.dart
index 96bbf01..2d7020f 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_named_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_named_parameter_test.dart
@@ -41,6 +41,17 @@
     ]);
   }
 
+  test_enumConstant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v(a: 0);
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER, 13, 1),
+    ]);
+  }
+
   test_function() async {
     await assertErrorsInCode('''
 f({a, b}) {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index a577c7f..df6bcf4 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -10,140 +10,12 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UndefinedSetterTest);
-    defineReflectiveTests(UndefinedSetterWithNullSafetyTest);
+    defineReflectiveTests(UndefinedSetterWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
 class UndefinedSetterTest extends PubPackageResolutionTest
-    with WithoutNullSafetyMixin, UndefinedSetterTestCases {}
-
-mixin UndefinedSetterTestCases on PubPackageResolutionTest {
-  test_importWithPrefix_defined() async {
-    newFile('$testPackageLibPath/lib.dart', content: r'''
-library lib;
-set y(int value) {}''');
-    await assertNoErrorsInCode(r'''
-import 'lib.dart' as x;
-main() {
-  x.y = 0;
-}
-''');
-  }
-
-  test_instance_undefined() async {
-    await assertErrorsInCode(r'''
-class T {}
-f(T e1) { e1.m = 0; }
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 24, 1,
-          messageContains: ["the type 'T'"]),
-    ]);
-  }
-
-  test_instance_undefined_mixin() async {
-    await assertErrorsInCode(r'''
-mixin M {
-  f() { this.m = 0; }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 23, 1),
-    ]);
-  }
-
-  test_inSubtype() async {
-    await assertErrorsInCode(r'''
-class A {}
-class B extends A {
-  set b(x) {}
-}
-f(var a) {
-  if (a is A) {
-    a.b = 0;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 80, 1),
-    ]);
-  }
-
-  test_inType() async {
-    await assertErrorsInCode(r'''
-class A {}
-f(var a) {
-  if(a is A) {
-    a.m = 0;
-  }
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 43, 1),
-    ]);
-  }
-
-  test_static_conditionalAccess_defined() async {
-    // The conditional access operator '?.' can be used to access static
-    // fields.
-    await assertNoErrorsInCode('''
-class A {
-  static var x;
-}
-f() { A?.x = 1; }
-''');
-  }
-
-  test_static_definedInSuperclass() async {
-    await assertErrorsInCode('''
-class S {
-  static set s(int i) {}
-}
-class C extends S {}
-f(var p) {
-  f(C.s = 1);
-}''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 75, 1,
-          messageContains: ["type 'C'"]),
-    ]);
-  }
-
-  test_static_undefined() async {
-    await assertErrorsInCode(r'''
-class A {}
-f() { A.B = 0;}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 19, 1),
-    ]);
-  }
-
-  test_typeLiteral_cascadeTarget() async {
-    await assertErrorsInCode(r'''
-class T {
-  static void set foo(_) {}
-}
-main() {
-  T..foo = 42;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 54, 3),
-    ]);
-  }
-
-  test_withExtension() async {
-    await assertErrorsInCode(r'''
-class C {}
-
-extension E on C {}
-
-f(C c) {
-  c.a = 1;
-}
-''', [
-      error(CompileTimeErrorCode.UNDEFINED_SETTER, 46, 1),
-    ]);
-  }
-}
-
-@reflectiveTest
-class UndefinedSetterWithNullSafetyTest extends PubPackageResolutionTest
     with UndefinedSetterTestCases {
   test_functionAlias_typeInstantiated() async {
     await assertErrorsInCode('''
@@ -276,3 +148,131 @@
 ''');
   }
 }
+
+mixin UndefinedSetterTestCases on PubPackageResolutionTest {
+  test_importWithPrefix_defined() async {
+    newFile('$testPackageLibPath/lib.dart', content: r'''
+library lib;
+set y(int value) {}''');
+    await assertNoErrorsInCode(r'''
+import 'lib.dart' as x;
+main() {
+  x.y = 0;
+}
+''');
+  }
+
+  test_instance_undefined() async {
+    await assertErrorsInCode(r'''
+class T {}
+f(T e1) { e1.m = 0; }
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 24, 1,
+          messageContains: ["the type 'T'"]),
+    ]);
+  }
+
+  test_instance_undefined_mixin() async {
+    await assertErrorsInCode(r'''
+mixin M {
+  f() { this.m = 0; }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 23, 1),
+    ]);
+  }
+
+  test_inSubtype() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  set b(x) {}
+}
+f(var a) {
+  if (a is A) {
+    a.b = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 80, 1),
+    ]);
+  }
+
+  test_inType() async {
+    await assertErrorsInCode(r'''
+class A {}
+f(var a) {
+  if(a is A) {
+    a.m = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 43, 1),
+    ]);
+  }
+
+  test_static_conditionalAccess_defined() async {
+    // The conditional access operator '?.' can be used to access static
+    // fields.
+    await assertNoErrorsInCode('''
+class A {
+  static var x;
+}
+f() { A?.x = 1; }
+''');
+  }
+
+  test_static_definedInSuperclass() async {
+    await assertErrorsInCode('''
+class S {
+  static set s(int i) {}
+}
+class C extends S {}
+f(var p) {
+  f(C.s = 1);
+}''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 75, 1,
+          messageContains: ["type 'C'"]),
+    ]);
+  }
+
+  test_static_undefined() async {
+    await assertErrorsInCode(r'''
+class A {}
+f() { A.B = 0;}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 19, 1),
+    ]);
+  }
+
+  test_typeLiteral_cascadeTarget() async {
+    await assertErrorsInCode(r'''
+class T {
+  static void set foo(_) {}
+}
+main() {
+  T..foo = 42;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 54, 3),
+    ]);
+  }
+
+  test_withExtension() async {
+    await assertErrorsInCode(r'''
+class C {}
+
+extension E on C {}
+
+f(C c) {
+  c.a = 1;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SETTER, 46, 1),
+    ]);
+  }
+}
+
+@reflectiveTest
+class UndefinedSetterWithoutNullSafetyTest extends PubPackageResolutionTest
+    with WithoutNullSafetyMixin, UndefinedSetterTestCases {}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_super_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_super_getter_test.dart
new file mode 100644
index 0000000..c207e73
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_getter_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedSuperGetterTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedSuperGetterTest extends PubPackageResolutionTest {
+  test_class() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  get g {
+    return super.g;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 58, 1),
+    ]);
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super.foo;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 37, 3),
+    ]);
+  }
+
+  test_enum_OK() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int get foo => 0;
+}
+
+enum E with M {
+  v;
+  void f() {
+    super.foo;
+  }
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_super_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_super_method_test.dart
new file mode 100644
index 0000000..bf205ea
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_method_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/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedSuperMethodTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedSuperMethodTest extends PubPackageResolutionTest {
+  test_class() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+class B extends A {
+  void bar() {
+    super.foo();
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_METHOD, 57, 3),
+    ]);
+
+    var invocation = findNode.methodInvocation('foo()');
+    assertElementNull(invocation.methodName);
+    assertInvokeTypeDynamic(invocation);
+    assertTypeDynamic(invocation);
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super.foo();
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_METHOD, 37, 3),
+    ]);
+  }
+
+  test_enum_OK() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  void foo() {}
+}
+
+enum E with M {
+  v;
+  void f() {
+    super.foo();
+  }
+}
+''');
+  }
+
+  test_mixin() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+mixin M on A {
+  void bar() {
+    super.foo();
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_METHOD, 52, 3),
+    ]);
+
+    var invocation = findNode.methodInvocation('foo()');
+    assertElementNull(invocation.methodName);
+    assertInvokeTypeDynamic(invocation);
+    assertTypeDynamic(invocation);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_super_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_super_operator_test.dart
new file mode 100644
index 0000000..618613f
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_operator_test.dart
@@ -0,0 +1,154 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedSuperOperatorTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedSuperOperatorTest extends PubPackageResolutionTest {
+  test_class_binaryExpression() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  operator +(value) {
+    return super + value;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 1),
+    ]);
+  }
+
+  test_class_indexBoth() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  operator [](index) {
+    return super[index]++;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 7),
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 7),
+    ]);
+  }
+
+  test_class_indexGetter() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  operator [](index) {
+    return super[index + 1];
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 70, 11),
+    ]);
+  }
+
+  test_class_indexSetter() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  operator []=(index, value) {
+    super[index] = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 71, 7),
+    ]);
+  }
+
+  test_enum_binaryExpression() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super + 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 37, 1),
+    ]);
+  }
+
+  test_enum_binaryExpression_OK() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int operator +(int a) => 0;
+}
+
+enum E with M {
+  v;
+  void f() {
+    super + 0;
+  }
+}
+''');
+  }
+
+  test_enum_indexBoth() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super[0]++;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 36, 3),
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 36, 3),
+    ]);
+  }
+
+  test_enum_indexBoth_OK() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  int operator [](int index) => 0;
+  void operator []=(int index, int value) {}
+}
+
+enum E with M {
+  v;
+  void f() {
+    super[0]++;
+  }
+}
+''');
+  }
+
+  test_enum_indexGetter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super[0];
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 36, 3),
+    ]);
+  }
+
+  test_enum_indexSetter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super[0] = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR, 36, 3),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_super_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_super_setter_test.dart
new file mode 100644
index 0000000..0b29be5
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_setter_test.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 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(UndefinedSuperSetterTest);
+  });
+}
+
+@reflectiveTest
+class UndefinedSuperSetterTest extends PubPackageResolutionTest {
+  test_class() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B extends A {
+  f() {
+    super.m = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_SETTER, 49, 1),
+    ]);
+  }
+
+  test_enum() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void f() {
+    super.foo = 0;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_SETTER, 37, 3),
+    ]);
+  }
+
+  test_enum_OK() async {
+    await assertNoErrorsInCode(r'''
+mixin M {
+  set foo(int _) {}
+}
+
+enum E with M {
+  v;
+  void f() {
+    super.foo = 0;
+  }
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index fb070cc..74c8fa5 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -11,12 +11,922 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UnusedElementTest);
-    defineReflectiveTests(UnusedElementWithNullSafetyTest);
+    defineReflectiveTests(UnusedElementWithoutNullSafetyTest);
   });
 }
 
 @reflectiveTest
-class UnusedElementTest extends PubPackageResolutionTest
+class UnusedElementTest extends PubPackageResolutionTest {
+  test_class_isUsed_isExpression_expression() async {
+    await assertNoErrorsInCode('''
+class _A {}
+void f(Object p) {
+  if (_A() is int) {
+  }
+}
+''');
+  }
+
+  test_class_notUsed_isExpression_typeArgument() async {
+    await assertErrorsInCode(r'''
+class _A {}
+void f(Object p) {
+  if (p is List<_A>) {
+  }
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
+  }
+
+  test_class_notUsed_isExpression_typeInFunctionType() async {
+    await assertErrorsInCode(r'''
+class _A {}
+void f(Object p) {
+  if (p is void Function(_A)) {
+  }
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
+  }
+
+  test_class_notUsed_isExpression_typeInTypeParameter() async {
+    await assertErrorsInCode(r'''
+class _A {}
+void f(Object p) {
+  if (p is void Function<T extends _A>()) {
+  }
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
+  }
+
+  test_class_notUsed_variableDeclaration() async {
+    await assertErrorsInCode('''
+class _A {}
+void f() {
+  _A? v;
+  print(v);
+}
+print(x) {}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
+  }
+
+  test_class_notUsed_variableDeclaration_typeArgument() async {
+    await assertErrorsInCode('''
+class _A {}
+main() {
+  List<_A>? v;
+  print(v);
+}
+print(x) {}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
+  }
+
+  test_enum_constructor_parameter_optionalNamed_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(a: 0);
+  const E({int? a});
+}
+''');
+  }
+
+  test_enum_constructor_parameter_optionalNamed_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v1, v2();
+  const E({int? a});
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 37, 1),
+    ]);
+  }
+
+  test_enum_constructor_parameter_optionalPositional_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v(0);
+  const E([int? a]);
+}
+''');
+  }
+
+  test_enum_constructor_parameter_optionalPositional_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v1, v2();
+  const E([int? a]);
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 37, 1),
+    ]);
+  }
+
+  test_optionalParameter_isUsed_genericConstructor() async {
+    await assertNoErrorsInCode('''
+class C<T> {
+  C._([int? x]);
+}
+void foo() {
+  C._(7);
+}
+''');
+  }
+
+  test_optionalParameter_isUsed_genericFunction() async {
+    await assertNoErrorsInCode('''
+void _f<T>([int? x]) {}
+void foo() {
+  _f(7);
+}
+''');
+  }
+
+  test_optionalParameter_isUsed_genericMethod() async {
+    await assertNoErrorsInCode('''
+class C {
+  void _m<T>([int? x]) {}
+}
+void foo() {
+  C()._m(7);
+}
+''');
+  }
+
+  test_optionalParameter_isUsed_overrideRequiredNamed() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  void _m({required int a}) {}
+}
+class B implements A {
+  void _m({int a = 0}) {}
+}
+f() => A()._m(a: 0);
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47839')
+  test_optionalParameter_notUsed_genericConstructor() async {
+    // TODO(srawlins): Change to assertErrorsInCode when this is fixed.
+    addTestFile('''
+class C<T> {
+  C._([int? x]);
+}
+void foo() {
+  C._();
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47839')
+  test_optionalParameter_notUsed_genericFunction() async {
+    // TODO(srawlins): Change to assertErrorsInCode when this is fixed.
+    addTestFile('''
+void _f<T>([int? x]) {}
+void foo() {
+  _f();
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47839')
+  test_optionalParameter_notUsed_genericMethod() async {
+    // TODO(srawlins): Change to assertErrorsInCode when this is fixed.
+    addTestFile('''
+class C {
+  void _m<T>([int? x]) {}
+}
+void foo() {
+  C()._m();
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+  }
+
+  test_parameter_optionalNamed_fieldFormal_isUsed_constructorInvocation() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A({this.f});
+}
+f() => _A(f: 0);
+''');
+  }
+
+  test_parameter_optionalNamed_fieldFormal_isUsed_factoryRedirect() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A({this.f});
+  factory _A.named({int? f}) = _A;
+}
+f() => _A.named(f: 0);
+''');
+  }
+
+  test_parameter_optionalNamed_fieldFormal_notUsed() async {
+    await assertErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A({this.f});
+}
+f() => _A();
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
+    ]);
+  }
+
+  test_parameter_optionalNamed_fieldFormal_notUsed_factoryRedirect() async {
+    await assertErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A({this.f});
+  factory _A.named() = _A;
+}
+f() => _A.named();
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
+    ]);
+  }
+
+  test_parameter_optionalPositional_fieldFormal_isUsed_constructorInvocation() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A([this.f]);
+}
+f() => _A(0);
+''');
+  }
+
+  test_parameter_optionalPositional_fieldFormal_isUsed_factoryRedirect() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A([this.f]);
+  factory _A.named([int a]) = _A;
+}
+f() => _A.named(0);
+''');
+  }
+
+  test_parameter_optionalPositional_fieldFormal_notUsed() async {
+    await assertErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A([this.f]);
+}
+f() => _A();
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
+    ]);
+  }
+
+  test_parameter_optionalPositional_fieldFormal_notUsed_factoryRedirect() async {
+    await assertErrorsInCode(r'''
+class _A {
+  final int? f;
+  _A([this.f]);
+  factory _A.named() = _A;
+}
+f() => _A.named();
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
+    ]);
+  }
+
+  test_privateEnum_privateConstructor_isUsed_redirect() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v._foo();
+  const _E._foo() : this._bar();
+  const _E._bar();
+}
+
+void f() {
+  _E.v;
+}
+''');
+  }
+
+  test_privateEnum_privateConstructor_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v._foo();
+  const _E._foo();
+  const _E._bar();
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 52, 4),
+    ]);
+  }
+
+  test_privateEnum_privateInstanceGetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  int get _foo => 0;
+}
+
+void f() {
+  _E.v._foo;
+}
+''');
+  }
+
+  test_privateEnum_privateInstanceGetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  int get _foo => 0;
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 25, 4),
+    ]);
+  }
+
+  test_privateEnum_privateInstanceMethod_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  void _foo() {}
+}
+
+void f() {
+  _E.v._foo();
+}
+''');
+  }
+
+  test_privateEnum_privateInstanceMethod_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  void _foo() {}
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 22, 4),
+    ]);
+  }
+
+  test_privateEnum_privateInstanceMethod_optionalNamedParameter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  void _foo({int? a}) {}
+}
+
+void f() {
+  _E.v._foo(a: 0);
+}
+''');
+  }
+
+  test_privateEnum_privateInstanceMethod_optionalNamedParameter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  void _foo({int? a}) {}
+}
+
+void f() {
+  _E.v._foo();
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 33, 1),
+    ]);
+  }
+
+  test_privateEnum_privateInstanceMethod_optionalPositionalParameter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  void _foo([int? a]) {}
+}
+
+void f() {
+  _E.v._foo(0);
+}
+''');
+  }
+
+  test_privateEnum_privateInstanceMethod_optionalPositionalParameter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  void _foo([int? a]) {}
+}
+
+void f() {
+  _E.v._foo();
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT_PARAMETER, 33, 1),
+    ]);
+  }
+
+  test_privateEnum_privateInstanceSetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  set _foo(int _) {}
+}
+
+void f() {
+  _E.v._foo = 0;
+}
+''');
+  }
+
+  test_privateEnum_privateInstanceSetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  set _foo(int _) {}
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 21, 4),
+    ]);
+  }
+
+  test_privateEnum_privateStaticGetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static int get _foo => 0;
+}
+
+void f() {
+  _E.v;
+  _E._foo;
+}
+''');
+  }
+
+  test_privateEnum_privateStaticGetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static int get _foo => 0;
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 32, 4),
+    ]);
+  }
+
+  test_privateEnum_privateStaticMethod_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static void _foo() {}
+}
+
+void f() {
+  _E.v;
+  _E._foo();
+}
+''');
+  }
+
+  test_privateEnum_privateStaticMethod_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static void _foo() {}
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 29, 4),
+    ]);
+  }
+
+  test_privateEnum_privateStaticSetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static set _foo(int _) {}
+}
+
+void f() {
+  _E.v;
+  _E._foo = 0;
+}
+''');
+  }
+
+  test_privateEnum_privateStaticSetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static set _foo(int _) {}
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 28, 4),
+    ]);
+  }
+
+  test_privateEnum_publicConstructor_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v.foo();
+  const _E.foo();
+  const _E.bar();
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 50, 3),
+    ]);
+  }
+
+  test_privateEnum_publicInstanceGetter_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  int get foo => 0;
+}
+
+void f() {
+  _E.v;
+}
+''');
+  }
+
+  test_privateEnum_publicInstanceMethod_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  void foo() {}
+}
+
+void f() {
+  _E.v;
+}
+''');
+  }
+
+  test_privateEnum_publicInstanceMethod_optionalNamedParameter_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  void foo({int? a}) {}
+}
+
+void f() {
+  _E.v.foo();
+}
+''');
+  }
+
+  test_privateEnum_publicInstanceMethod_optionalPositionalParameter_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  void foo([int? a]) {}
+}
+
+void f() {
+  _E.v.foo();
+}
+''');
+  }
+
+  test_privateEnum_publicInstanceSetter_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  set foo(int _) {}
+}
+
+void f() {
+  _E.v;
+}
+''');
+  }
+
+  test_privateEnum_publicStaticGetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static int get foo => 0;
+}
+
+void f() {
+  _E.v;
+  _E.foo;
+}
+''');
+  }
+
+  test_privateEnum_publicStaticGetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static int get foo => 0;
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 32, 3),
+    ]);
+  }
+
+  test_privateEnum_publicStaticMethod_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static void foo() {}
+}
+
+void f() {
+  _E.v;
+  _E.foo();
+}
+''');
+  }
+
+  test_privateEnum_publicStaticMethod_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static void foo() {}
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 29, 3),
+    ]);
+  }
+
+  test_privateEnum_publicStaticSetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static set foo(int _) {}
+}
+
+void f() {
+  _E.v;
+  _E.foo = 0;
+}
+''');
+  }
+
+  test_privateEnum_publicStaticSetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static set foo(int _) {}
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 28, 3),
+    ]);
+  }
+
+  test_publicEnum_privateConstructor_isUsed_redirect() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v._foo();
+  const E._foo() : this._bar();
+  const E._bar();
+}
+''');
+  }
+
+  test_publicEnum_privateConstructor_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v._foo();
+  const E._foo();
+  const E._bar();
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 49, 4),
+    ]);
+  }
+
+  test_publicEnum_privateStaticGetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static int get _foo => 0;
+}
+
+void f() {
+  E._foo;
+}
+''');
+  }
+
+  test_publicEnum_privateStaticGetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int get _foo => 0;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 31, 4),
+    ]);
+  }
+
+  test_publicEnum_privateStaticMethod_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static void _foo() {}
+}
+
+void f() {
+  E._foo();
+}
+''');
+  }
+
+  test_publicEnum_privateStaticMethod_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void _foo() {}
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 28, 4),
+    ]);
+  }
+
+  test_publicEnum_privateStaticSetter_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static set _foo(int _) {}
+}
+
+void f() {
+  E._foo = 0;
+}
+''');
+  }
+
+  test_publicEnum_privateStaticSetter_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static set _foo(int _) {}
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 27, 4),
+    ]);
+  }
+
+  test_publicEnum_publicConstructor_isUsed_generic() async {
+    await assertNoErrorsInCode(r'''
+enum E<T> {
+  v1<int>.named(),
+  v2<int>.renamed();
+
+  const E.named();
+  const E.renamed() : this.named();
+}
+''');
+  }
+
+  test_publicEnum_publicConstructor_isUsed_redirect() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo() : this.bar();
+  const E.bar();
+}
+''');
+  }
+
+  test_publicEnum_publicConstructor_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v.foo();
+  const E.foo();
+  const E.bar();
+  factory E.baz() => throw 0;
+}
+''', [
+      error(HintCode.UNUSED_ELEMENT, 47, 3),
+    ]);
+  }
+
+  test_publicEnum_publicStaticGetter_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static int get foo => 0;
+}
+''');
+  }
+
+  test_publicEnum_publicStaticMethod_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static void foo() {}
+}
+''');
+  }
+
+  test_publicEnum_publicStaticSetter_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static set foo(int _) {}
+}
+''');
+  }
+
+  test_typeAlias_interfaceType_isUsed_typeName_isExpression() async {
+    await assertNoErrorsInCode(r'''
+typedef _A = List<int>;
+
+void f(a) {
+  a is _A;
+}
+''');
+  }
+
+  test_typeAlias_interfaceType_isUsed_typeName_parameter() async {
+    await assertNoErrorsInCode(r'''
+typedef _A = List<int>;
+
+void f(_A a) {}
+''');
+  }
+
+  test_typeAlias_interfaceType_isUsed_typeName_typeArgument() async {
+    await assertNoErrorsInCode(r'''
+typedef _A = List<int>;
+
+void f() {
+  Map<_A, int>();
+}
+''');
+  }
+
+  test_typeAlias_interfaceType_notUsed() async {
+    await assertErrorsInCode(r'''
+typedef _A = List<int>;
+''', [
+      error(HintCode.UNUSED_ELEMENT, 8, 2),
+    ]);
+  }
+}
+
+@reflectiveTest
+class UnusedElementWithoutNullSafetyTest extends PubPackageResolutionTest
     with WithoutNullSafetyMixin {
   test_class_isUsed_extends() async {
     await assertNoErrorsInCode(r'''
@@ -1697,292 +2607,3 @@
     ]);
   }
 }
-
-@reflectiveTest
-class UnusedElementWithNullSafetyTest extends PubPackageResolutionTest {
-  test_class_isUsed_isExpression_expression() async {
-    await assertNoErrorsInCode('''
-class _A {}
-void f(Object p) {
-  if (_A() is int) {
-  }
-}
-''');
-  }
-
-  test_class_notUsed_isExpression_typeArgument() async {
-    await assertErrorsInCode(r'''
-class _A {}
-void f(Object p) {
-  if (p is List<_A>) {
-  }
-}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 6, 2),
-    ]);
-  }
-
-  test_class_notUsed_isExpression_typeInFunctionType() async {
-    await assertErrorsInCode(r'''
-class _A {}
-void f(Object p) {
-  if (p is void Function(_A)) {
-  }
-}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 6, 2),
-    ]);
-  }
-
-  test_class_notUsed_isExpression_typeInTypeParameter() async {
-    await assertErrorsInCode(r'''
-class _A {}
-void f(Object p) {
-  if (p is void Function<T extends _A>()) {
-  }
-}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 6, 2),
-    ]);
-  }
-
-  test_class_notUsed_variableDeclaration() async {
-    await assertErrorsInCode('''
-class _A {}
-void f() {
-  _A? v;
-  print(v);
-}
-print(x) {}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 6, 2),
-    ]);
-  }
-
-  test_class_notUsed_variableDeclaration_typeArgument() async {
-    await assertErrorsInCode('''
-class _A {}
-main() {
-  List<_A>? v;
-  print(v);
-}
-print(x) {}
-''', [
-      error(HintCode.UNUSED_ELEMENT, 6, 2),
-    ]);
-  }
-
-  test_optionalParameter_isUsed_genericConstructor() async {
-    await assertNoErrorsInCode('''
-class C<T> {
-  C._([int? x]);
-}
-void foo() {
-  C._(7);
-}
-''');
-  }
-
-  test_optionalParameter_isUsed_genericFunction() async {
-    await assertNoErrorsInCode('''
-void _f<T>([int? x]) {}
-void foo() {
-  _f(7);
-}
-''');
-  }
-
-  test_optionalParameter_isUsed_genericMethod() async {
-    await assertNoErrorsInCode('''
-class C {
-  void _m<T>([int? x]) {}
-}
-void foo() {
-  C()._m(7);
-}
-''');
-  }
-
-  test_optionalParameter_isUsed_overrideRequiredNamed() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  void _m({required int a}) {}
-}
-class B implements A {
-  void _m({int a = 0}) {}
-}
-f() => A()._m(a: 0);
-''');
-  }
-
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47839')
-  test_optionalParameter_notUsed_genericConstructor() async {
-    // TODO(srawlins): Change to assertErrorsInCode when this is fixed.
-    addTestFile('''
-class C<T> {
-  C._([int? x]);
-}
-void foo() {
-  C._();
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-  }
-
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47839')
-  test_optionalParameter_notUsed_genericFunction() async {
-    // TODO(srawlins): Change to assertErrorsInCode when this is fixed.
-    addTestFile('''
-void _f<T>([int? x]) {}
-void foo() {
-  _f();
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-  }
-
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47839')
-  test_optionalParameter_notUsed_genericMethod() async {
-    // TODO(srawlins): Change to assertErrorsInCode when this is fixed.
-    addTestFile('''
-class C {
-  void _m<T>([int? x]) {}
-}
-void foo() {
-  C()._m();
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-  }
-
-  test_parameter_optionalNamed_fieldFormal_isUsed_constructorInvocation() async {
-    await assertNoErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A({this.f});
-}
-f() => _A(f: 0);
-''');
-  }
-
-  test_parameter_optionalNamed_fieldFormal_isUsed_factoryRedirect() async {
-    await assertNoErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A({this.f});
-  factory _A.named({int? f}) = _A;
-}
-f() => _A.named(f: 0);
-''');
-  }
-
-  test_parameter_optionalNamed_fieldFormal_notUsed() async {
-    await assertErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A({this.f});
-}
-f() => _A();
-''', [
-      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
-    ]);
-  }
-
-  test_parameter_optionalNamed_fieldFormal_notUsed_factoryRedirect() async {
-    await assertErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A({this.f});
-  factory _A.named() = _A;
-}
-f() => _A.named();
-''', [
-      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
-    ]);
-  }
-
-  test_parameter_optionalPositional_fieldFormal_isUsed_constructorInvocation() async {
-    await assertNoErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A([this.f]);
-}
-f() => _A(0);
-''');
-  }
-
-  test_parameter_optionalPositional_fieldFormal_isUsed_factoryRedirect() async {
-    await assertNoErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A([this.f]);
-  factory _A.named([int a]) = _A;
-}
-f() => _A.named(0);
-''');
-  }
-
-  test_parameter_optionalPositional_fieldFormal_notUsed() async {
-    await assertErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A([this.f]);
-}
-f() => _A();
-''', [
-      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
-    ]);
-  }
-
-  test_parameter_optionalPositional_fieldFormal_notUsed_factoryRedirect() async {
-    await assertErrorsInCode(r'''
-class _A {
-  final int? f;
-  _A([this.f]);
-  factory _A.named() = _A;
-}
-f() => _A.named();
-''', [
-      error(HintCode.UNUSED_ELEMENT_PARAMETER, 38, 1),
-    ]);
-  }
-
-  test_typeAlias_interfaceType_isUsed_typeName_isExpression() async {
-    await assertNoErrorsInCode(r'''
-typedef _A = List<int>;
-
-void f(a) {
-  a is _A;
-}
-''');
-  }
-
-  test_typeAlias_interfaceType_isUsed_typeName_parameter() async {
-    await assertNoErrorsInCode(r'''
-typedef _A = List<int>;
-
-void f(_A a) {}
-''');
-  }
-
-  test_typeAlias_interfaceType_isUsed_typeName_typeArgument() async {
-    await assertNoErrorsInCode(r'''
-typedef _A = List<int>;
-
-void f() {
-  Map<_A, int>();
-}
-''');
-  }
-
-  test_typeAlias_interfaceType_notUsed() async {
-    await assertErrorsInCode(r'''
-typedef _A = List<int>;
-''', [
-      error(HintCode.UNUSED_ELEMENT, 8, 2),
-    ]);
-  }
-}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
index 5896e6a..adef7a0 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
@@ -85,27 +85,6 @@
 ''');
   }
 
-  test_isUsed_privateEnum_publicValue() async {
-    await assertNoErrorsInCode(r'''
-enum _Foo {a, b}
-f() => print('${_Foo.a}${_Foo.b}');
-''');
-  }
-
-  test_isUsed_privateEnum_values() async {
-    await assertNoErrorsInCode(r'''
-enum _Foo {a}
-f() => _Foo.values;
-''');
-  }
-
-  test_isUsed_publicEnum_privateValue() async {
-    await assertNoErrorsInCode(r'''
-enum Foo {_a, _b}
-f() => print('${Foo._a}${Foo._b}');
-''');
-  }
-
   test_isUsed_publicStaticField_privateClass() async {
     await assertNoErrorsInCode(r'''
 class _A {
@@ -323,23 +302,6 @@
     ]);
   }
 
-  test_notUsed_privateEnum_publicValue() async {
-    await assertErrorsInCode(r'''
-enum _Foo {a}
-f() => _Foo;
-''', [
-      error(HintCode.UNUSED_FIELD, 11, 1),
-    ]);
-  }
-
-  test_notUsed_publicEnum_privateValue() async {
-    await assertErrorsInCode(r'''
-enum Foo {_a}
-''', [
-      error(HintCode.UNUSED_FIELD, 10, 2),
-    ]);
-  }
-
   test_notUsed_publicStaticField_privateClass() async {
     await assertErrorsInCode(r'''
 class _A {
@@ -398,4 +360,143 @@
       error(HintCode.UNUSED_FIELD, 16, 2),
     ]);
   }
+
+  test_privateEnum_publicConstant_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+}
+
+void f() {
+ _E.v;
+}
+''');
+  }
+
+  test_privateEnum_publicConstant_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+}
+
+void f() {
+  _E;
+}
+''', [
+      error(HintCode.UNUSED_FIELD, 12, 1),
+    ]);
+  }
+
+  test_privateEnum_publicInstanceField_notUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  final int foo = 0;
+}
+
+void f() {
+  _E.v;
+}
+''');
+  }
+
+  test_privateEnum_publicStaticField_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  static final int foo = 0;
+}
+
+void f() {
+  _E.v;
+  _E.foo;
+}
+''');
+  }
+
+  test_privateEnum_publicStaticField_notUsed() async {
+    await assertErrorsInCode(r'''
+enum _E {
+  v;
+  static final int foo = 0;
+}
+
+void f() {
+  _E.v;
+}
+''', [
+      error(HintCode.UNUSED_FIELD, 34, 3),
+    ]);
+  }
+
+  test_privateEnum_values_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v
+}
+
+void f() {
+  _E.values;
+}
+''');
+  }
+
+  test_privateEnum_values_isUsed_hasSetter() async {
+    await assertNoErrorsInCode(r'''
+enum _E {
+  v;
+  set foo(int _) {}
+}
+
+void f() {
+  _E.values;
+}
+''');
+  }
+
+  test_publicEnum_privateConstant_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  _v
+}
+
+void f() {
+  E._v;
+}
+''');
+  }
+
+  test_publicEnum_privateConstant_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  _v
+}
+''', [
+      error(HintCode.UNUSED_FIELD, 11, 2),
+    ]);
+  }
+
+  test_publicEnum_privateInstanceField_isUsed() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  final int _foo = 0;
+}
+
+void f() {
+  E.v._foo;
+}
+''');
+  }
+
+  test_publicEnum_privateInstanceField_notUsed() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int _foo = 0;
+}
+''', [
+      error(HintCode.UNUSED_FIELD, 26, 4),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
index 44ea839..3ef5688 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
@@ -430,13 +430,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      var assignment1 = findNode.assignment('b.a?.x = 1');
-      var assignment2 = findNode.assignment('b.a.x = 2');
-      assertType(assignment1.leftHandSide, 'int');
-      assertType(assignment2.leftHandSide, 'int');
-    }
   }
 
   test_assignment_eq_simpleIdentifier() async {
@@ -466,13 +459,6 @@
       operatorElement: null,
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      var assignment1 = findNode.assignment('x =');
-      var assignment2 = findNode.assignment('y =');
-      assertType(assignment1.leftHandSide, 'int');
-      assertType(assignment2.leftHandSide, 'int?');
-    }
   }
 
   test_assignment_plusEq_propertyAccess3() async {
@@ -522,13 +508,6 @@
       ),
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      var assignment1 = findNode.assignment('b.a.x +=');
-      var assignment2 = findNode.assignment('b.a.y +=');
-      assertType(assignment1.leftHandSide, 'int');
-      assertType(assignment2.leftHandSide, 'int?');
-    }
   }
 
   test_assignment_plusEq_propertyAccess3_short1() async {
@@ -578,13 +557,6 @@
       ),
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      var assignment1 = findNode.assignment('b.a?.x += 1');
-      var assignment2 = findNode.assignment('b.a.x += 2');
-      assertType(assignment1.leftHandSide, 'int');
-      assertType(assignment2.leftHandSide, 'int');
-    }
   }
 
   test_assignment_plusEq_simpleIdentifier() async {
@@ -597,8 +569,6 @@
       error(CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE,
           33, 2),
     ]);
-    var assignment1 = findNode.assignment('x +=');
-    var assignment2 = findNode.assignment('y +=');
 
     assertAssignment(
       findNode.assignment('x +='),
@@ -625,11 +595,6 @@
       ),
       type: 'int',
     );
-
-    if (hasAssignmentLeftResolution) {
-      assertType(assignment1.leftHandSide, 'int');
-      assertType(assignment2.leftHandSide, 'int?');
-    }
   }
 
   test_await_nonNullable() async {
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
index dfbc1a7..7048e2e 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
@@ -223,6 +223,17 @@
     ]);
   }
 
+  test_unaryNegativeVoidFunction() async {
+    await assertErrorsInCode('''
+void test(void f()) {
+  -f();
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 24, 1),
+      error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 25, 3),
+    ]);
+  }
+
   test_unaryNegativeVoidValueError() async {
     await assertErrorsInCode('''
 void main() {
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
new file mode 100644
index 0000000..3deb2aa
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
@@ -0,0 +1,127 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ValuesDeclarationInEnumTest);
+  });
+}
+
+@reflectiveTest
+class ValuesDeclarationInEnumTest extends PubPackageResolutionTest {
+  test_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  values
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 11, 6),
+    ]);
+  }
+
+  test_field() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int values = 0;
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 26, 6),
+    ]);
+  }
+
+  test_field_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int values = 0;
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 27, 6),
+    ]);
+  }
+
+  test_field_withConstructor() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final values = [];
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 22, 6),
+    ]);
+  }
+
+  test_getter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  int get values => 0;
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 24, 6),
+    ]);
+  }
+
+  test_getter_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static int get values => 0;
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 31, 6),
+    ]);
+  }
+
+  test_method() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  void values() {}
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 21, 6),
+    ]);
+  }
+
+  test_method_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static void values() {}
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 28, 6),
+    ]);
+  }
+
+  test_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  set values(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 20, 6),
+    ]);
+  }
+
+  test_setter_static() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  static set values(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 27, 6),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_enum_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_enum_test.dart
new file mode 100644
index 0000000..60e12c9
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_enum_test.dart
@@ -0,0 +1,37 @@
+// 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/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(WrongNumberOfTypeArgumentsEnumTest);
+  });
+}
+
+@reflectiveTest
+class WrongNumberOfTypeArgumentsEnumTest extends PubPackageResolutionTest {
+  test_tooFew() async {
+    await assertErrorsInCode(r'''
+enum E<T, U> {
+  v<int>()
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM, 18, 5),
+    ]);
+  }
+
+  test_tooMany() async {
+    await assertErrorsInCode(r'''
+enum E<T> {
+  v<int, int>()
+}
+''', [
+      error(CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM, 15, 10),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_type_parameter_variance_in_superinterface_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_type_parameter_variance_in_superinterface_test.dart
index 52b3fab..60db55e 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_type_parameter_variance_in_superinterface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_type_parameter_variance_in_superinterface_test.dart
@@ -250,6 +250,76 @@
 ''');
   }
 
+  test_enum_implements_function_parameterType() async {
+    await assertErrorsInCode(r'''
+typedef F<X> = void Function(X);
+class A<X> {}
+enum E<X> implements A<F<X>> {
+  v
+}
+''', [
+      error(
+        CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE,
+        54,
+        1,
+      ),
+    ]);
+  }
+
+  test_enum_implements_function_returnType() async {
+    await assertNoErrorsInCode(r'''
+typedef F<X> = X Function();
+class A<X> {}
+enum E<X> implements A<F<X>> {
+  v
+}
+''');
+  }
+
+  test_enum_implements_withoutFunction() async {
+    await assertNoErrorsInCode(r'''
+class A<X> {}
+enum E<X> implements A<X> {
+  v
+}
+''');
+  }
+
+  test_enum_with_function_parameterType() async {
+    await assertErrorsInCode(r'''
+typedef F<X> = void Function(X);
+class A<X> {}
+enum E<X> with A<F<X>> {
+  v
+}
+''', [
+      error(
+        CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE,
+        54,
+        1,
+      ),
+    ]);
+  }
+
+  test_enum_with_function_returnType() async {
+    await assertNoErrorsInCode(r'''
+typedef F<X> = X Function();
+class A<X> {}
+enum E<X> with A<F<X>> {
+  v
+}
+''');
+  }
+
+  test_enum_with_withoutFunction() async {
+    await assertNoErrorsInCode(r'''
+class A<X> {}
+enum E<X> with A<X> {
+  v
+}
+''');
+  }
+
   test_mixin_implements_function_parameterType() async {
     await assertErrorsInCode(r'''
 typedef F<X> = void Function(X);
diff --git a/pkg/analyzer/test/src/fasta/ast_builder_test.dart b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
index c31f6e7..059b211 100644
--- a/pkg/analyzer/test/src/fasta/ast_builder_test.dart
+++ b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
@@ -2,14 +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.
 
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer_utilities/check/check.dart';
-import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../util/ast_check.dart';
-import '../../util/token_check.dart';
 import '../diagnostics/parser_diagnostics.dart';
 
 main() {
@@ -23,20 +18,26 @@
   void test_constructor_factory_misnamed() {
     var parseResult = parseStringWithErrors(r'''
 class A {
-  factory B() => throw 0;
+  factory B() => null;
 }
 ''');
     parseResult.assertNoErrors();
-    var unit = parseResult.unit;
-    expect(unit.declarations, hasLength(1));
-    var declaration = unit.declarations[0] as ClassDeclaration;
-    expect(declaration, isNotNull);
-    expect(declaration.members, hasLength(1));
-    var member = declaration.members[0] as ConstructorDeclaration;
-    expect(member, isNotNull);
-    expect(member.factoryKeyword, isNotNull);
-    expect(member.name, isNull);
-    expect(member.returnType.name, 'B');
+
+    var node = parseResult.findNode.constructor('B()');
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  returnType: SimpleIdentifier
+    token: B
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: NullLiteral
+      literal: null
+    semicolon: ;
+''');
   }
 
   void test_constructor_wrongName() {
@@ -48,14 +49,252 @@
     parseResult.assertErrors([
       error(ParserErrorCode.INVALID_CONSTRUCTOR_NAME, 12, 1),
     ]);
-    var unit = parseResult.unit;
-    expect(unit.declarations, hasLength(1));
-    var declaration = unit.declarations[0] as ClassDeclaration;
-    expect(declaration, isNotNull);
-    expect(declaration.members, hasLength(1));
-    var member = declaration.members[0] as ConstructorDeclaration;
-    expect(member, isNotNull);
-    expect(member.initializers, hasLength(1));
+
+    var node = parseResult.findNode.constructor('B()');
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  returnType: SimpleIdentifier
+    token: B
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    SuperConstructorInvocation
+      superKeyword: super
+      argumentList: ArgumentList
+        leftParenthesis: (
+        rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  void test_enum_constant_name_dot() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v.
+}
+''');
+    parseResult.assertErrors([
+      error(ParserErrorCode.MISSING_IDENTIFIER, 14, 1),
+    ]);
+
+    var node = parseResult.findNode.enumConstantDeclaration('v.');
+    assertParsedNodeText(node, r'''
+EnumConstantDeclaration
+  name: SimpleIdentifier
+    token: v
+  arguments: EnumConstantArguments
+    constructorSelector: ConstructorSelector
+      period: .
+      name: SimpleIdentifier
+        token: <empty> <synthetic>
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
+''');
+  }
+
+  void test_enum_constant_name_dot_identifier_semicolon() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v.named;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.enumConstantDeclaration('v.');
+    assertParsedNodeText(node, r'''
+EnumConstantDeclaration
+  name: SimpleIdentifier
+    token: v
+  arguments: EnumConstantArguments
+    constructorSelector: ConstructorSelector
+      period: .
+      name: SimpleIdentifier
+        token: named
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
+''');
+  }
+
+  void test_enum_constant_name_dot_semicolon() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v.;
+}
+''');
+    parseResult.assertErrors([
+      error(ParserErrorCode.MISSING_IDENTIFIER, 13, 1),
+    ]);
+
+    var node = parseResult.findNode.enumConstantDeclaration('v.');
+    assertParsedNodeText(node, r'''
+EnumConstantDeclaration
+  name: SimpleIdentifier
+    token: v
+  arguments: EnumConstantArguments
+    constructorSelector: ConstructorSelector
+      period: .
+      name: SimpleIdentifier
+        token: <empty> <synthetic>
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
+''');
+  }
+
+  void test_enum_constant_name_typeArguments_dot() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v<int>.
+}
+''');
+    parseResult.assertErrors([
+      error(ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
+          12, 5),
+      error(ParserErrorCode.MISSING_IDENTIFIER, 19, 1),
+    ]);
+
+    var node = parseResult.findNode.enumConstantDeclaration('v<int>.');
+    assertParsedNodeText(node, r'''
+EnumConstantDeclaration
+  name: SimpleIdentifier
+    token: v
+  arguments: EnumConstantArguments
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+      rightBracket: >
+    constructorSelector: ConstructorSelector
+      period: .
+      name: SimpleIdentifier
+        token: <empty> <synthetic>
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48380')
+  void test_enum_constant_name_typeArguments_dot_semicolon() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v<int>.;
+}
+''');
+    parseResult.assertErrors([
+      error(ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
+          12, 5),
+      error(ParserErrorCode.MISSING_IDENTIFIER, 18, 1),
+    ]);
+
+    var node = parseResult.findNode.enumConstantDeclaration('v<int>');
+    assertParsedNodeText(
+        node,
+        r'''
+EnumConstantDeclaration
+  arguments: EnumConstantArguments
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
+    constructorSelector: ConstructorSelector
+      name: SimpleIdentifier
+        token: <empty> <synthetic>
+      period: .
+    typeArguments: TypeArgumentList
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+      leftBracket: <
+      rightBracket: >
+  name: SimpleIdentifier
+    token: v
+''',
+        withCheckingLinking: true);
+  }
+
+  void test_enum_constant_withTypeArgumentsWithoutArguments() {
+    var parseResult = parseStringWithErrors(r'''
+enum E<T> {
+  v<int>;
+}
+''');
+    parseResult.assertErrors([
+      error(ParserErrorCode.ENUM_CONSTANT_WITH_TYPE_ARGUMENTS_WITHOUT_ARGUMENTS,
+          15, 5),
+    ]);
+
+    var node = parseResult.findNode.enumConstantDeclaration('v<int>');
+    assertParsedNodeText(node, r'''
+EnumConstantDeclaration
+  name: SimpleIdentifier
+    token: v
+  arguments: EnumConstantArguments
+    typeArguments: TypeArgumentList
+      leftBracket: <
+      arguments
+        NamedType
+          name: SimpleIdentifier
+            token: int
+      rightBracket: >
+    argumentList: ArgumentList
+      leftParenthesis: ( <synthetic>
+      rightParenthesis: ) <synthetic>
+''');
+  }
+
+  void test_enum_semicolon_null() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.enumDeclaration('enum E');
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  name: SimpleIdentifier
+    token: E
+  leftBracket: {
+  constants
+    EnumConstantDeclaration
+      name: SimpleIdentifier
+        token: v
+  rightBracket: }
+''');
+  }
+
+  void test_enum_semicolon_optional() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.enumDeclaration('enum E');
+    assertParsedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  name: SimpleIdentifier
+    token: E
+  leftBracket: {
+  constants
+    EnumConstantDeclaration
+      name: SimpleIdentifier
+        token: v
+  semicolon: ;
+  rightBracket: }
+''');
   }
 
   void test_getter_sameNameAsClass() {
@@ -67,15 +306,19 @@
     parseResult.assertErrors([
       error(ParserErrorCode.MEMBER_WITH_CLASS_NAME, 16, 1),
     ]);
-    var unit = parseResult.unit;
-    expect(unit.declarations, hasLength(1));
-    var declaration = unit.declarations[0] as ClassDeclaration;
-    expect(declaration, isNotNull);
-    expect(declaration.members, hasLength(1));
-    var member = declaration.members[0] as MethodDeclaration;
-    expect(member, isNotNull);
-    expect(member.isGetter, isTrue);
-    expect(member.name.name, 'A');
+
+    var node = parseResult.findNode.methodDeclaration('get A');
+    assertParsedNodeText(node, r'''
+MethodDeclaration
+  propertyKeyword: get
+  name: SimpleIdentifier
+    token: A
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: IntegerLiteral
+      literal: 0
+    semicolon: ;
+''');
   }
 
   void test_superFormalParameter() {
@@ -85,13 +328,14 @@
 }
 ''');
     parseResult.assertNoErrors();
-    check(parseResult.findNode.superFormalParameter('super.a'))
-      ..type.isNull
-      ..superKeyword.isKeywordSuper
-      ..identifier.which((it) => it
-        ..name.isEqualTo('a')
-        ..inDeclarationContext.isTrue)
-      ..typeParameters.isNull
-      ..parameters.isNull;
+
+    var node = parseResult.findNode.superFormalParameter('super.a');
+    assertParsedNodeText(node, r'''
+SuperFormalParameter
+  superKeyword: super
+  period: .
+  identifier: SimpleIdentifier
+    token: a
+''');
   }
 }
diff --git a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
index b0fcd73..61e6024 100644
--- a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
@@ -41,7 +41,7 @@
 f() => [a, if (x) b c];
 ''', [ParserErrorCode.EXPECTED_ELSE_OR_COMMA], '''
 f() => [a, if (x) b, c];
-''', featureSet: controlFlow);
+''');
   }
 
   void test_missingComma_afterIfElse() {
@@ -49,7 +49,7 @@
 f() => [a, if (x) b else y c];
 ''', [ParserErrorCode.EXPECTED_TOKEN], '''
 f() => [a, if (x) b else y, c];
-''', featureSet: controlFlow);
+''');
   }
 }
 
@@ -69,7 +69,7 @@
 f() => {a: b, if (x) c: d e: f};
 ''', [ParserErrorCode.EXPECTED_ELSE_OR_COMMA], '''
 f() => {a: b, if (x) c: d, e: f};
-''', featureSet: controlFlow);
+''');
   }
 
   void test_missingComma_afterIfElse() {
@@ -77,7 +77,7 @@
 f() => {a: b, if (x) c: d else y: z e: f};
 ''', [ParserErrorCode.EXPECTED_TOKEN], '''
 f() => {a: b, if (x) c: d else y: z, e: f};
-''', featureSet: controlFlow);
+''');
   }
 
   void test_missingKey() {
diff --git a/pkg/analyzer/test/src/lint/pub_test.dart b/pkg/analyzer/test/src/lint/pub_test.dart
index b5fbe2a..aa4dfe1 100644
--- a/pkg/analyzer/test/src/lint/pub_test.dart
+++ b/pkg/analyzer/test/src/lint/pub_test.dart
@@ -35,7 +35,6 @@
     hosted: http://your-package-server.com
     version: '>=0.4.0 <1.0.0'
   analyzer: '0.24.0-dev.1'
-  cli_util: '>=0.0.1 <0.1.0'
   semver: '>=0.2.0 <0.3.0'
   yaml: '>=2.1.2 <3.0.0'
   kittens:
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 5b4aab2..4fda1a5 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -213,7 +213,6 @@
       selfUriStr: selfUriStr,
       sink: buffer,
       indent: indent,
-      withNullability: true,
       withOffsets: true,
     );
   }
@@ -509,6 +508,8 @@
   }
 
   void _writeFunctionElement(FunctionElement e) {
+    expect(e.isStatic, isTrue);
+
     _writeIndentedLine(() {
       _writeIf(e.isExternal, 'external ');
       _writeName(e);
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 3ca0b95..317d7c5 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.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/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -12,6 +13,7 @@
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/generated/source.dart';
 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
@@ -33,12 +35,16 @@
   /// The optional provider for code lines, might be `null`.
   final CodeLinesProvider? _codeLinesProvider;
 
-  /// If `true`, types should be printed with nullability suffixes.
-  final bool _withNullability;
+  /// If `true`, linking of [EnumConstantDeclaration] will be checked
+  /// TODO(scheglov) Remove after https://github.com/dart-lang/sdk/issues/48380
+  final bool withCheckingLinking;
 
   /// If `true`, selected tokens and nodes should be printed with offsets.
   final bool _withOffsets;
 
+  /// If `true`, resolution should be printed.
+  final bool _withResolution;
+
   String _indent = '';
 
   ResolvedAstPrinter({
@@ -46,13 +52,14 @@
     required StringSink sink,
     required String indent,
     CodeLinesProvider? codeLinesProvider,
-    bool withNullability = false,
+    this.withCheckingLinking = false,
     bool withOffsets = false,
+    bool withResolution = true,
   })  : _selfUriStr = selfUriStr,
         _sink = sink,
         _codeLinesProvider = codeLinesProvider,
-        _withNullability = withNullability,
         _withOffsets = withOffsets,
+        _withResolution = withResolution,
         _indent = indent;
 
   @override
@@ -60,10 +67,9 @@
     _writeNextCodeLine(node);
     _writeln('AdjacentStrings');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('strings', node.strings);
-      _addStringLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
+      _writeRaw('stringValue', node.stringValue);
     });
   }
 
@@ -72,12 +78,8 @@
     _writeNextCodeLine(node);
     _writeln('Annotation');
     _withIndent(() {
-      _writeNode('arguments', node.arguments);
-      _writeToken('atSign', node.atSign);
-      _writeNode('constructorName', node.constructorName);
+      _writeNamedChildEntities(node);
       _writeElement('element', node.element);
-      _writeNode('name', node.name);
-      _writeNode('typeArguments', node.typeArguments);
     });
   }
 
@@ -86,11 +88,7 @@
     _writeNextCodeLine(node);
     _writeln('ArgumentList');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftParenthesis', node.leftParenthesis);
-      properties.addNodeList('arguments', node.arguments);
-      properties.addToken('rightParenthesis', node.rightParenthesis);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -99,12 +97,8 @@
     _writeNextCodeLine(node);
     _writeln('AsExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('asOperator', node.asOperator);
-      properties.addNode('type', node.type);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -113,10 +107,7 @@
     _writeNextCodeLine(node);
     _writeln('AssertInitializer');
     _withIndent(() {
-      var properties = _Properties();
-      _addAssertion(properties, node);
-      _addConstructorInitializer(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -125,11 +116,7 @@
     _writeNextCodeLine(node);
     _writeln('AssertStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('semicolon', node.semicolon);
-      _addAssertion(properties, node);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -138,17 +125,13 @@
     _writeNextCodeLine(node);
     _writeln('AssignmentExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('leftHandSide', node.leftHandSide);
-      properties.addToken('operator', node.operator);
-      properties.addNode('rightHandSide', node.rightHandSide);
-      properties.addElement('readElement', node.readElement);
-      properties.addType('readType', node.readType);
-      properties.addElement('writeElement', node.writeElement);
-      properties.addType('writeType', node.writeType);
-      _addExpression(properties, node);
-      _addMethodReferenceExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('readElement', node.readElement);
+      _writeType('readType', node.readType);
+      _writeElement('writeElement', node.writeElement);
+      _writeType('writeType', node.writeType);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -157,11 +140,8 @@
     _writeNextCodeLine(node);
     _writeln('AwaitExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('awaitKeyword', node.awaitKeyword);
-      properties.addNode('expression', node.expression);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -170,14 +150,10 @@
     _writeNextCodeLine(node);
     _writeln('BinaryExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('leftOperand', node.leftOperand);
-      properties.addToken('operator', node.operator);
-      properties.addNode('rightOperand', node.rightOperand);
-      properties.addType('staticInvokeType', node.staticInvokeType);
-      _addExpression(properties, node);
-      _addMethodReferenceExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticInvokeType', node.staticInvokeType);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -186,12 +162,7 @@
     _writeNextCodeLine(node);
     _writeln('Block');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addToken('rightBracket', node.rightBracket);
-      properties.addNodeList('statements', node.statements);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -200,10 +171,7 @@
     _writeNextCodeLine(node);
     _writeln('BlockFunctionBody');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('block', node.block);
-      _addFunctionBody(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -212,10 +180,8 @@
     _writeNextCodeLine(node);
     _writeln('BooleanLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('literal', node.literal);
-      _addLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -224,11 +190,7 @@
     _writeNextCodeLine(node);
     _writeln('BreakStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('breakKeyword', node.breakKeyword);
-      properties.addNode('label', node.label);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -237,11 +199,8 @@
     _writeNextCodeLine(node);
     _writeln('CascadeExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('cascadeSections', node.cascadeSections);
-      properties.addNode('target', node.target);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -250,15 +209,7 @@
     _writeNextCodeLine(node);
     _writeln('CatchClause');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addToken('catchKeyword', node.catchKeyword);
-      properties.addNode('exceptionParameter', node.exceptionParameter);
-      properties.addNode('exceptionType', node.exceptionType);
-      properties.addToken('onKeyword', node.onKeyword);
-      properties.addNode('stackTraceParameter', node.stackTraceParameter);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -267,14 +218,10 @@
     _writeNextCodeLine(node);
     _writeln('ClassDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('abstractKeyword', node.abstractKeyword);
-      properties.addToken('classKeyword', node.classKeyword);
-      properties.addNode('extendsClause', node.extendsClause);
-      properties.addNode('nativeClause', node.nativeClause);
-      properties.addNode('withClause', node.withClause);
-      _addClassOrMixinDeclaration(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -283,9 +230,7 @@
     _writeNextCodeLine(node);
     _writeln('Comment');
     _withIndent(() {
-      var properties = _Properties();
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -294,9 +239,7 @@
     _writeNextCodeLine(node);
     _writeln('CompilationUnit');
     _withIndent(() {
-      _writeNode('scriptTag', node.scriptTag);
-      _writeNodeList('directives', node.directives);
-      _writeNodeList('declarations', node.declarations);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -305,14 +248,8 @@
     _writeNextCodeLine(node);
     _writeln('ConditionalExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('colon', node.colon);
-      properties.addNode('condition', node.condition);
-      properties.addNode('elseExpression', node.elseExpression);
-      properties.addToken('question', node.question);
-      properties.addNode('thenExpression', node.thenExpression);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -321,18 +258,10 @@
     _writeNextCodeLine(node);
     _writeln('ConstructorDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addToken('constKeyword', node.constKeyword);
-      properties.addToken('externalKeyword', node.externalKeyword);
-      properties.addToken('factoryKeyword', node.factoryKeyword);
-      properties.addNodeList('initializers', node.initializers);
-      properties.addNode('name', node.name);
-      properties.addNode('parameters', node.parameters);
-      properties.addNode('redirectedConstructor', node.redirectedConstructor);
-      properties.addNode('returnType', node.returnType);
-      _addClassMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -341,14 +270,7 @@
     _writeNextCodeLine(node);
     _writeln('ConstructorFieldInitializer');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('equals', node.equals);
-      properties.addNode('expression', node.expression);
-      properties.addNode('fieldName', node.fieldName);
-      properties.addToken('period', node.period);
-      properties.addToken('thisKeyword', node.thisKeyword);
-      _addConstructorInitializer(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -357,12 +279,8 @@
     _writeNextCodeLine(node);
     _writeln('ConstructorName');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('name', node.name);
-      properties.addToken('period', node.period);
-      properties.addElement('staticElement', node.staticElement);
-      properties.addNode('type', node.type2);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
     });
   }
 
@@ -370,10 +288,17 @@
   void visitConstructorReference(ConstructorReference node) {
     _writeln('ConstructorReference');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('constructorName', node.constructorName);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
+    });
+  }
+
+  @override
+  void visitConstructorSelector(ConstructorSelector node) {
+    _checkChildrenEntitiesLinking(node);
+    _writeln('ConstructorSelector');
+    _withIndent(() {
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -382,11 +307,7 @@
     _writeNextCodeLine(node);
     _writeln('ContinueStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('continueKeyword', node.continueKeyword);
-      properties.addNode('label', node.label);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -395,12 +316,10 @@
     _writeNextCodeLine(node);
     _writeln('DeclaredIdentifier');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('identifier', node.identifier);
-      properties.addToken('keyword', node.keyword);
-      properties.addNode('type', node.type);
-      _addDeclaration(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -409,11 +328,11 @@
     _writeNextCodeLine(node);
     _writeln('DefaultFormalParameter');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('defaultValue', node.defaultValue);
-      properties.addNode('parameter', node.parameter);
-      _addFormalParameter(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -422,11 +341,7 @@
     _writeNextCodeLine(node);
     _writeln('DoStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addNode('condition', node.condition);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -435,10 +350,8 @@
     _writeNextCodeLine(node);
     _writeln('DoubleLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('literal', node.literal);
-      _addLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -447,22 +360,31 @@
     _writeNextCodeLine(node);
     _writeln('EmptyFunctionBody');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('semicolon', node.semicolon);
-      _addFunctionBody(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+    });
+  }
+
+  @override
+  void visitEnumConstantArguments(EnumConstantArguments node) {
+    if (withCheckingLinking) {
+      _checkChildrenEntitiesLinking(node);
+    }
+    _writeln('EnumConstantArguments');
+    _withIndent(() {
+      _writeNamedChildEntities(node);
     });
   }
 
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    _checkChildrenEntitiesLinking(node);
     _writeNextCodeLine(node);
     _writeln('EnumConstantDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('name', node.name);
-      _addDeclaration(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -471,10 +393,10 @@
     _writeNextCodeLine(node);
     _writeln('EnumDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('constants', node.constants);
-      _addNamedCompilationUnitMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -483,9 +405,13 @@
     _writeNextCodeLine(node);
     _writeln('ExportDirective');
     _withIndent(() {
-      var properties = _Properties();
-      _addNamespaceDirective(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('element', node.element);
+      _writeSource('selectedSource', node.selectedSource);
+      _writeRaw('selectedUriContent', node.selectedUriContent);
+      _writeRaw('uriContent', node.uriContent);
+      _writeElement('uriElement', node.uriElement);
+      _writeSource('uriSource', node.uriSource);
     });
   }
 
@@ -494,12 +420,7 @@
     _writeNextCodeLine(node);
     _writeln('ExpressionFunctionBody');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('functionDefinition', node.functionDefinition);
-      properties.addToken('semicolon', node.semicolon);
-      _addFunctionBody(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -508,11 +429,7 @@
     _writeNextCodeLine(node);
     _writeln('ExpressionStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('semicolon', node.semicolon);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -521,10 +438,19 @@
     _writeNextCodeLine(node);
     _writeln('ExtendsClause');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('superclass', node.superclass2);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+    });
+  }
+
+  @override
+  void visitExtensionOverride(ExtensionOverride node) {
+    _writeNextCodeLine(node);
+    _writeln('ExtensionOverride');
+    _withIndent(() {
+      _writeNamedChildEntities(node);
+      _writeType('extendedType', node.extendedType);
+      _writeType('staticType', node.staticType);
+      _writeTypeList('typeArgumentTypes', node.typeArgumentTypes);
     });
   }
 
@@ -533,15 +459,10 @@
     _writeNextCodeLine(node);
     _writeln('FieldDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('abstractKeyword', node.abstractKeyword);
-      properties.addToken('externalKeyword', node.externalKeyword);
-      properties.addToken('covariantKeyword', node.covariantKeyword);
-      properties.addNode('fields', node.fields);
-      properties.addToken('semicolon', node.semicolon);
-      properties.addToken('staticKeyword', node.staticKeyword);
-      _addClassMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -550,14 +471,11 @@
     _writeNextCodeLine(node);
     _writeln('FieldFormalParameter');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('keyword', node.keyword);
-      properties.addNode('parameters', node.parameters);
-      properties.addToken('thisKeyword', node.thisKeyword);
-      properties.addNode('type', node.type);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addNormalFormalParameter(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -566,10 +484,7 @@
     _writeNextCodeLine(node);
     _writeln('ForEachPartsWithDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('loopVariable', node.loopVariable);
-      _addForEachParts(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -578,10 +493,7 @@
     _writeNextCodeLine(node);
     _writeln('ForEachPartsWithIdentifier');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('identifier', node.identifier);
-      _addForEachParts(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -590,12 +502,7 @@
     _writeNextCodeLine(node);
     _writeln('FormalParameterList');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftParenthesis', node.leftParenthesis);
-      properties.addToken('rightParenthesis', node.rightParenthesis);
-      properties.addNodeList('parameters', node.parameters);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -604,10 +511,7 @@
     _writeNextCodeLine(node);
     _writeln('ForPartsWithDeclarations');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('variables', node.variables);
-      _addForParts(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -616,10 +520,7 @@
     _writeNextCodeLine(node);
     _writeln('ForPartsWithExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('initialization', node.initialization);
-      _addForParts(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -628,11 +529,7 @@
     _writeNextCodeLine(node);
     _writeln('ForStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addNode('forLoopParts', node.forLoopParts);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -641,14 +538,11 @@
     _writeNextCodeLine(node);
     _writeln('FunctionDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addType('declaredElementType', node.declaredElement!.type);
-      properties.addToken('externalKeyword', node.externalKeyword);
-      properties.addNode('functionExpression', node.functionExpression);
-      properties.addToken('propertyKeyword', node.propertyKeyword);
-      properties.addNode('returnType', node.returnType);
-      _addNamedCompilationUnitMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -657,10 +551,7 @@
     _writeNextCodeLine(node);
     _writeln('FunctionDeclarationStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('functionDeclaration', node.functionDeclaration);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -669,13 +560,11 @@
     _writeNextCodeLine(node);
     _writeln('FunctionExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addElement('declaredElement', node.declaredElement);
-      properties.addNode('parameters', node.parameters);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -684,11 +573,11 @@
     _writeNextCodeLine(node);
     _writeln('FunctionExpressionInvocation');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('function', node.function);
-      properties.addElement('staticElement', node.staticElement);
-      _addInvocationExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticInvokeType', node.staticInvokeType);
+      _writeType('staticType', node.staticType);
+      _writeTypeList('typeArgumentTypes', node.typeArgumentTypes);
     });
   }
 
@@ -696,12 +585,9 @@
   void visitFunctionReference(FunctionReference node) {
     _writeln('FunctionReference');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('function', node.function);
-      properties.addNode('typeArguments', node.typeArguments);
-      properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
+      _writeTypeList('typeArgumentTypes', node.typeArgumentTypes);
     });
   }
 
@@ -710,13 +596,10 @@
     _writeNextCodeLine(node);
     _writeln('FunctionTypeAlias');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addElement('declaredElement', node.declaredElement);
-      properties.addNode('parameters', node.parameters);
-      properties.addNode('returnType', node.returnType);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addTypeAlias(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -725,13 +608,11 @@
     _writeNextCodeLine(node);
     _writeln('FunctionTypedFormalParameter');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('parameters', node.parameters);
-      properties.addToken('question', node.question);
-      properties.addNode('returnType', node.returnType);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addNormalFormalParameter(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -740,17 +621,14 @@
     _writeNextCodeLine(node);
     _writeln('GenericFunctionType');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addGenericFunctionTypeElement(
-        'declaredElement',
-        node.declaredElement,
-      );
-      properties.addToken('functionKeyword', node.functionKeyword);
-      properties.addNode('parameters', node.parameters);
-      properties.addNode('returnType', node.returnType);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addTypeAnnotation(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeGenericFunctionTypeElement(
+          'declaredElement',
+          node.declaredElement,
+        );
+      }
+      _writeType('type', node.type);
     });
   }
 
@@ -759,12 +637,10 @@
     _writeNextCodeLine(node);
     _writeln('GenericTypeAlias');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('equals', node.equals);
-      properties.addNode('functionType', node.functionType);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addTypeAlias(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -773,10 +649,7 @@
     _writeNextCodeLine(node);
     _writeln('HideCombinator');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('hiddenNames', node.hiddenNames);
-      _addCombinator(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -784,12 +657,7 @@
   void visitIfElement(IfElement node) {
     _writeln('IfElement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('condition', node.condition);
-      properties.addNode('elseStatement', node.elseElement);
-      properties.addNode('thenStatement', node.thenElement);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -798,12 +666,7 @@
     _writeNextCodeLine(node);
     _writeln('IfStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('condition', node.condition);
-      properties.addNode('elseStatement', node.elseStatement);
-      properties.addNode('thenStatement', node.thenStatement);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -812,11 +675,7 @@
     _writeNextCodeLine(node);
     _writeln('ImplementsClause');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('implementsKeyword', node.implementsKeyword);
-      properties.addNodeList('interfaces', node.interfaces2);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -824,12 +683,10 @@
   void visitImplicitCallReference(ImplicitCallReference node) {
     _writeln('ImplicitCallReference');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addNode('typeArguments', node.typeArguments);
-      properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
+      _writeTypeList('typeArgumentTypes', node.typeArgumentTypes);
     });
   }
 
@@ -838,10 +695,13 @@
     _writeNextCodeLine(node);
     _writeln('ImportDirective');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('prefix', node.prefix);
-      _addNamespaceDirective(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('element', node.element);
+      _writeSource('selectedSource', node.selectedSource);
+      _writeRaw('selectedUriContent', node.selectedUriContent);
+      _writeRaw('uriContent', node.uriContent);
+      _writeElement('uriElement', node.uriElement);
+      _writeSource('uriSource', node.uriSource);
     });
   }
 
@@ -850,15 +710,9 @@
     _writeNextCodeLine(node);
     _writeln('IndexExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addNode('index', node.index);
-      properties.addToken('period', node.period);
-      properties.addToken('rightBracket', node.rightBracket);
-      properties.addNode('target', node.target);
-      _addExpression(properties, node);
-      _addMethodReferenceExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -867,12 +721,8 @@
     _writeNextCodeLine(node);
     _writeln('InstanceCreationExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('argumentList', node.argumentList);
-      properties.addNode('constructorName', node.constructorName);
-      properties.addToken('keyword', node.keyword);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -881,10 +731,8 @@
     _writeNextCodeLine(node);
     _writeln('IntegerLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('literal', node.literal);
-      _addLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -893,12 +741,7 @@
     _writeNextCodeLine(node);
     _writeln('InterpolationExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addToken('rightBracket', node.rightBracket);
-      _addInterpolationElement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -907,10 +750,7 @@
     _writeNextCodeLine(node);
     _writeln('InterpolationString');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('contents', node.contents);
-      _addInterpolationElement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -919,12 +759,8 @@
     _writeNextCodeLine(node);
     _writeln('IsExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('isOperator', node.isOperator);
-      properties.addNode('type', node.type);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -933,7 +769,7 @@
     _writeNextCodeLine(node);
     _writeln('Label');
     _withIndent(() {
-      _writeNode('label', node.label);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -942,10 +778,8 @@
     _writeNextCodeLine(node);
     _writeln('LibraryDirective');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('name', node.name);
-      _addDirective(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('element', node.element);
     });
   }
 
@@ -954,10 +788,9 @@
     _writeNextCodeLine(node);
     _writeln('LibraryIdentifier');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('components', node.components);
-      _addIdentifier(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -966,12 +799,8 @@
     _writeNextCodeLine(node);
     _writeln('ListLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addNodeList('elements', node.elements);
-      properties.addToken('rightBracket', node.rightBracket);
-      _addTypedLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -980,11 +809,7 @@
     _writeNextCodeLine(node);
     _writeln('SetOrMapLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('key', node.key);
-      properties.addNode('value', node.value);
-      _addCollectionElement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -993,19 +818,11 @@
     _writeNextCodeLine(node);
     _writeln('MethodDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addType('declaredElementType', node.declaredElement!.type);
-      properties.addToken('externalKeyword', node.externalKeyword);
-      properties.addToken('modifierKeyword', node.modifierKeyword);
-      properties.addNode('name', node.name);
-      properties.addToken('operatorKeyword', node.operatorKeyword);
-      properties.addNode('parameters', node.parameters);
-      properties.addToken('propertyKeyword', node.propertyKeyword);
-      properties.addNode('returnType', node.returnType);
-      properties.addNode('typeParameters', node.typeParameters);
-      _addClassMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -1014,12 +831,10 @@
     _writeNextCodeLine(node);
     _writeln('MethodInvocation');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('methodName', node.methodName);
-      properties.addToken('operator', node.operator);
-      properties.addNode('target', node.target);
-      _addInvocationExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticInvokeType', node.staticInvokeType);
+      _writeType('staticType', node.staticType);
+      _writeTypeList('typeArgumentTypes', node.typeArgumentTypes);
     });
   }
 
@@ -1028,11 +843,10 @@
     _writeNextCodeLine(node);
     _writeln('MixinDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('mixinKeyword', node.mixinKeyword);
-      properties.addNode('onClause', node.onClause);
-      _addClassOrMixinDeclaration(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -1041,8 +855,7 @@
     _writeNextCodeLine(node);
     _writeln('NamedExpression');
     _withIndent(() {
-      _writeNode('name', node.name);
-      _writeNode('expression', node.expression);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1051,9 +864,8 @@
     _writeNextCodeLine(node);
     _writeln('NamedType');
     _withIndent(() {
-      _writeNode('name', node.name);
+      _writeNamedChildEntities(node);
       _writeType('type', node.type);
-      _writeNode('typeArguments', node.typeArguments);
     });
   }
 
@@ -1062,10 +874,8 @@
     _writeNextCodeLine(node);
     _writeln('NullLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('literal', node.literal);
-      _addLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1074,12 +884,7 @@
     _writeNextCodeLine(node);
     _writeln('OnClause');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('onKeyword', node.onKeyword);
-      properties.addNodeList(
-          'superclassConstraints', node.superclassConstraints2);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1088,12 +893,8 @@
     _writeNextCodeLine(node);
     _writeln('ParenthesizedExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftParenthesis', node.leftParenthesis);
-      properties.addNode('expression', node.expression);
-      properties.addToken('rightParenthesis', node.rightParenthesis);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1102,9 +903,11 @@
     _writeNextCodeLine(node);
     _writeln('PartDirective');
     _withIndent(() {
-      var properties = _Properties();
-      _addUriBasedDirective(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('element', node.element);
+      _writeRaw('uriContent', node.uriContent);
+      _writeElement('uriElement', node.uriElement);
+      _writeSource('uriSource', node.uriSource);
     });
   }
 
@@ -1113,13 +916,8 @@
     _writeNextCodeLine(node);
     _writeln('PartOfDirective');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('libraryName', node.libraryName);
-      properties.addToken('ofKeyword', node.ofKeyword);
-      properties.addToken('partKeyword', node.partKeyword);
-      properties.addToken('semicolon', node.semicolon);
-      _addDirective(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('element', node.element);
     });
   }
 
@@ -1128,18 +926,15 @@
     _writeNextCodeLine(node);
     _writeln('PostfixExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('operand', node.operand);
-      properties.addToken('operator', node.operator);
+      _writeNamedChildEntities(node);
       if (node.operator.type.isIncrementOperator) {
-        properties.addElement('readElement', node.readElement);
-        properties.addType('readType', node.readType);
-        properties.addElement('writeElement', node.writeElement);
-        properties.addType('writeType', node.writeType);
+        _writeElement('readElement', node.readElement);
+        _writeType('readType', node.readType);
+        _writeElement('writeElement', node.writeElement);
+        _writeType('writeType', node.writeType);
       }
-      _addExpression(properties, node);
-      _addMethodReferenceExpression(properties, node);
-      _writeProperties(properties);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1148,12 +943,9 @@
     _writeNextCodeLine(node);
     _writeln('PrefixedIdentifier');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('identifier', node.identifier);
-      properties.addToken('period', node.period);
-      properties.addNode('prefix', node.prefix);
-      _addIdentifier(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1162,18 +954,15 @@
     _writeNextCodeLine(node);
     _writeln('PrefixExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('operand', node.operand);
-      properties.addToken('operator', node.operator);
+      _writeNamedChildEntities(node);
       if (node.operator.type.isIncrementOperator) {
-        properties.addElement('readElement', node.readElement);
-        properties.addType('readType', node.readType);
-        properties.addElement('writeElement', node.writeElement);
-        properties.addType('writeType', node.writeType);
+        _writeElement('readElement', node.readElement);
+        _writeType('readType', node.readType);
+        _writeElement('writeElement', node.writeElement);
+        _writeType('writeType', node.writeType);
       }
-      _addExpression(properties, node);
-      _addMethodReferenceExpression(properties, node);
-      _writeProperties(properties);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1182,12 +971,8 @@
     _writeNextCodeLine(node);
     _writeln('PropertyAccess');
     _withIndent(() {
-      var properties = _Properties();
-      _writeToken('operator', node.operator);
-      properties.addNode('propertyName', node.propertyName);
-      properties.addNode('target', node.target);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1198,11 +983,8 @@
     _writeNextCodeLine(node);
     _writeln('RedirectingConstructorInvocation');
     _withIndent(() {
-      _writeNode('argumentList', node.argumentList);
-      _writeNode('constructorName', node.constructorName);
-      _writeToken('period', node.period);
+      _writeNamedChildEntities(node);
       _writeElement('staticElement', node.staticElement);
-      _writeToken('thisKeyword', node.thisKeyword);
     });
   }
 
@@ -1211,12 +993,7 @@
     _writeNextCodeLine(node);
     _writeln('ReturnStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('returnKeyword', node.returnKeyword);
-      properties.addToken('semicolon', node.semicolon);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1225,13 +1002,9 @@
     _writeNextCodeLine(node);
     _writeln('SetOrMapLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('elements', node.elements);
-      properties.addRaw('isMap', node.isMap);
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addToken('rightBracket', node.rightBracket);
-      _addTypedLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeRaw('isMap', node.isMap);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1240,10 +1013,7 @@
     _writeNextCodeLine(node);
     _writeln('ShowCombinator');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('shownNames', node.shownNames);
-      _addCombinator(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1252,11 +1022,11 @@
     _writeNextCodeLine(node);
     _writeln('SimpleFormalParameter');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('keyword', node.keyword);
-      properties.addNode('type', node.type);
-      _addNormalFormalParameter(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -1265,15 +1035,13 @@
     _writeNextCodeLine(node);
     _writeln('SimpleIdentifier');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addElement('staticElement', node.staticElement);
-      properties.addType('staticType', node.staticType);
-      properties.addTypeList(
+      _writeNamedChildEntities(node);
+      _writeElement('staticElement', node.staticElement);
+      _writeType('staticType', node.staticType);
+      _writeTypeList(
         'tearOffTypeArgumentTypes',
         node.tearOffTypeArgumentTypes,
       );
-      properties.addToken('token', node.token);
-      _writeProperties(properties);
     });
   }
 
@@ -1282,7 +1050,7 @@
     _writeNextCodeLine(node);
     _writeln('SimpleStringLiteral');
     _withIndent(() {
-      _writeToken('literal', node.literal);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1290,8 +1058,7 @@
   void visitSpreadElement(SpreadElement node) {
     _writeln('SpreadElement');
     _withIndent(() {
-      _writeNode('expression', node.expression);
-      _writeToken('spreadOperator', node.spreadOperator);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1300,10 +1067,9 @@
     _writeNextCodeLine(node);
     _writeln('StringInterpolation');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNodeList('elements', node.elements);
-      _addSingleStringLiteral(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
+      _writeRaw('stringValue', node.stringValue);
     });
   }
 
@@ -1312,11 +1078,8 @@
     _writeNextCodeLine(node);
     _writeln('SuperConstructorInvocation');
     _withIndent(() {
-      _writeNode('argumentList', node.argumentList);
-      _writeNode('constructorName', node.constructorName);
-      _writeToken('period', node.period);
+      _writeNamedChildEntities(node);
       _writeElement('staticElement', node.staticElement);
-      _writeToken('superKeyword', node.superKeyword);
     });
   }
 
@@ -1325,10 +1088,24 @@
     _writeNextCodeLine(node);
     _writeln('SuperExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('superKeyword', node.superKeyword);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
+    });
+  }
+
+  @override
+  void visitSuperFormalParameter(SuperFormalParameter node) {
+    if (withCheckingLinking) {
+      _checkChildrenEntitiesLinking(node);
+    }
+    _writeNextCodeLine(node);
+    _writeln('SuperFormalParameter');
+    _withIndent(() {
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+        _writeType('declaredElementType', node.declaredElement!.type);
+      }
     });
   }
 
@@ -1337,10 +1114,7 @@
     _writeNextCodeLine(node);
     _writeln('SwitchCase');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      _addSwitchMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1349,9 +1123,7 @@
     _writeNextCodeLine(node);
     _writeln('SwitchDefault');
     _withIndent(() {
-      var properties = _Properties();
-      _addSwitchMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1360,11 +1132,7 @@
     _writeNextCodeLine(node);
     _writeln('SwitchStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addNodeList('members', node.members);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1372,11 +1140,7 @@
   void visitSymbolLiteral(SymbolLiteral node) {
     _writeln('SymbolLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('poundSign', node.poundSign);
-      properties.addTokenList('components', node.components);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1385,10 +1149,8 @@
     _writeNextCodeLine(node);
     _writeln('ThisExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('thisKeyword', node.thisKeyword);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1397,10 +1159,8 @@
     _writeNextCodeLine(node);
     _writeln('ThrowExpression');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1409,12 +1169,10 @@
     _writeNextCodeLine(node);
     _writeln('TopLevelVariableDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('externalKeyword', node.externalKeyword);
-      properties.addToken('semicolon', node.semicolon);
-      properties.addNode('variables', node.variables);
-      _addCompilationUnitMember(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -1423,12 +1181,7 @@
     _writeNextCodeLine(node);
     _writeln('TryStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addNodeList('catchClauses', node.catchClauses);
-      properties.addNode('finallyBlock', node.finallyBlock);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1437,12 +1190,7 @@
     _writeNextCodeLine(node);
     _writeln('TypeArgumentList');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addNodeList('arguments', node.arguments);
-      properties.addToken('rightBracket', node.rightBracket);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1450,10 +1198,8 @@
   void visitTypeLiteral(TypeLiteral node) {
     _writeln('TypeLiteral');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('type', node.type);
-      _addExpression(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      _writeType('staticType', node.staticType);
     });
   }
 
@@ -1462,16 +1208,10 @@
     _writeNextCodeLine(node);
     _writeln('TypeParameter');
     _withIndent(() {
-      var properties = _Properties();
-      // TODO (kallentu) : Clean up TypeParameterImpl casting once variance is
-      // added to the interface.
-      if ((node as TypeParameterImpl).varianceKeyword != null) {
-        properties.addToken('variance', node.varianceKeyword);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
       }
-      properties.addNode('bound', node.bound);
-      properties.addNode('name', node.name);
-      _addDeclaration(properties, node);
-      _writeProperties(properties);
     });
   }
 
@@ -1480,12 +1220,7 @@
     _writeNextCodeLine(node);
     _writeln('TypeParameterList');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('leftBracket', node.leftBracket);
-      properties.addNodeList('typeParameters', node.typeParameters);
-      properties.addToken('rightBracket', node.rightBracket);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1494,11 +1229,10 @@
     _writeNextCodeLine(node);
     _writeln('VariableDeclaration');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('initializer', node.initializer);
-      properties.addNode('name', node.name);
-      _addDeclaration(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        _writeElement('declaredElement', node.declaredElement);
+      }
     });
   }
 
@@ -1507,13 +1241,7 @@
     _writeNextCodeLine(node);
     _writeln('VariableDeclarationList');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('keyword', node.keyword);
-      properties.addToken('lateKeyword', node.lateKeyword);
-      properties.addNode('type', node.type);
-      properties.addNodeList('variables', node.variables);
-      _addAnnotatedNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1522,11 +1250,7 @@
     _writeNextCodeLine(node);
     _writeln('VariableDeclarationStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('semicolon', node.semicolon);
-      properties.addNode('variables', node.variables);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1535,11 +1259,7 @@
     _writeNextCodeLine(node);
     _writeln('WhileStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('body', node.body);
-      properties.addNode('condition', node.condition);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1548,11 +1268,7 @@
     _writeNextCodeLine(node);
     _writeln('WithClause');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addToken('withKeyword', node.withKeyword);
-      properties.addNodeList('mixinTypes', node.mixinTypes2);
-      _addAstNode(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1561,12 +1277,7 @@
     _writeNextCodeLine(node);
     _writeln('YieldStatement');
     _withIndent(() {
-      var properties = _Properties();
-      properties.addNode('expression', node.expression);
-      properties.addToken('star', node.star);
-      properties.addToken('yieldKeyword', node.yieldKeyword);
-      _addStatement(properties, node);
-      _writeProperties(properties);
+      _writeNamedChildEntities(node);
     });
   }
 
@@ -1574,223 +1285,17 @@
     _writeElement(name, element);
   }
 
-  void _addAnnotatedNode(_Properties properties, AnnotatedNode node) {
-    properties.addNode('documentationComment', node.documentationComment);
-    properties.addNodeList('metadata', node.metadata);
-    _addAstNode(properties, node);
-  }
-
-  void _addAssertion(_Properties properties, Assertion node) {
-    properties.addToken('assertKeyword', node.assertKeyword);
-    properties.addNode('condition', node.condition);
-    properties.addToken('leftParenthesis', node.leftParenthesis);
-    properties.addNode('message', node.message);
-    properties.addToken('rightParenthesis', node.rightParenthesis);
-    _addAstNode(properties, node);
-  }
-
-  void _addAstNode(_Properties properties, AstNode node) {}
-
-  void _addClassMember(_Properties properties, ClassMember node) {
-    _addDeclaration(properties, node);
-  }
-
-  void _addClassOrMixinDeclaration(
-    _Properties properties,
-    ClassOrMixinDeclaration node,
-  ) {
-    properties.addNode('implementsClause', node.implementsClause);
-    properties.addNodeList('members', node.members);
-    properties.addNode('typeParameters', node.typeParameters);
-    _addNamedCompilationUnitMember(properties, node);
-  }
-
-  void _addCollectionElement(_Properties properties, CollectionElement node) {
-    _addAstNode(properties, node);
-  }
-
-  void _addCombinator(_Properties properties, Combinator node) {
-    properties.addToken('keyword', node.keyword);
-    _addAstNode(properties, node);
-  }
-
-  void _addCompilationUnitMember(
-    _Properties properties,
-    CompilationUnitMember node,
-  ) {
-    _addDeclaration(properties, node);
-  }
-
-  void _addConstructorInitializer(
-    _Properties properties,
-    ConstructorInitializer node,
-  ) {
-    _addAstNode(properties, node);
-  }
-
-  void _addDeclaration(_Properties properties, Declaration node) {
-    properties.addElement('declaredElement', node.declaredElement);
-    _addAnnotatedNode(properties, node);
-  }
-
-  void _addDirective(
-    _Properties properties,
-    Directive node,
-  ) {
-    properties.addElement('element', node.element);
-    _addAnnotatedNode(properties, node);
-  }
-
-  void _addExpression(_Properties properties, Expression node) {
-    properties.addType('staticType', node.staticType);
-    _addAstNode(properties, node);
-  }
-
-  void _addForEachParts(_Properties properties, ForEachParts node) {
-    properties.addToken('inKeyword', node.inKeyword);
-    properties.addNode('iterable', node.iterable);
-    _addForLoopParts(properties, node);
-  }
-
-  void _addForLoopParts(_Properties properties, ForLoopParts node) {
-    _addAstNode(properties, node);
-  }
-
-  void _addFormalParameter(_Properties properties, FormalParameter node) {
-    properties.addToken('covariantKeyword', node.covariantKeyword);
-    properties.addElement('declaredElement', node.declaredElement);
-    properties.addType('declaredElementType', node.declaredElement!.type);
-    properties.addNode('identifier', node.identifier);
-    properties.addNodeList('metadata', node.metadata);
-    properties.addToken('requiredKeyword', node.requiredKeyword);
-    _addAstNode(properties, node);
-  }
-
-  void _addForParts(_Properties properties, ForParts node) {
-    properties.addNode('condition', node.condition);
-    properties.addNodeList('updaters', node.updaters);
-    _addForLoopParts(properties, node);
-  }
-
-  void _addFunctionBody(_Properties properties, FunctionBody node) {
-    properties.addToken('keyword', node.keyword);
-    properties.addToken('star', node.star);
-    _addAstNode(properties, node);
-  }
-
-  void _addIdentifier(
-    _Properties properties,
-    Identifier node,
-  ) {
-    properties.addElement('staticElement', node.staticElement);
-    _addExpression(properties, node);
-  }
-
-  void _addInterpolationElement(
-    _Properties properties,
-    InterpolationElement node,
-  ) {
-    _addAstNode(properties, node);
-  }
-
-  void _addInvocationExpression(
-    _Properties properties,
-    InvocationExpression node,
-  ) {
-    properties.addNode('argumentList', node.argumentList);
-    properties.addType('staticInvokeType', node.staticInvokeType);
-    properties.addNode('typeArguments', node.typeArguments);
-    properties.addTypeList('typeArgumentTypes', node.typeArgumentTypes);
-    _addExpression(properties, node);
-  }
-
-  void _addLiteral(_Properties properties, Literal node) {
-    _addExpression(properties, node);
-  }
-
-  void _addMethodReferenceExpression(
-    _Properties properties,
-    MethodReferenceExpression node,
-  ) {
-    properties.addElement('staticElement', node.staticElement);
-    _addAstNode(properties, node);
-  }
-
-  void _addNamedCompilationUnitMember(
-    _Properties properties,
-    NamedCompilationUnitMember node,
-  ) {
-    properties.addNode('name', node.name);
-    _addCompilationUnitMember(properties, node);
-  }
-
-  void _addNamespaceDirective(
-    _Properties properties,
-    NamespaceDirective node,
-  ) {
-    properties.addNodeList('combinators', node.combinators);
-    properties.addNodeList('configurations', node.configurations);
-    properties.addSource('selectedSource', node.selectedSource);
-    properties.addRaw('selectedUriContent', node.selectedUriContent);
-    _addUriBasedDirective(properties, node);
-  }
-
-  void _addNormalFormalParameter(
-    _Properties properties,
-    NormalFormalParameter node,
-  ) {
-    properties.addNode('documentationComment', node.documentationComment);
-    _addFormalParameter(properties, node);
-  }
-
-  void _addSingleStringLiteral(
-      _Properties properties, SingleStringLiteral node) {
-    _addStringLiteral(properties, node);
-  }
-
-  void _addStatement(_Properties properties, Statement node) {
-    _addAstNode(properties, node);
-  }
-
-  void _addStringLiteral(_Properties properties, StringLiteral node) {
-    properties.addRaw('stringValue', node.stringValue);
-    _addLiteral(properties, node);
-  }
-
-  void _addSwitchMember(_Properties properties, SwitchMember node) {
-    properties.addToken('keyword', node.keyword);
-    properties.addNodeList('labels', node.labels);
-    properties.addNodeList('statements', node.statements);
-    _addAstNode(properties, node);
-  }
-
-  void _addTypeAlias(_Properties properties, TypeAlias node) {
-    properties.addToken('semicolon', node.semicolon);
-    properties.addToken('typedefKeyword', node.typedefKeyword);
-    _addNamedCompilationUnitMember(properties, node);
-  }
-
-  void _addTypeAnnotation(_Properties properties, TypeAnnotation node) {
-    properties.addToken('question', node.question);
-    properties.addType('type', node.type);
-    _addAstNode(properties, node);
-  }
-
-  void _addTypedLiteral(_Properties properties, TypedLiteral node) {
-    properties.addToken('constKeyword', node.constKeyword);
-    properties.addNode('typeArguments', node.typeArguments);
-    _addLiteral(properties, node);
-  }
-
-  void _addUriBasedDirective(
-    _Properties properties,
-    UriBasedDirective node,
-  ) {
-    properties.addNode('uri', node.uri);
-    properties.addRaw('uriContent', node.uriContent);
-    properties.addElement('uriElement', node.uriElement);
-    properties.addSource('uriSource', node.uriSource);
-    _addDirective(properties, node);
+  /// Check that children entities of the [node] link to each other.
+  void _checkChildrenEntitiesLinking(AstNode node) {
+    Token? lastEnd;
+    for (var entity in node.childEntities) {
+      if (lastEnd != null) {
+        var begin = _entityBeginToken(entity);
+        expect(lastEnd.next, begin);
+        expect(begin.previous, lastEnd);
+      }
+      lastEnd = _entityEndToken(entity);
+    }
   }
 
   String _referenceToString(Reference reference) {
@@ -1830,7 +1335,7 @@
 
   /// TODO(scheglov) Make [type] non-nullable?
   String? _typeStr(DartType? type) {
-    return type?.getDisplayString(withNullability: _withNullability);
+    return type?.getDisplayString(withNullability: true);
   }
 
   void _withIndent(void Function() f) {
@@ -1841,9 +1346,11 @@
   }
 
   void _writeElement(String name, Element? element) {
-    _sink.write(_indent);
-    _sink.write('$name: ');
-    _writeElement0(element);
+    if (_withResolution) {
+      _sink.write(_indent);
+      _sink.write('$name: ');
+      _writeElement0(element);
+    }
   }
 
   void _writeElement0(Element? element) {
@@ -1854,9 +1361,16 @@
       _sink.writeln(_nameOfMemberClass(element));
       _withIndent(() {
         _writeElement('base', element.declaration);
+
+        if (element.isLegacy) {
+          _writelnWithIndent('isLegacy: true');
+        }
+
         var map = element.substitution.map;
-        var mapStr = _substitutionMapStr(map);
-        _writelnWithIndent('substitution: $mapStr');
+        if (map.isNotEmpty) {
+          var mapStr = _substitutionMapStr(map);
+          _writelnWithIndent('substitution: $mapStr');
+        }
       });
     } else if (element is MultiplyDefinedElement) {
       _sink.writeln('<null>');
@@ -1898,6 +1412,24 @@
     _sink.writeln(line);
   }
 
+  void _writeNamedChildEntities(AstNode node) {
+    node as AstNodeImpl;
+    for (var entity in node.namedChildEntities) {
+      var value = entity.value;
+      if (value is Token) {
+        _writeToken(entity.name, value);
+      } else if (value is AstNode) {
+        _writeNode(entity.name, value);
+      } else if (value is List<Token>) {
+        _writeTokenList(entity.name, value);
+      } else if (value is List<AstNode>) {
+        _writeNodeList(entity.name, value);
+      } else {
+        throw UnimplementedError('(${value.runtimeType}) $value');
+      }
+    }
+  }
+
   void _writeNextCodeLine(AstNode node) {
     var nextCodeLine = _codeLinesProvider?.nextLine(node.offset);
     if (nextCodeLine != null) {
@@ -1915,7 +1447,7 @@
     }
   }
 
-  void _writeNodeList(String name, NodeList nodeList) {
+  void _writeNodeList(String name, List<AstNode> nodeList) {
     if (nodeList.isNotEmpty) {
       _writelnWithIndent(name);
       _withIndent(() {
@@ -1935,7 +1467,8 @@
     _writelnWithIndent('parameters');
     _withIndent(() {
       for (var parameter in parameters) {
-        _writelnWithIndent(parameter.name);
+        var name = parameter.name;
+        _writelnWithIndent(name.isNotEmpty ? name : '<empty>');
         _withIndent(() {
           _writeParameterKind(parameter);
           _writeType('type', parameter.type);
@@ -1958,12 +1491,8 @@
     }
   }
 
-  void _writeProperties(_Properties container) {
-    var properties = container.properties;
-    properties.sort((a, b) => a.name.compareTo(b.name));
-    for (var property in properties) {
-      property.write(this);
-    }
+  void _writeRaw(String name, Object? value) {
+    _writelnWithIndent('$name: $value');
   }
 
   void _writeSource(String name, Source? source) {
@@ -1976,11 +1505,16 @@
 
   void _writeToken(String name, Token? token) {
     if (token != null) {
+      _sink.write(_indent);
+      _sink.write('$name: ');
+      _sink.write(token.lexeme.isNotEmpty ? token : '<empty>');
       if (_withOffsets) {
-        _writelnWithIndent('$name: $token @${token.offset}');
-      } else {
-        _writelnWithIndent('$name: $token');
+        _sink.write(' @${token.offset}');
       }
+      if (token.isSynthetic) {
+        _sink.write(' <synthetic>');
+      }
+      _sink.writeln();
     }
   }
 
@@ -2000,8 +1534,10 @@
   }
 
   void _writeType(String name, DartType? type) {
-    var typeStr = _typeStr(type);
-    _writelnWithIndent('$name: $typeStr');
+    if (_withResolution) {
+      var typeStr = _typeStr(type);
+      _writelnWithIndent('$name: $typeStr');
+    }
   }
 
   void _writeTypeList(String name, List<DartType>? types) {
@@ -2016,192 +1552,27 @@
     }
   }
 
+  static Token _entityBeginToken(SyntacticEntity entity) {
+    if (entity is Token) {
+      return entity;
+    } else if (entity is AstNode) {
+      return entity.beginToken;
+    } else {
+      throw UnimplementedError('(${entity.runtimeType}) $entity');
+    }
+  }
+
+  static Token _entityEndToken(SyntacticEntity entity) {
+    if (entity is Token) {
+      return entity;
+    } else if (entity is AstNode) {
+      return entity.endToken;
+    } else {
+      throw UnimplementedError('(${entity.runtimeType}) $entity');
+    }
+  }
+
   static String _nameOfMemberClass(Member member) {
     return '${member.runtimeType}';
   }
 }
-
-class _ElementProperty extends _Property {
-  final Element? element;
-
-  _ElementProperty(String name, this.element) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeElement(name, element);
-  }
-}
-
-class _GenericFunctionTypeElementProperty extends _Property {
-  final GenericFunctionTypeElement? element;
-
-  _GenericFunctionTypeElementProperty(String name, this.element) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeGenericFunctionTypeElement(name, element);
-  }
-}
-
-class _NodeListProperty extends _Property {
-  final NodeList nodeList;
-
-  _NodeListProperty(String name, this.nodeList) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeNodeList(name, nodeList);
-  }
-}
-
-class _NodeProperty extends _Property {
-  final AstNode? node;
-
-  _NodeProperty(String name, this.node) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeNode(name, node);
-  }
-}
-
-class _Properties {
-  final properties = <_Property>[];
-
-  void addElement(String name, Element? element) {
-    properties.add(
-      _ElementProperty(name, element),
-    );
-  }
-
-  void addGenericFunctionTypeElement(
-    String name,
-    GenericFunctionTypeElement? element,
-  ) {
-    properties.add(
-      _GenericFunctionTypeElementProperty(name, element),
-    );
-  }
-
-  void addNode(String name, AstNode? node) {
-    properties.add(
-      _NodeProperty(name, node),
-    );
-  }
-
-  void addNodeList(String name, NodeList nodeList) {
-    properties.add(
-      _NodeListProperty(name, nodeList),
-    );
-  }
-
-  void addRaw(String name, Object? value) {
-    properties.add(
-      _RawProperty(name, value),
-    );
-  }
-
-  void addSource(String name, Source? source) {
-    properties.add(
-      _SourceProperty(name, source),
-    );
-  }
-
-  void addToken(String name, Token? token) {
-    properties.add(
-      _TokenProperty(name, token),
-    );
-  }
-
-  void addTokenList(String name, List<Token> tokens) {
-    properties.add(
-      _TokenListProperty(name, tokens),
-    );
-  }
-
-  void addType(String name, DartType? type) {
-    properties.add(
-      _TypeProperty(name, type),
-    );
-  }
-
-  void addTypeList(String name, List<DartType>? types) {
-    properties.add(
-      _TypeListProperty(name, types),
-    );
-  }
-}
-
-abstract class _Property {
-  final String name;
-
-  _Property(this.name);
-
-  void write(ResolvedAstPrinter printer);
-}
-
-class _RawProperty extends _Property {
-  final Object? value;
-
-  _RawProperty(String name, this.value) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writelnWithIndent('$name: $value');
-  }
-}
-
-class _SourceProperty extends _Property {
-  final Source? source;
-
-  _SourceProperty(String name, this.source) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeSource(name, source);
-  }
-}
-
-class _TokenListProperty extends _Property {
-  final List<Token> tokens;
-
-  _TokenListProperty(String name, this.tokens) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeTokenList(name, tokens);
-  }
-}
-
-class _TokenProperty extends _Property {
-  final Token? token;
-
-  _TokenProperty(String name, this.token) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeToken(name, token);
-  }
-}
-
-class _TypeListProperty extends _Property {
-  final List<DartType>? types;
-
-  _TypeListProperty(String name, this.types) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeTypeList(name, types);
-  }
-}
-
-class _TypeProperty extends _Property {
-  final DartType? type;
-
-  _TypeProperty(String name, this.type) : super(name);
-
-  @override
-  void write(ResolvedAstPrinter printer) {
-    printer._writeType(name, type);
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index 3c1a267..60ab80c 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -22,6 +22,7 @@
 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';
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 2610746..26542c5 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -8,17 +8,16 @@
 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/analysis/experiments.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:pub_semver/pub_semver.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.
@@ -85,27 +84,6 @@
       {bool allowErrors = false});
 }
 
-class FeatureSets {
-  static final FeatureSet language_2_9 = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.9.0'),
-    flags: [],
-  );
-
-  static final FeatureSet language_2_12 = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.12.0'),
-    flags: [],
-  );
-
-  static final FeatureSet latestWithExperiments = FeatureSet.fromEnableFlags2(
-    sdkLanguageVersion: Version.parse('2.16.0'),
-    flags: [
-      EnableString.constructor_tearoffs,
-      EnableString.enhanced_enums,
-      EnableString.super_parameters,
-    ],
-  );
-}
-
 /// Mixin containing test cases exercising summary resynthesis.  Intended to be
 /// applied to a class implementing [AbstractResynthesizeTest].
 mixin ResynthesizeTestCases on AbstractResynthesizeTest {
@@ -792,11 +770,12 @@
             constantInitializers
               AssertInitializer
                 assertKeyword: assert @29
+                leftParenthesis: ( @35
                 condition: BinaryExpression
                   leftOperand: SimpleIdentifier
+                    token: x @36
                     staticElement: x@24
                     staticType: int
-                    token: x @36
                   operator: >= @38
                   rightOperand: IntegerLiteral
                     literal: 42 @41
@@ -804,7 +783,6 @@
                   staticElement: dart:core::@class::num::@method::>=
                   staticInvokeType: bool Function(num)
                   staticType: bool
-                leftParenthesis: ( @35
                 rightParenthesis: ) @43
 ''');
   }
@@ -828,11 +806,12 @@
             constantInitializers
               AssertInitializer
                 assertKeyword: assert @29
+                leftParenthesis: ( @35
                 condition: BinaryExpression
                   leftOperand: SimpleIdentifier
+                    token: x @36
                     staticElement: x@24
                     staticType: int
-                    token: x @36
                   operator: >= @38
                   rightOperand: IntegerLiteral
                     literal: 42 @41
@@ -840,7 +819,7 @@
                   staticElement: dart:core::@class::num::@method::>=
                   staticInvokeType: bool Function(num)
                   staticType: bool
-                leftParenthesis: ( @35
+                comma: , @43
                 message: SimpleStringLiteral
                   literal: 'foo' @45
                 rightParenthesis: ) @50
@@ -866,14 +845,14 @@
           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
-                fieldName: SimpleIdentifier
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                  token: x @35
         accessors
           synthetic get x @-1
             returnType: dynamic
@@ -901,21 +880,21 @@
           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
-                  methodName: SimpleIdentifier
-                    staticElement: self::@function::foo
-                    staticType: int Function()
-                    token: foo @39
                   staticInvokeType: int Function()
                   staticType: int
-                fieldName: SimpleIdentifier
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                  token: x @35
         accessors
           synthetic get x @-1
             returnType: dynamic
@@ -951,15 +930,15 @@
                     staticType: int
             constantInitializers
               ConstructorFieldInitializer
-                equals: = @54
-                expression: SimpleIdentifier
-                  staticElement: self::@class::A::@constructor::•::@parameter::f
-                  staticType: int
-                  token: f @56
                 fieldName: SimpleIdentifier
+                  token: _f @51
                   staticElement: self::@class::A::@field::_f
                   staticType: null
-                  token: _f @51
+                equals: = @54
+                expression: SimpleIdentifier
+                  token: f @56
+                  staticElement: self::@class::A::@constructor::•::@parameter::f
+                  staticType: int
         accessors
           synthetic get _f @-1
             returnType: int
@@ -988,6 +967,10 @@
                 type: int
             constantInitializers
               ConstructorFieldInitializer
+                fieldName: SimpleIdentifier
+                  token: x @40
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
                 equals: = @42
                 expression: BinaryExpression
                   leftOperand: IntegerLiteral
@@ -995,16 +978,12 @@
                     staticType: int
                   operator: + @46
                   rightOperand: SimpleIdentifier
+                    token: p @48
                     staticElement: p@35
                     staticType: int
-                    token: p @48
                   staticElement: dart:core::@class::num::@method::+
                   staticInvokeType: num Function(num)
                   staticType: int
-                fieldName: SimpleIdentifier
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                  token: x @40
         accessors
           synthetic get x @-1
             returnType: dynamic
@@ -1043,41 +1022,41 @@
             nameEnd: 71
             constantInitializers
               RedirectingConstructorInvocation
+                thisKeyword: this @79
                 argumentList: ArgumentList
+                  leftParenthesis: ( @83
                   arguments
                     InstanceCreationExpression
-                      argumentList: ArgumentList
-                        leftParenthesis: ( @97
-                        rightParenthesis: ) @98
                       constructorName: ConstructorName
-                        staticElement: ConstructorMember
-                          base: self::@class::A::@constructor::•
-                          substitution: {T: dynamic Function()}
                         type: NamedType
                           name: SimpleIdentifier
+                            token: A @84
                             staticElement: self::@class::A
                             staticType: null
-                            token: A @84
-                          type: A<dynamic Function()>
                           typeArguments: TypeArgumentList
+                            leftBracket: < @85
                             arguments
                               GenericFunctionType
-                                declaredElement: GenericFunctionTypeElement
-                                  parameters
-                                  returnType: dynamic
-                                  type: dynamic Function()
                                 functionKeyword: Function @86
                                 parameters: FormalParameterList
                                   leftParenthesis: ( @94
                                   rightParenthesis: ) @95
+                                declaredElement: GenericFunctionTypeElement
+                                  parameters
+                                  returnType: dynamic
+                                  type: dynamic Function()
                                 type: dynamic Function()
-                            leftBracket: < @85
                             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()>
-                  leftParenthesis: ( @83
                   rightParenthesis: ) @99
                 staticElement: self::@class::B::@constructor::•
-                thisKeyword: this @79
             redirectedConstructor: self::@class::B::@constructor::•
 ''');
   }
@@ -1107,17 +1086,17 @@
           const @72
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @78
                 argumentList: ArgumentList
+                  leftParenthesis: ( @83
                   arguments
                     ListLiteral
                       constKeyword: const @84
                       leftBracket: [ @90
                       rightBracket: ] @91
                       staticType: List<String>
-                  leftParenthesis: ( @83
                   rightParenthesis: ) @92
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @78
             superConstructor: self::@class::A::@constructor::•
 ''');
   }
@@ -1149,20 +1128,20 @@
           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
-                  leftParenthesis: ( @77
                   rightParenthesis: ) @80
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::A::@constructor::aaa
-                  staticType: null
-                  token: aaa @74
-                period: . @73
                 staticElement: self::@class::A::@constructor::aaa
-                superKeyword: super @68
             superConstructor: self::@class::A::@constructor::aaa
 ''');
   }
@@ -1191,16 +1170,16 @@
           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
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::A::@constructor::_
-                  staticType: null
-                  token: _ @67
-                period: . @66
                 staticElement: self::@class::A::@constructor::_
-                superKeyword: super @61
             superConstructor: self::@class::A::@constructor::_
 ''');
   }
@@ -1234,7 +1213,14 @@
           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
@@ -1242,21 +1228,15 @@
                     NamedExpression
                       name: Label
                         label: SimpleIdentifier
+                          token: b @86
                           staticElement: self::@class::A::@constructor::aaa::@parameter::b
                           staticType: null
-                          token: b @86
+                        colon: : @87
                       expression: IntegerLiteral
                         literal: 2 @89
                         staticType: int
-                  leftParenthesis: ( @82
                   rightParenthesis: ) @90
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::A::@constructor::aaa
-                  staticType: null
-                  token: aaa @79
-                period: . @78
                 staticElement: self::@class::A::@constructor::aaa
-                superKeyword: super @73
             superConstructor: self::@class::A::@constructor::aaa
 ''');
   }
@@ -1288,15 +1268,15 @@
             nameEnd: 63
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @68
                 argumentList: ArgumentList
+                  leftParenthesis: ( @73
                   arguments
                     IntegerLiteral
                       literal: 42 @74
                       staticType: int
-                  leftParenthesis: ( @73
                   rightParenthesis: ) @76
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @68
             superConstructor: self::@class::A::@constructor::•
 ''');
   }
@@ -1323,17 +1303,17 @@
             nameEnd: 57
             constantInitializers
               RedirectingConstructorInvocation
+                thisKeyword: this @62
                 argumentList: ArgumentList
+                  leftParenthesis: ( @66
                   arguments
                     ListLiteral
                       constKeyword: const @67
                       leftBracket: [ @73
                       rightBracket: ] @74
                       staticType: List<String>
-                  leftParenthesis: ( @66
                   rightParenthesis: ) @75
                 staticElement: self::@class::A::@constructor::•
-                thisKeyword: this @62
             redirectedConstructor: self::@class::A::@constructor::•
 ''');
   }
@@ -1354,22 +1334,22 @@
           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
-                  leftParenthesis: ( @34
                   rightParenthesis: ) @43
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                  token: named @29
-                period: . @28
                 staticElement: self::@class::C::@constructor::named
-                thisKeyword: this @24
             redirectedConstructor: self::@class::C::@constructor::named
           const named @56
             periodOffset: 55
@@ -1398,7 +1378,14 @@
           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
@@ -1406,21 +1393,15 @@
                     NamedExpression
                       name: Label
                         label: SimpleIdentifier
+                          token: b @38
                           staticElement: self::@class::C::@constructor::named::@parameter::b
                           staticType: null
-                          token: b @38
+                        colon: : @39
                       expression: IntegerLiteral
                         literal: 2 @41
                         staticType: int
-                  leftParenthesis: ( @34
                   rightParenthesis: ) @42
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                  token: named @29
-                period: . @28
                 staticElement: self::@class::C::@constructor::named
-                thisKeyword: this @24
             redirectedConstructor: self::@class::C::@constructor::named
           const named @55
             periodOffset: 54
@@ -1451,17 +1432,17 @@
             nameEnd: 25
             constantInitializers
               RedirectingConstructorInvocation
+                thisKeyword: this @30
                 argumentList: ArgumentList
+                  leftParenthesis: ( @34
                   arguments
                     IntegerLiteral
                       literal: 1 @35
                       staticType: int
                     SimpleStringLiteral
                       literal: 'bbb' @38
-                  leftParenthesis: ( @34
                   rightParenthesis: ) @43
                 staticElement: self::@class::C::@constructor::•
-                thisKeyword: this @30
             redirectedConstructor: self::@class::C::@constructor::•
           const @54
             parameters
@@ -2595,16 +2576,16 @@
           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
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                  token: named @48
-                period: . @47
                 staticElement: self::@class::C::@constructor::named
-                thisKeyword: this @43
             redirectedConstructor: self::@class::C::@constructor::named
 ''');
   }
@@ -2631,16 +2612,16 @@
           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
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::C::@constructor::named
-                  staticType: null
-                  token: named @51
-                period: . @50
                 staticElement: self::@class::C::@constructor::named
-                thisKeyword: this @46
             redirectedConstructor: self::@class::C::@constructor::named
 ''');
   }
@@ -2685,11 +2666,11 @@
             nameEnd: 38
             constantInitializers
               RedirectingConstructorInvocation
+                thisKeyword: this @43
                 argumentList: ArgumentList
                   leftParenthesis: ( @47
                   rightParenthesis: ) @48
                 staticElement: self::@class::C::@constructor::•
-                thisKeyword: this @43
             redirectedConstructor: self::@class::C::@constructor::•
 ''');
   }
@@ -2716,11 +2697,11 @@
             nameEnd: 41
             constantInitializers
               RedirectingConstructorInvocation
+                thisKeyword: this @46
                 argumentList: ArgumentList
                   leftParenthesis: ( @50
                   rightParenthesis: ) @51
                 staticElement: self::@class::C::@constructor::•
-                thisKeyword: this @46
             redirectedConstructor: self::@class::C::@constructor::•
 ''');
   }
@@ -2909,25 +2890,25 @@
           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
-                  constructorName: ConstructorName
-                    staticElement: self::@class::D::@constructor::•
-                    type: NamedType
-                      name: SimpleIdentifier
-                        staticElement: self::@class::D
-                        staticType: null
-                        token: D @45
-                      type: D
-                  keyword: const @39
                   staticType: D
-                fieldName: SimpleIdentifier
-                  staticElement: self::@class::C::@field::x
-                  staticType: null
-                  token: x @35
         accessors
           synthetic get x @-1
             returnType: dynamic
@@ -2939,25 +2920,25 @@
           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
-                  constructorName: ConstructorName
-                    staticElement: self::@class::C::@constructor::•
-                    type: NamedType
-                      name: SimpleIdentifier
-                        staticElement: self::@class::C
-                        staticType: null
-                        token: C @97
-                      type: C
-                  keyword: const @91
                   staticType: C
-                fieldName: SimpleIdentifier
-                  staticElement: self::@class::D::@field::x
-                  staticType: null
-                  token: x @87
         accessors
           synthetic get x @-1
             returnType: dynamic
@@ -3260,83 +3241,83 @@
         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
-            atSign: @ @28
             element: self::@class::Annotation::@constructor::•
-            name: SimpleIdentifier
-              staticElement: self::@class::Annotation
-              staticType: null
-              token: Annotation @29
         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
-            atSign: @ @91
             element: self::@class::Annotation::@constructor::named
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: self::@class::Annotation::@constructor::named
-                staticType: null
-                token: named @103
-              period: . @102
-              prefix: SimpleIdentifier
-                staticElement: self::@class::Annotation
-                staticType: null
-                token: Annotation @92
-              staticElement: self::@class::Annotation::@constructor::named
-              staticType: null
         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
-            atSign: @ @137
             element: self::@class::Annotation::@constructor::•
-            name: SimpleIdentifier
-              staticElement: self::@class::Annotation
-              staticType: null
-              token: Annotation @138
         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
-            atSign: @ @213
             element: self::@class::Annotation::@constructor::•
-            name: SimpleIdentifier
-              staticElement: self::@class::Annotation
-              staticType: null
-              token: Annotation @214
         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
-            atSign: @ @279
             element: self::@class::Annotation::@constructor::•
-            name: SimpleIdentifier
-              staticElement: self::@class::Annotation
-              staticType: null
-              token: Annotation @280
         constructors
           synthetic @-1
       class Annotation @354
@@ -3556,22 +3537,40 @@
             type: A<int Function(double)>
             constantInitializer
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @81
-                  rightParenthesis: ) @82
+                keyword: const @50
                 constructorName: ConstructorName
-                  staticElement: ConstructorMember
-                    base: self::@class::A::@constructor::•
-                    substitution: {T: int Function(double)}
                   type: NamedType
                     name: SimpleIdentifier
+                      token: A @56
                       staticElement: self::@class::A
                       staticType: null
-                      token: A @56
-                    type: A<int Function(double)>
                     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
@@ -3579,34 +3578,15 @@
                                 type: double
                             returnType: int
                             type: int Function(double)
-                          functionKeyword: Function @62
-                          parameters: FormalParameterList
-                            leftParenthesis: ( @70
-                            parameters
-                              SimpleFormalParameter
-                                declaredElement: a@78
-                                declaredElementType: double
-                                identifier: SimpleIdentifier
-                                  staticElement: a@78
-                                  staticType: null
-                                  token: a @78
-                                type: NamedType
-                                  name: SimpleIdentifier
-                                    staticElement: dart:core::@class::double
-                                    staticType: null
-                                    token: double @71
-                                  type: double
-                            rightParenthesis: ) @79
-                          returnType: NamedType
-                            name: SimpleIdentifier
-                              staticElement: dart:core::@class::int
-                              staticType: null
-                              token: int @58
-                            type: int
                           type: int Function(double)
-                      leftBracket: < @57
                       rightBracket: > @80
-                keyword: const @50
+                    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
@@ -3869,12 +3849,12 @@
             type: List<int>
             constantInitializer
               ListLiteral
+                leftBracket: [ @111
                 elements
                   SimpleIdentifier
+                    token: a @112
                     staticElement: self::@getter::a
                     staticType: int
-                    token: a @112
-                leftBracket: [ @111
                 rightBracket: ] @113
                 staticType: List<int>
         constructors
@@ -6896,11 +6876,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @32
         constructors
@@ -6935,11 +6915,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @35
         constructors
@@ -6973,11 +6953,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @43
         constructors
@@ -7011,11 +6991,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @48
         constructors
@@ -7049,11 +7029,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @87
         constructors
@@ -7084,11 +7064,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::A::@constructor::•
       class A @42
         constructors
@@ -7130,11 +7110,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @39
         constructors
@@ -7168,11 +7148,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @29
         constructors
@@ -7203,11 +7183,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @26
         constructors
@@ -7249,25 +7229,25 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::•
-                superKeyword: super @0
             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
-                constructorName: SimpleIdentifier
-                  staticElement: package:test/a.dart::@class::Base::@constructor::named
-                  staticType: null
-                  token: named @-1
-                period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::named
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::named
 ''');
   }
@@ -7311,25 +7291,25 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::•
-                superKeyword: super @0
             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
-                constructorName: SimpleIdentifier
-                  staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
-                  staticType: null
-                  token: noArgs @-1
-                period: . @0
                 staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::noArgs
           synthetic requiredArg @-1
             parameters
@@ -7337,21 +7317,21 @@
                 type: dynamic
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: x@-1
-                      staticType: dynamic
-                      token: x @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: requiredArg @-1
                   staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
                   staticType: null
-                  token: requiredArg @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::requiredArg
           synthetic positionalArg @-1
             parameters
@@ -7363,21 +7343,21 @@
                     staticType: bool
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: x@-1
-                      staticType: bool
-                      token: x @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: positionalArg @-1
                   staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
                   staticType: null
-                  token: positionalArg @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg
           synthetic positionalArg2 @-1
             parameters
@@ -7389,21 +7369,21 @@
                     staticType: bool
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: x@-1
-                      staticType: bool
-                      token: x @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: positionalArg2 @-1
                   staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
                   staticType: null
-                  token: positionalArg2 @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg2
           synthetic namedArg @-1
             parameters
@@ -7415,21 +7395,21 @@
                     staticType: int
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: x@-1
-                      staticType: int
-                      token: x @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: namedArg @-1
                   staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
                   staticType: null
-                  token: namedArg @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg
           synthetic namedArg2 @-1
             parameters
@@ -7441,21 +7421,21 @@
                     staticType: bool
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: x@-1
-                      staticType: bool
-                      token: x @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: namedArg2 @-1
                   staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
                   staticType: null
-                  token: namedArg2 @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg2
 ''');
   }
@@ -7501,25 +7481,25 @@
                 type: List<dynamic>
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: t@-1
-                      staticType: dynamic
-                      token: t @-1
-                    SimpleIdentifier
-                      staticElement: l@-1
-                      staticType: List<dynamic>
-                      token: l @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: ctor @-1
                   staticElement: self::@class::Base::@constructor::ctor
                   staticType: null
-                  token: ctor @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: ConstructorMember
               base: self::@class::Base::@constructor::ctor
               substitution: {T: dynamic}
@@ -7570,25 +7550,25 @@
                 type: List<List<U>>
             constantInitializers
               SuperConstructorInvocation
-                argumentList: ArgumentList
-                  arguments
-                    SimpleIdentifier
-                      staticElement: t@-1
-                      staticType: List<U>
-                      token: t @-1
-                    SimpleIdentifier
-                      staticElement: l@-1
-                      staticType: List<List<U>>
-                      token: l @-1
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
+                superKeyword: super @0
+                period: . @0
                 constructorName: SimpleIdentifier
+                  token: ctor @-1
                   staticElement: self::@class::Base::@constructor::ctor
                   staticType: null
-                  token: ctor @-1
-                period: . @0
+                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
-                superKeyword: super @0
             superConstructor: ConstructorMember
               base: self::@class::Base::@constructor::ctor
               substitution: {T: List<U>}
@@ -7617,11 +7597,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @26
         constructors
@@ -7772,15 +7752,15 @@
       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
-            atSign: @ @68
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @69
         codeOffset: 68
         codeLength: 32
         constructors
@@ -7789,15 +7769,15 @@
         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
-            atSign: @ @102
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @103
         codeOffset: 102
         codeLength: 70
         constructors
@@ -7806,15 +7786,15 @@
         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
-            atSign: @ @204
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @205
         codeOffset: 174
         codeLength: 70
         constructors
@@ -7823,15 +7803,15 @@
         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
-            atSign: @ @261
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @262
         codeOffset: 261
         codeLength: 57
         constructors
@@ -7897,11 +7877,11 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
       class alias HasDocComment @91
         documentationComment: /// Comment 1.\n/// Comment 2.
         codeOffset: 55
@@ -7914,23 +7894,23 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
       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
-            atSign: @ @126
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @127
         codeOffset: 126
         codeLength: 49
         supertype: Object
@@ -7941,24 +7921,24 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
       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
-            atSign: @ @177
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @178
         codeOffset: 177
         codeLength: 87
         supertype: Object
@@ -7969,24 +7949,24 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
       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
-            atSign: @ @296
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @297
         codeOffset: 266
         codeLength: 87
         supertype: Object
@@ -7997,24 +7977,24 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
       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
-            atSign: @ @370
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @371
         codeOffset: 370
         codeLength: 74
         supertype: Object
@@ -8025,11 +8005,11 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
 ''',
         withCodeRanges: true);
   }
@@ -8091,15 +8071,15 @@
           hasAnnotation @106
             metadata
               Annotation
+                atSign: @ @92
+                name: SimpleIdentifier
+                  token: Object @93
+                  staticElement: dart:core::@class::Object
+                  staticType: null
                 arguments: ArgumentList
                   leftParenthesis: ( @99
                   rightParenthesis: ) @100
-                atSign: @ @92
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @93
             codeOffset: 92
             codeLength: 32
             periodOffset: 105
@@ -8108,15 +8088,15 @@
             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
-                atSign: @ @128
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @129
             codeOffset: 128
             codeLength: 74
             periodOffset: 175
@@ -8125,15 +8105,15 @@
             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
-                atSign: @ @240
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @241
             codeOffset: 206
             codeLength: 74
             periodOffset: 253
@@ -8142,15 +8122,15 @@
             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
-                atSign: @ @301
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @302
             codeOffset: 301
             codeLength: 59
             periodOffset: 331
@@ -8216,15 +8196,15 @@
           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
-                atSign: @ @145
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @146
             codeOffset: 145
             codeLength: 49
             periodOffset: 166
@@ -8233,15 +8213,15 @@
             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
-                atSign: @ @198
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @199
             codeOffset: 198
             codeLength: 91
             periodOffset: 253
@@ -8250,15 +8230,15 @@
             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
-                atSign: @ @327
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @328
             codeOffset: 293
             codeLength: 91
             periodOffset: 348
@@ -8267,15 +8247,15 @@
             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
-                atSign: @ @405
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @406
             codeOffset: 405
             codeLength: 76
             periodOffset: 443
@@ -8307,22 +8287,17 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 staticType: E
           static const enumConstant bbb @16
             codeOffset: 16
@@ -8330,22 +8305,17 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 staticType: E
           static const enumConstant ccc @21
             codeOffset: 21
@@ -8353,45 +8323,38 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: aaa @-1
                   SimpleIdentifier
+                    token: bbb @-1
                     staticElement: self::@enum::E::@getter::bbb
                     staticType: E
-                    token: bbb @-1
                   SimpleIdentifier
+                    token: ccc @-1
                     staticElement: self::@enum::E::@getter::ccc
                     staticType: E
-                    token: ccc @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -8403,11 +8366,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''',
         withCodeRanges: true);
   }
@@ -8464,15 +8422,15 @@
       HasAnnotation @118
         metadata
           Annotation
+            atSign: @ @98
+            name: SimpleIdentifier
+              token: Object @99
+              staticElement: dart:core::@class::Object
+              staticType: null
             arguments: ArgumentList
               leftParenthesis: ( @105
               rightParenthesis: ) @106
-            atSign: @ @98
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @99
         codeOffset: 98
         codeLength: 41
         extendedType: A
@@ -8480,15 +8438,15 @@
         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
-            atSign: @ @141
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @142
         codeOffset: 141
         codeLength: 79
         extendedType: A
@@ -8496,15 +8454,15 @@
         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
-            atSign: @ @252
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @253
         codeOffset: 222
         codeLength: 79
         extendedType: A
@@ -8512,15 +8470,15 @@
         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
-            atSign: @ @318
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @319
         codeOffset: 318
         codeLength: 66
         extendedType: A
@@ -8659,30 +8617,30 @@
           hasAnnotation @100
             metadata
               Annotation
+                atSign: @ @84
+                name: SimpleIdentifier
+                  token: Object @85
+                  staticElement: dart:core::@class::Object
+                  staticType: null
                 arguments: ArgumentList
                   leftParenthesis: ( @91
                   rightParenthesis: ) @92
-                atSign: @ @84
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @85
             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
-                atSign: @ @84
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @85
             codeOffset: 115
             codeLength: 14
             type: int
@@ -8690,15 +8648,15 @@
             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
-                atSign: @ @134
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @135
             codeOffset: 134
             codeLength: 71
             type: int
@@ -8706,15 +8664,15 @@
             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
-                atSign: @ @134
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @135
             codeOffset: 207
             codeLength: 22
             type: int
@@ -8722,15 +8680,15 @@
             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
-                atSign: @ @268
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @269
             codeOffset: 234
             codeLength: 71
             type: int
@@ -8738,15 +8696,15 @@
             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
-                atSign: @ @268
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @269
             codeOffset: 307
             codeLength: 22
             type: int
@@ -8754,15 +8712,15 @@
             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
-                atSign: @ @351
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @352
             codeOffset: 351
             codeLength: 56
             type: int
@@ -8770,15 +8728,15 @@
             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
-                atSign: @ @351
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @352
             codeOffset: 409
             codeLength: 24
             type: int
@@ -8903,15 +8861,15 @@
       hasAnnotation @85
         metadata
           Annotation
+            atSign: @ @70
+            name: SimpleIdentifier
+              token: Object @71
+              staticElement: dart:core::@class::Object
+              staticType: null
             arguments: ArgumentList
               leftParenthesis: ( @77
               rightParenthesis: ) @78
-            atSign: @ @70
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @71
         codeOffset: 70
         codeLength: 33
         returnType: void
@@ -8919,15 +8877,15 @@
         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
-            atSign: @ @105
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @106
         codeOffset: 105
         codeLength: 71
         returnType: void
@@ -8935,15 +8893,15 @@
         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
-            atSign: @ @208
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @209
         codeOffset: 178
         codeLength: 71
         returnType: void
@@ -8951,15 +8909,15 @@
         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
-            atSign: @ @266
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @267
         codeOffset: 266
         codeLength: 58
         returnType: void
@@ -9015,15 +8973,15 @@
       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
-            atSign: @ @72
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @73
         codeOffset: 72
         codeLength: 34
         aliasedType: dynamic Function()
@@ -9033,15 +8991,15 @@
         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
-            atSign: @ @108
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @109
         codeOffset: 108
         codeLength: 72
         aliasedType: dynamic Function()
@@ -9051,15 +9009,15 @@
         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
-            atSign: @ @212
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @213
         codeOffset: 182
         codeLength: 72
         aliasedType: dynamic Function()
@@ -9069,15 +9027,15 @@
         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
-            atSign: @ @271
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @272
         codeOffset: 271
         codeLength: 59
         aliasedType: dynamic Function()
@@ -9135,15 +9093,15 @@
       HasAnnotation @112
         metadata
           Annotation
+            atSign: @ @94
+            name: SimpleIdentifier
+              token: Object @95
+              staticElement: dart:core::@class::Object
+              staticType: null
             arguments: ArgumentList
               leftParenthesis: ( @101
               rightParenthesis: ) @102
-            atSign: @ @94
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @95
         codeOffset: 94
         codeLength: 45
         aliasedType: dynamic Function()
@@ -9153,15 +9111,15 @@
         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
-            atSign: @ @141
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @142
         codeOffset: 141
         codeLength: 83
         aliasedType: dynamic Function()
@@ -9171,15 +9129,15 @@
         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
-            atSign: @ @256
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @257
         codeOffset: 226
         codeLength: 83
         aliasedType: dynamic Function()
@@ -9189,15 +9147,15 @@
         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
-            atSign: @ @326
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @327
         codeOffset: 326
         codeLength: 70
         aliasedType: dynamic Function()
@@ -9259,15 +9217,15 @@
           hasAnnotation @107
             metadata
               Annotation
+                atSign: @ @90
+                name: SimpleIdentifier
+                  token: Object @91
+                  staticElement: dart:core::@class::Object
+                  staticType: null
                 arguments: ArgumentList
                   leftParenthesis: ( @97
                   rightParenthesis: ) @98
-                atSign: @ @90
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @91
             codeOffset: 90
             codeLength: 35
             returnType: void
@@ -9275,15 +9233,15 @@
             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
-                atSign: @ @129
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @130
             codeOffset: 129
             codeLength: 77
             returnType: void
@@ -9291,15 +9249,15 @@
             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
-                atSign: @ @244
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @245
             codeOffset: 210
             codeLength: 77
             returnType: void
@@ -9307,15 +9265,15 @@
             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
-                atSign: @ @308
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @309
             codeOffset: 308
             codeLength: 62
             returnType: void
@@ -9365,30 +9323,30 @@
             type: int
             metadata
               Annotation
+                atSign: @ @5
+                name: SimpleIdentifier
+                  token: Object @6
+                  staticElement: dart:core::@class::Object
+                  staticType: null
                 arguments: ArgumentList
                   leftParenthesis: ( @12
                   rightParenthesis: ) @13
-                atSign: @ @5
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @6
           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
-                atSign: @ @29
                 element: dart:core::@class::Object::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: dart:core::@class::Object
-                  staticType: null
-                  token: Object @30
         returnType: dynamic
 ''');
   }
@@ -9510,30 +9468,30 @@
       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
-            atSign: @ @66
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @67
         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
-            atSign: @ @66
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @67
         codeOffset: 95
         codeLength: 14
         type: int
@@ -9541,15 +9499,15 @@
         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
-            atSign: @ @112
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @113
         codeOffset: 112
         codeLength: 65
         type: int
@@ -9557,15 +9515,15 @@
         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
-            atSign: @ @112
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @113
         codeOffset: 179
         codeLength: 22
         type: int
@@ -9573,15 +9531,15 @@
         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
-            atSign: @ @234
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @235
         codeOffset: 204
         codeLength: 65
         type: int
@@ -9589,15 +9547,15 @@
         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
-            atSign: @ @234
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @235
         codeOffset: 271
         codeLength: 22
         type: int
@@ -9605,15 +9563,15 @@
         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
-            atSign: @ @311
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @312
         codeOffset: 311
         codeLength: 52
         type: int
@@ -9621,15 +9579,15 @@
         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
-            atSign: @ @311
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @312
         codeOffset: 365
         codeLength: 24
         type: int
@@ -9780,18 +9738,18 @@
         type: int
         constantInitializer
           AsExpression
-            asOperator: as @29
             expression: SimpleIdentifier
+              token: a @27
               staticElement: self::@getter::a
               staticType: num
-              token: a @27
-            staticType: int
+            asOperator: as @29
             type: NamedType
               name: SimpleIdentifier
+                token: int @32
                 staticElement: dart:core::@class::int
                 staticType: null
-                token: int @32
               type: int
+            staticType: int
     accessors
       synthetic static get a @-1
         returnType: num
@@ -9819,22 +9777,22 @@
         type: int
         constantInitializer
           ParenthesizedExpression
+            leftParenthesis: ( @23
             expression: AssignmentExpression
               leftHandSide: SimpleIdentifier
+                token: a @24
                 staticElement: <null>
                 staticType: null
-                token: a @24
               operator: += @26
-              readElement: self::@getter::a
-              readType: int
               rightHandSide: IntegerLiteral
                 literal: 1 @29
                 staticType: int
-              staticElement: dart:core::@class::num::@method::+
-              staticType: int
+              readElement: self::@getter::a
+              readType: int
               writeElement: self::@getter::a
               writeType: dynamic
-            leftParenthesis: ( @23
+              staticElement: dart:core::@class::num::@method::+
+              staticType: int
             rightParenthesis: ) @30
             staticType: int
     accessors
@@ -9857,29 +9815,29 @@
         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
-                  token: isEven @13
                 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
-                methodName: SimpleIdentifier
-                  staticElement: dart:core::@class::int::@method::abs
-                  staticType: int Function()
-                  token: abs @21
-                operator: .. @19
                 staticInvokeType: int Function()
                 staticType: int
             staticType: int
-            target: IntegerLiteral
-              literal: 0 @10
-              staticType: int
     accessors
       synthetic static get a @-1
         returnType: int
@@ -9909,30 +9867,30 @@
             type: int
             constantInitializer
               PrefixedIdentifier
-                identifier: SimpleIdentifier
-                  staticElement: self::@class::C::@getter::f1
-                  staticType: int
-                  token: f1 @63
-                period: . @62
                 prefix: SimpleIdentifier
+                  token: C @61
                   staticElement: self::@class::C
                   staticType: null
-                  token: C @61
+                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
-                identifier: SimpleIdentifier
-                  staticElement: self::@class::C::@getter::f2
-                  staticType: int
-                  token: f2 @74
-                period: . @73
                 prefix: SimpleIdentifier
+                  token: C @72
                   staticElement: self::@class::C
                   staticType: null
-                  token: C @72
+                period: . @73
+                identifier: SimpleIdentifier
+                  token: f2 @74
+                  staticElement: self::@class::C::@getter::f2
+                  staticType: int
                 staticElement: self::@class::C::@getter::f2
                 staticType: int
         constructors
@@ -9989,54 +9947,54 @@
         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
-              leftParenthesis: ( @96
               rightParenthesis: ) @98
-            constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::•
-                substitution: {T: int}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @95
-                type: C<int>
-            keyword: const @89
             staticType: C<int>
       static const y @114
         type: Object
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              arguments
-                IntegerLiteral
-                  literal: 0 @132
-                  staticType: int
-              leftParenthesis: ( @131
-              rightParenthesis: ) @133
+            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
-                token: named @126
-              period: . @125
               staticElement: ConstructorMember
                 base: self::@class::C::@constructor::named
                 substitution: {T: int}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @124
-                type: C<int>
-            keyword: const @118
+            argumentList: ArgumentList
+              leftParenthesis: ( @131
+              arguments
+                IntegerLiteral
+                  literal: 0 @132
+                  staticType: int
+              rightParenthesis: ) @133
             staticType: C<int>
     accessors
       synthetic static get x @-1
@@ -10081,18 +10039,18 @@
         constantInitializer
           ConstructorReference
             constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: self::@class::A::@constructor::named
-                staticType: null
-                token: named @37
-              period: . @36
-              staticElement: self::@class::A::@constructor::named
               type: NamedType
                 name: SimpleIdentifier
+                  token: A @35
                   staticElement: self::@class::A
                   staticType: null
-                  token: A @35
                 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
@@ -10142,9 +10100,9 @@
         constantInitializer
           FunctionReference
             function: SimpleIdentifier
+              token: f @48
               staticElement: self::@function::f
               staticType: void Function<T>(T)
-              token: f @48
             staticType: void Function(int)
             typeArgumentTypes
               int
@@ -10176,22 +10134,22 @@
         constantInitializer
           FunctionReference
             function: SimpleIdentifier
+              token: f @28
               staticElement: self::@function::f
               staticType: void Function<T>(T)
-              token: f @28
-            staticType: void Function(int)
-            typeArgumentTypes
-              int
             typeArguments: TypeArgumentList
+              leftBracket: < @29
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @30
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @30
                   type: int
-              leftBracket: < @29
               rightBracket: > @33
+            staticType: void Function(int)
+            typeArgumentTypes
+              int
     accessors
       synthetic static get v @-1
         returnType: void Function(int)
@@ -10220,11 +10178,11 @@
         type: List<int>
         constantInitializer
           ListLiteral
+            leftBracket: [ @10
             elements
               IntegerLiteral
                 literal: 0 @11
                 staticType: int
-            leftBracket: [ @10
             rightBracket: ] @12
             staticType: List<int>
       static const b @21
@@ -10237,20 +10195,20 @@
         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
-              token: b @40
-            leftBracket: [ @39
             rightBracket: ] @41
             staticElement: MethodMember
               base: dart:core::@class::List::@method::[]
               substitution: {E: int}
             staticType: int
-            target: SimpleIdentifier
-              staticElement: self::@getter::a
-              staticType: List<int>
-              token: a @38
     accessors
       synthetic static get a @-1
         returnType: List<int>
@@ -10315,48 +10273,48 @@
         type: List<P<dynamic>>
         constantInitializer
           ListLiteral
+            leftBracket: [ @140
             elements
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @146
-                  rightParenthesis: ) @147
                 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}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@class::P1
-                      staticType: null
-                      token: P1 @144
-                    type: P1<dynamic>
+                argumentList: ArgumentList
+                  leftParenthesis: ( @146
+                  rightParenthesis: ) @147
                 staticType: P1<dynamic>
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @159
-                  rightParenthesis: ) @160
                 constructorName: ConstructorName
-                  staticElement: ConstructorMember
-                    base: self::@class::P2::@constructor::•
-                    substitution: {T: int}
                   type: NamedType
                     name: SimpleIdentifier
+                      token: P2 @152
                       staticElement: self::@class::P2
                       staticType: null
-                      token: P2 @152
-                    type: P2<int>
                     typeArguments: TypeArgumentList
+                      leftBracket: < @154
                       arguments
                         NamedType
                           name: SimpleIdentifier
+                            token: int @155
                             staticElement: dart:core::@class::int
                             staticType: null
-                            token: int @155
                           type: int
-                      leftBracket: < @154
                       rightBracket: > @158
+                    type: P2<int>
+                  staticElement: ConstructorMember
+                    base: self::@class::P2::@constructor::•
+                    substitution: {T: int}
+                argumentList: ArgumentList
+                  leftParenthesis: ( @159
+                  rightParenthesis: ) @160
                 staticType: P2<int>
-            leftBracket: [ @140
             rightBracket: ] @163
             staticType: List<P<dynamic>>
     accessors
@@ -10387,13 +10345,13 @@
                   staticType: int
                 operator: + @31
                 rightOperand: MethodInvocation
+                  methodName: SimpleIdentifier
+                    token: foo @33
+                    staticElement: self::@function::foo
+                    staticType: int Function()
                   argumentList: ArgumentList
                     leftParenthesis: ( @36
                     rightParenthesis: ) @37
-                  methodName: SimpleIdentifier
-                    staticElement: self::@function::foo
-                    staticType: int Function()
-                    token: foo @33
                   staticInvokeType: int Function()
                   staticType: int
                 staticElement: dart:core::@class::num::@method::+
@@ -10448,14 +10406,14 @@
         type: int Function()
         constantInitializer
           FunctionExpression
+            parameters: FormalParameterList
+              leftParenthesis: ( @10
+              rightParenthesis: ) @0
             body: BlockFunctionBody
               block: Block
                 leftBracket: { @0
                 rightBracket: } @25
             declaredElement: <null>
-            parameters: FormalParameterList
-              leftParenthesis: ( @10
-              rightParenthesis: ) @0
             staticType: null
     accessors
       synthetic static get v @-1
@@ -10476,14 +10434,14 @@
         constantInitializer
           BinaryExpression
             leftOperand: FunctionExpression
+              parameters: FormalParameterList
+                leftParenthesis: ( @10
+                rightParenthesis: ) @0
               body: BlockFunctionBody
                 block: Block
                   leftBracket: { @0
                   rightBracket: } @25
               declaredElement: <null>
-              parameters: FormalParameterList
-                leftParenthesis: ( @10
-                rightParenthesis: ) @0
               staticType: null
             operator: + @27
             rightOperand: IntegerLiteral
@@ -10526,13 +10484,13 @@
               staticType: int
             operator: + @12
             rightOperand: MethodInvocation
+              methodName: SimpleIdentifier
+                token: foo @14
+                staticElement: self::@function::foo
+                staticType: int Function()
               argumentList: ArgumentList
                 leftParenthesis: ( @17
                 rightParenthesis: ) @18
-              methodName: SimpleIdentifier
-                staticElement: self::@function::foo
-                staticType: int Function()
-                token: foo @14
               staticInvokeType: int Function()
               staticType: int
             staticElement: dart:core::@class::num::@method::+
@@ -10567,9 +10525,9 @@
         constantInitializer
           BinaryExpression
             leftOperand: SimpleIdentifier
+              token: a @32
               staticElement: self::@getter::a
               staticType: int
-              token: a @32
             operator: + @34
             rightOperand: IntegerLiteral
               literal: 5 @36
@@ -10616,49 +10574,49 @@
         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
-              leftParenthesis: ( @81
               rightParenthesis: ) @90
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: ConstructorMember
-                  base: self::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-                staticType: null
-                token: named @76
-              period: . @75
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::named
-                substitution: {K: int, V: String}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @61
-                type: C<int, String>
-                typeArguments: TypeArgumentList
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                        token: int @63
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                        token: String @68
-                      type: String
-                  leftBracket: < @62
-                  rightBracket: > @74
-            keyword: const @55
             staticType: C<int, String>
     accessors
       synthetic static get V @-1
@@ -10686,49 +10644,49 @@
         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
-              leftParenthesis: ( @53
               rightParenthesis: ) @62
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: ConstructorMember
-                  base: a.dart::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-                staticType: null
-                token: named @48
-              period: . @47
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::named
-                substitution: {K: int, V: String}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                  token: C @33
-                type: C<int, String>
-                typeArguments: TypeArgumentList
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                        token: int @35
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                        token: String @40
-                      type: String
-                  leftBracket: < @34
-                  rightBracket: > @46
-            keyword: const @27
             staticType: C<int, String>
     accessors
       synthetic static get V @-1
@@ -10756,57 +10714,57 @@
         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
-              leftParenthesis: ( @60
               rightParenthesis: ) @69
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: ConstructorMember
-                  base: a.dart::@class::C::@constructor::named
-                  substitution: {K: int, V: String}
-                staticType: null
-                token: named @55
-              period: . @54
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::named
-                substitution: {K: int, V: String}
-              type: NamedType
-                name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                    token: C @40
-                  period: . @39
-                  prefix: SimpleIdentifier
-                    staticElement: self::@prefix::p
-                    staticType: null
-                    token: p @38
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                type: C<int, String>
-                typeArguments: TypeArgumentList
-                  arguments
-                    NamedType
-                      name: SimpleIdentifier
-                        staticElement: dart:core::@class::int
-                        staticType: null
-                        token: int @42
-                      type: int
-                    NamedType
-                      name: SimpleIdentifier
-                        staticElement: dart:core::@class::String
-                        staticType: null
-                        token: String @47
-                      type: String
-                  leftBracket: < @41
-                  rightBracket: > @53
-            keyword: const @32
             staticType: C<int, String>
     accessors
       synthetic static get V @-1
@@ -10838,20 +10796,20 @@
         type: C<dynamic, dynamic>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @48
-              rightParenthesis: ) @49
+            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}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @47
-                type: C<dynamic, dynamic>
-            keyword: const @41
+            argumentList: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
             staticType: C<dynamic, dynamic>
     accessors
       synthetic static get V @-1
@@ -10883,36 +10841,36 @@
         type: C<int, String>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @61
-              rightParenthesis: ) @62
+            keyword: const @41
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: self::@class::C::@constructor::•
-                substitution: {K: int, V: String}
               type: NamedType
                 name: SimpleIdentifier
+                  token: C @47
                   staticElement: self::@class::C
                   staticType: null
-                  token: C @47
-                type: C<int, String>
                 typeArguments: TypeArgumentList
+                  leftBracket: < @48
                   arguments
                     NamedType
                       name: SimpleIdentifier
+                        token: int @49
                         staticElement: dart:core::@class::int
                         staticType: null
-                        token: int @49
                       type: int
                     NamedType
                       name: SimpleIdentifier
+                        token: String @54
                         staticElement: dart:core::@class::String
                         staticType: null
-                        token: String @54
                       type: String
-                  leftBracket: < @48
                   rightBracket: > @60
-            keyword: const @41
+                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
@@ -10940,36 +10898,36 @@
         type: C<int, String>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
+            keyword: const @27
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::•
-                substitution: {K: int, V: String}
               type: NamedType
                 name: SimpleIdentifier
+                  token: C @33
                   staticElement: a.dart::@class::C
                   staticType: null
-                  token: C @33
-                type: C<int, String>
                 typeArguments: TypeArgumentList
+                  leftBracket: < @34
                   arguments
                     NamedType
                       name: SimpleIdentifier
+                        token: int @35
                         staticElement: dart:core::@class::int
                         staticType: null
-                        token: int @35
                       type: int
                     NamedType
                       name: SimpleIdentifier
+                        token: String @40
                         staticElement: dart:core::@class::String
                         staticType: null
-                        token: String @40
                       type: String
-                  leftBracket: < @34
                   rightBracket: > @46
-            keyword: const @27
+                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
@@ -10997,44 +10955,44 @@
         type: C<int, String>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @54
-              rightParenthesis: ) @55
+            keyword: const @32
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: a.dart::@class::C::@constructor::•
-                substitution: {K: int, V: String}
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                    token: C @40
-                  period: . @39
                   prefix: SimpleIdentifier
+                    token: p @38
                     staticElement: self::@prefix::p
                     staticType: null
-                    token: p @38
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: a.dart::@class::C
+                    staticType: null
                   staticElement: a.dart::@class::C
                   staticType: null
-                type: C<int, String>
                 typeArguments: TypeArgumentList
+                  leftBracket: < @41
                   arguments
                     NamedType
                       name: SimpleIdentifier
+                        token: int @42
                         staticElement: dart:core::@class::int
                         staticType: null
-                        token: int @42
                       type: int
                     NamedType
                       name: SimpleIdentifier
+                        token: String @47
                         staticElement: dart:core::@class::String
                         staticType: null
-                        token: String @47
                       type: String
-                  leftBracket: < @41
                   rightBracket: > @53
-            keyword: const @32
+                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
@@ -11074,7 +11032,22 @@
         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
@@ -11088,36 +11061,23 @@
                 NamedExpression
                   name: Label
                     label: SimpleIdentifier
+                      token: d @109
                       staticElement: self::@class::C::@constructor::named::@parameter::d
                       staticType: null
-                      token: d @109
+                    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
-                      token: e @119
+                    colon: : @120
                   expression: DoubleLiteral
                     literal: 3.4 @122
                     staticType: double
-              leftParenthesis: ( @96
               rightParenthesis: ) @125
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: self::@class::C::@constructor::named
-                staticType: null
-                token: named @91
-              period: . @90
-              staticElement: self::@class::C::@constructor::named
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @89
-                type: C
-            keyword: const @83
             staticType: C
     accessors
       synthetic static get V @-1
@@ -11145,23 +11105,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
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: a.dart::@class::C::@constructor::named
-                staticType: null
-                token: named @35
-              period: . @34
-              staticElement: a.dart::@class::C::@constructor::named
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                  token: C @33
-                type: C
-            keyword: const @27
             staticType: C
     accessors
       synthetic static get V @-1
@@ -11189,31 +11149,31 @@
         type: C
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
+            keyword: const @32
             constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: a.dart::@class::C::@constructor::named
-                staticType: null
-                token: named @42
-              period: . @41
-              staticElement: a.dart::@class::C::@constructor::named
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                    token: C @40
-                  period: . @39
                   prefix: SimpleIdentifier
+                    token: p @38
                     staticElement: self::@prefix::p
                     staticType: null
-                    token: p @38
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: a.dart::@class::C
+                    staticType: null
                   staticElement: a.dart::@class::C
                   staticType: null
                 type: C
-            keyword: const @32
+              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
@@ -11238,23 +11198,23 @@
         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
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: named @29
-              period: . @28
-              staticElement: <null>
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @27
-                type: C
-            keyword: const @21
             staticType: C
     accessors
       synthetic static get V @-1
@@ -11274,26 +11234,26 @@
         type: dynamic
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @23
-              rightParenthesis: ) @24
+            keyword: const @10
             constructorName: ConstructorName
-              staticElement: <null>
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: named @18
-                  period: . @17
                   prefix: SimpleIdentifier
+                    token: C @16
                     staticElement: <null>
                     staticType: null
-                    token: C @16
+                  period: . @17
+                  identifier: SimpleIdentifier
+                    token: named @18
+                    staticElement: <null>
+                    staticType: null
                   staticElement: <null>
                   staticType: null
                 type: dynamic
-            keyword: const @10
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @23
+              rightParenthesis: ) @24
             staticType: dynamic
     accessors
       synthetic static get V @-1
@@ -11320,31 +11280,31 @@
         type: C
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
+            keyword: const @32
             constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: named @42
-              period: . @41
-              staticElement: <null>
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                    token: C @40
-                  period: . @39
                   prefix: SimpleIdentifier
+                    token: p @38
                     staticElement: self::@prefix::p
                     staticType: null
-                    token: p @38
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: a.dart::@class::C
+                    staticType: null
                   staticElement: a.dart::@class::C
                   staticType: null
                 type: C
-            keyword: const @32
+              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
@@ -11368,31 +11328,31 @@
         type: dynamic
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @47
-              rightParenthesis: ) @48
+            keyword: const @32
             constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: named @42
-              period: . @41
-              staticElement: <null>
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: C @40
-                  period: . @39
                   prefix: SimpleIdentifier
+                    token: p @38
                     staticElement: self::@prefix::p
                     staticType: null
-                    token: p @38
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: <null>
+                    staticType: null
                   staticElement: <null>
                   staticType: null
                 type: dynamic
-            keyword: const @32
+              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
@@ -11412,31 +11372,31 @@
         type: dynamic
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @25
-              rightParenthesis: ) @26
+            keyword: const @10
             constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: named @20
-              period: . @19
-              staticElement: <null>
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: C @18
-                  period: . @17
                   prefix: SimpleIdentifier
+                    token: p @16
                     staticElement: <null>
                     staticType: null
-                    token: p @16
+                  period: . @17
+                  identifier: SimpleIdentifier
+                    token: C @18
+                    staticElement: <null>
+                    staticType: null
                   staticElement: <null>
                   staticType: null
                 type: dynamic
-            keyword: const @10
+              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
@@ -11464,23 +11424,23 @@
         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
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: named @32
-              period: . @31
-              staticElement: <null>
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @30
-                type: C<dynamic>
-            keyword: const @24
             staticType: C<dynamic>
     accessors
       synthetic static get V @-1
@@ -11507,18 +11467,18 @@
         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
-            constructorName: ConstructorName
-              staticElement: self::@class::C::@constructor::•
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @41
-                type: C
-            keyword: const @35
             staticType: C
     accessors
       synthetic static get V @-1
@@ -11546,18 +11506,18 @@
         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
-            constructorName: ConstructorName
-              staticElement: a.dart::@class::C::@constructor::•
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                  token: C @33
-                type: C
-            keyword: const @27
             staticType: C
     accessors
       synthetic static get V @-1
@@ -11585,26 +11545,26 @@
         type: C
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @41
-              rightParenthesis: ) @42
+            keyword: const @32
             constructorName: ConstructorName
-              staticElement: a.dart::@class::C::@constructor::•
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: a.dart::@class::C
-                    staticType: null
-                    token: C @40
-                  period: . @39
                   prefix: SimpleIdentifier
+                    token: p @38
                     staticElement: self::@prefix::p
                     staticType: null
-                    token: p @38
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: a.dart::@class::C
+                    staticType: null
                   staticElement: a.dart::@class::C
                   staticType: null
                 type: C
-            keyword: const @32
+              staticElement: a.dart::@class::C::@constructor::•
+            argumentList: ArgumentList
+              leftParenthesis: ( @41
+              rightParenthesis: ) @42
             staticType: C
     accessors
       synthetic static get V @-1
@@ -11624,18 +11584,18 @@
         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
-            constructorName: ConstructorName
-              staticElement: <null>
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: <null>
-                  staticType: null
-                  token: C @16
-                type: dynamic
-            keyword: const @10
             staticType: dynamic
     accessors
       synthetic static get V @-1
@@ -11659,26 +11619,26 @@
         type: dynamic
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @41
-              rightParenthesis: ) @42
+            keyword: const @32
             constructorName: ConstructorName
-              staticElement: <null>
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: C @40
-                  period: . @39
                   prefix: SimpleIdentifier
+                    token: p @38
                     staticElement: self::@prefix::p
                     staticType: null
-                    token: p @38
+                  period: . @39
+                  identifier: SimpleIdentifier
+                    token: C @40
+                    staticElement: <null>
+                    staticType: null
                   staticElement: <null>
                   staticType: null
                 type: dynamic
-            keyword: const @32
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @41
+              rightParenthesis: ) @42
             staticType: dynamic
     accessors
       synthetic static get V @-1
@@ -11698,26 +11658,26 @@
         type: dynamic
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @19
-              rightParenthesis: ) @20
+            keyword: const @10
             constructorName: ConstructorName
-              staticElement: <null>
               type: NamedType
                 name: PrefixedIdentifier
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: C @18
-                  period: . @17
                   prefix: SimpleIdentifier
+                    token: p @16
                     staticElement: <null>
                     staticType: null
-                    token: p @16
+                  period: . @17
+                  identifier: SimpleIdentifier
+                    token: C @18
+                    staticElement: <null>
+                    staticType: null
                   staticElement: <null>
                   staticType: null
                 type: dynamic
-            keyword: const @10
+              staticElement: <null>
+            argumentList: ArgumentList
+              leftParenthesis: ( @19
+              rightParenthesis: ) @20
             staticType: dynamic
     accessors
       synthetic static get V @-1
@@ -11745,17 +11705,17 @@
         constantInitializer
           IsExpression
             expression: SimpleIdentifier
+              token: a @23
               staticElement: self::@getter::a
               staticType: int
-              token: a @23
             isOperator: is @25
-            staticType: bool
             type: NamedType
               name: SimpleIdentifier
+                token: int @28
                 staticElement: dart:core::@class::int
                 staticType: null
-                token: int @28
               type: int
+            staticType: bool
     accessors
       synthetic static get a @-1
         returnType: int
@@ -11792,24 +11752,24 @@
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @59
-            propertyName: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @60
-            staticType: int
             target: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: self::@class::C::@getter::F
-                staticType: String
-                token: F @58
-              period: . @57
               prefix: SimpleIdentifier
+                token: C @56
                 staticElement: self::@class::C
                 staticType: null
-                token: C @56
+              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
@@ -11836,24 +11796,24 @@
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @34
-            propertyName: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @35
-            staticType: int
             target: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: a.dart::@class::C::@getter::F
-                staticType: String
-                token: F @33
-              period: . @32
               prefix: SimpleIdentifier
+                token: C @31
                 staticElement: a.dart::@class::C
                 staticType: null
-                token: C @31
+              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
@@ -11880,31 +11840,31 @@
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @41
-            propertyName: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @42
-            staticType: int
             target: PropertyAccess
-              operator: . @39
-              propertyName: SimpleIdentifier
-                staticElement: a.dart::@class::C::@getter::F
-                staticType: String
-                token: F @40
-              staticType: String
               target: PrefixedIdentifier
-                identifier: SimpleIdentifier
-                  staticElement: a.dart::@class::C
-                  staticType: null
-                  token: C @38
-                period: . @37
                 prefix: SimpleIdentifier
+                  token: p @36
                   staticElement: self::@prefix::p
                   staticType: null
-                  token: p @36
+                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
@@ -11923,14 +11883,14 @@
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @15
-            propertyName: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @16
-            staticType: int
             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
@@ -11955,15 +11915,15 @@
         type: int
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @36
-            period: . @35
             prefix: SimpleIdentifier
+              token: S @34
               staticElement: self::@getter::S
               staticType: String
-              token: S @34
+            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
@@ -11992,15 +11952,15 @@
         type: int
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @29
-            period: . @28
             prefix: SimpleIdentifier
+              token: S @27
               staticElement: a.dart::@getter::S
               staticType: String
-              token: S @27
+            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
@@ -12027,24 +11987,24 @@
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @35
-            propertyName: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @36
-            staticType: int
             target: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: a.dart::@getter::S
-                staticType: String
-                token: S @34
-              period: . @33
               prefix: SimpleIdentifier
+                token: p @32
                 staticElement: self::@prefix::p
                 staticType: null
-                token: p @32
+              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
@@ -12073,15 +12033,15 @@
         type: int Function()
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: self::@class::C::@method::length
-              staticType: int Function()
-              token: length @53
-            period: . @52
             prefix: SimpleIdentifier
+              token: C @51
               staticElement: self::@class::C
               staticType: null
-              token: C @51
+            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
@@ -12103,27 +12063,30 @@
         constantInitializer
           ListLiteral
             constKeyword: const @17
-            elements
-              IfElement
-                condition: BooleanLiteral
-                  literal: true @33
-                  staticType: bool
-                thenStatement: IntegerLiteral
-                  literal: 1 @39
-                  staticType: int
-            leftBracket: [ @28
-            rightBracket: ] @40
-            staticType: List<int>
             typeArguments: TypeArgumentList
+              leftBracket: < @23
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @24
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @24
                   type: int
-              leftBracket: < @23
               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
@@ -12143,30 +12106,34 @@
         constantInitializer
           ListLiteral
             constKeyword: const @17
-            elements
-              IfElement
-                condition: BooleanLiteral
-                  literal: true @33
-                  staticType: bool
-                elseStatement: IntegerLiteral
-                  literal: 2 @46
-                  staticType: int
-                thenStatement: IntegerLiteral
-                  literal: 1 @39
-                  staticType: int
-            leftBracket: [ @28
-            rightBracket: ] @47
-            staticType: List<int>
             typeArguments: TypeArgumentList
+              leftBracket: < @23
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @24
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @24
                   type: int
-              leftBracket: < @23
               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
@@ -12189,11 +12156,11 @@
         constantInitializer
           ListLiteral
             constKeyword: const @17
+            leftBracket: [ @23
             elements
               IntegerLiteral
                 literal: 1 @24
                 staticType: int
-            leftBracket: [ @23
             rightBracket: ] @25
             staticType: List<int>
     accessors
@@ -12215,40 +12182,40 @@
         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
-                  leftBracket: [ @37
                   rightBracket: ] @39
                   staticType: List<int>
-                  typeArguments: TypeArgumentList
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @33
-                        type: int
-                    leftBracket: < @32
-                    rightBracket: > @36
-                spreadOperator: ... @29
-            leftBracket: [ @28
             rightBracket: ] @40
             staticType: List<int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @24
-                  type: int
-              leftBracket: < @23
-              rightBracket: > @27
     accessors
       synthetic static get x @-1
         returnType: Object
@@ -12268,40 +12235,40 @@
         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
-                  leftBracket: [ @38
                   rightBracket: ] @40
                   staticType: List<int>
-                  typeArguments: TypeArgumentList
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @34
-                        type: int
-                    leftBracket: < @33
-                    rightBracket: > @37
-                spreadOperator: ...? @29
-            leftBracket: [ @28
             rightBracket: ] @41
             staticType: List<int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @24
-                  type: int
-              leftBracket: < @23
-              rightBracket: > @27
     accessors
       synthetic static get x @-1
         returnType: Object
@@ -12321,56 +12288,48 @@
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @17
-            elements
-              IfElement
-                condition: BooleanLiteral
-                  literal: true @38
-                  staticType: bool
-                thenStatement: SetOrMapLiteral
-                  key: IntegerLiteral
-                    literal: 1 @44
-                    staticType: int
-                  value: IntegerLiteral
-                    literal: 2 @47
-                    staticType: int
-            isMap: true
-            leftBracket: { @33
-            rightBracket: } @48
-            staticType: Map<int, int>
             typeArguments: TypeArgumentList
+              leftBracket: < @23
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @24
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @24
                   type: int
                 NamedType
                   name: SimpleIdentifier
+                    token: int @29
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @29
                   type: int
-              leftBracket: < @23
               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
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
-  test_const_map_if_else() async {
-    var library = await checkLibrary('''
-const Object x = const <int, int>{if (true) 1: 2 else 3: 4];
-''');
-    checkElementText(library, r'''
-const Object x = const <
-        int/*location: dart:core;int*/,
-        int/*location: dart:core;int*/>{if (true) 1: 2 else 3: 4}/*isMap*/;
-''');
-  }
-
   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
@@ -12387,17 +12346,18 @@
         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
-            isMap: true
-            leftBracket: { @23
             rightBracket: } @30
+            isMap: true
             staticType: Map<int, double>
     accessors
       synthetic static get x @-1
@@ -12418,58 +12378,59 @@
         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
-                  isMap: true
-                  leftBracket: { @47
                   rightBracket: } @52
+                  isMap: true
                   staticType: Map<int, int>
-                  typeArguments: TypeArgumentList
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @38
-                        type: int
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @43
-                        type: int
-                    leftBracket: < @37
-                    rightBracket: > @46
-                spreadOperator: ... @34
-            isMap: true
-            leftBracket: { @33
             rightBracket: } @53
+            isMap: true
             staticType: Map<int, int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @24
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @29
-                  type: int
-              leftBracket: < @23
-              rightBracket: > @32
     accessors
       synthetic static get x @-1
         returnType: Object
@@ -12489,58 +12450,59 @@
         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
-                  isMap: true
-                  leftBracket: { @48
                   rightBracket: } @53
+                  isMap: true
                   staticType: Map<int, int>
-                  typeArguments: TypeArgumentList
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @39
-                        type: int
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @44
-                        type: int
-                    leftBracket: < @38
-                    rightBracket: > @47
-                spreadOperator: ...? @34
-            isMap: true
-            leftBracket: { @33
             rightBracket: } @54
+            isMap: true
             staticType: Map<int, int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @24
-                  type: int
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @29
-                  type: int
-              leftBracket: < @23
-              rightBracket: > @32
     accessors
       synthetic static get x @-1
         returnType: Object
@@ -12560,31 +12522,31 @@
         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
-              leftParenthesis: ( @34
               rightParenthesis: ) @36
-            methodName: SimpleIdentifier
-              staticElement: self::@function::f
-              staticType: T Function<T>(T)
-              token: f @28
             staticInvokeType: int Function(int)
             staticType: int
             typeArgumentTypes
               int
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @30
-                  type: int
-              leftBracket: < @29
-              rightBracket: > @33
     accessors
       synthetic static get b @-1
         returnType: int
@@ -12622,9 +12584,9 @@
                 type: dynamic
                 constantInitializer
                   SimpleIdentifier
+                    token: foo @40
                     staticElement: self::@function::foo
                     staticType: int Function()
-                    token: foo @40
                 field: self::@class::C::@field::x
         accessors
           synthetic get x @-1
@@ -12834,16 +12796,16 @@
         constantInitializer
           PostfixExpression
             operand: SimpleIdentifier
+              token: a @23
               staticElement: <null>
               staticType: null
-              token: a @23
             operator: ++ @24
             readElement: self::@getter::a
             readType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticType: int
             writeElement: self::@getter::a
             writeType: dynamic
+            staticElement: dart:core::@class::num::@method::+
+            staticType: int
     accessors
       synthetic static get a @-1
         returnType: int
@@ -12872,9 +12834,9 @@
         constantInitializer
           PostfixExpression
             operand: SimpleIdentifier
+              token: a @28
               staticElement: self::@getter::a
               staticType: int?
-              token: a @28
             operator: ! @29
             staticElement: <null>
             staticType: int
@@ -12905,11 +12867,11 @@
         type: int
         constantInitializer
           PrefixExpression
+            operator: - @23
             operand: SimpleIdentifier
+              token: a @24
               staticElement: self::@getter::a
               staticType: int
-              token: a @24
-            operator: - @23
             staticElement: dart:core::@class::int::@method::unary-
             staticType: int
     accessors
@@ -12942,11 +12904,11 @@
         type: int
         constantInitializer
           PrefixExpression
+            operator: - @27
             operand: SimpleIdentifier
+              token: a @28
               staticElement: package:test/a.dart::@getter::a
               staticType: Object
-              token: a @28
-            operator: - @27
             staticElement: package:test/a.dart::@extension::E::@method::unary-
             staticType: int
     accessors
@@ -12974,17 +12936,17 @@
         type: int
         constantInitializer
           PrefixExpression
+            operator: ++ @23
             operand: SimpleIdentifier
+              token: a @25
               staticElement: <null>
               staticType: null
-              token: a @25
-            operator: ++ @23
             readElement: self::@getter::a
             readType: int
-            staticElement: dart:core::@class::num::@method::+
-            staticType: int
             writeElement: self::@getter::a
             writeType: dynamic
+            staticElement: dart:core::@class::num::@method::+
+            staticType: int
     accessors
       synthetic static get a @-1
         returnType: int
@@ -13022,15 +12984,15 @@
         type: int
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: self::@class::C::@getter::F
-              staticType: int
-              token: F @51
-            period: . @50
             prefix: SimpleIdentifier
+              token: C @49
               staticElement: self::@class::C
               staticType: null
-              token: C @49
+            period: . @50
+            identifier: SimpleIdentifier
+              token: F @51
+              staticElement: self::@class::C::@getter::F
+              staticType: int
             staticElement: self::@class::C::@getter::F
             staticType: int
     accessors
@@ -13059,15 +13021,15 @@
         type: int
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: a.dart::@class::C::@getter::F
-              staticType: int
-              token: F @29
-            period: . @28
             prefix: SimpleIdentifier
+              token: C @27
               staticElement: a.dart::@class::C
               staticType: null
-              token: C @27
+            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
@@ -13096,24 +13058,24 @@
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @35
-            propertyName: SimpleIdentifier
-              staticElement: a.dart::@class::C::@getter::F
-              staticType: int
-              token: F @36
-            staticType: int
             target: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: a.dart::@class::C
-                staticType: null
-                token: C @34
-              period: . @33
               prefix: SimpleIdentifier
+                token: p @32
                 staticElement: self::@prefix::p
                 staticType: null
-                token: p @32
+              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
@@ -13147,15 +13109,15 @@
         type: int Function(int, String)
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: self::@class::C::@method::m
-              staticType: int Function(int, String)
-              token: m @63
-            period: . @62
             prefix: SimpleIdentifier
+              token: C @61
               staticElement: self::@class::C
               staticType: null
-              token: C @61
+            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
@@ -13184,15 +13146,15 @@
         type: int Function(int, String)
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: a.dart::@class::C::@method::m
-              staticType: int Function(int, String)
-              token: m @29
-            period: . @28
             prefix: SimpleIdentifier
+              token: C @27
               staticElement: a.dart::@class::C
               staticType: null
-              token: C @27
+            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
@@ -13221,24 +13183,24 @@
         type: int Function(int, String)
         constantInitializer
           PropertyAccess
-            operator: . @35
-            propertyName: SimpleIdentifier
-              staticElement: a.dart::@class::C::@method::m
-              staticType: int Function(int, String)
-              token: m @36
-            staticType: int Function(int, String)
             target: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: a.dart::@class::C
-                staticType: null
-                token: C @34
-              period: . @33
               prefix: SimpleIdentifier
+                token: p @32
                 staticElement: self::@prefix::p
                 staticType: null
-                token: p @32
+              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)
@@ -13271,15 +13233,15 @@
         type: void Function()
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: self::@extension::E::@method::f
-              staticType: void Function()
-              token: f @65
-            period: . @64
             prefix: SimpleIdentifier
+              token: E @63
               staticElement: self::@extension::E
               staticType: null
-              token: E @63
+            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
@@ -13301,9 +13263,9 @@
         type: dynamic Function()
         constantInitializer
           SimpleIdentifier
+            token: foo @19
             staticElement: self::@function::foo
             staticType: dynamic Function()
-            token: foo @19
     accessors
       synthetic static get V @-1
         returnType: dynamic Function()
@@ -13326,9 +13288,9 @@
         type: R Function<P, R>(P)
         constantInitializer
           SimpleIdentifier
+            token: foo @30
             staticElement: self::@function::foo
             staticType: R Function<P, R>(P)
-            token: foo @30
     accessors
       synthetic static get V @-1
         returnType: R Function<P, R>(P)
@@ -13362,9 +13324,9 @@
         type: dynamic Function()
         constantInitializer
           SimpleIdentifier
+            token: foo @27
             staticElement: a.dart::@function::foo
             staticType: dynamic Function()
-            token: foo @27
     accessors
       synthetic static get V @-1
         returnType: dynamic Function()
@@ -13389,15 +13351,15 @@
         type: dynamic Function()
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: a.dart::@function::foo
-              staticType: dynamic Function()
-              token: foo @34
-            period: . @33
             prefix: SimpleIdentifier
+              token: p @32
               staticElement: self::@prefix::p
               staticType: null
-              token: p @32
+            period: . @33
+            identifier: SimpleIdentifier
+              token: foo @34
+              staticElement: a.dart::@function::foo
+              staticType: dynamic Function()
             staticElement: a.dart::@function::foo
             staticType: dynamic Function()
     accessors
@@ -13426,9 +13388,9 @@
         constantInitializer
           BinaryExpression
             leftOperand: SimpleIdentifier
+              token: A @23
               staticElement: self::@getter::A
               staticType: int
-              token: A @23
             operator: + @25
             rightOperand: IntegerLiteral
               literal: 2 @27
@@ -13463,9 +13425,9 @@
         constantInitializer
           BinaryExpression
             leftOperand: SimpleIdentifier
+              token: A @27
               staticElement: a.dart::@getter::A
               staticType: int
-              token: A @27
             operator: + @29
             rightOperand: IntegerLiteral
               literal: 2 @31
@@ -13498,15 +13460,15 @@
         constantInitializer
           BinaryExpression
             leftOperand: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: a.dart::@getter::A
-                staticType: int
-                token: A @34
-              period: . @33
               prefix: SimpleIdentifier
+                token: p @32
                 staticElement: self::@prefix::p
                 staticType: null
-                token: p @32
+              period: . @33
+              identifier: SimpleIdentifier
+                token: A @34
+                staticElement: a.dart::@getter::A
+                staticType: int
               staticElement: a.dart::@getter::A
               staticType: int
             operator: + @36
@@ -13557,87 +13519,70 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
                   SimpleIdentifier
+                    token: c @-1
                     staticElement: self::@enum::E::@getter::c
                     staticType: E
-                    token: c @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -13649,11 +13594,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     typeAliases
       functionTypeAliasBased F @50
         aliasedType: dynamic Function(int, String)
@@ -13669,51 +13609,51 @@
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: dynamic @87
             staticElement: dynamic@-1
             staticType: Type
-            token: dynamic @87
       static const vNull @102
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: Null @110
             staticElement: dart:core::@class::Null
             staticType: Type
-            token: Null @110
       static const vObject @122
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: Object @132
             staticElement: dart:core::@class::Object
             staticType: Type
-            token: Object @132
       static const vClass @146
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: C @155
             staticElement: self::@class::C
             staticType: Type
-            token: C @155
       static const vGenericClass @164
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: D @180
             staticElement: self::@class::D
             staticType: Type
-            token: D @180
       static const vEnum @189
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: E @197
             staticElement: self::@enum::E
             staticType: Type
-            token: E @197
       static const vFunctionTypeAlias @206
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: F @227
             staticElement: self::@typeAlias::F
             staticType: Type
-            token: F @227
     accessors
       synthetic static get vDynamic @-1
         returnType: Type
@@ -13782,23 +13722,23 @@
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: C @32
             staticElement: a.dart::@class::C
             staticType: Type
-            token: C @32
       static const vEnum @41
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: E @49
             staticElement: a.dart::@enum::E
             staticType: Type
-            token: E @49
       static const vFunctionTypeAlias @58
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: F @79
             staticElement: a.dart::@typeAlias::F
             staticType: Type
-            token: F @79
     accessors
       synthetic static get vClass @-1
         returnType: Type
@@ -13831,45 +13771,45 @@
         type: Type
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: a.dart::@class::C
-              staticType: Type
-              token: C @39
-            period: . @38
             prefix: SimpleIdentifier
+              token: p @37
               staticElement: self::@prefix::p
               staticType: null
-              token: p @37
+            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
-            identifier: SimpleIdentifier
-              staticElement: a.dart::@enum::E
-              staticType: Type
-              token: E @58
-            period: . @57
             prefix: SimpleIdentifier
+              token: p @56
               staticElement: self::@prefix::p
               staticType: null
-              token: p @56
+            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
-            identifier: SimpleIdentifier
-              staticElement: a.dart::@typeAlias::F
-              staticType: Type
-              token: F @90
-            period: . @89
             prefix: SimpleIdentifier
+              token: p @88
               staticElement: self::@prefix::p
               staticType: null
-              token: p @88
+            period: . @89
+            identifier: SimpleIdentifier
+              token: F @90
+              staticElement: a.dart::@typeAlias::F
+              staticType: Type
             staticElement: a.dart::@typeAlias::F
             staticType: Type
     accessors
@@ -13919,9 +13859,9 @@
         type: dynamic
         constantInitializer
           SimpleIdentifier
+            token: foo @10
             staticElement: <null>
             staticType: dynamic
-            token: foo @10
     accessors
       synthetic static get V @-1
         returnType: dynamic
@@ -13945,15 +13885,15 @@
         type: dynamic
         constantInitializer
           PrefixedIdentifier
-            identifier: SimpleIdentifier
-              staticElement: <null>
-              staticType: dynamic
-              token: foo @23
-            period: . @22
             prefix: SimpleIdentifier
+              token: C @21
               staticElement: self::@class::C
               staticType: null
-              token: C @21
+            period: . @22
+            identifier: SimpleIdentifier
+              token: foo @23
+              staticElement: <null>
+              staticType: dynamic
             staticElement: <null>
             staticType: dynamic
     accessors
@@ -13980,24 +13920,24 @@
         type: dynamic
         constantInitializer
           PropertyAccess
-            operator: . @37
-            propertyName: SimpleIdentifier
-              staticElement: <null>
-              staticType: dynamic
-              token: foo @38
-            staticType: dynamic
             target: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: foo.dart::@class::C
-                staticType: null
-                token: C @36
-              period: . @35
               prefix: SimpleIdentifier
+                token: p @34
                 staticElement: self::@prefix::p
                 staticType: null
-                token: p @34
+              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
@@ -14017,45 +13957,37 @@
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @17
-            elements
-              IfElement
-                condition: BooleanLiteral
-                  literal: true @33
-                  staticType: bool
-                thenStatement: IntegerLiteral
-                  literal: 1 @39
-                  staticType: int
-            isMap: false
-            leftBracket: { @28
-            rightBracket: } @40
-            staticType: Set<int>
             typeArguments: TypeArgumentList
+              leftBracket: < @23
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @24
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @24
                   type: int
-              leftBracket: < @23
               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
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
-  test_const_set_if_else() async {
-    var library = await checkLibrary('''
-const Object x = const <int>{if (true) 1 else 2];
-''');
-    checkElementText(library, r'''
-const Object x = const <
-        int/*location: dart:core;int*/>{if (true) 1 else 2}/*isSet*/;
-''');
-  }
-
   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
@@ -14072,13 +14004,13 @@
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @17
+            leftBracket: { @23
             elements
               IntegerLiteral
                 literal: 1 @24
                 staticType: int
-            isMap: false
-            leftBracket: { @23
             rightBracket: } @25
+            isMap: false
             staticType: Set<int>
     accessors
       synthetic static get x @-1
@@ -14099,42 +14031,42 @@
         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
-                  isMap: false
-                  leftBracket: { @37
                   rightBracket: } @39
+                  isMap: false
                   staticType: Set<int>
-                  typeArguments: TypeArgumentList
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @33
-                        type: int
-                    leftBracket: < @32
-                    rightBracket: > @36
-                spreadOperator: ... @29
-            isMap: false
-            leftBracket: { @28
             rightBracket: } @40
+            isMap: false
             staticType: Set<int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @24
-                  type: int
-              leftBracket: < @23
-              rightBracket: > @27
     accessors
       synthetic static get x @-1
         returnType: Object
@@ -14154,42 +14086,42 @@
         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
-                  isMap: false
-                  leftBracket: { @38
                   rightBracket: } @40
+                  isMap: false
                   staticType: Set<int>
-                  typeArguments: TypeArgumentList
-                    arguments
-                      NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
-                          staticType: null
-                          token: int @34
-                        type: int
-                    leftBracket: < @33
-                    rightBracket: > @37
-                spreadOperator: ...? @29
-            isMap: false
-            leftBracket: { @28
             rightBracket: } @41
+            isMap: false
             staticType: Set<int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @24
-                  type: int
-              leftBracket: < @23
-              rightBracket: > @27
     accessors
       synthetic static get x @-1
         returnType: Object
@@ -14525,8 +14457,8 @@
         type: int
         constantInitializer
           ConditionalExpression
-            colon: : @35
             condition: ParenthesizedExpression
+              leftParenthesis: ( @21
               expression: BinaryExpression
                 leftOperand: IntegerLiteral
                   literal: 1 @22
@@ -14538,17 +14470,17 @@
                 staticElement: dart:core::@class::num::@method::==
                 staticInvokeType: bool Function(Object)
                 staticType: bool
-              leftParenthesis: ( @21
               rightParenthesis: ) @28
               staticType: bool
-            elseExpression: IntegerLiteral
-              literal: 22 @37
-              staticType: int
             question: ? @30
-            staticType: int
             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
@@ -14567,8 +14499,8 @@
         type: int
         constantInitializer
           ConditionalExpression
-            colon: : @33
             condition: ParenthesizedExpression
+              leftParenthesis: ( @19
               expression: BinaryExpression
                 leftOperand: IntegerLiteral
                   literal: 1 @20
@@ -14580,17 +14512,17 @@
                 staticElement: dart:core::@class::num::@method::==
                 staticInvokeType: bool Function(Object)
                 staticType: bool
-              leftParenthesis: ( @19
               rightParenthesis: ) @26
               staticType: bool
-            elseExpression: IntegerLiteral
-              literal: 22 @35
-              staticType: int
             question: ? @28
-            staticType: int
             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
@@ -14673,10 +14605,10 @@
         type: int
         constantInitializer
           PrefixExpression
+            operator: - @115
             operand: IntegerLiteral
               literal: 2 @116
               staticType: int
-            operator: - @115
             staticElement: dart:core::@class::int::@method::unary-
             staticType: int
       static const vIntLong1 @125
@@ -14712,13 +14644,13 @@
         type: String
         constantInitializer
           AdjacentStrings
-            staticType: String
-            stringValue: aaabbb
             strings
               SimpleStringLiteral
                 literal: 'aaa' @299
               SimpleStringLiteral
                 literal: 'bbb' @305
+            staticType: String
+            stringValue: aaabbb
       static const vStringInterpolation @318
         type: String
         constantInitializer
@@ -14727,18 +14659,18 @@
               InterpolationString
                 contents: 'aaa  @341
               InterpolationExpression
+                leftBracket: ${ @346
                 expression: BooleanLiteral
                   literal: true @348
                   staticType: bool
-                leftBracket: ${ @346
                 rightBracket: } @352
               InterpolationString
                 contents:   @353
               InterpolationExpression
+                leftBracket: ${ @354
                 expression: IntegerLiteral
                   literal: 42 @356
                   staticType: int
-                leftBracket: ${ @354
                 rightBracket: } @358
               InterpolationString
                 contents:  bbb' @359
@@ -14748,6 +14680,7 @@
         type: Symbol
         constantInitializer
           SymbolLiteral
+            poundSign: # @382
             components
               components: aaa
                 offset: 383
@@ -14755,7 +14688,6 @@
                 offset: 387
               components: ccc
                 offset: 391
-            poundSign: # @382
     accessors
       synthetic static get vNull @-1
         returnType: dynamic
@@ -14805,20 +14737,20 @@
         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
-            methodName: SimpleIdentifier
-              staticElement: dart:core::@class::int::@method::toString
-              staticType: String Function()
-              token: toString @31
-            operator: ?. @29
             staticInvokeType: String Function()
             staticType: String?
-            target: SimpleIdentifier
-              staticElement: self::@getter::a
-              staticType: int?
-              token: a @28
     accessors
       synthetic static get a @-1
         returnType: int?
@@ -14846,23 +14778,23 @@
         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
-                methodName: SimpleIdentifier
-                  staticElement: dart:core::@class::int::@method::toString
-                  staticType: String Function()
-                  token: toString @32
-                operator: ?.. @29
                 staticInvokeType: String Function()
                 staticType: String
             staticType: int?
-            target: SimpleIdentifier
-              staticElement: self::@getter::a
-              staticType: int?
-              token: a @28
     accessors
       synthetic static get a @-1
         returnType: int?
@@ -14892,19 +14824,19 @@
         type: List<int?>
         constantInitializer
           ListLiteral
+            leftBracket: [ @44
             elements
               PropertyAccess
-                operator: ?. @49
-                propertyName: SimpleIdentifier
-                  staticElement: dart:core::@class::String::@getter::length
-                  staticType: int
-                  token: length @51
-                staticType: int?
                 target: SimpleIdentifier
+                  token: a @48
                   staticElement: self::@getter::a
                   staticType: String?
-                  token: a @48
-            leftBracket: [ @44
+                operator: ?. @49
+                propertyName: SimpleIdentifier
+                  token: length @51
+                  staticElement: dart:core::@class::String::@getter::length
+                  staticType: int
+                staticType: int?
             rightBracket: ] @59
             staticType: List<int?>
     accessors
@@ -14930,6 +14862,7 @@
         constantInitializer
           BinaryExpression
             leftOperand: ParenthesizedExpression
+              leftParenthesis: ( @15
               expression: BinaryExpression
                 leftOperand: IntegerLiteral
                   literal: 1 @16
@@ -14941,7 +14874,6 @@
                 staticElement: dart:core::@class::num::@method::+
                 staticInvokeType: num Function(num)
                 staticType: int
-              leftParenthesis: ( @15
               rightParenthesis: ) @21
               staticType: int
             operator: * @23
@@ -14955,7 +14887,9 @@
         type: int
         constantInitializer
           PrefixExpression
+            operator: - @43
             operand: ParenthesizedExpression
+              leftParenthesis: ( @44
               expression: BinaryExpression
                 leftOperand: IntegerLiteral
                   literal: 1 @45
@@ -14967,23 +14901,16 @@
                 staticElement: dart:core::@class::num::@method::+
                 staticInvokeType: num Function(num)
                 staticType: int
-              leftParenthesis: ( @44
               rightParenthesis: ) @50
               staticType: int
-            operator: - @43
             staticElement: dart:core::@class::int::@method::unary-
             staticType: int
       static const v3 @63
         type: int
         constantInitializer
           PropertyAccess
-            operator: . @83
-            propertyName: SimpleIdentifier
-              staticElement: dart:core::@class::String::@getter::length
-              staticType: int
-              token: length @84
-            staticType: int
             target: ParenthesizedExpression
+              leftParenthesis: ( @68
               expression: BinaryExpression
                 leftOperand: SimpleStringLiteral
                   literal: 'aaa' @69
@@ -14993,9 +14920,14 @@
                 staticElement: dart:core::@class::String::@method::+
                 staticInvokeType: String Function(String)
                 staticType: String
-              leftParenthesis: ( @68
               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
@@ -15035,30 +14967,30 @@
         type: bool
         constantInitializer
           PrefixExpression
+            operator: ! @39
             operand: BooleanLiteral
               literal: true @40
               staticType: bool
-            operator: ! @39
             staticElement: <null>
             staticType: bool
       static const vNegate @52
         type: int
         constantInitializer
           PrefixExpression
+            operator: - @62
             operand: IntegerLiteral
               literal: 1 @63
               staticType: int
-            operator: - @62
             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
-            operator: ~ @86
             staticElement: dart:core::@class::int::@method::~
             staticType: int
     accessors
@@ -15085,8 +15017,8 @@
         type: dynamic
         constantInitializer
           SuperExpression
-            staticType: dynamic
             superKeyword: super @15
+            staticType: dynamic
     accessors
       synthetic static get vSuper @-1
         returnType: dynamic
@@ -15105,8 +15037,8 @@
         type: dynamic
         constantInitializer
           ThisExpression
-            staticType: dynamic
             thisKeyword: this @14
+            staticType: dynamic
     accessors
       synthetic static get vThis @-1
         returnType: dynamic
@@ -15125,6 +15057,7 @@
         type: Never
         constantInitializer
           ThrowExpression
+            throwKeyword: throw @10
             expression: IntegerLiteral
               literal: 42 @16
               staticType: int
@@ -15148,6 +15081,7 @@
         type: dynamic
         constantInitializer
           ThrowExpression
+            throwKeyword: throw @10
             expression: IntegerLiteral
               literal: 42 @16
               staticType: int*
@@ -15176,24 +15110,35 @@
         constantInitializer
           ListLiteral
             constKeyword: const @14
-            leftBracket: [ @26
-            rightBracket: ] @27
-            staticType: List<Null>
             typeArguments: TypeArgumentList
+              leftBracket: < @20
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: Null @21
                     staticElement: dart:core::@class::Null
                     staticType: null
-                    token: Null @21
                   type: Null
-              leftBracket: < @20
               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
@@ -15204,24 +15149,24 @@
               IntegerLiteral
                 literal: 3 @69
                 staticType: int
-            leftBracket: [ @62
             rightBracket: ] @70
             staticType: List<dynamic>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dynamic@-1
-                    staticType: null
-                    token: dynamic @54
-                  type: dynamic
-              leftBracket: < @53
-              rightBracket: > @61
       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
@@ -15232,109 +15177,98 @@
               IntegerLiteral
                 literal: 3 @126
                 staticType: int
-            leftBracket: [ @119
             rightBracket: ] @127
             staticType: List<int>
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @115
-                  type: int
-              leftBracket: < @114
-              rightBracket: > @118
       static const vInterfaceNoTypeArguments @136
         type: List<List<dynamic>>
         constantInitializer
           ListLiteral
             constKeyword: const @164
-            leftBracket: [ @176
-            rightBracket: ] @177
-            staticType: List<List<dynamic>>
             typeArguments: TypeArgumentList
+              leftBracket: < @170
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: List @171
                     staticElement: dart:core::@class::List
                     staticType: null
-                    token: List @171
                   type: List<dynamic>
-              leftBracket: < @170
               rightBracket: > @175
+            leftBracket: [ @176
+            rightBracket: ] @177
+            staticType: List<List<dynamic>>
       static const vInterfaceWithTypeArguments @186
         type: List<List<String>>
         constantInitializer
           ListLiteral
             constKeyword: const @216
-            leftBracket: [ @236
-            rightBracket: ] @237
-            staticType: List<List<String>>
             typeArguments: TypeArgumentList
+              leftBracket: < @222
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: List @223
                     staticElement: dart:core::@class::List
                     staticType: null
-                    token: List @223
-                  type: List<String>
                   typeArguments: TypeArgumentList
+                    leftBracket: < @227
                     arguments
                       NamedType
                         name: SimpleIdentifier
+                          token: String @228
                           staticElement: dart:core::@class::String
                           staticType: null
-                          token: String @228
                         type: String
-                    leftBracket: < @227
                     rightBracket: > @234
-              leftBracket: < @222
+                  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
-            leftBracket: [ @307
-            rightBracket: ] @308
-            staticType: List<Map<int, List<String>>>
             typeArguments: TypeArgumentList
+              leftBracket: < @283
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: Map @284
                     staticElement: dart:core::@class::Map
                     staticType: null
-                    token: Map @284
-                  type: Map<int, List<String>>
                   typeArguments: TypeArgumentList
+                    leftBracket: < @287
                     arguments
                       NamedType
                         name: SimpleIdentifier
+                          token: int @288
                           staticElement: dart:core::@class::int
                           staticType: null
-                          token: int @288
                         type: int
                       NamedType
                         name: SimpleIdentifier
+                          token: List @293
                           staticElement: dart:core::@class::List
                           staticType: null
-                          token: List @293
-                        type: List<String>
                         typeArguments: TypeArgumentList
+                          leftBracket: < @297
                           arguments
                             NamedType
                               name: SimpleIdentifier
+                                token: String @298
                                 staticElement: dart:core::@class::String
                                 staticType: null
-                                token: String @298
                               type: String
-                          leftBracket: < @297
                           rightBracket: > @304
-                    leftBracket: < @287
+                        type: List<String>
                     rightBracket: > @305
-              leftBracket: < @283
+                  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>
@@ -15368,19 +15302,19 @@
         constantInitializer
           ListLiteral
             constKeyword: const @27
-            leftBracket: [ @36
-            rightBracket: ] @37
-            staticType: List<C>
             typeArguments: TypeArgumentList
+              leftBracket: < @33
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: C @34
                     staticElement: a.dart::@class::C
                     staticType: null
-                    token: C @34
                   type: C
-              leftBracket: < @33
               rightBracket: > @35
+            leftBracket: [ @36
+            rightBracket: ] @37
+            staticType: List<C>
     accessors
       synthetic static get v @-1
         returnType: List<C>
@@ -15404,27 +15338,27 @@
         constantInitializer
           ListLiteral
             constKeyword: const @32
-            leftBracket: [ @43
-            rightBracket: ] @44
-            staticType: List<C>
             typeArguments: TypeArgumentList
+              leftBracket: < @38
               arguments
                 NamedType
                   name: PrefixedIdentifier
-                    identifier: SimpleIdentifier
-                      staticElement: a.dart::@class::C
-                      staticType: null
-                      token: C @41
-                    period: . @40
                     prefix: SimpleIdentifier
+                      token: p @39
                       staticElement: self::@prefix::p
                       staticType: null
-                      token: p @39
+                    period: . @40
+                    identifier: SimpleIdentifier
+                      token: C @41
+                      staticElement: a.dart::@class::C
+                      staticType: null
                     staticElement: a.dart::@class::C
                     staticType: null
                   type: C
-              leftBracket: < @38
               rightBracket: > @42
+            leftBracket: [ @43
+            rightBracket: ] @44
+            staticType: List<C>
     accessors
       synthetic static get v @-1
         returnType: List<C>
@@ -15453,19 +15387,19 @@
         constantInitializer
           ListLiteral
             constKeyword: const @36
-            leftBracket: [ @45
-            rightBracket: ] @46
-            staticType: List<int Function(String)>
             typeArguments: TypeArgumentList
+              leftBracket: < @42
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: F @43
                     staticElement: self::@typeAlias::F
                     staticType: null
-                    token: F @43
                   type: int Function(String)
-              leftBracket: < @42
               rightBracket: > @44
+            leftBracket: [ @45
+            rightBracket: ] @46
+            staticType: List<int Function(String)>
     accessors
       synthetic static get v @-1
         returnType: List<int Function(String)>
@@ -15488,111 +15422,111 @@
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @18
-            isMap: true
-            leftBracket: { @38
-            rightBracket: } @39
-            staticType: Map<dynamic, int>
             typeArguments: TypeArgumentList
+              leftBracket: < @24
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: dynamic @25
                     staticElement: dynamic@-1
                     staticType: null
-                    token: dynamic @25
                   type: dynamic
                 NamedType
                   name: SimpleIdentifier
+                    token: int @34
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @34
                   type: int
-              leftBracket: < @24
               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
-            isMap: true
-            leftBracket: { @80
-            rightBracket: } @81
-            staticType: Map<int, dynamic>
             typeArguments: TypeArgumentList
+              leftBracket: < @66
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @67
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @67
                   type: int
                 NamedType
                   name: SimpleIdentifier
+                    token: dynamic @72
                     staticElement: dynamic@-1
                     staticType: null
-                    token: dynamic @72
                   type: dynamic
-              leftBracket: < @66
               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
-            isMap: true
-            leftBracket: { @122
-            rightBracket: } @123
-            staticType: Map<int, String>
             typeArguments: TypeArgumentList
+              leftBracket: < @109
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @110
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @110
                   type: int
                 NamedType
                   name: SimpleIdentifier
+                    token: String @115
                     staticElement: dart:core::@class::String
                     staticType: null
-                    token: String @115
                   type: String
-              leftBracket: < @109
               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
-            isMap: true
-            leftBracket: { @187
-            rightBracket: } @188
-            staticType: Map<int, List<String>>
             typeArguments: TypeArgumentList
+              leftBracket: < @168
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @169
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @169
                   type: int
                 NamedType
                   name: SimpleIdentifier
+                    token: List @174
                     staticElement: dart:core::@class::List
                     staticType: null
-                    token: List @174
-                  type: List<String>
                   typeArguments: TypeArgumentList
+                    leftBracket: < @178
                     arguments
                       NamedType
                         name: SimpleIdentifier
+                          token: String @179
                           staticElement: dart:core::@class::String
                           staticType: null
-                          token: String @179
                         type: String
-                    leftBracket: < @178
                     rightBracket: > @185
-              leftBracket: < @168
+                  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>
@@ -15620,68 +15554,68 @@
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @18
-            isMap: false
-            leftBracket: { @33
-            rightBracket: } @34
-            staticType: Set<dynamic>
             typeArguments: TypeArgumentList
+              leftBracket: < @24
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: dynamic @25
                     staticElement: dynamic@-1
                     staticType: null
-                    token: dynamic @25
                   type: dynamic
-              leftBracket: < @24
               rightBracket: > @32
+            leftBracket: { @33
+            rightBracket: } @34
+            isMap: false
+            staticType: Set<dynamic>
       static const vInterface @43
         type: Set<int>
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @56
-            isMap: false
-            leftBracket: { @67
-            rightBracket: } @68
-            staticType: Set<int>
             typeArguments: TypeArgumentList
+              leftBracket: < @62
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @63
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @63
                   type: int
-              leftBracket: < @62
               rightBracket: > @66
+            leftBracket: { @67
+            rightBracket: } @68
+            isMap: false
+            staticType: Set<int>
       static const vInterfaceWithTypeArguments @77
         type: Set<List<String>>
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @107
-            isMap: false
-            leftBracket: { @127
-            rightBracket: } @128
-            staticType: Set<List<String>>
             typeArguments: TypeArgumentList
+              leftBracket: < @113
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: List @114
                     staticElement: dart:core::@class::List
                     staticType: null
-                    token: List @114
-                  type: List<String>
                   typeArguments: TypeArgumentList
+                    leftBracket: < @118
                     arguments
                       NamedType
                         name: SimpleIdentifier
+                          token: String @119
                           staticElement: dart:core::@class::String
                           staticType: null
-                          token: String @119
                         type: String
-                    leftBracket: < @118
                     rightBracket: > @125
-              leftBracket: < @113
+                  type: List<String>
               rightBracket: > @126
+            leftBracket: { @127
+            rightBracket: } @128
+            isMap: false
+            staticType: Set<List<String>>
     accessors
       synthetic static get vDynamic1 @-1
         returnType: Set<dynamic>
@@ -15705,6 +15639,7 @@
         constantInitializer
           ListLiteral
             constKeyword: const @10
+            leftBracket: [ @16
             elements
               IntegerLiteral
                 literal: 1 @17
@@ -15715,7 +15650,6 @@
               IntegerLiteral
                 literal: 3 @23
                 staticType: int
-            leftBracket: [ @16
             rightBracket: ] @24
             staticType: List<int>
     accessors
@@ -15737,28 +15671,31 @@
         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
-            isMap: true
-            leftBracket: { @16
             rightBracket: } @45
+            isMap: true
             staticType: Map<int, String>
     accessors
       synthetic static get v @-1
@@ -15779,6 +15716,7 @@
         constantInitializer
           SetOrMapLiteral
             constKeyword: const @10
+            leftBracket: { @16
             elements
               IntegerLiteral
                 literal: 0 @17
@@ -15789,9 +15727,8 @@
               IntegerLiteral
                 literal: 2 @23
                 staticType: int
-            isMap: false
-            leftBracket: { @16
             rightBracket: } @24
+            isMap: false
             staticType: Set<int>
     accessors
       synthetic static get v @-1
@@ -15811,23 +15748,23 @@
         type: Type
         constantInitializer
           TypeLiteral
-            staticType: Type
             type: NamedType
               name: SimpleIdentifier
+                token: List @10
                 staticElement: dart:core::@class::List
                 staticType: List<int>
-                token: List @10
-              type: List<int>
               typeArguments: TypeArgumentList
+                leftBracket: < @14
                 arguments
                   NamedType
                     name: SimpleIdentifier
+                      token: int @15
                       staticElement: dart:core::@class::int
                       staticType: null
-                      token: int @15
                     type: int
-                leftBracket: < @14
                 rightBracket: > @18
+              type: List<int>
+            staticType: Type
     accessors
       synthetic static get v @-1
         returnType: Type
@@ -15852,87 +15789,70 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
                   SimpleIdentifier
+                    token: c @-1
                     staticElement: self::@enum::E::@getter::c
                     staticType: E
-                    token: c @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -15944,11 +15864,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static final vValue @23
         type: E
@@ -15982,37 +15897,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -16020,11 +15928,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static final vToString @17
         type: String
@@ -16051,9 +15954,9 @@
             type: dynamic
             constantInitializer
               SimpleIdentifier
+                token: b @29
                 staticElement: self::@class::C::@getter::b
                 staticType: dynamic
-                token: b @29
           static const b @47
             type: dynamic
             constantInitializer
@@ -16087,9 +15990,9 @@
             type: dynamic Function()
             constantInitializer
               SimpleIdentifier
+                token: m @29
                 staticElement: self::@class::C::@method::m
                 staticType: dynamic Function()
-                token: m @29
         constructors
           synthetic @-1
         accessors
@@ -16197,9 +16100,9 @@
                 constantInitializer
                   FunctionReference
                     function: SimpleIdentifier
+                      token: defaultF @93
                       staticElement: self::@function::defaultF
                       staticType: void Function<T>(T)
-                      token: defaultF @93
                     staticType: void Function(dynamic)
                     typeArgumentTypes
                       dynamic
@@ -16261,34 +16164,34 @@
                 type: dynamic
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @72
-                      rightParenthesis: ) @73
+                    keyword: const @53
                     constructorName: ConstructorName
-                      staticElement: ConstructorMember
-                        base: self::@class::A::@constructor::•
-                        substitution: {T: dynamic Function()}
                       type: NamedType
                         name: SimpleIdentifier
+                          token: A @59
                           staticElement: self::@class::A
                           staticType: null
-                          token: A @59
-                        type: A<dynamic Function()>
                         typeArguments: TypeArgumentList
+                          leftBracket: < @60
                           arguments
                             GenericFunctionType
-                              declaredElement: GenericFunctionTypeElement
-                                parameters
-                                returnType: dynamic
-                                type: dynamic Function()
                               functionKeyword: Function @61
                               parameters: FormalParameterList
                                 leftParenthesis: ( @69
                                 rightParenthesis: ) @70
+                              declaredElement: GenericFunctionTypeElement
+                                parameters
+                                returnType: dynamic
+                                type: dynamic Function()
                               type: dynamic Function()
-                          leftBracket: < @60
                           rightBracket: > @71
-                    keyword: const @53
+                        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
 ''');
@@ -16315,13 +16218,13 @@
                       literal: 0 @14
                       staticType: int
                     isOperator: is @16
-                    staticType: bool
                     type: NamedType
                       name: SimpleIdentifier
+                        token: int @19
                         staticElement: dart:core::@class::int
                         staticType: null
-                        token: int @19
                       type: int
+                    staticType: bool
         returnType: void
 ''');
   }
@@ -16344,20 +16247,20 @@
                 dynamic
             constantInitializer
               PrefixedIdentifier
-                identifier: SimpleIdentifier
-                  staticElement: MethodMember
-                    base: dart:core::@class::Comparable::@method::compare
-                    substitution: {}
-                  staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
-                  token: compare @43
-                period: . @42
                 prefix: SimpleIdentifier
+                  token: Comparable @32
                   staticElement: dart:core::@class::Comparable
                   staticType: null
-                  token: Comparable @32
+                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
-                  substitution: {}
+                  isLegacy: true
                 staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
         returnType: void
 ''');
@@ -16390,9 +16293,9 @@
                 type: Object
                 constantInitializer
                   SimpleIdentifier
+                    token: f @79
                     staticElement: self::@extension::E::@method::f
                     staticType: void Function()
-                    token: f @79
             returnType: void
 ''');
   }
@@ -16428,20 +16331,20 @@
                 type: B<int, double>
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @81
-                      rightParenthesis: ) @82
+                    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}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @80
-                        type: B<int, double>
-                    keyword: const @74
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @81
+                      rightParenthesis: ) @82
                     staticType: B<int, double>
             returnType: void
 ''');
@@ -16477,20 +16380,20 @@
                 type: B<T>
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @68
-                      rightParenthesis: ) @69
+                    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}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @67
-                        type: B<Never>
-                    keyword: const @61
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @68
+                      rightParenthesis: ) @69
                     staticType: B<Never>
 ''');
   }
@@ -16536,20 +16439,20 @@
                 type: A<T>
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @133
-                      rightParenthesis: ) @134
+                    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}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @132
-                        type: B<Never>
-                    keyword: const @126
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @133
+                      rightParenthesis: ) @134
                     staticType: B<Never>
 ''');
   }
@@ -16596,20 +16499,20 @@
                 type: A<T*>*
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @133
-                      rightParenthesis: ) @134
+                    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*}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @132
-                        type: B<Null*>*
-                    keyword: const @126
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @133
+                      rightParenthesis: ) @134
                     staticType: B<Null*>*
 ''');
   }
@@ -16645,20 +16548,20 @@
                 type: B<T*>*
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @68
-                      rightParenthesis: ) @69
+                    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*}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @67
-                        type: B<Null*>*
-                    keyword: const @61
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @68
+                      rightParenthesis: ) @69
                     staticType: B<Null*>*
 ''');
   }
@@ -16689,20 +16592,20 @@
             type: B<T>
             constantInitializer
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @57
-                  rightParenthesis: ) @58
+                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}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@class::B
-                      staticType: null
-                      token: B @56
-                    type: B<Never>
-                keyword: const @50
+                argumentList: ArgumentList
+                  leftParenthesis: ( @57
+                  rightParenthesis: ) @58
                 staticType: B<Never>
         returnType: void
 ''');
@@ -16739,20 +16642,20 @@
                 type: B<T>
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @69
-                      rightParenthesis: ) @70
+                    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}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @68
-                        type: B<Never>
-                    keyword: const @62
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @69
+                      rightParenthesis: ) @70
                     staticType: B<Never>
             returnType: void
 ''');
@@ -16794,20 +16697,20 @@
                 type: B<E1, E2>
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @84
-                      rightParenthesis: ) @85
+                    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}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @83
-                        type: B<Never, Never>
-                    keyword: const @77
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @84
+                      rightParenthesis: ) @85
                     staticType: B<Never, Never>
             returnType: void
 ''');
@@ -16845,20 +16748,20 @@
                 type: B<T>
                 constantInitializer
                   InstanceCreationExpression
-                    argumentList: ArgumentList
-                      leftParenthesis: ( @69
-                      rightParenthesis: ) @70
+                    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}
-                      type: NamedType
-                        name: SimpleIdentifier
-                          staticElement: self::@class::B
-                          staticType: null
-                          token: B @68
-                        type: B<Never>
-                    keyword: const @62
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @69
+                      rightParenthesis: ) @70
                     staticType: B<Never>
             returnType: void
 ''');
@@ -16938,11 +16841,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::A::@constructor::•
       class alias X @48
         supertype: B
@@ -16952,11 +16855,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::B::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::B::@constructor::•
     mixins
       mixin M @68
@@ -16983,62 +16886,50 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -17048,11 +16939,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
       enum E @19
         supertype: Enum
         fields
@@ -17060,87 +16946,70 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: c @-1
                   SimpleIdentifier
+                    token: d @-1
                     staticElement: self::@enum::E::@getter::d
                     staticType: E
-                    token: d @-1
                   SimpleIdentifier
+                    token: e @-1
                     staticElement: self::@enum::E::@getter::e
                     staticType: E
-                    token: e @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -17152,11 +17021,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -17396,77 +17260,61 @@
             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
-                  leftParenthesis: ( @0
                   rightParenthesis: ) @0
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: int}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: int}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<int>
                 staticType: E<int>
           static const enumConstant string @22
             type: E<String>
             constantInitializer
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  arguments
-                    SimpleStringLiteral
-                      literal: '2' @29
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
                 constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: String}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
+                  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}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<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>
-                    token: int @-1
                   SimpleIdentifier
+                    token: string @-1
                     staticElement: self::@enum::E::@getter::string
                     staticType: E<String>
-                    token: string @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           const @43
             parameters
@@ -17479,11 +17327,6 @@
             returnType: E<String>
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -17505,37 +17348,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: _name @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -17543,11 +17379,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -17572,55 +17403,46 @@
             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
-                  leftParenthesis: ( @0
                   rightParenthesis: ) @0
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: double}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: double}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<double>
-                    typeArguments: TypeArgumentList
-                      arguments
-                        NamedType
-                          name: SimpleIdentifier
-                            staticElement: dart:core::@class::double
-                            staticType: null
-                            token: double @16
-                          type: double
-                      leftBracket: < @15
-                      rightBracket: > @22
                 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>
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           const @37
             parameters
@@ -17631,11 +17453,6 @@
             returnType: E<double>
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -17656,37 +17473,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: _ @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -17694,15 +17504,486 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
+''');
+  }
+
+  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
-        methods
-          synthetic toString @-1
+          synthetic get x @-1
             returnType: String
 ''');
   }
 
-  test_enum_constructor_named() async {
+  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);
@@ -17720,41 +18001,39 @@
             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
-                  leftParenthesis: ( @0
                   rightParenthesis: ) @0
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::named
-                    staticType: null
-                    token: named @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::named
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           const named @34
             periodOffset: 33
@@ -17767,15 +18046,10 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
-  test_enum_constructor_unnamed() async {
+  test_enum_constructor_generative_unnamed() async {
     var library = await checkLibrary(r'''
 enum E {
   v(42);
@@ -17793,41 +18067,34 @@
             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
-                  leftParenthesis: ( @0
                   rightParenthesis: ) @0
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           const @26
             parameters
@@ -17838,11 +18105,98 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
+''');
+  }
+
+  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
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -17865,37 +18219,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -17903,11 +18250,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -17929,37 +18271,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
           final foo @22
             type: int
             constantInitializer
@@ -17973,13 +18308,251 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
           synthetic get foo @-1
             returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
+''');
+  }
+
+  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>
 ''');
   }
 
@@ -18004,41 +18577,32 @@
             type: E<dynamic>
             constantInitializer
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
                 constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: dynamic}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
+                  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}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<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>
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18046,8 +18610,6 @@
             returnType: E<dynamic>
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
         methods
           foo @23
             typeParameters
@@ -18058,8 +18620,6 @@
               requiredPositional u @37
                 type: U
             returnType: int
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18081,36 +18641,219 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
+        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
@@ -18119,11 +18862,11 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          toString @23
-            returnType: String
+          set foo @19
+            parameters
+              requiredPositional _ @27
+                type: int
+            returnType: void
 ''');
   }
 
@@ -18147,41 +18890,32 @@
             type: E<dynamic>
             constantInitializer
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
                 constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: dynamic}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
+                  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}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<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>
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18189,11 +18923,6 @@
             returnType: E<dynamic>
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18221,41 +18950,32 @@
             type: E<num, num>
             constantInitializer
               InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
                 constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: num, U: num}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
+                  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}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<num, 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>
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<num, num>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18263,11 +18983,6 @@
             returnType: E<num, num>
           synthetic static get values @-1
             returnType: List<E<num, num>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18293,18 +19008,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18336,18 +19044,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic, num, dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic, num, dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18373,18 +19074,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18409,18 +19103,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18445,18 +19132,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18481,18 +19161,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18521,18 +19194,11 @@
                 leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E<dynamic, dynamic, dynamic>>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
           synthetic static get values @-1
             returnType: List<E<dynamic, dynamic, dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18558,63 +19224,51 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18624,11 +19278,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18659,79 +19308,67 @@
             metadata
               Annotation
                 atSign: @ @32
-                element: self::@getter::annotation
                 name: SimpleIdentifier
+                  token: annotation @33
                   staticElement: self::@getter::annotation
                   staticType: null
-                  token: annotation @33
+                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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 staticType: E
           static const enumConstant b @75
             documentationComment: /// bbb
             metadata
               Annotation
                 atSign: @ @61
-                element: self::@getter::annotation
                 name: SimpleIdentifier
+                  token: annotation @62
                   staticElement: self::@getter::annotation
                   staticType: null
-                  token: annotation @62
+                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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18741,11 +19378,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static const annotation @91
         type: int
@@ -18772,62 +19404,50 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v1 @-1
                   SimpleIdentifier
+                    token: v2 @-1
                     staticElement: self::@enum::E::@getter::v2
                     staticType: E
-                    token: v2 @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18837,11 +19457,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -18858,37 +19473,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E1::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E1::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E1
-                      staticType: null
-                      token: E1 @-1
-                    type: E1
                 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
-                    token: v1 @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E1>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18896,11 +19504,6 @@
             returnType: E1
           synthetic static get values @-1
             returnType: List<E1>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
       enum E2 @20
         supertype: Enum
         fields
@@ -18908,37 +19511,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E2::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E2::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E2
-                      staticType: null
-                      token: E2 @-1
-                    type: E2
                 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
-                    token: v2 @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E2>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -18946,11 +19542,6 @@
             returnType: E2
           synthetic static get values @-1
             returnType: List<E2>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -19012,11 +19603,11 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: dart:core::@class::Object::@constructor::•
-                superKeyword: super @0
     enums
       enum E @5
         supertype: Enum
@@ -19025,87 +19616,70 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
                   SimpleIdentifier
+                    token: c @-1
                     staticElement: self::@enum::E::@getter::c
                     staticType: E
-                    token: c @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -19117,11 +19691,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -20403,9 +20972,9 @@
         type: Type
         constantInitializer
           SimpleIdentifier
+            token: FutureOr @31
             staticElement: dart:async::@class::FutureOr
             staticType: Type
-            token: FutureOr @31
     accessors
       synthetic static get x @-1
         returnType: Type
@@ -20690,20 +21259,38 @@
       class B @64
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @55
-              rightParenthesis: ) @56
             atSign: @ @29
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int Function(String)}
             name: SimpleIdentifier
+              token: A @30
               staticElement: self::@class::A
               staticType: null
-              token: A @30
             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
@@ -20711,33 +21298,14 @@
                         type: String
                     returnType: int
                     type: int Function(String)
-                  functionKeyword: Function @36
-                  parameters: FormalParameterList
-                    leftParenthesis: ( @44
-                    parameters
-                      SimpleFormalParameter
-                        declaredElement: a@52
-                        declaredElementType: String
-                        identifier: SimpleIdentifier
-                          staticElement: a@52
-                          staticType: null
-                          token: a @52
-                        type: NamedType
-                          name: SimpleIdentifier
-                            staticElement: dart:core::@class::String
-                            staticType: null
-                            token: String @45
-                          type: String
-                    rightParenthesis: ) @53
-                  returnType: NamedType
-                    name: SimpleIdentifier
-                      staticElement: dart:core::@class::int
-                      staticType: null
-                      token: int @32
-                    type: int
                   type: int Function(String)
-              leftBracket: < @31
               rightBracket: > @54
+            arguments: ArgumentList
+              leftParenthesis: ( @55
+              rightParenthesis: ) @56
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int Function(String)}
         constructors
           synthetic @-1
 ''');
@@ -20766,20 +21334,38 @@
       static v @62
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @55
-              rightParenthesis: ) @56
             atSign: @ @29
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int Function(String)}
             name: SimpleIdentifier
+              token: A @30
               staticElement: self::@class::A
               staticType: null
-              token: A @30
             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
@@ -20787,33 +21373,14 @@
                         type: String
                     returnType: int
                     type: int Function(String)
-                  functionKeyword: Function @36
-                  parameters: FormalParameterList
-                    leftParenthesis: ( @44
-                    parameters
-                      SimpleFormalParameter
-                        declaredElement: a@52
-                        declaredElementType: String
-                        identifier: SimpleIdentifier
-                          staticElement: a@52
-                          staticType: null
-                          token: a @52
-                        type: NamedType
-                          name: SimpleIdentifier
-                            staticElement: dart:core::@class::String
-                            staticType: null
-                            token: String @45
-                          type: String
-                    rightParenthesis: ) @53
-                  returnType: NamedType
-                    name: SimpleIdentifier
-                      staticElement: dart:core::@class::int
-                      staticType: null
-                      token: int @32
-                    type: int
                   type: int Function(String)
-              leftBracket: < @31
               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
@@ -20849,22 +21416,45 @@
         type: A<String Function({int? a})>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @67
-              rightParenthesis: ) @68
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function({int? a})}
               type: NamedType
                 name: SimpleIdentifier
+                  token: A @39
                   staticElement: self::@class::A
                   staticType: null
-                  token: A @39
-                type: A<String Function({int? a})>
                 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
@@ -20872,40 +21462,15 @@
                             type: int?
                         returnType: String
                         type: String Function({int? a})
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        parameters
-                          DefaultFormalParameter
-                            declaredElement: a@63
-                            declaredElementType: int?
-                            identifier: SimpleIdentifier
-                              staticElement: a@63
-                              staticType: null
-                              token: a @63
-                            parameter: SimpleFormalParameter
-                              declaredElement: a@63
-                              declaredElementType: int?
-                              identifier: SimpleIdentifier
-                                staticElement: a@63
-                                staticType: null
-                                token: a @63
-                              type: NamedType
-                                name: SimpleIdentifier
-                                  staticElement: dart:core::@class::int
-                                  staticType: null
-                                  token: int @58
-                                type: int?
-                        rightParenthesis: ) @65
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                          token: String @41
-                        type: String
                       type: String Function({int? a})
-                  leftBracket: < @40
                   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
@@ -20936,22 +21501,45 @@
         type: A<String Function([int?])>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @67
-              rightParenthesis: ) @68
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function([int?])}
               type: NamedType
                 name: SimpleIdentifier
+                  token: A @39
                   staticElement: self::@class::A
                   staticType: null
-                  token: A @39
-                type: A<String Function([int?])>
                 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
@@ -20959,40 +21547,15 @@
                             type: int?
                         returnType: String
                         type: String Function([int?])
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        parameters
-                          DefaultFormalParameter
-                            declaredElement: a@63
-                            declaredElementType: int?
-                            identifier: SimpleIdentifier
-                              staticElement: a@63
-                              staticType: null
-                              token: a @63
-                            parameter: SimpleFormalParameter
-                              declaredElement: a@63
-                              declaredElementType: int?
-                              identifier: SimpleIdentifier
-                                staticElement: a@63
-                                staticType: null
-                                token: a @63
-                              type: NamedType
-                                name: SimpleIdentifier
-                                  staticElement: dart:core::@class::int
-                                  staticType: null
-                                  token: int @58
-                                type: int?
-                        rightParenthesis: ) @65
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                          token: String @41
-                        type: String
                       type: String Function([int?])
-                  leftBracket: < @40
                   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
@@ -21023,22 +21586,45 @@
         type: A<String Function({required int a})>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @75
-              rightParenthesis: ) @76
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function({required int a})}
               type: NamedType
                 name: SimpleIdentifier
+                  token: A @39
                   staticElement: self::@class::A
                   staticType: null
-                  token: A @39
-                type: A<String Function({required int a})>
                 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
@@ -21046,41 +21632,15 @@
                             type: int
                         returnType: String
                         type: String Function({required int a})
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        parameters
-                          DefaultFormalParameter
-                            declaredElement: a@71
-                            declaredElementType: int
-                            identifier: SimpleIdentifier
-                              staticElement: a@71
-                              staticType: null
-                              token: a @71
-                            parameter: SimpleFormalParameter
-                              declaredElement: a@71
-                              declaredElementType: int
-                              identifier: SimpleIdentifier
-                                staticElement: a@71
-                                staticType: null
-                                token: a @71
-                              requiredKeyword: required @58
-                              type: NamedType
-                                name: SimpleIdentifier
-                                  staticElement: dart:core::@class::int
-                                  staticType: null
-                                  token: int @67
-                                type: int
-                        rightParenthesis: ) @73
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                          token: String @41
-                        type: String
                       type: String Function({required int a})
-                  leftBracket: < @40
                   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
@@ -21111,22 +21671,39 @@
         type: A<String Function(int)>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @64
-              rightParenthesis: ) @65
             constructorName: ConstructorName
-              staticElement: ConstructorMember
-                base: self::@class::A::@constructor::•
-                substitution: {T: String Function(int)}
               type: NamedType
                 name: SimpleIdentifier
+                  token: A @39
                   staticElement: self::@class::A
                   staticType: null
-                  token: A @39
-                type: A<String Function(int)>
                 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
@@ -21134,33 +21711,15 @@
                             type: int
                         returnType: String
                         type: String Function(int)
-                      functionKeyword: Function @48
-                      parameters: FormalParameterList
-                        leftParenthesis: ( @56
-                        parameters
-                          SimpleFormalParameter
-                            declaredElement: a@61
-                            declaredElementType: int
-                            identifier: SimpleIdentifier
-                              staticElement: a@61
-                              staticType: null
-                              token: a @61
-                            type: NamedType
-                              name: SimpleIdentifier
-                                staticElement: dart:core::@class::int
-                                staticType: null
-                                token: int @57
-                              type: int
-                        rightParenthesis: ) @62
-                      returnType: NamedType
-                        name: SimpleIdentifier
-                          staticElement: dart:core::@class::String
-                          staticType: null
-                          token: String @41
-                        type: String
                       type: String Function(int)
-                  leftBracket: < @40
                   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
@@ -21212,11 +21771,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @0
             superConstructor: ConstructorMember
               base: self::@class::A::@constructor::•
               substitution: {T: void Function()}
@@ -21318,7 +21877,7 @@
       synthetic static foo @-1
         type: Future<int>
     accessors
-      get foo @16 async
+      static get foo @16 async
         returnType: Future<int>
 ''');
   }
@@ -21337,7 +21896,7 @@
       synthetic static foo @-1
         type: Stream<int>
     accessors
-      get foo @37 async*
+      static get foo @37 async*
         returnType: Stream<int>
 ''');
   }
@@ -21356,7 +21915,7 @@
       synthetic static x @-1
         type: dynamic
     accessors
-      get x @64
+      static get x @64
         documentationComment: /**\n * Docs\n */
         returnType: dynamic
 ''');
@@ -21371,7 +21930,7 @@
       synthetic static x @-1
         type: int
     accessors
-      external get x @17
+      static external get x @17
         returnType: int
 ''');
   }
@@ -21417,7 +21976,7 @@
       synthetic static foo @-1
         type: Iterator<int>
     accessors
-      get foo @18 sync*
+      static get foo @18 sync*
         returnType: Iterator<int>
 ''');
   }
@@ -21433,9 +21992,9 @@
       synthetic static y @-1
         type: dynamic
     accessors
-      get x @8
+      static get x @8
         returnType: int
-      get y @23
+      static get y @23
         returnType: dynamic
 ''');
   }
@@ -21470,23 +22029,24 @@
                 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
-                        token: c @68
+                      staticElement: self::@class::C::@method::call
                       staticType: void Function()
-                  leftParenthesis: ( @67
                   rightParenthesis: ) @69
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::D::@constructor::named
-                  staticType: null
-                  token: named @62
-                period: . @61
                 staticElement: self::@class::D::@constructor::named
-                thisKeyword: this @57
             redirectedConstructor: self::@class::D::@constructor::named
           const named @83
             periodOffset: 82
@@ -21529,26 +22089,26 @@
         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
-              leftParenthesis: ( @72
               rightParenthesis: ) @75
-            constructorName: ConstructorName
-              name: SimpleIdentifier
-                staticElement: self::@class::C::@constructor::named
-                staticType: null
-                token: named @67
-              period: . @66
-              staticElement: self::@class::C::@constructor::named
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @65
-                type: C
             staticType: C
     accessors
       synthetic static get x @-1
@@ -21566,9 +22126,9 @@
       synthetic static x @-1
         type: int
     accessors
-      get x @8
+      static get x @8
         returnType: int
-      set x @25
+      static set x @25
         parameters
           requiredPositional value @31
             type: int
@@ -21586,12 +22146,12 @@
       synthetic static x @-1
         type: int
     accessors
-      set x @9
+      static set x @9
         parameters
           requiredPositional value @15
             type: int
         returnType: void
-      get x @33
+      static get x @33
         returnType: int
 ''');
   }
@@ -21850,21 +22410,21 @@
   metadata
     Annotation
       atSign: @ @0
-      element: <null>
       name: SimpleIdentifier
+        token: foo @1
         staticElement: <null>
         staticType: null
-        token: foo @1
+      element: <null>
   imports
     <unresolved>
       metadata
         Annotation
           atSign: @ @0
-          element: <null>
           name: SimpleIdentifier
+            token: foo @1
             staticElement: <null>
             staticType: null
-            token: foo @1
+          element: <null>
   definingUnit
 ''');
   }
@@ -22111,25 +22671,25 @@
         type: C<int>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              arguments
-                SimpleIdentifier
-                  staticElement: self::@function::f
-                  staticType: D<int, U> Function<U>()
-                  token: f @130
-              leftParenthesis: ( @129
-              rightParenthesis: ) @131
+            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}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::C
-                  staticType: null
-                  token: C @128
-                type: C<int>
-            keyword: const @122
+            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
@@ -22181,23 +22741,23 @@
         type: C
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              arguments
-                SimpleIdentifier
-                  staticElement: self::@function::f
-                  staticType: D<T> Function<T>()
-                  token: f @113
-              leftParenthesis: ( @112
-              rightParenthesis: ) @114
+            keyword: const @105
             constructorName: ConstructorName
-              staticElement: self::@class::C::@constructor::•
               type: NamedType
                 name: SimpleIdentifier
+                  token: C @111
                   staticElement: self::@class::C
                   staticType: null
-                  token: C @111
                 type: C
-            keyword: const @105
+              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
@@ -24193,23 +24753,24 @@
         metadata
           Annotation
             atSign: @ @22
-            constructorName: SimpleIdentifier
-              staticElement: package:test/a.dart::@class::A::@constructor::named
-              staticType: null
-              token: named @27
-            element: package:test/a.dart::@class::A::@constructor::named
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/a.dart::@class::A
-                staticType: null
-                token: A @25
-              period: . @24
               prefix: SimpleIdentifier
+                token: a @23
                 staticElement: self::@prefix::a
                 staticType: null
-                token: a @23
+              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
 ''');
@@ -24237,19 +24798,19 @@
         metadata
           Annotation
             atSign: @ @17
-            element: package:test/a.dart::@class::A::@constructor::named
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/a.dart::@class::A::@constructor::named
-                staticType: null
-                token: named @20
-              period: . @19
               prefix: SimpleIdentifier
+                token: A @18
                 staticElement: package:test/a.dart::@class::A
                 staticType: null
-                token: A @18
+              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
 ''');
@@ -24306,9 +24867,9 @@
             type: dynamic
             constantInitializer
               SimpleIdentifier
+                token: V @43
                 staticElement: <null>
                 staticType: dynamic
-                token: V @43
         returnType: dynamic
 ''');
   }
@@ -24336,9 +24897,9 @@
             type: dynamic
             constantInitializer
               SimpleIdentifier
+                token: V @26
                 staticElement: a.dart::@function::V
                 staticType: dynamic Function()
-                token: V @26
         returnType: dynamic
 ''');
   }
@@ -24370,9 +24931,9 @@
             type: dynamic
             constantInitializer
               SimpleIdentifier
+                token: V @9
                 staticElement: self::@getter::V
                 staticType: dynamic
-                token: V @9
         returnType: dynamic
       V @16
         returnType: dynamic
@@ -24608,7 +25169,7 @@
       synthetic static g @-1
         type: dynamic
     accessors
-      get g @4
+      static get g @4
         returnType: dynamic
 ''');
   }
@@ -24706,11 +25267,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::C::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::C::@constructor::•
       class C @29
         constructors
@@ -24752,7 +25313,7 @@
       synthetic static main @-1
         type: dynamic
     accessors
-      get main @4
+      static get main @4
         returnType: dynamic
 ''');
   }
@@ -24845,11 +25406,11 @@
             metadata
               Annotation
                 atSign: @ @25
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @26
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @26
+                element: self::@getter::a
             type: int
         constructors
           synthetic @-1
@@ -24893,22 +25454,22 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @34
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @29
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @30
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @30
+                element: self::@getter::foo
         fields
           static const foo @54
             type: int
@@ -24926,11 +25487,11 @@
             metadata
               Annotation
                 atSign: @ @65
-                element: self::@class::C::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @66
                   staticElement: self::@class::C::@getter::foo
                   staticType: null
-                  token: foo @66
+                element: self::@class::C::@getter::foo
             returnType: void
     topLevelVariables
       static const foo @6
@@ -24960,18 +25521,18 @@
         metadata
           Annotation
             atSign: @ @32
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @33
               staticElement: self::@getter::a
               staticType: null
-              token: a @33
+            element: self::@getter::a
           Annotation
             atSign: @ @35
-            element: self::@getter::b
             name: SimpleIdentifier
+              token: b @36
               staticElement: self::@getter::b
               staticType: null
-              token: b @36
+            element: self::@getter::b
         constructors
           synthetic @-1
     topLevelVariables
@@ -25006,11 +25567,11 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @17
               staticElement: self::@getter::a
               staticType: null
-              token: a @17
+            element: self::@getter::a
         supertype: D
         mixins
           E
@@ -25018,11 +25579,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @45
         constructors
@@ -25067,27 +25628,27 @@
       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
-              leftParenthesis: ( @44
               rightParenthesis: ) @46
-            atSign: @ @36
             element: self::@class::A::@constructor::named
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: self::@class::A::@constructor::named
-                staticType: null
-                token: named @39
-              period: . @38
-              prefix: SimpleIdentifier
-                staticElement: self::@class::A
-                staticType: null
-                token: A @37
-              staticElement: self::@class::A::@constructor::named
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -25120,33 +25681,33 @@
       class C @56
         metadata
           Annotation
-            arguments: ArgumentList
-              arguments
-                IntegerLiteral
-                  literal: 0 @47
-                  staticType: int
-              leftParenthesis: ( @46
-              rightParenthesis: ) @48
             atSign: @ @38
-            element: ConstructorMember
-              base: self::@class::A::@constructor::named
-              substitution: {T: int}
             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
-                token: named @41
-              period: . @40
-              prefix: SimpleIdentifier
-                staticElement: self::@class::A
-                staticType: null
-                token: A @39
               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
 ''');
@@ -25176,33 +25737,34 @@
       class C @57
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @48
-              rightParenthesis: ) @49
             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
-              token: named @43
+            arguments: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
             element: ConstructorMember
               base: self::@class::A::@constructor::named
               substitution: {T: int}
-            name: SimpleIdentifier
-              staticElement: self::@class::A
-              staticType: null
-              token: A @36
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @38
-                  type: int
-              leftBracket: < @37
-              rightBracket: > @41
         constructors
           synthetic @-1
 ''');
@@ -25232,33 +25794,34 @@
       class C @57
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @48
-              rightParenthesis: ) @49
             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
-              token: named @43
+            arguments: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
             element: ConstructorMember
               base: self::@class::A::@constructor::named
               substitution: {T: int}
-            name: SimpleIdentifier
-              staticElement: self::@class::A
-              staticType: null
-              token: A @36
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @38
-                  type: int
-              leftBracket: < @37
-              rightBracket: > @41
         constructors
           synthetic @-1
 ''');
@@ -25285,31 +25848,32 @@
       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
-              leftParenthesis: ( @38
               rightParenthesis: ) @40
-            atSign: @ @26
-            constructorName: SimpleIdentifier
-              staticElement: package:test/foo.dart::@class::A::@constructor::named
-              staticType: null
-              token: named @33
             element: package:test/foo.dart::@class::A::@constructor::named
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-                token: A @31
-              period: . @30
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @27
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -25336,35 +25900,36 @@
       class C @48
         metadata
           Annotation
-            arguments: ArgumentList
-              arguments
-                IntegerLiteral
-                  literal: 0 @39
-                  staticType: int
-              leftParenthesis: ( @38
-              rightParenthesis: ) @40
             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
-              token: named @33
+            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}
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-                token: A @31
-              period: . @30
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @27
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -25391,41 +25956,42 @@
       class C @52
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @43
-              rightParenthesis: ) @44
             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
-              token: named @38
+            arguments: ArgumentList
+              leftParenthesis: ( @43
+              rightParenthesis: ) @44
             element: ConstructorMember
               base: package:test/foo.dart::@class::A::@constructor::named
               substitution: {T: int}
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-                token: A @31
-              period: . @30
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @27
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
-            typeArguments: TypeArgumentList
-              arguments
-                NamedType
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::int
-                    staticType: null
-                    token: int @33
-                  type: int
-              leftBracket: < @32
-              rightBracket: > @36
         constructors
           synthetic @-1
 ''');
@@ -25464,43 +26030,43 @@
           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
-                constructorName: SimpleIdentifier
-                  staticElement: self::@class::A::@constructor::named
-                  staticType: null
-                  token: named @-1
-                period: . @0
                 staticElement: self::@class::A::@constructor::named
-                superKeyword: super @0
             superConstructor: self::@class::A::@constructor::named
       class D @85
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @76
-              rightParenthesis: ) @77
             atSign: @ @68
-            element: ConstructorMember
-              base: self::@class::C::@constructor::named
-              substitution: {T: dynamic}
             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
-                token: named @71
-              period: . @70
-              prefix: SimpleIdentifier
-                staticElement: self::@class::C
-                staticType: null
-                token: C @69
               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
@@ -25534,19 +26100,19 @@
       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
-              leftParenthesis: ( @32
               rightParenthesis: ) @34
-            atSign: @ @30
             element: self::@class::A::@constructor::•
-            name: SimpleIdentifier
-              staticElement: self::@class::A
-              staticType: null
-              token: A @31
         constructors
           synthetic @-1
 ''');
@@ -25577,21 +26143,21 @@
       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
-              leftParenthesis: ( @34
               rightParenthesis: ) @36
-            atSign: @ @32
             element: ConstructorMember
               base: self::@class::A::@constructor::•
               substitution: {T: int}
-            name: SimpleIdentifier
-              staticElement: self::@class::A
-              staticType: null
-              token: A @33
         constructors
           synthetic @-1
 ''');
@@ -25619,27 +26185,27 @@
       class C @45
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @36
-              rightParenthesis: ) @37
             atSign: @ @29
-            element: ConstructorMember
-              base: self::@class::A::@constructor::•
-              substitution: {T: int}
             name: SimpleIdentifier
+              token: A @30
               staticElement: self::@class::A
               staticType: null
-              token: A @30
             typeArguments: TypeArgumentList
+              leftBracket: < @31
               arguments
                 NamedType
                   name: SimpleIdentifier
+                    token: int @32
                     staticElement: dart:core::@class::int
                     staticType: null
-                    token: int @32
                   type: int
-              leftBracket: < @31
               rightBracket: > @35
+            arguments: ArgumentList
+              leftParenthesis: ( @36
+              rightParenthesis: ) @37
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
         constructors
           synthetic @-1
 ''');
@@ -25659,27 +26225,27 @@
       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
-              leftParenthesis: ( @32
               rightParenthesis: ) @34
-            atSign: @ @26
             element: package:test/foo.dart::@class::A::@constructor::•
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-                token: A @31
-              period: . @30
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @27
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -25706,29 +26272,29 @@
       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
-              leftParenthesis: ( @32
               rightParenthesis: ) @34
-            atSign: @ @26
             element: ConstructorMember
               base: package:test/foo.dart::@class::A::@constructor::•
               substitution: {T: int}
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-                token: A @31
-              period: . @30
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @27
-              staticElement: package:test/foo.dart::@class::A
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -25755,35 +26321,35 @@
       class C @46
         metadata
           Annotation
-            arguments: ArgumentList
-              leftParenthesis: ( @37
-              rightParenthesis: ) @38
             atSign: @ @26
-            element: ConstructorMember
-              base: package:test/foo.dart::@class::A::@constructor::•
-              substitution: {T: int}
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@class::A
-                staticType: null
-                token: A @31
-              period: . @30
               prefix: SimpleIdentifier
+                token: foo @27
                 staticElement: self::@prefix::foo
                 staticType: null
-                token: foo @27
+              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
-                    token: int @33
                   type: int
-              leftBracket: < @32
               rightBracket: > @36
+            arguments: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::•
+              substitution: {T: int}
         constructors
           synthetic @-1
 ''');
@@ -25820,26 +26386,26 @@
           synthetic const @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @0
             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
-            atSign: @ @62
             element: ConstructorMember
               base: self::@class::C::@constructor::•
               substitution: {T: dynamic}
-            name: SimpleIdentifier
-              staticElement: self::@class::C
-              staticType: null
-              token: C @63
         constructors
           synthetic @-1
     mixins
@@ -25867,19 +26433,19 @@
       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
-              leftParenthesis: ( @26
               rightParenthesis: ) @31
-            atSign: @ @24
             element: self::@class::A::@constructor::•
-            name: SimpleIdentifier
-              staticElement: self::@class::A
-              staticType: null
-              token: A @25
         constructors
           synthetic @-1
 ''');
@@ -25898,11 +26464,11 @@
             metadata
               Annotation
                 atSign: @ @26
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @27
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @27
+                element: self::@getter::a
             periodOffset: 30
             nameEnd: 36
     topLevelVariables
@@ -25930,11 +26496,11 @@
             metadata
               Annotation
                 atSign: @ @26
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @27
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @27
+                element: self::@getter::a
     topLevelVariables
       static const a @6
         type: dynamic
@@ -25948,7 +26514,7 @@
 ''');
   }
 
-  test_metadata_enumConstantDeclaration() async {
+  test_metadata_enum_constant() async {
     var library = await checkLibrary('const a = 42; enum E { @a v }');
     checkElementText(library, r'''
 library
@@ -25961,45 +26527,38 @@
             metadata
               Annotation
                 atSign: @ @23
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @24
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @24
+                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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -26007,11 +26566,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static const a @6
         type: int
@@ -26025,7 +26579,7 @@
 ''');
   }
 
-  test_metadata_enumConstantDeclaration_instanceCreation() async {
+  test_metadata_enum_constant_instanceCreation() async {
     var library = await checkLibrary('''
 class A {
   final dynamic value;
@@ -26062,118 +26616,101 @@
           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
-                  leftParenthesis: ( @72
                   rightParenthesis: ) @76
-                atSign: @ @70
                 element: self::@class::A::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: self::@class::A
-                  staticType: null
-                  token: A @71
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                  leftParenthesis: ( @90
                   rightParenthesis: ) @94
-                atSign: @ @88
                 element: self::@class::A::@constructor::•
-                name: SimpleIdentifier
-                  staticElement: self::@class::A
-                  staticType: null
-                  token: A @89
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
                   SimpleIdentifier
+                    token: c @-1
                     staticElement: self::@enum::E::@getter::c
                     staticType: E
-                    token: c @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -26185,11 +26722,395 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
+''');
+  }
+
+  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
-          synthetic toString @-1
-            returnType: String
+          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
 ''');
   }
 
@@ -26203,48 +27124,41 @@
         metadata
           Annotation
             atSign: @ @14
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @15
               staticElement: self::@getter::a
               staticType: null
-              token: a @15
+            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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -26252,11 +27166,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static const a @6
         type: int
@@ -26278,21 +27187,21 @@
   metadata
     Annotation
       atSign: @ @0
-      element: self::@getter::a
       name: SimpleIdentifier
+        token: a @1
         staticElement: self::@getter::a
         staticType: null
-        token: a @1
+      element: self::@getter::a
   exports
     foo.dart
       metadata
         Annotation
           atSign: @ @0
-          element: self::@getter::a
           name: SimpleIdentifier
+            token: a @1
             staticElement: self::@getter::a
             staticType: null
-            token: a @1
+          element: self::@getter::a
   definingUnit
     topLevelVariables
       static const a @28
@@ -26326,21 +27235,21 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @38
             metadata
               Annotation
                 atSign: @ @33
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @34
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @34
+                element: self::@getter::foo
         extendedType: int
         fields
           static const foo @65
@@ -26357,11 +27266,11 @@
             metadata
               Annotation
                 atSign: @ @76
-                element: self::@extension::E::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @77
                   staticElement: self::@extension::E::@getter::foo
                   staticType: null
-                  token: foo @77
+                element: self::@extension::E::@getter::foo
             returnType: void
     topLevelVariables
       static const foo @6
@@ -26395,21 +27304,21 @@
         metadata
           Annotation
             atSign: @ @27
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @28
               staticElement: self::@getter::a
               staticType: null
-              token: a @28
+            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
-            atSign: @ @30
             element: dart:core::@class::Object::@constructor::•
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::Object
-              staticType: null
-              token: Object @31
         extendedType: A
     topLevelVariables
       static const a @6
@@ -26436,11 +27345,11 @@
             metadata
               Annotation
                 atSign: @ @26
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @27
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @27
+                element: self::@getter::a
             type: int
         constructors
           synthetic @-1
@@ -26489,11 +27398,11 @@
                 metadata
                   Annotation
                     atSign: @ @39
-                    element: self::@getter::a
                     name: SimpleIdentifier
+                      token: a @40
                       staticElement: self::@getter::a
                       staticType: null
-                      token: a @40
+                    element: self::@getter::a
                 field: self::@class::C::@field::x
         accessors
           synthetic get x @-1
@@ -26535,11 +27444,11 @@
                 metadata
                   Annotation
                     atSign: @ @36
-                    element: self::@getter::a
                     name: SimpleIdentifier
+                      token: a @37
                       staticElement: self::@getter::a
                       staticType: null
-                      token: a @37
+                    element: self::@getter::a
                 constantInitializer
                   NullLiteral
                     literal: null @48
@@ -26590,11 +27499,11 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @17
               staticElement: self::@getter::a
               staticType: null
-              token: a @17
+            element: self::@getter::a
         returnType: dynamic
 ''');
   }
@@ -26616,15 +27525,15 @@
     accessors
       synthetic static get a @-1
         returnType: dynamic
-      get f @23
+      static get f @23
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @17
               staticElement: self::@getter::a
               staticType: null
-              token: a @17
+            element: self::@getter::a
         returnType: dynamic
 ''');
   }
@@ -26646,15 +27555,15 @@
     accessors
       synthetic static get a @-1
         returnType: dynamic
-      set f @23
+      static set f @23
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @17
               staticElement: self::@getter::a
               staticType: null
-              token: a @17
+            element: self::@getter::a
         parameters
           requiredPositional value @25
             type: dynamic
@@ -26672,11 +27581,11 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @17
               staticElement: self::@getter::a
               staticType: null
-              token: a @17
+            element: self::@getter::a
         aliasedType: dynamic Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: dynamic
@@ -26716,11 +27625,11 @@
             metadata
               Annotation
                 atSign: @ @18
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @19
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @19
+                element: self::@getter::a
         returnType: dynamic
 ''');
   }
@@ -26748,11 +27657,11 @@
             metadata
               Annotation
                 atSign: @ @19
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @20
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @20
+                element: self::@getter::a
             constantInitializer
               NullLiteral
                 literal: null @28
@@ -26776,18 +27685,18 @@
         metadata
           Annotation
             atSign: @ @32
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @33
               staticElement: self::@getter::a
               staticType: null
-              token: a @33
+            element: self::@getter::a
           Annotation
             atSign: @ @35
-            element: self::@getter::b
             name: SimpleIdentifier
+              token: b @36
               staticElement: self::@getter::b
               staticType: null
-              token: b @36
+            element: self::@getter::b
         aliasedType: void Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: void
@@ -26823,21 +27732,21 @@
   metadata
     Annotation
       atSign: @ @0
-      element: self::@getter::a
       name: SimpleIdentifier
+        token: a @1
         staticElement: self::@getter::a
         staticType: null
-        token: a @1
+      element: self::@getter::a
   imports
     dart:math
       metadata
         Annotation
           atSign: @ @0
-          element: self::@getter::a
           name: SimpleIdentifier
+            token: a @1
             staticElement: self::@getter::a
             staticType: null
-            token: a @1
+          element: self::@getter::a
   definingUnit
     topLevelVariables
       static const a @29
@@ -26864,21 +27773,21 @@
   metadata
     Annotation
       atSign: @ @0
-      element: self::@getter::a
       name: SimpleIdentifier
+        token: a @1
         staticElement: self::@getter::a
         staticType: null
-        token: a @1
+      element: self::@getter::a
   imports
     dart:math
       metadata
         Annotation
           atSign: @ @0
-          element: self::@getter::a
           name: SimpleIdentifier
+            token: a @1
             staticElement: self::@getter::a
             staticType: null
-            token: a @1
+          element: self::@getter::a
       combinators
         show: Random
   definingUnit
@@ -26913,11 +27822,11 @@
               metadata
                 Annotation
                   atSign: @ @40
-                  element: self::@getter::a
                   name: SimpleIdentifier
+                    token: a @41
                     staticElement: self::@getter::a
                     staticType: null
-                    token: a @41
+                  element: self::@getter::a
           returnType: void
     topLevelVariables
       static const a @6
@@ -26953,11 +27862,11 @@
                   metadata
                     Annotation
                       atSign: @ @48
-                      element: self::@getter::a
                       name: SimpleIdentifier
+                        token: a @49
                         staticElement: self::@getter::a
                         staticType: null
-                        token: a @49
+                      element: self::@getter::a
           returnType: void
     topLevelVariables
       static const a @6
@@ -26989,11 +27898,11 @@
               metadata
                 Annotation
                   atSign: @ @40
-                  element: self::@getter::a
                   name: SimpleIdentifier
+                    token: a @41
                     staticElement: self::@getter::a
                     staticType: null
-                    token: a @41
+                  element: self::@getter::a
           parameters
             requiredPositional first @50
               type: int
@@ -27020,19 +27929,19 @@
       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
-              leftParenthesis: ( @10
               rightParenthesis: ) @13
-            atSign: @ @8
             element: self::@function::f
-            name: SimpleIdentifier
-              staticElement: self::@function::f
-              staticType: null
-              token: f @9
         constructors
           synthetic @-1
     functions
@@ -27053,11 +27962,11 @@
   metadata
     Annotation
       atSign: @ @0
-      element: self::@getter::a
       name: SimpleIdentifier
+        token: a @1
         staticElement: self::@getter::a
         staticType: null
-        token: a @1
+      element: self::@getter::a
   definingUnit
     topLevelVariables
       static const a @20
@@ -27090,11 +27999,11 @@
             metadata
               Annotation
                 atSign: @ @26
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @27
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @27
+                element: self::@getter::a
             returnType: dynamic
     topLevelVariables
       static const a @6
@@ -27131,18 +28040,18 @@
             metadata
               Annotation
                 atSign: @ @44
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @45
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @45
+                element: self::@getter::a
               Annotation
                 atSign: @ @49
-                element: self::@getter::b
                 name: SimpleIdentifier
+                  token: b @50
                   staticElement: self::@getter::b
                   staticType: null
-                  token: b @50
+                element: self::@getter::b
             returnType: dynamic
     topLevelVariables
       static const a @6
@@ -27189,18 +28098,18 @@
             metadata
               Annotation
                 atSign: @ @44
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @45
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @45
+                element: self::@getter::a
               Annotation
                 atSign: @ @49
-                element: self::@getter::b
                 name: SimpleIdentifier
+                  token: b @50
                   staticElement: self::@getter::b
                   staticType: null
-                  token: b @50
+                element: self::@getter::b
             returnType: dynamic
     topLevelVariables
       static const a @6
@@ -27246,11 +28155,11 @@
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @29
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @29
+                element: self::@getter::a
             parameters
               requiredPositional value @39
                 type: dynamic
@@ -27287,22 +28196,22 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @34
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @29
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @30
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @30
+                element: self::@getter::foo
         superclassConstraints
           Object
         fields
@@ -27322,11 +28231,11 @@
             metadata
               Annotation
                 atSign: @ @65
-                element: self::@mixin::M::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @66
                   staticElement: self::@mixin::M::@getter::foo
                   staticType: null
-                  token: foo @66
+                element: self::@mixin::M::@getter::foo
             returnType: void
     topLevelVariables
       static const foo @6
@@ -27356,18 +28265,18 @@
         metadata
           Annotation
             atSign: @ @32
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @33
               staticElement: self::@getter::a
               staticType: null
-              token: a @33
+            element: self::@getter::a
           Annotation
             atSign: @ @35
-            element: self::@getter::b
             name: SimpleIdentifier
+              token: b @36
               staticElement: self::@getter::b
               staticType: null
-              token: b @36
+            element: self::@getter::b
         superclassConstraints
           Object
         constructors
@@ -27408,22 +28317,22 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @34
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @29
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @30
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @30
+                element: self::@getter::foo
         constructors
           synthetic @-1
     topLevelVariables
@@ -27458,22 +28367,22 @@
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @29
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @29
+                element: self::@getter::foo
             parameters
               requiredPositional a @46
                 type: int
                 metadata
                   Annotation
                     atSign: @ @37
-                    element: self::@getter::foo
                     name: SimpleIdentifier
+                      token: foo @38
                       staticElement: self::@getter::foo
                       staticType: null
-                      token: foo @38
+                    element: self::@getter::foo
     topLevelVariables
       static const foo @6
         type: int
@@ -27511,11 +28420,11 @@
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @29
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @29
+                element: self::@getter::foo
             returnType: int
     topLevelVariables
       static const foo @6
@@ -27551,32 +28460,32 @@
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @29
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @29
+                element: self::@getter::foo
             typeParameters
               covariant T @52
                 metadata
                   Annotation
                     atSign: @ @47
-                    element: self::@getter::foo
                     name: SimpleIdentifier
+                      token: foo @48
                       staticElement: self::@getter::foo
                       staticType: null
-                      token: foo @48
+                    element: self::@getter::foo
             parameters
               requiredPositional a @64
                 type: int
                 metadata
                   Annotation
                     atSign: @ @55
-                    element: self::@getter::foo
                     name: SimpleIdentifier
+                      token: foo @56
                       staticElement: self::@getter::foo
                       staticType: null
-                      token: foo @56
+                    element: self::@getter::foo
             returnType: void
     topLevelVariables
       static const foo @6
@@ -27615,22 +28524,22 @@
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @29
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @29
+                element: self::@getter::foo
             parameters
               requiredPositional a @55
                 type: int
                 metadata
                   Annotation
                     atSign: @ @46
-                    element: self::@getter::foo
                     name: SimpleIdentifier
+                      token: foo @47
                       staticElement: self::@getter::foo
                       staticType: null
-                      token: foo @47
+                    element: self::@getter::foo
             returnType: void
     topLevelVariables
       static const foo @6
@@ -27666,22 +28575,22 @@
         metadata
           Annotation
             atSign: @ @39
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @40
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @40
+            element: self::@getter::foo
         typeParameters
           covariant T @57
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @52
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @53
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @53
+                element: self::@getter::foo
         supertype: A
         mixins
           M
@@ -27689,11 +28598,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::A::@constructor::•
     mixins
       mixin M @33
@@ -27733,114 +28642,97 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         supertype: Enum
         fields
           static const enumConstant e1 @37
             metadata
               Annotation
                 atSign: @ @32
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @33
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @33
+                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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 staticType: E
           static const enumConstant e3 @54
             metadata
               Annotation
                 atSign: @ @49
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @50
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @50
+                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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: e1 @-1
                   SimpleIdentifier
+                    token: e2 @-1
                     staticElement: self::@enum::E::@getter::e2
                     staticType: E
-                    token: e2 @-1
                   SimpleIdentifier
+                    token: e3 @-1
                     staticElement: self::@enum::E::@getter::e3
                     staticType: E
-                    token: e3 @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -27852,11 +28744,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static const foo @6
         type: int
@@ -27885,21 +28772,21 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @38
             metadata
               Annotation
                 atSign: @ @33
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @34
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @34
+                element: self::@getter::foo
         extendedType: List<T>
     topLevelVariables
       static const foo @6
@@ -27939,21 +28826,21 @@
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @29
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @29
+                element: self::@getter::foo
             type: int
           static const isStaticConst @79
             metadata
               Annotation
                 atSign: @ @59
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @60
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @60
+                element: self::@getter::foo
             type: int
             constantInitializer
               IntegerLiteral
@@ -27963,11 +28850,11 @@
             metadata
               Annotation
                 atSign: @ @101
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @102
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @102
+                element: self::@getter::foo
             type: int
         constructors
           synthetic @-1
@@ -28017,11 +28904,11 @@
   metadata
     Annotation
       atSign: @ @24
-      element: self::@getter::foo
       name: SimpleIdentifier
+        token: foo @25
         staticElement: self::@getter::foo
         staticType: null
-        token: foo @25
+      element: self::@getter::foo
   definingUnit
     topLevelVariables
       static const foo @52
@@ -28051,22 +28938,22 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @34
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @29
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @30
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @30
+                element: self::@getter::foo
         superclassConstraints
           Object
         constructors
@@ -28099,22 +28986,22 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           unrelated T @41
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @36
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @37
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @37
+                element: self::@getter::foo
         aliasedType: void Function(int)
         aliasedElement: GenericFunctionTypeElement
           parameters
@@ -28123,11 +29010,11 @@
               metadata
                 Annotation
                   atSign: @ @44
-                  element: self::@getter::foo
                   name: SimpleIdentifier
+                    token: foo @45
                     staticElement: self::@getter::foo
                     staticType: null
-                    token: foo @45
+                  element: self::@getter::foo
           returnType: void
     topLevelVariables
       static const foo @6
@@ -28157,22 +29044,22 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           unrelated T @36
             defaultType: dynamic
             metadata
               Annotation
                 atSign: @ @31
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @32
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @32
+                element: self::@getter::foo
         aliasedType: void Function<U>(int)
         aliasedElement: GenericFunctionTypeElement
           typeParameters
@@ -28180,22 +29067,22 @@
               metadata
                 Annotation
                   atSign: @ @55
-                  element: self::@getter::foo
                   name: SimpleIdentifier
+                    token: foo @56
                     staticElement: self::@getter::foo
                     staticType: null
-                    token: foo @56
+                  element: self::@getter::foo
           parameters
             requiredPositional a @72
               type: int
               metadata
                 Annotation
                   atSign: @ @63
-                  element: self::@getter::foo
                   name: SimpleIdentifier
+                    token: foo @64
                     staticElement: self::@getter::foo
                     staticType: null
-                    token: foo @64
+                  element: self::@getter::foo
           returnType: void
     topLevelVariables
       static const foo @6
@@ -28250,20 +29137,20 @@
       metadata
         Annotation
           atSign: @ @17
-          element: self::@getter::foo
           name: SimpleIdentifier
+            token: foo @18
             staticElement: self::@getter::foo
             staticType: null
-            token: foo @18
+          element: self::@getter::foo
     b.dart
       metadata
         Annotation
           atSign: @ @38
-          element: self::@getter::foo
           name: SimpleIdentifier
+            token: foo @39
             staticElement: self::@getter::foo
             staticType: null
-            token: foo @39
+          element: self::@getter::foo
 ''');
   }
 
@@ -28292,32 +29179,32 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         typeParameters
           covariant T @33
             metadata
               Annotation
                 atSign: @ @28
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @29
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @29
+                element: self::@getter::foo
         parameters
           optionalNamed a @47
             type: int?
             metadata
               Annotation
                 atSign: @ @37
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @38
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @38
+                element: self::@getter::foo
             constantInitializer
               IntegerLiteral
                 literal: 42 @51
@@ -28348,15 +29235,15 @@
     accessors
       synthetic static get foo @-1
         returnType: int
-      get getter @29
+      static get getter @29
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         returnType: int
 ''');
   }
@@ -28383,26 +29270,26 @@
     accessors
       synthetic static get foo @-1
         returnType: int
-      set setter @25
+      static set setter @25
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         parameters
           requiredPositional a @41
             type: int
             metadata
               Annotation
                 atSign: @ @32
-                element: self::@getter::foo
                 name: SimpleIdentifier
+                  token: foo @33
                   staticElement: self::@getter::foo
                   staticType: null
-                  token: foo @33
+                element: self::@getter::foo
         returnType: void
 ''');
   }
@@ -28431,21 +29318,21 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @17
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @17
+            element: self::@getter::foo
         type: int
       static const isConst @53
         metadata
           Annotation
             atSign: @ @42
-            element: self::@getter::foo
             name: SimpleIdentifier
+              token: foo @43
               staticElement: self::@getter::foo
               staticType: null
-              token: foo @43
+            element: self::@getter::foo
         type: int
         constantInitializer
           IntegerLiteral
@@ -28493,11 +29380,11 @@
       metadata
         Annotation
           atSign: @ @11
-          element: self::@getter::a
           name: SimpleIdentifier
+            token: a @12
             staticElement: self::@getter::a
             staticType: null
-            token: a @12
+          element: self::@getter::a
 ''');
   }
 
@@ -28531,19 +29418,19 @@
         metadata
           Annotation
             atSign: @ @22
-            element: a.dart::@getter::b
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: a.dart::@getter::b
-                staticType: null
-                token: b @25
-              period: . @24
               prefix: SimpleIdentifier
+                token: a @23
                 staticElement: self::@prefix::a
                 staticType: null
-                token: a @23
+              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
 ''');
@@ -28572,11 +29459,11 @@
             metadata
               Annotation
                 atSign: @ @18
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @19
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @19
+                element: self::@getter::a
         returnType: dynamic
 ''');
   }
@@ -28604,11 +29491,11 @@
                 metadata
                   Annotation
                     atSign: @ @31
-                    element: self::@getter::a
                     name: SimpleIdentifier
+                      token: a @32
                       staticElement: self::@getter::a
                       staticType: null
-                      token: a @32
+                    element: self::@getter::a
             returnType: dynamic
     topLevelVariables
       static const a @6
@@ -28644,18 +29531,18 @@
     accessors
       synthetic static get a @-1
         returnType: dynamic
-      set foo @21
+      static set foo @21
         parameters
           requiredPositional x @32
             type: int
             metadata
               Annotation
                 atSign: @ @25
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @26
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @26
+                element: self::@getter::a
         returnType: void
 ''');
   }
@@ -28683,11 +29570,11 @@
             metadata
               Annotation
                 atSign: @ @19
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @20
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @20
+                element: self::@getter::a
             constantInitializer
               NullLiteral
                 literal: null @26
@@ -28728,11 +29615,11 @@
                 metadata
                   Annotation
                     atSign: @ @66
-                    element: self::@getter::a
                     name: SimpleIdentifier
+                      token: a @67
                       staticElement: self::@getter::a
                       staticType: null
-                      token: a @67
+                    element: self::@getter::a
                 superConstructorParameter: x@35
             superConstructor: self::@class::A::@constructor::•
     topLevelVariables
@@ -28764,11 +29651,11 @@
         metadata
           Annotation
             atSign: @ @16
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @17
               staticElement: self::@getter::a
               staticType: null
-              token: a @17
+            element: self::@getter::a
         type: int
     accessors
       synthetic static get a @-1
@@ -28796,11 +29683,11 @@
             metadata
               Annotation
                 atSign: @ @24
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @25
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @25
+                element: self::@getter::a
         constructors
           synthetic @-1
     topLevelVariables
@@ -28833,11 +29720,11 @@
             metadata
               Annotation
                 atSign: @ @24
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @25
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @25
+                element: self::@getter::a
         supertype: D
         mixins
           E
@@ -28845,11 +29732,11 @@
           synthetic @-1
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
                   leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::D::@constructor::•
-                superKeyword: super @0
             superConstructor: self::@class::D::@constructor::•
       class D @48
         constructors
@@ -28870,95 +29757,6 @@
 ''');
   }
 
-  test_metadata_typeParameter_ofEnum() 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
-                element: <null>
-                name: SimpleIdentifier
-                  staticElement: <null>
-                  staticType: null
-                  token: a @22
-        supertype: Enum
-        fields
-          static const enumConstant v @31
-            type: E<dynamic>
-            constantInitializer
-              InstanceCreationExpression
-                argumentList: ArgumentList
-                  leftParenthesis: ( @0
-                  rightParenthesis: ) @0
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: ConstructorMember
-                      base: self::@enum::E::@constructor::•
-                      substitution: {T: dynamic}
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: ConstructorMember
-                    base: self::@enum::E::@constructor::•
-                    substitution: {T: dynamic}
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E<dynamic>
-                staticType: E<dynamic>
-          synthetic static const values @-1
-            type: List<E<dynamic>>
-            constantInitializer
-              ListLiteral
-                elements
-                  SimpleIdentifier
-                    staticElement: self::@enum::E::@getter::v
-                    staticType: E<dynamic>
-                    token: v @-1
-                leftBracket: [ @0
-                rightBracket: ] @0
-                staticType: List<E<dynamic>>
-          synthetic final index @-1
-            type: int
-        constructors
-          synthetic const @-1
-        accessors
-          synthetic static get v @-1
-            returnType: E<dynamic>
-          synthetic static get values @-1
-            returnType: List<E<dynamic>>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
-    topLevelVariables
-      static const a @6
-        type: int
-        constantInitializer
-          IntegerLiteral
-            literal: 42 @10
-            staticType: int
-    accessors
-      synthetic static get a @-1
-        returnType: int
-''');
-  }
-
   test_metadata_typeParameter_ofFunction() async {
     var library = await checkLibrary('const a = null; f<@a T>() {}');
     checkElementText(library, r'''
@@ -28981,11 +29779,11 @@
             metadata
               Annotation
                 atSign: @ @18
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @19
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @19
+                element: self::@getter::a
         returnType: dynamic
 ''');
   }
@@ -29003,11 +29801,11 @@
             metadata
               Annotation
                 atSign: @ @26
-                element: self::@getter::a
                 name: SimpleIdentifier
+                  token: a @27
                   staticElement: self::@getter::a
                   staticType: null
-                  token: a @27
+                element: self::@getter::a
         aliasedType: dynamic Function()
         aliasedElement: GenericFunctionTypeElement
           returnType: dynamic
@@ -29049,11 +29847,11 @@
         metadata
           Annotation
             atSign: @ @13
-            element: self::@getter::a
             name: SimpleIdentifier
+              token: a @14
               staticElement: self::@getter::a
               staticType: null
-              token: a @14
+            element: self::@getter::a
         type: int
     accessors
       synthetic static get a @-1
@@ -29098,19 +29896,19 @@
         metadata
           Annotation
             atSign: @ @34
-            element: self::@class::A::@getter::x
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: self::@class::A::@getter::x
-                staticType: null
-                token: x @37
-              period: . @36
               prefix: SimpleIdentifier
+                token: A @35
                 staticElement: self::@class::A
                 staticType: null
-                token: A @35
+              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
 ''');
@@ -29131,19 +29929,19 @@
         metadata
           Annotation
             atSign: @ @17
-            element: self::@enum::E::@getter::b
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: self::@enum::E::@getter::b
-                staticType: null
-                token: b @20
-              period: . @19
               prefix: SimpleIdentifier
+                token: E @18
                 staticElement: self::@enum::E
                 staticType: null
-                token: E @18
+              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
@@ -29154,87 +29952,70 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
                   SimpleIdentifier
+                    token: c @-1
                     staticElement: self::@enum::E::@getter::c
                     staticType: E
-                    token: c @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -29246,11 +30027,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
 ''');
   }
 
@@ -29271,19 +30047,19 @@
         metadata
           Annotation
             atSign: @ @45
-            element: self::@extension::E::@getter::x
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: self::@extension::E::@getter::x
-                staticType: null
-                token: x @48
-              period: . @47
               prefix: SimpleIdentifier
+                token: E @46
                 staticElement: self::@extension::E
                 staticType: null
-                token: E @46
+              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
@@ -29324,23 +30100,24 @@
         metadata
           Annotation
             atSign: @ @26
-            constructorName: SimpleIdentifier
-              staticElement: package:test/foo.dart::@extension::E::@getter::x
-              staticType: null
-              token: x @33
-            element: package:test/foo.dart::@extension::E::@getter::x
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: package:test/foo.dart::@extension::E
-                staticType: null
-                token: E @31
-              period: . @30
               prefix: SimpleIdentifier
+                token: foo @27
                 staticElement: self::@prefix::foo
                 staticType: null
-                token: foo @27
+              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
 ''');
@@ -30192,7 +30969,7 @@
       synthetic static foo @-1
         type: int
     accessors
-      get foo @8
+      static get foo @8
         returnType: int
 ''');
   }
@@ -30542,66 +31319,53 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: a @-1
                   SimpleIdentifier
+                    token: b @-1
                     staticElement: self::@enum::E::@getter::b
                     staticType: E
-                    token: b @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
             nonSynthetic: self::@enum::E
-          synthetic final index @-1
-            type: int
-            nonSynthetic: self::@enum::E
         constructors
           synthetic const @-1
             nonSynthetic: self::@enum::E
@@ -30615,13 +31379,6 @@
           synthetic static get values @-1
             returnType: List<E>
             nonSynthetic: self::@enum::E
-          synthetic get index @-1
-            returnType: int
-            nonSynthetic: self::@enum::E
-        methods
-          synthetic toString @-1
-            returnType: String
-            nonSynthetic: self::@enum::E
 ''',
         withNonSynthetic: true);
   }
@@ -30797,7 +31554,7 @@
         type: int
         nonSynthetic: self::@getter::foo
     accessors
-      get foo @8
+      static get foo @8
         returnType: int
         nonSynthetic: self::@getter::foo
 ''',
@@ -30819,10 +31576,10 @@
         type: int
         nonSynthetic: self::@getter::foo
     accessors
-      get foo @8
+      static get foo @8
         returnType: int
         nonSynthetic: self::@getter::foo
-      set foo @22
+      static set foo @22
         parameters
           requiredPositional value @30
             type: int
@@ -30847,7 +31604,7 @@
         type: int
         nonSynthetic: self::@setter::foo
     accessors
-      set foo @4
+      static set foo @4
         parameters
           requiredPositional value @12
             type: int
@@ -31415,7 +32172,7 @@
       synthetic static x @-1
         type: dynamic
     accessors
-      set x @69
+      static set x @69
         documentationComment: /**\n * Docs\n */
         parameters
           requiredPositional value @71
@@ -31433,7 +32190,7 @@
       synthetic static x @-1
         type: int
     accessors
-      external set x @18
+      static external set x @18
         parameters
           requiredPositional value @24
             type: int
@@ -31450,7 +32207,7 @@
       synthetic static f @-1
         type: int
     accessors
-      set f @4
+      static set f @4
         parameters
           requiredPositional value @10
             type: int
@@ -31470,12 +32227,12 @@
       synthetic static y @-1
         type: dynamic
     accessors
-      set x @9
+      static set x @9
         parameters
           requiredPositional value @15
             type: int
         returnType: void
-      set y @29
+      static set y @29
         parameters
           requiredPositional value @31
             type: dynamic
@@ -32018,16 +32775,16 @@
                 type: T
             constantInitializers
               SuperConstructorInvocation
+                superKeyword: super @0
                 argumentList: ArgumentList
+                  leftParenthesis: ( @0
                   arguments
                     SimpleIdentifier
+                      token: value @-1
                       staticElement: value@-1
                       staticType: T
-                      token: value @-1
-                  leftParenthesis: ( @0
                   rightParenthesis: ) @0
                 staticElement: self::@class::A::@constructor::•
-                superKeyword: super @0
             superConstructor: ConstructorMember
               base: self::@class::A::@constructor::•
               substitution: {T: T}
@@ -32598,37 +33355,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -32636,11 +33386,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     typeAliases
       functionTypeAliasBased F @32
         aliasedType: dynamic Function()
@@ -32736,37 +33481,30 @@
               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
-                  constructorName: ConstructorName
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E::@constructor::•
-                      staticType: null
-                      token:  @-1
-                    period: . @0
-                    staticElement: self::@enum::E::@constructor::•
-                    type: NamedType
-                      name: SimpleIdentifier
-                        staticElement: self::@enum::E
-                        staticType: null
-                        token: E @-1
-                      type: E
                   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
-                      token: v @-1
-                  leftBracket: [ @0
                   rightBracket: ] @0
                   staticType: List<E>
-            synthetic final index @-1
-              type: int
           constructors
             synthetic const @-1
           accessors
@@ -32774,11 +33512,6 @@
               returnType: E
             synthetic static get values @-1
               returnType: List<E>
-            synthetic get index @-1
-              returnType: int
-          methods
-            synthetic toString @-1
-              returnType: String
       typeAliases
         functionTypeAliasBased F @43
           aliasedType: dynamic Function()
@@ -32808,37 +33541,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -32846,11 +33572,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     typeAliases
       functionTypeAliasBased F @58
         aliasedType: dynamic Function()
@@ -32917,37 +33638,30 @@
               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
-                  constructorName: ConstructorName
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E::@constructor::•
-                      staticType: null
-                      token:  @-1
-                    period: . @0
-                    staticElement: self::@enum::E::@constructor::•
-                    type: NamedType
-                      name: SimpleIdentifier
-                        staticElement: self::@enum::E
-                        staticType: null
-                        token: E @-1
-                      type: E
                   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
-                      token: v @-1
-                  leftBracket: [ @0
                   rightBracket: ] @0
                   staticType: List<E>
-            synthetic final index @-1
-              type: int
           constructors
             synthetic const @-1
           accessors
@@ -32955,11 +33669,6 @@
               returnType: E
             synthetic static get values @-1
               returnType: List<E>
-            synthetic get index @-1
-              returnType: int
-          methods
-            synthetic toString @-1
-              returnType: String
       typeAliases
         functionTypeAliasBased F @43
           aliasedType: dynamic Function()
@@ -33024,37 +33733,30 @@
               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
-                  constructorName: ConstructorName
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E::@constructor::•
-                      staticType: null
-                      token:  @-1
-                    period: . @0
-                    staticElement: self::@enum::E::@constructor::•
-                    type: NamedType
-                      name: SimpleIdentifier
-                        staticElement: self::@enum::E
-                        staticType: null
-                        token: E @-1
-                      type: E
                   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
-                      token: v @-1
-                  leftBracket: [ @0
                   rightBracket: ] @0
                   staticType: List<E>
-            synthetic final index @-1
-              type: int
           constructors
             synthetic const @-1
           accessors
@@ -33062,11 +33764,6 @@
               returnType: E
             synthetic static get values @-1
               returnType: List<E>
-            synthetic get index @-1
-              returnType: int
-          methods
-            synthetic toString @-1
-              returnType: String
       typeAliases
         functionTypeAliasBased F @43
           aliasedType: dynamic Function()
@@ -33199,37 +33896,30 @@
             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
-                constructorName: ConstructorName
-                  name: SimpleIdentifier
-                    staticElement: self::@enum::E::@constructor::•
-                    staticType: null
-                    token:  @-1
-                  period: . @0
-                  staticElement: self::@enum::E::@constructor::•
-                  type: NamedType
-                    name: SimpleIdentifier
-                      staticElement: self::@enum::E
-                      staticType: null
-                      token: E @-1
-                    type: E
                 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
-                    token: v @-1
-                leftBracket: [ @0
                 rightBracket: ] @0
                 staticType: List<E>
-          synthetic final index @-1
-            type: int
         constructors
           synthetic const @-1
         accessors
@@ -33237,11 +33927,6 @@
             returnType: E
           synthetic static get values @-1
             returnType: List<E>
-          synthetic get index @-1
-            returnType: int
-        methods
-          synthetic toString @-1
-            returnType: String
     topLevelVariables
       static e @15
         type: E
@@ -35864,9 +36549,9 @@
       synthetic static x @-1
         type: int
     accessors
-      get x @8
+      static get x @8
         returnType: int
-      set x @25
+      static set x @25
         parameters
           requiredPositional value @31
             type: int
@@ -35886,12 +36571,12 @@
       synthetic static x @-1
         type: int
     accessors
-      set x @9
+      static set x @9
         parameters
           requiredPositional value @15
             type: int
         returnType: void
-      get x @33
+      static get x @33
         returnType: int
 ''');
   }
@@ -35910,7 +36595,7 @@
     accessors
       synthetic static get foo @-1
         returnType: int
-      set foo @23
+      static set foo @23
         parameters
           requiredPositional newValue @31
             type: int
@@ -35940,19 +36625,19 @@
       class C @43
         metadata
           Annotation
-            arguments: ArgumentList
-              arguments
-                SuperExpression
-                  staticType: dynamic
-                  superKeyword: super @30
-              leftParenthesis: ( @29
-              rightParenthesis: ) @35
             atSign: @ @27
-            element: self::@class::A::@constructor::•
             name: SimpleIdentifier
+              token: A @28
               staticElement: self::@class::A
               staticType: null
-              token: A @28
+            arguments: ArgumentList
+              leftParenthesis: ( @29
+              arguments
+                SuperExpression
+                  superKeyword: super @30
+                  staticType: dynamic
+              rightParenthesis: ) @35
+            element: self::@class::A::@constructor::•
         constructors
           synthetic @-1
 ''');
@@ -35980,19 +36665,19 @@
       class C @42
         metadata
           Annotation
-            arguments: ArgumentList
-              arguments
-                ThisExpression
-                  staticType: dynamic
-                  thisKeyword: this @30
-              leftParenthesis: ( @29
-              rightParenthesis: ) @34
             atSign: @ @27
-            element: self::@class::A::@constructor::•
             name: SimpleIdentifier
+              token: A @28
               staticElement: self::@class::A
               staticType: null
-              token: A @28
+            arguments: ArgumentList
+              leftParenthesis: ( @29
+              arguments
+                ThisExpression
+                  thisKeyword: this @30
+                  staticType: dynamic
+              rightParenthesis: ) @34
+            element: self::@class::A::@constructor::•
         constructors
           synthetic @-1
 ''');
@@ -36008,23 +36693,23 @@
       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
-            atSign: @ @0
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @5
-              period: . @4
-              prefix: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: foo @1
-              staticElement: <null>
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36040,23 +36725,23 @@
       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
-            atSign: @ @0
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: foo @8
-              period: . @7
-              prefix: SimpleIdentifier
-                staticElement: dart:core::@class::String
-                staticType: null
-                token: String @1
-              staticElement: <null>
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36072,19 +36757,19 @@
         metadata
           Annotation
             atSign: @ @0
-            element: <null>
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @5
-              period: . @4
               prefix: SimpleIdentifier
+                token: foo @1
                 staticElement: <null>
                 staticType: null
-                token: foo @1
+              period: . @4
+              identifier: SimpleIdentifier
+                token: bar @5
+                staticElement: <null>
+                staticType: null
               staticElement: <null>
               staticType: null
+            element: <null>
         constructors
           synthetic @-1
 ''');
@@ -36104,19 +36789,19 @@
         metadata
           Annotation
             atSign: @ @28
-            element: <null>
             name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @33
-              period: . @32
               prefix: SimpleIdentifier
+                token: foo @29
                 staticElement: self::@prefix::foo
                 staticType: null
-                token: foo @29
+              period: . @32
+              identifier: SimpleIdentifier
+                token: bar @33
+                staticElement: <null>
+                staticType: null
               staticElement: <null>
               staticType: null
+            element: <null>
         constructors
           synthetic @-1
 ''');
@@ -36132,27 +36817,28 @@
       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
-            atSign: @ @0
-            constructorName: SimpleIdentifier
-              staticElement: <null>
-              staticType: null
-              token: baz @9
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @5
-              period: . @4
-              prefix: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: foo @1
-              staticElement: <null>
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36171,27 +36857,28 @@
       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
-            atSign: @ @28
-            constructorName: SimpleIdentifier
-              staticElement: <null>
-              staticType: null
-              token: baz @37
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @33
-              period: . @32
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @29
-              staticElement: <null>
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36210,27 +36897,28 @@
       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
-            atSign: @ @28
-            constructorName: SimpleIdentifier
-              staticElement: <null>
-              staticType: null
-              token: bar @40
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: dart:async::@class::Future
-                staticType: null
-                token: Future @33
-              period: . @32
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @29
-              staticElement: dart:async::@class::Future
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36246,23 +36934,23 @@
       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
-            atSign: @ @0
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @5
-              period: . @4
-              prefix: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: foo @1
-              staticElement: <null>
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36281,23 +36969,23 @@
       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
-            atSign: @ @28
             element: <null>
-            name: PrefixedIdentifier
-              identifier: SimpleIdentifier
-                staticElement: <null>
-                staticType: null
-                token: bar @33
-              period: . @32
-              prefix: SimpleIdentifier
-                staticElement: self::@prefix::foo
-                staticType: null
-                token: foo @29
-              staticElement: <null>
-              staticType: null
         constructors
           synthetic @-1
 ''');
@@ -36313,11 +37001,11 @@
         metadata
           Annotation
             atSign: @ @0
-            element: <null>
             name: SimpleIdentifier
+              token: foo @1
               staticElement: <null>
               staticType: null
-              token: foo @1
+            element: <null>
         constructors
           synthetic @-1
 ''');
@@ -36344,11 +37032,11 @@
         metadata
           Annotation
             atSign: @ @35
-            element: <null>
             name: SimpleIdentifier
+              token: v @36
               staticElement: <null>
               staticType: null
-              token: v @36
+            element: <null>
         constructors
           synthetic @-1
 ''');
@@ -36363,15 +37051,15 @@
       class C @13
         metadata
           Annotation
+            atSign: @ @0
+            name: SimpleIdentifier
+              token: foo @1
+              staticElement: <null>
+              staticType: null
             arguments: ArgumentList
               leftParenthesis: ( @4
               rightParenthesis: ) @5
-            atSign: @ @0
             element: <null>
-            name: SimpleIdentifier
-              staticElement: <null>
-              staticType: null
-              token: foo @1
         constructors
           synthetic @-1
 ''');
@@ -36567,7 +37255,7 @@
       synthetic static x @-1
         type: int
     accessors
-      get x @39
+      static get x @39
         returnType: int
   parts
     a.dart
@@ -36575,7 +37263,7 @@
         synthetic static x @-1
           type: int
       accessors
-        set x @25
+        static set x @25
           parameters
             requiredPositional _ @31
               type: int
@@ -36602,7 +37290,7 @@
       synthetic static x @-1
         type: int
     accessors
-      set x @40
+      static set x @40
         parameters
           requiredPositional _ @46
             type: int
@@ -36613,7 +37301,7 @@
         synthetic static x @-1
           type: int
       accessors
-        get x @24
+        static get x @24
           returnType: int
 ''');
   }
@@ -36634,14 +37322,14 @@
         synthetic static x @-1
           type: int
       accessors
-        get x @24
+        static get x @24
           returnType: int
     b.dart
       topLevelVariables
         synthetic static x @-1
           type: int
       accessors
-        set x @25
+        static set x @25
           parameters
             requiredPositional _ @31
               type: int
@@ -36965,7 +37653,7 @@
         synthetic static x @-1
           type: int
       accessors
-        set x @25
+        static set x @25
           parameters
             requiredPositional _ @31
               type: int
@@ -36975,7 +37663,7 @@
         synthetic static x @-1
           type: int
       accessors
-        get x @24
+        static get x @24
           returnType: int
 ''');
   }
@@ -37076,19 +37764,19 @@
         type: A<int>
         constantInitializer
           InstanceCreationExpression
-            argumentList: ArgumentList
-              leftParenthesis: ( @46
-              rightParenthesis: ) @47
             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}
-              type: NamedType
-                name: SimpleIdentifier
-                  staticElement: self::@class::A
-                  staticType: null
-                  token: A @45
-                type: A<int>
+            argumentList: ArgumentList
+              leftParenthesis: ( @46
+              rightParenthesis: ) @47
             staticType: A<int>
     accessors
       synthetic static get a @-1
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
index 8d21be1..b8a9282 100644
--- a/pkg/analyzer/test/src/summary/test_strategies.dart
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -25,6 +25,7 @@
       featureSet: featureSet,
     );
   Token token = scanner.tokenize();
+  LineInfo lineInfo = LineInfo(scanner.lineStarts);
   // Pass the feature set from the scanner to the parser
   // because the scanner may have detected a language version comment
   // and downgraded the feature set it holds.
@@ -32,10 +33,9 @@
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: scanner.featureSet,
+    lineInfo: lineInfo,
   );
   var unit = parser.parseCompilationUnit(token);
-  unit.lineInfo = LineInfo(scanner.lineStarts);
-
   unit.languageVersion = LibraryLanguageVersion(
     package: ExperimentStatus.currentVersion,
     override: null,
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 f2133b0..3974511 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -1999,7 +1999,7 @@
           requiredPositional _r_instanceClassMethod @-1
             type: String Function(int)
         returnType: void
-      get topLevelGetter @74
+      static get topLevelGetter @74
         returnType: int
     functions
       topLevelFunction @7
diff --git a/pkg/analyzer/test/util/ast_check.dart b/pkg/analyzer/test/util/ast_check.dart
index 0cc0ab6..8119c60 100644
--- a/pkg/analyzer/test/util/ast_check.dart
+++ b/pkg/analyzer/test/util/ast_check.dart
@@ -6,6 +6,99 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer_utilities/check/check.dart';
 
+import 'token_check.dart';
+
+extension ArgumentListExtension on CheckTarget<ArgumentList> {
+  CheckTarget<List<Expression>> get arguments {
+    return nest(
+      value.arguments,
+      (selected) => 'has arguments ${valueStr(selected)}',
+    );
+  }
+
+  void get isSynthetic {
+    leftParenthesis
+      ..isOpenParenthesis
+      ..isSynthetic;
+    rightParenthesis
+      ..isCloseParenthesis
+      ..isSynthetic;
+    arguments.isEmpty;
+  }
+
+  CheckTarget<Token> get leftParenthesis {
+    return nest(
+      value.leftParenthesis,
+      (selected) => 'has leftParenthesis ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<Token> get rightParenthesis {
+    return nest(
+      value.rightParenthesis,
+      (selected) => 'has rightParenthesis ${valueStr(selected)}',
+    );
+  }
+}
+
+extension ConstructorSelectorExtension on CheckTarget<ConstructorSelector> {
+  CheckTarget<SimpleIdentifier> get name {
+    return nest(
+      value.name,
+      (selected) => 'has name ${valueStr(selected)}',
+    );
+  }
+}
+
+extension EnumConstantArgumentsExtension on CheckTarget<EnumConstantArguments> {
+  CheckTarget<ArgumentList> get argumentList {
+    return nest(
+      value.argumentList,
+      (selected) => 'has argumentList ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<ConstructorSelector?> get constructorSelector {
+    return nest(
+      value.constructorSelector,
+      (selected) => 'has constructorSelector ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<TypeArgumentList?> get typeArguments {
+    return nest(
+      value.typeArguments,
+      (selected) => 'has typeArguments ${valueStr(selected)}',
+    );
+  }
+}
+
+extension EnumConstantDeclarationExtension
+    on CheckTarget<EnumConstantDeclaration> {
+  CheckTarget<EnumConstantArguments?> get arguments {
+    return nest(
+      value.arguments,
+      (selected) => 'has arguments ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<SimpleIdentifier> get name {
+    return nest(
+      value.name,
+      (selected) => 'has name ${valueStr(selected)}',
+    );
+  }
+}
+
+extension EnumDeclarationExtension on CheckTarget<EnumDeclaration> {
+  CheckTarget<Token?> get semicolon {
+    return nest(
+      value.semicolon,
+      (selected) => 'has semicolon ${valueStr(selected)}',
+    );
+  }
+}
+
 extension FormalParameterExtension on CheckTarget<FormalParameter> {
   CheckTarget<SimpleIdentifier?> get identifier {
     return nest(
@@ -39,6 +132,12 @@
     );
   }
 
+  void get isSynthetic {
+    if (!value.token.isSynthetic) {
+      fail('Is not synthetic');
+    }
+  }
+
   CheckTarget<String> get name {
     return nest(
       value.name,
diff --git a/pkg/analyzer/test/util/feature_sets.dart b/pkg/analyzer/test/util/feature_sets.dart
new file mode 100644
index 0000000..85a4cd9
--- /dev/null
+++ b/pkg/analyzer/test/util/feature_sets.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.
+
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:pub_semver/pub_semver.dart';
+
+class FeatureSets {
+  static final FeatureSet language_2_3 = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.3.0'),
+    flags: [],
+  );
+
+  static final FeatureSet language_2_9 = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.9.0'),
+    flags: [],
+  );
+
+  static final FeatureSet language_2_12 = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.12.0'),
+    flags: [],
+  );
+
+  static final FeatureSet language_2_13 = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.13.0'),
+    flags: [],
+  );
+
+  static final FeatureSet language_2_16 = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: Version.parse('2.16.0'),
+    flags: [],
+  );
+
+  static final FeatureSet latest = FeatureSet.latestLanguageVersion();
+
+  static final FeatureSet latestWithExperiments = FeatureSet.fromEnableFlags2(
+    sdkLanguageVersion: ExperimentStatus.currentVersion,
+    flags: [
+      EnableString.constructor_tearoffs,
+      EnableString.enhanced_enums,
+      EnableString.super_parameters,
+    ],
+  );
+
+  FeatureSets._();
+}
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index d39b7db..69780494 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -196,7 +196,7 @@
         });
       } else {
         String _formatError(AnalysisError e) {
-          var locationInfo = result.unit.lineInfo!.getLocation(e.offset);
+          var locationInfo = result.unit.lineInfo.getLocation(e.offset);
           return '$locationInfo: ${e.errorCode}: ${e.message}';
         }
 
diff --git a/pkg/analyzer/test/util/token_check.dart b/pkg/analyzer/test/util/token_check.dart
index 7d8fc24..67671d0 100644
--- a/pkg/analyzer/test/util/token_check.dart
+++ b/pkg/analyzer/test/util/token_check.dart
@@ -15,7 +15,59 @@
   }
 }
 
-extension TokenExtension on CheckTarget<Token?> {
+extension TokenExtension on CheckTarget<Token> {
+  void get isCloseParenthesis {
+    type.isEqualTo(TokenType.CLOSE_PAREN);
+  }
+
+  void get isOpenParenthesis {
+    type.isEqualTo(TokenType.OPEN_PAREN);
+  }
+
+  void get isSemicolon {
+    type.isEqualTo(TokenType.SEMICOLON);
+  }
+
+  void get isSynthetic {
+    if (value.isSynthetic) return;
+    fail('Not synthetic');
+  }
+
+  CheckTarget<Token?> get next {
+    return nest(
+      value.next,
+      (selected) => 'has next ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<Token?> get previous {
+    return nest(
+      value.previous,
+      (selected) => 'has previous ${valueStr(selected)}',
+    );
+  }
+
+  CheckTarget<TokenType> get type {
+    return nest(
+      value.type,
+      (selected) => 'has type ${valueStr(selected)}',
+    );
+  }
+
+  void isLinkedToNext(Token next) {
+    this.next.isEqualTo(next);
+    nest(next, (value) => 'next ${valueStr(value)}').previous.isEqualTo(value);
+  }
+
+  void isLinkedToPrevious(Token previous) {
+    nest(previous, (value) => 'given previous ${valueStr(value)}')
+        .next
+        .isEqualTo(value);
+    this.previous.isEqualTo(previous);
+  }
+}
+
+extension TokenQuestionExtension on CheckTarget<Token?> {
   CheckTarget<KeywordToken> get isKeyword {
     return isA<KeywordToken>();
   }
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index 873f700..e56d8b6 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -423,6 +423,9 @@
   }
 
   @override
+  String get testPackageRootPath => '$workspaceRootPath/docTest';
+
+  @override
   void setUp() {
     super.setUp();
     _createAuxiliaryFiles(snippet.auxiliaryFiles);
diff --git a/pkg/analyzer/test/verify_tests_test.dart b/pkg/analyzer/test/verify_tests_test.dart
index fd16bb7..e401e59 100644
--- a/pkg/analyzer/test/verify_tests_test.dart
+++ b/pkg/analyzer/test/verify_tests_test.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:analyzer_utilities/verify_tests.dart';
+import 'package:path/path.dart' as package_path;
 
 main() {
   var provider = PhysicalResourceProvider.INSTANCE;
@@ -24,6 +25,16 @@
       resource.shortName.endsWith('_integration_test.dart');
 
   @override
+  bool isOkAsAdditionalTestAllImport(Folder folder, String uri) {
+    // This is not really a test, but a helper to update expectations.
+    if (package_path.url.basename(uri) == 'node_text_expectations.dart') {
+      return true;
+    }
+
+    return super.isOkAsAdditionalTestAllImport(folder, uri);
+  }
+
+  @override
   bool isOkForTestAllToBeMissing(Folder folder) =>
       folder.shortName == 'id_tests';
 }
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index c8454b0..94268b2 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -21,13 +21,17 @@
 * [definite assignment][]
 * [mixin application][]
 * [override inference][]
+* [part file][]
 * [potentially non-nullable][]
+* [public library][]
 
 [constant context]: #constant-context
 [definite assignment]: #definite-assignment
 [mixin application]: #mixin-application
 [override inference]: #override-inference
+[part file]: #part-file
 [potentially non-nullable]: #potentially-non-nullable
+[public library]: #public-library
 
 ### Constant context
 
@@ -248,6 +252,10 @@
 It is an error if none of the overridden methods has a function type that is a
 supertype of all the other overridden methods.
 
+### Part file
+
+A part file is a Dart source file that contains a `part of` directive.
+
 ### Potentially non-nullable
 
 A type is _potentially non-nullable_ if it's either explicitly non-nullable or
@@ -264,12 +272,30 @@
 given a declaration of `class C<T> {}`, the type `C` could be used with a
 non-nullable type argument as in `C<int>`.
 
+### Public library
+
+A public library is a library that is located inside the package's `lib`
+directory but not inside the `lib/src` directory.
+
 ## Diagnostics
 
 The analyzer produces the following diagnostics for code that
 doesn't conform to the language specification or
 that might work in unexpected ways.
 
+[meta-doNotStore]: https://pub.dev/documentation/meta/latest/meta/doNotStore-constant.html
+[meta-factory]: https://pub.dev/documentation/meta/latest/meta/factory-constant.html
+[meta-immutable]: https://pub.dev/documentation/meta/latest/meta/immutable-constant.html
+[meta-internal]: https://pub.dev/documentation/meta/latest/meta/internal-constant.html
+[meta-literal]: https://pub.dev/documentation/meta/latest/meta/literal-constant.html
+[meta-mustCallSuper]: https://pub.dev/documentation/meta/latest/meta/mustCallSuper-constant.html
+[meta-optionalTypeArgs]: https://pub.dev/documentation/meta/latest/meta/optionalTypeArgs-constant.html
+[meta-sealed]: https://pub.dev/documentation/meta/latest/meta/sealed-constant.html
+[meta-useResult]: https://pub.dev/documentation/meta/latest/meta/useResult-constant.html
+[meta-UseResult]: https://pub.dev/documentation/meta/latest/meta/UseResult-class.html
+[meta-visibleForOverriding]: https://pub.dev/documentation/meta/latest/meta/visibleForOverriding-constant.html
+[meta-visibleForTesting]: https://pub.dev/documentation/meta/latest/meta/visibleForTesting-constant.html
+
 ### abstract_field_initializer
 
 _Abstract fields can't have initializers._
@@ -1025,6 +1051,37 @@
     - image.gif
 ```
 
+### assignment_of_do_not_store
+
+_'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or top-level
+variable._
+
+#### Description
+
+The analyzer produces this diagnostic when the value of a function
+(including methods and getters) that is explicitly or implicitly marked by
+the `[doNotStore][meta-doNotStore]` annotation is stored in either a field
+or top-level variable.
+
+#### Example
+
+The following code produces this diagnostic because the value of the
+function `f` is being stored in the top-level variable `x`:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@doNotStore
+int f() => 1;
+
+var x = [!f()!];
+{% endprettify %}
+
+#### Common fixes
+
+Replace references to the field or variable with invocations of the
+function producing the value.
+
 ### assignment_to_const
 
 _Constant variables can't be assigned a value._
@@ -1492,6 +1549,45 @@
 }
 {% endprettify %}
 
+### body_might_complete_normally_nullable
+
+_This function has a nullable return type of '{0}', but ends without returning a
+value._
+
+#### Description
+
+The analyzer produces this diagnostic when a method or function can
+implicitly return `null` by falling off the end. While this is valid Dart
+code, it's better for the return of `null` to be explicit.
+
+#### Example
+
+The following code produces this diagnostic because the function `f`
+implicitly returns `null`:
+
+{% prettify dart tag=pre+code %}
+String? [!f!]() {}
+{% endprettify %}
+
+#### Common fixes
+
+If the return of `null` is intentional, then make it explicit:
+
+{% prettify dart tag=pre+code %}
+String? f() {
+  return null;
+}
+{% endprettify %}
+
+If the function should return a non-null value along that path, then add
+the missing return statement:
+
+{% prettify dart tag=pre+code %}
+String? f() {
+  return '';
+}
+{% endprettify %}
+
 ### break_label_on_switch_member
 
 _A break label resolves to the 'case' or 'default' statement._
@@ -2026,6 +2122,9 @@
 _'{0}' can't be used to name both a type variable and the class in which the
 type variable is defined._
 
+_'{0}' can't be used to name both a type variable and the enum in which the type
+variable is defined._
+
 _'{0}' can't be used to name both a type variable and the extension in which the
 type variable is defined._
 
@@ -2059,6 +2158,8 @@
 
 _'{0}' can't be used to name both a type variable and a member in this class._
 
+_'{0}' can't be used to name both a type variable and a member in this enum._
+
 _'{0}' can't be used to name both a type variable and a member in this
 extension._
 
@@ -2791,6 +2892,35 @@
 C<T> newC<T>() => C<T>();
 {% endprettify %}
 
+### continue_label_on_switch
+
+_A `continue` label resolves to a `switch` statement, but the label must be on a
+loop or a switch member._
+
+#### Description
+
+The analyzer produces this diagnostic when the label in a `continue`
+statement resolves to a label on a `switch` statement.
+
+#### Example
+
+The following code produces this diagnostic because the label `l`, used to
+label a `switch` statement, is used in the `continue` statement:
+
+{% prettify dart tag=pre+code %}
+void f(int i) {
+  l: switch (i) {
+    case 0:
+      continue [!l!];
+  }
+}
+{% endprettify %}
+
+#### Common fixes
+
+Find a different way to achieve the control flow you need; for example, by
+introducing a loop that re-executes the `switch` statement.
+
 ### creation_of_struct_or_union
 
 _Subclasses of 'Struct' and 'Union' are backed by native memory, and can't be
@@ -3502,6 +3632,59 @@
 documentation for deprecated declarations should indicate what code to use
 in place of the deprecated code.
 
+### deprecated_new_in_comment_reference
+
+_Using the 'new' keyword in a comment reference is deprecated._
+
+#### Description
+
+The analyzer produces this diagnostic when a comment reference (the name
+of a declaration enclosed in square brackets in a documentation comment)
+uses the keyword `new` to refer to a constructor. This form is deprecated.
+
+#### Examples
+
+The following code produces this diagnostic because the unnamed
+constructor is being referenced using `new C`:
+
+{% prettify dart tag=pre+code %}
+/// See [[!new!] C].
+class C {
+  C();
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the constructor named
+`c` is being referenced using `new C.c`:
+
+{% prettify dart tag=pre+code %}
+/// See [[!new!] C.c].
+class C {
+  C.c();
+}
+{% endprettify %}
+
+#### Common fixes
+
+If you're referencing a named constructor, then remove the keyword `new`:
+
+{% prettify dart tag=pre+code %}
+/// See [C.c].
+class C {
+  C.c();
+}
+{% endprettify %}
+
+If you're referencing the unnamed constructor, then remove the keyword
+`new` and append `.new` after the class name:
+
+{% prettify dart tag=pre+code %}
+/// See [C.new].
+class C {
+  C.c();
+}
+{% endprettify %}
+
 ### deprecated_subtype_of_function
 
 _Extending 'Function' is deprecated._
@@ -3535,6 +3718,46 @@
 class F {}
 {% endprettify %}
 
+### disallowed_type_instantiation_expression
+
+_Only a generic type, generic function, generic instance method, or generic
+constructor can have type arguments._
+
+#### Description
+
+The analyzer produces this diagnostic when an expression with a value that
+is anything other than one of the allowed kinds of values is followed by
+type arguments. The allowed kinds of values are:
+- generic types,
+- generic constructors, and
+- generic functions, including top-level functions, static and instance
+  members, and local functions.
+
+#### Example
+
+The following code produces this diagnostic because `i` is a top-level
+variable, which isn't one of the allowed cases:
+
+{% prettify dart tag=pre+code %}
+int i = 1;
+
+void f() {
+  print([!i!]<int>);
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the referenced value is correct, then remove the type arguments:
+
+{% prettify dart tag=pre+code %}
+int i = 1;
+
+void f() {
+  print(i);
+}
+{% endprettify %}
+
 ### duplicate_constructor
 
 _The constructor with name '{0}' is already defined._
@@ -3976,6 +4199,44 @@
 class C {}
 {% endprettify %}
 
+### enum_constant_same_name_as_enclosing
+
+_The name of the enum constant can't be the same as the enum's name._
+
+#### Description
+
+The analyzer produces this diagnostic when an enum constant has the same
+name as the enum in which it's declared.
+
+#### Example
+
+The following code produces this diagnostic because the enum constant `E`
+has the same name as the enclosing enum `E`:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  [!E!]
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the name of the enum is correct, then rename the constant:
+
+{% prettify dart tag=pre+code %}
+enum E {
+  e
+}
+{% endprettify %}
+
+If the name of the constant is correct, then rename the enum:
+
+{% prettify dart tag=pre+code %}
+enum F {
+  E
+}
+{% endprettify %}
+
 ### equal_elements_in_const_set
 
 _Two elements in a constant set literal can't be equal._
@@ -4747,6 +5008,56 @@
 If there are multiple cascaded accesses, you'll need to duplicate the
 extension override for each one.
 
+### external_with_initializer
+
+_External fields can't have initializers._
+
+_External variables can't have initializers._
+
+#### Description
+
+The analyzer produces this diagnostic when a field or variable marked with
+the keyword `external` has an initializer, or when an external field is
+initialized in a constructor.
+
+#### Examples
+
+The following code produces this diagnostic because the external field `x`
+is assigned a value in an initializer:
+
+{% prettify dart tag=pre+code %}
+class C {
+  external int x;
+  C() : [!x!] = 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the external field `x`
+has an initializer:
+
+{% prettify dart tag=pre+code %}
+class C {
+  external final int [!x!] = 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because the external top level
+variable `x` has an initializer:
+
+{% prettify dart tag=pre+code %}
+external final int [!x!] = 0;
+{% endprettify %}
+
+#### Common fixes
+
+Remove the initializer:
+
+{% prettify dart tag=pre+code %}
+class C {
+  external final int x;
+}
+{% endprettify %}
+
 ### extra_annotation_on_struct_field
 
 _Fields in a struct class must have exactly one annotation indicating the native
@@ -5174,6 +5485,46 @@
 }
 {% endprettify %}
 
+### field_initializer_outside_constructor
+
+_Field formal parameters can only be used in a constructor._
+
+_Initializing formal parameters can only be used in constructors._
+
+#### Description
+
+The analyzer produces this diagnostic when an initializing formal
+parameter is used in the parameter list for anything other than a
+constructor.
+
+#### Example
+
+The following code produces this diagnostic because the initializing
+formal parameter `this.x` is being used in the method `m`:
+
+{% prettify dart tag=pre+code %}
+class A {
+  int x = 0;
+
+  m([[!this.x!] = 0]) {}
+}
+{% endprettify %}
+
+#### Common fixes
+
+Replace the initializing formal parameter with a normal parameter and
+assign the field within the body of the method:
+
+{% prettify dart tag=pre+code %}
+class A {
+  int x = 0;
+
+  m([int x = 0]) {
+    this.x = x;
+  }
+}
+{% endprettify %}
+
 ### field_initializer_redirecting_constructor
 
 _The redirecting constructor can't have a field initializer._
@@ -6193,7 +6544,8 @@
 {% endprettify %}
 
 If type arguments shouldn't be required for the class, then mark the class
-with the `@optionalTypeArgs` annotation (from `package:meta`):
+with the `[optionalTypeArgs][meta-optionalTypeArgs]` annotation (from
+`package:meta`):
 
 ### import_internal_library
 
@@ -6217,6 +6569,79 @@
 
 Remove the import directive.
 
+### import_of_legacy_library_into_null_safe
+
+_The library '{0}' is legacy, and shouldn't be imported into a null safe
+library._
+
+#### Description
+
+The analyzer produces this diagnostic when a library that is null safe
+imports a library that isn't null safe.
+
+#### Example
+
+Given a file named `a.dart` that contains the following:
+
+{% prettify dart tag=pre+code %}
+// @dart = 2.9
+
+class A {}
+{% endprettify %}
+
+The following code produces this diagnostic because a library that null
+safe is importing a library that isn't null safe:
+
+{% prettify dart tag=pre+code %}
+import [!'a.dart'!];
+
+A? f() => null;
+{% endprettify %}
+
+#### Common fixes
+
+If you can migrate the imported library to be null safe, then migrate it
+and update or remove the migrated library's language version.
+
+If you can't migrate the imported library, then the importing library
+needs to have a language version that is before 2.12, when null safety was
+enabled by default.
+
+### import_of_non_library
+
+_The imported library '{0}' can't have a part-of directive._
+
+#### Description
+
+The analyzer produces this diagnostic when a [part file][] is imported
+into a library.
+
+#### Example
+
+Given a [part file][] named `part.dart` containing the following:
+
+{% prettify dart tag=pre+code %}
+part of lib;
+
+class C{}
+{% endprettify %}
+
+The following code produces this diagnostic because imported files can't
+have a part-of directive:
+
+{% prettify dart tag=pre+code %}
+library lib;
+
+import [!'part.dart'!];
+
+C c = C();
+{% endprettify %}
+
+#### Common fixes
+
+Import the library that contains the [part file][] rather than the
+[part file][] itself.
+
 ### inconsistent_inheritance
 
 _Superinterfaces don't have a valid override for '{0}': {1}._
@@ -6265,6 +6690,47 @@
 }
 {% endprettify %}
 
+### inconsistent_language_version_override
+
+_Parts must have exactly the same language version override as the library._
+
+#### Description
+
+The analyzer produces this diagnostic when a [part file][] has a language
+version override comment that specifies a different language version than
+the one being used for the library to which the part belongs.
+
+#### Example
+
+Given a [part file][] named `part.dart` that contains the following:
+
+{% prettify dart tag=pre+code %}
+// @dart = 2.6
+part of 'test.dart';
+{% endprettify %}
+
+The following code produces this diagnostic because the parts of a library
+must have the same language version as the defining compilation unit:
+
+{% prettify dart tag=pre+code %}
+// @dart = 2.5
+part [!'part.dart'!];
+{% endprettify %}
+
+#### Common fixes
+
+Remove the language version override from the [part file][], so that it
+implicitly uses the same version as the defining compilation unit:
+
+{% prettify dart tag=pre+code %}
+part of 'test.dart';
+{% endprettify %}
+
+If necessary, either adjust the language version override in the defining
+compilation unit to be appropriate for the code in the part, or migrate
+the code in the [part file][] to be consistent with the new language
+version.
+
 ### initializer_for_non_existent_field
 
 _'{0}' isn't a field in the enclosing class._
@@ -6616,6 +7082,7 @@
 instantiated:
 
 {% prettify dart tag=pre+code %}
+// @dart = 2.16
 enum E {a}
 
 var e = [!E!]();
@@ -6627,6 +7094,7 @@
 constants defined in the enum:
 
 {% prettify dart tag=pre+code %}
+// @dart = 2.16
 enum E {a}
 
 var e = E.a;
@@ -6911,6 +7379,31 @@
 void f() {}
 {% endprettify %}
 
+### invalid_annotation_target
+
+_The annotation '{0}' can only be used on {1}._
+
+#### Description
+
+The analyzer produces this diagnostic when an annotation is applied to a
+kind of declaration that it doesn't support.
+
+#### Example
+
+The following code produces this diagnostic because the `optionalTypeArgs`
+annotation isn't defined to be valid for top-level variables:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@[!optionalTypeArgs!]
+int x = 0;
+{% endprettify %}
+
+#### Common fixes
+
+Remove the annotation from the declaration.
+
 ### invalid_assignment
 
 _A value of type '{0}' can't be assigned to a variable of type '{1}'._
@@ -7048,6 +7541,87 @@
 }
 {% endprettify %}
 
+### invalid_export_of_internal_element
+
+_The member '{0}' can't be exported as a part of a package's public API._
+
+#### Description
+
+The analyzer produces this diagnostic when a [public library][] exports a
+declaration that is marked with the `[internal][meta-internal]`
+annotation.
+
+#### Example
+
+Given a file named `a.dart` in the `src` directory that contains:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@internal class One {}
+{% endprettify %}
+
+The following code, when found in a [public library][] produces this
+diagnostic because the `export` directive is exporting a name that is only
+intended to be used internally:
+
+{% prettify dart tag=pre+code %}
+[!export 'src/a.dart';!]
+{% endprettify %}
+
+#### Common fixes
+
+If the export is needed, then add a `hide` clause to hide the internal
+names:
+
+{% prettify dart tag=pre+code %}
+export 'src/a.dart' hide One;
+{% endprettify %}
+
+If the export isn't needed, then remove it.
+
+### invalid_export_of_internal_element_indirectly
+
+_The member '{0}' can't be exported as a part of a package's public API, but is
+indirectly exported as part of the signature of '{1}'._
+
+#### Description
+
+The analyzer produces this diagnostic when a [public library][] exports a
+top-level function  with a return type or at least one parameter type that
+is marked with the `[internal][meta-internal]` annotation.
+
+#### Example
+
+Given a file named `a.dart` in the `src` directory that contains the
+following:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@internal
+typedef IntFunction = int Function();
+
+int f(IntFunction g) => g();
+{% endprettify %}
+
+The following code produces this diagnostic because the function `f` has a
+parameter of type `IntFunction`, and `IntFunction` is only intended to be
+used internally:
+
+{% prettify dart tag=pre+code %}
+[!export 'src/a.dart' show f;!]
+{% endprettify %}
+
+#### Common fixes
+
+If the function must be public, then make all the types in the function's
+signature public types.
+
+If the function doesn't need to be exported, then stop exporting it,
+either by removing it from the `show` clause, adding it to the `hide`
+clause, or by removing the export.
+
 ### invalid_extension_argument_count
 
 _Extension overrides must have exactly one argument: the value of 'this' in the
@@ -7101,6 +7675,90 @@
 }
 {% endprettify %}
 
+### invalid_factory_method_decl
+
+_Factory method '{0}' must have a return type._
+
+#### Description
+
+The analyzer produces this diagnostic when a method that is annotated with
+the `[factory][meta-factory]` annotation has a return type of `void`.
+
+#### Example
+
+The following code produces this diagnostic because the method `createC`
+is annotated with the `[factory][meta-factory]` annotation but doesn't
+return any value:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class Factory {
+  @factory
+  void [!createC!]() {}
+}
+
+class C {}
+{% endprettify %}
+
+#### Common fixes
+
+Change the return type to something other than `void`:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class Factory {
+  @factory
+  C createC() => C();
+}
+
+class C {}
+{% endprettify %}
+
+### invalid_factory_method_impl
+
+_Factory method '{0}' doesn't return a newly allocated object._
+
+#### Description
+
+The analyzer produces this diagnostic when a method that is annotated with
+the `[factory][meta-factory]` annotation doesn't return a newly allocated
+object.
+
+#### Example
+
+The following code produces this diagnostic because the method `createC`
+returns the value of a field rather than a newly created instance of `C`:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class Factory {
+  C c = C();
+
+  @factory
+  C [!createC!]() => c;
+}
+
+class C {}
+{% endprettify %}
+
+#### Common fixes
+
+Change the method to return a newly created instance of the return type:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+class Factory {
+  @factory
+  C createC() => C();
+}
+
+class C {}
+{% endprettify %}
+
 ### invalid_factory_name_not_a_class
 
 _The name of a factory constructor must be the same as the name of the
@@ -7319,14 +7977,124 @@
 typedef F = int Function(int Function(String));
 {% endprettify %}
 
+### invalid_internal_annotation
+
+_Only public elements in a package's private API can be annotated as being
+internal._
+
+#### Description
+
+The analyzer produces this diagnostic when a declaration is annotated with
+the `[internal][meta-internal]` annotation and that declaration is either
+in a [public library][] or has a private name.
+
+#### Example
+
+The following code, when in a [public library][], produces this diagnostic
+because the `[internal][meta-internal]` annotation can't be applied to
+declarations in a [public library][]:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+[!@internal!]
+class C {}
+{% endprettify %}
+
+The following code, whether in a public or internal library, produces this
+diagnostic because the `[internal][meta-internal]` annotation can't be
+applied to declarations with private names:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+[!@internal!]
+class _C {}
+
+void f(_C c) {}
+{% endprettify %}
+
+#### Common fixes
+
+If the declaration has a private name, then remove the annotation:
+
+{% prettify dart tag=pre+code %}
+class _C {}
+
+void f(_C c) {}
+{% endprettify %}
+
+If the declaration has a public name and is intended to be internal to the
+package, then move the annotated declaration into an internal library (in
+other words, a library inside the `src` directory).
+
+Otherwise, remove the use of the annotation:
+
+{% prettify dart tag=pre+code %}
+class C {}
+{% endprettify %}
+
+### invalid_language_version_override
+
+_The Dart language version override comment can't be followed by any
+non-whitespace characters._
+
+_The Dart language version override comment must be specified with a version
+number, like '2.0', after the '=' character._
+
+_The Dart language version override comment must be specified with an '='
+character._
+
+_The Dart language version override comment must be specified with exactly two
+slashes._
+
+_The Dart language version override comment must be specified with the word
+'dart' in all lower case._
+
+_The Dart language version override number can't be prefixed with a letter._
+
+_The Dart language version override number must begin with '@dart'._
+
+_The language version override can't specify a version greater than the latest
+known language version: {0}.{1}._
+
+_The language version override must be specified before any declaration or
+directive._
+
+#### Description
+
+The analyzer produces this diagnostic when a comment that appears to be an
+attempt to specify a language version override doesn't conform to the
+requirements for such a comment. For more information, see
+[Per-library language version selection](https://dart.dev/guides/language/evolution#per-library-language-version-selection).
+
+#### Example
+
+The following code produces this diagnostic because the word `dart` must
+be lowercase in such a comment and because there's no equal sign between
+the word `dart` and the version number:
+
+{% prettify dart tag=pre+code %}
+[!// @Dart 2.9!]
+{% endprettify %}
+
+#### Common fixes
+
+If the comment is intended to be a language version override, then change
+the comment to follow the correct format:
+
+{% prettify dart tag=pre+code %}
+// @dart = 2.9
+{% endprettify %}
+
 ### invalid_literal_annotation
 
 _Only const constructors can have the `@literal` annotation._
 
 #### Description
 
-The analyzer produces this diagnostic when the `@literal` annotation is
-applied to anything other than a const constructor.
+The analyzer produces this diagnostic when the `[literal][[meta-literal]]`
+annotation is applied to anything other than a const constructor.
 
 #### Examples
 
@@ -7798,6 +8566,41 @@
 }
 {% endprettify %}
 
+### invalid_use_of_internal_member
+
+_The member '{0}' can only be used within its package._
+
+#### Description
+
+The analyzer produces this diagnostic when a reference to a declaration
+that is annotated with the `[internal][meta-internal]` annotation is found
+outside the package containing the declaration.
+
+#### Example
+
+Given a package `p` that defines a library containing a declaration marked
+with the `[internal][meta-internal]` annotation:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@internal
+class C {}
+{% endprettify %}
+
+The following code produces this diagnostic because it's referencing the
+class `C`, which isn't intended to be used outside the package `p`:
+
+{% prettify dart tag=pre+code %}
+import 'package:p/src/p.dart';
+
+void f([!C!] c) {}
+{% endprettify %}
+
+#### Common fixes
+
+Remove the reference to the internal declaration.
+
 ### invalid_use_of_null_value
 
 _An expression whose value is always 'null' can't be dereferenced._
@@ -7836,8 +8639,9 @@
 #### Description
 
 The analyzer produces this diagnostic when an instance member that is
-annotated with `visibleForOverriding` is referenced outside the library in
-which it's declared for any reason other than to override it.
+annotated with `[visibleForOverriding][meta-visibleForOverriding]` is
+referenced outside the library in which it's declared for any reason other
+than to override it.
 
 #### Example
 
@@ -7877,8 +8681,9 @@
 
 #### Description
 
-The analyzer produces this diagnostic when either the `@visibleForTemplate`
-or `@visibleForTesting` annotation is applied to a non-public declaration.
+The analyzer produces this diagnostic when either the `visibleForTemplate`
+or `[visibleForTesting][meta-visibleForTesting]` annotation is applied to
+a non-public declaration.
 
 #### Example
 
@@ -7923,9 +8728,10 @@
 #### Description
 
 The analyzer produces this diagnostic when anything other than a public
-instance member of a class is annotated with `visibleForOverriding`.
-Because only public instance members can be overridden outside the defining
-library, there's no value to annotating any other declarations.
+instance member of a class is annotated with
+`[visibleForOverriding][meta-visibleForOverriding]`. Because only public
+instance members can be overridden outside the defining library, there's
+no value to annotating any other declarations.
 
 #### Example
 
@@ -8828,7 +9634,7 @@
 #### Description
 
 The analyzer produces this diagnostic when a `switch` statement for an enum
-doesn't include an option for one of the values in the enumeration.
+doesn't include an option for one of the values in the enum.
 
 Note that `null` is always a possible value for an enum and therefore also
 must be handled.
@@ -9530,9 +10336,9 @@
 #### Description
 
 The analyzer produces this diagnostic when the superclass constraint of a
-mixin is a class from a different package that was marked as `@sealed`.
-Classes that are sealed can't be extended, implemented, mixed in, or used
-as a superclass constraint.
+mixin is a class from a different package that was marked as
+`[sealed][meta-sealed]`. Classes that are sealed can't be extended,
+implemented, mixed in, or used as a superclass constraint.
 
 #### Example
 
@@ -9587,6 +10393,40 @@
 
 Otherwise, remove the type from the `on` clause.
 
+### multiple_redirecting_constructor_invocations
+
+_Constructors can have only one 'this' redirection, at most._
+
+#### Description
+
+The analyzer produces this diagnostic when a constructor redirects to more
+than one other constructor in the same class (using `this`).
+
+#### Example
+
+The following code produces this diagnostic because the unnamed
+constructor in `C` is redirecting to both `this.a` and `this.b`:
+
+{% prettify dart tag=pre+code %}
+class C {
+  C() : this.a(), [!this.b()!];
+  C.a();
+  C.b();
+}
+{% endprettify %}
+
+#### Common fixes
+
+Remove all but one of the redirections:
+
+{% prettify dart tag=pre+code %}
+class C {
+  C() : this.a();
+  C.a();
+  C.b();
+}
+{% endprettify %}
+
 ### multiple_super_initializers
 
 _A constructor can have at most one 'super' initializer._
@@ -9791,8 +10631,8 @@
 
 The analyzer produces this diagnostic when an immutable class defines one
 or more instance fields that aren't final. A class is immutable if it's
-marked as being immutable using the annotation `@immutable` or if it's a
-subclass of an immutable class.
+marked as being immutable using the annotation
+`[immutable][meta-immutable]` or if it's a subclass of an immutable class.
 
 #### Example
 
@@ -9846,8 +10686,8 @@
 #### Description
 
 The analyzer produces this diagnostic when a method that overrides a method
-that is annotated as `@mustCallSuper` doesn't invoke the overridden method
-as required.
+that is annotated as `[mustCallSuper][meta-mustCallSuper]` doesn't invoke
+the overridden method as required.
 
 #### Example
 
@@ -10506,7 +11346,7 @@
 
 #### Example
 
-The following code produces this diagnostic beause `a` isn't a constant:
+The following code produces this diagnostic because `a` isn't a constant:
 
 {% prettify dart tag=pre+code %}
 var a = 'a';
@@ -10656,10 +11496,10 @@
 #### Description
 
 The analyzer produces this diagnostic when a constructor that has the
-`@literal` annotation is invoked without using the `const` keyword, but all
-of the arguments to the constructor are constants. The annotation indicates
-that the constructor should be used to create a constant value whenever
-possible.
+`[literal][meta-literal]` annotation is invoked without using the `const`
+keyword, but all of the arguments to the constructor are constants. The
+annotation indicates that the constructor should be used to create a
+constant value whenever possible.
 
 #### Example
 
@@ -10736,6 +11576,76 @@
 If the generative constructor is the unnamed constructor, and if there are
 no arguments being passed to it, then you can remove the super invocation.
 
+### non_generative_implicit_constructor
+
+_The unnamed constructor of superclass '{0}' (called by the default constructor
+of '{1}') must be a generative constructor, but factory found._
+
+#### Description
+
+The analyzer produces this diagnostic when a class has an implicit
+generative constructor and the superclass has an explicit unnamed factory
+constructor. The implicit constructor in the subclass implicitly invokes
+the unnamed constructor in the superclass, but generative constructors can
+only invoke another generative constructor, not a factory constructor.
+
+#### Example
+
+The following code produces this diagnostic because the implicit
+constructor in `B` invokes the unnamed constructor in `A`, but the
+constructor in `A` is a factory constructor, when a generative constructor
+is required:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() => throw 0;
+  A.named();
+}
+
+class [!B!] extends A {}
+{% endprettify %}
+
+#### Common fixes
+
+If the unnamed constructor in the superclass can be a generative
+constructor, then change it to be a generative constructor:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A();
+  A.named();
+}
+
+class B extends A { }
+{% endprettify %}
+
+If the unnamed constructor can't be a generative constructor and there are
+other generative constructors in the superclass, then explicitly invoke
+one of them:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() => throw 0;
+  A.named();
+}
+
+class B extends A {
+  B() : super.named();
+}
+{% endprettify %}
+
+If there are no generative constructors that can be used and none can be
+added, then implement the superclass rather than extending it:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() => throw 0;
+  A.named();
+}
+
+class B implements A {}
+{% endprettify %}
+
 ### non_native_function_type_argument_to_pointer
 
 _Can't invoke 'asFunction' because the function signature '{0}' for the pointer
@@ -11518,6 +12428,71 @@
 }
 {% endprettify %}
 
+### no_generative_constructors_in_superclass
+
+_The class '{0}' can't extend '{1}' because '{1}' only has factory constructors
+(no generative constructors), and '{0}' has at least one generative constructor._
+
+#### Description
+
+The analyzer produces this diagnostic when a class that has at least one
+generative constructor (whether explicit or implicit) has a superclass
+that doesn't have any generative constructors. Every generative
+constructor, except the one defined in `Object`, invokes, either
+explicitly or implicitly, one of the generative constructors from its
+superclass.
+
+#### Example
+
+The following code produces this diagnostic because the class `B` has an
+implicit generative constructor that can't invoke a generative constructor
+from `A` because `A` doesn't have any generative constructors:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A.none() => throw '';
+}
+
+class B extends [!A!] {}
+{% endprettify %}
+
+#### Common fixes
+
+If the superclass should have a generative constructor, then add one:
+
+{% prettify dart tag=pre+code %}
+class A {
+  A();
+  factory A.none() => throw '';
+}
+
+class B extends A {}
+{% endprettify %}
+
+If the subclass shouldn't have a generative constructor, then remove it by
+adding a factory constructor:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A.none() => throw '';
+}
+
+class B extends A {
+  factory B.none() => throw '';
+}
+{% endprettify %}
+
+If the subclass must have a generative constructor but the superclass
+can't have one, then implement the superclass instead:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A.none() => throw '';
+}
+
+class B implements A {}
+{% endprettify %}
+
 ### nullable_type_in_catch_clause
 
 _A potentially nullable type can't be used in an 'on' clause because it isn't
@@ -11736,6 +12711,46 @@
 }
 {% endprettify %}
 
+### null_check_always_fails
+
+_This null-check will always throw an exception because the expression will
+always evaluate to 'null'._
+
+#### Description
+
+The analyzer produces this diagnostic when the null check operator (`!`)
+is used on an expression whose value can only be `null`. In such a case
+the operator always throws an exception, which likely isn't the intended
+behavior.
+
+#### Example
+
+The following code produces this diagnostic because the function `g` will
+always return `null`, which means that the null check in `f` will always
+throw:
+
+{% prettify dart tag=pre+code %}
+void f() {
+  [!g()!!];
+}
+
+Null g() => null;
+{% endprettify %}
+
+#### Common fixes
+
+If you intend to always throw an exception, then replace the null check
+with an explicit `throw` expression to make the intent more clear:
+
+{% prettify dart tag=pre+code %}
+void f() {
+  g();
+  throw TypeError();
+}
+
+Null g() => null;
+{% endprettify %}
+
 ### on_repeated
 
 _The type '{0}' can be included in the superclass constraints only once._
@@ -12046,8 +13061,8 @@
 If the library should be using a different file as a part, then change the
 URI in the part directive to be the URI of the other file.
 
-If the part file should be a part of this library, then update the URI (or
-library name) in the part-of directive to be the URI (or name) of the
+If the [part file][] should be a part of this library, then update the URI
+(or library name) in the part-of directive to be the URI (or name) of the
 correct library.
 
 ### part_of_non_part
@@ -12100,21 +13115,22 @@
 #### Description
 
 The analyzer produces this diagnostic when a library that doesn't have a
-`library` directive (and hence has no name) contains a `part` directive and
-the `part of` directive in the part file uses a name to specify the library
-that it's a part of.
+`library` directive (and hence has no name) contains a `part` directive
+and the `part of` directive in the [part file][] uses a name to specify
+the library that it's a part of.
 
 #### Example
 
-Given a part file named `part_file.dart` containing the following code:
+Given a [part file][] named `part_file.dart` containing the following
+code:
 
 {% prettify dart tag=pre+code %}
 part of lib;
 {% endprettify %}
 
 The following code produces this diagnostic because the library including
-the part file doesn't have a name even though the part file uses a name to
-specify which library it's a part of:
+the [part file][] doesn't have a name even though the [part file][] uses a
+name to specify which library it's a part of:
 
 {% prettify dart tag=pre+code %}
 part [!'part_file.dart'!];
@@ -12122,8 +13138,8 @@
 
 #### Common fixes
 
-Change the `part of` directive in the part file to specify its library by
-URI:
+Change the `part of` directive in the [part file][] to specify its library
+by URI:
 
 {% prettify dart tag=pre+code %}
 part of 'test.dart';
@@ -12213,7 +13229,7 @@
 name: local_package
 ```
 
-If the path is wrong, then replace it with a the correct path.
+If the path is wrong, then replace it with the correct path.
 
 ### prefix_collides_with_top_level_member
 
@@ -12295,6 +13311,56 @@
 
 If the name is wrong, then correct the name.
 
+### prefix_shadowed_by_local_declaration
+
+_The prefix '{0}' can't be used here because it's shadowed by a local
+declaration._
+
+#### Description
+
+The analyzer produces this diagnostic when an import prefix is used in a
+context where it isn't visible because it was shadowed by a local
+declaration.
+
+#### Example
+
+The following code produces this diagnostic because the prefix `a` is
+being used to access the class `Future`, but isn't visible because it's
+shadowed by the parameter `a`:
+
+{% prettify dart tag=pre+code %}
+import 'dart:async' as a;
+
+a.Future? f(int a) {
+  [!a!].Future? x;
+  return x;
+}
+{% endprettify %}
+
+#### Common fixes
+
+Rename either the prefix:
+
+{% prettify dart tag=pre+code %}
+import 'dart:async' as p;
+
+p.Future? f(int a) {
+  p.Future? x;
+  return x;
+}
+{% endprettify %}
+
+Or rename the local variable:
+
+{% prettify dart tag=pre+code %}
+import 'dart:async' as a;
+
+a.Future? f(int p) {
+  a.Future? x;
+  return x;
+}
+{% endprettify %}
+
 ### private_collision_in_mixin_application
 
 _The private name '{0}', defined by '{1}', conflicts with the same name defined
@@ -12373,6 +13439,91 @@
 }
 {% endprettify %}
 
+### private_setter
+
+_The setter '{0}' is private and can't be accessed outside the library that
+declares it._
+
+#### Description
+
+The analyzer produces this diagnostic when a private setter is used in a
+library where it isn't visible.
+
+#### Example
+
+Given a file named `a.dart` that contains the following:
+
+{% prettify dart tag=pre+code %}
+class A {
+  static int _f = 0;
+}
+{% endprettify %}
+
+The following code produces this diagnostic because it references the
+private setter `_f` even though the setter isn't visible:
+
+{% prettify dart tag=pre+code %}
+import 'a.dart';
+
+void f() {
+  A.[!_f!] = 0;
+}
+{% endprettify %}
+
+#### Common fixes
+
+If you're able to make the setter public, then do so:
+
+{% prettify dart tag=pre+code %}
+class A {
+  static int f = 0;
+}
+{% endprettify %}
+
+If you aren't able to make the setter public, then find a different way to
+implement the code.
+
+### read_potentially_unassigned_final
+
+_The final variable '{0}' can't be read because it's potentially unassigned at
+this point._
+
+#### Description
+
+The analyzer produces this diagnostic when a final local variable that
+isn't initialized at the declaration site is read at a point where the
+compiler can't prove that the variable is always initialized before it's
+referenced.
+
+#### Example
+
+The following code produces this diagnostic because the final local
+variable `x` is read (on line 3) when it's possible that it hasn't yet
+been initialized:
+
+{% prettify dart tag=pre+code %}
+int f() {
+  final int x;
+  return [!x!];
+}
+{% endprettify %}
+
+#### Common fixes
+
+Ensure that the variable has been initialized before it's read:
+
+{% prettify dart tag=pre+code %}
+int f(bool b) {
+  final int x;
+  if (b) {
+    x = 0;
+  } else {
+    x = 1;
+  }
+  return x;
+}
+{% endprettify %}
+
 ### recursive_compile_time_constant
 
 _The compile-time constant expression depends on itself._
@@ -12606,6 +13757,46 @@
 }
 {% endprettify %}
 
+### redirect_to_abstract_class_constructor
+
+_The redirecting constructor '{0}' can't redirect to a constructor of the
+abstract class '{1}'._
+
+#### Description
+
+The analyzer produces this diagnostic when a constructor redirects to a
+constructor in an abstract class.
+
+#### Example
+
+The following code produces this diagnostic because the factory
+constructor in `A` redirects to a constructor in `B`, but `B` is an
+abstract class:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() = [!B!];
+}
+
+abstract class B implements A {}
+{% endprettify %}
+
+#### Common fixes
+
+If the code redirects to the correct constructor, then change the class so
+that it isn't abstract:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() = B;
+}
+
+class B implements A {}
+{% endprettify %}
+
+Otherwise, change the factory constructor so that it either redirects to a
+constructor in a concrete class, or has a concrete implementation.
+
 ### redirect_to_invalid_function_type
 
 _The redirected constructor '{0}' has incompatible parameters with '{1}'._
@@ -12732,6 +13923,58 @@
 }
 {% endprettify %}
 
+### redirect_to_missing_constructor
+
+_The constructor '{0}' couldn't be found in '{1}'._
+
+#### Description
+
+The analyzer produces this diagnostic when a constructor redirects to a
+constructor that doesn't exist.
+
+#### Example
+
+The following code produces this diagnostic because the factory
+constructor in `A` redirects to a constructor in `B` that doesn't exist:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() = [!B.name!];
+}
+
+class B implements A {
+  B();
+}
+{% endprettify %}
+
+#### Common fixes
+
+If the constructor being redirected to is correct, then define the
+constructor:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() = B.name;
+}
+
+class B implements A {
+  B();
+  B.name();
+}
+{% endprettify %}
+
+If a different constructor should be invoked, then update the redirect:
+
+{% prettify dart tag=pre+code %}
+class A {
+  factory A() = B;
+}
+
+class B implements A {
+  B();
+}
+{% endprettify %}
+
 ### redirect_to_non_class
 
 _The name '{0}' isn't a type and can't be used in a redirected constructor._
@@ -13064,6 +14307,58 @@
 }
 {% endprettify %}
 
+### return_of_do_not_store
+
+_'{0}' is annotated with 'doNotStore' and shouldn't be returned unless '{1}' is
+also annotated._
+
+#### Description
+
+The analyzer produces this diagnostic when a value that is annotated with
+the `[doNotStore][meta-doNotStore]` annotation is returned from a method,
+getter, or function that doesn't have the same annotation.
+
+#### Example
+
+The following code produces this diagnostic because the result of invoking
+`f` shouldn't be stored, but the function `g` isn't annotated to preserve
+that semantic:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@doNotStore
+int f() => 0;
+
+int g() => [!f()!];
+{% endprettify %}
+
+#### Common fixes
+
+If the value that shouldn't be stored is the correct value to return, then
+mark the function with the `[doNotStore][meta-doNotStore]` annotation:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@doNotStore
+int f() => 0;
+
+@doNotStore
+int g() => f();
+{% endprettify %}
+
+Otherwise, return a different value from the function:
+
+{% prettify dart tag=pre+code %}
+import 'package:meta/meta.dart';
+
+@doNotStore
+int f() => 0;
+
+int g() => 0;
+{% endprettify %}
+
 ### return_of_invalid_type
 
 _A value of type '{0}' can't be returned from the constructor '{2}' because it
@@ -14128,10 +15423,10 @@
 #### Description
 
 The analyzer produces this diagnostic when a sealed class (one that either
-has the `@sealed` annotation or inherits or mixes in a sealed class) is
-referenced in either the `extends`, `implements`, or `with` clause of a
-class or mixin declaration if the declaration isn't in the same package as
-the sealed class.
+has the `[sealed][meta-sealed]` annotation or inherits or mixes in a
+sealed class) is referenced in either the `extends`, `implements`, or
+`with` clause of a class or mixin declaration if the declaration isn't in
+the same package as the sealed class.
 
 #### Example
 
@@ -14398,6 +15693,43 @@
 }
 {% endprettify %}
 
+### switch_case_completes_normally
+
+_The 'case' shouldn't complete normally._
+
+#### Description
+
+The analyzer produces this diagnostic when the statements following a
+`case` label in a `switch` statement could fall through to the next `case`
+or `default` label.
+
+#### Example
+
+The following code produces this diagnostic because the `case` label with
+ a value of zero (`0`) falls through to the `default` statements:
+
+{% prettify dart tag=pre+code %}
+void f(int a) {
+  switch (a) {
+    [!case!] 0:
+      print(0);
+    default:
+      return;
+  }
+}
+{% endprettify %}
+
+#### Common fixes
+
+Change the flow of control so that the `case` won't fall through. There
+are several ways that this can be done, including adding one of the
+following at the end of the current list of statements:
+- a `return` statement,
+- a `throw` expression,
+- a `break` statement,
+- a `continue`, or
+- an invocation of a function or method whose return type is `Never`.
+
 ### switch_expression_not_assignable
 
 _Type '{0}' of the switch expression isn't assignable to the type '{1}' of case
@@ -15872,8 +17204,8 @@
 #### Description
 
 The analyzer produces this diagnostic when an annotation of the form
-`@UnusedResult.unless(parameterDefined: parameterName)` specifies a
-parameter name that isn't defined by the annotated function.
+`[UseResult][meta-UseResult].unless(parameterDefined: parameterName)`
+specifies a parameter name that isn't defined by the annotated function.
 
 #### Example
 
@@ -16713,16 +18045,16 @@
 #### Description
 
 The analyzer produces this diagnostic when a function annotated with
-`useResult` is invoked, and the value returned by that function isn't used.
-The value is considered to be used if a member of the value is invoked, if
-the value is passed to another function, or if the value is assigned to a
-variable or field.
+`[useResult][meta-useResult]` is invoked, and the value returned by that
+function isn't used. The value is considered to be used if a member of the
+value is invoked, if the value is passed to another function, or if the
+value is assigned to a variable or field.
 
 #### Example
 
 The following code produces this diagnostic because the invocation of
 `c.a()` isn't used, even though the method `a` is annotated with
-`useResult`:
+`[useResult][meta-useResult]`:
 
 {% prettify dart tag=pre+code %}
 import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/tool/diagnostics/generate.dart b/pkg/analyzer/tool/diagnostics/generate.dart
index 9f58663..f326cd70 100644
--- a/pkg/analyzer/tool/diagnostics/generate.dart
+++ b/pkg/analyzer/tool/diagnostics/generate.dart
@@ -191,6 +191,19 @@
 The analyzer produces the following diagnostics for code that
 doesn't conform to the language specification or
 that might work in unexpected ways.
+
+[meta-doNotStore]: https://pub.dev/documentation/meta/latest/meta/doNotStore-constant.html
+[meta-factory]: https://pub.dev/documentation/meta/latest/meta/factory-constant.html
+[meta-immutable]: https://pub.dev/documentation/meta/latest/meta/immutable-constant.html
+[meta-internal]: https://pub.dev/documentation/meta/latest/meta/internal-constant.html
+[meta-literal]: https://pub.dev/documentation/meta/latest/meta/literal-constant.html
+[meta-mustCallSuper]: https://pub.dev/documentation/meta/latest/meta/mustCallSuper-constant.html
+[meta-optionalTypeArgs]: https://pub.dev/documentation/meta/latest/meta/optionalTypeArgs-constant.html
+[meta-sealed]: https://pub.dev/documentation/meta/latest/meta/sealed-constant.html
+[meta-useResult]: https://pub.dev/documentation/meta/latest/meta/useResult-constant.html
+[meta-UseResult]: https://pub.dev/documentation/meta/latest/meta/UseResult-class.html
+[meta-visibleForOverriding]: https://pub.dev/documentation/meta/latest/meta/visibleForOverriding-constant.html
+[meta-visibleForTesting]: https://pub.dev/documentation/meta/latest/meta/visibleForTesting-constant.html
 ''');
     List<String> errorCodes = infoByName.keys.toList();
     errorCodes.sort();
@@ -215,13 +228,17 @@
 * [definite assignment][]
 * [mixin application][]
 * [override inference][]
+* [part file][]
 * [potentially non-nullable][]
+* [public library][]
 
 [constant context]: #constant-context
 [definite assignment]: #definite-assignment
 [mixin application]: #mixin-application
 [override inference]: #override-inference
+[part file]: #part-file
 [potentially non-nullable]: #potentially-non-nullable
+[public library]: #public-library
 
 ### Constant context
 
@@ -442,6 +459,10 @@
 It is an error if none of the overridden methods has a function type that is a
 supertype of all the other overridden methods.
 
+### Part file
+
+A part file is a Dart source file that contains a `part of` directive.
+
 ### Potentially non-nullable
 
 A type is _potentially non-nullable_ if it's either explicitly non-nullable or
@@ -457,6 +478,11 @@
 (the type specified as a type argument) might be non-nullable. For example,
 given a declaration of `class C<T> {}`, the type `C` could be used with a
 non-nullable type argument as in `C<int>`.
+
+### Public library
+
+A public library is a library that is located inside the package's `lib`
+directory but not inside the `lib/src` directory.
 ''');
   }
 
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 93b703b..d9cffbc 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -63,7 +63,7 @@
 // THIS FILE IS GENERATED. DO NOT EDIT.
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart pkg/analyzer/tool/messages/generate.dart' to update.
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 ''');
 
   _AnalyzerErrorGenerator(this.errorClasses);
diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
index 746feb2..da7a3af 100644
--- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart
+++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
@@ -6,7 +6,7 @@
 
 import 'package:analyzer/dart/sdk/build_sdk_summary.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:cli_util/cli_util.dart';
+import 'package:analyzer/src/util/sdk.dart';
 
 void main(List<String> args) {
   String command;
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 2e58862..a68a79a 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -325,7 +325,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     debugEvent("Import");
     pop(NullValue.Prefix); // Prefix identifier
     pop(); // URI
diff --git a/pkg/analyzer_cli/OWNERS b/pkg/analyzer_cli/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/analyzer_cli/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index 19caf6d..fff1252 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -127,7 +127,7 @@
     files.clear();
     errorsResults.clear();
     var libraryUri = libraryFile.uri;
-    if (libraryUri.scheme == 'package' && libraryUri.pathSegments.isNotEmpty) {
+    if (libraryUri.isScheme('package') && libraryUri.pathSegments.isNotEmpty) {
       _selfPackageName = libraryUri.pathSegments[0];
     }
   }
@@ -177,7 +177,7 @@
 
   /// Determine whether the given URI refers to a package being analyzed.
   bool _isAnalyzedPackage(Uri uri) {
-    if (uri.scheme != 'package' || uri.pathSegments.isEmpty) {
+    if (!uri.isScheme('package') || uri.pathSegments.isEmpty) {
       return false;
     }
     var packageName = uri.pathSegments.first;
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 4ad9d00..a7278e1 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -329,7 +329,7 @@
       }
 
       // Infer if unspecified.
-      sdkPath ??= getSdkPath(args);
+      sdkPath ??= getSdkPath();
 
       var pathContext = resourceProvider.pathContext;
       options.dartSdkPath = file_paths.absoluteNormalized(pathContext, sdkPath);
diff --git a/pkg/analyzer_cli/tool/perf.dart b/pkg/analyzer_cli/tool/perf.dart
index 2ad2424..09aa60a 100644
--- a/pkg/analyzer_cli/tool/perf.dart
+++ b/pkg/analyzer_cli/tool/perf.dart
@@ -79,13 +79,15 @@
 
 /// Uses the diet-parser to parse only directives in [source].
 CompilationUnit parseDirectives(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   var parser = Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  return parser.parseDirectives(token);
+  return parser.parseDirectives(result.tokens);
 }
 
 /// Parses every file in [files] and reports the time spent doing so.
@@ -113,13 +115,15 @@
 
 /// Parse the full body of [source] and return it's compilation unit.
 CompilationUnit parseFull(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   var parser = Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  return parser.parseCompilationUnit(token);
+  return parser.parseCompilationUnit(result.tokens);
 }
 
 /// Report that metric [name] took [time] micro-seconds to process
@@ -207,7 +211,7 @@
 }
 
 /// Scan [source] and return the first token produced by the scanner.
-Token tokenize(Source source) {
+ScannerResult tokenize(Source source) {
   scanTimer.start();
   var contents = source.contents.data;
   scanTotalChars += contents.length;
@@ -224,5 +228,12 @@
     ..preserveComments = false;
   var token = scanner.tokenize();
   scanTimer.stop();
-  return token;
+  return ScannerResult(token, scanner.lineStarts);
+}
+
+class ScannerResult {
+  final Token tokens;
+  final List<int> lineStarts;
+
+  ScannerResult(this.tokens, this.lineStarts);
 }
diff --git a/pkg/analyzer_plugin/OWNERS b/pkg/analyzer_plugin/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/analyzer_plugin/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
diff --git a/pkg/analyzer_plugin/doc/api.html b/pkg/analyzer_plugin/doc/api.html
index a1c3097..0c0d3d7 100644
--- a/pkg/analyzer_plugin/doc/api.html
+++ b/pkg/analyzer_plugin/doc/api.html
@@ -1511,7 +1511,8 @@
   <dl><dt class="field"><b>positions: List&lt;<a href="#type_Position">Position</a>&gt;</b></dt><dd>
         
         <p>
-          The positions of the regions that should be edited simultaneously.
+          The positions of the regions (after applying the relevant edits) that
+          should be edited simultaneously.
         </p>
       </dd><dt class="field"><b>length: int</b></dt><dd>
         
diff --git a/pkg/analyzer_plugin/doc/tutorial/package_structure.md b/pkg/analyzer_plugin/doc/tutorial/package_structure.md
index 0eb7224..b1f726f 100644
--- a/pkg/analyzer_plugin/doc/tutorial/package_structure.md
+++ b/pkg/analyzer_plugin/doc/tutorial/package_structure.md
@@ -90,4 +90,4 @@
 package, and the file `tools/analyzer_plugin/bin/plugin.dart` is run in its own
 isolate.
 
-[pub]:https://www.dartlang.org/tools/pub/get-started
+[pub]: https://dart.dev/guides/packages
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index 61b9776..32fe3b2 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -612,6 +612,23 @@
   /// if the parameterName field is omitted.
   String? parameterType;
 
+  /// This field is omitted if getSuggestions was used rather than
+  /// getSuggestions2.
+  ///
+  /// This field is omitted if this suggestion corresponds to a locally
+  /// declared element.
+  ///
+  /// 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.
+  ///
+  /// 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 package:foo/bar.dart or
+  /// file:///home/me/workspace/foo/test/bar_test.dart.
+  String? libraryUri;
+
   /// 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
@@ -642,6 +659,7 @@
       this.hasNamedParameters,
       this.parameterName,
       this.parameterType,
+      this.libraryUri,
       this.isNotImported});
 
   factory CompletionSuggestion.fromJson(
@@ -781,6 +799,11 @@
         parameterType = jsonDecoder.decodeString(
             jsonPath + '.parameterType', json['parameterType']);
       }
+      String? libraryUri;
+      if (json.containsKey('libraryUri')) {
+        libraryUri = jsonDecoder.decodeString(
+            jsonPath + '.libraryUri', json['libraryUri']);
+      }
       bool? isNotImported;
       if (json.containsKey('isNotImported')) {
         isNotImported = jsonDecoder.decodeBool(
@@ -804,6 +827,7 @@
           hasNamedParameters: hasNamedParameters,
           parameterName: parameterName,
           parameterType: parameterType,
+          libraryUri: libraryUri,
           isNotImported: isNotImported);
     } else {
       throw jsonDecoder.mismatch(jsonPath, 'CompletionSuggestion', json);
@@ -884,6 +908,10 @@
     if (parameterType != null) {
       result['parameterType'] = parameterType;
     }
+    var libraryUri = this.libraryUri;
+    if (libraryUri != null) {
+      result['libraryUri'] = libraryUri;
+    }
     var isNotImported = this.isNotImported;
     if (isNotImported != null) {
       result['isNotImported'] = isNotImported;
@@ -923,6 +951,7 @@
           hasNamedParameters == other.hasNamedParameters &&
           parameterName == other.parameterName &&
           parameterType == other.parameterType &&
+          libraryUri == other.libraryUri &&
           isNotImported == other.isNotImported;
     }
     return false;
@@ -953,6 +982,7 @@
         hasNamedParameters,
         parameterName,
         parameterType,
+        libraryUri,
         isNotImported,
       ]);
 }
@@ -1234,17 +1264,12 @@
   /// this field will not be defined.
   String? aliasedType;
 
-  /// If the element belongs to a library, the URI of the library. Otherwise,
-  /// this field will not be defined.
-  String? libraryUri;
-
   Element(this.kind, this.name, this.flags,
       {this.location,
       this.parameters,
       this.returnType,
       this.typeParameters,
-      this.aliasedType,
-      this.libraryUri});
+      this.aliasedType});
 
   factory Element.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -1294,18 +1319,12 @@
         aliasedType = jsonDecoder.decodeString(
             jsonPath + '.aliasedType', json['aliasedType']);
       }
-      String? libraryUri;
-      if (json.containsKey('libraryUri')) {
-        libraryUri = jsonDecoder.decodeString(
-            jsonPath + '.libraryUri', json['libraryUri']);
-      }
       return Element(kind, name, flags,
           location: location,
           parameters: parameters,
           returnType: returnType,
           typeParameters: typeParameters,
-          aliasedType: aliasedType,
-          libraryUri: libraryUri);
+          aliasedType: aliasedType);
     } else {
       throw jsonDecoder.mismatch(jsonPath, 'Element', json);
     }
@@ -1344,10 +1363,6 @@
     if (aliasedType != null) {
       result['aliasedType'] = aliasedType;
     }
-    var libraryUri = this.libraryUri;
-    if (libraryUri != null) {
-      result['libraryUri'] = libraryUri;
-    }
     return result;
   }
 
@@ -1364,8 +1379,7 @@
           parameters == other.parameters &&
           returnType == other.returnType &&
           typeParameters == other.typeParameters &&
-          aliasedType == other.aliasedType &&
-          libraryUri == other.libraryUri;
+          aliasedType == other.aliasedType;
     }
     return false;
   }
@@ -1380,7 +1394,6 @@
         returnType,
         typeParameters,
         aliasedType,
-        libraryUri,
       );
 }
 
@@ -2702,7 +2715,8 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 class LinkedEditGroup implements HasToJson {
-  /// The positions of the regions that should be edited simultaneously.
+  /// The positions of the regions (after applying the relevant edits) that
+  /// should be edited simultaneously.
   List<Position> positions;
 
   /// The length of the regions that should be edited simultaneously.
@@ -4359,8 +4373,14 @@
   }
 
   /// Adds [edit] to the [FileEdit] for the given [file].
-  void addEdit(String file, int fileStamp, SourceEdit edit) =>
-      addEditToSourceChange(this, file, fileStamp, edit);
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void addEdit(String file, int fileStamp, SourceEdit edit,
+          {bool insertBeforeExisting = false}) =>
+      addEditToSourceChange(this, file, fileStamp, edit,
+          insertBeforeExisting: insertBeforeExisting);
 
   /// Adds the given [FileEdit].
   void addFileEdit(SourceFileEdit edit) {
@@ -4583,10 +4603,22 @@
   }
 
   /// Adds the given [Edit] to the list.
-  void add(SourceEdit edit) => addEditForSource(this, edit);
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void add(SourceEdit edit, {bool insertBeforeExisting = false}) =>
+      addEditForSource(this, edit, insertBeforeExisting: insertBeforeExisting);
 
   /// Adds the given [Edit]s.
-  void addAll(Iterable<SourceEdit> edits) => addAllEditsForSource(this, edits);
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void addAll(Iterable<SourceEdit> edits,
+          {bool insertBeforeExisting = false}) =>
+      addAllEditsForSource(this, edits,
+          insertBeforeExisting: insertBeforeExisting);
 
   @override
   String toString() => json.encode(toJson());
diff --git a/pkg/analyzer_plugin/lib/src/protocol/protocol_internal.dart b/pkg/analyzer_plugin/lib/src/protocol/protocol_internal.dart
index 777ccda..262911a 100644
--- a/pkg/analyzer_plugin/lib/src/protocol/protocol_internal.dart
+++ b/pkg/analyzer_plugin/lib/src/protocol/protocol_internal.dart
@@ -14,26 +14,43 @@
     HashMap<String, RefactoringKind>();
 
 /// Adds the given [sourceEdits] to the list in [sourceFileEdit].
+///
+/// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+/// other edits will be inserted such that they appear before them in the
+/// resulting document.
 void addAllEditsForSource(
-    SourceFileEdit sourceFileEdit, Iterable<SourceEdit> edits) {
-  edits.forEach(sourceFileEdit.add);
+    SourceFileEdit sourceFileEdit, Iterable<SourceEdit> edits,
+    {bool insertBeforeExisting = false}) {
+  edits.forEach((edit) =>
+      sourceFileEdit.add(edit, insertBeforeExisting: insertBeforeExisting));
 }
 
 /// Adds the given [sourceEdit] to the list in [sourceFileEdit] while preserving
-/// two invariants:
+/// the invariants:
 /// - the list is sorted such that edits with a larger offset appear earlier in
 ///   the list, and
-/// - no two edits in the list overlap each other.
+/// - no two edits in the list overlap each other, and
+/// - inserts can only be made at the same offset as an earlier edit when
+///   [insertBeforeExisting] is `true` and will result in the inserted text
+///   appearing before the other edits in the resulting document.
 ///
 /// If the invariants can't be preserved, then a [ConflictingEditException] is
 /// thrown.
-void addEditForSource(SourceFileEdit sourceFileEdit, SourceEdit sourceEdit) {
+void addEditForSource(SourceFileEdit sourceFileEdit, SourceEdit sourceEdit,
+    {bool insertBeforeExisting = false}) {
   var edits = sourceFileEdit.edits;
   var length = edits.length;
   var index = 0;
   while (index < length && edits[index].offset > sourceEdit.offset) {
     index++;
   }
+  // If it's an insert and it should be inserted before existing edits, also
+  // skip over any with the same offset.
+  if (insertBeforeExisting && sourceEdit.length == 0) {
+    while (index < length && edits[index].offset >= sourceEdit.offset) {
+      index++;
+    }
+  }
   if (index > 0) {
     var previousEdit = edits[index - 1];
     // The [previousEdit] has an offset that is strictly greater than the offset
@@ -63,14 +80,19 @@
 }
 
 /// Adds [edit] to the [FileEdit] for the given [file].
+///
+/// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+/// other edits will be inserted such that they appear before them in the
+/// resulting document.
 void addEditToSourceChange(
-    SourceChange change, String file, int fileStamp, SourceEdit edit) {
+    SourceChange change, String file, int fileStamp, SourceEdit edit,
+    {bool insertBeforeExisting = false}) {
   var fileEdit = change.getFileEdit(file);
   if (fileEdit == null) {
     fileEdit = SourceFileEdit(file, fileStamp);
     change.addFileEdit(fileEdit);
   }
-  fileEdit.add(edit);
+  fileEdit.add(edit, insertBeforeExisting: insertBeforeExisting);
 }
 
 /// Get the result of applying the edit to the given [code]. Access via
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 ebb810a..be0b7fc 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
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:collection';
-import 'dart:math' as math;
 
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
@@ -459,12 +458,13 @@
   }
 
   @override
-  void addInsertion(int offset, void Function(EditBuilder builder) buildEdit) {
+  void addInsertion(int offset, void Function(EditBuilder builder) buildEdit,
+      {bool insertBeforeExisting = false}) {
     var builder = createEditBuilder(offset, 0);
     try {
       buildEdit(builder);
     } finally {
-      _addEditBuilder(builder);
+      _addEditBuilder(builder, insertBeforeExisting: insertBeforeExisting);
     }
   }
 
@@ -541,21 +541,25 @@
     _addEdit(edit);
   }
 
-  /// Add the edit from the given [edit] to the edits associates with the
+  /// Add the edit from the given [edit] to the edits associated with the
   /// current file.
-  void _addEdit(SourceEdit edit) {
-    fileEdit.add(edit);
+  void _addEdit(SourceEdit edit, {bool insertBeforeExisting = false}) {
+    fileEdit.add(edit, insertBeforeExisting: insertBeforeExisting);
     var delta = _editDelta(edit);
-    changeBuilder._updatePositions(
-        edit.offset + math.max<int>(0, delta), delta);
+    changeBuilder._updatePositions(edit.offset, delta);
     changeBuilder._lockedPositions.clear();
   }
 
-  /// Add the edit from the given [builder] to the edits associates with the
+  /// Add the edit from the given [builder] to the edits associated with the
   /// current file.
-  void _addEditBuilder(EditBuilderImpl builder) {
+  ///
+  /// If [insertBeforeExisting] is `true`, inserts made at the same offset as
+  /// other edits will be inserted such that they appear before them in the
+  /// resulting document.
+  void _addEditBuilder(EditBuilderImpl builder,
+      {bool insertBeforeExisting = false}) {
     var edit = builder.sourceEdit;
-    _addEdit(edit);
+    _addEdit(edit, insertBeforeExisting: insertBeforeExisting);
     _captureSelection(builder, edit);
   }
 
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 24a549e..6608327 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -960,7 +960,7 @@
       name = expression.methodName.name;
     } else if (expression is InstanceCreationExpression) {
       var constructorName = expression.constructorName;
-      var typeName = constructorName.type2;
+      var typeName = constructorName.type;
       var typeNameIdentifier = typeName.name;
       // new ClassName()
       if (typeNameIdentifier is SimpleIdentifier) {
@@ -1356,9 +1356,11 @@
 
   @override
   void addInsertion(
-          int offset, void Function(DartEditBuilder builder) buildEdit) =>
+          int offset, void Function(DartEditBuilder builder) buildEdit,
+          {bool insertBeforeExisting = false}) =>
       super.addInsertion(
-          offset, (builder) => buildEdit(builder as DartEditBuilder));
+          offset, (builder) => buildEdit(builder as DartEditBuilder),
+          insertBeforeExisting: insertBeforeExisting);
 
   @override
   void addReplacement(SourceRange range,
@@ -1505,15 +1507,18 @@
     // Prepare information about existing imports.
     LibraryDirective? libraryDirective;
     var importDirectives = <ImportDirective>[];
-    PartDirective? partDirective;
+    ExportDirective? firstExportDirective;
+    PartDirective? firstPartDirective;
     var unit = resolvedUnit.unit;
     for (var directive in unit.directives) {
       if (directive is LibraryDirective) {
         libraryDirective = directive;
       } else if (directive is ImportDirective) {
         importDirectives.add(directive);
+      } else if (directive is ExportDirective) {
+        firstExportDirective ??= directive;
       } else if (directive is PartDirective) {
-        partDirective = directive;
+        firstPartDirective ??= directive;
       }
     }
 
@@ -1632,7 +1637,7 @@
                 builder.writeln();
               }
             } else {
-              if (isLastExistingDart || isLastExistingPackage) {
+              if (!isDart && (isLastExistingDart || isLastExistingPackage)) {
                 builder.writeln();
               }
             }
@@ -1660,9 +1665,22 @@
       return;
     }
 
-    // Insert imports: before a part directive.
-    if (partDirective != null) {
-      addInsertion(partDirective.offset, (EditBuilder builder) {
+    // Insert imports: before any export directives.
+    if (firstExportDirective != null) {
+      addInsertion(firstExportDirective.offset, (EditBuilder builder) {
+        for (var i = 0; i < importList.length; i++) {
+          var import = importList[i];
+          writeImport(builder, import);
+          builder.writeln();
+        }
+        builder.writeln();
+      });
+      return;
+    }
+
+    // Insert imports: before any part directives.
+    if (firstPartDirective != null) {
+      addInsertion(firstPartDirective.offset, (EditBuilder builder) {
         for (var i = 0; i < importList.length; i++) {
           var import = importList[i];
           writeImport(builder, import);
@@ -1679,19 +1697,36 @@
     if (unit.declarations.isNotEmpty) {
       offset = unit.declarations.first.offset;
       insertEmptyLineAfter = true;
+    } else if (fileEdit.edits.isNotEmpty) {
+      // If this file has edits (besides the imports) the imports should go
+      // at the same offset as those edits and _not_ at `unit.end`. This is
+      // because if the document is non-zero length, `unit.end` could be after
+      // where the new edits will be inserted, but imports should go before
+      // generated non-import code.
+
+      // Edits are always sorted such that the first one has the lowest offset.
+      offset = fileEdit.edits.first.offset;
+
+      // Also ensure there's a blank line between the imports and the other
+      // code.
+      insertEmptyLineAfter = fileEdit.edits.isNotEmpty;
     } else {
       offset = unit.end;
     }
-    addInsertion(offset, (EditBuilder builder) {
-      for (var i = 0; i < importList.length; i++) {
-        var import = importList[i];
-        writeImport(builder, import);
-        builder.writeln();
-        if (i == importList.length - 1 && insertEmptyLineAfter) {
+    addInsertion(
+      offset,
+      (EditBuilder builder) {
+        for (var i = 0; i < importList.length; i++) {
+          var import = importList[i];
+          writeImport(builder, import);
           builder.writeln();
+          if (i == importList.length - 1 && insertEmptyLineAfter) {
+            builder.writeln();
+          }
         }
-      }
-    });
+      },
+      insertBeforeExisting: true,
+    );
   }
 
   /// Return the import element used to import the given [element] into the
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_yaml.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_yaml.dart
index 6e37763..a941bae 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_yaml.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_yaml.dart
@@ -48,9 +48,11 @@
 
   @override
   void addInsertion(
-          int offset, void Function(YamlEditBuilder builder) buildEdit) =>
+          int offset, void Function(YamlEditBuilder builder) buildEdit,
+          {bool insertBeforeExisting = false}) =>
       super.addInsertion(
-          offset, (builder) => buildEdit(builder as YamlEditBuilder));
+          offset, (builder) => buildEdit(builder as YamlEditBuilder),
+          insertBeforeExisting: insertBeforeExisting);
 
   @override
   void addReplacement(SourceRange range,
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
index ce716df..0ce5403 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
@@ -291,6 +291,12 @@
       Element? executable;
       if (invocation is Annotation) {
         executable = invocation.element;
+      } else if (invocation is EnumConstantArguments) {
+        var enumConstant = invocation.parent;
+        if (enumConstant is! EnumConstantDeclaration) {
+          return null;
+        }
+        executable = enumConstant.constructorElement;
       } else if (invocation is InstanceCreationExpression) {
         executable = invocation.constructorName.staticElement;
       } else if (invocation is MethodInvocation) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index a525245..e567a2c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -178,7 +178,7 @@
       if (name != null) {
         constructor = name.staticElement;
       } else {
-        var classElem = parent.constructorName.type2.name.staticElement;
+        var classElem = parent.constructorName.type.name.staticElement;
         if (classElem is ClassElement) {
           constructor = classElem.unnamedConstructor;
         }
@@ -367,7 +367,7 @@
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    if (identical(entity, node.superclass2)) {
+    if (identical(entity, node.superclass)) {
       optype.completionLocation = 'ClassTypeAlias_superclass';
       optype.includeTypeNameSuggestions = true;
     }
@@ -450,6 +450,13 @@
   }
 
   @override
+  void visitConstructorSelector(ConstructorSelector node) {
+    if (identical(entity, node.name)) {
+      optype.completionLocation = 'ConstructorSelector_name';
+    }
+  }
+
+  @override
   void visitContinueStatement(ContinueStatement node) {
     if (node.label == null || identical(entity, node.label)) {
       optype.includeStatementLabelSuggestions = true;
@@ -496,6 +503,17 @@
   }
 
   @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    if (node.semicolon != null) {
+      if (node.members.contains(entity) ||
+          identical(entity, node.rightBracket)) {
+        optype.completionLocation = 'EnumDeclaration_member';
+        optype.includeTypeNameSuggestions = true;
+      }
+    }
+  }
+
+  @override
   void visitExpression(Expression node) {
     // This should never be called; we should always dispatch to the visitor
     // for a particular kind of expression.
@@ -561,7 +579,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    if (identical(entity, node.superclass2)) {
+    if (identical(entity, node.superclass)) {
       optype.completionLocation = 'ExtendsClause_superclass';
       optype.includeTypeNameSuggestions = true;
     }
@@ -585,6 +603,29 @@
     if (entity == node.fields) {
       optype.completionLocation = 'FieldDeclaration_fields';
     }
+
+    // Incomplete code looks like a "field" declaration.
+    if (node.fields.type == null) {
+      var variables = node.fields.variables;
+      // class A { static late ^ }
+      if (node.staticKeyword != null &&
+          variables.length == 1 &&
+          variables[0].name.name == 'late') {
+        optype.completionLocation = 'FieldDeclaration_static_late';
+        optype.includeTypeNameSuggestions = true;
+        return;
+      }
+      // class A { static ^ }
+      if (node.staticKeyword == null &&
+          offset <= node.semicolon.offset &&
+          variables.length == 1 &&
+          variables[0].name.name == 'static') {
+        optype.completionLocation = 'FieldDeclaration_static';
+        optype.includeTypeNameSuggestions = true;
+        return;
+      }
+    }
+
     if (offset <= node.semicolon.offset) {
       optype.includeVarNameSuggestions = true;
     }
@@ -1313,7 +1354,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    if (node.mixinTypes2.contains(entity)) {
+    if (node.mixinTypes.contains(entity)) {
       optype.completionLocation = 'WithClause_mixinType';
     }
     optype.includeTypeNameSuggestions = true;
@@ -1335,6 +1376,8 @@
       var parent = node.parent;
       if (parent is Annotation) {
         return 'annotation';
+      } else if (parent is EnumConstantArguments) {
+        return 'enumConstantArguments';
       } else if (parent is ExtensionOverride) {
         return 'extensionOverride';
       } else if (parent is FunctionExpressionInvocation) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation.dart b/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation.dart
index 23709a3..da91052 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/element/element.dart' as analyzer;
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart' show SourceRange;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -33,10 +34,8 @@
 
 /// A concrete implementation of [NavigationCollector].
 class NavigationCollectorImpl implements NavigationCollector {
-  /// Whether the collector is collecting target code locations. Computers can
-  /// skip computing these if this is false.
-  @override
-  final bool collectCodeLocations;
+  /// Each target which was created from an element is added here.
+  final List<TargetToUpdate> targetsToUpdate = [];
 
   /// A list of navigation regions.
   final List<NavigationRegion> regions = <NavigationRegion>[];
@@ -54,25 +53,24 @@
 
   final Map<String, int> fileMap = <String, int>{};
 
-  NavigationCollectorImpl({this.collectCodeLocations = false});
+  NavigationCollectorImpl();
 
   @override
   void addRange(
       SourceRange range, ElementKind targetKind, Location targetLocation,
-      {Location? targetCodeLocation}) {
+      {analyzer.Element? targetElement}) {
     addRegion(range.offset, range.length, targetKind, targetLocation,
-        targetCodeLocation: targetCodeLocation);
+        targetElement: targetElement);
   }
 
   @override
   void addRegion(
       int offset, int length, ElementKind targetKind, Location targetLocation,
-      {Location? targetCodeLocation}) {
+      {analyzer.Element? targetElement}) {
     var range = SourceRange(offset, length);
     // add new target
     var targets = regionMap.putIfAbsent(range, () => <int>[]);
-    var targetIndex =
-        _addTarget(targetKind, targetLocation, targetCodeLocation);
+    var targetIndex = _addTarget(targetKind, targetLocation, targetElement);
     targets.add(targetIndex);
   }
 
@@ -96,7 +94,8 @@
     return index;
   }
 
-  int _addTarget(ElementKind kind, Location location, Location? codeLocation) {
+  int _addTarget(
+      ElementKind kind, Location location, analyzer.Element? element) {
     var pair = Pair<ElementKind, Location>(kind, location);
     var index = targetMap[pair];
     if (index == null) {
@@ -104,12 +103,23 @@
       var fileIndex = _addFile(file);
       index = targets.length;
       var target = NavigationTarget(kind, fileIndex, location.offset,
-          location.length, location.startLine, location.startColumn,
-          codeOffset: collectCodeLocations ? codeLocation?.offset : null,
-          codeLength: collectCodeLocations ? codeLocation?.length : null);
+          location.length, location.startLine, location.startColumn);
       targets.add(target);
       targetMap[pair] = index;
+      if (element != null) {
+        targetsToUpdate.add(TargetToUpdate(element, target));
+      }
     }
     return index;
   }
 }
+
+/// The element and the navigation target created for it.
+///
+/// If code location feature is enabled, we update [target] using [element].
+class TargetToUpdate {
+  final analyzer.Element element;
+  final NavigationTarget target;
+
+  TargetToUpdate(this.element, this.target);
+}
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart
index 9e02f7a4f..1267087 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/element/element.dart' as analyzer;
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart';
@@ -26,21 +27,22 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class NavigationCollector {
-  /// Whether the collector is collecting target code locations. Computers can
-  /// skip computing these if this is false.
-  bool get collectCodeLocations;
-
   /// Record a new navigation region corresponding to the given [range] that
   /// should navigate to the given [targetNameLocation].
   void addRange(
       SourceRange range, ElementKind targetKind, Location targetLocation,
-      {Location targetCodeLocation});
+      {analyzer.Element? targetElement});
 
   /// Record a new navigation region with the given [offset] and [length] that
   /// should navigate to the given [targetNameLocation].
+  ///
+  /// In the most cases the [targetNameLocation] is already based on the
+  /// [targetElement], but in a few cases this method is invoked without an
+  /// element. The element is provided to associate it with the target, and
+  /// later update the target.
   void addRegion(int offset, int length, ElementKind targetKind,
       Location targetNameLocation,
-      {Location? targetCodeLocation});
+      {analyzer.Element? targetElement});
 }
 
 /// An object used to produce navigation regions.
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 537f6c2..803d099 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -92,12 +91,7 @@
       return;
     }
 
-    var codeLocation = collector.collectCodeLocations
-        ? _getCodeLocation(element, location, converter)
-        : null;
-
-    collector.addRegion(offset, length, kind, location,
-        targetCodeLocation: codeLocation);
+    collector.addRegion(offset, length, kind, location, targetElement: element);
   }
 
   void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element? element) {
@@ -121,51 +115,6 @@
     _addRegion(offset, length, element);
   }
 
-  /// Get the location of the code (excluding leading doc comments) for this element.
-  protocol.Location? _getCodeLocation(Element element,
-      protocol.Location location, AnalyzerConverter converter) {
-    var codeElement = element;
-    // For synthetic getters created for fields, we need to access the associated
-    // variable to get the codeOffset/codeLength.
-    if (codeElement.isSynthetic && codeElement is PropertyAccessorElementImpl) {
-      final variable = codeElement.variable;
-      if (variable is ElementImpl) {
-        codeElement = variable as ElementImpl;
-      }
-    }
-
-    // Read the main codeOffset from the element. This may include doc comments
-    // but will give the correct end position.
-    int? codeOffset, codeLength;
-    if (codeElement is ElementImpl) {
-      codeOffset = codeElement.codeOffset;
-      codeLength = codeElement.codeLength;
-    }
-
-    if (codeOffset == null || codeLength == null) {
-      return null;
-    }
-
-    // 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);
-    var node = declaration?.node;
-    if (node is VariableDeclaration) {
-      node = node.parent;
-    }
-    if (node is AnnotatedNode) {
-      var offsetAfterDocs = node.firstTokenAfterCommentAndMetadata.offset;
-
-      // Reduce the length by the difference between the end of docs and the start.
-      codeLength -= (offsetAfterDocs - codeOffset);
-      codeOffset = offsetAfterDocs;
-    }
-
-    return converter.locationFromElement(element,
-        offset: codeOffset, length: codeLength);
-  }
-
   /// Checks if offset/length intersect with the range the user requested
   /// navigation regions for.
   ///
@@ -185,25 +134,6 @@
     }
     return true;
   }
-
-  static ElementDeclarationResult? _parsedDeclaration(Element element) {
-    var session = element.session;
-    if (session == null) {
-      return null;
-    }
-
-    var libraryPath = element.library?.source.fullName;
-    if (libraryPath == null) {
-      return null;
-    }
-
-    var parsedLibrary = session.getParsedLibrary(libraryPath);
-    if (parsedLibrary is! ParsedLibraryResult) {
-      return null;
-    }
-
-    return parsedLibrary.getElementDeclaration(element);
-  }
 }
 
 class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
@@ -354,7 +284,7 @@
       return;
     }
     // add regions
-    var typeName = node.type2;
+    var typeName = node.type;
     // [prefix].ClassName
     {
       var name = typeName.name;
@@ -389,6 +319,21 @@
   }
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    computer._addRegionForNode(node.name, node.constructorElement);
+
+    var arguments = node.arguments;
+    if (arguments != null) {
+      computer._addRegionForNode(
+        arguments.constructorSelector?.name,
+        node.constructorElement,
+      );
+      arguments.typeArguments?.accept(this);
+      arguments.argumentList.accept(this);
+    }
+  }
+
+  @override
   void visitExportDirective(ExportDirective node) {
     var exportElement = node.element;
     if (exportElement != null) {
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index cdb3f12..cfa4524 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -165,6 +165,7 @@
           'hasNamedParameters': isBool,
           'parameterName': isString,
           'parameterType': isString,
+          'libraryUri': isString,
           'isNotImported': isBool
         }));
 
@@ -237,8 +238,7 @@
       'parameters': isString,
       'returnType': isString,
       'typeParameters': isString,
-      'aliasedType': isString,
-      'libraryUri': isString
+      'aliasedType': isString
     }));
 
 /// ElementKind
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_core_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_core_test.dart
index a571f04..39598e0 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_core_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_core_test.dart
@@ -384,6 +384,25 @@
     });
   }
 
+  Future<void> test_addInsertion_updatesLinkedPositions() async {
+    var groupName = 'a';
+    var range = SourceRange(3, 6);
+    await builder.addGenericFileEdit(path, (builder) {
+      builder.addLinkedPosition(range, groupName);
+      // Insert 50 characters before the linked position.
+      builder.addInsertion(0, (builder) => builder.write('// ${'a' * 46}\n'));
+    });
+
+    var group = builder.getLinkedEditGroup(groupName);
+    var positions = group.positions;
+    expect(positions, hasLength(1));
+    var position = positions[0];
+    expect(position.file, path);
+    // Expect the linked position was moved along by the edit.
+    expect(position.offset, range.offset + 50);
+    expect(group.length, range.length);
+  }
+
   Future<void> test_addLinkedPosition() async {
     var groupName = 'a';
     await builder.addGenericFileEdit(path, (builder) {
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 c7211d4..ae38afa 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
@@ -678,9 +678,10 @@
     expect(edit.replacement, equalsIgnoringWhitespace('Foo'));
   }
 
-  Future<void> test_writeImportedName_needsImport() async {
+  Future<void> test_writeImportedName_needsImport_insertion() async {
     var path = convertPath('/home/test/lib/test.dart');
-    addSource(path, '');
+    var content = '';
+    addSource(path, content);
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
@@ -693,9 +694,40 @@
     });
     var edits = getEdits(builder);
     expect(edits, hasLength(2));
-    expect(edits[0].replacement,
+    expect(edits[0].replacement, equalsIgnoringWhitespace('Foo'));
+    expect(edits[1].replacement,
         equalsIgnoringWhitespace("import 'package:test/foo.dart';\n"));
-    expect(edits[1].replacement, equalsIgnoringWhitespace('Foo'));
+    var result = SourceEdit.applySequence(content, edits);
+    expect(result, '''
+import 'package:test/foo.dart';
+
+Foo''');
+  }
+
+  Future<void> test_writeImportedName_needsImport_replacement() async {
+    var path = convertPath('/home/test/lib/test.dart');
+    var content = 'test';
+    addSource(path, content);
+
+    var builder = newBuilder();
+    await builder.addDartFileEdit(path, (builder) {
+      builder.addReplacement(SourceRange(0, 4), (builder) {
+        builder.writeImportedName([
+          Uri.parse('package:test/foo.dart'),
+          Uri.parse('package:test/bar.dart')
+        ], 'Foo');
+      });
+    });
+    var edits = getEdits(builder);
+    expect(edits, hasLength(2));
+    expect(edits[0].replacement, equalsIgnoringWhitespace('Foo'));
+    expect(edits[1].replacement,
+        equalsIgnoringWhitespace("import 'package:test/foo.dart';\n"));
+    var result = SourceEdit.applySequence(content, edits);
+    expect(result, '''
+import 'package:test/foo.dart';
+
+Foo''');
   }
 
   Future<void> test_writeLocalVariableDeclaration_noType_initializer() async {
@@ -1257,14 +1289,19 @@
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
+      builder.addInsertion(0, (builder) {
         builder.writeReference(aElement);
       });
     });
     var edits = getEdits(builder);
     expect(edits, hasLength(2));
-    expect(edits[0].replacement, equalsIgnoringWhitespace("import 'a.dart';"));
-    expect(edits[1].replacement, equalsIgnoringWhitespace('a'));
+    expect(edits[0].replacement, equalsIgnoringWhitespace('a'));
+    expect(edits[1].replacement, equalsIgnoringWhitespace("import 'a.dart';"));
+    var result = SourceEdit.applySequence(content, edits);
+    expect(result, '''
+import 'a.dart';
+
+a''');
   }
 
   Future<void> test_writeSetterDeclaration_bodyWriter() async {
@@ -1528,7 +1565,7 @@
 
     var builder = newBuilder();
     await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
+      builder.addInsertion(0, (builder) {
         builder.writeType(a1.instantiate(
           typeArguments: [],
           nullabilitySuffix: NullabilitySuffix.star,
@@ -1552,12 +1589,19 @@
     expect(edits, hasLength(2));
     expect(
         edits[0].replacement,
-        equalsIgnoringWhitespace("import 'package:test/a.dart' as _prefix0; "
-            "import 'package:test/b.dart' as _prefix1;"));
-    expect(
-        edits[1].replacement,
         equalsIgnoringWhitespace(
             '_prefix0.A1 a1; _prefix0.A2 a2; _prefix1.B b;'));
+    expect(
+        edits[1].replacement,
+        equalsIgnoringWhitespace("import 'package:test/a.dart' as _prefix0; "
+            "import 'package:test/b.dart' as _prefix1;"));
+
+    var resultCode = SourceEdit.applySequence(content, edits);
+    expect(resultCode, r'''
+import 'package:test/a.dart' as _prefix0;
+import 'package:test/b.dart' as _prefix1;
+
+_prefix0.A1 a1; _prefix0.A2 a2; _prefix1.B b;''');
   }
 
   Future<void> test_writeType_required_dynamic() async {
@@ -1953,6 +1997,23 @@
 @reflectiveTest
 class ImportLibraryTest extends AbstractContextTest
     with DartChangeBuilderMixin {
+  Future<void> test_dart_afterDart_last() async {
+    await _assertImportLibrary(
+      initialCode: '''
+import 'dart:aaa';
+
+class A {}
+''',
+      uriList: ['dart:bbb'],
+      expectedCode: '''
+import 'dart:aaa';
+import 'dart:bbb';
+
+class A {}
+''',
+    );
+  }
+
   Future<void> test_dart_beforeDart() async {
     await _assertImportLibrary(
       initialCode: '''
@@ -1981,6 +2042,20 @@
     );
   }
 
+  Future<void> test_dart_beforeExport() async {
+    await _assertImportLibrary(
+      initialCode: '''
+export 'dart:aaa';
+''',
+      uriList: ['dart:bbb'],
+      expectedCode: '''
+import 'dart:bbb';
+
+export 'dart:aaa';
+''',
+    );
+  }
+
   Future<void> test_dart_beforePackage() async {
     await _assertImportLibrary(
       initialCode: '''
@@ -2136,6 +2211,7 @@
     await _assertImportLibrary(
       initialCode: '''
 part 'a.dart';
+part 'b.dart';
 ''',
       uriList: ['dart:aaa', 'dart:bbb'],
       expectedCode: '''
@@ -2143,6 +2219,7 @@
 import 'dart:bbb';
 
 part 'a.dart';
+part 'b.dart';
 ''',
     );
   }
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
index 0f66c92..7f1dc4c 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/optype_test.dart
@@ -1026,6 +1026,42 @@
     await assertOpType();
   }
 
+  Future<void> test_enumDeclaration_afterSemicolon() async {
+    addTestSource('''
+enum E {
+  v;
+  ^
+}
+''');
+    await assertOpType(
+      completionLocation: 'EnumDeclaration_member',
+      typeNames: true,
+    );
+  }
+
+  Future<void> test_enumDeclaration_afterSemicolon_beforeMethod() async {
+    addTestSource('''
+enum E {
+  v;
+  ^foo() {}
+}
+''');
+    await assertOpType(
+      completionLocation: 'EnumDeclaration_member',
+      typeNames: true,
+    );
+  }
+
+  Future<void> test_enumDeclaration_noSemicolon() async {
+    addTestSource('''
+enum E {
+  v
+  ^
+}
+''');
+    await assertOpType();
+  }
+
   Future<void> test_expressionFunctionBody_beginning() async {
     // SimpleIdentifier  ExpressionFunctionBody  FunctionExpression
     addTestSource('m(){[1].forEach((x)=>^x);}');
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 38487ab..ab3e77a 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -352,24 +352,6 @@
           plugin.Element.FLAG_CONST | plugin.Element.FLAG_STATIC);
     }
     {
-      var engineElement = findElement.field('index', of: 'E2');
-      // create notification Element
-      var element = converter.convertElement(engineElement);
-      expect(element.kind, plugin.ElementKind.FIELD);
-      expect(element.name, 'index');
-      {
-        var location = element.location!;
-        expect(location.file, testFile);
-        expect(location.offset, -1);
-        expect(location.length, 'index'.length);
-        expect(location.startLine, 1);
-        expect(location.startColumn, 0);
-      }
-      expect(element.parameters, isNull);
-      expect(element.returnType, 'int');
-      expect(element.flags, plugin.Element.FLAG_FINAL);
-    }
-    {
       var engineElement = findElement.field('values', of: 'E2');
 
       // create notification Element
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 4f20366..327ebfe 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
@@ -1681,6 +1681,8 @@
     assertNotSuggested('values');
   }
 
+  /// TODO(scheglov) move this test into contributor independent suite
+  @FailingTest(reason: 'No index, not local anymore')
   Future<void> test_enumConst_index() async {
     addTestSource('enum E { one, two } main() {E.one.^}');
     await computeSuggestions();
@@ -1691,6 +1693,8 @@
     assertNotSuggested('values');
   }
 
+  /// TODO(scheglov) move this test into contributor independent suite
+  @FailingTest(reason: 'No index, not local anymore')
   Future<void> test_enumConst_index2() async {
     addTestSource('enum E { one, two } main() {E.one.i^}');
     await computeSuggestions();
@@ -1701,6 +1705,8 @@
     assertNotSuggested('values');
   }
 
+  /// TODO(scheglov) move this test into contributor independent suite
+  @FailingTest(reason: 'No index, not local anymore')
   Future<void> test_enumConst_index3() async {
     addTestSource('enum E { one, two } main() {E.one.^ int g;}');
     await computeSuggestions();
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart b/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart
index c5f4cb9..e99476e 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart
@@ -713,10 +713,20 @@
         writeln('}');
         return true;
       case 'SourceChange':
-        docComment(
-            [dom.Text('Adds [edit] to the [FileEdit] for the given [file].')]);
-        writeln('void addEdit(String file, int fileStamp, SourceEdit edit) =>');
-        writeln('    addEditToSourceChange(this, file, fileStamp, edit);');
+        docComment([
+          dom.Element.tag('p')
+            ..append(dom.Text(
+                'Adds [edit] to the [FileEdit] for the given [file].')),
+          dom.Element.tag('p')
+            ..append(dom.Text(
+                'If [insertBeforeExisting] is `true`, inserts made at the '
+                'same offset as other edits will be inserted such that they '
+                'appear before them in the resulting document.')),
+        ]);
+        writeln('void addEdit(String file, int fileStamp, SourceEdit edit, '
+            '{bool insertBeforeExisting = false}) =>');
+        writeln('    addEditToSourceChange(this, file, fileStamp, edit, '
+            'insertBeforeExisting: insertBeforeExisting);');
         writeln();
         docComment([dom.Text('Adds the given [FileEdit].')]);
         writeln('void addFileEdit(SourceFileEdit edit) {');
@@ -745,12 +755,32 @@
         writeln('String apply(String code) => applyEdit(code, this);');
         return true;
       case 'SourceFileEdit':
-        docComment([dom.Text('Adds the given [Edit] to the list.')]);
-        writeln('void add(SourceEdit edit) => addEditForSource(this, edit);');
+        docComment([
+          dom.Element.tag('p')
+            ..append(dom.Text('Adds the given [Edit] to the list.')),
+          dom.Element.tag('p')
+            ..append(dom.Text(
+                'If [insertBeforeExisting] is `true`, inserts made at the '
+                'same offset as other edits will be inserted such that they '
+                'appear before them in the resulting document.')),
+        ]);
+        writeln('void add(SourceEdit edit, '
+            '{bool insertBeforeExisting = false}) =>');
+        writeln('    addEditForSource(this, edit, '
+            'insertBeforeExisting: insertBeforeExisting);');
         writeln();
-        docComment([dom.Text('Adds the given [Edit]s.')]);
-        writeln('void addAll(Iterable<SourceEdit> edits) =>');
-        writeln('    addAllEditsForSource(this, edits);');
+        docComment([
+          dom.Element.tag('p')..append(dom.Text('Adds the given [Edit]s.')),
+          dom.Element.tag('p')
+            ..append(dom.Text(
+                'If [insertBeforeExisting] is `true`, inserts made at the '
+                'same offset as other edits will be inserted such that they '
+                'appear before them in the resulting document.')),
+        ]);
+        writeln('void addAll(Iterable<SourceEdit> edits, '
+            '{bool insertBeforeExisting = false}) =>');
+        writeln('    addAllEditsForSource(this, edits, '
+            'insertBeforeExisting: insertBeforeExisting);');
         return true;
       default:
         return false;
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart b/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart
index 648859a..611e583 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart
@@ -25,7 +25,7 @@
     codeGeneratorSettings.languageName = 'dart';
   }
 
-  /// Generate all of the constants associates with the [api].
+  /// Generate all of the constants associated with the [api].
   void generateConstants() {
     var visitor = _ConstantVisitor(api);
     visitor.visitApi();
diff --git a/pkg/analyzer_plugin/tool/spec/common_types_spec.html b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
index 969a0ee..9a3d257 100644
--- a/pkg/analyzer_plugin/tool/spec/common_types_spec.html
+++ b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
@@ -380,6 +380,29 @@
           omitted if the parameterName field is omitted.
         </p>
       </field>
+      <field name="libraryUri" experimental="true" optional="true">
+        <ref>String</ref>
+        <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>
+      </field>
       <field name="isNotImported" optional="true" experimental="true">
         <ref>bool</ref>
         <p>
@@ -563,13 +586,6 @@
           Otherwise this field will not be defined.
         </p>
       </field>
-      <field name="libraryUri" optional="true" experimental="true">
-        <ref>String</ref>
-        <p>
-          If the element belongs to a library, the URI of the library.
-          Otherwise, this field will not be defined.
-        </p>
-      </field>
     </object>
   </type>
   <type name="ElementKind">
@@ -998,7 +1014,8 @@
           <ref>Position</ref>
         </list>
         <p>
-          The positions of the regions that should be edited simultaneously.
+          The positions of the regions (after applying the relevant edits) that
+          should be edited simultaneously.
         </p>
       </field>
       <field name="length">
diff --git a/pkg/analyzer_utilities/OWNERS b/pkg/analyzer_utilities/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/analyzer_utilities/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
diff --git a/pkg/async_helper/OWNERS b/pkg/async_helper/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/pkg/async_helper/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/pkg/build_integration/OWNERS b/pkg/build_integration/OWNERS
new file mode 100644
index 0000000..876a884
--- /dev/null
+++ b/pkg/build_integration/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_FOUNDATION
diff --git a/pkg/build_integration/lib/file_system/multi_root.dart b/pkg/build_integration/lib/file_system/multi_root.dart
index 14772cc..7fff8e7 100644
--- a/pkg/build_integration/lib/file_system/multi_root.dart
+++ b/pkg/build_integration/lib/file_system/multi_root.dart
@@ -52,7 +52,7 @@
       _delegate ??= await _resolveEntity();
 
   Future<FileSystemEntity> _resolveEntity() async {
-    if (uri.scheme == multiRootFileSystem.markerScheme) {
+    if (uri.isScheme(multiRootFileSystem.markerScheme)) {
       if (!uri.isAbsolute) {
         throw new FileSystemException(
             uri, "This MultiRootFileSystem only handles absolutes URIs: $uri");
diff --git a/pkg/build_integration/lib/file_system/single_root.dart b/pkg/build_integration/lib/file_system/single_root.dart
index 30cbc66..896dfc3 100644
--- a/pkg/build_integration/lib/file_system/single_root.dart
+++ b/pkg/build_integration/lib/file_system/single_root.dart
@@ -33,7 +33,7 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme != markerScheme) {
+    if (!uri.isScheme(markerScheme)) {
       throw new FileSystemException(
           uri,
           "This SingleRootFileSystem only handles URIs with the '$markerScheme'"
diff --git a/pkg/compiler/OWNERS b/pkg/compiler/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/compiler/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/compiler/README.md b/pkg/compiler/README.md
index d7e7a1a..bf2c604 100644
--- a/pkg/compiler/README.md
+++ b/pkg/compiler/README.md
@@ -14,10 +14,10 @@
 
   1. **load kernel**: Load all the code as kernel
       * Collect dart sources transtively
-      * Convert to kernel AST  
-  
+      * Convert to kernel AST
+
   (this will be handled by invoking the front-end package)
-  
+
   Alternatively, the compiler can start compilation directly from kernel files.
 
   2. **model**: Create a Dart model of the program
@@ -245,21 +245,13 @@
 command-line tool to launch dart2js, but also by pub to invoke dart2js as a
 library during `pub-build` and `pub-serve`.
 
-* `lib/compiler_new.dart`: the current API. This API is used by our command-line
+* `lib/compiler.dart`: the compiler API. This API is used by our command-line
   tool to spawn the dart2js compiler. This API (and everything that is
   transitively created from it) has no dependencies on `dart:io` so that the
   compiler can be used in contexts where `dart:io` is not available (e.g.
   running in a browser worker) or where `dart:io` is not used explicitly (e.g.
   running as a pub transformer).
 
-  AI: rename to `compiler.dart`.
-
-* `lib/compiler.dart`: a legacy API that now is implemented by adapting calls to
-  the new API in `compiler_new.dart`.
-
-  AI: migrate users to the new API (pub is one of those users, possibly dart-pad
-  is another), and delete the legacy API.
-
 **lib/src folder**: most of the compiler lives here, as very little of its
 functionality is publicly exposed.
 
@@ -267,30 +259,13 @@
 * `lib/src/dart2js.dart`: the command-line script that runs dart2js. When
   building the SDK, the dart2js snapshot is built using the main method on this
   script.  This file creates the parameters needed to invoke the API defined in
-  `lib/compiler_new.dart`. All dependencies on `dart:io` come from here. This is
+  `lib/compiler.dart`. All dependencies on `dart:io` come from here. This is
   also where we process options (although some of the logic is done in
   `options.dart`).
 
 * `lib/src/compiler.dart`: defines the core `Compiler` object, which contains
   all the logic about what the compiler pipeline does and how data is organized
-  and communicated between different phases. For a long time, `Compiler` was
-  also used throughout the system as a global dependency-injection object.
-  We've been slowly disentangling those dependencies, but there are still many
-  references to `compiler` still in use.
-
-* `lib/src/apiimpl.dart`: defines `CompilerImpl` a subclass of `Compiler` that
-  adds support for loading scripts, resolving package URIs and patch files. The
-  separation here is a bit historical and we should be able to remove it. It was
-  added to make it easier to create a `MockCompiler` implementation for unit
-  testing. The `MockCompiler` has been replaced in most unit tests by a regular
-  `CompilerImpl` that uses a mock of the file-system (see
-  `pkg/compiler/test/memory_compiler.dart`).
-
-  AI: Once all tests are migrated to this memory compiler, we should merge
-  `Compiler` and `CompilerImpl` and remove this file.
-
-* `lib/src/old_to_new_api.dart`: helper library used to adapt the public API in
-  `lib/compiler.dart` to `lib/compiler_new.dart`.
+  and communicated between different phases.
 
 * `lib/src/closure.dart`: closures are compiled as classes, this file has the
   logic to do this kind of conversion in the Dart element model. This includes
@@ -340,7 +315,7 @@
   compilation either because they are first-class in the language or because
   they are implicitly used to implement some features. These include:
 
-  * `lib/src/common_elements.dart`: provides an interface to lookup basic
+  * `lib/src/common/elements.dart`: provides an interface to lookup basic
     elements like the class of `Object`, `int`, `List`, and their corresponding
     interface types, constructors for symbols, annotations such as
     `@MirrorsUsed`, the `identical` function, etc. These are normally restricted
@@ -404,7 +379,7 @@
 * Input/output: the compiler is designed to avoid all dependencies on dart:io.
   Most data is consumed and emitted via provider APIs.
 
-  * `lib/src/compiler_new.dart`: defines the interface of these providers (see
+  * `lib/src/compiler.dart`: defines the interface of these providers (see
     `CompilerInput` and `CompilerOutput`).
 
   * `lib/src/null_compiler_output.dart`: a `CompilerOutput` that discards all
@@ -679,15 +654,6 @@
 `lib/src/scanner`
 `lib/src/scanner/scanner_task.dart`
 
-`lib/src/helpers`
-`lib/src/helpers/trace.dart`
-`lib/src/helpers/debug_collection.dart`
-`lib/src/helpers/expensive_map.dart`
-`lib/src/helpers/helpers.dart`
-`lib/src/helpers/track_map.dart`
-`lib/src/helpers/expensive_set.dart`
-`lib/src/helpers/stats.dart`
-
 `lib/src/js`
 `lib/src/js/js.dart`
 `lib/src/js/placeholder_safety.dart`
diff --git a/pkg/compiler/lib/compiler.dart b/pkg/compiler/lib/compiler.dart
index b3e8552..b9ade95 100644
--- a/pkg/compiler/lib/compiler.dart
+++ b/pkg/compiler/lib/compiler.dart
@@ -6,119 +6,18 @@
 
 import 'dart:async';
 
-import 'compiler_new.dart' as new_api;
-import 'src/old_to_new_api.dart';
+import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
+
+import 'src/compiler.dart';
 import 'src/options.dart' show CompilerOptions;
 
 // Unless explicitly allowed, passing [:null:] for any argument to the
 // methods of library will result in an Error being thrown.
 
-/// Returns a future that completes to the source corresponding to [uri].
-/// If an exception occurs, the future completes with this exception.
-///
-/// The source can be represented either as a [:List<int>:] of UTF-8 bytes or as
-/// a [String].
-///
-/// The following text is non-normative:
-///
-/// It is recommended to return a UTF-8 encoded list of bytes because the
-/// scanner is more efficient in this case. In either case, the data structure
-/// is expected to hold a zero element at the last position. If this is not the
-/// case, the entire data structure is copied before scanning.
-typedef Future /* <String | List<int>> */ CompilerInputProvider(Uri uri);
-
-/// Deprecated, please use [CompilerInputProvider] instead.
-typedef Future<String> ReadStringFromUri(Uri uri);
-
-/// Returns an [EventSink] that will serve as compiler output for the given
-/// component.
-///
-/// Components are identified by [name] and [extension]. By convention,
-/// the empty string [:"":] will represent the main script
-/// (corresponding to the script parameter of [compile]) even if the
-/// main script is a library. For libraries that are compiled
-/// separately, the library name is used.
-///
-/// At least the following extensions can be expected:
-///
-/// * "js" for JavaScript output.
-/// * "js.map" for source maps.
-/// * "dart" for Dart output.
-/// * "dart.map" for source maps.
-///
-/// As more features are added to the compiler, new names and
-/// extensions may be introduced.
-typedef EventSink<String> CompilerOutputProvider(String name, String extension);
-
-/// Invoked by the compiler to report diagnostics. If [uri] is
-/// [:null:], so are [begin] and [end]. No other arguments may be
-/// [:null:]. If [uri] is not [:null:], neither are [begin] and
-/// [end]. [uri] indicates the compilation unit from where the
-/// diagnostic originates. [begin] and [end] are zero-based character
-/// offsets from the beginning of the compilation unit. [message] is the
-/// diagnostic message, and [kind] indicates indicates what kind of
-/// diagnostic it is.
-typedef void DiagnosticHandler(
-    Uri uri, int begin, int end, String message, Diagnostic kind);
-
-/// Information resulting from the compilation.
-class CompilationResult {
-  /// `true` if the compilation succeeded, that is, compilation didn't fail due
-  /// to compile-time errors and/or internal errors.
-  final bool isSuccess;
-
-  /// The compiler object used for the compilation.
-  ///
-  /// Note: The type of [compiler] is implementation dependent and may vary.
-  /// Use only for debugging and testing.
-  final compiler;
-
-  CompilationResult(this.compiler, {this.isSuccess: true});
-}
-
-/// Returns a future that completes to a non-null String when [script]
-/// has been successfully compiled.
-///
-/// The compiler output is obtained by providing an [outputProvider].
-///
-/// If the compilation fails, the future's value will be [:null:] and
-/// [handler] will have been invoked at least once with [:kind ==
-/// Diagnostic.ERROR:] or [:kind == Diagnostic.CRASH:].
-///
-/// Deprecated: if no [outputProvider] is given, the future completes
-/// to the compiled script. This behavior will be removed in the future
-/// as the compiler may create multiple files to support lazy loading
-/// of libraries.
-Future<CompilationResult> compile(Uri script, Uri librariesSpecificationUri,
-    CompilerInputProvider inputProvider, DiagnosticHandler handler,
-    [List<String> options = const [],
-    CompilerOutputProvider outputProvider,
-    Map<String, String> environment = const {},
-    Uri packageConfig]) {
-  CompilerOptions compilerOptions = CompilerOptions.parse(options,
-      librariesSpecificationUri: librariesSpecificationUri)
-    ..entryUri = script
-    ..packageConfig = packageConfig
-    ..environment = environment;
-
-  new_api.CompilerInput compilerInput = new LegacyCompilerInput(inputProvider);
-  new_api.CompilerDiagnostics compilerDiagnostics =
-      new LegacyCompilerDiagnostics(handler);
-  new_api.CompilerOutput compilerOutput =
-      new LegacyCompilerOutput(outputProvider);
-
-  return new_api
-      .compile(
-          compilerOptions, compilerInput, compilerDiagnostics, compilerOutput)
-      .then((new_api.CompilationResult result) {
-    return new CompilationResult(result.compiler, isSuccess: result.isSuccess);
-  });
-}
-
 /// Kind of diagnostics that the compiler can report.
 class Diagnostic {
   /// An error as identified by the "Dart Programming Language
-  /// Specification" [http://www.dartlang.org/docs/spec/].
+  /// Specification" [https://dart.dev/guides/language/spec].
   ///
   /// Note: the compiler may still produce an executable result after
   /// reporting a compilation error. The specification says:
@@ -133,7 +32,7 @@
   static const Diagnostic ERROR = const Diagnostic(1, 'error');
 
   /// A warning as identified by the "Dart Programming Language
-  /// Specification" [http://www.dartlang.org/docs/spec/].
+  /// Specification" [https://dart.dev/guides/language/spec].
   static const Diagnostic WARNING = const Diagnostic(2, 'warning');
 
   /// Any other warning that is not covered by [WARNING].
@@ -168,3 +67,187 @@
   @override
   String toString() => name;
 }
+
+// Unless explicitly allowed, passing `null` for any argument to the
+// methods of library will result in an Error being thrown.
+
+/// Input kinds used by [CompilerInput.readFromUri].
+enum InputKind {
+  /// Data is read as UTF8 either as a [String] or a zero-terminated
+  /// `List<int>`.
+  UTF8,
+
+  /// Data is read as bytes in a `List<int>`.
+  binary,
+}
+
+/// Interface for data read through [CompilerInput.readFromUri].
+abstract class Input<T> {
+  /// The URI from which data was read.
+  Uri get uri;
+
+  /// The format of the read [data].
+  InputKind get inputKind;
+
+  /// The raw data read from [uri].
+  T get data;
+
+  /// Release any resources held by the input. After releasing, a call to `get
+  /// data` will fail, and previously returned data may be invalid.
+  void release();
+}
+
+/// Interface for providing the compiler with input. That is, Dart source files,
+/// package config files, etc.
+abstract class CompilerInput {
+  /// Returns a future that completes to the source corresponding to [uri].
+  /// If an exception occurs, the future completes with this exception.
+  ///
+  /// If [inputKind] is `InputKind.UTF8` the source can be represented either as
+  /// a zero-terminated `List<int>` of UTF-8 bytes or as a [String]. If
+  /// [inputKind] is `InputKind.binary` the source is a read a `List<int>`.
+  ///
+  /// The following text is non-normative:
+  ///
+  /// It is recommended to return a UTF-8 encoded list of bytes because the
+  /// scanner is more efficient in this case. In either case, the data structure
+  /// is expected to hold a zero element at the last position. If this is not
+  /// the case, the entire data structure is copied before scanning.
+  Future<Input> readFromUri(Uri uri, {InputKind inputKind: InputKind.UTF8});
+}
+
+/// Output types used in `CompilerOutput.createOutputSink`.
+enum OutputType {
+  /// The main JavaScript output.
+  js,
+
+  /// A deferred JavaScript output part.
+  jsPart,
+
+  /// A source map for a JavaScript output.
+  sourceMap,
+
+  /// Dump info output.
+  dumpInfo,
+
+  /// Deferred map output.
+  deferredMap,
+
+  /// Unused libraries output.
+  dumpUnusedLibraries,
+
+  /// Implementation specific output used for debugging the compiler.
+  debug,
+}
+
+/// Sink interface used for generating output from the compiler.
+abstract class OutputSink {
+  /// Adds [text] to the sink.
+  void add(String text);
+
+  /// Closes the sink.
+  void close();
+}
+
+/// Sink interface used for generating binary data from the compiler.
+abstract class BinaryOutputSink {
+  /// Writes indices [start] to [end] of [buffer] to the sink.
+  void write(List<int> buffer, [int start = 0, int end]);
+
+  /// Closes the sink.
+  void close();
+}
+
+/// Interface for producing output from the compiler. That is, JavaScript target
+/// files, source map files, dump info files, etc.
+abstract class CompilerOutput {
+  /// Returns an [OutputSink] that will serve as compiler output for the given
+  /// component.
+  ///
+  /// Components are identified by [name], [extension], and [type]. By
+  /// convention, the empty string `""` will represent the main output of the
+  /// provided [type]. [name] and [extension] are otherwise suggestive.
+  // TODO(johnniwinther): Replace [name] and [extension] with something like
+  // [id] and [uri].
+  OutputSink createOutputSink(String name, String extension, OutputType type);
+
+  /// Returns an [BinaryOutputSink] that will serve as compiler output for the
+  /// given URI.
+  BinaryOutputSink createBinarySink(Uri uri);
+}
+
+/// Interface for receiving diagnostic message from the compiler. That is,
+/// errors, warnings, hints, etc.
+abstract class CompilerDiagnostics {
+  /// Invoked by the compiler to report diagnostics. If [uri] is `null`, so are
+  /// [begin] and [end]. No other arguments may be `null`. If [uri] is not
+  /// `null`, neither are [begin] and [end]. [uri] indicates the compilation
+  /// unit from where the diagnostic originates. [begin] and [end] are
+  /// zero-based character offsets from the beginning of the compilation unit.
+  /// [message] is the diagnostic message, and [kind] indicates indicates what
+  /// kind of diagnostic it is.
+  ///
+  /// Experimental: [code] gives access to an id for the messages. Currently it
+  /// is the [Message] used to create the diagnostic, if available, from which
+  /// the [MessageKind] is accessible.
+  void report(
+      var code, Uri uri, int begin, int end, String text, Diagnostic kind);
+}
+
+/// Information resulting from the compilation.
+class CompilationResult {
+  /// `true` if the compilation succeeded, that is, compilation didn't fail due
+  /// to compile-time errors and/or internal errors.
+  final bool isSuccess;
+
+  /// The compiler object used for the compilation.
+  ///
+  /// Note: The type of [compiler] is implementation dependent and may vary.
+  /// Use only for debugging and testing.
+  final compiler;
+
+  /// Shared state between compilations.
+  ///
+  /// This is used to speed up batch mode.
+  final fe.InitializedCompilerState kernelInitializedCompilerState;
+
+  CompilationResult(this.compiler,
+      {this.isSuccess: true, this.kernelInitializedCompilerState: null});
+}
+
+/// Returns a future that completes to a [CompilationResult] when the Dart
+/// sources in [options] have been compiled.
+///
+/// The generated compiler output is obtained by providing a [compilerOutput].
+///
+/// If the compilation fails, the future's `CompilationResult.isSuccess` is
+/// `false` and [CompilerDiagnostics.report] on [compilerDiagnostics]
+/// is invoked at least once with `kind == Diagnostic.ERROR` or
+/// `kind == Diagnostic.CRASH`.
+Future<CompilationResult> compile(
+    CompilerOptions compilerOptions,
+    CompilerInput compilerInput,
+    CompilerDiagnostics compilerDiagnostics,
+    CompilerOutput compilerOutput) {
+  if (compilerOptions == null) {
+    throw new ArgumentError("compilerOptions must be non-null");
+  }
+  if (compilerInput == null) {
+    throw new ArgumentError("compilerInput must be non-null");
+  }
+  if (compilerDiagnostics == null) {
+    throw new ArgumentError("compilerDiagnostics must be non-null");
+  }
+  if (compilerOutput == null) {
+    throw new ArgumentError("compilerOutput must be non-null");
+  }
+
+  var compiler = Compiler(
+      compilerInput, compilerOutput, compilerDiagnostics, compilerOptions);
+  return compiler.run().then((bool success) {
+    return new CompilationResult(compiler,
+        isSuccess: success,
+        kernelInitializedCompilerState:
+            compiler.kernelLoader.initializedCompilerState);
+  });
+}
diff --git a/pkg/compiler/lib/compiler_new.dart b/pkg/compiler/lib/compiler_new.dart
deleted file mode 100644
index 5a4ccc8..0000000
--- a/pkg/compiler/lib/compiler_new.dart
+++ /dev/null
@@ -1,202 +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.
-
-/// New Compiler API. This API is under construction, use only internally or
-/// in unittests.
-
-library compiler_new;
-
-import 'dart:async';
-
-import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
-
-import 'compiler.dart' show Diagnostic;
-import 'src/apiimpl.dart';
-import 'src/options.dart' show CompilerOptions;
-
-export 'compiler.dart' show Diagnostic;
-
-// Unless explicitly allowed, passing `null` for any argument to the
-// methods of library will result in an Error being thrown.
-
-/// Input kinds used by [CompilerInput.readFromUri].
-enum InputKind {
-  /// Data is read as UTF8 either as a [String] or a zero-terminated
-  /// `List<int>`.
-  UTF8,
-
-  /// Data is read as bytes in a `List<int>`.
-  binary,
-}
-
-/// Interface for data read through [CompilerInput.readFromUri].
-abstract class Input<T> {
-  /// The URI from which data was read.
-  Uri get uri;
-
-  /// The format of the read [data].
-  InputKind get inputKind;
-
-  /// The raw data read from [uri].
-  T get data;
-
-  /// Release any resources held by the input. After releasing, a call to `get
-  /// data` will fail, and previously returned data may be invalid.
-  void release();
-}
-
-/// Interface for providing the compiler with input. That is, Dart source files,
-/// package config files, etc.
-abstract class CompilerInput {
-  /// Returns a future that completes to the source corresponding to [uri].
-  /// If an exception occurs, the future completes with this exception.
-  ///
-  /// If [inputKind] is `InputKind.UTF8` the source can be represented either as
-  /// a zero-terminated `List<int>` of UTF-8 bytes or as a [String]. If
-  /// [inputKind] is `InputKind.binary` the source is a read a `List<int>`.
-  ///
-  /// The following text is non-normative:
-  ///
-  /// It is recommended to return a UTF-8 encoded list of bytes because the
-  /// scanner is more efficient in this case. In either case, the data structure
-  /// is expected to hold a zero element at the last position. If this is not
-  /// the case, the entire data structure is copied before scanning.
-  Future<Input> readFromUri(Uri uri, {InputKind inputKind: InputKind.UTF8});
-}
-
-/// Output types used in `CompilerOutput.createOutputSink`.
-enum OutputType {
-  /// The main JavaScript output.
-  js,
-
-  /// A deferred JavaScript output part.
-  jsPart,
-
-  /// A source map for a JavaScript output.
-  sourceMap,
-
-  /// Dump info output.
-  dumpInfo,
-
-  /// Deferred map output.
-  deferredMap,
-
-  /// Unused libraries output.
-  dumpUnusedLibraries,
-
-  /// Implementation specific output used for debugging the compiler.
-  debug,
-}
-
-/// Sink interface used for generating output from the compiler.
-abstract class OutputSink {
-  /// Adds [text] to the sink.
-  void add(String text);
-
-  /// Closes the sink.
-  void close();
-}
-
-/// Sink interface used for generating binary data from the compiler.
-abstract class BinaryOutputSink {
-  /// Writes indices [start] to [end] of [buffer] to the sink.
-  void write(List<int> buffer, [int start = 0, int end]);
-
-  /// Closes the sink.
-  void close();
-}
-
-/// Interface for producing output from the compiler. That is, JavaScript target
-/// files, source map files, dump info files, etc.
-abstract class CompilerOutput {
-  /// Returns an [OutputSink] that will serve as compiler output for the given
-  /// component.
-  ///
-  /// Components are identified by [name], [extension], and [type]. By
-  /// convention, the empty string `""` will represent the main output of the
-  /// provided [type]. [name] and [extension] are otherwise suggestive.
-  // TODO(johnniwinther): Replace [name] and [extension] with something like
-  // [id] and [uri].
-  OutputSink createOutputSink(String name, String extension, OutputType type);
-
-  /// Returns an [BinaryOutputSink] that will serve as compiler output for the
-  /// given URI.
-  BinaryOutputSink createBinarySink(Uri uri);
-}
-
-/// Interface for receiving diagnostic message from the compiler. That is,
-/// errors, warnings, hints, etc.
-abstract class CompilerDiagnostics {
-  /// Invoked by the compiler to report diagnostics. If [uri] is `null`, so are
-  /// [begin] and [end]. No other arguments may be `null`. If [uri] is not
-  /// `null`, neither are [begin] and [end]. [uri] indicates the compilation
-  /// unit from where the diagnostic originates. [begin] and [end] are
-  /// zero-based character offsets from the beginning of the compilation unit.
-  /// [message] is the diagnostic message, and [kind] indicates indicates what
-  /// kind of diagnostic it is.
-  ///
-  /// Experimental: [code] gives access to an id for the messages. Currently it
-  /// is the [Message] used to create the diagnostic, if available, from which
-  /// the [MessageKind] is accessible.
-  void report(
-      var code, Uri uri, int begin, int end, String text, Diagnostic kind);
-}
-
-/// Information resulting from the compilation.
-class CompilationResult {
-  /// `true` if the compilation succeeded, that is, compilation didn't fail due
-  /// to compile-time errors and/or internal errors.
-  final bool isSuccess;
-
-  /// The compiler object used for the compilation.
-  ///
-  /// Note: The type of [compiler] is implementation dependent and may vary.
-  /// Use only for debugging and testing.
-  final compiler;
-
-  /// Shared state between compilations.
-  ///
-  /// This is used to speed up batch mode.
-  final fe.InitializedCompilerState kernelInitializedCompilerState;
-
-  CompilationResult(this.compiler,
-      {this.isSuccess: true, this.kernelInitializedCompilerState: null});
-}
-
-/// Returns a future that completes to a [CompilationResult] when the Dart
-/// sources in [options] have been compiled.
-///
-/// The generated compiler output is obtained by providing a [compilerOutput].
-///
-/// If the compilation fails, the future's `CompilationResult.isSuccess` is
-/// `false` and [CompilerDiagnostics.report] on [compilerDiagnostics]
-/// is invoked at least once with `kind == Diagnostic.ERROR` or
-/// `kind == Diagnostic.CRASH`.
-Future<CompilationResult> compile(
-    CompilerOptions compilerOptions,
-    CompilerInput compilerInput,
-    CompilerDiagnostics compilerDiagnostics,
-    CompilerOutput compilerOutput) {
-  if (compilerOptions == null) {
-    throw new ArgumentError("compilerOptions must be non-null");
-  }
-  if (compilerInput == null) {
-    throw new ArgumentError("compilerInput must be non-null");
-  }
-  if (compilerDiagnostics == null) {
-    throw new ArgumentError("compilerDiagnostics must be non-null");
-  }
-  if (compilerOutput == null) {
-    throw new ArgumentError("compilerOutput must be non-null");
-  }
-
-  CompilerImpl compiler = new CompilerImpl(
-      compilerInput, compilerOutput, compilerDiagnostics, compilerOptions);
-  return compiler.run().then((bool success) {
-    return new CompilationResult(compiler,
-        isSuccess: success,
-        kernelInitializedCompilerState:
-            compiler.kernelLoader.initializedCompilerState);
-  });
-}
diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
deleted file mode 100644
index ed1087c..0000000
--- a/pkg/compiler/lib/src/apiimpl.dart
+++ /dev/null
@@ -1,216 +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 leg_apiimpl;
-
-import 'dart:async';
-
-import '../compiler_new.dart' as api;
-import 'common/metrics.dart' show Metrics, Metric;
-import 'common/tasks.dart' show GenericTask, Measurer;
-import 'common.dart';
-import 'compiler.dart';
-import 'diagnostics/messages.dart' show Message;
-import 'environment.dart';
-import 'options.dart' show CompilerOptions;
-
-/// Implements the [Compiler] using a [api.CompilerInput] for supplying the
-/// sources.
-class CompilerImpl extends Compiler {
-  @override
-  final Measurer measurer;
-  @override
-  api.CompilerInput provider;
-  api.CompilerDiagnostics handler;
-
-  GenericTask userHandlerTask;
-  GenericTask userProviderTask;
-
-  CompilerImpl(this.provider, api.CompilerOutput outputProvider, this.handler,
-      CompilerOptions options,
-      {MakeReporterFunction makeReporter})
-      // NOTE: allocating measurer is done upfront to ensure the wallclock is
-      // started before other computations.
-      : measurer = Measurer(enableTaskMeasurements: options.verbose),
-        super(
-            options: options,
-            outputProvider: outputProvider,
-            environment: _Environment(options.environment),
-            makeReporter: makeReporter) {
-    tasks.addAll([
-      userHandlerTask = GenericTask('Diagnostic handler', measurer),
-      userProviderTask = GenericTask('Input provider', measurer),
-    ]);
-  }
-
-  void logInfo(String message) {
-    callUserHandler(null, null, null, null, message, api.Diagnostic.INFO);
-  }
-
-  void logVerbose(String message) {
-    callUserHandler(
-        null, null, null, null, message, api.Diagnostic.VERBOSE_INFO);
-  }
-
-  @override
-  Future<bool> run() {
-    Duration setupDuration = measurer.elapsedWallClock;
-    return selfTask.measureSubtask("impl.run", () async {
-      bool success = await super.run();
-      if (options.verbose) {
-        StringBuffer timings = StringBuffer();
-        computeTimings(setupDuration, timings);
-        logVerbose('$timings');
-      }
-      if (options.reportPrimaryMetrics || options.reportSecondaryMetrics) {
-        StringBuffer metrics = StringBuffer();
-        collectMetrics(metrics);
-        logInfo('$metrics');
-      }
-      return success;
-    });
-  }
-
-  String _formatMs(int ms) {
-    return (ms / 1000).toStringAsFixed(3) + 's';
-  }
-
-  void computeTimings(Duration setupDuration, StringBuffer timings) {
-    timings.writeln("Timings:");
-    Duration totalDuration = measurer.elapsedWallClock;
-    Duration asyncDuration = measurer.elapsedAsyncWallClock;
-    Duration cumulatedDuration = Duration.zero;
-    List<_TimingData> timingData = [];
-    for (final task in tasks) {
-      String running = task.isRunning ? "*" : " ";
-      Duration duration = task.duration;
-      if (duration != Duration.zero) {
-        cumulatedDuration += duration;
-        int milliseconds = duration.inMilliseconds;
-        timingData.add(_TimingData('   $running${task.name}:', milliseconds,
-            milliseconds * 100 / totalDuration.inMilliseconds));
-        for (String subtask in task.subtasks) {
-          int subtime = task.getSubtaskTime(subtask);
-          String running = task.getSubtaskIsRunning(subtask) ? "*" : " ";
-          timingData.add(_TimingData('   $running${task.name} > $subtask:',
-              subtime, subtime * 100 / totalDuration.inMilliseconds));
-        }
-      }
-    }
-    int longestDescription = timingData
-        .map((d) => d.description.length)
-        .fold(0, (a, b) => a < b ? b : a);
-    for (var data in timingData) {
-      var ms = _formatMs(data.milliseconds);
-      var padding =
-          " " * (longestDescription + 10 - data.description.length - ms.length);
-      var percentPadding = data.percent < 10 ? " " : "";
-      timings.writeln('${data.description}$padding $ms '
-          '$percentPadding(${data.percent.toStringAsFixed(1)}%)');
-    }
-    Duration unaccountedDuration =
-        totalDuration - cumulatedDuration - setupDuration - asyncDuration;
-    double percent =
-        unaccountedDuration.inMilliseconds * 100 / totalDuration.inMilliseconds;
-    timings.write(
-        '    Total compile-time ${_formatMs(totalDuration.inMilliseconds)};'
-        ' setup ${_formatMs(setupDuration.inMilliseconds)};'
-        ' async ${_formatMs(asyncDuration.inMilliseconds)};'
-        ' unaccounted ${_formatMs(unaccountedDuration.inMilliseconds)}'
-        ' (${percent.toStringAsFixed(2)}%)');
-  }
-
-  void collectMetrics(StringBuffer buffer) {
-    buffer.writeln('Metrics:');
-    for (final task in tasks) {
-      Metrics metrics = task.metrics;
-      String namespace = metrics.namespace;
-      if (namespace == '') {
-        namespace =
-            task.name.toLowerCase().replaceAll(RegExp(r'[^a-z0-9]+'), '_');
-      }
-      void report(Metric metric) {
-        buffer
-            .writeln('  ${namespace}.${metric.name}: ${metric.formatValue()}');
-      }
-
-      for (final metric in metrics.primary) {
-        report(metric);
-      }
-      if (options.reportSecondaryMetrics) {
-        for (final metric in metrics.secondary) {
-          report(metric);
-        }
-      }
-    }
-  }
-
-  @override
-  void reportDiagnostic(DiagnosticMessage message,
-      List<DiagnosticMessage> infos, api.Diagnostic kind) {
-    _reportDiagnosticMessage(message, kind);
-    for (DiagnosticMessage info in infos) {
-      _reportDiagnosticMessage(info, api.Diagnostic.INFO);
-    }
-  }
-
-  void _reportDiagnosticMessage(
-      DiagnosticMessage diagnosticMessage, api.Diagnostic kind) {
-    // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For
-    // instance in the [Types] constructor in typechecker.dart.
-    SourceSpan span = diagnosticMessage.sourceSpan;
-    Message message = diagnosticMessage.message;
-    if (span == null || span.uri == null) {
-      callUserHandler(message, null, null, null, '$message', kind);
-    } else {
-      callUserHandler(
-          message, span.uri, span.begin, span.end, '$message', kind);
-    }
-  }
-
-  void callUserHandler(Message message, Uri uri, int begin, int end,
-      String text, api.Diagnostic kind) {
-    try {
-      userHandlerTask.measure(() {
-        handler.report(message, uri, begin, end, text, kind);
-      });
-    } catch (ex, s) {
-      reportCrashInUserCode('Uncaught exception in diagnostic handler', ex, s);
-      rethrow;
-    }
-  }
-
-  Future<api.Input> callUserProvider(Uri uri, api.InputKind inputKind) {
-    try {
-      return userProviderTask
-          .measureIo(() => provider.readFromUri(uri, inputKind: inputKind));
-    } catch (ex, s) {
-      reportCrashInUserCode('Uncaught exception in input provider', ex, s);
-      rethrow;
-    }
-  }
-}
-
-class _Environment implements Environment {
-  final Map<String, String> definitions;
-  Map<String, String> _completeMap;
-
-  _Environment(this.definitions);
-
-  @override
-  Map<String, String> toMap() {
-    if (_completeMap == null) {
-      _completeMap = Map<String, String>.from(definitions);
-    }
-    return _completeMap;
-  }
-}
-
-class _TimingData {
-  final String description;
-  final int milliseconds;
-  final double percent;
-
-  _TimingData(this.description, this.milliseconds, this.percent);
-}
diff --git a/pkg/compiler/lib/src/backend_strategy.dart b/pkg/compiler/lib/src/backend_strategy.dart
deleted file mode 100644
index a8f2d9f..0000000
--- a/pkg/compiler/lib/src/backend_strategy.dart
+++ /dev/null
@@ -1,86 +0,0 @@
-// 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.
-
-library dart2js.backend_strategy;
-
-import 'common.dart';
-import 'common/codegen.dart';
-import 'common/tasks.dart';
-import 'deferred_load/output_unit.dart' show OutputUnitData;
-import 'enqueue.dart';
-import 'elements/entities.dart';
-import 'inferrer/types.dart';
-import 'io/source_information.dart';
-import 'js_backend/backend.dart';
-import 'js_backend/enqueuer.dart';
-import 'js_backend/inferred_data.dart';
-import 'js_emitter/code_emitter_task.dart';
-import 'js_model/locals.dart';
-import 'serialization/serialization.dart';
-import 'ssa/ssa.dart';
-import 'universe/codegen_world_builder.dart';
-import 'world.dart';
-
-/// Strategy pattern that defines the element model used in type inference
-/// and code generation.
-abstract class BackendStrategy {
-  List<CompilerTask> get tasks;
-
-  FunctionCompiler get functionCompiler;
-
-  CodeEmitterTask get emitterTask;
-
-  /// Create the [JClosedWorld] from [closedWorld].
-  JClosedWorld createJClosedWorld(
-      KClosedWorld closedWorld, OutputUnitData outputUnitData);
-
-  /// Registers [closedWorld] as the current closed world used by this backend
-  /// strategy.
-  ///
-  /// This is used to support serialization after type inference.
-  void registerJClosedWorld(JClosedWorld closedWorld);
-
-  /// Called when the compiler starts running the codegen.
-  ///
-  /// Returns the [CodegenInputs] objects with the needed data.
-  CodegenInputs onCodegenStart(
-      GlobalTypeInferenceResults globalTypeInferenceResults);
-
-  /// Creates an [Enqueuer] for code generation specific to this backend.
-  CodegenEnqueuer createCodegenEnqueuer(
-      CompilerTask task,
-      JClosedWorld closedWorld,
-      GlobalTypeInferenceResults globalInferenceResults,
-      CodegenInputs codegen,
-      CodegenResults codegenResults);
-
-  /// Called when code generation has been completed.
-  void onCodegenEnd(CodegenInputs codegen);
-
-  /// Creates the [SsaBuilder] used for the element model.
-  SsaBuilder createSsaBuilder(
-      CompilerTask task, SourceInformationStrategy sourceInformationStrategy);
-
-  /// Creates a [SourceSpan] from [spannable] in context of [currentElement].
-  SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement);
-
-  /// Creates the [TypesInferrer] used by this strategy.
-  TypesInferrer createTypesInferrer(JClosedWorld closedWorld,
-      GlobalLocalsMap globalLocalsMap, InferredDataBuilder inferredDataBuilder);
-
-  /// Calls [f] for every member that needs to be serialized for modular code
-  /// generation and returns an [EntityWriter] for encoding these members in
-  /// the serialized data.
-  ///
-  /// The needed members include members computed on demand during non-modular
-  /// code generation, such as constructor bodies and and generator bodies.
-  EntityWriter forEachCodegenMember(void Function(MemberEntity member) f);
-
-  /// Prepare [source] to deserialize modular code generation data.
-  void prepareCodegenReader(DataSource source);
-
-  /// Generates the output and returns the total size of the generated code.
-  int assembleProgram(JClosedWorld closedWorld, InferredData inferredData,
-      CodegenInputs codegenInputs, CodegenWorld codegenWorld);
-}
diff --git a/pkg/compiler/lib/src/common.dart b/pkg/compiler/lib/src/common.dart
index 0a4b1d5..cb18897 100644
--- a/pkg/compiler/lib/src/common.dart
+++ b/pkg/compiler/lib/src/common.dart
@@ -17,6 +17,5 @@
         NO_LOCATION_SPANNABLE,
         Spannable,
         SpannableAssertionFailure;
-export 'helpers/helpers.dart';
 
 bool retainDataForTesting = false;
diff --git a/pkg/compiler/lib/src/common/backend_api.dart b/pkg/compiler/lib/src/common/backend_api.dart
deleted file mode 100644
index 5c38952..0000000
--- a/pkg/compiler/lib/src/common/backend_api.dart
+++ /dev/null
@@ -1,22 +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.backend_api;
-
-import '../common/resolution.dart' show ResolutionImpact;
-import '../universe/world_impact.dart' show WorldImpact;
-
-/// Target-specific transformation for resolution world impacts.
-///
-/// This processes target-agnostic [ResolutionImpact]s and creates [WorldImpact]
-/// in which backend/target specific impact data is added, for example: if
-/// certain feature is used that requires some helper code from the backend
-/// libraries, this will be included by the impact transformer.
-class ImpactTransformer {
-  /// Transform the [ResolutionImpact] into a [WorldImpact] adding the
-  /// backend dependencies for features used in [worldImpact].
-  WorldImpact transformResolutionImpact(ResolutionImpact worldImpact) {
-    return worldImpact;
-  }
-}
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index 3f766ba..16d9ed1 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -7,7 +7,7 @@
 import 'package:js_ast/src/precedence.dart' as js show PRIMARY;
 
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/values.dart';
 import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
diff --git a/pkg/compiler/lib/src/common/elements.dart b/pkg/compiler/lib/src/common/elements.dart
new file mode 100644
index 0000000..0f88c4e
--- /dev/null
+++ b/pkg/compiler/lib/src/common/elements.dart
@@ -0,0 +1,1661 @@
+// 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 '../common.dart';
+import '../constants/constant_system.dart' as constant_system;
+import '../constants/values.dart';
+import '../elements/entities.dart';
+import '../elements/types.dart';
+import '../inferrer/abstract_value_domain.dart';
+import '../js_backend/native_data.dart' show NativeBasicData;
+import '../js_model/locals.dart';
+import '../universe/selector.dart' show Selector;
+
+import 'names.dart' show Identifiers, Uris;
+
+/// The common elements and types in Dart.
+abstract class CommonElements {
+  final DartTypes dartTypes;
+  final ElementEnvironment _env;
+  ClassEntity _objectClass;
+  ClassEntity _boolClass;
+  ClassEntity _numClass;
+  ClassEntity _intClass;
+  ClassEntity _doubleClass;
+  ClassEntity _stringClass;
+  ClassEntity _functionClass;
+  ClassEntity _resourceClass;
+  ClassEntity _symbolClass;
+  ClassEntity _nullClass;
+  ClassEntity _typeClass;
+  ClassEntity _stackTraceClass;
+  ClassEntity _listClass;
+  ClassEntity _setClass;
+  ClassEntity _mapClass;
+  ClassEntity _unmodifiableSetClass;
+  ClassEntity _iterableClass;
+  ClassEntity _futureClass;
+  ClassEntity _streamClass;
+  LibraryEntity _coreLibrary;
+  LibraryEntity _asyncLibrary;
+  LibraryEntity _mirrorsLibrary;
+  LibraryEntity _typedDataLibrary;
+  LibraryEntity _jsHelperLibrary;
+  LibraryEntity _lateHelperLibrary;
+  LibraryEntity _foreignLibrary;
+  LibraryEntity _rtiLibrary;
+  LibraryEntity _interceptorsLibrary;
+  LibraryEntity _internalLibrary;
+  LibraryEntity _dartJsAnnotationsLibrary;
+  LibraryEntity _dartJsLibrary;
+  LibraryEntity _packageJsLibrary;
+  ClassEntity _typedDataClass;
+  ConstructorEntity _symbolConstructorTarget;
+  bool _computedSymbolConstructorDependencies = false;
+  ConstructorEntity _symbolConstructorImplementationTarget;
+  FunctionEntity _identicalFunction;
+  ClassEntity _mapLiteralClass;
+  ConstructorEntity _mapLiteralConstructor;
+  ConstructorEntity _mapLiteralConstructorEmpty;
+  FunctionEntity _mapLiteralUntypedMaker;
+  FunctionEntity _mapLiteralUntypedEmptyMaker;
+  ClassEntity _setLiteralClass;
+  ConstructorEntity _setLiteralConstructor;
+  ConstructorEntity _setLiteralConstructorEmpty;
+  FunctionEntity _setLiteralUntypedMaker;
+  FunctionEntity _setLiteralUntypedEmptyMaker;
+  FunctionEntity _objectNoSuchMethod;
+  FunctionEntity _syncStarIterableFactory;
+  FunctionEntity _asyncAwaitCompleterFactory;
+  FunctionEntity _asyncStarStreamControllerFactory;
+  ClassEntity _jsInterceptorClass;
+  ClassEntity _jsStringClass;
+  ClassEntity _jsArrayClass;
+  ClassEntity _jsNumberClass;
+  ClassEntity _jsIntClass;
+  ClassEntity _jsNumNotIntClass;
+  ClassEntity _jsNullClass;
+  ClassEntity _jsBoolClass;
+  ClassEntity _jsPlainJavaScriptObjectClass;
+  ClassEntity _jsUnknownJavaScriptObjectClass;
+  ClassEntity _jsJavaScriptFunctionClass;
+  ClassEntity _jsLegacyJavaScriptObjectClass;
+  ClassEntity _jsJavaScriptObjectClass;
+  ClassEntity _jsIndexableClass;
+  ClassEntity _jsMutableIndexableClass;
+  ClassEntity _jsMutableArrayClass;
+  ClassEntity _jsFixedArrayClass;
+  ClassEntity _jsExtendableArrayClass;
+  ClassEntity _jsUnmodifiableArrayClass;
+  ClassEntity _jsPositiveIntClass;
+  ClassEntity _jsUInt32Class;
+  ClassEntity _jsUInt31Class;
+  FunctionEntity _getNativeInterceptorMethod;
+  ConstructorEntity _jsArrayTypedConstructor;
+  ClassEntity _closureClass;
+  ClassEntity _closureClass0Args;
+  ClassEntity _closureClass2Args;
+  ClassEntity _boundClosureClass;
+  ClassEntity _typeLiteralClass;
+  ClassEntity _constMapLiteralClass;
+  ClassEntity _constSetLiteralClass;
+  ClassEntity _jsInvocationMirrorClass;
+  ClassEntity _requiredSentinelClass;
+  MemberEntity _invocationTypeArgumentGetter;
+  ClassEntity _jsIndexingBehaviorInterface;
+  ClassEntity _nativeAnnotationClass;
+  FunctionEntity _assertTest;
+  FunctionEntity _assertThrow;
+  FunctionEntity _assertHelper;
+  FunctionEntity _assertUnreachableMethod;
+  FunctionEntity _getIsolateAffinityTagMarker;
+  FunctionEntity _requiresPreambleMarker;
+  FunctionEntity _rawStartupMetrics;
+  FunctionEntity _setArrayType;
+  FunctionEntity _findType;
+  FunctionEntity _instanceType;
+  FunctionEntity _arrayInstanceType;
+  FunctionEntity _simpleInstanceType;
+  FunctionEntity _typeLiteralMaker;
+  FunctionEntity _checkTypeBound;
+  FieldEntity _rtiAsField;
+  FieldEntity _rtiIsField;
+  FieldEntity _rtiRestField;
+  FieldEntity _rtiPrecomputed1Field;
+  FunctionEntity _rtiEvalMethod;
+  FunctionEntity _rtiBindMethod;
+  FunctionEntity _rtiAddRulesMethod;
+  FunctionEntity _rtiAddErasedTypesMethod;
+  FunctionEntity _rtiAddTypeParameterVariancesMethod;
+  FunctionEntity _generalIsTestImplementation;
+  FunctionEntity _generalAsCheckImplementation;
+  FunctionEntity _generalNullableAsCheckImplementation;
+  FunctionEntity _specializedIsObject;
+  FunctionEntity _specializedAsObject;
+  FunctionEntity _generalNullableIsTestImplementation;
+  ClassEntity _symbolImplementationClass;
+  ClassEntity _externalNameClass;
+  ClassEntity _jsGetNameEnum;
+  FunctionEntity _jsAllowInterop1;
+  FunctionEntity _jsAllowInterop2;
+  FieldEntity _symbolImplementationField;
+  FunctionEntity _cachedCheckConcurrentModificationError;
+
+  CommonElements(this.dartTypes, this._env);
+
+  /// The `Object` class defined in 'dart:core'.
+  ClassEntity get objectClass =>
+      _objectClass ??= _findClass(coreLibrary, 'Object');
+
+  /// The `bool` class defined in 'dart:core'.
+  ClassEntity get boolClass => _boolClass ??= _findClass(coreLibrary, 'bool');
+
+  /// The `num` class defined in 'dart:core'.
+  ClassEntity get numClass => _numClass ??= _findClass(coreLibrary, 'num');
+
+  /// The `int` class defined in 'dart:core'.
+  ClassEntity get intClass => _intClass ??= _findClass(coreLibrary, 'int');
+
+  /// The `double` class defined in 'dart:core'.
+  ClassEntity get doubleClass =>
+      _doubleClass ??= _findClass(coreLibrary, 'double');
+
+  /// The `String` class defined in 'dart:core'.
+  ClassEntity get stringClass =>
+      _stringClass ??= _findClass(coreLibrary, 'String');
+
+  /// The `Function` class defined in 'dart:core'.
+  ClassEntity get functionClass =>
+      _functionClass ??= _findClass(coreLibrary, 'Function');
+
+  /// The `Resource` class defined in 'dart:core'.
+  ClassEntity get resourceClass =>
+      _resourceClass ??= _findClass(coreLibrary, 'Resource');
+
+  /// The `Symbol` class defined in 'dart:core'.
+  ClassEntity get symbolClass =>
+      _symbolClass ??= _findClass(coreLibrary, 'Symbol');
+
+  /// The `Null` class defined in 'dart:core'.
+  ClassEntity get nullClass => _nullClass ??= _findClass(coreLibrary, 'Null');
+
+  /// The `Type` class defined in 'dart:core'.
+  ClassEntity get typeClass => _typeClass ??= _findClass(coreLibrary, 'Type');
+
+  /// The `StackTrace` class defined in 'dart:core';
+  ClassEntity get stackTraceClass =>
+      _stackTraceClass ??= _findClass(coreLibrary, 'StackTrace');
+
+  /// The `List` class defined in 'dart:core';
+  ClassEntity get listClass => _listClass ??= _findClass(coreLibrary, 'List');
+
+  /// The `Set` class defined in 'dart:core';
+  ClassEntity get setClass => _setClass ??= _findClass(coreLibrary, 'Set');
+
+  /// The `Map` class defined in 'dart:core';
+  ClassEntity get mapClass => _mapClass ??= _findClass(coreLibrary, 'Map');
+
+  /// The `Set` class defined in 'dart:core';
+  ClassEntity get unmodifiableSetClass => _unmodifiableSetClass ??=
+      _findClass(_env.lookupLibrary(Uris.dart_collection), '_UnmodifiableSet');
+
+  /// The `Iterable` class defined in 'dart:core';
+  ClassEntity get iterableClass =>
+      _iterableClass ??= _findClass(coreLibrary, 'Iterable');
+
+  /// The `Future` class defined in 'async';.
+  ClassEntity get futureClass =>
+      _futureClass ??= _findClass(asyncLibrary, 'Future');
+
+  /// The `Stream` class defined in 'async';
+  ClassEntity get streamClass =>
+      _streamClass ??= _findClass(asyncLibrary, 'Stream');
+
+  /// The dart:core library.
+  LibraryEntity get coreLibrary =>
+      _coreLibrary ??= _env.lookupLibrary(Uris.dart_core, required: true);
+
+  /// The dart:async library.
+  LibraryEntity get asyncLibrary =>
+      _asyncLibrary ??= _env.lookupLibrary(Uris.dart_async);
+
+  /// The dart:mirrors library.
+  /// Null if the program doesn't access dart:mirrors.
+  LibraryEntity get mirrorsLibrary =>
+      _mirrorsLibrary ??= _env.lookupLibrary(Uris.dart_mirrors);
+
+  /// The dart:typed_data library.
+  LibraryEntity get typedDataLibrary =>
+      _typedDataLibrary ??= _env.lookupLibrary(Uris.dart__native_typed_data);
+
+  /// The dart:_js_helper library.
+  LibraryEntity get jsHelperLibrary =>
+      _jsHelperLibrary ??= _env.lookupLibrary(Uris.dart__js_helper);
+
+  /// The dart:_late_helper library
+  LibraryEntity get lateHelperLibrary =>
+      _lateHelperLibrary ??= _env.lookupLibrary(Uris.dart__late_helper);
+
+  /// The dart:_interceptors library.
+  LibraryEntity get interceptorsLibrary =>
+      _interceptorsLibrary ??= _env.lookupLibrary(Uris.dart__interceptors);
+
+  /// The dart:_foreign_helper library.
+  LibraryEntity get foreignLibrary =>
+      _foreignLibrary ??= _env.lookupLibrary(Uris.dart__foreign_helper);
+
+  /// The dart:_internal library.
+  LibraryEntity get rtiLibrary =>
+      _rtiLibrary ??= _env.lookupLibrary(Uris.dart__rti, required: true);
+
+  /// The dart:_internal library.
+  LibraryEntity get internalLibrary => _internalLibrary ??=
+      _env.lookupLibrary(Uris.dart__internal, required: true);
+
+  /// The dart:js library.
+  LibraryEntity get dartJsLibrary =>
+      _dartJsLibrary ??= _env.lookupLibrary(Uris.dart_js);
+
+  /// The package:js library.
+  LibraryEntity get packageJsLibrary =>
+      _packageJsLibrary ??= _env.lookupLibrary(Uris.package_js);
+
+  /// The dart:_js_annotations library.
+  LibraryEntity get dartJsAnnotationsLibrary => _dartJsAnnotationsLibrary ??=
+      _env.lookupLibrary(Uris.dart__js_annotations);
+
+  /// The `NativeTypedData` class from dart:typed_data.
+  ClassEntity get typedDataClass =>
+      _typedDataClass ??= _findClass(typedDataLibrary, 'NativeTypedData');
+
+  /// Constructor of the `Symbol` class in dart:internal.
+  ///
+  /// This getter will ensure that `Symbol` is resolved and lookup the
+  /// constructor on demand.
+  ConstructorEntity get symbolConstructorTarget {
+    // TODO(johnniwinther): Kernel does not include redirecting factories
+    // so this cannot be found in kernel. Find a consistent way to handle
+    // this and similar cases.
+    return _symbolConstructorTarget ??=
+        _findConstructor(symbolImplementationClass, '');
+  }
+
+  void _ensureSymbolConstructorDependencies() {
+    if (_computedSymbolConstructorDependencies) return;
+    _computedSymbolConstructorDependencies = true;
+    if (_symbolConstructorTarget == null) {
+      if (_symbolImplementationClass == null) {
+        _symbolImplementationClass =
+            _findClass(internalLibrary, 'Symbol', required: false);
+      }
+      if (_symbolImplementationClass != null) {
+        _symbolConstructorTarget =
+            _findConstructor(_symbolImplementationClass, '', required: false);
+      }
+    }
+    if (_symbolClass == null) {
+      _symbolClass = _findClass(coreLibrary, 'Symbol', required: false);
+    }
+    if (_symbolClass == null) {
+      return;
+    }
+    _symbolConstructorImplementationTarget =
+        _findConstructor(symbolClass, '', required: false);
+  }
+
+  /// Whether [element] is the same as [symbolConstructor].
+  ///
+  /// Used to check for the constructor without computing it until it is likely
+  /// to be seen.
+  bool isSymbolConstructor(ConstructorEntity element) {
+    assert(element != null);
+    _ensureSymbolConstructorDependencies();
+    return element == _symbolConstructorImplementationTarget ||
+        element == _symbolConstructorTarget;
+  }
+
+  /// The function `identical` in dart:core.
+  FunctionEntity get identicalFunction =>
+      _identicalFunction ??= _findLibraryMember(coreLibrary, 'identical');
+
+  /// Whether [element] is the `Function.apply` method.
+  ///
+  /// This will not resolve the apply method if it hasn't been seen yet during
+  /// compilation.
+  bool isFunctionApplyMethod(MemberEntity element) =>
+      element.name == 'apply' && element.enclosingClass == functionClass;
+
+  /// The `dynamic` type.
+  DynamicType get dynamicType => _env.dynamicType;
+
+  /// The `Object` type defined in 'dart:core'.
+  InterfaceType get objectType => _getRawType(objectClass);
+
+  /// The `bool` type defined in 'dart:core'.
+  InterfaceType get boolType => _getRawType(boolClass);
+
+  /// The `num` type defined in 'dart:core'.
+  InterfaceType get numType => _getRawType(numClass);
+
+  /// The `int` type defined in 'dart:core'.
+  InterfaceType get intType => _getRawType(intClass);
+
+  /// The `double` type defined in 'dart:core'.
+  InterfaceType get doubleType => _getRawType(doubleClass);
+
+  /// The `String` type defined in 'dart:core'.
+  InterfaceType get stringType => _getRawType(stringClass);
+
+  /// The `Symbol` type defined in 'dart:core'.
+  InterfaceType get symbolType => _getRawType(symbolClass);
+
+  /// The `Function` type defined in 'dart:core'.
+  InterfaceType get functionType => _getRawType(functionClass);
+
+  /// The `Null` type defined in 'dart:core'.
+  InterfaceType get nullType => _getRawType(nullClass);
+
+  /// The `Type` type defined in 'dart:core'.
+  InterfaceType get typeType => _getRawType(typeClass);
+
+  InterfaceType get typeLiteralType => _getRawType(typeLiteralClass);
+
+  /// The `StackTrace` type defined in 'dart:core';
+  InterfaceType get stackTraceType => _getRawType(stackTraceClass);
+
+  /// Returns an instance of the `List` type defined in 'dart:core' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType listType([DartType elementType]) {
+    if (elementType == null) {
+      return _getRawType(listClass);
+    }
+    return _createInterfaceType(listClass, [elementType]);
+  }
+
+  /// Returns an instance of the `Set` type defined in 'dart:core' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType setType([DartType elementType]) {
+    if (elementType == null) {
+      return _getRawType(setClass);
+    }
+    return _createInterfaceType(setClass, [elementType]);
+  }
+
+  /// Returns an instance of the `Map` type defined in 'dart:core' with
+  /// [keyType] and [valueType] as its type arguments.
+  ///
+  /// If no type arguments are provided, the canonical raw type is returned.
+  InterfaceType mapType([DartType keyType, DartType valueType]) {
+    if (keyType == null && valueType == null) {
+      return _getRawType(mapClass);
+    } else if (keyType == null) {
+      keyType = dynamicType;
+    } else if (valueType == null) {
+      valueType = dynamicType;
+    }
+    return _createInterfaceType(mapClass, [keyType, valueType]);
+  }
+
+  /// Returns an instance of the `Iterable` type defined in 'dart:core' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType iterableType([DartType elementType]) {
+    if (elementType == null) {
+      return _getRawType(iterableClass);
+    }
+    return _createInterfaceType(iterableClass, [elementType]);
+  }
+
+  /// Returns an instance of the `Future` type defined in 'dart:async' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType futureType([DartType elementType]) {
+    if (elementType == null) {
+      return _getRawType(futureClass);
+    }
+    return _createInterfaceType(futureClass, [elementType]);
+  }
+
+  /// Returns an instance of the `Stream` type defined in 'dart:async' with
+  /// [elementType] as its type argument.
+  ///
+  /// If no type argument is provided, the canonical raw type is returned.
+  InterfaceType streamType([DartType elementType]) {
+    if (elementType == null) {
+      return _getRawType(streamClass);
+    }
+    return _createInterfaceType(streamClass, [elementType]);
+  }
+
+  ClassEntity _findClass(LibraryEntity library, String name,
+      {bool required = true}) {
+    if (library == null) return null;
+    return _env.lookupClass(library, name, required: required);
+  }
+
+  MemberEntity _findLibraryMember(LibraryEntity library, String name,
+      {bool setter = false, bool required = true}) {
+    if (library == null) return null;
+    return _env.lookupLibraryMember(library, name,
+        setter: setter, required: required);
+  }
+
+  MemberEntity _findClassMember(ClassEntity cls, String name,
+      {bool setter = false, bool required = true}) {
+    return _env.lookupLocalClassMember(cls, name,
+        setter: setter, required: required);
+  }
+
+  ConstructorEntity _findConstructor(ClassEntity cls, String name,
+      {bool required = true}) {
+    return _env.lookupConstructor(cls, name, required: required);
+  }
+
+  /// Return the raw type of [cls].
+  InterfaceType _getRawType(ClassEntity cls) {
+    return _env.getRawType(cls);
+  }
+
+  /// Create the instantiation of [cls] with the given [typeArguments] and
+  /// [nullability].
+  InterfaceType _createInterfaceType(
+      ClassEntity cls, List<DartType> typeArguments) {
+    return _env.createInterfaceType(cls, typeArguments);
+  }
+
+  InterfaceType getConstantListTypeFor(InterfaceType sourceType) =>
+      dartTypes.treatAsRawType(sourceType)
+          ? _env.getRawType(jsArrayClass)
+          : _env.createInterfaceType(jsArrayClass, sourceType.typeArguments);
+
+  InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
+      {bool onlyStringKeys = false}) {
+    ClassEntity classElement =
+        onlyStringKeys ? constantStringMapClass : generalConstantMapClass;
+    if (dartTypes.treatAsRawType(sourceType)) {
+      return _env.getRawType(classElement);
+    } else {
+      return _env.createInterfaceType(classElement, sourceType.typeArguments);
+    }
+  }
+
+  InterfaceType getConstantSetTypeFor(InterfaceType sourceType) =>
+      dartTypes.treatAsRawType(sourceType)
+          ? _env.getRawType(constSetLiteralClass)
+          : _env.createInterfaceType(
+              constSetLiteralClass, sourceType.typeArguments);
+
+  /// Returns the field that holds the internal name in the implementation class
+  /// for `Symbol`.
+  FieldEntity get symbolField => _symbolImplementationField ??=
+      _env.lookupLocalClassMember(symbolImplementationClass, '_name',
+          required: true);
+
+  InterfaceType get symbolImplementationType =>
+      _env.getRawType(symbolImplementationClass);
+
+  // From dart:core
+  ClassEntity get mapLiteralClass {
+    if (_mapLiteralClass == null) {
+      _mapLiteralClass = _env.lookupClass(coreLibrary, 'LinkedHashMap');
+      if (_mapLiteralClass == null) {
+        _mapLiteralClass = _findClass(
+            _env.lookupLibrary(Uris.dart_collection), 'LinkedHashMap');
+      }
+    }
+    return _mapLiteralClass;
+  }
+
+  void _ensureMapLiteralHelpers() {
+    if (_mapLiteralConstructor != null) return;
+
+    _mapLiteralConstructor =
+        _env.lookupConstructor(mapLiteralClass, '_literal');
+    _mapLiteralConstructorEmpty =
+        _env.lookupConstructor(mapLiteralClass, '_empty');
+    _mapLiteralUntypedMaker =
+        _env.lookupLocalClassMember(mapLiteralClass, '_makeLiteral');
+    _mapLiteralUntypedEmptyMaker =
+        _env.lookupLocalClassMember(mapLiteralClass, '_makeEmpty');
+  }
+
+  ConstructorEntity get mapLiteralConstructor {
+    _ensureMapLiteralHelpers();
+    return _mapLiteralConstructor;
+  }
+
+  ConstructorEntity get mapLiteralConstructorEmpty {
+    _ensureMapLiteralHelpers();
+    return _mapLiteralConstructorEmpty;
+  }
+
+  FunctionEntity get mapLiteralUntypedMaker {
+    _ensureMapLiteralHelpers();
+    return _mapLiteralUntypedMaker;
+  }
+
+  FunctionEntity get mapLiteralUntypedEmptyMaker {
+    _ensureMapLiteralHelpers();
+    return _mapLiteralUntypedEmptyMaker;
+  }
+
+  ClassEntity get setLiteralClass => _setLiteralClass ??=
+      _findClass(_env.lookupLibrary(Uris.dart_collection), 'LinkedHashSet');
+
+  void _ensureSetLiteralHelpers() {
+    if (_setLiteralConstructor != null) return;
+
+    _setLiteralConstructor =
+        _env.lookupConstructor(setLiteralClass, '_literal');
+    _setLiteralConstructorEmpty =
+        _env.lookupConstructor(setLiteralClass, '_empty');
+    _setLiteralUntypedMaker =
+        _env.lookupLocalClassMember(setLiteralClass, '_makeLiteral');
+    _setLiteralUntypedEmptyMaker =
+        _env.lookupLocalClassMember(setLiteralClass, '_makeEmpty');
+  }
+
+  ConstructorEntity get setLiteralConstructor {
+    _ensureSetLiteralHelpers();
+    return _setLiteralConstructor;
+  }
+
+  ConstructorEntity get setLiteralConstructorEmpty {
+    _ensureSetLiteralHelpers();
+    return _setLiteralConstructorEmpty;
+  }
+
+  FunctionEntity get setLiteralUntypedMaker {
+    _ensureSetLiteralHelpers();
+    return _setLiteralUntypedMaker;
+  }
+
+  FunctionEntity get setLiteralUntypedEmptyMaker {
+    _ensureSetLiteralHelpers();
+    return _setLiteralUntypedEmptyMaker;
+  }
+
+  FunctionEntity get objectNoSuchMethod {
+    return _objectNoSuchMethod ??=
+        _env.lookupLocalClassMember(objectClass, Identifiers.noSuchMethod_);
+  }
+
+  bool isDefaultNoSuchMethodImplementation(FunctionEntity element) {
+    ClassEntity classElement = element.enclosingClass;
+    return classElement == objectClass ||
+        classElement == jsInterceptorClass ||
+        classElement == jsNullClass;
+  }
+
+  // From dart:async
+  ClassEntity _findAsyncHelperClass(String name) =>
+      _findClass(asyncLibrary, name);
+
+  FunctionEntity _findAsyncHelperFunction(String name) =>
+      _findLibraryMember(asyncLibrary, name);
+
+  FunctionEntity get asyncHelperStartSync =>
+      _findAsyncHelperFunction("_asyncStartSync");
+
+  FunctionEntity get asyncHelperAwait =>
+      _findAsyncHelperFunction("_asyncAwait");
+
+  FunctionEntity get asyncHelperReturn =>
+      _findAsyncHelperFunction("_asyncReturn");
+
+  FunctionEntity get asyncHelperRethrow =>
+      _findAsyncHelperFunction("_asyncRethrow");
+
+  FunctionEntity get wrapBody =>
+      _findAsyncHelperFunction("_wrapJsFunctionForAsync");
+
+  FunctionEntity get yieldStar => _env.lookupLocalClassMember(
+      _findAsyncHelperClass("_IterationMarker"), "yieldStar");
+
+  FunctionEntity get yieldSingle => _env.lookupLocalClassMember(
+      _findAsyncHelperClass("_IterationMarker"), "yieldSingle");
+
+  FunctionEntity get syncStarUncaughtError => _env.lookupLocalClassMember(
+      _findAsyncHelperClass("_IterationMarker"), "uncaughtError");
+
+  FunctionEntity get asyncStarHelper =>
+      _findAsyncHelperFunction("_asyncStarHelper");
+
+  FunctionEntity get streamOfController =>
+      _findAsyncHelperFunction("_streamOfController");
+
+  FunctionEntity get endOfIteration => _env.lookupLocalClassMember(
+      _findAsyncHelperClass("_IterationMarker"), "endOfIteration");
+
+  ClassEntity get syncStarIterable =>
+      _findAsyncHelperClass("_SyncStarIterable");
+
+  ClassEntity get futureImplementation => _findAsyncHelperClass('_Future');
+
+  ClassEntity get controllerStream =>
+      _findAsyncHelperClass("_ControllerStream");
+
+  ClassEntity get streamIterator => _findAsyncHelperClass("StreamIterator");
+
+  ConstructorEntity get streamIteratorConstructor =>
+      _env.lookupConstructor(streamIterator, "");
+
+  FunctionEntity get syncStarIterableFactory => _syncStarIterableFactory ??=
+      _findAsyncHelperFunction('_makeSyncStarIterable');
+
+  FunctionEntity get asyncAwaitCompleterFactory =>
+      _asyncAwaitCompleterFactory ??=
+          _findAsyncHelperFunction('_makeAsyncAwaitCompleter');
+
+  FunctionEntity get asyncStarStreamControllerFactory =>
+      _asyncStarStreamControllerFactory ??=
+          _findAsyncHelperFunction('_makeAsyncStarStreamController');
+
+  // From dart:_interceptors
+  ClassEntity _findInterceptorsClass(String name) =>
+      _findClass(interceptorsLibrary, name);
+
+  FunctionEntity _findInterceptorsFunction(String name) =>
+      _findLibraryMember(interceptorsLibrary, name);
+
+  ClassEntity get jsInterceptorClass =>
+      _jsInterceptorClass ??= _findInterceptorsClass('Interceptor');
+
+  ClassEntity get jsStringClass =>
+      _jsStringClass ??= _findInterceptorsClass('JSString');
+
+  ClassEntity get jsArrayClass =>
+      _jsArrayClass ??= _findInterceptorsClass('JSArray');
+
+  ClassEntity get jsNumberClass =>
+      _jsNumberClass ??= _findInterceptorsClass('JSNumber');
+
+  ClassEntity get jsIntClass => _jsIntClass ??= _findInterceptorsClass('JSInt');
+
+  ClassEntity get jsNumNotIntClass =>
+      _jsNumNotIntClass ??= _findInterceptorsClass('JSNumNotInt');
+
+  ClassEntity get jsNullClass =>
+      _jsNullClass ??= _findInterceptorsClass('JSNull');
+
+  ClassEntity get jsBoolClass =>
+      _jsBoolClass ??= _findInterceptorsClass('JSBool');
+
+  ClassEntity get jsPlainJavaScriptObjectClass =>
+      _jsPlainJavaScriptObjectClass ??=
+          _findInterceptorsClass('PlainJavaScriptObject');
+
+  ClassEntity get jsUnknownJavaScriptObjectClass =>
+      _jsUnknownJavaScriptObjectClass ??=
+          _findInterceptorsClass('UnknownJavaScriptObject');
+
+  ClassEntity get jsJavaScriptFunctionClass => _jsJavaScriptFunctionClass ??=
+      _findInterceptorsClass('JavaScriptFunction');
+
+  InterfaceType get jsJavaScriptFunctionType =>
+      _getRawType(jsJavaScriptFunctionClass);
+
+  ClassEntity get jsLegacyJavaScriptObjectClass =>
+      _jsLegacyJavaScriptObjectClass ??=
+          _findInterceptorsClass('LegacyJavaScriptObject');
+
+  ClassEntity get jsJavaScriptObjectClass =>
+      _jsJavaScriptObjectClass ??= _findInterceptorsClass('JavaScriptObject');
+
+  ClassEntity get jsIndexableClass =>
+      _jsIndexableClass ??= _findInterceptorsClass('JSIndexable');
+
+  ClassEntity get jsMutableIndexableClass =>
+      _jsMutableIndexableClass ??= _findInterceptorsClass('JSMutableIndexable');
+
+  ClassEntity get jsMutableArrayClass =>
+      _jsMutableArrayClass ??= _findInterceptorsClass('JSMutableArray');
+
+  ClassEntity get jsFixedArrayClass =>
+      _jsFixedArrayClass ??= _findInterceptorsClass('JSFixedArray');
+
+  ClassEntity get jsExtendableArrayClass =>
+      _jsExtendableArrayClass ??= _findInterceptorsClass('JSExtendableArray');
+
+  ClassEntity get jsUnmodifiableArrayClass => _jsUnmodifiableArrayClass ??=
+      _findInterceptorsClass('JSUnmodifiableArray');
+
+  ClassEntity get jsPositiveIntClass =>
+      _jsPositiveIntClass ??= _findInterceptorsClass('JSPositiveInt');
+
+  ClassEntity get jsUInt32Class =>
+      _jsUInt32Class ??= _findInterceptorsClass('JSUInt32');
+
+  ClassEntity get jsUInt31Class =>
+      _jsUInt31Class ??= _findInterceptorsClass('JSUInt31');
+
+  /// Returns `true` member is the 'findIndexForNativeSubclassType' method
+  /// declared in `dart:_interceptors`.
+  bool isFindIndexForNativeSubclassType(MemberEntity member) {
+    return member.name == 'findIndexForNativeSubclassType' &&
+        member.isTopLevel &&
+        member.library == interceptorsLibrary;
+  }
+
+  FunctionEntity get getNativeInterceptorMethod =>
+      _getNativeInterceptorMethod ??=
+          _findInterceptorsFunction('getNativeInterceptor');
+
+  ConstructorEntity get jsArrayTypedConstructor =>
+      _jsArrayTypedConstructor ??= _findConstructor(jsArrayClass, 'typed');
+
+  // From dart:_js_helper
+  // TODO(johnniwinther): Avoid the need for this (from [CheckedModeHelper]).
+  FunctionEntity findHelperFunction(String name) => _findHelperFunction(name);
+
+  FunctionEntity _findHelperFunction(String name) =>
+      _findLibraryMember(jsHelperLibrary, name);
+
+  ClassEntity _findHelperClass(String name) =>
+      _findClass(jsHelperLibrary, name);
+
+  FunctionEntity _findLateHelperFunction(String name) =>
+      _findLibraryMember(lateHelperLibrary, name);
+
+  ClassEntity get closureClass => _closureClass ??= _findHelperClass('Closure');
+
+  ClassEntity get closureClass0Args =>
+      _closureClass0Args ??= _findHelperClass('Closure0Args');
+
+  ClassEntity get closureClass2Args =>
+      _closureClass2Args ??= _findHelperClass('Closure2Args');
+
+  ClassEntity get boundClosureClass =>
+      _boundClosureClass ??= _findHelperClass('BoundClosure');
+
+  ClassEntity get typeLiteralClass =>
+      _typeLiteralClass ??= _findRtiClass('_Type');
+
+  ClassEntity get constMapLiteralClass =>
+      _constMapLiteralClass ??= _findHelperClass('ConstantMap');
+
+  // TODO(fishythefish): Implement a `ConstantSet` class and update the backend
+  // impacts + constant emitter accordingly.
+  ClassEntity get constSetLiteralClass =>
+      _constSetLiteralClass ??= unmodifiableSetClass;
+
+  ClassEntity get jsInvocationMirrorClass =>
+      _jsInvocationMirrorClass ??= _findHelperClass('JSInvocationMirror');
+
+  ClassEntity get requiredSentinelClass =>
+      _requiredSentinelClass ??= _findHelperClass('_Required');
+
+  InterfaceType get requiredSentinelType => _getRawType(requiredSentinelClass);
+
+  MemberEntity get invocationTypeArgumentGetter =>
+      _invocationTypeArgumentGetter ??=
+          _findClassMember(jsInvocationMirrorClass, 'typeArguments');
+
+  /// Interface used to determine if an object has the JavaScript
+  /// indexing behavior. The interface is only visible to specific libraries.
+  ClassEntity get jsIndexingBehaviorInterface =>
+      _jsIndexingBehaviorInterface ??=
+          _findHelperClass('JavaScriptIndexingBehavior');
+
+  ClassEntity get stackTraceHelperClass => _findHelperClass('_StackTrace');
+
+  ClassEntity get constantMapClass =>
+      _findHelperClass(constant_system.JavaScriptMapConstant.DART_CLASS);
+
+  ClassEntity get constantStringMapClass =>
+      _findHelperClass(constant_system.JavaScriptMapConstant.DART_STRING_CLASS);
+
+  ClassEntity get generalConstantMapClass => _findHelperClass(
+      constant_system.JavaScriptMapConstant.DART_GENERAL_CLASS);
+
+  ClassEntity get annotationCreatesClass => _findHelperClass('Creates');
+
+  ClassEntity get annotationReturnsClass => _findHelperClass('Returns');
+
+  ClassEntity get annotationJSNameClass => _findHelperClass('JSName');
+
+  /// The class for native annotations defined in dart:_js_helper.
+  ClassEntity get nativeAnnotationClass =>
+      _nativeAnnotationClass ??= _findHelperClass('Native');
+
+  FunctionEntity get assertTest =>
+      _assertTest ??= _findHelperFunction('assertTest');
+
+  FunctionEntity get assertThrow =>
+      _assertThrow ??= _findHelperFunction('assertThrow');
+
+  FunctionEntity get assertHelper =>
+      _assertHelper ??= _findHelperFunction('assertHelper');
+
+  FunctionEntity get assertUnreachableMethod =>
+      _assertUnreachableMethod ??= _findHelperFunction('assertUnreachable');
+
+  /// Holds the method "getIsolateAffinityTag" when dart:_js_helper has been
+  /// loaded.
+  FunctionEntity get getIsolateAffinityTagMarker =>
+      _getIsolateAffinityTagMarker ??=
+          _findHelperFunction('getIsolateAffinityTag');
+
+  /// Holds the method "requiresPreamble" in _js_helper.
+  FunctionEntity get requiresPreambleMarker =>
+      _requiresPreambleMarker ??= _findHelperFunction('requiresPreamble');
+
+  /// Holds the method "_rawStartupMetrics" in _js_helper.
+  FunctionEntity get rawStartupMetrics =>
+      _rawStartupMetrics ??= _findHelperFunction('rawStartupMetrics');
+
+  FunctionEntity get loadDeferredLibrary =>
+      _findHelperFunction("loadDeferredLibrary");
+
+  FunctionEntity get boolConversionCheck =>
+      _findHelperFunction('boolConversionCheck');
+
+  FunctionEntity get traceHelper => _findHelperFunction('traceHelper');
+
+  FunctionEntity get closureFromTearOff =>
+      _findHelperFunction('closureFromTearOff');
+
+  FunctionEntity get isJsIndexable => _findHelperFunction('isJsIndexable');
+
+  FunctionEntity get throwIllegalArgumentException =>
+      _findHelperFunction('iae');
+
+  FunctionEntity get throwIndexOutOfRangeException =>
+      _findHelperFunction('ioore');
+
+  FunctionEntity get exceptionUnwrapper =>
+      _findHelperFunction('unwrapException');
+
+  FunctionEntity get throwUnsupportedError =>
+      _findHelperFunction('throwUnsupportedError');
+
+  FunctionEntity get throwTypeError => _findRtiFunction('throwTypeError');
+
+  /// Recognizes the `checkConcurrentModificationError` helper without needing
+  /// it to be resolved.
+  bool isCheckConcurrentModificationError(MemberEntity member) {
+    return member.name == 'checkConcurrentModificationError' &&
+        member.isFunction &&
+        member.isTopLevel &&
+        member.library == jsHelperLibrary;
+  }
+
+  FunctionEntity get checkConcurrentModificationError =>
+      _cachedCheckConcurrentModificationError ??=
+          _findHelperFunction('checkConcurrentModificationError');
+
+  FunctionEntity get throwConcurrentModificationError =>
+      _findHelperFunction('throwConcurrentModificationError');
+
+  FunctionEntity get stringInterpolationHelper => _findHelperFunction('S');
+
+  FunctionEntity get wrapExceptionHelper =>
+      _findHelperFunction('wrapException');
+
+  FunctionEntity get throwExpressionHelper =>
+      _findHelperFunction('throwExpression');
+
+  FunctionEntity get closureConverter =>
+      _findHelperFunction('convertDartClosureToJS');
+
+  FunctionEntity get traceFromException =>
+      _findHelperFunction('getTraceFromException');
+
+  FunctionEntity get checkDeferredIsLoaded =>
+      _findHelperFunction('checkDeferredIsLoaded');
+
+  FunctionEntity get throwNoSuchMethod =>
+      _findHelperFunction('throwNoSuchMethod');
+
+  FunctionEntity get createRuntimeType => _findRtiFunction('createRuntimeType');
+
+  FunctionEntity get fallThroughError =>
+      _findHelperFunction("getFallThroughError");
+
+  FunctionEntity get createInvocationMirror =>
+      _findHelperFunction('createInvocationMirror');
+
+  FunctionEntity get createUnmangledInvocationMirror =>
+      _findHelperFunction('createUnmangledInvocationMirror');
+
+  FunctionEntity get cyclicThrowHelper =>
+      _findHelperFunction("throwCyclicInit");
+
+  FunctionEntity get defineProperty => _findHelperFunction('defineProperty');
+
+  FunctionEntity get throwLateFieldADI =>
+      _findLateHelperFunction('throwLateFieldADI');
+
+  bool isExtractTypeArguments(FunctionEntity member) {
+    return member.name == 'extractTypeArguments' &&
+        member.library == internalLibrary;
+  }
+
+  // TODO(johnniwinther,sra): Support arbitrary type argument count.
+  void _checkTypeArgumentCount(int typeArgumentCount) {
+    assert(typeArgumentCount > 0);
+    if (typeArgumentCount > 20) {
+      failedAt(
+          NO_LOCATION_SPANNABLE,
+          "Unsupported instantiation argument count: "
+          "${typeArgumentCount}");
+    }
+  }
+
+  ClassEntity getInstantiationClass(int typeArgumentCount) {
+    _checkTypeArgumentCount(typeArgumentCount);
+    return _findHelperClass('Instantiation$typeArgumentCount');
+  }
+
+  FunctionEntity getInstantiateFunction(int typeArgumentCount) {
+    _checkTypeArgumentCount(typeArgumentCount);
+    return _findHelperFunction('instantiate$typeArgumentCount');
+  }
+
+  FunctionEntity get convertMainArgumentList =>
+      _findHelperFunction('convertMainArgumentList');
+
+  // From dart:_rti
+
+  ClassEntity _findRtiClass(String name) => _findClass(rtiLibrary, name);
+
+  FunctionEntity _findRtiFunction(String name) =>
+      _findLibraryMember(rtiLibrary, name);
+
+  FunctionEntity get setArrayType =>
+      _setArrayType ??= _findRtiFunction('_setArrayType');
+
+  FunctionEntity get findType => _findType ??= _findRtiFunction('findType');
+
+  FunctionEntity get instanceType =>
+      _instanceType ??= _findRtiFunction('instanceType');
+
+  FunctionEntity get arrayInstanceType =>
+      _arrayInstanceType ??= _findRtiFunction('_arrayInstanceType');
+
+  FunctionEntity get simpleInstanceType =>
+      _simpleInstanceType ??= _findRtiFunction('_instanceType');
+
+  FunctionEntity get typeLiteralMaker =>
+      _typeLiteralMaker ??= _findRtiFunction('typeLiteral');
+
+  FunctionEntity get checkTypeBound =>
+      _checkTypeBound ??= _findRtiFunction('checkTypeBound');
+
+  ClassEntity get _rtiImplClass => _findClass(rtiLibrary, 'Rti');
+
+  ClassEntity get _rtiUniverseClass => _findClass(rtiLibrary, '_Universe');
+
+  FieldEntity _findRtiClassField(String name) =>
+      _findClassMember(_rtiImplClass, name);
+
+  FieldEntity get rtiAsField => _rtiAsField ??= _findRtiClassField('_as');
+
+  FieldEntity get rtiIsField => _rtiIsField ??= _findRtiClassField('_is');
+
+  FieldEntity get rtiRestField => _rtiRestField ??= _findRtiClassField('_rest');
+
+  FieldEntity get rtiPrecomputed1Field =>
+      _rtiPrecomputed1Field ??= _findRtiClassField('_precomputed1');
+
+  FunctionEntity get rtiEvalMethod =>
+      _rtiEvalMethod ??= _findClassMember(_rtiImplClass, '_eval');
+
+  FunctionEntity get rtiBindMethod =>
+      _rtiBindMethod ??= _findClassMember(_rtiImplClass, '_bind');
+
+  FunctionEntity get rtiAddRulesMethod =>
+      _rtiAddRulesMethod ??= _findClassMember(_rtiUniverseClass, 'addRules');
+
+  FunctionEntity get rtiAddErasedTypesMethod => _rtiAddErasedTypesMethod ??=
+      _findClassMember(_rtiUniverseClass, 'addErasedTypes');
+
+  FunctionEntity get rtiAddTypeParameterVariancesMethod =>
+      _rtiAddTypeParameterVariancesMethod ??=
+          _findClassMember(_rtiUniverseClass, 'addTypeParameterVariances');
+
+  FunctionEntity get installSpecializedIsTest =>
+      _findRtiFunction('_installSpecializedIsTest');
+
+  FunctionEntity get installSpecializedAsCheck =>
+      _findRtiFunction('_installSpecializedAsCheck');
+
+  FunctionEntity get generalIsTestImplementation =>
+      _generalIsTestImplementation ??=
+          _findRtiFunction('_generalIsTestImplementation');
+
+  FunctionEntity get generalNullableIsTestImplementation =>
+      _generalNullableIsTestImplementation ??=
+          _findRtiFunction('_generalNullableIsTestImplementation');
+
+  FunctionEntity get generalAsCheckImplementation =>
+      _generalAsCheckImplementation ??=
+          _findRtiFunction('_generalAsCheckImplementation');
+
+  FunctionEntity get generalNullableAsCheckImplementation =>
+      _generalNullableAsCheckImplementation ??=
+          _findRtiFunction('_generalNullableAsCheckImplementation');
+
+  FunctionEntity get specializedIsObject =>
+      _specializedIsObject ??= _findRtiFunction('_isObject');
+
+  FunctionEntity get specializedAsObject =>
+      _specializedAsObject ??= _findRtiFunction('_asObject');
+
+  FunctionEntity get specializedIsTop => _findRtiFunction('_isTop');
+
+  FunctionEntity get specializedAsTop => _findRtiFunction('_asTop');
+
+  FunctionEntity get specializedIsBool => _findRtiFunction('_isBool');
+
+  FunctionEntity get specializedAsBool => _findRtiFunction('_asBool');
+
+  FunctionEntity get specializedAsBoolLegacy => _findRtiFunction('_asBoolS');
+
+  FunctionEntity get specializedAsBoolNullable => _findRtiFunction('_asBoolQ');
+
+  FunctionEntity get specializedAsDouble => _findRtiFunction('_asDouble');
+
+  FunctionEntity get specializedAsDoubleLegacy =>
+      _findRtiFunction('_asDoubleS');
+
+  FunctionEntity get specializedAsDoubleNullable =>
+      _findRtiFunction('_asDoubleQ');
+
+  FunctionEntity get specializedIsInt => _findRtiFunction('_isInt');
+
+  FunctionEntity get specializedAsInt => _findRtiFunction('_asInt');
+
+  FunctionEntity get specializedAsIntLegacy => _findRtiFunction('_asIntS');
+
+  FunctionEntity get specializedAsIntNullable => _findRtiFunction('_asIntQ');
+
+  FunctionEntity get specializedIsNum => _findRtiFunction('_isNum');
+
+  FunctionEntity get specializedAsNum => _findRtiFunction('_asNum');
+
+  FunctionEntity get specializedAsNumLegacy => _findRtiFunction('_asNumS');
+
+  FunctionEntity get specializedAsNumNullable => _findRtiFunction('_asNumQ');
+
+  FunctionEntity get specializedIsString => _findRtiFunction('_isString');
+
+  FunctionEntity get specializedAsString => _findRtiFunction('_asString');
+
+  FunctionEntity get specializedAsStringLegacy =>
+      _findRtiFunction('_asStringS');
+
+  FunctionEntity get specializedAsStringNullable =>
+      _findRtiFunction('_asStringQ');
+
+  FunctionEntity get instantiatedGenericFunctionTypeNewRti =>
+      _findRtiFunction('instantiatedGenericFunctionType');
+
+  FunctionEntity get closureFunctionType =>
+      _findRtiFunction('closureFunctionType');
+
+  // From dart:_internal
+
+  ClassEntity get symbolImplementationClass =>
+      _symbolImplementationClass ??= _findClass(internalLibrary, 'Symbol');
+
+  /// Used to annotate items that have the keyword "native".
+  ClassEntity get externalNameClass =>
+      _externalNameClass ??= _findClass(internalLibrary, 'ExternalName');
+
+  InterfaceType get externalNameType => _getRawType(externalNameClass);
+
+  // From dart:_js_embedded_names
+
+  ClassEntity get jsGetNameEnum => _jsGetNameEnum ??= _findClass(
+      _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
+      'JsGetName');
+
+  /// Returns `true` if [member] is a "foreign helper", that is, a member whose
+  /// semantics is defined synthetically and not through Dart code.
+  ///
+  /// Most foreign helpers are located in the `dart:_foreign_helper` library.
+  bool isForeignHelper(MemberEntity member) {
+    return member.library == foreignLibrary ||
+        isCreateInvocationMirrorHelper(member);
+  }
+
+  bool _isTopLevelFunctionNamed(String name, MemberEntity member) =>
+      member.name == name && member.isFunction && member.isTopLevel;
+
+  /// Returns `true` if [member] is the `createJsSentinel` function defined in
+  /// dart:_foreign_helper.
+  bool isCreateJsSentinel(MemberEntity member) =>
+      member.library == foreignLibrary &&
+      _isTopLevelFunctionNamed('createJsSentinel', member);
+
+  /// Returns `true` if [member] is the `isJsSentinel` function defined in
+  /// dart:_foreign_helper.
+  bool isIsJsSentinel(MemberEntity member) =>
+      member.library == foreignLibrary &&
+      _isTopLevelFunctionNamed('isJsSentinel', member);
+
+  /// Returns `true` if [member] is the `_lateReadCheck` function defined in
+  /// dart:_internal.
+  bool isLateReadCheck(MemberEntity member) =>
+      member.library == lateHelperLibrary &&
+      _isTopLevelFunctionNamed('_lateReadCheck', member);
+
+  /// Returns `true` if [member] is the `createSentinel` function defined in
+  /// dart:_internal.
+  bool isCreateSentinel(MemberEntity member) =>
+      member.library == internalLibrary &&
+      _isTopLevelFunctionNamed('createSentinel', member);
+
+  ClassEntity getDefaultSuperclass(
+      ClassEntity cls, NativeBasicData nativeBasicData) {
+    if (nativeBasicData.isJsInteropClass(cls)) {
+      return jsLegacyJavaScriptObjectClass;
+    }
+    // Native classes inherit from Interceptor.
+    return nativeBasicData.isNativeClass(cls)
+        ? jsInterceptorClass
+        : objectClass;
+  }
+
+  // From package:js
+  FunctionEntity get jsAllowInterop1 => _jsAllowInterop1 ??=
+      _findLibraryMember(dartJsLibrary, 'allowInterop', required: false);
+
+  // From dart:_js_annotations;
+  FunctionEntity get jsAllowInterop2 => _jsAllowInterop2 ??= _findLibraryMember(
+      dartJsAnnotationsLibrary, 'allowInterop',
+      required: false);
+
+  /// Returns `true` if [function] is `allowInterop`.
+  ///
+  /// This function can come from either `package:js` or `dart:_js_annotations`.
+  bool isJsAllowInterop(FunctionEntity function) {
+    return function == jsAllowInterop1 || function == jsAllowInterop2;
+  }
+
+  bool isCreateInvocationMirrorHelper(MemberEntity member) {
+    return member.isTopLevel &&
+        member.name == '_createInvocationMirror' &&
+        member.library == coreLibrary;
+  }
+}
+
+class KCommonElements extends CommonElements {
+  ClassEntity _jsAnnotationClass1;
+  ClassEntity _jsAnonymousClass1;
+  ClassEntity _jsAnnotationClass2;
+  ClassEntity _jsAnonymousClass2;
+  ClassEntity _pragmaClass;
+  FieldEntity _pragmaClassNameField;
+  FieldEntity _pragmaClassOptionsField;
+
+  KCommonElements(DartTypes dartTypes, ElementEnvironment env)
+      : super(dartTypes, env);
+
+  // From package:js
+
+  ClassEntity get jsAnnotationClass1 => _jsAnnotationClass1 ??=
+      _findClass(packageJsLibrary, 'JS', required: false);
+
+  ClassEntity get jsAnonymousClass1 => _jsAnonymousClass1 ??=
+      _findClass(packageJsLibrary, '_Anonymous', required: false);
+
+  // From dart:_js_annotations
+
+  ClassEntity get jsAnnotationClass2 => _jsAnnotationClass2 ??=
+      _findClass(dartJsAnnotationsLibrary, 'JS', required: false);
+
+  ClassEntity get jsAnonymousClass2 => _jsAnonymousClass2 ??=
+      _findClass(dartJsAnnotationsLibrary, '_Anonymous', required: false);
+
+  /// Returns `true` if [cls] is a @JS() annotation.
+  ///
+  /// The class can come from either `package:js` or `dart:_js_annotations`.
+  bool isJsAnnotationClass(ClassEntity cls) {
+    return cls == jsAnnotationClass1 || cls == jsAnnotationClass2;
+  }
+
+  /// Returns `true` if [cls] is an @anonymous annotation.
+  ///
+  /// The class can come from either `package:js` or `dart:_js_annotations`.
+  bool isJsAnonymousClass(ClassEntity cls) {
+    return cls == jsAnonymousClass1 || cls == jsAnonymousClass2;
+  }
+
+  ClassEntity get pragmaClass =>
+      _pragmaClass ??= _findClass(coreLibrary, 'pragma');
+
+  FieldEntity get pragmaClassNameField =>
+      _pragmaClassNameField ??= _findClassMember(pragmaClass, 'name');
+
+  FieldEntity get pragmaClassOptionsField =>
+      _pragmaClassOptionsField ??= _findClassMember(pragmaClass, 'options');
+}
+
+class JCommonElements extends CommonElements {
+  FunctionEntity _jsArrayRemoveLast;
+  FunctionEntity _jsArrayAdd;
+  FunctionEntity _jsStringSplit;
+  FunctionEntity _jsStringToString;
+  FunctionEntity _jsStringOperatorAdd;
+  ClassEntity _jsConstClass;
+  ClassEntity _typedArrayOfIntClass;
+  ClassEntity _typedArrayOfDoubleClass;
+  ClassEntity _jsBuiltinEnum;
+
+  JCommonElements(DartTypes dartTypes, ElementEnvironment env)
+      : super(dartTypes, env);
+
+  /// Returns `true` if [element] is the unnamed constructor of `List`.
+  ///
+  /// This will not resolve the constructor if it hasn't been seen yet during
+  /// compilation.
+  bool isUnnamedListConstructor(ConstructorEntity element) =>
+      (element.name == '' && element.enclosingClass == listClass) ||
+      (element.name == 'list' && element.enclosingClass == jsArrayClass);
+
+  /// Returns `true` if [element] is the named constructor of `List`,
+  /// e.g. `List.of`.
+  ///
+  /// This will not resolve the constructor if it hasn't been seen yet during
+  /// compilation.
+  bool isNamedListConstructor(String name, ConstructorEntity element) =>
+      element.name == name && element.enclosingClass == listClass;
+
+  /// Returns `true` if [element] is the named constructor of `JSArray`,
+  /// e.g. `JSArray.fixed`.
+  ///
+  /// This will not resolve the constructor if it hasn't been seen yet during
+  /// compilation.
+  bool isNamedJSArrayConstructor(String name, ConstructorEntity element) =>
+      element.name == name && element.enclosingClass == jsArrayClass;
+
+  bool isDefaultEqualityImplementation(MemberEntity element) {
+    assert(element.name == '==');
+    ClassEntity classElement = element.enclosingClass;
+    return classElement == objectClass ||
+        classElement == jsInterceptorClass ||
+        classElement == jsNullClass;
+  }
+
+  /// Returns `true` if [selector] applies to `JSIndexable.length`.
+  bool appliesToJsIndexableLength(Selector selector) {
+    return selector.name == 'length' && (selector.isGetter || selector.isCall);
+  }
+
+  FunctionEntity get jsArrayRemoveLast =>
+      _jsArrayRemoveLast ??= _findClassMember(jsArrayClass, 'removeLast');
+
+  FunctionEntity get jsArrayAdd =>
+      _jsArrayAdd ??= _findClassMember(jsArrayClass, 'add');
+
+  bool _isJsStringClass(ClassEntity cls) {
+    return cls.name == 'JSString' && cls.library == interceptorsLibrary;
+  }
+
+  bool isJsStringSplit(MemberEntity member) {
+    return member.name == 'split' &&
+        member.isInstanceMember &&
+        _isJsStringClass(member.enclosingClass);
+  }
+
+  /// Returns `true` if [selector] applies to `JSString.split` on [receiver]
+  /// in the given [world].
+  ///
+  /// Returns `false` if `JSString.split` is not available.
+  bool appliesToJsStringSplit(Selector selector, AbstractValue receiver,
+      AbstractValueDomain abstractValueDomain) {
+    if (_jsStringSplit == null) {
+      ClassEntity cls =
+          _findClass(interceptorsLibrary, 'JSString', required: false);
+      if (cls == null) return false;
+      _jsStringSplit = _findClassMember(cls, 'split', required: false);
+      if (_jsStringSplit == null) return false;
+    }
+    return selector.applies(_jsStringSplit) &&
+        (receiver == null ||
+            abstractValueDomain
+                .isTargetingMember(receiver, jsStringSplit, selector.memberName)
+                .isPotentiallyTrue);
+  }
+
+  FunctionEntity get jsStringSplit =>
+      _jsStringSplit ??= _findClassMember(jsStringClass, 'split');
+
+  FunctionEntity get jsStringToString =>
+      _jsStringToString ??= _findClassMember(jsStringClass, 'toString');
+
+  FunctionEntity get jsStringOperatorAdd =>
+      _jsStringOperatorAdd ??= _findClassMember(jsStringClass, '+');
+
+  ClassEntity get jsConstClass =>
+      _jsConstClass ??= _findClass(foreignLibrary, 'JS_CONST');
+
+  /// Return `true` if [member] is the 'checkInt' function defined in
+  /// dart:_js_helpers.
+  bool isCheckInt(MemberEntity member) {
+    return member.isFunction &&
+        member.isTopLevel &&
+        member.library == jsHelperLibrary &&
+        member.name == 'checkInt';
+  }
+
+  /// Return `true` if [member] is the 'checkNum' function defined in
+  /// dart:_js_helpers.
+  bool isCheckNum(MemberEntity member) {
+    return member.isFunction &&
+        member.isTopLevel &&
+        member.library == jsHelperLibrary &&
+        member.name == 'checkNum';
+  }
+
+  /// Return `true` if [member] is the 'checkString' function defined in
+  /// dart:_js_helpers.
+  bool isCheckString(MemberEntity member) {
+    return member.isFunction &&
+        member.isTopLevel &&
+        member.library == jsHelperLibrary &&
+        member.name == 'checkString';
+  }
+
+  bool isInstantiationClass(ClassEntity cls) {
+    return cls.library == _jsHelperLibrary &&
+        cls.name != 'Instantiation' &&
+        cls.name.startsWith('Instantiation');
+  }
+
+  // From dart:_native_typed_data
+
+  ClassEntity get typedArrayOfIntClass => _typedArrayOfIntClass ??= _findClass(
+      _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
+      'NativeTypedArrayOfInt');
+
+  ClassEntity get typedArrayOfDoubleClass =>
+      _typedArrayOfDoubleClass ??= _findClass(
+          _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
+          'NativeTypedArrayOfDouble');
+
+  ClassEntity get jsBuiltinEnum => _jsBuiltinEnum ??= _findClass(
+      _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
+      'JsBuiltin');
+
+  bool isForeign(MemberEntity element) => element.library == foreignLibrary;
+
+  /// Returns `true` if the implementation of the 'operator ==' [function] is
+  /// known to handle `null` as argument.
+  bool operatorEqHandlesNullArgument(FunctionEntity function) {
+    assert(function.name == '==',
+        failedAt(function, "Unexpected function $function."));
+    ClassEntity cls = function.enclosingClass;
+    return cls == objectClass ||
+        cls == jsInterceptorClass ||
+        cls == jsNullClass;
+  }
+}
+
+/// Interface for accessing libraries, classes and members.
+///
+/// The element environment makes private and injected members directly
+/// available and should therefore not be used to determine scopes.
+///
+/// The properties exposed are Dart-centric and should therefore, long-term, not
+/// be used during codegen, expect for mirrors.
+// TODO(johnniwinther): Split this into an element environment and a type query
+// interface, the first should only be used during resolution and the latter in
+// both resolution and codegen.
+abstract class ElementEnvironment {
+  /// Returns the main library for the compilation.
+  LibraryEntity get mainLibrary;
+
+  /// Returns the main method for the compilation.
+  FunctionEntity get mainFunction;
+
+  /// Returns all known libraries.
+  Iterable<LibraryEntity> get libraries;
+
+  /// Returns the library name of [library] or '' if the library is unnamed.
+  String getLibraryName(LibraryEntity library);
+
+  /// Lookup the library with the canonical [uri], fail if the library is
+  /// missing and [required];
+  LibraryEntity lookupLibrary(Uri uri, {bool required = false});
+
+  /// Calls [f] for every class declared in [library].
+  void forEachClass(LibraryEntity library, void f(ClassEntity cls));
+
+  /// Lookup the class [name] in [library], fail if the class is missing and
+  /// [required].
+  ClassEntity lookupClass(LibraryEntity library, String name,
+      {bool required = false});
+
+  /// Calls [f] for every top level member in [library].
+  void forEachLibraryMember(LibraryEntity library, void f(MemberEntity member));
+
+  /// Lookup the member [name] in [library], fail if the class is missing and
+  /// [required].
+  MemberEntity lookupLibraryMember(LibraryEntity library, String name,
+      {bool setter = false, bool required = false});
+
+  /// Lookup the member [name] in [cls], fail if the class is missing and
+  /// [required].
+  MemberEntity lookupLocalClassMember(ClassEntity cls, String name,
+      {bool setter = false, bool required = false});
+
+  /// Lookup the member [name] in [cls] and its superclasses.
+  ///
+  /// Return `null` if the member is not found in the class or any superclass.
+  MemberEntity lookupClassMember(ClassEntity cls, String name,
+      {bool setter = false}) {
+    while (true) {
+      final entity = lookupLocalClassMember(cls, name, setter: setter);
+      if (entity != null) return entity;
+
+      cls = getSuperClass(cls);
+      if (cls == null) return null;
+    }
+  }
+
+  /// Lookup the constructor [name] in [cls], fail if the class is missing and
+  /// [required].
+  ConstructorEntity lookupConstructor(ClassEntity cls, String name,
+      {bool required = false});
+
+  /// Calls [f] for each class member declared in [cls].
+  void forEachLocalClassMember(ClassEntity cls, void f(MemberEntity member));
+
+  /// Calls [f] for each class member declared or inherited in [cls] together
+  /// with the class that declared the member.
+  ///
+  /// TODO(johnniwinther): This should not include static members of
+  /// superclasses.
+  void forEachClassMember(
+      ClassEntity cls, void f(ClassEntity declarer, MemberEntity member));
+
+  /// Calls [f] for every constructor declared in [cls].
+  ///
+  /// Will ensure that the class and all constructors are resolved if
+  /// [ensureResolved] is `true`.
+  void forEachConstructor(
+      ClassEntity cls, void f(ConstructorEntity constructor));
+
+  /// Returns the superclass of [cls].
+  ///
+  /// If [skipUnnamedMixinApplications] is `true`, unnamed mixin applications
+  /// are excluded, for instance for these classes
+  ///
+  ///     class S {}
+  ///     class M {}
+  ///     class C extends S with M {}
+  ///
+  /// the result of `getSuperClass(C)` is the unnamed mixin application
+  /// typically named `S+M` and `getSuperClass(S+M)` is `S`, whereas
+  /// the result of `getSuperClass(C, skipUnnamedMixinApplications: false)` is
+  /// `S`.
+  ClassEntity getSuperClass(ClassEntity cls,
+      {bool skipUnnamedMixinApplications = false});
+
+  /// Calls [f] for each supertype of [cls].
+  void forEachSupertype(ClassEntity cls, void f(InterfaceType supertype));
+
+  /// Calls [f] for each SuperClass of [cls].
+  void forEachSuperClass(ClassEntity cls, void f(ClassEntity superClass)) {
+    for (var superClass = getSuperClass(cls);
+        superClass != null;
+        superClass = getSuperClass(superClass)) {
+      f(superClass);
+    }
+  }
+
+  /// Create the instantiation of [cls] with the given [typeArguments] and
+  /// [nullability].
+  InterfaceType createInterfaceType(
+      ClassEntity cls, List<DartType> typeArguments);
+
+  /// Returns the `dynamic` type.
+  DartType get dynamicType;
+
+  /// Returns the 'raw type' of [cls]. That is, the instantiation of [cls]
+  /// where all types arguments are `dynamic`.
+  InterfaceType getRawType(ClassEntity cls);
+
+  /// Returns the 'JS-interop type' of [cls]; that is, the instantiation of
+  /// [cls] where all type arguments are 'any'.
+  InterfaceType getJsInteropType(ClassEntity cls);
+
+  /// Returns the 'this type' of [cls]. That is, the instantiation of [cls]
+  /// where the type arguments are the type variables of [cls].
+  InterfaceType getThisType(ClassEntity cls);
+
+  /// Returns the instantiation of [cls] to bounds.
+  InterfaceType getClassInstantiationToBounds(ClassEntity cls);
+
+  /// Returns `true` if [cls] is generic.
+  bool isGenericClass(ClassEntity cls);
+
+  /// Returns `true` if [cls] is a mixin application (named or unnamed).
+  bool isMixinApplication(ClassEntity cls);
+
+  /// Returns `true` if [cls] is an unnamed mixin application.
+  bool isUnnamedMixinApplication(ClassEntity cls);
+
+  /// The upper bound on the [typeVariable]. If not explicitly declared, this is
+  /// `Object`.
+  DartType getTypeVariableBound(TypeVariableEntity typeVariable);
+
+  /// Returns the variances for each type parameter in [cls].
+  List<Variance> getTypeVariableVariances(ClassEntity cls);
+
+  /// Returns the type of [function].
+  FunctionType getFunctionType(FunctionEntity function);
+
+  /// Returns the function type variables defined on [function].
+  List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function);
+
+  /// Returns the type of the [local] function.
+  FunctionType getLocalFunctionType(Local local);
+
+  /// Returns the type of [field].
+  DartType getFieldType(FieldEntity field);
+
+  /// Returns `true` if [cls] is a Dart enum class.
+  bool isEnumClass(ClassEntity cls);
+
+  /// Returns the 'effective' mixin class if [cls] is a mixin application, and
+  /// `null` otherwise.
+  ///
+  /// The 'effective' mixin class is the class from which members are mixed in.
+  /// Normally this is the mixin class itself, but not if the mixin class itself
+  /// is a mixin application.
+  ///
+  /// Consider this hierarchy:
+  ///
+  ///     class A {}
+  ///     class B = Object with A {}
+  ///     class C = Object with B {}
+  ///
+  /// The mixin classes of `B` and `C` are `A` and `B`, respectively, but the
+  /// _effective_ mixin class of both is `A`.
+  ClassEntity getEffectiveMixinClass(ClassEntity cls);
+}
+
+abstract class KElementEnvironment extends ElementEnvironment {
+  /// Calls [f] for each class that is mixed into [cls] or one of its
+  /// superclasses.
+  void forEachMixin(ClassEntity cls, void f(ClassEntity mixin));
+
+  /// Returns the imports seen in [library]
+  Iterable<ImportEntity> getImports(LibraryEntity library);
+
+  /// Returns the metadata constants declared on [member].
+  Iterable<ConstantValue> getMemberMetadata(MemberEntity member,
+      {bool includeParameterMetadata = false});
+}
+
+abstract class JElementEnvironment extends ElementEnvironment {
+  /// Calls [f] for each class member added to [cls] during compilation.
+  void forEachInjectedClassMember(ClassEntity cls, void f(MemberEntity member));
+
+  /// Calls [f] for every constructor body in [cls].
+  void forEachConstructorBody(
+      ClassEntity cls, void f(ConstructorBodyEntity constructorBody));
+
+  /// Calls [f] for each nested closure in [member].
+  void forEachNestedClosure(
+      MemberEntity member, void f(FunctionEntity closure));
+
+  /// Returns `true` if [cls] is a mixin application with its own members.
+  ///
+  /// This occurs when a mixin contains methods with super calls or when
+  /// the mixin application contains concrete forwarding stubs.
+  bool isMixinApplicationWithMembers(ClassEntity cls);
+
+  /// The default type of the [typeVariable].
+  ///
+  /// This is the type used as the default type argument when no explicit type
+  /// argument is passed.
+  DartType getTypeVariableDefaultType(TypeVariableEntity typeVariable);
+
+  /// Returns the 'element' type of a function with the async, async* or sync*
+  /// marker [marker]. [returnType] is the return type marked function.
+  DartType getAsyncOrSyncStarElementType(
+      AsyncMarker marker, DartType returnType);
+
+  /// Returns the 'element' type of a function with an async, async* or sync*
+  /// marker. The return type of the method is inspected to determine the type
+  /// parameter of the Future, Stream or Iterable.
+  DartType getFunctionAsyncOrSyncStarElementType(FunctionEntity function);
+
+  /// Calls [f] with every instance field, together with its declarer, in an
+  /// instance of [cls]. All fields inherited from superclasses and mixins are
+  /// included.
+  ///
+  /// If [isElided] is `true`, the field is not read and should therefore not
+  /// be emitted.
+  void forEachInstanceField(
+      ClassEntity cls, void f(ClassEntity declarer, FieldEntity field));
+
+  /// Calls [f] with every instance field declared directly in class [cls]
+  /// (i.e. no inherited fields). Fields are presented in initialization
+  /// (i.e. textual) order.
+  ///
+  /// If [isElided] is `true`, the field is not read and should therefore not
+  /// be emitted.
+  void forEachDirectInstanceField(ClassEntity cls, void f(FieldEntity field));
+
+  /// Calls [f] for each parameter of [function] providing the type and name of
+  /// the parameter and the [defaultValue] if the parameter is optional.
+  void forEachParameter(covariant FunctionEntity function,
+      void f(DartType type, String name, ConstantValue defaultValue));
+
+  /// Calls [f] for each parameter - given as a [Local] - of [function].
+  void forEachParameterAsLocal(GlobalLocalsMap globalLocalsMap,
+      FunctionEntity function, void f(Local parameter));
+}
diff --git a/pkg/compiler/lib/src/common/resolution.dart b/pkg/compiler/lib/src/common/resolution.dart
index 37c495b..0156152 100644
--- a/pkg/compiler/lib/src/common/resolution.dart
+++ b/pkg/compiler/lib/src/common/resolution.dart
@@ -6,6 +6,7 @@
 
 import '../constants/values.dart' show ConstantValue;
 import '../elements/entities.dart';
+import '../native/behavior.dart' show NativeBehavior;
 import '../universe/world_impact.dart' show WorldImpact;
 import '../universe/feature.dart';
 
@@ -20,8 +21,7 @@
   Iterable<ConstantValue> get constantLiterals => const <ConstantValue>[];
   Iterable<ClassEntity> get seenClasses => const <ClassEntity>[];
   Iterable<RuntimeTypeUse> get runtimeTypeUses => const <RuntimeTypeUse>[];
-
-  Iterable<dynamic> get nativeData => const <dynamic>[];
+  Iterable<NativeBehavior> get nativeData => const <NativeBehavior>[];
 
   Iterable<GenericInstantiation> get genericInstantiations =>
       const <GenericInstantiation>[];
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
deleted file mode 100644
index cead301..0000000
--- a/pkg/compiler/lib/src/common_elements.dart
+++ /dev/null
@@ -1,2453 +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.
-
-// TODO(sigmund): rename and move to common/elements.dart
-library dart2js.type_system;
-
-import 'common.dart';
-import 'common/names.dart' show Identifiers, Uris;
-import 'constants/constant_system.dart' as constant_system;
-import 'constants/values.dart';
-import 'elements/entities.dart';
-import 'elements/types.dart';
-import 'inferrer/abstract_value_domain.dart';
-import 'js_backend/native_data.dart' show NativeBasicData;
-import 'js_model/locals.dart';
-import 'universe/selector.dart' show Selector;
-
-/// The common elements and types in Dart.
-abstract class CommonElements {
-  DartTypes get dartTypes;
-
-  /// The `Object` class defined in 'dart:core'.
-  ClassEntity get objectClass;
-
-  /// The `bool` class defined in 'dart:core'.
-  ClassEntity get boolClass;
-
-  /// The `num` class defined in 'dart:core'.
-  ClassEntity get numClass;
-
-  /// The `int` class defined in 'dart:core'.
-  ClassEntity get intClass;
-
-  /// The `double` class defined in 'dart:core'.
-  ClassEntity get doubleClass;
-
-  /// The `String` class defined in 'dart:core'.
-  ClassEntity get stringClass;
-
-  /// The `Function` class defined in 'dart:core'.
-  ClassEntity get functionClass;
-
-  /// The `Resource` class defined in 'dart:core'.
-  ClassEntity get resourceClass;
-
-  /// The `Symbol` class defined in 'dart:core'.
-  ClassEntity get symbolClass;
-
-  /// The `Null` class defined in 'dart:core'.
-  ClassEntity get nullClass;
-
-  /// The `Type` class defined in 'dart:core'.
-  ClassEntity get typeClass;
-
-  /// The `StackTrace` class defined in 'dart:core';
-  ClassEntity get stackTraceClass;
-
-  /// The `List` class defined in 'dart:core';
-  ClassEntity get listClass;
-
-  /// The `Set` class defined in 'dart:core';
-  ClassEntity get setClass;
-
-  /// The `Map` class defined in 'dart:core';
-  ClassEntity get mapClass;
-
-  /// The `Set` class defined in 'dart:core';
-  ClassEntity get unmodifiableSetClass;
-
-  /// The `Iterable` class defined in 'dart:core';
-  ClassEntity get iterableClass;
-
-  /// The `Future` class defined in 'async';.
-  ClassEntity get futureClass;
-
-  /// The `Stream` class defined in 'async';
-  ClassEntity get streamClass;
-
-  /// The dart:core library.
-  LibraryEntity get coreLibrary;
-
-  /// The dart:async library.
-  LibraryEntity get asyncLibrary;
-
-  /// The dart:mirrors library.
-  LibraryEntity get mirrorsLibrary;
-
-  /// The dart:typed_data library.
-  LibraryEntity get typedDataLibrary;
-
-  /// The dart:_js_helper library.
-  LibraryEntity get jsHelperLibrary;
-
-  /// The dart:_late_helper library
-  LibraryEntity get lateHelperLibrary;
-
-  /// The dart:_interceptors library.
-  LibraryEntity get interceptorsLibrary;
-
-  /// The dart:_foreign_helper library.
-  LibraryEntity get foreignLibrary;
-
-  /// The dart:_internal library.
-  LibraryEntity get rtiLibrary;
-
-  /// The dart:_internal library.
-  LibraryEntity get internalLibrary;
-
-  /// The dart:js library.
-  LibraryEntity get dartJsLibrary;
-
-  /// The package:js library.
-  LibraryEntity get packageJsLibrary;
-
-  /// The dart:_js_annotations library.
-  LibraryEntity get dartJsAnnotationsLibrary;
-
-  /// The `NativeTypedData` class from dart:typed_data.
-  ClassEntity get typedDataClass;
-
-  /// Constructor of the `Symbol` class in dart:internal.
-  ///
-  /// This getter will ensure that `Symbol` is resolved and lookup the
-  /// constructor on demand.
-  ConstructorEntity get symbolConstructorTarget;
-
-  /// Whether [element] is the same as [symbolConstructor].
-  ///
-  /// Used to check for the constructor without computing it until it is likely
-  /// to be seen.
-  bool isSymbolConstructor(ConstructorEntity element);
-
-  /// The function `identical` in dart:core.
-  FunctionEntity get identicalFunction;
-
-  /// Whether [element] is the `Function.apply` method.
-  ///
-  /// This will not resolve the apply method if it hasn't been seen yet during
-  /// compilation.
-  bool isFunctionApplyMethod(MemberEntity element);
-
-  /// The `dynamic` type.
-  DynamicType get dynamicType;
-
-  /// The `Object` type defined in 'dart:core'.
-  InterfaceType get objectType;
-
-  /// The `bool` type defined in 'dart:core'.
-  InterfaceType get boolType;
-
-  /// The `num` type defined in 'dart:core'.
-  InterfaceType get numType;
-
-  /// The `int` type defined in 'dart:core'.
-  InterfaceType get intType;
-
-  /// The `double` type defined in 'dart:core'.
-  InterfaceType get doubleType;
-
-  /// The `String` type defined in 'dart:core'.
-  InterfaceType get stringType;
-
-  /// The `Symbol` type defined in 'dart:core'.
-  InterfaceType get symbolType;
-
-  /// The `Function` type defined in 'dart:core'.
-  InterfaceType get functionType;
-
-  /// The `Null` type defined in 'dart:core'.
-  InterfaceType get nullType;
-
-  /// The `Type` type defined in 'dart:core'.
-  InterfaceType get typeType;
-
-  InterfaceType get typeLiteralType;
-
-  /// The `StackTrace` type defined in 'dart:core';
-  InterfaceType get stackTraceType;
-
-  /// Returns an instance of the `List` type defined in 'dart:core' with
-  /// [elementType] as its type argument.
-  ///
-  /// If no type argument is provided, the canonical raw type is returned.
-  InterfaceType listType([DartType elementType]);
-
-  /// Returns an instance of the `Set` type defined in 'dart:core' with
-  /// [elementType] as its type argument.
-  ///
-  /// If no type argument is provided, the canonical raw type is returned.
-  InterfaceType setType([DartType elementType]);
-
-  /// Returns an instance of the `Map` type defined in 'dart:core' with
-  /// [keyType] and [valueType] as its type arguments.
-  ///
-  /// If no type arguments are provided, the canonical raw type is returned.
-  InterfaceType mapType([DartType keyType, DartType valueType]);
-
-  /// Returns an instance of the `Iterable` type defined in 'dart:core' with
-  /// [elementType] as its type argument.
-  ///
-  /// If no type argument is provided, the canonical raw type is returned.
-  InterfaceType iterableType([DartType elementType]);
-
-  /// Returns an instance of the `Future` type defined in 'dart:async' with
-  /// [elementType] as its type argument.
-  ///
-  /// If no type argument is provided, the canonical raw type is returned.
-  InterfaceType futureType([DartType elementType]);
-
-  /// Returns an instance of the `Stream` type defined in 'dart:async' with
-  /// [elementType] as its type argument.
-  ///
-  /// If no type argument is provided, the canonical raw type is returned.
-  InterfaceType streamType([DartType elementType]);
-
-  InterfaceType getConstantListTypeFor(InterfaceType sourceType);
-
-  InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
-      {bool onlyStringKeys = false});
-
-  InterfaceType getConstantSetTypeFor(InterfaceType sourceType);
-
-  FieldEntity get symbolField;
-
-  InterfaceType get symbolImplementationType;
-
-  // From dart:core
-  ClassEntity get mapLiteralClass;
-  ConstructorEntity get mapLiteralConstructor;
-  ConstructorEntity get mapLiteralConstructorEmpty;
-  FunctionEntity get mapLiteralUntypedMaker;
-  FunctionEntity get mapLiteralUntypedEmptyMaker;
-
-  ClassEntity get setLiteralClass;
-  ConstructorEntity get setLiteralConstructor;
-  ConstructorEntity get setLiteralConstructorEmpty;
-  FunctionEntity get setLiteralUntypedMaker;
-  FunctionEntity get setLiteralUntypedEmptyMaker;
-
-  FunctionEntity get objectNoSuchMethod;
-
-  bool isDefaultNoSuchMethodImplementation(FunctionEntity element);
-
-  // From dart:async
-  FunctionEntity get asyncHelperStartSync;
-  FunctionEntity get asyncHelperAwait;
-  FunctionEntity get asyncHelperReturn;
-  FunctionEntity get asyncHelperRethrow;
-
-  FunctionEntity get wrapBody;
-
-  FunctionEntity get yieldStar;
-
-  FunctionEntity get yieldSingle;
-
-  FunctionEntity get syncStarUncaughtError;
-
-  FunctionEntity get asyncStarHelper;
-
-  FunctionEntity get streamOfController;
-
-  FunctionEntity get endOfIteration;
-
-  ClassEntity get syncStarIterable;
-
-  ClassEntity get futureImplementation;
-
-  ClassEntity get controllerStream;
-
-  ClassEntity get streamIterator;
-
-  ConstructorEntity get streamIteratorConstructor;
-
-  FunctionEntity get syncStarIterableFactory;
-
-  FunctionEntity get asyncAwaitCompleterFactory;
-
-  FunctionEntity get asyncStarStreamControllerFactory;
-
-  ClassEntity get jsInterceptorClass;
-
-  ClassEntity get jsStringClass;
-
-  ClassEntity get jsArrayClass;
-
-  ClassEntity get jsNumberClass;
-
-  ClassEntity get jsIntClass;
-
-  ClassEntity get jsNumNotIntClass;
-
-  ClassEntity get jsNullClass;
-
-  ClassEntity get jsBoolClass;
-
-  ClassEntity get jsPlainJavaScriptObjectClass;
-
-  ClassEntity get jsUnknownJavaScriptObjectClass;
-
-  ClassEntity get jsJavaScriptFunctionClass;
-
-  InterfaceType get jsJavaScriptFunctionType;
-
-  ClassEntity get jsLegacyJavaScriptObjectClass;
-
-  ClassEntity get jsJavaScriptObjectClass;
-
-  ClassEntity get jsIndexableClass;
-
-  ClassEntity get jsMutableIndexableClass;
-
-  ClassEntity get jsMutableArrayClass;
-
-  ClassEntity get jsFixedArrayClass;
-
-  ClassEntity get jsExtendableArrayClass;
-
-  ClassEntity get jsUnmodifiableArrayClass;
-
-  ClassEntity get jsPositiveIntClass;
-
-  ClassEntity get jsUInt32Class;
-
-  ClassEntity get jsUInt31Class;
-
-  /// Returns `true` member is the 'findIndexForNativeSubclassType' method
-  /// declared in `dart:_interceptors`.
-  bool isFindIndexForNativeSubclassType(MemberEntity member);
-
-  FunctionEntity get getNativeInterceptorMethod;
-
-  ConstructorEntity get jsArrayTypedConstructor;
-
-  // From dart:_js_helper
-  // TODO(johnniwinther): Avoid the need for this (from [CheckedModeHelper]).
-  FunctionEntity findHelperFunction(String name);
-
-  ClassEntity get closureClass;
-  ClassEntity get closureClass0Args;
-  ClassEntity get closureClass2Args;
-
-  ClassEntity get boundClosureClass;
-
-  ClassEntity get typeLiteralClass;
-
-  ClassEntity get constMapLiteralClass;
-
-  ClassEntity get constSetLiteralClass;
-
-  ClassEntity get jsInvocationMirrorClass;
-
-  ClassEntity get requiredSentinelClass;
-
-  InterfaceType get requiredSentinelType;
-
-  MemberEntity get invocationTypeArgumentGetter;
-
-  /// Interface used to determine if an object has the JavaScript
-  /// indexing behavior. The interface is only visible to specific libraries.
-  ClassEntity get jsIndexingBehaviorInterface;
-
-  ClassEntity get stackTraceHelperClass;
-
-  ClassEntity get constantMapClass;
-  ClassEntity get constantStringMapClass;
-  ClassEntity get generalConstantMapClass;
-
-  ClassEntity get annotationCreatesClass;
-
-  ClassEntity get annotationReturnsClass;
-
-  ClassEntity get annotationJSNameClass;
-
-  /// The class for native annotations defined in dart:_js_helper.
-  ClassEntity get nativeAnnotationClass;
-
-  FunctionEntity get assertTest;
-
-  FunctionEntity get assertThrow;
-
-  FunctionEntity get assertHelper;
-
-  FunctionEntity get assertUnreachableMethod;
-
-  /// Holds the method "getIsolateAffinityTag" when dart:_js_helper has been
-  /// loaded.
-  FunctionEntity get getIsolateAffinityTagMarker;
-
-  /// Holds the method "requiresPreamble" in _js_helper.
-  FunctionEntity get requiresPreambleMarker;
-
-  /// Holds the method "_rawStartupMetrics" in _js_helper.
-  FunctionEntity get rawStartupMetrics;
-
-  FunctionEntity get loadLibraryWrapper;
-
-  FunctionEntity get loadDeferredLibrary;
-
-  FunctionEntity get boolConversionCheck;
-
-  FunctionEntity get traceHelper;
-
-  FunctionEntity get closureFromTearOff;
-
-  FunctionEntity get isJsIndexable;
-
-  FunctionEntity get throwIllegalArgumentException;
-
-  FunctionEntity get throwIndexOutOfRangeException;
-
-  FunctionEntity get exceptionUnwrapper;
-
-  FunctionEntity get throwUnsupportedError;
-
-  FunctionEntity get throwTypeError;
-
-  /// Recognizes the `checkConcurrentModificationError` helper without needing
-  /// it to be resolved.
-  bool isCheckConcurrentModificationError(MemberEntity member);
-
-  FunctionEntity get checkConcurrentModificationError;
-
-  FunctionEntity get throwConcurrentModificationError;
-
-  FunctionEntity get stringInterpolationHelper;
-
-  FunctionEntity get wrapExceptionHelper;
-
-  FunctionEntity get throwExpressionHelper;
-
-  FunctionEntity get closureConverter;
-
-  FunctionEntity get traceFromException;
-
-  FunctionEntity get checkDeferredIsLoaded;
-
-  FunctionEntity get throwNoSuchMethod;
-
-  FunctionEntity get createRuntimeType;
-
-  FunctionEntity get fallThroughError;
-
-  FunctionEntity get createInvocationMirror;
-
-  FunctionEntity get createUnmangledInvocationMirror;
-
-  FunctionEntity get cyclicThrowHelper;
-
-  FunctionEntity get defineProperty;
-
-  FunctionEntity get throwLateFieldADI;
-
-  bool isExtractTypeArguments(FunctionEntity member);
-
-  ClassEntity getInstantiationClass(int typeArgumentCount);
-
-  FunctionEntity getInstantiateFunction(int typeArgumentCount);
-
-  FunctionEntity get convertMainArgumentList;
-
-  // From dart:_rti
-
-  FunctionEntity get setArrayType;
-
-  FunctionEntity get findType;
-  FunctionEntity get instanceType;
-  FunctionEntity get arrayInstanceType;
-  FunctionEntity get simpleInstanceType;
-  FunctionEntity get typeLiteralMaker;
-  FunctionEntity get checkTypeBound;
-  FieldEntity get rtiAsField;
-  FieldEntity get rtiIsField;
-  FieldEntity get rtiRestField;
-  FieldEntity get rtiPrecomputed1Field;
-  FunctionEntity get rtiEvalMethod;
-  FunctionEntity get rtiBindMethod;
-  FunctionEntity get rtiAddRulesMethod;
-  FunctionEntity get rtiAddErasedTypesMethod;
-  FunctionEntity get rtiAddTypeParameterVariancesMethod;
-
-  FunctionEntity get installSpecializedIsTest;
-  FunctionEntity get installSpecializedAsCheck;
-  FunctionEntity get generalIsTestImplementation;
-  FunctionEntity get generalAsCheckImplementation;
-  FunctionEntity get generalNullableIsTestImplementation;
-  FunctionEntity get generalNullableAsCheckImplementation;
-
-  FunctionEntity get specializedIsObject;
-  FunctionEntity get specializedAsObject;
-  FunctionEntity get specializedIsTop;
-  FunctionEntity get specializedAsTop;
-  FunctionEntity get specializedIsBool;
-  FunctionEntity get specializedAsBool;
-  FunctionEntity get specializedAsBoolLegacy;
-  FunctionEntity get specializedAsBoolNullable;
-  FunctionEntity get specializedAsDouble;
-  FunctionEntity get specializedAsDoubleLegacy;
-  FunctionEntity get specializedAsDoubleNullable;
-  FunctionEntity get specializedIsInt;
-  FunctionEntity get specializedAsInt;
-  FunctionEntity get specializedAsIntLegacy;
-  FunctionEntity get specializedAsIntNullable;
-  FunctionEntity get specializedIsNum;
-  FunctionEntity get specializedAsNum;
-  FunctionEntity get specializedAsNumLegacy;
-  FunctionEntity get specializedAsNumNullable;
-  FunctionEntity get specializedIsString;
-  FunctionEntity get specializedAsString;
-  FunctionEntity get specializedAsStringLegacy;
-  FunctionEntity get specializedAsStringNullable;
-
-  FunctionEntity get instantiatedGenericFunctionTypeNewRti;
-  FunctionEntity get closureFunctionType;
-
-  // From dart:_internal
-
-  ClassEntity get symbolImplementationClass;
-
-  /// Used to annotate items that have the keyword "native".
-  ClassEntity get externalNameClass;
-
-  InterfaceType get externalNameType;
-
-  // From dart:_js_embedded_names
-
-  /// Holds the class for the [JsGetName] enum.
-  ClassEntity get jsGetNameEnum;
-
-  /// Returns `true` if [member] is a "foreign helper", that is, a member whose
-  /// semantics is defined synthetically and not through Dart code.
-  ///
-  /// Most foreign helpers are located in the `dart:_foreign_helper` library.
-  bool isForeignHelper(MemberEntity member);
-
-  /// Returns `true` if [member] is the `createJsSentinel` function defined in
-  /// dart:_foreign_helper.
-  bool isCreateJsSentinel(MemberEntity member);
-
-  /// Returns `true` if [member] is the `isJsSentinel` function defined in
-  /// dart:_foreign_helper.
-  bool isIsJsSentinel(MemberEntity member);
-
-  /// Returns `true` if [member] is the `_lateReadCheck` function defined in
-  /// dart:_internal.
-  bool isLateReadCheck(MemberEntity member);
-
-  /// Returns `true` if [member] is the `createSentinel` function defined in
-  /// dart:_internal.
-  bool isCreateSentinel(MemberEntity member);
-
-  ClassEntity getDefaultSuperclass(
-      ClassEntity cls, NativeBasicData nativeBasicData);
-
-  // From package:js
-  FunctionEntity get jsAllowInterop1;
-
-  // From dart:_js_annotations;
-  FunctionEntity get jsAllowInterop2;
-
-  /// Returns `true` if [function] is `allowInterop`.
-  ///
-  /// This function can come from either `package:js` or `dart:_js_annotations`.
-  bool isJsAllowInterop(FunctionEntity function);
-}
-
-abstract class KCommonElements implements CommonElements {
-  // From package:js
-  ClassEntity get jsAnnotationClass1;
-  ClassEntity get jsAnonymousClass1;
-
-  // From dart:_js_annotations
-  ClassEntity get jsAnnotationClass2;
-  ClassEntity get jsAnonymousClass2;
-
-  /// Returns `true` if [cls] is a @JS() annotation.
-  ///
-  /// The class can come from either `package:js` or `dart:_js_annotations`.
-  bool isJsAnnotationClass(ClassEntity cls);
-
-  /// Returns `true` if [cls] is an @anonymous annotation.
-  ///
-  /// The class can come from either `package:js` or `dart:_js_annotations`.
-  bool isJsAnonymousClass(ClassEntity cls);
-
-  ClassEntity get pragmaClass;
-  FieldEntity get pragmaClassNameField;
-  FieldEntity get pragmaClassOptionsField;
-
-  bool isCreateInvocationMirrorHelper(MemberEntity member);
-}
-
-abstract class JCommonElements implements CommonElements {
-  /// Returns `true` if [element] is the unnamed constructor of `List`.
-  ///
-  /// This will not resolve the constructor if it hasn't been seen yet during
-  /// compilation.
-  bool isUnnamedListConstructor(ConstructorEntity element);
-
-  /// Returns `true` if [element] is the named constructor of `List`,
-  /// e.g. `List.of`.
-  ///
-  /// This will not resolve the constructor if it hasn't been seen yet during
-  /// compilation.
-  bool isNamedListConstructor(String name, ConstructorEntity element);
-
-  /// Returns `true` if [element] is the named constructor of `JSArray`,
-  /// e.g. `JSArray.fixed`.
-  ///
-  /// This will not resolve the constructor if it hasn't been seen yet during
-  /// compilation.
-  bool isNamedJSArrayConstructor(String name, ConstructorEntity element);
-
-  bool isDefaultEqualityImplementation(MemberEntity element);
-
-  /// Returns `true` if [selector] applies to `JSIndexable.length`.
-  bool appliesToJsIndexableLength(Selector selector);
-
-  FunctionEntity get jsArrayRemoveLast;
-
-  FunctionEntity get jsArrayAdd;
-
-  bool isJsStringSplit(MemberEntity member);
-
-  /// Returns `true` if [selector] applies to `JSString.split` on [receiver]
-  /// in the given [world].
-  ///
-  /// Returns `false` if `JSString.split` is not available.
-  bool appliesToJsStringSplit(Selector selector, AbstractValue receiver,
-      AbstractValueDomain abstractValueDomain);
-
-  FunctionEntity get jsStringSplit;
-
-  FunctionEntity get jsStringToString;
-
-  FunctionEntity get jsStringOperatorAdd;
-
-  ClassEntity get jsConstClass;
-
-  /// Return `true` if [member] is the 'checkInt' function defined in
-  /// dart:_js_helpers.
-  bool isCheckInt(MemberEntity member);
-
-  /// Return `true` if [member] is the 'checkNum' function defined in
-  /// dart:_js_helpers.
-  bool isCheckNum(MemberEntity member);
-
-  /// Return `true` if [member] is the 'checkString' function defined in
-  /// dart:_js_helpers.
-  bool isCheckString(MemberEntity member);
-
-  bool isInstantiationClass(ClassEntity cls);
-
-  // From dart:_native_typed_data
-
-  ClassEntity get typedArrayOfIntClass;
-
-  ClassEntity get typedArrayOfDoubleClass;
-
-  /// Holds the class for the [JsBuiltins] enum.
-  ClassEntity get jsBuiltinEnum;
-
-  bool isForeign(MemberEntity element);
-
-  /// Returns `true` if the implementation of the 'operator ==' [function] is
-  /// known to handle `null` as argument.
-  bool operatorEqHandlesNullArgument(FunctionEntity function);
-}
-
-class CommonElementsImpl
-    implements CommonElements, KCommonElements, JCommonElements {
-  @override
-  final DartTypes dartTypes;
-  final ElementEnvironment _env;
-
-  CommonElementsImpl(this.dartTypes, this._env);
-
-  ClassEntity _objectClass;
-  @override
-  ClassEntity get objectClass =>
-      _objectClass ??= _findClass(coreLibrary, 'Object');
-
-  ClassEntity _boolClass;
-  @override
-  ClassEntity get boolClass => _boolClass ??= _findClass(coreLibrary, 'bool');
-
-  ClassEntity _numClass;
-  @override
-  ClassEntity get numClass => _numClass ??= _findClass(coreLibrary, 'num');
-
-  ClassEntity _intClass;
-  @override
-  ClassEntity get intClass => _intClass ??= _findClass(coreLibrary, 'int');
-
-  ClassEntity _doubleClass;
-  @override
-  ClassEntity get doubleClass =>
-      _doubleClass ??= _findClass(coreLibrary, 'double');
-
-  ClassEntity _stringClass;
-  @override
-  ClassEntity get stringClass =>
-      _stringClass ??= _findClass(coreLibrary, 'String');
-
-  ClassEntity _functionClass;
-  @override
-  ClassEntity get functionClass =>
-      _functionClass ??= _findClass(coreLibrary, 'Function');
-
-  ClassEntity _resourceClass;
-  @override
-  ClassEntity get resourceClass =>
-      _resourceClass ??= _findClass(coreLibrary, 'Resource');
-
-  ClassEntity _symbolClass;
-  @override
-  ClassEntity get symbolClass =>
-      _symbolClass ??= _findClass(coreLibrary, 'Symbol');
-
-  ClassEntity _nullClass;
-  @override
-  ClassEntity get nullClass => _nullClass ??= _findClass(coreLibrary, 'Null');
-
-  ClassEntity _typeClass;
-  @override
-  ClassEntity get typeClass => _typeClass ??= _findClass(coreLibrary, 'Type');
-
-  ClassEntity _stackTraceClass;
-  @override
-  ClassEntity get stackTraceClass =>
-      _stackTraceClass ??= _findClass(coreLibrary, 'StackTrace');
-
-  ClassEntity _listClass;
-  @override
-  ClassEntity get listClass => _listClass ??= _findClass(coreLibrary, 'List');
-
-  ClassEntity _setClass;
-  @override
-  ClassEntity get setClass => _setClass ??= _findClass(coreLibrary, 'Set');
-
-  ClassEntity _mapClass;
-  @override
-  ClassEntity get mapClass => _mapClass ??= _findClass(coreLibrary, 'Map');
-
-  ClassEntity _unmodifiableSetClass;
-  @override
-  ClassEntity get unmodifiableSetClass => _unmodifiableSetClass ??=
-      _findClass(_env.lookupLibrary(Uris.dart_collection), '_UnmodifiableSet');
-
-  ClassEntity _iterableClass;
-  @override
-  ClassEntity get iterableClass =>
-      _iterableClass ??= _findClass(coreLibrary, 'Iterable');
-
-  ClassEntity _futureClass;
-  @override
-  ClassEntity get futureClass =>
-      _futureClass ??= _findClass(asyncLibrary, 'Future');
-
-  ClassEntity _streamClass;
-  @override
-  ClassEntity get streamClass =>
-      _streamClass ??= _findClass(asyncLibrary, 'Stream');
-
-  LibraryEntity _coreLibrary;
-  @override
-  LibraryEntity get coreLibrary =>
-      _coreLibrary ??= _env.lookupLibrary(Uris.dart_core, required: true);
-
-  LibraryEntity _asyncLibrary;
-  @override
-  LibraryEntity get asyncLibrary =>
-      _asyncLibrary ??= _env.lookupLibrary(Uris.dart_async);
-
-  /// The dart:mirrors library.
-  ///
-  /// Null if the program doesn't access dart:mirrors.
-  LibraryEntity _mirrorsLibrary;
-  @override
-  LibraryEntity get mirrorsLibrary =>
-      _mirrorsLibrary ??= _env.lookupLibrary(Uris.dart_mirrors);
-
-  LibraryEntity _typedDataLibrary;
-  @override
-  LibraryEntity get typedDataLibrary =>
-      _typedDataLibrary ??= _env.lookupLibrary(Uris.dart__native_typed_data);
-
-  LibraryEntity _jsHelperLibrary;
-  @override
-  LibraryEntity get jsHelperLibrary =>
-      _jsHelperLibrary ??= _env.lookupLibrary(Uris.dart__js_helper);
-
-  LibraryEntity _lateHelperLibrary;
-  @override
-  LibraryEntity get lateHelperLibrary =>
-      _lateHelperLibrary ??= _env.lookupLibrary(Uris.dart__late_helper);
-
-  LibraryEntity _interceptorsLibrary;
-  @override
-  LibraryEntity get interceptorsLibrary =>
-      _interceptorsLibrary ??= _env.lookupLibrary(Uris.dart__interceptors);
-
-  LibraryEntity _foreignLibrary;
-  @override
-  LibraryEntity get foreignLibrary =>
-      _foreignLibrary ??= _env.lookupLibrary(Uris.dart__foreign_helper);
-
-  LibraryEntity _rtiLibrary;
-  @override
-  LibraryEntity get rtiLibrary =>
-      _rtiLibrary ??= _env.lookupLibrary(Uris.dart__rti, required: true);
-
-  /// Reference to the internal library to lookup functions to always inline.
-  LibraryEntity _internalLibrary;
-  @override
-  LibraryEntity get internalLibrary => _internalLibrary ??=
-      _env.lookupLibrary(Uris.dart__internal, required: true);
-
-  LibraryEntity _dartJsLibrary;
-  @override
-  LibraryEntity get dartJsLibrary =>
-      _dartJsLibrary ??= _env.lookupLibrary(Uris.dart_js);
-
-  LibraryEntity _packageJsLibrary;
-  @override
-  LibraryEntity get packageJsLibrary =>
-      _packageJsLibrary ??= _env.lookupLibrary(Uris.package_js);
-
-  LibraryEntity _dartJsAnnotationsLibrary;
-  @override
-  LibraryEntity get dartJsAnnotationsLibrary => _dartJsAnnotationsLibrary ??=
-      _env.lookupLibrary(Uris.dart__js_annotations);
-
-  ClassEntity _typedDataClass;
-  @override
-  ClassEntity get typedDataClass =>
-      _typedDataClass ??= _findClass(typedDataLibrary, 'NativeTypedData');
-
-  ConstructorEntity _symbolConstructorTarget;
-  @override
-  ConstructorEntity get symbolConstructorTarget {
-    // TODO(johnniwinther): Kernel does not include redirecting factories
-    // so this cannot be found in kernel. Find a consistent way to handle
-    // this and similar cases.
-    return _symbolConstructorTarget ??=
-        _findConstructor(symbolImplementationClass, '');
-  }
-
-  bool _computedSymbolConstructorDependencies = false;
-  ConstructorEntity _symbolConstructorImplementationTarget;
-
-  void _ensureSymbolConstructorDependencies() {
-    if (_computedSymbolConstructorDependencies) return;
-    _computedSymbolConstructorDependencies = true;
-    if (_symbolConstructorTarget == null) {
-      if (_symbolImplementationClass == null) {
-        _symbolImplementationClass =
-            _findClass(internalLibrary, 'Symbol', required: false);
-      }
-      if (_symbolImplementationClass != null) {
-        _symbolConstructorTarget =
-            _findConstructor(_symbolImplementationClass, '', required: false);
-      }
-    }
-    if (_symbolClass == null) {
-      _symbolClass = _findClass(coreLibrary, 'Symbol', required: false);
-    }
-    if (_symbolClass == null) {
-      return;
-    }
-    _symbolConstructorImplementationTarget =
-        _findConstructor(symbolClass, '', required: false);
-  }
-
-  @override
-  bool isSymbolConstructor(ConstructorEntity element) {
-    assert(element != null);
-    _ensureSymbolConstructorDependencies();
-    return element == _symbolConstructorImplementationTarget ||
-        element == _symbolConstructorTarget;
-  }
-
-  FunctionEntity _identicalFunction;
-  @override
-  FunctionEntity get identicalFunction =>
-      _identicalFunction ??= _findLibraryMember(coreLibrary, 'identical');
-
-  @override
-  bool isFunctionApplyMethod(MemberEntity element) =>
-      element.name == 'apply' && element.enclosingClass == functionClass;
-
-  /// Returns `true` if [element] is the unnamed constructor of `List`.
-  ///
-  /// This will not resolve the constructor if it hasn't been seen yet during
-  /// compilation.
-  @override
-  bool isUnnamedListConstructor(ConstructorEntity element) =>
-      (element.name == '' && element.enclosingClass == listClass) ||
-      (element.name == 'list' && element.enclosingClass == jsArrayClass);
-
-  /// Returns `true` if [element] is the 'filled' constructor of `List`.
-  ///
-  /// This will not resolve the constructor if it hasn't been seen yet during
-  /// compilation.
-  @override
-  bool isNamedListConstructor(String name, ConstructorEntity element) =>
-      element.name == name && element.enclosingClass == listClass;
-
-  /// Returns `true` if [element] is the [name]d constructor of `JSArray`.
-  ///
-  /// This will not resolve the constructor if it hasn't been seen yet during
-  /// compilation.
-  @override
-  bool isNamedJSArrayConstructor(String name, ConstructorEntity element) =>
-      element.name == name && element.enclosingClass == jsArrayClass;
-
-  @override
-  DynamicType get dynamicType => _env.dynamicType;
-
-  @override
-  InterfaceType get objectType => _getRawType(objectClass);
-
-  @override
-  InterfaceType get boolType => _getRawType(boolClass);
-
-  @override
-  InterfaceType get numType => _getRawType(numClass);
-
-  @override
-  InterfaceType get intType => _getRawType(intClass);
-
-  @override
-  InterfaceType get doubleType => _getRawType(doubleClass);
-
-  @override
-  InterfaceType get stringType => _getRawType(stringClass);
-
-  @override
-  InterfaceType get symbolType => _getRawType(symbolClass);
-
-  @override
-  InterfaceType get functionType => _getRawType(functionClass);
-
-  @override
-  InterfaceType get nullType => _getRawType(nullClass);
-
-  @override
-  InterfaceType get typeType => _getRawType(typeClass);
-
-  @override
-  InterfaceType get typeLiteralType => _getRawType(typeLiteralClass);
-
-  @override
-  InterfaceType get stackTraceType => _getRawType(stackTraceClass);
-
-  @override
-  InterfaceType listType([DartType elementType]) {
-    if (elementType == null) {
-      return _getRawType(listClass);
-    }
-    return _createInterfaceType(listClass, [elementType]);
-  }
-
-  @override
-  InterfaceType setType([DartType elementType]) {
-    if (elementType == null) {
-      return _getRawType(setClass);
-    }
-    return _createInterfaceType(setClass, [elementType]);
-  }
-
-  @override
-  InterfaceType mapType([DartType keyType, DartType valueType]) {
-    if (keyType == null && valueType == null) {
-      return _getRawType(mapClass);
-    } else if (keyType == null) {
-      keyType = dynamicType;
-    } else if (valueType == null) {
-      valueType = dynamicType;
-    }
-    return _createInterfaceType(mapClass, [keyType, valueType]);
-  }
-
-  @override
-  InterfaceType iterableType([DartType elementType]) {
-    if (elementType == null) {
-      return _getRawType(iterableClass);
-    }
-    return _createInterfaceType(iterableClass, [elementType]);
-  }
-
-  @override
-  InterfaceType futureType([DartType elementType]) {
-    if (elementType == null) {
-      return _getRawType(futureClass);
-    }
-    return _createInterfaceType(futureClass, [elementType]);
-  }
-
-  @override
-  InterfaceType streamType([DartType elementType]) {
-    if (elementType == null) {
-      return _getRawType(streamClass);
-    }
-    return _createInterfaceType(streamClass, [elementType]);
-  }
-
-  ClassEntity _findClass(LibraryEntity library, String name,
-      {bool required = true}) {
-    if (library == null) return null;
-    return _env.lookupClass(library, name, required: required);
-  }
-
-  MemberEntity _findLibraryMember(LibraryEntity library, String name,
-      {bool setter = false, bool required = true}) {
-    if (library == null) return null;
-    return _env.lookupLibraryMember(library, name,
-        setter: setter, required: required);
-  }
-
-  MemberEntity _findClassMember(ClassEntity cls, String name,
-      {bool setter = false, bool required = true}) {
-    return _env.lookupLocalClassMember(cls, name,
-        setter: setter, required: required);
-  }
-
-  ConstructorEntity _findConstructor(ClassEntity cls, String name,
-      {bool required = true}) {
-    return _env.lookupConstructor(cls, name, required: required);
-  }
-
-  /// Return the raw type of [cls].
-  InterfaceType _getRawType(ClassEntity cls) {
-    return _env.getRawType(cls);
-  }
-
-  /// Create the instantiation of [cls] with the given [typeArguments] and
-  /// [nullability].
-  InterfaceType _createInterfaceType(
-      ClassEntity cls, List<DartType> typeArguments) {
-    return _env.createInterfaceType(cls, typeArguments);
-  }
-
-  @override
-  InterfaceType getConstantListTypeFor(InterfaceType sourceType) =>
-      dartTypes.treatAsRawType(sourceType)
-          ? _env.getRawType(jsArrayClass)
-          : _env.createInterfaceType(jsArrayClass, sourceType.typeArguments);
-
-  @override
-  InterfaceType getConstantMapTypeFor(InterfaceType sourceType,
-      {bool onlyStringKeys = false}) {
-    ClassEntity classElement =
-        onlyStringKeys ? constantStringMapClass : generalConstantMapClass;
-    if (dartTypes.treatAsRawType(sourceType)) {
-      return _env.getRawType(classElement);
-    } else {
-      return _env.createInterfaceType(classElement, sourceType.typeArguments);
-    }
-  }
-
-  @override
-  InterfaceType getConstantSetTypeFor(InterfaceType sourceType) =>
-      dartTypes.treatAsRawType(sourceType)
-          ? _env.getRawType(constSetLiteralClass)
-          : _env.createInterfaceType(
-              constSetLiteralClass, sourceType.typeArguments);
-
-  @override
-  FieldEntity get symbolField => symbolImplementationField;
-
-  @override
-  InterfaceType get symbolImplementationType =>
-      _env.getRawType(symbolImplementationClass);
-
-  @override
-  bool isDefaultEqualityImplementation(MemberEntity element) {
-    assert(element.name == '==');
-    ClassEntity classElement = element.enclosingClass;
-    return classElement == objectClass ||
-        classElement == jsInterceptorClass ||
-        classElement == jsNullClass;
-  }
-
-  // From dart:core
-
-  ClassEntity _mapLiteralClass;
-  @override
-  ClassEntity get mapLiteralClass {
-    if (_mapLiteralClass == null) {
-      _mapLiteralClass = _env.lookupClass(coreLibrary, 'LinkedHashMap');
-      if (_mapLiteralClass == null) {
-        _mapLiteralClass = _findClass(
-            _env.lookupLibrary(Uris.dart_collection), 'LinkedHashMap');
-      }
-    }
-    return _mapLiteralClass;
-  }
-
-  ConstructorEntity _mapLiteralConstructor;
-  ConstructorEntity _mapLiteralConstructorEmpty;
-  FunctionEntity _mapLiteralUntypedMaker;
-  FunctionEntity _mapLiteralUntypedEmptyMaker;
-  void _ensureMapLiteralHelpers() {
-    if (_mapLiteralConstructor != null) return;
-
-    _mapLiteralConstructor =
-        _env.lookupConstructor(mapLiteralClass, '_literal');
-    _mapLiteralConstructorEmpty =
-        _env.lookupConstructor(mapLiteralClass, '_empty');
-    _mapLiteralUntypedMaker =
-        _env.lookupLocalClassMember(mapLiteralClass, '_makeLiteral');
-    _mapLiteralUntypedEmptyMaker =
-        _env.lookupLocalClassMember(mapLiteralClass, '_makeEmpty');
-  }
-
-  @override
-  ConstructorEntity get mapLiteralConstructor {
-    _ensureMapLiteralHelpers();
-    return _mapLiteralConstructor;
-  }
-
-  @override
-  ConstructorEntity get mapLiteralConstructorEmpty {
-    _ensureMapLiteralHelpers();
-    return _mapLiteralConstructorEmpty;
-  }
-
-  @override
-  FunctionEntity get mapLiteralUntypedMaker {
-    _ensureMapLiteralHelpers();
-    return _mapLiteralUntypedMaker;
-  }
-
-  @override
-  FunctionEntity get mapLiteralUntypedEmptyMaker {
-    _ensureMapLiteralHelpers();
-    return _mapLiteralUntypedEmptyMaker;
-  }
-
-  ClassEntity _setLiteralClass;
-  @override
-  ClassEntity get setLiteralClass => _setLiteralClass ??=
-      _findClass(_env.lookupLibrary(Uris.dart_collection), 'LinkedHashSet');
-
-  ConstructorEntity _setLiteralConstructor;
-  ConstructorEntity _setLiteralConstructorEmpty;
-  FunctionEntity _setLiteralUntypedMaker;
-  FunctionEntity _setLiteralUntypedEmptyMaker;
-
-  void _ensureSetLiteralHelpers() {
-    if (_setLiteralConstructor != null) return;
-
-    _setLiteralConstructor =
-        _env.lookupConstructor(setLiteralClass, '_literal');
-    _setLiteralConstructorEmpty =
-        _env.lookupConstructor(setLiteralClass, '_empty');
-    _setLiteralUntypedMaker =
-        _env.lookupLocalClassMember(setLiteralClass, '_makeLiteral');
-    _setLiteralUntypedEmptyMaker =
-        _env.lookupLocalClassMember(setLiteralClass, '_makeEmpty');
-  }
-
-  @override
-  ConstructorEntity get setLiteralConstructor {
-    _ensureSetLiteralHelpers();
-    return _setLiteralConstructor;
-  }
-
-  @override
-  ConstructorEntity get setLiteralConstructorEmpty {
-    _ensureSetLiteralHelpers();
-    return _setLiteralConstructorEmpty;
-  }
-
-  @override
-  FunctionEntity get setLiteralUntypedMaker {
-    _ensureSetLiteralHelpers();
-    return _setLiteralUntypedMaker;
-  }
-
-  @override
-  FunctionEntity get setLiteralUntypedEmptyMaker {
-    _ensureSetLiteralHelpers();
-    return _setLiteralUntypedEmptyMaker;
-  }
-
-  FunctionEntity _objectNoSuchMethod;
-  @override
-  FunctionEntity get objectNoSuchMethod {
-    return _objectNoSuchMethod ??=
-        _env.lookupLocalClassMember(objectClass, Identifiers.noSuchMethod_);
-  }
-
-  @override
-  bool isDefaultNoSuchMethodImplementation(FunctionEntity element) {
-    ClassEntity classElement = element.enclosingClass;
-    return classElement == objectClass ||
-        classElement == jsInterceptorClass ||
-        classElement == jsNullClass;
-  }
-
-  // From dart:async
-  ClassEntity _findAsyncHelperClass(String name) =>
-      _findClass(asyncLibrary, name);
-
-  FunctionEntity _findAsyncHelperFunction(String name) =>
-      _findLibraryMember(asyncLibrary, name);
-
-  @override
-  FunctionEntity get asyncHelperStartSync =>
-      _findAsyncHelperFunction("_asyncStartSync");
-  @override
-  FunctionEntity get asyncHelperAwait =>
-      _findAsyncHelperFunction("_asyncAwait");
-  @override
-  FunctionEntity get asyncHelperReturn =>
-      _findAsyncHelperFunction("_asyncReturn");
-  @override
-  FunctionEntity get asyncHelperRethrow =>
-      _findAsyncHelperFunction("_asyncRethrow");
-
-  @override
-  FunctionEntity get wrapBody =>
-      _findAsyncHelperFunction("_wrapJsFunctionForAsync");
-
-  @override
-  FunctionEntity get yieldStar => _env.lookupLocalClassMember(
-      _findAsyncHelperClass("_IterationMarker"), "yieldStar");
-
-  @override
-  FunctionEntity get yieldSingle => _env.lookupLocalClassMember(
-      _findAsyncHelperClass("_IterationMarker"), "yieldSingle");
-
-  @override
-  FunctionEntity get syncStarUncaughtError => _env.lookupLocalClassMember(
-      _findAsyncHelperClass("_IterationMarker"), "uncaughtError");
-
-  @override
-  FunctionEntity get asyncStarHelper =>
-      _findAsyncHelperFunction("_asyncStarHelper");
-
-  @override
-  FunctionEntity get streamOfController =>
-      _findAsyncHelperFunction("_streamOfController");
-
-  @override
-  FunctionEntity get endOfIteration => _env.lookupLocalClassMember(
-      _findAsyncHelperClass("_IterationMarker"), "endOfIteration");
-
-  @override
-  ClassEntity get syncStarIterable =>
-      _findAsyncHelperClass("_SyncStarIterable");
-
-  @override
-  ClassEntity get futureImplementation => _findAsyncHelperClass('_Future');
-
-  @override
-  ClassEntity get controllerStream =>
-      _findAsyncHelperClass("_ControllerStream");
-
-  @override
-  ClassEntity get streamIterator => _findAsyncHelperClass("StreamIterator");
-
-  @override
-  ConstructorEntity get streamIteratorConstructor =>
-      _env.lookupConstructor(streamIterator, "");
-
-  FunctionEntity _syncStarIterableFactory;
-  @override
-  FunctionEntity get syncStarIterableFactory => _syncStarIterableFactory ??=
-      _findAsyncHelperFunction('_makeSyncStarIterable');
-
-  FunctionEntity _asyncAwaitCompleterFactory;
-  @override
-  FunctionEntity get asyncAwaitCompleterFactory =>
-      _asyncAwaitCompleterFactory ??=
-          _findAsyncHelperFunction('_makeAsyncAwaitCompleter');
-
-  FunctionEntity _asyncStarStreamControllerFactory;
-  @override
-  FunctionEntity get asyncStarStreamControllerFactory =>
-      _asyncStarStreamControllerFactory ??=
-          _findAsyncHelperFunction('_makeAsyncStarStreamController');
-
-  // From dart:_interceptors
-  ClassEntity _findInterceptorsClass(String name) =>
-      _findClass(interceptorsLibrary, name);
-
-  FunctionEntity _findInterceptorsFunction(String name) =>
-      _findLibraryMember(interceptorsLibrary, name);
-
-  ClassEntity _jsInterceptorClass;
-  @override
-  ClassEntity get jsInterceptorClass =>
-      _jsInterceptorClass ??= _findInterceptorsClass('Interceptor');
-
-  ClassEntity _jsStringClass;
-  @override
-  ClassEntity get jsStringClass =>
-      _jsStringClass ??= _findInterceptorsClass('JSString');
-
-  ClassEntity _jsArrayClass;
-  @override
-  ClassEntity get jsArrayClass =>
-      _jsArrayClass ??= _findInterceptorsClass('JSArray');
-
-  ClassEntity _jsNumberClass;
-  @override
-  ClassEntity get jsNumberClass =>
-      _jsNumberClass ??= _findInterceptorsClass('JSNumber');
-
-  ClassEntity _jsIntClass;
-  @override
-  ClassEntity get jsIntClass => _jsIntClass ??= _findInterceptorsClass('JSInt');
-
-  ClassEntity _jsNumNotIntClass;
-  @override
-  ClassEntity get jsNumNotIntClass =>
-      _jsNumNotIntClass ??= _findInterceptorsClass('JSNumNotInt');
-
-  ClassEntity _jsNullClass;
-  @override
-  ClassEntity get jsNullClass =>
-      _jsNullClass ??= _findInterceptorsClass('JSNull');
-
-  ClassEntity _jsBoolClass;
-  @override
-  ClassEntity get jsBoolClass =>
-      _jsBoolClass ??= _findInterceptorsClass('JSBool');
-
-  ClassEntity _jsPlainJavaScriptObjectClass;
-  @override
-  ClassEntity get jsPlainJavaScriptObjectClass =>
-      _jsPlainJavaScriptObjectClass ??=
-          _findInterceptorsClass('PlainJavaScriptObject');
-
-  ClassEntity _jsUnknownJavaScriptObjectClass;
-  @override
-  ClassEntity get jsUnknownJavaScriptObjectClass =>
-      _jsUnknownJavaScriptObjectClass ??=
-          _findInterceptorsClass('UnknownJavaScriptObject');
-
-  ClassEntity _jsJavaScriptFunctionClass;
-  @override
-  ClassEntity get jsJavaScriptFunctionClass => _jsJavaScriptFunctionClass ??=
-      _findInterceptorsClass('JavaScriptFunction');
-
-  @override
-  InterfaceType get jsJavaScriptFunctionType =>
-      _getRawType(jsJavaScriptFunctionClass);
-
-  ClassEntity _jsLegacyJavaScriptObjectClass;
-  @override
-  ClassEntity get jsLegacyJavaScriptObjectClass =>
-      _jsLegacyJavaScriptObjectClass ??=
-          _findInterceptorsClass('LegacyJavaScriptObject');
-
-  ClassEntity _jsJavaScriptObjectClass;
-  @override
-  ClassEntity get jsJavaScriptObjectClass =>
-      _jsJavaScriptObjectClass ??= _findInterceptorsClass('JavaScriptObject');
-
-  ClassEntity _jsIndexableClass;
-  @override
-  ClassEntity get jsIndexableClass =>
-      _jsIndexableClass ??= _findInterceptorsClass('JSIndexable');
-
-  ClassEntity _jsMutableIndexableClass;
-  @override
-  ClassEntity get jsMutableIndexableClass =>
-      _jsMutableIndexableClass ??= _findInterceptorsClass('JSMutableIndexable');
-
-  ClassEntity _jsMutableArrayClass;
-  @override
-  ClassEntity get jsMutableArrayClass =>
-      _jsMutableArrayClass ??= _findInterceptorsClass('JSMutableArray');
-
-  ClassEntity _jsFixedArrayClass;
-  @override
-  ClassEntity get jsFixedArrayClass =>
-      _jsFixedArrayClass ??= _findInterceptorsClass('JSFixedArray');
-
-  ClassEntity _jsExtendableArrayClass;
-  @override
-  ClassEntity get jsExtendableArrayClass =>
-      _jsExtendableArrayClass ??= _findInterceptorsClass('JSExtendableArray');
-
-  ClassEntity _jsUnmodifiableArrayClass;
-  @override
-  ClassEntity get jsUnmodifiableArrayClass => _jsUnmodifiableArrayClass ??=
-      _findInterceptorsClass('JSUnmodifiableArray');
-
-  ClassEntity _jsPositiveIntClass;
-  @override
-  ClassEntity get jsPositiveIntClass =>
-      _jsPositiveIntClass ??= _findInterceptorsClass('JSPositiveInt');
-
-  ClassEntity _jsUInt32Class;
-  @override
-  ClassEntity get jsUInt32Class =>
-      _jsUInt32Class ??= _findInterceptorsClass('JSUInt32');
-
-  ClassEntity _jsUInt31Class;
-  @override
-  ClassEntity get jsUInt31Class =>
-      _jsUInt31Class ??= _findInterceptorsClass('JSUInt31');
-
-  @override
-  bool isFindIndexForNativeSubclassType(MemberEntity member) {
-    return member.name == 'findIndexForNativeSubclassType' &&
-        member.isTopLevel &&
-        member.library == interceptorsLibrary;
-  }
-
-  FunctionEntity _getNativeInterceptorMethod;
-  @override
-  FunctionEntity get getNativeInterceptorMethod =>
-      _getNativeInterceptorMethod ??=
-          _findInterceptorsFunction('getNativeInterceptor');
-
-  @override
-  bool appliesToJsIndexableLength(Selector selector) {
-    return selector.name == 'length' && (selector.isGetter || selector.isCall);
-  }
-
-  ConstructorEntity _jsArrayTypedConstructor;
-  @override
-  ConstructorEntity get jsArrayTypedConstructor =>
-      _jsArrayTypedConstructor ??= _findConstructor(jsArrayClass, 'typed');
-
-  FunctionEntity _jsArrayRemoveLast;
-  @override
-  FunctionEntity get jsArrayRemoveLast =>
-      _jsArrayRemoveLast ??= _findClassMember(jsArrayClass, 'removeLast');
-
-  FunctionEntity _jsArrayAdd;
-  @override
-  FunctionEntity get jsArrayAdd =>
-      _jsArrayAdd ??= _findClassMember(jsArrayClass, 'add');
-
-  bool _isJsStringClass(ClassEntity cls) {
-    return cls.name == 'JSString' && cls.library == interceptorsLibrary;
-  }
-
-  @override
-  bool isJsStringSplit(MemberEntity member) {
-    return member.name == 'split' &&
-        member.isInstanceMember &&
-        _isJsStringClass(member.enclosingClass);
-  }
-
-  @override
-  bool appliesToJsStringSplit(Selector selector, AbstractValue receiver,
-      AbstractValueDomain abstractValueDomain) {
-    if (_jsStringSplit == null) {
-      ClassEntity cls =
-          _findClass(interceptorsLibrary, 'JSString', required: false);
-      if (cls == null) return false;
-      _jsStringSplit = _findClassMember(cls, 'split', required: false);
-      if (_jsStringSplit == null) return false;
-    }
-    return selector.applies(_jsStringSplit) &&
-        (receiver == null ||
-            abstractValueDomain
-                .isTargetingMember(receiver, jsStringSplit, selector.memberName)
-                .isPotentiallyTrue);
-  }
-
-  FunctionEntity _jsStringSplit;
-  @override
-  FunctionEntity get jsStringSplit =>
-      _jsStringSplit ??= _findClassMember(jsStringClass, 'split');
-
-  FunctionEntity _jsStringToString;
-  @override
-  FunctionEntity get jsStringToString =>
-      _jsStringToString ??= _findClassMember(jsStringClass, 'toString');
-
-  FunctionEntity _jsStringOperatorAdd;
-  @override
-  FunctionEntity get jsStringOperatorAdd =>
-      _jsStringOperatorAdd ??= _findClassMember(jsStringClass, '+');
-
-  ClassEntity _jsConstClass;
-  @override
-  ClassEntity get jsConstClass =>
-      _jsConstClass ??= _findClass(foreignLibrary, 'JS_CONST');
-
-  // From dart:js
-  FunctionEntity _jsAllowInterop1;
-  @override
-  FunctionEntity get jsAllowInterop1 => _jsAllowInterop1 ??=
-      _findLibraryMember(dartJsLibrary, 'allowInterop', required: false);
-
-  // From dart:_js_annotations
-  FunctionEntity _jsAllowInterop2;
-  @override
-  FunctionEntity get jsAllowInterop2 => _jsAllowInterop2 ??= _findLibraryMember(
-      dartJsAnnotationsLibrary, 'allowInterop',
-      required: false);
-
-  @override
-  bool isJsAllowInterop(FunctionEntity function) {
-    return function == jsAllowInterop1 || function == jsAllowInterop2;
-  }
-
-  // From package:js
-  ClassEntity _jsAnnotationClass1;
-  @override
-  ClassEntity get jsAnnotationClass1 => _jsAnnotationClass1 ??=
-      _findClass(packageJsLibrary, 'JS', required: false);
-
-  // From dart:_js_annotations
-  ClassEntity _jsAnnotationClass2;
-  @override
-  ClassEntity get jsAnnotationClass2 => _jsAnnotationClass2 ??=
-      _findClass(dartJsAnnotationsLibrary, 'JS', required: false);
-
-  @override
-  bool isJsAnnotationClass(ClassEntity cls) {
-    return cls == jsAnnotationClass1 || cls == jsAnnotationClass2;
-  }
-
-  // From dart:js
-  ClassEntity _jsAnonymousClass1;
-  @override
-  ClassEntity get jsAnonymousClass1 => _jsAnonymousClass1 ??=
-      _findClass(packageJsLibrary, '_Anonymous', required: false);
-
-  // From dart:_js_annotations
-  ClassEntity _jsAnonymousClass2;
-  @override
-  ClassEntity get jsAnonymousClass2 => _jsAnonymousClass2 ??=
-      _findClass(dartJsAnnotationsLibrary, '_Anonymous', required: false);
-
-  @override
-  bool isJsAnonymousClass(ClassEntity cls) {
-    return cls == jsAnonymousClass1 || cls == jsAnonymousClass2;
-  }
-
-  @override
-  FunctionEntity findHelperFunction(String name) => _findHelperFunction(name);
-
-  FunctionEntity _findHelperFunction(String name) =>
-      _findLibraryMember(jsHelperLibrary, name);
-
-  ClassEntity _findHelperClass(String name) =>
-      _findClass(jsHelperLibrary, name);
-
-  FunctionEntity _findLateHelperFunction(String name) =>
-      _findLibraryMember(lateHelperLibrary, name);
-
-  ClassEntity _closureClass;
-  @override
-  ClassEntity get closureClass => _closureClass ??= _findHelperClass('Closure');
-
-  ClassEntity _closureClass0Args;
-  @override
-  ClassEntity get closureClass0Args =>
-      _closureClass0Args ??= _findHelperClass('Closure0Args');
-
-  ClassEntity _closureClass2Args;
-  @override
-  ClassEntity get closureClass2Args =>
-      _closureClass2Args ??= _findHelperClass('Closure2Args');
-
-  ClassEntity _boundClosureClass;
-  @override
-  ClassEntity get boundClosureClass =>
-      _boundClosureClass ??= _findHelperClass('BoundClosure');
-
-  ClassEntity _typeLiteralClass;
-  @override
-  ClassEntity get typeLiteralClass =>
-      _typeLiteralClass ??= _findRtiClass('_Type');
-
-  ClassEntity _constMapLiteralClass;
-  @override
-  ClassEntity get constMapLiteralClass =>
-      _constMapLiteralClass ??= _findHelperClass('ConstantMap');
-
-  // TODO(fishythefish): Implement a `ConstantSet` class and update the backend
-  // impacts + constant emitter accordingly.
-  ClassEntity _constSetLiteralClass;
-  @override
-  ClassEntity get constSetLiteralClass =>
-      _constSetLiteralClass ??= unmodifiableSetClass;
-
-  ClassEntity _pragmaClass;
-  @override
-  ClassEntity get pragmaClass =>
-      _pragmaClass ??= _findClass(coreLibrary, 'pragma');
-
-  FieldEntity _pragmaClassNameField;
-  @override
-  FieldEntity get pragmaClassNameField =>
-      _pragmaClassNameField ??= _findClassMember(pragmaClass, 'name');
-
-  FieldEntity _pragmaClassOptionsField;
-  @override
-  FieldEntity get pragmaClassOptionsField =>
-      _pragmaClassOptionsField ??= _findClassMember(pragmaClass, 'options');
-
-  ClassEntity _jsInvocationMirrorClass;
-  @override
-  ClassEntity get jsInvocationMirrorClass =>
-      _jsInvocationMirrorClass ??= _findHelperClass('JSInvocationMirror');
-
-  ClassEntity _requiredSentinelClass;
-  @override
-  ClassEntity get requiredSentinelClass =>
-      _requiredSentinelClass ??= _findHelperClass('_Required');
-  @override
-  InterfaceType get requiredSentinelType => _getRawType(requiredSentinelClass);
-
-  MemberEntity _invocationTypeArgumentGetter;
-  @override
-  MemberEntity get invocationTypeArgumentGetter =>
-      _invocationTypeArgumentGetter ??=
-          _findClassMember(jsInvocationMirrorClass, 'typeArguments');
-
-  ClassEntity _jsIndexingBehaviorInterface;
-  @override
-  ClassEntity get jsIndexingBehaviorInterface =>
-      _jsIndexingBehaviorInterface ??=
-          _findHelperClass('JavaScriptIndexingBehavior');
-
-  @override
-  ClassEntity get stackTraceHelperClass => _findHelperClass('_StackTrace');
-
-  @override
-  ClassEntity get constantMapClass =>
-      _findHelperClass(constant_system.JavaScriptMapConstant.DART_CLASS);
-  @override
-  ClassEntity get constantStringMapClass =>
-      _findHelperClass(constant_system.JavaScriptMapConstant.DART_STRING_CLASS);
-  @override
-  ClassEntity get generalConstantMapClass => _findHelperClass(
-      constant_system.JavaScriptMapConstant.DART_GENERAL_CLASS);
-
-  @override
-  ClassEntity get annotationCreatesClass => _findHelperClass('Creates');
-
-  @override
-  ClassEntity get annotationReturnsClass => _findHelperClass('Returns');
-
-  @override
-  ClassEntity get annotationJSNameClass => _findHelperClass('JSName');
-
-  ClassEntity _nativeAnnotationClass;
-  @override
-  ClassEntity get nativeAnnotationClass =>
-      _nativeAnnotationClass ??= _findHelperClass('Native');
-
-  FunctionEntity _assertTest;
-  @override
-  FunctionEntity get assertTest =>
-      _assertTest ??= _findHelperFunction('assertTest');
-
-  FunctionEntity _assertThrow;
-  @override
-  FunctionEntity get assertThrow =>
-      _assertThrow ??= _findHelperFunction('assertThrow');
-
-  FunctionEntity _assertHelper;
-  @override
-  FunctionEntity get assertHelper =>
-      _assertHelper ??= _findHelperFunction('assertHelper');
-
-  FunctionEntity _assertUnreachableMethod;
-  @override
-  FunctionEntity get assertUnreachableMethod =>
-      _assertUnreachableMethod ??= _findHelperFunction('assertUnreachable');
-
-  FunctionEntity _getIsolateAffinityTagMarker;
-  @override
-  FunctionEntity get getIsolateAffinityTagMarker =>
-      _getIsolateAffinityTagMarker ??=
-          _findHelperFunction('getIsolateAffinityTag');
-
-  FunctionEntity _requiresPreambleMarker;
-  @override
-  FunctionEntity get requiresPreambleMarker =>
-      _requiresPreambleMarker ??= _findHelperFunction('requiresPreamble');
-
-  FunctionEntity _rawStartupMetrics;
-  @override
-  FunctionEntity get rawStartupMetrics =>
-      _rawStartupMetrics ??= _findHelperFunction('rawStartupMetrics');
-
-  @override
-  FunctionEntity get loadLibraryWrapper =>
-      _findHelperFunction("_loadLibraryWrapper");
-
-  @override
-  FunctionEntity get loadDeferredLibrary =>
-      _findHelperFunction("loadDeferredLibrary");
-
-  @override
-  FunctionEntity get boolConversionCheck =>
-      _findHelperFunction('boolConversionCheck');
-
-  @override
-  FunctionEntity get traceHelper => _findHelperFunction('traceHelper');
-
-  @override
-  FunctionEntity get closureFromTearOff =>
-      _findHelperFunction('closureFromTearOff');
-
-  @override
-  FunctionEntity get isJsIndexable => _findHelperFunction('isJsIndexable');
-
-  @override
-  FunctionEntity get throwIllegalArgumentException =>
-      _findHelperFunction('iae');
-
-  @override
-  FunctionEntity get throwIndexOutOfRangeException =>
-      _findHelperFunction('ioore');
-
-  @override
-  FunctionEntity get exceptionUnwrapper =>
-      _findHelperFunction('unwrapException');
-
-  @override
-  FunctionEntity get throwUnsupportedError =>
-      _findHelperFunction('throwUnsupportedError');
-
-  @override
-  FunctionEntity get throwTypeError => _findRtiFunction('throwTypeError');
-
-  @override
-  bool isCheckConcurrentModificationError(MemberEntity member) {
-    return member.name == 'checkConcurrentModificationError' &&
-        member.isFunction &&
-        member.isTopLevel &&
-        member.library == jsHelperLibrary;
-  }
-
-  FunctionEntity _cachedCheckConcurrentModificationError;
-  @override
-  FunctionEntity get checkConcurrentModificationError =>
-      _cachedCheckConcurrentModificationError ??=
-          _findHelperFunction('checkConcurrentModificationError');
-
-  @override
-  FunctionEntity get throwConcurrentModificationError =>
-      _findHelperFunction('throwConcurrentModificationError');
-
-  @override
-  bool isCheckInt(MemberEntity member) {
-    return member.isFunction &&
-        member.isTopLevel &&
-        member.library == jsHelperLibrary &&
-        member.name == 'checkInt';
-  }
-
-  @override
-  bool isCheckNum(MemberEntity member) {
-    return member.isFunction &&
-        member.isTopLevel &&
-        member.library == jsHelperLibrary &&
-        member.name == 'checkNum';
-  }
-
-  @override
-  bool isCheckString(MemberEntity member) {
-    return member.isFunction &&
-        member.isTopLevel &&
-        member.library == jsHelperLibrary &&
-        member.name == 'checkString';
-  }
-
-  @override
-  FunctionEntity get stringInterpolationHelper => _findHelperFunction('S');
-
-  @override
-  FunctionEntity get wrapExceptionHelper =>
-      _findHelperFunction('wrapException');
-
-  @override
-  FunctionEntity get throwExpressionHelper =>
-      _findHelperFunction('throwExpression');
-
-  @override
-  FunctionEntity get closureConverter =>
-      _findHelperFunction('convertDartClosureToJS');
-
-  @override
-  FunctionEntity get traceFromException =>
-      _findHelperFunction('getTraceFromException');
-
-  @override
-  FunctionEntity get checkDeferredIsLoaded =>
-      _findHelperFunction('checkDeferredIsLoaded');
-
-  @override
-  FunctionEntity get throwNoSuchMethod =>
-      _findHelperFunction('throwNoSuchMethod');
-
-  @override
-  FunctionEntity get createRuntimeType => _findRtiFunction('createRuntimeType');
-
-  @override
-  FunctionEntity get fallThroughError =>
-      _findHelperFunction("getFallThroughError");
-
-  @override
-  FunctionEntity get createInvocationMirror =>
-      _findHelperFunction('createInvocationMirror');
-
-  @override
-  bool isCreateInvocationMirrorHelper(MemberEntity member) {
-    return member.isTopLevel &&
-        member.name == '_createInvocationMirror' &&
-        member.library == coreLibrary;
-  }
-
-  @override
-  FunctionEntity get createUnmangledInvocationMirror =>
-      _findHelperFunction('createUnmangledInvocationMirror');
-
-  @override
-  FunctionEntity get cyclicThrowHelper =>
-      _findHelperFunction("throwCyclicInit");
-
-  @override
-  FunctionEntity get defineProperty => _findHelperFunction('defineProperty');
-
-  @override
-  FunctionEntity get throwLateFieldADI =>
-      _findLateHelperFunction('throwLateFieldADI');
-
-  @override
-  bool isExtractTypeArguments(FunctionEntity member) {
-    return member.name == 'extractTypeArguments' &&
-        member.library == internalLibrary;
-  }
-
-  // TODO(johnniwinther,sra): Support arbitrary type argument count.
-  void _checkTypeArgumentCount(int typeArgumentCount) {
-    assert(typeArgumentCount > 0);
-    if (typeArgumentCount > 20) {
-      failedAt(
-          NO_LOCATION_SPANNABLE,
-          "Unsupported instantiation argument count: "
-          "${typeArgumentCount}");
-    }
-  }
-
-  @override
-  ClassEntity getInstantiationClass(int typeArgumentCount) {
-    _checkTypeArgumentCount(typeArgumentCount);
-    return _findHelperClass('Instantiation$typeArgumentCount');
-  }
-
-  @override
-  FunctionEntity getInstantiateFunction(int typeArgumentCount) {
-    _checkTypeArgumentCount(typeArgumentCount);
-    return _findHelperFunction('instantiate$typeArgumentCount');
-  }
-
-  @override
-  bool isInstantiationClass(ClassEntity cls) {
-    return cls.library == _jsHelperLibrary &&
-        cls.name != 'Instantiation' &&
-        cls.name.startsWith('Instantiation');
-  }
-
-  @override
-  FunctionEntity get convertMainArgumentList =>
-      _findHelperFunction('convertMainArgumentList');
-
-  // From dart:_rti
-
-  ClassEntity _findRtiClass(String name) => _findClass(rtiLibrary, name);
-
-  FunctionEntity _findRtiFunction(String name) =>
-      _findLibraryMember(rtiLibrary, name);
-
-  FunctionEntity _setArrayType;
-  @override
-  FunctionEntity get setArrayType =>
-      _setArrayType ??= _findRtiFunction('_setArrayType');
-
-  FunctionEntity _findType;
-  @override
-  FunctionEntity get findType => _findType ??= _findRtiFunction('findType');
-
-  FunctionEntity _instanceType;
-  @override
-  FunctionEntity get instanceType =>
-      _instanceType ??= _findRtiFunction('instanceType');
-
-  FunctionEntity _arrayInstanceType;
-  @override
-  FunctionEntity get arrayInstanceType =>
-      _arrayInstanceType ??= _findRtiFunction('_arrayInstanceType');
-
-  FunctionEntity _simpleInstanceType;
-  @override
-  FunctionEntity get simpleInstanceType =>
-      _simpleInstanceType ??= _findRtiFunction('_instanceType');
-
-  FunctionEntity _typeLiteralMaker;
-  @override
-  FunctionEntity get typeLiteralMaker =>
-      _typeLiteralMaker ??= _findRtiFunction('typeLiteral');
-
-  FunctionEntity _checkTypeBound;
-  @override
-  FunctionEntity get checkTypeBound =>
-      _checkTypeBound ??= _findRtiFunction('checkTypeBound');
-
-  ClassEntity get _rtiImplClass => _findClass(rtiLibrary, 'Rti');
-  ClassEntity get _rtiUniverseClass => _findClass(rtiLibrary, '_Universe');
-  FieldEntity _findRtiClassField(String name) =>
-      _findClassMember(_rtiImplClass, name);
-
-  FieldEntity _rtiAsField;
-  @override
-  FieldEntity get rtiAsField => _rtiAsField ??= _findRtiClassField('_as');
-
-  FieldEntity _rtiIsField;
-  @override
-  FieldEntity get rtiIsField => _rtiIsField ??= _findRtiClassField('_is');
-
-  FieldEntity _rtiRestField;
-  @override
-  FieldEntity get rtiRestField => _rtiRestField ??= _findRtiClassField('_rest');
-
-  FieldEntity _rtiPrecomputed1Field;
-  @override
-  FieldEntity get rtiPrecomputed1Field =>
-      _rtiPrecomputed1Field ??= _findRtiClassField('_precomputed1');
-
-  FunctionEntity _rtiEvalMethod;
-  @override
-  FunctionEntity get rtiEvalMethod =>
-      _rtiEvalMethod ??= _findClassMember(_rtiImplClass, '_eval');
-
-  FunctionEntity _rtiBindMethod;
-  @override
-  FunctionEntity get rtiBindMethod =>
-      _rtiBindMethod ??= _findClassMember(_rtiImplClass, '_bind');
-
-  FunctionEntity _rtiAddRulesMethod;
-  @override
-  FunctionEntity get rtiAddRulesMethod =>
-      _rtiAddRulesMethod ??= _findClassMember(_rtiUniverseClass, 'addRules');
-
-  FunctionEntity _rtiAddErasedTypesMethod;
-  @override
-  FunctionEntity get rtiAddErasedTypesMethod => _rtiAddErasedTypesMethod ??=
-      _findClassMember(_rtiUniverseClass, 'addErasedTypes');
-
-  FunctionEntity _rtiAddTypeParameterVariancesMethod;
-  @override
-  FunctionEntity get rtiAddTypeParameterVariancesMethod =>
-      _rtiAddTypeParameterVariancesMethod ??=
-          _findClassMember(_rtiUniverseClass, 'addTypeParameterVariances');
-
-  @override
-  FunctionEntity get installSpecializedIsTest =>
-      _findRtiFunction('_installSpecializedIsTest');
-
-  @override
-  FunctionEntity get installSpecializedAsCheck =>
-      _findRtiFunction('_installSpecializedAsCheck');
-
-  FunctionEntity _generalIsTestImplementation;
-  @override
-  FunctionEntity get generalIsTestImplementation =>
-      _generalIsTestImplementation ??=
-          _findRtiFunction('_generalIsTestImplementation');
-
-  FunctionEntity _generalNullableIsTestImplementation;
-  @override
-  FunctionEntity get generalNullableIsTestImplementation =>
-      _generalNullableIsTestImplementation ??=
-          _findRtiFunction('_generalNullableIsTestImplementation');
-
-  FunctionEntity _generalAsCheckImplementation;
-  @override
-  FunctionEntity get generalAsCheckImplementation =>
-      _generalAsCheckImplementation ??=
-          _findRtiFunction('_generalAsCheckImplementation');
-
-  FunctionEntity _generalNullableAsCheckImplementation;
-  @override
-  FunctionEntity get generalNullableAsCheckImplementation =>
-      _generalNullableAsCheckImplementation ??=
-          _findRtiFunction('_generalNullableAsCheckImplementation');
-
-  FunctionEntity _specializedIsObject;
-  @override
-  FunctionEntity get specializedIsObject =>
-      _specializedIsObject ??= _findRtiFunction('_isObject');
-
-  FunctionEntity _specializedAsObject;
-  @override
-  FunctionEntity get specializedAsObject =>
-      _specializedAsObject ??= _findRtiFunction('_asObject');
-
-  @override
-  FunctionEntity get specializedIsTop => _findRtiFunction('_isTop');
-
-  @override
-  FunctionEntity get specializedAsTop => _findRtiFunction('_asTop');
-
-  @override
-  FunctionEntity get specializedIsBool => _findRtiFunction('_isBool');
-
-  @override
-  FunctionEntity get specializedAsBool => _findRtiFunction('_asBool');
-
-  @override
-  FunctionEntity get specializedAsBoolLegacy => _findRtiFunction('_asBoolS');
-
-  @override
-  FunctionEntity get specializedAsBoolNullable => _findRtiFunction('_asBoolQ');
-
-  @override
-  FunctionEntity get specializedAsDouble => _findRtiFunction('_asDouble');
-
-  @override
-  FunctionEntity get specializedAsDoubleLegacy =>
-      _findRtiFunction('_asDoubleS');
-
-  @override
-  FunctionEntity get specializedAsDoubleNullable =>
-      _findRtiFunction('_asDoubleQ');
-
-  @override
-  FunctionEntity get specializedIsInt => _findRtiFunction('_isInt');
-
-  @override
-  FunctionEntity get specializedAsInt => _findRtiFunction('_asInt');
-
-  @override
-  FunctionEntity get specializedAsIntLegacy => _findRtiFunction('_asIntS');
-
-  @override
-  FunctionEntity get specializedAsIntNullable => _findRtiFunction('_asIntQ');
-
-  @override
-  FunctionEntity get specializedIsNum => _findRtiFunction('_isNum');
-
-  @override
-  FunctionEntity get specializedAsNum => _findRtiFunction('_asNum');
-
-  @override
-  FunctionEntity get specializedAsNumLegacy => _findRtiFunction('_asNumS');
-
-  @override
-  FunctionEntity get specializedAsNumNullable => _findRtiFunction('_asNumQ');
-
-  @override
-  FunctionEntity get specializedIsString => _findRtiFunction('_isString');
-
-  @override
-  FunctionEntity get specializedAsString => _findRtiFunction('_asString');
-
-  @override
-  FunctionEntity get specializedAsStringLegacy =>
-      _findRtiFunction('_asStringS');
-
-  @override
-  FunctionEntity get specializedAsStringNullable =>
-      _findRtiFunction('_asStringQ');
-
-  @override
-  FunctionEntity get instantiatedGenericFunctionTypeNewRti =>
-      _findRtiFunction('instantiatedGenericFunctionType');
-
-  @override
-  FunctionEntity get closureFunctionType =>
-      _findRtiFunction('closureFunctionType');
-
-  // From dart:_internal
-
-  ClassEntity _symbolImplementationClass;
-  @override
-  ClassEntity get symbolImplementationClass =>
-      _symbolImplementationClass ??= _findClass(internalLibrary, 'Symbol');
-
-  ClassEntity _externalNameClass;
-  @override
-  ClassEntity get externalNameClass =>
-      _externalNameClass ??= _findClass(internalLibrary, 'ExternalName');
-  @override
-  InterfaceType get externalNameType => _getRawType(externalNameClass);
-
-  /// Returns the field that holds the internal name in the implementation class
-  /// for `Symbol`.
-  FieldEntity _symbolImplementationField;
-  FieldEntity get symbolImplementationField => _symbolImplementationField ??=
-      _env.lookupLocalClassMember(symbolImplementationClass, '_name',
-          required: true);
-
-  // From dart:_native_typed_data
-
-  ClassEntity _typedArrayOfIntClass;
-  @override
-  ClassEntity get typedArrayOfIntClass => _typedArrayOfIntClass ??= _findClass(
-      _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
-      'NativeTypedArrayOfInt');
-
-  ClassEntity _typedArrayOfDoubleClass;
-  @override
-  ClassEntity get typedArrayOfDoubleClass =>
-      _typedArrayOfDoubleClass ??= _findClass(
-          _env.lookupLibrary(Uris.dart__native_typed_data, required: true),
-          'NativeTypedArrayOfDouble');
-
-  // From dart:_js_embedded_names
-
-  ClassEntity _jsGetNameEnum;
-  @override
-  ClassEntity get jsGetNameEnum => _jsGetNameEnum ??= _findClass(
-      _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
-      'JsGetName');
-
-  ClassEntity _jsBuiltinEnum;
-  @override
-  ClassEntity get jsBuiltinEnum => _jsBuiltinEnum ??= _findClass(
-      _env.lookupLibrary(Uris.dart__js_embedded_names, required: true),
-      'JsBuiltin');
-
-  @override
-  bool isForeign(MemberEntity element) => element.library == foreignLibrary;
-
-  @override
-  bool isForeignHelper(MemberEntity member) {
-    return member.library == foreignLibrary ||
-        isCreateInvocationMirrorHelper(member);
-  }
-
-  bool _isTopLevelFunctionNamed(String name, MemberEntity member) =>
-      member.name == name && member.isFunction && member.isTopLevel;
-
-  @override
-  bool isCreateJsSentinel(MemberEntity member) =>
-      member.library == foreignLibrary &&
-      _isTopLevelFunctionNamed('createJsSentinel', member);
-
-  @override
-  bool isIsJsSentinel(MemberEntity member) =>
-      member.library == foreignLibrary &&
-      _isTopLevelFunctionNamed('isJsSentinel', member);
-
-  @override
-  bool isLateReadCheck(MemberEntity member) =>
-      member.library == lateHelperLibrary &&
-      _isTopLevelFunctionNamed('_lateReadCheck', member);
-
-  @override
-  bool isCreateSentinel(MemberEntity member) =>
-      member.library == internalLibrary &&
-      _isTopLevelFunctionNamed('createSentinel', member);
-
-  @override
-  bool operatorEqHandlesNullArgument(FunctionEntity function) {
-    assert(function.name == '==',
-        failedAt(function, "Unexpected function $function."));
-    ClassEntity cls = function.enclosingClass;
-    return cls == objectClass ||
-        cls == jsInterceptorClass ||
-        cls == jsNullClass;
-  }
-
-  @override
-  ClassEntity getDefaultSuperclass(
-      ClassEntity cls, NativeBasicData nativeBasicData) {
-    if (nativeBasicData.isJsInteropClass(cls)) {
-      return jsLegacyJavaScriptObjectClass;
-    }
-    // Native classes inherit from Interceptor.
-    return nativeBasicData.isNativeClass(cls)
-        ? jsInterceptorClass
-        : objectClass;
-  }
-}
-
-/// Interface for accessing libraries, classes and members.
-///
-/// The element environment makes private and injected members directly
-/// available and should therefore not be used to determine scopes.
-///
-/// The properties exposed are Dart-centric and should therefore, long-term, not
-/// be used during codegen, expect for mirrors.
-// TODO(johnniwinther): Split this into an element environment and a type query
-// interface, the first should only be used during resolution and the latter in
-// both resolution and codegen.
-abstract class ElementEnvironment {
-  /// Returns the main library for the compilation.
-  LibraryEntity get mainLibrary;
-
-  /// Returns the main method for the compilation.
-  FunctionEntity get mainFunction;
-
-  /// Returns all known libraries.
-  Iterable<LibraryEntity> get libraries;
-
-  /// Returns the library name of [library] or '' if the library is unnamed.
-  String getLibraryName(LibraryEntity library);
-
-  /// Lookup the library with the canonical [uri], fail if the library is
-  /// missing and [required];
-  LibraryEntity lookupLibrary(Uri uri, {bool required = false});
-
-  /// Calls [f] for every class declared in [library].
-  void forEachClass(LibraryEntity library, void f(ClassEntity cls));
-
-  /// Lookup the class [name] in [library], fail if the class is missing and
-  /// [required].
-  ClassEntity lookupClass(LibraryEntity library, String name,
-      {bool required = false});
-
-  /// Calls [f] for every top level member in [library].
-  void forEachLibraryMember(LibraryEntity library, void f(MemberEntity member));
-
-  /// Lookup the member [name] in [library], fail if the class is missing and
-  /// [required].
-  MemberEntity lookupLibraryMember(LibraryEntity library, String name,
-      {bool setter = false, bool required = false});
-
-  /// Lookup the member [name] in [cls], fail if the class is missing and
-  /// [required].
-  MemberEntity lookupLocalClassMember(ClassEntity cls, String name,
-      {bool setter = false, bool required = false});
-
-  /// Lookup the member [name] in [cls] and its superclasses.
-  ///
-  /// Return `null` if the member is not found in the class or any superclass.
-  MemberEntity lookupClassMember(ClassEntity cls, String name,
-      {bool setter = false}) {
-    while (true) {
-      final entity = lookupLocalClassMember(cls, name, setter: setter);
-      if (entity != null) return entity;
-
-      cls = getSuperClass(cls);
-      if (cls == null) return null;
-    }
-  }
-
-  /// Lookup the constructor [name] in [cls], fail if the class is missing and
-  /// [required].
-  ConstructorEntity lookupConstructor(ClassEntity cls, String name,
-      {bool required = false});
-
-  /// Calls [f] for each class member declared in [cls].
-  void forEachLocalClassMember(ClassEntity cls, void f(MemberEntity member));
-
-  /// Calls [f] for each class member declared or inherited in [cls] together
-  /// with the class that declared the member.
-  ///
-  /// TODO(johnniwinther): This should not include static members of
-  /// superclasses.
-  void forEachClassMember(
-      ClassEntity cls, void f(ClassEntity declarer, MemberEntity member));
-
-  /// Calls [f] for every constructor declared in [cls].
-  ///
-  /// Will ensure that the class and all constructors are resolved if
-  /// [ensureResolved] is `true`.
-  void forEachConstructor(
-      ClassEntity cls, void f(ConstructorEntity constructor));
-
-  /// Returns the superclass of [cls].
-  ///
-  /// If [skipUnnamedMixinApplications] is `true`, unnamed mixin applications
-  /// are excluded, for instance for these classes
-  ///
-  ///     class S {}
-  ///     class M {}
-  ///     class C extends S with M {}
-  ///
-  /// the result of `getSuperClass(C)` is the unnamed mixin application
-  /// typically named `S+M` and `getSuperClass(S+M)` is `S`, whereas
-  /// the result of `getSuperClass(C, skipUnnamedMixinApplications: false)` is
-  /// `S`.
-  ClassEntity getSuperClass(ClassEntity cls,
-      {bool skipUnnamedMixinApplications = false});
-
-  /// Calls [f] for each supertype of [cls].
-  void forEachSupertype(ClassEntity cls, void f(InterfaceType supertype));
-
-  /// Calls [f] for each SuperClass of [cls].
-  void forEachSuperClass(ClassEntity cls, void f(ClassEntity superClass)) {
-    for (var superClass = getSuperClass(cls);
-        superClass != null;
-        superClass = getSuperClass(superClass)) {
-      f(superClass);
-    }
-  }
-
-  /// Create the instantiation of [cls] with the given [typeArguments] and
-  /// [nullability].
-  InterfaceType createInterfaceType(
-      ClassEntity cls, List<DartType> typeArguments);
-
-  /// Returns the `dynamic` type.
-  DartType get dynamicType;
-
-  /// Returns the 'raw type' of [cls]. That is, the instantiation of [cls]
-  /// where all types arguments are `dynamic`.
-  InterfaceType getRawType(ClassEntity cls);
-
-  /// Returns the 'JS-interop type' of [cls]; that is, the instantiation of
-  /// [cls] where all type arguments are 'any'.
-  InterfaceType getJsInteropType(ClassEntity cls);
-
-  /// Returns the 'this type' of [cls]. That is, the instantiation of [cls]
-  /// where the type arguments are the type variables of [cls].
-  InterfaceType getThisType(ClassEntity cls);
-
-  /// Returns the instantiation of [cls] to bounds.
-  InterfaceType getClassInstantiationToBounds(ClassEntity cls);
-
-  /// Returns `true` if [cls] is generic.
-  bool isGenericClass(ClassEntity cls);
-
-  /// Returns `true` if [cls] is a mixin application (named or unnamed).
-  bool isMixinApplication(ClassEntity cls);
-
-  /// Returns `true` if [cls] is an unnamed mixin application.
-  bool isUnnamedMixinApplication(ClassEntity cls);
-
-  /// The upper bound on the [typeVariable]. If not explicitly declared, this is
-  /// `Object`.
-  DartType getTypeVariableBound(TypeVariableEntity typeVariable);
-
-  /// Returns the variances for each type parameter in [cls].
-  List<Variance> getTypeVariableVariances(ClassEntity cls);
-
-  /// Returns the type of [function].
-  FunctionType getFunctionType(FunctionEntity function);
-
-  /// Returns the function type variables defined on [function].
-  List<TypeVariableType> getFunctionTypeVariables(FunctionEntity function);
-
-  /// Returns the type of the [local] function.
-  FunctionType getLocalFunctionType(Local local);
-
-  /// Returns the type of [field].
-  DartType getFieldType(FieldEntity field);
-
-  /// Returns `true` if [cls] is a Dart enum class.
-  bool isEnumClass(ClassEntity cls);
-
-  /// Returns the 'effective' mixin class if [cls] is a mixin application, and
-  /// `null` otherwise.
-  ///
-  /// The 'effective' mixin class is the class from which members are mixed in.
-  /// Normally this is the mixin class itself, but not if the mixin class itself
-  /// is a mixin application.
-  ///
-  /// Consider this hierarchy:
-  ///
-  ///     class A {}
-  ///     class B = Object with A {}
-  ///     class C = Object with B {}
-  ///
-  /// The mixin classes of `B` and `C` are `A` and `B`, respectively, but the
-  /// _effective_ mixin class of both is `A`.
-  ClassEntity getEffectiveMixinClass(ClassEntity cls);
-}
-
-abstract class KElementEnvironment extends ElementEnvironment {
-  /// Calls [f] for each class that is mixed into [cls] or one of its
-  /// superclasses.
-  void forEachMixin(ClassEntity cls, void f(ClassEntity mixin));
-
-  /// Returns `true` if [member] a the synthetic getter `loadLibrary` injected
-  /// on deferred libraries.
-  bool isDeferredLoadLibraryGetter(MemberEntity member);
-
-  /// Returns the imports seen in [library]
-  Iterable<ImportEntity> getImports(LibraryEntity library);
-
-  /// Returns the metadata constants declared on [library].
-  Iterable<ConstantValue> getLibraryMetadata(LibraryEntity library);
-
-  /// Returns the metadata constants declared on [cls].
-  Iterable<ConstantValue> getClassMetadata(ClassEntity cls);
-
-  /// Returns the metadata constants declared on [member].
-  Iterable<ConstantValue> getMemberMetadata(MemberEntity member,
-      {bool includeParameterMetadata = false});
-}
-
-abstract class JElementEnvironment extends ElementEnvironment {
-  /// Calls [f] for each class member added to [cls] during compilation.
-  void forEachInjectedClassMember(ClassEntity cls, void f(MemberEntity member));
-
-  /// Calls [f] for every constructor body in [cls].
-  void forEachConstructorBody(
-      ClassEntity cls, void f(ConstructorBodyEntity constructorBody));
-
-  /// Calls [f] for each nested closure in [member].
-  void forEachNestedClosure(
-      MemberEntity member, void f(FunctionEntity closure));
-
-  /// Returns `true` if [cls] is a mixin application with its own members.
-  ///
-  /// This occurs when a mixin contains methods with super calls or when
-  /// the mixin application contains concrete forwarding stubs.
-  bool isMixinApplicationWithMembers(ClassEntity cls);
-
-  /// The default type of the [typeVariable].
-  ///
-  /// This is the type used as the default type argument when no explicit type
-  /// argument is passed.
-  DartType getTypeVariableDefaultType(TypeVariableEntity typeVariable);
-
-  /// Returns the 'element' type of a function with the async, async* or sync*
-  /// marker [marker]. [returnType] is the return type marked function.
-  DartType getAsyncOrSyncStarElementType(
-      AsyncMarker marker, DartType returnType);
-
-  /// Returns the 'element' type of a function with an async, async* or sync*
-  /// marker. The return type of the method is inspected to determine the type
-  /// parameter of the Future, Stream or Iterable.
-  DartType getFunctionAsyncOrSyncStarElementType(FunctionEntity function);
-
-  /// Calls [f] with every instance field, together with its declarer, in an
-  /// instance of [cls]. All fields inherited from superclasses and mixins are
-  /// included.
-  ///
-  /// If [isElided] is `true`, the field is not read and should therefore not
-  /// be emitted.
-  void forEachInstanceField(
-      ClassEntity cls, void f(ClassEntity declarer, FieldEntity field));
-
-  /// Calls [f] with every instance field declared directly in class [cls]
-  /// (i.e. no inherited fields). Fields are presented in initialization
-  /// (i.e. textual) order.
-  ///
-  /// If [isElided] is `true`, the field is not read and should therefore not
-  /// be emitted.
-  void forEachDirectInstanceField(ClassEntity cls, void f(FieldEntity field));
-
-  /// Calls [f] for each parameter of [function] providing the type and name of
-  /// the parameter and the [defaultValue] if the parameter is optional.
-  void forEachParameter(covariant FunctionEntity function,
-      void f(DartType type, String name, ConstantValue defaultValue));
-
-  /// Calls [f] for each parameter - given as a [Local] - of [function].
-  void forEachParameterAsLocal(GlobalLocalsMap globalLocalsMap,
-      FunctionEntity function, void f(Local parameter));
-}
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
deleted file mode 100644
index 20e7219..0000000
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ /dev/null
@@ -1,26 +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.compile_time_constant_evaluator;
-
-import 'common/tasks.dart' show CompilerTask, Measurer;
-import 'elements/entities.dart';
-
-/// A [ConstantEnvironment] provides access for constants compiled for variable
-/// initializers.
-abstract class ConstantEnvironment {}
-
-/// A [BackendConstantEnvironment] provides access to constants needed for
-/// backend implementation.
-abstract class BackendConstantEnvironment extends ConstantEnvironment {
-  /// Register that [element] needs lazy initialization.
-  void registerLazyStatic(FieldEntity element);
-}
-
-/// Interface for the task that compiles the constant environments for the
-/// frontend and backend interpretation of compile-time constants.
-abstract class ConstantCompilerTask extends CompilerTask
-    implements ConstantEnvironment {
-  ConstantCompilerTask(Measurer measurer) : super(measurer);
-}
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 35d9f52..d1ddb50 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -7,18 +7,16 @@
 import 'dart:async' show Future;
 import 'dart:convert' show jsonEncode;
 
-import 'package:front_end/src/api_unstable/dart2js.dart'
-    show clearStringTokenCanonicalizer;
 import 'package:kernel/ast.dart' as ir;
 
-import '../compiler_new.dart' as api;
-import 'backend_strategy.dart';
+import '../compiler.dart' as api;
+import 'common.dart';
 import 'common/codegen.dart';
+import 'common/elements.dart' show ElementEnvironment;
+import 'common/metrics.dart' show Metric;
 import 'common/names.dart' show Selectors;
 import 'common/tasks.dart' show CompilerTask, GenericTask, Measurer;
 import 'common/work.dart' show WorkItem;
-import 'common.dart';
-import 'common_elements.dart' show ElementEnvironment;
 import 'deferred_load/deferred_load.dart' show DeferredLoadTask;
 import 'deferred_load/output_unit.dart' show OutputUnitData;
 import 'deferred_load/program_split_constraints/nodes.dart' as psc
@@ -28,9 +26,8 @@
 import 'diagnostics/messages.dart' show Message, MessageTemplate;
 import 'dump_info.dart' show DumpInfoTask;
 import 'elements/entities.dart';
-import 'enqueue.dart' show Enqueuer, EnqueueTask, ResolutionEnqueuer;
+import 'enqueue.dart' show Enqueuer, ResolutionEnqueuer;
 import 'environment.dart';
-import 'frontend_strategy.dart';
 import 'inferrer/abstract_value_domain.dart' show AbstractValueStrategy;
 import 'inferrer/trivial.dart' show TrivialAbstractValueStrategy;
 import 'inferrer/powersets/wrapped.dart' show WrappedAbstractValueStrategy;
@@ -40,13 +37,15 @@
     show GlobalTypeInferenceResults, GlobalTypeInferenceTask;
 import 'io/source_information.dart' show SourceInformation;
 import 'ir/modular.dart';
-import 'js_backend/backend.dart' show CodegenInputs, JavaScriptImpactStrategy;
+import 'js_backend/backend.dart' show CodegenInputs;
+import 'js_backend/enqueuer.dart';
 import 'js_backend/inferred_data.dart';
 import 'js_model/js_strategy.dart';
 import 'js_model/js_world.dart';
 import 'js_model/locals.dart';
 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;
@@ -57,25 +56,25 @@
 import 'universe/selector.dart' show Selector;
 import 'universe/codegen_world_builder.dart';
 import 'universe/resolution_world_builder.dart';
-import 'universe/world_impact.dart'
-    show ImpactStrategy, WorldImpact, WorldImpactBuilderImpl;
-import 'world.dart' show JClosedWorld, KClosedWorld;
+import 'universe/world_impact.dart' show WorldImpact, WorldImpactBuilderImpl;
+import 'world.dart' show JClosedWorld;
 
 typedef MakeReporterFunction = CompilerDiagnosticReporter Function(
     Compiler compiler, CompilerOptions options);
 
-abstract class Compiler {
-  Measurer get measurer;
+/// Implementation of the compiler using  a [api.CompilerInput] for supplying
+/// the sources.
+class Compiler {
+  final Measurer measurer;
+  final api.CompilerInput provider;
+  final api.CompilerDiagnostics handler;
 
-  api.CompilerInput get provider;
-
-  FrontendStrategy frontendStrategy;
-  BackendStrategy backendStrategy;
+  KernelFrontendStrategy frontendStrategy;
+  JsBackendStrategy backendStrategy;
   CompilerDiagnosticReporter _reporter;
   Map<Entity, WorldImpact> _impactCache;
-  ImpactCacheDeleter _impactCacheDeleter;
-
-  ImpactStrategy impactStrategy = const ImpactStrategy();
+  GenericTask userHandlerTask;
+  GenericTask userProviderTask;
 
   /// Options provided from command-line arguments.
   final CompilerOptions options;
@@ -95,10 +94,11 @@
   ir.Component componentForTesting;
   JClosedWorld backendClosedWorldForTesting;
   DataSourceIndices closedWorldIndicesForTesting;
+  ResolutionEnqueuer resolutionEnqueuerForTesting;
+  CodegenEnqueuer codegenEnqueuerForTesting;
 
   DiagnosticReporter get reporter => _reporter;
   Map<Entity, WorldImpact> get impactCache => _impactCache;
-  ImpactCacheDeleter get impactCacheDeleter => _impactCacheDeleter;
 
   final Environment environment;
 
@@ -113,7 +113,7 @@
 
   GenericTask selfTask;
 
-  EnqueueTask enqueuer;
+  GenericTask enqueueTask;
   DeferredLoadTask deferredLoadTask;
   DumpInfoTask dumpInfoTask;
   SerializationTask serializationTask;
@@ -138,12 +138,12 @@
   // Callback function used for testing codegen enqueuing.
   void Function() onCodegenQueueEmptyForTesting;
 
-  Compiler(
-      {CompilerOptions options,
-      api.CompilerOutput outputProvider,
-      this.environment = const _EmptyEnvironment(),
-      MakeReporterFunction makeReporter})
-      : this.options = options {
+  Compiler(this.provider, this._outputProvider, this.handler, this.options,
+      {MakeReporterFunction makeReporter})
+      // NOTE: allocating measurer is done upfront to ensure the wallclock is
+      // started before other computations.
+      : measurer = Measurer(enableTaskMeasurements: options.verbose),
+        this.environment = Environment(options.environment) {
     options.deriveOptions();
     options.validate();
 
@@ -170,35 +170,33 @@
         kernelFrontEndTask, options, reporter, environment);
     backendStrategy = createBackendStrategy();
     _impactCache = <Entity, WorldImpact>{};
-    _impactCacheDeleter = _MapImpactCacheDeleter(_impactCache);
 
     if (options.showInternalProgress) {
       progress = InteractiveProgress();
     }
 
-    enqueuer = EnqueueTask(this);
-
     tasks = [
+      // [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),
       kernelFrontEndTask,
       globalInference = GlobalTypeInferenceTask(this),
       deferredLoadTask = frontendStrategy.createDeferredLoadTask(this),
-      // [enqueuer] is created earlier because it contains the resolution world
-      // objects needed by other tasks.
-      enqueuer,
       dumpInfoTask = DumpInfoTask(this),
       selfTask,
       serializationTask = SerializationTask(
           options, reporter, provider, outputProvider, measurer),
+      ...backendStrategy.tasks,
+      userHandlerTask = GenericTask('Diagnostic handler', measurer),
+      userProviderTask = GenericTask('Input provider', measurer)
     ];
-
-    tasks.addAll(backendStrategy.tasks);
   }
 
   /// Creates the backend strategy.
   ///
   /// Override this to mock the backend strategy for testing.
-  BackendStrategy createBackendStrategy() {
+  JsBackendStrategy createBackendStrategy() {
     return JsBackendStrategy(this);
   }
 
@@ -226,8 +224,8 @@
   // succeeded.
   Future<bool> run() => selfTask.measureSubtask("run", () {
         measurer.startWallClock();
-
-        return Future.sync(() => runInternal())
+        var setupDuration = measurer.elapsedWallClock;
+        var success = Future.sync(() => runInternal())
             .catchError((error, StackTrace stackTrace) =>
                 _reporter.onError(options.compilationTarget, error, stackTrace))
             .whenComplete(() {
@@ -235,6 +233,17 @@
         }).then((_) {
           return !compilationFailed;
         });
+        if (options.verbose) {
+          var timings = StringBuffer();
+          computeTimings(setupDuration, timings);
+          logVerbose('$timings');
+        }
+        if (options.reportPrimaryMetrics || options.reportSecondaryMetrics) {
+          var metrics = StringBuffer();
+          collectMetrics(metrics);
+          logInfo('$metrics');
+        }
+        return success;
       });
 
   bool get onlyPerformGlobalTypeInference {
@@ -402,7 +411,6 @@
   // such caches in the compiler and get access to them through a
   // suitably maintained static reference to the current compiler.
   void clearState() {
-    clearStringTokenCanonicalizer();
     Selector.canonicalizedValues.clear();
 
     // The selector objects held in static fields must remain canonical.
@@ -414,8 +422,11 @@
   }
 
   JClosedWorld computeClosedWorld(Uri rootLibraryUri, Iterable<Uri> libraries) {
-    ResolutionEnqueuer resolutionEnqueuer = enqueuer.createResolutionEnqueuer();
+    ResolutionEnqueuer resolutionEnqueuer = frontendStrategy
+        .createResolutionEnqueuer(enqueueTask, this)
+      ..onEmptyForTesting = onResolutionQueueEmptyForTesting;
     if (retainDataForTesting) {
+      resolutionEnqueuerForTesting = resolutionEnqueuer;
       resolutionWorldBuilderForTesting = resolutionEnqueuer.worldBuilder;
     }
     frontendStrategy.onResolutionStart();
@@ -437,10 +448,6 @@
     // this until after the resolution queue is processed.
     deferredLoadTask.beforeResolution(rootLibraryUri, libraries);
 
-    impactStrategy = JavaScriptImpactStrategy(impactCacheDeleter, dumpInfoTask,
-        supportDeferredLoad: deferredLoadTask.isProgramSplit,
-        supportDumpInfo: options.dumpInfo);
-
     phase = PHASE_RESOLVING;
     resolutionEnqueuer.applyImpact(mainImpact);
     if (options.showInternalProgress) reporter.log('Computing closed world');
@@ -448,7 +455,6 @@
     processQueue(
         frontendStrategy.elementEnvironment, resolutionEnqueuer, mainFunction,
         onProgress: showResolutionProgress);
-    frontendStrategy.onResolutionEnd();
     resolutionEnqueuer.logSummary(reporter.log);
 
     _reporter.reportSuppressedMessagesSummary();
@@ -469,11 +475,8 @@
     _userCodeLocations
         .addAll(result.moduleLibraries.map((module) => CodeLocation(module)));
     selfTask.measureSubtask('runModularAnalysis', () {
-      impactStrategy = JavaScriptImpactStrategy(
-          impactCacheDeleter, dumpInfoTask,
-          supportDeferredLoad: true, supportDumpInfo: true);
       var included = result.moduleLibraries.toSet();
-      var elementMap = (frontendStrategy as KernelFrontendStrategy).elementMap;
+      var elementMap = frontendStrategy.elementMap;
       var moduleData = computeModuleData(result.component, included, options,
           reporter, environment, elementMap);
       if (compilationFailed) return;
@@ -500,8 +503,16 @@
         codegenResults.globalTypeInferenceResults;
     JClosedWorld closedWorld = globalInferenceResults.closedWorld;
     CodegenInputs codegenInputs = codegenResults.codegenInputs;
-    Enqueuer codegenEnqueuer = enqueuer.createCodegenEnqueuer(
-        closedWorld, globalInferenceResults, codegenInputs, codegenResults);
+    CodegenEnqueuer codegenEnqueuer = backendStrategy.createCodegenEnqueuer(
+        enqueueTask,
+        closedWorld,
+        globalInferenceResults,
+        codegenInputs,
+        codegenResults)
+      ..onEmptyForTesting = onCodegenQueueEmptyForTesting;
+    if (retainDataForTesting) {
+      codegenEnqueuerForTesting = codegenEnqueuer;
+    }
     _codegenWorldBuilder = codegenEnqueuer.worldBuilder;
 
     FunctionEntity mainFunction = closedWorld.elementEnvironment.mainFunction;
@@ -590,6 +601,11 @@
 
     KClosedWorld kClosedWorld = resolutionWorldBuilder.closeWorld(reporter);
     OutputUnitData result = deferredLoadTask.run(mainFunction, kClosedWorld);
+
+    // Impact data is no longer needed.
+    if (!retainDataForTesting) {
+      _impactCache.clear();
+    }
     JClosedWorld jClosedWorld =
         backendStrategy.createJClosedWorld(kClosedWorld, result);
     return jClosedWorld;
@@ -606,8 +622,7 @@
             work.element,
             () => selfTask.measureSubtask("applyImpact", () {
                   enqueuer.applyImpact(
-                      selfTask.measureSubtask("work.run", () => work.run()),
-                      impactSource: work.element);
+                      selfTask.measureSubtask("work.run", () => work.run()));
                 }));
       });
     });
@@ -618,7 +633,6 @@
       {void onProgress(Enqueuer enqueuer)}) {
     selfTask.measureSubtask("processQueue", () {
       enqueuer.open(
-          impactStrategy,
           mainMethod,
           elementEnvironment.libraries
               .map((LibraryEntity library) => library.canonicalUri));
@@ -626,9 +640,6 @@
       emptyQueue(enqueuer, onProgress: onProgress);
       enqueuer.queueIsClosed = true;
       enqueuer.close();
-      // Notify the impact strategy impacts are no longer needed for this
-      // enqueuer.
-      impactStrategy.onImpactUsed(enqueuer.impactUse);
       assert(compilationFailed ||
           enqueuer.checkNoEnqueuedInvokedInstanceMethods(elementEnvironment));
     });
@@ -653,7 +664,48 @@
   }
 
   void reportDiagnostic(DiagnosticMessage message,
-      List<DiagnosticMessage> infos, api.Diagnostic kind);
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
+    _reportDiagnosticMessage(message, kind);
+    for (DiagnosticMessage info in infos) {
+      _reportDiagnosticMessage(info, api.Diagnostic.INFO);
+    }
+  }
+
+  void _reportDiagnosticMessage(
+      DiagnosticMessage diagnosticMessage, api.Diagnostic kind) {
+    // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For
+    // instance in the [Types] constructor in typechecker.dart.
+    var span = diagnosticMessage.sourceSpan;
+    var message = diagnosticMessage.message;
+    if (span == null || span.uri == null) {
+      callUserHandler(message, null, null, null, '$message', kind);
+    } else {
+      callUserHandler(
+          message, span.uri, span.begin, span.end, '$message', kind);
+    }
+  }
+
+  void callUserHandler(Message message, Uri uri, int begin, int end,
+      String text, api.Diagnostic kind) {
+    try {
+      userHandlerTask.measure(() {
+        handler.report(message, uri, begin, end, text, kind);
+      });
+    } catch (ex, s) {
+      reportCrashInUserCode('Uncaught exception in diagnostic handler', ex, s);
+      rethrow;
+    }
+  }
+
+  Future<api.Input> callUserProvider(Uri uri, api.InputKind inputKind) {
+    try {
+      return userProviderTask
+          .measureIo(() => provider.readFromUri(uri, inputKind: inputKind));
+    } catch (ex, s) {
+      reportCrashInUserCode('Uncaught exception in input provider', ex, s);
+      rethrow;
+    }
+  }
 
   void reportCrashInUserCode(String message, exception, stackTrace) {
     reporter.onCrashInUserCode(message, exception, stackTrace);
@@ -726,7 +778,7 @@
   Uri getCanonicalUri(Entity element) {
     Uri libraryUri = _uriFromElement(element);
     if (libraryUri == null) return null;
-    if (libraryUri.scheme == 'package') {
+    if (libraryUri.isScheme('package')) {
       int slashPos = libraryUri.path.indexOf('/');
       if (slashPos != -1) {
         String packageName = libraryUri.path.substring(0, slashPos);
@@ -746,6 +798,89 @@
     }
     return null;
   }
+
+  void logInfo(String message) {
+    callUserHandler(null, null, null, null, message, api.Diagnostic.INFO);
+  }
+
+  void logVerbose(String message) {
+    callUserHandler(
+        null, null, null, null, message, api.Diagnostic.VERBOSE_INFO);
+  }
+
+  String _formatMs(int ms) {
+    return (ms / 1000).toStringAsFixed(3) + 's';
+  }
+
+  void computeTimings(Duration setupDuration, StringBuffer timings) {
+    timings.writeln("Timings:");
+    var totalDuration = measurer.elapsedWallClock;
+    var asyncDuration = measurer.elapsedAsyncWallClock;
+    var cumulatedDuration = Duration.zero;
+    var timingData = <_TimingData>[];
+    for (final task in tasks) {
+      var running = task.isRunning ? "*" : " ";
+      var duration = task.duration;
+      if (duration != Duration.zero) {
+        cumulatedDuration += duration;
+        var milliseconds = duration.inMilliseconds;
+        timingData.add(_TimingData('   $running${task.name}:', milliseconds,
+            milliseconds * 100 / totalDuration.inMilliseconds));
+        for (String subtask in task.subtasks) {
+          var subtime = task.getSubtaskTime(subtask);
+          var running = task.getSubtaskIsRunning(subtask) ? "*" : " ";
+          timingData.add(_TimingData('   $running${task.name} > $subtask:',
+              subtime, subtime * 100 / totalDuration.inMilliseconds));
+        }
+      }
+    }
+    int longestDescription = timingData
+        .map((d) => d.description.length)
+        .fold(0, (a, b) => a < b ? b : a);
+    for (var data in timingData) {
+      var ms = _formatMs(data.milliseconds);
+      var padding =
+          " " * (longestDescription + 10 - data.description.length - ms.length);
+      var percentPadding = data.percent < 10 ? " " : "";
+      timings.writeln('${data.description}$padding $ms '
+          '$percentPadding(${data.percent.toStringAsFixed(1)}%)');
+    }
+    var unaccountedDuration =
+        totalDuration - cumulatedDuration - setupDuration - asyncDuration;
+    var percent =
+        unaccountedDuration.inMilliseconds * 100 / totalDuration.inMilliseconds;
+    timings.write(
+        '    Total compile-time ${_formatMs(totalDuration.inMilliseconds)};'
+        ' setup ${_formatMs(setupDuration.inMilliseconds)};'
+        ' async ${_formatMs(asyncDuration.inMilliseconds)};'
+        ' unaccounted ${_formatMs(unaccountedDuration.inMilliseconds)}'
+        ' (${percent.toStringAsFixed(2)}%)');
+  }
+
+  void collectMetrics(StringBuffer buffer) {
+    buffer.writeln('Metrics:');
+    for (final task in tasks) {
+      var metrics = task.metrics;
+      var namespace = metrics.namespace;
+      if (namespace == '') {
+        namespace =
+            task.name.toLowerCase().replaceAll(RegExp(r'[^a-z0-9]+'), '_');
+      }
+      void report(Metric metric) {
+        buffer
+            .writeln('  ${namespace}.${metric.name}: ${metric.formatValue()}');
+      }
+
+      for (final metric in metrics.primary) {
+        report(metric);
+      }
+      if (options.reportSecondaryMetrics) {
+        for (final metric in metrics.secondary) {
+          report(metric);
+        }
+      }
+    }
+  }
 }
 
 class _CompilerOutput implements api.CompilerOutput {
@@ -830,14 +965,6 @@
     reportDiagnosticInternal(message, infos, api.Diagnostic.INFO);
   }
 
-  @deprecated
-  @override
-  void reportInfoMessage(Spannable node, MessageKind messageKind,
-      [Map<String, String> arguments = const {}]) {
-    reportDiagnosticInternal(createMessage(node, messageKind, arguments),
-        const <DiagnosticMessage>[], api.Diagnostic.INFO);
-  }
-
   void reportDiagnosticInternal(DiagnosticMessage message,
       List<DiagnosticMessage> infos, api.Diagnostic kind) {
     if (!options.showAllPackageWarnings &&
@@ -1066,28 +1193,12 @@
   }
 }
 
-class _MapImpactCacheDeleter implements ImpactCacheDeleter {
-  final Map<Entity, WorldImpact> _impactCache;
-  _MapImpactCacheDeleter(this._impactCache);
+class _TimingData {
+  final String description;
+  final int milliseconds;
+  final double percent;
 
-  @override
-  void uncacheWorldImpact(Entity element) {
-    if (retainDataForTesting) return;
-    _impactCache.remove(element);
-  }
-
-  @override
-  void emptyCache() {
-    if (retainDataForTesting) return;
-    _impactCache.clear();
-  }
-}
-
-class _EmptyEnvironment implements Environment {
-  const _EmptyEnvironment();
-
-  @override
-  Map<String, String> toMap() => const {};
+  _TimingData(this.description, this.milliseconds, this.percent);
 }
 
 /// Interface for showing progress during compilation.
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index 4c3a3e7..f50a56d 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -6,7 +6,7 @@
 /// compiled to JavaScript.
 library dart2js.constant_system;
 
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../elements/entities.dart';
 import '../elements/operators.dart';
 import '../elements/types.dart';
@@ -27,6 +27,7 @@
 const greater = GreaterOperation();
 const identity = IdentityOperation();
 const ifNull = IfNullOperation();
+const index = _IndexOperation();
 const lessEqual = LessEqualOperation();
 const less = LessOperation();
 const modulo = ModuloOperation();
@@ -990,6 +991,38 @@
   }
 }
 
+class _IndexOperation implements BinaryOperation {
+  @override
+  final String name = '[]';
+
+  const _IndexOperation();
+
+  @override
+  ConstantValue fold(ConstantValue left, ConstantValue right) {
+    if (left is ListConstantValue) {
+      if (right is IntConstantValue) {
+        List<ConstantValue> entries = left.entries;
+        if (right.isUInt32()) {
+          int index = right.intValue.toInt();
+          if (index >= 0 && index < entries.length) {
+            return entries[index];
+          }
+        }
+      }
+    }
+    if (left is MapConstantValue) {
+      ConstantValue value = left.lookup(right);
+      if (value != null) return value;
+      return const NullConstantValue();
+    }
+
+    return null;
+  }
+
+  @override
+  apply(left, right) => throw UnsupportedError('punned indexing');
+}
+
 class UnfoldedUnaryOperation implements UnaryOperation {
   @override
   final String name;
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 86abfd0..885a8bc 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -5,7 +5,7 @@
 library dart2js.constants.values;
 
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../deferred_load/output_unit.dart' show OutputUnit;
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index a57892b..11c2d38 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -11,7 +11,7 @@
 
 import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
 
-import '../compiler_new.dart' as api;
+import '../compiler.dart' as api;
 import 'commandline_options.dart';
 import 'options.dart' show CompilerOptions, FeatureOptions;
 import 'source_file_provider.dart';
@@ -1102,7 +1102,7 @@
 
 void writeString(Uri uri, String text) {
   if (!enableWriteString) return;
-  if (uri.scheme != 'file') {
+  if (!uri.isScheme('file')) {
     fail('Unhandled scheme ${uri.scheme}.');
   }
   var file = (File(uri.toFilePath())..createSync(recursive: true))
diff --git a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
index 4aca919..5e1b914 100644
--- a/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
+++ b/pkg/compiler/lib/src/deferred_load/algorithm_state.dart
@@ -11,7 +11,7 @@
 import '../compiler.dart' show Compiler;
 import '../elements/entities.dart';
 import '../kernel/element_map.dart';
-import '../world.dart' show KClosedWorld;
+import '../kernel/kernel_world.dart';
 
 /// Manages the state of the [EntityData] model. Every class, member, constant,
 /// etc, is wrapped in the deferred loading algorithm by an [EntityData] which
diff --git a/pkg/compiler/lib/src/deferred_load/deferred_load.dart b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
index a48f290..4a5af37 100644
--- a/pkg/compiler/lib/src/deferred_load/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load/deferred_load.dart
@@ -275,20 +275,19 @@
 import 'import_set.dart';
 import 'output_unit.dart';
 
-import '../../compiler_new.dart' show OutputType;
+import '../../compiler.dart' show OutputType;
+import '../common.dart';
+import '../common/elements.dart' show KElementEnvironment;
 import '../common/metrics.dart'
     show Metric, Metrics, CountMetric, DurationMetric;
 import '../common/tasks.dart' show CompilerTask;
-import '../common.dart';
-import '../common_elements.dart' show KElementEnvironment;
 import '../compiler.dart' show Compiler;
 import '../constants/values.dart' show ConstantValue;
 import '../elements/types.dart';
 import '../elements/entities.dart';
 import '../kernel/element_map.dart';
-import '../universe/world_impact.dart' show ImpactUseCase;
+import '../kernel/kernel_world.dart';
 import '../util/util.dart' show makeUnique;
-import '../world.dart' show KClosedWorld;
 
 class _DeferredLoadTaskMetrics implements Metrics {
   @override
@@ -325,8 +324,6 @@
   /// Will be `true` if the program contains deferred libraries.
   bool isProgramSplit = false;
 
-  static const ImpactUseCase IMPACT_USE = ImpactUseCase('Deferred load');
-
   /// A cache of the result of calling `computeImportDeferName` on the keys of
   /// this map.
   final Map<ImportEntity, String> importDeferName = {};
@@ -445,10 +442,6 @@
     }
 
     reporter.withCurrentElement(main.library, () => measure(work));
-
-    // Notify that we no longer need impacts for deferred load, so they can be
-    // discarded at this time.
-    compiler.impactStrategy.onImpactUsed(DeferredLoadTask.IMPACT_USE);
     return _buildResult();
   }
 
diff --git a/pkg/compiler/lib/src/deferred_load/entity_data_info.dart b/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
index f3d9ecc..6f6c33a 100644
--- a/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
+++ b/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
@@ -5,11 +5,10 @@
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
 
-import 'deferred_load.dart';
 import 'entity_data.dart';
 
 import '../common.dart';
-import '../common_elements.dart' show CommonElements, KElementEnvironment;
+import '../common/elements.dart' show CommonElements, KElementEnvironment;
 import '../compiler.dart' show Compiler;
 import '../constants/values.dart'
     show ConstantValue, ConstructedConstantValue, InstantiationConstantValue;
@@ -18,10 +17,9 @@
 import '../ir/util.dart';
 import '../kernel/kelements.dart' show KLocalFunction;
 import '../kernel/element_map.dart';
+import '../kernel/kernel_world.dart';
 import '../universe/use.dart';
-import '../universe/world_impact.dart'
-    show ImpactStrategy, WorldImpact, WorldImpactVisitorImpl;
-import '../world.dart' show KClosedWorld;
+import '../universe/world_impact.dart' show WorldImpact, WorldImpactVisitorImpl;
 
 /// [EntityDataInfo] is meta data about [EntityData] for a given compilation
 /// [Entity].
@@ -63,7 +61,6 @@
       this.closedWorld, this.elementMap, this.compiler, this.registry);
 
   Map<Entity, WorldImpact> get impactCache => compiler.impactCache;
-  ImpactStrategy get impactStrategy => compiler.impactStrategy;
   KElementEnvironment get elementEnvironment =>
       compiler.frontendStrategy.elementEnvironment;
   CommonElements get commonElements => compiler.frontendStrategy.commonElements;
@@ -242,20 +239,16 @@
   /// Extract any dependencies that are known from the impact of [element].
   void _addDependenciesFromImpact(MemberEntity element) {
     WorldImpact worldImpact = impactCache[element];
-    impactStrategy.visitImpact(
-        element,
-        worldImpact,
-        WorldImpactVisitorImpl(
-            visitStaticUse: (MemberEntity member, StaticUse staticUse) {
-          _addFromStaticUse(element, staticUse);
-        }, visitTypeUse: (MemberEntity member, TypeUse typeUse) {
-          _addFromTypeUse(element, typeUse);
-        }, visitDynamicUse: (MemberEntity member, DynamicUse dynamicUse) {
-          // TODO(johnniwinther): Use rti need data to skip unneeded type
-          // arguments.
-          addTypeListDependencies(dynamicUse.typeArguments);
-        }),
-        DeferredLoadTask.IMPACT_USE);
+    worldImpact.apply(WorldImpactVisitorImpl(
+        visitStaticUse: (MemberEntity member, StaticUse staticUse) {
+      _addFromStaticUse(element, staticUse);
+    }, visitTypeUse: (MemberEntity member, TypeUse typeUse) {
+      _addFromTypeUse(element, typeUse);
+    }, visitDynamicUse: (MemberEntity member, DynamicUse dynamicUse) {
+      // TODO(johnniwinther): Use rti need data to skip unneeded type
+      // arguments.
+      addTypeListDependencies(dynamicUse.typeArguments);
+    }));
   }
 }
 
diff --git a/pkg/compiler/lib/src/diagnostics/code_location.dart b/pkg/compiler/lib/src/diagnostics/code_location.dart
index 58bc177..515f359 100644
--- a/pkg/compiler/lib/src/diagnostics/code_location.dart
+++ b/pkg/compiler/lib/src/diagnostics/code_location.dart
@@ -18,7 +18,7 @@
   String relativize(Uri baseUri);
 
   factory CodeLocation(Uri uri) {
-    if (uri.scheme == 'package') {
+    if (uri.isScheme('package')) {
       int slashPos = uri.path.indexOf('/');
       if (slashPos != -1) {
         String packageName = uri.path.substring(0, slashPos);
@@ -42,7 +42,7 @@
 
   @override
   bool inSameLocation(Uri uri) {
-    return this.uri.scheme == uri.scheme;
+    return this.uri.isScheme(uri.scheme);
   }
 
   @override
@@ -62,7 +62,7 @@
 
   @override
   bool inSameLocation(Uri uri) {
-    return uri.scheme == 'package' && uri.path.startsWith('$packageName/');
+    return uri.isScheme('package') && uri.path.startsWith('$packageName/');
   }
 
   @override
diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
index b009473..c425106 100644
--- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
+++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
@@ -49,13 +49,14 @@
   void reportHint(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
+  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>[]]);
 
-  @deprecated
-  void reportInfoMessage(Spannable node, MessageKind errorCode,
-      [Map<String, String> arguments = const {}]);
-
   /// Set current element of this reporter to [element]. This is used for
   /// creating [SourceSpan] in [spanFromSpannable].
   withCurrentElement(Entity element, f());
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index ccbcbe5..06b64b7 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -11,12 +11,11 @@
 import 'package:dart2js_info/json_info_codec.dart';
 import 'package:dart2js_info/binary_serialization.dart' as dump_info;
 
-import '../compiler_new.dart';
-import 'backend_strategy.dart';
+import '../compiler.dart';
+import 'common.dart';
+import 'common/elements.dart' show JElementEnvironment;
 import 'common/names.dart';
 import 'common/tasks.dart' show CompilerTask;
-import 'common.dart';
-import 'common_elements.dart' show JElementEnvironment;
 import 'compiler.dart' show Compiler;
 import 'constants/values.dart' show ConstantValue, InterceptorConstantValue;
 import 'deferred_load/output_unit.dart' show OutputUnit, deferredPartFileName;
@@ -25,10 +24,10 @@
 import 'inferrer/types.dart'
     show GlobalTypeInferenceMemberResult, GlobalTypeInferenceResults;
 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 ImpactUseCase, WorldImpact, WorldImpactVisitorImpl;
+import 'universe/world_impact.dart' show WorldImpact, WorldImpactVisitorImpl;
 import 'util/sink_adapter.dart';
 import 'world.dart' show JClosedWorld;
 
@@ -370,7 +369,7 @@
     return _outputToInfo.putIfAbsent(outputUnit, () {
       // Dump-info currently only works with the full emitter. If another
       // emitter is used it will fail here.
-      BackendStrategy backendStrategy = compiler.backendStrategy;
+      JsBackendStrategy backendStrategy = compiler.backendStrategy;
       assert(outputUnit.name != null || outputUnit.isMainOutput);
       var filename = outputUnit.isMainOutput
           ? compiler.options.outputUri.pathSegments.last
@@ -427,7 +426,6 @@
 }
 
 class DumpInfoTask extends CompilerTask implements InfoReporter {
-  static const ImpactUseCase IMPACT_USE = ImpactUseCase('Dump info');
   final Compiler compiler;
   final bool useBinaryFormat;
 
@@ -493,20 +491,17 @@
     if (impact == null) return const <Selection>[];
 
     var selections = <Selection>[];
-    compiler.impactStrategy.visitImpact(
-        entity,
-        impact,
-        WorldImpactVisitorImpl(visitDynamicUse: (member, dynamicUse) {
-          AbstractValue mask = dynamicUse.receiverConstraint;
-          selections.addAll(closedWorld
-              // TODO(het): Handle `call` on `Closure` through
-              // `world.includesClosureCall`.
-              .locateMembers(dynamicUse.selector, mask)
-              .map((MemberEntity e) => Selection(e, mask)));
-        }, visitStaticUse: (member, staticUse) {
-          selections.add(Selection(staticUse.element, null));
-        }),
-        IMPACT_USE);
+    impact.apply(WorldImpactVisitorImpl(visitDynamicUse: (member, dynamicUse) {
+      AbstractValue mask = dynamicUse.receiverConstraint;
+      selections.addAll(closedWorld
+          // TODO(het): Handle `call` on `Closure` through
+          // `world.includesClosureCall`.
+          .locateMembers(dynamicUse.selector, mask)
+          .map((MemberEntity e) => Selection(e, mask)));
+    }, visitStaticUse: (member, staticUse) {
+      selections.add(Selection(staticUse.element, null));
+    }));
+    unregisterImpact(entity);
     return selections;
   }
 
@@ -666,9 +661,6 @@
       }
     }
 
-    // Notify the impact strategy impacts are no longer needed for dump info.
-    compiler.impactStrategy.onImpactUsed(IMPACT_USE);
-
     // Track dependencies that come from inlining.
     for (Entity entity in inlineMap.keys) {
       CodeInfo outerInfo = infoCollector._entityToInfo[entity];
diff --git a/pkg/compiler/lib/src/elements/entity_utils.dart b/pkg/compiler/lib/src/elements/entity_utils.dart
index 2942392..7e58133 100644
--- a/pkg/compiler/lib/src/elements/entity_utils.dart
+++ b/pkg/compiler/lib/src/elements/entity_utils.dart
@@ -19,17 +19,17 @@
   }
 
   // Order: platform < package < other.
-  if (a.scheme == 'dart') {
-    if (b.scheme == 'dart') return byCanonicalUriPath();
+  if (a.isScheme('dart')) {
+    if (b.isScheme('dart')) return byCanonicalUriPath();
     return -1;
   }
-  if (b.scheme == 'dart') return 1;
+  if (b.isScheme('dart')) return 1;
 
-  if (a.scheme == 'package') {
-    if (b.scheme == 'package') return byCanonicalUriPath();
+  if (a.isScheme('package')) {
+    if (b.isScheme('package')) return byCanonicalUriPath();
     return -1;
   }
-  if (b.scheme == 'package') return 1;
+  if (b.isScheme('package')) return 1;
 
   return _compareCanonicalUri(a, b);
 }
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 357a571..c93c535 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -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.
 
+import '../common/elements.dart';
 import '../common/names.dart';
-import '../common_elements.dart';
 import '../options.dart';
 import '../serialization/serialization.dart';
 import '../util/util.dart' show equalElements, equalSets, identicalElements;
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index 1de1c68..c95ad1b 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -6,22 +6,16 @@
 
 import 'dart:collection' show Queue;
 
-import 'common/codegen.dart';
+import 'common.dart';
+import 'common/elements.dart' show ElementEnvironment;
 import 'common/tasks.dart' show CompilerTask;
 import 'common/work.dart' show WorkItem;
-import 'common.dart';
-import 'common_elements.dart' show ElementEnvironment;
 import 'constants/values.dart';
-import 'compiler.dart' show Compiler;
 import 'elements/entities.dart';
 import 'elements/types.dart';
-import 'inferrer/types.dart';
 import 'js_backend/annotations.dart';
-import 'js_backend/backend.dart' show CodegenInputs;
-import 'js_backend/enqueuer.dart';
 import 'universe/member_usage.dart';
 import 'universe/resolution_world_builder.dart';
-import 'universe/world_builder.dart';
 import 'universe/use.dart'
     show
         ConstantUse,
@@ -30,93 +24,9 @@
         StaticUseKind,
         TypeUse,
         TypeUseKind;
-import 'universe/world_impact.dart'
-    show ImpactStrategy, ImpactUseCase, WorldImpact, WorldImpactVisitor;
+import 'universe/world_impact.dart' show WorldImpact, WorldImpactVisitor;
 import 'util/enumset.dart';
 import 'util/util.dart' show Setlet;
-import 'world.dart' show JClosedWorld;
-
-class EnqueueTask extends CompilerTask {
-  ResolutionEnqueuer resolutionEnqueuerForTesting;
-  bool _resolutionEnqueuerCreated = false;
-  CodegenEnqueuer codegenEnqueuerForTesting;
-  final Compiler compiler;
-
-  @override
-  String get name => 'Enqueue';
-
-  EnqueueTask(Compiler compiler)
-      : this.compiler = compiler,
-        super(compiler.measurer);
-
-  ResolutionEnqueuer createResolutionEnqueuer() {
-    assert(!_resolutionEnqueuerCreated);
-    _resolutionEnqueuerCreated = true;
-    ResolutionEnqueuer enqueuer = compiler.frontendStrategy
-        .createResolutionEnqueuer(this, compiler)
-      ..onEmptyForTesting = compiler.onResolutionQueueEmptyForTesting;
-    if (retainDataForTesting) {
-      resolutionEnqueuerForTesting = enqueuer;
-    }
-    return enqueuer;
-  }
-
-  Enqueuer createCodegenEnqueuer(
-      JClosedWorld closedWorld,
-      GlobalTypeInferenceResults globalInferenceResults,
-      CodegenInputs codegenInputs,
-      CodegenResults codegenResults) {
-    Enqueuer enqueuer = compiler.backendStrategy.createCodegenEnqueuer(this,
-        closedWorld, globalInferenceResults, codegenInputs, codegenResults)
-      ..onEmptyForTesting = compiler.onCodegenQueueEmptyForTesting;
-    if (retainDataForTesting) {
-      codegenEnqueuerForTesting = enqueuer;
-    }
-    return enqueuer;
-  }
-}
-
-abstract class Enqueuer {
-  /// If `true` the checking for unenqueued members is skipped. The current
-  /// implementation registers parameter usages as a side-effect so unit
-  /// testing of member usage we need to test both with and without the
-  /// enqueuer check.
-  // TODO(johnniwinther): [checkEnqueuerConsistency] should not have
-  // side-effects.
-  static bool skipEnqueuerCheckForTesting = false;
-
-  WorldBuilder get worldBuilder;
-
-  void open(ImpactStrategy impactStrategy, FunctionEntity mainMethod,
-      Iterable<Uri> libraries);
-  void close();
-
-  /// Returns [:true:] if this enqueuer is the resolution enqueuer.
-  bool get isResolutionQueue;
-
-  bool queueIsClosed;
-
-  bool get queueIsEmpty;
-
-  ImpactUseCase get impactUse;
-
-  void forEach(void f(WorkItem work));
-
-  /// Apply the [worldImpact] to this enqueuer. If the [impactSource] is
-  /// provided the impact strategy will remove it from the element impact cache,
-  /// if it is no longer needed.
-  void applyImpact(WorldImpact worldImpact, {var impactSource});
-  bool checkNoEnqueuedInvokedInstanceMethods(
-      ElementEnvironment elementEnvironment);
-
-  /// Check the enqueuer queue is empty or fail otherwise.
-  void checkQueueIsEmpty();
-  void logSummary(void log(String message));
-
-  Iterable<MemberEntity> get processedEntities;
-
-  Iterable<ClassEntity> get processedClasses;
-}
 
 abstract class EnqueuerListener {
   /// Called to instruct to the backend that [type] has been instantiated.
@@ -176,7 +86,40 @@
   void logSummary(void log(String message));
 }
 
-abstract class EnqueuerImpl extends Enqueuer {
+abstract class Enqueuer {
+  /// If `true` the checking for unenqueued members is skipped. The current
+  /// implementation registers parameter usages as a side-effect so unit
+  /// testing of member usage we need to test both with and without the
+  /// enqueuer check.
+  // TODO(johnniwinther): [checkEnqueuerConsistency] should not have
+  // side-effects.
+  static bool skipEnqueuerCheckForTesting = false;
+
+  WorldImpactVisitor get impactVisitor;
+
+  bool queueIsClosed;
+
+  bool get queueIsEmpty;
+
+  void forEach(void f(WorkItem work));
+
+  /// Apply the [worldImpact] to this enqueuer.
+  void applyImpact(WorldImpact worldImpact) {
+    if (worldImpact.isEmpty) return;
+    worldImpact.apply(impactVisitor);
+  }
+
+  bool checkNoEnqueuedInvokedInstanceMethods(
+      ElementEnvironment elementEnvironment);
+
+  /// Check the enqueuer queue is empty or fail otherwise.
+  void checkQueueIsEmpty();
+  void logSummary(void log(String message));
+
+  Iterable<MemberEntity> get processedEntities;
+
+  Iterable<ClassEntity> get directlyInstantiatedClasses;
+
   CompilerTask get task;
   void checkClass(ClassEntity cls);
   void processStaticUse(MemberEntity member, StaticUse staticUse);
@@ -185,23 +128,11 @@
   void processConstantUse(ConstantUse constantUse);
   EnqueuerListener get listener;
 
-  // TODO(johnniwinther): Initialize [_impactStrategy] to `null`.
-  ImpactStrategy _impactStrategy = const ImpactStrategy();
-
-  ImpactStrategy get impactStrategy => _impactStrategy;
-
-  @override
-  void open(ImpactStrategy impactStrategy, FunctionEntity mainMethod,
-      Iterable<Uri> libraries) {
-    _impactStrategy = impactStrategy;
+  void open(FunctionEntity mainMethod, Iterable<Uri> libraries) {
     listener.onQueueOpen(this, mainMethod, libraries);
   }
 
-  @override
   void close() {
-    // TODO(johnniwinther): Set [_impactStrategy] to `null` and [queueIsClosed]
-    // to `true` here.
-    _impactStrategy = const ImpactStrategy();
     listener.onQueueClosed();
   }
 
@@ -209,8 +140,7 @@
   bool checkEnqueuerConsistency(ElementEnvironment elementEnvironment) {
     task.measureSubtask('resolution.check', () {
       // Run through the classes and see if we need to enqueue more methods.
-      for (ClassEntity classElement
-          in worldBuilder.directlyInstantiatedClasses) {
+      for (ClassEntity classElement in directlyInstantiatedClasses) {
         for (ClassEntity currentClass = classElement;
             currentClass != null;
             currentClass = elementEnvironment.getSuperClass(currentClass)) {
@@ -223,9 +153,7 @@
 }
 
 /// [Enqueuer] which is specific to resolution.
-class ResolutionEnqueuer extends EnqueuerImpl {
-  static const ImpactUseCase IMPACT_USE = ImpactUseCase('ResolutionEnqueuer');
-
+class ResolutionEnqueuer extends Enqueuer {
   @override
   final CompilerTask task;
   final String name;
@@ -234,7 +162,7 @@
 
   final Set<ClassEntity> _recentClasses = Setlet<ClassEntity>();
   bool _recentConstants = false;
-  final ResolutionEnqueuerWorldBuilder _worldBuilder;
+  final ResolutionWorldBuilder worldBuilder;
   WorkItemBuilder _workItemBuilder;
   final DiagnosticReporter _reporter;
   final AnnotationsData _annotationsData;
@@ -242,7 +170,8 @@
   @override
   bool queueIsClosed = false;
 
-  WorldImpactVisitor _impactVisitor;
+  @override
+  WorldImpactVisitor impactVisitor;
 
   final Queue<WorkItem> _queue = Queue<WorkItem>();
 
@@ -251,13 +180,14 @@
   void Function() onEmptyForTesting;
 
   ResolutionEnqueuer(this.task, this._reporter, this.listener,
-      this._worldBuilder, this._workItemBuilder, this._annotationsData,
+      this.worldBuilder, this._workItemBuilder, this._annotationsData,
       [this.name = 'resolution enqueuer']) {
-    _impactVisitor = EnqueuerImplImpactVisitor(this);
+    impactVisitor = EnqueuerImpactVisitor(this);
   }
 
   @override
-  ResolutionWorldBuilder get worldBuilder => _worldBuilder;
+  Iterable<ClassEntity> get directlyInstantiatedClasses =>
+      worldBuilder.directlyInstantiatedClasses;
 
   @override
   bool get queueIsEmpty => _queue.isEmpty;
@@ -269,22 +199,12 @@
     }
   }
 
-  @override
-  Iterable<ClassEntity> get processedClasses => _worldBuilder.processedClasses;
-
-  @override
-  void applyImpact(WorldImpact worldImpact, {var impactSource}) {
-    if (worldImpact.isEmpty) return;
-    impactStrategy.visitImpact(
-        impactSource, worldImpact, _impactVisitor, impactUse);
-  }
-
   void _registerInstantiatedType(InterfaceType type,
       {ConstructorEntity constructor,
       bool nativeUsage = false,
       bool globalDependency = false}) {
     task.measureSubtask('resolution.typeUse', () {
-      _worldBuilder.registerTypeInstantiation(type, _applyClassUse,
+      worldBuilder.registerTypeInstantiation(type, _applyClassUse,
           constructor: constructor);
       listener.registerInstantiatedType(type,
           isGlobal: globalDependency, nativeUsage: nativeUsage);
@@ -300,7 +220,7 @@
 
   @override
   void checkClass(ClassEntity cls) {
-    _worldBuilder.processClassMembers(cls,
+    worldBuilder.processClassMembers(cls,
         (MemberEntity member, EnumSet<MemberUse> useSet) {
       if (useSet.isNotEmpty) {
         _reporter.internalError(member,
@@ -318,8 +238,7 @@
       _registerClosurizedMember(member);
     }
     if (useSet.contains(MemberUse.CLOSURIZE_STATIC)) {
-      applyImpact(listener.registerGetOfStaticFunction(),
-          impactSource: 'get of static function');
+      applyImpact(listener.registerGetOfStaticFunction());
     }
   }
 
@@ -327,32 +246,29 @@
   void _applyClassUse(ClassEntity cls, EnumSet<ClassUse> useSet) {
     if (useSet.contains(ClassUse.INSTANTIATED)) {
       _recentClasses.add(cls);
-      _worldBuilder.processClassMembers(cls, _applyMemberUse);
+      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),
-          impactSource: 'instantiated class');
+      applyImpact(listener.registerInstantiatedClass(cls));
     }
     if (useSet.contains(ClassUse.IMPLEMENTED)) {
-      applyImpact(listener.registerImplementedClass(cls),
-          impactSource: 'implemented class');
+      applyImpact(listener.registerImplementedClass(cls));
     }
   }
 
   @override
   void processDynamicUse(DynamicUse dynamicUse) {
     task.measureSubtask('resolution.dynamicUse', () {
-      _worldBuilder.registerDynamicUse(dynamicUse, _applyMemberUse);
+      worldBuilder.registerDynamicUse(dynamicUse, _applyMemberUse);
     });
   }
 
   @override
   void processConstantUse(ConstantUse constantUse) {
     task.measureSubtask('resolution.constantUse', () {
-      if (_worldBuilder.registerConstantUse(constantUse)) {
-        applyImpact(listener.registerUsedConstant(constantUse.value),
-            impactSource: 'constant use');
+      if (worldBuilder.registerConstantUse(constantUse)) {
+        applyImpact(listener.registerUsedConstant(constantUse.value));
         _recentConstants = true;
       }
     });
@@ -361,7 +277,7 @@
   @override
   void processStaticUse(MemberEntity member, StaticUse staticUse) {
     task.measureSubtask('resolution.staticUse', () {
-      _worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
+      worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
       // TODO(johnniwinther): Add `ResolutionWorldBuilder.registerConstructorUse`
       // for these:
       switch (staticUse.kind) {
@@ -410,7 +326,7 @@
         break;
       case TypeUseKind.TYPE_LITERAL:
         if (type is TypeVariableType) {
-          _worldBuilder.registerTypeVariableTypeLiteral(type);
+          worldBuilder.registerTypeVariableTypeLiteral(type);
         }
         break;
       case TypeUseKind.RTI_VALUE:
@@ -426,18 +342,17 @@
   }
 
   void _registerIsCheck(DartType type) {
-    _worldBuilder.registerIsCheck(type);
+    worldBuilder.registerIsCheck(type);
   }
 
   void _registerNamedTypeVariableNewRti(TypeVariableType type) {
-    _worldBuilder.registerNamedTypeVariableNewRti(type);
+    worldBuilder.registerNamedTypeVariableNewRti(type);
   }
 
   void _registerClosurizedMember(MemberEntity element) {
     assert(element.isInstanceMember);
-    applyImpact(listener.registerClosurizedMember(element),
-        impactSource: 'closurized member');
-    _worldBuilder.registerClosurizedMember(element);
+    applyImpact(listener.registerClosurizedMember(element));
+    worldBuilder.registerClosurizedMember(element);
   }
 
   void _forEach(void f(WorkItem work)) {
@@ -445,9 +360,9 @@
       while (_queue.isNotEmpty) {
         // TODO(johnniwinther): Find an optimal process order.
         WorkItem work = _queue.removeLast();
-        if (!_worldBuilder.isMemberProcessed(work.element)) {
+        if (!worldBuilder.isMemberProcessed(work.element)) {
           f(work);
-          _worldBuilder.registerProcessedMember(work.element);
+          worldBuilder.registerProcessedMember(work.element);
         }
       }
       List<ClassEntity> recents = _recentClasses.toList(growable: false);
@@ -479,14 +394,7 @@
   String toString() => 'Enqueuer($name)';
 
   @override
-  Iterable<MemberEntity> get processedEntities =>
-      _worldBuilder.processedMembers;
-
-  @override
-  ImpactUseCase get impactUse => IMPACT_USE;
-
-  @override
-  bool get isResolutionQueue => true;
+  Iterable<MemberEntity> get processedEntities => worldBuilder.processedMembers;
 
   @override
   void close() {
@@ -499,13 +407,13 @@
   /// Registers [entity] as processed by the resolution enqueuer. Used only for
   /// testing.
   void registerProcessedElementInternal(MemberEntity entity) {
-    _worldBuilder.registerProcessedMember(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;
+    if (worldBuilder.isMemberProcessed(entity)) return;
     WorkItem workItem = _workItemBuilder.createWorkItem(entity);
     if (workItem == null) return;
 
@@ -514,9 +422,8 @@
           entity, "Resolution work list is closed. Trying to add $entity.");
     }
 
-    applyImpact(listener.registerUsedElement(entity),
-        impactSource: 'used element');
-    _worldBuilder.registerUsedElement(entity);
+    applyImpact(listener.registerUsedElement(entity));
+    worldBuilder.registerUsedElement(entity);
     _queue.add(workItem);
   }
 
@@ -531,10 +438,10 @@
   }
 }
 
-class EnqueuerImplImpactVisitor implements WorldImpactVisitor {
-  final EnqueuerImpl enqueuer;
+class EnqueuerImpactVisitor implements WorldImpactVisitor {
+  final Enqueuer enqueuer;
 
-  EnqueuerImplImpactVisitor(this.enqueuer);
+  EnqueuerImpactVisitor(this.enqueuer);
 
   @override
   void visitDynamicUse(MemberEntity member, DynamicUse dynamicUse) {
diff --git a/pkg/compiler/lib/src/environment.dart b/pkg/compiler/lib/src/environment.dart
index efc2bb0..cb5fdbd 100644
--- a/pkg/compiler/lib/src/environment.dart
+++ b/pkg/compiler/lib/src/environment.dart
@@ -7,7 +7,10 @@
 /// Environment variables can be used in the user code in two ways. From
 /// conditional imports, and from `const String.fromEnvironment` and
 /// other similar constructors.
-abstract class Environment {
-  /// Returns the full environment as map.
-  Map<String, String> toMap();
+class Environment {
+  /// An immutable map of environment variables.
+  final Map<String, String> definitions;
+
+  Environment(Map<String, String> definitions)
+      : this.definitions = Map.unmodifiable(definitions);
 }
diff --git a/pkg/compiler/lib/src/frontend_strategy.dart b/pkg/compiler/lib/src/frontend_strategy.dart
deleted file mode 100644
index 423a69b..0000000
--- a/pkg/compiler/lib/src/frontend_strategy.dart
+++ /dev/null
@@ -1,79 +0,0 @@
-// 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.
-
-library dart2js.frontend_strategy;
-
-import 'common.dart';
-import 'common/tasks.dart';
-import 'common_elements.dart';
-import 'compiler.dart' show Compiler;
-import 'deferred_load/deferred_load.dart' show DeferredLoadTask;
-import 'elements/entities.dart';
-import 'enqueue.dart';
-import 'ir/modular.dart';
-import 'js_backend/native_data.dart';
-import 'js_backend/no_such_method_registry.dart';
-import 'kernel/loader.dart';
-import 'universe/world_impact.dart';
-
-/// Strategy pattern that defines the connection between the input format and
-/// the resolved element model.
-abstract class FrontendStrategy {
-  /// Registers a set of loaded libraries with this strategy.
-  void registerLoadedLibraries(KernelResult result);
-
-  void registerModuleData(List<ModuleData> data);
-
-  /// Returns the [ElementEnvironment] for the element model used in this
-  /// strategy.
-  ElementEnvironment get elementEnvironment;
-
-  /// Returns the [CommonElements] for the element model used in this
-  /// strategy.
-  CommonElements get commonElements;
-
-  NativeBasicData get nativeBasicData;
-
-  /// Creates a [DeferredLoadTask] for the element model used in this strategy.
-  DeferredLoadTask createDeferredLoadTask(Compiler compiler);
-
-  /// Support for classifying `noSuchMethod` implementations.
-  NoSuchMethodRegistry get noSuchMethodRegistry;
-
-  /// Called before processing of the resolution queue is started.
-  void onResolutionStart();
-
-  ResolutionEnqueuer createResolutionEnqueuer(
-      CompilerTask task, Compiler compiler);
-
-  /// Called when the resolution queue has been closed.
-  void onResolutionEnd();
-
-  /// Computes the main function from [mainLibrary] adding additional world
-  /// impact to [impactBuilder].
-  FunctionEntity computeMain(WorldImpactBuilder impactBuilder);
-
-  /// Creates a [SourceSpan] from [spannable] in context of [currentElement].
-  SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement);
-}
-
-/// Class that performs the mechanics to investigate annotations in the code.
-abstract class AnnotationProcessor {
-  void extractNativeAnnotations(LibraryEntity library);
-
-  void extractJsInteropAnnotations(LibraryEntity library);
-}
-
-/// Class that deletes the contents of an [WorldImpact] cache.
-// TODO(redemption): this can be deleted when we sunset the old front end.
-abstract class ImpactCacheDeleter {
-  /// Removes the [WorldImpact] for [element] from the resolution cache. Later
-  /// calls to [getWorldImpact] or [computeWorldImpact] returns an empty impact.
-  void uncacheWorldImpact(Entity element);
-
-  /// Removes the [WorldImpact]s for all [Element]s in the resolution cache. ,
-  /// Later calls to [getWorldImpact] or [computeWorldImpact] returns an empty
-  /// impact.
-  void emptyCache();
-}
diff --git a/pkg/compiler/lib/src/helpers/debug_collection.dart b/pkg/compiler/lib/src/helpers/debug_collection.dart
deleted file mode 100644
index de9a857e..0000000
--- a/pkg/compiler/lib/src/helpers/debug_collection.dart
+++ /dev/null
@@ -1,494 +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.
-
-typedef DebugCallback = void Function(
-    String methodName, dynamic arg1, dynamic arg2);
-
-class DebugMap<K, V> implements Map<K, V> {
-  final Map<K, V> sourceMap;
-  DebugCallback indexSetCallback;
-  DebugCallback putIfAbsentCallback;
-  DebugCallback removeCallback;
-
-  DebugMap(this.sourceMap, {DebugCallback addCallback, this.removeCallback}) {
-    if (addCallback != null) {
-      this.addCallback = addCallback;
-    }
-  }
-
-  void set addCallback(DebugCallback value) {
-    indexSetCallback = value;
-    putIfAbsentCallback = value;
-  }
-
-  @override
-  Map<RK, RV> cast<RK, RV>() => Map.castFrom<K, V, RK, RV>(this);
-  @override
-  bool containsValue(Object value) {
-    return sourceMap.containsValue(value);
-  }
-
-  @override
-  bool containsKey(Object key) => sourceMap.containsKey(key);
-
-  @override
-  V operator [](Object key) => sourceMap[key];
-
-  @override
-  void operator []=(K key, V value) {
-    if (indexSetCallback != null) {
-      indexSetCallback('[]=', key, value);
-    }
-    sourceMap[key] = value;
-  }
-
-  @override
-  V putIfAbsent(K key, V ifAbsent()) {
-    return sourceMap.putIfAbsent(key, () {
-      V v = ifAbsent();
-      if (putIfAbsentCallback != null) {
-        putIfAbsentCallback('putIfAbsent', key, v);
-      }
-      return v;
-    });
-  }
-
-  @override
-  void addAll(Map<K, V> other) => sourceMap.addAll(other);
-
-  @override
-  V remove(Object key) {
-    if (removeCallback != null) {
-      removeCallback('remove', key, sourceMap[key]);
-    }
-    return sourceMap.remove(key);
-  }
-
-  @override
-  void clear() {
-    if (removeCallback != null) {
-      removeCallback('clear', sourceMap, null);
-    }
-    sourceMap.clear();
-  }
-
-  @override
-  void forEach(void f(K key, V value)) => sourceMap.forEach(f);
-
-  @override
-  Iterable<K> get keys => sourceMap.keys;
-
-  @override
-  Iterable<V> get values => sourceMap.values;
-
-  @override
-  Iterable<MapEntry<K, V>> get entries => sourceMap.entries;
-
-  @override
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    sourceMap.addEntries(entries);
-  }
-
-  @override
-  Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> transform(K key, V value)) =>
-      sourceMap.map(transform);
-
-  @override
-  int get length => sourceMap.length;
-
-  @override
-  bool get isEmpty => sourceMap.isEmpty;
-
-  @override
-  bool get isNotEmpty => sourceMap.isNotEmpty;
-
-  @override
-  V update(K key, V update(V value), {V ifAbsent()}) =>
-      sourceMap.update(key, update, ifAbsent: ifAbsent);
-
-  @override
-  void updateAll(V update(K key, V value)) {
-    sourceMap.updateAll(update);
-  }
-
-  @override
-  void removeWhere(bool test(K key, V value)) {
-    sourceMap.removeWhere(test);
-  }
-}
-
-class DebugIterable<E> implements Iterable<E> {
-  final Iterable<E> iterable;
-
-  DebugIterable(this.iterable);
-
-  @override
-  Iterator<E> get iterator => iterable.iterator;
-
-  @override
-  Iterable<R> cast<R>() => Iterable.castFrom<E, R>(this);
-  @override
-  Iterable<T> map<T>(T f(E element)) => iterable.map(f);
-
-  @override
-  Iterable<E> where(bool test(E element)) => iterable.where(test);
-
-  @override
-  Iterable<T> expand<T>(Iterable<T> f(E element)) => iterable.expand(f);
-
-  @override
-  bool contains(Object element) => iterable.contains(element);
-
-  @override
-  void forEach(void f(E element)) => iterable.forEach(f);
-
-  @override
-  E reduce(E combine(E value, E element)) => iterable.reduce(combine);
-
-  @override
-  T fold<T>(T initialValue, T combine(T previousValue, E element)) {
-    return iterable.fold(initialValue, combine);
-  }
-
-  @override
-  bool every(bool test(E element)) => iterable.every(test);
-
-  @override
-  String join([String separator = ""]) => iterable.join(separator);
-
-  @override
-  bool any(bool test(E element)) => iterable.any(test);
-
-  @override
-  List<E> toList({bool growable = true}) {
-    return iterable.toList(growable: growable);
-  }
-
-  @override
-  Set<E> toSet() => iterable.toSet();
-
-  @override
-  int get length => iterable.length;
-
-  @override
-  bool get isEmpty => iterable.isEmpty;
-
-  @override
-  bool get isNotEmpty => iterable.isNotEmpty;
-
-  @override
-  Iterable<E> take(int n) => iterable.take(n);
-
-  @override
-  Iterable<E> takeWhile(bool test(E value)) => iterable.takeWhile(test);
-
-  @override
-  Iterable<E> skip(int n) => iterable.skip(n);
-
-  @override
-  Iterable<E> skipWhile(bool test(E value)) => iterable.skipWhile(test);
-
-  @override
-  E get first => iterable.first;
-
-  @override
-  E get last => iterable.last;
-
-  @override
-  E get single => iterable.single;
-
-  @override
-  E firstWhere(bool test(E element), {E orElse()}) {
-    return iterable.firstWhere(test, orElse: orElse);
-  }
-
-  @override
-  E lastWhere(bool test(E element), {E orElse()}) {
-    return iterable.lastWhere(test, orElse: orElse);
-  }
-
-  @override
-  E singleWhere(bool test(E element), {E orElse()}) =>
-      iterable.singleWhere(test, orElse: orElse);
-
-  @override
-  E elementAt(int index) => iterable.elementAt(index);
-
-  @override
-  Iterable<E> followedBy(Iterable<E> other) => iterable.followedBy(other);
-
-  @override
-  Iterable<T> whereType<T>() => iterable.whereType<T>();
-
-  @override
-  String toString() => iterable.toString();
-}
-
-class DebugList<E> extends DebugIterable<E> implements List<E> {
-  DebugCallback addCallback;
-  DebugCallback addAllCallback;
-
-  DebugList(List<E> list, {this.addCallback, this.addAllCallback})
-      : super(list);
-
-  List<E> get list => iterable;
-
-  @override
-  List<R> cast<R>() => List.castFrom<E, R>(this);
-  @override
-  List<E> operator +(List<E> other) => list + other;
-
-  @override
-  E operator [](int index) => list[index];
-
-  @override
-  void operator []=(int index, E value) {
-    list[index] = value;
-  }
-
-  @override
-  void set first(E element) {
-    list.first = element;
-  }
-
-  @override
-  void set last(E element) {
-    list.last = element;
-  }
-
-  @override
-  int get length => list.length;
-
-  @override
-  void set length(int newLength) {
-    list.length = newLength;
-  }
-
-  @override
-  void add(E value) {
-    if (addCallback != null) {
-      addCallback('add', value, null);
-    }
-    list.add(value);
-  }
-
-  @override
-  void addAll(Iterable<E> iterable) {
-    if (addAllCallback != null) {
-      addAllCallback('addAll', iterable, null);
-    }
-    list.addAll(iterable);
-  }
-
-  @override
-  Iterable<E> get reversed => list.reversed;
-
-  @override
-  void sort([int compare(E a, E b)]) => list.sort(compare);
-
-  @override
-  void shuffle([random]) => list.shuffle(random);
-
-  @override
-  int indexOf(E element, [int start = 0]) => list.indexOf(element, start);
-
-  @override
-  int indexWhere(bool test(E element), [int start = 0]) =>
-      list.indexWhere(test, start);
-
-  @override
-  int lastIndexOf(E element, [int start]) => list.lastIndexOf(element, start);
-
-  @override
-  int lastIndexWhere(bool test(E element), [int start]) =>
-      list.lastIndexWhere(test, start);
-
-  @override
-  void clear() => list.clear();
-
-  @override
-  void insert(int index, E element) => list.insert(index, element);
-
-  @override
-  void insertAll(int index, Iterable<E> iterable) {
-    list.insertAll(index, iterable);
-  }
-
-  @override
-  void setAll(int index, Iterable<E> iterable) => list.setAll(index, iterable);
-
-  @override
-  bool remove(Object value) => list.remove(value);
-
-  @override
-  E removeAt(int index) => list.removeAt(index);
-
-  @override
-  E removeLast() => list.removeLast();
-
-  @override
-  void removeWhere(bool test(E element)) => list.removeWhere(test);
-
-  @override
-  void retainWhere(bool test(E element)) => list.retainWhere(test);
-
-  @override
-  List<E> sublist(int start, [int end]) => list.sublist(start, end);
-
-  @override
-  Iterable<E> getRange(int start, int end) => list.getRange(start, end);
-
-  @override
-  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
-    list.setRange(start, end, iterable, skipCount);
-  }
-
-  @override
-  void removeRange(int start, int end) {
-    list.removeRange(start, end);
-  }
-
-  @override
-  void fillRange(int start, int end, [E fillValue]) {
-    list.fillRange(start, end, fillValue);
-  }
-
-  @override
-  void replaceRange(int start, int end, Iterable<E> replacement) {
-    list.replaceRange(start, end, replacement);
-  }
-
-  @override
-  Map<int, E> asMap() => list.asMap();
-}
-
-class DebugSet<E> extends DebugIterable<E> implements Set<E> {
-  DebugCallback addCallback;
-
-  DebugSet(Set<E> set, {this.addCallback}) : super(set);
-
-  Set<E> get set => iterable;
-
-  @override
-  Set<R> cast<R>() => Set.castFrom<E, R>(this);
-  @override
-  bool contains(Object value) => set.contains(value);
-
-  @override
-  bool add(E value) {
-    if (addCallback != null) {
-      addCallback('add', value, null);
-    }
-    return set.add(value);
-  }
-
-  @override
-  void addAll(Iterable<E> elements) {
-    elements.forEach(add);
-  }
-
-  @override
-  bool remove(Object value) => set.remove(value);
-
-  @override
-  E lookup(Object object) => set.lookup(object);
-
-  @override
-  void removeAll(Iterable<Object> elements) => set.removeAll(elements);
-
-  @override
-  void retainAll(Iterable<Object> elements) => set.retainAll(elements);
-
-  @override
-  void removeWhere(bool test(E element)) => set.removeWhere(test);
-
-  @override
-  void retainWhere(bool test(E element)) => set.retainWhere(test);
-
-  @override
-  bool containsAll(Iterable<Object> other) => set.containsAll(other);
-
-  @override
-  Set<E> intersection(Set<Object> other) => set.intersection(other);
-
-  @override
-  Set<E> union(Set<E> other) => set.union(other);
-
-  @override
-  Set<E> difference(Set<Object> other) => set.difference(other);
-
-  @override
-  void clear() => set.clear();
-
-  @override
-  Set<E> toSet() => set.toSet();
-}
-
-/// Throws an exception if the runtime type of [object] is not in
-/// [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of [object]
-/// at the call site by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-void assertType(String name, List<String> runtimeTypes, var object,
-    {bool showObjects = false}) {
-  String runtimeType = '${object.runtimeType}';
-  if (runtimeTypes != null && runtimeTypes.contains(runtimeType)) return;
-  throw '$name: $runtimeType'
-      '${showObjects ? ' ($object)' : ''}';
-}
-
-/// Callback for the [addCallback] of [DebugMap] that throws an exception if
-/// the runtime type of key/value pairs are not in [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of key/value
-/// pairs of a map by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-class MapTypeAsserter {
-  final String name;
-  final Map<String, List<String>> runtimeTypes;
-  final bool showObjects;
-
-  const MapTypeAsserter(this.name, this.runtimeTypes,
-      {bool this.showObjects = false});
-
-  void call(String methodName, var key, var value) {
-    check(key, value, '$methodName: ');
-  }
-
-  void check(var key, var value, [String text = '']) {
-    String keyType = '${key.runtimeType}';
-    String valueType = '${value.runtimeType}';
-    List<String> valuesTypes = runtimeTypes[keyType];
-    if (valuesTypes != null && valuesTypes.contains(valueType)) return;
-    throw '$name: $text$keyType => $valueType'
-        '${showObjects ? ' ($key => $value)' : ''}';
-  }
-}
-
-/// Callback for the [addCallback] of [DebugSet] or [DebugList]  that throws an
-/// exception if the runtime type of the elements are not in [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of the elements
-/// of a collection by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-class CollectionTypeAsserter {
-  final String name;
-  final List<String> runtimeTypes;
-  final bool showObjects;
-
-  const CollectionTypeAsserter(this.name, this.runtimeTypes,
-      {bool this.showObjects = false});
-
-  void call(String methodName, var element, _) {
-    check(element, '$methodName: ');
-  }
-
-  void check(var element, [String text = '']) {
-    String elementType = '${element.runtimeType}';
-    if (runtimeTypes.contains(elementType)) return;
-    throw '$name: $text$elementType'
-        '${showObjects ? ' ($element)' : ''}';
-  }
-}
diff --git a/pkg/compiler/lib/src/helpers/expensive_map.dart b/pkg/compiler/lib/src/helpers/expensive_map.dart
deleted file mode 100644
index 3161d64..0000000
--- a/pkg/compiler/lib/src/helpers/expensive_map.dart
+++ /dev/null
@@ -1,124 +0,0 @@
-// 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.
-
-import "dart:collection";
-
-/// The expensive map is a data structure useful for tracking down
-/// excessive memory usage due to large maps. It acts as an ordinary
-/// hash map, but it uses 10 times more memory (by default).
-class ExpensiveMap<K, V> extends MapBase<K, V> {
-  final List _maps;
-
-  ExpensiveMap([int copies = 10]) : _maps = List.filled(copies, null) {
-    assert(copies > 0);
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i] = Map<K, V>();
-    }
-  }
-
-  @override
-  int get length => _maps[0].length;
-  @override
-  bool get isEmpty => _maps[0].isEmpty;
-  @override
-  bool get isNotEmpty => _maps[0].isNotEmpty;
-
-  @override
-  Iterable<K> get keys => _maps[0].keys;
-  @override
-  Iterable<V> get values => _maps[0].values;
-
-  @override
-  bool containsKey(Object key) => _maps[0].containsKey(key);
-  @override
-  bool containsValue(Object value) => _maps[0].containsValue(value);
-
-  @override
-  V operator [](Object key) => _maps[0][key];
-
-  @override
-  void forEach(void action(K key, V value)) {
-    _maps[0].forEach(action);
-  }
-
-  @override
-  void operator []=(K key, V value) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i][key] = value;
-    }
-  }
-
-  @override
-  V putIfAbsent(K key, V ifAbsent()) {
-    if (containsKey(key)) return this[key];
-    V value = ifAbsent();
-    this[key] = value;
-    return value;
-  }
-
-  @override
-  void addAll(Map<K, V> other) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].addAll(other);
-    }
-  }
-
-  @override
-  V remove(Object key) {
-    V result = _maps[0].remove(key);
-    for (int i = 1; i < _maps.length; i++) {
-      _maps[i].remove(key);
-    }
-    return result;
-  }
-
-  @override
-  void clear() {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].clear();
-    }
-  }
-
-  @override
-  Map<KR, VR> cast<KR, VR>() => Map.castFrom<K, V, KR, VR>(this);
-  @override
-  Iterable<MapEntry<K, V>> get entries => _maps[0].entries;
-
-  @override
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].addEntries(entries);
-    }
-  }
-
-  @override
-  Map<KR, VR> map<KR, VR>(MapEntry<KR, VR> transform(K key, V value)) =>
-      _maps[0].map(transform);
-
-  @override
-  V update(K key, V update(V value), {V ifAbsent()}) {
-    V result;
-    for (int i = 0; i < _maps.length; i++) {
-      result = _maps[i].update(key, update, ifAbsent: ifAbsent);
-    }
-    return result;
-  }
-
-  @override
-  void updateAll(V update(K key, V value)) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].updateAll(update);
-    }
-  }
-
-  @override
-  void removeWhere(bool test(K key, V value)) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].removeWhere(test);
-    }
-  }
-
-  @override
-  String toString() => "expensive(${_maps[0]}x${_maps.length})";
-}
diff --git a/pkg/compiler/lib/src/helpers/expensive_set.dart b/pkg/compiler/lib/src/helpers/expensive_set.dart
deleted file mode 100644
index 80163cd..0000000
--- a/pkg/compiler/lib/src/helpers/expensive_set.dart
+++ /dev/null
@@ -1,152 +0,0 @@
-// 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.
-
-import 'dart:collection';
-
-/// The expensive set is a data structure useful for tracking down
-/// excessive memory usage due to large sets. It acts as an ordinary
-/// hash set, but it uses 10 times more memory (by default).
-class ExpensiveSet<E> extends SetBase<E> {
-  final List _sets;
-
-  ExpensiveSet([int copies = 10]) : _sets = List.filled(copies, null) {
-    assert(copies > 0);
-    for (int i = 0; i < _sets.length; i++) {
-      _sets[i] = Set<E>();
-    }
-  }
-
-  @override
-  int get length => _sets[0].length;
-  @override
-  bool get isEmpty => _sets[0].isEmpty;
-  @override
-  bool get isNotEmpty => _sets[0].isNotEmpty;
-
-  @override
-  Iterator<E> get iterator => _sets[0].iterator;
-
-  @override
-  bool contains(Object object) => _sets[0].contains(object);
-  @override
-  E lookup(Object object) => _sets[0].lookup(object);
-
-  @override
-  void forEach(void action(E element)) {
-    _sets[0].forEach(action);
-  }
-
-  @override
-  bool add(E element) {
-    bool result = _sets[0].add(element);
-    for (int i = 1; i < _sets.length; i++) {
-      _sets[i].add(element);
-    }
-    return result;
-  }
-
-  @override
-  void addAll(Iterable<E> objects) {
-    for (E each in objects) {
-      add(each);
-    }
-  }
-
-  @override
-  bool remove(Object object) {
-    bool result = _sets[0].remove(object);
-    for (int i = 1; i < _sets.length; i++) {
-      _sets[i].remove(object);
-    }
-    return result;
-  }
-
-  @override
-  void clear() {
-    for (int i = 0; i < _sets.length; i++) {
-      _sets[i].clear();
-    }
-  }
-
-  @override
-  void removeAll(Iterable<Object> objectsToRemove) {
-    for (var each in objectsToRemove) {
-      remove(each);
-    }
-  }
-
-  @override
-  void removeWhere(bool test(E element)) {
-    removeAll(this.toList().where((e) => test(e)));
-  }
-
-  @override
-  void retainWhere(bool test(E element)) {
-    removeAll(toList().where((e) => !test(e)));
-  }
-
-  @override
-  bool containsAll(Iterable<Object> other) {
-    for (Object object in other) {
-      if (!this.contains(object)) return false;
-    }
-    return true;
-  }
-
-  Set _newSet() => ExpensiveSet(_sets.length);
-
-  @override
-  Set<E> intersection(Set<Object> other) {
-    Set<E> result = _newSet();
-    if (other.length < this.length) {
-      for (var element in other) {
-        if (this.contains(element)) result.add(element);
-      }
-    } else {
-      for (E element in this) {
-        if (other.contains(element)) result.add(element);
-      }
-    }
-    return result;
-  }
-
-  @override
-  Set<E> union(Set<E> other) {
-    return _newSet()
-      ..addAll(this)
-      ..addAll(other);
-  }
-
-  @override
-  Set<E> difference(Set<Object> other) {
-    Set<E> result = _newSet();
-    for (E element in this) {
-      if (!other.contains(element)) result.add(element);
-    }
-    return result;
-  }
-
-  @override
-  void retainAll(Iterable objectsToRetain) {
-    Set retainSet;
-    if (objectsToRetain is Set) {
-      retainSet = objectsToRetain;
-    } else {
-      retainSet = objectsToRetain.toSet();
-    }
-    retainWhere(retainSet.contains);
-  }
-
-  @override
-  Set<E> toSet() {
-    var result = ExpensiveSet<E>(_sets.length);
-    for (int i = 0; i < _sets.length; i++) {
-      result._sets[i] = _sets[i].toSet();
-    }
-    return result;
-  }
-
-  @override
-  String toString() => "expensive(${_sets[0]}x${_sets.length})";
-}
diff --git a/pkg/compiler/lib/src/helpers/helpers.dart b/pkg/compiler/lib/src/helpers/helpers.dart
deleted file mode 100644
index 4661c1f..0000000
--- a/pkg/compiler/lib/src/helpers/helpers.dart
+++ /dev/null
@@ -1,145 +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.
-
-/// Library for debugging helpers. The unittest analyze_unused_test checks that
-/// the helper are not used in production code.
-
-library dart2js.helpers;
-
-import 'package:kernel/text/indentation.dart' show Indentation;
-
-import '../common.dart';
-import '../diagnostics/invariant.dart' show DEBUG_MODE;
-
-export 'debug_collection.dart';
-export 'expensive_map.dart';
-export 'expensive_set.dart';
-export 'stats.dart';
-export 'trace.dart';
-export 'track_map.dart';
-
-/// Global flag to enable [debugPrint]. This should always be `true` by default
-/// and be set to `false` as a means to temporarily turn off all debugging
-/// printouts.
-const bool DEBUG_PRINT_ENABLED = true;
-
-/// Enables debug mode.
-///
-/// Sets the [DEBUG_MODE] to `true`.
-void enableDebugMode() {
-  DEBUG_MODE = true;
-}
-
-class _DebugIndentation extends Indentation {
-  @override
-  final String indentationUnit = " ";
-}
-
-_DebugIndentation _indentation = _DebugIndentation();
-
-/// Function signature of [debugPrint].
-typedef DebugPrint = Function(dynamic s);
-
-/// If [DEBUG_PRINT_ENABLED] is `true` print [s] using the current indentation.
-DebugPrint get debugPrint {
-  enableDebugMode();
-  // TODO(johnniwinther): Maybe disable debug mode after the call.
-  return _debugPrint;
-}
-
-/// Implementation of [debugPrint].
-_debugPrint(s) {
-  if (DEBUG_PRINT_ENABLED) print('${_indentation.indentation}$s');
-}
-
-/// Function signature of [debugWrapPrint].
-typedef DebugWrapPrint = Function(dynamic s, Function() f);
-
-/// Wraps the call to [f] with a print of 'start:$s' and 'end:$s' incrementing
-/// the current indentation used by [debugPrint] during the execution of [f].
-///
-/// Use this to get a tree-like debug printout for nested calls.
-DebugWrapPrint get debugWrapPrint {
-  enableDebugMode();
-  return _debugWrapPrint;
-}
-
-/// Implementation of [debugWrapPrint].
-_debugWrapPrint(s, f()) {
-  debugPrint('start:$s');
-  var result = _indentation.indentBlock(f);
-  debugPrint('end:$s');
-  return result;
-}
-
-/// Dummy method to mark breakpoints.
-debugBreak() {
-  enableDebugMode();
-}
-
-/// Function signature of [reportHere].
-typedef ReportHere = Function(
-    DiagnosticReporter reporter, Spannable node, String debugMessage);
-
-/// Print a message with a source location.
-ReportHere get reportHere {
-  enableDebugMode();
-  return _reportHere;
-}
-
-/// Implementation of [reportHere]
-_reportHere(DiagnosticReporter reporter, Spannable node, String debugMessage) {
-  // ignore: deprecated_member_use_from_same_package
-  reporter.reportInfoMessage(
-      node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
-}
-
-/// Set of tracked objects used by [track] and [ifTracked].
-var _trackedObjects = Set<Object>();
-
-/// Global default value for the `printTrace` option of [track] and [ifTracked].
-bool trackWithTrace = false;
-
-/// If [doTrack] is `true`, add [object] to the set of tracked objects.
-///
-/// If tracked, [message] is printed along the hash code and toString of
-/// [object]. If [printTrace] is `true` a trace printed additionally.
-/// If [printTrace] is `null`, [trackWithTrace] determines whether a trace is
-/// printed.
-///
-/// [object] is returned as the result of the method.
-track(bool doTrack, Object object, String message, {bool printTrace}) {
-  if (!doTrack) return object;
-  _trackedObjects.add(object);
-  String msg = 'track: ${object.hashCode}:$object:$message';
-  if (printTrace == null) printTrace = trackWithTrace;
-  if (printTrace) {
-    trace(msg);
-  } else {
-    debugPrint(msg);
-  }
-  return object;
-}
-
-/// Returns `true` if [object] is in the set of tracked objects.
-///
-/// If [message] is provided it is printed along the hash code and toString of
-/// [object]. If [printTrace] is `true` a trace printed additionally. If
-/// [printTrace] is `null`, [trackWithTrace] determines whether a trace is
-/// printed.
-bool ifTracked(Object object, {String message, bool printTrace}) {
-  if (_trackedObjects.contains(object)) {
-    if (message != null) {
-      String msg = 'tracked: ${object.hashCode}:$object:$message';
-      if (printTrace == null) printTrace = trackWithTrace;
-      if (printTrace) {
-        trace(msg);
-      } else {
-        debugPrint(msg);
-      }
-    }
-    return true;
-  }
-  return false;
-}
diff --git a/pkg/compiler/lib/src/helpers/stats.dart b/pkg/compiler/lib/src/helpers/stats.dart
deleted file mode 100644
index 3459d74..0000000
--- a/pkg/compiler/lib/src/helpers/stats.dart
+++ /dev/null
@@ -1,813 +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.
-
-import 'dart:async' show EventSink;
-import 'dart:collection';
-import 'dart:convert';
-
-import 'package:kernel/text/indentation.dart' show Indentation;
-
-import '../../compiler.dart';
-import '../common.dart';
-import '../compiler.dart' show Compiler;
-import '../util/util.dart';
-
-// Helper methods for statistics.
-
-/// Current stats collector. Use [enableStatsOutput] to enable recording of
-/// stats.
-Stats get stats {
-  enableDebugMode();
-  if (_stats == null) {
-    _stats = const Stats();
-  }
-  return _stats;
-}
-
-Stats _stats;
-
-/// Enable recording of stats. Use [Stats.dumpStats] to output the record stats.
-///
-/// Pass the [outputProvider] of [Compiler] to generate stats into a separate
-/// file using [name] and [extension] for the filename. If omitted, stats are
-/// printed on standard out.
-///
-/// If [xml] is `true`, stats output is formatted as XML with a default
-/// extension of 'xml', otherwise the output is indented text with a default
-/// extension of 'log'.
-void enableStatsOutput(
-    {CompilerOutputProvider outputProvider,
-    bool xml = true,
-    String name = 'stats',
-    String extension,
-    int examples = 10}) {
-  if (_stats != null) {
-    throw StateError('Stats have already been initialized.');
-  }
-  enableDebugMode();
-
-  StatsOutput output;
-  if (outputProvider != null) {
-    if (extension == null) {
-      extension = xml ? 'xml' : 'log';
-    }
-    output = SinkOutput(outputProvider(name, extension));
-  } else {
-    output = const DebugOutput();
-  }
-  StatsPrinter printer;
-  if (xml) {
-    printer = XMLPrinter(output: output, examples: examples);
-  } else {
-    printer = ConsolePrinter(output: output, examples: examples);
-  }
-  _stats = ActiveStats(printer);
-}
-
-/// Interface for gathering and display of statistical information.
-/// This class serves as the noop collector.
-class Stats {
-  const Stats();
-
-  /// Registers [key], [value] pair in the map [id]. If [fromExisting] is
-  /// non-null and [key] already exists, the value associated with [key] will
-  /// be the return value of [fromExisting] when called with the existing value.
-  ///
-  /// The recorded information is not dumped automatically.
-  void recordMap(id, key, value, {fromExisting(value)}) {}
-
-  /// Returns the map [id] recorded with [recordMap].
-  Map getMap(id) => const {};
-
-  /// Registers [element] as an element of the list [id]. If provided, [data]
-  /// provides additional data for [element].
-  ///
-  /// The recorded information is dumped automatically on call to [dumpStats].
-  ///
-  /// Example:
-  ///   Calling [recordElement] like this:
-  ///     recordElement('foo', 'a', data: 'first-a-data');
-  ///     recordElement('foo', 'a', data: 'second-a-data');
-  ///     recordElement('foo', 'b');
-  ///     recordElement('bar', 'a', data: 'third-a-data');
-  ///     recordElement('bar', 'c');
-  ///   will result in a dump like this:
-  ///     foo: 2
-  ///      value=a data=second-a-data
-  ///      b
-  ///     bar: 2
-  ///      value=a data=third-a-data
-  ///      c
-  ///
-  void recordElement(id, element, {data}) {}
-
-  /// Returns the list [id] recorded with [recordElement].
-  Iterable getList(String id) => const [];
-
-  /// Registers [value] as an occurrence of [id]. If passed, [example] provides
-  /// an example data of the occurrence of [value].
-  ///
-  /// The recorded information is dumped automatically on call to [dumpStats].
-  ///
-  /// Example:
-  ///   Calling [recordFrequency] like this:
-  ///     recordFrequency('foo', 'a', 'first-a-data');
-  ///     recordFrequency('foo', 'a', 'second-a-data');
-  ///     recordFrequency('bar', 'b', 'first-b-data');
-  ///     recordFrequency('foo', 'c');
-  ///     recordFrequency('bar', 'b');
-  ///   will result in a dump like this:
-  ///     foo:
-  ///      a: 2
-  ///       first-a-data
-  ///       second-a-data
-  ///      c: 1
-  ///     bar:
-  ///      b: 2
-  ///       first-b-data
-  ///
-  void recordFrequency(id, value, [example]) {}
-
-  /// For each key/value pair in [map] the elements in the value are registered
-  /// as examples of occurrences of the key in [id].
-  void recordFrequencies(id, Map<dynamic, Iterable> map) {}
-
-  /// Returns the examples given for the occurrence of [value] for [id].
-  Iterable recordedFrequencies(id, value) => const [];
-
-  /// Increases the counter [id] by 1. If provided, [example] is used as an
-  /// example of the count and [data] provides additional information for
-  /// [example].
-  ///
-  /// The recorded information is dumped automatically on call to [dumpStats].
-  ///
-  /// Example:
-  ///   Calling [recordCounter] like this:
-  ///     recordCounter('foo', 'a');
-  ///     recordCounter('foo', 'a');
-  ///     recordCounter('foo', 'b');
-  ///     recordCounter('bar', 'c', 'first-c-data');
-  ///     recordCounter('bar', 'c', 'second-c-data');
-  ///     recordCounter('bar', 'd');
-  ///     recordCounter('bar', 'd');
-  ///     recordCounter('baz');
-  ///     recordCounter('baz');
-  ///   will result in a dump like this:
-  ///     foo: 3
-  ///      count=2 example=a
-  ///      count=1 example=b
-  ///     bar: 4
-  ///      count=2 examples=2
-  ///       c:
-  ///        first-c-data
-  ///        second-c-data
-  ///       d
-  ///     baz: 2
-  ///
-  void recordCounter(id, [example, data]) {}
-
-  /// Records the current stack trace under the key [id]. Only every
-  /// [sampleFrequency] call with the same id is recorded, and if omitted
-  /// [stackTraceSampleFrequency] is used.
-  void recordTrace(id, {int sampleFrequency}) {}
-
-  /// The default sample frequency used for recording stack traces.
-  int get stackTraceSampleFrequency => 0;
-
-  /// Set the default sample frequency used for recording stack traces.
-  void set stackTraceSampleFrequency(int value) {}
-
-  /// Dumps the stats for the recorded frequencies, sets, and counters. If
-  /// provided [beforeClose] is called before closing the dump output. This
-  /// can be used to include correlations on the collected data through
-  /// [dumpCorrelation].
-  void dumpStats({void beforeClose()}) {}
-
-  /// Prints the correlation between the elements of [a] and [b].
-  ///
-  /// Three sets are output using [idA] and [idB] as labels for the elements
-  /// [a] and [b]:
-  ///
-  ///   'idA && idB' lists the elements both in [a] and [b],
-  ///   '!idA && idB' lists the elements not in [a] but in [b], and
-  ///   'idA && !idB' lists the elements in [a] but not in [b].
-  ///
-  /// If [dataA] and/or [dataB] are provided, additional information on the
-  /// elements are looked up in [dataA] or [dataB] using [dataA] as the primary
-  /// source.
-  void dumpCorrelation(idA, Iterable a, idB, Iterable b,
-      {Map dataA, Map dataB}) {}
-}
-
-/// Interface for printing output data.
-///
-/// This class serves as the disabled output.
-class StatsOutput {
-  const StatsOutput();
-
-  /// Print [text] as on a separate line.
-  void println(String text) {}
-}
-
-/// Output to the [debugPrint] method.
-class DebugOutput implements StatsOutput {
-  const DebugOutput();
-
-  @override
-  void println(String text) => debugPrint(text);
-}
-
-/// Output to an [EventSink]. Used to output to a file through the
-/// [CompilerOutputProvider].
-class SinkOutput implements StatsOutput {
-  EventSink<String> sink;
-
-  SinkOutput(this.sink);
-
-  @override
-  void println(String text) {
-    sink.add(text);
-    sink.add('\n');
-  }
-}
-
-/// Interface for printing stats collected in [Stats].
-abstract class StatsPrinter {
-  /// The number of examples printer. If `null` all examples are printed.
-  int get examples => 0;
-
-  /// Start a group [id].
-  void start(String id) {}
-
-  /// Create a group [id] with content created by [createGroupContent].
-  void group(String id, void createGroupContent()) {
-    start(id);
-    createGroupContent();
-    end(id);
-  }
-
-  /// End a group [id].
-  void end(String id) {}
-
-  /// Start a stat entry for [id] with additional [data].
-  void open(String id, [Map<String, dynamic> data = const {}]) {}
-
-  /// Create a stat entry for [id] with additional [data] and content created by
-  /// [createChildContent].
-  void child(String id,
-      [Map<String, dynamic> data = const {}, void createChildContent()]) {
-    open(id, data);
-    if (createChildContent != null) createChildContent();
-    close(id);
-  }
-
-  /// End a stat entry for [id].
-  void close(String id) {}
-
-  /// Starts a group of additional information.
-  void beginExtra() {}
-
-  /// Starts a group of additional information.
-  void endExtra() {}
-}
-
-/// Abstract base class for [ConsolePrinter] and [XMLPrinter].
-abstract class BasePrinter extends StatsPrinter with Indentation {
-  @override
-  final int examples;
-  final StatsOutput output;
-
-  BasePrinter({this.output = const DebugOutput(), this.examples = 10}) {
-    indentationUnit = " ";
-  }
-}
-
-/// [StatsPrinter] that displays stats in console lines.
-class ConsolePrinter extends BasePrinter {
-  int extraLevel = 0;
-
-  ConsolePrinter({StatsOutput output = const DebugOutput(), int examples = 10})
-      : super(output: output, examples: examples);
-
-  @override
-  void open(String id, [Map<String, dynamic> data = const {}]) {
-    if (extraLevel > 0) return;
-
-    StringBuffer sb = StringBuffer();
-    sb.write(indentation);
-    String space = '';
-    if (data['title'] != null) {
-      sb.write('${data['title']}:');
-      space = ' ';
-      data.remove('title');
-    } else if (data['name'] != null) {
-      sb.write('${data['name']}');
-      space = ' ';
-      data.remove('name');
-    }
-    Iterable nonNullValues = data.values.where((v) => v != null);
-    if (nonNullValues.length == 1) {
-      sb.write('$space${nonNullValues.first}');
-    } else {
-      data.forEach((key, value) {
-        sb.write('$space$key=$value');
-        space = ' ';
-      });
-    }
-    output.println(sb.toString());
-    indentMore();
-  }
-
-  @override
-  void close(String id) {
-    if (extraLevel > 0) return;
-
-    indentLess();
-  }
-
-  @override
-  void beginExtra() {
-    if (extraLevel == 0) output.println('$indentation...');
-    extraLevel++;
-  }
-
-  @override
-  void endExtra() {
-    extraLevel--;
-  }
-}
-
-/// [StatsPrinter] that displays stats in XML format.
-class XMLPrinter extends BasePrinter {
-  static const HtmlEscape escape = HtmlEscape();
-  bool opened = false;
-
-  XMLPrinter({output = const DebugOutput(), int examples = 10})
-      : super(output: output, examples: examples);
-
-  @override
-  void start(String id) {
-    if (!opened) {
-      output.println('<?xml version="1.0" encoding="UTF-8"?>');
-      opened = true;
-    }
-    open(id);
-  }
-
-  @override
-  void end(String id) {
-    close(id);
-  }
-
-  @override
-  void open(String id, [Map<String, dynamic> data = const {}]) {
-    StringBuffer sb = StringBuffer();
-    sb.write(indentation);
-    sb.write('<$id');
-    data.forEach((key, value) {
-      if (value != null) {
-        sb.write(' $key="${escape.convert('$value')}"');
-      }
-    });
-    sb.write('>');
-    output.println(sb.toString());
-    indentMore();
-  }
-
-  @override
-  void close(String id) {
-    indentLess();
-    output.println('${indentation}</$id>');
-  }
-
-  @override
-  void beginExtra() {
-    open('extra');
-  }
-
-  @override
-  void endExtra() {
-    close('extra');
-  }
-}
-
-/// A node in a stack trace tree used to store and organize stack traces by
-/// common prefixes.
-class _StackTraceNode implements Comparable<_StackTraceNode> {
-  int count;
-  List<StackTraceLine> commonPrefix;
-  List<_StackTraceNode> subtraces;
-
-  _StackTraceNode(this.commonPrefix, this.count, this.subtraces);
-
-  _StackTraceNode.root() : this([], 0, []);
-
-  _StackTraceNode.leaf(StackTraceLines stackTrace)
-      : this(stackTrace.lines, 1, const []);
-
-  _StackTraceNode.node(List<StackTraceLine> commonPrefix, _StackTraceNode first,
-      _StackTraceNode second)
-      : this(commonPrefix, first.count + second.count, [first, second]);
-
-  void add(StackTraceLines stackTrace) {
-    count++;
-    if (!stackTrace.lines.isEmpty) {
-      addSubtrace(stackTrace);
-    }
-  }
-
-  void addSubtrace(StackTraceLines stackTrace) {
-    List<StackTraceLine> lines = stackTrace.lines;
-    for (_StackTraceNode subtrace in subtraces) {
-      int commonPrefixLength =
-          longestCommonPrefixLength(subtrace.commonPrefix, lines);
-      if (commonPrefixLength > 0) {
-        stackTrace = stackTrace.subtrace(commonPrefixLength);
-        if (commonPrefixLength == subtrace.commonPrefix.length) {
-          subtrace.add(stackTrace);
-        } else {
-          subtrace.commonPrefix =
-              subtrace.commonPrefix.sublist(commonPrefixLength);
-          subtraces.remove(subtrace);
-          subtraces.add(_StackTraceNode.node(
-              lines.sublist(0, commonPrefixLength),
-              subtrace,
-              _StackTraceNode.leaf(stackTrace)));
-        }
-        return;
-      }
-    }
-    subtraces.add(_StackTraceNode.leaf(stackTrace));
-  }
-
-  void dumpTraces(StatsPrinter printer) {
-    printer.open('trace', {'count': count, 'line': commonPrefix.first});
-    if (commonPrefix.length > 1) {
-      for (StackTraceLine line in commonPrefix.skip(1)) {
-        printer.child('trace', {'line': line});
-      }
-    }
-    dumpSubtraces(printer);
-    printer.close('trace');
-  }
-
-  void dumpSubtraces(StatsPrinter printer) {
-    if (!subtraces.isEmpty) {
-      subtraces.sort();
-      for (_StackTraceNode step in subtraces) {
-        step.dumpTraces(printer);
-      }
-    }
-  }
-
-  @override
-  int compareTo(_StackTraceNode other) {
-    // Sorts in decreasing count order.
-    return other.count - count;
-  }
-
-  void printOn(StringBuffer sb, String indentation) {
-    String countText = '$indentation$count  ';
-    sb.write(countText);
-    sb.write('\n');
-    indentation = ''.padLeft(countText.length, ' ');
-    if (commonPrefix != null) {
-      int index = 0;
-      for (StackTraceLine line in commonPrefix) {
-        sb.write(indentation);
-        if (index > 1) {
-          sb.write('...\n');
-          break;
-        }
-        sb.write(line);
-        sb.write('\n');
-        index++;
-      }
-    }
-    subtraces.sort();
-    for (_StackTraceNode subtrace in subtraces) {
-      subtrace.printOn(sb, indentation);
-    }
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = StringBuffer();
-    printOn(sb, '');
-    return sb.toString();
-  }
-}
-
-class _StackTraceTree extends _StackTraceNode {
-  final id;
-  int totalCount = 0;
-  final int sampleFrequency;
-
-  _StackTraceTree(this.id, this.sampleFrequency) : super.root();
-
-  @override
-  void dumpTraces(StatsPrinter printer) {
-    printer.open('trace', {
-      'id': id,
-      'totalCount': totalCount,
-      'sampleFrequency': sampleFrequency
-    });
-    dumpSubtraces(printer);
-    printer.close('trace');
-  }
-
-  void sample() {
-    if (totalCount++ % sampleFrequency == 0) {
-      add(stackTrace(offset: 3));
-    }
-  }
-}
-
-/// Actual implementation of [Stats].
-class ActiveStats implements Stats {
-  final StatsPrinter printer;
-  Map<dynamic, Map> maps = {};
-  Map<dynamic, Map<dynamic, List>> frequencyMaps = {};
-  Map<dynamic, Map> setsMap = {};
-  Map<dynamic, Map<dynamic, List>> countersMap = {};
-  Map<dynamic, _StackTraceTree> traceMap = {};
-  @override
-  int stackTraceSampleFrequency = 1;
-
-  ActiveStats(StatsPrinter this.printer);
-
-  @override
-  void recordMap(id, key, value, {fromExisting(value)}) {
-    Map map = maps.putIfAbsent(id, () => {});
-    if (fromExisting != null && map.containsKey(key)) {
-      map[key] = fromExisting(map[key]);
-    } else {
-      map[key] = value;
-    }
-  }
-
-  @override
-  Map getMap(key) {
-    return maps[key];
-  }
-
-  @override
-  void recordFrequency(id, value, [example]) {
-    Map<dynamic, List> map = frequencyMaps.putIfAbsent(id, () => {});
-    map.putIfAbsent(value, () => []);
-    map[value].add(example);
-  }
-
-  @override
-  void recordFrequencies(id, Map<dynamic, Iterable> frequencyMap) {
-    Map<dynamic, List> map = frequencyMaps.putIfAbsent(id, () => {});
-    frequencyMap.forEach((value, examples) {
-      map.putIfAbsent(value, () => []);
-      map[value].addAll(examples);
-    });
-  }
-
-  @override
-  Iterable recordedFrequencies(id, value) {
-    Map<dynamic, List> map = frequencyMaps[id];
-    if (map == null) return const [];
-    List list = map[value];
-    if (list == null) return const [];
-    return list;
-  }
-
-  @override
-  void recordCounter(id, [reason, example]) {
-    Map<dynamic, List> map = countersMap.putIfAbsent(id, () => {});
-    map.putIfAbsent(reason, () => []).add(example);
-  }
-
-  @override
-  void recordElement(key, element, {data}) {
-    setsMap.putIfAbsent(key, () => Map())[element] = data;
-  }
-
-  @override
-  void recordTrace(key, {int sampleFrequency}) {
-    if (sampleFrequency == null) {
-      sampleFrequency = stackTraceSampleFrequency;
-    }
-    traceMap
-        .putIfAbsent(key, () => _StackTraceTree(key, sampleFrequency))
-        .sample();
-  }
-
-  @override
-  Iterable getList(String key) {
-    Map map = setsMap[key];
-    if (map == null) return const [];
-    return map.keys;
-  }
-
-  @override
-  void dumpStats({void beforeClose()}) {
-    printer.start('stats');
-    dumpFrequencies();
-    dumpSets();
-    dumpCounters();
-    dumpTraces();
-    if (beforeClose != null) {
-      beforeClose();
-    }
-    printer.end('stats');
-  }
-
-  void dumpSets() {
-    printer.group('sets', () {
-      setsMap.forEach((k, set) {
-        dumpIterable('examples', '$k', set.keys,
-            limit: printer.examples, dataMap: set);
-      });
-    });
-  }
-
-  void dumpFrequencies() {
-    printer.group('frequencies', () {
-      frequencyMaps.forEach((key, Map<dynamic, List> map) {
-        printer.child('frequency', {'title': '$key'}, () {
-          dumpFrequency(map);
-        });
-      });
-    });
-  }
-
-  void dumpFrequency(Map<dynamic, Iterable> map) {
-    Map sortedMap = trySortMap(map);
-    sortedMap.forEach((k, list) {
-      dumpIterable('examples', '$k', list, limit: printer.examples);
-    });
-  }
-
-  void dumpCounters() {
-    printer.group('counters', () {
-      countersMap.keys.forEach(dumpCounter);
-    });
-  }
-
-  void dumpCounter(id) {
-    Map<dynamic, List> map = countersMap[id];
-    bool hasData(example) {
-      if (map == null) return false;
-      List list = map[example];
-      if (list == null) return false;
-      return list.any((data) => data != null);
-    }
-
-    int count = 0;
-    Map<dynamic, int> frequencyMap = {};
-    map.forEach((var category, List examples) {
-      if (category != null) {
-        frequencyMap.putIfAbsent(category, () => 0);
-        frequencyMap[category] += examples.length;
-      }
-      count += examples.length;
-    });
-    Map<int, Set> result = sortMap(inverseMap(frequencyMap), (a, b) => b - a);
-    int examplesLimit = null;
-    if (printer.examples != null && result.length >= printer.examples) {
-      examplesLimit = 0;
-    }
-    int counter = 0;
-    bool hasMore = false;
-    printer.open('counter', {'title': '$id', 'count': count});
-    result.forEach((int count, Set examples) {
-      if (counter == printer.examples) {
-        printer.beginExtra();
-        hasMore = true;
-      }
-      if (examples.length == 1 &&
-          (examplesLimit == 0 || !hasData(examples.first))) {
-        printer.child('examples', {'count': count, 'example': examples.first});
-      } else {
-        printer.child('examples', {'count': count, 'examples': examples.length},
-            () {
-          examples.forEach((example) {
-            dumpIterable('examples', '$example', map[example],
-                limit: examplesLimit, includeCount: false);
-          });
-        });
-      }
-      counter++;
-    });
-    if (hasMore) {
-      printer.endExtra();
-    }
-    printer.close('counter');
-  }
-
-  void dumpTraces() {
-    printer.group('traces', () {
-      traceMap.keys.forEach(dumpTrace);
-    });
-  }
-
-  void dumpTrace(key) {
-    _StackTraceTree tree = traceMap[key];
-    tree.dumpTraces(printer);
-  }
-
-  @override
-  void dumpCorrelation(keyA, Iterable a, keyB, Iterable b,
-      {Map dataA, Map dataB}) {
-    printer.child('correlations', {'title': '$keyA vs $keyB'}, () {
-      List aAndB = a.where((e) => e != null && b.contains(e)).toList();
-      List aAndNotB = a.where((e) => e != null && !b.contains(e)).toList();
-      List notAandB = b.where((e) => e != null && !a.contains(e)).toList();
-      dumpIterable('correlation', '$keyA && $keyB', aAndB,
-          dataMap: dataA, limit: printer.examples);
-      dumpIterable('correlation', '$keyA && !$keyB', aAndNotB,
-          dataMap: dataA, limit: printer.examples);
-      dumpIterable('correlation', '!$keyA && $keyB', notAandB,
-          dataMap: dataB, limit: printer.examples);
-    });
-  }
-
-  void dumpIterable(String tag, String title, Iterable iterable,
-      {int limit, Map dataMap, bool includeCount = true}) {
-    if (limit == 0) return;
-
-    Map<String, dynamic> childData = {};
-    Iterable nonNullIterable = iterable.where((e) => e != null);
-    if (nonNullIterable.isEmpty && !includeCount) {
-      childData['name'] = title;
-    } else {
-      childData['title'] = title;
-    }
-    if (includeCount) {
-      childData['count'] = iterable.length;
-    }
-    printer.child(tag, childData, () {
-      bool hasMore = false;
-      int counter = 0;
-      nonNullIterable.forEach((element) {
-        if (counter == limit) {
-          printer.beginExtra();
-          hasMore = true;
-        }
-        var data = dataMap != null ? dataMap[element] : null;
-        if (data != null) {
-          printer.child('example', {'value': element, 'data': data});
-        } else {
-          printer.child('example', {'value': element});
-        }
-        counter++;
-      });
-      if (hasMore) {
-        printer.endExtra();
-      }
-    });
-  }
-}
-
-/// Returns a map that is an inversion of [map], where the keys are the values
-/// of [map] and the values are the set of keys in [map] that share values.
-///
-/// If [equals] and [hashCode] are provided, these are used to determine
-/// equality among the values of [map].
-///
-/// If [isValidKey] is provided, this is used to determine with a value of [map]
-/// is a potential key of the inversion map.
-Map<V, Set<K>> inverseMap<K, V>(Map<K, V> map,
-    {bool equals(V key1, V key2),
-    int hashCode(V key),
-    bool isValidKey(V potentialKey)}) {
-  Map<V, Set<K>> result = LinkedHashMap<V, Set<K>>(
-      equals: equals, hashCode: hashCode, isValidKey: isValidKey);
-  map.forEach((k, v) {
-    if (isValidKey == null || isValidKey(v)) {
-      result.putIfAbsent(v, () => Set()).add(k);
-    }
-  });
-  return result;
-}
-
-/// Return a new map heuristically sorted by the keys of [map]. If the first
-/// key of [map] is [Comparable], the keys are sorted using [sortMap] under
-/// the assumption that all keys are [Comparable].
-/// Otherwise, the keys are sorted as string using their `toString`
-/// representation.
-Map<K, V> trySortMap<K, V>(Map<K, V> map) {
-  Iterable<K> iterable = map.keys.where((K k) => k != null);
-  if (iterable.isEmpty) return map;
-  var key = iterable.first;
-  if (key is Comparable<K>) {
-    return sortMap(map);
-  }
-  return sortMap(map, (a, b) => '$a'.compareTo('$b'));
-}
-
-/// Returns a new map in which the keys of [map] are sorted using [compare].
-/// If [compare] is null, the keys must be [Comparable].
-Map<K, V> sortMap<K, V>(Map<K, V> map, [int compare(K a, K b)]) {
-  List<K> keys = map.keys.toList();
-  keys.sort(compare);
-  Map<K, V> sortedMap = {};
-  keys.forEach((K k) => sortedMap[k] = map[k]);
-  return sortedMap;
-}
diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart
deleted file mode 100644
index ff168df..0000000
--- a/pkg/compiler/lib/src/helpers/trace.dart
+++ /dev/null
@@ -1,349 +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.
-
-import '../common.dart';
-import '../util/util.dart';
-
-/// Function signature for [trace].
-typedef Trace = void Function(String message,
-    {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
-
-/// Helper method for printing stack traces for debugging.
-///
-/// [message] is printed as the header of the stack trace.
-///
-/// If [condition] is provided, the stack trace is only printed if [condition]
-/// returns [:true:] on the stack trace text. This can be used to filter the
-/// printed stack traces based on their content. For instance only print stack
-/// traces that contain specific paths.
-///
-/// If [limit] is provided, the stack trace is limited to [limit] entries.
-///
-/// If [throwOnPrint] is `true`, [message] will be thrown after the stack trace
-/// has been printed. Together with [condition] this can be used to discover
-/// unknown call-sites in tests by filtering known call-sites and throwning
-/// otherwise.
-Trace get trace {
-  enableDebugMode();
-  return _trace;
-}
-
-void _trace(String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
-  try {
-    throw '';
-  } catch (e, s) {
-    String stackTrace;
-    try {
-      stackTrace = prettifyStackTrace(s,
-          rangeStart: 1, rangeEnd: limit, filePrefix: stackTraceFilePrefix);
-    } catch (e) {
-      print(e);
-      stackTrace = '$s';
-    }
-    if (condition != null) {
-      if (!condition(stackTrace)) return;
-    }
-    print('$message\n$stackTrace');
-    if (throwOnPrint) throw message;
-  }
-}
-
-/// Creates a function to use as an `condition` argument in [trace] that filters
-/// stack traces that contains any of the [exceptions].
-traceExceptions(List<String> exceptions) {
-  return (String stackTrace) => !exceptions.any(stackTrace.contains);
-}
-
-/// Function signature of [traceAndReport].
-typedef TraceAndReport = void Function(
-    DiagnosticReporter reporter, Spannable node, String message,
-    {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
-
-/// Calls [reportHere] and [trace] with the same message.
-TraceAndReport get traceAndReport {
-  enableDebugMode();
-  return _traceAndReport;
-}
-
-/// Calls [reportHere] and [trace] with the same message.
-TraceAndReport get reportAndTrace => traceAndReport;
-
-/// Implementation of [traceAndReport].
-void _traceAndReport(
-    DiagnosticReporter reporter, Spannable node, String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
-  trace(message, limit: limit, throwOnPrint: throwOnPrint,
-      condition: (String stackTrace) {
-    bool result = condition != null ? condition(stackTrace) : true;
-    if (result) {
-      reportHere(reporter, node, message);
-    }
-    return result;
-  });
-}
-
-/// Returns the [StackTraceLines] for the current call stack.
-///
-/// Use [offset] to discard the first [offset] calls of the call stack. Defaults
-/// to `1`, that is, discard the call to [stackTrace] itself. Use [limit] to
-/// limit the length of the stack trace lines.
-StackTraceLines stackTrace({int offset = 1, int limit = null}) {
-  int rangeStart = offset;
-  int rangeEnd = limit == null ? null : rangeStart + limit;
-  try {
-    throw '';
-  } catch (_, stackTrace) {
-    return StackTraceLines.fromTrace(stackTrace,
-        rangeStart: offset,
-        rangeEnd: rangeEnd,
-        filePrefix: stackTraceFilePrefix);
-  }
-}
-
-/// A stack trace as a sequence of [StackTraceLine]s.
-class StackTraceLines {
-  final List<StackTraceLine> lines;
-  final int maxFileLength;
-  final int maxLineNoLength;
-  final int maxColumnNoLength;
-
-  factory StackTraceLines.fromTrace(StackTrace s,
-      {int rangeStart, int rangeEnd, String filePrefix, String lambda = r'?'}) {
-    final RegExp indexPattern = RegExp(r'#\d+\s*');
-    int index = -1;
-    int maxFileLength = 0;
-    int maxLineNoLength = 0;
-    int maxColumnNoLength = 0;
-
-    String stackTrace = '$s';
-    List<StackTraceLine> lines = [];
-    // Parse each line in the stack trace. The supported line formats from the
-    // Dart VM are:
-    //    #n     <method-name> (<uri>:<line-no>:<column-no>)
-    //    #n     <method-name> (<uri>:<line-no>)
-    //    #n     <method-name> (<uri>)
-    // in which '<anonymous closure>' is the name used for an (unnamed) function
-    // expression. The last case is used for async bodies.
-    for (String line in stackTrace.split('\n')) {
-      try {
-        index++;
-        if (rangeStart != null && index < rangeStart) continue;
-        if (rangeEnd != null && index > rangeEnd) break;
-        if (line.isEmpty) continue;
-
-        // Strip index.
-        line = line.replaceFirst(indexPattern, '');
-        if (line == '<asynchronous suspension>') {
-          lines.add(StackTraceLine(index, '', '', '', line));
-          continue;
-        }
-
-        int leftParenPos = line.indexOf('(');
-        int rightParenPos = line.indexOf(')', leftParenPos);
-        int lastColon = line.lastIndexOf(':', rightParenPos);
-        int nextToLastColon = line.lastIndexOf(':', lastColon - 1);
-
-        String lineNo;
-        String columnNo;
-        if (nextToLastColon != -1) {
-          lineNo = line.substring(nextToLastColon + 1, lastColon);
-          columnNo = line.substring(lastColon + 1, rightParenPos);
-          try {
-            int.parse(columnNo);
-            try {
-              int.parse(lineNo);
-            } on FormatException {
-              // Only line number.
-              lineNo = columnNo;
-              columnNo = '';
-              nextToLastColon = lastColon;
-            }
-          } on FormatException {
-            // No column number nor line number.
-            lineNo = '';
-            columnNo = '';
-            nextToLastColon = rightParenPos;
-          }
-        } else {
-          lineNo = line.substring(lastColon + 1, rightParenPos);
-          columnNo = '';
-          try {
-            int.parse(lineNo);
-            nextToLastColon = lastColon;
-          } on FormatException {
-            // No column number nor line number.
-            lineNo = columnNo;
-            columnNo = '';
-            nextToLastColon = rightParenPos;
-          }
-        }
-
-        if (lineNo.length > maxLineNoLength) {
-          maxLineNoLength = lineNo.length;
-        }
-        if (columnNo.length > maxColumnNoLength) {
-          maxColumnNoLength = columnNo.length;
-        }
-
-        String file = line.substring(leftParenPos + 1, nextToLastColon);
-        if (filePrefix != null && file.startsWith(filePrefix)) {
-          file = file.substring(filePrefix.length);
-        }
-        if (file.length > maxFileLength) {
-          maxFileLength = file.length;
-        }
-        String method = line.substring(0, leftParenPos - 1);
-        if (lambda != null) {
-          method = method.replaceAll('<anonymous closure>', lambda);
-        }
-        lines.add(StackTraceLine(index, file, lineNo, columnNo, method));
-      } catch (e) {
-        throw 'Error prettifying "$line": $e';
-      }
-    }
-    return StackTraceLines.fromLines(
-        lines, maxFileLength, maxLineNoLength, maxColumnNoLength);
-  }
-
-  StackTraceLines.fromLines(this.lines, this.maxFileLength,
-      this.maxLineNoLength, this.maxColumnNoLength);
-
-  StackTraceLines subtrace(int offset) {
-    return StackTraceLines.fromLines(lines.sublist(offset), maxFileLength,
-        maxLineNoLength, maxColumnNoLength);
-  }
-
-  String prettify({bool showColumnNo = false, bool showDots = true}) {
-    StringBuffer sb = StringBuffer();
-    bool dots = true;
-    for (StackTraceLine line in lines) {
-      sb.write('  ');
-      line.printOn(sb,
-          fileLength: maxFileLength,
-          padding: showDots && dots ? ' .' : ' ',
-          lineNoLength: maxLineNoLength,
-          showColumnNo: showColumnNo,
-          columnNoLength: maxColumnNoLength);
-
-      dots = !dots;
-    }
-    return sb.toString();
-  }
-
-  @override
-  String toString() {
-    return prettify();
-  }
-}
-
-/// A parsed line from a stack trace.
-class StackTraceLine {
-  final int index;
-  final String file;
-  final String lineNo;
-  final String columnNo;
-  final String method;
-
-  StackTraceLine(
-      this.index, this.file, this.lineNo, this.columnNo, this.method);
-
-  void printOn(StringBuffer sb,
-      {String padding = ' ',
-      int fileLength,
-      int lineNoLength,
-      int columnNoLength,
-      bool showColumnNo = false}) {
-    String fileText = '${file} ';
-    if (fileLength != null) {
-      fileText = pad(fileText, fileLength, dots: padding);
-    }
-    String lineNoText = lineNo;
-    if (lineNoLength != null) {
-      lineNoText = pad(lineNoText, lineNoLength, padLeft: true);
-    }
-    String columnNoText = showColumnNo ? '' : columnNo;
-    if (columnNoLength != null) {
-      columnNoText = ':${pad(columnNoText, columnNoLength)}';
-    }
-    sb.write('$fileText $lineNoText$columnNoText $method\n');
-  }
-
-  @override
-  int get hashCode {
-    return 13 * index +
-        17 * file.hashCode +
-        19 * lineNo.hashCode +
-        23 * columnNo.hashCode +
-        29 * method.hashCode;
-  }
-
-  @override
-  bool operator ==(other) {
-    if (identical(this, other)) return true;
-    if (other is! StackTraceLine) return false;
-    return index == other.index &&
-        file == other.file &&
-        lineNo == other.lineNo &&
-        columnNo == other.columnNo &&
-        method == other.method;
-  }
-
-  @override
-  String toString() => "$method @ $file [$lineNo:$columnNo]";
-}
-
-// TODO(johnniwinther): Use this format for --throw-on-error.
-/// Converts the normal VM stack trace into a more compact and readable format.
-///
-/// The output format is `<file> . . . <lineNo>:<columnNo> <method>` where
-/// `<file>` is file name, `<lineNo>` is the line number, `<columnNo>` is the
-/// column number, and `<method>` is the method name.
-///
-/// If [rangeStart] and/or [rangeEnd] are provided, only the lines within the
-/// range are included.
-/// If [showColumnNo] is `false`, the `:<columnNo>` part is omitted.
-/// If [showDots] is `true`, the space between `<file>` and `<lineNo>` is padded
-/// with dots on every other line.
-/// If [filePrefix] is provided, then for  every file name thats starts with
-/// [filePrefix] only the remainder is printed.
-/// If [lambda] is non-null, anonymous closures are printed as [lambda].
-String prettifyStackTrace(StackTrace stackTrace,
-    {int rangeStart,
-    int rangeEnd,
-    bool showColumnNo = false,
-    bool showDots = true,
-    String filePrefix,
-    String lambda = r'?'}) {
-  return StackTraceLines.fromTrace(stackTrace,
-          rangeStart: rangeStart,
-          rangeEnd: rangeEnd,
-          filePrefix: filePrefix,
-          lambda: lambda)
-      .prettify(showColumnNo: showColumnNo, showDots: showDots);
-}
-
-/// Pads (or truncates) [text] to the [intendedLength].
-///
-/// If [padLeft] is [:true:] the text is padding inserted to the left of [text].
-/// A repetition of the [dots] text is used for padding.
-String pad(String text, int intendedLength,
-    {bool padLeft = false, String dots = ' '}) {
-  if (text.length == intendedLength) return text;
-  if (text.length > intendedLength) return text.substring(0, intendedLength);
-  if (dots == null || dots.isEmpty) dots = ' ';
-  int dotsLength = dots.length;
-  StringBuffer sb = StringBuffer();
-  if (!padLeft) {
-    sb.write(text);
-  }
-  for (int index = text.length; index < intendedLength; index++) {
-    int dotsIndex = index % dotsLength;
-    sb.write(dots.substring(dotsIndex, dotsIndex + 1));
-  }
-  if (padLeft) {
-    sb.write(text);
-  }
-  return sb.toString();
-}
diff --git a/pkg/compiler/lib/src/helpers/track_map.dart b/pkg/compiler/lib/src/helpers/track_map.dart
deleted file mode 100644
index 957d55c..0000000
--- a/pkg/compiler/lib/src/helpers/track_map.dart
+++ /dev/null
@@ -1,154 +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.
-
-/// The track map is a simple wrapper around a map that keeps track
-/// of the 'final' size of maps grouped by description. It allows
-/// determining the distribution of sizes for a specific allocation
-/// site and it can be used like this:
-///
-///    Map<String, int> map = new TrackMap<String, int>("my-map");
-///
-/// After finishing the compilaton, the histogram of track map sizes
-/// is printed but only when running in verbose mode.
-class TrackMap<K, V> implements Map<K, V> {
-  final Map<K, V> _map = {};
-  final List _counts;
-  static final Map<String, List<int>> _countsMap = {};
-
-  TrackMap._internal(this._counts);
-
-  factory TrackMap(String description) {
-    List counts = _countsMap.putIfAbsent(description, () => [0]);
-    Map result = TrackMap<K, V>._internal(counts);
-    counts[0]++;
-    return result;
-  }
-
-  static void printHistogram() {
-    _countsMap.forEach((description, counts) {
-      print('$description -- ${counts.length} maps');
-
-      // Count the total number of maps.
-      int sum = 0;
-      for (int i = 0; i < counts.length; i++) {
-        sum += counts[i];
-      }
-      int increment = sum ~/ 10;
-      int target = increment;
-      int accumulated = 0;
-      for (int i = 0; i < counts.length; i++) {
-        accumulated += counts[i];
-        if (accumulated >= target) {
-          String percent = (accumulated / sum * 100).toStringAsFixed(1);
-          print('  -- $percent%: length <= $i');
-          target += increment;
-        }
-      }
-    });
-  }
-
-  @override
-  int get length => _map.length;
-  @override
-  bool get isEmpty => _map.isEmpty;
-  @override
-  bool get isNotEmpty => _map.isNotEmpty;
-
-  @override
-  Iterable<K> get keys => _map.keys;
-  @override
-  Iterable<V> get values => _map.values;
-
-  @override
-  bool containsKey(Object key) => _map.containsKey(key);
-  @override
-  bool containsValue(Object value) => _map.containsValue(value);
-
-  @override
-  V operator [](Object key) => _map[key];
-  @override
-  String toString() => _map.toString();
-
-  @override
-  void forEach(void action(K key, V value)) {
-    _map.forEach(action);
-  }
-
-  @override
-  void operator []=(K key, V value) {
-    if (!_map.containsKey(key)) {
-      _notifyLengthChanged(1);
-      _map[key] = value;
-    }
-  }
-
-  @override
-  V putIfAbsent(K key, V ifAbsent()) {
-    if (containsKey(key)) return this[key];
-    V value = ifAbsent();
-    this[key] = value;
-    return value;
-  }
-
-  @override
-  V remove(Object key) {
-    if (_map.containsKey(key)) {
-      _notifyLengthChanged(-1);
-    }
-    return _map.remove(key);
-  }
-
-  @override
-  void addAll(Map<K, V> other) {
-    other.forEach((key, value) => this[key] = value);
-  }
-
-  @override
-  void clear() {
-    _notifyLengthChanged(-_map.length);
-    _map.clear();
-  }
-
-  @override
-  Map<KR, VR> cast<KR, VR>() => _map.cast<KR, VR>();
-  @override
-  Iterable<MapEntry<K, V>> get entries => _map.entries;
-
-  @override
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    for (var entry in entries) this[entry.key] = entry.value;
-  }
-
-  @override
-  Map<KR, VR> map<KR, VR>(MapEntry<KR, VR> transform(K key, V value)) =>
-      _map.map(transform);
-
-  @override
-  V update(K key, V update(V value), {V ifAbsent()}) =>
-      _map.update(key, update, ifAbsent: ifAbsent);
-
-  @override
-  void updateAll(V update(K key, V value)) {
-    _map.updateAll(update);
-  }
-
-  @override
-  void removeWhere(bool test(K key, V value)) {
-    int before = _map.length;
-    _map.removeWhere(test);
-    _notifyLengthChanged(_map.length - before);
-  }
-
-  void _notifyLengthChanged(int delta) {
-    int oldLength = _map.length;
-    int newLength = oldLength + delta;
-    _counts[oldLength]--;
-    if (newLength < _counts.length) {
-      _counts[newLength]++;
-    } else {
-      _counts.add(1);
-      assert(newLength == _counts.length - 1);
-    }
-  }
-}
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index 12f0069..937f1c0 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -543,10 +543,13 @@
       // Loops and switches handle their own labels.
       visit(body);
     } else {
+      LocalState stateBefore = _state;
       JumpTarget jumpTarget = _localsMap.getJumpTargetForLabel(node);
       _setupBreaksAndContinues(jumpTarget);
+      _state = LocalState.childPath(stateBefore);
       visit(body);
-      _state.mergeAfterBreaks(_inferrer, _getBreaks(jumpTarget));
+      _state = stateBefore.mergeAfterBreaks(_inferrer, _getBreaks(jumpTarget),
+          keepOwnLocals: false);
       _clearBreaksAndContinues(jumpTarget);
     }
     return null;
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index aff7306..c56d855 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -4,13 +4,13 @@
 
 import 'package:kernel/ast.dart' as ir;
 
-import '../../compiler_new.dart';
+import '../../compiler.dart';
 import '../closure.dart';
 import '../common.dart';
+import '../common/elements.dart';
 import '../common/metrics.dart';
 import '../common/names.dart';
 import '../compiler.dart';
-import '../common_elements.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/names.dart';
@@ -167,7 +167,7 @@
   /// [NativeBehavior].
   TypeInformation typeOfNativeBehavior(NativeBehavior nativeBehavior) {
     if (nativeBehavior == null) return types.dynamicType;
-    List typesReturned = nativeBehavior.typesReturned;
+    List<Object> typesReturned = nativeBehavior.typesReturned;
     if (typesReturned.isEmpty) return types.dynamicType;
     TypeInformation returnType;
     for (var type in typesReturned) {
diff --git a/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart b/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
index 9557395..fd657bd 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.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.
 
-import '../../common_elements.dart' show CommonElements;
+import '../../common/elements.dart' show CommonElements;
 import '../../constants/values.dart';
 import '../../elements/entities.dart';
 import '../../elements/names.dart';
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_dump.dart b/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
index ff82843..9a0d7e8 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 library dart2js.inferrer.type_graph_dump;
 
-import '../../compiler_new.dart';
+import '../../compiler.dart';
 import '../elements/entities.dart';
 import '../elements/entity_utils.dart' as utils;
 import 'abstract_value_domain.dart';
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index 999d317..c6e534b 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -7,7 +7,7 @@
 import 'package:kernel/ast.dart' as ir;
 
 import '../../common.dart';
-import '../../common_elements.dart' show CommonElements;
+import '../../common/elements.dart' show CommonElements;
 import '../../constants/values.dart';
 import '../../elements/entities.dart';
 import '../../elements/names.dart';
diff --git a/pkg/compiler/lib/src/io/code_output.dart b/pkg/compiler/lib/src/io/code_output.dart
index 43e9fcc..b5f87ea 100644
--- a/pkg/compiler/lib/src/io/code_output.dart
+++ b/pkg/compiler/lib/src/io/code_output.dart
@@ -4,7 +4,7 @@
 
 library dart2js.code_output;
 
-import '../../compiler_new.dart';
+import '../../compiler.dart';
 import 'source_information.dart';
 
 /// Listener interface for [CodeOutput] activity.
diff --git a/pkg/compiler/lib/src/io/source_file.dart b/pkg/compiler/lib/src/io/source_file.dart
index 49b27d8..a95008c 100644
--- a/pkg/compiler/lib/src/io/source_file.dart
+++ b/pkg/compiler/lib/src/io/source_file.dart
@@ -11,7 +11,7 @@
 import 'package:kernel/ast.dart' as kernel show Location, Source;
 
 import 'location_provider.dart' show LocationProvider;
-import '../../compiler_new.dart';
+import '../../compiler.dart';
 
 /// Represents a file of source code. The content can be either a [String] or
 /// a UTF-8 encoded [List<int>] of bytes.
diff --git a/pkg/compiler/lib/src/io/source_map_builder.dart b/pkg/compiler/lib/src/io/source_map_builder.dart
index 750a95d..d05c9cb 100644
--- a/pkg/compiler/lib/src/io/source_map_builder.dart
+++ b/pkg/compiler/lib/src/io/source_map_builder.dart
@@ -6,7 +6,7 @@
 
 import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
 import 'package:kernel/ast.dart' show Location;
-import '../../compiler_new.dart' show CompilerOutput, OutputSink, OutputType;
+import '../../compiler.dart' show CompilerOutput, OutputSink, OutputType;
 import '../util/util.dart';
 import 'location_provider.dart';
 import 'code_output.dart' show SourceLocationsProvider, SourceLocations;
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index d95ffb2..4ac13df 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.dart
@@ -8,6 +8,7 @@
 import 'package:kernel/src/printer.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
 
+import '../environment.dart';
 import '../kernel/dart2js_target.dart';
 
 typedef ReportErrorFunction = void Function(
@@ -20,7 +21,7 @@
 
   Dart2jsConstantEvaluator(ir.Component component,
       ir.TypeEnvironment typeEnvironment, ReportErrorFunction reportError,
-      {Map<String, String> environment = const {},
+      {Environment environment,
       bool supportReevaluationForTesting = false,
       ir.EvaluationMode evaluationMode})
       : _supportReevaluationForTesting = supportReevaluationForTesting,
@@ -29,7 +30,7 @@
             const Dart2jsDartLibrarySupport(),
             const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
             component,
-            environment,
+            environment?.definitions ?? const {},
             typeEnvironment,
             ErrorReporter(reportError),
             enableTripleShift: true,
diff --git a/pkg/compiler/lib/src/ir/element_map.dart b/pkg/compiler/lib/src/ir/element_map.dart
index f2b9a66..8e73cf4 100644
--- a/pkg/compiler/lib/src/ir/element_map.dart
+++ b/pkg/compiler/lib/src/ir/element_map.dart
@@ -6,7 +6,7 @@
 import 'package:kernel/core_types.dart' as ir;
 
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../elements/indexed.dart';
 import '../elements/types.dart';
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index 3e7f7fca..c72bbde 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -684,34 +684,6 @@
   }
 }
 
-/// Visitor that builds an [ImpactData] object for the world impact.
-class ImpactBuilder extends ImpactBuilderBase with ImpactRegistryMixin {
-  @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);
-
-  ImpactBuilderData computeImpact(ir.Member node) {
-    if (retainDataForTesting) {
-      typeMapsForTesting = {};
-    }
-    node.accept(this);
-    return ImpactBuilderData(
-        node, impactData, typeMapsForTesting, getStaticTypeCache());
-  }
-}
-
 /// Return the named arguments names as a list of strings.
 List<String> _getNamedArguments(ir.Arguments arguments) =>
     arguments.named.map((n) => n.name).toList();
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index f73b96a8f..34f94bd 100644
--- a/pkg/compiler/lib/src/ir/impact_data.dart
+++ b/pkg/compiler/lib/src/ir/impact_data.dart
@@ -3,7 +3,11 @@
 // 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 '../ir/scope.dart';
 import '../serialization/serialization.dart';
 import '../util/enumset.dart';
 import 'constants.dart';
@@ -11,9 +15,34 @@
 import 'runtime_type_analysis.dart';
 import 'static_type.dart';
 
-/// [ImpactRegistry] that stores registered impact in an [ImpactData] object.
-abstract class ImpactRegistryMixin implements ImpactRegistry {
-  final ImpactDataImpl _data = ImpactDataImpl();
+/// Visitor that builds an [ImpactData] object for the world impact.
+class ImpactBuilder extends ImpactBuilderBase {
+  final ImpactData _data = ImpactData();
+
+  @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);
+
+  ImpactBuilderData computeImpact(ir.Member node) {
+    if (retainDataForTesting) {
+      typeMapsForTesting = {};
+    }
+    node.accept(this);
+    return ImpactBuilderData(
+        node, impactData, typeMapsForTesting, getStaticTypeCache());
+  }
 
   ImpactData get impactData => _data;
 
@@ -451,17 +480,7 @@
 }
 
 /// Data object that contains the world impact data derived purely from kernel.
-abstract class ImpactData {
-  factory ImpactData.fromDataSource(DataSource source) =
-      ImpactDataImpl.fromDataSource;
-
-  void toDataSink(DataSink sink);
-
-  /// Registers the impact data with [registry].
-  void apply(ImpactRegistry registry);
-}
-
-class ImpactDataImpl implements ImpactData {
+class ImpactData {
   static const String tag = 'ImpactData';
 
   List<_SuperInitializer> _superInitializers;
@@ -509,9 +528,9 @@
   List<ir.StaticInvocation> _staticInvocationNodes;
   List<ir.ConstructorInvocation> _constConstructorInvocationNodes;
 
-  ImpactDataImpl();
+  ImpactData();
 
-  ImpactDataImpl.fromDataSource(DataSource source) {
+  ImpactData.fromDataSource(DataSource source) {
     source.begin(tag);
     _superInitializers = source.readList(
         () => _SuperInitializer.fromDataSource(source),
@@ -609,7 +628,6 @@
     source.end(tag);
   }
 
-  @override
   void toDataSink(DataSink sink) {
     sink.begin(tag);
 
@@ -693,7 +711,7 @@
     sink.end(tag);
   }
 
-  @override
+  /// Registers the impact data with [registry].
   void apply(ImpactRegistry registry) {
     if (_superInitializers != null) {
       for (_SuperInitializer data in _superInitializers) {
diff --git a/pkg/compiler/lib/src/ir/modular.dart b/pkg/compiler/lib/src/ir/modular.dart
index e9df381..c143853 100644
--- a/pkg/compiler/lib/src/ir/modular.dart
+++ b/pkg/compiler/lib/src/ir/modular.dart
@@ -12,8 +12,9 @@
 import '../diagnostics/diagnostic_listener.dart';
 import '../diagnostics/messages.dart';
 import '../diagnostics/source_span.dart';
-import '../kernel/element_map_impl.dart';
+import '../kernel/element_map.dart';
 import '../environment.dart';
+import '../ir/impact_data.dart';
 import '../ir/static_type.dart';
 import '../js_backend/annotations.dart';
 import '../options.dart';
@@ -97,7 +98,7 @@
     CompilerOptions options,
     DiagnosticReporter reporter,
     Environment environment,
-    KernelToElementMapImpl elementMap) {
+    KernelToElementMap elementMap) {
   var classHierarchy = elementMap.classHierarchy;
   var typeEnvironment = elementMap.typeEnvironment;
   var constantEvaluator = elementMap.constantEvaluator;
diff --git a/pkg/compiler/lib/src/ir/scope_visitor.dart b/pkg/compiler/lib/src/ir/scope_visitor.dart
index a95894c..3abbbfd 100644
--- a/pkg/compiler/lib/src/ir/scope_visitor.dart
+++ b/pkg/compiler/lib/src/ir/scope_visitor.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:front_end/src/api_unstable/dart2js.dart' as ir;
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
@@ -115,7 +114,7 @@
       }
     } else {
       assert(node is ir.Procedure || node is ir.Constructor);
-      if (!(node is ir.Procedure && ir.isRedirectingFactory(node))) {
+      if (!(node is ir.Procedure && node.isRedirectingFactory)) {
         // Skip redirecting factories: they contain invalid expressions only
         // used to suppport internal CFE modular compilation.
         node.accept(this);
@@ -865,9 +864,13 @@
     complexity = complexity.combine(visitExpressions(node.expressions));
     if (node.isConst) {
       return const EvaluationComplexity.constant();
-    } else {
+    }
+    if (complexity.isLazy) return complexity;
+    if (node.expressions.every(_isWellBehavedEagerHashKey)) {
+      // Includes empty set literals.
       return complexity.makeEager();
     }
+    return const EvaluationComplexity.lazy();
   }
 
   @override
@@ -879,9 +882,33 @@
     complexity = complexity.combine(visitNodes(node.entries));
     if (node.isConst) {
       return const EvaluationComplexity.constant();
-    } else {
+    }
+    if (node.entries.length > 10) return const EvaluationComplexity.lazy();
+    if (complexity.isLazy) return complexity;
+    if (node.entries
+        .map((entry) => entry.key)
+        .every(_isWellBehavedEagerHashKey)) {
+      // Includes empty map literals.
       return complexity.makeEager();
     }
+    return const EvaluationComplexity.lazy();
+  }
+
+  bool _isWellBehavedEagerHashKey(ir.Expression key) {
+    // Well-behaved eager keys for LinkedHashMap and LinkedHashSet must not
+    // indirectly use any lazy-initialized variables.
+    //
+    // TODO(45681): Improve the analysis. (1) Use static type of the [key]
+    // expression. (2) Use information about the class heirarchy and overloading
+    // of `get:hashCode` to detect safe implementations. This will pick up a lot
+    // of enum and enum-like classes.
+    if (key is ir.ConstantExpression) {
+      if (key.constant is ir.StringConstant) return true;
+      if (key.constant is ir.IntConstant) return true;
+      if (key.constant is ir.DoubleConstant) return true;
+      if (key.constant is ir.StaticTearOffConstant) return true;
+    }
+    return false;
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ir/types.dart b/pkg/compiler/lib/src/ir/types.dart
index f725d34..114b68c 100644
--- a/pkg/compiler/lib/src/ir/types.dart
+++ b/pkg/compiler/lib/src/ir/types.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.
 
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../options.dart';
diff --git a/pkg/compiler/lib/src/ir/util.dart b/pkg/compiler/lib/src/ir/util.dart
index 27b00cb..e825b52 100644
--- a/pkg/compiler/lib/src/ir/util.dart
+++ b/pkg/compiler/lib/src/ir/util.dart
@@ -251,7 +251,7 @@
 
 /// Returns true if [importUri] corresponds to dart:html and related libraries.
 bool _isWebLibrary(Uri importUri) =>
-    importUri.scheme == 'dart' &&
+    importUri.isScheme('dart') &&
         (importUri.path == 'html' ||
             importUri.path == 'svg' ||
             importUri.path == 'indexed_db' ||
diff --git a/pkg/compiler/lib/src/js_backend/annotations.dart b/pkg/compiler/lib/src/js_backend/annotations.dart
index 7ae9894..cf4c049 100644
--- a/pkg/compiler/lib/src/js_backend/annotations.dart
+++ b/pkg/compiler/lib/src/js_backend/annotations.dart
@@ -156,7 +156,7 @@
 
   Uri uri = member.enclosingLibrary.importUri;
   bool platformAnnotationsAllowed =
-      options.testMode || uri.scheme == 'dart' || maybeEnableNative(uri);
+      options.testMode || uri.isScheme('dart') || maybeEnableNative(uri);
 
   for (PragmaAnnotationData data in pragmaAnnotationData) {
     String name = data.name;
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 164d917..3c01756 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -6,16 +6,10 @@
 
 import '../common.dart';
 import '../common/codegen.dart';
-import '../deferred_load/deferred_load.dart' show DeferredLoadTask;
-import '../dump_info.dart' show DumpInfoTask;
 import '../elements/entities.dart';
-import '../enqueue.dart' show ResolutionEnqueuer;
-import '../frontend_strategy.dart';
 import '../inferrer/types.dart';
 import '../js_model/elements.dart';
 import '../tracer.dart';
-import '../universe/world_impact.dart'
-    show ImpactStrategy, ImpactUseCase, WorldImpact, WorldImpactVisitor;
 import 'annotations.dart';
 import 'checked_mode_helpers.dart';
 import 'namer.dart';
@@ -262,44 +256,6 @@
   }
 }
 
-class JavaScriptImpactStrategy extends ImpactStrategy {
-  final ImpactCacheDeleter impactCacheDeleter;
-  final DumpInfoTask dumpInfoTask;
-  final bool supportDeferredLoad;
-  final bool supportDumpInfo;
-
-  JavaScriptImpactStrategy(this.impactCacheDeleter, this.dumpInfoTask,
-      {this.supportDeferredLoad, this.supportDumpInfo});
-
-  @override
-  void visitImpact(var impactSource, WorldImpact impact,
-      WorldImpactVisitor visitor, ImpactUseCase impactUse) {
-    // TODO(johnniwinther): Compute the application strategy once for each use.
-    if (impactUse == ResolutionEnqueuer.IMPACT_USE) {
-      if (supportDeferredLoad) {
-        impact.apply(visitor);
-      } else {
-        impact.apply(visitor);
-      }
-    } else if (impactUse == DeferredLoadTask.IMPACT_USE) {
-      impact.apply(visitor);
-      // Impacts are uncached globally in [onImpactUsed].
-    } else if (impactUse == DumpInfoTask.IMPACT_USE) {
-      impact.apply(visitor);
-      dumpInfoTask.unregisterImpact(impactSource);
-    } else {
-      impact.apply(visitor);
-    }
-  }
-
-  @override
-  void onImpactUsed(ImpactUseCase impactUse) {
-    if (impactUse == DeferredLoadTask.IMPACT_USE) {
-      impactCacheDeleter.emptyCache();
-    }
-  }
-}
-
 /// Interface for resources only used during code generation.
 abstract class CodegenInputs {
   CheckedModeHelpers get checkedModeHelpers;
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 170924c..56d4682 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -4,8 +4,8 @@
 
 library dart2js.js_helpers.impact;
 
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../common/names.dart';
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../elements/types.dart' show InterfaceType;
 import '../elements/entities.dart';
 import '../universe/selector.dart';
@@ -716,8 +716,6 @@
   /// prefix.
   BackendImpact get loadLibrary {
     return _loadLibrary ??= BackendImpact(globalUses: [
-      // TODO(redemption): delete wrapper when we sunset the old frontend.
-      _commonElements.loadLibraryWrapper,
       _commonElements.loadDeferredLibrary,
     ]);
   }
diff --git a/pkg/compiler/lib/src/js_backend/backend_usage.dart b/pkg/compiler/lib/src/js_backend/backend_usage.dart
index ef67a46..08f17ce 100644
--- a/pkg/compiler/lib/src/js_backend/backend_usage.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_usage.dart
@@ -3,11 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
-import '../frontend_strategy.dart';
 import '../ir/runtime_type_analysis.dart';
+import '../kernel/kernel_strategy.dart';
 import '../serialization/serialization.dart';
 import '../universe/feature.dart';
 import '../util/util.dart' show Setlet;
@@ -104,7 +104,7 @@
 }
 
 class BackendUsageBuilderImpl implements BackendUsageBuilder {
-  final FrontendStrategy _frontendStrategy;
+  final KernelFrontendStrategy _frontendStrategy;
   // TODO(johnniwinther): Remove the need for these.
   Setlet<FunctionEntity> _globalFunctionDependencies;
   Setlet<ClassEntity> _globalClassDependencies;
@@ -158,7 +158,7 @@
   bool _isValidBackendUse(Entity element, LibraryEntity library) {
     if (_isValidEntity(element)) return true;
     SourceSpan span = _frontendStrategy.spanFromSpannable(element, element);
-    if (library.canonicalUri.scheme == 'dart' &&
+    if (library.canonicalUri.isScheme('dart') &&
         span.uri.path.contains('_internal/js_runtime/lib/')) {
       // TODO(johnniwinther): We should be more precise about these.
       return true;
diff --git a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
index 85d2323..15f9436 100644
--- a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
+++ b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
@@ -5,7 +5,7 @@
 // TODO(39733): This file exists now just to register the use of
 // 'boolConversionCheck'. Fix the registration and remove this file.
 
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/use.dart' show StaticUse;
 
diff --git a/pkg/compiler/lib/src/js_backend/codegen_listener.dart b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
index 4a93bce..93c1745 100644
--- a/pkg/compiler/lib/src/js_backend/codegen_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
@@ -6,8 +6,8 @@
 
 import 'dart:collection';
 
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index d08b4a8..304694a 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
 import '../elements/entities.dart';
diff --git a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
index efbc78d..965da61 100644
--- a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
@@ -2,15 +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.
 
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../universe/call_structure.dart';
 import '../universe/use.dart' show ConstantUse, StaticUse;
-import '../universe/world_impact.dart'
-    show WorldImpact, StagedWorldImpactBuilder;
+import '../universe/world_impact.dart' show WorldImpact, WorldImpactBuilderImpl;
 import 'backend_usage.dart' show BackendUsageBuilder;
 import 'native_data.dart';
 
@@ -154,8 +153,6 @@
 
   final bool forResolution;
 
-  final StagedWorldImpactBuilder impactBuilder = StagedWorldImpactBuilder();
-
   // Classes that are candidates for needing constructors.  Classes are moved to
   // [activeClasses] when we know they need constructors.
   final Set<ClassEntity> instantiatedClasses = {};
@@ -180,6 +177,7 @@
 
   WorldImpact flush() {
     if (!demanded) return const WorldImpact();
+    final impactBuilder = WorldImpactBuilderImpl();
     var newActiveClasses = Set<ClassEntity>();
     for (ClassEntity cls in instantiatedClasses) {
       bool isNative = _nativeData.isNativeClass(cls);
@@ -208,7 +206,7 @@
     }
     activeClasses.addAll(newActiveClasses);
     instantiatedClasses.removeAll(newActiveClasses);
-    return impactBuilder.flush();
+    return impactBuilder;
   }
 
   TypeConstantValue _makeTypeConstant(ClassEntity cls) {
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 a9aa753..30bf295 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -5,7 +5,7 @@
 import 'package:js_ast/src/precedence.dart' as js show PRIMARY;
 import 'package:front_end/src/api_unstable/dart2js.dart' show $A;
 
-import '../common_elements.dart' show JCommonElements;
+import '../common/elements.dart' show JCommonElements;
 import '../elements/entities.dart';
 import '../js/js.dart' as js;
 import '../serialization/serialization.dart';
diff --git a/pkg/compiler/lib/src/js_backend/enqueuer.dart b/pkg/compiler/lib/src/js_backend/enqueuer.dart
index 4b011ff..5fd435b 100644
--- a/pkg/compiler/lib/src/js_backend/enqueuer.dart
+++ b/pkg/compiler/lib/src/js_backend/enqueuer.dart
@@ -6,10 +6,10 @@
 
 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 '../common.dart';
-import '../common_elements.dart' show ElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../enqueue.dart';
@@ -24,17 +24,16 @@
         StaticUseKind,
         TypeUse,
         TypeUseKind;
-import '../universe/world_impact.dart'
-    show ImpactUseCase, WorldImpact, WorldImpactVisitor;
+import '../universe/world_impact.dart' show WorldImpactVisitor;
 import '../util/enumset.dart';
 import '../util/util.dart' show Setlet;
 
 /// [Enqueuer] which is specific to code generation.
-class CodegenEnqueuer extends EnqueuerImpl {
+class CodegenEnqueuer extends Enqueuer {
   final String name;
   final Set<ClassEntity> _recentClasses = Setlet();
   bool _recentConstants = false;
-  final CodegenWorldBuilderImpl _worldBuilder;
+  final CodegenWorldBuilderImpl worldBuilder;
   final WorkItemBuilder _workItemBuilder;
 
   @override
@@ -45,7 +44,8 @@
   final EnqueuerListener listener;
   final AnnotationsData _annotationsData;
 
-  WorldImpactVisitor _impactVisitor;
+  @override
+  WorldImpactVisitor impactVisitor;
 
   final Queue<WorkItem> _queue = Queue<WorkItem>();
 
@@ -56,16 +56,15 @@
   // applying additional impacts before re-emptying the queue.
   void Function() onEmptyForTesting;
 
-  static const ImpactUseCase IMPACT_USE = ImpactUseCase('CodegenEnqueuer');
-
-  CodegenEnqueuer(this.task, this._worldBuilder, this._workItemBuilder,
+  CodegenEnqueuer(this.task, this.worldBuilder, this._workItemBuilder,
       this.listener, this._annotationsData)
       : this.name = 'codegen enqueuer' {
-    _impactVisitor = EnqueuerImplImpactVisitor(this);
+    impactVisitor = EnqueuerImpactVisitor(this);
   }
 
   @override
-  CodegenWorldBuilder get worldBuilder => _worldBuilder;
+  Iterable<ClassEntity> get directlyInstantiatedClasses =>
+      worldBuilder.directlyInstantiatedClasses;
 
   @override
   bool get queueIsEmpty => _queue.isEmpty;
@@ -77,10 +76,6 @@
     }
   }
 
-  /// Returns [:true:] if this enqueuer is the resolution enqueuer.
-  @override
-  bool get isResolutionQueue => false;
-
   /// Create a [WorkItem] for [entity] and add it to the work list if it has not
   /// already been processed.
   void _addToWorkList(MemberEntity entity) {
@@ -97,17 +92,10 @@
     _queue.add(workItem);
   }
 
-  @override
-  void applyImpact(WorldImpact worldImpact, {var impactSource}) {
-    if (worldImpact.isEmpty) return;
-    impactStrategy.visitImpact(
-        impactSource, worldImpact, _impactVisitor, impactUse);
-  }
-
   void _registerInstantiatedType(InterfaceType type,
       {bool nativeUsage = false}) {
     task.measureSubtask('codegen.typeUse', () {
-      _worldBuilder.registerTypeInstantiation(type, _applyClassUse);
+      worldBuilder.registerTypeInstantiation(type, _applyClassUse);
       listener.registerInstantiatedType(type, nativeUsage: nativeUsage);
     });
   }
@@ -120,7 +108,7 @@
 
   @override
   void checkClass(ClassEntity cls) {
-    _worldBuilder.processClassMembers(cls,
+    worldBuilder.processClassMembers(cls,
         (MemberEntity member, EnumSet<MemberUse> useSet) {
       if (useSet.isNotEmpty) {
         failedAt(member,
@@ -133,7 +121,7 @@
   void _applyClassUse(ClassEntity cls, EnumSet<ClassUse> useSet) {
     if (useSet.contains(ClassUse.INSTANTIATED)) {
       _recentClasses.add(cls);
-      _worldBuilder.processClassMembers(cls, _applyMemberUse);
+      worldBuilder.processClassMembers(cls, _applyMemberUse);
       // We only tell the backend once that [cls] was instantiated, so
       // any additional dependencies must be treated as global
       // dependencies.
@@ -160,14 +148,14 @@
   @override
   void processDynamicUse(DynamicUse dynamicUse) {
     task.measureSubtask('codegen.dynamicUse', () {
-      _worldBuilder.registerDynamicUse(dynamicUse, _applyMemberUse);
+      worldBuilder.registerDynamicUse(dynamicUse, _applyMemberUse);
     });
   }
 
   @override
   void processStaticUse(MemberEntity member, StaticUse staticUse) {
     task.measureSubtask('codegen.staticUse', () {
-      _worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
+      worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
       switch (staticUse.kind) {
         case StaticUseKind.CONSTRUCTOR_INVOKE:
         case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
@@ -215,17 +203,17 @@
         break;
       case TypeUseKind.TYPE_LITERAL:
         if (type is TypeVariableType) {
-          _worldBuilder.registerTypeVariableTypeLiteral(type);
+          worldBuilder.registerTypeVariableTypeLiteral(type);
         }
         break;
       case TypeUseKind.RTI_VALUE:
-        _worldBuilder.registerConstTypeLiteral(type);
+        worldBuilder.registerConstTypeLiteral(type);
         break;
       case TypeUseKind.TYPE_ARGUMENT:
-        _worldBuilder.registerTypeArgument(type);
+        worldBuilder.registerTypeArgument(type);
         break;
       case TypeUseKind.CONSTRUCTOR_REFERENCE:
-        _worldBuilder.registerConstructorReference(type);
+        worldBuilder.registerConstructorReference(type);
         break;
       case TypeUseKind.CONST_INSTANTIATION:
         failedAt(CURRENT_ELEMENT_SPANNABLE, "Unexpected type use: $typeUse.");
@@ -239,7 +227,7 @@
   @override
   void processConstantUse(ConstantUse constantUse) {
     task.measureSubtask('codegen.constantUse', () {
-      if (_worldBuilder.registerConstantUse(constantUse)) {
+      if (worldBuilder.registerConstantUse(constantUse)) {
         applyImpact(listener.registerUsedConstant(constantUse.value));
         _recentConstants = true;
       }
@@ -247,11 +235,11 @@
   }
 
   void _registerIsCheck(DartType type) {
-    _worldBuilder.registerIsCheck(type);
+    worldBuilder.registerIsCheck(type);
   }
 
   void _registerNamedTypeVariableNewRti(TypeVariableType type) {
-    _worldBuilder.registerNamedTypeVariableNewRti(type);
+    worldBuilder.registerNamedTypeVariableNewRti(type);
   }
 
   void _registerClosurizedMember(FunctionEntity element) {
@@ -308,12 +296,5 @@
   String toString() => 'Enqueuer($name)';
 
   @override
-  ImpactUseCase get impactUse => IMPACT_USE;
-
-  @override
   Iterable<MemberEntity> get processedEntities => _processedEntities;
-
-  @override
-  Iterable<ClassEntity> get processedClasses =>
-      _worldBuilder.instantiatedClasses;
 }
diff --git a/pkg/compiler/lib/src/js_backend/field_analysis.dart b/pkg/compiler/lib/src/js_backend/field_analysis.dart
index 4ff7751..0f3326c 100644
--- a/pkg/compiler/lib/src/js_backend/field_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/field_analysis.dart
@@ -270,8 +270,8 @@
     sink.end(tag);
   }
 
-  factory JFieldAnalysis.from(KClosedWorldImpl closedWorld, JsToFrontendMap map,
-      CompilerOptions options) {
+  factory JFieldAnalysis.from(
+      KClosedWorld closedWorld, JsToFrontendMap map, CompilerOptions options) {
     Map<FieldEntity, FieldAnalysisData> fieldData = {};
 
     bool canBeElided(FieldEntity field) {
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 6427bee..e340b31 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -7,8 +7,7 @@
 import '../universe/class_hierarchy.dart' show ClassHierarchyBuilder;
 
 import '../common.dart';
-import '../common_elements.dart';
-import '../common/backend_api.dart' show ImpactTransformer;
+import '../common/elements.dart';
 import '../common/codegen.dart' show CodegenImpact;
 import '../common/resolution.dart' show ResolutionImpact;
 import '../constants/values.dart';
@@ -34,7 +33,13 @@
 import 'runtime_types.dart';
 import 'runtime_types_resolution.dart';
 
-class JavaScriptImpactTransformer extends ImpactTransformer {
+/// JavaScript specific transformation for resolution world impacts.
+///
+/// This processes target-agnostic [ResolutionImpact]s and creates [WorldImpact]
+/// in which JavaScript specific impact data is added, for example: if
+/// a certain feature is used that requires some helper code from the backend
+/// libraries, this will be included by the impact transformer.
+class JavaScriptImpactTransformer {
   final ElementEnvironment _elementEnvironment;
   final CommonElements _commonElements;
   final BackendImpacts _impacts;
@@ -60,7 +65,8 @@
 
   DartTypes get _dartTypes => _commonElements.dartTypes;
 
-  @override
+  /// Transform the [ResolutionImpact] into a [WorldImpact] adding the
+  /// backend dependencies for features used in [worldImpact].
   WorldImpact transformResolutionImpact(ResolutionImpact worldImpact) {
     TransformedWorldImpact transformed = TransformedWorldImpact(worldImpact);
 
diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
index 956a0f3..0300e2d 100644
--- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart
+++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
@@ -4,9 +4,9 @@
 
 library js_backend.interceptor_data;
 
-import '../common/names.dart' show Identifiers;
-import '../common_elements.dart'
+import '../common/elements.dart'
     show CommonElements, KCommonElements, KElementEnvironment;
+import '../common/names.dart' show Identifiers;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../inferrer/abstract_value_domain.dart';
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 82c7200..07f2138 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -44,33 +44,61 @@
     return freshName;
   }
 
-  // From issue 7554.  These should not be used on objects (as instance
-  // variables) because they clash with names from the DOM. However, it is
-  // OK to use them as fields, as we only access fields directly if we know
-  // the receiver type.
+  /// Property names that are used on 'native' JavaScript classes.
+  ///
+  /// It is best not to use these names for dynamic call selectors.
+  ///
+  /// Dynamic calls to selectors that are used on an intercepted (e.g. String)
+  /// class (e.g. String) or native class (e.g. HtmlElement) are not a problem
+  /// since they are handled via the interceptor calling mechanism. Other
+  /// selectors are called directly, so the minified selector should not be a
+  /// name that accidentally collides with a JavaScript method.  For example,
+  /// the minified call site for the dynamic call `item.yowza()` should not be
+  /// `x.at()`, since, if `x` was a String, that would call
+  /// `String.prototype.at` instead of generating an error.
+  ///
+  /// These names are reserved for the property names of fields, since fields
+  /// are always accessed from a know receiver. (A 'field' of an unknown
+  /// receiver would actually be the getter method.)
+  ///
+  /// These names could be used for selectors that use the interceptor calling
+  /// convention, or for selectors are not called from a `dynamic` call site, or
+  /// any other use where the JavaScript receiver is constrained to be something
+  /// from within the dart program.
+  ///
+  /// TODO(7554): Refresh periodically.
   static const List<String> _reservedNativeProperties = [
-    'a', 'b', 'c', 'd', 'e', 'f', 'r', 'x', 'y', 'z', 'Q',
-    // 2-letter:
-    'ch', 'cx', 'cy', 'db', 'dx', 'dy', 'fr', 'fx', 'fy', 'go', 'id', 'k1',
-    'k2', 'k3', 'k4', 'r1', 'r2', 'rx', 'ry', 'x1', 'x2', 'y1', 'y2',
-    // 3-letter:
-    'add', 'all', 'alt', 'arc', 'CCW', 'cmp', 'dir', 'end', 'get', 'in1',
-    'in2', 'INT', 'key', 'log', 'low', 'm11', 'm12', 'm13', 'm14', 'm21',
-    'm22', 'm23', 'm24', 'm31', 'm32', 'm33', 'm34', 'm41', 'm42', 'm43',
-    'm44', 'max', 'min', 'now', 'ONE', 'put', 'red', 'rel', 'rev', 'RGB',
-    'sdp', 'set', 'src', 'tag', 'top', 'uid', 'uri', 'url', 'URL',
-    // 4-letter:
-    'abbr', 'atob', 'Attr', 'axes', 'axis', 'back', 'BACK', 'beta', 'bias',
-    'Blob', 'blue', 'blur', 'BLUR', 'body', 'BOOL', 'BOTH', 'btoa', 'BYTE',
-    'cite', 'clip', 'code', 'cols', 'cues', 'data', 'DECR', 'DONE', 'face',
-    'file', 'File', 'fill', 'find', 'font', 'form', 'gain', 'hash', 'head',
-    'high', 'hint', 'host', 'href', 'HRTF', 'IDLE', 'INCR', 'info', 'INIT',
-    'isId', 'item', 'KEEP', 'kind', 'knee', 'lang', 'left', 'LESS', 'line',
-    'link', 'list', 'load', 'loop', 'mode', 'name', 'Node', 'None', 'NONE',
-    'only', 'open', 'OPEN', 'ping', 'play', 'port', 'rect', 'Rect', 'refX',
-    'refY', 'RGBA', 'root', 'rows', 'save', 'seed', 'seek', 'self', 'send',
-    'show', 'SINE', 'size', 'span', 'stat', 'step', 'stop', 'tags', 'text',
-    'Text', 'time', 'type', 'view', 'warn', 'wrap', 'ZERO'
+    // 1 character
+    'a', 'b', 'c', 'd', 'e', 'f', 'r', 'w', 'x', 'y', 'z', 'Q',
+
+    // 2 characters
+    'as', 'at', 'ax', 'ay', 'ch', 'CW', 'cx', 'cy', 'db', 'dx', 'dy', 'fr',
+    'fx', 'fy', 'go', 'id', 'k1', 'k2', 'k3', 'k4', 'ok', 'p1', 'p2', 'p3',
+    'p4', 'R8', 'RG', 'rx', 'ry', 'to', 'x1', 'x2', 'xr', 'y1', 'y2',
+
+    // 3 characters
+    'add', 'all', 'alt', 'arc', 'big', 'CCW', 'cmp', 'csp', 'dir', 'div', 'end',
+    'eye', 'get', 'has', 'hid', 'in1', 'in2', 'ink', 'INT', 'key', 'low', 'm11',
+    'm12', 'm13', 'm14', 'm21', 'm22', 'm23', 'm24', 'm31', 'm32', 'm33', 'm34',
+    'm41', 'm42', 'm43', 'm44', 'map', 'max', 'MAX', 'mid', 'min', 'MIN', 'mul',
+    'now', 'ONE', 'pad', 'pan', 'pop', 'put', 'R8I', 'RED', 'rel', 'rev', 'RG8',
+    'RGB', 'rtt', 'sdp', 'set', 'src', 'sub', 'sup', 'tag', 'tee', 'top', 'upX',
+    'upY', 'upZ', 'url', 'URL', 'usb',
+
+    // 4 characters
+    'abbr', 'axes', 'axis', 'back', 'BACK', 'beta', 'bias', 'bind', 'blob',
+    'blur', 'body', 'bold', 'BOOL', 'BYTE', 'call', 'cite', 'city', 'clip',
+    'code', 'cols', 'cues', 'data', 'DECR', 'DONE', 'dtmf', 'exec', 'face',
+    'fill', 'find', 'flat', 'font', 'form', 'gain', 'hash', 'head', 'hide',
+    'high', 'hint', 'host', 'href', 'icon', 'INCR', 'is2D', 'item', 'join',
+    'json', 'KEEP', 'keys', 'kind', 'knee', 'lang', 'left', 'LESS', 'line',
+    'link', 'list', 'load', 'lock', 'loop', 'mark', 'mode', 'name', 'node',
+    'NONE', 'open', 'OPEN', 'part', 'path', 'ping', 'play', 'port', 'push',
+    'R16F', 'R16I', 'R32F', 'R32I', 'R8UI', 'rate', 'read', 'rect', 'refX',
+    'refY', 'RG8I', 'RGB8', 'RGBA', 'role', 'root', 'rows', 'save', 'sctp',
+    'seed', 'seek', 'send', 'show', 'sign', 'size', 'slot', 'some', 'sort',
+    'span', 'SRGB', 'step', 'stop', 'sync', 'test', 'text', 'then', 'time',
+    'tone', 'trim', 'type', 'unit', 'view', 'wrap', 'ZERO',
   ];
 
   void reserveBackendNames() {
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 83c7797..b8e9f66 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -12,11 +12,11 @@
 import '../closure.dart';
 import '../common.dart';
 import '../common/codegen.dart';
+import '../common/elements.dart' show JElementEnvironment;
 import '../common/names.dart' show Identifiers, Names, Selectors;
-import '../common_elements.dart' show JElementEnvironment;
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../diagnostics/invariant.dart' show DEBUG_MODE;
 import '../elements/entities.dart';
 import '../elements/entity_utils.dart' as utils;
diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart
index 1ef691d..00ee207 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -7,200 +7,39 @@
 import 'package:kernel/ast.dart' as ir;
 
 import '../common.dart';
-import '../common_elements.dart' show ElementEnvironment;
+import '../common/elements.dart' show ElementEnvironment;
 import '../elements/entities.dart';
 import '../ir/annotations.dart';
+import '../js_model/js_world_builder.dart' show identity, JsToFrontendMap;
 import '../kernel/element_map.dart';
 import '../native/behavior.dart' show NativeBehavior;
 import '../serialization/serialization.dart';
 import '../util/util.dart';
 
-/// Basic information for native classes and js-interop libraries and classes.
-///
-/// This information is computed during loading using [NativeBasicDataBuilder].
-abstract class NativeBasicData {
-  /// Deserializes a [NativeBasicData] object from [source].
-  factory NativeBasicData.readFromDataSource(
-          DataSource source, ElementEnvironment elementEnvironment) =
-      NativeBasicDataImpl.readFromDataSource;
+class NativeBasicDataBuilder {
+  bool _closed = false;
 
-  /// Serializes this [NativeBasicData] to [sink].
-  void writeToDataSink(DataSink sink);
+  /// Tag info for native JavaScript classes names. See
+  /// [setNativeClassTagInfo].
+  final Map<ClassEntity, NativeClassTag> _nativeClassTagInfo = {};
 
-  /// Returns `true` if [cls] corresponds to a native JavaScript class.
-  ///
-  /// A class is marked as native either through the `@Native(...)` annotation
-  /// allowed for internal libraries or via the typed JavaScriptInterop
-  /// mechanism allowed for user libraries.
-  bool isNativeClass(ClassEntity element);
+  /// The JavaScript libraries implemented via typed JavaScript interop.
+  final Map<LibraryEntity, String> _jsInteropLibraries = {};
 
-  /// Returns the list of non-directive native tag words for [cls].
-  List<String> getNativeTagsOfClass(ClassEntity cls);
+  /// The JavaScript classes implemented via typed JavaScript interop.
+  final Map<ClassEntity, String> _jsInteropClasses = {};
 
-  /// Returns `true` if [cls] has a `!nonleaf` tag word.
-  bool hasNativeTagsForcedNonLeaf(ClassEntity cls);
+  /// JavaScript interop classes annotated with `@anonymous`
+  final Set<ClassEntity> _anonymousJsInteropClasses = {};
 
-  /// Returns `true` if [element] or any of its superclasses is native.
-  bool isNativeOrExtendsNative(ClassEntity element);
+  /// The JavaScript members implemented via typed JavaScript interop.
+  final Map<MemberEntity, String> _jsInteropMembers = {};
 
-  /// Returns `true` if js interop features are used.
-  bool get isJsInteropUsed;
-
-  /// Returns `true` if `allowInterop()` is invoked.
-  bool get isAllowInteropUsed;
-
-  /// Marks `allowInterop()` as used.
-  ///
-  /// [isAllowInteropUsed] is initially false on the closed world, and is only
-  /// set during codegen enqueuing.
-  void registerAllowInterop();
-
-  /// Returns `true` if [element] is a JsInterop library.
-  bool isJsInteropLibrary(LibraryEntity element);
-
-  /// Returns `true` if [element] is a JsInterop class.
-  bool isJsInteropClass(ClassEntity element);
-
-  /// Returns `true` if [element] is a JsInterop member.
-  bool isJsInteropMember(MemberEntity element);
-}
-
-/// Additional element information for native classes and methods and js-interop
-/// methods.
-///
-/// This information is computed during resolution using [NativeDataBuilder].
-abstract class NativeData extends NativeBasicData {
-  /// Deserializes a [NativeData] object from [source].
-  factory NativeData.readFromDataSource(
-          DataSource source, ElementEnvironment elementEnvironment) =
-      NativeDataImpl.readFromDataSource;
-
-  /// Serializes this [NativeData] to [sink].
-  @override
-  void writeToDataSink(DataSink sink);
-
-  /// Returns `true` if [element] corresponds to a native JavaScript member.
-  ///
-  /// A member is marked as native either through the native mechanism
-  /// (`@Native(...)` or the `native` pseudo keyword) allowed for internal
-  /// libraries or via the typed JavaScriptInterop mechanism allowed for user
-  /// libraries.
-  bool isNativeMember(MemberEntity element);
-
-  /// Returns the [NativeBehavior] for calling the native [method].
-  NativeBehavior getNativeMethodBehavior(FunctionEntity method);
-
-  /// Returns the [NativeBehavior] for reading from the native [field].
-  NativeBehavior getNativeFieldLoadBehavior(FieldEntity field);
-
-  /// Returns the [NativeBehavior] for writing to the native [field].
-  NativeBehavior getNativeFieldStoreBehavior(FieldEntity field);
-
-  /// Returns `true` if the name of [element] is fixed for the generated
-  /// JavaScript.
-  bool hasFixedBackendName(MemberEntity element);
-
-  /// Computes the name for [element] to use in the generated JavaScript. This
-  /// is either given through a native annotation or a js interop annotation.
-  String getFixedBackendName(MemberEntity element);
-
-  /// Computes the name prefix for [element] to use in the generated JavaScript.
-  ///
-  /// For static and top-level members and constructors this is based on the
-  /// JavaScript names for the library and/or the enclosing class.
-  String getFixedBackendMethodPath(FunctionEntity element);
-
-  @override
-  bool isJsInteropMember(MemberEntity element);
-
-  /// Returns the explicit js interop name for library [element].
-  String getJsInteropLibraryName(LibraryEntity element);
-
-  /// Returns `true` if [element] has an `@Anonymous` annotation.
-  bool isAnonymousJsInteropClass(ClassEntity element);
-
-  /// Returns the explicit js interop name for class [element].
-  String getJsInteropClassName(ClassEntity element);
-
-  /// Returns the explicit js interop name for member [element].
-  String getJsInteropMemberName(MemberEntity element);
-
-  /// Apply JS$ escaping scheme to convert possible escaped Dart names into
-  /// JS names.
-  String computeUnescapedJSInteropName(String name);
-}
-
-abstract class NativeBasicDataBuilder {
   /// Sets the native tag info for [cls].
   ///
   /// The tag info string contains comma-separated 'words' which are either
   /// dispatch tags (having JavaScript identifier syntax) and directives that
   /// begin with `!`.
-  void setNativeClassTagInfo(ClassEntity cls, String tagInfo);
-
-  /// Marks [element] as an explicit part of js interop.
-  ///
-  /// If [name] is provided, it sets the explicit js interop name for the
-  /// library [element], other the js interop name is expected to be computed
-  /// later.
-  void markAsJsInteropLibrary(LibraryEntity element, {String name});
-
-  /// Marks [element] as an explicit part of js interop.
-  ///
-  /// If [name] is provided, it sets the explicit js interop name for the
-  /// class [element], other the js interop name is expected to be computed
-  /// later.
-  void markAsJsInteropClass(ClassEntity element,
-      {String name, bool isAnonymous = false});
-
-  /// Marks [element] as an explicit part of js interop and sets the explicit js
-  /// interop [name] for the member [element].
-  void markAsJsInteropMember(MemberEntity element, String name);
-
-  /// Creates the [NativeBasicData] object for the data collected in this
-  /// builder.
-  NativeBasicData close(ElementEnvironment environment);
-}
-
-abstract class NativeDataBuilder {
-  /// Registers the [behavior] for calling the native [method].
-  void setNativeMethodBehavior(FunctionEntity method, NativeBehavior behavior);
-
-  /// Registers the [behavior] for reading from the native [field].
-  void setNativeFieldLoadBehavior(FieldEntity field, NativeBehavior behavior);
-
-  /// Registers the [behavior] for writing to the native [field].
-  void setNativeFieldStoreBehavior(FieldEntity field, NativeBehavior behavior);
-
-  /// Sets the native [name] for the member [element].
-  ///
-  /// This name is used for [element] in the generated JavaScript.
-  void setNativeMemberName(MemberEntity element, String name);
-
-  /// Closes this builder and creates the resulting [NativeData] object.
-  NativeData close();
-}
-
-class NativeBasicDataBuilderImpl implements NativeBasicDataBuilder {
-  bool _closed = false;
-
-  /// Tag info for native JavaScript classes names. See
-  /// [setNativeClassTagInfo].
-  Map<ClassEntity, NativeClassTag> nativeClassTagInfo = {};
-
-  /// The JavaScript libraries implemented via typed JavaScript interop.
-  Map<LibraryEntity, String> jsInteropLibraries = {};
-
-  /// The JavaScript classes implemented via typed JavaScript interop.
-  Map<ClassEntity, String> jsInteropClasses = {};
-
-  /// JavaScript interop classes annotated with `@anonymous`
-  Set<ClassEntity> anonymousJsInteropClasses = {};
-
-  /// The JavaScript members implemented via typed JavaScript interop.
-  Map<MemberEntity, String> jsInteropMembers = {};
-
-  @override
   void setNativeClassTagInfo(ClassEntity cls, String tagText) {
     assert(
         !_closed,
@@ -214,17 +53,21 @@
     // [Compiler.onLibraryScanned] and thereby causes multiple calls to this
     // method.
     assert(
-        nativeClassTagInfo[cls] == null ||
-            nativeClassTagInfo[cls].text == tagText,
+        _nativeClassTagInfo[cls] == null ||
+            _nativeClassTagInfo[cls].text == tagText,
         failedAt(
             cls,
             "Native tag info set inconsistently on $cls: "
-            "Existing tag info '${nativeClassTagInfo[cls]}', "
+            "Existing tag info '${_nativeClassTagInfo[cls]}', "
             "new tag info '$tagText'."));
-    nativeClassTagInfo[cls] = NativeClassTag(tagText);
+    _nativeClassTagInfo[cls] = NativeClassTag(tagText);
   }
 
-  @override
+  /// Marks [element] as an explicit part of js interop.
+  ///
+  /// If [name] is provided, it sets the explicit js interop name for the
+  /// library [element], other the js interop name is expected to be computed
+  /// later.
   void markAsJsInteropLibrary(LibraryEntity element, {String name}) {
     assert(
         !_closed,
@@ -232,10 +75,14 @@
             element,
             "NativeBasicDataBuilder is closed. "
             "Trying to mark $element as a js-interop library."));
-    jsInteropLibraries[element] = name;
+    _jsInteropLibraries[element] = name;
   }
 
-  @override
+  /// Marks [element] as an explicit part of js interop.
+  ///
+  /// If [name] is provided, it sets the explicit js interop name for the
+  /// class [element], other the js interop name is expected to be computed
+  /// later.
   void markAsJsInteropClass(ClassEntity element,
       {String name, bool isAnonymous = false}) {
     assert(
@@ -244,13 +91,14 @@
             element,
             "NativeBasicDataBuilder is closed. "
             "Trying to mark $element as a js-interop class."));
-    jsInteropClasses[element] = name;
+    _jsInteropClasses[element] = name;
     if (isAnonymous) {
-      anonymousJsInteropClasses.add(element);
+      _anonymousJsInteropClasses.add(element);
     }
   }
 
-  @override
+  /// Marks [element] as an explicit part of js interop and sets the explicit js
+  /// interop [name] for the member [element].
   void markAsJsInteropMember(MemberEntity element, String name) {
     assert(
         !_closed,
@@ -258,20 +106,21 @@
             element,
             "NativeBasicDataBuilder is closed. "
             "Trying to mark $element as a js-interop member."));
-    jsInteropMembers[element] = name;
+    _jsInteropMembers[element] = name;
   }
 
-  @override
+  /// Creates the [NativeBasicData] object for the data collected in this
+  /// builder.
   NativeBasicData close(ElementEnvironment environment) {
     _closed = true;
-    return NativeBasicDataImpl(
+    return NativeBasicData(
         environment,
         false,
-        nativeClassTagInfo,
-        jsInteropLibraries,
-        jsInteropClasses,
-        anonymousJsInteropClasses,
-        jsInteropMembers);
+        _nativeClassTagInfo,
+        _jsInteropLibraries,
+        _jsInteropClasses,
+        _anonymousJsInteropClasses,
+        _jsInteropMembers);
   }
 
   void reopenForTesting() {
@@ -279,7 +128,10 @@
   }
 }
 
-class NativeBasicDataImpl implements NativeBasicData {
+/// Basic information for native classes and js-interop libraries and classes.
+///
+/// This information is computed during loading using [NativeBasicDataBuilder].
+class NativeBasicData {
   /// Tag used for identifying serialized [NativeBasicData] objects in a
   /// debugging data stream.
   static const String tag = 'native-basic-data';
@@ -290,30 +142,30 @@
 
   /// Tag info for native JavaScript classes names. See
   /// [setNativeClassTagInfo].
-  final Map<ClassEntity, NativeClassTag> nativeClassTagInfo;
+  final Map<ClassEntity, NativeClassTag> _nativeClassTagInfo;
 
   /// The JavaScript libraries implemented via typed JavaScript interop.
-  final Map<LibraryEntity, String> jsInteropLibraries;
+  final Map<LibraryEntity, String> _jsInteropLibraries;
 
   /// The JavaScript classes implemented via typed JavaScript interop.
-  final Map<ClassEntity, String> jsInteropClasses;
+  final Map<ClassEntity, String> _jsInteropClasses;
 
   /// JavaScript interop classes annotated with `@anonymous`
-  final Set<ClassEntity> anonymousJsInteropClasses;
+  final Set<ClassEntity> _anonymousJsInteropClasses;
 
   /// The JavaScript members implemented via typed JavaScript interop.
-  final Map<MemberEntity, String> jsInteropMembers;
+  final Map<MemberEntity, String> _jsInteropMembers;
 
-  NativeBasicDataImpl(
+  NativeBasicData(
       this._env,
       this._isAllowInteropUsed,
-      this.nativeClassTagInfo,
-      this.jsInteropLibraries,
-      this.jsInteropClasses,
-      this.anonymousJsInteropClasses,
-      this.jsInteropMembers);
+      this._nativeClassTagInfo,
+      this._jsInteropLibraries,
+      this._jsInteropClasses,
+      this._anonymousJsInteropClasses,
+      this._jsInteropMembers);
 
-  factory NativeBasicDataImpl.fromIr(
+  factory NativeBasicData.fromIr(
       KernelToElementMap map, IrAnnotationData data) {
     ElementEnvironment env = map.elementEnvironment;
     Map<ClassEntity, NativeClassTag> nativeClassTagInfo = {};
@@ -342,17 +194,12 @@
       jsInteropMembers[map.getMember(node)] = name;
     });
 
-    return NativeBasicDataImpl(
-        env,
-        false,
-        nativeClassTagInfo,
-        jsInteropLibraries,
-        jsInteropClasses,
-        anonymousJsInteropClasses,
-        jsInteropMembers);
+    return NativeBasicData(env, false, nativeClassTagInfo, jsInteropLibraries,
+        jsInteropClasses, anonymousJsInteropClasses, jsInteropMembers);
   }
 
-  factory NativeBasicDataImpl.readFromDataSource(
+  /// Deserializes a [NativeBasicData] object from [source].
+  factory NativeBasicData.readFromDataSource(
       DataSource source, ElementEnvironment elementEnvironment) {
     source.begin(tag);
     bool isAllowInteropUsed = source.readBool();
@@ -370,7 +217,7 @@
     Map<MemberEntity, String> jsInteropMembers =
         source.readMemberMap((MemberEntity member) => source.readString());
     source.end(tag);
-    return NativeBasicDataImpl(
+    return NativeBasicData(
         elementEnvironment,
         isAllowInteropUsed,
         nativeClassTagInfo,
@@ -380,68 +227,75 @@
         jsInteropMembers);
   }
 
-  @override
+  /// Serializes this [NativeBasicData] to [sink].
   void writeToDataSink(DataSink sink) {
     sink.begin(tag);
     sink.writeBool(isAllowInteropUsed);
-    sink.writeClassMap(nativeClassTagInfo, (NativeClassTag tag) {
+    sink.writeClassMap(_nativeClassTagInfo, (NativeClassTag tag) {
       sink.writeStrings(tag.names);
       sink.writeBool(tag.isNonLeaf);
     });
-    sink.writeLibraryMap(jsInteropLibraries, sink.writeString);
-    sink.writeClassMap(jsInteropClasses, sink.writeString);
-    sink.writeClasses(anonymousJsInteropClasses);
-    sink.writeMemberMap(jsInteropMembers,
+    sink.writeLibraryMap(_jsInteropLibraries, sink.writeString);
+    sink.writeClassMap(_jsInteropClasses, sink.writeString);
+    sink.writeClasses(_anonymousJsInteropClasses);
+    sink.writeMemberMap(_jsInteropMembers,
         (MemberEntity member, String name) => sink.writeString(name));
     sink.end(tag);
   }
 
-  @override
+  /// Returns `true` if `allowInterop()` is invoked.
   bool get isAllowInteropUsed => _isAllowInteropUsed;
 
-  @override
+  /// Marks `allowInterop()` as used.
+  ///
+  /// [isAllowInteropUsed] is initially false on the closed world, and is only
+  /// set during codegen enqueuing.
   void registerAllowInterop() {
     _isAllowInteropUsed = true;
   }
 
-  @override
+  /// Returns `true` if [cls] corresponds to a native JavaScript class.
+  ///
+  /// A class is marked as native either through the `@Native(...)` annotation
+  /// allowed for internal libraries or via the typed JavaScriptInterop
+  /// mechanism allowed for user libraries.
   bool isNativeClass(ClassEntity element) {
     if (isJsInteropClass(element)) return true;
-    return nativeClassTagInfo.containsKey(element);
+    return _nativeClassTagInfo.containsKey(element);
   }
 
-  @override
+  /// Returns the list of non-directive native tag words for [cls].
   List<String> getNativeTagsOfClass(ClassEntity cls) {
-    return nativeClassTagInfo[cls].names;
+    return _nativeClassTagInfo[cls].names;
   }
 
-  @override
+  /// Returns `true` if [cls] has a `!nonleaf` tag word.
   bool hasNativeTagsForcedNonLeaf(ClassEntity cls) {
-    return nativeClassTagInfo[cls].isNonLeaf;
+    return _nativeClassTagInfo[cls].isNonLeaf;
   }
 
-  @override
+  /// Returns `true` if js interop features are used.
   bool get isJsInteropUsed =>
-      jsInteropLibraries.isNotEmpty || jsInteropClasses.isNotEmpty;
+      _jsInteropLibraries.isNotEmpty || _jsInteropClasses.isNotEmpty;
 
-  @override
+  /// Returns `true` if [element] is a JsInterop library.
   bool isJsInteropLibrary(LibraryEntity element) {
-    return jsInteropLibraries.containsKey(element);
+    return _jsInteropLibraries.containsKey(element);
   }
 
-  @override
+  /// Returns `true` if [element] is a JsInterop class.
   bool isJsInteropClass(ClassEntity element) {
-    return jsInteropClasses.containsKey(element);
+    return _jsInteropClasses.containsKey(element);
   }
 
   /// Returns `true` if [element] is explicitly marked as part of JsInterop.
   bool _isJsInteropMember(MemberEntity element) {
-    return jsInteropMembers.containsKey(element);
+    return _jsInteropMembers.containsKey(element);
   }
 
-  @override
+  /// Returns `true` if [element] is a JsInterop member.
   bool isJsInteropMember(MemberEntity element) {
-    // TODO(johnniwinther): Share this with [NativeDataImpl.isJsInteropMember].
+    // TODO(johnniwinther): Share this with [NativeData.isJsInteropMember].
     if (element.isFunction ||
         element.isConstructor ||
         element.isGetter ||
@@ -462,7 +316,7 @@
     }
   }
 
-  @override
+  /// Returns `true` if [element] or any of its superclasses is native.
   bool isNativeOrExtendsNative(ClassEntity element) {
     if (element == null) return false;
     if (isNativeClass(element) || isJsInteropClass(element)) {
@@ -470,63 +324,98 @@
     }
     return isNativeOrExtendsNative(_env.getSuperClass(element));
   }
+
+  NativeBasicData convert(JsToFrontendMap map, ElementEnvironment environment) {
+    Map<ClassEntity, NativeClassTag> nativeClassTagInfo =
+        <ClassEntity, NativeClassTag>{};
+    _nativeClassTagInfo.forEach((ClassEntity cls, NativeClassTag tag) {
+      nativeClassTagInfo[map.toBackendClass(cls)] = tag;
+    });
+    Map<LibraryEntity, String> jsInteropLibraries =
+        map.toBackendLibraryMap(_jsInteropLibraries, identity);
+    Map<ClassEntity, String> jsInteropClasses =
+        map.toBackendClassMap(_jsInteropClasses, identity);
+    Set<ClassEntity> anonymousJsInteropClasses =
+        map.toBackendClassSet(_anonymousJsInteropClasses);
+    Map<MemberEntity, String> jsInteropMembers =
+        map.toBackendMemberMap(_jsInteropMembers, identity);
+    return NativeBasicData(
+        environment,
+        isAllowInteropUsed,
+        nativeClassTagInfo,
+        jsInteropLibraries,
+        jsInteropClasses,
+        anonymousJsInteropClasses,
+        jsInteropMembers);
+  }
 }
 
-class NativeDataBuilderImpl implements NativeDataBuilder {
-  final NativeBasicDataImpl _nativeBasicData;
+class NativeDataBuilder {
+  final NativeBasicData _nativeBasicData;
 
   /// The JavaScript names for native JavaScript elements implemented.
-  Map<MemberEntity, String> nativeMemberName = {};
+  final Map<MemberEntity, String> _nativeMemberName = {};
 
   /// Cache for [NativeBehavior]s for calling native methods.
-  Map<FunctionEntity, NativeBehavior> nativeMethodBehavior = {};
+  final Map<FunctionEntity, NativeBehavior> _nativeMethodBehavior = {};
 
   /// Cache for [NativeBehavior]s for reading from native fields.
-  Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior = {};
+  final Map<MemberEntity, NativeBehavior> _nativeFieldLoadBehavior = {};
 
   /// Cache for [NativeBehavior]s for writing to native fields.
-  Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior = {};
+  final Map<MemberEntity, NativeBehavior> _nativeFieldStoreBehavior = {};
 
-  NativeDataBuilderImpl(this._nativeBasicData);
+  NativeDataBuilder(this._nativeBasicData);
 
-  @override
+  /// Sets the native [name] for the member [element].
+  ///
+  /// This name is used for [element] in the generated JavaScript.
   void setNativeMemberName(MemberEntity element, String name) {
     // TODO(johnniwinther): Avoid setting this more than once. The enqueuer
     // might enqueue [element] several times (before processing it) and computes
     // name on each call to `internalAddToWorkList`.
     assert(
-        nativeMemberName[element] == null || nativeMemberName[element] == name,
+        _nativeMemberName[element] == null ||
+            _nativeMemberName[element] == name,
         failedAt(
             element,
             "Native member name set inconsistently on $element: "
-            "Existing name '${nativeMemberName[element]}', "
+            "Existing name '${_nativeMemberName[element]}', "
             "new name '$name'."));
-    nativeMemberName[element] = name;
+    _nativeMemberName[element] = name;
   }
 
-  @override
+  /// Registers the [behavior] for calling the native [method].
   void setNativeMethodBehavior(FunctionEntity method, NativeBehavior behavior) {
-    nativeMethodBehavior[method] = behavior;
+    _nativeMethodBehavior[method] = behavior;
   }
 
-  @override
+  /// Registers the [behavior] for reading from the native [field].
   void setNativeFieldLoadBehavior(FieldEntity field, NativeBehavior behavior) {
-    nativeFieldLoadBehavior[field] = behavior;
+    _nativeFieldLoadBehavior[field] = behavior;
   }
 
-  @override
+  /// Registers the [behavior] for writing to the native [field].
   void setNativeFieldStoreBehavior(FieldEntity field, NativeBehavior behavior) {
-    nativeFieldStoreBehavior[field] = behavior;
+    _nativeFieldStoreBehavior[field] = behavior;
   }
 
-  @override
-  NativeData close() => NativeDataImpl(_nativeBasicData, nativeMemberName,
-      nativeMethodBehavior, nativeFieldLoadBehavior, nativeFieldStoreBehavior);
+  /// Closes this builder and creates the resulting [NativeData] object.
+  NativeData close() => NativeData(
+      _nativeBasicData,
+      _nativeMemberName,
+      _nativeMethodBehavior,
+      _nativeFieldLoadBehavior,
+      _nativeFieldStoreBehavior);
 }
 
+/// Additional element information for native classes and methods and js-interop
+/// methods.
+///
+/// This information is computed during resolution using [NativeDataBuilder].
 // TODO(johnniwinther): Remove fields that overlap with [NativeBasicData], like
 // [anonymousJsInteropClasses].
-class NativeDataImpl implements NativeData, NativeBasicDataImpl {
+class NativeData implements NativeBasicData {
   /// Tag used for identifying serialized [NativeData] objects in a
   /// debugging data stream.
   static const String tag = 'native-data';
@@ -535,29 +424,29 @@
   /// when using JSInterop.
   static const String _jsInteropEscapePrefix = r'JS$';
 
-  final NativeBasicDataImpl _nativeBasicData;
+  final NativeBasicData _nativeBasicData;
 
   /// The JavaScript names for native JavaScript elements implemented.
-  final Map<MemberEntity, String> nativeMemberName;
+  final Map<MemberEntity, String> _nativeMemberName;
 
   /// Cache for [NativeBehavior]s for calling native methods.
-  final Map<FunctionEntity, NativeBehavior> nativeMethodBehavior;
+  final Map<FunctionEntity, NativeBehavior> _nativeMethodBehavior;
 
   /// Cache for [NativeBehavior]s for reading from native fields.
-  final Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior;
+  final Map<MemberEntity, NativeBehavior> _nativeFieldLoadBehavior;
 
   /// Cache for [NativeBehavior]s for writing to native fields.
-  final Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior;
+  final Map<MemberEntity, NativeBehavior> _nativeFieldStoreBehavior;
 
-  NativeDataImpl(
+  NativeData(
       this._nativeBasicData,
-      this.nativeMemberName,
-      this.nativeMethodBehavior,
-      this.nativeFieldLoadBehavior,
-      this.nativeFieldStoreBehavior);
+      this._nativeMemberName,
+      this._nativeMethodBehavior,
+      this._nativeFieldLoadBehavior,
+      this._nativeFieldStoreBehavior);
 
-  factory NativeDataImpl.fromIr(KernelToElementMap map, IrAnnotationData data) {
-    NativeBasicDataImpl nativeBasicData = NativeBasicDataImpl.fromIr(map, data);
+  factory NativeData.fromIr(KernelToElementMap map, IrAnnotationData data) {
+    NativeBasicData nativeBasicData = NativeBasicData.fromIr(map, data);
     Map<MemberEntity, String> nativeMemberName = {};
     Map<FunctionEntity, NativeBehavior> nativeMethodBehavior = {};
     Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior = {};
@@ -589,15 +478,12 @@
           map.getNativeBehaviorForFieldStore(node);
     });
 
-    return NativeDataImpl(
-        nativeBasicData,
-        nativeMemberName,
-        nativeMethodBehavior,
-        nativeFieldLoadBehavior,
-        nativeFieldStoreBehavior);
+    return NativeData(nativeBasicData, nativeMemberName, nativeMethodBehavior,
+        nativeFieldLoadBehavior, nativeFieldStoreBehavior);
   }
 
-  factory NativeDataImpl.readFromDataSource(
+  /// Deserializes a [NativeData] object from [source].
+  factory NativeData.readFromDataSource(
       DataSource source, ElementEnvironment elementEnvironment) {
     source.begin(tag);
     NativeBasicData nativeBasicData =
@@ -614,32 +500,29 @@
         source.readMemberMap(
             (MemberEntity member) => NativeBehavior.readFromDataSource(source));
     source.end(tag);
-    return NativeDataImpl(
-        nativeBasicData,
-        nativeMemberName,
-        nativeMethodBehavior,
-        nativeFieldLoadBehavior,
-        nativeFieldStoreBehavior);
+    return NativeData(nativeBasicData, nativeMemberName, nativeMethodBehavior,
+        nativeFieldLoadBehavior, nativeFieldStoreBehavior);
   }
 
+  /// Serializes this [NativeData] to [sink].
   @override
   void writeToDataSink(DataSink sink) {
     sink.begin(tag);
     _nativeBasicData.writeToDataSink(sink);
 
-    sink.writeMemberMap(nativeMemberName,
+    sink.writeMemberMap(_nativeMemberName,
         (MemberEntity member, String name) => sink.writeString(name));
 
-    sink.writeMemberMap(nativeMethodBehavior,
+    sink.writeMemberMap(_nativeMethodBehavior,
         (MemberEntity member, NativeBehavior behavior) {
       behavior.writeToDataSink(sink);
     });
 
-    sink.writeMemberMap(nativeFieldLoadBehavior,
+    sink.writeMemberMap(_nativeFieldLoadBehavior,
         (MemberEntity member, NativeBehavior behavior) {
       behavior.writeToDataSink(sink);
     });
-    sink.writeMemberMap(nativeFieldStoreBehavior,
+    sink.writeMemberMap(_nativeFieldStoreBehavior,
         (MemberEntity member, NativeBehavior behavior) {
       behavior.writeToDataSink(sink);
     });
@@ -661,24 +544,24 @@
   void registerAllowInterop() => _nativeBasicData.registerAllowInterop();
 
   @override
-  Map<LibraryEntity, String> get jsInteropLibraries =>
-      _nativeBasicData.jsInteropLibraries;
+  Map<LibraryEntity, String> get _jsInteropLibraries =>
+      _nativeBasicData._jsInteropLibraries;
 
   @override
-  Set<ClassEntity> get anonymousJsInteropClasses =>
-      _nativeBasicData.anonymousJsInteropClasses;
+  Set<ClassEntity> get _anonymousJsInteropClasses =>
+      _nativeBasicData._anonymousJsInteropClasses;
 
   @override
-  Map<ClassEntity, String> get jsInteropClasses =>
-      _nativeBasicData.jsInteropClasses;
+  Map<ClassEntity, String> get _jsInteropClasses =>
+      _nativeBasicData._jsInteropClasses;
 
   @override
-  Map<MemberEntity, String> get jsInteropMembers =>
-      _nativeBasicData.jsInteropMembers;
+  Map<MemberEntity, String> get _jsInteropMembers =>
+      _nativeBasicData._jsInteropMembers;
 
-  @override
+  /// Returns `true` if [element] has an `@Anonymous` annotation.
   bool isAnonymousJsInteropClass(ClassEntity element) {
-    return anonymousJsInteropClasses.contains(element);
+    return _anonymousJsInteropClasses.contains(element);
   }
 
   @override
@@ -708,24 +591,24 @@
   bool isNativeOrExtendsNative(ClassEntity element) =>
       _nativeBasicData.isNativeOrExtendsNative(element);
 
-  @override
+  /// Returns the explicit js interop name for library [element].
   String getJsInteropLibraryName(LibraryEntity element) {
-    return jsInteropLibraries[element];
+    return _jsInteropLibraries[element];
   }
 
-  @override
+  /// Returns the explicit js interop name for class [element].
   String getJsInteropClassName(ClassEntity element) {
-    return jsInteropClasses[element];
+    return _jsInteropClasses[element];
   }
 
-  @override
+  /// Returns the explicit js interop name for member [element].
   String getJsInteropMemberName(MemberEntity element) {
-    return jsInteropMembers[element];
+    return _jsInteropMembers[element];
   }
 
   @override
   bool _isJsInteropMember(MemberEntity element) {
-    return jsInteropMembers.containsKey(element);
+    return _jsInteropMembers.containsKey(element);
   }
 
   @override
@@ -750,21 +633,23 @@
     }
   }
 
-  @override
+  /// Returns `true` if the name of [element] is fixed for the generated
+  /// JavaScript.
   bool hasFixedBackendName(MemberEntity element) {
-    return isJsInteropMember(element) || nativeMemberName.containsKey(element);
+    return isJsInteropMember(element) || _nativeMemberName.containsKey(element);
   }
 
-  @override
+  /// Computes the name for [element] to use in the generated JavaScript. This
+  /// is either given through a native annotation or a js interop annotation.
   String getFixedBackendName(MemberEntity element) {
-    String name = nativeMemberName[element];
+    String name = _nativeMemberName[element];
     if (name == null && isJsInteropMember(element)) {
       // If an element isJsInterop but _isJsInterop is false that means it is
       // considered interop as the parent class is interop.
       name = element.isConstructor
           ? _jsClassNameHelper(element.enclosingClass)
           : _jsMemberNameHelper(element);
-      nativeMemberName[element] = name;
+      _nativeMemberName[element] = name;
     }
     return name;
   }
@@ -782,9 +667,9 @@
   }
 
   String _jsMemberNameHelper(MemberEntity element) {
-    String jsInteropName = jsInteropMembers[element];
+    String jsInteropName = _jsInteropMembers[element];
     assert(
-        !(jsInteropMembers.containsKey(element) && jsInteropName == null),
+        !(_jsInteropMembers.containsKey(element) && jsInteropName == null),
         failedAt(
             element,
             'Member $element is js interop but js interop name has not yet '
@@ -801,7 +686,6 @@
   /// For example: fixedBackendPath for the static method createMap in the
   /// Map class of the goog.map JavaScript library would have path
   /// "goog.maps.Map".
-  @override
   String getFixedBackendMethodPath(FunctionEntity element) {
     if (!isJsInteropMember(element)) return null;
     if (element.isInstanceMember) return 'this';
@@ -823,42 +707,48 @@
     return _jsLibraryNameHelper(element.library);
   }
 
-  @override
+  /// Returns `true` if [element] corresponds to a native JavaScript member.
+  ///
+  /// A member is marked as native either through the native mechanism
+  /// (`@Native(...)` or the `native` pseudo keyword) allowed for internal
+  /// libraries or via the typed JavaScriptInterop mechanism allowed for user
+  /// libraries.
   bool isNativeMember(MemberEntity element) {
     if (isJsInteropMember(element)) return true;
-    return nativeMemberName.containsKey(element);
+    return _nativeMemberName.containsKey(element);
   }
 
-  @override
+  /// Returns the [NativeBehavior] for calling the native [method].
   NativeBehavior getNativeMethodBehavior(FunctionEntity method) {
     assert(
-        nativeMethodBehavior.containsKey(method),
+        _nativeMethodBehavior.containsKey(method),
         failedAt(method,
             "No native method behavior has been computed for $method."));
-    return nativeMethodBehavior[method];
+    return _nativeMethodBehavior[method];
   }
 
-  @override
+  /// Returns the [NativeBehavior] for reading from the native [field].
   NativeBehavior getNativeFieldLoadBehavior(FieldEntity field) {
     assert(
-        nativeFieldLoadBehavior.containsKey(field),
+        _nativeFieldLoadBehavior.containsKey(field),
         failedAt(
             field,
             "No native field load behavior has been "
             "computed for $field."));
-    return nativeFieldLoadBehavior[field];
+    return _nativeFieldLoadBehavior[field];
   }
 
-  @override
+  /// Returns the [NativeBehavior] for writing to the native [field].
   NativeBehavior getNativeFieldStoreBehavior(FieldEntity field) {
     assert(
-        nativeFieldStoreBehavior.containsKey(field),
+        _nativeFieldStoreBehavior.containsKey(field),
         failedAt(field,
             "No native field store behavior has been computed for $field."));
-    return nativeFieldStoreBehavior[field];
+    return _nativeFieldStoreBehavior[field];
   }
 
-  @override
+  /// Apply JS$ escaping scheme to convert possible escaped Dart names into
+  /// JS names.
   String computeUnescapedJSInteropName(String name) {
     return name.startsWith(_jsInteropEscapePrefix)
         ? name.substring(_jsInteropEscapePrefix.length)
@@ -866,11 +756,37 @@
   }
 
   @override
-  Map<ClassEntity, NativeClassTag> get nativeClassTagInfo =>
-      _nativeBasicData.nativeClassTagInfo;
+  Map<ClassEntity, NativeClassTag> get _nativeClassTagInfo =>
+      _nativeBasicData._nativeClassTagInfo;
 
   @override
   ElementEnvironment get _env => _nativeBasicData._env;
+
+  @override
+  NativeData convert(JsToFrontendMap map, ElementEnvironment environment) {
+    NativeBasicData nativeBasicData =
+        _nativeBasicData.convert(map, environment);
+    Map<MemberEntity, String> nativeMemberName =
+        map.toBackendMemberMap(_nativeMemberName, identity);
+    final nativeMethodBehavior = <FunctionEntity, NativeBehavior>{};
+    _nativeMethodBehavior
+        .forEach((FunctionEntity method, NativeBehavior behavior) {
+      FunctionEntity backendMethod = map.toBackendMember(method);
+      if (backendMethod != null) {
+        // If [method] isn't used it doesn't have a corresponding backend
+        // method.
+        nativeMethodBehavior[backendMethod] = behavior.convert(map);
+      }
+    });
+    NativeBehavior _convertNativeBehavior(NativeBehavior behavior) =>
+        behavior.convert(map);
+    Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior = map
+        .toBackendMemberMap(_nativeFieldLoadBehavior, _convertNativeBehavior);
+    Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior = map
+        .toBackendMemberMap(_nativeFieldStoreBehavior, _convertNativeBehavior);
+    return NativeData(nativeBasicData, nativeMemberName, nativeMethodBehavior,
+        nativeFieldLoadBehavior, nativeFieldStoreBehavior);
+  }
 }
 
 class NativeClassTag {
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 1ef96e6..8c957ec 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
@@ -3,10 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../common/names.dart' show Identifiers, Selectors;
 import '../elements/entities.dart';
 import '../inferrer/types.dart';
+import '../kernel/no_such_method_resolver.dart';
 import '../serialization/serialization.dart';
 
 /// [NoSuchMethodRegistry] and [NoSuchMethodData] categorizes `noSuchMethod`
@@ -48,63 +49,53 @@
 
 /// Registry for collecting `noSuchMethod` implementations and categorizing them
 /// into categories `A`, `B`, `C`, `D`.
-abstract class NoSuchMethodRegistry {
-  /// Register [noSuchMethodElement].
-  void registerNoSuchMethod(FunctionEntity noSuchMethodElement);
-
-  /// Categorizes the registered methods.
-  void onQueueEmpty();
-
-  /// `true` if a category `B` method has been seen so far.
-  bool get hasThrowingNoSuchMethod;
-
-  /// `true` if a category `D` method has been seen so far.
-  bool get hasComplexNoSuchMethod;
-
-  /// Closes the registry and returns data object used during type inference.
-  NoSuchMethodData close();
-}
-
-class NoSuchMethodRegistryImpl implements NoSuchMethodRegistry {
+class NoSuchMethodRegistry {
   /// The implementations that fall into category A, described above.
-  final Set<FunctionEntity> defaultImpls = {};
+  final Set<FunctionEntity> _defaultImpls = {};
 
   /// The implementations that fall into category B, described above.
-  final Set<FunctionEntity> throwingImpls = {};
+  final Set<FunctionEntity> _throwingImpls = {};
 
   /// The implementations that fall into category C, described above.
   // TODO(johnniwinther): Remove this category when Dart 1 is no longer
   // supported.
-  final Set<FunctionEntity> notApplicableImpls = {};
+  final Set<FunctionEntity> _notApplicableImpls = {};
 
   /// The implementations that fall into category D, described above.
-  final Set<FunctionEntity> otherImpls = {};
+  final Set<FunctionEntity> _otherImpls = {};
 
   /// The implementations that have not yet been categorized.
   final Set<FunctionEntity> _uncategorizedImpls = {};
 
   /// The implementations that a forwarding syntax as defined by
   /// [NoSuchMethodResolver.hasForwardSyntax].
-  final Set<FunctionEntity> forwardingSyntaxImpls = {};
+  final Set<FunctionEntity> _forwardingSyntaxImpls = {};
 
   final CommonElements _commonElements;
   final NoSuchMethodResolver _resolver;
 
-  NoSuchMethodRegistryImpl(this._commonElements, this._resolver);
+  NoSuchMethodRegistry(this._commonElements, this._resolver);
 
   NoSuchMethodResolver get internalResolverForTesting => _resolver;
 
-  @override
-  bool get hasThrowingNoSuchMethod => throwingImpls.isNotEmpty;
-  @override
-  bool get hasComplexNoSuchMethod => otherImpls.isNotEmpty;
+  /// `true` if a category `B` method has been seen so far.
+  bool get hasThrowingNoSuchMethod => _throwingImpls.isNotEmpty;
 
-  @override
+  /// `true` if a category `D` method has been seen so far.
+  bool get hasComplexNoSuchMethod => _otherImpls.isNotEmpty;
+
+  Iterable<FunctionEntity> get defaultImpls => _defaultImpls;
+
+  Iterable<FunctionEntity> get throwingImpls => _throwingImpls;
+
+  Iterable<FunctionEntity> get otherImpls => _otherImpls;
+
+  /// Register [noSuchMethodElement].
   void registerNoSuchMethod(FunctionEntity noSuchMethodElement) {
     _uncategorizedImpls.add(noSuchMethodElement);
   }
 
-  @override
+  /// Categorizes the registered methods.
   void onQueueEmpty() {
     _uncategorizedImpls.forEach(_categorizeImpl);
     _uncategorizedImpls.clear();
@@ -113,62 +104,62 @@
   NsmCategory _categorizeImpl(FunctionEntity element) {
     assert(element.name == Identifiers.noSuchMethod_);
     assert(!element.isAbstract);
-    if (defaultImpls.contains(element)) {
+    if (_defaultImpls.contains(element)) {
       return NsmCategory.DEFAULT;
     }
-    if (throwingImpls.contains(element)) {
+    if (_throwingImpls.contains(element)) {
       return NsmCategory.THROWING;
     }
-    if (otherImpls.contains(element)) {
+    if (_otherImpls.contains(element)) {
       return NsmCategory.OTHER;
     }
-    if (notApplicableImpls.contains(element)) {
+    if (_notApplicableImpls.contains(element)) {
       return NsmCategory.NOT_APPLICABLE;
     }
     if (!Selectors.noSuchMethod_.signatureApplies(element)) {
-      notApplicableImpls.add(element);
+      _notApplicableImpls.add(element);
       return NsmCategory.NOT_APPLICABLE;
     }
     if (_commonElements.isDefaultNoSuchMethodImplementation(element)) {
-      defaultImpls.add(element);
+      _defaultImpls.add(element);
       return NsmCategory.DEFAULT;
     } else if (_resolver.hasForwardingSyntax(element)) {
-      forwardingSyntaxImpls.add(element);
+      _forwardingSyntaxImpls.add(element);
       // If the implementation is 'noSuchMethod(x) => super.noSuchMethod(x);'
       // then it is in the same category as the super call.
       FunctionEntity superCall = _resolver.getSuperNoSuchMethod(element);
       NsmCategory category = _categorizeImpl(superCall);
       switch (category) {
         case NsmCategory.DEFAULT:
-          defaultImpls.add(element);
+          _defaultImpls.add(element);
           break;
         case NsmCategory.THROWING:
-          throwingImpls.add(element);
+          _throwingImpls.add(element);
           break;
         case NsmCategory.OTHER:
-          otherImpls.add(element);
+          _otherImpls.add(element);
           break;
         case NsmCategory.NOT_APPLICABLE:
           // If the super method is not applicable, the call is redirected to
           // `Object.noSuchMethod`.
-          defaultImpls.add(element);
+          _defaultImpls.add(element);
           category = NsmCategory.DEFAULT;
           break;
       }
       return category;
     } else if (_resolver.hasThrowingSyntax(element)) {
-      throwingImpls.add(element);
+      _throwingImpls.add(element);
       return NsmCategory.THROWING;
     } else {
-      otherImpls.add(element);
+      _otherImpls.add(element);
       return NsmCategory.OTHER;
     }
   }
 
-  @override
+  /// Closes the registry and returns data object used during type inference.
   NoSuchMethodData close() {
-    return NoSuchMethodDataImpl(
-        throwingImpls, otherImpls, forwardingSyntaxImpls);
+    return NoSuchMethodData(
+        _throwingImpls, _otherImpls, _forwardingSyntaxImpls);
   }
 }
 
@@ -176,51 +167,30 @@
 ///
 /// Post inference collected category `D` methods are into subcategories `D1`
 /// and `D2`.
-abstract class NoSuchMethodData {
-  /// Deserializes a [NoSuchMethodData] object from [source].
-  factory NoSuchMethodData.readFromDataSource(DataSource source) =
-      NoSuchMethodDataImpl.readFromDataSource;
-
-  /// Serializes this [NoSuchMethodData] to [sink].
-  void writeToDataSink(DataSink sink);
-
-  /// Returns [true] if the given element is a complex [noSuchMethod]
-  /// implementation. An implementation is complex if it falls into
-  /// category D, as described above.
-  bool isComplex(FunctionEntity element);
-
-  /// Now that type inference is complete, split category D into two
-  /// subcategories: D1, those that have no return type, and D2, those
-  /// that have a return type.
-  void categorizeComplexImplementations(GlobalTypeInferenceResults results);
-
-  /// Emits a diagnostic about methods in categories `B`, `D1` and `D2`.
-  void emitDiagnostic(DiagnosticReporter reporter);
-}
-
-class NoSuchMethodDataImpl implements NoSuchMethodData {
+class NoSuchMethodData {
   /// Tag used for identifying serialized [NoSuchMethodData] objects in a
   /// debugging data stream.
   static const String tag = 'no-such-method-data';
 
   /// The implementations that fall into category B, described above.
-  final Set<FunctionEntity> throwingImpls;
+  final Set<FunctionEntity> _throwingImpls;
 
   /// The implementations that fall into category D, described above.
-  final Set<FunctionEntity> otherImpls;
+  final Set<FunctionEntity> _otherImpls;
 
   /// The implementations that fall into category D1
-  final Set<FunctionEntity> complexNoReturnImpls = {};
+  final Set<FunctionEntity> _complexNoReturnImpls = {};
 
   /// The implementations that fall into category D2
-  final Set<FunctionEntity> complexReturningImpls = {};
+  final Set<FunctionEntity> _complexReturningImpls = {};
 
-  final Set<FunctionEntity> forwardingSyntaxImpls;
+  final Set<FunctionEntity> _forwardingSyntaxImpls;
 
-  NoSuchMethodDataImpl(
-      this.throwingImpls, this.otherImpls, this.forwardingSyntaxImpls);
+  NoSuchMethodData(
+      this._throwingImpls, this._otherImpls, this._forwardingSyntaxImpls);
 
-  factory NoSuchMethodDataImpl.readFromDataSource(DataSource source) {
+  /// Deserializes a [NoSuchMethodData] object from [source].
+  factory NoSuchMethodData.readFromDataSource(DataSource source) {
     source.begin(tag);
     Set<FunctionEntity> throwingImpls =
         source.readMembers<FunctionEntity>().toSet();
@@ -233,57 +203,70 @@
     List<FunctionEntity> complexReturningImpls =
         source.readMembers<FunctionEntity>();
     source.end(tag);
-    return NoSuchMethodDataImpl(
-        throwingImpls, otherImpls, forwardingSyntaxImpls)
-      ..complexNoReturnImpls.addAll(complexNoReturnImpls)
-      ..complexReturningImpls.addAll(complexReturningImpls);
+    return NoSuchMethodData(throwingImpls, otherImpls, forwardingSyntaxImpls)
+      .._complexNoReturnImpls.addAll(complexNoReturnImpls)
+      .._complexReturningImpls.addAll(complexReturningImpls);
   }
 
-  @override
+  /// Serializes this [NoSuchMethodData] to [sink].
   void writeToDataSink(DataSink sink) {
     sink.begin(tag);
-    sink.writeMembers(throwingImpls);
-    sink.writeMembers(otherImpls);
-    sink.writeMembers(forwardingSyntaxImpls);
-    sink.writeMembers(complexNoReturnImpls);
-    sink.writeMembers(complexReturningImpls);
+    sink.writeMembers(_throwingImpls);
+    sink.writeMembers(_otherImpls);
+    sink.writeMembers(_forwardingSyntaxImpls);
+    sink.writeMembers(_complexNoReturnImpls);
+    sink.writeMembers(_complexReturningImpls);
     sink.end(tag);
   }
 
-  @override
+  Iterable<FunctionEntity> get throwingImpls => _throwingImpls;
+
+  Iterable<FunctionEntity> get otherImpls => _otherImpls;
+
+  Iterable<FunctionEntity> get forwardingSyntaxImpls => _forwardingSyntaxImpls;
+
+  Iterable<FunctionEntity> get complexNoReturnImpls => _complexNoReturnImpls;
+
+  Iterable<FunctionEntity> get complexReturningImpls => _complexReturningImpls;
+
+  /// Now that type inference is complete, split category D into two
+  /// subcategories: D1, those that have no return type, and D2, those
+  /// that have a return type.
   void categorizeComplexImplementations(GlobalTypeInferenceResults results) {
-    otherImpls.forEach((FunctionEntity element) {
+    _otherImpls.forEach((FunctionEntity element) {
       if (results.resultOfMember(element).throwsAlways) {
-        complexNoReturnImpls.add(element);
+        _complexNoReturnImpls.add(element);
       } else {
-        complexReturningImpls.add(element);
+        _complexReturningImpls.add(element);
       }
     });
   }
 
-  @override
+  /// Emits a diagnostic about methods in categories `B`, `D1` and `D2`.
   void emitDiagnostic(DiagnosticReporter reporter) {
-    throwingImpls.forEach((e) {
-      if (!forwardingSyntaxImpls.contains(e)) {
+    _throwingImpls.forEach((e) {
+      if (!_forwardingSyntaxImpls.contains(e)) {
         reporter.reportHintMessage(e, MessageKind.DIRECTLY_THROWING_NSM);
       }
     });
-    complexNoReturnImpls.forEach((e) {
-      if (!forwardingSyntaxImpls.contains(e)) {
+    _complexNoReturnImpls.forEach((e) {
+      if (!_forwardingSyntaxImpls.contains(e)) {
         reporter.reportHintMessage(e, MessageKind.COMPLEX_THROWING_NSM);
       }
     });
-    complexReturningImpls.forEach((e) {
-      if (!forwardingSyntaxImpls.contains(e)) {
+    _complexReturningImpls.forEach((e) {
+      if (!_forwardingSyntaxImpls.contains(e)) {
         reporter.reportHintMessage(e, MessageKind.COMPLEX_RETURNING_NSM);
       }
     });
   }
 
-  @override
+  /// Returns [true] if the given element is a complex [noSuchMethod]
+  /// implementation. An implementation is complex if it falls into
+  /// category D, as described above.
   bool isComplex(FunctionEntity element) {
     assert(element.name == Identifiers.noSuchMethod_);
-    return otherImpls.contains(element);
+    return _otherImpls.contains(element);
   }
 }
 
@@ -293,21 +276,3 @@
   NOT_APPLICABLE,
   OTHER,
 }
-
-/// Interface for determining the form of a `noSuchMethod` implementation.
-abstract class NoSuchMethodResolver {
-  /// Computes whether [method] is of the form
-  ///
-  ///     noSuchMethod(i) => super.noSuchMethod(i);
-  ///
-  bool hasForwardingSyntax(covariant FunctionEntity method);
-
-  /// Computes whether [method] is of the form
-  ///
-  ///     noSuchMethod(i) => throw new Error();
-  ///
-  bool hasThrowingSyntax(covariant FunctionEntity method);
-
-  /// Returns the `noSuchMethod` that [method] overrides.
-  FunctionEntity getSuperNoSuchMethod(covariant FunctionEntity method);
-}
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index 0b220af..ca26e30 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -4,8 +4,8 @@
 
 library js_backend.backend.resolution_listener;
 
+import '../common/elements.dart' show KCommonElements, KElementEnvironment;
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart' show KCommonElements, KElementEnvironment;
 import '../constants/values.dart';
 import '../deferred_load/deferred_load.dart';
 import '../elements/entities.dart';
@@ -45,9 +45,6 @@
   final NativeResolutionEnqueuer _nativeEnqueuer;
   final KFieldAnalysis _fieldAnalysis;
 
-  /// True when we enqueue the loadLibrary code.
-  bool _isLoadLibraryFunctionResolved = false;
-
   ResolutionEnqueuerListener(
       this._options,
       this._elementEnvironment,
@@ -140,18 +137,15 @@
   void onQueueOpen(
       Enqueuer enqueuer, FunctionEntity mainMethod, Iterable<Uri> libraries) {
     if (_deferredLoadTask.isProgramSplit) {
-      enqueuer.applyImpact(_computeDeferredLoadingImpact(),
-          impactSource: 'deferred load');
+      enqueuer.applyImpact(_computeDeferredLoadingImpact());
     }
-    enqueuer.applyImpact(_nativeEnqueuer.processNativeClasses(libraries),
-        impactSource: 'native classes');
+    enqueuer.applyImpact(_nativeEnqueuer.processNativeClasses(libraries));
     if (mainMethod != null) {
-      enqueuer.applyImpact(_computeMainImpact(mainMethod),
-          impactSource: 'main impact');
+      enqueuer.applyImpact(_computeMainImpact(mainMethod));
     }
     // Elements required by enqueueHelpers are global dependencies
     // that are not pulled in by a particular element.
-    enqueuer.applyImpact(computeHelpersImpact(), impactSource: 'helpers');
+    enqueuer.applyImpact(computeHelpersImpact());
   }
 
   @override
@@ -161,8 +155,7 @@
     //
     // Return early if any elements are added to avoid counting the elements as
     // due to mirrors.
-    enqueuer.applyImpact(_customElementsAnalysis.flush(),
-        impactSource: _customElementsAnalysis);
+    enqueuer.applyImpact(_customElementsAnalysis.flush());
 
     for (ClassEntity cls in recentClasses) {
       MemberEntity element = _elementEnvironment.lookupLocalClassMember(
@@ -296,14 +289,6 @@
       _registerBackendImpact(worldImpact, _impacts.noSuchMethodSupport);
     }
 
-    if (_elementEnvironment.isDeferredLoadLibraryGetter(member)) {
-      // TODO(sigurdm): Create a function registerLoadLibraryAccess.
-      if (!_isLoadLibraryFunctionResolved) {
-        _isLoadLibraryFunctionResolved = true;
-        _registerBackendImpact(worldImpact, _impacts.loadLibrary);
-      }
-    }
-
     if (member.isGetter && member.name == Identifiers.runtimeType_) {
       // Enable runtime type support if we discover a getter called
       // runtimeType. We have to enable runtime type before hitting the
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index ffbad60..f27a4c4 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -5,9 +5,9 @@
 library js_backend.runtime_types;
 
 import '../common.dart';
-import '../common/names.dart' show Identifiers;
-import '../common_elements.dart'
+import '../common/elements.dart'
     show ElementEnvironment, JCommonElements, JElementEnvironment;
+import '../common/names.dart' show Identifiers;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_new.dart b/pkg/compiler/lib/src/js_backend/runtime_types_new.dart
index c2fea1a..75fa30e 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_new.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_new.dart
@@ -6,7 +6,7 @@
 
 import 'package:js_runtime/shared/recipe_syntax.dart';
 
-import '../common_elements.dart' show CommonElements, JCommonElements;
+import '../common/elements.dart' show CommonElements, JCommonElements;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as jsAst;
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 5f3b75b..2606826 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -5,13 +5,14 @@
 library js_backend.runtime_types_resolution;
 
 import '../common.dart';
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
 import '../ir/runtime_type_analysis.dart';
 import '../kernel/kelements.dart';
+import '../kernel/kernel_world.dart';
 import '../options.dart';
 import '../serialization/serialization.dart';
 import '../universe/class_hierarchy.dart';
diff --git a/pkg/compiler/lib/src/js_backend/specialized_checks.dart b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
index 9a887aa..b81a547 100644
--- a/pkg/compiler/lib/src/js_backend/specialized_checks.dart
+++ b/pkg/compiler/lib/src/js_backend/specialized_checks.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.
 
-import '../common_elements.dart' show ElementEnvironment, JCommonElements;
+import '../common/elements.dart' show ElementEnvironment, JCommonElements;
 import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
diff --git a/pkg/compiler/lib/src/js_backend/type_reference.dart b/pkg/compiler/lib/src/js_backend/type_reference.dart
index e135ab8..d796de1 100644
--- a/pkg/compiler/lib/src/js_backend/type_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/type_reference.dart
@@ -64,7 +64,7 @@
 import 'package:front_end/src/api_unstable/dart2js.dart'
     show $0, $9, $A, $Z, $_, $a, $z;
 
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../elements/types.dart';
 import '../js/js.dart' as js;
 import '../js_emitter/code_emitter_task.dart' show Emitter;
diff --git a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
index 638d53d..31cb0a5 100644
--- a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
@@ -7,8 +7,8 @@
 import 'package:js_runtime/shared/embedded_names.dart'
     show TearOffParametersPropertyNames;
 
+import '../common/elements.dart' show CommonElements;
 import '../common/names.dart' show Identifiers, Selectors;
-import '../common_elements.dart' show CommonElements;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../js/js.dart' as jsAst;
diff --git a/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
index 627dbe5..3ab380f 100644
--- a/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/instantiation_stub_generator.dart
@@ -4,7 +4,7 @@
 
 library dart2js.js_emitter.instantiation_stub_generator;
 
-import '../common_elements.dart' show JCommonElements, JElementEnvironment;
+import '../common/elements.dart' show JCommonElements, JElementEnvironment;
 import '../elements/entities.dart';
 import '../io/source_information.dart';
 import '../js/js.dart' as jsAst;
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index b96d0e8..1324ece 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -6,7 +6,7 @@
 
 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
 
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart' show InterfaceType;
diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
index 2913bbe..724da21 100644
--- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
@@ -6,10 +6,10 @@
 
 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
 
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../js/js.dart' as jsAst;
 import '../js/js.dart' show js;
-import '../common_elements.dart';
 
 import 'code_emitter_task.dart' show Emitter;
 
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 706385f..39fa4eb 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -4,7 +4,7 @@
 
 library dart2js.new_js_emitter.model;
 
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/values.dart' show ConstantValue;
 import '../deferred_load/output_unit.dart' show OutputUnit;
 import '../elements/entities.dart';
diff --git a/pkg/compiler/lib/src/js_emitter/native_emitter.dart b/pkg/compiler/lib/src/js_emitter/native_emitter.dart
index 857b67b..a288989 100644
--- a/pkg/compiler/lib/src/js_emitter/native_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/native_emitter.dart
@@ -5,7 +5,7 @@
 library dart2js.js_emitter.native_emitter;
 
 import '../common.dart';
-import '../common_elements.dart' show JCommonElements, JElementEnvironment;
+import '../common/elements.dart' show JCommonElements, JElementEnvironment;
 import '../elements/types.dart' show DartType, FunctionType;
 import '../elements/entities.dart';
 import '../js/js.dart' as jsAst;
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index 022cd5a..fea65fb 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -4,7 +4,7 @@
 
 library dart2js.js_emitter.parameter_stub_generator;
 
-import '../common_elements.dart' show JElementEnvironment;
+import '../common/elements.dart' show JElementEnvironment;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 69dc9f4..d04ed4a 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -5,10 +5,10 @@
 library dart2js.js_emitter.program_builder;
 
 import '../../common.dart';
+import '../../common/elements.dart' show JCommonElements, JElementEnvironment;
 import '../../common/names.dart' show Names, Selectors;
 import '../../constants/values.dart'
     show ConstantValue, InterceptorConstantValue;
-import '../../common_elements.dart' show JCommonElements, JElementEnvironment;
 import '../../deferred_load/output_unit.dart'
     show deferredPartFileName, OutputUnit, OutputUnitData;
 import '../../elements/entities.dart';
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index ca7d511..011f679 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -4,7 +4,7 @@
 
 library dart2js.js_emitter.runtime_type_generator;
 
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../deferred_load/output_unit.dart' show OutputUnit, OutputUnitData;
 import '../elements/entities.dart';
 import '../elements/types.dart';
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
index 1f60860..09d0938 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
@@ -4,7 +4,7 @@
 
 library dart2js.js_emitter.startup_emitter;
 
-import '../../../compiler_new.dart';
+import '../../../compiler.dart';
 import '../../common.dart';
 import '../../common/codegen.dart';
 import '../../constants/values.dart';
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 e07ef90..f470a14 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
@@ -66,11 +66,7 @@
 // Copies the own properties from [from] to [to] (specialized version of
 // `mixinPropertiesHard` when it is known the properties are disjoint).
 function mixinPropertiesEasy(from, to) {
-  if (#legacyJavaScript) {
-    copyProperties(from, to);
-  } else {
-    Object.assign(to, from);
-  }
+  Object.assign(to, from);
 }
 
 // Only use direct proto access to construct the prototype chain (instead of
@@ -801,8 +797,6 @@
       'call0selector': js.quoteName(call0Name),
       'call1selector': js.quoteName(call1Name),
       'call2selector': js.quoteName(call2Name),
-
-      'legacyJavaScript': _options.features.legacyJavaScript.isEnabled,
     });
     // We assume emitMainFragment will be the last piece of code we emit.
     finalizeCode(mainResourceName, mainCode, holderCode, finalizeHolders: true);
@@ -912,9 +906,7 @@
       for (StaticMethod method in library.statics) {
         Map<js.Name, js.Expression> propertyMap = emitStaticMethod(method);
         propertyMap.forEach((js.Name key, js.Expression value) {
-          var property = _options.features.legacyJavaScript.isEnabled
-              ? js.Property(js.quoteName(key), value)
-              : js.MethodDefinition(js.quoteName(key), value);
+          var property = js.MethodDefinition(js.quoteName(key), value);
           Entity holderKey;
           if (method is StaticStubMethod) {
             // [StaticStubMethod]s should only be created for interceptors.
@@ -1105,25 +1097,15 @@
       // to `inherit(P.Object, null)` in the generated code. See if we can
       // remove that.
 
-      if (_options.features.legacyJavaScript.isEnabled) {
-        // IE11 might require us to set 'constructor' but we aren't 100% sure.
-        properties
-            .add(js.Property(js.string("constructor"), classReference(cls)));
-      }
       properties.add(js.Property(_namer.operatorIs(cls.element), js.number(1)));
     }
 
     allMethods.forEach((Method method) {
       emitInstanceMethod(method)
           .forEach((js.Expression name, js.Expression code) {
-        js.Property property;
-        if (_options.features.legacyJavaScript.isEnabled) {
-          property = js.Property(name, code);
-        } else {
-          property = code is js.Fun
-              ? js.MethodDefinition(name, code)
-              : js.Property(name, code);
-        }
+        js.Property property = code is js.Fun
+            ? js.MethodDefinition(name, code)
+            : js.Property(name, code);
         registerEntityAst(method.element, property);
         properties.add(property);
       });
@@ -1688,8 +1670,7 @@
               : locals.find('_lazy', 'hunkHelpers.lazy')
           : locals.find('_lazyOld', 'hunkHelpers.lazyOld');
       js.Expression staticFieldCode = field.code;
-      if (!_options.features.legacyJavaScript.isEnabled &&
-          staticFieldCode is js.Fun) {
+      if (staticFieldCode is js.Fun) {
         js.Fun fun = staticFieldCode;
         staticFieldCode = js.ArrowFunction(fun.params, fun.body,
                 asyncModifier: fun.asyncModifier)
@@ -1905,14 +1886,8 @@
       globals.add(js.Property(js.string(LEAF_TAGS), js.LiteralNull()));
     }
 
-    globals.add(js.Property(
-        js.string(ARRAY_RTI_PROPERTY),
-        _options.features.legacyJavaScript.isEnabled
-            ? js.js(
-                r'typeof Symbol == "function" && typeof Symbol() == "symbol"'
-                r'    ? Symbol("$ti")'
-                r'    : "$ti"')
-            : js.js(r'Symbol("$ti")')));
+    globals.add(
+        js.Property(js.string(ARRAY_RTI_PROPERTY), js.js(r'Symbol("$ti")')));
 
     if (_closedWorld.backendUsage.requiresStartupMetrics) {
       // Copy the metrics object that was stored on the main unit IIFE.
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart
index faac415..6a92212 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_merger.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:collection';
-import '../../common_elements.dart' show ElementEnvironment;
+import '../../common/elements.dart' show ElementEnvironment;
 import '../../deferred_load/output_unit.dart'
     show ImportDescription, OutputUnit, OutputUnitData, deferredPartFileName;
 import '../../elements/entities.dart';
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index 16c003c..133789f 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -32,12 +32,12 @@
 
 import 'package:js_ast/src/precedence.dart' as js_precedence;
 
-import '../../../compiler_new.dart';
+import '../../../compiler.dart';
 import '../../common.dart';
+import '../../common/elements.dart' show CommonElements, JElementEnvironment;
 import '../../common/tasks.dart';
 import '../../constants/values.dart'
     show ConstantValue, FunctionConstantValue, LateSentinelConstantValue;
-import '../../common_elements.dart' show CommonElements, JElementEnvironment;
 import '../../deferred_load/output_unit.dart' show OutputUnit;
 import '../../dump_info.dart';
 import '../../elements/entities.dart';
@@ -366,11 +366,19 @@
     return js.Comment(generatedBy(_options, flavor: '$flavor'));
   }
 
-  js.Statement buildDeferredInitializerGlobal() {
-    return js.js.statement(
-        'self.#deferredInitializers = '
-        'self.#deferredInitializers || Object.create(null);',
-        {'deferredInitializers': deferredInitializersGlobal});
+  List<js.Statement> buildDeferredInitializerGlobal() {
+    return [
+      js.js.statement(
+          'self.#deferredInitializers = '
+          'self.#deferredInitializers || Object.create(null);',
+          {'deferredInitializers': deferredInitializersGlobal}),
+      if (_options.experimentalTrackAllocations)
+        js.js.statement(
+            'self.#deferredInitializers["allocations"] = '
+            'self.#deferredInitializers["allocations"] '
+            '|| Object.create(null)',
+            {'deferredInitializers': deferredInitializersGlobal})
+    ];
   }
 
   js.Statement buildStartupMetrics() {
@@ -421,7 +429,7 @@
     js.Program program = js.Program([
       buildGeneratedBy(),
       js.Comment(HOOKS_API_USAGE),
-      if (isSplit) buildDeferredInitializerGlobal(),
+      if (isSplit) ...buildDeferredInitializerGlobal(),
       if (_closedWorld.backendUsage.requiresStartupMetrics)
         buildStartupMetrics(),
       code
@@ -556,7 +564,7 @@
 
     js.Program program = js.Program([
       if (isFirst) buildGeneratedBy(),
-      if (isFirst) buildDeferredInitializerGlobal(),
+      if (isFirst) ...buildDeferredInitializerGlobal(),
       if (_options.experimentalTrackAllocations)
         js.js.statement("var allocations = #deferredGlobal['allocations']",
             {'deferredGlobal': deferredInitializersGlobal}),
diff --git a/pkg/compiler/lib/src/js_model/element_map.dart b/pkg/compiler/lib/src/js_model/element_map.dart
index a7526f4..e87d834 100644
--- a/pkg/compiler/lib/src/js_model/element_map.dart
+++ b/pkg/compiler/lib/src/js_model/element_map.dart
@@ -5,8 +5,8 @@
 import 'package:kernel/ast.dart' as ir;
 
 import '../common.dart';
+import '../common/elements.dart' show JCommonElements, JElementEnvironment;
 import '../constants/values.dart';
-import '../common_elements.dart' show JCommonElements, JElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/jumps.dart';
 import '../elements/names.dart';
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 ae9a0a0..aac7e7e 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -14,8 +14,8 @@
 
 import '../closure.dart' show BoxLocal, ThisLocal;
 import '../common.dart';
+import '../common/elements.dart';
 import '../common/names.dart';
-import '../common_elements.dart';
 import '../constants/values.dart';
 import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
@@ -37,7 +37,7 @@
 import '../js_backend/annotations.dart';
 import '../js_backend/native_data.dart';
 import '../kernel/dart2js_target.dart' show allowedNativeTest;
-import '../kernel/element_map_impl.dart';
+import '../kernel/element_map.dart';
 import '../kernel/env.dart';
 import '../kernel/kelements.dart';
 import '../native/behavior.dart';
@@ -76,7 +76,7 @@
   @override
   final DiagnosticReporter reporter;
   final Environment _environment;
-  CommonElementsImpl _commonElements;
+  JCommonElements _commonElements;
   JsElementEnvironment _elementEnvironment;
   DartTypeConverter _typeConverter;
   KernelDartTypes _types;
@@ -130,14 +130,14 @@
   JsKernelToElementMap(
       this.reporter,
       this._environment,
-      KernelToElementMapImpl _elementMap,
+      KernelToElementMap _elementMap,
       Map<MemberEntity, MemberUsage> liveMemberUsage,
       AnnotationsData annotations)
       : this.options = _elementMap.options {
     _elementEnvironment = JsElementEnvironment(this);
     _typeConverter = DartTypeConverter(this);
     _types = KernelDartTypes(this, options);
-    _commonElements = CommonElementsImpl(_types, _elementEnvironment);
+    _commonElements = JCommonElements(_types, _elementEnvironment);
     _constantValuefier = ConstantValuefier(this);
 
     programEnv = _elementMap.env.convert();
@@ -297,7 +297,7 @@
     _elementEnvironment = JsElementEnvironment(this);
     _typeConverter = DartTypeConverter(this);
     _types = KernelDartTypes(this, options);
-    _commonElements = CommonElementsImpl(_types, _elementEnvironment);
+    _commonElements = JCommonElements(_types, _elementEnvironment);
     _constantValuefier = ConstantValuefier(this);
 
     source.registerComponentLookup(ComponentLookup(component));
@@ -510,7 +510,7 @@
   JsElementEnvironment get elementEnvironment => _elementEnvironment;
 
   @override
-  CommonElementsImpl get commonElements => _commonElements;
+  JCommonElements get commonElements => _commonElements;
 
   FunctionEntity get _mainFunction {
     return programEnv.mainMethod != null
@@ -1169,7 +1169,7 @@
             (ir.LocatedMessage message, List<ir.LocatedMessage> context) {
       reportLocatedMessage(reporter, message, context);
     },
-            environment: _environment.toMap(),
+            environment: _environment,
             evaluationMode: options.useLegacySubtyping
                 ? ir.EvaluationMode.weak
                 : ir.EvaluationMode.strong);
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index bfd0363..e262869 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -6,12 +6,11 @@
 
 import 'package:kernel/ast.dart' as ir;
 
-import '../backend_strategy.dart';
 import '../common.dart';
 import '../common/codegen.dart';
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../common/tasks.dart';
 import '../common/work.dart';
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../compiler.dart';
 import '../deferred_load/output_unit.dart';
 import '../dump_info.dart';
@@ -41,6 +40,7 @@
 import '../js_emitter/js_emitter.dart' show CodeEmitterTask;
 import '../js/js.dart' as js;
 import '../kernel/kernel_strategy.dart';
+import '../kernel/kernel_world.dart';
 import '../native/behavior.dart';
 import '../native/enqueue.dart';
 import '../options.dart';
@@ -61,7 +61,9 @@
 import 'js_world_builder.dart';
 import 'locals.dart';
 
-class JsBackendStrategy implements BackendStrategy {
+/// JS Strategy pattern that defines the element model used in type inference
+/// and code generation.
+class JsBackendStrategy {
   final Compiler _compiler;
   JsKernelToElementMap _elementMap;
 
@@ -102,17 +104,14 @@
         sourceInformationStrategy);
   }
 
-  @override
   List<CompilerTask> get tasks {
     List<CompilerTask> result = functionCompiler.tasks;
     result.add(emitterTask);
     return result;
   }
 
-  @override
   FunctionCompiler get functionCompiler => _functionCompiler;
 
-  @override
   CodeEmitterTask get emitterTask => _emitterTask;
 
   Namer get namerForTesting => _namer;
@@ -158,7 +157,7 @@
     return _rtiChecksBuilder;
   }
 
-  @override
+  /// Create the [JClosedWorld] from [closedWorld].
   JClosedWorld createJClosedWorld(
       KClosedWorld closedWorld, OutputUnitData outputUnitData) {
     KernelFrontendStrategy strategy = _compiler.frontendStrategy;
@@ -179,12 +178,17 @@
     return jClosedWorld;
   }
 
-  @override
+  /// Registers [closedWorld] as the current closed world used by this backend
+  /// strategy.
+  ///
+  /// This is used to support serialization after type inference.
   void registerJClosedWorld(covariant JsClosedWorld closedWorld) {
     _elementMap = closedWorld.elementMap;
   }
 
-  @override
+  /// Called when the compiler starts running the codegen.
+  ///
+  /// Returns the [CodegenInputs] objects with the needed data.
   CodegenInputs onCodegenStart(
       GlobalTypeInferenceResults globalTypeInferenceResults) {
     JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
@@ -216,7 +220,7 @@
     return codegen;
   }
 
-  @override
+  /// Creates an [Enqueuer] for code generation specific to this backend.
   CodegenEnqueuer createCodegenEnqueuer(
       CompilerTask task,
       JClosedWorld closedWorld,
@@ -341,13 +345,13 @@
     return worldImpact;
   }
 
-  @override
+  /// Called when code generation has been completed.
   void onCodegenEnd(CodegenInputs codegen) {
     sourceInformationStrategy.onComplete();
     codegen.tracer.close();
   }
 
-  @override
+  /// Generates the output and returns the total size of the generated code.
   int assembleProgram(JClosedWorld closedWorld, InferredData inferredData,
       CodegenInputs codegenInputs, CodegenWorld codegenWorld) {
     int programSize = emitterTask.assembleProgram(
@@ -356,7 +360,7 @@
     return programSize;
   }
 
-  @override
+  /// Creates the [SsaBuilder] used for the element model.
   SsaBuilder createSsaBuilder(
       CompilerTask task, SourceInformationStrategy sourceInformationStrategy) {
     return KernelSsaBuilder(
@@ -369,12 +373,12 @@
         sourceInformationStrategy);
   }
 
-  @override
+  /// Creates a [SourceSpan] from [spannable] in context of [currentElement].
   SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement) {
     return _elementMap.getSourceSpan(spannable, currentElement);
   }
 
-  @override
+  /// Creates the [TypesInferrer] used by this strategy.
   TypesInferrer createTypesInferrer(
       JClosedWorld closedWorld,
       GlobalLocalsMap globalLocalsMap,
@@ -383,7 +387,7 @@
         _compiler, closedWorld, globalLocalsMap, inferredDataBuilder);
   }
 
-  @override
+  /// Prepare [source] to deserialize modular code generation data.
   void prepareCodegenReader(DataSource source) {
     source.registerEntityReader(ClosedEntityReader(_elementMap));
     source.registerEntityLookup(ClosedEntityLookup(_elementMap));
@@ -391,7 +395,12 @@
         ComponentLookup(_elementMap.programEnv.mainComponent));
   }
 
-  @override
+  /// Calls [f] for every member that needs to be serialized for modular code
+  /// generation and returns an [EntityWriter] for encoding these members in
+  /// the serialized data.
+  ///
+  /// The needed members include members computed on demand during non-modular
+  /// code generation, such as constructor bodies and and generator bodies.
   EntityWriter forEachCodegenMember(void Function(MemberEntity member) f) {
     int earlyMemberIndexLimit = _elementMap.prepareForCodegenSerialization();
     ClosedEntityWriter entityWriter = ClosedEntityWriter(earlyMemberIndexLimit);
diff --git a/pkg/compiler/lib/src/js_model/js_world.dart b/pkg/compiler/lib/src/js_model/js_world.dart
index 17fd5d2..1c45fd2 100644
--- a/pkg/compiler/lib/src/js_model/js_world.dart
+++ b/pkg/compiler/lib/src/js_model/js_world.dart
@@ -7,8 +7,8 @@
 
 import '../closure.dart';
 import '../common.dart';
+import '../common/elements.dart' show JCommonElements, JElementEnvironment;
 import '../common/names.dart';
-import '../common_elements.dart' show JCommonElements, JElementEnvironment;
 import '../deferred_load/output_unit.dart';
 import '../elements/entities.dart';
 import '../elements/entity_utils.dart' as utils;
diff --git a/pkg/compiler/lib/src/js_model/js_world_builder.dart b/pkg/compiler/lib/src/js_model/js_world_builder.dart
index 1292491..2faf6e6 100644
--- a/pkg/compiler/lib/src/js_model/js_world_builder.dart
+++ b/pkg/compiler/lib/src/js_model/js_world_builder.dart
@@ -6,7 +6,7 @@
 
 import '../closure.dart';
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
 import '../deferred_load/output_unit.dart';
@@ -24,14 +24,13 @@
 import '../js_backend/no_such_method_registry.dart';
 import '../js_backend/runtime_types_resolution.dart';
 import '../kernel/kelements.dart';
-import '../native/behavior.dart';
+import '../kernel/kernel_world.dart';
 import '../options.dart';
 import '../universe/class_hierarchy.dart';
 import '../universe/class_set.dart';
 import '../universe/feature.dart';
 import '../universe/member_usage.dart';
 import '../universe/selector.dart';
-import '../world.dart';
 import 'closure.dart';
 import 'elements.dart';
 import 'element_map_impl.dart';
@@ -59,7 +58,8 @@
       OutputUnitData kOutputUnitData) {
     JsToFrontendMap map = JsToFrontendMapImpl(_elementMap);
 
-    NativeData nativeData = _convertNativeData(map, closedWorld.nativeData);
+    NativeData nativeData =
+        closedWorld.nativeData.convert(map, _elementEnvironment);
     _elementMap.nativeData = nativeData;
     InterceptorData interceptorData =
         _convertInterceptorData(map, nativeData, closedWorld.interceptorData);
@@ -187,8 +187,8 @@
     BackendUsage backendUsage =
         _convertBackendUsage(map, closedWorld.backendUsage);
 
-    NoSuchMethodDataImpl oldNoSuchMethodData = closedWorld.noSuchMethodData;
-    NoSuchMethodData noSuchMethodData = NoSuchMethodDataImpl(
+    NoSuchMethodData oldNoSuchMethodData = closedWorld.noSuchMethodData;
+    NoSuchMethodData noSuchMethodData = NoSuchMethodData(
         map.toBackendFunctionSet(oldNoSuchMethodData.throwingImpls),
         map.toBackendFunctionSet(oldNoSuchMethodData.otherImpls),
         map.toBackendFunctionSet(oldNoSuchMethodData.forwardingSyntaxImpls));
@@ -272,93 +272,6 @@
         isHtmlLoaded: backendUsage.isHtmlLoaded);
   }
 
-  NativeBasicData _convertNativeBasicData(
-      JsToFrontendMap map, NativeBasicDataImpl nativeBasicData) {
-    Map<ClassEntity, NativeClassTag> nativeClassTagInfo =
-        <ClassEntity, NativeClassTag>{};
-    nativeBasicData.nativeClassTagInfo
-        .forEach((ClassEntity cls, NativeClassTag tag) {
-      nativeClassTagInfo[map.toBackendClass(cls)] = tag;
-    });
-    Map<LibraryEntity, String> jsInteropLibraries =
-        map.toBackendLibraryMap(nativeBasicData.jsInteropLibraries, identity);
-    Map<ClassEntity, String> jsInteropClasses =
-        map.toBackendClassMap(nativeBasicData.jsInteropClasses, identity);
-    Set<ClassEntity> anonymousJsInteropClasses =
-        map.toBackendClassSet(nativeBasicData.anonymousJsInteropClasses);
-    Map<MemberEntity, String> jsInteropMembers =
-        map.toBackendMemberMap(nativeBasicData.jsInteropMembers, identity);
-    return NativeBasicDataImpl(
-        _elementEnvironment,
-        nativeBasicData.isAllowInteropUsed,
-        nativeClassTagInfo,
-        jsInteropLibraries,
-        jsInteropClasses,
-        anonymousJsInteropClasses,
-        jsInteropMembers);
-  }
-
-  NativeData _convertNativeData(
-      JsToFrontendMap map, NativeDataImpl nativeData) {
-    convertNativeBehaviorType(type) {
-      if (type is DartType) {
-        // TODO(johnniwinther): Avoid free variables in types. If the type
-        // pulled from a generic function type it might contain a function
-        // type variable that should probably have been replaced by its bound.
-        return map.toBackendType(type, allowFreeVariables: true);
-      }
-      assert(type is SpecialType);
-      return type;
-    }
-
-    NativeBehavior convertNativeBehavior(NativeBehavior behavior) {
-      NativeBehavior newBehavior = NativeBehavior();
-
-      for (dynamic type in behavior.typesReturned) {
-        newBehavior.typesReturned.add(convertNativeBehaviorType(type));
-      }
-      for (dynamic type in behavior.typesInstantiated) {
-        newBehavior.typesInstantiated.add(convertNativeBehaviorType(type));
-      }
-
-      newBehavior.codeTemplateText = behavior.codeTemplateText;
-      newBehavior.codeTemplate = behavior.codeTemplate;
-      newBehavior.throwBehavior = behavior.throwBehavior;
-      newBehavior.isAllocation = behavior.isAllocation;
-      newBehavior.useGvn = behavior.useGvn;
-      newBehavior.sideEffects.add(behavior.sideEffects);
-      return newBehavior;
-    }
-
-    NativeBasicData nativeBasicData = _convertNativeBasicData(map, nativeData);
-
-    Map<MemberEntity, String> nativeMemberName =
-        map.toBackendMemberMap(nativeData.nativeMemberName, identity);
-    Map<FunctionEntity, NativeBehavior> nativeMethodBehavior =
-        <FunctionEntity, NativeBehavior>{};
-    nativeData.nativeMethodBehavior
-        .forEach((FunctionEntity method, NativeBehavior behavior) {
-      FunctionEntity backendMethod = map.toBackendMember(method);
-      if (backendMethod != null) {
-        // If [method] isn't used it doesn't have a corresponding backend
-        // method.
-        nativeMethodBehavior[backendMethod] = convertNativeBehavior(behavior);
-      }
-    });
-    Map<MemberEntity, NativeBehavior> nativeFieldLoadBehavior =
-        map.toBackendMemberMap(
-            nativeData.nativeFieldLoadBehavior, convertNativeBehavior);
-    Map<MemberEntity, NativeBehavior> nativeFieldStoreBehavior =
-        map.toBackendMemberMap(
-            nativeData.nativeFieldStoreBehavior, convertNativeBehavior);
-    return NativeDataImpl(
-        nativeBasicData,
-        nativeMemberName,
-        nativeMethodBehavior,
-        nativeFieldLoadBehavior,
-        nativeFieldStoreBehavior);
-  }
-
   InterceptorData _convertInterceptorData(JsToFrontendMap map,
       NativeData nativeData, InterceptorDataImpl interceptorData) {
     Map<String, Set<MemberEntity>> interceptedMembers =
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 156e7a4..c6e7a5e 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -55,7 +55,7 @@
 
 bool maybeEnableNative(Uri uri) {
   bool allowedDartLibrary() {
-    if (uri.scheme != 'dart') return false;
+    if (!uri.isScheme('dart')) return false;
     return _allowedDartSchemePaths.contains(uri.path);
   }
 
@@ -118,7 +118,7 @@
   bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) =>
       super.allowPlatformPrivateLibraryAccess(importer, imported) ||
       maybeEnableNative(importer) ||
-      (importer.scheme == 'package' &&
+      (importer.isScheme('package') &&
           importer.path.startsWith('dart2js_runtime_metrics/'));
 
   @override
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index e92452a..3f30198 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -3,174 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/core_types.dart' as ir;
-import 'package:kernel/class_hierarchy.dart' as ir;
-import 'package:kernel/type_environment.dart' as ir;
 
-import '../constants/values.dart';
-import '../common_elements.dart' show KCommonElements, KElementEnvironment;
-import '../elements/entities.dart';
-import '../elements/names.dart';
-import '../elements/types.dart';
-import '../js/js.dart' as js;
-import '../js_backend/namer.dart';
-import '../js_backend/native_data.dart';
-import '../native/behavior.dart';
-import '../universe/call_structure.dart';
-import '../universe/selector.dart';
-
-/// Interface that translates between Kernel IR nodes and entities used for
-/// computing the [WorldImpact] for members.
-abstract class KernelToElementMap {
-  KElementEnvironment get elementEnvironment;
-  NativeBasicData get nativeBasicData;
-
-  /// Access to the commonly used elements and types.
-  KCommonElements get commonElements;
-
-  /// Access to the [DartTypes] object.
-  DartTypes get types;
-
-  /// Returns the core types for the underlying kernel model.
-  ir.CoreTypes get coreTypes;
-
-  /// Returns the type environment for the underlying kernel model.
-  ir.TypeEnvironment get typeEnvironment;
-
-  /// Returns the class hierarchy for the underlying kernel model.
-  ir.ClassHierarchy get classHierarchy;
-
-  /// Returns the [DartType] corresponding to [type].
-  DartType getDartType(ir.DartType type);
-
-  /// Returns the [InterfaceType] corresponding to [type].
-  InterfaceType getInterfaceType(ir.InterfaceType type);
-
-  /// Returns the [TypeVariableType] corresponding to [type].
-  TypeVariableType getTypeVariableType(ir.TypeParameterType type);
-
-  /// Returns the [FunctionType] of the [node].
-  FunctionType getFunctionType(ir.FunctionNode node);
-
-  /// Return the [InterfaceType] corresponding to the [cls] with the given
-  /// [typeArguments] and [nullability].
-  InterfaceType createInterfaceType(
-      ir.Class cls, List<ir.DartType> typeArguments);
-
-  /// Returns the [CallStructure] corresponding to the [arguments].
-  CallStructure getCallStructure(ir.Arguments arguments);
-
-  /// Returns the [Selector] corresponding to the invocation of [name] with
-  /// [arguments].
-  Selector getInvocationSelector(ir.Name name, int positionalArguments,
-      List<String> namedArguments, int typeArguments);
-
-  /// Returns the [MemberEntity] corresponding to the member [node].
-  MemberEntity getMember(ir.Member node);
-
-  /// Returns the [FunctionEntity] corresponding to the procedure [node].
-  FunctionEntity getMethod(ir.Procedure node);
-
-  /// Returns the [ConstructorEntity] corresponding to the generative or factory
-  /// constructor [node].
-  ConstructorEntity getConstructor(ir.Member node);
-
-  /// Returns the [FieldEntity] corresponding to the field [node].
-  FieldEntity getField(ir.Field node);
-
-  /// Returns the [ClassEntity] corresponding to the class [node].
-  ClassEntity getClass(ir.Class node);
-
-  /// Returns the `noSuchMethod` [FunctionEntity] call from a
-  /// `super.noSuchMethod` invocation within [cls].
-  FunctionEntity getSuperNoSuchMethod(ClassEntity cls);
-
-  /// Returns the [Name] corresponding to [name].
-  Name getName(ir.Name name);
-
-  /// Computes the [NativeBehavior] for a call to the [JS] function.
-  NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node);
-
-  /// Computes the [NativeBehavior] for a call to the [JS_BUILTIN]
-  /// function.
-  NativeBehavior getNativeBehaviorForJsBuiltinCall(ir.StaticInvocation node);
-
-  /// Computes the [NativeBehavior] for a call to the
-  /// [JS_EMBEDDED_GLOBAL] function.
-  NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall(
-      ir.StaticInvocation node);
-
-  /// Returns the [js.Name] for the `JsGetName` [constant] value.
-  js.Name getNameForJsGetName(ConstantValue constant, Namer namer);
-
-  /// Computes the [ConstantValue] for the constant [expression].
-  ConstantValue getConstantValue(
-      ir.StaticTypeContext staticTypeContext, ir.Expression expression,
-      {bool requireConstant = true, bool implicitNull = false});
-
-  /// Return the [ImportEntity] corresponding to [node].
-  ImportEntity getImport(ir.LibraryDependency node);
-
-  /// Returns the defining node for [cls].
-  ir.Class getClassNode(covariant ClassEntity cls);
-
-  /// Adds libraries in [component] to the set of libraries.
-  ///
-  /// The main method of the first component is used as the main method for the
-  /// compilation.
-  void addComponent(ir.Component component);
-
-  /// Returns the [ConstructorEntity] corresponding to a super initializer in
-  /// [constructor].
-  ///
-  /// The IR resolves super initializers to a [target] up in the type hierarchy.
-  /// Most of the time, the result of this function will be the entity
-  /// corresponding to that target. In the presence of unnamed mixins, this
-  /// function returns an entity for an intermediate synthetic constructor that
-  /// kernel doesn't explicitly represent.
-  ///
-  /// For example:
-  ///     class M {}
-  ///     class C extends Object with M {}
-  ///
-  /// Kernel will say that C()'s super initializer resolves to Object(), but
-  /// this function will return an entity representing the unnamed mixin
-  /// application "Object+M"'s constructor.
-  ConstructorEntity getSuperConstructor(
-      ir.Constructor constructor, ir.Member target);
-
-  /// Computes the native behavior for reading the native [field].
-  NativeBehavior getNativeBehaviorForFieldLoad(ir.Field field,
-      Iterable<String> createsAnnotations, Iterable<String> returnsAnnotations,
-      {bool isJsInterop});
-
-  /// Computes the native behavior for writing to the native [field].
-  NativeBehavior getNativeBehaviorForFieldStore(ir.Field field);
-
-  /// Computes the native behavior for calling the function or constructor
-  /// [member].
-  NativeBehavior getNativeBehaviorForMethod(ir.Member member,
-      Iterable<String> createsAnnotations, Iterable<String> returnsAnnotations,
-      {bool isJsInterop});
-
-  /// Compute the kind of foreign helper function called by [node], if any.
-  ForeignKind getForeignKind(ir.StaticInvocation node);
-
-  /// Computes the [InterfaceType] referenced by a call to the
-  /// [JS_INTERCEPTOR_CONSTANT] function, if any.
-  InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node);
-
-  /// Returns the [Local] corresponding to the local function [node].
-  Local getLocalFunction(ir.LocalFunction node);
-
-  /// Returns the [ir.Library] corresponding to [library].
-  ir.Library getLibraryNode(LibraryEntity library);
-
-  /// Returns the defining node for [member].
-  ir.Member getMemberNode(covariant MemberEntity member);
-
-  ir.StaticTypeContext getStaticTypeContext(MemberEntity member);
-}
+// TODO(joshualitt): Merge the contents of element_map_impl.dart into this file.
+export 'element_map_impl.dart';
 
 /// Kinds of foreign functions.
 enum ForeignKind {
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index b4a93af..403ff04 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.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.
 
-library dart2js.kernel.element_map;
-
 import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
 import 'package:js_runtime/shared/embedded_names.dart';
@@ -15,16 +13,15 @@
 import 'package:kernel/type_environment.dart' as ir;
 
 import '../common.dart';
+import '../common/elements.dart';
 import '../common/names.dart';
 import '../common/resolution.dart';
-import '../common_elements.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/indexed.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
 import '../environment.dart';
-import '../frontend_strategy.dart';
 import '../ir/annotations.dart';
 import '../ir/constants.dart';
 import '../ir/element_map.dart';
@@ -40,15 +37,13 @@
 import '../js_backend/annotations.dart';
 import '../js_backend/namer.dart';
 import '../js_backend/native_data.dart';
-import '../js_backend/no_such_method_registry.dart';
 import '../js_model/locals.dart';
+import '../kernel/kernel_strategy.dart';
 import '../kernel/dart2js_target.dart';
 import '../native/behavior.dart';
-import '../native/resolver.dart';
 import '../options.dart';
 import '../ordered_typeset.dart';
 import '../universe/call_structure.dart';
-import '../universe/class_hierarchy.dart';
 import '../universe/selector.dart';
 
 import 'element_map.dart';
@@ -56,17 +51,14 @@
 import 'kelements.dart';
 import 'kernel_impact.dart';
 
-part 'native_basic_data.dart';
-part 'no_such_method_resolver.dart';
-
-/// Implementation of [KernelToElementMap] that only supports world
+/// Implementation of [IrToElementMap] that only supports world
 /// impact computation.
-class KernelToElementMapImpl implements KernelToElementMap, IrToElementMap {
+class KernelToElementMap implements IrToElementMap {
   final CompilerOptions options;
   @override
   final DiagnosticReporter reporter;
   final Environment _environment;
-  CommonElementsImpl _commonElements;
+  KCommonElements _commonElements;
   KernelElementEnvironment _elementEnvironment;
   DartTypeConverter _typeConverter;
   KernelDartTypes _types;
@@ -109,27 +101,27 @@
   final Map<ir.TreeNode, Local> localFunctionMap = {};
 
   BehaviorBuilder _nativeBehaviorBuilder;
-  final FrontendStrategy _frontendStrategy;
+  final KernelFrontendStrategy _frontendStrategy;
 
   Map<KMember, Map<ir.Expression, TypeMap>> typeMapsForTesting;
 
-  KernelToElementMapImpl(
+  KernelToElementMap(
       this.reporter, this._environment, this._frontendStrategy, this.options) {
     _elementEnvironment = KernelElementEnvironment(this);
     _typeConverter = DartTypeConverter(this);
     _types = KernelDartTypes(this, options);
-    _commonElements = CommonElementsImpl(_types, _elementEnvironment);
+    _commonElements = KCommonElements(_types, _elementEnvironment);
     _constantValuefier = ConstantValuefier(this);
   }
 
-  @override
+  /// Access to the [DartTypes] object.
   DartTypes get types => _types;
 
-  @override
   KernelElementEnvironment get elementEnvironment => _elementEnvironment;
 
+  /// Access to the commonly used elements and types.
   @override
-  CommonElementsImpl get commonElements => _commonElements;
+  KCommonElements get commonElements => _commonElements;
 
   FunctionEntity get _mainFunction {
     return env.mainMethod != null ? getMethodInternal(env.mainMethod) : null;
@@ -250,6 +242,8 @@
     return classEnv.lookupConstructor(this, name);
   }
 
+  /// Return the [InterfaceType] corresponding to the [cls] with the given
+  /// [typeArguments] and [nullability].
   @override
   InterfaceType createInterfaceType(
       ir.Class cls, List<ir.DartType> typeArguments) {
@@ -258,6 +252,7 @@
 
   LibraryEntity getLibrary(ir.Library node) => getLibraryInternal(node);
 
+  /// Returns the [ClassEntity] corresponding to the class [node].
   @override
   ClassEntity getClass(ir.Class node) => getClassInternal(node);
 
@@ -269,6 +264,11 @@
     return data.supertype;
   }
 
+  /// Returns the superclass of [cls] if any.
+  ClassEntity getSuperClass(ClassEntity cls) {
+    return getSuperType(cls)?.element;
+  }
+
   void _ensureCallType(ClassEntity cls, KClassData data) {
     assert(checkFamily(cls));
     if (data is KClassDataImpl && !data.isCallTypeComputed) {
@@ -435,6 +435,7 @@
     }
   }
 
+  /// Returns the [MemberEntity] corresponding to the member [node].
   @override
   MemberEntity getMember(ir.Member node) {
     if (node is ir.Field) {
@@ -451,11 +452,28 @@
     throw UnsupportedError("Unexpected member: $node");
   }
 
+  /// Returns the [ConstructorEntity] corresponding to the generative or factory
+  /// constructor [node].
   @override
   ConstructorEntity getConstructor(ir.Member node) =>
       getConstructorInternal(node);
 
-  @override
+  /// Returns the [ConstructorEntity] corresponding to a super initializer in
+  /// [constructor].
+  ///
+  /// The IR resolves super initializers to a [target] up in the type hierarchy.
+  /// Most of the time, the result of this function will be the entity
+  /// corresponding to that target. In the presence of unnamed mixins, this
+  /// function returns an entity for an intermediate synthetic constructor that
+  /// kernel doesn't explicitly represent.
+  ///
+  /// For example:
+  ///     class M {}
+  ///     class C extends Object with M {}
+  ///
+  /// Kernel will say that C()'s super initializer resolves to Object(), but
+  /// this function will return an entity representing the unnamed mixin
+  /// application "Object+M"'s constructor.
   ConstructorEntity getSuperConstructor(
       ir.Constructor sourceNode, ir.Member targetNode) {
     ConstructorEntity source = getConstructor(sourceNode);
@@ -477,16 +495,19 @@
     throw failedAt(source, "Super constructor for $source not found.");
   }
 
+  /// Returns the [FunctionEntity] corresponding to the procedure [node].
   @override
   FunctionEntity getMethod(ir.Procedure node) => getMethodInternal(node);
 
+  /// Returns the [FieldEntity] corresponding to the field [node].
   @override
   FieldEntity getField(ir.Field node) => getFieldInternal(node);
 
+  /// Returns the [DartType] corresponding to [type].
   @override
   DartType getDartType(ir.DartType type) => _typeConverter.convert(type);
 
-  @override
+  /// Returns the [TypeVariableType] corresponding to [type].
   TypeVariableType getTypeVariableType(ir.TypeParameterType type) =>
       getDartType(type).withoutNullability;
 
@@ -498,10 +519,11 @@
     return list;
   }
 
-  @override
+  /// Returns the [InterfaceType] corresponding to [type].
   InterfaceType getInterfaceType(ir.InterfaceType type) =>
       _typeConverter.convert(type).withoutNullability;
 
+  /// Returns the [FunctionType] of the [node].
   @override
   FunctionType getFunctionType(ir.FunctionNode node) {
     DartType returnType;
@@ -664,6 +686,12 @@
     return data.getVariances();
   }
 
+  /// Returns the class mixed into [cls] if any.
+  // TODO(johnniwinther): Replace this by a `getAppliedMixins` function that
+  // return transitively mixed in classes like in:
+  //     class A {}
+  //     class B = Object with A;
+  //     class C = Object with B;
   ClassEntity getAppliedMixin(IndexedClass cls) {
     assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
@@ -758,6 +786,12 @@
     return data.orderedTypeSet;
   }
 
+  /// Returns all supertypes of [cls].
+  Iterable<InterfaceType> getSuperTypes(ClassEntity cls) {
+    return getOrderedTypeSet(cls).supertypes;
+  }
+
+  /// Returns the hierarchy depth of [cls].
   @override
   int getHierarchyDepth(IndexedClass cls) {
     assert(checkFamily(cls));
@@ -774,19 +808,19 @@
     return data.interfaces;
   }
 
-  @override
+  /// Returns the defining node for [member].
   ir.Member getMemberNode(covariant IndexedMember member) {
     assert(checkFamily(member));
     return members.getData(member).node;
   }
 
-  @override
+  /// Returns the defining node for [cls].
   ir.Class getClassNode(covariant IndexedClass cls) {
     assert(checkFamily(cls));
     return classes.getData(cls).node;
   }
 
-  @override
+  /// Return the [ImportEntity] corresponding to [node].
   ImportEntity getImport(ir.LibraryDependency node) {
     if (node == null) return null;
     ir.Library library = node.parent;
@@ -794,18 +828,18 @@
     return data.imports[node];
   }
 
+  /// Returns the core types for the underlying kernel model.
   @override
   ir.CoreTypes get coreTypes => _coreTypes ??= ir.CoreTypes(env.mainComponent);
 
-  @override
+  /// Returns the type environment for the underlying kernel model.
   ir.TypeEnvironment get typeEnvironment =>
       _typeEnvironment ??= ir.TypeEnvironment(coreTypes, classHierarchy);
 
-  @override
+  /// Returns the class hierarchy for the underlying kernel model.
   ir.ClassHierarchy get classHierarchy =>
       _classHierarchy ??= ir.ClassHierarchy(env.mainComponent, coreTypes);
 
-  @override
   ir.StaticTypeContext getStaticTypeContext(MemberEntity member) {
     // TODO(johnniwinther): Cache the static type context.
     return ir.StaticTypeContext(getMemberNode(member), typeEnvironment);
@@ -817,17 +851,18 @@
             (ir.LocatedMessage message, List<ir.LocatedMessage> context) {
       reportLocatedMessage(reporter, message, context);
     },
-            environment: _environment.toMap(),
+            environment: _environment,
             evaluationMode: options.useLegacySubtyping
                 ? ir.EvaluationMode.weak
                 : ir.EvaluationMode.strong);
   }
 
-  @override
+  /// Returns the [Name] corresponding to [name].
   Name getName(ir.Name name) {
     return Name(name.text, name.isPrivate ? getLibrary(name.library) : null);
   }
 
+  /// Returns the [CallStructure] corresponding to the [arguments].
   @override
   CallStructure getCallStructure(ir.Arguments arguments) {
     int argumentCount = arguments.positional.length + arguments.named.length;
@@ -861,7 +896,8 @@
         includeTypeParameters ? typeParameters : 0);
   }
 
-  @override
+  /// Returns the [Selector] corresponding to the invocation of [name] with
+  /// [arguments].
   Selector getInvocationSelector(ir.Name irName, int positionalArguments,
       List<String> namedArguments, int typeArguments) {
     Name name = getName(irName);
@@ -968,8 +1004,8 @@
     return node.arguments.positional[index].accept(Stringifier());
   }
 
-  // TODO(johnniwinther): Cache this for later use.
-  @override
+  /// Computes the [NativeBehavior] for a call to the [JS] function.
+  /// TODO(johnniwinther): Cache this for later use.
   NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node) {
     if (node.arguments.positional.length < 2 ||
         node.arguments.named.isNotEmpty) {
@@ -1000,8 +1036,9 @@
         commonElements);
   }
 
-  // TODO(johnniwinther): Cache this for later use.
-  @override
+  /// TODO(johnniwinther): Cache this for later use.
+  /// Computes the [NativeBehavior] for a call to the [JS_BUILTIN]
+  /// function.
   NativeBehavior getNativeBehaviorForJsBuiltinCall(ir.StaticInvocation node) {
     if (node.arguments.positional.length < 1) {
       reporter.internalError(
@@ -1027,8 +1064,9 @@
         commonElements);
   }
 
-  // TODO(johnniwinther): Cache this for later use.
-  @override
+  /// Computes the [NativeBehavior] for a call to the
+  /// [JS_EMBEDDED_GLOBAL] function.
+  /// TODO(johnniwinther): Cache this for later use.
   NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall(
       ir.StaticInvocation node) {
     if (node.arguments.positional.length < 1) {
@@ -1061,7 +1099,7 @@
         commonElements);
   }
 
-  @override
+  /// Returns the [js.Name] for the `JsGetName` [constant] value.
   js.Name getNameForJsGetName(ConstantValue constant, Namer namer) {
     int index = extractEnumIndexFromConstantValue(
         constant, commonElements.jsGetNameEnum);
@@ -1084,7 +1122,7 @@
     return null;
   }
 
-  @override
+  /// Computes the [ConstantValue] for the constant [expression].
   ConstantValue getConstantValue(
       ir.StaticTypeContext staticTypeContext, ir.Expression node,
       {bool requireConstant = true,
@@ -1129,7 +1167,8 @@
     return metadata;
   }
 
-  @override
+  /// Returns the `noSuchMethod` [FunctionEntity] call from a
+  /// `super.noSuchMethod` invocation within [cls].
   FunctionEntity getSuperNoSuchMethod(ClassEntity cls) {
     while (cls != null) {
       cls = elementEnvironment.getSuperClass(cls);
@@ -1383,16 +1422,18 @@
   }
 
   /// NativeBasicData is need for computation of the default super class.
-  @override
   NativeBasicData get nativeBasicData => _frontendStrategy.nativeBasicData;
 
-  @override
+  /// Adds libraries in [component] to the set of libraries.
+  ///
+  /// The main method of the first component is used as the main method for the
+  /// compilation.
   void addComponent(ir.Component component) {
     env.addComponent(component);
   }
 
   BehaviorBuilder get nativeBehaviorBuilder =>
-      _nativeBehaviorBuilder ??= KernelBehaviorBuilder(elementEnvironment,
+      _nativeBehaviorBuilder ??= BehaviorBuilder(elementEnvironment,
           commonElements, nativeBasicData, reporter, options);
 
   ResolutionImpact computeWorldImpact(KMember member,
@@ -1451,16 +1492,16 @@
   }
 
   /// Returns the kernel [ir.Procedure] node for the [method].
-  ir.Procedure _lookupProcedure(KFunction method) {
+  ir.Procedure lookupProcedure(KFunction method) {
     return members.getData(method).node;
   }
 
-  @override
+  /// Returns the [ir.Library] corresponding to [library].
   ir.Library getLibraryNode(LibraryEntity library) {
     return libraries.getData(library).library;
   }
 
-  @override
+  /// Returns the [Local] corresponding to the local function [node].
   Local getLocalFunction(ir.LocalFunction node) {
     KLocalFunction localFunction = localFunctionMap[node];
     if (localFunction == null) {
@@ -1509,7 +1550,9 @@
     return localFunction;
   }
 
-  bool _implementsFunction(IndexedClass cls) {
+  /// Returns `true` if [cls] implements `Function` either explicitly or through
+  /// a `call` method.
+  bool implementsFunction(IndexedClass cls) {
     assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     OrderedTypeSet orderedTypeSet = data.orderedTypeSet;
@@ -1522,7 +1565,7 @@
     return data.callType?.withoutNullability is FunctionType;
   }
 
-  @override
+  /// Compute the kind of foreign helper function called by [node], if any.
   ForeignKind getForeignKind(ir.StaticInvocation node) {
     if (commonElements.isForeignHelper(getMember(node.target))) {
       switch (node.target.name.text) {
@@ -1539,7 +1582,8 @@
     return ForeignKind.NONE;
   }
 
-  @override
+  /// Computes the [InterfaceType] referenced by a call to the
+  /// [JS_INTERCEPTOR_CONSTANT] function, if any.
   InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node) {
     if (node.arguments.positional.length != 1 ||
         node.arguments.named.isNotEmpty) {
@@ -1559,8 +1603,8 @@
     return null;
   }
 
-  // TODO(johnniwinther): Cache this for later use.
-  @override
+  /// Computes the native behavior for reading the native [field].
+  /// TODO(johnniwinther): Cache this for later use.
   NativeBehavior getNativeBehaviorForFieldLoad(ir.Field field,
       Iterable<String> createsAnnotations, Iterable<String> returnsAnnotations,
       {bool isJsInterop}) {
@@ -1570,15 +1614,16 @@
         isJsInterop: isJsInterop);
   }
 
-  // TODO(johnniwinther): Cache this for later use.
-  @override
+  /// Computes the native behavior for writing to the native [field].
+  /// TODO(johnniwinther): Cache this for later use.
   NativeBehavior getNativeBehaviorForFieldStore(ir.Field field) {
     DartType type = getDartType(field.type);
     return nativeBehaviorBuilder.buildFieldStoreBehavior(type);
   }
 
-  // TODO(johnniwinther): Cache this for later use.
-  @override
+  /// Computes the native behavior for calling the function or constructor
+  /// [member].
+  /// TODO(johnniwinther): Cache this for later use.
   NativeBehavior getNativeBehaviorForMethod(ir.Member member,
       Iterable<String> createsAnnotations, Iterable<String> returnsAnnotations,
       {bool isJsInterop}) {
@@ -1666,7 +1711,7 @@
 
 class KernelElementEnvironment extends ElementEnvironment
     implements KElementEnvironment {
-  final KernelToElementMapImpl elementMap;
+  final KernelToElementMap elementMap;
 
   KernelElementEnvironment(this.elementMap);
 
@@ -1868,20 +1913,6 @@
   }
 
   @override
-  bool isDeferredLoadLibraryGetter(MemberEntity member) {
-    // The front-end generates the getter of loadLibrary explicitly as code
-    // so there is no implicit representation based on a "loadLibrary" member.
-    return false;
-  }
-
-  @override
-  Iterable<ConstantValue> getLibraryMetadata(covariant IndexedLibrary library) {
-    assert(elementMap.checkFamily(library));
-    KLibraryData libraryData = elementMap.libraries.getData(library);
-    return libraryData.getMetadata(elementMap);
-  }
-
-  @override
   Iterable<ImportEntity> getImports(covariant IndexedLibrary library) {
     assert(elementMap.checkFamily(library));
     KLibraryData libraryData = elementMap.libraries.getData(library);
@@ -1889,13 +1920,6 @@
   }
 
   @override
-  Iterable<ConstantValue> getClassMetadata(covariant IndexedClass cls) {
-    assert(elementMap.checkFamily(cls));
-    KClassData classData = elementMap.classes.getData(cls);
-    return classData.getMetadata(elementMap);
-  }
-
-  @override
   Iterable<ConstantValue> getMemberMetadata(covariant IndexedMember member,
       {bool includeParameterMetadata = false}) {
     // TODO(redemption): Support includeParameterMetadata.
@@ -1921,34 +1945,17 @@
   }
 }
 
-/// [BehaviorBuilder] for kernel based elements.
-class KernelBehaviorBuilder extends BehaviorBuilder {
-  @override
-  final ElementEnvironment elementEnvironment;
-  @override
-  final CommonElements commonElements;
-  @override
-  final DiagnosticReporter reporter;
-  @override
-  final NativeBasicData nativeBasicData;
-  @override
-  final CompilerOptions options;
-
-  KernelBehaviorBuilder(this.elementEnvironment, this.commonElements,
-      this.nativeBasicData, this.reporter, this.options);
-}
-
-class KernelNativeMemberResolver implements NativeMemberResolver {
+class KernelNativeMemberResolver {
   static final RegExp _identifier = RegExp(r'^[a-zA-Z_$][a-zA-Z0-9_$]*$');
 
-  final KernelToElementMapImpl _elementMap;
+  final KernelToElementMap _elementMap;
   final NativeBasicData _nativeBasicData;
   final NativeDataBuilder _nativeDataBuilder;
 
   KernelNativeMemberResolver(
       this._elementMap, this._nativeBasicData, this._nativeDataBuilder);
 
-  @override
+  /// Computes whether [node] is native or JsInterop.
   void resolveNativeMember(ir.Member node, IrAnnotationData annotationData) {
     assert(annotationData != null);
     bool isJsInterop = _isJsInteropMember(node);
@@ -2127,42 +2134,6 @@
   }
 }
 
-class KernelClassQueries extends ClassQueries {
-  final KernelToElementMapImpl elementMap;
-
-  KernelClassQueries(this.elementMap);
-
-  @override
-  ClassEntity getDeclaration(ClassEntity cls) {
-    return cls;
-  }
-
-  @override
-  Iterable<InterfaceType> getSupertypes(ClassEntity cls) {
-    return elementMap.getOrderedTypeSet(cls).supertypes;
-  }
-
-  @override
-  ClassEntity getSuperClass(ClassEntity cls) {
-    return elementMap.getSuperType(cls)?.element;
-  }
-
-  @override
-  bool implementsFunction(ClassEntity cls) {
-    return elementMap._implementsFunction(cls);
-  }
-
-  @override
-  int getHierarchyDepth(ClassEntity cls) {
-    return elementMap.getHierarchyDepth(cls);
-  }
-
-  @override
-  ClassEntity getAppliedMixin(ClassEntity cls) {
-    return elementMap.getAppliedMixin(cls);
-  }
-}
-
 DiagnosticMessage _createDiagnosticMessage(
     DiagnosticReporter reporter, ir.LocatedMessage message) {
   SourceSpan sourceSpan = SourceSpan(
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 55f7892..2fe73fc 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -5,7 +5,7 @@
 library dart2js.kernel.env;
 
 import 'package:front_end/src/api_unstable/dart2js.dart'
-    show isRedirectingFactory, isRedirectingFactoryField;
+    show isRedirectingFactoryField;
 
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
@@ -24,7 +24,6 @@
 import '../ssa/type_builder.dart';
 import '../universe/member_usage.dart';
 import 'element_map.dart';
-import 'element_map_impl.dart';
 
 /// Environment for fast lookup of component libraries.
 class KProgramEnv {
@@ -198,14 +197,14 @@
 
   KLibraryData(this.library);
 
-  Iterable<ConstantValue> getMetadata(KernelToElementMapImpl elementMap) {
+  Iterable<ConstantValue> getMetadata(KernelToElementMap elementMap) {
     return _metadata ??= elementMap.getMetadata(
         ir.StaticTypeContext.forAnnotations(
             library, elementMap.typeEnvironment),
         library.annotations);
   }
 
-  Iterable<ImportEntity> getImports(KernelToElementMapImpl elementMap) {
+  Iterable<ImportEntity> getImports(KernelToElementMap elementMap) {
     if (imports == null) {
       List<ir.LibraryDependency> dependencies = library.dependencies;
       if (dependencies.isEmpty) {
@@ -247,7 +246,7 @@
   bool get isMixinApplicationWithMembers;
 
   /// Ensures that all members have been computed for [cls].
-  void ensureMembers(KernelToElementMapImpl elementMap);
+  void ensureMembers(KernelToElementMap elementMap);
 
   /// Return the [MemberEntity] for the member [name] in the class. If [setter]
   /// is `true`, the setter or assignable field corresponding to [name] is
@@ -328,11 +327,11 @@
   }
 
   @override
-  void ensureMembers(KernelToElementMapImpl elementMap) {
+  void ensureMembers(KernelToElementMap elementMap) {
     _ensureMaps(elementMap);
   }
 
-  void _ensureMaps(KernelToElementMapImpl elementMap) {
+  void _ensureMaps(KernelToElementMap elementMap) {
     if (_memberMap != null) return;
 
     _memberMap = <String, ir.Member>{};
@@ -368,7 +367,7 @@
       }
       var name = member.name.text;
       if (member.kind == ir.ProcedureKind.Factory) {
-        if (isRedirectingFactory(member)) {
+        if (member.isRedirectingFactory) {
           // Don't include redirecting factories.
           return;
         }
@@ -592,8 +591,7 @@
   bool isCallTypeComputed = false;
 
   @override
-  Iterable<ConstantValue> getMetadata(
-      covariant KernelToElementMapImpl elementMap) {
+  Iterable<ConstantValue> getMetadata(covariant KernelToElementMap elementMap) {
     return _metadata ??= elementMap.getMetadata(
         ir.StaticTypeContext.forAnnotations(
             node.enclosingLibrary, elementMap.typeEnvironment),
@@ -637,8 +635,7 @@
   KMemberDataImpl(this.node);
 
   @override
-  Iterable<ConstantValue> getMetadata(
-      covariant KernelToElementMapImpl elementMap) {
+  Iterable<ConstantValue> getMetadata(covariant KernelToElementMap elementMap) {
     return _metadata ??= elementMap.getMetadata(
         ir.StaticTypeContext(node, elementMap.typeEnvironment),
         node.annotations);
@@ -670,7 +667,7 @@
 
   @override
   List<TypeVariableType> getFunctionTypeVariables(
-      covariant KernelToElementMapImpl elementMap) {
+      covariant KernelToElementMap elementMap) {
     if (_typeVariables == null) {
       if (functionNode.typeParameters.isEmpty) {
         _typeVariables = const <TypeVariableType>[];
@@ -705,7 +702,7 @@
   KFunctionDataImpl(ir.Member node, this.functionNode) : super(node);
 
   @override
-  FunctionType getFunctionType(covariant KernelToElementMapImpl elementMap) {
+  FunctionType getFunctionType(covariant KernelToElementMap elementMap) {
     return _type ??= elementMap.getFunctionType(functionNode);
   }
 
@@ -788,7 +785,7 @@
   ir.Field get node => super.node;
 
   @override
-  DartType getFieldType(covariant KernelToElementMapImpl elementMap) {
+  DartType getFieldType(covariant KernelToElementMap elementMap) {
     return _type ??= elementMap.getDartType(node.type);
   }
 
diff --git a/pkg/compiler/lib/src/kernel/front_end_adapter.dart b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
index 9a542a8..5dca150 100644
--- a/pkg/compiler/lib/src/kernel/front_end_adapter.dart
+++ b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
@@ -10,7 +10,7 @@
 
 import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
 
-import '../../compiler_new.dart' as api;
+import '../../compiler.dart' as api;
 
 import '../common.dart';
 import '../io/source_file.dart';
@@ -23,7 +23,7 @@
 
   @override
   fe.FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme == 'data') {
+    if (uri.isScheme('data')) {
       return fe.DataFileSystemEntity(Uri.base.resolveUri(uri));
     } else {
       return _CompilerFileSystemEntity(uri, this);
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index f45ec96..2d4c60f 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -8,7 +8,7 @@
 import '../common.dart';
 import '../common/names.dart';
 import '../common/resolution.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
@@ -216,7 +216,7 @@
     impactBuilder.registerFeature(Feature.SYNC_STAR);
     impactBuilder.registerStaticUse(StaticUse.staticInvoke(
         commonElements.syncStarIterableFactory,
-        const CallStructure.unnamed(1, 1),
+        CallStructure.unnamed(1, 1),
         <DartType>[elementMap.getDartType(elementType)]));
   }
 
@@ -225,7 +225,7 @@
     impactBuilder.registerFeature(Feature.ASYNC);
     impactBuilder.registerStaticUse(StaticUse.staticInvoke(
         commonElements.asyncAwaitCompleterFactory,
-        const CallStructure.unnamed(0, 1),
+        CallStructure.unnamed(0, 1),
         <DartType>[elementMap.getDartType(elementType)]));
   }
 
@@ -234,7 +234,7 @@
     impactBuilder.registerFeature(Feature.ASYNC_STAR);
     impactBuilder.registerStaticUse(StaticUse.staticInvoke(
         commonElements.asyncStarStreamControllerFactory,
-        const CallStructure.unnamed(1, 1),
+        CallStructure.unnamed(1, 1),
         <DartType>[elementMap.getDartType(elementType)]));
   }
 
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index 535a664..f1a2641 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -7,18 +7,16 @@
 import 'package:kernel/ast.dart' as ir;
 
 import '../common.dart';
-import '../common/backend_api.dart';
+import '../common/elements.dart';
 import '../common/names.dart' show Uris;
 import '../common/resolution.dart';
 import '../common/tasks.dart';
 import '../common/work.dart';
-import '../common_elements.dart';
 import '../compiler.dart';
 import '../deferred_load/deferred_load.dart' show DeferredLoadTask;
 import '../elements/entities.dart';
 import '../enqueue.dart';
 import '../environment.dart' as env;
-import '../frontend_strategy.dart';
 import '../ir/annotations.dart';
 import '../ir/closure.dart' show ClosureScopeModel;
 import '../ir/impact.dart';
@@ -36,6 +34,7 @@
 import '../js_backend/resolution_listener.dart';
 import '../js_backend/runtime_types_resolution.dart';
 import '../kernel/dart2js_target.dart';
+import '../kernel/no_such_method_resolver.dart';
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
 import '../native/resolver.dart';
 import '../options.dart';
@@ -45,18 +44,18 @@
 import '../universe/world_impact.dart';
 import '../util/enumset.dart';
 import 'element_map.dart';
-import 'element_map_impl.dart';
 import 'loader.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 extends FrontendStrategy {
-  final NativeBasicDataBuilderImpl nativeBasicDataBuilder =
-      NativeBasicDataBuilderImpl();
+class KernelFrontendStrategy {
+  final NativeBasicDataBuilder nativeBasicDataBuilder =
+      NativeBasicDataBuilder();
   NativeBasicData _nativeBasicData;
   final CompilerOptions _options;
   final CompilerTask _compilerTask;
-  KernelToElementMapImpl _elementMap;
+  KernelToElementMap _elementMap;
   RuntimeTypesNeedBuilder _runtimeTypesNeedBuilder;
 
   KernelAnnotationProcessor _annotationProcessor;
@@ -66,7 +65,7 @@
   ModularStrategy _modularStrategy;
   IrAnnotationData _irAnnotationData;
 
-  NativeDataBuilderImpl _nativeDataBuilder;
+  NativeDataBuilder _nativeDataBuilder;
   NativeDataBuilder get nativeDataBuilder => _nativeDataBuilder;
 
   BackendUsageBuilder _backendUsageBuilder;
@@ -79,17 +78,17 @@
 
   KFieldAnalysis _fieldAnalysis;
 
-  @override
+  /// Support for classifying `noSuchMethod` implementations.
   NoSuchMethodRegistry noSuchMethodRegistry;
 
   KernelFrontendStrategy(this._compilerTask, this._options,
       DiagnosticReporter reporter, env.Environment environment) {
     assert(_compilerTask != null);
-    _elementMap = KernelToElementMapImpl(reporter, environment, this, _options);
+    _elementMap = KernelToElementMap(reporter, environment, this, _options);
     _modularStrategy = KernelModularStrategy(_compilerTask, _elementMap);
     _backendUsageBuilder = BackendUsageBuilderImpl(this);
-    noSuchMethodRegistry = NoSuchMethodRegistryImpl(
-        commonElements, KernelNoSuchMethodResolver(_elementMap));
+    noSuchMethodRegistry =
+        NoSuchMethodRegistry(commonElements, NoSuchMethodResolver(_elementMap));
   }
 
   NativeResolutionEnqueuer get nativeResolutionEnqueuerForTesting =>
@@ -97,7 +96,7 @@
 
   KFieldAnalysis get fieldAnalysisForTesting => _fieldAnalysis;
 
-  @override
+  /// Called before processing of the resolution queue is started.
   void onResolutionStart() {
     // TODO(johnniwinther): Avoid the compiler.elementEnvironment.getThisType
     // calls. Currently needed to ensure resolution of the classes for various
@@ -132,7 +131,6 @@
     });
   }
 
-  @override
   ResolutionEnqueuer createResolutionEnqueuer(
       CompilerTask task, Compiler compiler) {
     RuntimeTypesNeedBuilder rtiNeedBuilder = _createRuntimeTypesNeedBuilder();
@@ -142,24 +140,23 @@
         elementEnvironment,
         commonElements,
         _elementMap.types,
-        BaseNativeClassFinder(elementEnvironment, nativeBasicData));
-    _nativeDataBuilder = NativeDataBuilderImpl(nativeBasicData);
+        NativeClassFinder(elementEnvironment, nativeBasicData));
+    _nativeDataBuilder = NativeDataBuilder(nativeBasicData);
     _customElementsResolutionAnalysis = CustomElementsResolutionAnalysis(
         elementEnvironment,
         commonElements,
         nativeBasicData,
         _backendUsageBuilder);
     _fieldAnalysis = KFieldAnalysis(this);
-    ClassQueries classQueries = KernelClassQueries(elementMap);
     ClassHierarchyBuilder classHierarchyBuilder =
-        ClassHierarchyBuilder(commonElements, classQueries);
+        ClassHierarchyBuilder(commonElements, elementMap);
     AnnotationsDataBuilder annotationsDataBuilder = AnnotationsDataBuilder();
     // TODO(johnniwinther): This is a hack. The annotation data is built while
     // using it. With CFE constants the annotations data can be built fully
     // before creating the resolution enqueuer.
     AnnotationsData annotationsData = AnnotationsDataImpl(
         compiler.options, annotationsDataBuilder.pragmaAnnotations);
-    ImpactTransformer impactTransformer = JavaScriptImpactTransformer(
+    final impactTransformer = JavaScriptImpactTransformer(
         elementEnvironment,
         commonElements,
         impacts,
@@ -188,7 +185,7 @@
             _nativeResolutionEnqueuer,
             _fieldAnalysis,
             compiler.deferredLoadTask),
-        ResolutionWorldBuilderImpl(
+        ResolutionWorldBuilder(
             _options,
             elementMap,
             elementEnvironment,
@@ -204,8 +201,7 @@
             noSuchMethodRegistry,
             annotationsDataBuilder,
             const StrongModeWorldStrategy(),
-            classHierarchyBuilder,
-            classQueries),
+            classHierarchyBuilder),
         KernelWorkItemBuilder(
             _compilerTask,
             elementMap,
@@ -221,10 +217,6 @@
         annotationsData);
   }
 
-  @override
-  void onResolutionEnd() {}
-
-  @override
   NativeBasicData get nativeBasicData {
     if (_nativeBasicData == null) {
       _nativeBasicData = nativeBasicDataBuilder.close(elementEnvironment);
@@ -236,7 +228,7 @@
     return _nativeBasicData;
   }
 
-  @override
+  /// Registers a set of loaded libraries with this strategy.
   void registerLoadedLibraries(KernelResult kernelResult) {
     _elementMap.addComponent(kernelResult.component);
     _irAnnotationData = processAnnotations(
@@ -255,7 +247,6 @@
     }
   }
 
-  @override
   void registerModuleData(List<ModuleData> data) {
     if (data == null) {
       _modularStrategy = KernelModularStrategy(_compilerTask, _elementMap);
@@ -269,19 +260,23 @@
 
   ModularStrategy get modularStrategyForTesting => _modularStrategy;
 
-  @override
-  ElementEnvironment get elementEnvironment => _elementMap.elementEnvironment;
+  /// Returns the [ElementEnvironment] for the element model used in this
+  /// strategy.
+  KernelElementEnvironment get elementEnvironment =>
+      _elementMap.elementEnvironment;
 
-  @override
-  CommonElements get commonElements => _elementMap.commonElements;
+  /// Returns the [CommonElements] for the element model used in this
+  /// strategy.
+  KCommonElements get commonElements => _elementMap.commonElements;
 
   KernelToElementMap get elementMap => _elementMap;
 
-  @override
+  /// Creates a [DeferredLoadTask] for the element model used in this strategy.
   DeferredLoadTask createDeferredLoadTask(Compiler compiler) =>
       DeferredLoadTask(compiler, _elementMap);
 
-  @override
+  /// Computes the main function from [mainLibrary] adding additional world
+  /// impact to [impactBuilder].
   FunctionEntity computeMain(WorldImpactBuilder impactBuilder) {
     return elementEnvironment.mainFunction;
   }
@@ -295,7 +290,7 @@
   RuntimeTypesNeedBuilder get runtimeTypesNeedBuilderForTesting =>
       _runtimeTypesNeedBuilder;
 
-  @override
+  /// Creates a [SourceSpan] from [spannable] in context of [currentElement].
   SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement) {
     return _elementMap.getSourceSpan(spannable, currentElement);
   }
@@ -303,9 +298,9 @@
 
 class KernelWorkItemBuilder implements WorkItemBuilder {
   final CompilerTask _compilerTask;
-  final KernelToElementMapImpl _elementMap;
-  final ImpactTransformer _impactTransformer;
-  final NativeMemberResolver _nativeMemberResolver;
+  final KernelToElementMap _elementMap;
+  final JavaScriptImpactTransformer _impactTransformer;
+  final KernelNativeMemberResolver _nativeMemberResolver;
   final AnnotationsDataBuilder _annotationsDataBuilder;
   final Map<MemberEntity, ClosureScopeModel> _closureModels;
   final Map<Entity, WorldImpact> _impactCache;
@@ -347,9 +342,9 @@
 
 class KernelWorkItem implements WorkItem {
   final CompilerTask _compilerTask;
-  final KernelToElementMapImpl _elementMap;
-  final ImpactTransformer _impactTransformer;
-  final NativeMemberResolver _nativeMemberResolver;
+  final KernelToElementMap _elementMap;
+  final JavaScriptImpactTransformer _impactTransformer;
+  final KernelNativeMemberResolver _nativeMemberResolver;
   final AnnotationsDataBuilder _annotationsDataBuilder;
   @override
   final MemberEntity element;
@@ -427,7 +422,7 @@
 
 class KernelModularStrategy extends ModularStrategy {
   final CompilerTask _compilerTask;
-  final KernelToElementMapImpl _elementMap;
+  final KernelToElementMap _elementMap;
 
   KernelModularStrategy(this._compilerTask, this._elementMap);
 
@@ -459,7 +454,7 @@
 
 class DeserializedModularStrategy extends ModularStrategy {
   final CompilerTask _compilerTask;
-  final KernelToElementMapImpl _elementMap;
+  final KernelToElementMap _elementMap;
   final Map<ir.Member, ImpactBuilderData> _cache = {};
 
   DeserializedModularStrategy(
diff --git a/pkg/compiler/lib/src/kernel/kernel_world.dart b/pkg/compiler/lib/src/kernel/kernel_world.dart
index 3c7d99a..484ab9a 100644
--- a/pkg/compiler/lib/src/kernel/kernel_world.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_world.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
+import '../common/elements.dart';
 import '../common/names.dart';
-import '../common_elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js_backend/annotations.dart';
@@ -20,53 +20,29 @@
 import '../universe/selector.dart';
 import '../world.dart';
 
-import 'element_map_impl.dart';
+import 'element_map.dart';
 
-class KClosedWorldImpl implements KClosedWorld {
-  final KernelToElementMapImpl elementMap;
-
-  @override
+/// The immutable result of the [ResolutionWorldBuilder].
+class KClosedWorld implements BuiltWorld {
+  final KernelToElementMap elementMap;
   final KElementEnvironment elementEnvironment;
-
-  @override
   final DartTypes dartTypes;
-
-  @override
   final KCommonElements commonElements;
-
-  @override
   final NativeData nativeData;
-
-  @override
   final InterceptorData interceptorData;
-
-  @override
   final BackendUsage backendUsage;
-
-  @override
   final NoSuchMethodData noSuchMethodData;
-
-  @override
   final Map<ClassEntity, Set<ClassEntity>> mixinUses;
-
-  @override
   final Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses;
 
   // TODO(johnniwinther): Can this be derived from [ClassSet]s?
   final Set<ClassEntity> _implementedClasses;
-
-  @override
   final Iterable<MemberEntity> liveInstanceMembers;
 
-  @override
+  /// Members that are written either directly or through a setter selector.
   final Iterable<MemberEntity> assignedInstanceMembers;
-  @override
   final KFieldAnalysis fieldAnalysis;
-
-  @override
   final Iterable<ClassEntity> liveNativeClasses;
-
-  @override
   final Map<MemberEntity, MemberUsage> liveMemberUsage;
 
   @override
@@ -93,19 +69,23 @@
   @override
   final Set<Local> genericLocalFunctions;
 
-  @override
+  /// Set of live closurized members whose signatures reference type variables.
+  ///
+  /// A closurized method is considered live if the enclosing class has been
+  /// instantiated.
   final Set<FunctionEntity> closurizedMembersWithFreeTypeVariables;
 
-  @override
+  /// Set of (live) local functions (closures).
+  ///
+  /// A live function is one whose enclosing member function has been enqueued.
   final Iterable<Local> localFunctions;
 
   @override
   final Iterable<InterfaceType> instantiatedTypes;
 
-  @override
   RuntimeTypesNeed get rtiNeed => _rtiNeed;
 
-  KClosedWorldImpl(this.elementMap,
+  KClosedWorld(this.elementMap,
       {CompilerOptions options,
       this.elementEnvironment,
       this.dartTypes,
@@ -155,7 +135,7 @@
     return true;
   }
 
-  @override
+  /// Returns `true` if [cls] is implemented by an instantiated class.
   bool isImplemented(ClassEntity cls) {
     return _implementedClasses.contains(cls);
   }
@@ -175,7 +155,8 @@
     dynamicTypeArgumentDependencies.forEach(f);
   }
 
-  @override
+  /// Returns `true` if [member] has been marked as used (called, read, etc.) in
+  /// this world builder.
   bool isMemberUsed(MemberEntity member) => liveMemberUsage.containsKey(member);
 
   @override
diff --git a/pkg/compiler/lib/src/kernel/loader.dart b/pkg/compiler/lib/src/kernel/loader.dart
index cdab490..8e7520e 100644
--- a/pkg/compiler/lib/src/kernel/loader.dart
+++ b/pkg/compiler/lib/src/kernel/loader.dart
@@ -14,7 +14,7 @@
 import 'package:kernel/kernel.dart' hide LibraryDependency, Combinator;
 import 'package:kernel/target/targets.dart' hide DiagnosticReporter;
 
-import '../../compiler_new.dart' as api;
+import '../../compiler.dart' as api;
 import '../commandline_options.dart' show Flags;
 import '../common/tasks.dart' show CompilerTask, Measurer;
 import '../common.dart';
@@ -269,7 +269,7 @@
 
       // Libraries dependencies do not show implicit imports to `dart:core`.
       var dartCore = component.libraries.firstWhere((lib) {
-        return lib.importUri.scheme == 'dart' && lib.importUri.path == 'core';
+        return lib.importUri.isScheme('dart') && lib.importUri.path == 'core';
       });
       search(dartCore);
 
diff --git a/pkg/compiler/lib/src/kernel/native_basic_data.dart b/pkg/compiler/lib/src/kernel/native_basic_data.dart
index fc85b5e..df000a3 100644
--- a/pkg/compiler/lib/src/kernel/native_basic_data.dart
+++ b/pkg/compiler/lib/src/kernel/native_basic_data.dart
@@ -2,11 +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.
 
-// TODO(johnniwinther): Make this a separate library.
-part of dart2js.kernel.element_map;
+import 'package:kernel/ast.dart' as ir;
 
-class KernelAnnotationProcessor implements AnnotationProcessor {
-  final KernelToElementMapImpl elementMap;
+import '../common.dart';
+import '../common/elements.dart';
+import '../constants/values.dart';
+import '../elements/entities.dart';
+import '../ir/annotations.dart';
+import '../js_backend/native_data.dart';
+import '../native/resolver.dart';
+
+import 'element_map.dart';
+
+class KernelAnnotationProcessor {
+  final KernelToElementMap elementMap;
   final NativeBasicDataBuilder _nativeBasicDataBuilder;
   final IrAnnotationData annotationData;
 
@@ -14,7 +23,6 @@
       this.elementMap, this._nativeBasicDataBuilder, this.annotationData)
       : assert(annotationData != null);
 
-  @override
   void extractNativeAnnotations(LibraryEntity library) {
     KElementEnvironment elementEnvironment = elementMap.elementEnvironment;
 
@@ -47,7 +55,6 @@
     return annotationName;
   }
 
-  @override
   void extractJsInteropAnnotations(LibraryEntity library) {
     // Unused reporter, add back in if uncommenting report lines down below.
     // DiagnosticReporter reporter = elementMap.reporter;
diff --git a/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart b/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
index 2e347e0..6b44875 100644
--- a/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
+++ b/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
@@ -2,18 +2,29 @@
 // for 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 dart2js.kernel.element_map;
+import 'package:kernel/ast.dart' as ir;
 
-class KernelNoSuchMethodResolver implements NoSuchMethodResolver {
-  final KernelToElementMapImpl elementMap;
+import '../common/elements.dart';
+import '../common/names.dart';
+import '../elements/entities.dart';
 
-  KernelNoSuchMethodResolver(this.elementMap);
+import 'element_map.dart';
+import 'kelements.dart';
+
+/// Interface for determining the form of a `noSuchMethod` implementation.
+class NoSuchMethodResolver {
+  final KernelToElementMap elementMap;
+
+  NoSuchMethodResolver(this.elementMap);
 
   CommonElements get _commonElements => elementMap.commonElements;
 
-  @override
+  /// Computes whether [method] is of the form
+  ///
+  ///     noSuchMethod(i) => super.noSuchMethod(i);
+  ///
   bool hasForwardingSyntax(KFunction method) {
-    ir.Procedure node = elementMap._lookupProcedure(method);
+    ir.Procedure node = elementMap.lookupProcedure(method);
     if (node.function.positionalParameters.isEmpty) return false;
     ir.VariableDeclaration firstParameter =
         node.function.positionalParameters.first;
@@ -44,9 +55,12 @@
     return false;
   }
 
-  @override
+  /// Computes whether [method] is of the form
+  ///
+  ///     noSuchMethod(i) => throw new Error();
+  ///
   bool hasThrowingSyntax(KFunction method) {
-    ir.Procedure node = elementMap._lookupProcedure(method);
+    ir.Procedure node = elementMap.lookupProcedure(method);
     ir.Statement body = node.function.body;
     if (body is ir.Block && body.statements.isNotEmpty) {
       ir.Block block = body;
@@ -61,7 +75,7 @@
     return expr is ir.Throw;
   }
 
-  @override
+  /// Returns the `noSuchMethod` that [method] overrides.
   FunctionEntity getSuperNoSuchMethod(FunctionEntity method) {
     return elementMap.getSuperNoSuchMethod(method.enclosingClass);
   }
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index f59b9fd..f8f41cb 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -3,18 +3,19 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../constants/values.dart';
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js/js.dart' as js;
 import '../js_backend/native_data.dart' show NativeBasicData;
+import '../js_model/js_world_builder.dart' show JsToFrontendMap;
 import '../options.dart';
 import '../serialization/serialization.dart';
 import '../universe/side_effects.dart' show SideEffects;
 import 'js.dart';
 
-typedef TypeLookup = dynamic /*DartType|SpecialType*/
+typedef TypeLookup = Object /*DartType|SpecialType*/
     Function(String typeString, {bool required});
 
 /// This class is a temporary work-around until we get a more powerful DartType.
@@ -163,11 +164,11 @@
 
   /// [DartType]s or [SpecialType]s returned or yielded by the native
   /// element.
-  final List typesReturned = [];
+  final List<Object> typesReturned = [];
 
   /// [DartType]s or [SpecialType]s instantiated by the native
   /// element.
-  final List typesInstantiated = [];
+  final List<Object> typesInstantiated = [];
 
   String codeTemplateText;
   // If this behavior is for a JS expression, [codeTemplate] contains the
@@ -197,8 +198,8 @@
   factory NativeBehavior.readFromDataSource(DataSource source) {
     source.begin(tag);
 
-    List readTypes() {
-      List types = [];
+    List<Object> readTypes() {
+      List<Object> types = [];
       types.addAll(source.readDartTypes());
       int specialCount = source.readInt();
       for (int i = 0; i < specialCount; i++) {
@@ -208,8 +209,8 @@
       return types;
     }
 
-    List typesReturned = readTypes();
-    List typesInstantiated = readTypes();
+    List<Object> typesReturned = readTypes();
+    List<Object> typesInstantiated = readTypes();
     String codeTemplateText = source.readStringOrNull();
     SideEffects sideEffects = SideEffects.readFromDataSource(source);
     int throwBehavior = source.readInt();
@@ -235,7 +236,7 @@
   void writeToDataSink(DataSink sink) {
     sink.begin(tag);
 
-    void writeTypes(List types) {
+    void writeTypes(List<Object> types) {
       List<DartType> dartTypes = [];
       List<SpecialType> specialTypes = [];
       for (var type in types) {
@@ -372,8 +373,8 @@
       void setIsAllocation(bool isAllocation),
       void setUseGvn(bool useGvn),
       TypeLookup lookupType,
-      List typesReturned,
-      List typesInstantiated,
+      List<Object> typesReturned,
+      List<Object> typesInstantiated,
       objectType,
       nullType}) {
     bool seenError = false;
@@ -729,24 +730,55 @@
     }
     return dartTypes.dynamicType();
   }
+
+  Object _convertNativeBehaviorType(JsToFrontendMap map, Object type) {
+    if (type is DartType) {
+      // TODO(johnniwinther): Avoid free variables in types. If the type
+      // pulled from a generic function type it might contain a function
+      // type variable that should probably have been replaced by its bound.
+      return map.toBackendType(type, allowFreeVariables: true);
+    }
+    assert(type is SpecialType);
+    return type;
+  }
+
+  NativeBehavior convert(JsToFrontendMap map) {
+    final newBehavior = NativeBehavior();
+    for (Object type in typesReturned) {
+      newBehavior.typesReturned.add(_convertNativeBehaviorType(map, type));
+    }
+    for (Object type in typesInstantiated) {
+      newBehavior.typesInstantiated.add(_convertNativeBehaviorType(map, type));
+    }
+    newBehavior.codeTemplateText = codeTemplateText;
+    newBehavior.codeTemplate = codeTemplate;
+    newBehavior.throwBehavior = throwBehavior;
+    newBehavior.isAllocation = isAllocation;
+    newBehavior.useGvn = useGvn;
+    newBehavior.sideEffects.add(sideEffects);
+    return newBehavior;
+  }
 }
 
-abstract class BehaviorBuilder {
-  CommonElements get commonElements;
-  DiagnosticReporter get reporter;
-  NativeBasicData get nativeBasicData;
-  ElementEnvironment get elementEnvironment;
-  CompilerOptions get options;
+class BehaviorBuilder {
+  final ElementEnvironment elementEnvironment;
+  final CommonElements commonElements;
+  final DiagnosticReporter reporter;
+  final NativeBasicData nativeBasicData;
+  final CompilerOptions options;
   DartTypes get dartTypes => commonElements.dartTypes;
 
   NativeBehavior _behavior;
 
+  BehaviorBuilder(this.elementEnvironment, this.commonElements,
+      this.nativeBasicData, this.reporter, this.options);
+
   void _overrideWithAnnotations(Iterable<String> createsAnnotations,
       Iterable<String> returnsAnnotations, TypeLookup lookupType) {
     if (createsAnnotations.isEmpty && returnsAnnotations.isEmpty) return;
 
-    List creates = _collect(createsAnnotations, lookupType);
-    List returns = _collect(returnsAnnotations, lookupType);
+    List<Object> creates = _collect(createsAnnotations, lookupType);
+    List<Object> returns = _collect(returnsAnnotations, lookupType);
 
     if (creates != null) {
       _behavior.typesInstantiated
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 26ff0d0..2b6355c 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.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.
 
-import '../common_elements.dart' show CommonElements, ElementEnvironment;
+import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../js_backend/native_data.dart' show NativeData;
@@ -14,33 +14,11 @@
 import 'behavior.dart';
 import 'resolver.dart' show NativeClassFinder;
 
-/// This could be an abstract class but we use it as a stub for the
-/// dart_backend.
-class NativeEnqueuer {
-  /// Called when a [type] has been instantiated natively.
-  void onInstantiatedType(InterfaceType type) {}
-
-  /// Initial entry point to native enqueuer.
-  WorldImpact processNativeClasses(Iterable<Uri> libraries) =>
-      const WorldImpact();
-
-  /// Registers the [nativeBehavior]. Adds the liveness of its instantiated
-  /// types to the world.
-  void registerNativeBehavior(
-      WorldImpactBuilder impactBuilder, NativeBehavior nativeBehavior, cause) {}
-
-  /// Returns whether native classes are being used.
-  bool get hasInstantiatedNativeClasses => false;
-
-  /// Emits a summary information using the [log] function.
-  void logSummary(void log(String message)) {}
-}
-
-abstract class NativeEnqueuerBase implements NativeEnqueuer {
+abstract class NativeEnqueuer {
   final Set<ClassEntity> _registeredClasses = {};
   final Set<ClassEntity> _unusedClasses = {};
 
-  @override
+  /// Returns whether native classes are being used.
   bool get hasInstantiatedNativeClasses => !_registeredClasses.isEmpty;
 
   /// Log message reported if all native types are used.
@@ -52,18 +30,21 @@
   final CommonElements _commonElements;
 
   /// Subclasses of [NativeEnqueuerBase] are constructed by the backend.
-  NativeEnqueuerBase(this._options, this._elementEnvironment,
-      this._commonElements, this._dartTypes);
+  NativeEnqueuer(this._options, this._elementEnvironment, this._commonElements,
+      this._dartTypes);
 
   bool get enableLiveTypeAnalysis => _options.enableNativeLiveTypeAnalysis;
 
-  @override
+  /// Called when a [type] has been instantiated natively.
   void onInstantiatedType(InterfaceType type) {
     if (_unusedClasses.remove(type.element)) {
       _registeredClasses.add(type.element);
     }
   }
 
+  /// Initial entry point to native enqueuer.
+  WorldImpact processNativeClasses(Iterable<Uri> libraries);
+
   /// Register [classes] as natively instantiated in [impactBuilder].
   void _registerTypeUses(
       WorldImpactBuilder impactBuilder, Set<ClassEntity> classes, cause) {
@@ -79,7 +60,8 @@
     }
   }
 
-  @override
+  /// Registers the [nativeBehavior]. Adds the liveness of its instantiated
+  /// types to the world.
   void registerNativeBehavior(
       WorldImpactBuilder impactBuilder, NativeBehavior nativeBehavior, cause) {
     _processNativeBehavior(impactBuilder, nativeBehavior, cause);
@@ -169,7 +151,7 @@
     });
   }
 
-  @override
+  /// Emits a summary information using the [log] function.
   void logSummary(void log(String message)) {
     if (_allUsedMessage != null) {
       log(_allUsedMessage);
@@ -177,7 +159,7 @@
   }
 }
 
-class NativeResolutionEnqueuer extends NativeEnqueuerBase {
+class NativeResolutionEnqueuer extends NativeEnqueuer {
   final NativeClassFinder _nativeClassFinder;
 
   /// The set of all native classes.  Each native class is in [nativeClasses]
@@ -219,7 +201,7 @@
   }
 }
 
-class NativeCodegenEnqueuer extends NativeEnqueuerBase {
+class NativeCodegenEnqueuer extends NativeEnqueuer {
   final CodeEmitterTask _emitter;
   final Iterable<ClassEntity> _nativeClasses;
   final NativeData _nativeData;
diff --git a/pkg/compiler/lib/src/native/resolver.dart b/pkg/compiler/lib/src/native/resolver.dart
index a1a0d84..b579393 100644
--- a/pkg/compiler/lib/src/native/resolver.dart
+++ b/pkg/compiler/lib/src/native/resolver.dart
@@ -2,37 +2,23 @@
 // for 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 '../common_elements.dart' show KElementEnvironment;
+import '../common/elements.dart' show KElementEnvironment;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
-import '../ir/annotations.dart';
 import '../js_backend/native_data.dart';
 
-/// Interface for computing native members.
-abstract class NativeMemberResolver {
-  /// Computes whether [node] is native or JsInterop.
-  void resolveNativeMember(ir.Member node, IrAnnotationData annotationData);
-}
-
 /// Determines all native classes in a set of libraries.
-abstract class NativeClassFinder {
-  /// Returns the set of all native classes declared in [libraries].
-  Iterable<ClassEntity> computeNativeClasses(Iterable<Uri> libraries);
-}
-
-class BaseNativeClassFinder implements NativeClassFinder {
+class NativeClassFinder {
   final KElementEnvironment _elementEnvironment;
   final NativeBasicData _nativeBasicData;
 
   final Map<String, ClassEntity> _tagOwner = {};
 
-  BaseNativeClassFinder(this._elementEnvironment, this._nativeBasicData);
+  NativeClassFinder(this._elementEnvironment, this._nativeBasicData);
 
-  @override
+  /// Returns the set of all native classes declared in [libraries].
   Iterable<ClassEntity> computeNativeClasses(Iterable<Uri> libraries) {
     Set<ClassEntity> nativeClasses = {};
     libraries.forEach((uri) => _processNativeClassesInLibrary(
diff --git a/pkg/compiler/lib/src/null_compiler_output.dart b/pkg/compiler/lib/src/null_compiler_output.dart
index a6443e7..497bf50 100644
--- a/pkg/compiler/lib/src/null_compiler_output.dart
+++ b/pkg/compiler/lib/src/null_compiler_output.dart
@@ -6,7 +6,7 @@
 
 library compiler.null_api;
 
-import '../compiler_new.dart';
+import '../compiler.dart';
 
 /// Null pattern implementation of the [CompilerOutput] interface.
 class NullCompilerOutput implements CompilerOutput {
diff --git a/pkg/compiler/lib/src/old_to_new_api.dart b/pkg/compiler/lib/src/old_to_new_api.dart
deleted file mode 100644
index 73ab528..0000000
--- a/pkg/compiler/lib/src/old_to_new_api.dart
+++ /dev/null
@@ -1,106 +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.
-
-/// Implementation of the new compiler API in '../compiler_new.dart' through the
-/// old compiler API in '../compiler.dart'.
-
-library compiler.api.legacy;
-
-import 'dart:async' show EventSink, Future;
-import 'dart:convert' show utf8;
-
-import '../compiler.dart';
-import '../compiler_new.dart';
-import 'io/source_file.dart';
-import 'null_compiler_output.dart' show NullSink;
-
-/// Implementation of [CompilerInput] using a [CompilerInputProvider].
-class LegacyCompilerInput implements CompilerInput {
-  final CompilerInputProvider _inputProvider;
-
-  LegacyCompilerInput(this._inputProvider);
-
-  @override
-  Future<Input> readFromUri(Uri uri, {InputKind inputKind = InputKind.UTF8}) {
-    // The switch handles all enum values, but not null.
-    // ignore: missing_return
-    return _inputProvider(uri).then((/*String|List<int>*/ data) {
-      switch (inputKind) {
-        case InputKind.UTF8:
-          SourceFile sourceFile;
-          if (data is List<int>) {
-            sourceFile = Utf8BytesSourceFile(uri, data);
-          } else if (data is String) {
-            sourceFile = StringSourceFile.fromUri(uri, data);
-          } else {
-            throw "Expected a 'String' or a 'List<int>' from the input "
-                "provider, but got: ${Error.safeToString(data)}.";
-          }
-          return sourceFile;
-        case InputKind.binary:
-          if (data is String) {
-            data = utf8.encode(data);
-          }
-          return Binary(uri, data);
-      }
-    });
-  }
-}
-
-/// Implementation of [CompilerDiagnostics] using a [DiagnosticHandler].
-class LegacyCompilerDiagnostics implements CompilerDiagnostics {
-  final DiagnosticHandler _handler;
-
-  LegacyCompilerDiagnostics(this._handler);
-
-  @override
-  void report(
-      var code, Uri uri, int begin, int end, String message, Diagnostic kind) {
-    _handler(uri, begin, end, message, kind);
-  }
-}
-
-/// Implementation of [CompilerOutput] using an optional
-/// [CompilerOutputProvider].
-// TODO(johnniwinther): Change Pub to use the new interface and remove this.
-class LegacyCompilerOutput implements CompilerOutput {
-  final CompilerOutputProvider _outputProvider;
-
-  LegacyCompilerOutput([this._outputProvider]);
-
-  @override
-  OutputSink createOutputSink(String name, String extension, OutputType type) {
-    if (_outputProvider != null) {
-      switch (type) {
-        case OutputType.dumpInfo:
-        case OutputType.deferredMap:
-          if (extension == '') {
-            // Needed to make Pub generate the same output name.
-            extension = 'deferred_map';
-          }
-          break;
-        default:
-      }
-      return LegacyOutputSink(_outputProvider(name, extension));
-    }
-    return NullSink.outputProvider(name, extension, type);
-  }
-
-  @override
-  BinaryOutputSink createBinarySink(Uri uri) {
-    throw UnsupportedError("LegacyCompilerOutput.createBinarySink");
-  }
-}
-
-class LegacyOutputSink implements OutputSink {
-  final EventSink<String> sink;
-
-  LegacyOutputSink(this.sink);
-
-  @override
-  void add(String event) => sink.add(event);
-
-  @override
-  void close() => sink.close();
-}
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index c2efa63..3f926b2 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -24,18 +24,20 @@
 }
 
 /// A [FeatureOption] is both a set of flags and an option. By default, creating
-/// a [FeatureOption] will create two flags, [--$flag] and [--no-$flag]. The
-/// default behavior for a [FeatureOption] in the [canary] set is to be
-/// disabled by default unless explicity enabled or [--canary] is passed.
-/// When the [FeatureOption] is moved to [staging], the behavior flips, and by
-/// default it is enabled unless explicitly disabled or [--no-shipping] is
-/// passed. The [isNegativeFlag] bool flips things around so while in [canary]
-/// the [FeatureOption] is enabled unless explicitly disabled, and while in
-/// [staging] it is disabled unless explicitly enabled.
+/// a [FeatureOption] will create two flags, `--$flag` and `--no-$flag`. The
+/// default behavior for a [FeatureOption] in the [FeatureOptions.canary] set is
+/// to be disabled by default unless explicity enabled or `--canary` is passed.
+/// When the [FeatureOption] is moved to [FeatureOptions.shipping], the behavior
+/// flips, and by default it is enabled unless explicitly disabled or
+/// `--no-shipping` is passed. The [FeatureOption.isNegativeFlag] bool flips
+/// things around so while in canary the [FeatureOption] is enabled unless
+/// explicitly disabled, and while in [FeatureOptions.shipping] it is disabled
+/// unless explicitly enabled.
 ///
-/// Finally, mature features can be moved to [shipped], at which point we ignore
-/// the flag, but throw if the value of the flag is unexpected(i.e. if a
-/// positive flag is disabled, or a negative flag is enabled).
+/// Finally, mature features can be moved to [FeatureOptions.shipped], at which
+/// point we ignore the flag, but throw if the value of the flag is
+/// unexpected(i.e. if a positive flag is disabled, or a negative flag is
+/// enabled).
 class FeatureOption {
   final String flag;
   final bool isNegativeFlag;
@@ -82,11 +84,11 @@
   /// [FeatureOption]s which are shipped and cannot be toggled.
   late final List<FeatureOption> shipped = [
     newHolders,
+    legacyJavaScript,
   ];
 
   /// [FeatureOption]s which default to enabled.
   late final List<FeatureOption> shipping = [
-    legacyJavaScript,
     useContentSecurityPolicy,
   ];
 
@@ -826,7 +828,7 @@
       return true;
     }
     if (shownPackageWarnings != null) {
-      return uri.scheme == 'package' &&
+      return uri.isScheme('package') &&
           shownPackageWarnings!.contains(uri.pathSegments.first);
     }
     return false;
@@ -948,7 +950,7 @@
     }
     if (enableFeature && feature.isNegativeFlag) {
       throw ArgumentError(
-          "$disableFeatureFlag has already shipped and cannot be enabled.");
+          "$enableFeatureFlag has been removed and cannot be enabled.");
     }
     if (disableFeature && !feature.isNegativeFlag) {
       throw ArgumentError(
diff --git a/pkg/compiler/lib/src/resolution/registry.dart b/pkg/compiler/lib/src/resolution/registry.dart
index 9435c0b..0d4480f 100644
--- a/pkg/compiler/lib/src/resolution/registry.dart
+++ b/pkg/compiler/lib/src/resolution/registry.dart
@@ -8,6 +8,7 @@
 import '../constants/values.dart';
 import '../elements/entities.dart' show ClassEntity, MemberEntity;
 import '../elements/types.dart';
+import '../native/behavior.dart' show NativeBehavior;
 import '../universe/feature.dart';
 import '../universe/world_impact.dart' show WorldImpact, WorldImpactBuilderImpl;
 import '../util/enumset.dart' show EnumSet;
@@ -24,7 +25,7 @@
   Setlet<ListLiteralUse> _listLiterals;
   Setlet<String> _constSymbolNames;
   Setlet<ConstantValue> _constantLiterals;
-  Setlet<dynamic> _nativeData;
+  Setlet<NativeBehavior> _nativeData;
   Setlet<ClassEntity> _seenClasses;
   Set<RuntimeTypeUse> _runtimeTypeUses;
   Set<GenericInstantiation> _genericInstantiations;
@@ -98,14 +99,14 @@
   @override
   Iterable<ConstantValue> get constantLiterals => _constantLiterals ?? const [];
 
-  void registerNativeData(dynamic nativeData) {
+  void registerNativeData(NativeBehavior nativeData) {
     assert(nativeData != null);
     _nativeData ??= Setlet();
     _nativeData.add(nativeData);
   }
 
   @override
-  Iterable<dynamic> get nativeData => _nativeData ?? const [];
+  Iterable<NativeBehavior> get nativeData => _nativeData ?? const [];
 
   void registerSeenClass(ClassEntity seenClass) {
     _seenClasses ??= Setlet();
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index e63f515..15889be 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -7,8 +7,7 @@
 import 'package:kernel/binary/ast_from_binary.dart' as ir;
 import 'package:kernel/binary/ast_to_binary.dart' as ir;
 import 'package:front_end/src/fasta/util/bytes_sink.dart';
-import '../../compiler_new.dart' as api;
-import '../backend_strategy.dart';
+import '../../compiler.dart' as api;
 import '../commandline_options.dart' show Flags;
 import '../common/codegen.dart';
 import '../common/tasks.dart';
@@ -22,6 +21,7 @@
 import '../js_backend/inferred_data.dart';
 import '../js_model/js_world.dart';
 import '../js_model/element_map_impl.dart';
+import '../js_model/js_strategy.dart';
 import '../js_model/locals.dart';
 import '../options.dart';
 import '../util/sink_adapter.dart';
@@ -287,7 +287,7 @@
     });
   }
 
-  void serializeCodegen(BackendStrategy backendStrategy,
+  void serializeCodegen(JsBackendStrategy backendStrategy,
       CodegenResults codegenResults, DataSourceIndices indices) {
     GlobalTypeInferenceResults globalTypeInferenceResults =
         codegenResults.globalTypeInferenceResults;
@@ -321,7 +321,7 @@
   }
 
   Future<CodegenResults> deserializeCodegen(
-      BackendStrategy backendStrategy,
+      JsBackendStrategy backendStrategy,
       GlobalTypeInferenceResults globalTypeInferenceResults,
       CodegenInputs codegenInputs,
       DataSourceIndices indices) async {
@@ -346,7 +346,7 @@
   }
 
   void _deserializeCodegenInput(
-      BackendStrategy backendStrategy,
+      JsBackendStrategy backendStrategy,
       JClosedWorld closedWorld,
       Uri uri,
       api.Input<List<int>> dataInput,
diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart
index 359fead..4ab19c1 100644
--- a/pkg/compiler/lib/src/source_file_provider.dart
+++ b/pkg/compiler/lib/src/source_file_provider.dart
@@ -11,8 +11,8 @@
 
 import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
 
-import '../compiler_new.dart' as api;
-import '../compiler_new.dart';
+import '../compiler.dart' as api;
+import '../compiler.dart';
 import 'colors.dart' as colors;
 import 'dart2js.dart' show AbortLeg;
 import 'io/source_file.dart';
@@ -40,9 +40,9 @@
     }
     if (input != null) return Future.value(input);
 
-    if (resourceUri.scheme == 'file') {
+    if (resourceUri.isScheme('file')) {
       return _readFromFile(resourceUri, inputKind);
-    } else if (resourceUri.scheme == 'http' || resourceUri.scheme == 'https') {
+    } else if (resourceUri.isScheme('http') || resourceUri.isScheme('https')) {
       return _readFromHttp(resourceUri, inputKind);
     } else {
       throw ArgumentError("Unknown scheme in uri '$resourceUri'");
@@ -50,7 +50,7 @@
   }
 
   api.Input _readFromFileSync(Uri resourceUri, api.InputKind inputKind) {
-    assert(resourceUri.scheme == 'file');
+    assert(resourceUri.isScheme('file'));
     List<int> source;
     try {
       source = readAll(resourceUri.toFilePath(),
@@ -99,7 +99,7 @@
 
   Future<api.Input<List<int>>> _readFromHttp(
       Uri resourceUri, api.InputKind inputKind) {
-    assert(resourceUri.scheme == 'http');
+    assert(resourceUri.isScheme('http'));
     HttpClient client = HttpClient();
     return client
         .getUrl(resourceUri)
@@ -136,12 +136,6 @@
     });
   }
 
-  // TODO(johnniwinther): Remove this when no longer needed for the old compiler
-  // API.
-  Future /* <List<int> | String> */ call(Uri resourceUri) {
-    throw "unimplemented";
-  }
-
   relativizeUri(Uri uri) => fe.relativizeUri(cwd, uri, isWindows);
 
   SourceFile<List<int>> getUtf8SourceFile(Uri resourceUri) {
@@ -171,12 +165,6 @@
 }
 
 class CompilerSourceFileProvider extends SourceFileProvider {
-  // TODO(johnniwinther): Remove this when no longer needed for the old compiler
-  // API.
-  @override
-  Future<List<int>> call(Uri resourceUri) =>
-      readFromUri(resourceUri).then((input) => input.data);
-
   @override
   Future<api.Input<List<int>>> readFromUri(Uri uri,
           {InputKind inputKind = InputKind.UTF8}) =>
@@ -252,7 +240,7 @@
     if (kind != api.Diagnostic.INFO) {
       lastKind = kind;
     }
-    var color;
+    String Function(String) color;
     if (kind == api.Diagnostic.ERROR) {
       color = colors.red;
     } else if (kind == api.Diagnostic.WARNING) {
@@ -279,7 +267,7 @@
       api.Input file = provider.getUtf8SourceFile(uri);
       if (file == null &&
           autoReadFileUri &&
-          (uri.scheme == 'file' || !uri.isAbsolute) &&
+          (uri.isScheme('file') || !uri.isAbsolute) &&
           uri.path.endsWith('.dart')) {
         if (!uri.isAbsolute) {
           uri = provider.cwd.resolveUri(uri);
@@ -302,12 +290,6 @@
       throw AbortLeg(message);
     }
   }
-
-  // TODO(johnniwinther): Remove this when no longer needed for the old compiler
-  // API.
-  void call(Uri uri, int begin, int end, String message, api.Diagnostic kind) {
-    return report(null, uri, begin, end, message, kind);
-  }
 }
 
 typedef MessageCallback = void Function(String message);
@@ -379,7 +361,7 @@
     Uri uri = createUri(name, extension, type);
     bool isPrimaryOutput = uri == out;
 
-    if (uri.scheme != 'file') {
+    if (!uri.isScheme('file')) {
       onFailure('Unhandled scheme ${uri.scheme} in $uri.');
     }
 
@@ -428,7 +410,7 @@
 
     allOutputFiles.add(fe.relativizeUri(Uri.base, uri, Platform.isWindows));
 
-    if (uri.scheme != 'file') {
+    if (!uri.isScheme('file')) {
       onFailure('Unhandled scheme ${uri.scheme} in $uri.');
     }
 
@@ -608,7 +590,7 @@
   Future<api.Input<List<int>>> readFromUri(Uri uri,
       {InputKind inputKind = InputKind.UTF8}) async {
     var resolvedUri = uri;
-    if (resolvedUri.scheme == markerScheme) {
+    if (resolvedUri.isScheme(markerScheme)) {
       var path = resolvedUri.path;
       if (path.startsWith('/')) path = path.substring(1);
       for (var dir in roots) {
@@ -634,7 +616,7 @@
 
   @override
   api.Input autoReadFromFile(Uri resourceUri) {
-    if (resourceUri.scheme == markerScheme) {
+    if (resourceUri.isScheme(markerScheme)) {
       var path = resourceUri.path;
       for (var dir in roots) {
         var file = dir.resolve(path);
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 56dc39ec..8109b5f 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -8,8 +8,8 @@
 import '../closure.dart';
 import '../common.dart';
 import '../common/codegen.dart' show CodegenRegistry;
+import '../common/elements.dart';
 import '../common/names.dart';
-import '../common_elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
 import '../deferred_load/output_unit.dart';
@@ -368,8 +368,6 @@
         return options.enableVariance;
       case 'LEGACY':
         return options.useLegacySubtyping;
-      case 'LEGACY_JAVASCRIPT':
-        return options.features.legacyJavaScript.isEnabled;
       case 'PRINT_LEGACY_STARS':
         return options.printLegacyStars;
       default:
@@ -2391,15 +2389,34 @@
 
   @override
   void visitAsExpression(ir.AsExpression node) {
-    ir.Expression operand = node.operand;
+    // Recognize these special cases, where expression e has static type `T?`:
+    //
+    //     e as T
+    //     (e as dynamic) as T
+    //
+    // These patterns can only fail if `e` results in a `null` value.  The
+    // second pattern occurs when `e as dynamic` is used get an implicit
+    // downcast in order to make use of the different policies for explicit and
+    // implicit downcasts.
+    //
+    // The pattern match is syntactic which ensures the type bindings are
+    // consistent, i.e. from the same instance of a type variable scope.
+    ir.Expression operand = _skipCastsToDynamic(node.operand);
     operand.accept(this);
 
+    bool isNullRemovalPattern = false;
+
     StaticType operandType = _getStaticType(operand);
     DartType type = _elementMap.getDartType(node.type);
-    if (!node.isCovarianceCheck &&
-        _elementMap.types.isSubtype(operandType.type, type)) {
-      // Skip unneeded casts.
-      return;
+    if (!node.isCovarianceCheck) {
+      if (_elementMap.types.isSubtype(operandType.type, type)) {
+        // Skip unneeded casts.
+        return;
+      }
+      if (_elementMap.types
+          .isSubtype(operandType.type, _elementMap.types.nullableType(type))) {
+        isNullRemovalPattern = true;
+      }
     }
 
     SourceInformation sourceInformation =
@@ -2420,7 +2437,12 @@
           .getExplicitCastCheckPolicy(_currentFrame.member);
     }
 
-    if (policy.isEmitted) {
+    if (!policy.isEmitted) {
+      stack.add(expressionInstruction);
+      return;
+    }
+
+    void generateCheck() {
       HInstruction converted = _typeBuilder.buildAsCheck(
           expressionInstruction, localsHandler.substInContext(type),
           isTypeError: node.isTypeError, sourceInformation: sourceInformation);
@@ -2428,9 +2450,34 @@
         add(converted);
       }
       stack.add(converted);
-    } else {
-      stack.add(expressionInstruction);
     }
+
+    if (isNullRemovalPattern) {
+      // Generate a conditional to test only `null` values:
+      //
+      //     temp = e;
+      //     temp == null ? temp as T : temp
+      SsaBranchBuilder(this).handleConditional(
+          () {
+            push(HIdentity(
+                expressionInstruction,
+                graph.addConstantNull(closedWorld),
+                _abstractValueDomain.boolType));
+          },
+          generateCheck,
+          () {
+            stack.add(expressionInstruction);
+          });
+    } else {
+      generateCheck();
+    }
+  }
+
+  static ir.Expression _skipCastsToDynamic(ir.Expression node) {
+    if (node is ir.AsExpression && node.type is ir.DynamicType) {
+      return _skipCastsToDynamic(node.operand);
+    }
+    return node;
   }
 
   @override
@@ -3650,10 +3697,18 @@
 
   /// Fills [typeArguments] with the type arguments needed for [selector] and
   /// returns the selector corresponding to the passed type arguments.
+  ///
+  /// If [isImplicitCall] is `true`, the target of the invocation can be either
+  /// the target of the [selector] or of the corresponding `.call` selector. In
+  /// this case we need to check both selectors to see if we need to pass type
+  /// arguments. This occurs for field/getter invocations.
   Selector _fillDynamicTypeArguments(
-      Selector selector, ir.Arguments arguments, List<DartType> typeArguments) {
+      Selector selector, ir.Arguments arguments, List<DartType> typeArguments,
+      {bool isImplicitCall = false}) {
     if (selector.typeArgumentCount > 0) {
-      if (_rtiNeed.selectorNeedsTypeArguments(selector)) {
+      if (_rtiNeed.selectorNeedsTypeArguments(selector) ||
+          (isImplicitCall &&
+              _rtiNeed.selectorNeedsTypeArguments(selector.toCallSelector()))) {
         typeArguments.addAll(arguments.types.map(_elementMap.getDartType));
       } else {
         return selector.toNonGeneric();
@@ -5169,12 +5224,14 @@
   }
 
   void _handleMethodInvocation(
-      ir.Expression node, ir.Expression receiver, ir.Arguments arguments) {
+      ir.Expression node, ir.Expression receiver, ir.Arguments arguments,
+      {bool isImplicitCall = false}) {
     receiver.accept(this);
     HInstruction receiverInstruction = pop();
     Selector selector = _elementMap.getSelector(node);
     List<DartType> typeArguments = [];
-    selector = _fillDynamicTypeArguments(selector, arguments, typeArguments);
+    selector = _fillDynamicTypeArguments(selector, arguments, typeArguments,
+        isImplicitCall: isImplicitCall);
     _pushDynamicInvocation(
         node,
         _getStaticType(receiver),
@@ -5195,7 +5252,8 @@
 
   @override
   void visitInstanceGetterInvocation(ir.InstanceGetterInvocation node) {
-    _handleMethodInvocation(node, node.receiver, node.arguments);
+    _handleMethodInvocation(node, node.receiver, node.arguments,
+        isImplicitCall: true);
   }
 
   @override
@@ -6298,7 +6356,7 @@
     if (element == _commonElements.traceHelper) return;
     // TODO(sigmund): create a better uuid for elements.
     HConstant idConstant = graph.addConstantInt(element.hashCode, closedWorld);
-    n(e) => e == null ? '' : e.name;
+    String n(Entity e) => e == null ? '' : e.name;
     String name = "${n(element.library)}:${n(element.enclosingClass)}."
         "${n(element)}";
     HConstant nameConstant = graph.addConstantString(name, closedWorld);
@@ -6388,7 +6446,7 @@
     kernelBuilder.open(startTryBlock);
   }
 
-  void _addExitTrySuccessor(successor) {
+  void _addExitTrySuccessor(HBasicBlock successor) {
     if (successor == null) return;
     // Iterate over all blocks created inside this try/catch, and
     // attach successor information to blocks that end with
@@ -6402,7 +6460,7 @@
     }
   }
 
-  void _addOptionalSuccessor(block1, block2) {
+  void _addOptionalSuccessor(HBasicBlock block1, HBasicBlock block2) {
     if (block2 != null) block1.addSuccessor(block2);
   }
 
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 5e44fa5..d54ffe8 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -8,13 +8,13 @@
 import 'package:front_end/src/api_unstable/dart2js.dart' show Link;
 
 import '../common.dart';
+import '../common/elements.dart' show JCommonElements;
 import '../common/metrics.dart';
 import '../common/names.dart';
 import '../common/codegen.dart' show CodegenRegistry;
 import '../common/tasks.dart' show Measurer, CompilerTask;
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
-import '../common_elements.dart' show JCommonElements;
 import '../elements/entities.dart';
 import '../elements/jumps.dart';
 import '../elements/types.dart';
diff --git a/pkg/compiler/lib/src/ssa/codegen_helpers.dart b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
index 0d27a96..b1a37fb 100644
--- a/pkg/compiler/lib/src/ssa/codegen_helpers.dart
+++ b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
@@ -1024,6 +1024,9 @@
 
     if (!identical(end.predecessors[1], elseBlock)) return;
     HPhi phi = end.phis.first;
+    // This useless phi should have been removed.  Do not generate-at-use if
+    // there is no use. See #48383.
+    if (phi.usedBy.isEmpty) return;
     HInstruction thenInput = phi.inputs[0];
     HInstruction elseInput = phi.inputs[1];
     if (thenInput.isJsStatement() || elseInput.isJsStatement()) return;
diff --git a/pkg/compiler/lib/src/ssa/interceptor_finalizer.dart b/pkg/compiler/lib/src/ssa/interceptor_finalizer.dart
index 2c20593..b8dcd74 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_finalizer.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_finalizer.dart
@@ -49,6 +49,9 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) => true;
+
+  @override
   visitBasicBlock(HBasicBlock node) {
     HInstruction instruction = node.first;
     while (instruction != null) {
diff --git a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
index 4def583..c474639 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_simplifier.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.
 
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../inferrer/abstract_value_domain.dart';
@@ -47,6 +47,9 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) => true;
+
+  @override
   void visitBasicBlock(HBasicBlock node) {
     currentBlock = node;
 
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index ab0b1a6..f514f5f 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.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.
 
-import '../common_elements.dart' show JCommonElements;
+import '../common/elements.dart' show JCommonElements;
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
 import '../elements/entities.dart';
@@ -275,6 +275,11 @@
   const IndexSpecializer();
 
   @override
+  constant_system.BinaryOperation operation() {
+    return constant_system.index;
+  }
+
+  @override
   HInstruction tryConvertToBuiltin(
       HInvokeDynamic instruction,
       HGraph graph,
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 7bd3dde..2026528 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -6,7 +6,7 @@
 
 import '../closure.dart';
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
 import '../elements/entities.dart';
@@ -1096,6 +1096,8 @@
   static const int TYPE_BIND_TYPECODE = 57;
 
   static const int IS_LATE_SENTINEL_TYPECODE = 58;
+  static const int STRING_CONCAT_TYPECODE = 59;
+  static const int STRINGIFY_TYPECODE = 60;
 
   HInstruction(this.inputs, this.instructionType) {
     assert(inputs.every((e) => e != null), "inputs: $inputs");
@@ -3742,10 +3744,7 @@
 class HStringConcat extends HInstruction {
   HStringConcat(HInstruction left, HInstruction right, AbstractValue type)
       : super([left, right], type) {
-    // TODO(sra): Until Issue 9293 is fixed, this false dependency keeps the
-    // concats bunched with stringified inputs for much better looking code with
-    // fewer temps.
-    sideEffects.setDependsOnSomething();
+    setUseGvn();
   }
 
   HInstruction get left => inputs[0];
@@ -3755,21 +3754,46 @@
   accept(HVisitor visitor) => visitor.visitStringConcat(this);
   @override
   toString() => "string concat";
+
+  @override
+  int typeCode() => HInstruction.STRING_CONCAT_TYPECODE;
+  @override
+  bool typeEquals(HInstruction other) => other is HStringConcat;
+  @override
+  bool dataEquals(HStringConcat other) => true;
 }
 
 /// The part of string interpolation which converts and interpolated expression
 /// into a String value.
 class HStringify extends HInstruction {
+  bool _isPure = false; // Some special cases are pure, e.g. int argument.
   HStringify(HInstruction input, AbstractValue resultType)
       : super([input], resultType) {
     sideEffects.setAllSideEffects();
     sideEffects.setDependsOnSomething();
   }
 
+  void setPure() {
+    sideEffects.clearAllDependencies();
+    sideEffects.clearAllSideEffects();
+    _isPure = true;
+    setUseGvn();
+  }
+
+  @override
+  bool canThrow(AbstractValueDomain domain) => !_isPure;
+
   @override
   accept(HVisitor visitor) => visitor.visitStringify(this);
   @override
   toString() => "stringify";
+
+  @override
+  int typeCode() => HInstruction.STRINGIFY_TYPECODE;
+  @override
+  bool typeEquals(HInstruction other) => other is HStringify;
+  @override
+  bool dataEquals(HStringify other) => this._isPure == other._isPure;
 }
 
 /// Non-block-based (aka. traditional) loop information.
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 0475798..5e178c2 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -4,11 +4,11 @@
 
 import '../common.dart';
 import '../common/codegen.dart' show CodegenRegistry;
+import '../common/elements.dart' show JCommonElements;
 import '../common/names.dart' show Selectors;
 import '../common/tasks.dart' show Measurer, CompilerTask;
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
-import '../common_elements.dart' show JCommonElements;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../inferrer/abstract_value_domain.dart';
@@ -39,12 +39,14 @@
 import 'nodes.dart';
 import 'types.dart';
 import 'types_propagation.dart';
+import 'validate.dart' show NoUnusedPhiValidator;
 import 'value_range_analyzer.dart';
 import 'value_set.dart';
 
 abstract class OptimizationPhase {
   String get name;
   void visitGraph(HGraph graph);
+  bool validPostcondition(HGraph graph);
 }
 
 class SsaOptimizerTask extends CompilerTask {
@@ -70,6 +72,8 @@
       measureSubtask(phase.name, () => phase.visitGraph(graph));
       codegen.tracer.traceGraph(phase.name, graph);
       assert(graph.isValid(), 'Graph not valid after ${phase.name}');
+      assert(phase.validPostcondition(graph),
+          'Graph does not satify phase postcondition after ${phase.name}');
     }
 
     SsaCodeMotion codeMotion;
@@ -244,6 +248,9 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) => true;
+
+  @override
   visitBasicBlock(HBasicBlock block) {
     simplifyPhis(block);
     HInstruction instruction = block.first;
@@ -1486,15 +1493,15 @@
 
   @override
   HInstruction visitIndex(HIndex node) {
-    if (node.receiver.isConstantList() && node.index.isConstantInteger()) {
-      HConstant instruction = node.receiver;
-      ListConstantValue list = instruction.constant;
-      List<ConstantValue> entries = list.entries;
-      HConstant indexInstruction = node.index;
-      IntConstantValue indexConstant = indexInstruction.constant;
-      int index = indexConstant.intValue.toInt();
-      if (index >= 0 && index < entries.length) {
-        return _graph.addConstant(entries[index], _closedWorld);
+    HInstruction receiver = node.receiver;
+    if (receiver is HConstant) {
+      HInstruction index = node.index;
+      if (index is HConstant) {
+        ConstantValue foldedValue =
+            constant_system.index.fold(receiver.constant, index.constant);
+        if (foldedValue != null) {
+          return _graph.addConstant(foldedValue, _closedWorld);
+        }
       }
     }
     return node;
@@ -1918,6 +1925,13 @@
       return null;
     }
 
+    // For primitives we know the stringifier is effect-free and never throws.
+    if (input.isNumberOrNull(_abstractValueDomain).isDefinitelyTrue ||
+        input.isStringOrNull(_abstractValueDomain).isDefinitelyTrue ||
+        input.isBooleanOrNull(_abstractValueDomain).isDefinitelyTrue) {
+      node.setPure();
+    }
+
     return tryConstant() ?? tryToString() ?? node;
   }
 
@@ -2511,6 +2525,11 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) {
+    return NoUnusedPhiValidator.containsNoUnusedPhis(graph);
+  }
+
+  @override
   void visitBasicBlock(HBasicBlock block) {
     bool isDeadBlock = analyzer.isDeadBlock(block);
     block.isLive = !isDeadBlock;
@@ -2534,6 +2553,11 @@
   }
 
   void simplifyPhi(HPhi phi) {
+    // Remove an unused HPhi so that the inputs can become potentially dead.
+    if (phi.usedBy.isEmpty) {
+      phi.block.removePhi(phi);
+      return;
+    }
     // If the phi is of the form `phi(x, HTypeKnown(x))`, it does not strengthen
     // `x`.  We can replace the phi with `x` to potentially make the HTypeKnown
     // refinement node dead and potentially make a HIf control no HPhis.
@@ -2815,27 +2839,33 @@
       }
     }
 
-    // Remove phis that are not live.
-    // Traverse in reverse order to remove phis with no uses before the
-    // phis that they might use.
-    // NOTICE: Doesn't handle circular references, but we don't currently
-    // create any.
-    List<HBasicBlock> blocks = graph.blocks;
-    for (int i = blocks.length - 1; i >= 0; i--) {
-      HBasicBlock block = blocks[i];
-      HPhi current = block.phis.first;
-      HPhi next = null;
-      while (current != null) {
-        next = current.next;
-        if (!livePhis.contains(current)
-            // TODO(ahe): Not sure the following is correct.
-            &&
-            current.usedBy.isEmpty) {
-          block.removePhi(current);
-        }
-        current = next;
-      }
+    // Collect dead phis.
+    List<HPhi> deadPhis = [];
+    for (final block in graph.blocks) {
+      block.forEachPhi((phi) {
+        if (!livePhis.contains(phi)) deadPhis.add(phi);
+      });
     }
+
+    // Two-phase removal, phase 1: unlink all the input nodes.
+    for (final phi in deadPhis) {
+      for (final input in phi.inputs) {
+        input.removeUser(phi);
+      }
+      phi.inputs.clear();
+    }
+
+    // Two-phase removal, phase 2: remove the now-disconnected phis.
+    for (final phi in deadPhis) {
+      assert(phi.inputs.isEmpty);
+      assert(phi.usedBy.isEmpty);
+      phi.block.removePhi(phi);
+    }
+  }
+
+  @override
+  bool validPostcondition(HGraph graph) {
+    return NoUnusedPhiValidator.containsNoUnusedPhis(graph);
   }
 }
 
@@ -2891,6 +2921,9 @@
       }
     }
   }
+
+  @override
+  bool validPostcondition(HGraph graph) => true;
 }
 
 class GvnWorkItem {
@@ -2921,6 +2954,9 @@
     } while (!workQueue.isEmpty);
   }
 
+  @override
+  bool validPostcondition(HGraph graph) => true;
+
   void moveLoopInvariantCode(HGraph graph) {
     for (int i = graph.blocks.length - 1; i >= 0; i--) {
       HBasicBlock block = graph.blocks[i];
@@ -3146,6 +3182,9 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) => true;
+
+  @override
   void visitBasicBlock(HBasicBlock block) {
     List<HBasicBlock> successors = block.successors;
 
@@ -3249,6 +3288,9 @@
     visitDominatorTree(graph);
   }
 
+  @override
+  bool validPostcondition(HGraph graph) => true;
+
   // Update users of [input] that are dominated by [:dominator.first:]
   // to use [TypeKnown] of [input] instead. As the type information depends
   // on the control flow, we mark the inserted [HTypeKnown] nodes as
@@ -3432,6 +3474,9 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) => true;
+
+  @override
   void visitBasicBlock(HBasicBlock block) {
     final predecessors = block.predecessors;
     final indegree = predecessors.length;
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart
index 39c3355..40243ad 100644
--- a/pkg/compiler/lib/src/ssa/ssa.dart
+++ b/pkg/compiler/lib/src/ssa/ssa.dart
@@ -4,10 +4,9 @@
 
 library ssa;
 
-import '../backend_strategy.dart';
 import '../common.dart';
-import '../common_elements.dart' show CommonElements, JElementEnvironment;
 import '../common/codegen.dart' show CodegenResult, CodegenRegistry;
+import '../common/elements.dart' show CommonElements, JElementEnvironment;
 import '../common/tasks.dart' show CompilerTask, Measurer;
 import '../elements/entities.dart';
 import '../elements/types.dart';
@@ -22,6 +21,7 @@
 import '../js_emitter/startup_emitter/emitter.dart' show ModularEmitterImpl;
 import '../js_model/elements.dart';
 import '../js_model/type_recipe.dart' show TypeExpressionRecipe;
+import '../js_model/js_strategy.dart';
 import '../options.dart';
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/use.dart' show StaticUse;
@@ -44,7 +44,7 @@
   SsaFunctionCompiler(
       this._options,
       this._reporter,
-      BackendStrategy backendStrategy,
+      JsBackendStrategy backendStrategy,
       Measurer measurer,
       this.sourceInformationStrategy)
       : generator =
@@ -220,7 +220,7 @@
 
     registry.registerStaticUse(StaticUse.staticInvoke(
         completerFactory,
-        const CallStructure.unnamed(0, 1),
+        CallStructure.unnamed(0, 1),
         [elementEnvironment.getFunctionAsyncOrSyncStarElementType(element)]));
 
     return rewriter;
@@ -255,7 +255,7 @@
 
     registry.registerStaticUse(StaticUse.staticInvoke(
         commonElements.syncStarIterableFactory,
-        const CallStructure.unnamed(1, 1),
+        CallStructure.unnamed(1, 1),
         [elementEnvironment.getFunctionAsyncOrSyncStarElementType(element)]));
 
     return rewriter;
@@ -293,7 +293,7 @@
 
     registry.registerStaticUse(StaticUse.staticInvoke(
         commonElements.asyncStarStreamControllerFactory,
-        const CallStructure.unnamed(1, 1),
+        CallStructure.unnamed(1, 1),
         [elementEnvironment.getFunctionAsyncOrSyncStarElementType(element)]));
 
     return rewriter;
@@ -319,7 +319,7 @@
 }
 
 class SsaBuilderTask extends CompilerTask {
-  final BackendStrategy _backendStrategy;
+  final JsBackendStrategy _backendStrategy;
   final SourceInformationStrategy _sourceInformationFactory;
   SsaBuilder _builder;
 
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index c8a843f..231e4a3 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -4,7 +4,7 @@
 
 library ssa.tracer;
 
-import '../../compiler_new.dart' show OutputSink;
+import '../../compiler.dart' show OutputSink;
 import '../diagnostics/invariant.dart' show DEBUG_MODE;
 import '../inferrer/abstract_value_domain.dart';
 import '../js_backend/namer.dart' show suffixForGetInterceptor;
diff --git a/pkg/compiler/lib/src/ssa/types.dart b/pkg/compiler/lib/src/ssa/types.dart
index 0d1a3b8..64e4c28 100644
--- a/pkg/compiler/lib/src/ssa/types.dart
+++ b/pkg/compiler/lib/src/ssa/types.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.
 
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../inferrer/abstract_value_domain.dart';
@@ -46,7 +46,7 @@
 
     // [type] is either an instance of [DartType] or special objects
     // like [native.SpecialType.JsObject].
-    AbstractValue fromNativeType(dynamic type) {
+    AbstractValue fromNativeType(Object type) {
       if (type == SpecialType.JsObject) {
         return abstractValueDomain
             .createNonNullExact(commonElements.objectClass);
@@ -56,8 +56,10 @@
         return abstractValueDomain.dynamicType;
       } else if (type == commonElements.nullType) {
         return abstractValueDomain.nullType;
-      } else {
+      } else if (type is InterfaceType) {
         return abstractValueDomain.createNonNullSubtype(type.element);
+      } else {
+        throw 'Unexpected type $type';
       }
     }
 
diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart
index bd8c259..5a88ac3 100644
--- a/pkg/compiler/lib/src/ssa/types_propagation.dart
+++ b/pkg/compiler/lib/src/ssa/types_propagation.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.
 
-import '../common_elements.dart' show CommonElements;
+import '../common/elements.dart' show CommonElements;
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../inferrer/abstract_value_domain.dart';
@@ -71,6 +71,9 @@
   }
 
   @override
+  bool validPostcondition(HGraph graph) => true;
+
+  @override
   visitBasicBlock(HBasicBlock block) {
     if (block.isLoopHeader()) {
       block.forEachPhi((HPhi phi) {
diff --git a/pkg/compiler/lib/src/ssa/validate.dart b/pkg/compiler/lib/src/ssa/validate.dart
index 251368b..04c7f00 100644
--- a/pkg/compiler/lib/src/ssa/validate.dart
+++ b/pkg/compiler/lib/src/ssa/validate.dart
@@ -220,3 +220,28 @@
     }
   }
 }
+
+/// Validate that the graph contains no unused phi nodes.
+///
+///     assert(NoUnusedPhiValidator.containsNoUnusedPhis(graph));
+class NoUnusedPhiValidator extends HGraphVisitor {
+  bool isValid = true;
+
+  static bool containsNoUnusedPhis(HGraph graph) {
+    final validator = NoUnusedPhiValidator();
+    validator.visitDominatorTree(graph);
+    return validator.isValid;
+  }
+
+  @override
+  void visitBasicBlock(HBasicBlock block) {
+    block.forEachPhi(visitPhi);
+  }
+
+  void visitPhi(HPhi phi) {
+    if (phi.usedBy.isEmpty) {
+      print('Unused $phi in B${phi.block.id}');
+      isValid = false;
+    }
+  }
+}
diff --git a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
index 2b20fa4..d84928d 100644
--- a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
+++ b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
@@ -665,6 +665,9 @@
     optimizer.ranges = ranges;
   }
 
+  @override
+  bool validPostcondition(HGraph graph) => true;
+
   void removeRangeConversion() {
     conversions.forEach((HRangeConversion instruction) {
       instruction.block.rewrite(instruction, instruction.inputs[0]);
diff --git a/pkg/compiler/lib/src/ssa/value_set.dart b/pkg/compiler/lib/src/ssa/value_set.dart
index 9382934..db348c4 100644
--- a/pkg/compiler/lib/src/ssa/value_set.dart
+++ b/pkg/compiler/lib/src/ssa/value_set.dart
@@ -85,26 +85,33 @@
   }
 
   List<HInstruction> toList() {
-    return copyTo(<HInstruction>[], table, collisions);
+    List<HInstruction> result = [];
+    // Copy elements from the hash table.
+    for (final instruction in table) {
+      if (instruction != null) result.add(instruction);
+    }
+    // Copy elements from the collision list.
+    for (var current = collisions; current != null; current = current.next) {
+      result.add(current.value);
+    }
+    return result;
   }
 
   // Copy the instructions in value set defined by [table] and
   // [collisions] into [other] and returns [other]. The copy is done
   // by iterating through the hash table and the collisions list and
   // calling [:other.add:].
-  static copyTo(var other, List<HInstruction> table, ValueSetNode collisions) {
+  static ValueSet copyTo(
+      ValueSet other, List<HInstruction> table, ValueSetNode collisions) {
     // Copy elements from the hash table.
-    for (int index = 0, length = table.length; index < length; index++) {
-      HInstruction instruction = table[index];
+    for (final instruction in table) {
       if (instruction != null) other.add(instruction);
     }
     // Copy elements from the collision list.
-    ValueSetNode current = collisions;
-    while (current != null) {
+    for (var current = collisions; current != null; current = current.next) {
       // TODO(kasperl): Maybe find a way of reusing the hash code
       // rather than recomputing it every time.
       other.add(current.value);
-      current = current.next;
     }
     return other;
   }
diff --git a/pkg/compiler/lib/src/ssa/variable_allocator.dart b/pkg/compiler/lib/src/ssa/variable_allocator.dart
index 2bf062d..6fa6dbd 100644
--- a/pkg/compiler/lib/src/ssa/variable_allocator.dart
+++ b/pkg/compiler/lib/src/ssa/variable_allocator.dart
@@ -586,7 +586,7 @@
 
   /// Returns whether [instruction] needs a name. Instructions that
   /// have no users or that are generated at use site do not need a name.
-  bool needsName(instruction) {
+  bool needsName(HInstruction instruction) {
     if (instruction is HThis) return false;
     if (instruction is HParameterValue) return true;
     if (instruction.usedBy.isEmpty) return false;
diff --git a/pkg/compiler/lib/src/tracer.dart b/pkg/compiler/lib/src/tracer.dart
index 26f4bb3d..4e03751 100644
--- a/pkg/compiler/lib/src/tracer.dart
+++ b/pkg/compiler/lib/src/tracer.dart
@@ -6,7 +6,7 @@
 
 import 'package:kernel/text/indentation.dart' show Indentation;
 
-import '../compiler_new.dart' as api;
+import '../compiler.dart' as api;
 import 'options.dart' show CompilerOptions;
 import 'ssa/nodes.dart' as ssa show HGraph;
 import 'ssa/ssa_tracer.dart' show HTracer;
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index 234a3a9..1dc8cdd 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -11,7 +11,12 @@
 import 'selector.dart' show Selector;
 
 /// The structure of the arguments at a call-site.
-// TODO(johnniwinther): Should these be cached?
+///
+/// A call-site passes some number of arguments: some positional arguments
+/// followed by some named arguments. There may also be type arguments.
+///
+/// A CallStructure is unmodifiable.
+
 // TODO(johnniwinther): Should isGetter/isSetter be part of the call structure
 // instead of the selector?
 class CallStructure {
@@ -19,11 +24,23 @@
   /// data stream.
   static const String tag = 'call-structure';
 
-  static const CallStructure NO_ARGS = CallStructure.unnamed(0);
-  static const CallStructure ONE_ARG = CallStructure.unnamed(1);
-  static const CallStructure TWO_ARGS = CallStructure.unnamed(2);
-  static const CallStructure THREE_ARGS = CallStructure.unnamed(3);
-  static const CallStructure FOUR_ARGS = CallStructure.unnamed(4);
+  static const CallStructure NO_ARGS = CallStructure._(0);
+  static const CallStructure ONE_ARG = CallStructure._(1);
+  static const CallStructure TWO_ARGS = CallStructure._(2);
+
+  static const List<List<CallStructure>> _common = [
+    [NO_ARGS, CallStructure._(0, 1), CallStructure._(0, 2)],
+    [ONE_ARG, CallStructure._(1, 1), CallStructure._(1, 2)],
+    [TWO_ARGS, CallStructure._(2, 1), CallStructure._(2, 2)],
+    [CallStructure._(3), CallStructure._(3, 1), CallStructure._(3, 2)],
+    [CallStructure._(4), CallStructure._(4, 1), CallStructure._(4, 2)],
+    [CallStructure._(5), CallStructure._(5, 1), CallStructure._(5, 2)],
+    [CallStructure._(6)],
+    [CallStructure._(7)],
+    [CallStructure._(8)],
+    [CallStructure._(9)],
+    [CallStructure._(10)],
+  ];
 
   /// The number of type arguments of the call.
   final int typeArgumentCount;
@@ -37,14 +54,31 @@
   /// The number of positional argument of the call.
   int get positionalArgumentCount => argumentCount;
 
-  const CallStructure.unnamed(this.argumentCount, [this.typeArgumentCount = 0]);
+  const CallStructure._(this.argumentCount, [this.typeArgumentCount = 0]);
+
+  factory CallStructure.unnamed(int argumentCount,
+      [int typeArgumentCount = 0]) {
+    // This simple canonicalization of common call structures greatly reduces
+    // the number of allocations of CallStructure objects.
+    if (argumentCount < _common.length) {
+      final row = _common[argumentCount];
+      if (typeArgumentCount < row.length) {
+        final result = row[typeArgumentCount];
+        assert(result.argumentCount == argumentCount &&
+            result.typeArgumentCount == typeArgumentCount);
+        return result;
+      }
+    }
+    return CallStructure._(argumentCount, typeArgumentCount);
+  }
 
   factory CallStructure(int argumentCount,
       [List<String> namedArguments, int typeArgumentCount = 0]) {
     if (namedArguments == null || namedArguments.isEmpty) {
       return CallStructure.unnamed(argumentCount, typeArgumentCount);
     }
-    return NamedCallStructure(argumentCount, namedArguments, typeArgumentCount);
+    return _NamedCallStructure(
+        argumentCount, namedArguments, typeArgumentCount, null);
   }
 
   /// Deserializes a [CallStructure] object from [source].
@@ -127,7 +161,7 @@
     return this.argumentCount == other.argumentCount &&
         this.namedArgumentCount == other.namedArgumentCount &&
         this.typeArgumentCount == other.typeArgumentCount &&
-        sameNames(this.namedArguments, other.namedArguments);
+        _sameNames(this.namedArguments, other.namedArguments);
   }
 
   // TODO(johnniwinther): Cache hash code?
@@ -193,7 +227,8 @@
     }
   }
 
-  static bool sameNames(List<String> first, List<String> second) {
+  static bool _sameNames(List<String> first, List<String> second) {
+    assert(first.length == second.length);
     for (int i = 0; i < first.length; i++) {
       if (first[i] != second[i]) return false;
     }
@@ -201,20 +236,19 @@
   }
 }
 
-/// Call structure with named arguments.
-class NamedCallStructure extends CallStructure {
+/// Call structure with named arguments. This is an implementation detail of the
+/// CallStructure interface.
+class _NamedCallStructure extends CallStructure {
   @override
   final List<String> namedArguments;
-  final List<String> _orderedNamedArguments;
 
-  NamedCallStructure(
-      int argumentCount, List<String> namedArguments, int typeArgumentCount)
-      : this._(argumentCount, namedArguments, typeArgumentCount, []);
+  /// The list of ordered named arguments is computed lazily. Initially `null`.
+  List<String> /*?*/ _orderedNamedArguments;
 
-  NamedCallStructure._(int argumentCount, this.namedArguments,
+  _NamedCallStructure(int argumentCount, this.namedArguments,
       int typeArgumentCount, this._orderedNamedArguments)
       : assert(namedArguments.isNotEmpty),
-        super.unnamed(argumentCount, typeArgumentCount);
+        super._(argumentCount, typeArgumentCount);
 
   @override
   bool get isNamed => true;
@@ -229,24 +263,29 @@
   int get positionalArgumentCount => argumentCount - namedArgumentCount;
 
   @override
-  bool get isNormalized => namedArguments == _orderedNamedArguments;
+  bool get isNormalized =>
+      identical(namedArguments, getOrderedNamedArguments());
 
   @override
-  CallStructure toNormalized() => NamedCallStructure._(
-      argumentCount,
-      getOrderedNamedArguments(),
-      typeArgumentCount,
-      getOrderedNamedArguments());
+  CallStructure toNormalized() => isNormalized
+      ? this
+      : _NamedCallStructure(argumentCount, getOrderedNamedArguments(),
+          typeArgumentCount, getOrderedNamedArguments());
 
   @override
   List<String> getOrderedNamedArguments() {
-    if (!_orderedNamedArguments.isEmpty) return _orderedNamedArguments;
+    return _orderedNamedArguments ??= _getOrderedNamedArguments();
+  }
 
-    _orderedNamedArguments.addAll(namedArguments);
-    _orderedNamedArguments.sort((String first, String second) {
-      return first.compareTo(second);
-    });
-    return _orderedNamedArguments;
+  List<String> _getOrderedNamedArguments() {
+    List<String> ordered = List.of(namedArguments, growable: false);
+    ordered.sort((String first, String second) => first.compareTo(second));
+    // Use the same List if [namedArguments] is already ordered to indicate this
+    // _NamedCallStructure is normalized.
+    if (CallStructure._sameNames(ordered, namedArguments)) {
+      return namedArguments;
+    }
+    return ordered;
   }
 
   @override
diff --git a/pkg/compiler/lib/src/universe/class_hierarchy.dart b/pkg/compiler/lib/src/universe/class_hierarchy.dart
index df7ee72..24cc4ce 100644
--- a/pkg/compiler/lib/src/universe/class_hierarchy.dart
+++ b/pkg/compiler/lib/src/universe/class_hierarchy.dart
@@ -3,9 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart' show InterfaceType;
+import '../kernel/element_map.dart' show KernelToElementMap;
 import '../serialization/serialization.dart';
 import 'class_set.dart';
 
@@ -574,9 +575,9 @@
   final Map<ClassEntity, Set<ClassEntity>> mixinUses = {};
 
   final CommonElements _commonElements;
-  final ClassQueries _classQueries;
+  final KernelToElementMap _elementMap;
 
-  ClassHierarchyBuilder(this._commonElements, this._classQueries);
+  ClassHierarchyBuilder(this._commonElements, this._elementMap);
 
   ClassHierarchy close() {
     assert(
@@ -589,18 +590,18 @@
   }
 
   void registerClass(ClassEntity cls) {
-    _ensureClassSet(_classQueries.getDeclaration(cls));
+    _ensureClassSet(cls);
   }
 
   ClassHierarchyNode _ensureClassHierarchyNode(ClassEntity cls) {
     return _classHierarchyNodes.putIfAbsent(cls, () {
       ClassHierarchyNode parentNode;
-      ClassEntity superclass = _classQueries.getSuperClass(cls);
+      ClassEntity superclass = _elementMap.getSuperClass(cls);
       if (superclass != null) {
         parentNode = _ensureClassHierarchyNode(superclass);
       }
       return ClassHierarchyNode(
-          parentNode, cls, _classQueries.getHierarchyDepth(cls));
+          parentNode, cls, _elementMap.getHierarchyDepth(cls));
     });
   }
 
@@ -609,14 +610,14 @@
       ClassHierarchyNode node = _ensureClassHierarchyNode(cls);
       ClassSet classSet = ClassSet(node);
 
-      for (InterfaceType type in _classQueries.getSupertypes(cls)) {
+      for (InterfaceType type in _elementMap.getSuperTypes(cls)) {
         // TODO(johnniwinther): Optimization: Avoid adding [cls] to
         // superclasses.
         ClassSet subtypeSet = _ensureClassSet(type.element);
         subtypeSet.addSubtype(node);
       }
 
-      ClassEntity appliedMixin = _classQueries.getAppliedMixin(cls);
+      ClassEntity appliedMixin = _elementMap.getAppliedMixin(cls);
       while (appliedMixin != null) {
         // TODO(johnniwinther): Use the data stored in [ClassSet].
         registerMixinUse(cls, appliedMixin);
@@ -630,7 +631,7 @@
         //    class C = Object with B;
         //
         // we need to register that C not only mixes in B but also A.
-        appliedMixin = _classQueries.getAppliedMixin(appliedMixin);
+        appliedMixin = _elementMap.getAppliedMixin(appliedMixin);
       }
       return classSet;
     });
@@ -641,7 +642,7 @@
     // subtype set.
     ClassEntity cls = node.cls;
     if (cls != _commonElements.functionClass &&
-        _classQueries.implementsFunction(cls)) {
+        _elementMap.implementsFunction(cls)) {
       ClassSet subtypeSet = _ensureClassSet(_commonElements.functionClass);
       subtypeSet.addSubtype(node);
     }
@@ -912,32 +913,6 @@
   }
 }
 
-abstract class ClassQueries {
-  /// Returns the declaration of [cls].
-  ClassEntity getDeclaration(covariant ClassEntity cls);
-
-  /// Returns the class mixed into [cls] if any.
-  // TODO(johnniwinther): Replace this by a `getAppliedMixins` function that
-  // return transitively mixed in classes like in:
-  //     class A {}
-  //     class B = Object with A;
-  //     class C = Object with B;
-  ClassEntity getAppliedMixin(covariant ClassEntity cls);
-
-  /// Returns the hierarchy depth of [cls].
-  int getHierarchyDepth(covariant ClassEntity cls);
-
-  /// Returns `true` if [cls] implements `Function` either explicitly or through
-  /// a `call` method.
-  bool implementsFunction(covariant ClassEntity cls);
-
-  /// Returns the superclass of [cls] if any.
-  ClassEntity getSuperClass(covariant ClassEntity cls);
-
-  /// Returns all supertypes of [cls].
-  Iterable<InterfaceType> getSupertypes(covariant ClassEntity cls);
-}
-
 /// Enum values defining subset of classes included in queries.
 enum ClassQuery {
   /// Only the class itself is included.
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index 7299ebe..1832cbc 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -5,8 +5,8 @@
 import 'dart:collection';
 
 import '../common.dart';
+import '../common/elements.dart';
 import '../common/names.dart' show Identifiers;
-import '../common_elements.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
@@ -28,7 +28,7 @@
 /// World builder specific to codegen.
 ///
 /// This adds additional access to liveness of selectors and elements.
-abstract class CodegenWorldBuilder implements WorldBuilder {
+abstract class CodegenWorldBuilder {
   /// Register [constant] as needed for emission.
   void addCompileTimeConstantForEmission(ConstantValue constant);
 
@@ -99,7 +99,7 @@
   OneShotInterceptorData get oneShotInterceptorData;
 }
 
-class CodegenWorldBuilderImpl extends WorldBuilderBase
+class CodegenWorldBuilderImpl extends WorldBuilder
     implements CodegenWorldBuilder {
   final JClosedWorld _closedWorld;
   final OneShotInterceptorData _oneShotInterceptorData;
@@ -170,7 +170,6 @@
       .where((cls) => _processedClasses[cls].isInstantiated);
 
   // TODO(johnniwinther): Improve semantic precision.
-  @override
   Iterable<ClassEntity> get directlyInstantiatedClasses {
     return _directlyInstantiatedClasses;
   }
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index 7683874..3f31e7b 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
+import '../common/elements.dart';
 import '../common/names.dart' show Identifiers, Names;
-import '../common_elements.dart';
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
@@ -17,15 +17,15 @@
 import '../js_backend/native_data.dart' show NativeBasicData, NativeDataBuilder;
 import '../js_backend/no_such_method_registry.dart';
 import '../js_backend/runtime_types_resolution.dart';
-import '../kernel/element_map_impl.dart';
+import '../kernel/element_map.dart';
 import '../kernel/kernel_world.dart';
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
 import '../options.dart';
 import '../util/enumset.dart';
 import '../util/util.dart';
-import '../world.dart' show KClosedWorld, OpenWorld;
+import '../world.dart' show World;
 import 'call_structure.dart';
-import 'class_hierarchy.dart' show ClassHierarchyBuilder, ClassQueries;
+import 'class_hierarchy.dart' show ClassHierarchyBuilder;
 import 'class_set.dart';
 import 'member_usage.dart';
 import 'selector.dart' show Selector;
@@ -33,70 +33,6 @@
     show ConstantUse, DynamicUse, DynamicUseKind, StaticUse, StaticUseKind;
 import 'world_builder.dart';
 
-abstract class ResolutionWorldBuilder implements WorldBuilder, OpenWorld {
-  /// Returns `true` if [member] has been marked as used (called, read, etc.) in
-  /// this world builder.
-  // TODO(johnniwinther): Maybe this should be part of [ClosedWorld] (instead).
-  bool isMemberUsed(MemberEntity member);
-
-  /// The closed world computed by this world builder.
-  ///
-  /// This is only available after the world builder has been closed.
-  KClosedWorld get closedWorldForTesting;
-
-  void registerClass(ClassEntity cls);
-}
-
-/// Extended [ResolutionWorldBuilder] interface used by the
-/// [ResolutionEnqueuer].
-abstract class ResolutionEnqueuerWorldBuilder extends ResolutionWorldBuilder {
-  /// Returns the classes registered as directly or indirectly instantiated.
-  Iterable<ClassEntity> get processedClasses;
-
-  /// Registers that [element] has been closurized.
-  void registerClosurizedMember(MemberEntity element);
-
-  /// Register [type] as (directly) instantiated.
-  // TODO(johnniwinther): Fully enforce the separation between exact, through
-  // subclass and through subtype instantiated types/classes.
-  // TODO(johnniwinther): Support unknown type arguments for generic types.
-  void registerTypeInstantiation(
-      InterfaceType type, ClassUsedCallback classUsed,
-      {ConstructorEntity constructor});
-
-  /// Computes usage for all members declared by [cls]. Calls [membersUsed] with
-  /// the usage changes for each member.
-  ///
-  /// If [checkEnqueuerConsistency] is `true` we check that no new member
-  /// usage can be found. This check is performed without changing the already
-  /// collected member usage.
-  void processClassMembers(ClassEntity cls, MemberUsedCallback memberUsed,
-      {bool checkEnqueuerConsistency = false});
-
-  /// Applies the [dynamicUse] to applicable instance members. Calls
-  /// [membersUsed] with the usage changes for each member.
-  void registerDynamicUse(DynamicUse dynamicUse, MemberUsedCallback memberUsed);
-
-  /// Applies the [staticUse] to applicable members. Calls [membersUsed] with
-  /// the usage changes for each member.
-  void registerStaticUse(StaticUse staticUse, MemberUsedCallback memberUsed);
-
-  /// Register the constant [use] with this world builder. Returns `true` if
-  /// the constant use was new to the world.
-  bool registerConstantUse(ConstantUse use);
-
-  bool isMemberProcessed(MemberEntity member);
-  void registerProcessedMember(MemberEntity member);
-  Iterable<MemberEntity> get processedMembers;
-
-  /// Registers that [type] is checked in this world builder.
-  void registerIsCheck(DartType type);
-
-  void registerNamedTypeVariableNewRti(TypeVariableType typeVariable);
-
-  void registerTypeVariableTypeLiteral(TypeVariableType typeVariable);
-}
-
 /// The type and kind of an instantiation registered through
 /// `ResolutionWorldBuilder.registerTypeInstantiation`.
 class Instance {
@@ -253,9 +189,7 @@
   }
 }
 
-/// Implementation of [ResolutionEnqueuerWorldBuilder].
-class ResolutionWorldBuilderImpl extends WorldBuilderBase
-    implements ResolutionEnqueuerWorldBuilder {
+class ResolutionWorldBuilder extends WorldBuilder implements World {
   /// Instantiation information for all classes with instantiated types.
   ///
   /// Invariant: Elements are declaration elements.
@@ -329,7 +263,6 @@
 
   final SelectorConstraintsStrategy _selectorConstraintsStrategy;
   final ClassHierarchyBuilder _classHierarchyBuilder;
-  final ClassQueries _classQueries;
 
   bool _closed = false;
   KClosedWorld _closedWorldCache;
@@ -343,9 +276,9 @@
 
   bool get isClosed => _closed;
 
-  final KernelToElementMapImpl _elementMap;
+  final KernelToElementMap _elementMap;
 
-  ResolutionWorldBuilderImpl(
+  ResolutionWorldBuilder(
       this._options,
       this._elementMap,
       this._elementEnvironment,
@@ -361,26 +294,24 @@
       this._noSuchMethodRegistry,
       this._annotationsDataBuilder,
       this._selectorConstraintsStrategy,
-      this._classHierarchyBuilder,
-      this._classQueries);
+      this._classHierarchyBuilder);
 
-  @override
+  /// Returns the classes registered as directly or indirectly instantiated.
   Iterable<ClassEntity> get processedClasses => _processedClasses.keys
       .where((cls) => _processedClasses[cls].isInstantiated);
 
-  @override
   bool isMemberProcessed(MemberEntity member) =>
       _processedMembers.contains(member);
 
-  @override
   void registerProcessedMember(MemberEntity member) {
     _processedMembers.add(member);
   }
 
-  @override
   Iterable<MemberEntity> get processedMembers => _processedMembers;
 
-  @override
+  /// The closed world computed by this world builder.
+  ///
+  /// This is only available after the world builder has been closed.
   KClosedWorld get closedWorldForTesting {
     if (!_closed) {
       failedAt(
@@ -390,7 +321,6 @@
   }
 
   // TODO(johnniwinther): Improve semantic precision.
-  @override
   Iterable<ClassEntity> get directlyInstantiatedClasses {
     Set<ClassEntity> classes = {};
     getInstantiationMap().forEach((ClassEntity cls, InstantiationInfo info) {
@@ -401,7 +331,7 @@
     return classes;
   }
 
-  @override
+  /// Registers that [element] has been closurized.
   void registerClosurizedMember(MemberEntity element) {
     FunctionType type = _elementEnvironment.getFunctionType(element);
     if (type.containsTypeVariables) {
@@ -409,10 +339,10 @@
     }
   }
 
+  /// Register [type] as (directly) instantiated.
   // TODO(johnniwinther): Fully enforce the separation between exact, through
   // subclass and through subtype instantiated types/classes.
   // TODO(johnniwinther): Support unknown type arguments for generic types.
-  @override
   void registerTypeInstantiation(
       InterfaceType type, ClassUsedCallback classUsed,
       {ConstructorEntity constructor}) {
@@ -500,7 +430,8 @@
     return _hasMatchingSelector(_invokedSetters[member.name], member);
   }
 
-  @override
+  /// Applies the [dynamicUse] to applicable instance members. Calls
+  /// [membersUsed] with the usage changes for each member.
   void registerDynamicUse(
       DynamicUse dynamicUse, MemberUsedCallback memberUsed) {
     Selector selector = dynamicUse.selector;
@@ -578,22 +509,23 @@
     return constraints.addReceiverConstraint(constraint);
   }
 
-  @override
+  /// Registers that [type] is checked in this world builder.
   void registerIsCheck(covariant DartType type) {
     _isChecks.add(type);
   }
 
-  @override
   void registerNamedTypeVariableNewRti(TypeVariableType type) {
     _namedTypeVariablesNewRti.add(type);
   }
 
-  @override
+  /// Register the constant [use] with this world builder. Returns `true` if
+  /// the constant use was new to the world.
   bool registerConstantUse(ConstantUse use) {
     return _constantValues.add(use.value);
   }
 
-  @override
+  /// Applies the [staticUse] to applicable members. Calls [membersUsed] with
+  /// the usage changes for each member.
   void registerStaticUse(StaticUse staticUse, MemberUsedCallback memberUsed) {
     if (staticUse.kind == StaticUseKind.CLOSURE) {
       Local localFunction = staticUse.element;
@@ -723,7 +655,12 @@
     }
   }
 
-  @override
+  /// Computes usage for all members declared by [cls]. Calls [membersUsed] with
+  /// the usage changes for each member.
+  ///
+  /// If [checkEnqueuerConsistency] is `true` we check that no new member
+  /// usage can be found. This check is performed without changing the already
+  /// collected member usage.
   void processClassMembers(ClassEntity cls, MemberUsedCallback memberUsed,
       {bool checkEnqueuerConsistency = false}) {
     _elementEnvironment.forEachClassMember(cls,
@@ -896,18 +833,12 @@
     }
   }
 
-  @override
   void registerUsedElement(MemberEntity element) {
     if (element.isInstanceMember && !element.isAbstract) {
       _liveInstanceMembers.add(element);
     }
   }
 
-  @override
-  bool isMemberUsed(MemberEntity member) {
-    return _memberUsage[member]?.hasUse ?? false;
-  }
-
   Map<ClassEntity, Set<ClassEntity>> populateHierarchyNodes() {
     Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses = {};
 
@@ -924,14 +855,14 @@
 
       // Walk through the superclasses, and record the types
       // implemented by that type on the superclasses.
-      ClassEntity superclass = _classQueries.getSuperClass(cls);
+      ClassEntity superclass = _elementMap.getSuperClass(cls);
       while (superclass != null) {
         Set<ClassEntity> typesImplementedBySubclassesOfCls =
             typesImplementedBySubclasses.putIfAbsent(superclass, () => {});
-        for (InterfaceType current in _classQueries.getSupertypes(cls)) {
+        for (InterfaceType current in _elementMap.getSuperTypes(cls)) {
           typesImplementedBySubclassesOfCls.add(current.element);
         }
-        superclass = _classQueries.getSuperClass(superclass);
+        superclass = _elementMap.getSuperClass(superclass);
       }
     }
 
@@ -955,12 +886,23 @@
     return assignedInstanceMembers;
   }
 
-  @override
   void registerClass(ClassEntity cls) {
     _classHierarchyBuilder.registerClass(cls);
   }
 
-  @override
+  /// Returns `true` if [member] is inherited into a subtype of [type].
+  ///
+  /// For instance:
+  ///
+  ///     class A { m() {} }
+  ///     class B extends A implements I {}
+  ///     class C extends Object with A implements I {}
+  ///     abstract class I { m(); }
+  ///     abstract class J implements A { }
+  ///
+  /// Here `A.m` is inherited into `A`, `B`, and `C`. Because `B` and
+  /// `C` implement `I`, `isInheritedInSubtypeOf(A.m, I)` is true, but
+  /// `isInheritedInSubtypeOf(A.m, J)` is false.
   bool isInheritedIn(
       MemberEntity member, ClassEntity type, ClassRelation relation) {
     // TODO(johnniwinther): Use the [member] itself to avoid enqueueing members
@@ -989,7 +931,6 @@
     throw UnsupportedError("Unexpected ClassRelation $relation.");
   }
 
-  @override
   KClosedWorld closeWorld(DiagnosticReporter reporter) {
     Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses =
         populateHierarchyNodes();
@@ -1024,7 +965,7 @@
       }
     });
 
-    KClosedWorld closedWorld = KClosedWorldImpl(_elementMap,
+    KClosedWorld closedWorld = KClosedWorld(_elementMap,
         options: _options,
         elementEnvironment: _elementEnvironment,
         dartTypes: _dartTypes,
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index 5235fe1..dddc39b 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -148,7 +148,7 @@
     } else if (element.isConstructor) {
       return Selector.callConstructor(name);
     } else {
-      throw failedAt(element, "Can't get selector from $element");
+      throw failedAt(element, "Cannot get selector from $element");
     }
   }
 
diff --git a/pkg/compiler/lib/src/universe/side_effects.dart b/pkg/compiler/lib/src/universe/side_effects.dart
index c05eaf7..f4101839 100644
--- a/pkg/compiler/lib/src/universe/side_effects.dart
+++ b/pkg/compiler/lib/src/universe/side_effects.dart
@@ -58,7 +58,8 @@
   }
 
   @override
-  bool operator ==(other) => _flags == other._flags;
+  bool operator ==(Object other) =>
+      other is SideEffects && _flags == other._flags;
 
   @override
   int get hashCode => throw UnsupportedError('SideEffects.hashCode');
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index 9352fa8..d75a9e2 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -4,13 +4,14 @@
 
 library world_builder;
 
-import '../common_elements.dart';
+import '../common/elements.dart';
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
 import '../ir/static_type.dart';
 import '../js_backend/native_data.dart' show NativeBasicData;
-import '../world.dart' show World, JClosedWorld, OpenWorld;
+import '../universe/resolution_world_builder.dart' show ResolutionWorldBuilder;
+import '../world.dart' show World;
 import 'selector.dart' show Selector;
 import 'use.dart' show DynamicUse, StaticUse;
 
@@ -99,8 +100,8 @@
   }
 
   @override
-  bool appliedUnnamed(
-      DynamicUse dynamicUse, MemberEntity member, covariant OpenWorld world) {
+  bool appliedUnnamed(DynamicUse dynamicUse, MemberEntity member,
+      covariant ResolutionWorldBuilder world) {
     Selector selector = dynamicUse.selector;
     StrongModeConstraint constraint = dynamicUse.receiverConstraint;
     return selector.appliesUnnamed(member) &&
@@ -184,7 +185,7 @@
 
   bool needsNoSuchMethodHandling(Selector selector, World world) => true;
 
-  bool canHit(MemberEntity element, Name name, OpenWorld world) {
+  bool canHit(MemberEntity element, Name name, ResolutionWorldBuilder world) {
     return world.isInheritedIn(element, cls, relation);
   }
 
@@ -207,19 +208,7 @@
   String toString() => 'StrongModeConstraint($cls,$relation)';
 }
 
-/// The [WorldBuilder] is an auxiliary class used in the process of computing
-/// the [JClosedWorld].
-// TODO(johnniwinther): Move common implementation to a [WorldBuilderBase] when
-// universes and worlds have been unified.
 abstract class WorldBuilder {
-  /// All directly instantiated classes, that is, classes with a generative
-  /// constructor that has been called directly and not only through a
-  /// super-call.
-  // TODO(johnniwinther): Improve semantic precision.
-  Iterable<ClassEntity> get directlyInstantiatedClasses;
-}
-
-abstract class WorldBuilderBase {
   final Map<Entity, Set<DartType>> staticTypeArgumentDependencies = {};
 
   final Map<Selector, Set<DartType>> dynamicTypeArgumentDependencies = {};
diff --git a/pkg/compiler/lib/src/universe/world_impact.dart b/pkg/compiler/lib/src/universe/world_impact.dart
index 19fe89f..1008089 100644
--- a/pkg/compiler/lib/src/universe/world_impact.dart
+++ b/pkg/compiler/lib/src/universe/world_impact.dart
@@ -159,63 +159,6 @@
   }
 }
 
-/// [WorldImpactBuilder] that can create and collect a sequence of
-/// [WorldImpact]s.
-class StagedWorldImpactBuilder implements WorldImpactBuilder {
-  final bool collectImpacts;
-  WorldImpactBuilderImpl _currentBuilder;
-  final List<WorldImpactBuilderImpl> _builders = [];
-
-  StagedWorldImpactBuilder({this.collectImpacts = false});
-
-  void _ensureBuilder() {
-    if (_currentBuilder == null) {
-      _currentBuilder = WorldImpactBuilderImpl();
-      if (collectImpacts) {
-        _builders.add(_currentBuilder);
-      }
-    }
-  }
-
-  @override
-  void registerTypeUse(TypeUse typeUse) {
-    _ensureBuilder();
-    _currentBuilder.registerTypeUse(typeUse);
-  }
-
-  @override
-  void registerDynamicUse(DynamicUse dynamicUse) {
-    _ensureBuilder();
-    _currentBuilder.registerDynamicUse(dynamicUse);
-  }
-
-  @override
-  void registerStaticUse(StaticUse staticUse) {
-    _ensureBuilder();
-    _currentBuilder.registerStaticUse(staticUse);
-  }
-
-  @override
-  void registerConstantUse(ConstantUse constantUse) {
-    _ensureBuilder();
-    _currentBuilder.registerConstantUse(constantUse);
-  }
-
-  /// Returns the [WorldImpact] built so far with this builder. The builder
-  /// is reset, and if [collectImpacts] is `true` the impact is cached for
-  /// [worldImpacts].
-  WorldImpact flush() {
-    if (_currentBuilder == null) return const WorldImpact();
-    WorldImpact worldImpact = _currentBuilder;
-    _currentBuilder = null;
-    return worldImpact;
-  }
-
-  /// If [collectImpacts] is `true` this returns all [WorldImpact]s built with
-  /// this builder.
-  Iterable<WorldImpact> get worldImpacts => _builders;
-}
-
 /// Mutable implementation of [WorldImpact] used to transform
 /// [ResolutionImpact] or [CodegenImpact] to [WorldImpact].
 class TransformedWorldImpact implements WorldImpact, WorldImpactBuilder {
@@ -303,34 +246,6 @@
   }
 }
 
-/// Constant used to denote a specific use of a [WorldImpact].
-class ImpactUseCase {
-  final String name;
-
-  const ImpactUseCase(this.name);
-
-  @override
-  String toString() => 'ImpactUseCase($name)';
-}
-
-/// Strategy used for processing [WorldImpact] object in various use cases.
-class ImpactStrategy {
-  const ImpactStrategy();
-
-  /// Applies [impact] to [visitor] for the [impactUseCase] of [impactSource].
-  void visitImpact(var impactSource, WorldImpact impact,
-      WorldImpactVisitor visitor, ImpactUseCase impactUseCase) {
-    // Apply unconditionally.
-    impact.apply(visitor);
-  }
-
-  /// Notifies the strategy that no more impacts of [impactUseCase] will be
-  /// applied.
-  void onImpactUsed(ImpactUseCase impactUseCase) {
-    // Do nothing.
-  }
-}
-
 /// Visitor used to process the uses of a [WorldImpact].
 abstract class WorldImpactVisitor {
   void visitStaticUse(MemberEntity member, StaticUse staticUse);
diff --git a/pkg/compiler/lib/src/util/sink_adapter.dart b/pkg/compiler/lib/src/util/sink_adapter.dart
index 685d611..bcb9b33 100644
--- a/pkg/compiler/lib/src/util/sink_adapter.dart
+++ b/pkg/compiler/lib/src/util/sink_adapter.dart
@@ -1,4 +1,4 @@
-import '../../compiler_new.dart' as api;
+import '../../compiler.dart' as api;
 
 class BinaryOutputSinkAdapter implements Sink<List<int>> {
   api.BinaryOutputSink output;
diff --git a/pkg/compiler/lib/src/util/testing.dart b/pkg/compiler/lib/src/util/testing.dart
new file mode 100644
index 0000000..405d495
--- /dev/null
+++ b/pkg/compiler/lib/src/util/testing.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.
+
+// @dart = 2.15
+
+/// Marks its argument as live and prevents tree-shaking.
+///
+/// This is more hermetic than using `package:expect` or `print`. This function
+/// may need to be updated as optimizations improve.
+@pragma('dart2js:noInline')
+void makeLive(dynamic x) => x;
+
+@pragma('dart2js:noInline')
+void _subtypeAtRuntime<Sub, Super>() => makeLive(<Sub>[] is List<Super>);
+
+void subtype<Sub extends Super, Super>() => _subtypeAtRuntime<Sub, Super>();
+void notSubtype<Sub, Super>() => _subtypeAtRuntime<Sub, Super>();
diff --git a/pkg/compiler/lib/src/util/util.dart b/pkg/compiler/lib/src/util/util.dart
index 7c5f50b..c9fa382 100644
--- a/pkg/compiler/lib/src/util/util.dart
+++ b/pkg/compiler/lib/src/util/util.dart
@@ -160,8 +160,8 @@
 /// anything which supports [:write:] and [:writeCharCode:], for example,
 /// [StringBuffer].  Note that JS supports \xnn and \unnnn whereas JSON only
 /// supports the \unnnn notation.  Therefore we use the \unnnn notation.
-void writeJsonEscapedCharsOn(String string, buffer) {
-  void addCodeUnitEscaped(var buffer, int code) {
+void writeJsonEscapedCharsOn(String string, StringBuffer buffer) {
+  void addCodeUnitEscaped(StringBuffer buffer, int code) {
     assert(code < 0x10000);
     buffer.write(r'\u');
     if (code < 0x1000) {
@@ -176,7 +176,7 @@
     buffer.write(code.toRadixString(16));
   }
 
-  void writeEscapedOn(String string, var buffer) {
+  void writeEscapedOn(String string, StringBuffer buffer) {
     for (int i = 0; i < string.length; i++) {
       int code = string.codeUnitAt(i);
       if (code == $DQ) {
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index f3d9ab1..7a77d72 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -5,21 +5,14 @@
 library dart2js.world;
 
 import 'closure.dart';
-import 'common.dart';
-import 'common_elements.dart'
-    show
-        JCommonElements,
-        JElementEnvironment,
-        KCommonElements,
-        KElementEnvironment;
+import 'common/elements.dart' show JCommonElements, JElementEnvironment;
 import 'deferred_load/output_unit.dart';
 import 'elements/entities.dart';
 import 'elements/names.dart';
 import 'elements/types.dart';
 import 'inferrer/abstract_value_domain.dart';
-import 'ir/static_type.dart';
 import 'js_backend/annotations.dart';
-import 'js_backend/field_analysis.dart' show JFieldAnalysis, KFieldAnalysis;
+import 'js_backend/field_analysis.dart' show JFieldAnalysis;
 import 'js_backend/backend_usage.dart' show BackendUsage;
 import 'js_backend/interceptor_data.dart' show InterceptorData;
 import 'js_backend/native_data.dart' show NativeData;
@@ -224,28 +217,6 @@
   void registerExtractTypeArguments(ClassEntity interface);
 }
 
-abstract class OpenWorld implements World {
-  void registerUsedElement(MemberEntity element);
-
-  KClosedWorld closeWorld(DiagnosticReporter reporter);
-
-  /// Returns `true` if [member] is inherited into a subtype of [type].
-  ///
-  /// For instance:
-  ///
-  ///     class A { m() {} }
-  ///     class B extends A implements I {}
-  ///     class C extends Object with A implements I {}
-  ///     abstract class I { m(); }
-  ///     abstract class J implements A { }
-  ///
-  /// Here `A.m` is inherited into `A`, `B`, and `C`. Because `B` and
-  /// `C` implement `I`, `isInheritedInSubtypeOf(A.m, I)` is true, but
-  /// `isInheritedInSubtypeOf(A.m, J)` is false.
-  bool isInheritedIn(
-      MemberEntity member, ClassEntity type, ClassRelation relation);
-}
-
 /// A [BuiltWorld] is an immutable result of a [WorldBuilder].
 abstract class BuiltWorld {
   ClassHierarchy get classHierarchy;
@@ -298,52 +269,3 @@
   void forEachDynamicTypeArgument(
       void f(Selector selector, Set<DartType> typeArguments));
 }
-
-// TODO(johnniwinther): Rename this to `ResolutionWorld` or `KWorld`?
-// The immutable result of the [ResolutionWorldBuilder].
-abstract class KClosedWorld implements BuiltWorld {
-  DartTypes get dartTypes;
-  KFieldAnalysis get fieldAnalysis;
-  BackendUsage get backendUsage;
-  NativeData get nativeData;
-  InterceptorData get interceptorData;
-  KElementEnvironment get elementEnvironment;
-  KCommonElements get commonElements;
-
-  @override
-  ClassHierarchy get classHierarchy;
-
-  /// Returns `true` if [cls] is implemented by an instantiated class.
-  bool isImplemented(ClassEntity cls);
-
-  Iterable<MemberEntity> get liveInstanceMembers;
-  Map<ClassEntity, Set<ClassEntity>> get mixinUses;
-  Map<ClassEntity, Set<ClassEntity>> get typesImplementedBySubclasses;
-
-  /// Members that are written either directly or through a setter selector.
-  Iterable<MemberEntity> get assignedInstanceMembers;
-
-  Iterable<ClassEntity> get liveNativeClasses;
-  Map<MemberEntity, MemberUsage> get liveMemberUsage;
-  RuntimeTypesNeed get rtiNeed;
-  NoSuchMethodData get noSuchMethodData;
-
-  @override
-  AnnotationsData get annotationsData;
-
-  /// Set of live closurized members whose signatures reference type variables.
-  ///
-  /// A closurized method is considered live if the enclosing class has been
-  /// instantiated.
-  Iterable<FunctionEntity> get closurizedMembersWithFreeTypeVariables;
-
-  /// Set of (live) local functions (closures).
-  ///
-  /// A live function is one whose enclosing member function has been enqueued.
-  Iterable<Local> get localFunctions;
-
-  /// Returns `true` if [member] has been marked as used (called, read, etc.) in
-  /// this world builder.
-  // TODO(johnniwinther): Maybe this should be part of [ClosedWorld] (instead).
-  bool isMemberUsed(MemberEntity member);
-}
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index bbee8a4..ba75211 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -38,7 +38,6 @@
   package_config: any
   path: any
   source_maps: any
-  cli_util: any
   # Unpublished packages that can be used via path dependency
   async_helper:
     path: ../async_helper
diff --git a/pkg/compiler/test/analyses/analysis_helper.dart b/pkg/compiler/test/analyses/analysis_helper.dart
index b104a00..763818b 100644
--- a/pkg/compiler/test/analyses/analysis_helper.dart
+++ b/pkg/compiler/test/analyses/analysis_helper.dart
@@ -19,7 +19,7 @@
 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'
-    show isRedirectingFactory, isRedirectingFactoryField, relativizeUri;
+    show isRedirectingFactoryField, relativizeUri;
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
@@ -40,7 +40,7 @@
   Uri packageConfig = getPackages(argResults);
   List<String> options = getOptions(argResults);
   run(entryPoint, null,
-      analyzedUrisFilter: (Uri uri) => uri.scheme != 'dart',
+      analyzedUrisFilter: (Uri uri) => !uri.isScheme('dart'),
       librariesSpecificationUri: librariesSpecificationUri,
       packageConfig: packageConfig,
       options: options);
@@ -98,7 +98,7 @@
 
   @override
   Null visitProcedure(ir.Procedure node) {
-    if (node.kind == ir.ProcedureKind.Factory && isRedirectingFactory(node)) {
+    if (node.kind == ir.ProcedureKind.Factory && node.isRedirectingFactory) {
       // Don't visit redirecting factories.
       return;
     }
@@ -362,7 +362,7 @@
   String reportAssertionFailure(ir.Node node, String message) {
     SourceSpan span = computeSourceSpanFromTreeNode(node);
     Uri uri = span.uri;
-    if (uri.scheme == 'org-dartlang-sdk') {
+    if (uri.isScheme('org-dartlang-sdk')) {
       span = new SourceSpan(
           Uri.base.resolve(uri.path.substring(1)), span.begin, span.end);
     }
@@ -378,7 +378,7 @@
     String uriString = relativizeUri(Uri.base, uri, Platform.isWindows);
     Map<String, List<DiagnosticMessage>> actualMap = _actualMessages
         .putIfAbsent(uriString, () => <String, List<DiagnosticMessage>>{});
-    if (uri.scheme == 'org-dartlang-sdk') {
+    if (uri.isScheme('org-dartlang-sdk')) {
       span = new SourceSpan(
           Uri.base.resolve(uri.path.substring(1)), span.begin, span.end);
     }
diff --git a/pkg/compiler/test/analyses/api_allowed.json b/pkg/compiler/test/analyses/api_allowed.json
index 7fe7b5a..645ff86 100644
--- a/pkg/compiler/test/analyses/api_allowed.json
+++ b/pkg/compiler/test/analyses/api_allowed.json
@@ -1,13 +1,30 @@
 {
-  "org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_number.dart": {
-    "Dynamic invocation of '[]'.": 5
+  "org-dartlang-sdk:///lib/_http/http_impl.dart": {
+    "Dynamic access of 'message'.": 3,
+    "Dynamic invocation of 'destroy'.": 1,
+    "Dynamic access of 'address'.": 2,
+    "Dynamic access of 'host'.": 2,
+    "Dynamic access of 'port'.": 2,
+    "Dynamic access of 'remoteAddress'.": 1,
+    "Dynamic access of 'remotePort'.": 1,
+    "Dynamic invocation of 'dart._http::_toJSON'.": 3,
+    "Dynamic invocation of 'listen'.": 1,
+    "Dynamic invocation of 'close'.": 1
+  },
+  "org-dartlang-sdk:///lib/_http/websocket_impl.dart": {
+    "Dynamic invocation of 'dart._http::_toJSON'.": 1
   },
   "org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_helper.dart": {
     "Dynamic access of 'length'.": 1
   },
   "org-dartlang-sdk:///lib/_internal/js_runtime/lib/async_patch.dart": {
-    "Dynamic access of 'iterator'.": 1,
-    "Dynamic invocation of 'then'.": 1
+    "Dynamic access of 'iterator'.": 1
+  },
+  "org-dartlang-sdk:///lib/_internal/js_runtime/lib/convert_patch.dart": {
+    "Dynamic invocation of 'clear'.": 1
+  },
+  "org-dartlang-sdk:///lib/convert/json.dart": {
+    "Dynamic invocation of 'toJson'.": 1
   },
   "org-dartlang-sdk:///lib/html/dart2js/html_dart2js.dart": {
     "Dynamic access of 'style'.": 1,
@@ -87,28 +104,5 @@
   },
   "org-dartlang-sdk:///lib/core/errors.dart": {
     "Dynamic access of 'length'.": 2
-  },
-  "org-dartlang-sdk:///lib/_internal/js_runtime/lib/convert_patch.dart": {
-    "Dynamic invocation of 'clear'.": 1
-  },
-  "org-dartlang-sdk:///lib/convert/json.dart": {
-    "Dynamic invocation of 'toJson'.": 1
-  },
-  "org-dartlang-sdk:///lib/_http/http_impl.dart": {
-    "Dynamic access of 'message'.": 3,
-    "Dynamic invocation of 'destroy'.": 2,
-    "Dynamic access of 'address'.": 3,
-    "Dynamic access of 'type'.": 1,
-    "Dynamic invocation of 'setOption'.": 1,
-    "Dynamic access of 'host'.": 2,
-    "Dynamic access of 'port'.": 2,
-    "Dynamic access of 'remoteAddress'.": 1,
-    "Dynamic access of 'remotePort'.": 1,
-    "Dynamic invocation of 'dart._http::_toJSON'.": 3,
-    "Dynamic invocation of 'listen'.": 1,
-    "Dynamic invocation of 'close'.": 1
-  },
-  "org-dartlang-sdk:///lib/_http/websocket_impl.dart": {
-    "Dynamic invocation of 'dart._http::_toJSON'.": 1
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/test/analyses/api_dynamic_test.dart b/pkg/compiler/test/analyses/api_dynamic_test.dart
index 8119a4e..543cd86 100644
--- a/pkg/compiler/test/analyses/api_dynamic_test.dart
+++ b/pkg/compiler/test/analyses/api_dynamic_test.dart
@@ -14,7 +14,7 @@
   asyncTest(() async {
     await run(
         Uri.parse('memory:main.dart'), 'pkg/compiler/test/analyses/$goldenFile',
-        analyzedUrisFilter: (Uri uri) => uri.scheme == 'dart',
+        analyzedUrisFilter: (Uri uri) => uri.isScheme('dart'),
         memorySourceFiles: {'main.dart': 'main() {}'},
         verbose: args.contains('-v'),
         generate: args.contains('-g'));
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 15d55fd..118826f 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -4,13 +4,6 @@
     "Dynamic invocation of 'resume'.": 1,
     "Dynamic invocation of 'pause'.": 1
   },
-  "pkg/compiler/lib/src/source_file_provider.dart": {
-    "Dynamic invocation of 'call'.": 3
-  },
-  "pkg/compiler/lib/src/util/util.dart": {
-    "Dynamic invocation of 'write'.": 11,
-    "Dynamic invocation of 'writeCharCode'.": 1
-  },
   "pkg/compiler/lib/src/util/maplet.dart": {
     "Dynamic access of 'isEmpty'.": 1,
     "Dynamic access of 'length'.": 1,
@@ -54,44 +47,6 @@
   "pkg/compiler/lib/src/serialization/binary_sink.dart": {
     "Dynamic access of 'index'.": 1
   },
-  "pkg/compiler/lib/src/helpers/expensive_map.dart": {
-    "Dynamic access of 'length'.": 1,
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic access of 'isNotEmpty'.": 1,
-    "Dynamic access of 'keys'.": 1,
-    "Dynamic access of 'values'.": 1,
-    "Dynamic invocation of 'containsKey'.": 1,
-    "Dynamic invocation of 'containsValue'.": 1,
-    "Dynamic invocation of '[]'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic invocation of '[]='.": 1,
-    "Dynamic invocation of 'addAll'.": 1,
-    "Dynamic invocation of 'remove'.": 2,
-    "Dynamic invocation of 'clear'.": 1,
-    "Dynamic access of 'entries'.": 1,
-    "Dynamic invocation of 'addEntries'.": 1,
-    "Dynamic invocation of 'map'.": 1,
-    "Dynamic invocation of 'update'.": 1,
-    "Dynamic invocation of 'updateAll'.": 1,
-    "Dynamic invocation of 'removeWhere'.": 1
-  },
-  "pkg/compiler/lib/src/helpers/expensive_set.dart": {
-    "Dynamic access of 'length'.": 1,
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic access of 'isNotEmpty'.": 1,
-    "Dynamic access of 'iterator'.": 1,
-    "Dynamic invocation of 'contains'.": 1,
-    "Dynamic invocation of 'lookup'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic invocation of 'add'.": 2,
-    "Dynamic invocation of 'remove'.": 2,
-    "Dynamic invocation of 'clear'.": 1,
-    "Dynamic invocation of 'toSet'.": 1
-  },
-  "pkg/compiler/lib/src/helpers/track_map.dart": {
-    "Dynamic invocation of '-'.": 1,
-    "Dynamic invocation of '+'.": 1
-  },
   "pkg/compiler/lib/src/util/enumset.dart": {
     "Dynamic access of 'index'.": 4
   },
@@ -123,24 +78,6 @@
   "pkg/dart2js_info/lib/binary_serialization.dart": {
     "Dynamic invocation of 'cast'.": 1
   },
-  "pkg/compiler/lib/src/universe/side_effects.dart": {
-    "Dynamic access of 'universe.side_effects::_flags'.": 1
-  },
-  "pkg/compiler/lib/src/ssa/builder_kernel.dart": {
-    "Dynamic access of 'name'.": 1,
-    "Dynamic access of 'id'.": 1,
-    "Dynamic invocation of 'addSuccessor'.": 1
-  },
-  "pkg/compiler/lib/src/ssa/types.dart": {
-    "Dynamic access of 'element'.": 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_merger.dart": {
-    "Dynamic invocation of '[]='.": 1
-  },
   "pkg/js_ast/lib/src/builder.dart": {
     "Dynamic invocation of 'call'.": 2
   },
@@ -153,6 +90,13 @@
     "Dynamic invocation of '[]'.": 9,
     "Dynamic invocation of 'toStatement'.": 3
   },
+  "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_merger.dart": {
+    "Dynamic invocation of '[]='.": 1
+  },
   "pkg/dart2js_info/lib/src/util.dart": {
     "Dynamic access of 'name'.": 1,
     "Dynamic invocation of '-'.": 1
@@ -175,20 +119,11 @@
     "Dynamic access of 'superclass'.": 1,
     "Dynamic access of 'needsTearOff'.": 1
   },
-  "pkg/compiler/lib/src/ssa/variable_allocator.dart": {
-    "Dynamic access of 'usedBy'.": 1,
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic invocation of 'nonCheck'.": 1,
-    "Dynamic invocation of 'isCodeMotionInvariant'.": 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/compiler/lib/src/ssa/value_set.dart": {
-    "Dynamic invocation of 'add'.": 2
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/test/codegen/data/indexer_constant_folding.dart b/pkg/compiler/test/codegen/data/indexer_constant_folding.dart
new file mode 100644
index 0000000..da77d1e
--- /dev/null
+++ b/pkg/compiler/test/codegen/data/indexer_constant_folding.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.
+
+const kList = ['first', 'second'];
+const kMap = {0: 'zero', 1: 'one', 2: "two"};
+
+@pragma('dart2js:noInline')
+/*member: list1:function() {
+  return "second";
+}*/
+list1() {
+  return kList[1]; // Constant folds to `"second"`.
+}
+
+@pragma('dart2js:noInline')
+/*member: list2:function() {
+  return A.ioore(B.List_first_second, 10);
+  return B.List_first_second[10];
+}*/
+list2() {
+  return kList[10]; // Does not constant-fold.
+}
+
+@pragma('dart2js:noInline')
+/*member: map1:function() {
+  return "one";
+}*/
+map1() {
+  return kMap[1]; // Constant folds to `"one"`.
+}
+
+@pragma('dart2js:noInline')
+/*member: map2:function() {
+  return null;
+}*/
+map2() {
+  return kMap[10]; // Constant folds to `null`.
+}
+
+/*member: main:ignore*/
+main() {
+  list1();
+  list2();
+  map1();
+  map2();
+}
diff --git a/pkg/compiler/test/codegen/expect_annotations2_test.dart b/pkg/compiler/test/codegen/expect_annotations2_test.dart
index b4d1338..6c2cb0f 100644
--- a/pkg/compiler/test/codegen/expect_annotations2_test.dart
+++ b/pkg/compiler/test/codegen/expect_annotations2_test.dart
@@ -6,7 +6,7 @@
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
 import '../helpers/memory_compiler.dart';
 
diff --git a/pkg/compiler/test/codegen/number_output_test.dart b/pkg/compiler/test/codegen/number_output_test.dart
index fa212c9..8ddf7f1 100644
--- a/pkg/compiler/test/codegen/number_output_test.dart
+++ b/pkg/compiler/test/codegen/number_output_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 import 'package:expect/expect.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/memory_compiler.dart';
diff --git a/pkg/compiler/test/codegen/type_inference8_test.dart b/pkg/compiler/test/codegen/type_inference8_test.dart
index 252f2e4..7188c69 100644
--- a/pkg/compiler/test/codegen/type_inference8_test.dart
+++ b/pkg/compiler/test/codegen/type_inference8_test.dart
@@ -8,7 +8,7 @@
 
 import "package:async_helper/async_helper.dart";
 import "package:compiler/src/commandline_options.dart";
-import "package:compiler/src/common_elements.dart";
+import "package:compiler/src/common/elements.dart";
 import "package:compiler/src/compiler.dart";
 import "package:compiler/src/constants/values.dart";
 import "package:compiler/src/elements/entities.dart";
diff --git a/pkg/compiler/test/codegen/unused_empty_map_test.dart b/pkg/compiler/test/codegen/unused_empty_map_test.dart
index c705b09..c38440f 100644
--- a/pkg/compiler/test/codegen/unused_empty_map_test.dart
+++ b/pkg/compiler/test/codegen/unused_empty_map_test.dart
@@ -7,7 +7,7 @@
 // Ensure that unused empty HashMap nodes are dropped from the output.
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:expect/expect.dart';
 import '../helpers/memory_compiler.dart';
 
diff --git a/pkg/compiler/test/codegen/use_strict_test.dart b/pkg/compiler/test/codegen/use_strict_test.dart
index d6cbaf4..520d986 100644
--- a/pkg/compiler/test/codegen/use_strict_test.dart
+++ b/pkg/compiler/test/codegen/use_strict_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:expect/expect.dart';
 import '../helpers/memory_compiler.dart';
 
diff --git a/pkg/compiler/test/deferred/closures_test.dart b/pkg/compiler/test/deferred/closures_test.dart
index a972d68..1f60716 100644
--- a/pkg/compiler/test/deferred/closures_test.dart
+++ b/pkg/compiler/test/deferred/closures_test.dart
@@ -7,7 +7,7 @@
 // Ensures that closures are in the output unit of their enclosing element.
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:expect/expect.dart';
 
 import '../helpers/memory_compiler.dart';
diff --git a/pkg/compiler/test/deferred/emit_type_checks_test.dart b/pkg/compiler/test/deferred/emit_type_checks_test.dart
index d4184ad8..6e0ba61 100644
--- a/pkg/compiler/test/deferred/emit_type_checks_test.dart
+++ b/pkg/compiler/test/deferred/emit_type_checks_test.dart
@@ -8,7 +8,7 @@
 // Files when using deferred loading.
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
 import 'package:expect/expect.dart';
diff --git a/pkg/compiler/test/deferred/inline_restrictions_test.dart b/pkg/compiler/test/deferred/inline_restrictions_test.dart
index 7432ea3..7a47744 100644
--- a/pkg/compiler/test/deferred/inline_restrictions_test.dart
+++ b/pkg/compiler/test/deferred/inline_restrictions_test.dart
@@ -8,7 +8,7 @@
 // allow inlining of empty functions and from main.
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:expect/expect.dart';
 import '../helpers/memory_compiler.dart';
diff --git a/pkg/compiler/test/deferred/load_mapping_test.dart b/pkg/compiler/test/deferred/load_mapping_test.dart
index ffb7b84..dd18b21 100644
--- a/pkg/compiler/test/deferred/load_mapping_test.dart
+++ b/pkg/compiler/test/deferred/load_mapping_test.dart
@@ -7,7 +7,7 @@
 import 'dart:convert';
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import '../helpers/memory_compiler.dart';
 
 void testLoadMap() async {
diff --git a/pkg/compiler/test/end_to_end/async_compiler_input_provider_test.dart b/pkg/compiler/test/end_to_end/async_compiler_input_provider_test.dart
deleted file mode 100644
index 1919b8a..0000000
--- a/pkg/compiler/test/end_to_end/async_compiler_input_provider_test.dart
+++ /dev/null
@@ -1,70 +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.
-
-// @dart = 2.7
-
-import "dart:async";
-import "dart:io";
-
-import "package:expect/expect.dart";
-import "package:async_helper/async_helper.dart";
-
-import 'package:compiler/compiler.dart' as compiler;
-
-import '../helpers/memory_compiler.dart';
-
-const Map<String, String> SOURCES = const {
-  "/main.dart": """
-    import "foo.dart";
-    main() => foo();
-    """,
-  "/foo.dart": """
-    library foo;
-    import "bar.dart";
-    foo() => bar();
-    """,
-  "/bar.dart": """
-    library bar;
-    bar() => print("bar");
-    """
-};
-
-Future provideInput(Uri uri) {
-  dynamic source = SOURCES[uri.path];
-  if (source == null) {
-    // Not one of our source files, so assume it's a built-in.
-    if (uri.path.endsWith('.dill')) {
-      source = new File(uri.toFilePath()).readAsBytesSync();
-    } else {
-      source = new File(uri.toFilePath()).readAsStringSync();
-    }
-  }
-
-  // Deliver the input asynchronously.
-  return new Future(() => source);
-}
-
-main() {
-  var entrypoint = Uri.parse("file:///main.dart");
-
-  // Find the path to sdk/ in the repo relative to this script.
-  Uri librariesSpec = sdkLibrariesSpecificationUri;
-  var platformDir = sdkPlatformBinariesPath;
-  asyncTest(() => compiler.compile(
-          entrypoint,
-          librariesSpec,
-          provideInput,
-          handleDiagnostic,
-          ['--platform-binaries=${platformDir}']).then((code) {
-        Expect.isNotNull(code);
-      }));
-}
-
-void handleDiagnostic(
-    Uri uri, int begin, int end, String message, compiler.Diagnostic kind) {
-  print(message);
-  if (kind != compiler.Diagnostic.VERBOSE_INFO) {
-    throw 'Unexpected diagnostic kind $kind';
-  }
-}
diff --git a/pkg/compiler/test/end_to_end/command_line_test.dart b/pkg/compiler/test/end_to_end/command_line_test.dart
index f3ecc57..2d8b6f8 100644
--- a/pkg/compiler/test/end_to_end/command_line_test.dart
+++ b/pkg/compiler/test/end_to_end/command_line_test.dart
@@ -11,7 +11,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
-import 'package:compiler/compiler_new.dart' as api;
+import 'package:compiler/compiler.dart' as api;
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/dart2js.dart' as entry;
 import 'package:compiler/src/options.dart' show CompilerOptions;
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 46626f4..6e22f60 100644
--- a/pkg/compiler/test/end_to_end/dill_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/dill_loader_test.dart
@@ -6,8 +6,7 @@
 
 import '../helpers/memory_compiler.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/apiimpl.dart' show CompilerImpl;
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart'
     show LibraryEntity, ClassEntity;
 import 'package:compiler/src/kernel/dart2js_target.dart';
@@ -38,7 +37,7 @@
 
     List<int> kernelBinary =
         serializeComponent((await kernelForProgram(uri, options)).component);
-    CompilerImpl compiler = compilerFor(
+    var compiler = compilerFor(
         entryPoint: uri,
         memorySourceFiles: {'main.dill': kernelBinary},
         diagnosticHandler: diagnostics,
diff --git a/pkg/compiler/test/end_to_end/dump_info2_test.dart b/pkg/compiler/test/end_to_end/dump_info2_test.dart
index d7c74d6..dc28204 100644
--- a/pkg/compiler/test/end_to_end/dump_info2_test.dart
+++ b/pkg/compiler/test/end_to_end/dump_info2_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:convert';
 
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/json_info_codec.dart';
 import 'package:dart2js_info/binary_serialization.dart' as binary;
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 b830f92..be0974f 100644
--- a/pkg/compiler/test/end_to_end/exit_code_test.dart
+++ b/pkg/compiler/test/end_to_end/exit_code_test.dart
@@ -11,8 +11,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
-import 'package:compiler/compiler_new.dart' as api;
-import 'package:compiler/src/backend_strategy.dart';
+import 'package:compiler/compiler.dart' as api;
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common/codegen.dart';
 import 'package:compiler/src/common/work.dart';
@@ -22,7 +21,6 @@
 import 'package:compiler/src/diagnostics/invariant.dart';
 import 'package:compiler/src/diagnostics/messages.dart';
 import 'package:compiler/src/diagnostics/spannable.dart';
-import 'package:compiler/src/apiimpl.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
 import 'package:compiler/src/null_compiler_output.dart';
@@ -33,7 +31,7 @@
 import 'diagnostic_reporter_helper.dart';
 import '../helpers/memory_compiler.dart';
 
-class TestCompiler extends CompilerImpl {
+class TestCompiler extends Compiler {
   final String testMarker;
   final String testType;
   final Function onTest;
@@ -56,7 +54,7 @@
   }
 
   @override
-  BackendStrategy createBackendStrategy() {
+  JsBackendStrategy createBackendStrategy() {
     return new TestBackendStrategy(this);
   }
 
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 b5819f0..00abbf1 100644
--- a/pkg/compiler/test/end_to_end/modular_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/modular_loader_test.dart
@@ -6,8 +6,7 @@
 
 import '../helpers/memory_compiler.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/apiimpl.dart' show CompilerImpl;
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart'
     show LibraryEntity, ClassEntity;
 import 'package:compiler/src/kernel/dart2js_target.dart';
@@ -35,7 +34,7 @@
     DiagnosticCollector diagnostics = DiagnosticCollector();
     OutputCollector output = OutputCollector();
     Uri entryPoint = Uri.parse('org-dartlang-test:///c2.dart');
-    CompilerImpl compiler = compilerFor(
+    var compiler = compilerFor(
         entryPoint: entryPoint,
         options: [
           '--input-dill=memory:c.dill',
@@ -109,7 +108,7 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme == 'file') return physical.entityForUri(uri);
+    if (uri.isScheme('file')) return physical.entityForUri(uri);
     return memory.entityForUri(uri);
   }
 }
diff --git a/pkg/compiler/test/end_to_end/output_type_test.dart b/pkg/compiler/test/end_to_end/output_type_test.dart
index 848b1ff..a1bc868 100644
--- a/pkg/compiler/test/end_to_end/output_type_test.dart
+++ b/pkg/compiler/test/end_to_end/output_type_test.dart
@@ -11,7 +11,7 @@
 import 'dart:io';
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/dart2js.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/null_compiler_output.dart';
diff --git a/pkg/compiler/test/end_to_end/user_crash_test.dart b/pkg/compiler/test/end_to_end/user_crash_test.dart
index 6dfea6d..1aeaba9 100644
--- a/pkg/compiler/test/end_to_end/user_crash_test.dart
+++ b/pkg/compiler/test/end_to_end/user_crash_test.dart
@@ -9,7 +9,7 @@
 import 'package:expect/expect.dart';
 import 'package:front_end/src/fasta/messages.dart'
     show templateCantReadFile, messageMissingMain;
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import '../helpers/memory_compiler.dart';
 
 final EXCEPTION = 'Crash-marker';
diff --git a/pkg/compiler/test/equivalence/id_equivalence.dart b/pkg/compiler/test/equivalence/id_equivalence.dart
index 879d6b9..6a91597 100644
--- a/pkg/compiler/test/equivalence/id_equivalence.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence.dart
@@ -61,3 +61,10 @@
     super.visitLabeledStatement(node);
   }
 }
+
+/// Print a message with a source location.
+void reportHere(
+    DiagnosticReporter reporter, Spannable node, String debugMessage) {
+  reporter.reportInfoMessage(
+      node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
+}
diff --git a/pkg/compiler/test/equivalence/id_equivalence_helper.dart b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
index d0288ee..037cf61 100644
--- a/pkg/compiler/test/equivalence/id_equivalence_helper.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
@@ -9,12 +9,12 @@
 
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:compiler/src/common.dart';
-import 'package:compiler/compiler_new.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/compiler.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:expect/expect.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -248,13 +248,13 @@
 
   bool excludeLibrary(LibraryEntity library) {
     return forUserLibrariesOnly &&
-        (library.canonicalUri.scheme == 'dart' ||
-            library.canonicalUri.scheme == 'package');
+        (library.canonicalUri.isScheme('dart') ||
+            library.canonicalUri.isScheme('package'));
   }
 
   ir.Library getIrLibrary(LibraryEntity library) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     LibraryEntity kLibrary =
         elementMap.elementEnvironment.lookupLibrary(library.canonicalUri);
     return elementMap.getLibraryNode(kLibrary);
diff --git a/pkg/compiler/test/equivalence/id_testing_test.dart b/pkg/compiler/test/equivalence/id_testing_test.dart
index 5789c7c..1f9bfe35 100644
--- a/pkg/compiler/test/equivalence/id_testing_test.dart
+++ b/pkg/compiler/test/equivalence/id_testing_test.dart
@@ -9,7 +9,7 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -31,7 +31,7 @@
       Map<Id, ActualData<String>> actualMap,
       {bool verbose: false}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     ir.Member node = elementMap.getMemberNode(member);
     new IdTestingDataExtractor(compiler.reporter, actualMap, elementMap)
         .run(node);
@@ -42,7 +42,7 @@
       Compiler compiler, ClassEntity cls, Map<Id, ActualData<String>> actualMap,
       {bool verbose}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     ir.Class node = elementMap.getClassNode(cls);
     new IdTestingDataExtractor(compiler.reporter, actualMap, elementMap)
         .computeForClass(node);
@@ -53,7 +53,7 @@
       Map<Id, ActualData<String>> actualMap,
       {bool verbose}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     ir.Library node = elementMap.getLibraryNode(library);
     new IdTestingDataExtractor(compiler.reporter, actualMap, elementMap)
         .computeForLibrary(node);
@@ -77,7 +77,7 @@
 
 /// IR visitor for computing inference data for a member.
 class IdTestingDataExtractor extends IrDataExtractor<String> {
-  final KernelToElementMapImpl elementMap;
+  final KernelToElementMap elementMap;
 
   IdTestingDataExtractor(DiagnosticReporter reporter,
       Map<Id, ActualData<String>> actualMap, this.elementMap)
diff --git a/pkg/compiler/test/equivalence/show_helper.dart b/pkg/compiler/test/equivalence/show_helper.dart
index ecc6257..4aa3850 100644
--- a/pkg/compiler/test/equivalence/show_helper.dart
+++ b/pkg/compiler/test/equivalence/show_helper.dart
@@ -65,7 +65,7 @@
     SourceFileProvider provider = data.compiler.provider;
     for (Uri uri in data.actualMaps.keys) {
       Uri fileUri = uri;
-      if (fileUri.scheme == 'org-dartlang-sdk') {
+      if (fileUri.isScheme('org-dartlang-sdk')) {
         fileUri = Uri.base.resolve(fileUri.path.substring(1));
       }
       if (show != null && !show.any((f) => '$fileUri'.endsWith(f))) {
diff --git a/pkg/compiler/test/generic_methods/generic_method_test.dart b/pkg/compiler/test/generic_methods/generic_method_test.dart
index 14a4038..119d58c 100644
--- a/pkg/compiler/test/generic_methods/generic_method_test.dart
+++ b/pkg/compiler/test/generic_methods/generic_method_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js/js.dart' as js;
diff --git a/pkg/compiler/test/helpers/compiler_helper.dart b/pkg/compiler/test/helpers/compiler_helper.dart
index 463d171..12abc75 100644
--- a/pkg/compiler/test/helpers/compiler_helper.dart
+++ b/pkg/compiler/test/helpers/compiler_helper.dart
@@ -7,9 +7,9 @@
 library compiler_helper;
 
 import 'dart:async';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart' show Compiler;
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_model/js_strategy.dart';
diff --git a/pkg/compiler/test/helpers/diagnostic_helper.dart b/pkg/compiler/test/helpers/diagnostic_helper.dart
index 68a34ff..9e91050 100644
--- a/pkg/compiler/test/helpers/diagnostic_helper.dart
+++ b/pkg/compiler/test/helpers/diagnostic_helper.dart
@@ -8,8 +8,7 @@
 
 import 'dart:collection';
 
-import 'package:compiler/compiler_new.dart'
-    show CompilerDiagnostics, Diagnostic;
+import 'package:compiler/compiler.dart' show CompilerDiagnostics, Diagnostic;
 import 'package:compiler/src/diagnostics/messages.dart'
     show Message, MessageKind;
 import 'package:expect/expect.dart';
diff --git a/pkg/compiler/test/helpers/element_lookup.dart b/pkg/compiler/test/helpers/element_lookup.dart
index e72f0f6..ae8bfa2 100644
--- a/pkg/compiler/test/helpers/element_lookup.dart
+++ b/pkg/compiler/test/helpers/element_lookup.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:compiler/src/common_elements.dart' show JElementEnvironment;
+import 'package:compiler/src/common/elements.dart' show JElementEnvironment;
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/world.dart' show JClosedWorld;
@@ -21,8 +21,8 @@
       closedWorld.commonElements.jsHelperLibrary, name);
   if (cls == null) {
     for (LibraryEntity library in elementEnvironment.libraries) {
-      if (library.canonicalUri.scheme != 'dart' &&
-          library.canonicalUri.scheme != 'package') {
+      if (!library.canonicalUri.isScheme('dart') &&
+          !library.canonicalUri.isScheme('package')) {
         cls = elementEnvironment.lookupClass(library, name);
         if (cls != null) {
           break;
@@ -70,8 +70,8 @@
       setter: isSetter);
   if (member == null) {
     for (LibraryEntity library in elementEnvironment.libraries) {
-      if (library.canonicalUri.scheme != 'dart' &&
-          library.canonicalUri.scheme != 'package') {
+      if (!library.canonicalUri.isScheme('dart') &&
+          !library.canonicalUri.isScheme('package')) {
         member = elementEnvironment.lookupLibraryMember(library, name,
             setter: isSetter);
         if (member != null) {
diff --git a/pkg/compiler/test/helpers/memory_compiler.dart b/pkg/compiler/test/helpers/memory_compiler.dart
index 3b6ca9a..7131e00 100644
--- a/pkg/compiler/test/helpers/memory_compiler.dart
+++ b/pkg/compiler/test/helpers/memory_compiler.dart
@@ -8,9 +8,9 @@
 
 import 'dart:async';
 
-import 'package:compiler/compiler.dart' show DiagnosticHandler;
-import 'package:compiler/compiler_new.dart'
+import 'package:compiler/compiler.dart'
     show CompilationResult, CompilerDiagnostics, CompilerOutput, Diagnostic;
+import 'package:compiler/src/compiler.dart' show Compiler;
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/diagnostics/messages.dart' show Message;
@@ -24,7 +24,7 @@
 import 'memory_source_file_helper.dart';
 
 export 'output_collector.dart';
-export 'package:compiler/compiler_new.dart' show CompilationResult;
+export 'package:compiler/compiler.dart' show CompilationResult;
 export 'diagnostic_helper.dart';
 
 String sdkPath = 'sdk/lib';
@@ -90,12 +90,12 @@
     bool showDiagnostics: true,
     Uri librariesSpecificationUri,
     Uri packageConfig,
-    void beforeRun(CompilerImpl compiler),
+    void beforeRun(Compiler compiler),
     bool unsafeToTouchSourceFiles: false}) async {
   if (entryPoint == null) {
     entryPoint = Uri.parse('memory:main.dart');
   }
-  CompilerImpl compiler = compilerFor(
+  Compiler compiler = compilerFor(
       entryPoint: entryPoint,
       memorySourceFiles: memorySourceFiles,
       diagnosticHandler: diagnosticHandler,
@@ -115,7 +115,7 @@
       isSuccess: isSuccess, kernelInitializedCompilerState: compilerState);
 }
 
-CompilerImpl compilerFor(
+Compiler compilerFor(
     {Uri entryPoint,
     Map<String, dynamic> memorySourceFiles: const <String, dynamic>{},
     CompilerDiagnostics diagnosticHandler,
@@ -174,31 +174,12 @@
     ..packageConfig = packageConfig;
   compilerOptions.kernelInitializedCompilerState =
       kernelInitializedCompilerState;
-  CompilerImpl compiler = new CompilerImpl(
+  var compiler = new Compiler(
       provider, outputProvider, diagnosticHandler, compilerOptions);
 
   return compiler;
 }
 
-DiagnosticHandler createDiagnosticHandler(DiagnosticHandler diagnosticHandler,
-    SourceFileProvider provider, bool showDiagnostics) {
-  var handler = diagnosticHandler;
-  if (showDiagnostics) {
-    if (diagnosticHandler == null) {
-      handler = new FormattingDiagnosticHandler(provider);
-    } else {
-      var formattingHandler = new FormattingDiagnosticHandler(provider);
-      handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {
-        diagnosticHandler(uri, begin, end, message, kind);
-        formattingHandler(uri, begin, end, message, kind);
-      };
-    }
-  } else if (diagnosticHandler == null) {
-    handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {};
-  }
-  return handler;
-}
-
 main() {
   runCompiler(memorySourceFiles: {'main.dart': 'main() {}'});
 }
diff --git a/pkg/compiler/test/helpers/memory_source_file_helper.dart b/pkg/compiler/test/helpers/memory_source_file_helper.dart
index 865d20e..db35ef1 100644
--- a/pkg/compiler/test/helpers/memory_source_file_helper.dart
+++ b/pkg/compiler/test/helpers/memory_source_file_helper.dart
@@ -9,9 +9,7 @@
 import 'dart:async' show Future;
 export 'dart:io' show Platform;
 
-import 'package:compiler/compiler_new.dart';
-
-export 'package:compiler/src/apiimpl.dart' show CompilerImpl;
+import 'package:compiler/compiler.dart';
 
 import 'package:compiler/src/io/source_file.dart'
     show Binary, StringSourceFile, Utf8BytesSourceFile;
@@ -31,7 +29,7 @@
   @override
   Future<Input<List<int>>> readBytesFromUri(
       Uri resourceUri, InputKind inputKind) {
-    if (resourceUri.scheme != 'memory') {
+    if (!resourceUri.isScheme('memory')) {
       return super.readBytesFromUri(resourceUri, inputKind);
     }
     // TODO(johnniwinther): We should use inputs already in the cache. Some
diff --git a/pkg/compiler/test/helpers/output_collector.dart b/pkg/compiler/test/helpers/output_collector.dart
index 3b47963..541a2fa 100644
--- a/pkg/compiler/test/helpers/output_collector.dart
+++ b/pkg/compiler/test/helpers/output_collector.dart
@@ -8,7 +8,7 @@
 
 library output_collector;
 
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 
 class BufferedOutputSink implements OutputSink {
   StringBuffer sb = new StringBuffer();
diff --git a/pkg/compiler/test/helpers/program_lookup.dart b/pkg/compiler/test/helpers/program_lookup.dart
index 9e985f5..b575f55 100644
--- a/pkg/compiler/test/helpers/program_lookup.dart
+++ b/pkg/compiler/test/helpers/program_lookup.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/deferred_load/output_unit.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js/js.dart' as js;
diff --git a/pkg/compiler/test/helpers/stats_test.dart b/pkg/compiler/test/helpers/stats_test.dart
deleted file mode 100644
index af0e96a..0000000
--- a/pkg/compiler/test/helpers/stats_test.dart
+++ /dev/null
@@ -1,96 +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
-
-import 'package:expect/expect.dart';
-import 'package:compiler/src/helpers/helpers.dart';
-
-class CollectingOutput implements StatsOutput {
-  final StringBuffer sb = new StringBuffer();
-
-  @override
-  void println(String text) {
-    sb.write('$text\n');
-  }
-
-  @override
-  String toString() => sb.toString();
-}
-
-void main() {
-  testRecordElement();
-  testRecordFrequency();
-  testRecordCounter();
-}
-
-void testRecordElement() {
-  test((Stats stats) {
-    stats.recordElement('foo', 'a', data: 'first-a-data');
-    stats.recordElement('foo', 'a', data: 'second-a-data');
-    stats.recordElement('foo', 'b');
-    stats.recordElement('bar', 'a', data: 'third-a-data');
-    stats.recordElement('bar', 'c');
-  }, r'''
-foo: 2
- value=a data=second-a-data
- b
-bar: 2
- value=a data=third-a-data
- c
-''');
-}
-
-void testRecordFrequency() {
-  test((Stats stats) {
-    stats.recordFrequency('foo', 'a', 'first-a-data');
-    stats.recordFrequency('foo', 'a', 'second-a-data');
-    stats.recordFrequency('bar', 'b', 'first-b-data');
-    stats.recordFrequency('foo', 'c');
-    stats.recordFrequency('bar', 'b');
-  }, r'''
-foo:
- a: 2
-  first-a-data
-  second-a-data
- c: 1
-bar:
- b: 2
-  first-b-data
-''');
-}
-
-void testRecordCounter() {
-  test((Stats stats) {
-    stats.recordCounter('foo', 'a');
-    stats.recordCounter('foo', 'a');
-    stats.recordCounter('foo', 'b');
-    stats.recordCounter('bar', 'c', 'first-c-data');
-    stats.recordCounter('bar', 'c', 'second-c-data');
-    stats.recordCounter('bar', 'd');
-    stats.recordCounter('bar', 'd');
-    stats.recordCounter('baz');
-    stats.recordCounter('baz');
-  }, r'''
-foo: 3
- count=2 example=a
- count=1 example=b
-bar: 4
- count=2 examples=2
-  c:
-   first-c-data
-   second-c-data
-  d
-baz: 2
-''');
-}
-
-void test(f(Stats stats), expectedDump) {
-  CollectingOutput output = new CollectingOutput();
-  Stats stats = new ActiveStats(new ConsolePrinter(output: output));
-  f(stats);
-  stats.dumpStats();
-  print(output.toString());
-  Expect.equals(expectedDump, output.toString());
-}
diff --git a/pkg/compiler/test/helpers/type_test_helper.dart b/pkg/compiler/test/helpers/type_test_helper.dart
index 90b3202..570e368 100644
--- a/pkg/compiler/test/helpers/type_test_helper.dart
+++ b/pkg/compiler/test/helpers/type_test_helper.dart
@@ -8,15 +8,16 @@
 
 import 'dart:async';
 import 'package:expect/expect.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart' show Compiler;
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/kernel/kelements.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
+import 'package:compiler/src/kernel/kernel_world.dart';
 import 'package:compiler/src/options.dart';
-import 'package:compiler/src/world.dart' show JClosedWorld, KClosedWorld;
+import 'package:compiler/src/world.dart' show JClosedWorld;
 import 'memory_compiler.dart' as memory;
 
 extension DartTypeHelpers on DartType {
diff --git a/pkg/compiler/test/impact/data/issue48304.dart b/pkg/compiler/test/impact/data/issue48304.dart
new file mode 100644
index 0000000..fe7da9a
--- /dev/null
+++ b/pkg/compiler/test/impact/data/issue48304.dart
@@ -0,0 +1,232 @@
+// 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 B {
+  call<T>();
+}
+
+/*member: C.:static=[Object.(0)]*/
+class C implements B {
+  /*member: C.call:
+   static=[
+    Rti._bind(1),
+    Rti._eval(1),
+    _arrayInstanceType(1),
+    _asBool(1),
+    _asBoolQ(1),
+    _asBoolS(1),
+    _asDouble(1),
+    _asDoubleQ(1),
+    _asDoubleS(1),
+    _asInt(1),
+    _asIntQ(1),
+    _asIntS(1),
+    _asNum(1),
+    _asNumQ(1),
+    _asNumS(1),
+    _asObject(1),
+    _asString(1),
+    _asStringQ(1),
+    _asStringS(1),
+    _asTop(1),
+    _generalAsCheckImplementation(1),
+    _generalIsTestImplementation(1),
+    _generalNullableAsCheckImplementation(1),
+    _generalNullableIsTestImplementation(1),
+    _installSpecializedAsCheck(1),
+    _installSpecializedIsTest(1),
+    _instanceType(1),
+    _isBool(1),
+    _isInt(1),
+    _isNum(1),
+    _isObject(1),
+    _isString(1),
+    _isTop(1),
+    _setArrayType(2),
+    createRuntimeType(1),
+    findType(1),
+    instanceType(1),
+    print(1),
+    typeLiteral(1)],
+   type=[
+    inst:Closure,
+    inst:JSArray<dynamic>,
+    inst:JSBool,
+    inst:JSExtendableArray<dynamic>,
+    inst:JSFixedArray<dynamic>,
+    inst:JSInt,
+    inst:JSMutableArray<dynamic>,
+    inst:JSNumNotInt,
+    inst:JSNumber,
+    inst:JSPositiveInt,
+    inst:JSUInt31,
+    inst:JSUInt32,
+    inst:JSUnmodifiableArray<dynamic>,
+    inst:Type,
+    inst:_Type,
+    lit:call.T,
+    param:Object?]
+  */
+  call<T>() => print(T);
+}
+
+abstract class A {}
+
+class Wrapper {
+  /*member: Wrapper.:
+   static=[
+    Object.(0),
+    Rti._bind(1),
+    Rti._eval(1),
+    _arrayInstanceType(1),
+    _asBool(1),
+    _asBoolQ(1),
+    _asBoolS(1),
+    _asDouble(1),
+    _asDoubleQ(1),
+    _asDoubleS(1),
+    _asInt(1),
+    _asIntQ(1),
+    _asIntS(1),
+    _asNum(1),
+    _asNumQ(1),
+    _asNumS(1),
+    _asObject(1),
+    _asString(1),
+    _asStringQ(1),
+    _asStringS(1),
+    _asTop(1),
+    _generalAsCheckImplementation(1),
+    _generalIsTestImplementation(1),
+    _generalNullableAsCheckImplementation(1),
+    _generalNullableIsTestImplementation(1),
+    _installSpecializedAsCheck(1),
+    _installSpecializedIsTest(1),
+    _instanceType(1),
+    _isBool(1),
+    _isInt(1),
+    _isNum(1),
+    _isObject(1),
+    _isString(1),
+    _isTop(1),
+    findType(1),
+    init:Wrapper.b,
+    init:Wrapper.call,
+    instanceType(1)],
+   type=[
+    inst:Closure,
+    inst:JSBool,
+    param:B]
+  */
+  Wrapper(this.b, this.call);
+  /*member: Wrapper.b:
+   static=[
+    Rti._bind(1),
+    Rti._eval(1),
+    _arrayInstanceType(1),
+    _asBool(1),
+    _asBoolQ(1),
+    _asBoolS(1),
+    _asDouble(1),
+    _asDoubleQ(1),
+    _asDoubleS(1),
+    _asInt(1),
+    _asIntQ(1),
+    _asIntS(1),
+    _asNum(1),
+    _asNumQ(1),
+    _asNumS(1),
+    _asObject(1),
+    _asString(1),
+    _asStringQ(1),
+    _asStringS(1),
+    _asTop(1),
+    _generalAsCheckImplementation(1),
+    _generalIsTestImplementation(1),
+    _generalNullableAsCheckImplementation(1),
+    _generalNullableIsTestImplementation(1),
+    _installSpecializedAsCheck(1),
+    _installSpecializedIsTest(1),
+    _instanceType(1),
+    _isBool(1),
+    _isInt(1),
+    _isNum(1),
+    _isObject(1),
+    _isString(1),
+    _isTop(1),
+    findType(1),
+    instanceType(1)],
+   type=[
+    inst:Closure,
+    inst:JSBool,
+    inst:JSNull,
+    param:B]
+  */
+  final B b;
+  /*member: Wrapper.call:
+   static=[
+    Rti._bind(1),
+    Rti._eval(1),
+    _arrayInstanceType(1),
+    _asBool(1),
+    _asBoolQ(1),
+    _asBoolS(1),
+    _asDouble(1),
+    _asDoubleQ(1),
+    _asDoubleS(1),
+    _asInt(1),
+    _asIntQ(1),
+    _asIntS(1),
+    _asNum(1),
+    _asNumQ(1),
+    _asNumS(1),
+    _asObject(1),
+    _asString(1),
+    _asStringQ(1),
+    _asStringS(1),
+    _asTop(1),
+    _generalAsCheckImplementation(1),
+    _generalIsTestImplementation(1),
+    _generalNullableAsCheckImplementation(1),
+    _generalNullableIsTestImplementation(1),
+    _installSpecializedAsCheck(1),
+    _installSpecializedIsTest(1),
+    _instanceType(1),
+    _isBool(1),
+    _isInt(1),
+    _isNum(1),
+    _isObject(1),
+    _isString(1),
+    _isTop(1),
+    findType(1),
+    instanceType(1)],
+   type=[
+    inst:Closure,
+    inst:JSBool,
+    inst:JSNull,
+    param:B]
+  */
+  final B call;
+}
+
+/*member: main:
+ dynamic=[
+  B.call<A>(0),
+  exact:C.call<A>(0),
+  exact:Wrapper.b,
+  exact:Wrapper.b<A>(0),
+  exact:Wrapper.call,
+  exact:Wrapper.call<A>(0)],
+ static=[
+  C.(0),
+  Wrapper.(2)]
+*/
+void main() {
+  B b = C();
+  b<A>();
+  Wrapper(b, b).b<A>();
+  (Wrapper(b, b).b)<A>();
+  Wrapper(b, b).call<A>();
+  (Wrapper(b, b).call)<A>();
+}
diff --git a/pkg/compiler/test/inference/data/break_continue.dart b/pkg/compiler/test/inference/data/break_continue.dart
index 9fbb86e..d815f1d 100644
--- a/pkg/compiler/test/inference/data/break_continue.dart
+++ b/pkg/compiler/test/inference/data/break_continue.dart
@@ -12,6 +12,8 @@
   noContinueInWhile();
   breakInIf();
   noBreakInIf();
+  breakInBlock();
+  noBreakInBlock();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -107,7 +109,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// A break statement in a labeled statement.
+// A conditional break statement in a labeled statement.
 ////////////////////////////////////////////////////////////////////////////////
 
 /*member: _breakInIf:Union([exact=JSString], [exact=JSUInt31])*/
@@ -150,3 +152,34 @@
   _noBreakInIf(true);
   _noBreakInIf(false);
 }
+
+////////////////////////////////////////////////////////////////////////////////
+// An unconditional break statement in a labeled statement.
+////////////////////////////////////////////////////////////////////////////////
+
+/*member: breakInBlock:Value([exact=JSString], value: "")*/
+breakInBlock() {
+  dynamic local = 42;
+  label:
+  {
+    local = '';
+    break label;
+    local = false;
+  }
+  return local;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// The "labeled statement" above _without_ the break statement.
+////////////////////////////////////////////////////////////////////////////////
+
+/*member: noBreakInBlock:Value([exact=JSBool], value: false)*/
+noBreakInBlock() {
+  dynamic local = 42;
+  label:
+  {
+    local = '';
+    local = false;
+  }
+  return local;
+}
diff --git a/pkg/compiler/test/inference/data/general.dart b/pkg/compiler/test/inference/data/general.dart
index da299fc..db114da 100644
--- a/pkg/compiler/test/inference/data/general.dart
+++ b/pkg/compiler/test/inference/data/general.dart
@@ -560,13 +560,13 @@
   return a;
 }
 
-/*member: testDoWhile3:[exact=JSUInt31]*/
+/*member: testDoWhile3:Value([exact=JSBool], value: false)*/
 testDoWhile3() {
   dynamic a = 42;
   do {
     a = 'foo';
     if (true) continue;
-    return 42;
+    return false;
   } while (true);
   // ignore: dead_code
   return a;
diff --git a/pkg/compiler/test/inference/data/issue48304.dart b/pkg/compiler/test/inference/data/issue48304.dart
new file mode 100644
index 0000000..dc77fc3
--- /dev/null
+++ b/pkg/compiler/test/inference/data/issue48304.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.
+
+abstract class B {
+  call<T>();
+}
+
+/*member: C.:[exact=C]*/
+class C implements B {
+  /*member: C.call:[null]*/
+  call<T>() => print(T);
+}
+
+abstract class A {}
+
+class Wrapper {
+  /*member: Wrapper.:[exact=Wrapper]*/
+  Wrapper(this. /*[exact=C]*/ b, this. /*[exact=C]*/ call);
+  /*member: Wrapper.b:[exact=C]*/
+  final B b;
+  /*member: Wrapper.call:[exact=C]*/
+  final B call;
+}
+
+/*member: main:[null]*/
+void main() {
+  B b = C();
+  b/*invoke: [exact=C]*/ <A>();
+  Wrapper(b, b).b<A> /*invoke: [exact=Wrapper]*/ ();
+  (Wrapper(b, b). /*[exact=Wrapper]*/ b)<A> /*invoke: [exact=C]*/ ();
+  Wrapper(b, b).call<A> /*invoke: [exact=Wrapper]*/ ();
+  (Wrapper(b, b). /*[exact=Wrapper]*/ call)<A> /*invoke: [exact=C]*/ ();
+}
diff --git a/pkg/compiler/test/inference/load_deferred_library_test.dart b/pkg/compiler/test/inference/load_deferred_library_test.dart
index 8c6e15e..8596c41 100644
--- a/pkg/compiler/test/inference/load_deferred_library_test.dart
+++ b/pkg/compiler/test/inference/load_deferred_library_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/common/names.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
diff --git a/pkg/compiler/test/inference/powerset_bits2_test.dart b/pkg/compiler/test/inference/powerset_bits2_test.dart
index db5fe3d..de617b5 100644
--- a/pkg/compiler/test/inference/powerset_bits2_test.dart
+++ b/pkg/compiler/test/inference/powerset_bits2_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/inferrer/powersets/powersets.dart';
 import 'package:compiler/src/inferrer/powersets/powerset_bits.dart';
diff --git a/pkg/compiler/test/inference/type_combination_test.dart b/pkg/compiler/test/inference/type_combination_test.dart
index 0588216..0d371ed 100644
--- a/pkg/compiler/test/inference/type_combination_test.dart
+++ b/pkg/compiler/test/inference/type_combination_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/abstract_value_domain.dart';
diff --git a/pkg/compiler/test/inference/type_mask_disjoint_test.dart b/pkg/compiler/test/inference/type_mask_disjoint_test.dart
index 519770c..bff1090 100644
--- a/pkg/compiler/test/inference/type_mask_disjoint_test.dart
+++ b/pkg/compiler/test/inference/type_mask_disjoint_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/inferrer/abstract_value_domain.dart';
diff --git a/pkg/compiler/test/inference/type_mask_test.dart b/pkg/compiler/test/inference/type_mask_test.dart
index ea40214..2f5938d 100644
--- a/pkg/compiler/test/inference/type_mask_test.dart
+++ b/pkg/compiler/test/inference/type_mask_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/inferrer/abstract_value_domain.dart';
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
diff --git a/pkg/compiler/test/inlining/meta_annotations2_test.dart b/pkg/compiler/test/inlining/meta_annotations2_test.dart
index 8c3d0da..2c719cc 100644
--- a/pkg/compiler/test/inlining/meta_annotations2_test.dart
+++ b/pkg/compiler/test/inlining/meta_annotations2_test.dart
@@ -8,7 +8,7 @@
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
 import '../helpers/memory_compiler.dart';
 
diff --git a/pkg/compiler/test/inlining/meta_annotations3_test.dart b/pkg/compiler/test/inlining/meta_annotations3_test.dart
index ad71d47..ad42b08 100644
--- a/pkg/compiler/test/inlining/meta_annotations3_test.dart
+++ b/pkg/compiler/test/inlining/meta_annotations3_test.dart
@@ -8,7 +8,7 @@
 
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import '../helpers/memory_compiler.dart';
 
 const MEMORY_SOURCE_FILES = const {
diff --git a/pkg/compiler/test/inlining/meta_annotations_test.dart b/pkg/compiler/test/inlining/meta_annotations_test.dart
index 4d59a1d..e13070d 100644
--- a/pkg/compiler/test/inlining/meta_annotations_test.dart
+++ b/pkg/compiler/test/inlining/meta_annotations_test.dart
@@ -6,10 +6,10 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/world.dart' show KClosedWorld;
+import 'package:compiler/src/kernel/kernel_world.dart';
 import '../helpers/memory_compiler.dart';
 
 const Map<String, String> MEMORY_SOURCE_FILES = const {
diff --git a/pkg/compiler/test/jsinterop/internal_annotations_test.dart b/pkg/compiler/test/jsinterop/internal_annotations_test.dart
index 62deced..861aaf1 100644
--- a/pkg/compiler/test/jsinterop/internal_annotations_test.dart
+++ b/pkg/compiler/test/jsinterop/internal_annotations_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
 import 'package:compiler/src/elements/names.dart';
diff --git a/pkg/compiler/test/jsinterop/world_test.dart b/pkg/compiler/test/jsinterop/world_test.dart
index 230873f..e1294d9 100644
--- a/pkg/compiler/test/jsinterop/world_test.dart
+++ b/pkg/compiler/test/jsinterop/world_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
 import 'package:compiler/src/elements/names.dart';
diff --git a/pkg/compiler/test/member_usage/member_usage_test.dart b/pkg/compiler/test/member_usage/member_usage_test.dart
index ff367d6..0134f01 100644
--- a/pkg/compiler/test/member_usage/member_usage_test.dart
+++ b/pkg/compiler/test/member_usage/member_usage_test.dart
@@ -81,7 +81,7 @@
       Map<Id, ActualData<Features>> actualMap,
       {bool verbose: false}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    ResolutionWorldBuilderImpl resolutionWorldBuilder =
+    ResolutionWorldBuilder resolutionWorldBuilder =
         compiler.resolutionWorldBuilderForTesting;
     ir.Member node = frontendStrategy.elementMap.getMemberNode(member);
     Features features = new Features();
diff --git a/pkg/compiler/test/model/cfe_annotations_test.dart b/pkg/compiler/test/model/cfe_annotations_test.dart
index 9cb3b6e..76eb078 100644
--- a/pkg/compiler/test/model/cfe_annotations_test.dart
+++ b/pkg/compiler/test/model/cfe_annotations_test.dart
@@ -12,7 +12,6 @@
 import 'package:compiler/src/js_backend/native_data.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/kernel/element_map.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
 import 'package:expect/expect.dart';
 import 'package:front_end/src/api_prototype/lowering_predicates.dart';
 import 'package:kernel/ast.dart' as ir;
@@ -198,7 +197,7 @@
       Expect.isTrue(result.isSuccess);
       Compiler compiler = result.compiler;
       KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-      KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+      KernelToElementMap elementMap = frontendStrategy.elementMap;
       ir.Component component = elementMap.env.mainComponent;
       IrAnnotationData annotationData =
           frontendStrategy.irAnnotationDataForTesting;
@@ -351,7 +350,7 @@
         }
 
         for (ir.Library library in component.libraries) {
-          if (library.importUri.scheme == 'memory') {
+          if (library.importUri.isScheme('memory')) {
             String libraryId = library.importUri.path;
             LibraryEntity libraryEntity = elementMap.getLibrary(library);
 
@@ -456,7 +455,7 @@
         // in the IR component, and not just the ones queried specifically for
         // JS-interop and pragma-like annotations.
         elementMap.envIsClosed = false;
-        testAll(new NativeDataImpl.fromIr(elementMap, annotationData));
+        testAll(NativeData.fromIr(elementMap, annotationData));
       }
     }
 
diff --git a/pkg/compiler/test/model/cfe_constant_evaluation_test.dart b/pkg/compiler/test/model/cfe_constant_evaluation_test.dart
index 24c4a58..a3d52f9 100644
--- a/pkg/compiler/test/model/cfe_constant_evaluation_test.dart
+++ b/pkg/compiler/test/model/cfe_constant_evaluation_test.dart
@@ -10,16 +10,17 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/constants/values.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/indexed.dart';
 import 'package:compiler/src/elements/types.dart';
+import 'package:compiler/src/environment.dart';
 import 'package:compiler/src/ir/constants.dart';
 import 'package:compiler/src/ir/visitors.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/kernel/element_map.dart';
 import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
 import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
 import 'package:kernel/ast.dart' as ir;
@@ -573,7 +574,7 @@
         options: [Flags.enableAsserts]);
     Compiler compiler = result.compiler;
     KernelFrontendStrategy frontEndStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontEndStrategy.elementMap;
+    KernelToElementMap elementMap = frontEndStrategy.elementMap;
     DartTypes dartTypes = elementMap.types;
     ir.TypeEnvironment typeEnvironment = elementMap.typeEnvironment;
     KElementEnvironment elementEnvironment =
@@ -606,7 +607,7 @@
             errors.add(context.first.code.name);
             reportLocatedMessage(elementMap.reporter, message, context);
           },
-              environment: environment,
+              environment: Environment(environment),
               supportReevaluationForTesting: true,
               evaluationMode: compiler.options.useLegacySubtyping
                   ? ir.EvaluationMode.weak
diff --git a/pkg/compiler/test/model/cfe_constant_test.dart b/pkg/compiler/test/model/cfe_constant_test.dart
index d9dfbf0..d4ab111 100644
--- a/pkg/compiler/test/model/cfe_constant_test.dart
+++ b/pkg/compiler/test/model/cfe_constant_test.dart
@@ -9,7 +9,7 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
@@ -31,7 +31,7 @@
 class ConstantDataComputer extends DataComputer<String> {
   ir.TypeEnvironment _typeEnvironment;
 
-  ir.TypeEnvironment getTypeEnvironment(KernelToElementMapImpl elementMap) {
+  ir.TypeEnvironment getTypeEnvironment(KernelToElementMap elementMap) {
     if (_typeEnvironment == null) {
       ir.Component component = elementMap.env.mainComponent;
       ir.CoreTypes coreTypes = new ir.CoreTypes(component);
@@ -49,7 +49,7 @@
       Map<Id, ActualData<String>> actualMap,
       {bool verbose: false}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     ir.Member node = elementMap.getMemberNode(member);
     new ConstantDataExtractor(compiler.reporter, actualMap, elementMap, member)
         .run(node);
@@ -73,7 +73,7 @@
 
 /// IR visitor for computing inference data for a member.
 class ConstantDataExtractor extends IrDataExtractor<String> {
-  final KernelToElementMapImpl elementMap;
+  final KernelToElementMap elementMap;
   final MemberEntity member;
 
   ConstantDataExtractor(DiagnosticReporter reporter,
diff --git a/pkg/compiler/test/model/class_set_test.dart b/pkg/compiler/test/model/class_set_test.dart
index fd8526e..31e538e 100644
--- a/pkg/compiler/test/model/class_set_test.dart
+++ b/pkg/compiler/test/model/class_set_test.dart
@@ -11,6 +11,7 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart' show ClassEntity;
+import 'package:compiler/src/kernel/kernel_world.dart';
 import 'package:compiler/src/universe/class_set.dart';
 import 'package:compiler/src/util/enumset.dart';
 import 'package:compiler/src/world.dart';
diff --git a/pkg/compiler/test/model/constant_value_test.dart b/pkg/compiler/test/model/constant_value_test.dart
index 9822945..c289332 100644
--- a/pkg/compiler/test/model/constant_value_test.dart
+++ b/pkg/compiler/test/model/constant_value_test.dart
@@ -8,14 +8,14 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'package:compiler/src/helpers/helpers.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/constants/values.dart';
+import 'package:compiler/src/diagnostics/invariant.dart' show DEBUG_MODE;
 import '../helpers/type_test_helper.dart';
 
 void main() {
-  enableDebugMode();
+  DEBUG_MODE = true;
 
   asyncTest(() async {
     TypeEnvironment env = await TypeEnvironment.create("""
diff --git a/pkg/compiler/test/model/enqueuer_test.dart b/pkg/compiler/test/model/enqueuer_test.dart
index 9102ac5..d6a2ac6 100644
--- a/pkg/compiler/test/model/enqueuer_test.dart
+++ b/pkg/compiler/test/model/enqueuer_test.dart
@@ -10,7 +10,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/names.dart';
 import 'package:compiler/src/elements/types.dart';
@@ -164,7 +164,7 @@
   void checkInvariant(
       Enqueuer enqueuer, ElementEnvironment elementEnvironment) {
     for (MemberEntity member
-        in compiler.enqueuer.resolutionEnqueuerForTesting.processedEntities) {
+        in compiler.resolutionEnqueuerForTesting.processedEntities) {
       Expect.isTrue(
           member == elementEnvironment.mainFunction ||
               member.library != elementEnvironment.mainLibrary,
@@ -247,7 +247,7 @@
   }
 
   compiler.onResolutionQueueEmptyForTesting = () {
-    Enqueuer enqueuer = compiler.enqueuer.resolutionEnqueuerForTesting;
+    Enqueuer enqueuer = compiler.resolutionEnqueuerForTesting;
     ElementEnvironment elementEnvironment =
         compiler.frontendStrategy.elementEnvironment;
     checkInvariant(enqueuer, elementEnvironment);
@@ -262,7 +262,7 @@
     }
   };
   compiler.onCodegenQueueEmptyForTesting = () {
-    Enqueuer enqueuer = compiler.enqueuer.codegenEnqueuerForTesting;
+    Enqueuer enqueuer = compiler.codegenEnqueuerForTesting;
     JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
     ElementEnvironment elementEnvironment =
         compiler.backendClosedWorldForTesting.elementEnvironment;
@@ -280,12 +280,12 @@
   await compiler.run();
 
   checkLiveMembers(
-      compiler.enqueuer.resolutionEnqueuerForTesting,
+      compiler.resolutionEnqueuerForTesting,
       compiler.frontendStrategy.elementEnvironment,
       test.expectedLiveResolutionMap);
 
   checkLiveMembers(
-      compiler.enqueuer.codegenEnqueuerForTesting,
+      compiler.codegenEnqueuerForTesting,
       compiler.backendClosedWorldForTesting.elementEnvironment,
       test.expectedLiveCodegenMap);
 }
diff --git a/pkg/compiler/test/model/forwarding_stub_test.dart b/pkg/compiler/test/model/forwarding_stub_test.dart
index 0035c58..921e3ca 100644
--- a/pkg/compiler/test/model/forwarding_stub_test.dart
+++ b/pkg/compiler/test/model/forwarding_stub_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/world.dart';
diff --git a/pkg/compiler/test/model/native_test.dart b/pkg/compiler/test/model/native_test.dart
index ed2e47f..4ce0a28 100644
--- a/pkg/compiler/test/model/native_test.dart
+++ b/pkg/compiler/test/model/native_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
diff --git a/pkg/compiler/test/model/no_such_method_enabled_test.dart b/pkg/compiler/test/model/no_such_method_enabled_test.dart
index df08980..1a24bd8 100644
--- a/pkg/compiler/test/model/no_such_method_enabled_test.dart
+++ b/pkg/compiler/test/model/no_such_method_enabled_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/no_such_method_registry.dart';
@@ -257,14 +257,14 @@
 checkTest(Compiler compiler, NoSuchMethodTest test) {
   ElementEnvironment frontendEnvironment =
       compiler.frontendStrategy.elementEnvironment;
-  NoSuchMethodRegistryImpl registry =
+  NoSuchMethodRegistry registry =
       compiler.frontendStrategy.noSuchMethodRegistry;
-  NoSuchMethodResolver resolver = registry.internalResolverForTesting;
+  var resolver = registry.internalResolverForTesting;
   FunctionEntity ObjectNSM = frontendEnvironment.lookupClassMember(
       compiler.frontendStrategy.commonElements.objectClass, 'noSuchMethod');
   JClosedWorld backendClosedWorld = compiler.backendClosedWorldForTesting;
   ElementEnvironment backendEnvironment = backendClosedWorld.elementEnvironment;
-  NoSuchMethodDataImpl data = backendClosedWorld.noSuchMethodData;
+  NoSuchMethodData data = backendClosedWorld.noSuchMethodData;
 
   // Test [NoSuchMethodResolver] results for each method.
   for (NoSuchMethodInfo info in test.methods) {
diff --git a/pkg/compiler/test/model/open_world_test.dart b/pkg/compiler/test/model/open_world_test.dart
index 49c37fb..d098a5d 100644
--- a/pkg/compiler/test/model/open_world_test.dart
+++ b/pkg/compiler/test/model/open_world_test.dart
@@ -7,7 +7,7 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/ir/static_type.dart';
 import 'package:compiler/src/js_backend/native_data.dart';
@@ -52,7 +52,7 @@
 
   CommonElements commonElements;
   NativeBasicData nativeBasicData;
-  ResolutionWorldBuilderImpl world;
+  ResolutionWorldBuilder world;
 
   List<ClassEntity> allClasses;
 
diff --git a/pkg/compiler/test/model/receiver_type_test.dart b/pkg/compiler/test/model/receiver_type_test.dart
index d7567dc..7c73276 100644
--- a/pkg/compiler/test/model/receiver_type_test.dart
+++ b/pkg/compiler/test/model/receiver_type_test.dart
@@ -52,7 +52,7 @@
   Selector callSelector = new Selector.callClosure(0);
   closedWorld.classHierarchy.forEachStrictSubclassOf(
       closedWorld.commonElements.objectClass, (ClassEntity cls) {
-    if (cls.library.canonicalUri.scheme != 'memory')
+    if (!cls.library.canonicalUri.isScheme('memory'))
       return IterationStep.CONTINUE;
 
     TypeMask mask = new TypeMask.nonNullSubclass(cls, closedWorld);
diff --git a/pkg/compiler/test/model/strong_mode_closed_world_test.dart b/pkg/compiler/test/model/strong_mode_closed_world_test.dart
index ba41687..2b66300 100644
--- a/pkg/compiler/test/model/strong_mode_closed_world_test.dart
+++ b/pkg/compiler/test/model/strong_mode_closed_world_test.dart
@@ -7,9 +7,9 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/world.dart';
+import 'package:compiler/src/kernel/kernel_world.dart';
 import '../helpers/memory_compiler.dart';
 
 main() {
diff --git a/pkg/compiler/test/model/strong_mode_impact_test.dart b/pkg/compiler/test/model/strong_mode_impact_test.dart
index 6daea56..558f0af 100644
--- a/pkg/compiler/test/model/strong_mode_impact_test.dart
+++ b/pkg/compiler/test/model/strong_mode_impact_test.dart
@@ -9,10 +9,10 @@
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
-import 'package:compiler/src/world.dart';
+import 'package:compiler/src/kernel/kernel_world.dart';
 import 'package:compiler/src/universe/use.dart';
 import 'package:compiler/src/universe/world_impact.dart';
 import '../helpers/memory_compiler.dart';
diff --git a/pkg/compiler/test/model/subtypeset_test.dart b/pkg/compiler/test/model/subtypeset_test.dart
index f16f4c9..dca3abe 100644
--- a/pkg/compiler/test/model/subtypeset_test.dart
+++ b/pkg/compiler/test/model/subtypeset_test.dart
@@ -11,8 +11,8 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/kernel/kernel_world.dart';
 import 'package:compiler/src/universe/class_set.dart';
-import 'package:compiler/src/world.dart';
 import '../helpers/type_test_helper.dart';
 
 void main() {
diff --git a/pkg/compiler/test/model/supermixin_test.dart b/pkg/compiler/test/model/supermixin_test.dart
index e347d70..b7b0ada 100644
--- a/pkg/compiler/test/model/supermixin_test.dart
+++ b/pkg/compiler/test/model/supermixin_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:expect/expect.dart';
 import '../helpers/program_lookup.dart';
diff --git a/pkg/compiler/test/model/type_substitution_test.dart b/pkg/compiler/test/model/type_substitution_test.dart
index ff3aae1..d648263 100644
--- a/pkg/compiler/test/model/type_substitution_test.dart
+++ b/pkg/compiler/test/model/type_substitution_test.dart
@@ -9,7 +9,7 @@
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import '../helpers/type_test_helper.dart';
diff --git a/pkg/compiler/test/model/world_test.dart b/pkg/compiler/test/model/world_test.dart
index bf49a4f..ce5f4cc 100644
--- a/pkg/compiler/test/model/world_test.dart
+++ b/pkg/compiler/test/model/world_test.dart
@@ -8,8 +8,8 @@
 
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/common/names.dart';
-import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/universe/class_hierarchy.dart';
 import 'package:compiler/src/universe/class_set.dart';
diff --git a/pkg/compiler/test/rti/data/as.dart b/pkg/compiler/test/rti/data/as.dart
index 0c2c5da..5daeea2 100644
--- a/pkg/compiler/test/rti/data/as.dart
+++ b/pkg/compiler/test/rti/data/as.dart
@@ -6,7 +6,7 @@
 
 // Derived from tests/web_2/generic_type_error_message_test.
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: Foo:*/
 class Foo<T extends num> {}
@@ -30,7 +30,7 @@
 void test(dynamic object, Type type, {bool expectTypeArguments}) {
   bool caught = false;
   try {
-    print(type);
+    makeLive(type);
     object as List<String>;
   } catch (e) {
     String expected = '$type';
@@ -38,10 +38,9 @@
       expected = expected.substring(0, expected.indexOf('<'));
     }
     expected = "'$expected'";
-    Expect.isTrue(e.toString().contains(expected),
-        'Expected "$expected" in the message: $e');
+    makeLive(e.toString().contains(expected));
     caught = true;
-    print(e);
+    makeLive(e);
   }
-  Expect.isTrue(caught);
+  makeLive(caught);
 }
diff --git a/pkg/compiler/test/rti/data/async_foreach.dart b/pkg/compiler/test/rti/data/async_foreach.dart
index 2aa3f8a..1a14bd2 100644
--- a/pkg/compiler/test/rti/data/async_foreach.dart
+++ b/pkg/compiler/test/rti/data/async_foreach.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class:direct,explicit=[Class.T*],implicit=[Class.T],needsArgs*/
 /*prod.class: Class:needsArgs*/
 class Class<T> {
@@ -17,7 +19,7 @@
     // async.errorHandler callback.
     list.forEach(
         /*needsSignature*/
-        (x) => print(x));
+        (x) => makeLive(x));
   }
 }
 
diff --git a/pkg/compiler/test/rti/data/async_foreach_nonasync.dart b/pkg/compiler/test/rti/data/async_foreach_nonasync.dart
index 36ce830..0cb5ac1 100644
--- a/pkg/compiler/test/rti/data/async_foreach_nonasync.dart
+++ b/pkg/compiler/test/rti/data/async_foreach_nonasync.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class:direct,explicit=[Class.T*],implicit=[Class.T],needsArgs*/
 class Class<T> {
   method() {
@@ -12,7 +14,7 @@
     // arguments on `Class`. See the 'async_foreach.dart' test.
     list.forEach(
         /*spec.needsSignature*/
-        (x) => print(x));
+        (x) => makeLive(x));
   }
 }
 
diff --git a/pkg/compiler/test/rti/data/call_typed.dart b/pkg/compiler/test/rti/data/call_typed.dart
index 720048e..249fd21 100644
--- a/pkg/compiler/test/rti/data/call_typed.dart
+++ b/pkg/compiler/test/rti/data/call_typed.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class A {
   call(int i) {}
@@ -14,6 +14,6 @@
 test(o) => o is Function(int);
 
 main() {
-  Expect.isFalse(test(new A()));
-  Expect.isFalse(test(null));
+  makeLive(test(new A()));
+  makeLive(test(null));
 }
diff --git a/pkg/compiler/test/rti/data/call_typed_generic.dart b/pkg/compiler/test/rti/data/call_typed_generic.dart
index bf70f5f..cc7b472 100644
--- a/pkg/compiler/test/rti/data/call_typed_generic.dart
+++ b/pkg/compiler/test/rti/data/call_typed_generic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: A:direct,explicit=[A.T*],needsArgs*/
 class A<T> {
@@ -15,7 +15,7 @@
 test(o) => o is Function(int);
 
 main() {
-  Expect.isFalse(test(new A<int>()));
-  Expect.isFalse(test(new A<String>()));
+  makeLive(test(new A<int>()));
+  makeLive(test(new A<String>()));
   new A().call(null); // Use .call to ensure it is live.
 }
diff --git a/pkg/compiler/test/rti/data/function_subtype_local5.dart b/pkg/compiler/test/rti/data/function_subtype_local5.dart
index 9d8459d..bf14939 100644
--- a/pkg/compiler/test/rti/data/function_subtype_local5.dart
+++ b/pkg/compiler/test/rti/data/function_subtype_local5.dart
@@ -3,13 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // @dart = 2.7
+
+import 'package:compiler/src/util/testing.dart';
+
 // Dart test program for constructors and initializers.
 
 // Check function subtyping for local functions on generic type against generic
 // typedefs.
 
-import 'package:expect/expect.dart';
-
 typedef int Foo<T>(T a, [String b]);
 typedef int Bar<T>(T a, [String b]);
 typedef int Baz<T>(T a, {String b});
@@ -27,17 +28,17 @@
     /*needsSignature*/
     int baz(bool a, {String b}) => null;
 
-    Expect.equals(expectedResult, foo is Foo<T>, 'foo is Foo<$nameOfT>');
-    Expect.equals(expectedResult, foo is Bar<T>, 'foo is Bar<$nameOfT>');
-    Expect.isFalse(foo is Baz<T>, 'foo is Baz<$nameOfT>');
-    Expect.equals(expectedResult, foo is Boz<T>, 'foo is Boz<$nameOfT>');
-    Expect.isFalse(foo is Biz<T>, 'foo is Biz<$nameOfT>');
+    makeLive(expectedResult == foo is Foo<T>);
+    makeLive(expectedResult == foo is Bar<T>);
+    makeLive(foo is Baz<T>);
+    makeLive(expectedResult == foo is Boz<T>);
+    makeLive(foo is Biz<T>);
 
-    Expect.isFalse(baz is Foo<T>, 'baz is Foo<$nameOfT>');
-    Expect.isFalse(baz is Bar<T>, 'baz is Bar<$nameOfT>');
-    Expect.equals(expectedResult, baz is Baz<T>, 'baz is Baz<$nameOfT>');
-    Expect.equals(expectedResult, baz is Boz<T>, 'baz is Boz<$nameOfT>');
-    Expect.isFalse(baz is Biz<T>, 'bar is Biz<$nameOfT>');
+    makeLive(baz is Foo<T>);
+    makeLive(baz is Bar<T>);
+    makeLive(expectedResult == baz is Baz<T>);
+    makeLive(expectedResult == baz is Boz<T>);
+    makeLive(baz is Biz<T>);
   }
 }
 
diff --git a/pkg/compiler/test/rti/data/generic_bounds.dart b/pkg/compiler/test/rti/data/generic_bounds.dart
index 4693b39..ef3e3f5 100644
--- a/pkg/compiler/test/rti/data/generic_bounds.dart
+++ b/pkg/compiler/test/rti/data/generic_bounds.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: Class1a:explicit=[Class1a*]*/
 class Class1a {}
@@ -41,15 +41,15 @@
 method10<T extends Class4>() => null;
 
 main() {
-  /*needsArgs,needsSignature,selectors=[Selector(call, call, arity=0, types=1)]*/
+  /*spec.needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+  /*prod.*/
   method7<T extends Class1a>() => null;
 
-  /*needsArgs,needsSignature,selectors=[Selector(call, call, arity=0, types=1)]*/
+  /*spec.needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+  /*prod.*/
   method8<T extends Class2a<num>>() => null;
 
-  /*needsArgs,needsSignature,selectors=[Selector(call, call, arity=0, types=1)]*/ method9<
-          T>() =>
-      null;
+  /**/ method9<T>() => null;
 
   dynamic f1 = method1;
   dynamic f2 = method2;
@@ -69,21 +69,13 @@
   f8<Class2b<int>>();
   f9<int>();
 
-  if (typeAssertionsEnabled) {
-    Expect.throws(/*needsSignature*/ () => f1<Class2a<num>>());
-    Expect.throws(/*needsSignature*/ () => f2<Class2b<String>>());
-    Expect.throws(/*needsSignature*/ () => c3.method4<Class2a<num>>());
-    Expect.throws(/*needsSignature*/ () => c3.method5<Class2b<String>>());
-    Expect.throws(/*needsSignature*/ () => f7<Class2a<num>>());
-    Expect.throws(/*needsSignature*/ () => f8<Class2b<String>>());
-  } else {
-    f1<Class2a<num>>();
-    f2<Class2b<String>>();
-    c3.method4<Class2a<num>>();
-    c3.method5<Class2b<String>>();
-    f7<Class2a<num>>();
-    f8<Class2b<String>>();
-  }
+  makeLive(/**/ () => f1<Class2a<num>>());
+  makeLive(/**/ () => f2<Class2b<String>>());
+  makeLive(/**/ () => c3.method4<Class2a<num>>());
+  makeLive(
+      /**/ () => c3.method5<Class2b<String>>());
+  makeLive(/**/ () => f7<Class2a<num>>());
+  makeLive(/**/ () => f8<Class2b<String>>());
 
   method10();
 }
diff --git a/pkg/compiler/test/rti/data/generic_class_is2.dart b/pkg/compiler/test/rti/data/generic_class_is2.dart
index 9b121f0..2703f47 100644
--- a/pkg/compiler/test/rti/data/generic_class_is2.dart
+++ b/pkg/compiler/test/rti/data/generic_class_is2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:implicit=[List<A<C*>*>,List<A<C2*>*>]*/
 class A<T> {}
@@ -27,6 +27,6 @@
 class C2 implements C {}
 
 main() {
-  Expect.isTrue(new B<List<A<C>>>().method(new List<A1>()));
-  Expect.isFalse(new B<List<A<C2>>>().method(new List<A1>()));
+  makeLive(new B<List<A<C>>>().method(new List<A1>()));
+  makeLive(new B<List<A<C2>>>().method(new List<A1>()));
 }
diff --git a/pkg/compiler/test/rti/data/generic_creation.dart b/pkg/compiler/test/rti/data/generic_creation.dart
index 2125b27..5c7ba40 100644
--- a/pkg/compiler/test/rti/data/generic_creation.dart
+++ b/pkg/compiler/test/rti/data/generic_creation.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:needsArgs*/
 
@@ -36,7 +36,7 @@
 
 class W {}
 
-sameType(a, b) => Expect.equals(a.runtimeType, b.runtimeType);
+sameType(a, b) => makeLive(a.runtimeType == b.runtimeType);
 
 main() {
   A a = new A<U, V, W>();
diff --git a/pkg/compiler/test/rti/data/generic_method1.dart b/pkg/compiler/test/rti/data/generic_method1.dart
index bc43b59..f0f6f81 100644
--- a/pkg/compiler/test/rti/data/generic_method1.dart
+++ b/pkg/compiler/test/rti/data/generic_method1.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:deps=[method2],direct,explicit=[A.T*],needsArgs*/
 class A<T> {
@@ -36,6 +36,6 @@
 }
 
 main() {
-  Expect.isTrue(method1<BB>());
-  Expect.isFalse(method1<String>());
+  makeLive(method1<BB>());
+  makeLive(method1<String>());
 }
diff --git a/pkg/compiler/test/rti/data/generic_method2.dart b/pkg/compiler/test/rti/data/generic_method2.dart
index d522565..9fc5d87 100644
--- a/pkg/compiler/test/rti/data/generic_method2.dart
+++ b/pkg/compiler/test/rti/data/generic_method2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:deps=[B],direct,explicit=[A.T*],needsArgs*/
 class A<T> {
@@ -32,6 +32,6 @@
 }
 
 main() {
-  Expect.isTrue(method1<BB>());
-  Expect.isFalse(method1<String>());
+  makeLive(method1<BB>());
+  makeLive(method1<String>());
 }
diff --git a/pkg/compiler/test/rti/data/generic_method3.dart b/pkg/compiler/test/rti/data/generic_method3.dart
index affff5e..2bc69b6 100644
--- a/pkg/compiler/test/rti/data/generic_method3.dart
+++ b/pkg/compiler/test/rti/data/generic_method3.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:deps=[method2],direct,explicit=[A.T*],needsArgs*/
 class A<T> {
@@ -30,6 +30,6 @@
 }
 
 main() {
-  Expect.isTrue(new B<BB>().foo());
-  Expect.isFalse(new B<String>().foo());
+  makeLive(new B<BB>().foo());
+  makeLive(new B<String>().foo());
 }
diff --git a/pkg/compiler/test/rti/data/generic_method4.dart b/pkg/compiler/test/rti/data/generic_method4.dart
index 645530a..d1b48b4 100644
--- a/pkg/compiler/test/rti/data/generic_method4.dart
+++ b/pkg/compiler/test/rti/data/generic_method4.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:deps=[C.method2],direct,explicit=[A.T*],needsArgs*/
 class A<T> {
@@ -39,6 +39,6 @@
 
 main() {
   var c = new C();
-  Expect.isTrue(c.method1<BB>());
-  Expect.isFalse(c.method1<String>());
+  makeLive(c.method1<BB>());
+  makeLive(c.method1<String>());
 }
diff --git a/pkg/compiler/test/rti/data/generic_method_tearoff.dart b/pkg/compiler/test/rti/data/generic_method_tearoff.dart
index 5fff48f..2cd8f5e 100644
--- a/pkg/compiler/test/rti/data/generic_method_tearoff.dart
+++ b/pkg/compiler/test/rti/data/generic_method_tearoff.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 T method1a<T>() => null;
 T method1b<T>() => null;
 
@@ -20,5 +22,5 @@
   c.method2a();
   T Function<T>() f2 = c.method2b;
 
-  print(f1.runtimeType == f2.runtimeType);
+  makeLive(f1.runtimeType == f2.runtimeType);
 }
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 8b4ebb0..051894e 100644
--- a/pkg/compiler/test/rti/data/generic_methods_dynamic_05.dart
+++ b/pkg/compiler/test/rti/data/generic_methods_dynamic_05.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 // 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*/
@@ -11,8 +13,6 @@
 /*spec.class: global#List:deps=[C.bar,JSArray.markFixedList],explicit=[List,List<B*>*,List<Object>,List<String>?,List<markFixedList.T>],indirect,needsArgs*/
 /*prod.class: global#List:deps=[C.bar],explicit=[List<B*>*],needsArgs*/
 
-import "package:expect/expect.dart";
-
 class A {}
 
 /*spec.class: B:explicit=[List<B*>*],implicit=[B]*/
@@ -28,5 +28,5 @@
 main() {
   C c = new C();
   dynamic x = c.bar<B>(<B>[new B()]);
-  Expect.isTrue(x is List<B>);
+  makeLive(x is List<B>);
 }
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 d06db8d..3226063 100644
--- a/pkg/compiler/test/rti/data/generic_methods_dynamic_05a.dart
+++ b/pkg/compiler/test/rti/data/generic_methods_dynamic_05a.dart
@@ -4,9 +4,9 @@
 
 // @dart = 2.7
 
-// Reduced version of generic_methods_dynamic_05a_strong.
+import 'package:compiler/src/util/testing.dart';
 
-import "package:expect/expect.dart";
+// Reduced version of generic_methods_dynamic_05a_strong.
 
 /*spec.class: A:deps=[C.bar],direct,explicit=[A.T*,A<B*>*,A<bar.T*>*],needsArgs*/
 /*prod.class: A:deps=[C.bar],explicit=[A<B*>*],needsArgs*/
@@ -30,5 +30,5 @@
   C c = new C();
 
   dynamic x = c.bar<B>(new A<B>(new B()));
-  Expect.isTrue(x is A<B>);
+  makeLive(x is A<B>);
 }
diff --git a/pkg/compiler/test/rti/data/indirect_type_literal.dart b/pkg/compiler/test/rti/data/indirect_type_literal.dart
index 087d10f..a1a22cc 100644
--- a/pkg/compiler/test/rti/data/indirect_type_literal.dart
+++ b/pkg/compiler/test/rti/data/indirect_type_literal.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import 'package:compiler/src/util/testing.dart';
 
 class A<T> {}
 
@@ -16,10 +16,10 @@
 }
 
 void main() {
-  Expect.equals(A, new Indirect<A>().type);
-  Expect.equals(A, new Indirect<A<dynamic>>().type);
-  Expect.notEquals(A, new Indirect<A<num>>().type);
-  Expect.equals(B, new Indirect<B>().type);
-  Expect.equals(B, new Indirect<B<num>>().type);
-  Expect.notEquals(B, new Indirect<B<int>>().type);
+  makeLive(A == new Indirect<A>().type);
+  makeLive(A == new Indirect<A<dynamic>>().type);
+  makeLive(A == new Indirect<A<num>>().type);
+  makeLive(B == new Indirect<B>().type);
+  makeLive(B == new Indirect<B<num>>().type);
+  makeLive(B == new Indirect<B<int>>().type);
 }
diff --git a/pkg/compiler/test/rti/data/issue48304.dart b/pkg/compiler/test/rti/data/issue48304.dart
new file mode 100644
index 0000000..dfb51be
--- /dev/null
+++ b/pkg/compiler/test/rti/data/issue48304.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.
+
+/*spec.class: B:explicit=[B]*/
+abstract class B {
+  call<T>();
+}
+
+class C implements B {
+  /*member: C.call:exp,needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+  call<T>() => print(T);
+}
+
+abstract class A {}
+
+class Wrapper {
+  Wrapper(this.b, this.call);
+  final B b;
+  final B call;
+}
+
+void main() {
+  B b = C();
+  b<A>();
+  Wrapper(b, b).b<A>();
+  (Wrapper(b, b).b)<A>();
+  Wrapper(b, b).call<A>();
+  (Wrapper(b, b).call)<A>();
+}
diff --git a/pkg/compiler/test/rti/data/local_function_generic.dart b/pkg/compiler/test/rti/data/local_function_generic.dart
index 2a08e7c..80892aa 100644
--- a/pkg/compiler/test/rti/data/local_function_generic.dart
+++ b/pkg/compiler/test/rti/data/local_function_generic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 method1() {
   /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
@@ -17,5 +17,5 @@
 test(o) => o is S Function<S>(S);
 
 main() {
-  Expect.isTrue(test(method1()));
+  makeLive(test(method1()));
 }
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 9fd1e90..3de5b69 100644
--- a/pkg/compiler/test/rti/data/local_function_list_literal.dart
+++ b/pkg/compiler/test/rti/data/local_function_list_literal.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+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*/
 /*prod.class: global#JSArray:deps=[List],needsArgs*/
@@ -13,13 +13,13 @@
 /*spec.member: method:implicit=[method.T],indirect,needsArgs*/
 /*prod.member: method:needsArgs*/
 method<T>() {
-  return () => <T>[];
+  return /*spec.*/ () => <T>[];
 }
 
 @pragma('dart2js:noInline')
 test(o) => o is List<int>;
 
 main() {
-  Expect.isTrue(test(method<int>().call()));
-  Expect.isFalse(test(method<String>().call()));
+  makeLive(test(method<int>().call()));
+  makeLive(test(method<String>().call()));
 }
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 851d076..a0dca5f 100644
--- a/pkg/compiler/test/rti/data/local_function_map_literal.dart
+++ b/pkg/compiler/test/rti/data/local_function_map_literal.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+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*/
 /*prod.class: global#LinkedHashMap:deps=[Map],needsArgs*/
@@ -20,6 +20,6 @@
 test(o) => o is Map<int, int>;
 
 main() {
-  Expect.isTrue(test(method<int>().call()));
-  Expect.isFalse(test(method<String>().call()));
+  makeLive(test(method<int>().call()));
+  makeLive(test(method<String>().call()));
 }
diff --git a/pkg/compiler/test/rti/data/local_function_signature2.dart b/pkg/compiler/test/rti/data/local_function_signature2.dart
index 0df4990..06bcb64 100644
--- a/pkg/compiler/test/rti/data/local_function_signature2.dart
+++ b/pkg/compiler/test/rti/data/local_function_signature2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1 {
   method1() {
@@ -94,16 +94,16 @@
 test(o) => o is num Function(num);
 
 main() {
-  Expect.isFalse(test(new Class1().method1()));
-  Expect.isFalse(test(new Class1().method2()));
-  Expect.isFalse(test(new Class1().method3()));
-  Expect.isTrue(test(new Class2().method4<num>()));
-  Expect.isTrue(test(new Class3().method5<num>()));
-  Expect.isFalse(test(new Class4().method6<num>()));
-  Expect.isTrue(test(method7<num>()));
-  Expect.isTrue(test(method8<num>()));
-  Expect.isFalse(test(method9()));
-  Expect.isFalse(test(method10()));
-  Expect.isFalse(test(method11()));
-  Expect.isFalse(test(method12()));
+  makeLive(test(new Class1().method1()));
+  makeLive(test(new Class1().method2()));
+  makeLive(test(new Class1().method3()));
+  makeLive(test(new Class2().method4<num>()));
+  makeLive(test(new Class3().method5<num>()));
+  makeLive(test(new Class4().method6<num>()));
+  makeLive(test(method7<num>()));
+  makeLive(test(method8<num>()));
+  makeLive(test(method9()));
+  makeLive(test(method10()));
+  makeLive(test(method11()));
+  makeLive(test(method12()));
 }
diff --git a/pkg/compiler/test/rti/data/local_function_signatures.dart b/pkg/compiler/test/rti/data/local_function_signatures.dart
index 9a901bd..ad97152 100644
--- a/pkg/compiler/test/rti/data/local_function_signatures.dart
+++ b/pkg/compiler/test/rti/data/local_function_signatures.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1 {
   method1() {
@@ -56,10 +56,10 @@
 test(o) => o is num Function(num);
 
 main() {
-  Expect.isTrue(test(new Class1().method1()));
-  Expect.isFalse(test(new Class1().method2()));
-  Expect.isFalse(test(new Class1().method3()));
-  Expect.isTrue(test(new Class2<num>().method4()));
-  Expect.isTrue(test(new Class3<num>().method5()));
-  Expect.isFalse(test(new Class4<num>().method6()));
+  makeLive(test(new Class1().method1()));
+  makeLive(test(new Class1().method2()));
+  makeLive(test(new Class1().method3()));
+  makeLive(test(new Class2<num>().method4()));
+  makeLive(test(new Class3<num>().method5()));
+  makeLive(test(new Class4<num>().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 38f07cb..fa0d44f 100644
--- a/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
+++ b/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1 {
   method1() {
@@ -118,19 +118,19 @@
 test(o) => o is num Function(num);
 
 main() {
-  Expect.isFalse(test(new Class1().method1()));
-  Expect.isFalse(test(new Class1().method2()));
-  Expect.isFalse(test(new Class1().method3()));
-  Expect.isTrue(test(new Class2().method4<num>()));
-  Expect.isTrue(test(new Class3().method5<num>()));
-  Expect.isFalse(test(new Class4().method6<num>()));
-  Expect.isTrue(test(method7<num>()));
-  Expect.isTrue(test(method8<num>()));
-  Expect.isFalse(test(method9()));
-  Expect.isFalse(test(method10()));
-  Expect.isFalse(test(method11()));
-  Expect.isFalse(test(method12()));
-  Expect.isTrue(test(method13()));
-  Expect.isTrue(test(method14()));
-  Expect.isTrue(test(method15()));
+  makeLive(test(new Class1().method1()));
+  makeLive(test(new Class1().method2()));
+  makeLive(test(new Class1().method3()));
+  makeLive(test(new Class2().method4<num>()));
+  makeLive(test(new Class3().method5<num>()));
+  makeLive(test(new Class4().method6<num>()));
+  makeLive(test(method7<num>()));
+  makeLive(test(method8<num>()));
+  makeLive(test(method9()));
+  makeLive(test(method10()));
+  makeLive(test(method11()));
+  makeLive(test(method12()));
+  makeLive(test(method13()));
+  makeLive(test(method14()));
+  makeLive(test(method15()));
 }
diff --git a/pkg/compiler/test/rti/data/method_signatures.dart b/pkg/compiler/test/rti/data/method_signatures.dart
index 0c86bc1..93ab6d2 100644
--- a/pkg/compiler/test/rti/data/method_signatures.dart
+++ b/pkg/compiler/test/rti/data/method_signatures.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1 {
   /*member: Class1.method1:*/
@@ -47,13 +47,13 @@
 test(o) => o is num Function(num);
 
 main() {
-  Expect.isTrue(test(new Class1().method1));
-  Expect.isFalse(test(new Class1().method2));
-  Expect.isFalse(test(new Class1().method3));
-  Expect.isTrue(test(new Class2<num>().method4));
-  Expect.isTrue(test(new Class3<num>().method5));
-  Expect.isFalse(test(new Class4<num>().method6));
-  Expect.isTrue(test(method7));
-  Expect.isFalse(test(method8));
-  Expect.isFalse(test(method9));
+  makeLive(test(new Class1().method1));
+  makeLive(test(new Class1().method2));
+  makeLive(test(new Class1().method3));
+  makeLive(test(new Class2<num>().method4));
+  makeLive(test(new Class3<num>().method5));
+  makeLive(test(new Class4<num>().method6));
+  makeLive(test(method7));
+  makeLive(test(method8));
+  makeLive(test(method9));
 }
diff --git a/pkg/compiler/test/rti/data/method_signatures_generic.dart b/pkg/compiler/test/rti/data/method_signatures_generic.dart
index b7e0859..96dd598 100644
--- a/pkg/compiler/test/rti/data/method_signatures_generic.dart
+++ b/pkg/compiler/test/rti/data/method_signatures_generic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1 {
   /*member: Class1.method1:*/
@@ -47,13 +47,13 @@
 forceInstantiation(num Function(num) f) => f;
 
 main() {
-  Expect.isFalse(test(new Class1().method1));
-  Expect.isFalse(test(new Class1().method2));
-  Expect.isFalse(test(new Class1().method3));
-  Expect.isTrue(test(forceInstantiation(new Class2().method4)));
-  Expect.isTrue(test(forceInstantiation(new Class3().method5)));
-  Expect.isFalse(test(new Class4().method6));
-  Expect.isTrue(test(forceInstantiation(method7)));
-  Expect.isTrue(test(forceInstantiation(method8)));
-  Expect.isFalse(test(method9));
+  makeLive(test(new Class1().method1));
+  makeLive(test(new Class1().method2));
+  makeLive(test(new Class1().method3));
+  makeLive(test(forceInstantiation(new Class2().method4)));
+  makeLive(test(forceInstantiation(new Class3().method5)));
+  makeLive(test(new Class4().method6));
+  makeLive(test(forceInstantiation(method7)));
+  makeLive(test(forceInstantiation(method8)));
+  makeLive(test(method9));
 }
diff --git a/pkg/compiler/test/rti/data/no_such_method1.dart b/pkg/compiler/test/rti/data/no_such_method1.dart
index 93be16b..9592429 100644
--- a/pkg/compiler/test/rti/data/no_such_method1.dart
+++ b/pkg/compiler/test/rti/data/no_such_method1.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class C {
   /*member: C.noSuchMethod:needsArgs,selectors=[Selector(call, call, arity=0, types=2),Selector(call, foo, arity=0, types=2)]*/
   noSuchMethod(i) => i.typeArguments;
@@ -11,7 +13,7 @@
 
 @pragma('dart2js:noInline')
 test(dynamic x) {
-  print(x.foo<int, String>());
+  makeLive(x.foo<int, String>());
 }
 
 main() {
diff --git a/pkg/compiler/test/rti/data/no_such_method2.dart b/pkg/compiler/test/rti/data/no_such_method2.dart
index 0d22825..53b99ea 100644
--- a/pkg/compiler/test/rti/data/no_such_method2.dart
+++ b/pkg/compiler/test/rti/data/no_such_method2.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class C {
   /*member: C.noSuchMethod:needsArgs,selectors=[Selector(call, call, arity=0, types=2),Selector(call, foo, arity=0, types=2)]*/
   noSuchMethod(i) => i.typeArguments;
@@ -16,7 +18,7 @@
 
 @pragma('dart2js:noInline')
 test(dynamic x) {
-  print(x.foo<int, String>());
+  makeLive(x.foo<int, String>());
 }
 
 main() {
diff --git a/pkg/compiler/test/rti/data/no_such_method3.dart b/pkg/compiler/test/rti/data/no_such_method3.dart
index f25295b..3a708d2 100644
--- a/pkg/compiler/test/rti/data/no_such_method3.dart
+++ b/pkg/compiler/test/rti/data/no_such_method3.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class C {
   /*member: C.noSuchMethod:*/
   noSuchMethod(i) => null;
@@ -11,7 +13,7 @@
 
 @pragma('dart2js:noInline')
 test(dynamic x) {
-  print(x.foo<int, String>());
+  makeLive(x.foo<int, String>());
 }
 
 main() {
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals1.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals1.dart
index eb0b49e..c4a1a61 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals1.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals1.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class<T> {
   Class();
@@ -20,7 +20,7 @@
   /*needsSignature*/
   local2(int i, String s) => i;
 
-  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
-  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  makeLive(local1a.runtimeType == local1b.runtimeType);
+  makeLive(local1a.runtimeType == local2.runtimeType);
   new Class();
 }
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 47b8bb3..a9199b1 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals2.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class<T> {
   Class();
@@ -21,7 +21,7 @@
   /*prod.needsArgs,needsSignature*/
   T local2<T>(T t, String s) => t;
 
-  Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
-  Expect.isFalse(local1a.runtimeType == local2.runtimeType);
+  makeLive(local1a.runtimeType == local1b.runtimeType);
+  makeLive(local1a.runtimeType == local2.runtimeType);
   new Class();
 }
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 bdebd0f..bba535c 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals3.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals3.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 String method() => null;
 
@@ -23,9 +23,9 @@
     /*needsSignature*/
     T local2(T t, String s) => t;
 
-    Expect.isTrue(local1a.runtimeType == local1b.runtimeType);
-    Expect.isFalse(local1a.runtimeType == local2.runtimeType);
-    Expect.isFalse(local1a.runtimeType == method.runtimeType);
+    makeLive(local1a.runtimeType == local1b.runtimeType);
+    makeLive(local1a.runtimeType == local2.runtimeType);
+    makeLive(local1a.runtimeType == method.runtimeType);
   }
 }
 
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals4.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals4.dart
index f2f5dcb..8053167 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals4.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals4.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1<T> {
   Class1();
@@ -27,7 +27,7 @@
 main() {
   var c = new Class1<int>();
 
-  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
-  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  makeLive(c.method1a.runtimeType == c.method1b.runtimeType);
+  makeLive(c.method1a.runtimeType == c.method2.runtimeType);
   new Class2<int>();
 }
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 6b9ef8b..b3477bb 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals5.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals5.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: Class1:direct,explicit=[Class1.T*],needsArgs*/
 /*prod.class: Class1:needsArgs*/
@@ -28,7 +28,7 @@
 main() {
   var c = new Class1<int>();
 
-  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
-  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  makeLive(c.method1a.runtimeType == c.method1b.runtimeType);
+  makeLive(c.method1a.runtimeType == c.method2.runtimeType);
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_equals6.dart b/pkg/compiler/test/rti/data/runtime_type_closure_equals6.dart
index d8cc4f4..08e2bb2 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals6.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals6.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 method1a() => null;
 
@@ -17,7 +17,7 @@
 }
 
 main() {
-  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
-  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  makeLive(method1a.runtimeType == method1b.runtimeType);
+  makeLive(method1a.runtimeType == method2.runtimeType);
   new Class<int>();
 }
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 c1c2a43..8ffc992 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals7.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals7.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*member: method1a:*/
 T method1a<T>() => null;
@@ -20,7 +20,7 @@
 }
 
 main() {
-  Expect.isTrue(method1a.runtimeType == method1b.runtimeType);
-  Expect.isFalse(method1a.runtimeType == method2.runtimeType);
+  makeLive(method1a.runtimeType == method1b.runtimeType);
+  makeLive(method1a.runtimeType == method2.runtimeType);
   new Class<int>();
 }
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 392562c..fae683f 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_equals8.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_equals8.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 class Class1<S> {
   Class1();
@@ -26,7 +26,7 @@
 main() {
   var c = new Class1<int>();
 
-  Expect.isTrue(c.method1a.runtimeType == c.method1b.runtimeType);
-  Expect.isFalse(c.method1a.runtimeType == c.method2.runtimeType);
+  makeLive(c.method1a.runtimeType == c.method1b.runtimeType);
+  makeLive(c.method1a.runtimeType == c.method2.runtimeType);
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_to_string1.dart b/pkg/compiler/test/rti/data/runtime_type_closure_to_string1.dart
index ba7f1b9..05da330 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_to_string1.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_to_string1.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class Class<T> {
   Class();
 }
@@ -15,7 +17,7 @@
   /*spec.needsSignature*/
   local2(int i, String s) => i;
 
-  print('${local1.runtimeType}');
+  makeLive('${local1.runtimeType}');
   local2(0, '');
   new Class();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_to_string2.dart b/pkg/compiler/test/rti/data/runtime_type_closure_to_string2.dart
index ac017d9..29e83bb 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_to_string2.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_to_string2.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class Class<T> {
   Class();
 }
@@ -15,7 +17,7 @@
   /*spec.needsArgs,needsSignature,selectors=[Selector(call, call, arity=2, types=1)]*/
   local2<T>(t, s) => t;
 
-  print('${local1.runtimeType}');
+  makeLive('${local1.runtimeType}');
   local2(0, '');
   new Class();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_to_string3.dart b/pkg/compiler/test/rti/data/runtime_type_closure_to_string3.dart
index 3e6538a..70ef21a 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_to_string3.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_to_string3.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
@@ -18,6 +20,6 @@
 
 main() {
   Class1<int> cls1 = new Class1<int>();
-  print(cls1.method.runtimeType.toString());
+  makeLive(cls1.method.runtimeType.toString());
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_to_string4.dart b/pkg/compiler/test/rti/data/runtime_type_closure_to_string4.dart
index cb5ab6e..fa09fc9 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_to_string4.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_to_string4.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*class: Class1:*/
 class Class1 {
   /*member: Class1.:*/
@@ -22,6 +24,6 @@
 /*member: main:*/
 main() {
   Class1 cls1 = new Class1();
-  print(cls1.method.runtimeType.toString());
+  makeLive(cls1.method.runtimeType.toString());
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_to_string5.dart b/pkg/compiler/test/rti/data/runtime_type_closure_to_string5.dart
index 1db7626..a485830 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_to_string5.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_to_string5.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class Class<T> {
   Class();
 }
@@ -13,7 +15,7 @@
 method2(int i, String s) => i;
 
 main() {
-  print('${method1.runtimeType}');
+  makeLive('${method1.runtimeType}');
   method2(0, '');
   new Class();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_closure_to_string6.dart b/pkg/compiler/test/rti/data/runtime_type_closure_to_string6.dart
index 1e1bce8..a0d9384 100644
--- a/pkg/compiler/test/rti/data/runtime_type_closure_to_string6.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_closure_to_string6.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*class: Class:*/
 class Class<T> {
   /*member: Class.:*/
@@ -18,7 +20,7 @@
 
 /*member: main:*/
 main() {
-  print('${method1.runtimeType}');
+  makeLive('${method1.runtimeType}');
   method2(0, '');
   new Class();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals1.dart b/pkg/compiler/test/rti/data/runtime_type_equals1.dart
index 2341118..ba7bc28 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals1.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals1.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
@@ -38,8 +38,8 @@
   Class1a<int> cls1b2 = new Class1b<int>();
   Class1c<int> cls1c = new Class1c<int>();
   Class2<int> cls2 = new Class2<int>();
-  Expect.isFalse(cls1a == cls1b1);
-  Expect.isTrue(cls1b1 == cls1b2);
-  Expect.isFalse(cls1a == cls1c);
-  Expect.isFalse(cls1a == cls2);
+  makeLive(cls1a == cls1b1);
+  makeLive(cls1b1 == cls1b2);
+  makeLive(cls1a == cls1c);
+  makeLive(cls1a == cls2);
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals2.dart b/pkg/compiler/test/rti/data/runtime_type_equals2.dart
index 8987068..12ddf17 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals2.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
@@ -38,8 +38,8 @@
   Class1a<int> cls1b2 = new Class1b<int>();
   Class1c<int> cls1c = new Class1c<int>();
   Class2<int> cls2 = new Class2<int>();
-  Expect.isFalse(cls1a == cls1b1);
-  Expect.isTrue(cls1b1 == cls1b2);
-  Expect.isFalse(cls1a == cls1c);
-  Expect.isFalse(cls1a == cls2);
+  makeLive(cls1a == cls1b1);
+  makeLive(cls1b1 == cls1b2);
+  makeLive(cls1a == cls1c);
+  makeLive(cls1a == cls2);
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals3.dart b/pkg/compiler/test/rti/data/runtime_type_equals3.dart
index ca06e3e..e1dc6a8 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals3.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals3.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
@@ -45,8 +45,8 @@
   Class1a<int> cls1b2 = new Class1b<int>();
   Class1c<int> cls1c = new Class1c<int>();
   Class2<int> cls2 = new Class2<int>();
-  Expect.isFalse(cls1a == cls1b1);
-  Expect.isTrue(cls1b1 == cls1b2);
-  Expect.isFalse(cls1a == cls1c);
-  Expect.isFalse(cls1a == cls2);
+  makeLive(cls1a == cls1b1);
+  makeLive(cls1b1 == cls1b2);
+  makeLive(cls1a == cls1c);
+  makeLive(cls1a == cls2);
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals4.dart b/pkg/compiler/test/rti/data/runtime_type_equals4.dart
index 220d033..d519d6c 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals4.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals4.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
@@ -45,8 +45,8 @@
   Class1a<int> cls1b2 = new Class1b<int>();
   Class1c<int> cls1c = new Class1c<int>();
   Class2<int> cls2 = new Class2<int>();
-  Expect.isFalse(cls1a == cls1b1);
-  Expect.isTrue(cls1b1 == cls1b2);
-  Expect.isFalse(cls1a == cls1c);
-  Expect.isFalse(cls1a == cls2);
+  makeLive(cls1a == cls1b1);
+  makeLive(cls1b1 == cls1b2);
+  makeLive(cls1a == cls1c);
+  makeLive(cls1a == cls2);
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals5.dart b/pkg/compiler/test/rti/data/runtime_type_equals5.dart
index ae4bee6..0041d0f 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals5.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals5.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: Class1a:explicit=[Class1a*]*/
 class Class1a {
@@ -30,8 +30,8 @@
 }
 
 main() {
-  Expect.isTrue(test(new Class1a(), Class1a));
-  Expect.isFalse(test(new Class1b<int>(), Class1a));
-  Expect.isFalse(test(new Class1c<int>(), Class1a));
+  makeLive(test(new Class1a(), Class1a));
+  makeLive(test(new Class1b<int>(), Class1a));
+  makeLive(test(new Class1c<int>(), Class1a));
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals6.dart b/pkg/compiler/test/rti/data/runtime_type_equals6.dart
index 62c2fcb..1a18a1c 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals6.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals6.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: Class1a:explicit=[Class1a*],needsArgs*/
 /*prod.class: Class1a:needsArgs*/
@@ -31,8 +31,8 @@
 }
 
 main() {
-  Expect.isTrue(test(new Class1a(), Class1a));
-  Expect.isFalse(test(new Class1b<int>(), Class1a));
-  Expect.isFalse(test(new Class1c<int>(), Class1a));
+  makeLive(test(new Class1a(), Class1a));
+  makeLive(test(new Class1b<int>(), Class1a));
+  makeLive(test(new Class1c<int>(), Class1a));
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_equals7.dart b/pkg/compiler/test/rti/data/runtime_type_equals7.dart
index 9a63cc2..661bb4f 100644
--- a/pkg/compiler/test/rti/data/runtime_type_equals7.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_equals7.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: Class1a:explicit=[Class1a*]*/
 class Class1a {
@@ -37,8 +37,8 @@
 }
 
 main() {
-  Expect.isTrue(test(new Class3<int>(new Class1a()), Class1a));
-  Expect.isFalse(test(new Class3<int>(new Class1b<int>()), Class1a));
-  Expect.isFalse(test(new Class3<int>(new Class1c<int>()), Class1a));
+  makeLive(test(new Class3<int>(new Class1a()), Class1a));
+  makeLive(test(new Class3<int>(new Class1b<int>()), Class1a));
+  makeLive(test(new Class3<int>(new Class1c<int>()), Class1a));
   new Class2<int>();
 }
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 80f9c5f..f8ee428 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
@@ -4,11 +4,13 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*member: global#instantiate1:needsArgs*/
 
 main() {
   /*spec.direct,explicit=[id.T*],needsArgs,needsInst=[<int*>],needsSignature*/
   T id<T>(T t, String s) => t;
   int Function(int, String s) x = id;
-  print("${x.runtimeType}");
+  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 ea1f538..09002a4 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
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*member: global#instantiate1:needsArgs*/
 
 /*spec.member: id:direct,explicit=[id.T*],needsArgs,needsInst=[<int*>]*/
@@ -11,5 +13,5 @@
 
 main() {
   int Function(int, String s) x = id;
-  print("${x.runtimeType}");
+  makeLive("${x.runtimeType}");
 }
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 1afde94..5de5547 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
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*member: global#instantiate1:needsArgs*/
 
 class Class {
@@ -13,5 +15,5 @@
 
 main() {
   int Function(int, String s) x = new Class().id;
-  print("${x.runtimeType}");
+  makeLive("${x.runtimeType}");
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string1.dart b/pkg/compiler/test/rti/data/runtime_type_to_string1.dart
index 81e57ce..a07f484 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string1.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string1.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class Class1 {
   Class1();
 }
@@ -19,8 +21,8 @@
 
 main() {
   Class1 cls1 = new Class1();
-  print(cls1.runtimeType.toString());
+  makeLive(cls1.runtimeType.toString());
   new Class2<int>();
   Class1 cls3 = new Class3<int>();
-  print(cls3.runtimeType.toString());
+  makeLive(cls3.runtimeType.toString());
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string2.dart b/pkg/compiler/test/rti/data/runtime_type_to_string2.dart
index 2995668..981254f 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string2.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string2.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
@@ -15,6 +17,6 @@
 
 main() {
   Class1<int> cls1 = new Class1<int>();
-  print('${cls1.runtimeType}');
+  makeLive('${cls1.runtimeType}');
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string3.dart b/pkg/compiler/test/rti/data/runtime_type_to_string3.dart
index 4b978bd..d55f069 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string3.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string3.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
@@ -15,6 +17,6 @@
 
 main() {
   Class1<int> cls1 = new Class1<int>();
-  print(cls1.runtimeType?.toString());
+  makeLive(cls1.runtimeType?.toString());
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string4.dart b/pkg/compiler/test/rti/data/runtime_type_to_string4.dart
index 645fd04..2ca025a 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string4.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string4.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
@@ -15,6 +17,6 @@
 
 main() {
   Class1<int> cls1 = new Class1<int>();
-  print(cls1?.runtimeType?.toString());
+  makeLive(cls1?.runtimeType?.toString());
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string5.dart b/pkg/compiler/test/rti/data/runtime_type_to_string5.dart
index 03013b3..c5a2b3e 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string5.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string5.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
@@ -15,6 +17,6 @@
 
 main() {
   Class1<int> cls1 = new Class1<int>();
-  print('${cls1?.runtimeType}');
+  makeLive('${cls1?.runtimeType}');
   new Class2<int>();
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string6.dart b/pkg/compiler/test/rti/data/runtime_type_to_string6.dart
index 70e17a4..adf0c44 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string6.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string6.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: Class1:needsArgs*/
 class Class1<T> {
   Class1();
@@ -16,7 +18,7 @@
 
 main() {
   dynamic cls1 = new Class1<int>();
-  print('${cls1.runtimeType}');
+  makeLive('${cls1.runtimeType}');
   new Class2<int>();
   cls1 = null;
 }
diff --git a/pkg/compiler/test/rti/data/runtime_type_to_string7.dart b/pkg/compiler/test/rti/data/runtime_type_to_string7.dart
index 81e57ce..a07f484 100644
--- a/pkg/compiler/test/rti/data/runtime_type_to_string7.dart
+++ b/pkg/compiler/test/rti/data/runtime_type_to_string7.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 class Class1 {
   Class1();
 }
@@ -19,8 +21,8 @@
 
 main() {
   Class1 cls1 = new Class1();
-  print(cls1.runtimeType.toString());
+  makeLive(cls1.runtimeType.toString());
   new Class2<int>();
   Class1 cls3 = new Class3<int>();
-  print(cls3.runtimeType.toString());
+  makeLive(cls3.runtimeType.toString());
 }
diff --git a/pkg/compiler/test/rti/data/subtype_named_args.dart b/pkg/compiler/test/rti/data/subtype_named_args.dart
index 530b914..365ef9a 100644
--- a/pkg/compiler/test/rti/data/subtype_named_args.dart
+++ b/pkg/compiler/test/rti/data/subtype_named_args.dart
@@ -4,9 +4,9 @@
 
 // @dart = 2.7
 
-// From co19/Language/Types/Function_Types/subtype_named_args_t02.
+import 'package:compiler/src/util/testing.dart';
 
-import 'package:expect/expect.dart';
+// From co19/Language/Types/Function_Types/subtype_named_args_t02.
 
 /*spec.class: A:explicit=[A*,G<A*,A1*,A1*,A1*>*,dynamic Function({a:A*,b:A1*,c:A1*,d:A1*})*,dynamic Function({a:A*,b:B*,c:C*,d:D*})*,dynamic Function({b:B*,f:dynamic Function({f1:dynamic Function({a:A*,b:B*,c:C*,d:D*})*,f2:dynamic Function({g:G<A*,B*,C*,D*>*,l:List<List<B*>*>*,m:Map<num*,int*>*})*,f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})*})*,g:G<A*,B*,C*,D*>*,x:dynamic})*,dynamic Function({f1:dynamic Function({a:A*,b:B*,c:C*,d:D*})*,f2:dynamic Function({g:G<A*,B*,C*,D*>*,l:List<List<B*>*>*,m:Map<num*,int*>*})*,f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})*})*,dynamic Function({g:G<A*,A1*,A1*,A1*>*,l:List<List<A1*>*>*,m:Map<num*,num*>*})*,dynamic Function({g:G<A*,B*,C*,D*>*,l:List<List<B*>*>*,m:Map<num*,int*>*})*,dynamic Function({v:dynamic Function({a:A*,b:B*,c:C*,d:D*})*,x:int*,y:bool*,z:List<Map*>*})*,dynamic Function({v:dynamic,x:A*,y:G*,z:dynamic Function({b:B*,f:dynamic Function({f1:dynamic Function({a:A*,b:B*,c:C*,d:D*})*,f2:dynamic Function({g:G<A*,B*,C*,D*>*,l:List<List<B*>*>*,m:Map<num*,int*>*})*,f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})*})*,g:G<A*,B*,C*,D*>*,x:dynamic})*})*]*/
 /*prod.class: A:explicit=[dynamic Function({a:A*,b:B*,c:C*,d:D*})*,dynamic Function({f1:dynamic Function({a:A*,b:B*,c:C*,d:D*})*,f2:dynamic Function({g:G<A*,B*,C*,D*>*,l:List<List<B*>*>*,m:Map<num*,int*>*})*,f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})*})*,dynamic Function({g:G<A*,B*,C*,D*>*,l:List<List<B*>*>*,m:Map<num*,int*>*})*]*/
@@ -52,54 +52,54 @@
 typedef okWithDynamicFunc_2({int x, bool y, List<Map> z, classesFunc v});
 
 main() {
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({D a, B b, C c, A d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({A a, A b, A c, A d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({D a, D b, D c, D d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({var a, var b, var c, var d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({Object a, Object b, Object c, Object d}) {} is classesFunc);
 
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
           is genericsFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {} is genericsFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({var m, var l, var g}) {} is genericsFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({Object m, Object l, Object g}) {} is genericsFunc);
 
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       ({int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
 
-  Expect.isTrue(/*needsSignature*/ (
+  makeLive(/*needsSignature*/ (
       {okWithClassesFunc_1 f1,
       okWithGenericsFunc_1 f2,
       okWithDynamicFunc_1 f3}) {} is funcFunc);
-  Expect.isTrue(
+  makeLive(
       /*needsSignature*/
       (
           {okWithClassesFunc_2 f1,
diff --git a/pkg/compiler/test/rti/data/subtype_named_args1.dart b/pkg/compiler/test/rti/data/subtype_named_args1.dart
index b2b3cf9..9ffa6ba 100644
--- a/pkg/compiler/test/rti/data/subtype_named_args1.dart
+++ b/pkg/compiler/test/rti/data/subtype_named_args1.dart
@@ -4,9 +4,9 @@
 
 // @dart = 2.7
 
-// From co19/Language/Types/Function_Types/subtype_named_args_t01.
+import 'package:compiler/src/util/testing.dart';
 
-import "package:expect/expect.dart";
+// From co19/Language/Types/Function_Types/subtype_named_args_t01.
 
 /*spec.class: A:explicit=[A*,dynamic Function({a:A*})*]*/
 class A {}
@@ -37,68 +37,68 @@
 typedef okWithT1_4({D a});
 
 main() {
-  Expect.isTrue(/*needsSignature*/ ({A a}) {} is t1);
-  Expect.isTrue(/*needsSignature*/ ({B a}) {} is t1);
-  Expect.isTrue(/*needsSignature*/ ({C a}) {} is t1);
-  Expect.isTrue(/*needsSignature*/ ({D a}) {} is t1);
-  Expect.isTrue(/*needsSignature*/ ({Object a}) {} is t1);
-  Expect.isTrue(/*needsSignature*/ ({var a}) {} is t1);
+  makeLive(/*needsSignature*/ ({A a}) {} is t1);
+  makeLive(/*needsSignature*/ ({B a}) {} is t1);
+  makeLive(/*needsSignature*/ ({C a}) {} is t1);
+  makeLive(/*needsSignature*/ ({D a}) {} is t1);
+  makeLive(/*needsSignature*/ ({Object a}) {} is t1);
+  makeLive(/*needsSignature*/ ({var a}) {} is t1);
 
-  Expect.isTrue(/*needsSignature*/ ({A c}) {} is t2);
-  Expect.isTrue(/*needsSignature*/ ({B c}) {} is t2);
-  Expect.isTrue(/*needsSignature*/ ({C c}) {} is t2);
-  Expect.isTrue(/*needsSignature*/ ({D c}) {} is t2);
-  Expect.isTrue(/*needsSignature*/ ({Object c}) {} is t2);
-  Expect.isTrue(/*needsSignature*/ ({var c}) {} is t2);
+  makeLive(/*needsSignature*/ ({A c}) {} is t2);
+  makeLive(/*needsSignature*/ ({B c}) {} is t2);
+  makeLive(/*needsSignature*/ ({C c}) {} is t2);
+  makeLive(/*needsSignature*/ ({D c}) {} is t2);
+  makeLive(/*needsSignature*/ ({Object c}) {} is t2);
+  makeLive(/*needsSignature*/ ({var c}) {} is t2);
 
-  Expect.isTrue(/*needsSignature*/ ({num i}) {} is t3);
-  Expect.isTrue(/*needsSignature*/ ({int i}) {} is t3);
-  Expect.isTrue(/*needsSignature*/ ({Object i}) {} is t3);
-  Expect.isTrue(/*needsSignature*/ ({var i}) {} is t3);
+  makeLive(/*needsSignature*/ ({num i}) {} is t3);
+  makeLive(/*needsSignature*/ ({int i}) {} is t3);
+  makeLive(/*needsSignature*/ ({Object i}) {} is t3);
+  makeLive(/*needsSignature*/ ({var i}) {} is t3);
 
-  Expect.isTrue(/*needsSignature*/ ({A v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({B v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({C v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({D v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({Object v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({var v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({num v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({int v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({Map v}) {} is t4);
-  Expect.isTrue(
+  makeLive(/*needsSignature*/ ({A v}) {} is t4);
+  makeLive(/*needsSignature*/ ({B v}) {} is t4);
+  makeLive(/*needsSignature*/ ({C v}) {} is t4);
+  makeLive(/*needsSignature*/ ({D v}) {} is t4);
+  makeLive(/*needsSignature*/ ({Object v}) {} is t4);
+  makeLive(/*needsSignature*/ ({var v}) {} is t4);
+  makeLive(/*needsSignature*/ ({num v}) {} is t4);
+  makeLive(/*needsSignature*/ ({int v}) {} is t4);
+  makeLive(/*needsSignature*/ ({Map v}) {} is t4);
+  makeLive(
       /*needsSignature*/ ({Map<List<Map<List, List<int>>>, List> v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({List v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({t8 v}) {} is t4);
-  Expect.isTrue(/*needsSignature*/ ({t7 v}) {} is t4);
+  makeLive(/*needsSignature*/ ({List v}) {} is t4);
+  makeLive(/*needsSignature*/ ({t8 v}) {} is t4);
+  makeLive(/*needsSignature*/ ({t7 v}) {} is t4);
 
-  Expect.isTrue(/*needsSignature*/ ({Map m}) {} is t5);
-  Expect.isTrue(/*needsSignature*/ ({Map<List, t8> m}) {} is t5);
-  Expect.isTrue(/*needsSignature*/ ({Object m}) {} is t5);
-  Expect.isTrue(/*needsSignature*/ ({var m}) {} is t5);
-  Expect.isTrue(/*needsSignature*/ ({Map<List, List> m}) {} is t5);
-  Expect.isTrue(/*needsSignature*/ ({Map<int, t8> m}) {} is t5);
+  makeLive(/*needsSignature*/ ({Map m}) {} is t5);
+  makeLive(/*needsSignature*/ ({Map<List, t8> m}) {} is t5);
+  makeLive(/*needsSignature*/ ({Object m}) {} is t5);
+  makeLive(/*needsSignature*/ ({var m}) {} is t5);
+  makeLive(/*needsSignature*/ ({Map<List, List> m}) {} is t5);
+  makeLive(/*needsSignature*/ ({Map<int, t8> m}) {} is t5);
 
-  Expect.isTrue(/*needsSignature*/ ({Map<num, num> m}) {} is t6);
-  Expect.isTrue(/*needsSignature*/ ({Map<int, int> m}) {} is t6);
-  Expect.isTrue(/*needsSignature*/ ({Map m}) {} is t6);
-  Expect.isTrue(/*needsSignature*/ ({Object m}) {} is t6);
-  Expect.isTrue(/*needsSignature*/ ({var m}) {} is t6);
+  makeLive(/*needsSignature*/ ({Map<num, num> m}) {} is t6);
+  makeLive(/*needsSignature*/ ({Map<int, int> m}) {} is t6);
+  makeLive(/*needsSignature*/ ({Map m}) {} is t6);
+  makeLive(/*needsSignature*/ ({Object m}) {} is t6);
+  makeLive(/*needsSignature*/ ({var m}) {} is t6);
 
-  Expect.isTrue(/*needsSignature*/ ({okWithT1_1 f}) {} is t7);
-  Expect.isTrue(/*needsSignature*/ ({okWithT1_2 f}) {} is t7);
-  Expect.isTrue(/*needsSignature*/ ({okWithT1_3 f}) {} is t7);
-  Expect.isTrue(/*needsSignature*/ ({okWithT1_4 f}) {} is t7);
+  makeLive(/*needsSignature*/ ({okWithT1_1 f}) {} is t7);
+  makeLive(/*needsSignature*/ ({okWithT1_2 f}) {} is t7);
+  makeLive(/*needsSignature*/ ({okWithT1_3 f}) {} is t7);
+  makeLive(/*needsSignature*/ ({okWithT1_4 f}) {} is t7);
 
-  Expect.isTrue(/*needsSignature*/ ({A a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({B a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({C a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({D a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({Object a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({var a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({num a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({int a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({Map a}) {} is t8);
-  Expect.isTrue(
+  makeLive(/*needsSignature*/ ({A a}) {} is t8);
+  makeLive(/*needsSignature*/ ({B a}) {} is t8);
+  makeLive(/*needsSignature*/ ({C a}) {} is t8);
+  makeLive(/*needsSignature*/ ({D a}) {} is t8);
+  makeLive(/*needsSignature*/ ({Object a}) {} is t8);
+  makeLive(/*needsSignature*/ ({var a}) {} is t8);
+  makeLive(/*needsSignature*/ ({num a}) {} is t8);
+  makeLive(/*needsSignature*/ ({int a}) {} is t8);
+  makeLive(/*needsSignature*/ ({Map a}) {} is t8);
+  makeLive(
       /*needsSignature*/ ({Map<List<Map<List, List<int>>>, List> a}) {} is t8);
-  Expect.isTrue(/*needsSignature*/ ({List a}) {} is t8);
+  makeLive(/*needsSignature*/ ({List a}) {} is t8);
 }
diff --git a/pkg/compiler/test/rti/data/type_argument_substitution.dart b/pkg/compiler/test/rti/data/type_argument_substitution.dart
index cbc19f9..a8f7369 100644
--- a/pkg/compiler/test/rti/data/type_argument_substitution.dart
+++ b/pkg/compiler/test/rti/data/type_argument_substitution.dart
@@ -4,11 +4,11 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 // Test that substitutions are emitted for classes that are only used as
 // type arguments.
 
-import 'package:expect/expect.dart';
-
 class K {}
 
 /*class: A:explicit=[X<A<String*>*>*]*/
@@ -23,5 +23,5 @@
   var v = new DateTime.now().millisecondsSinceEpoch != 42
       ? new X<B>()
       : new X<A<String>>();
-  Expect.isFalse(v is X<A<String>>);
+  makeLive(v is X<A<String>>);
 }
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 7b4543f..d36e45f 100644
--- a/pkg/compiler/test/rti/data/type_variable_function_type.dart
+++ b/pkg/compiler/test/rti/data/type_variable_function_type.dart
@@ -4,9 +4,9 @@
 
 // @dart = 2.7
 
-// Based on tests\language_2\type_variable_function_type_test.dart
+import 'package:compiler/src/util/testing.dart';
 
-import 'package:expect/expect.dart';
+// Based on tests\language_2\type_variable_function_type_test.dart
 
 typedef T Func<T>();
 
@@ -26,6 +26,6 @@
 void main() {
   dynamic x = new Foo<List<String>>();
   if (new DateTime.now().millisecondsSinceEpoch == 42) x = new Foo<int>();
-  Expect.isFalse(x.m(new Bar<String>().f()));
-  Expect.isTrue(x.m(new Bar<List<String>>().f()));
+  makeLive(x.m(new Bar<String>().f()));
+  makeLive(x.m(new Bar<List<String>>().f()));
 }
diff --git a/pkg/compiler/test/rti/disable_rti_test.dart b/pkg/compiler/test/rti/disable_rti_test.dart
index e993dc6..01248a6 100644
--- a/pkg/compiler/test/rti/disable_rti_test.dart
+++ b/pkg/compiler/test/rti/disable_rti_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/runtime_types_resolution.dart';
diff --git a/pkg/compiler/test/rti/emission/call.dart b/pkg/compiler/test/rti/emission/call.dart
index 921de31..6efcbf7 100644
--- a/pkg/compiler/test/rti/emission/call.dart
+++ b/pkg/compiler/test/rti/emission/call.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checks=[],instance*/
 class A {
@@ -15,6 +15,6 @@
 test(o) => o is Function;
 
 main() {
-  Expect.isFalse(test(new A()));
-  Expect.isFalse(test(null));
+  makeLive(test(new A()));
+  makeLive(test(null));
 }
diff --git a/pkg/compiler/test/rti/emission/call_typed.dart b/pkg/compiler/test/rti/emission/call_typed.dart
index ab3dbfe..a5ece48 100644
--- a/pkg/compiler/test/rti/emission/call_typed.dart
+++ b/pkg/compiler/test/rti/emission/call_typed.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checks=[],instance*/
 class A {
@@ -15,6 +15,6 @@
 test(o) => o is Function(int);
 
 main() {
-  Expect.isFalse(test(new A()));
-  Expect.isFalse(test(null));
+  makeLive(test(new A()));
+  makeLive(test(null));
 }
diff --git a/pkg/compiler/test/rti/emission/call_typed_generic.dart b/pkg/compiler/test/rti/emission/call_typed_generic.dart
index c80f395..7d770fd 100644
--- a/pkg/compiler/test/rti/emission/call_typed_generic.dart
+++ b/pkg/compiler/test/rti/emission/call_typed_generic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checks=[],instance*/
 class A<T> {
@@ -15,6 +15,6 @@
 test(o) => o is Function(int);
 
 main() {
-  Expect.isFalse(test(new A<int>()));
-  Expect.isFalse(test(new A<String>()));
+  makeLive(test(new A<int>()));
+  makeLive(test(new A<String>()));
 }
diff --git a/pkg/compiler/test/rti/emission/constructor_argument_static.dart b/pkg/compiler/test/rti/emission/constructor_argument_static.dart
index 01c651a..325f250 100644
--- a/pkg/compiler/test/rti/emission/constructor_argument_static.dart
+++ b/pkg/compiler/test/rti/emission/constructor_argument_static.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*spec.class: A1:checkedInstance,checks=[],instance*/
 /*prod.class: A1:checks=[],instance*/
 class A1 {}
@@ -33,7 +35,7 @@
 abstract class Test2 {
   @pragma('dart2js:noInline')
   Test2(A2 x) {
-    print(x);
+    makeLive(x);
   }
 }
 
diff --git a/pkg/compiler/test/rti/emission/dynamic_instance.dart b/pkg/compiler/test/rti/emission/dynamic_instance.dart
index 5afac9b..7e70cad 100644
--- a/pkg/compiler/test/rti/emission/dynamic_instance.dart
+++ b/pkg/compiler/test/rti/emission/dynamic_instance.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: B:checkedInstance,typeArgument*/
 class B {}
@@ -25,6 +25,6 @@
 test(o) => new C().method1<B>(o);
 
 main() {
-  Expect.isTrue(test(new D()));
-  Expect.isFalse(test(null));
+  makeLive(test(new D()));
+  makeLive(test(null));
 }
diff --git a/pkg/compiler/test/rti/emission/dynamic_type_argument.dart b/pkg/compiler/test/rti/emission/dynamic_type_argument.dart
index 6d21d6e..6fd84a6 100644
--- a/pkg/compiler/test/rti/emission/dynamic_type_argument.dart
+++ b/pkg/compiler/test/rti/emission/dynamic_type_argument.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedInstance,checks=[],instance*/
 class A<T> {}
@@ -31,7 +31,7 @@
 test(o) => o is A<B>;
 
 main() {
-  Expect.isTrue(test(new C().method1<B>()));
-  Expect.isTrue(test(new C().method1<D>()));
-  Expect.isFalse(test(new C().method1<E>()));
+  makeLive(test(new C().method1<B>()));
+  makeLive(test(new C().method1<D>()));
+  makeLive(test(new C().method1<E>()));
 }
diff --git a/pkg/compiler/test/rti/emission/dynamic_type_literal.dart b/pkg/compiler/test/rti/emission/dynamic_type_literal.dart
index 04c8efc..99fe934 100644
--- a/pkg/compiler/test/rti/emission/dynamic_type_literal.dart
+++ b/pkg/compiler/test/rti/emission/dynamic_type_literal.dart
@@ -6,9 +6,9 @@
 
 /*class: global#Type:instance,typeLiteral*/
 
-import "package:expect/expect.dart";
+import "package:compiler/src/util/testing.dart";
 
 void main(bool b) {
-  Expect.isTrue(dynamic is Type);
-  Expect.isFalse(dynamic == (b ? Type : dynamic)); // ?: avoids constant folding
+  makeLive(dynamic is Type);
+  makeLive(dynamic == (b ? Type : dynamic)); // ?: avoids constant folding
 }
diff --git a/pkg/compiler/test/rti/emission/event_callback.dart b/pkg/compiler/test/rti/emission/event_callback.dart
index 5e77e38..a70c6f8 100644
--- a/pkg/compiler/test/rti/emission/event_callback.dart
+++ b/pkg/compiler/test/rti/emission/event_callback.dart
@@ -5,6 +5,7 @@
 // @dart = 2.7
 
 import 'dart:html';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: global#Event:checkedInstance,checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
 /*prod.class: global#Event:checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
@@ -14,21 +15,14 @@
 /*prod.class: global#KeyboardEvent:checks=[$isKeyboardEvent],instance,typeArgument*/
 
 void main() {
-  print('InputElement');
   var i = new InputElement();
-  print('> onKeyPress');
   i.onKeyPress.listen(onEvent);
-  print('> onClick');
   i.onClick.listen(onEvent);
-  print('TextAreaElement');
   var e = new TextAreaElement();
-  print('> onKeyPress');
   e.onKeyPress.listen(onEvent);
-  print('> onClick');
   e.onClick.listen(onEvent);
-  print('Done!');
 }
 
 void onEvent(Event e) {
-  print(e);
+  makeLive(e);
 }
diff --git a/pkg/compiler/test/rti/emission/function_type_argument.dart b/pkg/compiler/test/rti/emission/function_type_argument.dart
index ee42353..a478a13 100644
--- a/pkg/compiler/test/rti/emission/function_type_argument.dart
+++ b/pkg/compiler/test/rti/emission/function_type_argument.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: C:checkedInstance,checks=[],instance,typeArgument*/
 /*prod.class: C:checks=[],instance,typeArgument*/
@@ -25,8 +25,8 @@
 test2(o) => o is List<Function(int)>;
 
 main() {
-  Expect.isFalse(test1(new C()));
-  Expect.isFalse(test1(new D()));
-  Expect.isFalse(test2(<C>[]));
-  Expect.isFalse(test2(<D>[]));
+  makeLive(test1(new C()));
+  makeLive(test1(new D()));
+  makeLive(test2(<C>[]));
+  makeLive(test2(<D>[]));
 }
diff --git a/pkg/compiler/test/rti/emission/function_typed_arguments.dart b/pkg/compiler/test/rti/emission/function_typed_arguments.dart
index b09784a..806756c7 100644
--- a/pkg/compiler/test/rti/emission/function_typed_arguments.dart
+++ b/pkg/compiler/test/rti/emission/function_typed_arguments.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedInstance,checks=[],instance*/
 class A<T> {}
@@ -26,9 +26,9 @@
 
 @pragma('dart2js:noInline')
 test1() {
-  Expect.isTrue(_test1(new A<void Function(C1)>()));
-  Expect.isTrue(_test1(new A<void Function(B1<int>)>()));
-  Expect.isFalse(_test1(new A<void Function(B1<String>)>()));
+  makeLive(_test1(new A<void Function(C1)>()));
+  makeLive(_test1(new A<void Function(B1<int>)>()));
+  makeLive(_test1(new A<void Function(B1<String>)>()));
 }
 
 @pragma('dart2js:noInline')
@@ -42,9 +42,9 @@
 
 @pragma('dart2js:noInline')
 test2() {
-  Expect.isTrue(_test2(new A<C2 Function()>()));
-  Expect.isFalse(_test2(new A<B2<int> Function()>()));
-  Expect.isFalse(_test2(new A<B2<String> Function()>()));
+  makeLive(_test2(new A<C2 Function()>()));
+  makeLive(_test2(new A<B2<int> Function()>()));
+  makeLive(_test2(new A<B2<String> Function()>()));
 }
 
 @pragma('dart2js:noInline')
@@ -58,9 +58,9 @@
 
 @pragma('dart2js:noInline')
 test3() {
-  Expect.isFalse(_test3(new A<void Function(C3)>()));
-  Expect.isTrue(_test3(new A<void Function(B3<int>)>()));
-  Expect.isFalse(_test3(new A<void Function(B3<String>)>()));
+  makeLive(_test3(new A<void Function(C3)>()));
+  makeLive(_test3(new A<void Function(B3<int>)>()));
+  makeLive(_test3(new A<void Function(B3<String>)>()));
 }
 
 @pragma('dart2js:noInline')
@@ -74,9 +74,9 @@
 
 @pragma('dart4js:noInline')
 test4() {
-  Expect.isTrue(_test4(new A<C4 Function()>()));
-  Expect.isTrue(_test4(new A<B4<int> Function()>()));
-  Expect.isFalse(_test4(new A<B4<String> Function()>()));
+  makeLive(_test4(new A<C4 Function()>()));
+  makeLive(_test4(new A<B4<int> Function()>()));
+  makeLive(_test4(new A<B4<String> Function()>()));
 }
 
 @pragma('dart4js:noInline')
@@ -90,9 +90,9 @@
 
 @pragma('dart2js:noInline')
 test5() {
-  Expect.isTrue(_test5(new A<void Function(C5 Function())>()));
-  Expect.isTrue(_test5(new A<void Function(B5<int> Function())>()));
-  Expect.isFalse(_test5(new A<void Function(B5<String> Function())>()));
+  makeLive(_test5(new A<void Function(C5 Function())>()));
+  makeLive(_test5(new A<void Function(B5<int> Function())>()));
+  makeLive(_test5(new A<void Function(B5<String> Function())>()));
 }
 
 @pragma('dart2js:noInline')
@@ -106,9 +106,9 @@
 
 @pragma('dart2js:noInline')
 test6() {
-  Expect.isTrue(_test6(new A<void Function(void Function(C6))>()));
-  Expect.isFalse(_test6(new A<void Function(void Function(B6<int>))>()));
-  Expect.isFalse(_test6(new A<void Function(void Function(B6<String>))>()));
+  makeLive(_test6(new A<void Function(void Function(C6))>()));
+  makeLive(_test6(new A<void Function(void Function(B6<int>))>()));
+  makeLive(_test6(new A<void Function(void Function(B6<String>))>()));
 }
 
 @pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/rti/emission/future_or.dart b/pkg/compiler/test/rti/emission/future_or.dart
index 61a2b8d..6fd0a4b 100644
--- a/pkg/compiler/test/rti/emission/future_or.dart
+++ b/pkg/compiler/test/rti/emission/future_or.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'dart:async';
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: global#Future:checkedInstance*/
 
@@ -43,8 +43,8 @@
 test(o) => o is FutureOr<A>;
 
 main() {
-  Expect.isTrue(test(new A()));
-  Expect.isTrue(test(new FutureMock<A>(new A())));
-  Expect.isFalse(test(new B()));
-  Expect.isFalse(test(new FutureMock<B>(new B())));
+  makeLive(test(new A()));
+  makeLive(test(new FutureMock<A>(new A())));
+  makeLive(test(new B()));
+  makeLive(test(new FutureMock<B>(new B())));
 }
diff --git a/pkg/compiler/test/rti/emission/future_or_future_or.dart b/pkg/compiler/test/rti/emission/future_or_future_or.dart
index 55abe4b..4d62f43 100644
--- a/pkg/compiler/test/rti/emission/future_or_future_or.dart
+++ b/pkg/compiler/test/rti/emission/future_or_future_or.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'dart:async';
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: global#Future:checkedInstance*/
 
@@ -19,6 +19,6 @@
 test(o) => o is FutureOr<FutureOr<A>>;
 
 main() {
-  Expect.isTrue(test(new A()));
-  Expect.isFalse(test(new B()));
+  makeLive(test(new A()));
+  makeLive(test(new B()));
 }
diff --git a/pkg/compiler/test/rti/emission/future_or_future_or_generic.dart b/pkg/compiler/test/rti/emission/future_or_future_or_generic.dart
index 629d268..5a5ebf3 100644
--- a/pkg/compiler/test/rti/emission/future_or_future_or_generic.dart
+++ b/pkg/compiler/test/rti/emission/future_or_future_or_generic.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'dart:async';
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: global#Future:checkedInstance*/
 
@@ -25,6 +25,6 @@
 class D {}
 
 main() {
-  Expect.isTrue(new A<FutureOr<C>>().m(new B<C>()));
-  Expect.isFalse(new A<FutureOr<D>>().m(new B<C>()));
+  makeLive(new A<FutureOr<C>>().m(new B<C>()));
+  makeLive(new A<FutureOr<D>>().m(new B<C>()));
 }
diff --git a/pkg/compiler/test/rti/emission/future_or_generic.dart b/pkg/compiler/test/rti/emission/future_or_generic.dart
index 7576c46..400464e 100644
--- a/pkg/compiler/test/rti/emission/future_or_generic.dart
+++ b/pkg/compiler/test/rti/emission/future_or_generic.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'dart:async';
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: global#Future:checkedInstance*/
 
@@ -48,8 +48,8 @@
 }
 
 main() {
-  Expect.isTrue(new A<B>().m(new B()));
-  Expect.isTrue(new A<B>().m(new FutureMock<B>(new B())));
-  Expect.isFalse(new A<C>().m(new B()));
-  Expect.isFalse(new A<C>().m(new FutureMock<B>(new B())));
+  makeLive(new A<B>().m(new B()));
+  makeLive(new A<B>().m(new FutureMock<B>(new B())));
+  makeLive(new A<C>().m(new B()));
+  makeLive(new A<C>().m(new FutureMock<B>(new B())));
 }
diff --git a/pkg/compiler/test/rti/emission/future_or_generic2.dart b/pkg/compiler/test/rti/emission/future_or_generic2.dart
index ae3dc31..1bb791c 100644
--- a/pkg/compiler/test/rti/emission/future_or_generic2.dart
+++ b/pkg/compiler/test/rti/emission/future_or_generic2.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'dart:async';
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: global#Future:checkedInstance*/
 
@@ -25,6 +25,6 @@
 class D {}
 
 main() {
-  Expect.isTrue(new A<C>().m(new B<C>()));
-  Expect.isFalse(new A<D>().m(new B<C>()));
+  makeLive(new A<C>().m(new B<C>()));
+  makeLive(new A<D>().m(new B<C>()));
 }
diff --git a/pkg/compiler/test/rti/emission/future_or_type_argument.dart b/pkg/compiler/test/rti/emission/future_or_type_argument.dart
index b095626..2f83645 100644
--- a/pkg/compiler/test/rti/emission/future_or_type_argument.dart
+++ b/pkg/compiler/test/rti/emission/future_or_type_argument.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'dart:async';
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: global#Future:typeArgument*/
 
@@ -22,8 +22,8 @@
 test(o) => o is A<FutureOr<B>>;
 
 main() {
-  Expect.isTrue(test(new A<B>()));
-  Expect.isTrue(test(new A<Future<B>>()));
-  Expect.isFalse(test(new A<C>()));
-  Expect.isFalse(test(new A<Future<C>>()));
+  makeLive(test(new A<B>()));
+  makeLive(test(new A<Future<B>>()));
+  makeLive(test(new A<C>()));
+  makeLive(test(new A<Future<C>>()));
 }
diff --git a/pkg/compiler/test/rti/emission/inherited_is.dart b/pkg/compiler/test/rti/emission/inherited_is.dart
index 608ae74..92c8579 100644
--- a/pkg/compiler/test/rti/emission/inherited_is.dart
+++ b/pkg/compiler/test/rti/emission/inherited_is.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedInstance*/
 class A {}
@@ -22,6 +22,6 @@
 test(o) => o is A;
 
 main() {
-  Expect.isTrue(test(new D()));
-  Expect.isFalse(test(null));
+  makeLive(test(new D()));
+  makeLive(test(null));
 }
diff --git a/pkg/compiler/test/rti/emission/inherited_is2.dart b/pkg/compiler/test/rti/emission/inherited_is2.dart
index c63bcad..7140429 100644
--- a/pkg/compiler/test/rti/emission/inherited_is2.dart
+++ b/pkg/compiler/test/rti/emission/inherited_is2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedInstance*/
 class A {}
@@ -22,6 +22,6 @@
 test(o) => o is A;
 
 main() {
-  Expect.isTrue(test(new D()));
-  Expect.isFalse(test(null));
+  makeLive(test(new D()));
+  makeLive(test(null));
 }
diff --git a/pkg/compiler/test/rti/emission/instantiated_type_literal.dart b/pkg/compiler/test/rti/emission/instantiated_type_literal.dart
index de04f0c..5e4cee2 100644
--- a/pkg/compiler/test/rti/emission/instantiated_type_literal.dart
+++ b/pkg/compiler/test/rti/emission/instantiated_type_literal.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.
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checks=[],instance*/
 class A<T> {
@@ -20,6 +20,6 @@
   var b = new B<int, String>();
   String name2 = '${b.instanceMethod<bool>()}';
 
-  Expect.equals('A<int>', name1);
-  Expect.equals('B<String, bool>', name2);
+  makeLive('A<int>' == name1);
+  makeLive('B<String, bool>' == name2);
 }
diff --git a/pkg/compiler/test/rti/emission/jsinterop_generic.dart b/pkg/compiler/test/rti/emission/jsinterop_generic.dart
index 31cade2..8281ee4 100644
--- a/pkg/compiler/test/rti/emission/jsinterop_generic.dart
+++ b/pkg/compiler/test/rti/emission/jsinterop_generic.dart
@@ -13,7 +13,7 @@
 // jsinterop classes implement the same interface.
 /*class: global#LegacyJavaScriptObject:checks=[$isA,$isB,$isB],instance*/
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 import 'package:js/js.dart';
 
 /*class: A:checkedInstance,checks=[],instance,onlyForRti*/
@@ -51,11 +51,11 @@
 }
 
 test(o) {
-  Expect.isTrue(o is A<int>, "Expected $o to be A<int>");
-  Expect.isTrue(o is A<String>, "Expected $o to be A<String>");
+  makeLive(o is A<int>);
+  makeLive(o is A<String>);
 
-  Expect.isTrue(o is B<int>, "Expected $o to be B<int>");
-  Expect.isTrue(o is B<String>, "Expected $o to be B<String>");
+  makeLive(o is B<int>);
+  makeLive(o is B<String>);
 
-  Expect.isFalse(o is D<int>, "Expected $o not to be D<int>");
+  makeLive(o is D<int>);
 }
diff --git a/pkg/compiler/test/rti/emission/jsinterop_generic_factory_args.dart b/pkg/compiler/test/rti/emission/jsinterop_generic_factory_args.dart
index 77b181d..3945cdc 100644
--- a/pkg/compiler/test/rti/emission/jsinterop_generic_factory_args.dart
+++ b/pkg/compiler/test/rti/emission/jsinterop_generic_factory_args.dart
@@ -9,7 +9,7 @@
 
 /*class: global#LegacyJavaScriptObject:*/
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 import 'package:js/js.dart';
 
 @JS()
@@ -44,13 +44,11 @@
 }
 
 test1(o) {
-  Expect.isTrue(o is List<A<int>>, "Expected $o to be List<A<int>>");
-  Expect.isTrue(o is List<A<String>>, "Expected $o to be List<A<String>>");
+  makeLive(o is List<A<int>>);
+  makeLive(o is List<A<String>>);
 }
 
 test2(o) {
-  Expect.isTrue(o is List<A<int> Function()>,
-      "Expected $o to be List<A<int> Function()>");
-  Expect.isTrue(o is List<A<String> Function()>,
-      "Expected $o to be List<A<String> Function()>");
+  makeLive(o is List<A<int> Function()>);
+  makeLive(o is List<A<String> Function()>);
 }
diff --git a/pkg/compiler/test/rti/emission/local_function_list_literal.dart b/pkg/compiler/test/rti/emission/local_function_list_literal.dart
index fa8d54f..cf87b88 100644
--- a/pkg/compiler/test/rti/emission/local_function_list_literal.dart
+++ b/pkg/compiler/test/rti/emission/local_function_list_literal.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: global#JSArray:checkedInstance,checks=[$isIterable,$isList],instance*/
 /*prod.class: global#JSArray:checks=[$isList],instance*/
@@ -18,6 +18,6 @@
 test(o) => o is List<int>;
 
 main() {
-  Expect.isTrue(test(method<int>().call()));
-  Expect.isFalse(test(method<String>().call()));
+  makeLive(test(method<int>().call()));
+  makeLive(test(method<String>().call()));
 }
diff --git a/pkg/compiler/test/rti/emission/local_function_map_literal.dart b/pkg/compiler/test/rti/emission/local_function_map_literal.dart
index 8c54820..0280357 100644
--- a/pkg/compiler/test/rti/emission/local_function_map_literal.dart
+++ b/pkg/compiler/test/rti/emission/local_function_map_literal.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: global#JsLinkedHashMap:checkedInstance,checks=[],instance*/
 
@@ -22,6 +22,6 @@
 test(o) => o is Map<int, int>;
 
 main() {
-  Expect.isTrue(test(method<int>().call()));
-  Expect.isFalse(test(method<String>().call()));
+  makeLive(test(method<int>().call()));
+  makeLive(test(method<String>().call()));
 }
diff --git a/pkg/compiler/test/rti/emission/mixin_mixin2.dart b/pkg/compiler/test/rti/emission/mixin_mixin2.dart
index fb95f94..6e73feb 100644
--- a/pkg/compiler/test/rti/emission/mixin_mixin2.dart
+++ b/pkg/compiler/test/rti/emission/mixin_mixin2.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import "package:compiler/src/util/testing.dart";
 
 /*class: M:checks=[]*/
 class M<T> {
@@ -38,8 +38,8 @@
 class H<T> extends D<Map<String, T>> {}
 
 main() {
-  Expect.equals("num", new E().t().toString());
-  Expect.equals("String", new F().t().toString());
-  Expect.equals("List<bool>", new G<bool>().t().toString());
-  Expect.equals("List<Set<Map<String, int>>>", new H<int>().t().toString());
+  makeLive("num" == new E().t().toString());
+  makeLive("String" == new F().t().toString());
+  makeLive("List<bool>" == new G<bool>().t().toString());
+  makeLive("List<Set<Map<String, int>>>" == new H<int>().t().toString());
 }
diff --git a/pkg/compiler/test/rti/emission/mixin_mixin4.dart b/pkg/compiler/test/rti/emission/mixin_mixin4.dart
index e77b220..0dde26f 100644
--- a/pkg/compiler/test/rti/emission/mixin_mixin4.dart
+++ b/pkg/compiler/test/rti/emission/mixin_mixin4.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import "package:compiler/src/util/testing.dart";
 
 /*class: I:checkedInstance*/
 class I<T> {}
@@ -30,12 +30,12 @@
 
 @pragma('dart2js:noInline')
 test(c) {
-  Expect.equals("Map<int, List<bool>>", c.t().toString());
-  Expect.isTrue(c is I<List<bool>>);
-  Expect.isTrue(c is J<bool>);
-  Expect.isTrue(c is S<int>);
-  Expect.isTrue(c is A<int, List<bool>>);
-  Expect.isTrue(c is M<Map<int, List<bool>>>);
+  makeLive("Map<int, List<bool>>" == c.t().toString());
+  makeLive(c is I<List<bool>>);
+  makeLive(c is J<bool>);
+  makeLive(c is S<int>);
+  makeLive(c is A<int, List<bool>>);
+  makeLive(c is M<Map<int, List<bool>>>);
 }
 
 main() {
diff --git a/pkg/compiler/test/rti/emission/mixin_subtype.dart b/pkg/compiler/test/rti/emission/mixin_subtype.dart
index 57b30b3..7f0656a 100644
--- a/pkg/compiler/test/rti/emission/mixin_subtype.dart
+++ b/pkg/compiler/test/rti/emission/mixin_subtype.dart
@@ -6,7 +6,7 @@
 
 // Derived from language_2/mixin_declaration/mixin_declaration_subtype_test.
 
-import "package:expect/expect.dart";
+import "package:compiler/src/util/testing.dart";
 
 // A mixin declaration introduces a type.
 
@@ -82,33 +82,30 @@
 /*class: GD:checkedInstance,typeArgument*/
 class GD<T> = GC<T> with GM<T>;
 
-@pragma('dart2js:noInline')
-test(o) {}
-
 main() {
-  test(new M3());
-  test(new D2());
-  test(new D4());
-  test(new E5());
-  Expect.subtype<M1, A>();
-  Expect.subtype<M1, B>();
-  Expect.subtype<M1, I>();
-  Expect.subtype<M1, J>();
-  Expect.subtype<D1, M1>();
-  Expect.subtype<D2, M2>();
-  Expect.subtype<D3, M3>();
-  Expect.subtype<D4, M4>();
-  Expect.subtype<D5, M5>();
-  Expect.subtype<E5, M5>();
-  Expect.notSubtype<M1, C>();
-  Expect.notSubtype<C, M1>();
+  makeLive(new M3());
+  makeLive(new D2());
+  makeLive(new D4());
+  makeLive(new E5());
+  subtype<M1, A>();
+  subtype<M1, B>();
+  subtype<M1, I>();
+  subtype<M1, J>();
+  subtype<D1, M1>();
+  subtype<D2, M2>();
+  subtype<D3, M3>();
+  subtype<D4, M4>();
+  subtype<D5, M5>();
+  subtype<E5, M5>();
+  notSubtype<M1, C>();
+  notSubtype<C, M1>();
 
-  Expect.subtype<GM<int>, GA<int>>();
-  Expect.subtype<GM<int>, GB<List<int>>>();
-  Expect.subtype<GM<int>, GI<Iterable<int>>>();
-  Expect.subtype<GM<int>, GJ<Set<int>>>();
-  Expect.subtype<GD<int>, GM<int>>();
-  Expect.subtype<GD<int>, GC<int>>();
-  Expect.notSubtype<GM<int>, GC<int>>();
-  Expect.notSubtype<GC<int>, GM<int>>();
+  subtype<GM<int>, GA<int>>();
+  subtype<GM<int>, GB<List<int>>>();
+  subtype<GM<int>, GI<Iterable<int>>>();
+  subtype<GM<int>, GJ<Set<int>>>();
+  subtype<GD<int>, GM<int>>();
+  subtype<GD<int>, GC<int>>();
+  notSubtype<GM<int>, GC<int>>();
+  notSubtype<GC<int>, GM<int>>();
 }
diff --git a/pkg/compiler/test/rti/emission/mixin_type_arguments.dart b/pkg/compiler/test/rti/emission/mixin_type_arguments.dart
index eced8f0..e3177da 100644
--- a/pkg/compiler/test/rti/emission/mixin_type_arguments.dart
+++ b/pkg/compiler/test/rti/emission/mixin_type_arguments.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart' show Expect;
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:typeArgument*/
 class A {}
@@ -84,26 +84,22 @@
 trace(x) => "${x.m1()}, ${x.m2()}, ${x.m3()}, ${x.m4()}, ${x.m5()}";
 
 main() {
-  Expect.stringEquals(
-      "M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>", trace(new C1()));
-  Expect.stringEquals("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>", trace(new C2()));
-  Expect.stringEquals(
-      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C3()));
-  Expect.stringEquals(
-      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C3<F>()));
-  Expect.stringEquals(
-      "M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>", trace(new C4()));
-  Expect.stringEquals("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>", trace(new C5()));
-  Expect.stringEquals(
-      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C6()));
-  Expect.stringEquals(
-      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C6<F>()));
-  Expect.stringEquals("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>", trace(new C7()));
-  Expect.stringEquals("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>", trace(new C8()));
-  Expect.stringEquals(
-      "M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>",
+  makeLive("M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>" == trace(new C1()));
+  makeLive("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>" == trace(new C2()));
+  makeLive(
+      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>" == trace(new C3()));
+  makeLive(
+      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>" == trace(new C3<F>()));
+  makeLive("M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>" == trace(new C4()));
+  makeLive("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>" == trace(new C5()));
+  makeLive(
+      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>" == trace(new C6()));
+  makeLive(
+      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>" == trace(new C6<F>()));
+  makeLive("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>" == trace(new C7()));
+  makeLive("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>" == trace(new C8()));
+  makeLive("M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>" ==
       trace(new C9()));
-  Expect.stringEquals(
-      "M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>",
+  makeLive("M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>" ==
       trace(new CA()));
 }
diff --git a/pkg/compiler/test/rti/emission/native.dart b/pkg/compiler/test/rti/emission/native.dart
index 6e75a73..5c1e846 100644
--- a/pkg/compiler/test/rti/emission/native.dart
+++ b/pkg/compiler/test/rti/emission/native.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import "package:compiler/src/util/testing.dart";
 // ignore: import_internal_library
 import 'dart:_js_helper' show Native;
 // ignore: import_internal_library
@@ -27,9 +27,9 @@
 @pragma('dart2js:noInline')
 testNative() {
   var x = makeP();
-  Expect.isTrue(x is Purple);
+  makeLive(x is Purple);
   x = makeQ();
-  Expect.isFalse(x is Purple);
+  makeLive(x is Purple);
 }
 
 main() {
diff --git a/pkg/compiler/test/rti/emission/optimized_is_check.dart b/pkg/compiler/test/rti/emission/optimized_is_check.dart
index 726440d..58ef9aa 100644
--- a/pkg/compiler/test/rti/emission/optimized_is_check.dart
+++ b/pkg/compiler/test/rti/emission/optimized_is_check.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 // It is sometimes possible to compile is-checks to 'instanceof', when the class
 // is not in an 'implements' clause or used as a mixin.
 
@@ -51,19 +53,19 @@
   var removed = Removed(); // This is optimized out.
 
   // Tests that can be compiled to instanceof:
-  if (things[0] is Instantiated) print('expected');
-  if (things[1] is Instantiated) print('unexpected');
-  if (things[1] is Removed) print('unexpected');
-  if (things[1] is DeferredAndRemoved) print('unexpected');
-  if (things[1] is Deferred) print('unexpected');
+  makeLive(things[0] is Instantiated);
+  makeLive(things[1] is Instantiated);
+  makeLive(things[1] is Removed);
+  makeLive(things[1] is DeferredAndRemoved);
+  makeLive(things[1] is Deferred);
   // Tests that might be optimized to false since there are no allocations:
-  if (things[1] is Unused) print('unexpected');
-  if (things[1] is UsedAsTypeParameter) print('unexpected');
+  makeLive(things[1] is Unused);
+  makeLive(things[1] is UsedAsTypeParameter);
 
-  if (checkX.check(things[0])) print('expected');
-  if (checkX.check(things[1])) print('unexpected');
-  if (checkU1.check(things[1])) print('unexpected');
-  if (checkU2.check(things[1])) print('unexpected');
+  makeLive(checkX.check(things[0]));
+  makeLive(checkX.check(things[1]));
+  makeLive(checkU1.check(things[1]));
+  makeLive(checkU2.check(things[1]));
 
   // ignore: UNUSED_LOCAL_VARIABLE
   var removed2 = DeferredAndRemoved(); // This is optimized out.
@@ -72,13 +74,13 @@
   things.setRange(0, 3, [Instantiated(), 1, Deferred()]);
 
   // Tests that can be compiled to instanceof:
-  if (things[0] is Instantiated) print('expected');
-  if (things[1] is Instantiated) print('unexpected');
-  if (things[1] is Removed) print('unexpected');
-  if (things[1] is DeferredAndRemoved) print('unexpected');
-  if (things[1] is Deferred) print('unexpected');
-  if (things[2] is Deferred) print('expected');
+  makeLive(things[0] is Instantiated);
+  makeLive(things[1] is Instantiated);
+  makeLive(things[1] is Removed);
+  makeLive(things[1] is DeferredAndRemoved);
+  makeLive(things[1] is Deferred);
+  makeLive(things[2] is Deferred);
   // Tests that might be optimized to false since there are no allocations:
-  if (things[1] is Unused) print('unexpected');
-  if (things[1] is UsedAsTypeParameter) print('unexpected');
+  makeLive(things[1] is Unused);
+  makeLive(things[1] is UsedAsTypeParameter);
 }
diff --git a/pkg/compiler/test/rti/emission/regress_18713.dart b/pkg/compiler/test/rti/emission/regress_18713.dart
index 6bd17d3..d2df779 100644
--- a/pkg/compiler/test/rti/emission/regress_18713.dart
+++ b/pkg/compiler/test/rti/emission/regress_18713.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import "package:expect/expect.dart";
+import "package:compiler/src/util/testing.dart";
 
 /*class: T:checks=[],indirectInstance*/
 class T<X> {
@@ -28,13 +28,13 @@
 main() {
   var ts = new TS<int, String>();
 
-  Expect.equals("String", ts.sType.toString());
-  Expect.equals("int", ts.tType.toString());
-  Expect.equals("String", ts.getSType.toString());
-  Expect.equals("int", ts.getTType.toString());
+  makeLive("String" == ts.sType.toString());
+  makeLive("int" == ts.tType.toString());
+  makeLive("String" == ts.getSType.toString());
+  makeLive("int" == ts.getTType.toString());
 
-  Expect.equals("String", dyn(ts).sType.toString());
-  Expect.equals("int", dyn(ts).tType.toString());
-  Expect.equals("String", dyn(ts).getSType.toString());
-  Expect.equals("int", dyn(ts).getTType.toString());
+  makeLive("String" == dyn(ts).sType.toString());
+  makeLive("int" == dyn(ts).tType.toString());
+  makeLive("String" == dyn(ts).getSType.toString());
+  makeLive("int" == dyn(ts).getTType.toString());
 }
diff --git a/pkg/compiler/test/rti/emission/replaced_type_variable.dart b/pkg/compiler/test/rti/emission/replaced_type_variable.dart
index 92ccac4..49fa658 100644
--- a/pkg/compiler/test/rti/emission/replaced_type_variable.dart
+++ b/pkg/compiler/test/rti/emission/replaced_type_variable.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 // This class is inlined away.
 /*class: Class:checks=[],instance*/
@@ -18,7 +18,7 @@
 class A {}
 
 @pragma('dart2js:noInline')
-test(o) => Expect.notEquals('dynamic', '$o');
+test(o) => makeLive('dynamic' != '$o');
 
 main() {
   test(const Class<A>().type);
diff --git a/pkg/compiler/test/rti/emission/runtime_type.dart b/pkg/compiler/test/rti/emission/runtime_type.dart
index d047f5f..d64a51d 100644
--- a/pkg/compiler/test/rti/emission/runtime_type.dart
+++ b/pkg/compiler/test/rti/emission/runtime_type.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*class: A:checks=[],instance*/
 class A<T> {}
 
@@ -11,5 +13,5 @@
 class B<T> {}
 
 main() {
-  print("A<B<int>>" == new A<B<int>>().runtimeType.toString());
+  makeLive("A<B<int>>" == new A<B<int>>().runtimeType.toString());
 }
diff --git a/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string1.dart b/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string1.dart
index 8f20f2e..e6da07f 100644
--- a/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string1.dart
+++ b/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string1.dart
@@ -4,9 +4,11 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 main() {
   /*spec.checks=[$signature],instance*/
   /*prod.checks=[],instance*/ T id<T>(T t) => t;
   int Function(int) x = id;
-  print("${x.runtimeType}");
+  makeLive("${x.runtimeType}");
 }
diff --git a/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string2.dart b/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string2.dart
index ab00cba..75b712e 100644
--- a/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string2.dart
+++ b/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string2.dart
@@ -4,9 +4,11 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 T id<T>(T t) => t;
 
 main() {
   int Function(int) x = id;
-  print("${x.runtimeType}");
+  makeLive("${x.runtimeType}");
 }
diff --git a/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string3.dart b/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string3.dart
index 326ed8f..1c6aabc 100644
--- a/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string3.dart
+++ b/pkg/compiler/test/rti/emission/runtime_type_instantiate_to_string3.dart
@@ -4,6 +4,8 @@
 
 // @dart = 2.7
 
+import 'package:compiler/src/util/testing.dart';
+
 /*class: Class:checks=[],instance*/
 class Class {
   T id<T>(T t) => t;
@@ -11,5 +13,5 @@
 
 main() {
   int Function(int) x = new Class().id;
-  print("${x.runtimeType}");
+  makeLive("${x.runtimeType}");
 }
diff --git a/pkg/compiler/test/rti/emission/subtype_named_args.dart b/pkg/compiler/test/rti/emission/subtype_named_args.dart
index ecc3fed..0f24520 100644
--- a/pkg/compiler/test/rti/emission/subtype_named_args.dart
+++ b/pkg/compiler/test/rti/emission/subtype_named_args.dart
@@ -6,7 +6,7 @@
 
 // From co19/Language/Types/Function_Types/subtype_named_args_t02.
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*spec.class: A:checkedInstance,checkedTypeArgument,typeArgument*/
 /*prod.class: A:checkedTypeArgument,typeArgument*/
@@ -54,56 +54,56 @@
 typedef okWithDynamicFunc_2({int x, bool y, List<Map> z, classesFunc v});
 
 main() {
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({D a, B b, C c, A d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({A a, A b, A c, A d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({D a, D b, D c, D d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({var a, var b, var c, var d}) {} is classesFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({Object a, Object b, Object c, Object d}) {} is classesFunc);
 
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
           is genericsFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {} is genericsFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({var m, var l, var g}) {} is genericsFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({Object m, Object l, Object g}) {} is genericsFunc);
 
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       ({int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
 
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       (
           {okWithClassesFunc_1 f1,
           okWithGenericsFunc_1 f2,
           okWithDynamicFunc_1 f3}) {} is funcFunc);
-  Expect.isTrue(
+  makeLive(
       /*checks=[$signature],instance*/
       (
           {okWithClassesFunc_2 f1,
diff --git a/pkg/compiler/test/rti/emission/superclass_as.dart b/pkg/compiler/test/rti/emission/superclass_as.dart
index 01f4a3e..e96e978 100644
--- a/pkg/compiler/test/rti/emission/superclass_as.dart
+++ b/pkg/compiler/test/rti/emission/superclass_as.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedInstance,checks=[],instance*/
 class A<T> {}
@@ -22,6 +22,6 @@
 test(o) => o is A<int>;
 
 main() {
-  Expect.isTrue(test(new C<int>().method()));
-  Expect.isFalse(test(new C<String>().method()));
+  makeLive(test(new C<int>().method()));
+  makeLive(test(new C<String>().method()));
 }
diff --git a/pkg/compiler/test/rti/emission/tear_off_types.dart b/pkg/compiler/test/rti/emission/tear_off_types.dart
index ef8fb52..0c0b64f 100644
--- a/pkg/compiler/test/rti/emission/tear_off_types.dart
+++ b/pkg/compiler/test/rti/emission/tear_off_types.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 main() {
   test1();
@@ -24,9 +24,9 @@
 
 @pragma('dart2js:noInline')
 test1() {
-  Expect.isTrue(_test1(method1a));
-  Expect.isTrue(_test1(method1b));
-  Expect.isFalse(_test1(method1c));
+  makeLive(_test1(method1a));
+  makeLive(_test1(method1b));
+  makeLive(_test1(method1c));
 }
 
 B1 method1a() => null;
@@ -46,9 +46,9 @@
 
 @pragma('dart2js:noInline')
 test2() {
-  Expect.isFalse(_test2(method2a));
-  Expect.isTrue(_test2(method2b));
-  Expect.isFalse(_test2(method2c));
+  makeLive(_test2(method2a));
+  makeLive(_test2(method2b));
+  makeLive(_test2(method2c));
 }
 
 void method2a(B2 b) {}
@@ -68,9 +68,9 @@
 
 @pragma('dart3js:noInline')
 test3() {
-  Expect.isTrue(_test3(method3a));
-  Expect.isTrue(_test3(method3b));
-  Expect.isFalse(_test3(method3c));
+  makeLive(_test3(method3a));
+  makeLive(_test3(method3b));
+  makeLive(_test3(method3c));
 }
 
 void method3a(B3 b) {}
@@ -88,9 +88,9 @@
 
 @pragma('dart4js:noInline')
 test4() {
-  Expect.isTrue(_test4(method4a));
-  Expect.isFalse(_test4(method4b));
-  Expect.isFalse(_test4(method4c));
+  makeLive(_test4(method4a));
+  makeLive(_test4(method4b));
+  makeLive(_test4(method4c));
 }
 
 B4 method4a() => null;
@@ -108,9 +108,9 @@
 
 @pragma('dart2js:noInline')
 test5() {
-  Expect.isTrue(_test5(method5a));
-  Expect.isTrue(_test5(method5b));
-  Expect.isFalse(_test5(method5c));
+  makeLive(_test5(method5a));
+  makeLive(_test5(method5b));
+  makeLive(_test5(method5c));
 }
 
 void method5a(void Function(B5) f) => null;
@@ -128,9 +128,9 @@
 
 @pragma('dart6js:noInline')
 test6() {
-  Expect.isTrue(_test6(method6a));
-  Expect.isTrue(_test6(method6b));
-  Expect.isFalse(_test6(method6c));
+  makeLive(_test6(method6a));
+  makeLive(_test6(method6b));
+  makeLive(_test6(method6c));
 }
 
 void Function(B6) method6a() => null;
@@ -148,9 +148,9 @@
 
 @pragma('dart7js:noInline')
 test7() {
-  Expect.isTrue(_test7(method7a));
-  Expect.isFalse(_test7(method7b));
-  Expect.isFalse(_test7(method7c));
+  makeLive(_test7(method7a));
+  makeLive(_test7(method7b));
+  makeLive(_test7(method7c));
 }
 
 void method7a(void Function(B7) f) => null;
diff --git a/pkg/compiler/test/rti/emission/type_argument_dynamic.dart b/pkg/compiler/test/rti/emission/type_argument_dynamic.dart
index 745eb80..a3c510f 100644
--- a/pkg/compiler/test/rti/emission/type_argument_dynamic.dart
+++ b/pkg/compiler/test/rti/emission/type_argument_dynamic.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedTypeArgument,typeArgument*/
 class A {}
@@ -36,6 +36,6 @@
 main() {
   dynamic o =
       new DateTime.now().millisecondsSinceEpoch == 0 ? new F() : new E();
-  Expect.isTrue(test(o.m<B>()));
-  Expect.isFalse(test(o.m<D>()));
+  makeLive(test(o.m<B>()));
+  makeLive(test(o.m<D>()));
 }
diff --git a/pkg/compiler/test/rti/emission/type_argument_static.dart b/pkg/compiler/test/rti/emission/type_argument_static.dart
index 79dd1d5..d773d23 100644
--- a/pkg/compiler/test/rti/emission/type_argument_static.dart
+++ b/pkg/compiler/test/rti/emission/type_argument_static.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: A:checkedTypeArgument,typeArgument*/
 class A {}
@@ -25,6 +25,6 @@
 test(o) => o is C<A>;
 
 main() {
-  Expect.isTrue(test(m<B>()));
-  Expect.isFalse(test(m<D>()));
+  makeLive(test(m<B>()));
+  makeLive(test(m<D>()));
 }
diff --git a/pkg/compiler/test/rti/emission/type_literal.dart b/pkg/compiler/test/rti/emission/type_literal.dart
index c075324..6c7a95d 100644
--- a/pkg/compiler/test/rti/emission/type_literal.dart
+++ b/pkg/compiler/test/rti/emission/type_literal.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.7
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 /*class: Class1:typeLiteral*/
 class Class1 {}
@@ -15,6 +15,6 @@
 void main() {
   String name1 = '${Class1}';
   String name2 = '${Class2}';
-  Expect.equals('Class1', name1);
-  Expect.equals('Class2<dynamic>', name2);
+  makeLive('Class1' == name1);
+  makeLive('Class2<dynamic>' == name2);
 }
diff --git a/pkg/compiler/test/rti/emission/type_variable_function_type.dart b/pkg/compiler/test/rti/emission/type_variable_function_type.dart
index 5509423..ae801a8 100644
--- a/pkg/compiler/test/rti/emission/type_variable_function_type.dart
+++ b/pkg/compiler/test/rti/emission/type_variable_function_type.dart
@@ -6,7 +6,7 @@
 
 // Based on tests/language_2/type_variable_function_type_test.dart
 
-import 'package:expect/expect.dart';
+import 'package:compiler/src/util/testing.dart';
 
 typedef T Func<T>();
 
@@ -27,6 +27,6 @@
 void main() {
   dynamic x = new Foo<List<String>>();
   if (new DateTime.now().millisecondsSinceEpoch == 42) x = new Foo<int>();
-  Expect.isFalse(x.m(new Bar<String>().f()));
-  Expect.isTrue(x.m(new Bar<List<String>>().f()));
+  makeLive(x.m(new Bar<String>().f()));
+  makeLive(x.m(new Bar<List<String>>().f()));
 }
diff --git a/pkg/compiler/test/rti/factory_call_test.dart b/pkg/compiler/test/rti/factory_call_test.dart
index e77adc2..714c425 100644
--- a/pkg/compiler/test/rti/factory_call_test.dart
+++ b/pkg/compiler/test/rti/factory_call_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.7
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/runtime_types_resolution.dart';
diff --git a/pkg/compiler/test/rti/instance_call_test.dart b/pkg/compiler/test/rti/instance_call_test.dart
index 6b123c3..d7eacdc 100644
--- a/pkg/compiler/test/rti/instance_call_test.dart
+++ b/pkg/compiler/test/rti/instance_call_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/names.dart';
diff --git a/pkg/compiler/test/rti/rti_need_test_helper.dart b/pkg/compiler/test/rti/rti_need_test_helper.dart
index 50cb925..8973cd7 100644
--- a/pkg/compiler/test/rti/rti_need_test_helper.dart
+++ b/pkg/compiler/test/rti/rti_need_test_helper.dart
@@ -9,7 +9,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
 import 'package:compiler/src/common.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
diff --git a/pkg/compiler/test/serialization/serialization_test_helper.dart b/pkg/compiler/test/serialization/serialization_test_helper.dart
index 0a7b306..a29a79c 100644
--- a/pkg/compiler/test/serialization/serialization_test_helper.dart
+++ b/pkg/compiler/test/serialization/serialization_test_helper.dart
@@ -6,7 +6,7 @@
 
 import 'dart:io';
 
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/js_model/js_world.dart';
diff --git a/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart b/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart
index 424345f..24ad0a3 100644
--- a/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart
+++ b/pkg/compiler/test/sourcemaps/helpers/sourcemap_helper.dart
@@ -8,9 +8,9 @@
 
 import 'dart:async';
 import 'dart:io';
-import 'package:compiler/compiler_new.dart';
-import 'package:compiler/src/apiimpl.dart' as api;
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/compiler.dart' as api;
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/io/code_output.dart';
 import 'package:compiler/src/io/source_file.dart';
@@ -357,7 +357,7 @@
       throw "Compilation failed.";
     }
 
-    api.CompilerImpl compiler = result.compiler;
+    var compiler = result.compiler;
     JsBackendStrategy backendStrategy = compiler.backendStrategy;
     RecordingSourceInformationStrategy strategy =
         backendStrategy.sourceInformationStrategy;
@@ -414,7 +414,7 @@
 }
 
 class SourceMaps {
-  final api.CompilerImpl compiler;
+  final api.Compiler compiler;
   final SourceFileManager sourceFileManager;
   // TODO(johnniwinther): Supported multiple output units.
   final SourceMapInfo mainSourceMapInfo;
diff --git a/pkg/compiler/test/sourcemaps/mapping_test.dart b/pkg/compiler/test/sourcemaps/mapping_test.dart
index e569599..e976ff8 100644
--- a/pkg/compiler/test/sourcemaps/mapping_test.dart
+++ b/pkg/compiler/test/sourcemaps/mapping_test.dart
@@ -9,7 +9,7 @@
 
 import 'package:_fe_analyzer_shared/src/testing/annotated_code_helper.dart';
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:expect/expect.dart';
 import 'package:source_maps/source_maps.dart';
 
diff --git a/pkg/compiler/test/sourcemaps/name_test.dart b/pkg/compiler/test/sourcemaps/name_test.dart
index 5f2e197..fee442f 100644
--- a/pkg/compiler/test/sourcemaps/name_test.dart
+++ b/pkg/compiler/test/sourcemaps/name_test.dart
@@ -9,7 +9,7 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/commandline_options.dart';
-import 'package:compiler/src/common_elements.dart' show JElementEnvironment;
+import 'package:compiler/src/common/elements.dart' show JElementEnvironment;
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/io/kernel_source_information.dart';
diff --git a/pkg/compiler/test/sourcemaps/nomapping_test.dart b/pkg/compiler/test/sourcemaps/nomapping_test.dart
index 06cbf4f..fdbd62b 100644
--- a/pkg/compiler/test/sourcemaps/nomapping_test.dart
+++ b/pkg/compiler/test/sourcemaps/nomapping_test.dart
@@ -8,7 +8,7 @@
 import 'dart:io';
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:expect/expect.dart';
 import 'package:source_maps/source_maps.dart';
diff --git a/pkg/compiler/test/sourcemaps/source_map_test.dart b/pkg/compiler/test/sourcemaps/source_map_test.dart
index 2afead7..4d2664b 100644
--- a/pkg/compiler/test/sourcemaps/source_map_test.dart
+++ b/pkg/compiler/test/sourcemaps/source_map_test.dart
@@ -10,7 +10,7 @@
 library test.source_map;
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:expect/expect.dart';
 import '../helpers/memory_compiler.dart';
 
diff --git a/pkg/compiler/test/sourcemaps/tools/diff_view.dart b/pkg/compiler/test/sourcemaps/tools/diff_view.dart
index 9d245c3..ba9d49a 100644
--- a/pkg/compiler/test/sourcemaps/tools/diff_view.dart
+++ b/pkg/compiler/test/sourcemaps/tools/diff_view.dart
@@ -11,7 +11,7 @@
 import 'dart:io';
 
 import 'package:_fe_analyzer_shared/src/util/filenames.dart';
-import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/diagnostics/invariant.dart';
 import 'package:compiler/src/elements/entities.dart';
diff --git a/pkg/compiler/test/sourcemaps/tools/source_mapping_tester.dart b/pkg/compiler/test/sourcemaps/tools/source_mapping_tester.dart
index 6bca3c3..8f5e582 100644
--- a/pkg/compiler/test/sourcemaps/tools/source_mapping_tester.dart
+++ b/pkg/compiler/test/sourcemaps/tools/source_mapping_tester.dart
@@ -157,7 +157,7 @@
       .process(['--csp', Flags.disableInlining, ...options], verbose: verbose);
   TestResult result = new TestResult(config, filename, processor);
   for (SourceMapInfo info in sourceMaps.elementSourceMapInfos.values) {
-    if (info.element.library.canonicalUri.scheme == 'dart') continue;
+    if (info.element.library.canonicalUri.isScheme('dart')) continue;
     result.userInfoList.add(info);
     Iterable<CodePoint> missingCodePoints =
         info.codePoints.where((c) => c.isMissing);
diff --git a/pkg/compiler/test/static_type/static_type_test.dart b/pkg/compiler/test/static_type/static_type_test.dart
index 0123144..0498952 100644
--- a/pkg/compiler/test/static_type/static_type_test.dart
+++ b/pkg/compiler/test/static_type/static_type_test.dart
@@ -12,7 +12,7 @@
 import 'package:compiler/src/ir/cached_static_type.dart';
 import 'package:compiler/src/ir/static_type_base.dart';
 import 'package:compiler/src/ir/static_type_cache.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
@@ -34,7 +34,7 @@
   ir.TypeEnvironment _typeEnvironment;
 
   ir.StaticTypeContext getStaticTypeContext(
-      KernelToElementMapImpl elementMap, ir.Member node) {
+      KernelToElementMap elementMap, ir.Member node) {
     if (_typeEnvironment == null) {
       ir.Component component = elementMap.env.mainComponent;
       ir.CoreTypes coreTypes = new ir.CoreTypes(component);
@@ -52,7 +52,7 @@
       Map<Id, ActualData<String>> actualMap,
       {bool verbose: false}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     StaticTypeCache staticTypeCache = elementMap.getCachedStaticTypes(member);
     ir.Member node = elementMap.getMemberNode(member);
     new StaticTypeIrComputer(
diff --git a/pkg/compiler/test/static_type/type_promotion_test.dart b/pkg/compiler/test/static_type/type_promotion_test.dart
index 9584f53..c6ab8a8 100644
--- a/pkg/compiler/test/static_type/type_promotion_test.dart
+++ b/pkg/compiler/test/static_type/type_promotion_test.dart
@@ -10,7 +10,7 @@
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/ir/static_type.dart';
-import 'package:compiler/src/kernel/element_map_impl.dart';
+import 'package:compiler/src/kernel/element_map.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
@@ -31,7 +31,7 @@
 class TypePromotionDataComputer extends DataComputer<String> {
   ir.TypeEnvironment _typeEnvironment;
 
-  ir.TypeEnvironment getTypeEnvironment(KernelToElementMapImpl elementMap) {
+  ir.TypeEnvironment getTypeEnvironment(KernelToElementMap elementMap) {
     if (_typeEnvironment == null) {
       ir.Component component = elementMap.env.mainComponent;
       ir.CoreTypes coreTypes = new ir.CoreTypes(component);
@@ -49,7 +49,7 @@
       Map<Id, ActualData<String>> actualMap,
       {bool verbose: false}) {
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
-    KernelToElementMapImpl elementMap = frontendStrategy.elementMap;
+    KernelToElementMap elementMap = frontendStrategy.elementMap;
     Map<ir.Expression, TypeMap> typeMaps =
         elementMap.getTypeMapsForTesting(member);
     ir.Member node = elementMap.getMemberNode(member);
diff --git a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
index 228adcd..dad02c9 100644
--- a/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
+++ b/pkg/compiler/test/tool/graph_isomorphizer/graph_isomorphizer_test.dart
@@ -7,7 +7,7 @@
 import 'dart:io';
 
 import 'package:expect/expect.dart';
-import 'package:compiler/compiler_new.dart';
+import 'package:compiler/compiler.dart';
 import 'package:dart_style/dart_style.dart' show DartFormatter;
 import '../../helpers/memory_compiler.dart';
 import '../../../tool/graph_isomorphizer.dart';
diff --git a/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart b/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart
index e5fc258..885ecb4 100644
--- a/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart
+++ b/pkg/compiler/tool/kernel_visitor/test/info_visitor_test.dart
@@ -1,45 +1,17 @@
 // 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:kernel/kernel.dart";
-import "package:expect/expect.dart";
-import "package:expect/minitest.dart";
-import "../dart_html_metrics_visitor.dart";
-import "package:cli_util/cli_util.dart";
-import "package:path/path.dart" as path;
+
 import "dart:io";
 
-main() async {
-  // Compile Dill
-  var sdkPath = getSdkPath();
-  if (!sdkPath.contains("ReleaseX64"))
-    sdkPath = path.join(sdkPath, "ReleaseX64", "dart-sdk");
-  var scriptPath = Platform.script.path;
-  var pkgPath = path.dirname(
-      path.dirname(path.dirname(path.dirname(path.dirname(scriptPath)))));
-  var compilePath = path.canonicalize(
-      path.join(pkgPath, "front_end", "tool", "_fasta", "compile.dart"));
-  var testClassesPath = path
-      .canonicalize(path.join(path.dirname(scriptPath), "test_classes.dart"));
-  var ddcOutlinePath =
-      path.canonicalize(path.join(sdkPath, "lib", "_internal", "ddc_sdk.dill"));
-  var dillPath = path
-      .canonicalize(path.join(path.dirname(scriptPath), "test_classes.dill"));
+import "package:expect/expect.dart";
+import "package:expect/minitest.dart";
+import "package:kernel/kernel.dart";
+import "package:path/path.dart" as path;
 
-  await Process.run(path.join(sdkPath, "bin", "dart"), [
-    compilePath,
-    "--target=dartdevc",
-    "--platform=${ddcOutlinePath}",
-    "-o=${dillPath}",
-    testClassesPath
-  ]);
+import "../dart_html_metrics_visitor.dart";
 
-  // Dill compiled from test_classes.dart using ddc.
-  var component = loadComponentFromBinary(dillPath);
-  var visitor = MetricsVisitor(["file:${testClassesPath}"]);
-
-  component.accept(visitor);
-
+void runTests(MetricsVisitor visitor) {
   test("Class A does not call super", () {
     Expect.equals(visitor.classInfo["A"].invokesSuper, false);
   });
@@ -95,3 +67,42 @@
         visitor.classInfo["G"].notOverriddenMethods.contains("getValue"), true);
   });
 }
+
+void main() async {
+  // Compile Dill
+  var sdkPath = path.dirname(path.dirname(Platform.resolvedExecutable));
+  if (!sdkPath.contains("ReleaseX64"))
+    sdkPath = path.join(sdkPath, "ReleaseX64", "dart-sdk");
+  var scriptPath = Platform.script.path;
+  var pkgPath = path.dirname(
+      path.dirname(path.dirname(path.dirname(path.dirname(scriptPath)))));
+  var compilePath = path.canonicalize(
+      path.join(pkgPath, "front_end", "tool", "_fasta", "compile.dart"));
+  var testClassesPath = path
+      .canonicalize(path.join(path.dirname(scriptPath), "test_classes.dart"));
+  var ddcOutlinePath =
+      path.canonicalize(path.join(sdkPath, "lib", "_internal", "ddc_sdk.dill"));
+  var dillPath = path
+      .canonicalize(path.join(path.dirname(scriptPath), "test_classes.dill"));
+
+  await Process.run(path.join(sdkPath, "bin", "dart"), [
+    compilePath,
+    "--target=dartdevc",
+    "--platform=${ddcOutlinePath}",
+    "-o=${dillPath}",
+    testClassesPath
+  ]);
+
+  // Dill compiled from test_classes.dart using ddc.
+  var component = loadComponentFromBinary(dillPath);
+  var visitor = MetricsVisitor(["file:${testClassesPath}"]);
+
+  component.accept(visitor);
+
+  try {
+    runTests(visitor);
+  } finally {
+    // Cleanup.
+    File(dillPath).deleteSync();
+  }
+}
diff --git a/pkg/compiler/tool/modular_test_suite_helper.dart b/pkg/compiler/tool/modular_test_suite_helper.dart
index cd583ad..d4ff09e 100644
--- a/pkg/compiler/tool/modular_test_suite_helper.dart
+++ b/pkg/compiler/tool/modular_test_suite_helper.dart
@@ -638,7 +638,7 @@
       String sourceUriOrPath, String relativeSnapshotPath) async {
     Uri sourceUri = sdkRoot.resolve(sourceUriOrPath);
     String result =
-        sourceUri.scheme == 'file' ? sourceUri.toFilePath() : sourceUriOrPath;
+        sourceUri.isScheme('file') ? sourceUri.toFilePath() : sourceUriOrPath;
     if (_options.useSdk) {
       String snapshot = Uri.file(Platform.resolvedExecutable)
           .resolve(relativeSnapshotPath)
diff --git a/pkg/compiler/tool/used_names/README.md b/pkg/compiler/tool/used_names/README.md
new file mode 100644
index 0000000..5fd8bf6
--- /dev/null
+++ b/pkg/compiler/tool/used_names/README.md
@@ -0,0 +1,52 @@
+## used_names.html
+
+To run this program, visit
+[`pkg/compiler/tool/used_names/used_names.html`](used_names.html) in a browser.
+
+The page will display a list of short names that are defined as properties on
+all the objects available from `window`. The names are sorted by size, and then
+alphabetically ignoring case, and finally by case. They are quoted for easy
+copy-paste into a Dart source file.
+
+This data is to be used for editing tables of names that the minifying namer
+should avoid in some circumstances.  These names should be in the table, but
+other names might need to be in the table too.
+
+### Why these names?
+
+There are contexts where dart2js generates `a.b()` with the expectation that it
+will either call an instance method in the Dart program or crash with a
+JavaScript TypeError for an undefined function. The minifier code can't use
+certain names for `b` since it won't crash, for example `toString`, or `length`,
+which might result in a less clear diagnostic.
+
+An example of this use is in dynamic calls to methods that do not need the
+special 'interceptor' calling convention used on native objects like Arrays,
+Strings, numbers and @Native classes. Dynamic calls use the same selector as
+instance calls.
+
+In unminified code we arrange that the selectors are descriptive of the call
+site structure, e.g. `toString$0` or `get$length`. These generally are not
+defined in the execution environment.
+
+For minified code, we want to pick names as short as possible, so there is a
+chance that the short names will conflict with one defined in the environment.
+For example, minifying something to `a.at()` might call `String.prototype.at`.
+
+### Discussion
+
+In retrospect the decision to use names that Dart has no control over is not the
+best. When this part of the compiler was written, the language was still very
+dynamic (Dart 1) and there were very few program that extensively used
+JavaScript interop.
+
+Now that typical programs contain many fewer dynamic calls, perhaps it is time
+to make the calling convention for dynamic call different to that for instance
+method calls. One idea is we could start by making dynamic calls have a
+different selector. This selector would eventually be a fully-checked entry
+point, but initially it could just be an alias for the instance-call entry
+point. The alias could be a JavaScript Symbol, or for legacy browsers, always
+start with `dyn$`, even when minified.
+
+
+
diff --git a/pkg/compiler/tool/used_names/used_names.html b/pkg/compiler/tool/used_names/used_names.html
new file mode 100644
index 0000000..349c3c2
--- /dev/null
+++ b/pkg/compiler/tool/used_names/used_names.html
@@ -0,0 +1,6 @@
+<!--
+// 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.
+-->
+<script src="used_names.js" defer></script>
diff --git a/pkg/compiler/tool/used_names/used_names.js b/pkg/compiler/tool/used_names/used_names.js
new file mode 100644
index 0000000..6d9c4c2
--- /dev/null
+++ b/pkg/compiler/tool/used_names/used_names.js
@@ -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.
+
+// Script to find all short names used prototypes of global definitions.  This
+// can be used as a basis for a list of names to avoid for dynamic method
+// selectors.
+//
+// TODO(7554): Update compiler regularly.
+
+function analyze() {
+  let names = Object.create(null)
+  for (var global of Object.getOwnPropertyNames(self)) {
+    let value = window[global];
+    if (typeof value != "function") continue;
+    let prototype = value.prototype;
+    if (prototype == null) continue;
+    while (prototype != null) {
+      for (let name of Object.getOwnPropertyNames(prototype)) {
+        if (name.length > 4) continue;
+        names[name] = 1;
+      }
+      prototype = Object.getPrototypeOf(prototype);
+    }
+  }
+
+  names = Object.keys(names);
+
+  function byLengthThenName(a, b) {
+    if (a.length != b.length) return a.length - b.length;
+    let a_lc = a.toLowerCase();
+    let b_lc = b.toLowerCase();
+    if (a_lc < b_lc) return -1;
+    if (a_lc > b_lc) return 1;
+    if (a > b) return -1;
+    if (a < b) return 1;
+    return 0;
+  }
+  names.sort(byLengthThenName);
+
+  return names;
+}
+
+function display(names) {
+  console.log(names)
+  let div = document.createElement('div');
+  document.body.appendChild(div);
+  div.style.fontFamily = 'courier'
+  for (let name of names) {
+    div.appendChild(document.createTextNode("'" + name + "',"))
+    div.appendChild(document.createElement("br"));
+  }
+}
+
+display(analyze());
diff --git a/pkg/dart2js_info/OWNERS b/pkg/dart2js_info/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/dart2js_info/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/dart2js_info/README.md b/pkg/dart2js_info/README.md
index 5f05010..54f3a7a 100644
--- a/pkg/dart2js_info/README.md
+++ b/pkg/dart2js_info/README.md
@@ -51,8 +51,7 @@
 
 ## Format
 
-There are several formats of info files. Dart2js today produces a JSON format,
-but very soon will switch to produce a binary format by default.
+Dart2js info files are produced in either a binary or JSON format.
 
 ## Info API
 
@@ -135,6 +134,12 @@
     be JSON, backward-compatible JSON, binary, or protobuf schema (as defined in
     `info.proto`).
 
+  * [`runtime_coverage`][runtime_coverage]:
+    dart2js has an experimental feature to gather runtime coverage data of your
+    application. This tool correlates that with the info file and can output a
+    package-level breakdown of which files were not used during the runtime of
+    your app.
+
   * [`show`][show]: a tool that dumps info files in a readable text format.
 
 Next we describe in detail how to use each of these tools.
@@ -502,7 +507,7 @@
 `myMethodName`, you will save at least that 13.97%, and possibly some more from
 the reachable size, but how much of that we are not certain.
 
-### Coverage tools
+### Coverage Server Analysis
 
 Coverage information requires a bit more setup and work to get them running. The
 steps are as follows:
@@ -539,6 +544,75 @@
 $ dart2js_info coverage_analysis main.dart.info.data main.dart.coverage.json
 ```
 
+### Runtime Code Analysis
+
+Runtime code analysis requires both an info file and a runtime data file. 
+
+The info file is emitted by compiling a dart2js app with `--dump-info`:
+
+```console
+$ dart2js --dump-info main.dart
+```
+
+Enable the collection of runtime data by compiling a dart2js app with an
+experimental flag:
+
+```console
+$ dart2js --experimental-track-allocations main.dart
+```
+
+After using your app (manually or via integration tests), dump the top-level
+window object below to a text file:
+
+```javascript
+JSON.stringify($__dart_deferred_initializers__.allocations)
+```
+
+Finally run this tool:
+
+```console
+$ dart2js_info runtime_coverage main.dart.info.data main.runtime.data.txt
+```
+
+And with the following to view package-level information:
+
+```console
+$ dart2js_info runtime_coverage --show-packages main.dart.info.data main.runtime.data.txt
+```
+
+Here's an example output snippet:
+```
+Runtime Coverage Summary
+========================================================================
+                                   bytes      %
+ Program size                   96860754 100.00%
+ Libraries (excluding statics)  94394961  97.45%
+ Code (classes + closures)      91141701  94.10%
+ Used                            3519239   3.63%
+
+                                   count      %
+ Classes + closures                15902 100.00%
+ Used                               5661  35.60%
+
+Runtime Coverage Breakdown (packages) (87622462 bytes)
+========================================================================
+ package:angular_components.material_datepicker (29881 bytes unused)
+   proportion of package used:                      43394/73275 (59.22%)
+   proportion of unused code to all code:           29881/91141701 (0.03%)
+   proportion of unused code to all unused code:    29881/87622462 (0.03%)
+   proportion of main unit code to package code:    8142/73275 (11.11%)
+   proportion of main unit code that is unused:     3088/8142 (37.93%)
+   package breakdown:
+     [-D] package:angular_components.material_datepicker/material_datepicker.dart:_ViewMaterialDatepickerComponent5: 656 bytes (0.90% of package)
+     [+D] package:angular_components.material_datepicker/calendar.dart:CalendarSelection: 645 bytes (0.88% of package)
+     [+M] package:angular_components.material_datepicker/range.dart:MonthRange: 629 bytes (0.86% of package)
+     [-M] package:angular_components.material_datepicker/range.dart:QuarterRange: 629 bytes (0.86% of package)
+...
+```
+
+A `+`/`-` indicates whether or not the element was used at runtime.
+A `M`/`D` indicates whether or not the element was in the main or deferred output unit.
+
 ## Code location, features and bugs
 
 This package is developed in [github][repo].  Please file feature requests and
@@ -557,5 +631,6 @@
 [function_size]: https://github.com/dart-lang/sdk/tree/main/pkg/dart2js_info/bin/src/function_size_analysis.dart
 [library_size]: https://github.com/dart-lang/sdk/tree/main/pkg/dart2js_info/bin/src/library_size_split.dart
 [repo]: https://github.com/dart-lang/sdk/tree/main/pkg/dart2js_info/
+[runtime_coverage]: https://github.com/dart-lang/sdk/blob/main/pkg/dart2js_info/bin/src/runtime_coverage_analysis.dart
 [show]: https://github.com/dart-lang/sdk/tree/main/pkg/dart2js_info/bin/src/text_print.dart
 [tracker]: https://github.com/dart-lang/sdk/issues
diff --git a/pkg/dart2js_info/bin/src/deferred_library_layout.dart b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
index 1c4f13f..95f20a5 100644
--- a/pkg/dart2js_info/bin/src/deferred_library_layout.dart
+++ b/pkg/dart2js_info/bin/src/deferred_library_layout.dart
@@ -64,7 +64,7 @@
     print('  contains:');
     map.forEach((lib, elements) {
       var uri = lib.uri;
-      var shortUri = (uri.scheme == 'file' && uri.path.startsWith(dir))
+      var shortUri = (uri.isScheme('file') && uri.path.startsWith(dir))
           ? uri.path.substring(dir.length + 1)
           : '$uri';
 
diff --git a/pkg/dart2js_info/bin/src/runtime_coverage_analysis.dart b/pkg/dart2js_info/bin/src/runtime_coverage_analysis.dart
index 577aee6..44429e0 100644
--- a/pkg/dart2js_info/bin/src/runtime_coverage_analysis.dart
+++ b/pkg/dart2js_info/bin/src/runtime_coverage_analysis.dart
@@ -21,7 +21,8 @@
 ///     This can be combined with the --dump-info step above.
 ///
 ///   * Load your app, exercise your code, then extract the runtime code
-///     coverage JSON blob by querying `$__dart_deferred_initializers__.allocations` in the page.
+///     coverage JSON blob by querying
+///     `$__dart_deferred_initializers__.allocations` in the page.
 ///
 ///   * Finally, run this tool.
 library compiler.tool.runtime_coverage_analysis;
@@ -45,7 +46,10 @@
   @override
   final String description = "Analyze runtime coverage data";
 
-  RuntimeCoverageAnalysisCommand();
+  RuntimeCoverageAnalysisCommand() {
+    argParser.addFlag('show-packages',
+        defaultsTo: false, help: "Show coverage details at the package level.");
+  }
 
   @override
   void run() async {
@@ -53,16 +57,23 @@
     if (args.length < 2) {
       usageException('Missing arguments, expected: info.data coverage.json');
     }
-    await _runtimeCoverageAnalysis(args[0], args[1]);
+    var showPackages = argResults['show-packages'];
+    if (showPackages) {
+      await _reportWithPackages(args[0], args[1]);
+    } else {
+      await _report(args[0], args[1]);
+    }
   }
 }
 
-Future<void> _runtimeCoverageAnalysis(infoFile, coverageFile) async {
+Future<void> _report(
+  String infoFile,
+  String coverageFile,
+) async {
   var info = await infoFromFile(infoFile);
   var coverageRaw = jsonDecode(File(coverageFile).readAsStringSync());
-  var coverage = <String, bool>{};
-  coverageRaw
-      .forEach((k, v) => coverage[k] = coverage[k] ?? false || v as bool);
+  // The value associated with each coverage item isn't used for now.
+  var coverage = coverageRaw.keys.toSet();
 
   int totalProgramSize = info.program.size;
   int totalLibSize = info.libraries.fold(0, (n, lib) => n + lib.size);
@@ -74,9 +85,8 @@
   void tallyCode(Info i) {
     totalCode += i.size;
     var name = qualifiedName(i);
-    var used = coverage[name];
-
-    if (used != null) {
+    var used = coverage.contains(name);
+    if (used) {
       usedCode += i.size;
     } else {
       unused.add(i);
@@ -102,8 +112,6 @@
   print('');
   var unusedTotal = totalCode - usedCode;
   _section('Runtime Coverage Breakdown', size: unusedTotal);
-
-  // TODO(markzipan): support grouping results by package/library.
   for (int i = 0; i < unused.length; i++) {
     var item = unused.removeFirst();
     var percent = (item.size * 100 / unusedTotal).toStringAsFixed(2);
@@ -111,6 +119,112 @@
   }
 }
 
+Future<void> _reportWithPackages(
+  String infoFile,
+  String coverageFile,
+) async {
+  var info = await infoFromFile(infoFile);
+  var coverageRaw = jsonDecode(File(coverageFile).readAsStringSync());
+  // The value associated with each coverage item isn't used for now.
+  var coverage = coverageRaw.keys.toSet();
+
+  int totalProgramSize = info.program.size;
+  int totalLibSize = info.libraries.fold(0, (n, lib) => n + lib.size);
+
+  int totalCode = 0;
+  int usedCode = 0;
+  var packageData = <String, PackageInfo>{};
+  var unused = PriorityQueue<Info>((a, b) => b.size.compareTo(a.size));
+
+  void tallyCode(BasicInfo i) {
+    totalCode += i.size;
+    var name = qualifiedName(i);
+    var used = coverage.contains(name);
+
+    var groupName = libraryGroupName(i);
+    packageData.putIfAbsent(groupName, () => PackageInfo());
+    packageData[groupName].add(i, used: used);
+
+    if (used) {
+      usedCode += i.size;
+    } else {
+      unused.add(i);
+    }
+  }
+
+  info.classes.forEach(tallyCode);
+  info.closures.forEach(tallyCode);
+
+  _section('Runtime Coverage Summary');
+  _showHeader('', 'bytes', '%');
+  _show('Program size', totalProgramSize, totalProgramSize);
+  _show('Libraries (excluding statics)', totalLibSize, totalProgramSize);
+  _show('Code (classes + closures)', totalCode, totalProgramSize);
+  _show('Used', usedCode, totalProgramSize);
+
+  print('');
+  _showHeader('', 'count', '%');
+  var total = info.classes.length + info.closures.length;
+  _show('Classes + closures', total, total);
+  _show('Used', total - unused.length, total);
+
+  print('');
+  var unusedTotal = totalCode - usedCode;
+  _section('Runtime Coverage Breakdown (packages)', size: unusedTotal);
+  for (var entry in packageData.entries.sortedBy((e) => -e.value.unusedSize)) {
+    var packageLabel = entry.key;
+    var packageInfo = entry.value;
+
+    print(' $packageLabel (${packageInfo.unusedSize} bytes unused)');
+
+    var packageRatioString = (packageInfo.usedRatio * 100).toStringAsFixed(2);
+    _leftPadded(
+        '  proportion of package used:',
+        '${packageInfo.usedSize}/${packageInfo.totalSize} '
+            '($packageRatioString%)');
+
+    var codeRatioString =
+        (packageInfo.unusedSize / totalCode * 100).toStringAsFixed(2);
+    _leftPadded('  proportion of unused code to all code:',
+        '${packageInfo.unusedSize}/$totalCode ($codeRatioString%)');
+
+    var unusedCodeRatioString =
+        (packageInfo.unusedSize / unusedTotal * 100).toStringAsFixed(2);
+    _leftPadded('  proportion of unused code to all unused code:',
+        '${packageInfo.unusedSize}/$unusedTotal ($unusedCodeRatioString%)');
+
+    var mainUnitPackageRatioString =
+        (packageInfo.mainUnitSize / packageInfo.totalSize * 100)
+            .toStringAsFixed(2);
+    _leftPadded(
+        '  proportion of main unit code to package code:',
+        '${packageInfo.mainUnitSize}/${packageInfo.totalSize} '
+            '($mainUnitPackageRatioString%)');
+
+    var unusedMainUnitRatioString =
+        (packageInfo.unusedMainUnitSize / packageInfo.mainUnitSize * 100)
+            .toStringAsFixed(2);
+    _leftPadded(
+        '  proportion of main unit code that is unused:',
+        '${packageInfo.unusedMainUnitSize}/${packageInfo.mainUnitSize} '
+            '($unusedMainUnitRatioString%)');
+
+    print('   package breakdown:');
+    for (var item in packageInfo.elements.toList()) {
+      var percent =
+          (item.size * 100 / packageInfo.totalSize).toStringAsFixed(2);
+      var name = qualifiedName(item);
+      var used = coverage.contains(name);
+      var usedTick = used ? '+' : '-';
+      var mainUnitTick = item.outputUnit.name == 'main' ? 'M' : 'D';
+      _leftPadded('    [$usedTick$mainUnitTick] ${qualifiedName(item)}:',
+          '${item.size} bytes ($percent% of package)');
+    }
+
+    print('');
+  }
+}
+
 void _section(String title, {int size}) {
   if (size == null) {
     print(title);
@@ -128,3 +242,37 @@
   var percent = (size * 100 / total).toStringAsFixed(2);
   print(' ${pad(msg, 30, right: true)} ${pad(size, 8)} ${pad(percent, 6)}%');
 }
+
+_leftPadded(String msg1, String msg2) {
+  print(' ${pad(msg1, 50, right: true)} $msg2');
+}
+
+class PackageInfo {
+  final elements = PriorityQueue<BasicInfo>((a, b) => b.size.compareTo(a.size));
+
+  num mainUnitSize = 0;
+  num totalSize = 0;
+  num unusedMainUnitSize = 0;
+  num unusedSize = 0;
+  num usedRatio = 0;
+  num usedSize = 0;
+
+  PackageInfo();
+
+  void add(BasicInfo i, {bool used = true}) {
+    totalSize += i.size;
+    if (used) {
+      usedSize += i.size;
+    } else {
+      unusedSize += i.size;
+    }
+    if (i.outputUnit.name == 'main') {
+      mainUnitSize += i.size;
+      if (!used) {
+        unusedMainUnitSize += i.size;
+      }
+    }
+    elements.add(i);
+    usedRatio = usedSize / totalSize;
+  }
+}
diff --git a/pkg/dart2js_info/lib/deferred_library_check.dart b/pkg/dart2js_info/lib/deferred_library_check.dart
index ef35cec..3b5c365c 100644
--- a/pkg/dart2js_info/lib/deferred_library_check.dart
+++ b/pkg/dart2js_info/lib/deferred_library_check.dart
@@ -133,7 +133,7 @@
   return current;
 }
 
-bool _isPackageUri(Uri uri) => uri.scheme == 'package';
+bool _isPackageUri(Uri uri) => uri.isScheme('package');
 
 String _getPackageName(Uri uri) {
   assert(_isPackageUri(uri));
diff --git a/pkg/dart2js_info/lib/src/util.dart b/pkg/dart2js_info/lib/src/util.dart
index 9ee83cb..c90b09f 100644
--- a/pkg/dart2js_info/lib/src/util.dart
+++ b/pkg/dart2js_info/lib/src/util.dart
@@ -116,13 +116,35 @@
     info = info.parent;
   }
   if (info is LibraryInfo) {
-    if (info.uri.scheme == 'package') {
+    if (info.uri.isScheme('package')) {
       return '${info.uri}'.split('/').first;
     }
   }
   return null;
 }
 
+/// Provides the group name associated with [info].
+///
+/// This corresponds to the package name, a Dart core library, 'file' for loose
+/// files, or null otherwise.
+String libraryGroupName(Info info) {
+  while (info.parent != null) {
+    info = info.parent;
+  }
+  if (info is LibraryInfo) {
+    if (info.uri.isScheme('package')) {
+      return '${info.uri}'.split('/').first;
+    }
+    if (info.uri.isScheme('dart')) {
+      return '${info.uri}';
+    }
+    if (info.uri.hasScheme) {
+      return info.uri.scheme;
+    }
+  }
+  return null;
+}
+
 /// Produce a string containing [value] padded with white space up to [n] chars.
 pad(value, n, {bool right = false}) {
   var s = '$value';
diff --git a/pkg/dart2js_runtime_metrics/OWNERS b/pkg/dart2js_runtime_metrics/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/dart2js_runtime_metrics/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/dart2js_tools/OWNERS b/pkg/dart2js_tools/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/dart2js_tools/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart b/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart
index 4a43b6c..c04c951 100644
--- a/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart
+++ b/pkg/dart2js_tools/lib/deobfuscate_stack_trace.dart
@@ -31,7 +31,7 @@
   var provider = CachingFileProvider();
   StackDeobfuscationResult result = deobfuscateStack(obfuscatedTrace, provider);
   Frame firstFrame = result.original.frames.first;
-  String translatedError = (firstFrame.uri.scheme == 'error'
+  String translatedError = (firstFrame.uri.isScheme('error')
           ? null
           : translate(error, provider.mappingFor(firstFrame.uri))) ??
       '<no error message found>';
diff --git a/pkg/dart2js_tools/lib/src/util.dart b/pkg/dart2js_tools/lib/src/util.dart
index 1a733ac..eb8c366 100644
--- a/pkg/dart2js_tools/lib/src/util.dart
+++ b/pkg/dart2js_tools/lib/src/util.dart
@@ -34,7 +34,7 @@
 /// deobfuscation locally for debugging purposes.
 class DownloadedFileProvider extends CachingFileProvider {
   _localize(uri) {
-    if (uri.scheme == 'http' || uri.scheme == 'https') {
+    if (uri.isScheme('http') || uri.isScheme('https')) {
       String filename = uri.path.substring(uri.path.lastIndexOf('/') + 1);
       return Uri.base.resolve(filename);
     }
diff --git a/pkg/dart2native/OWNERS b/pkg/dart2native/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/dart2native/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/dart2wasm/OWNERS b/pkg/dart2wasm/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/pkg/dart2wasm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/pkg/dart2wasm/bin/dart2wasm.dart b/pkg/dart2wasm/bin/dart2wasm.dart
new file mode 100644
index 0000000..19b9604
--- /dev/null
+++ b/pkg/dart2wasm/bin/dart2wasm.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 'dart:io';
+import 'dart:typed_data';
+
+import 'package:front_end/src/api_unstable/vm.dart'
+    show printDiagnosticMessage, resolveInputUri;
+
+import 'package:dart2wasm/compile.dart';
+import 'package:dart2wasm/translator.dart';
+
+final Map<String, void Function(TranslatorOptions, bool)> boolOptionMap = {
+  "export-all": (o, value) => o.exportAll = value,
+  "inlining": (o, value) => o.inlining = value,
+  "lazy-constants": (o, value) => o.lazyConstants = value,
+  "local-nullability": (o, value) => o.localNullability = value,
+  "name-section": (o, value) => o.nameSection = value,
+  "nominal-types": (o, value) => o.nominalTypes = value,
+  "parameter-nullability": (o, value) => o.parameterNullability = value,
+  "polymorphic-specialization": (o, value) =>
+      o.polymorphicSpecialization = value,
+  "print-kernel": (o, value) => o.printKernel = value,
+  "print-wasm": (o, value) => o.printWasm = value,
+  "runtime-types": (o, value) => o.runtimeTypes = value,
+  "string-data-segments": (o, value) => o.stringDataSegments = value,
+};
+final Map<String, void Function(TranslatorOptions, int)> intOptionMap = {
+  "watch": (o, value) => (o.watchPoints ??= []).add(value),
+};
+
+Never usage(String message) {
+  print("Usage: dart2wasm [<options>] <infile.dart> <outfile.wasm>");
+  print("");
+  print("*NOTE*: Wasm compilation is experimental.");
+  print("The support may change, or be removed, with no advance notice.");
+  print("");
+  print("Options:");
+  print("  --dart-sdk=<path>");
+  print("");
+  for (String option in boolOptionMap.keys) {
+    print("  --[no-]$option");
+  }
+  print("");
+  for (String option in intOptionMap.keys) {
+    print("  --$option <value>");
+  }
+  print("");
+
+  throw message;
+}
+
+Future<int> main(List<String> args) async {
+  Uri sdkPath = Platform.script.resolve("../../../sdk");
+  TranslatorOptions options = TranslatorOptions();
+  List<String> nonOptions = [];
+  void Function(TranslatorOptions, int)? intOptionFun = null;
+  for (String arg in args) {
+    if (intOptionFun != null) {
+      intOptionFun(options, int.parse(arg));
+      intOptionFun = null;
+    } else if (arg.startsWith("--dart-sdk=")) {
+      String path = arg.substring("--dart-sdk=".length);
+      sdkPath = Uri.file(Directory(path).absolute.path);
+    } else if (arg.startsWith("--no-")) {
+      var optionFun = boolOptionMap[arg.substring(5)];
+      if (optionFun == null) usage("Unknown option $arg");
+      optionFun(options, false);
+    } else if (arg.startsWith("--")) {
+      var optionFun = boolOptionMap[arg.substring(2)];
+      if (optionFun != null) {
+        optionFun(options, true);
+      } else {
+        intOptionFun = intOptionMap[arg.substring(2)];
+        if (intOptionFun == null) usage("Unknown option $arg");
+      }
+    } else {
+      nonOptions.add(arg);
+    }
+  }
+  if (intOptionFun != null) {
+    usage("Missing argument to ${args.last}");
+  }
+
+  if (nonOptions.length != 2) usage("Requires two file arguments");
+  String input = nonOptions[0];
+  String output = nonOptions[1];
+  Uri mainUri = resolveInputUri(input);
+
+  Uint8List? module = await compileToModule(mainUri, sdkPath, options,
+      (message) => printDiagnosticMessage(message, print));
+
+  if (module == null) {
+    exitCode = 1;
+    return exitCode;
+  }
+
+  await File(output).writeAsBytes(module);
+
+  return 0;
+}
diff --git a/pkg/dart2wasm/bin/run_wasm.js b/pkg/dart2wasm/bin/run_wasm.js
new file mode 100644
index 0000000..7e962a0
--- /dev/null
+++ b/pkg/dart2wasm/bin/run_wasm.js
@@ -0,0 +1,76 @@
+// 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.
+//
+// Runner V8 script for testing dart2wasm, takes ".wasm" file as argument.
+// Run as follows:
+//
+// $> d8 --experimental-wasm-gc --wasm-gc-js-interop run_wasm.js -- <file_name>.wasm
+
+function stringFromDartString(string) {
+    var length = inst.exports.$stringLength(string);
+    var array = new Array(length);
+    for (var i = 0; i < length; i++) {
+        array[i] = inst.exports.$stringRead(string, i);
+    }
+    return String.fromCharCode(...array);
+}
+
+function stringToDartString(string) {
+    var length = string.length;
+    var range = 0;
+    for (var i = 0; i < length; i++) {
+        range |= string.codePointAt(i);
+    }
+    if (range < 256) {
+        var dartString = inst.exports.$stringAllocate1(length);
+        for (var i = 0; i < length; i++) {
+            inst.exports.$stringWrite1(dartString, i, string.codePointAt(i));
+        }
+        return dartString;
+    } else {
+        var dartString = inst.exports.$stringAllocate2(length);
+        for (var i = 0; i < length; i++) {
+            inst.exports.$stringWrite2(dartString, i, string.codePointAt(i));
+        }
+        return dartString;
+    }
+}
+
+// Imports for printing and event loop
+var dart2wasm = {
+    printToConsole: function(string) {
+        console.log(stringFromDartString(string))
+    },
+    scheduleCallback: function(milliseconds, closure) {
+        setTimeout(function() {
+            inst.exports.$call0(closure);
+        }, milliseconds);
+    },
+    getCurrentStackTrace: function() {
+        // [Error] should be supported in most browsers.
+        // A possible future optimization we could do is to just save the
+        // `Error` object here, and stringify the stack trace when it is
+        // actually used.
+        let stackString = new Error().stack.toString();
+
+        // We remove the last three lines of the stack trace to prevent including
+        // `Error`, `getCurrentStackTrace`, and `StackTrace.current` in the
+        // stack trace.
+        let userStackString = stackString.split('\n').slice(3).join('\n');
+        return stringToDartString(userStackString);
+    }
+};
+
+// Create a Wasm module from the binary wasm file.
+var bytes = readbuffer(arguments[0]);
+var module = new WebAssembly.Module(bytes);
+
+// Instantiate the Wasm module, importing 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();
+if (result) console.log(result);
diff --git a/pkg/dart2wasm/dart2wasm.md b/pkg/dart2wasm/dart2wasm.md
new file mode 100644
index 0000000..8dc3203
--- /dev/null
+++ b/pkg/dart2wasm/dart2wasm.md
@@ -0,0 +1,65 @@
+## Running dart2wasm
+
+You don't need to build the Dart SDK to run dart2wasm, as long as you have a Dart SDK installed.
+
+To compile a Dart file to Wasm, run:
+
+`dart --enable-asserts pkg/dart2wasm/bin/dart2wasm.dart` *options* *infile*`.dart` *outfile*`.wasm`
+
+where *options* include:
+
+| Option                                  | Default | Description |
+| --------------------------------------- | ------- | ----------- |
+| `--dart-sdk=`*path*                     | relative to script | The location of the `sdk` directory inside the Dart SDK, containing the core library sources.
+| `--`[`no-`]`export-all`                 | no      | Export all functions; otherwise, just export `main`.
+| `--`[`no-`]`inlining`                   | no      | Inline small functions.
+| `--`[`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-`]`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-`]`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.
+
+The resulting `.wasm` file can be run with:
+
+`d8 --experimental-wasm-gc --wasm-gc-js-interop pkg/dart2wasm/bin/run_wasm.js -- `*outfile*`.wasm`
+
+## Imports and exports
+
+To import a function, declare it as a global, external function and mark it with a `wasm:import` pragma indicating the imported name (which must be two identifiers separated by a dot):
+```dart
+@pragma("wasm:import", "foo.bar")
+external void fooBar(Object object);
+```
+which will call `foo.bar` on the host side:
+```javascript
+var foo = {
+    bar: function(object) { /* implementation here */ }
+};
+```
+To export a function, mark it with a `wasm:export` pragma:
+```dart
+@pragma("wasm:export")
+void foo(double x) { /* implementation here */  }
+
+@pragma("wasm:export", "baz")
+void bar(double x) { /* implementation here */  }
+```
+With the Wasm module instance in `inst`, these can be called as:
+```javascript
+inst.exports.foo(1);
+inst.exports.baz(2);
+```
+
+### Types to use for interop
+
+In the signatures of imported and exported functions, use the following types:
+
+- For numbers, use `double`.
+- For Dart objects, use the corresponding Dart type. The fields of the underlying representation can be accessed on the JS side as `.$field0`, `.$field1` etc., but there is currently no defined way of finding the field index of a particular Dart field, so this mechanism is mainly useful for special objects with known layout.
+- For JS objects, use the `WasmAnyRef` type (or `WasmAnyRef?` as applicable) from the `dart:wasm` package. These can be passed around and stored as opaque values on the Dart side.
diff --git a/pkg/dart2wasm/lib/class_info.dart b/pkg/dart2wasm/lib/class_info.dart
new file mode 100644
index 0000000..54037e0
--- /dev/null
+++ b/pkg/dart2wasm/lib/class_info.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:math';
+
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// Wasm struct field indices for fields that are accessed explicitly from Wasm
+/// code, e.g. in intrinsics.
+///
+/// The values are validated by asserts, typically either through
+/// [ClassInfo.addField] (for manually added fields) or by a line in
+/// [FieldIndex.validate] (for fields declared in Dart code).
+class FieldIndex {
+  static const classId = 0;
+  static const boxValue = 1;
+  static const identityHash = 1;
+  static const stringArray = 2;
+  static const closureContext = 2;
+  static const closureFunction = 3;
+  static const typedListBaseLength = 2;
+  static const typedListArray = 3;
+  static const typedListViewTypedData = 3;
+  static const typedListViewOffsetInBytes = 4;
+  static const byteDataViewLength = 2;
+  static const byteDataViewTypedData = 3;
+  static const byteDataViewOffsetInBytes = 4;
+
+  static void validate(Translator translator) {
+    void check(Class cls, String name, int expectedIndex) {
+      assert(
+          translator.fieldIndex[
+                  cls.fields.firstWhere((f) => f.name.text == name)] ==
+              expectedIndex,
+          "Unexpected field index for ${cls.name}.$name");
+    }
+
+    check(translator.boxedBoolClass, "value", FieldIndex.boxValue);
+    check(translator.boxedIntClass, "value", FieldIndex.boxValue);
+    check(translator.boxedDoubleClass, "value", FieldIndex.boxValue);
+    check(translator.oneByteStringClass, "_array", FieldIndex.stringArray);
+    check(translator.twoByteStringClass, "_array", FieldIndex.stringArray);
+    check(translator.functionClass, "context", FieldIndex.closureContext);
+  }
+}
+
+const int initialIdentityHash = 0;
+
+/// Information about the Wasm representation for a class.
+class ClassInfo {
+  /// The Dart class that this info corresponds to. The top type does not have
+  /// an associated Dart class.
+  final Class? cls;
+
+  /// The Class ID of this class, stored in every instance of the class.
+  final int classId;
+
+  /// Depth of this class in the Wasm type hierarchy.
+  final int depth;
+
+  /// The Wasm struct used to represent instances of this class. A class will
+  /// sometimes use the same struct as its superclass.
+  final w.StructType struct;
+
+  /// Wasm global containing the RTT for this class.
+  late final w.DefinedGlobal rtt;
+
+  /// The superclass for this class. This will usually be the Dart superclass,
+  /// but there are a few exceptions, where the Wasm type hierarchy does not
+  /// follow the Dart class hierarchy.
+  final ClassInfo? superInfo;
+
+  /// For every type parameter which is directly mapped to a type parameter in
+  /// the superclass, this contains the corresponding superclass type
+  /// parameter. These will reuse the corresponding type parameter field of
+  /// the superclass.
+  final Map<TypeParameter, TypeParameter> typeParameterMatch;
+
+  /// The class whose struct is used as the type for variables of this type.
+  /// This is a type which is a superclass of all subtypes of this type.
+  late ClassInfo repr;
+
+  /// All classes which implement this class. This is used to compute `repr`.
+  final List<ClassInfo> implementedBy = [];
+
+  late final w.RefType nullableType = w.RefType.def(struct, nullable: true);
+  late final w.RefType nonNullableType = w.RefType.def(struct, nullable: false);
+
+  w.RefType typeWithNullability(bool nullable) =>
+      nullable ? nullableType : nonNullableType;
+
+  ClassInfo(this.cls, this.classId, this.depth, this.struct, this.superInfo,
+      ClassInfoCollector collector,
+      {this.typeParameterMatch = const {}}) {
+    if (collector.options.useRttGlobals) {
+      rtt = collector.makeRtt(struct, superInfo);
+    }
+    implementedBy.add(this);
+  }
+
+  void addField(w.FieldType fieldType, [int? expectedIndex]) {
+    assert(expectedIndex == null || expectedIndex == struct.fields.length);
+    struct.fields.add(fieldType);
+  }
+}
+
+ClassInfo upperBound(Iterable<ClassInfo> classes) {
+  while (classes.length > 1) {
+    Set<ClassInfo> newClasses = {};
+    int minDepth = 999999999;
+    int maxDepth = 0;
+    for (ClassInfo info in classes) {
+      minDepth = min(minDepth, info.depth);
+      maxDepth = max(maxDepth, info.depth);
+    }
+    int targetDepth = minDepth == maxDepth ? minDepth - 1 : minDepth;
+    for (ClassInfo info in classes) {
+      while (info.depth > targetDepth) {
+        info = info.superInfo!;
+      }
+      newClasses.add(info);
+    }
+    classes = newClasses;
+  }
+  return classes.single;
+}
+
+/// Constructs the Wasm type hierarchy.
+class ClassInfoCollector {
+  final Translator translator;
+  int nextClassId = 0;
+  late final ClassInfo topInfo;
+
+  late final w.FieldType typeType =
+      w.FieldType(translator.classInfo[translator.typeClass]!.nullableType);
+
+  ClassInfoCollector(this.translator);
+
+  w.Module get m => translator.m;
+
+  TranslatorOptions get options => translator.options;
+
+  w.DefinedGlobal makeRtt(w.StructType struct, ClassInfo? superInfo) {
+    assert(options.useRttGlobals);
+    int depth = superInfo != null ? superInfo.depth + 1 : 0;
+    final w.DefinedGlobal rtt =
+        m.addGlobal(w.GlobalType(w.Rtt(struct, depth), mutable: false));
+    final w.Instructions b = rtt.initializer;
+    if (superInfo != null) {
+      b.global_get(superInfo.rtt);
+      b.rtt_sub(struct);
+    } else {
+      b.rtt_canon(struct);
+    }
+    b.end();
+    return rtt;
+  }
+
+  void initializeTop() {
+    final w.StructType struct = translator.structType("#Top");
+    topInfo = ClassInfo(null, nextClassId++, 0, struct, null, this);
+    translator.classes.add(topInfo);
+    translator.classForHeapType[struct] = topInfo;
+  }
+
+  void initialize(Class cls) {
+    ClassInfo? info = translator.classInfo[cls];
+    if (info == null) {
+      Class? superclass = cls.superclass;
+      if (superclass == null) {
+        ClassInfo superInfo = topInfo;
+        final w.StructType struct =
+            translator.structType(cls.name, superType: superInfo.struct);
+        info = ClassInfo(
+            cls, nextClassId++, superInfo.depth + 1, struct, superInfo, this);
+        // Mark Top type as implementing Object to force the representation
+        // type of Object to be Top.
+        info.implementedBy.add(topInfo);
+      } else {
+        // Recursively initialize all supertypes before initializing this class.
+        initialize(superclass);
+        for (Supertype interface in cls.implementedTypes) {
+          initialize(interface.classNode);
+        }
+
+        // In the Wasm type hierarchy, Object, bool and num sit directly below
+        // the Top type. The implementation classes (_StringBase, _Type and the
+        // box classes) sit directly below the public classes they implement.
+        // All other classes sit below their superclass.
+        ClassInfo superInfo = cls == translator.coreTypes.boolClass ||
+                cls == translator.coreTypes.numClass
+            ? topInfo
+            : cls == translator.stringBaseClass ||
+                    cls == translator.typeClass ||
+                    translator.boxedClasses.values.contains(cls)
+                ? translator.classInfo[cls.implementedTypes.single.classNode]!
+                : translator.classInfo[superclass]!;
+
+        // Figure out which type parameters can reuse a type parameter field of
+        // the superclass.
+        Map<TypeParameter, TypeParameter> typeParameterMatch = {};
+        if (cls.typeParameters.isNotEmpty) {
+          Supertype supertype = cls.superclass == superInfo.cls
+              ? cls.supertype!
+              : cls.implementedTypes.single;
+          for (TypeParameter parameter in cls.typeParameters) {
+            for (int i = 0; i < supertype.typeArguments.length; i++) {
+              DartType arg = supertype.typeArguments[i];
+              if (arg is TypeParameterType && arg.parameter == parameter) {
+                typeParameterMatch[parameter] =
+                    superInfo.cls!.typeParameters[i];
+                break;
+              }
+            }
+          }
+        }
+
+        // A class can reuse the Wasm struct of the superclass if it doesn't
+        // declare any Wasm fields of its own. This is the case when three
+        // conditions are met:
+        //   1. All type parameters can reuse a type parameter field of the
+        //      superclass.
+        //   2. The class declares no Dart fields of its own.
+        //   3. The class is not a special class that contains hidden fields.
+        bool canReuseSuperStruct =
+            typeParameterMatch.length == cls.typeParameters.length &&
+                cls.fields.where((f) => f.isInstanceMember).isEmpty &&
+                cls != translator.typedListBaseClass &&
+                cls != translator.typedListClass &&
+                cls != translator.typedListViewClass &&
+                cls != translator.byteDataViewClass;
+        w.StructType struct = canReuseSuperStruct
+            ? superInfo.struct
+            : translator.structType(cls.name, superType: superInfo.struct);
+        info = ClassInfo(
+            cls, nextClassId++, superInfo.depth + 1, struct, superInfo, this,
+            typeParameterMatch: typeParameterMatch);
+
+        // Mark all interfaces as being implemented by this class. This is
+        // needed to calculate representation types.
+        for (Supertype interface in cls.implementedTypes) {
+          ClassInfo? interfaceInfo = translator.classInfo[interface.classNode];
+          while (interfaceInfo != null) {
+            interfaceInfo.implementedBy.add(info);
+            interfaceInfo = interfaceInfo.superInfo;
+          }
+        }
+      }
+      translator.classes.add(info);
+      translator.classInfo[cls] = info;
+      translator.classForHeapType.putIfAbsent(info.struct, () => info!);
+    }
+  }
+
+  void computeRepresentation(ClassInfo info) {
+    info.repr = upperBound(info.implementedBy);
+  }
+
+  void generateFields(ClassInfo info) {
+    ClassInfo? superInfo = info.superInfo;
+    if (superInfo == null) {
+      // Top - add class id field
+      info.addField(w.FieldType(w.NumType.i32), FieldIndex.classId);
+    } else if (info.struct != superInfo.struct) {
+      // Copy fields from superclass
+      for (w.FieldType fieldType in superInfo.struct.fields) {
+        info.addField(fieldType);
+      }
+      if (info.cls!.superclass == null) {
+        // Object - add identity hash code field
+        info.addField(w.FieldType(w.NumType.i32), FieldIndex.identityHash);
+      }
+      // Add fields for type variables
+      for (TypeParameter parameter in info.cls!.typeParameters) {
+        TypeParameter? match = info.typeParameterMatch[parameter];
+        if (match != null) {
+          // Reuse supertype type variable
+          translator.typeParameterIndex[parameter] =
+              translator.typeParameterIndex[match]!;
+        } else {
+          translator.typeParameterIndex[parameter] = info.struct.fields.length;
+          info.addField(typeType);
+        }
+      }
+      // Add fields for Dart instance fields
+      for (Field field in info.cls!.fields) {
+        if (field.isInstanceMember) {
+          w.ValueType wasmType = translator.translateType(field.type);
+          // TODO(askesc): Generalize this check for finer nullability control
+          if (wasmType != w.RefType.data()) {
+            wasmType = wasmType.withNullability(true);
+          }
+          translator.fieldIndex[field] = info.struct.fields.length;
+          info.addField(w.FieldType(wasmType));
+        }
+      }
+    } else {
+      for (TypeParameter parameter in info.cls!.typeParameters) {
+        // Reuse supertype type variable
+        translator.typeParameterIndex[parameter] =
+            translator.typeParameterIndex[info.typeParameterMatch[parameter]]!;
+      }
+    }
+  }
+
+  void collect() {
+    // Create class info and Wasm structs for all classes.
+    initializeTop();
+    for (Library library in translator.component.libraries) {
+      for (Class cls in library.classes) {
+        initialize(cls);
+      }
+    }
+
+    // For each class, compute which Wasm struct should be used for the type of
+    // variables bearing that class as their Dart type. This is the struct
+    // corresponding to the least common supertype of all Dart classes
+    // implementing this class.
+    for (ClassInfo info in translator.classes) {
+      computeRepresentation(info);
+    }
+
+    // Now that the representation types for all classes have been computed,
+    // fill in the types of the fields in the generated Wasm structs.
+    for (ClassInfo info in translator.classes) {
+      generateFields(info);
+    }
+
+    // Add hidden fields of typed_data classes.
+    addTypedDataFields();
+
+    // Validate that all internally used fields have the expected indices.
+    FieldIndex.validate(translator);
+  }
+
+  void addTypedDataFields() {
+    ClassInfo typedListBaseInfo =
+        translator.classInfo[translator.typedListBaseClass]!;
+    typedListBaseInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
+        FieldIndex.typedListBaseLength);
+
+    ClassInfo typedListInfo = translator.classInfo[translator.typedListClass]!;
+    typedListInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
+        FieldIndex.typedListBaseLength);
+    w.RefType bytesArrayType = w.RefType.def(
+        translator.wasmArrayType(w.PackedType.i8, "i8"),
+        nullable: false);
+    typedListInfo.addField(
+        w.FieldType(bytesArrayType, mutable: false), FieldIndex.typedListArray);
+
+    w.RefType typedListType =
+        w.RefType.def(typedListInfo.struct, nullable: false);
+
+    ClassInfo typedListViewInfo =
+        translator.classInfo[translator.typedListViewClass]!;
+    typedListViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
+        FieldIndex.typedListBaseLength);
+    typedListViewInfo.addField(w.FieldType(typedListType, mutable: false),
+        FieldIndex.typedListViewTypedData);
+    typedListViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
+        FieldIndex.typedListViewOffsetInBytes);
+
+    ClassInfo byteDataViewInfo =
+        translator.classInfo[translator.byteDataViewClass]!;
+    byteDataViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
+        FieldIndex.byteDataViewLength);
+    byteDataViewInfo.addField(w.FieldType(typedListType, mutable: false),
+        FieldIndex.byteDataViewTypedData);
+    byteDataViewInfo.addField(w.FieldType(w.NumType.i32, mutable: false),
+        FieldIndex.byteDataViewOffsetInBytes);
+  }
+}
diff --git a/pkg/dart2wasm/lib/closures.dart b/pkg/dart2wasm/lib/closures.dart
new file mode 100644
index 0000000..cde1b4c
--- /dev/null
+++ b/pkg/dart2wasm/lib/closures.dart
@@ -0,0 +1,318 @@
+// 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:dart2wasm/code_generator.dart';
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// A local function or function expression.
+class Lambda {
+  final FunctionNode functionNode;
+  final w.DefinedFunction function;
+
+  Lambda(this.functionNode, this.function);
+}
+
+/// The context for one or more closures, containing their captured variables.
+///
+/// Contexts can be nested, corresponding to the scopes covered by the contexts.
+/// Each local function, function expression or loop (`while`, `do`/`while` or
+/// `for`) gives rise to its own context nested inside the context of its
+/// surrounding scope. At runtime, each context has a reference to its parent
+/// context.
+///
+/// Closures corresponding to local functions or function expressions in the
+/// same scope share the same context. Thus, a closure can potentially keep more
+/// values alive than the ones captured by the closure itself.
+///
+/// A context may be empty (containing no captured variables), in which case it
+/// is skipped in the context parent chain and never allocated. A context can
+/// also be skipped if it only contains variables that are not in scope for the
+/// child context (and its descendants).
+class Context {
+  /// The node containing the scope covered by the context. This is either a
+  /// [FunctionNode] (for members, local functions and function expressions),
+  /// a [ForStatement], a [DoStatement] or a [WhileStatement].
+  final TreeNode owner;
+
+  /// The parent of this context, corresponding to the lexically enclosing
+  /// owner. This is null if the context is a member context, or if all contexts
+  /// in the parent chain are skipped.
+  final Context? parent;
+
+  /// The variables captured by this context.
+  final List<VariableDeclaration> variables = [];
+
+  /// Whether this context contains a captured `this`. Only member contexts can.
+  bool containsThis = false;
+
+  /// The Wasm struct representing this context at runtime.
+  late final w.StructType struct;
+
+  /// The local variable currently pointing to this context. Used during code
+  /// generation.
+  late w.Local currentLocal;
+
+  bool get isEmpty => variables.isEmpty && !containsThis;
+
+  int get parentFieldIndex {
+    assert(parent != null);
+    return 0;
+  }
+
+  int get thisFieldIndex {
+    assert(containsThis);
+    return 0;
+  }
+
+  Context(this.owner, this.parent);
+}
+
+/// A captured variable.
+class Capture {
+  final VariableDeclaration variable;
+  late final Context context;
+  late final int fieldIndex;
+  bool written = false;
+
+  Capture(this.variable);
+
+  w.ValueType get type => context.struct.fields[fieldIndex].type.unpacked;
+}
+
+/// Compiler passes to find all captured variables and construct the context
+/// tree for a member.
+class Closures {
+  final CodeGenerator codeGen;
+  final Map<VariableDeclaration, Capture> captures = {};
+  bool isThisCaptured = false;
+  final Map<FunctionNode, Lambda> lambdas = {};
+  final Map<TreeNode, Context> contexts = {};
+  final Set<FunctionDeclaration> closurizedFunctions = {};
+
+  Closures(this.codeGen);
+
+  Translator get translator => codeGen.translator;
+
+  void findCaptures(Member member) {
+    var find = CaptureFinder(this, member);
+    if (member is Constructor) {
+      Class cls = member.enclosingClass;
+      for (Field field in cls.fields) {
+        if (field.isInstanceMember && field.initializer != null) {
+          field.initializer!.accept(find);
+        }
+      }
+    }
+    member.accept(find);
+  }
+
+  void collectContexts(TreeNode node, {TreeNode? container}) {
+    if (captures.isNotEmpty || isThisCaptured) {
+      node.accept(ContextCollector(this, container));
+    }
+  }
+
+  void buildContexts() {
+    // Make struct definitions
+    for (Context context in contexts.values) {
+      if (!context.isEmpty) {
+        context.struct = translator.structType("<context>");
+      }
+    }
+
+    // Build object layouts
+    for (Context context in contexts.values) {
+      if (!context.isEmpty) {
+        w.StructType struct = context.struct;
+        if (context.parent != null) {
+          assert(!context.containsThis);
+          struct.fields.add(w.FieldType(
+              w.RefType.def(context.parent!.struct, nullable: true)));
+        }
+        if (context.containsThis) {
+          struct.fields.add(w.FieldType(
+              codeGen.preciseThisLocal!.type.withNullability(true)));
+        }
+        for (VariableDeclaration variable in context.variables) {
+          int index = struct.fields.length;
+          struct.fields.add(w.FieldType(
+              translator.translateType(variable.type).withNullability(true)));
+          captures[variable]!.fieldIndex = index;
+        }
+      }
+    }
+  }
+}
+
+class CaptureFinder extends RecursiveVisitor {
+  final Closures closures;
+  final Member member;
+  final Map<VariableDeclaration, int> variableDepth = {};
+  int depth = 0;
+
+  CaptureFinder(this.closures, this.member);
+
+  Translator get translator => closures.translator;
+
+  @override
+  void visitAssertStatement(AssertStatement node) {}
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    if (depth > 0) {
+      variableDepth[node] = depth;
+    }
+    super.visitVariableDeclaration(node);
+  }
+
+  void _visitVariableUse(VariableDeclaration variable) {
+    int declDepth = variableDepth[variable] ?? 0;
+    assert(declDepth <= depth);
+    if (declDepth < depth) {
+      closures.captures[variable] = Capture(variable);
+    } else if (variable.parent is FunctionDeclaration) {
+      closures.closurizedFunctions.add(variable.parent as FunctionDeclaration);
+    }
+  }
+
+  @override
+  void visitVariableGet(VariableGet node) {
+    _visitVariableUse(node.variable);
+    super.visitVariableGet(node);
+  }
+
+  @override
+  void visitVariableSet(VariableSet node) {
+    _visitVariableUse(node.variable);
+    super.visitVariableSet(node);
+  }
+
+  void _visitThis() {
+    if (depth > 0) {
+      closures.isThisCaptured = true;
+    }
+  }
+
+  @override
+  void visitThisExpression(ThisExpression node) {
+    _visitThis();
+  }
+
+  @override
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
+    _visitThis();
+    super.visitSuperMethodInvocation(node);
+  }
+
+  @override
+  void visitTypeParameterType(TypeParameterType node) {
+    if (node.parameter.parent == member.enclosingClass) {
+      _visitThis();
+    }
+  }
+
+  void _visitLambda(FunctionNode node) {
+    if (node.positionalParameters.length != node.requiredParameterCount ||
+        node.namedParameters.isNotEmpty) {
+      throw "Not supported: Optional parameters for "
+          "function expression or local function at ${node.location}";
+    }
+    int parameterCount = node.requiredParameterCount;
+    w.FunctionType type = translator.closureFunctionType(parameterCount);
+    w.DefinedFunction function =
+        translator.m.addFunction(type, "$member (closure)");
+    closures.lambdas[node] = Lambda(node, function);
+
+    depth++;
+    node.visitChildren(this);
+    depth--;
+  }
+
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
+    _visitLambda(node.function);
+  }
+
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    // Variable is in outer scope
+    node.variable.accept(this);
+    _visitLambda(node.function);
+  }
+}
+
+class ContextCollector extends RecursiveVisitor {
+  final Closures closures;
+  Context? currentContext;
+
+  ContextCollector(this.closures, TreeNode? container) {
+    if (container != null) {
+      currentContext = closures.contexts[container]!;
+    }
+  }
+
+  @override
+  void visitAssertStatement(AssertStatement node) {}
+
+  void _newContext(TreeNode node) {
+    bool outerMost = currentContext == null;
+    Context? oldContext = currentContext;
+    Context? parent = currentContext;
+    while (parent != null && parent.isEmpty) parent = parent.parent;
+    currentContext = Context(node, parent);
+    if (closures.isThisCaptured && outerMost) {
+      currentContext!.containsThis = true;
+    }
+    closures.contexts[node] = currentContext!;
+    node.visitChildren(this);
+    currentContext = oldContext;
+  }
+
+  @override
+  void visitConstructor(Constructor node) {
+    node.function.accept(this);
+    currentContext = closures.contexts[node.function]!;
+    visitList(node.initializers, this);
+  }
+
+  @override
+  void visitFunctionNode(FunctionNode node) {
+    _newContext(node);
+  }
+
+  @override
+  void visitWhileStatement(WhileStatement node) {
+    _newContext(node);
+  }
+
+  @override
+  void visitDoStatement(DoStatement node) {
+    _newContext(node);
+  }
+
+  @override
+  void visitForStatement(ForStatement node) {
+    _newContext(node);
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    Capture? capture = closures.captures[node];
+    if (capture != null) {
+      currentContext!.variables.add(node);
+      capture.context = currentContext!;
+    }
+    super.visitVariableDeclaration(node);
+  }
+
+  @override
+  void visitVariableSet(VariableSet node) {
+    closures.captures[node.variable]?.written = true;
+    super.visitVariableSet(node);
+  }
+}
diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart
new file mode 100644
index 0000000..5ae0b2a
--- /dev/null
+++ b/pkg/dart2wasm/lib/code_generator.dart
@@ -0,0 +1,2024 @@
+// 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:dart2wasm/class_info.dart';
+import 'package:dart2wasm/closures.dart';
+import 'package:dart2wasm/dispatch_table.dart';
+import 'package:dart2wasm/intrinsics.dart';
+import 'package:dart2wasm/param_info.dart';
+import 'package:dart2wasm/reference_extensions.dart';
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/type_environment.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// Main code generator for member bodies.
+///
+/// The [generate] method first collects all local functions and function
+/// expressions in the body and then generates code for the body. Code for the
+/// local functions and function expressions must be generated separately by
+/// calling the [generateLambda] method on all lambdas in [closures].
+///
+/// A new [CodeGenerator] object must be created for each new member or lambda.
+///
+/// Every visitor method for an expression takes in the Wasm type that it is
+/// expected to leave on the stack (or the special [voidMarker] to indicate that
+/// it should leave nothing). It returns what it actually left on the stack. The
+/// code generation for every expression or subexpression is done via the [wrap]
+/// method, which emits appropriate conversion code if the produced type is not
+/// a subtype of the expected type.
+class CodeGenerator extends ExpressionVisitor1<w.ValueType, w.ValueType>
+    implements InitializerVisitor<void>, StatementVisitor<void> {
+  final Translator translator;
+  final w.DefinedFunction function;
+  final Reference reference;
+  late final List<w.Local> paramLocals;
+  final w.Label? returnLabel;
+
+  late final Intrinsifier intrinsifier;
+  late final StaticTypeContext typeContext;
+  late final w.Instructions b;
+
+  late final Closures closures;
+
+  final Map<VariableDeclaration, w.Local> locals = {};
+  w.Local? thisLocal;
+  w.Local? preciseThisLocal;
+  final Map<TypeParameter, w.Local> typeLocals = {};
+  final List<Statement> finalizers = [];
+  final List<w.Label> tryLabels = [];
+  final Map<LabeledStatement, w.Label> labels = {};
+  final Map<SwitchCase, w.Label> switchLabels = {};
+
+  /// Create a code generator for a member or one of its lambdas.
+  ///
+  /// The [paramLocals] and [returnLabel] parameters can be used to generate
+  /// code for an inlined function by specifying the locals containing the
+  /// parameters (instead of the function inputs) and the label to jump to on
+  /// return (instead of emitting a `return` instruction).
+  CodeGenerator(this.translator, this.function, this.reference,
+      {List<w.Local>? paramLocals, this.returnLabel}) {
+    this.paramLocals = paramLocals ?? function.locals;
+    intrinsifier = Intrinsifier(this);
+    typeContext = StaticTypeContext(member, translator.typeEnvironment);
+    b = function.body;
+  }
+
+  Member get member => reference.asMember;
+
+  w.ValueType get returnType => translator
+      .outputOrVoid(returnLabel?.targetTypes ?? function.type.outputs);
+
+  TranslatorOptions get options => translator.options;
+
+  w.ValueType get voidMarker => translator.voidMarker;
+
+  w.ValueType translateType(DartType type) => translator.translateType(type);
+
+  w.Local addLocal(w.ValueType type) {
+    return function.addLocal(translator.typeForLocal(type));
+  }
+
+  DartType dartTypeOf(Expression exp) {
+    return exp.getStaticType(typeContext);
+  }
+
+  void _unimplemented(
+      TreeNode node, Object message, List<w.ValueType> expectedTypes) {
+    final text = "Not implemented: $message at ${node.location}";
+    print(text);
+    b.comment(text);
+    b.block(const [], expectedTypes);
+    b.unreachable();
+    b.end();
+  }
+
+  @override
+  void defaultInitializer(Initializer node) {
+    _unimplemented(node, node.runtimeType, const []);
+  }
+
+  @override
+  w.ValueType defaultExpression(Expression node, w.ValueType expectedType) {
+    _unimplemented(node, node.runtimeType, [expectedType]);
+    return expectedType;
+  }
+
+  @override
+  void defaultStatement(Statement node) {
+    _unimplemented(node, node.runtimeType, const []);
+  }
+
+  /// Generate code for the body of the member.
+  void generate() {
+    closures = Closures(this);
+
+    Member member = this.member;
+
+    if (reference.isTearOffReference) {
+      // Tear-off getter
+      w.DefinedFunction closureFunction =
+          translator.getTearOffFunction(member as Procedure);
+
+      int parameterCount = member.function.requiredParameterCount;
+      w.DefinedGlobal global = translator.makeFunctionRef(closureFunction);
+
+      ClassInfo info = translator.classInfo[translator.functionClass]!;
+      translator.functions.allocateClass(info.classId);
+
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.local_get(paramLocals[0]);
+      b.global_get(global);
+      translator.struct_new(b, parameterCount);
+      b.end();
+      return;
+    }
+
+    if (intrinsifier.generateMemberIntrinsic(
+        reference, function, paramLocals, returnLabel)) {
+      b.end();
+      return;
+    }
+
+    if (member.isExternal) {
+      final text =
+          "Unimplemented external member $member at ${member.location}";
+      print(text);
+      b.comment(text);
+      b.unreachable();
+      b.end();
+      return;
+    }
+
+    if (member is Field) {
+      if (member.isStatic) {
+        // Static field initializer function
+        assert(reference == member.fieldReference);
+        closures.findCaptures(member);
+        closures.collectContexts(member);
+        closures.buildContexts();
+
+        w.Global global = translator.globals.getGlobal(member);
+        w.Global? flag = translator.globals.getGlobalInitializedFlag(member);
+        wrap(member.initializer!, global.type.type);
+        b.global_set(global);
+        if (flag != null) {
+          b.i32_const(1);
+          b.global_set(flag);
+        }
+        b.global_get(global);
+        translator.convertType(
+            function, global.type.type, function.type.outputs.single);
+        b.end();
+        return;
+      }
+
+      // Implicit getter or setter
+      w.StructType struct =
+          translator.classInfo[member.enclosingClass!]!.struct;
+      int fieldIndex = translator.fieldIndex[member]!;
+      w.ValueType fieldType = struct.fields[fieldIndex].type.unpacked;
+
+      void getThis() {
+        w.Local thisLocal = paramLocals[0];
+        w.RefType structType = w.RefType.def(struct, nullable: true);
+        b.local_get(thisLocal);
+        translator.convertType(function, thisLocal.type, structType);
+      }
+
+      if (reference.isImplicitGetter) {
+        // Implicit getter
+        getThis();
+        b.struct_get(struct, fieldIndex);
+        translator.convertType(function, fieldType, returnType);
+      } else {
+        // Implicit setter
+        w.Local valueLocal = paramLocals[1];
+        getThis();
+        b.local_get(valueLocal);
+        translator.convertType(function, valueLocal.type, fieldType);
+        b.struct_set(struct, fieldIndex);
+      }
+      b.end();
+      return;
+    }
+
+    ParameterInfo paramInfo = translator.paramInfoFor(reference);
+    bool hasThis = member.isInstanceMember || member is Constructor;
+    int typeParameterOffset = hasThis ? 1 : 0;
+    int implicitParams = typeParameterOffset + paramInfo.typeParamCount;
+    List<VariableDeclaration> positional =
+        member.function!.positionalParameters;
+    for (int i = 0; i < positional.length; i++) {
+      locals[positional[i]] = paramLocals[implicitParams + i];
+    }
+    List<VariableDeclaration> named = member.function!.namedParameters;
+    for (var param in named) {
+      locals[param] =
+          paramLocals[implicitParams + paramInfo.nameIndex[param.name]!];
+    }
+    List<TypeParameter> typeParameters = member is Constructor
+        ? member.enclosingClass.typeParameters
+        : member.function!.typeParameters;
+    for (int i = 0; i < typeParameters.length; i++) {
+      typeLocals[typeParameters[i]] = paramLocals[typeParameterOffset + i];
+    }
+
+    closures.findCaptures(member);
+
+    if (hasThis) {
+      Class cls = member.enclosingClass!;
+      ClassInfo info = translator.classInfo[cls]!;
+      thisLocal = paramLocals[0];
+      w.RefType thisType = info.nonNullableType;
+      if (translator.needsConversion(paramLocals[0].type, thisType)) {
+        preciseThisLocal = addLocal(thisType);
+        b.local_get(paramLocals[0]);
+        translator.ref_cast(b, info);
+        b.local_set(preciseThisLocal!);
+      } else {
+        preciseThisLocal = paramLocals[0];
+      }
+    }
+
+    closures.collectContexts(member);
+    if (member is Constructor) {
+      for (Field field in member.enclosingClass.fields) {
+        if (field.isInstanceMember && field.initializer != null) {
+          closures.collectContexts(field.initializer!,
+              container: member.function);
+        }
+      }
+    }
+    closures.buildContexts();
+
+    allocateContext(member.function!);
+    captureParameters();
+
+    if (member is Constructor) {
+      Class cls = member.enclosingClass;
+      ClassInfo info = translator.classInfo[cls]!;
+      for (TypeParameter typeParam in cls.typeParameters) {
+        b.local_get(thisLocal!);
+        b.local_get(typeLocals[typeParam]!);
+        b.struct_set(info.struct, translator.typeParameterIndex[typeParam]!);
+      }
+      for (Field field in cls.fields) {
+        if (field.isInstanceMember && field.initializer != null) {
+          int fieldIndex = translator.fieldIndex[field]!;
+          b.local_get(thisLocal!);
+          wrap(
+              field.initializer!, info.struct.fields[fieldIndex].type.unpacked);
+          b.struct_set(info.struct, fieldIndex);
+        }
+      }
+      for (Initializer initializer in member.initializers) {
+        initializer.accept(this);
+      }
+    }
+
+    member.function!.body?.accept(this);
+    _implicitReturn();
+    b.end();
+  }
+
+  /// Generate code for the body of a lambda.
+  void generateLambda(Lambda lambda, Closures closures) {
+    this.closures = closures;
+
+    final int implicitParams = 1;
+    List<VariableDeclaration> positional =
+        lambda.functionNode.positionalParameters;
+    for (int i = 0; i < positional.length; i++) {
+      locals[positional[i]] = paramLocals[implicitParams + i];
+    }
+
+    Context? context = closures.contexts[lambda.functionNode]?.parent;
+    if (context != null) {
+      b.local_get(paramLocals[0]);
+      translator.ref_cast(b, context.struct);
+      while (true) {
+        w.Local contextLocal =
+            addLocal(w.RefType.def(context!.struct, nullable: false));
+        context.currentLocal = contextLocal;
+        if (context.parent != null || context.containsThis) {
+          b.local_tee(contextLocal);
+        } else {
+          b.local_set(contextLocal);
+        }
+        if (context.parent == null) break;
+
+        b.struct_get(context.struct, context.parentFieldIndex);
+        if (options.localNullability) {
+          b.ref_as_non_null();
+        }
+        context = context.parent!;
+      }
+      if (context.containsThis) {
+        thisLocal = addLocal(
+            context.struct.fields[context.thisFieldIndex].type.unpacked);
+        preciseThisLocal = thisLocal;
+        b.struct_get(context.struct, context.thisFieldIndex);
+        b.local_set(thisLocal!);
+      }
+    }
+    allocateContext(lambda.functionNode);
+    captureParameters();
+
+    lambda.functionNode.body!.accept(this);
+    _implicitReturn();
+    b.end();
+  }
+
+  void _implicitReturn() {
+    if (function.type.outputs.length > 0) {
+      w.ValueType returnType = function.type.outputs[0];
+      if (returnType is w.RefType && returnType.nullable) {
+        // Dart body may have an implicit return null.
+        b.ref_null(returnType.heapType);
+      } else {
+        // This point is unreachable, but the Wasm validator still expects the
+        // stack to contain a value matching the Wasm function return type.
+        b.block(const [], function.type.outputs);
+        b.comment("Unreachable implicit return");
+        b.unreachable();
+        b.end();
+      }
+    }
+  }
+
+  void allocateContext(TreeNode node) {
+    Context? context = closures.contexts[node];
+    if (context != null && !context.isEmpty) {
+      w.Local contextLocal =
+          addLocal(w.RefType.def(context.struct, nullable: false));
+      context.currentLocal = contextLocal;
+      translator.struct_new_default(b, context.struct);
+      b.local_set(contextLocal);
+      if (context.containsThis) {
+        b.local_get(contextLocal);
+        b.local_get(preciseThisLocal!);
+        b.struct_set(context.struct, context.thisFieldIndex);
+      }
+      if (context.parent != null) {
+        w.Local parentLocal = context.parent!.currentLocal;
+        b.local_get(contextLocal);
+        b.local_get(parentLocal);
+        b.struct_set(context.struct, context.parentFieldIndex);
+      }
+    }
+  }
+
+  void captureParameters() {
+    locals.forEach((variable, local) {
+      Capture? capture = closures.captures[variable];
+      if (capture != null) {
+        b.local_get(capture.context.currentLocal);
+        b.local_get(local);
+        translator.convertType(function, local.type, capture.type);
+        b.struct_set(capture.context.struct, capture.fieldIndex);
+      }
+    });
+  }
+
+  /// Generates code for an expression plus conversion code to convert the
+  /// result to the expected type if needed. All expression code generation goes
+  /// through this method.
+  w.ValueType wrap(Expression node, w.ValueType expectedType) {
+    w.ValueType resultType = node.accept1(this, expectedType);
+    translator.convertType(function, resultType, expectedType);
+    return expectedType;
+  }
+
+  w.ValueType _call(Reference target) {
+    w.BaseFunction targetFunction = translator.functions.getFunction(target);
+    if (translator.shouldInline(target)) {
+      List<w.Local> inlinedLocals =
+          targetFunction.type.inputs.map((t) => addLocal(t)).toList();
+      for (w.Local local in inlinedLocals.reversed) {
+        b.local_set(local);
+      }
+      w.Label block = b.block(const [], targetFunction.type.outputs);
+      b.comment("Inlined ${target.asMember}");
+      CodeGenerator(translator, function, target,
+              paramLocals: inlinedLocals, returnLabel: block)
+          .generate();
+    } else {
+      String access =
+          target.isGetter ? "get" : (target.isSetter ? "set" : "call");
+      b.comment("Direct $access of '${target.asMember}'");
+      b.call(targetFunction);
+    }
+    return translator.outputOrVoid(targetFunction.type.outputs);
+  }
+
+  @override
+  void visitInvalidInitializer(InvalidInitializer node) {}
+
+  @override
+  void visitAssertInitializer(AssertInitializer node) {}
+
+  @override
+  void visitLocalInitializer(LocalInitializer node) {
+    node.variable.accept(this);
+  }
+
+  @override
+  void visitFieldInitializer(FieldInitializer node) {
+    Class cls = (node.parent as Constructor).enclosingClass;
+    w.StructType struct = translator.classInfo[cls]!.struct;
+    int fieldIndex = translator.fieldIndex[node.field]!;
+
+    b.local_get(thisLocal!);
+    wrap(node.value, struct.fields[fieldIndex].type.unpacked);
+    b.struct_set(struct, fieldIndex);
+  }
+
+  @override
+  void visitRedirectingInitializer(RedirectingInitializer node) {
+    Class cls = (node.parent as Constructor).enclosingClass;
+    b.local_get(thisLocal!);
+    if (options.parameterNullability && thisLocal!.type.nullable) {
+      b.ref_as_non_null();
+    }
+    for (TypeParameter typeParam in cls.typeParameters) {
+      _makeType(TypeParameterType(typeParam, Nullability.nonNullable), node);
+    }
+    _visitArguments(node.arguments, node.targetReference, 1);
+    _call(node.targetReference);
+  }
+
+  @override
+  void visitSuperInitializer(SuperInitializer node) {
+    Supertype? supertype =
+        (node.parent as Constructor).enclosingClass.supertype;
+    if (supertype?.classNode.superclass == null) {
+      return;
+    }
+    b.local_get(thisLocal!);
+    if (options.parameterNullability && thisLocal!.type.nullable) {
+      b.ref_as_non_null();
+    }
+    for (DartType typeArg in supertype!.typeArguments) {
+      _makeType(typeArg, node);
+    }
+    _visitArguments(node.arguments, node.targetReference,
+        1 + supertype.typeArguments.length);
+    _call(node.targetReference);
+  }
+
+  @override
+  void visitBlock(Block node) {
+    for (Statement statement in node.statements) {
+      statement.accept(this);
+    }
+  }
+
+  @override
+  void visitLabeledStatement(LabeledStatement node) {
+    w.Label label = b.block();
+    labels[node] = label;
+    node.body.accept(this);
+    labels.remove(node);
+    b.end();
+  }
+
+  @override
+  void visitBreakStatement(BreakStatement node) {
+    b.br(labels[node.target]!);
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    if (node.type is VoidType) {
+      if (node.initializer != null) {
+        wrap(node.initializer!, voidMarker);
+      }
+      return;
+    }
+    w.ValueType type = translateType(node.type);
+    w.Local? local;
+    Capture? capture = closures.captures[node];
+    if (capture == null || !capture.written) {
+      local = addLocal(type);
+      locals[node] = local;
+    }
+    if (node.initializer != null) {
+      if (capture != null) {
+        w.ValueType expectedType = capture.written ? capture.type : local!.type;
+        b.local_get(capture.context.currentLocal);
+        wrap(node.initializer!, expectedType);
+        if (!capture.written) {
+          b.local_tee(local!);
+        }
+        b.struct_set(capture.context.struct, capture.fieldIndex);
+      } else {
+        wrap(node.initializer!, local!.type);
+        b.local_set(local);
+      }
+    } else if (local != null && !local.type.defaultable) {
+      // Uninitialized variable
+      translator.globals.instantiateDummyValue(b, local.type);
+      b.local_set(local);
+    }
+  }
+
+  @override
+  void visitEmptyStatement(EmptyStatement node) {}
+
+  @override
+  void visitAssertStatement(AssertStatement node) {}
+
+  @override
+  void visitAssertBlock(AssertBlock node) {}
+
+  @override
+  void visitTryCatch(TryCatch node) {
+    // It is not valid dart to have a try without a catch.
+    assert(node.catches.isNotEmpty);
+
+    // We lower a [TryCatch] to a wasm try block. If there are any [Catch]
+    // nodes, we generate a single wasm catch instruction, and dispatch at
+    // runtime based on the type of the caught exception.
+    w.Label try_ = b.try_();
+    node.body.accept(this);
+    b.br(try_);
+
+    // Insert a catch instruction which will catch any thrown Dart
+    // exceptions.
+    // Note: We must wait to add the try block to the [tryLabels] stack until
+    // after we have visited the body of the try. This is to handle the case of
+    // a rethrow nested within a try nested within a catch, that is we need the
+    // rethrow to target the last try block with a catch.
+    tryLabels.add(try_);
+    b.catch_(translator.exceptionTag);
+
+    // Stash the original exception in a local so we can push it back onto the
+    // stack after each type test. Also, store the stack trace in a local.
+    w.RefType stackTrace = translator.stackTraceInfo.nonNullableType;
+    w.Local thrownStackTrace = addLocal(stackTrace);
+    b.local_set(thrownStackTrace);
+
+    w.RefType exception = translator.topInfo.nonNullableType;
+    w.Local thrownException = addLocal(exception);
+    b.local_set(thrownException);
+
+    // For each catch node:
+    //   1) Create a block for the catch.
+    //   2) Push the caught exception onto the stack.
+    //   3) Add a type test based on the guard of the catch.
+    //   4) If the test fails, we jump to the next catch. Otherwise, we
+    //      execute the body of the catch.
+    for (Catch catch_ in node.catches) {
+      w.Label catchBlock = b.block();
+      DartType guard = catch_.guard;
+
+      // Only emit the type test if the guard is not [Object].
+      if (guard != translator.coreTypes.objectNonNullableRawType) {
+        b.local_get(thrownException);
+        emitTypeTest(
+            guard, translator.coreTypes.objectNonNullableRawType, node);
+        b.i32_eqz();
+        b.br_if(catchBlock);
+      }
+
+      // If there is an exception declaration, create a local corresponding to
+      // the catch's exception [VariableDeclaration] node.
+      VariableDeclaration? exceptionDeclaration = catch_.exception;
+      if (exceptionDeclaration != null) {
+        w.Local guardedException = addLocal(exception);
+        locals[exceptionDeclaration] = guardedException;
+        b.local_get(thrownException);
+        b.local_set(guardedException);
+      }
+
+      // If there is a stack trace declaration, then create a local
+      // corresponding to the catch's stack trace [VariableDeclaration] node.
+      VariableDeclaration? stackTraceDeclaration = catch_.stackTrace;
+      if (stackTraceDeclaration != null) {
+        w.Local guardedStackTrace = addLocal(stackTrace);
+        locals[stackTraceDeclaration] = guardedStackTrace;
+        b.local_get(thrownStackTrace);
+        b.local_set(guardedStackTrace);
+      }
+      catch_.body.accept(this);
+
+      // Jump out of the try entirely if we enter any catch block.
+      b.br(try_);
+      b.end(); // end catchBlock.
+    }
+
+    // We insert a rethrow just before the end of the try block to handle the
+    // case where none of the catch blocks catch the type of the thrown
+    // exception.
+    b.rethrow_(try_);
+    tryLabels.removeLast();
+    b.end(); // end try_.
+  }
+
+  @override
+  void visitTryFinally(TryFinally node) {
+    finalizers.add(node.finalizer);
+    node.body.accept(this);
+    finalizers.removeLast().accept(this);
+  }
+
+  @override
+  void visitExpressionStatement(ExpressionStatement node) {
+    wrap(node.expression, voidMarker);
+  }
+
+  bool _hasLogicalOperator(Expression condition) {
+    while (condition is Not) condition = condition.operand;
+    return condition is LogicalExpression;
+  }
+
+  void _branchIf(Expression? condition, w.Label target,
+      {required bool negated}) {
+    if (condition == null) {
+      if (!negated) b.br(target);
+      return;
+    }
+    while (condition is Not) {
+      negated = !negated;
+      condition = condition.operand;
+    }
+    if (condition is LogicalExpression) {
+      bool isConjunctive =
+          (condition.operatorEnum == LogicalExpressionOperator.AND) ^ negated;
+      if (isConjunctive) {
+        w.Label conditionBlock = b.block();
+        _branchIf(condition.left, conditionBlock, negated: !negated);
+        _branchIf(condition.right, target, negated: negated);
+        b.end();
+      } else {
+        _branchIf(condition.left, target, negated: negated);
+        _branchIf(condition.right, target, negated: negated);
+      }
+    } else {
+      wrap(condition!, w.NumType.i32);
+      if (negated) {
+        b.i32_eqz();
+      }
+      b.br_if(target);
+    }
+  }
+
+  void _conditional(Expression condition, void then(), void otherwise()?,
+      List<w.ValueType> result) {
+    if (!_hasLogicalOperator(condition)) {
+      // Simple condition
+      wrap(condition, w.NumType.i32);
+      b.if_(const [], result);
+      then();
+      if (otherwise != null) {
+        b.else_();
+        otherwise();
+      }
+      b.end();
+    } else {
+      // Complex condition
+      w.Label ifBlock = b.block(const [], result);
+      if (otherwise != null) {
+        w.Label elseBlock = b.block();
+        _branchIf(condition, elseBlock, negated: true);
+        then();
+        b.br(ifBlock);
+        b.end();
+        otherwise();
+      } else {
+        _branchIf(condition, ifBlock, negated: true);
+        then();
+      }
+      b.end();
+    }
+  }
+
+  @override
+  void visitIfStatement(IfStatement node) {
+    _conditional(
+        node.condition,
+        () => node.then.accept(this),
+        node.otherwise != null ? () => node.otherwise!.accept(this) : null,
+        const []);
+  }
+
+  @override
+  void visitDoStatement(DoStatement node) {
+    w.Label loop = b.loop();
+    allocateContext(node);
+    node.body.accept(this);
+    _branchIf(node.condition, loop, negated: false);
+    b.end();
+  }
+
+  @override
+  void visitWhileStatement(WhileStatement node) {
+    w.Label block = b.block();
+    w.Label loop = b.loop();
+    _branchIf(node.condition, block, negated: true);
+    allocateContext(node);
+    node.body.accept(this);
+    b.br(loop);
+    b.end();
+    b.end();
+  }
+
+  @override
+  void visitForStatement(ForStatement node) {
+    Context? context = closures.contexts[node];
+    allocateContext(node);
+    for (VariableDeclaration variable in node.variables) {
+      variable.accept(this);
+    }
+    w.Label block = b.block();
+    w.Label loop = b.loop();
+    _branchIf(node.condition, block, negated: true);
+    node.body.accept(this);
+    if (node.variables.any((v) => closures.captures.containsKey(v))) {
+      w.Local oldContext = context!.currentLocal;
+      allocateContext(node);
+      w.Local newContext = context.currentLocal;
+      for (VariableDeclaration variable in node.variables) {
+        Capture? capture = closures.captures[variable];
+        if (capture != null) {
+          b.local_get(oldContext);
+          b.struct_get(context.struct, capture.fieldIndex);
+          b.local_get(newContext);
+          b.struct_set(context.struct, capture.fieldIndex);
+        }
+      }
+    } else {
+      allocateContext(node);
+    }
+    for (Expression update in node.updates) {
+      wrap(update, voidMarker);
+    }
+    b.br(loop);
+    b.end();
+    b.end();
+  }
+
+  @override
+  void visitForInStatement(ForInStatement node) {
+    throw "ForInStatement should have been desugared: $node";
+  }
+
+  @override
+  void visitReturnStatement(ReturnStatement node) {
+    Expression? expression = node.expression;
+    if (expression != null) {
+      wrap(expression, returnType);
+    } else {
+      translator.convertType(function, voidMarker, returnType);
+    }
+    for (Statement finalizer in finalizers.reversed) {
+      finalizer.accept(this);
+    }
+    if (returnLabel != null) {
+      b.br(returnLabel!);
+    } else {
+      b.return_();
+    }
+  }
+
+  @override
+  void visitSwitchStatement(SwitchStatement node) {
+    bool check<L extends Expression, C extends Constant>() =>
+        node.cases.expand((c) => c.expressions).every((e) =>
+            e is L ||
+            e is NullLiteral ||
+            e is ConstantExpression &&
+                (e.constant is C || e.constant is NullConstant));
+
+    // Identify kind of switch
+    w.ValueType valueType;
+    w.ValueType nullableType;
+    void Function() compare;
+    if (check<BoolLiteral, BoolConstant>()) {
+      // bool switch
+      valueType = w.NumType.i32;
+      nullableType =
+          translator.classInfo[translator.boxedBoolClass]!.nullableType;
+      compare = () => b.i32_eq();
+    } else if (check<IntLiteral, IntConstant>()) {
+      // int switch
+      valueType = w.NumType.i64;
+      nullableType =
+          translator.classInfo[translator.boxedIntClass]!.nullableType;
+      compare = () => b.i64_eq();
+    } else if (check<StringLiteral, StringConstant>()) {
+      // String switch
+      valueType =
+          translator.classInfo[translator.stringBaseClass]!.nonNullableType;
+      nullableType = valueType.withNullability(true);
+      compare = () => _call(translator.stringEquals.reference);
+    } else {
+      // Object switch
+      assert(check<InvalidExpression, InstanceConstant>());
+      valueType = w.RefType.eq(nullable: false);
+      nullableType = w.RefType.eq(nullable: true);
+      compare = () => b.ref_eq();
+    }
+    w.Local valueLocal = addLocal(valueType);
+
+    // Special cases
+    SwitchCase? defaultCase = node.cases
+        .cast<SwitchCase?>()
+        .firstWhere((c) => c!.isDefault, orElse: () => null);
+    SwitchCase? nullCase = node.cases.cast<SwitchCase?>().firstWhere(
+        (c) => c!.expressions.any((e) =>
+            e is NullLiteral ||
+            e is ConstantExpression && e.constant is NullConstant),
+        orElse: () => null);
+
+    // Set up blocks, in reverse order of cases so they end in forward order
+    w.Label doneLabel = b.block();
+    for (SwitchCase c in node.cases.reversed) {
+      switchLabels[c] = b.block();
+    }
+
+    // Compute value and handle null
+    bool isNullable = dartTypeOf(node.expression).isPotentiallyNullable;
+    if (isNullable) {
+      w.Label nullLabel = nullCase != null
+          ? switchLabels[nullCase]!
+          : defaultCase != null
+              ? switchLabels[defaultCase]!
+              : doneLabel;
+      wrap(node.expression, nullableType);
+      b.br_on_null(nullLabel);
+      translator.convertType(
+          function, nullableType.withNullability(false), valueType);
+    } else {
+      assert(nullCase == null);
+      wrap(node.expression, valueType);
+    }
+    b.local_set(valueLocal);
+
+    // Compare against all case values
+    for (SwitchCase c in node.cases) {
+      for (Expression exp in c.expressions) {
+        if (exp is NullLiteral ||
+            exp is ConstantExpression && exp.constant is NullConstant) {
+          // Null already checked, skip
+        } else {
+          wrap(exp, valueType);
+          b.local_get(valueLocal);
+          translator.convertType(function, valueLocal.type, valueType);
+          compare();
+          b.br_if(switchLabels[c]!);
+        }
+      }
+    }
+    w.Label defaultLabel =
+        defaultCase != null ? switchLabels[defaultCase]! : doneLabel;
+    b.br(defaultLabel);
+
+    // Emit case bodies
+    for (SwitchCase c in node.cases) {
+      switchLabels.remove(c);
+      b.end();
+      c.body.accept(this);
+      b.br(doneLabel);
+    }
+    b.end();
+  }
+
+  @override
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
+    w.Label? label = switchLabels[node.target];
+    if (label != null) {
+      b.br(label);
+    } else {
+      throw "Not supported: Backward jump to switch case at ${node.location}";
+    }
+  }
+
+  @override
+  void visitYieldStatement(YieldStatement node) => defaultStatement(node);
+
+  @override
+  w.ValueType visitBlockExpression(
+      BlockExpression node, w.ValueType expectedType) {
+    node.body.accept(this);
+    return wrap(node.value, expectedType);
+  }
+
+  @override
+  w.ValueType visitLet(Let node, w.ValueType expectedType) {
+    node.variable.accept(this);
+    return wrap(node.body, expectedType);
+  }
+
+  @override
+  w.ValueType visitThisExpression(
+      ThisExpression node, w.ValueType expectedType) {
+    return _visitThis(expectedType);
+  }
+
+  w.ValueType _visitThis(w.ValueType expectedType) {
+    w.ValueType thisType = thisLocal!.type.withNullability(false);
+    w.ValueType preciseThisType = preciseThisLocal!.type.withNullability(false);
+    if (!thisType.isSubtypeOf(expectedType) &&
+        preciseThisType.isSubtypeOf(expectedType)) {
+      b.local_get(preciseThisLocal!);
+      return preciseThisLocal!.type;
+    } else {
+      b.local_get(thisLocal!);
+      return thisLocal!.type;
+    }
+  }
+
+  @override
+  w.ValueType visitConstructorInvocation(
+      ConstructorInvocation node, w.ValueType expectedType) {
+    ClassInfo info = translator.classInfo[node.target.enclosingClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.Local temp = addLocal(info.nonNullableType);
+    translator.struct_new_default(b, info);
+    b.local_tee(temp);
+    b.local_get(temp);
+    b.i32_const(info.classId);
+    b.struct_set(info.struct, FieldIndex.classId);
+    if (options.parameterNullability && temp.type.nullable) {
+      b.ref_as_non_null();
+    }
+    _visitArguments(node.arguments, node.targetReference, 1);
+    _call(node.targetReference);
+    if (expectedType != voidMarker) {
+      b.local_get(temp);
+      return temp.type;
+    } else {
+      return voidMarker;
+    }
+  }
+
+  @override
+  w.ValueType visitStaticInvocation(
+      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);
+  }
+
+  Member _lookupSuperTarget(Member interfaceTarget, {required bool setter}) {
+    return translator.hierarchy.getDispatchTarget(
+        member.enclosingClass!.superclass!, interfaceTarget.name,
+        setter: setter)!;
+  }
+
+  @override
+  w.ValueType visitSuperMethodInvocation(
+      SuperMethodInvocation node, w.ValueType expectedType) {
+    Reference target =
+        _lookupSuperTarget(node.interfaceTarget!, setter: false).reference;
+    w.BaseFunction targetFunction = translator.functions.getFunction(target);
+    w.ValueType receiverType = targetFunction.type.inputs.first;
+    w.ValueType thisType = _visitThis(receiverType);
+    translator.convertType(function, thisType, receiverType);
+    _visitArguments(node.arguments, target, 1);
+    return _call(target);
+  }
+
+  @override
+  w.ValueType visitInstanceInvocation(
+      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) {
+        case "toString":
+          late w.Label done;
+          w.ValueType resultType = _virtualCall(node, target, (signature) {
+            done = b.block(const [], signature.outputs);
+            w.Label nullString = b.block();
+            wrap(node.receiver, translator.topInfo.nullableType);
+            b.br_on_null(nullString);
+          }, (_) {
+            _visitArguments(node.arguments, node.interfaceTargetReference, 1);
+          }, getter: false, setter: false);
+          b.br(done);
+          b.end();
+          wrap(StringLiteral("null"), resultType);
+          b.end();
+          return resultType;
+        default:
+          _unimplemented(node, "Nullable invocation of ${target.name.text}",
+              [if (expectedType != voidMarker) expectedType]);
+          return expectedType;
+      }
+    }
+    Member? singleTarget = translator.singleTarget(node);
+    if (singleTarget != null) {
+      w.BaseFunction targetFunction =
+          translator.functions.getFunction(singleTarget.reference);
+      wrap(node.receiver, targetFunction.type.inputs.first);
+      _visitArguments(node.arguments, node.interfaceTargetReference, 1);
+      return _call(singleTarget.reference);
+    }
+    return _virtualCall(node, target,
+        (signature) => wrap(node.receiver, signature.inputs.first), (_) {
+      _visitArguments(node.arguments, node.interfaceTargetReference, 1);
+    }, getter: false, setter: false);
+  }
+
+  @override
+  w.ValueType visitDynamicInvocation(
+      DynamicInvocation node, w.ValueType expectedType) {
+    if (node.name.text != "call") {
+      _unimplemented(node, "Dynamic invocation of ${node.name.text}",
+          [if (expectedType != voidMarker) expectedType]);
+      return expectedType;
+    }
+    return _functionCall(
+        node.arguments.positional.length, node.receiver, node.arguments);
+  }
+
+  @override
+  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
+      wrap(node.left, w.RefType.eq(nullable: true));
+      wrap(node.right, w.RefType.eq(nullable: true));
+      b.ref_eq();
+    } else {
+      // Check operands for null, then call implementation
+      bool leftNullable = dartTypeOf(node.left).isPotentiallyNullable;
+      bool rightNullable = dartTypeOf(node.right).isPotentiallyNullable;
+      w.RefType leftType = translator.topInfo.typeWithNullability(leftNullable);
+      w.RefType rightType =
+          translator.topInfo.typeWithNullability(rightNullable);
+      w.Local leftLocal = addLocal(leftType);
+      w.Local rightLocal = addLocal(rightType);
+      w.Label? operandNull;
+      w.Label? done;
+      if (leftNullable || rightNullable) {
+        done = b.block(const [], const [w.NumType.i32]);
+        operandNull = b.block();
+      }
+      wrap(node.left, leftLocal.type);
+      b.local_set(leftLocal);
+      wrap(node.right, rightLocal.type);
+      if (rightNullable) {
+        b.local_tee(rightLocal);
+        b.br_on_null(operandNull!);
+        b.drop();
+      } else {
+        b.local_set(rightLocal);
+      }
+
+      void left([_]) {
+        b.local_get(leftLocal);
+        if (leftNullable) {
+          b.br_on_null(operandNull!);
+        } else if (leftLocal.type.nullable) {
+          b.ref_as_non_null();
+        }
+      }
+
+      void right([_]) {
+        b.local_get(rightLocal);
+        if (rightLocal.type.nullable) {
+          b.ref_as_non_null();
+        }
+      }
+
+      if (singleTarget != null) {
+        left();
+        right();
+        _call(singleTarget.reference);
+      } else {
+        _virtualCall(node, node.interfaceTarget, left, right,
+            getter: false, setter: false);
+      }
+      if (leftNullable || rightNullable) {
+        b.br(done!);
+        b.end(); // operandNull
+        if (leftNullable && rightNullable) {
+          // Both sides nullable - compare references
+          b.local_get(leftLocal);
+          b.local_get(rightLocal);
+          b.ref_eq();
+        } else {
+          // Only one side nullable - not equal if one is null
+          b.i32_const(0);
+        }
+        b.end(); // done
+      }
+    }
+    return w.NumType.i32;
+  }
+
+  @override
+  w.ValueType visitEqualsNull(EqualsNull node, w.ValueType expectedType) {
+    wrap(node.expression, translator.topInfo.nullableType);
+    b.ref_is_null();
+    return w.NumType.i32;
+  }
+
+  w.ValueType _virtualCall(
+      TreeNode node,
+      Member interfaceTarget,
+      void pushReceiver(w.FunctionType signature),
+      void pushArguments(w.FunctionType signature),
+      {required bool getter,
+      required bool setter}) {
+    SelectorInfo selector = translator.dispatchTable.selectorForTarget(
+        interfaceTarget.referenceAs(getter: getter, setter: setter));
+    assert(selector.name == interfaceTarget.name.text);
+
+    pushReceiver(selector.signature);
+
+    int? offset = selector.offset;
+    if (offset == null) {
+      // Singular target or unreachable call
+      assert(selector.targetCount <= 1);
+      if (selector.targetCount == 1) {
+        pushArguments(selector.signature);
+        return _call(selector.singularTarget!);
+      } else {
+        b.comment("Virtual call of ${selector.name} with no targets"
+            " at ${node.location}");
+        b.drop();
+        b.block(const [], selector.signature.outputs);
+        b.unreachable();
+        b.end();
+        return translator.outputOrVoid(selector.signature.outputs);
+      }
+    }
+
+    // Receiver is already on stack.
+    w.Local receiverVar = addLocal(selector.signature.inputs.first);
+    b.local_tee(receiverVar);
+    if (options.parameterNullability && receiverVar.type.nullable) {
+      b.ref_as_non_null();
+    }
+    pushArguments(selector.signature);
+
+    if (options.polymorphicSpecialization) {
+      _polymorphicSpecialization(selector, receiverVar);
+    } else {
+      String access = getter ? "get" : (setter ? "set" : "call");
+      b.comment("Instance $access of '${selector.name}'");
+      b.local_get(receiverVar);
+      b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+      if (offset != 0) {
+        b.i32_const(offset);
+        b.i32_add();
+      }
+      b.call_indirect(selector.signature);
+
+      translator.functions.activateSelector(selector);
+    }
+
+    return translator.outputOrVoid(selector.signature.outputs);
+  }
+
+  void _polymorphicSpecialization(SelectorInfo selector, w.Local receiver) {
+    Map<int, Reference> implementations = Map.from(selector.targets);
+    implementations.removeWhere((id, target) => target.asMember.isAbstract);
+
+    w.Local idVar = addLocal(w.NumType.i32);
+    b.local_get(receiver);
+    b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+    b.local_set(idVar);
+
+    w.Label block =
+        b.block(selector.signature.inputs, selector.signature.outputs);
+    calls:
+    while (Set.from(implementations.values).length > 1) {
+      for (int id in implementations.keys) {
+        Reference target = implementations[id]!;
+        if (implementations.values.where((t) => t == target).length == 1) {
+          // Single class id implements method.
+          b.local_get(idVar);
+          b.i32_const(id);
+          b.i32_eq();
+          b.if_(selector.signature.inputs, selector.signature.inputs);
+          _call(target);
+          b.br(block);
+          b.end();
+          implementations.remove(id);
+          continue calls;
+        }
+      }
+      // Find class id that separates remaining classes in two.
+      List<int> sorted = implementations.keys.toList()..sort();
+      int pivotId = sorted.firstWhere(
+          (id) => implementations[id] != implementations[sorted.first]);
+      // Fail compilation if no such id exists.
+      assert(sorted.lastWhere(
+              (id) => implementations[id] != implementations[pivotId]) ==
+          pivotId - 1);
+      Reference target = implementations[sorted.first]!;
+      b.local_get(idVar);
+      b.i32_const(pivotId);
+      b.i32_lt_u();
+      b.if_(selector.signature.inputs, selector.signature.inputs);
+      _call(target);
+      b.br(block);
+      b.end();
+      for (int id in sorted) {
+        if (id == pivotId) break;
+        implementations.remove(id);
+      }
+      continue calls;
+    }
+    // Call remaining implementation.
+    Reference target = implementations.values.first;
+    _call(target);
+    b.end();
+  }
+
+  @override
+  w.ValueType visitVariableGet(VariableGet node, w.ValueType expectedType) {
+    w.Local? local = locals[node.variable];
+    Capture? capture = closures.captures[node.variable];
+    if (capture != null) {
+      if (!capture.written && local != null) {
+        b.local_get(local);
+        return local.type;
+      } else {
+        b.local_get(capture.context.currentLocal);
+        b.struct_get(capture.context.struct, capture.fieldIndex);
+        return capture.type;
+      }
+    } else {
+      if (local == null) {
+        throw "Read of undefined variable ${node.variable}";
+      }
+      b.local_get(local);
+      return local.type;
+    }
+  }
+
+  @override
+  w.ValueType visitVariableSet(VariableSet node, w.ValueType expectedType) {
+    w.Local? local = locals[node.variable];
+    Capture? capture = closures.captures[node.variable];
+    bool preserved = expectedType != voidMarker;
+    if (capture != null) {
+      assert(capture.written);
+      b.local_get(capture.context.currentLocal);
+      wrap(node.value, capture.type);
+      if (preserved) {
+        w.Local temp = addLocal(translateType(node.variable.type));
+        b.local_tee(temp);
+        b.struct_set(capture.context.struct, capture.fieldIndex);
+        b.local_get(temp);
+        return temp.type;
+      } else {
+        b.struct_set(capture.context.struct, capture.fieldIndex);
+        return voidMarker;
+      }
+    } else {
+      if (local == null) {
+        throw "Write of undefined variable ${node.variable}";
+      }
+      wrap(node.value, local.type);
+      if (preserved) {
+        b.local_tee(local);
+        return local.type;
+      } else {
+        b.local_set(local);
+        return voidMarker;
+      }
+    }
+  }
+
+  @override
+  w.ValueType visitStaticGet(StaticGet node, w.ValueType expectedType) {
+    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);
+    } else {
+      return _call(target.reference);
+    }
+  }
+
+  @override
+  w.ValueType visitStaticTearOff(StaticTearOff node, w.ValueType expectedType) {
+    translator.constants.instantiateConstant(
+        function, b, StaticTearOffConstant(node.target), expectedType);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitStaticSet(StaticSet node, w.ValueType expectedType) {
+    bool preserved = expectedType != voidMarker;
+    Member target = node.target;
+    if (target is Field) {
+      w.Global global = translator.globals.getGlobal(target);
+      wrap(node.value, global.type.type);
+      b.global_set(global);
+      if (preserved) {
+        b.global_get(global);
+        return global.type.type;
+      } else {
+        return voidMarker;
+      }
+    } else {
+      w.BaseFunction targetFunction =
+          translator.functions.getFunction(target.reference);
+      wrap(node.value, targetFunction.type.inputs.single);
+      w.Local? temp;
+      if (preserved) {
+        temp = addLocal(translateType(dartTypeOf(node.value)));
+        b.local_tee(temp);
+      }
+      _call(target.reference);
+      if (preserved) {
+        b.local_get(temp!);
+        return temp.type;
+      } else {
+        return voidMarker;
+      }
+    }
+  }
+
+  @override
+  w.ValueType visitSuperPropertyGet(
+      SuperPropertyGet node, w.ValueType expectedType) {
+    Member target = _lookupSuperTarget(node.interfaceTarget!, setter: false);
+    if (target is Procedure && !target.isGetter) {
+      throw "Not supported: Super tear-off at ${node.location}";
+    }
+    return _directGet(target, ThisExpression(), () => null);
+  }
+
+  @override
+  w.ValueType visitSuperPropertySet(
+      SuperPropertySet node, w.ValueType expectedType) {
+    Member target = _lookupSuperTarget(node.interfaceTarget!, setter: true);
+    return _directSet(target, ThisExpression(), node.value,
+        preserved: expectedType != voidMarker);
+  }
+
+  @override
+  w.ValueType visitInstanceGet(InstanceGet node, w.ValueType expectedType) {
+    Member target = node.interfaceTarget;
+    if (node.kind == InstanceAccessKind.Object) {
+      late w.Label doneLabel;
+      w.ValueType resultType = _virtualCall(node, target, (signature) {
+        doneLabel = b.block(const [], signature.outputs);
+        w.Label nullLabel = b.block();
+        wrap(node.receiver, translator.topInfo.nullableType);
+        b.br_on_null(nullLabel);
+      }, (_) {}, getter: true, setter: false);
+      b.br(doneLabel);
+      b.end(); // nullLabel
+      switch (target.name.text) {
+        case "hashCode":
+          b.i64_const(2011);
+          break;
+        case "runtimeType":
+          wrap(ConstantExpression(TypeLiteralConstant(NullType())), resultType);
+          break;
+        default:
+          _unimplemented(
+              node, "Nullable get of ${target.name.text}", [resultType]);
+          break;
+      }
+      b.end(); // doneLabel
+      return resultType;
+    }
+    Member? singleTarget = translator.singleTarget(node);
+    if (singleTarget != null) {
+      return _directGet(singleTarget, node.receiver,
+          () => intrinsifier.generateInstanceGetterIntrinsic(node));
+    } else {
+      return _virtualCall(node, target,
+          (signature) => wrap(node.receiver, signature.inputs.first), (_) {},
+          getter: true, setter: false);
+    }
+  }
+
+  @override
+  w.ValueType visitDynamicGet(DynamicGet node, w.ValueType expectedType) {
+    // Provisional implementation of dynamic get which assumes the getter
+    // is present (otherwise it traps or calls something random) and
+    // does not support tearoffs. This is sufficient to handle the
+    // dynamic .length calls in the core libraries.
+
+    SelectorInfo selector =
+        translator.dispatchTable.selectorForDynamicName(node.name.text);
+
+    // Evaluate receiver
+    wrap(node.receiver, selector.signature.inputs.first);
+    w.Local receiverVar = addLocal(selector.signature.inputs.first);
+    b.local_tee(receiverVar);
+    if (options.parameterNullability && receiverVar.type.nullable) {
+      b.ref_as_non_null();
+    }
+
+    // Dispatch table call
+    b.comment("Dynamic get of '${selector.name}'");
+    int offset = selector.offset!;
+    b.local_get(receiverVar);
+    b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+    if (offset != 0) {
+      b.i32_const(offset);
+      b.i32_add();
+    }
+    b.call_indirect(selector.signature);
+
+    translator.functions.activateSelector(selector);
+
+    return translator.outputOrVoid(selector.signature.outputs);
+  }
+
+  w.ValueType _directGet(
+      Member target, Expression receiver, w.ValueType? Function() intrinsify) {
+    if (target is Field) {
+      ClassInfo info = translator.classInfo[target.enclosingClass]!;
+      int fieldIndex = translator.fieldIndex[target]!;
+      w.ValueType receiverType = info.nullableType;
+      w.ValueType fieldType = info.struct.fields[fieldIndex].type.unpacked;
+      wrap(receiver, receiverType);
+      b.struct_get(info.struct, fieldIndex);
+      return fieldType;
+    } 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);
+      return _call(target.reference);
+    }
+  }
+
+  @override
+  w.ValueType visitInstanceTearOff(
+      InstanceTearOff node, w.ValueType expectedType) {
+    return _virtualCall(node, node.interfaceTarget,
+        (signature) => wrap(node.receiver, signature.inputs.first), (_) {},
+        getter: true, setter: false);
+  }
+
+  @override
+  w.ValueType visitInstanceSet(InstanceSet node, w.ValueType expectedType) {
+    bool preserved = expectedType != voidMarker;
+    w.Local? temp;
+    Member? singleTarget = translator.singleTarget(node);
+    if (singleTarget != null) {
+      return _directSet(singleTarget, node.receiver, node.value,
+          preserved: preserved);
+    } else {
+      _virtualCall(node, node.interfaceTarget,
+          (signature) => wrap(node.receiver, signature.inputs.first),
+          (signature) {
+        w.ValueType paramType = signature.inputs.last;
+        wrap(node.value, paramType);
+        if (preserved) {
+          temp = addLocal(paramType);
+          b.local_tee(temp!);
+        }
+      }, getter: false, setter: true);
+      if (preserved) {
+        b.local_get(temp!);
+        return temp!.type;
+      } else {
+        return voidMarker;
+      }
+    }
+  }
+
+  w.ValueType _directSet(Member target, Expression receiver, Expression value,
+      {required bool preserved}) {
+    w.Local? temp;
+    if (target is Field) {
+      ClassInfo info = translator.classInfo[target.enclosingClass]!;
+      int fieldIndex = translator.fieldIndex[target]!;
+      w.ValueType receiverType = info.nullableType;
+      w.ValueType fieldType = info.struct.fields[fieldIndex].type.unpacked;
+      wrap(receiver, receiverType);
+      wrap(value, fieldType);
+      if (preserved) {
+        temp = addLocal(fieldType);
+        b.local_tee(temp);
+      }
+      b.struct_set(info.struct, fieldIndex);
+    } else {
+      w.BaseFunction targetFunction =
+          translator.functions.getFunction(target.reference);
+      w.ValueType paramType = targetFunction.type.inputs.last;
+      wrap(receiver, targetFunction.type.inputs.first);
+      wrap(value, paramType);
+      if (preserved) {
+        temp = addLocal(paramType);
+        b.local_tee(temp);
+        translator.convertType(function, temp.type, paramType);
+      }
+      _call(target.reference);
+    }
+    if (preserved) {
+      b.local_get(temp!);
+      return temp.type;
+    } else {
+      return voidMarker;
+    }
+  }
+
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    Capture? capture = closures.captures[node.variable];
+    bool locallyClosurized = closures.closurizedFunctions.contains(node);
+    if (capture != null || locallyClosurized) {
+      if (capture != null) {
+        b.local_get(capture.context.currentLocal);
+      }
+      w.StructType struct = _instantiateClosure(node.function);
+      if (locallyClosurized) {
+        w.Local local = addLocal(w.RefType.def(struct, nullable: false));
+        locals[node.variable] = local;
+        if (capture != null) {
+          b.local_tee(local);
+        } else {
+          b.local_set(local);
+        }
+      }
+      if (capture != null) {
+        b.struct_set(capture.context.struct, capture.fieldIndex);
+      }
+    }
+  }
+
+  @override
+  w.ValueType visitFunctionExpression(
+      FunctionExpression node, w.ValueType expectedType) {
+    w.StructType struct = _instantiateClosure(node.function);
+    return w.RefType.def(struct, nullable: false);
+  }
+
+  w.StructType _instantiateClosure(FunctionNode functionNode) {
+    int parameterCount = functionNode.requiredParameterCount;
+    Lambda lambda = closures.lambdas[functionNode]!;
+    w.DefinedGlobal global = translator.makeFunctionRef(lambda.function);
+
+    ClassInfo info = translator.classInfo[translator.functionClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.StructType struct = translator.closureStructType(parameterCount);
+
+    b.i32_const(info.classId);
+    b.i32_const(initialIdentityHash);
+    _pushContext(functionNode);
+    b.global_get(global);
+    translator.struct_new(b, parameterCount);
+
+    return struct;
+  }
+
+  void _pushContext(FunctionNode functionNode) {
+    Context? context = closures.contexts[functionNode]?.parent;
+    if (context != null) {
+      b.local_get(context.currentLocal);
+      if (context.currentLocal.type.nullable) {
+        b.ref_as_non_null();
+      }
+    } else {
+      b.global_get(translator.globals.dummyGlobal); // Dummy context
+    }
+  }
+
+  @override
+  w.ValueType visitFunctionInvocation(
+      FunctionInvocation node, w.ValueType expectedType) {
+    FunctionType functionType = node.functionType!;
+    int parameterCount = functionType.requiredParameterCount;
+    return _functionCall(parameterCount, node.receiver, node.arguments);
+  }
+
+  w.ValueType _functionCall(
+      int parameterCount, Expression receiver, Arguments arguments) {
+    w.StructType struct = translator.closureStructType(parameterCount);
+    w.Local temp = addLocal(w.RefType.def(struct, nullable: false));
+    wrap(receiver, temp.type);
+    b.local_tee(temp);
+    b.struct_get(struct, FieldIndex.closureContext);
+    for (Expression arg in arguments.positional) {
+      wrap(arg, translator.topInfo.nullableType);
+    }
+    b.local_get(temp);
+    b.struct_get(struct, FieldIndex.closureFunction);
+    b.call_ref();
+    return translator.topInfo.nullableType;
+  }
+
+  @override
+  w.ValueType visitLocalFunctionInvocation(
+      LocalFunctionInvocation node, w.ValueType expectedType) {
+    var decl = node.variable.parent as FunctionDeclaration;
+    _pushContext(decl.function);
+    for (Expression arg in node.arguments.positional) {
+      wrap(arg, translator.topInfo.nullableType);
+    }
+    Lambda lambda = closures.lambdas[decl.function]!;
+    b.comment("Local call of ${decl.variable.name}");
+    b.call(lambda.function);
+    return translator.topInfo.nullableType;
+  }
+
+  @override
+  w.ValueType visitLogicalExpression(
+      LogicalExpression node, w.ValueType expectedType) {
+    _conditional(node, () => b.i32_const(1), () => b.i32_const(0),
+        const [w.NumType.i32]);
+    return w.NumType.i32;
+  }
+
+  @override
+  w.ValueType visitNot(Not node, w.ValueType expectedType) {
+    wrap(node.operand, w.NumType.i32);
+    b.i32_eqz();
+    return w.NumType.i32;
+  }
+
+  @override
+  w.ValueType visitConditionalExpression(
+      ConditionalExpression node, w.ValueType expectedType) {
+    _conditional(
+        node.condition,
+        () => wrap(node.then, expectedType),
+        () => wrap(node.otherwise, expectedType),
+        [if (expectedType != voidMarker) expectedType]);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitNullCheck(NullCheck node, w.ValueType expectedType) {
+    // TODO(joshualitt): Check and throw exception
+    return wrap(node.operand, expectedType);
+  }
+
+  void _visitArguments(Arguments node, Reference target, int signatureOffset) {
+    final w.FunctionType signature = translator.signatureFor(target);
+    final ParameterInfo paramInfo = translator.paramInfoFor(target);
+    for (int i = 0; i < node.types.length; i++) {
+      _makeType(node.types[i], node);
+    }
+    signatureOffset += node.types.length;
+    for (int i = 0; i < node.positional.length; i++) {
+      wrap(node.positional[i], signature.inputs[signatureOffset + i]);
+    }
+    // Default values for positional parameters
+    for (int i = node.positional.length; i < paramInfo.positional.length; i++) {
+      final w.ValueType type = signature.inputs[signatureOffset + i];
+      translator.constants
+          .instantiateConstant(function, b, paramInfo.positional[i]!, type);
+    }
+    // Named arguments
+    final Map<String, w.Local> namedLocals = {};
+    for (var namedArg in node.named) {
+      final w.ValueType type = signature
+          .inputs[signatureOffset + paramInfo.nameIndex[namedArg.name]!];
+      final w.Local namedLocal = addLocal(type);
+      namedLocals[namedArg.name] = namedLocal;
+      wrap(namedArg.value, namedLocal.type);
+      b.local_set(namedLocal);
+    }
+    for (String name in paramInfo.names) {
+      w.Local? namedLocal = namedLocals[name];
+      final w.ValueType type =
+          signature.inputs[signatureOffset + paramInfo.nameIndex[name]!];
+      if (namedLocal != null) {
+        b.local_get(namedLocal);
+        translator.convertType(function, namedLocal.type, type);
+      } else {
+        translator.constants
+            .instantiateConstant(function, b, paramInfo.named[name]!, type);
+      }
+    }
+  }
+
+  @override
+  w.ValueType visitStringConcatenation(
+      StringConcatenation node, w.ValueType expectedType) {
+    _makeList(
+        node.expressions,
+        translator.fixedLengthListClass,
+        InterfaceType(translator.stringBaseClass, Nullability.nonNullable),
+        node);
+    return _call(translator.stringInterpolate.reference);
+  }
+
+  @override
+  w.ValueType visitThrow(Throw node, w.ValueType expectedType) {
+    wrap(node.expression, translator.topInfo.nonNullableType);
+    _call(translator.stackTraceCurrent.reference);
+
+    // At this point, we have the exception and the current stack trace on the
+    // stack, so just throw them using the exception tag.
+    b.throw_(translator.exceptionTag);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitRethrow(Rethrow node, w.ValueType expectedType) {
+    b.rethrow_(tryLabels.last);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitInstantiation(Instantiation node, w.ValueType expectedType) {
+    throw "Not supported: Generic function instantiation at ${node.location}";
+  }
+
+  @override
+  w.ValueType visitConstantExpression(
+      ConstantExpression node, w.ValueType expectedType) {
+    translator.constants
+        .instantiateConstant(function, b, node.constant, expectedType);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitNullLiteral(NullLiteral node, w.ValueType expectedType) {
+    translator.constants
+        .instantiateConstant(function, b, NullConstant(), expectedType);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitStringLiteral(StringLiteral node, w.ValueType expectedType) {
+    translator.constants.instantiateConstant(
+        function, b, StringConstant(node.value), expectedType);
+    return expectedType;
+  }
+
+  @override
+  w.ValueType visitBoolLiteral(BoolLiteral node, w.ValueType expectedType) {
+    b.i32_const(node.value ? 1 : 0);
+    return w.NumType.i32;
+  }
+
+  @override
+  w.ValueType visitIntLiteral(IntLiteral node, w.ValueType expectedType) {
+    b.i64_const(node.value);
+    return w.NumType.i64;
+  }
+
+  @override
+  w.ValueType visitDoubleLiteral(DoubleLiteral node, w.ValueType expectedType) {
+    b.f64_const(node.value);
+    return w.NumType.f64;
+  }
+
+  @override
+  w.ValueType visitListLiteral(ListLiteral node, w.ValueType expectedType) {
+    return _makeList(node.expressions, translator.growableListClass,
+        node.typeArgument, node);
+  }
+
+  w.ValueType _makeList(List<Expression> expressions, Class cls,
+      DartType typeArg, TreeNode node) {
+    ClassInfo info = translator.classInfo[cls]!;
+    translator.functions.allocateClass(info.classId);
+    w.RefType refType = info.struct.fields.last.type.unpacked as w.RefType;
+    w.ArrayType arrayType = refType.heapType as w.ArrayType;
+    w.ValueType elementType = arrayType.elementType.type.unpacked;
+    int length = expressions.length;
+
+    b.i32_const(info.classId);
+    b.i32_const(initialIdentityHash);
+    _makeType(typeArg, node);
+    b.i64_const(length);
+    if (options.lazyConstants) {
+      // Avoid array.init instruction in lazy constants mode
+      b.i32_const(length);
+      translator.array_new_default(b, arrayType);
+      if (length > 0) {
+        w.Local arrayLocal = addLocal(refType.withNullability(false));
+        b.local_set(arrayLocal);
+        for (int i = 0; i < length; i++) {
+          b.local_get(arrayLocal);
+          b.i32_const(i);
+          wrap(expressions[i], elementType);
+          b.array_set(arrayType);
+        }
+        b.local_get(arrayLocal);
+        if (arrayLocal.type.nullable) {
+          b.ref_as_non_null();
+        }
+      }
+    } else {
+      for (Expression expression in expressions) {
+        wrap(expression, elementType);
+      }
+      translator.array_init(b, arrayType, length);
+    }
+    translator.struct_new(b, info);
+
+    return info.nonNullableType;
+  }
+
+  @override
+  w.ValueType visitMapLiteral(MapLiteral node, w.ValueType expectedType) {
+    w.BaseFunction mapFactory =
+        translator.functions.getFunction(translator.mapFactory.reference);
+    w.ValueType factoryReturnType = mapFactory.type.outputs.single;
+    _makeType(node.keyType, node);
+    _makeType(node.valueType, node);
+    b.call(mapFactory);
+    if (node.entries.isEmpty) {
+      return factoryReturnType;
+    }
+    w.BaseFunction mapPut =
+        translator.functions.getFunction(translator.mapPut.reference);
+    w.ValueType putReceiverType = mapPut.type.inputs[0];
+    w.ValueType putKeyType = mapPut.type.inputs[1];
+    w.ValueType putValueType = mapPut.type.inputs[2];
+    w.Local mapLocal = addLocal(putReceiverType);
+    translator.convertType(function, factoryReturnType, mapLocal.type);
+    b.local_set(mapLocal);
+    for (MapLiteralEntry entry in node.entries) {
+      b.local_get(mapLocal);
+      translator.convertType(function, mapLocal.type, putReceiverType);
+      wrap(entry.key, putKeyType);
+      wrap(entry.value, putValueType);
+      b.call(mapPut);
+    }
+    b.local_get(mapLocal);
+    return mapLocal.type;
+  }
+
+  @override
+  w.ValueType visitTypeLiteral(TypeLiteral node, w.ValueType expectedType) {
+    return _makeType(node.type, node);
+  }
+
+  w.ValueType _makeType(DartType type, TreeNode node) {
+    w.ValueType typeType =
+        translator.classInfo[translator.typeClass]!.nullableType;
+    if (_isTypeConstant(type)) {
+      return wrap(ConstantExpression(TypeLiteralConstant(type)), typeType);
+    }
+    if (type is TypeParameterType) {
+      if (type.parameter.parent is FunctionNode) {
+        // Type argument to function
+        w.Local? local = typeLocals[type.parameter];
+        if (local != null) {
+          b.local_get(local);
+          return local.type;
+        } else {
+          _unimplemented(
+              node, "Type parameter access inside lambda", [typeType]);
+          return typeType;
+        }
+      }
+      // Type argument of class
+      Class cls = type.parameter.parent as Class;
+      ClassInfo info = translator.classInfo[cls]!;
+      int fieldIndex = translator.typeParameterIndex[type.parameter]!;
+      w.ValueType thisType = _visitThis(info.nullableType);
+      translator.convertType(function, thisType, info.nullableType);
+      b.struct_get(info.struct, fieldIndex);
+      return typeType;
+    }
+    ClassInfo info = translator.classInfo[translator.typeClass]!;
+    translator.functions.allocateClass(info.classId);
+    if (type is FutureOrType) {
+      // TODO(askesc): Have an actual representation of FutureOr types
+      b.ref_null(info.nullableType.heapType);
+      return info.nullableType;
+    }
+    if (type is! InterfaceType) {
+      _unimplemented(node, type, [info.nullableType]);
+      return info.nullableType;
+    }
+    ClassInfo typeInfo = translator.classInfo[type.classNode]!;
+    w.ValueType typeListExpectedType = info.struct.fields[3].type.unpacked;
+    b.i32_const(info.classId);
+    b.i32_const(initialIdentityHash);
+    b.i64_const(typeInfo.classId);
+    if (type.typeArguments.isEmpty) {
+      b.global_get(translator.constants.emptyTypeList);
+      translator.convertType(function,
+          translator.constants.emptyTypeList.type.type, typeListExpectedType);
+    } else if (type.typeArguments.every(_isTypeConstant)) {
+      ListConstant typeArgs = ListConstant(
+          InterfaceType(translator.typeClass, Nullability.nonNullable),
+          type.typeArguments.map((t) => TypeLiteralConstant(t)).toList());
+      translator.constants
+          .instantiateConstant(function, b, typeArgs, typeListExpectedType);
+    } else {
+      w.ValueType listType = _makeList(
+          type.typeArguments.map((t) => TypeLiteral(t)).toList(),
+          translator.fixedLengthListClass,
+          InterfaceType(translator.typeClass, Nullability.nonNullable),
+          node);
+      translator.convertType(function, listType, typeListExpectedType);
+    }
+    translator.struct_new(b, info);
+    return info.nullableType;
+  }
+
+  bool _isTypeConstant(DartType type) {
+    return type is DynamicType ||
+        type is VoidType ||
+        type is NeverType ||
+        type is NullType ||
+        type is FunctionType ||
+        type is InterfaceType && type.typeArguments.every(_isTypeConstant);
+  }
+
+  @override
+  w.ValueType visitIsExpression(IsExpression node, w.ValueType expectedType) {
+    wrap(node.operand, translator.topInfo.nullableType);
+    emitTypeTest(node.type, dartTypeOf(node.operand), node);
+    return w.NumType.i32;
+  }
+
+  /// Test value against a Dart type. Expects the value on the stack as a
+  /// (ref null #Top) and leaves the result on the stack as an i32.
+  void emitTypeTest(DartType type, DartType operandType, TreeNode node) {
+    if (type is! InterfaceType) {
+      // TODO(askesc): Implement type test for remaining types
+      print("Not implemented: Type test with non-interface type $type"
+          " at ${node.location}");
+      b.drop();
+      b.i32_const(1);
+      return;
+    }
+    bool isNullable = operandType.isPotentiallyNullable;
+    w.Label? resultLabel;
+    if (isNullable) {
+      // Store operand in a temporary variable, since Binaryen does not support
+      // block inputs.
+      w.Local operand = addLocal(translator.topInfo.nullableType);
+      b.local_set(operand);
+      resultLabel = b.block(const [], const [w.NumType.i32]);
+      w.Label nullLabel = b.block(const [], const []);
+      b.local_get(operand);
+      b.br_on_null(nullLabel);
+    }
+    if (type.typeArguments.any((t) => t is! DynamicType)) {
+      // If the tested-against type as an instance of the static operand type
+      // has the same type arguments as the static operand type, it is not
+      // necessary to test the type arguments.
+      Class cls = translator.classForType(operandType);
+      InterfaceType? base = translator.hierarchy
+          .getTypeAsInstanceOf(type, cls, member.enclosingLibrary)
+          ?.withDeclaredNullability(operandType.declaredNullability);
+      if (base != operandType) {
+        print("Not implemented: Type test with type arguments"
+            " at ${node.location}");
+      }
+    }
+    List<Class> concrete = translator.subtypes
+        .getSubtypesOf(type.classNode)
+        .where((c) => !c.isAbstract)
+        .toList();
+    if (concrete.isEmpty) {
+      b.drop();
+      b.i32_const(0);
+    } else if (concrete.length == 1) {
+      ClassInfo info = translator.classInfo[concrete.single]!;
+      b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+      b.i32_const(info.classId);
+      b.i32_eq();
+    } else {
+      w.Local idLocal = addLocal(w.NumType.i32);
+      b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+      b.local_set(idLocal);
+      w.Label done = b.block(const [], const [w.NumType.i32]);
+      b.i32_const(1);
+      for (Class cls in concrete) {
+        ClassInfo info = translator.classInfo[cls]!;
+        b.i32_const(info.classId);
+        b.local_get(idLocal);
+        b.i32_eq();
+        b.br_if(done);
+      }
+      b.drop();
+      b.i32_const(0);
+      b.end(); // done
+    }
+    if (isNullable) {
+      b.br(resultLabel!);
+      b.end(); // nullLabel
+      b.i32_const(type.declaredNullability == Nullability.nullable ? 1 : 0);
+      b.end(); // resultLabel
+    }
+  }
+
+  @override
+  w.ValueType visitAsExpression(AsExpression node, w.ValueType expectedType) {
+    // TODO(joshualitt): Emit type test and throw exception on failure
+    return wrap(node.operand, expectedType);
+  }
+}
diff --git a/pkg/dart2wasm/lib/compile.dart b/pkg/dart2wasm/lib/compile.dart
new file mode 100644
index 0000000..c69fdab
--- /dev/null
+++ b/pkg/dart2wasm/lib/compile.dart
@@ -0,0 +1,69 @@
+// 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:front_end/src/api_unstable/vm.dart'
+    show
+        CompilerOptions,
+        CompilerResult,
+        DiagnosticMessage,
+        kernelForProgram,
+        Severity;
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/type_environment.dart';
+
+import 'package:vm/transformations/type_flow/transformer.dart' as globalTypeFlow
+    show transformComponent;
+
+import 'package:dart2wasm/target.dart';
+import 'package:dart2wasm/translator.dart';
+
+/// Compile a Dart file into a Wasm module.
+///
+/// Returns `null` if an error occurred during compilation. The
+/// [handleDiagnosticMessage] callback will have received an error message
+/// describing the error.
+Future<Uint8List?> compileToModule(
+    Uri mainUri,
+    Uri sdkRoot,
+    TranslatorOptions options,
+    void Function(DiagnosticMessage) handleDiagnosticMessage) async {
+  var succeeded = true;
+  void diagnosticMessageHandler(DiagnosticMessage message) {
+    if (message.severity == Severity.error) {
+      succeeded = false;
+    }
+    handleDiagnosticMessage(message);
+  }
+
+  Target target = WasmTarget();
+  CompilerOptions compilerOptions = CompilerOptions()
+    ..target = target
+    ..compileSdk = true
+    ..sdkRoot = sdkRoot
+    ..environmentDefines = {}
+    ..verbose = false
+    ..onDiagnostic = diagnosticMessageHandler;
+
+  CompilerResult? compilerResult =
+      await kernelForProgram(mainUri, compilerOptions);
+  if (compilerResult == null || !succeeded) {
+    return null;
+  }
+  Component component = compilerResult.component!;
+  CoreTypes coreTypes = compilerResult.coreTypes!;
+
+  globalTypeFlow.transformComponent(target, coreTypes, component,
+      treeShakeSignatures: true,
+      treeShakeWriteOnlyFields: true,
+      useRapidTypeAnalysis: false);
+
+  var translator = Translator(component, coreTypes,
+      TypeEnvironment(coreTypes, compilerResult.classHierarchy!), options);
+  return translator.translate();
+}
diff --git a/pkg/dart2wasm/lib/constants.dart b/pkg/dart2wasm/lib/constants.dart
new file mode 100644
index 0000000..789f070
--- /dev/null
+++ b/pkg/dart2wasm/lib/constants.dart
@@ -0,0 +1,637 @@
+// 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:dart2wasm/class_info.dart';
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/type_algebra.dart' show substitute;
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+class ConstantInfo {
+  final Constant constant;
+  final w.DefinedGlobal global;
+  final w.DefinedFunction? function;
+
+  ConstantInfo(this.constant, this.global, this.function);
+}
+
+typedef ConstantCodeGenerator = void Function(
+    w.DefinedFunction?, w.Instructions);
+
+/// Handles the creation of Dart constants. Can operate in two modes - eager and
+/// lazy - controlled by [TranslatorOptions.lazyConstants].
+///
+/// Each (non-trivial) constant is assigned to a Wasm global. Multiple
+/// occurrences of the same constant use the same global.
+///
+/// In eager mode, the constant is contained within the global initializer,
+/// meaning all constants are initialized eagerly during module initialization.
+/// In lazy mode, the global starts out uninitialized, and every use of the
+/// constant checks the global to see if it has been initialized and calls an
+/// initialization function otherwise.
+class Constants {
+  final Translator translator;
+  final Map<Constant, ConstantInfo> constantInfo = {};
+  final StringBuffer oneByteStrings = StringBuffer();
+  final StringBuffer twoByteStrings = StringBuffer();
+  late final w.DefinedFunction oneByteStringFunction;
+  late final w.DefinedFunction twoByteStringFunction;
+  late final w.DataSegment oneByteStringSegment;
+  late final w.DataSegment twoByteStringSegment;
+  late final w.DefinedGlobal emptyString;
+  late final w.DefinedGlobal emptyTypeList;
+  late final ClassInfo typeInfo = translator.classInfo[translator.typeClass]!;
+
+  bool currentlyCreating = false;
+
+  Constants(this.translator) {
+    if (lazyConstants) {
+      oneByteStringFunction = makeStringFunction(translator.oneByteStringClass);
+      twoByteStringFunction = makeStringFunction(translator.twoByteStringClass);
+    } else if (stringDataSegments) {
+      oneByteStringSegment = m.addDataSegment();
+      twoByteStringSegment = m.addDataSegment();
+    }
+    initEmptyString();
+    initEmptyTypeList();
+  }
+
+  w.Module get m => translator.m;
+  bool get lazyConstants => translator.options.lazyConstants;
+  bool get stringDataSegments => translator.options.stringDataSegments;
+
+  void initEmptyString() {
+    ClassInfo info = translator.classInfo[translator.oneByteStringClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.ArrayType arrayType =
+        (info.struct.fields.last.type as w.RefType).heapType as w.ArrayType;
+
+    if (lazyConstants) {
+      w.RefType emptyStringType = info.nullableType;
+      emptyString = m.addGlobal(w.GlobalType(emptyStringType));
+      emptyString.initializer.ref_null(emptyStringType.heapType);
+      emptyString.initializer.end();
+
+      w.Instructions b = translator.initFunction.body;
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.i32_const(0);
+      translator.array_new_default(b, arrayType);
+      translator.struct_new(b, info);
+      b.global_set(emptyString);
+    } else {
+      w.RefType emptyStringType = info.nonNullableType;
+      emptyString = m.addGlobal(w.GlobalType(emptyStringType, mutable: false));
+      w.Instructions ib = emptyString.initializer;
+      ib.i32_const(info.classId);
+      ib.i32_const(initialIdentityHash);
+      translator.array_init(ib, arrayType, 0);
+      translator.struct_new(ib, info);
+      ib.end();
+    }
+
+    Constant emptyStringConstant = StringConstant("");
+    constantInfo[emptyStringConstant] =
+        ConstantInfo(emptyStringConstant, emptyString, null);
+  }
+
+  void initEmptyTypeList() {
+    ClassInfo info = translator.classInfo[translator.immutableListClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.RefType refType = info.struct.fields.last.type.unpacked as w.RefType;
+    w.ArrayType arrayType = refType.heapType as w.ArrayType;
+
+    // Create the empty type list with its type parameter uninitialized for now.
+    if (lazyConstants) {
+      w.RefType emptyListType = info.nullableType;
+      emptyTypeList = m.addGlobal(w.GlobalType(emptyListType));
+      emptyTypeList.initializer.ref_null(emptyListType.heapType);
+      emptyTypeList.initializer.end();
+
+      w.Instructions b = translator.initFunction.body;
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.ref_null(typeInfo.struct); // Initialized later
+      b.i64_const(0);
+      b.i32_const(0);
+      translator.array_new_default(b, arrayType);
+      translator.struct_new(b, info);
+      b.global_set(emptyTypeList);
+    } else {
+      w.RefType emptyListType = info.nonNullableType;
+      emptyTypeList = m.addGlobal(w.GlobalType(emptyListType, mutable: false));
+      w.Instructions ib = emptyTypeList.initializer;
+      ib.i32_const(info.classId);
+      ib.i32_const(initialIdentityHash);
+      ib.ref_null(typeInfo.struct); // Initialized later
+      ib.i64_const(0);
+      translator.array_init(ib, arrayType, 0);
+      translator.struct_new(ib, info);
+      ib.end();
+    }
+
+    Constant emptyTypeListConstant = ListConstant(
+        InterfaceType(translator.typeClass, Nullability.nonNullable), const []);
+    constantInfo[emptyTypeListConstant] =
+        ConstantInfo(emptyTypeListConstant, emptyTypeList, null);
+
+    // Initialize the type parameter of the empty type list to the type object
+    // for _Type, which itself refers to the empty type list.
+    w.Instructions b = translator.initFunction.body;
+    b.global_get(emptyTypeList);
+    instantiateConstant(
+        translator.initFunction,
+        b,
+        TypeLiteralConstant(
+            InterfaceType(translator.typeClass, Nullability.nonNullable)),
+        typeInfo.nullableType);
+    b.struct_set(info.struct,
+        translator.typeParameterIndex[info.cls!.typeParameters.single]!);
+  }
+
+  void finalize() {
+    if (lazyConstants) {
+      finalizeStrings();
+    }
+  }
+
+  void finalizeStrings() {
+    Uint8List oneByteStringsAsBytes =
+        Uint8List.fromList(oneByteStrings.toString().codeUnits);
+    assert(Endian.host == Endian.little);
+    Uint8List twoByteStringsAsBytes =
+        Uint16List.fromList(twoByteStrings.toString().codeUnits)
+            .buffer
+            .asUint8List();
+    Uint8List stringsAsBytes = (BytesBuilder()
+          ..add(twoByteStringsAsBytes)
+          ..add(oneByteStringsAsBytes))
+        .toBytes();
+
+    w.Memory stringMemory =
+        m.addMemory(stringsAsBytes.length, stringsAsBytes.length);
+    m.addDataSegment(stringsAsBytes, stringMemory, 0);
+    makeStringFunctionBody(translator.oneByteStringClass, oneByteStringFunction,
+        (b) {
+      b.i32_load8_u(stringMemory, twoByteStringsAsBytes.length);
+    });
+    makeStringFunctionBody(translator.twoByteStringClass, twoByteStringFunction,
+        (b) {
+      b.i32_const(1);
+      b.i32_shl();
+      b.i32_load16_u(stringMemory, 0);
+    });
+  }
+
+  /// Create one of the two Wasm functions (one for each string type) called
+  /// from every lazily initialized string constant (of that type) to create and
+  /// initialize the string.
+  ///
+  /// The function signature is (i32 offset, i32 length) -> (ref stringClass)
+  /// where offset and length are measured in characters and indicate the place
+  /// in the corresponding string data segment from which to copy this string.
+  w.DefinedFunction makeStringFunction(Class cls) {
+    ClassInfo info = translator.classInfo[cls]!;
+    w.FunctionType ftype = translator.functionType(
+        const [w.NumType.i32, w.NumType.i32], [info.nonNullableType]);
+    return m.addFunction(ftype, "makeString (${cls.name})");
+  }
+
+  void makeStringFunctionBody(Class cls, w.DefinedFunction function,
+      void Function(w.Instructions) emitLoad) {
+    ClassInfo info = translator.classInfo[cls]!;
+    w.ArrayType arrayType =
+        (info.struct.fields.last.type as w.RefType).heapType as w.ArrayType;
+
+    w.Local offset = function.locals[0];
+    w.Local length = function.locals[1];
+    w.Local array = function.addLocal(
+        translator.typeForLocal(w.RefType.def(arrayType, nullable: false)));
+    w.Local index = function.addLocal(w.NumType.i32);
+
+    w.Instructions b = function.body;
+    b.local_get(length);
+    translator.array_new_default(b, arrayType);
+    b.local_set(array);
+
+    b.i32_const(0);
+    b.local_set(index);
+    w.Label loop = b.loop();
+    b.local_get(array);
+    b.local_get(index);
+    b.local_get(offset);
+    b.local_get(index);
+    b.i32_add();
+    emitLoad(b);
+    b.array_set(arrayType);
+    b.local_get(index);
+    b.i32_const(1);
+    b.i32_add();
+    b.local_tee(index);
+    b.local_get(length);
+    b.i32_lt_u();
+    b.br_if(loop);
+    b.end();
+
+    b.i32_const(info.classId);
+    b.i32_const(initialIdentityHash);
+    b.local_get(array);
+    translator.struct_new(b, info);
+    b.end();
+  }
+
+  /// Ensure that the constant has a Wasm global assigned.
+  ///
+  /// In eager mode, sub-constants must have Wasm globals assigned before the
+  /// global for the composite constant is assigned, since global initializers
+  /// can only refer to earlier globals.
+  void ensureConstant(Constant constant) {
+    ConstantCreator(this).ensureConstant(constant);
+  }
+
+  /// Emit code to push a constant onto the stack.
+  void instantiateConstant(w.DefinedFunction? function, w.Instructions b,
+      Constant constant, w.ValueType expectedType) {
+    if (expectedType == translator.voidMarker) return;
+    ConstantInstantiator(this, function, b, expectedType).instantiate(constant);
+  }
+}
+
+class ConstantInstantiator extends ConstantVisitor<w.ValueType> {
+  final Constants constants;
+  final w.DefinedFunction? function;
+  final w.Instructions b;
+  final w.ValueType expectedType;
+
+  ConstantInstantiator(
+      this.constants, this.function, this.b, this.expectedType);
+
+  Translator get translator => constants.translator;
+  w.Module get m => translator.m;
+
+  void instantiate(Constant constant) {
+    w.ValueType resultType = constant.accept(this);
+    assert(!translator.needsConversion(resultType, expectedType),
+        "For $constant: expected $expectedType, got $resultType");
+  }
+
+  @override
+  w.ValueType defaultConstant(Constant constant) {
+    ConstantInfo info = ConstantCreator(constants).ensureConstant(constant)!;
+    w.ValueType globalType = info.global.type.type;
+    if (globalType.nullable) {
+      if (info.function != null) {
+        // Lazily initialized constant.
+        w.Label done = b.block(const [], [globalType.withNullability(false)]);
+        b.global_get(info.global);
+        b.br_on_non_null(done);
+        b.call(info.function!);
+        b.end();
+      } else {
+        // Constant initialized in the module init function.
+        b.global_get(info.global);
+        b.ref_as_non_null();
+      }
+      return globalType.withNullability(false);
+    } else {
+      // Constant initialized eagerly in a global initializer.
+      b.global_get(info.global);
+      return globalType;
+    }
+  }
+
+  @override
+  w.ValueType visitNullConstant(NullConstant node) {
+    w.ValueType? expectedType = this.expectedType;
+    if (expectedType != translator.voidMarker) {
+      if (expectedType.nullable) {
+        w.HeapType heapType =
+            expectedType is w.RefType ? expectedType.heapType : w.HeapType.data;
+        b.ref_null(heapType);
+      } else {
+        // This only happens in invalid but unreachable code produced by the
+        // TFA dead-code elimination.
+        b.comment("Non-nullable null constant");
+        b.block(const [], [expectedType]);
+        b.unreachable();
+        b.end();
+      }
+    }
+    return expectedType;
+  }
+
+  w.ValueType _maybeBox(w.ValueType wasmType, void Function() pushValue) {
+    if (expectedType is w.RefType) {
+      ClassInfo info = translator.classInfo[translator.boxedClasses[wasmType]]!;
+      b.i32_const(info.classId);
+      pushValue();
+      translator.struct_new(b, info);
+      return info.nonNullableType;
+    } else {
+      pushValue();
+      return wasmType;
+    }
+  }
+
+  @override
+  w.ValueType visitBoolConstant(BoolConstant constant) {
+    return _maybeBox(w.NumType.i32, () {
+      b.i32_const(constant.value ? 1 : 0);
+    });
+  }
+
+  @override
+  w.ValueType visitIntConstant(IntConstant constant) {
+    return _maybeBox(w.NumType.i64, () {
+      b.i64_const(constant.value);
+    });
+  }
+
+  @override
+  w.ValueType visitDoubleConstant(DoubleConstant constant) {
+    return _maybeBox(w.NumType.f64, () {
+      b.f64_const(constant.value);
+    });
+  }
+}
+
+class ConstantCreator extends ConstantVisitor<ConstantInfo?> {
+  final Constants constants;
+
+  ConstantCreator(this.constants);
+
+  Translator get translator => constants.translator;
+  w.Module get m => constants.m;
+  bool get lazyConstants => constants.lazyConstants;
+
+  ConstantInfo? ensureConstant(Constant constant) {
+    ConstantInfo? info = constants.constantInfo[constant];
+    if (info == null) {
+      info = constant.accept(this);
+      if (info != null) {
+        constants.constantInfo[constant] = info;
+      }
+    }
+    return info;
+  }
+
+  ConstantInfo createConstant(
+      Constant constant, w.RefType type, ConstantCodeGenerator generator) {
+    assert(!type.nullable);
+    if (lazyConstants) {
+      // Create uninitialized global and function to initialize it.
+      w.DefinedGlobal global =
+          m.addGlobal(w.GlobalType(type.withNullability(true)));
+      global.initializer.ref_null(type.heapType);
+      global.initializer.end();
+      w.FunctionType ftype = translator.functionType(const [], [type]);
+      w.DefinedFunction function = m.addFunction(ftype, "$constant");
+      generator(function, function.body);
+      w.Local temp = function.addLocal(translator.typeForLocal(type));
+      w.Instructions b2 = function.body;
+      b2.local_tee(temp);
+      b2.global_set(global);
+      b2.local_get(temp);
+      translator.convertType(function, temp.type, type);
+      b2.end();
+
+      return ConstantInfo(constant, global, function);
+    } else {
+      // Create global with the constant in its initializer.
+      assert(!constants.currentlyCreating);
+      constants.currentlyCreating = true;
+      w.DefinedGlobal global = m.addGlobal(w.GlobalType(type, mutable: false));
+      generator(null, global.initializer);
+      global.initializer.end();
+      constants.currentlyCreating = false;
+
+      return ConstantInfo(constant, global, null);
+    }
+  }
+
+  @override
+  ConstantInfo? defaultConstant(Constant constant) => null;
+
+  @override
+  ConstantInfo? visitStringConstant(StringConstant constant) {
+    bool isOneByte = constant.value.codeUnits.every((c) => c <= 255);
+    ClassInfo info = translator.classInfo[isOneByte
+        ? translator.oneByteStringClass
+        : translator.twoByteStringClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.RefType type = info.nonNullableType;
+    return createConstant(constant, type, (function, b) {
+      if (lazyConstants) {
+        // Copy string contents from linear memory on initialization. The memory
+        // is initialized by an active data segment for each string type.
+        StringBuffer buffer =
+            isOneByte ? constants.oneByteStrings : constants.twoByteStrings;
+        int offset = buffer.length;
+        int length = constant.value.length;
+        buffer.write(constant.value);
+
+        b.i32_const(offset);
+        b.i32_const(length);
+        b.call(isOneByte
+            ? constants.oneByteStringFunction
+            : constants.twoByteStringFunction);
+      } else {
+        w.ArrayType arrayType =
+            (info.struct.fields.last.type as w.RefType).heapType as w.ArrayType;
+
+        b.i32_const(info.classId);
+        b.i32_const(initialIdentityHash);
+        if (constants.stringDataSegments) {
+          // Initialize string contents from passive data segment.
+          w.DataSegment segment;
+          Uint8List bytes;
+          if (isOneByte) {
+            segment = constants.oneByteStringSegment;
+            bytes = Uint8List.fromList(constant.value.codeUnits);
+          } else {
+            assert(Endian.host == Endian.little);
+            segment = constants.twoByteStringSegment;
+            bytes = Uint16List.fromList(constant.value.codeUnits)
+                .buffer
+                .asUint8List();
+          }
+          int offset = segment.length;
+          segment.append(bytes);
+          b.i32_const(offset);
+          b.i32_const(constant.value.length);
+          translator.array_init_from_data(b, arrayType, segment);
+        } else {
+          // Initialize string contents from i32 constants on the stack.
+          for (int charCode in constant.value.codeUnits) {
+            b.i32_const(charCode);
+          }
+          translator.array_init(b, arrayType, constant.value.length);
+        }
+        translator.struct_new(b, info);
+      }
+    });
+  }
+
+  @override
+  ConstantInfo? visitInstanceConstant(InstanceConstant constant) {
+    Class cls = constant.classNode;
+    ClassInfo info = translator.classInfo[cls]!;
+    translator.functions.allocateClass(info.classId);
+    w.RefType type = info.nonNullableType;
+
+    // Collect sub-constants for field values.
+    const int baseFieldCount = 2;
+    int fieldCount = info.struct.fields.length;
+    List<Constant?> subConstants = List.filled(fieldCount, null);
+    constant.fieldValues.forEach((reference, subConstant) {
+      int index = translator.fieldIndex[reference.asField]!;
+      assert(subConstants[index] == null);
+      subConstants[index] = subConstant;
+      ensureConstant(subConstant);
+    });
+
+    // Collect sub-constants for type arguments.
+    Map<TypeParameter, DartType> substitution = {};
+    List<DartType> args = constant.typeArguments;
+    while (true) {
+      for (int i = 0; i < cls.typeParameters.length; i++) {
+        TypeParameter parameter = cls.typeParameters[i];
+        DartType arg = substitute(args[i], substitution);
+        substitution[parameter] = arg;
+        int index = translator.typeParameterIndex[parameter]!;
+        Constant typeArgConstant = TypeLiteralConstant(arg);
+        subConstants[index] = typeArgConstant;
+        ensureConstant(typeArgConstant);
+      }
+      Supertype? supertype = cls.supertype;
+      if (supertype == null) break;
+      cls = supertype.classNode;
+      args = supertype.typeArguments;
+    }
+
+    return createConstant(constant, type, (function, b) {
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      for (int i = baseFieldCount; i < fieldCount; i++) {
+        Constant subConstant = subConstants[i]!;
+        constants.instantiateConstant(
+            function, b, subConstant, info.struct.fields[i].type.unpacked);
+      }
+      translator.struct_new(b, info);
+    });
+  }
+
+  @override
+  ConstantInfo? visitListConstant(ListConstant constant) {
+    Constant typeArgConstant = TypeLiteralConstant(constant.typeArgument);
+    ensureConstant(typeArgConstant);
+    for (Constant subConstant in constant.entries) {
+      ensureConstant(subConstant);
+    }
+
+    ClassInfo info = translator.classInfo[translator.immutableListClass]!;
+    translator.functions.allocateClass(info.classId);
+    w.RefType type = info.nonNullableType;
+    return createConstant(constant, type, (function, b) {
+      w.RefType refType = info.struct.fields.last.type.unpacked as w.RefType;
+      w.ArrayType arrayType = refType.heapType as w.ArrayType;
+      w.ValueType elementType = arrayType.elementType.type.unpacked;
+      int length = constant.entries.length;
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      constants.instantiateConstant(
+          function, b, typeArgConstant, constants.typeInfo.nullableType);
+      b.i64_const(length);
+      if (lazyConstants) {
+        // Allocate array and set each entry to the corresponding sub-constant.
+        w.Local arrayLocal = function!.addLocal(
+            refType.withNullability(!translator.options.localNullability));
+        b.i32_const(length);
+        translator.array_new_default(b, arrayType);
+        b.local_set(arrayLocal);
+        for (int i = 0; i < length; i++) {
+          b.local_get(arrayLocal);
+          b.i32_const(i);
+          constants.instantiateConstant(
+              function, b, constant.entries[i], elementType);
+          b.array_set(arrayType);
+        }
+        b.local_get(arrayLocal);
+        if (arrayLocal.type.nullable) {
+          b.ref_as_non_null();
+        }
+      } else {
+        // Push all sub-constants on the stack and initialize array from them.
+        for (int i = 0; i < length; i++) {
+          constants.instantiateConstant(
+              function, b, constant.entries[i], elementType);
+        }
+        translator.array_init(b, arrayType, length);
+      }
+      translator.struct_new(b, info);
+    });
+  }
+
+  @override
+  ConstantInfo? visitStaticTearOffConstant(StaticTearOffConstant constant) {
+    w.DefinedFunction closureFunction =
+        translator.getTearOffFunction(constant.targetReference.asProcedure);
+    int parameterCount = closureFunction.type.inputs.length - 1;
+    w.StructType struct = translator.closureStructType(parameterCount);
+    w.RefType type = w.RefType.def(struct, nullable: false);
+    return createConstant(constant, type, (function, b) {
+      ClassInfo info = translator.classInfo[translator.functionClass]!;
+      translator.functions.allocateClass(info.classId);
+
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.global_get(translator.globals.dummyGlobal); // Dummy context
+      if (lazyConstants) {
+        w.DefinedGlobal global = translator.makeFunctionRef(closureFunction);
+        b.global_get(global);
+      } else {
+        b.ref_func(closureFunction);
+      }
+      translator.struct_new(b, parameterCount);
+    });
+  }
+
+  @override
+  ConstantInfo? visitTypeLiteralConstant(TypeLiteralConstant constant) {
+    DartType cType = constant.type;
+    assert(cType is! TypeParameterType);
+    DartType type = cType is DynamicType ||
+            cType is VoidType ||
+            cType is NeverType ||
+            cType is NullType
+        ? translator.coreTypes.objectRawType(Nullability.nullable)
+        : cType is FunctionType
+            ? InterfaceType(translator.functionClass, cType.declaredNullability)
+            : cType;
+    if (type is! InterfaceType) throw "Not implemented: $constant";
+
+    ListConstant typeArgs = ListConstant(
+        InterfaceType(translator.typeClass, Nullability.nonNullable),
+        type.typeArguments.map((t) => TypeLiteralConstant(t)).toList());
+    ensureConstant(typeArgs);
+
+    ClassInfo info = constants.typeInfo;
+    translator.functions.allocateClass(info.classId);
+    return createConstant(constant, info.nonNullableType, (function, b) {
+      ClassInfo typeInfo = translator.classInfo[type.classNode]!;
+      w.ValueType typeListExpectedType = info.struct.fields[3].type.unpacked;
+
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.i64_const(typeInfo.classId);
+      constants.instantiateConstant(
+          function, b, typeArgs, typeListExpectedType);
+      translator.struct_new(b, info);
+    });
+  }
+}
diff --git a/pkg/dart2wasm/lib/constants_backend.dart b/pkg/dart2wasm/lib/constants_backend.dart
new file mode 100644
index 0000000..6871599
--- /dev/null
+++ b/pkg/dart2wasm/lib/constants_backend.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.
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/target/targets.dart';
+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);
+
+  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]);
+    }
+  }
+
+  @override
+  Constant lowerSetConstant(SetConstant constant) {
+    final DartType elementType = constant.typeArgument;
+    final List<Constant> entries = constant.entries;
+    final List<ConstantMapEntry> mapEntries =
+        new List<ConstantMapEntry>.generate(entries.length, (int index) {
+      return new ConstantMapEntry(entries[index], new NullConstant());
+    });
+    Constant map = lowerMapConstant(
+        new MapConstant(elementType, const NullType(), mapEntries));
+    return new InstanceConstant(unmodifiableSetClass.reference, [elementType],
+        <Reference, Constant>{unmodifiableSetMap.getterReference: map});
+  }
+
+  @override
+  bool isLoweredSetConstant(Constant constant) {
+    if (constant is InstanceConstant &&
+        constant.classNode == unmodifiableSetClass) {
+      InstanceConstant instance = constant;
+      return isLoweredMapConstant(
+          instance.fieldValues[unmodifiableSetMap.getterReference]!);
+    }
+    return false;
+  }
+
+  @override
+  void forEachLoweredSetConstantElement(
+      Constant constant, void Function(Constant element) f) {
+    assert(isLoweredSetConstant(constant));
+    final InstanceConstant instance = constant as InstanceConstant;
+    final Constant mapConstant =
+        instance.fieldValues[unmodifiableSetMap.getterReference]!;
+    forEachLoweredMapConstantEntry(mapConstant, (Constant key, Constant value) {
+      f(key);
+    });
+  }
+}
diff --git a/pkg/dart2wasm/lib/dispatch_table.dart b/pkg/dart2wasm/lib/dispatch_table.dart
new file mode 100644
index 0000000..3c6b024
--- /dev/null
+++ b/pkg/dart2wasm/lib/dispatch_table.dart
@@ -0,0 +1,308 @@
+// 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:math';
+
+import 'package:dart2wasm/class_info.dart';
+import 'package:dart2wasm/param_info.dart';
+import 'package:dart2wasm/reference_extensions.dart';
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+
+import 'package:vm/metadata/procedure_attributes.dart';
+import 'package:vm/metadata/table_selector.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// Information for a dispatch table selector.
+class SelectorInfo {
+  final Translator translator;
+
+  final int id;
+  final int callCount;
+  final bool tornOff;
+  final ParameterInfo paramInfo;
+  int returnCount;
+
+  final Map<int, Reference> targets = {};
+  late final w.FunctionType signature = computeSignature();
+
+  late final List<int> classIds;
+  late final int targetCount;
+  bool forced = false;
+  Reference? singularTarget;
+  int? offset;
+
+  String get name => paramInfo.member.name.text;
+
+  bool get alive => callCount > 0 && targetCount > 1 || forced;
+
+  int get sortWeight => classIds.length * 10 + callCount;
+
+  SelectorInfo(this.translator, this.id, this.callCount, this.tornOff,
+      this.paramInfo, this.returnCount);
+
+  /// Compute the signature for the functions implementing members targeted by
+  /// this selector.
+  ///
+  /// When the selector has multiple targets, the type of each parameter/return
+  /// is the upper bound across all targets, such that all targets have the
+  /// same signature, and the actual representation types of the parameters and
+  /// returns are subtypes (resp. supertypes) of the types in the signature.
+  w.FunctionType computeSignature() {
+    var nameIndex = paramInfo.nameIndex;
+    List<Set<ClassInfo>> inputSets =
+        List.generate(1 + paramInfo.paramCount, (_) => {});
+    List<Set<ClassInfo>> outputSets = List.generate(returnCount, (_) => {});
+    List<bool> inputNullable = List.filled(1 + paramInfo.paramCount, false);
+    List<bool> outputNullable = List.filled(returnCount, false);
+    targets.forEach((id, target) {
+      ClassInfo receiver = translator.classes[id];
+      List<DartType> positional;
+      Map<String, DartType> named;
+      List<DartType> returns;
+      Member member = target.asMember;
+      if (member is Field) {
+        if (target.isImplicitGetter) {
+          positional = const [];
+          named = const {};
+          returns = [member.getterType];
+        } else {
+          positional = [member.setterType];
+          named = const {};
+          returns = const [];
+        }
+      } else {
+        FunctionNode function = member.function!;
+        if (target.isTearOffReference) {
+          positional = const [];
+          named = const {};
+          returns = [function.computeFunctionType(Nullability.nonNullable)];
+        } else {
+          positional = [
+            for (VariableDeclaration param in function.positionalParameters)
+              param.type
+          ];
+          named = {
+            for (VariableDeclaration param in function.namedParameters)
+              param.name!: param.type
+          };
+          returns = function.returnType is VoidType
+              ? const []
+              : [function.returnType];
+        }
+      }
+      assert(returns.length <= outputSets.length);
+      inputSets[0].add(receiver);
+      for (int i = 0; i < positional.length; i++) {
+        DartType type = positional[i];
+        inputSets[1 + i]
+            .add(translator.classInfo[translator.classForType(type)]!);
+        inputNullable[1 + i] |= type.isPotentiallyNullable;
+      }
+      for (String name in named.keys) {
+        int i = nameIndex[name]!;
+        DartType type = named[name]!;
+        inputSets[1 + i]
+            .add(translator.classInfo[translator.classForType(type)]!);
+        inputNullable[1 + i] |= type.isPotentiallyNullable;
+      }
+      for (int i = 0; i < returnCount; i++) {
+        if (i < returns.length) {
+          outputSets[i]
+              .add(translator.classInfo[translator.classForType(returns[i])]!);
+          outputNullable[i] |= returns[i].isPotentiallyNullable;
+        } else {
+          outputNullable[i] = true;
+        }
+      }
+    });
+
+    List<w.ValueType> typeParameters = List.filled(paramInfo.typeParamCount,
+        translator.classInfo[translator.typeClass]!.nullableType);
+    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]);
+    if (name == '==') {
+      // == can't be called with null
+      inputs[1] = inputs[1].withNullability(false);
+    }
+    List<w.ValueType> outputs = List.generate(
+        outputSets.length,
+        (i) => translator.typeForInfo(
+            upperBound(outputSets[i]), outputNullable[i]) as w.ValueType);
+    return translator.functionType(
+        [inputs[0], ...typeParameters, ...inputs.sublist(1)], outputs);
+  }
+}
+
+// Build dispatch table for member calls.
+class DispatchTable {
+  final Translator translator;
+  final List<TableSelectorInfo> selectorMetadata;
+  final Map<TreeNode, ProcedureAttributesMetadata> procedureAttributeMetadata;
+
+  final Map<int, SelectorInfo> selectorInfo = {};
+  final Map<String, int> dynamicGets = {};
+  late final List<Reference?> table;
+
+  DispatchTable(this.translator)
+      : selectorMetadata =
+            (translator.component.metadata["vm.table-selector.metadata"]
+                    as TableSelectorMetadataRepository)
+                .mapping[translator.component]!
+                .selectors,
+        procedureAttributeMetadata =
+            (translator.component.metadata["vm.procedure-attributes.metadata"]
+                    as ProcedureAttributesMetadataRepository)
+                .mapping;
+
+  SelectorInfo selectorForTarget(Reference target) {
+    Member member = target.asMember;
+    bool isGetter = target.isGetter || target.isTearOffReference;
+    ProcedureAttributesMetadata metadata = procedureAttributeMetadata[member]!;
+    int selectorId = isGetter
+        ? metadata.getterSelectorId
+        : metadata.methodOrSetterSelectorId;
+    ParameterInfo paramInfo = ParameterInfo.fromMember(target);
+    int returnCount = isGetter ||
+            member is Procedure && member.function.returnType is! VoidType
+        ? 1
+        : 0;
+    bool calledDynamically = isGetter && metadata.getterCalledDynamically;
+    if (calledDynamically) {
+      // Merge all same-named getter selectors that are called dynamically.
+      selectorId = dynamicGets.putIfAbsent(member.name.text, () => selectorId);
+    }
+    var selector = selectorInfo.putIfAbsent(
+        selectorId,
+        () => SelectorInfo(
+            translator,
+            selectorId,
+            selectorMetadata[selectorId].callCount,
+            selectorMetadata[selectorId].tornOff,
+            paramInfo,
+            returnCount)
+          ..forced = calledDynamically);
+    selector.paramInfo.merge(paramInfo);
+    selector.returnCount = max(selector.returnCount, returnCount);
+    return selector;
+  }
+
+  SelectorInfo selectorForDynamicName(String name) {
+    return selectorInfo[dynamicGets[name]!]!;
+  }
+
+  void build() {
+    // Collect class/selector combinations
+    List<List<int>> selectorsInClass = [];
+    for (ClassInfo info in translator.classes) {
+      List<int> selectorIds = [];
+      ClassInfo? superInfo = info.superInfo;
+      if (superInfo != null) {
+        int superId = superInfo.classId;
+        selectorIds = List.of(selectorsInClass[superId]);
+        for (int selectorId in selectorIds) {
+          SelectorInfo selector = selectorInfo[selectorId]!;
+          selector.targets[info.classId] = selector.targets[superId]!;
+        }
+      }
+
+      SelectorInfo addMember(Reference reference) {
+        SelectorInfo selector = selectorForTarget(reference);
+        if (reference.asMember.isAbstract) {
+          selector.targets[info.classId] ??= reference;
+        } else {
+          selector.targets[info.classId] = reference;
+        }
+        selectorIds.add(selector.id);
+        return selector;
+      }
+
+      for (Member member
+          in info.cls?.members ?? translator.coreTypes.objectClass.members) {
+        if (member.isInstanceMember) {
+          if (member is Field) {
+            addMember(member.getterReference);
+            if (member.hasSetter) addMember(member.setterReference!);
+          } else if (member is Procedure) {
+            SelectorInfo method = addMember(member.reference);
+            if (method.tornOff) {
+              addMember(member.tearOffReference);
+            }
+          }
+        }
+      }
+      selectorsInClass.add(selectorIds);
+    }
+
+    // Build lists of class IDs and count targets
+    for (SelectorInfo selector in selectorInfo.values) {
+      selector.classIds = selector.targets.keys
+          .where((id) => !(translator.classes[id].cls?.isAbstract ?? true))
+          .toList()
+        ..sort();
+      Set<Reference> targets =
+          selector.targets.values.where((t) => !t.asMember.isAbstract).toSet();
+      selector.targetCount = targets.length;
+      if (targets.length == 1) selector.singularTarget = targets.single;
+    }
+
+    // Assign selector offsets
+    List<SelectorInfo> selectors = selectorInfo.values
+        .where((s) => s.alive)
+        .toList()
+      ..sort((a, b) => b.sortWeight - a.sortWeight);
+    int firstAvailable = 0;
+    table = [];
+    bool first = true;
+    for (SelectorInfo selector in selectors) {
+      int offset = first ? 0 : firstAvailable - selector.classIds.first;
+      first = false;
+      bool fits;
+      do {
+        fits = true;
+        for (int classId in selector.classIds) {
+          int entry = offset + classId;
+          if (entry >= table.length) {
+            // Fits
+            break;
+          }
+          if (table[entry] != null) {
+            fits = false;
+            break;
+          }
+        }
+        if (!fits) offset++;
+      } while (!fits);
+      selector.offset = offset;
+      for (int classId in selector.classIds) {
+        int entry = offset + classId;
+        while (table.length <= entry) table.add(null);
+        assert(table[entry] == null);
+        table[entry] = selector.targets[classId];
+      }
+      while (firstAvailable < table.length && table[firstAvailable] != null) {
+        firstAvailable++;
+      }
+    }
+  }
+
+  void output() {
+    w.Module m = translator.m;
+    w.Table wasmTable = m.addTable(table.length);
+    for (int i = 0; i < table.length; i++) {
+      Reference? target = table[i];
+      if (target != null) {
+        w.BaseFunction? fun = translator.functions.getExistingFunction(target);
+        if (fun != null) {
+          wasmTable.setElement(i, fun);
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/dart2wasm/lib/functions.dart b/pkg/dart2wasm/lib/functions.dart
new file mode 100644
index 0000000..eaee6d1
--- /dev/null
+++ b/pkg/dart2wasm/lib/functions.dart
@@ -0,0 +1,216 @@
+// 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:dart2wasm/dispatch_table.dart';
+import 'package:dart2wasm/reference_extensions.dart';
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// This class is responsible for collecting import and export annotations.
+/// It also creates Wasm functions for Dart members and manages the worklist
+/// used to achieve tree shaking.
+class FunctionCollector extends MemberVisitor1<w.FunctionType, Reference> {
+  final Translator translator;
+
+  // Wasm function for each Dart function
+  final Map<Reference, w.BaseFunction> _functions = {};
+  // Names of exported functions
+  final Map<Reference, String> exports = {};
+  // Functions for which code has not yet been generated
+  final List<Reference> worklist = [];
+  // Class IDs for classes that are allocated somewhere in the program
+  final Set<int> _allocatedClasses = {};
+  // For each class ID, which functions should be added to the worklist if an
+  // allocation of that class is encountered
+  final Map<int, List<Reference>> _pendingAllocation = {};
+
+  FunctionCollector(this.translator);
+
+  w.Module get m => translator.m;
+
+  void collectImportsAndExports() {
+    for (Library library in translator.libraries) {
+      for (Procedure procedure in library.procedures) {
+        _importOrExport(procedure);
+      }
+      for (Class cls in library.classes) {
+        for (Procedure procedure in cls.procedures) {
+          _importOrExport(procedure);
+        }
+      }
+    }
+  }
+
+  void _importOrExport(Procedure procedure) {
+    String? importName = translator.getPragma(procedure, "wasm:import");
+    if (importName != null) {
+      int dot = importName.indexOf('.');
+      if (dot != -1) {
+        assert(!procedure.isInstanceMember);
+        String module = importName.substring(0, dot);
+        String name = importName.substring(dot + 1);
+        w.FunctionType ftype = _makeFunctionType(
+            procedure.reference, procedure.function.returnType, null,
+            isImportOrExport: true);
+        _functions[procedure.reference] =
+            m.importFunction(module, name, ftype, "$importName (import)");
+      }
+    }
+    String? exportName =
+        translator.getPragma(procedure, "wasm:export", procedure.name.text);
+    if (exportName != null) {
+      addExport(procedure.reference, exportName);
+    }
+  }
+
+  void addExport(Reference target, String exportName) {
+    exports[target] = exportName;
+  }
+
+  void initialize() {
+    // Add all exports to the worklist
+    for (Reference target in exports.keys) {
+      worklist.add(target);
+      Procedure node = target.asProcedure;
+      assert(!node.isInstanceMember);
+      assert(!node.isGetter);
+      w.FunctionType ftype = _makeFunctionType(
+          target, node.function.returnType, null,
+          isImportOrExport: true);
+      _functions[target] = m.addFunction(ftype, "$node");
+    }
+
+    // Value classes are always implicitly allocated.
+    allocateClass(translator.classInfo[translator.boxedBoolClass]!.classId);
+    allocateClass(translator.classInfo[translator.boxedIntClass]!.classId);
+    allocateClass(translator.classInfo[translator.boxedDoubleClass]!.classId);
+  }
+
+  w.BaseFunction? getExistingFunction(Reference target) {
+    return _functions[target];
+  }
+
+  w.BaseFunction getFunction(Reference target) {
+    return _functions.putIfAbsent(target, () {
+      worklist.add(target);
+      w.FunctionType ftype = target.isTearOffReference
+          ? translator.dispatchTable.selectorForTarget(target).signature
+          : target.asMember.accept1(this, target);
+      return m.addFunction(ftype, "${target.asMember}");
+    });
+  }
+
+  void activateSelector(SelectorInfo selector) {
+    selector.targets.forEach((classId, target) {
+      if (!target.asMember.isAbstract) {
+        if (_allocatedClasses.contains(classId)) {
+          // Class declaring or inheriting member is allocated somewhere.
+          getFunction(target);
+        } else {
+          // Remember the member in case an allocation is encountered later.
+          _pendingAllocation.putIfAbsent(classId, () => []).add(target);
+        }
+      }
+    });
+  }
+
+  void allocateClass(int classId) {
+    if (_allocatedClasses.add(classId)) {
+      // Schedule all members that were pending allocation of this class.
+      for (Reference target in _pendingAllocation[classId] ?? const []) {
+        getFunction(target);
+      }
+    }
+  }
+
+  @override
+  w.FunctionType defaultMember(Member node, Reference target) {
+    throw "No Wasm function for member: $node";
+  }
+
+  @override
+  w.FunctionType visitField(Field node, Reference target) {
+    if (!node.isInstanceMember) {
+      if (target == node.fieldReference) {
+        // Static field initializer function
+        return _makeFunctionType(target, node.type, null);
+      }
+      String kind = target == node.setterReference ? "setter" : "getter";
+      throw "No implicit $kind function for static field: $node";
+    }
+    return translator.dispatchTable.selectorForTarget(target).signature;
+  }
+
+  @override
+  w.FunctionType visitProcedure(Procedure node, Reference target) {
+    assert(!node.isAbstract);
+    return node.isInstanceMember
+        ? translator.dispatchTable.selectorForTarget(node.reference).signature
+        : _makeFunctionType(target, node.function.returnType, null);
+  }
+
+  @override
+  w.FunctionType visitConstructor(Constructor node, Reference target) {
+    return _makeFunctionType(target, VoidType(),
+        translator.classInfo[node.enclosingClass]!.nonNullableType);
+  }
+
+  w.FunctionType _makeFunctionType(
+      Reference target, DartType returnType, w.ValueType? receiverType,
+      {bool isImportOrExport = false}) {
+    Member member = target.asMember;
+    int typeParamCount = 0;
+    Iterable<DartType> params;
+    if (member is Field) {
+      params = [if (target.isImplicitSetter) member.setterType];
+    } else {
+      FunctionNode function = member.function!;
+      typeParamCount = (member is Constructor
+              ? member.enclosingClass.typeParameters
+              : function.typeParameters)
+          .length;
+      List<String> names = [for (var p in function.namedParameters) p.name!]
+        ..sort();
+      Map<String, DartType> nameTypes = {
+        for (var p in function.namedParameters) p.name!: p.type
+      };
+      params = [
+        for (var p in function.positionalParameters) p.type,
+        for (String name in names) nameTypes[name]!
+      ];
+      function.positionalParameters.map((p) => p.type);
+    }
+
+    List<w.ValueType> typeParameters = List.filled(typeParamCount,
+        translator.classInfo[translator.typeClass]!.nullableType);
+
+    // The JS embedder will not accept Wasm struct types as parameter or return
+    // types for functions called from JS. We need to use eqref instead.
+    w.ValueType adjustExternalType(w.ValueType type) {
+      if (isImportOrExport && type.isSubtypeOf(w.RefType.eq())) {
+        return w.RefType.eq();
+      }
+      return type;
+    }
+
+    List<w.ValueType> inputs = [];
+    if (receiverType != null) {
+      inputs.add(adjustExternalType(receiverType));
+    }
+    inputs.addAll(typeParameters.map(adjustExternalType));
+    inputs.addAll(
+        params.map((t) => adjustExternalType(translator.translateType(t))));
+
+    List<w.ValueType> outputs = returnType is VoidType ||
+            returnType is NeverType ||
+            returnType is NullType
+        ? const []
+        : [adjustExternalType(translator.translateType(returnType))];
+
+    return translator.functionType(inputs, outputs);
+  }
+}
diff --git a/pkg/dart2wasm/lib/globals.dart b/pkg/dart2wasm/lib/globals.dart
new file mode 100644
index 0000000..c72aeb1
--- /dev/null
+++ b/pkg/dart2wasm/lib/globals.dart
@@ -0,0 +1,198 @@
+// 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';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+import 'package:dart2wasm/translator.dart';
+
+/// Handles lazy initialization of static fields.
+class Globals {
+  final Translator translator;
+
+  final Map<Field, w.Global> globals = {};
+  final Map<Field, w.BaseFunction> globalInitializers = {};
+  final Map<Field, w.Global> globalInitializedFlag = {};
+  final Map<w.HeapType, w.DefinedGlobal> dummyValues = {};
+  late final w.DefinedGlobal dummyGlobal;
+
+  Globals(this.translator) {
+    _initDummyValues();
+  }
+
+  void _initDummyValues() {
+    // Create dummy struct for anyref/eqref/dataref/context dummy values
+    w.StructType structType = translator.structType("#Dummy");
+    w.RefType type = w.RefType.def(structType, nullable: false);
+    dummyGlobal = translator.m.addGlobal(w.GlobalType(type, mutable: false));
+    w.Instructions ib = dummyGlobal.initializer;
+    translator.struct_new(ib, structType);
+    ib.end();
+    dummyValues[w.HeapType.any] = dummyGlobal;
+    dummyValues[w.HeapType.eq] = dummyGlobal;
+    dummyValues[w.HeapType.data] = dummyGlobal;
+  }
+
+  w.Global? prepareDummyValue(w.ValueType type) {
+    if (type is w.RefType && !type.nullable) {
+      w.HeapType heapType = type.heapType;
+      w.DefinedGlobal? global = dummyValues[heapType];
+      if (global != null) return global;
+      if (heapType is w.DefType) {
+        if (heapType is w.StructType) {
+          for (w.FieldType field in heapType.fields) {
+            prepareDummyValue(field.type.unpacked);
+          }
+          global = translator.m.addGlobal(w.GlobalType(type, mutable: false));
+          w.Instructions ib = global.initializer;
+          for (w.FieldType field in heapType.fields) {
+            instantiateDummyValue(ib, field.type.unpacked);
+          }
+          translator.struct_new(ib, heapType);
+          ib.end();
+        } else if (heapType is w.ArrayType) {
+          global = translator.m.addGlobal(w.GlobalType(type, mutable: false));
+          w.Instructions ib = global.initializer;
+          translator.array_init(ib, heapType, 0);
+          ib.end();
+        } else if (heapType is w.FunctionType) {
+          w.DefinedFunction function =
+              translator.m.addFunction(heapType, "#dummy function $heapType");
+          w.Instructions b = function.body;
+          b.unreachable();
+          b.end();
+          global = translator.m.addGlobal(w.GlobalType(type, mutable: false));
+          w.Instructions ib = global.initializer;
+          ib.ref_func(function);
+          ib.end();
+        }
+        dummyValues[heapType] = global!;
+      }
+      return global;
+    }
+
+    return null;
+  }
+
+  void instantiateDummyValue(w.Instructions b, w.ValueType type) {
+    w.Global? global = prepareDummyValue(type);
+    switch (type) {
+      case w.NumType.i32:
+        b.i32_const(0);
+        break;
+      case w.NumType.i64:
+        b.i64_const(0);
+        break;
+      case w.NumType.f32:
+        b.f32_const(0);
+        break;
+      case w.NumType.f64:
+        b.f64_const(0);
+        break;
+      default:
+        if (type is w.RefType) {
+          w.HeapType heapType = type.heapType;
+          if (type.nullable) {
+            b.ref_null(heapType);
+          } else {
+            b.global_get(global!);
+          }
+        } else {
+          throw "Unsupported global type ${type} ($type)";
+        }
+        break;
+    }
+  }
+
+  Constant? _getConstantInitializer(Field variable) {
+    Expression? init = variable.initializer;
+    if (init == null || init is NullLiteral) return NullConstant();
+    if (init is IntLiteral) return IntConstant(init.value);
+    if (init is DoubleLiteral) return DoubleConstant(init.value);
+    if (init is BoolLiteral) return BoolConstant(init.value);
+    if (translator.options.lazyConstants) return null;
+    if (init is StringLiteral) return StringConstant(init.value);
+    if (init is ConstantExpression) return init.constant;
+    return null;
+  }
+
+  /// Return (and if needed create) the Wasm global corresponding to a static
+  /// field.
+  w.Global getGlobal(Field variable) {
+    assert(!variable.isLate);
+    return globals.putIfAbsent(variable, () {
+      w.ValueType type = translator.translateType(variable.type);
+      Constant? init = _getConstantInitializer(variable);
+      if (init != null) {
+        // Initialized to a constant
+        translator.constants.ensureConstant(init);
+        w.DefinedGlobal global = translator.m
+            .addGlobal(w.GlobalType(type, mutable: !variable.isFinal));
+        translator.constants
+            .instantiateConstant(null, global.initializer, init, type);
+        global.initializer.end();
+        return global;
+      } else {
+        if (type is w.RefType && !type.nullable) {
+          // Null signals uninitialized
+          type = type.withNullability(true);
+        } else {
+          // Explicit initialization flag
+          w.DefinedGlobal flag =
+              translator.m.addGlobal(w.GlobalType(w.NumType.i32));
+          flag.initializer.i32_const(0);
+          flag.initializer.end();
+          globalInitializedFlag[variable] = flag;
+        }
+
+        w.DefinedGlobal global = translator.m.addGlobal(w.GlobalType(type));
+        instantiateDummyValue(global.initializer, type);
+        global.initializer.end();
+
+        globalInitializers[variable] =
+            translator.functions.getFunction(variable.fieldReference);
+        return global;
+      }
+    });
+  }
+
+  /// Return the Wasm global containing the flag indicating whether this static
+  /// field has been initialized, if such a flag global is needed.
+  ///
+  /// Note that [getGlobal] must have been called for the field beforehand.
+  w.Global? getGlobalInitializedFlag(Field variable) {
+    return globalInitializedFlag[variable];
+  }
+
+  /// Emit code to read a static field.
+  w.ValueType readGlobal(w.Instructions b, Field variable) {
+    w.Global global = getGlobal(variable);
+    w.BaseFunction? initFunction = globalInitializers[variable];
+    if (initFunction == null) {
+      // Statically initialized
+      b.global_get(global);
+      return global.type.type;
+    }
+    w.Global? flag = globalInitializedFlag[variable];
+    if (flag != null) {
+      // Explicit initialization flag
+      assert(global.type.type == initFunction.type.outputs.single);
+      b.global_get(flag);
+      b.if_(const [], [global.type.type]);
+      b.global_get(global);
+      b.else_();
+      b.call(initFunction);
+      b.end();
+    } else {
+      // Null signals uninitialized
+      w.Label block = b.block(const [], [initFunction.type.outputs.single]);
+      b.global_get(global);
+      b.br_on_non_null(block);
+      b.call(initFunction);
+      b.end();
+    }
+    return initFunction.type.outputs.single;
+  }
+}
diff --git a/pkg/dart2wasm/lib/intrinsics.dart b/pkg/dart2wasm/lib/intrinsics.dart
new file mode 100644
index 0000000..e795d85
--- /dev/null
+++ b/pkg/dart2wasm/lib/intrinsics.dart
@@ -0,0 +1,989 @@
+// 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:dart2wasm/class_info.dart';
+import 'package:dart2wasm/code_generator.dart';
+import 'package:dart2wasm/translator.dart';
+
+import 'package:kernel/ast.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// Specialized code generation for external members.
+///
+/// The code is generated either inlined at the call site, or as the body of the
+/// member in [generateMemberIntrinsic].
+class Intrinsifier {
+  final CodeGenerator codeGen;
+  static const w.ValueType boolType = w.NumType.i32;
+  static const w.ValueType intType = w.NumType.i64;
+  static const w.ValueType doubleType = w.NumType.f64;
+
+  static final Map<w.ValueType, Map<w.ValueType, Map<String, CodeGenCallback>>>
+      binaryOperatorMap = {
+    intType: {
+      intType: {
+        '+': (b) => b.i64_add(),
+        '-': (b) => b.i64_sub(),
+        '*': (b) => b.i64_mul(),
+        '~/': (b) => b.i64_div_s(),
+        '&': (b) => b.i64_and(),
+        '|': (b) => b.i64_or(),
+        '^': (b) => b.i64_xor(),
+        '<<': (b) => b.i64_shl(),
+        '>>': (b) => b.i64_shr_s(),
+        '>>>': (b) => b.i64_shr_u(),
+        '<': (b) => b.i64_lt_s(),
+        '<=': (b) => b.i64_le_s(),
+        '>': (b) => b.i64_gt_s(),
+        '>=': (b) => b.i64_ge_s(),
+      }
+    },
+    doubleType: {
+      doubleType: {
+        '+': (b) => b.f64_add(),
+        '-': (b) => b.f64_sub(),
+        '*': (b) => b.f64_mul(),
+        '/': (b) => b.f64_div(),
+        '<': (b) => b.f64_lt(),
+        '<=': (b) => b.f64_le(),
+        '>': (b) => b.f64_gt(),
+        '>=': (b) => b.f64_ge(),
+      }
+    },
+  };
+  static final Map<w.ValueType, Map<String, CodeGenCallback>> unaryOperatorMap =
+      {
+    intType: {
+      'unary-': (b) {
+        b.i64_const(-1);
+        b.i64_mul();
+      },
+      '~': (b) {
+        b.i64_const(-1);
+        b.i64_xor();
+      },
+      'toDouble': (b) {
+        b.f64_convert_i64_s();
+      },
+    },
+    doubleType: {
+      'unary-': (b) {
+        b.f64_neg();
+      },
+      'toInt': (b) {
+        b.i64_trunc_sat_f64_s();
+      },
+      'roundToDouble': (b) {
+        b.f64_nearest();
+      },
+      'floorToDouble': (b) {
+        b.f64_floor();
+      },
+      'ceilToDouble': (b) {
+        b.f64_ceil();
+      },
+      'truncateToDouble': (b) {
+        b.f64_trunc();
+      },
+    },
+  };
+  static final Map<String, w.ValueType> unaryResultMap = {
+    'toDouble': w.NumType.f64,
+    'toInt': w.NumType.i64,
+    'roundToDouble': w.NumType.f64,
+    'floorToDouble': w.NumType.f64,
+    'ceilToDouble': w.NumType.f64,
+    'truncateToDouble': w.NumType.f64,
+  };
+
+  Translator get translator => codeGen.translator;
+  w.Instructions get b => codeGen.b;
+
+  DartType dartTypeOf(Expression exp) => codeGen.dartTypeOf(exp);
+
+  w.ValueType typeOfExp(Expression exp) {
+    return translator.translateType(dartTypeOf(exp));
+  }
+
+  static bool isComparison(String op) =>
+      op == '<' || op == '<=' || op == '>' || op == '>=';
+
+  Intrinsifier(this.codeGen);
+
+  w.ValueType? generateInstanceGetterIntrinsic(InstanceGet node) {
+    DartType receiverType = dartTypeOf(node.receiver);
+    String name = node.name.text;
+
+    // _WasmArray.length
+    if (node.interfaceTarget.enclosingClass == translator.wasmArrayBaseClass) {
+      assert(name == 'length');
+      DartType elementType =
+          (receiverType as InterfaceType).typeArguments.single;
+      w.ArrayType arrayType = translator.arrayTypeForDartType(elementType);
+      Expression array = node.receiver;
+      codeGen.wrap(array, w.RefType.def(arrayType, nullable: true));
+      b.array_len(arrayType);
+      b.i64_extend_i32_u();
+      return w.NumType.i64;
+    }
+
+    // int.bitlength
+    if (node.interfaceTarget.enclosingClass == translator.coreTypes.intClass &&
+        name == 'bitLength') {
+      w.Local temp = codeGen.function.addLocal(w.NumType.i64);
+      b.i64_const(64);
+      codeGen.wrap(node.receiver, w.NumType.i64);
+      b.local_tee(temp);
+      b.local_get(temp);
+      b.i64_const(63);
+      b.i64_shr_s();
+      b.i64_xor();
+      b.i64_clz();
+      b.i64_sub();
+      return w.NumType.i64;
+    }
+
+    return null;
+  }
+
+  w.ValueType? generateInstanceIntrinsic(InstanceInvocation node) {
+    Expression receiver = node.receiver;
+    DartType receiverType = dartTypeOf(receiver);
+    String name = node.name.text;
+    Procedure target = node.interfaceTarget;
+
+    // _TypedListBase._setRange
+    if (target.enclosingClass == translator.typedListBaseClass &&
+        name == "_setRange") {
+      // Always fall back to alternative implementation.
+      b.i32_const(0);
+      return w.NumType.i32;
+    }
+
+    // _TypedList._(get|set)(Int|Uint|Float)(8|16|32|64)
+    if (node.interfaceTarget.enclosingClass == translator.typedListClass) {
+      Match? match = RegExp("^_(get|set)(Int|Uint|Float)(8|16|32|64)\$")
+          .matchAsPrefix(name);
+      if (match != null) {
+        bool setter = match.group(1) == "set";
+        bool signed = match.group(2) == "Int";
+        bool float = match.group(2) == "Float";
+        int bytes = int.parse(match.group(3)!) ~/ 8;
+        bool wide = bytes == 8;
+
+        ClassInfo typedListInfo =
+            translator.classInfo[translator.typedListClass]!;
+        w.RefType arrayType = typedListInfo.struct
+            .fields[FieldIndex.typedListArray].type.unpacked as w.RefType;
+        w.ArrayType arrayHeapType = arrayType.heapType as w.ArrayType;
+        w.ValueType valueType = float ? w.NumType.f64 : w.NumType.i64;
+        w.ValueType intType = wide ? w.NumType.i64 : w.NumType.i32;
+
+        // Prepare array and offset
+        w.Local array = codeGen.addLocal(arrayType);
+        w.Local offset = codeGen.addLocal(w.NumType.i32);
+        codeGen.wrap(receiver, typedListInfo.nullableType);
+        b.struct_get(typedListInfo.struct, FieldIndex.typedListArray);
+        b.local_set(array);
+        codeGen.wrap(node.arguments.positional[0], w.NumType.i64);
+        b.i32_wrap_i64();
+        b.local_set(offset);
+
+        if (setter) {
+          // Setter
+          w.Local value = codeGen.addLocal(intType);
+          codeGen.wrap(node.arguments.positional[1], valueType);
+          if (wide) {
+            if (float) {
+              b.i64_reinterpret_f64();
+            }
+          } else {
+            if (float) {
+              b.f32_demote_f64();
+              b.i32_reinterpret_f32();
+            } else {
+              b.i32_wrap_i64();
+            }
+          }
+          b.local_set(value);
+
+          for (int i = 0; i < bytes; i++) {
+            b.local_get(array);
+            b.local_get(offset);
+            if (i > 0) {
+              b.i32_const(i);
+              b.i32_add();
+            }
+            b.local_get(value);
+            if (i > 0) {
+              if (wide) {
+                b.i64_const(i * 8);
+                b.i64_shr_u();
+              } else {
+                b.i32_const(i * 8);
+                b.i32_shr_u();
+              }
+            }
+            if (wide) {
+              b.i32_wrap_i64();
+            }
+            b.array_set(arrayHeapType);
+          }
+          return translator.voidMarker;
+        } else {
+          // Getter
+          for (int i = 0; i < bytes; i++) {
+            b.local_get(array);
+            b.local_get(offset);
+            if (i > 0) {
+              b.i32_const(i);
+              b.i32_add();
+            }
+            if (signed && i == bytes - 1) {
+              b.array_get_s(arrayHeapType);
+            } else {
+              b.array_get_u(arrayHeapType);
+            }
+            if (wide) {
+              if (signed) {
+                b.i64_extend_i32_s();
+              } else {
+                b.i64_extend_i32_u();
+              }
+            }
+            if (i > 0) {
+              if (wide) {
+                b.i64_const(i * 8);
+                b.i64_shl();
+                b.i64_or();
+              } else {
+                b.i32_const(i * 8);
+                b.i32_shl();
+                b.i32_or();
+              }
+            }
+          }
+
+          if (wide) {
+            if (float) {
+              b.f64_reinterpret_i64();
+            }
+          } else {
+            if (float) {
+              b.f32_reinterpret_i32();
+              b.f64_promote_f32();
+            } else {
+              if (signed) {
+                b.i64_extend_i32_s();
+              } else {
+                b.i64_extend_i32_u();
+              }
+            }
+          }
+          return valueType;
+        }
+      }
+    }
+
+    // WasmIntArray.(readSigned|readUnsigned|write)
+    // WasmFloatArray.(read|write)
+    // WasmObjectArray.(read|write)
+    if (node.interfaceTarget.enclosingClass?.superclass ==
+        translator.wasmArrayBaseClass) {
+      DartType elementType =
+          (receiverType as InterfaceType).typeArguments.single;
+      w.ArrayType arrayType = translator.arrayTypeForDartType(elementType);
+      w.StorageType wasmType = arrayType.elementType.type;
+      bool innerExtend =
+          wasmType == w.PackedType.i8 || wasmType == w.PackedType.i16;
+      bool outerExtend =
+          wasmType.unpacked == w.NumType.i32 || wasmType == w.NumType.f32;
+      switch (name) {
+        case 'read':
+        case 'readSigned':
+        case 'readUnsigned':
+          bool unsigned = name == 'readUnsigned';
+          Expression array = receiver;
+          Expression index = node.arguments.positional.single;
+          codeGen.wrap(array, w.RefType.def(arrayType, nullable: true));
+          codeGen.wrap(index, w.NumType.i64);
+          b.i32_wrap_i64();
+          if (innerExtend) {
+            if (unsigned) {
+              b.array_get_u(arrayType);
+            } else {
+              b.array_get_s(arrayType);
+            }
+          } else {
+            b.array_get(arrayType);
+          }
+          if (outerExtend) {
+            if (wasmType == w.NumType.f32) {
+              b.f64_promote_f32();
+              return w.NumType.f64;
+            } else {
+              if (unsigned) {
+                b.i64_extend_i32_u();
+              } else {
+                b.i64_extend_i32_s();
+              }
+              return w.NumType.i64;
+            }
+          }
+          return wasmType.unpacked;
+        case 'write':
+          Expression array = receiver;
+          Expression index = node.arguments.positional[0];
+          Expression value = node.arguments.positional[1];
+          codeGen.wrap(array, w.RefType.def(arrayType, nullable: true));
+          codeGen.wrap(index, w.NumType.i64);
+          b.i32_wrap_i64();
+          codeGen.wrap(value, typeOfExp(value));
+          if (outerExtend) {
+            if (wasmType == w.NumType.f32) {
+              b.f32_demote_f64();
+            } else {
+              b.i32_wrap_i64();
+            }
+          }
+          b.array_set(arrayType);
+          return codeGen.voidMarker;
+        default:
+          throw "Unsupported array method: $name";
+      }
+    }
+
+    // Wasm(I32|I64|F32|F64) conversions
+    if (node.interfaceTarget.enclosingClass?.superclass?.superclass ==
+        translator.wasmTypesBaseClass) {
+      w.StorageType receiverType =
+          translator.builtinTypes[node.interfaceTarget.enclosingClass]!;
+      switch (receiverType) {
+        case w.NumType.i32:
+          assert(name == "toIntSigned" || name == "toIntUnsigned");
+          codeGen.wrap(receiver, w.NumType.i32);
+          switch (name) {
+            case "toIntSigned":
+              b.i64_extend_i32_s();
+              break;
+            case "toIntUnsigned":
+              b.i64_extend_i32_u();
+              break;
+          }
+          return w.NumType.i64;
+        case w.NumType.i64:
+          assert(name == "toInt");
+          codeGen.wrap(receiver, w.NumType.i64);
+          return w.NumType.i64;
+        case w.NumType.f32:
+          assert(name == "toDouble");
+          codeGen.wrap(receiver, w.NumType.f32);
+          b.f64_promote_f32();
+          return w.NumType.f64;
+        case w.NumType.f64:
+          assert(name == "toDouble");
+          codeGen.wrap(receiver, w.NumType.f64);
+          return w.NumType.f64;
+      }
+    }
+
+    // List.[] on list constants
+    if (receiver is ConstantExpression &&
+        receiver.constant is ListConstant &&
+        name == '[]') {
+      ClassInfo info = translator.classInfo[translator.listBaseClass]!;
+      w.RefType listType = info.nullableType;
+      Field arrayField = translator.listBaseClass.fields
+          .firstWhere((f) => f.name.text == '_data');
+      int arrayFieldIndex = translator.fieldIndex[arrayField]!;
+      w.ArrayType arrayType =
+          (info.struct.fields[arrayFieldIndex].type as w.RefType).heapType
+              as w.ArrayType;
+      codeGen.wrap(receiver, listType);
+      b.struct_get(info.struct, arrayFieldIndex);
+      codeGen.wrap(node.arguments.positional.single, w.NumType.i64);
+      b.i32_wrap_i64();
+      b.array_get(arrayType);
+      return translator.topInfo.nullableType;
+    }
+
+    if (node.arguments.positional.length == 1) {
+      // Binary operator
+      Expression left = node.receiver;
+      Expression right = node.arguments.positional.single;
+      DartType argType = dartTypeOf(right);
+      if (argType is VoidType) return null;
+      w.ValueType leftType = translator.translateType(receiverType);
+      w.ValueType rightType = translator.translateType(argType);
+      var code = binaryOperatorMap[leftType]?[rightType]?[name];
+      if (code != null) {
+        w.ValueType outType = isComparison(name) ? w.NumType.i32 : leftType;
+        codeGen.wrap(left, leftType);
+        codeGen.wrap(right, rightType);
+        code(b);
+        return outType;
+      }
+    } else if (node.arguments.positional.length == 0) {
+      // Unary operator
+      Expression operand = node.receiver;
+      w.ValueType opType = translator.translateType(receiverType);
+      var code = unaryOperatorMap[opType]?[name];
+      if (code != null) {
+        codeGen.wrap(operand, opType);
+        code(b);
+        return unaryResultMap[name] ?? opType;
+      }
+    }
+
+    return null;
+  }
+
+  w.ValueType? generateEqualsIntrinsic(EqualsCall node) {
+    w.ValueType leftType = typeOfExp(node.left);
+    w.ValueType rightType = typeOfExp(node.right);
+
+    if (leftType == boolType && rightType == boolType) {
+      codeGen.wrap(node.left, w.NumType.i32);
+      codeGen.wrap(node.right, w.NumType.i32);
+      b.i32_eq();
+      return w.NumType.i32;
+    }
+
+    if (leftType == intType && rightType == intType) {
+      codeGen.wrap(node.left, w.NumType.i64);
+      codeGen.wrap(node.right, w.NumType.i64);
+      b.i64_eq();
+      return w.NumType.i32;
+    }
+
+    if (leftType == doubleType && rightType == doubleType) {
+      codeGen.wrap(node.left, w.NumType.f64);
+      codeGen.wrap(node.right, w.NumType.f64);
+      b.f64_eq();
+      return w.NumType.i32;
+    }
+
+    return null;
+  }
+
+  w.ValueType? generateStaticGetterIntrinsic(StaticGet node) {
+    Member target = node.target;
+
+    // ClassID getters
+    String? className = translator.getPragma(target, "wasm:class-id");
+    if (className != null) {
+      List<String> libAndClass = className.split("#");
+      Class cls = translator.libraries
+          .firstWhere((l) => l.name == libAndClass[0])
+          .classes
+          .firstWhere((c) => c.name == libAndClass[1]);
+      int classId = translator.classInfo[cls]!.classId;
+      b.i64_const(classId);
+      return w.NumType.i64;
+    }
+
+    return null;
+  }
+
+  w.ValueType? generateStaticIntrinsic(StaticInvocation node) {
+    String name = node.name.text;
+
+    // dart:core static functions
+    if (node.target.enclosingLibrary == translator.coreTypes.coreLibrary) {
+      switch (name) {
+        case "identical":
+          Expression first = node.arguments.positional[0];
+          Expression second = node.arguments.positional[1];
+          DartType boolType = translator.coreTypes.boolNonNullableRawType;
+          InterfaceType intType = translator.coreTypes.intNonNullableRawType;
+          DartType doubleType = translator.coreTypes.doubleNonNullableRawType;
+          List<DartType> types = [dartTypeOf(first), dartTypeOf(second)];
+          if (types.every((t) => t == intType)) {
+            codeGen.wrap(first, w.NumType.i64);
+            codeGen.wrap(second, w.NumType.i64);
+            b.i64_eq();
+            return w.NumType.i32;
+          }
+          if (types.any((t) =>
+              t is InterfaceType &&
+              t != boolType &&
+              t != doubleType &&
+              !translator.hierarchy
+                  .isSubtypeOf(intType.classNode, t.classNode))) {
+            codeGen.wrap(first, w.RefType.eq(nullable: true));
+            codeGen.wrap(second, w.RefType.eq(nullable: true));
+            b.ref_eq();
+            return w.NumType.i32;
+          }
+          break;
+        case "_getHash":
+          Expression arg = node.arguments.positional[0];
+          w.ValueType objectType = translator.objectInfo.nullableType;
+          codeGen.wrap(arg, objectType);
+          b.struct_get(translator.objectInfo.struct, FieldIndex.identityHash);
+          b.i64_extend_i32_u();
+          return w.NumType.i64;
+        case "_setHash":
+          Expression arg = node.arguments.positional[0];
+          Expression hash = node.arguments.positional[1];
+          w.ValueType objectType = translator.objectInfo.nullableType;
+          codeGen.wrap(arg, objectType);
+          codeGen.wrap(hash, w.NumType.i64);
+          b.i32_wrap_i64();
+          b.struct_set(translator.objectInfo.struct, FieldIndex.identityHash);
+          return codeGen.voidMarker;
+      }
+    }
+
+    // dart:_internal static functions
+    if (node.target.enclosingLibrary.name == "dart._internal") {
+      switch (name) {
+        case "unsafeCast":
+          w.ValueType targetType =
+              translator.translateType(node.arguments.types.single);
+          Expression operand = node.arguments.positional.single;
+          return codeGen.wrap(operand, targetType);
+        case "allocateOneByteString":
+          ClassInfo info = translator.classInfo[translator.oneByteStringClass]!;
+          translator.functions.allocateClass(info.classId);
+          w.ArrayType arrayType =
+              translator.wasmArrayType(w.PackedType.i8, "WasmI8");
+          Expression length = node.arguments.positional[0];
+          b.i32_const(info.classId);
+          b.i32_const(initialIdentityHash);
+          codeGen.wrap(length, w.NumType.i64);
+          b.i32_wrap_i64();
+          translator.array_new_default(b, arrayType);
+          translator.struct_new(b, info);
+          return info.nonNullableType;
+        case "writeIntoOneByteString":
+          ClassInfo info = translator.classInfo[translator.oneByteStringClass]!;
+          w.ArrayType arrayType =
+              translator.wasmArrayType(w.PackedType.i8, "WasmI8");
+          Field arrayField = translator.oneByteStringClass.fields
+              .firstWhere((f) => f.name.text == '_array');
+          int arrayFieldIndex = translator.fieldIndex[arrayField]!;
+          Expression string = node.arguments.positional[0];
+          Expression index = node.arguments.positional[1];
+          Expression codePoint = node.arguments.positional[2];
+          codeGen.wrap(string, info.nonNullableType);
+          b.struct_get(info.struct, arrayFieldIndex);
+          codeGen.wrap(index, w.NumType.i64);
+          b.i32_wrap_i64();
+          codeGen.wrap(codePoint, w.NumType.i64);
+          b.i32_wrap_i64();
+          b.array_set(arrayType);
+          return codeGen.voidMarker;
+        case "allocateTwoByteString":
+          ClassInfo info = translator.classInfo[translator.twoByteStringClass]!;
+          translator.functions.allocateClass(info.classId);
+          w.ArrayType arrayType =
+              translator.wasmArrayType(w.PackedType.i16, "WasmI16");
+          Expression length = node.arguments.positional[0];
+          b.i32_const(info.classId);
+          b.i32_const(initialIdentityHash);
+          codeGen.wrap(length, w.NumType.i64);
+          b.i32_wrap_i64();
+          translator.array_new_default(b, arrayType);
+          translator.struct_new(b, info);
+          return info.nonNullableType;
+        case "writeIntoTwoByteString":
+          ClassInfo info = translator.classInfo[translator.twoByteStringClass]!;
+          w.ArrayType arrayType =
+              translator.wasmArrayType(w.PackedType.i16, "WasmI16");
+          Field arrayField = translator.oneByteStringClass.fields
+              .firstWhere((f) => f.name.text == '_array');
+          int arrayFieldIndex = translator.fieldIndex[arrayField]!;
+          Expression string = node.arguments.positional[0];
+          Expression index = node.arguments.positional[1];
+          Expression codePoint = node.arguments.positional[2];
+          codeGen.wrap(string, info.nonNullableType);
+          b.struct_get(info.struct, arrayFieldIndex);
+          codeGen.wrap(index, w.NumType.i64);
+          b.i32_wrap_i64();
+          codeGen.wrap(codePoint, w.NumType.i64);
+          b.i32_wrap_i64();
+          b.array_set(arrayType);
+          return codeGen.voidMarker;
+        case "floatToIntBits":
+          codeGen.wrap(node.arguments.positional.single, w.NumType.f64);
+          b.f32_demote_f64();
+          b.i32_reinterpret_f32();
+          b.i64_extend_i32_u();
+          return w.NumType.i64;
+        case "intBitsToFloat":
+          codeGen.wrap(node.arguments.positional.single, w.NumType.i64);
+          b.i32_wrap_i64();
+          b.f32_reinterpret_i32();
+          b.f64_promote_f32();
+          return w.NumType.f64;
+        case "doubleToIntBits":
+          codeGen.wrap(node.arguments.positional.single, w.NumType.f64);
+          b.i64_reinterpret_f64();
+          return w.NumType.i64;
+        case "intBitsToDouble":
+          codeGen.wrap(node.arguments.positional.single, w.NumType.i64);
+          b.f64_reinterpret_i64();
+          return w.NumType.f64;
+        case "getID":
+          assert(node.target.enclosingClass?.name == "ClassID");
+          ClassInfo info = translator.topInfo;
+          codeGen.wrap(node.arguments.positional.single, info.nullableType);
+          b.struct_get(info.struct, FieldIndex.classId);
+          b.i64_extend_i32_u();
+          return w.NumType.i64;
+      }
+    }
+
+    // Wasm(Int|Float|Object)Array constructors
+    if (node.target.enclosingClass?.superclass ==
+        translator.wasmArrayBaseClass) {
+      Expression length = node.arguments.positional[0];
+      w.ArrayType arrayType =
+          translator.arrayTypeForDartType(node.arguments.types.single);
+      codeGen.wrap(length, w.NumType.i64);
+      b.i32_wrap_i64();
+      translator.array_new_default(b, arrayType);
+      return w.RefType.def(arrayType, nullable: false);
+    }
+
+    // Wasm(I32|I64|F32|F64) constructors
+    if (node.target.enclosingClass?.superclass?.superclass ==
+        translator.wasmTypesBaseClass) {
+      Expression value = node.arguments.positional[0];
+      w.StorageType targetType =
+          translator.builtinTypes[node.target.enclosingClass]!;
+      switch (targetType) {
+        case w.NumType.i32:
+          codeGen.wrap(value, w.NumType.i64);
+          b.i32_wrap_i64();
+          return w.NumType.i32;
+        case w.NumType.i64:
+          codeGen.wrap(value, w.NumType.i64);
+          return w.NumType.i64;
+        case w.NumType.f32:
+          codeGen.wrap(value, w.NumType.f64);
+          b.f32_demote_f64();
+          return w.NumType.f32;
+        case w.NumType.f64:
+          codeGen.wrap(value, w.NumType.f64);
+          return w.NumType.f64;
+      }
+    }
+
+    return null;
+  }
+
+  bool generateMemberIntrinsic(Reference target, w.DefinedFunction function,
+      List<w.Local> paramLocals, w.Label? returnLabel) {
+    Member member = target.asMember;
+    if (member is! Procedure) return false;
+    String name = member.name.text;
+    FunctionNode functionNode = member.function;
+
+    // Object.==
+    if (member == translator.coreTypes.objectEquals) {
+      b.local_get(paramLocals[0]);
+      b.local_get(paramLocals[1]);
+      b.ref_eq();
+      return true;
+    }
+
+    // Object.runtimeType
+    if (member.enclosingClass == translator.coreTypes.objectClass &&
+        name == "runtimeType") {
+      w.Local receiver = paramLocals[0];
+      ClassInfo info = translator.classInfo[translator.typeClass]!;
+      translator.functions.allocateClass(info.classId);
+      w.ValueType typeListExpectedType = info.struct.fields[3].type.unpacked;
+
+      b.i32_const(info.classId);
+      b.i32_const(initialIdentityHash);
+      b.local_get(receiver);
+      b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+      b.i64_extend_i32_u();
+      // TODO(askesc): Type arguments
+      b.global_get(translator.constants.emptyTypeList);
+      translator.convertType(function,
+          translator.constants.emptyTypeList.type.type, typeListExpectedType);
+      translator.struct_new(b, info);
+
+      return true;
+    }
+
+    // identical
+    if (member == translator.coreTypes.identicalProcedure) {
+      w.Local first = paramLocals[0];
+      w.Local second = paramLocals[1];
+      ClassInfo boolInfo = translator.classInfo[translator.boxedBoolClass]!;
+      ClassInfo intInfo = translator.classInfo[translator.boxedIntClass]!;
+      ClassInfo doubleInfo = translator.classInfo[translator.boxedDoubleClass]!;
+      w.Local cid = function.addLocal(w.NumType.i32);
+      w.Label ref_eq = b.block();
+      b.local_get(first);
+      b.br_on_null(ref_eq);
+      b.struct_get(translator.topInfo.struct, FieldIndex.classId);
+      b.local_tee(cid);
+
+      // Both bool?
+      b.i32_const(boolInfo.classId);
+      b.i32_eq();
+      b.if_();
+      b.local_get(first);
+      translator.ref_cast(b, boolInfo);
+      b.struct_get(boolInfo.struct, FieldIndex.boxValue);
+      w.Label bothBool = b.block(const [], [boolInfo.nullableType]);
+      b.local_get(second);
+      translator.br_on_cast(b, bothBool, boolInfo);
+      b.i32_const(0);
+      b.return_();
+      b.end();
+      b.struct_get(boolInfo.struct, FieldIndex.boxValue);
+      b.i32_eq();
+      b.return_();
+      b.end();
+
+      // Both int?
+      b.local_get(cid);
+      b.i32_const(intInfo.classId);
+      b.i32_eq();
+      b.if_();
+      b.local_get(first);
+      translator.ref_cast(b, intInfo);
+      b.struct_get(intInfo.struct, FieldIndex.boxValue);
+      w.Label bothInt = b.block(const [], [intInfo.nullableType]);
+      b.local_get(second);
+      translator.br_on_cast(b, bothInt, intInfo);
+      b.i32_const(0);
+      b.return_();
+      b.end();
+      b.struct_get(intInfo.struct, FieldIndex.boxValue);
+      b.i64_eq();
+      b.return_();
+      b.end();
+
+      // Both double?
+      b.local_get(cid);
+      b.i32_const(doubleInfo.classId);
+      b.i32_eq();
+      b.if_();
+      b.local_get(first);
+      translator.ref_cast(b, doubleInfo);
+      b.struct_get(doubleInfo.struct, FieldIndex.boxValue);
+      b.i64_reinterpret_f64();
+      w.Label bothDouble = b.block(const [], [doubleInfo.nullableType]);
+      b.local_get(second);
+      translator.br_on_cast(b, bothDouble, doubleInfo);
+      b.i32_const(0);
+      b.return_();
+      b.end();
+      b.struct_get(doubleInfo.struct, FieldIndex.boxValue);
+      b.i64_reinterpret_f64();
+      b.i64_eq();
+      b.return_();
+      b.end();
+
+      // Compare as references
+      b.end();
+      b.local_get(first);
+      b.local_get(second);
+      b.ref_eq();
+
+      return true;
+    }
+
+    // (Int|Uint|Float)(8|16|32|64)(Clamped)?(List|ArrayView) constructors
+    if (member.isExternal &&
+        member.enclosingLibrary.name == "dart.typed_data") {
+      if (member.isFactory) {
+        String className = member.enclosingClass!.name;
+
+        Match? match = RegExp("^(Int|Uint|Float)(8|16|32|64)(Clamped)?List\$")
+            .matchAsPrefix(className);
+        if (match != null) {
+          int shift = int.parse(match.group(2)!).bitLength - 4;
+          Class cls = member.enclosingLibrary.classes
+              .firstWhere((c) => c.name == "_$className");
+          ClassInfo info = translator.classInfo[cls]!;
+          translator.functions.allocateClass(info.classId);
+          w.ArrayType arrayType =
+              translator.wasmArrayType(w.PackedType.i8, "i8");
+
+          w.Local length = paramLocals[0];
+          b.i32_const(info.classId);
+          b.i32_const(initialIdentityHash);
+          b.local_get(length);
+          b.i32_wrap_i64();
+          b.local_get(length);
+          if (shift > 0) {
+            b.i64_const(shift);
+            b.i64_shl();
+          }
+          b.i32_wrap_i64();
+          translator.array_new_default(b, arrayType);
+          translator.struct_new(b, info);
+          return true;
+        }
+
+        match = RegExp("^_(Int|Uint|Float)(8|16|32|64)(Clamped)?ArrayView\$")
+            .matchAsPrefix(className);
+        if (match != null ||
+            member.enclosingClass == translator.byteDataViewClass) {
+          ClassInfo info = translator.classInfo[member.enclosingClass]!;
+          translator.functions.allocateClass(info.classId);
+
+          w.Local buffer = paramLocals[0];
+          w.Local offsetInBytes = paramLocals[1];
+          w.Local length = paramLocals[2];
+          b.i32_const(info.classId);
+          b.i32_const(initialIdentityHash);
+          b.local_get(length);
+          b.i32_wrap_i64();
+          b.local_get(buffer);
+          b.local_get(offsetInBytes);
+          b.i32_wrap_i64();
+          translator.struct_new(b, info);
+          return true;
+        }
+      }
+
+      // _TypedListBase.length
+      // _TypedListView.offsetInBytes
+      // _TypedListView._typedData
+      // _ByteDataView.length
+      // _ByteDataView.offsetInBytes
+      // _ByteDataView._typedData
+      if (member.isGetter) {
+        Class cls = member.enclosingClass!;
+        ClassInfo info = translator.classInfo[cls]!;
+        b.local_get(paramLocals[0]);
+        translator.ref_cast(b, info);
+        switch (name) {
+          case "length":
+            assert(cls == translator.typedListBaseClass ||
+                cls == translator.byteDataViewClass);
+            if (cls == translator.typedListBaseClass) {
+              b.struct_get(info.struct, FieldIndex.typedListBaseLength);
+            } else {
+              b.struct_get(info.struct, FieldIndex.byteDataViewLength);
+            }
+            b.i64_extend_i32_u();
+            return true;
+          case "offsetInBytes":
+            assert(cls == translator.typedListViewClass ||
+                cls == translator.byteDataViewClass);
+            if (cls == translator.typedListViewClass) {
+              b.struct_get(info.struct, FieldIndex.typedListViewOffsetInBytes);
+            } else {
+              b.struct_get(info.struct, FieldIndex.byteDataViewOffsetInBytes);
+            }
+            b.i64_extend_i32_u();
+            return true;
+          case "_typedData":
+            assert(cls == translator.typedListViewClass ||
+                cls == translator.byteDataViewClass);
+            if (cls == translator.typedListViewClass) {
+              b.struct_get(info.struct, FieldIndex.typedListViewTypedData);
+            } else {
+              b.struct_get(info.struct, FieldIndex.byteDataViewTypedData);
+            }
+            return true;
+        }
+        throw "Unrecognized typed data getter: ${cls.name}.$name";
+      }
+    }
+
+    // int members
+    if (member.enclosingClass == translator.boxedIntClass &&
+        member.function.body == null) {
+      String op = member.name.text;
+      if (functionNode.requiredParameterCount == 0) {
+        CodeGenCallback? code = unaryOperatorMap[intType]![op];
+        if (code != null) {
+          w.ValueType resultType = unaryResultMap[op] ?? intType;
+          w.ValueType inputType = function.type.inputs.single;
+          w.ValueType outputType = function.type.outputs.single;
+          b.local_get(function.locals[0]);
+          translator.convertType(function, inputType, intType);
+          code(b);
+          translator.convertType(function, resultType, outputType);
+          return true;
+        }
+      } else if (functionNode.requiredParameterCount == 1) {
+        CodeGenCallback? code = binaryOperatorMap[intType]![intType]![op];
+        if (code != null) {
+          w.ValueType leftType = function.type.inputs[0];
+          w.ValueType rightType = function.type.inputs[1];
+          w.ValueType outputType = function.type.outputs.single;
+          if (rightType == intType) {
+            // int parameter
+            b.local_get(function.locals[0]);
+            translator.convertType(function, leftType, intType);
+            b.local_get(function.locals[1]);
+            code(b);
+            if (!isComparison(op)) {
+              translator.convertType(function, intType, outputType);
+            }
+            return true;
+          }
+          // num parameter
+          ClassInfo intInfo = translator.classInfo[translator.boxedIntClass]!;
+          w.Label intArg = b.block(const [], [intInfo.nonNullableType]);
+          b.local_get(function.locals[1]);
+          translator.br_on_cast(b, intArg, intInfo);
+          // double argument
+          b.drop();
+          b.local_get(function.locals[0]);
+          translator.convertType(function, leftType, intType);
+          b.f64_convert_i64_s();
+          b.local_get(function.locals[1]);
+          translator.convertType(function, rightType, doubleType);
+          // Inline double op
+          CodeGenCallback doubleCode =
+              binaryOperatorMap[doubleType]![doubleType]![op]!;
+          doubleCode(b);
+          if (!isComparison(op)) {
+            translator.convertType(function, doubleType, outputType);
+          }
+          b.return_();
+          b.end();
+          // int argument
+          translator.convertType(function, intInfo.nonNullableType, intType);
+          w.Local rightTemp = function.addLocal(intType);
+          b.local_set(rightTemp);
+          b.local_get(function.locals[0]);
+          translator.convertType(function, leftType, intType);
+          b.local_get(rightTemp);
+          code(b);
+          if (!isComparison(op)) {
+            translator.convertType(function, intType, outputType);
+          }
+          return true;
+        }
+      }
+    }
+
+    // double unary members
+    if (member.enclosingClass == translator.boxedDoubleClass &&
+        member.function.body == null) {
+      String op = member.name.text;
+      if (functionNode.requiredParameterCount == 0) {
+        CodeGenCallback? code = unaryOperatorMap[doubleType]![op];
+        if (code != null) {
+          w.ValueType resultType = unaryResultMap[op] ?? doubleType;
+          w.ValueType inputType = function.type.inputs.single;
+          w.ValueType outputType = function.type.outputs.single;
+          b.local_get(function.locals[0]);
+          translator.convertType(function, inputType, doubleType);
+          code(b);
+          translator.convertType(function, resultType, outputType);
+          return true;
+        }
+      }
+    }
+
+    return false;
+  }
+}
diff --git a/pkg/dart2wasm/lib/param_info.dart b/pkg/dart2wasm/lib/param_info.dart
new file mode 100644
index 0000000..182af47
--- /dev/null
+++ b/pkg/dart2wasm/lib/param_info.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 'package:dart2wasm/reference_extensions.dart';
+
+import 'package:kernel/ast.dart';
+
+/// Information about optional parameters and their default values for a
+/// member or a set of members belonging to the same override group.
+class ParameterInfo {
+  final Member member;
+  int typeParamCount = 0;
+  late final List<Constant?> positional;
+  late final Map<String, Constant?> named;
+
+  // Do not access these until the info is complete.
+  late final List<String> names = named.keys.toList()..sort();
+  late final Map<String, int> nameIndex = {
+    for (int i = 0; i < names.length; i++) names[i]: positional.length + i
+  };
+
+  int get paramCount => positional.length + named.length;
+
+  static Constant? defaultValue(VariableDeclaration param) {
+    Expression? initializer = param.initializer;
+    if (initializer is ConstantExpression) {
+      return initializer.constant;
+    } else if (initializer == null) {
+      return null;
+    } else {
+      throw "Non-constant default value";
+    }
+  }
+
+  ParameterInfo.fromMember(Reference target) : member = target.asMember {
+    FunctionNode? function = member.function;
+    if (target.isTearOffReference) {
+      positional = [];
+      named = {};
+    } else if (function != null) {
+      typeParamCount = (member is Constructor
+              ? member.enclosingClass!.typeParameters
+              : function.typeParameters)
+          .length;
+      positional = List.generate(function.positionalParameters.length, (i) {
+        // A required parameter has no default value.
+        if (i < function.requiredParameterCount) return null;
+        return defaultValue(function.positionalParameters[i]);
+      });
+      named = {
+        for (VariableDeclaration param in function.namedParameters)
+          param.name!: defaultValue(param)
+      };
+    } else {
+      // A setter parameter has no default value.
+      positional = [if (target.isSetter) null];
+      named = {};
+    }
+  }
+
+  void merge(ParameterInfo other) {
+    assert(typeParamCount == other.typeParamCount);
+    for (int i = 0; i < other.positional.length; i++) {
+      if (i >= positional.length) {
+        positional.add(other.positional[i]);
+      } else {
+        if (positional[i] == null) {
+          positional[i] = other.positional[i];
+        } else if (other.positional[i] != null) {
+          if (positional[i] != other.positional[i]) {
+            print("Mismatching default value for parameter $i: "
+                "${member}: ${positional[i]} vs "
+                "${other.member}: ${other.positional[i]}");
+          }
+        }
+      }
+    }
+    for (String name in other.named.keys) {
+      Constant? value = named[name];
+      Constant? otherValue = other.named[name];
+      if (value == null) {
+        named[name] = otherValue;
+      } else if (otherValue != null) {
+        if (value != otherValue) {
+          print("Mismatching default value for parameter '$name': "
+              "${member}: ${value} vs "
+              "${other.member}: ${otherValue}");
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/dart2wasm/lib/reference_extensions.dart b/pkg/dart2wasm/lib/reference_extensions.dart
new file mode 100644
index 0000000..ba9a68c
--- /dev/null
+++ b/pkg/dart2wasm/lib/reference_extensions.dart
@@ -0,0 +1,62 @@
+// 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';
+
+// Extend references with flags to more easily identify getters and setters.
+
+extension GetterSetterReference on Reference {
+  bool get isImplicitGetter {
+    Member member = asMember;
+    return member is Field && member.getterReference == this;
+  }
+
+  bool get isImplicitSetter {
+    Member member = asMember;
+    return member is Field && member.setterReference == this;
+  }
+
+  bool get isGetter {
+    Member member = asMember;
+    return member is Procedure && member.isGetter || isImplicitGetter;
+  }
+
+  bool get isSetter {
+    Member member = asMember;
+    return member is Procedure && member.isSetter || isImplicitSetter;
+  }
+}
+
+// Extend procedures with a tearOffReference that refers to the tear-off
+// implementation for that procedure. This enables a Reference to refer to any
+// implementation relating to a member, including its tear-off, which it can't
+// do in plain kernel.
+
+extension TearOffReference on Procedure {
+  // Use an Expando to avoid keeping the procedure alive.
+  static final Expando<Reference> _tearOffReference = Expando();
+
+  Reference get tearOffReference =>
+      _tearOffReference[this] ??= Reference()..node = this;
+}
+
+extension IsTearOffReference on Reference {
+  bool get isTearOffReference {
+    Member member = asMember;
+    return member is Procedure && member.tearOffReference == this;
+  }
+}
+
+extension ReferenceAs on Member {
+  Reference referenceAs({required bool getter, required bool setter}) {
+    Member member = this;
+    return member is Field
+        ? setter
+            ? member.setterReference!
+            : member.getterReference
+        : getter && member is Procedure && member.kind == ProcedureKind.Method
+            ? member.tearOffReference
+            : member.reference;
+  }
+}
diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart
new file mode 100644
index 0000000..fa68680
--- /dev/null
+++ b/pkg/dart2wasm/lib/target.dart
@@ -0,0 +1,191 @@
+// 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';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/clone.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/changed_structure_notifier.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:vm/transformations/mixin_full_resolution.dart'
+    as transformMixins show transformLibraries;
+
+import 'package:dart2wasm/constants_backend.dart';
+import 'package:dart2wasm/transformers.dart' as wasmTrans;
+
+class WasmTarget extends Target {
+  Class? _growableList;
+  Class? _immutableList;
+  Class? _immutableMap;
+  Class? _unmodifiableSet;
+  Class? _compactLinkedCustomHashMap;
+  Class? _compactLinkedHashSet;
+  Class? _oneByteString;
+  Class? _twoByteString;
+
+  @override
+  late final ConstantsBackend constantsBackend;
+
+  @override
+  String get name => 'wasm';
+
+  @override
+  TargetFlags get flags => TargetFlags(enableNullSafety: true);
+
+  @override
+  List<String> get extraIndexedLibraries => const <String>[
+        "dart:collection",
+        "dart:typed_data",
+      ];
+
+  void _patchHostEndian(CoreTypes coreTypes) {
+    // Fix Endian.host to be a const field equal to Endian.little instead of
+    // a final field. Wasm is a little-endian platform.
+    // Can't use normal patching process for this because CFE does not
+    // support patching fields.
+    // See http://dartbug.com/32836 for the background.
+    final Field host =
+        coreTypes.index.getField('dart:typed_data', 'Endian', 'host');
+    final Field little =
+        coreTypes.index.getField('dart:typed_data', 'Endian', 'little');
+    host.isConst = true;
+    host.initializer = new CloneVisitorNotMembers().clone(little.initializer!)
+      ..parent = host;
+  }
+
+  @override
+  void performPreConstantEvaluationTransformations(
+      Component component,
+      CoreTypes coreTypes,
+      List<Library> libraries,
+      DiagnosticReporter diagnosticReporter,
+      {void Function(String msg)? logger,
+      ChangedStructureNotifier? changedStructureNotifier}) {
+    constantsBackend = WasmConstantsBackend(coreTypes);
+    _patchHostEndian(coreTypes);
+  }
+
+  @override
+  void performModularTransformationsOnLibraries(
+      Component component,
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      List<Library> libraries,
+      Map<String, String>? environmentDefines,
+      DiagnosticReporter diagnosticReporter,
+      ReferenceFromIndex? referenceFromIndex,
+      {void logger(String msg)?,
+      ChangedStructureNotifier? changedStructureNotifier}) {
+    transformMixins.transformLibraries(
+        this, coreTypes, hierarchy, libraries, referenceFromIndex);
+    logger?.call("Transformed mixin applications");
+
+    wasmTrans.transformLibraries(libraries, coreTypes, hierarchy);
+  }
+
+  @override
+  void performTransformationsOnProcedure(
+      CoreTypes coreTypes,
+      ClassHierarchy hierarchy,
+      Procedure procedure,
+      Map<String, String>? environmentDefines,
+      {void logger(String msg)?}) {
+    wasmTrans.transformProcedure(procedure, coreTypes, hierarchy);
+  }
+
+  @override
+  Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
+      String name, Arguments arguments, int offset, bool isSuper) {
+    throw "Unsupported: instantiateInvocation";
+  }
+
+  Expression instantiateNoSuchMethodError(CoreTypes coreTypes,
+      Expression receiver, String name, Arguments arguments, int offset,
+      {bool isMethod: false,
+      bool isGetter: false,
+      bool isSetter: false,
+      bool isField: false,
+      bool isLocalVariable: false,
+      bool isDynamic: false,
+      bool isSuper: false,
+      bool isStatic: false,
+      bool isConstructor: false,
+      bool isTopLevel: false}) {
+    throw "Unsupported: instantiateNoSuchMethodError";
+  }
+
+  @override
+  bool get supportsSetLiterals => false;
+
+  @override
+  int get enabledLateLowerings => LateLowering.all;
+
+  @override
+  int get enabledConstructorTearOffLowerings => ConstructorTearOffLowering.all;
+
+  @override
+  bool get supportsExplicitGetterCalls => true;
+
+  @override
+  bool get supportsLateLoweringSentinel => false;
+
+  @override
+  bool get useStaticFieldLowering => false;
+
+  @override
+  bool enableNative(Uri uri) => true;
+
+  @override
+  Class concreteListLiteralClass(CoreTypes coreTypes) {
+    return _growableList ??=
+        coreTypes.index.getClass('dart:core', '_GrowableList');
+  }
+
+  @override
+  Class concreteConstListLiteralClass(CoreTypes coreTypes) {
+    return _immutableList ??=
+        coreTypes.index.getClass('dart:core', '_ImmutableList');
+  }
+
+  @override
+  Class concreteMapLiteralClass(CoreTypes coreTypes) {
+    return _compactLinkedCustomHashMap ??= coreTypes.index
+        .getClass('dart:collection', '_CompactLinkedCustomHashMap');
+  }
+
+  @override
+  Class concreteConstMapLiteralClass(CoreTypes coreTypes) {
+    return _immutableMap ??=
+        coreTypes.index.getClass('dart:collection', '_ImmutableMap');
+  }
+
+  @override
+  Class concreteSetLiteralClass(CoreTypes coreTypes) {
+    return _compactLinkedHashSet ??=
+        coreTypes.index.getClass('dart:collection', '_CompactLinkedHashSet');
+  }
+
+  @override
+  Class concreteConstSetLiteralClass(CoreTypes coreTypes) {
+    return _unmodifiableSet ??=
+        coreTypes.index.getClass('dart:collection', '_UnmodifiableSet');
+  }
+
+  @override
+  Class concreteStringLiteralClass(CoreTypes coreTypes, String value) {
+    const int maxLatin1 = 0xff;
+    for (int i = 0; i < value.length; ++i) {
+      if (value.codeUnitAt(i) > maxLatin1) {
+        return _twoByteString ??=
+            coreTypes.index.getClass('dart:core', '_TwoByteString');
+      }
+    }
+    return _oneByteString ??=
+        coreTypes.index.getClass('dart:core', '_OneByteString');
+  }
+
+  @override
+  bool isSupportedPragma(String pragmaName) => pragmaName.startsWith("wasm:");
+}
diff --git a/pkg/dart2wasm/lib/transformers.dart b/pkg/dart2wasm/lib/transformers.dart
new file mode 100644
index 0000000..83793e3
--- /dev/null
+++ b/pkg/dart2wasm/lib/transformers.dart
@@ -0,0 +1,108 @@
+// 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';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/type_environment.dart';
+
+void transformLibraries(
+    List<Library> libraries, CoreTypes coreTypes, ClassHierarchy hierarchy) {
+  final transformer = _WasmTransformer(coreTypes, hierarchy);
+  libraries.forEach(transformer.visitLibrary);
+}
+
+void transformProcedure(
+    Procedure procedure, CoreTypes coreTypes, ClassHierarchy hierarchy) {
+  final transformer = _WasmTransformer(coreTypes, hierarchy);
+  procedure.accept(transformer);
+}
+
+class _WasmTransformer extends Transformer {
+  final TypeEnvironment env;
+
+  Member? _currentMember;
+  StaticTypeContext? _cachedTypeContext;
+
+  StaticTypeContext get typeContext =>
+      _cachedTypeContext ??= StaticTypeContext(_currentMember!, env);
+
+  _WasmTransformer(CoreTypes coreTypes, ClassHierarchy hierarchy)
+      : env = TypeEnvironment(coreTypes, hierarchy);
+
+  @override
+  defaultMember(Member node) {
+    _currentMember = node;
+    _cachedTypeContext = null;
+
+    final result = super.defaultMember(node);
+
+    _currentMember = null;
+    _cachedTypeContext = null;
+    return result;
+  }
+
+  @override
+  TreeNode visitForInStatement(ForInStatement stmt) {
+    // Transform
+    //
+    //   for ({var/final} T <variable> in <iterable>) { ... }
+    //
+    // Into
+    //
+    //  {
+    //    final Iterator<T> #forIterator = <iterable>.iterator;
+    //    for (; #forIterator.moveNext() ;) {
+    //        {var/final} T variable = #forIterator.current;
+    //        ...
+    //      }
+    //    }
+    //  }
+    final CoreTypes coreTypes = typeContext.typeEnvironment.coreTypes;
+
+    // The CFE might invoke this transformation despite the program having
+    // compile-time errors. So we will not transform this [stmt] if the
+    // `stmt.iterable` is an invalid expression or has an invalid type and
+    // instead eliminate the entire for-in and replace it with a invalid
+    // expression statement.
+    final iterable = stmt.iterable;
+    final iterableType = iterable.getStaticType(typeContext);
+    if (iterableType is InvalidType) {
+      return ExpressionStatement(
+          InvalidExpression('Invalid iterable type in for-in'));
+    }
+
+    final DartType elementType = stmt.getElementType(typeContext);
+    final iteratorType = InterfaceType(
+        coreTypes.iteratorClass, Nullability.nonNullable, [elementType]);
+
+    final iterator = VariableDeclaration("#forIterator",
+        initializer: InstanceGet(
+            InstanceAccessKind.Instance, iterable, Name('iterator'),
+            interfaceTarget: coreTypes.iterableGetIterator,
+            resultType: coreTypes.iterableGetIterator.function.returnType)
+          ..fileOffset = iterable.fileOffset,
+        type: iteratorType)
+      ..fileOffset = iterable.fileOffset;
+
+    final condition = InstanceInvocation(InstanceAccessKind.Instance,
+        VariableGet(iterator), Name('moveNext'), Arguments(const []),
+        interfaceTarget: coreTypes.iteratorMoveNext,
+        functionType: coreTypes.iteratorMoveNext.function
+            .computeFunctionType(Nullability.nonNullable))
+      ..fileOffset = iterable.fileOffset;
+
+    final variable = stmt.variable
+      ..initializer = (InstanceGet(
+          InstanceAccessKind.Instance, VariableGet(iterator), Name('current'),
+          interfaceTarget: coreTypes.iteratorGetCurrent,
+          resultType: coreTypes.iteratorGetCurrent.function.returnType)
+        ..fileOffset = stmt.bodyOffset);
+
+    final Block body = Block([variable, stmt.body]);
+
+    return Block([iterator, ForStatement(const [], condition, const [], body)])
+        .accept<TreeNode>(this);
+  }
+}
diff --git a/pkg/dart2wasm/lib/translator.dart b/pkg/dart2wasm/lib/translator.dart
new file mode 100644
index 0000000..36a4b0d
--- /dev/null
+++ b/pkg/dart2wasm/lib/translator.dart
@@ -0,0 +1,837 @@
+// 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:dart2wasm/class_info.dart';
+import 'package:dart2wasm/closures.dart';
+import 'package:dart2wasm/code_generator.dart';
+import 'package:dart2wasm/constants.dart';
+import 'package:dart2wasm/dispatch_table.dart';
+import 'package:dart2wasm/functions.dart';
+import 'package:dart2wasm/globals.dart';
+import 'package:dart2wasm/param_info.dart';
+import 'package:dart2wasm/reference_extensions.dart';
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart'
+    show ClassHierarchy, ClassHierarchySubtypes, ClosedWorldClassHierarchy;
+import 'package:kernel/core_types.dart';
+import 'package:kernel/src/printer.dart';
+import 'package:kernel/type_environment.dart';
+import 'package:vm/metadata/direct_call.dart';
+
+import 'package:wasm_builder/wasm_builder.dart' as w;
+
+/// Options controlling the translation.
+class TranslatorOptions {
+  bool exportAll = false;
+  bool inlining = false;
+  int inliningLimit = 3;
+  bool lazyConstants = false;
+  bool localNullability = false;
+  bool nameSection = true;
+  bool nominalTypes = false;
+  bool parameterNullability = true;
+  bool polymorphicSpecialization = false;
+  bool printKernel = false;
+  bool printWasm = false;
+  bool runtimeTypes = true;
+  bool stringDataSegments = false;
+  List<int>? watchPoints = null;
+
+  bool get useRttGlobals => runtimeTypes && !nominalTypes;
+}
+
+typedef CodeGenCallback = void Function(w.Instructions);
+
+/// The main entry point for the translation from kernel to Wasm and the hub for
+/// all global state in the compiler.
+///
+/// This class also contains utility methods for types and code generation used
+/// throughout the compiler.
+class Translator {
+  // Options for the translation.
+  final TranslatorOptions options;
+
+  // Kernel input and context.
+  final Component component;
+  final List<Library> libraries;
+  final CoreTypes coreTypes;
+  final TypeEnvironment typeEnvironment;
+  final ClosedWorldClassHierarchy hierarchy;
+  late final ClassHierarchySubtypes subtypes;
+
+  // Classes and members referenced specifically by the compiler.
+  late final Class wasmTypesBaseClass;
+  late final Class wasmArrayBaseClass;
+  late final Class wasmAnyRefClass;
+  late final Class wasmEqRefClass;
+  late final Class wasmDataRefClass;
+  late final Class boxedBoolClass;
+  late final Class boxedIntClass;
+  late final Class boxedDoubleClass;
+  late final Class functionClass;
+  late final Class listBaseClass;
+  late final Class fixedLengthListClass;
+  late final Class growableListClass;
+  late final Class immutableListClass;
+  late final Class stringBaseClass;
+  late final Class oneByteStringClass;
+  late final Class twoByteStringClass;
+  late final Class typeClass;
+  late final Class typedListBaseClass;
+  late final Class typedListClass;
+  late final Class typedListViewClass;
+  late final Class byteDataViewClass;
+  late final Class stackTraceClass;
+  late final Procedure stackTraceCurrent;
+  late final Procedure stringEquals;
+  late final Procedure stringInterpolate;
+  late final Procedure mapFactory;
+  late final Procedure mapPut;
+  late final Map<Class, w.StorageType> builtinTypes;
+  late final Map<w.ValueType, Class> boxedClasses;
+
+  // Other parts of the global compiler state.
+  late final ClassInfoCollector classInfoCollector;
+  late final DispatchTable dispatchTable;
+  late final Globals globals;
+  late final Constants constants;
+  late final FunctionCollector functions;
+
+  // Information about the program used and updated by the various phases.
+  final List<ClassInfo> classes = [];
+  final Map<Class, ClassInfo> classInfo = {};
+  final Map<w.HeapType, ClassInfo> classForHeapType = {};
+  final Map<Field, int> fieldIndex = {};
+  final Map<TypeParameter, int> typeParameterIndex = {};
+  final Map<Reference, ParameterInfo> staticParamInfo = {};
+  late Procedure mainFunction;
+  late final w.Module m;
+  late final w.DefinedFunction initFunction;
+  late final w.ValueType voidMarker;
+  late final w.Tag exceptionTag = createExceptionTag();
+
+  // Caches for when identical source constructs need a common representation.
+  final Map<w.StorageType, w.ArrayType> arrayTypeCache = {};
+  final Map<int, w.StructType> functionTypeCache = {};
+  final Map<w.StructType, int> functionTypeParameterCount = {};
+  final Map<int, w.DefinedGlobal> functionTypeRtt = {};
+  final Map<w.DefinedFunction, w.DefinedGlobal> functionRefCache = {};
+  final Map<Procedure, w.DefinedFunction> tearOffFunctionCache = {};
+
+  ClassInfo get topInfo => classes[0];
+  ClassInfo get objectInfo => classInfo[coreTypes.objectClass]!;
+  ClassInfo get stackTraceInfo => classInfo[stackTraceClass]!;
+
+  Translator(this.component, this.coreTypes, this.typeEnvironment, this.options)
+      : libraries = component.libraries,
+        hierarchy =
+            ClassHierarchy(component, coreTypes) as ClosedWorldClassHierarchy {
+    subtypes = hierarchy.computeSubtypesInformation();
+    classInfoCollector = ClassInfoCollector(this);
+    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);
+    }
+
+    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);
+    }
+
+    wasmTypesBaseClass = lookupWasm("_WasmBase");
+    wasmArrayBaseClass = lookupWasm("_WasmArray");
+    wasmAnyRefClass = lookupWasm("WasmAnyRef");
+    wasmEqRefClass = lookupWasm("WasmEqRef");
+    wasmDataRefClass = lookupWasm("WasmDataRef");
+    boxedBoolClass = lookupCore("_BoxedBool");
+    boxedIntClass = lookupCore("_BoxedInt");
+    boxedDoubleClass = lookupCore("_BoxedDouble");
+    functionClass = lookupCore("_Function");
+    fixedLengthListClass = lookupCore("_List");
+    listBaseClass = lookupCore("_ListBase");
+    growableListClass = lookupCore("_GrowableList");
+    immutableListClass = lookupCore("_ImmutableList");
+    stringBaseClass = lookupCore("_StringBase");
+    oneByteStringClass = lookupCore("_OneByteString");
+    twoByteStringClass = lookupCore("_TwoByteString");
+    typeClass = lookupCore("_Type");
+    stackTraceClass = lookupCore("StackTrace");
+    typedListBaseClass = lookupTypedData("_TypedListBase");
+    typedListClass = lookupTypedData("_TypedList");
+    typedListViewClass = lookupTypedData("_TypedListView");
+    byteDataViewClass = lookupTypedData("_ByteDataView");
+    stackTraceCurrent =
+        stackTraceClass.procedures.firstWhere((p) => p.name.text == "current");
+    stringEquals =
+        stringBaseClass.procedures.firstWhere((p) => p.name.text == "==");
+    stringInterpolate = stringBaseClass.procedures
+        .firstWhere((p) => p.name.text == "_interpolate");
+    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 == "[]=");
+    builtinTypes = {
+      coreTypes.boolClass: w.NumType.i32,
+      coreTypes.intClass: w.NumType.i64,
+      coreTypes.doubleClass: w.NumType.f64,
+      wasmAnyRefClass: w.RefType.any(nullable: false),
+      wasmEqRefClass: w.RefType.eq(nullable: false),
+      wasmDataRefClass: w.RefType.data(nullable: false),
+      boxedBoolClass: w.NumType.i32,
+      boxedIntClass: w.NumType.i64,
+      boxedDoubleClass: w.NumType.f64,
+      lookupWasm("WasmI8"): w.PackedType.i8,
+      lookupWasm("WasmI16"): w.PackedType.i16,
+      lookupWasm("WasmI32"): w.NumType.i32,
+      lookupWasm("WasmI64"): w.NumType.i64,
+      lookupWasm("WasmF32"): w.NumType.f32,
+      lookupWasm("WasmF64"): w.NumType.f64,
+    };
+    boxedClasses = {
+      w.NumType.i32: boxedBoolClass,
+      w.NumType.i64: boxedIntClass,
+      w.NumType.f64: boxedDoubleClass,
+    };
+  }
+
+  Uint8List translate() {
+    m = w.Module(watchPoints: options.watchPoints);
+    voidMarker = w.RefType.def(w.StructType("void"), nullable: true);
+
+    classInfoCollector.collect();
+
+    functions.collectImportsAndExports();
+    mainFunction =
+        libraries.first.procedures.firstWhere((p) => p.name.text == "main");
+    functions.addExport(mainFunction.reference, "main");
+
+    initFunction = m.addFunction(functionType(const [], const []), "#init");
+    m.startFunction = initFunction;
+
+    globals = Globals(this);
+    constants = Constants(this);
+
+    dispatchTable.build();
+
+    functions.initialize();
+    while (functions.worklist.isNotEmpty) {
+      Reference reference = functions.worklist.removeLast();
+      Member member = reference.asMember;
+      var function =
+          functions.getExistingFunction(reference) as w.DefinedFunction;
+
+      String canonicalName = "$member";
+      if (reference.isSetter) {
+        canonicalName = "$canonicalName=";
+      } else if (reference.isGetter || reference.isTearOffReference) {
+        int dot = canonicalName.indexOf('.');
+        canonicalName = canonicalName.substring(0, dot + 1) +
+            '=' +
+            canonicalName.substring(dot + 1);
+      }
+      canonicalName = member.enclosingLibrary == libraries.first
+          ? canonicalName
+          : "${member.enclosingLibrary.importUri} $canonicalName";
+
+      String? exportName = functions.exports[reference];
+
+      if (options.printKernel || options.printWasm) {
+        if (exportName != null) {
+          print("#${function.index}: $canonicalName (exported as $exportName)");
+        } else {
+          print("#${function.index}: $canonicalName");
+        }
+        print(member.function
+            ?.computeFunctionType(Nullability.nonNullable)
+            .toStringInternal());
+      }
+      if (options.printKernel) {
+        if (member is Constructor) {
+          Class cls = member.enclosingClass;
+          for (Field field in cls.fields) {
+            if (field.isInstanceMember && field.initializer != null) {
+              print("${field.name}: ${field.initializer}");
+            }
+          }
+          for (Initializer initializer in member.initializers) {
+            print(initializer);
+          }
+        }
+        Statement? body = member.function?.body;
+        if (body != null) {
+          print(body);
+        }
+        if (!options.printWasm) print("");
+      }
+
+      if (exportName != null) {
+        m.exportFunction(exportName, function);
+      } else if (options.exportAll) {
+        m.exportFunction(canonicalName, function);
+      }
+      var codeGen = CodeGenerator(this, function, reference);
+      codeGen.generate();
+
+      if (options.printWasm) {
+        print(function.type);
+        print(function.body.trace);
+      }
+
+      for (Lambda lambda in codeGen.closures.lambdas.values) {
+        CodeGenerator(this, lambda.function, reference)
+            .generateLambda(lambda, codeGen.closures);
+        _printFunction(lambda.function, "$canonicalName (closure)");
+      }
+    }
+
+    dispatchTable.output();
+    constants.finalize();
+    initFunction.body.end();
+
+    for (ConstantInfo info in constants.constantInfo.values) {
+      w.DefinedFunction? function = info.function;
+      if (function != null) {
+        _printFunction(function, info.constant);
+      } else {
+        if (options.printWasm) {
+          print("Global #${info.global.index}: ${info.constant}");
+          print(info.global.initializer.trace);
+        }
+      }
+    }
+    if (options.lazyConstants) {
+      _printFunction(constants.oneByteStringFunction, "makeOneByteString");
+      _printFunction(constants.twoByteStringFunction, "makeTwoByteString");
+    }
+    _printFunction(initFunction, "init");
+
+    return m.encode(emitNameSection: options.nameSection);
+  }
+
+  void _printFunction(w.DefinedFunction function, Object name) {
+    if (options.printWasm) {
+      print("#${function.index}: $name");
+      print(function.body.trace);
+    }
+  }
+
+  Class classForType(DartType type) {
+    return type is InterfaceType
+        ? type.classNode
+        : type is TypeParameterType
+            ? classForType(type.bound)
+            : coreTypes.objectClass;
+  }
+
+  /// Creates a [Tag] for a void [FunctionType] with two parameters,
+  /// a [topInfo.nonNullableType] parameter to hold an exception, and a
+  /// [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(
+        [topInfo.nonNullableType, stackTraceInfo.nonNullableType], const []);
+    w.Tag tag = m.addTag(functionType);
+    return tag;
+  }
+
+  w.ValueType translateType(DartType type) {
+    w.StorageType wasmType = translateStorageType(type);
+    if (wasmType is w.ValueType) return wasmType;
+    throw "Packed types are only allowed in arrays and fields";
+  }
+
+  bool isWasmType(Class cls) {
+    while (cls.superclass != null) {
+      cls = cls.superclass!;
+      if (cls == wasmTypesBaseClass) return true;
+    }
+    return false;
+  }
+
+  w.StorageType typeForInfo(ClassInfo info, bool nullable) {
+    Class? cls = info.cls;
+    if (cls != null) {
+      w.StorageType? builtin = builtinTypes[cls];
+      if (builtin != null) {
+        if (!nullable) return builtin;
+        if (isWasmType(cls)) {
+          if (builtin.isPrimitive) throw "Wasm numeric types can't be nullable";
+          return (builtin as w.RefType).withNullability(true);
+        }
+        Class? boxedClass = boxedClasses[builtin];
+        if (boxedClass != null) {
+          info = classInfo[boxedClass]!;
+        }
+      }
+    }
+    return w.RefType.def(info.repr.struct,
+        nullable: !options.parameterNullability || nullable);
+  }
+
+  w.StorageType translateStorageType(DartType type) {
+    if (type is InterfaceType) {
+      if (type.classNode.superclass == wasmArrayBaseClass) {
+        DartType elementType = type.typeArguments.single;
+        return w.RefType.def(arrayTypeForDartType(elementType),
+            nullable: false);
+      }
+      return typeForInfo(
+          classInfo[type.classNode]!, type.isPotentiallyNullable);
+    }
+    if (type is DynamicType) {
+      return topInfo.nullableType;
+    }
+    if (type is NullType) {
+      return topInfo.nullableType;
+    }
+    if (type is NeverType) {
+      return topInfo.nullableType;
+    }
+    if (type is VoidType) {
+      return voidMarker;
+    }
+    if (type is TypeParameterType) {
+      return translateStorageType(type.isPotentiallyNullable
+          ? type.bound.withDeclaredNullability(type.nullability)
+          : type.bound);
+    }
+    if (type is FutureOrType) {
+      return topInfo.nullableType;
+    }
+    if (type is FunctionType) {
+      if (type.requiredParameterCount != type.positionalParameters.length ||
+          type.namedParameters.isNotEmpty) {
+        throw "Function types with optional parameters not supported: $type";
+      }
+      return w.RefType.def(closureStructType(type.requiredParameterCount),
+          nullable:
+              !options.parameterNullability || type.isPotentiallyNullable);
+    }
+    throw "Unsupported type ${type.runtimeType}";
+  }
+
+  w.ArrayType arrayTypeForDartType(DartType type) {
+    while (type is TypeParameterType) type = type.bound;
+    return wasmArrayType(
+        translateStorageType(type), type.toText(defaultAstTextStrategy));
+  }
+
+  w.ArrayType wasmArrayType(w.StorageType type, String name) {
+    return arrayTypeCache.putIfAbsent(
+        type, () => arrayType("Array<$name>", elementType: w.FieldType(type)));
+  }
+
+  w.StructType closureStructType(int parameterCount) {
+    return functionTypeCache.putIfAbsent(parameterCount, () {
+      ClassInfo info = classInfo[functionClass]!;
+      w.StructType struct = structType("Function$parameterCount",
+          fields: info.struct.fields, superType: info.struct);
+      assert(struct.fields.length == FieldIndex.closureFunction);
+      struct.fields.add(w.FieldType(
+          w.RefType.def(closureFunctionType(parameterCount), nullable: false),
+          mutable: false));
+      if (options.useRttGlobals) {
+        functionTypeRtt[parameterCount] =
+            classInfoCollector.makeRtt(struct, info);
+      }
+      functionTypeParameterCount[struct] = parameterCount;
+      return struct;
+    });
+  }
+
+  w.FunctionType closureFunctionType(int parameterCount) {
+    return functionType([
+      w.RefType.data(),
+      ...List<w.ValueType>.filled(parameterCount, topInfo.nullableType)
+    ], [
+      topInfo.nullableType
+    ]);
+  }
+
+  int parameterCountForFunctionStruct(w.HeapType heapType) {
+    return functionTypeParameterCount[heapType]!;
+  }
+
+  w.DefinedGlobal makeFunctionRef(w.DefinedFunction f) {
+    return functionRefCache.putIfAbsent(f, () {
+      w.DefinedGlobal global = m.addGlobal(
+          w.GlobalType(w.RefType.def(f.type, nullable: false), mutable: false));
+      global.initializer.ref_func(f);
+      global.initializer.end();
+      return global;
+    });
+  }
+
+  w.DefinedFunction getTearOffFunction(Procedure member) {
+    return tearOffFunctionCache.putIfAbsent(member, () {
+      assert(member.kind == ProcedureKind.Method);
+      FunctionNode functionNode = member.function;
+      int parameterCount = functionNode.requiredParameterCount;
+      if (functionNode.positionalParameters.length != parameterCount ||
+          functionNode.namedParameters.isNotEmpty) {
+        throw "Not supported: Tear-off with optional parameters"
+            " at ${member.location}";
+      }
+      if (functionNode.typeParameters.isNotEmpty) {
+        throw "Not supported: Tear-off with type parameters"
+            " at ${member.location}";
+      }
+      w.FunctionType memberSignature = signatureFor(member.reference);
+      w.FunctionType closureSignature = closureFunctionType(parameterCount);
+      int signatureOffset = member.isInstanceMember ? 1 : 0;
+      assert(memberSignature.inputs.length == signatureOffset + parameterCount);
+      assert(closureSignature.inputs.length == 1 + parameterCount);
+      w.DefinedFunction function =
+          m.addFunction(closureSignature, "$member (tear-off)");
+      w.BaseFunction target = functions.getFunction(member.reference);
+      w.Instructions b = function.body;
+      for (int i = 0; i < memberSignature.inputs.length; i++) {
+        w.Local paramLocal = function.locals[(1 - signatureOffset) + i];
+        b.local_get(paramLocal);
+        convertType(function, paramLocal.type, memberSignature.inputs[i]);
+      }
+      b.call(target);
+      convertType(function, outputOrVoid(target.type.outputs),
+          outputOrVoid(closureSignature.outputs));
+      b.end();
+      return function;
+    });
+  }
+
+  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);
+  }
+
+  w.ValueType outputOrVoid(List<w.ValueType> outputs) {
+    return outputs.isEmpty ? voidMarker : outputs.single;
+  }
+
+  bool needsConversion(w.ValueType from, w.ValueType to) {
+    return (from == voidMarker) ^ (to == voidMarker) || !from.isSubtypeOf(to);
+  }
+
+  void convertType(
+      w.DefinedFunction function, w.ValueType from, w.ValueType to) {
+    w.Instructions b = function.body;
+    if (from == voidMarker || to == voidMarker) {
+      if (from != voidMarker) {
+        b.drop();
+        return;
+      }
+      if (to != voidMarker) {
+        if (to is w.RefType && to.nullable) {
+          // This can happen when a void method has its return type overridden to
+          // return a value, in which case the selector signature will have a
+          // non-void return type to encompass all possible return values.
+          b.ref_null(to.heapType);
+        } else {
+          // This only happens in invalid but unreachable code produced by the
+          // TFA dead-code elimination.
+          b.comment("Non-nullable void conversion");
+          b.unreachable();
+        }
+        return;
+      }
+    }
+    if (!from.isSubtypeOf(to)) {
+      if (from is! w.RefType && to is w.RefType) {
+        // Boxing
+        ClassInfo info = classInfo[boxedClasses[from]!]!;
+        assert(info.struct.isSubtypeOf(to.heapType));
+        w.Local temp = function.addLocal(from);
+        b.local_set(temp);
+        b.i32_const(info.classId);
+        b.local_get(temp);
+        struct_new(b, info);
+      } else if (from is w.RefType && to is! w.RefType) {
+        // Unboxing
+        ClassInfo info = classInfo[boxedClasses[to]!]!;
+        if (!from.heapType.isSubtypeOf(info.struct)) {
+          // Cast to box type
+          if (!from.heapType.isSubtypeOf(w.HeapType.data)) {
+            b.ref_as_data();
+          }
+          ref_cast(b, info);
+        }
+        b.struct_get(info.struct, FieldIndex.boxValue);
+      } else if (from.withNullability(false).isSubtypeOf(to)) {
+        // Null check
+        b.ref_as_non_null();
+      } else {
+        // Downcast
+        var heapType = (to as w.RefType).heapType;
+        ClassInfo? info = classForHeapType[heapType];
+        if (from.nullable && !to.nullable) {
+          b.ref_as_non_null();
+        }
+        if (!(from as w.RefType).heapType.isSubtypeOf(w.HeapType.data)) {
+          b.ref_as_data();
+        }
+        ref_cast(
+            b,
+            info ??
+                (heapType.isSubtypeOf(classInfo[functionClass]!.struct)
+                    ? parameterCountForFunctionStruct(heapType)
+                    : heapType));
+      }
+    }
+  }
+
+  w.FunctionType signatureFor(Reference target) {
+    Member member = target.asMember;
+    if (member.isInstanceMember) {
+      return dispatchTable.selectorForTarget(target).signature;
+    } else {
+      return functions.getFunction(target).type;
+    }
+  }
+
+  ParameterInfo paramInfoFor(Reference target) {
+    Member member = target.asMember;
+    if (member.isInstanceMember) {
+      return dispatchTable.selectorForTarget(target).paramInfo;
+    } else {
+      return staticParamInfo.putIfAbsent(
+          target, () => ParameterInfo.fromMember(target));
+    }
+  }
+
+  Member? singleTarget(TreeNode node) {
+    DirectCallMetadataRepository metadata =
+        component.metadata[DirectCallMetadataRepository.repositoryTag]
+            as DirectCallMetadataRepository;
+    return metadata.mapping[node]?.target;
+  }
+
+  bool shouldInline(Reference target) {
+    if (!options.inlining) return false;
+    Member member = target.asMember;
+    if (member is Field) return true;
+    Statement? body = member.function!.body;
+    return body != null &&
+        NodeCounter().countNodes(body) <= options.inliningLimit;
+  }
+
+  T? getPragma<T>(Annotatable node, String name, [T? defaultvalue]) {
+    for (Expression annotation in node.annotations) {
+      if (annotation is ConstantExpression) {
+        Constant constant = annotation.constant;
+        if (constant is InstanceConstant) {
+          if (constant.classNode == coreTypes.pragmaClass) {
+            Constant? nameConstant =
+                constant.fieldValues[coreTypes.pragmaName.fieldReference];
+            if (nameConstant is StringConstant && nameConstant.value == name) {
+              Object? value =
+                  constant.fieldValues[coreTypes.pragmaOptions.fieldReference];
+              if (value is PrimitiveConstant<T>) {
+                return value.value;
+              }
+              return value as T? ?? defaultvalue;
+            }
+          }
+        }
+      }
+    }
+    return null;
+  }
+
+  // Wrappers for type creation to abstract over equi-recursive versus nominal
+  // typing. The given supertype is ignored when nominal types are disabled,
+  // and a suitable default is inserted when nominal types are enabled.
+
+  w.FunctionType functionType(
+      Iterable<w.ValueType> inputs, Iterable<w.ValueType> outputs,
+      {w.HeapType? superType}) {
+    return m.addFunctionType(inputs, outputs,
+        superType: options.nominalTypes ? superType ?? w.HeapType.func : null);
+  }
+
+  w.StructType structType(String name,
+      {Iterable<w.FieldType>? fields, w.HeapType? superType}) {
+    return m.addStructType(name,
+        fields: fields,
+        superType: options.nominalTypes ? superType ?? w.HeapType.data : null);
+  }
+
+  w.ArrayType arrayType(String name,
+      {w.FieldType? elementType, w.HeapType? superType}) {
+    return m.addArrayType(name,
+        elementType: elementType,
+        superType: options.nominalTypes ? superType ?? w.HeapType.data : null);
+  }
+
+  // Wrappers for object allocation and cast instructions to abstract over
+  // RTT-based and static versions of the instructions.
+  // The [type] parameter taken by the methods is either a [ClassInfo] (to use
+  // the RTT for the class), an [int] (to use the RTT for the closure struct
+  // corresponding to functions with that number of parameters) or a
+  // [w.DataType] (to use the canonical RTT for the type).
+
+  void struct_new(w.Instructions b, Object type) {
+    if (options.runtimeTypes) {
+      final struct = _emitRtt(b, type) as w.StructType;
+      b.struct_new_with_rtt(struct);
+    } else {
+      b.struct_new(_targetType(type) as w.StructType);
+    }
+  }
+
+  void struct_new_default(w.Instructions b, Object type) {
+    if (options.runtimeTypes) {
+      final struct = _emitRtt(b, type) as w.StructType;
+      b.struct_new_default_with_rtt(struct);
+    } else {
+      b.struct_new_default(_targetType(type) as w.StructType);
+    }
+  }
+
+  void array_new(w.Instructions b, w.ArrayType type) {
+    if (options.runtimeTypes) {
+      b.rtt_canon(type);
+      b.array_new_with_rtt(type);
+    } else {
+      b.array_new(type);
+    }
+  }
+
+  void array_new_default(w.Instructions b, w.ArrayType type) {
+    if (options.runtimeTypes) {
+      b.rtt_canon(type);
+      b.array_new_default_with_rtt(type);
+    } else {
+      b.array_new_default(type);
+    }
+  }
+
+  void array_init(w.Instructions b, w.ArrayType type, int length) {
+    if (options.runtimeTypes) {
+      b.rtt_canon(type);
+      b.array_init(type, length);
+    } else {
+      b.array_init_static(type, length);
+    }
+  }
+
+  void array_init_from_data(
+      w.Instructions b, w.ArrayType type, w.DataSegment data) {
+    if (options.runtimeTypes) {
+      b.rtt_canon(type);
+      b.array_init_from_data(type, data);
+    } else {
+      b.array_init_from_data_static(type, data);
+    }
+  }
+
+  void ref_test(w.Instructions b, Object type) {
+    if (options.runtimeTypes) {
+      _emitRtt(b, type);
+      b.ref_test();
+    } else {
+      b.ref_test_static(_targetType(type));
+    }
+  }
+
+  void ref_cast(w.Instructions b, Object type) {
+    if (options.runtimeTypes) {
+      _emitRtt(b, type);
+      b.ref_cast();
+    } else {
+      b.ref_cast_static(_targetType(type));
+    }
+  }
+
+  void br_on_cast(w.Instructions b, w.Label label, Object type) {
+    if (options.runtimeTypes) {
+      _emitRtt(b, type);
+      b.br_on_cast(label);
+    } else {
+      b.br_on_cast_static(label, _targetType(type));
+    }
+  }
+
+  void br_on_cast_fail(w.Instructions b, w.Label label, Object type) {
+    if (options.runtimeTypes) {
+      _emitRtt(b, type);
+      b.br_on_cast_fail(label);
+    } else {
+      b.br_on_cast_static_fail(label, _targetType(type));
+    }
+  }
+
+  w.DefType _emitRtt(w.Instructions b, Object type) {
+    if (type is ClassInfo) {
+      if (options.nominalTypes) {
+        b.rtt_canon(type.struct);
+      } else {
+        b.global_get(type.rtt);
+      }
+      return type.struct;
+    } else if (type is int) {
+      int parameterCount = type;
+      w.StructType struct = closureStructType(parameterCount);
+      if (options.nominalTypes) {
+        b.rtt_canon(struct);
+      } else {
+        w.DefinedGlobal rtt = functionTypeRtt[parameterCount]!;
+        b.global_get(rtt);
+      }
+      return struct;
+    } else {
+      b.rtt_canon(type as w.DataType);
+      return type;
+    }
+  }
+
+  w.DefType _targetType(Object type) => type is ClassInfo
+      ? type.struct
+      : type is int
+          ? closureStructType(type)
+          : type as w.DefType;
+}
+
+class NodeCounter extends Visitor<void> with VisitorVoidMixin {
+  int count = 0;
+
+  int countNodes(Node node) {
+    count = 0;
+    node.accept(this);
+    return count;
+  }
+
+  @override
+  void defaultNode(Node node) {
+    count++;
+    node.visitChildren(this);
+  }
+}
diff --git a/pkg/dart2wasm/pubspec.yaml b/pkg/dart2wasm/pubspec.yaml
new file mode 100644
index 0000000..dd0b8de
--- /dev/null
+++ b/pkg/dart2wasm/pubspec.yaml
@@ -0,0 +1,26 @@
+name: dart2wasm
+# This package is not intended for consumption on pub.dev. DO NOT publish.
+publish_to: none
+environment:
+  sdk: '>=2.12.0'
+
+dependencies:
+  front_end:
+    path: ../front_end
+  kernel:
+    path: ../kernel
+  vm:
+    path: ../vm
+  wasm_builder:
+    path: ../wasm_builder
+
+dependency_overrides:
+  # Packages with source in the SDK
+  front_end:
+    path: ../front_end
+  kernel:
+    path: ../kernel
+  vm:
+    path: ../vm
+  wasm_builder:
+    path: ../wasm_builder
diff --git a/pkg/dart_internal/OWNERS b/pkg/dart_internal/OWNERS
new file mode 100644
index 0000000..876a884
--- /dev/null
+++ b/pkg/dart_internal/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_FOUNDATION
diff --git a/pkg/dartdev/OWNERS b/pkg/dartdev/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/pkg/dartdev/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/pkg/dartdev/analysis_options.yaml b/pkg/dartdev/analysis_options.yaml
index 3faacee..094baf6 100644
--- a/pkg/dartdev/analysis_options.yaml
+++ b/pkg/dartdev/analysis_options.yaml
@@ -8,4 +8,5 @@
     # Enable additional rules.
     depend_on_referenced_packages: true
     directives_ordering: true
+    prefer_single_quotes: true
     sort_pub_dependencies: true
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index e8ae525..d135042 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -44,10 +44,14 @@
 
   Process? _process;
 
-  Completer<bool> _analysisFinished = Completer();
+  /// When not null, this is a [Completer] which completes when analysis has
+  /// finished, otherwise `null`.
+  Completer<bool>? _analysisFinished;
 
   int _id = 0;
 
+  bool _shutdownResponseReceived = false;
+
   Stream<bool> get onAnalyzing {
     // {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
     return _streamController('server.status')
@@ -59,7 +63,7 @@
   /// This future completes when we next receive an analysis finished event
   /// (unless there's no current analysis and we've already received a complete
   /// event, in which case this future completes immediately).
-  Future<bool> get analysisFinished => _analysisFinished.future;
+  Future<bool>? get analysisFinished => _analysisFinished?.future;
 
   Stream<FileAnalysisErrors> get onErrors {
     // {"event":"analysis.errors","params":{"file":"/Users/.../lib/main.dart","errors":[]}}
@@ -80,11 +84,16 @@
   final Map<String, StreamController<Map<String, dynamic>>> _streamControllers =
       {};
 
+  /// Completes when an analysis server crash has been detected.
+  Future<void> get onCrash => _onCrash.future;
+
+  final _onCrash = Completer<void>();
+
   final Map<String, Completer<Map<String, dynamic>>> _requestCompleters = {};
 
-  Future<void> start() async {
+  Future<void> start({bool setAnalysisRoots = true}) async {
     preAnalysisServerStart?.call(commandName, analysisRoots, argResults);
-    final List<String> command = <String>[
+    final command = [
       sdk.analysisServerSnapshot,
       '--${Driver.SUPPRESS_ANALYTICS_FLAG}',
       '--${Driver.CLIENT_ID}=dart-$commandName',
@@ -96,16 +105,41 @@
       if (packagesFile != null) '--packages=${packagesFile!.path}',
     ];
 
-    _process = await startDartProcess(sdk, command);
+    final process = await startDartProcess(sdk, command);
+    _process = process;
+    _shutdownResponseReceived = false;
     // This callback hookup can't throw.
-    _process!.exitCode.whenComplete(() => _process = null);
+    process.exitCode.whenComplete(() {
+      _process = null;
 
-    final Stream<String> errorStream = _process!.stderr
+      if (!_shutdownResponseReceived) {
+        // The process exited unexpectedly. Report the crash.
+        // If `server.error` reported an error, that has been logged by
+        // `_handleServerError`.
+
+        final error = StateError('The analysis server crashed unexpectedly');
+
+        final analysisFinished = _analysisFinished;
+        if (analysisFinished != null && !analysisFinished.isCompleted) {
+          // Complete this completer in order to unstick the process.
+          analysisFinished.completeError(error);
+        }
+
+        // Complete these completers in order to unstick the process.
+        for (final completer in _requestCompleters.values) {
+          completer.completeError(error);
+        }
+
+        _onCrash.complete();
+      }
+    });
+
+    final errorStream = process.stderr
         .transform<String>(utf8.decoder)
         .transform<String>(const LineSplitter());
     errorStream.listen(log.stderr);
 
-    final Stream<String> inStream = _process!.stdout
+    final inStream = process.stdout
         .transform<String>(utf8.decoder)
         .transform<String>(const LineSplitter());
     inStream.listen(_handleServerResponse);
@@ -120,27 +154,33 @@
     // protocol throws an error (INVALID_FILE_PATH_FORMAT) if there is a
     // trailing slash.
     //
-    // The call to absolute.resolveSymbolicLinksSync() canonicalizes the path to
-    // be passed to the analysis server.
-    List<String> analysisRootPaths = analysisRoots.map((root) {
-      return trimEnd(
-          root.absolute.resolveSymbolicLinksSync(), path.context.separator)!;
-    }).toList();
+    // The call to `absolute.resolveSymbolicLinksSync()` canonicalizes the path
+    // to be passed to the analysis server.
+    final analysisRootPaths = [
+      for (final root in analysisRoots)
+        trimEnd(
+            root.absolute.resolveSymbolicLinksSync(), path.context.separator),
+    ];
 
-    onAnalyzing.listen((bool isAnalyzing) {
-      if (isAnalyzing && _analysisFinished.isCompleted) {
+    onAnalyzing.listen((isAnalyzing) {
+      final analysisFinished = _analysisFinished;
+      if (isAnalyzing && (analysisFinished?.isCompleted ?? true)) {
         // Start a new completer, to be completed when we receive the
         // corresponding analysis complete event.
         _analysisFinished = Completer();
-      } else if (!isAnalyzing && !_analysisFinished.isCompleted) {
-        _analysisFinished.complete(true);
+      } else if (!isAnalyzing &&
+          analysisFinished != null &&
+          !analysisFinished.isCompleted) {
+        analysisFinished.complete(true);
       }
     });
 
-    await _sendCommand('analysis.setAnalysisRoots', params: <String, dynamic>{
-      'included': analysisRootPaths,
-      'excluded': <String>[]
-    });
+    if (setAnalysisRoots) {
+      await _sendCommand('analysis.setAnalysisRoots', params: {
+        'included': analysisRootPaths,
+        'excluded': [],
+      });
+    }
   }
 
   Future<String> getVersion() {
@@ -162,6 +202,7 @@
   Future<void> shutdown({Duration timeout = const Duration(seconds: 5)}) async {
     // Request shutdown.
     await _sendCommand('server.shutdown').then((value) {
+      _shutdownResponseReceived = true;
       return null;
     }).timeout(timeout, onTimeout: () async {
       await dispose();
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 1112fe8..7bcc9c5 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -81,7 +81,7 @@
   String get invocation => '${super.invocation} [<directory>]';
 
   @override
-  FutureOr<int> run() async {
+  Future<int> run() async {
     final args = argResults!;
     // Find targets from the 'rest' params.
     final List<io.FileSystemEntity> targets = [];
@@ -135,6 +135,12 @@
       }
     });
 
+    server.onCrash.then((_) {
+      log.stderr('The analysis server shut down unexpectedly.');
+      log.stdout('Please report this at dartbug.com.');
+      io.exit(1);
+    });
+
     await server.analysisFinished;
     analysisFinished = true;
 
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 6e3d600..295bc86 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -23,38 +23,21 @@
   final String help;
   final String? abbr;
   final String? defaultsTo;
+  final String? valueHelp;
   final List<String>? allowed;
   final Map<String, String>? allowedHelp;
 
-  Option(
-      {required this.flag,
-      required this.help,
-      this.abbr,
-      this.defaultsTo,
-      this.allowed,
-      this.allowedHelp});
+  const Option({
+    required this.flag,
+    required this.help,
+    this.abbr,
+    this.defaultsTo,
+    this.valueHelp,
+    this.allowed,
+    this.allowedHelp,
+  });
 }
 
-final Map<String, Option> commonOptions = {
-  'outputFile': Option(
-    flag: 'output',
-    abbr: 'o',
-    help: '''
-Write the output to <file name>.
-This can be an absolute or relative path.
-''',
-  ),
-  'verbosity': Option(
-    flag: 'verbosity',
-    help: '''
-Sets the verbosity level of the compilation.
-''',
-    defaultsTo: Verbosity.defaultValue,
-    allowed: Verbosity.allowedValues,
-    allowedHelp: Verbosity.allowedValuesHelp,
-  ),
-};
-
 bool checkFile(String sourcePath) {
   if (!FileSystemEntity.isFileSync(sourcePath)) {
     stderr.writeln('"$sourcePath" file not found.');
@@ -117,19 +100,24 @@
   }) : super(commandName, 'Compile Dart $help', verbose) {
     argParser
       ..addOption(
-        commonOptions['outputFile']!.flag,
-        help: commonOptions['outputFile']!.help,
-        abbr: commonOptions['outputFile']!.abbr,
+        outputFileOption.flag,
+        help: outputFileOption.help,
+        abbr: outputFileOption.abbr,
       )
       ..addOption(
-        commonOptions['verbosity']!.flag,
-        help: commonOptions['verbosity']!.help,
-        abbr: commonOptions['verbosity']!.abbr,
-        defaultsTo: commonOptions['verbosity']!.defaultsTo,
-        allowed: commonOptions['verbosity']!.allowed,
-        allowedHelp: commonOptions['verbosity']!.allowedHelp,
+        verbosityOption.flag,
+        help: verbosityOption.help,
+        abbr: verbosityOption.abbr,
+        defaultsTo: verbosityOption.defaultsTo,
+        allowed: verbosityOption.allowed,
+        allowedHelp: verbosityOption.allowedHelp,
+      )
+      ..addMultiOption(
+        defineOption.flag,
+        help: defineOption.help,
+        abbr: defineOption.abbr,
+        valueHelp: defineOption.valueHelp,
       );
-
     addExperimentalFlags(argParser, verbose);
   }
 
@@ -160,7 +148,7 @@
     }
 
     // Determine output file name.
-    String? outputFile = args[commonOptions['outputFile']!.flag];
+    String? outputFile = args[outputFileOption.flag];
     if (outputFile == null) {
       final inputWithoutDart = sourcePath.endsWith('.dart')
           ? sourcePath.substring(0, sourcePath.length - 5)
@@ -169,12 +157,13 @@
     }
 
     final enabledExperiments = args.enabledExperiments;
+    final environmentVars = args['define'] ?? <String, String>{};
     // Build arguments.
     List<String> buildArgs = [];
     buildArgs.add('--snapshot-kind=$formatName');
     buildArgs.add('--snapshot=${path.canonicalize(outputFile)}');
 
-    String? verbosity = args[commonOptions['verbosity']!.flag];
+    String? verbosity = args[verbosityOption.flag];
     buildArgs.add('--verbosity=$verbosity');
 
     if (enabledExperiments.isNotEmpty) {
@@ -183,6 +172,9 @@
     if (verbose) {
       buildArgs.add('-v');
     }
+    if (environmentVars.isNotEmpty) {
+      buildArgs.addAll(environmentVars.map<String>((e) => '--define=$e'));
+    }
     buildArgs.add(path.canonicalize(sourcePath));
 
     // Add the training arguments.
@@ -214,21 +206,24 @@
   }) : super(commandName, 'Compile Dart $help', verbose) {
     argParser
       ..addOption(
-        commonOptions['outputFile']!.flag,
-        help: commonOptions['outputFile']!.help,
-        abbr: commonOptions['outputFile']!.abbr,
+        outputFileOption.flag,
+        help: outputFileOption.help,
+        abbr: outputFileOption.abbr,
       )
       ..addOption(
-        commonOptions['verbosity']!.flag,
-        help: commonOptions['verbosity']!.help,
-        abbr: commonOptions['verbosity']!.abbr,
-        defaultsTo: commonOptions['verbosity']!.defaultsTo,
-        allowed: commonOptions['verbosity']!.allowed,
-        allowedHelp: commonOptions['verbosity']!.allowedHelp,
+        verbosityOption.flag,
+        help: verbosityOption.help,
+        abbr: verbosityOption.abbr,
+        defaultsTo: verbosityOption.defaultsTo,
+        allowed: verbosityOption.allowed,
+        allowedHelp: verbosityOption.allowedHelp,
       )
-      ..addMultiOption('define', abbr: 'D', valueHelp: 'key=value', help: '''
-Define an environment declaration. To specify multiple declarations, use multiple options or use commas to separate key-value pairs.
-For example: dart compile $commandName -Da=1,b=2 main.dart''')
+      ..addMultiOption(
+        defineOption.flag,
+        help: defineOption.help,
+        abbr: defineOption.abbr,
+        valueHelp: defineOption.valueHelp,
+      )
       ..addFlag('enable-asserts',
           negatable: false, help: 'Enable assert statements.')
       ..addOption('packages',
@@ -307,9 +302,36 @@
 }
 
 abstract class CompileSubcommandCommand extends DartdevCommand {
+  final outputFileOption = Option(
+    flag: 'output',
+    abbr: 'o',
+    help: '''
+Write the output to <file name>.
+This can be an absolute or relative path.
+''',
+  );
+  final verbosityOption = Option(
+    flag: 'verbosity',
+    help: '''
+Sets the verbosity level of the compilation.
+''',
+    defaultsTo: Verbosity.defaultValue,
+    allowed: Verbosity.allowedValues,
+    allowedHelp: Verbosity.allowedValuesHelp,
+  );
+  late final Option defineOption;
+
   CompileSubcommandCommand(String name, String description, bool verbose,
       {bool hidden = false})
-      : super(name, description, verbose, hidden: hidden);
+      : defineOption = Option(
+          flag: 'define',
+          abbr: 'D',
+          valueHelp: 'key=value',
+          help: '''
+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''',
+        ),
+        super(name, description, verbose, hidden: hidden);
 }
 
 class CompileCommand extends DartdevCommand {
diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart
index 8d20bee..959c7bf 100644
--- a/pkg/dartdev/lib/src/commands/create.dart
+++ b/pkg/dartdev/lib/src/commands/create.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io' as io;
-import 'dart:math' as math;
 
 import 'package:path/path.dart' as p;
 
@@ -18,16 +17,26 @@
 class CreateCommand extends DartdevCommand {
   static const String cmdName = 'create';
 
-  static String defaultTemplateId = 'console-simple';
+  static const String defaultTemplateId = 'console';
 
-  static final List<String> legalTemplateIds =
-      generators.map((generator) => generator.id).toList();
+  static List<String> legalTemplateIds({bool includeDeprecated = false}) => [
+        for (var g in generators) ...[
+          if (includeDeprecated || !g.deprecated) g.id,
+          if (includeDeprecated && g.alternateId != null) g.alternateId!
+        ]
+      ];
+
+  static final Map<String, String> templateHelp = {
+    for (var g in generators)
+      if (!g.deprecated) g.id: g.description
+  };
 
   CreateCommand({bool verbose = false})
       : super(cmdName, 'Create a new Dart project.', verbose) {
     argParser.addOption(
       'template',
-      allowed: legalTemplateIds,
+      allowed: legalTemplateIds(includeDeprecated: true),
+      allowedHelp: templateHelp,
       help: 'The project template to use.',
       defaultsTo: defaultTemplateId,
       abbr: 't',
@@ -145,18 +154,9 @@
     return 0;
   }
 
-  @override
-  String get usageFooter {
-    int width = legalTemplateIds.map((s) => s.length).reduce(math.max);
-    String desc = generators.map((g) {
-      String suffix = g.id == defaultTemplateId ? ' (default)' : '';
-      return '  ${g.id.padLeft(width)}: ${g.description}$suffix';
-    }).join('\n');
-    return '\nAvailable templates:\n$desc';
-  }
-
   String _availableTemplatesJson() {
-    var items = generators.map((Generator generator) {
+    var items =
+        generators.where((g) => !g.deprecated).map((Generator generator) {
       var m = {
         'name': generator.id,
         'label': generator.label,
diff --git a/pkg/dartdev/lib/src/commands/devtools.dart b/pkg/dartdev/lib/src/commands/devtools.dart
index 63ff69c..4163e0d 100644
--- a/pkg/dartdev/lib/src/commands/devtools.dart
+++ b/pkg/dartdev/lib/src/commands/devtools.dart
@@ -14,7 +14,10 @@
   DevToolsCommand({
     this.customDevToolsPath,
     bool verbose = false,
-  })  : _argParser = DevToolsServer.buildArgParser(verbose: verbose),
+  })  : _argParser = DevToolsServer.buildArgParser(
+          verbose: verbose,
+          includeHelpOption: false,
+        ),
         super(
           'devtools',
           DevToolsServer.commandDescription,
diff --git a/pkg/dartdev/lib/src/commands/doc.dart b/pkg/dartdev/lib/src/commands/doc.dart
index 11e1df7..fb9d38a 100644
--- a/pkg/dartdev/lib/src/commands/doc.dart
+++ b/pkg/dartdev/lib/src/commands/doc.dart
@@ -49,12 +49,10 @@
       negatable: false,
       help: 'Try to generate the docs without saving them.',
     );
-    argParser.addFlag('fatal-warnings',
-        help: 'Treat warning level issues as fatal.', defaultsTo: false);
   }
 
   @override
-  String get invocation => '${super.invocation} <input directory>';
+  String get invocation => '${super.invocation} [<directory>]';
 
   @override
   FutureOr<int> run() async {
@@ -64,18 +62,19 @@
     if (args['sdk-docs']) {
       options.add('--sdk-docs');
     } else {
-      // At least one argument, the input directory, is required,
-      // when we're not generating docs for the Dart SDK.
-      if (args.rest.isEmpty) {
-        usageException("Error: Input directory not specified");
+      if (args.rest.length > 1) {
+        usageException("'dart doc' only supports one input directory.'");
       }
 
-      // Determine input directory.
-      final dir = io.Directory(args.rest[0]);
-      if (!dir.existsSync()) {
-        usageException("Error: Input directory doesn't exist: ${dir.path}");
+      // Determine input directory; default to the cwd if no explicit input dir
+      // is passed in.
+      final directory = args.rest.isEmpty
+          ? io.Directory.current
+          : io.Directory(args.rest.first);
+      if (!directory.existsSync()) {
+        usageException('Input directory doesn\'t exist: ${directory.path}');
       }
-      options.add('--input=${dir.path}');
+      options.add('--input=${directory.path}');
     }
 
     // Specify where dartdoc resources are located.
@@ -86,12 +85,12 @@
     options.addAll([
       '--output=${args['output']}',
       '--resources-dir=$resourcesPath',
-      if (args['validate-links']) '--validate-links',
+      args['validate-links'] ? '--validate-links' : '--no-validate-links',
       if (args['dry-run']) '--no-generate-docs',
-      if (verbose) '--no-quiet',
+      if (verbose) ...['--verbose-warnings', '--show-stats'],
     ]);
 
-    final config = await parseOptions(pubPackageMetaProvider, options);
+    final config = parseOptions(pubPackageMetaProvider, options);
     if (config == null) {
       // There was an error while parsing options.
       return 2;
@@ -106,7 +105,7 @@
         config, pubPackageMetaProvider, packageConfigProvider);
     final dartdoc = config.generateDocs
         ? await Dartdoc.fromContext(config, packageBuilder)
-        : await Dartdoc.withEmptyGenerator(config, packageBuilder);
+        : Dartdoc.withEmptyGenerator(config, packageBuilder);
     dartdoc.executeGuarded();
     return 0;
   }
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index 8fd6db9..dffebaa 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -64,7 +64,7 @@
   }
 
   @override
-  FutureOr<int> run() async {
+  Future<int> run() async {
     final args = argResults!;
     var dryRun = args['dry-run'];
     var inTestMode = args['compare-to-golden'];
@@ -102,7 +102,7 @@
       argResults: argResults,
     );
 
-    await server.start();
+    await server.start(setAnalysisRoots: false);
 
     server.onExit.then((int exitCode) {
       if (computeFixesProgress != null && exitCode != 0) {
@@ -112,6 +112,12 @@
       }
     });
 
+    server.onCrash.then((_) {
+      log.stderr('The analysis server shut down unexpectedly.');
+      log.stdout('Please report this at dartbug.com.');
+      io.exit(1);
+    });
+
     Future<Map<String, BulkFix>> _applyAllEdits() async {
       var detailsMap = <String, BulkFix>{};
       List<SourceFileEdit> edits;
diff --git a/pkg/dartdev/lib/src/commands/run.dart b/pkg/dartdev/lib/src/commands/run.dart
index ea0ce59..94b0141 100644
--- a/pkg/dartdev/lib/src/commands/run.dart
+++ b/pkg/dartdev/lib/src/commands/run.dart
@@ -20,7 +20,7 @@
 import '../vm_interop_handler.dart';
 
 class RunCommand extends DartdevCommand {
-  static const bool isProductMode = bool.fromEnvironment("dart.vm.product");
+  static const bool isProductMode = bool.fromEnvironment('dart.vm.product');
   static const String cmdName = 'run';
 
   // kErrorExitCode, as defined in runtime/bin/error_exit.h
diff --git a/pkg/dartdev/lib/src/templates.dart b/pkg/dartdev/lib/src/templates.dart
index ee1938a..2df9ad1 100644
--- a/pkg/dartdev/lib/src/templates.dart
+++ b/pkg/dartdev/lib/src/templates.dart
@@ -8,25 +8,30 @@
 import 'package:meta/meta.dart';
 import 'package:path/path.dart' as p;
 
-import 'templates/console_full.dart';
+import 'templates/console.dart';
 import 'templates/console_simple.dart';
-import 'templates/package_simple.dart';
+import 'templates/package.dart';
 import 'templates/server_shelf.dart';
-import 'templates/web_simple.dart';
+import 'templates/web.dart';
 
 final _substituteRegExp = RegExp(r'__([a-zA-Z]+)__');
 final _nonValidSubstituteRegExp = RegExp(r'[^a-zA-Z]');
 
 final List<Generator> generators = [
-  ConsoleSimpleGenerator(),
-  ConsoleFullGenerator(),
-  PackageSimpleGenerator(),
+  ConsoleGenerator(),
+  PackageGenerator(),
   ServerShelfGenerator(),
-  WebSimpleGenerator(),
+  WebGenerator(),
+  // Deprecated generators:
+  ConsoleSimpleGenerator(),
 ];
 
-Generator? getGenerator(String id) =>
-    generators.firstWhereOrNull((g) => g.id == id);
+Generator? getGenerator(String id) {
+  Generator? result;
+  result = generators.firstWhereOrNull((g) => g.id == id);
+  result ??= generators.firstWhereOrNull((g) => g.alternateId == id);
+  return result;
+}
 
 /// An abstract class which both defines a template generator and can generate a
 /// user project based on this template.
@@ -34,7 +39,9 @@
   final String id;
   final String label;
   final String description;
+  final String? alternateId;
   final List<String> categories;
+  final bool deprecated;
 
   final List<TemplateFile> files = [];
   TemplateFile? _entrypoint;
@@ -49,6 +56,8 @@
     this.label,
     this.description, {
     this.categories = const [],
+    this.alternateId,
+    this.deprecated = false,
   });
 
   String get lowerCaseId => _lowerCaseId ??= id.toLowerCase();
@@ -134,8 +143,17 @@
     String id,
     String label,
     String description, {
+    String? alternateId,
     List<String> categories = const [],
-  }) : super(id, label, description, categories: categories);
+    bool deprecated = false,
+  }) : super(
+          id,
+          label,
+          description,
+          categories: categories,
+          alternateId: alternateId,
+          deprecated: deprecated,
+        );
 }
 
 /// A target for a [Generator]. This class knows how to create files given a
diff --git a/pkg/dartdev/lib/src/templates/common.dart b/pkg/dartdev/lib/src/templates/common.dart
index ac53756..3c4a79c 100644
--- a/pkg/dartdev/lib/src/templates/common.dart
+++ b/pkg/dartdev/lib/src/templates/common.dart
@@ -4,9 +4,7 @@
 
 import '../sdk.dart';
 
-String get sdkConstraint => '''
-  sdk: '>=${sdk.version} <3.0.0'
-''';
+String get sdkConstraint => "sdk: '>=${sdk.version} <3.0.0'";
 
 const String gitignore = '''
 # Files and directories created by pub.
diff --git a/pkg/dartdev/lib/src/templates/console.dart b/pkg/dartdev/lib/src/templates/console.dart
new file mode 100644
index 0000000..8dae875
--- /dev/null
+++ b/pkg/dartdev/lib/src/templates/console.dart
@@ -0,0 +1,83 @@
+// 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 '../templates.dart';
+import 'common.dart' as common;
+
+/// A generator for a hello world command-line application.
+class ConsoleGenerator extends DefaultGenerator {
+  ConsoleGenerator()
+      : super(
+          'console',
+          'Console Application',
+          'A command-line application.',
+          alternateId: 'console-full',
+          categories: const ['dart', 'console'],
+        ) {
+    addFile('.gitignore', common.gitignore);
+    addFile('analysis_options.yaml', common.analysisOptions);
+    addFile('CHANGELOG.md', common.changelog);
+    addFile('pubspec.yaml', _pubspec);
+    addFile('README.md', _readme);
+    setEntrypoint(
+      addFile('bin/__projectName__.dart', _mainDart),
+    );
+    addFile('lib/__projectName__.dart', _libDart);
+    addFile('test/__projectName___test.dart', _testDart);
+  }
+
+  @override
+  String getInstallInstructions(
+    String directory, {
+    String? scriptPath,
+  }) =>
+      super.getInstallInstructions(directory);
+}
+
+final String _pubspec = '''
+name: __projectName__
+description: A sample command-line application.
+version: 1.0.0
+# homepage: https://www.example.com
+
+environment:
+  ${common.sdkConstraint}
+
+# dependencies:
+#   path: ^1.8.0
+
+dev_dependencies:
+  lints: ^1.0.0
+  test: ^1.16.0
+''';
+
+final String _readme = '''
+A sample command-line application with an entrypoint in `bin/`, library code
+in `lib/`, and example unit test in `test/`.
+''';
+
+final String _mainDart = r'''
+import 'package:__projectName__/__projectName__.dart' as __projectName__;
+
+void main(List<String> arguments) {
+  print('Hello world: ${__projectName__.calculate()}!');
+}
+''';
+
+final String _libDart = '''
+int calculate() {
+  return 6 * 7;
+}
+''';
+
+final String _testDart = '''
+import 'package:__projectName__/__projectName__.dart';
+import 'package:test/test.dart';
+
+void main() {
+  test('calculate', () {
+    expect(calculate(), 42);
+  });
+}
+''';
diff --git a/pkg/dartdev/lib/src/templates/console_full.dart b/pkg/dartdev/lib/src/templates/console_full.dart
deleted file mode 100644
index d4c2965..0000000
--- a/pkg/dartdev/lib/src/templates/console_full.dart
+++ /dev/null
@@ -1,79 +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 '../templates.dart';
-import 'common.dart' as common;
-
-/// A generator for a hello world command-line application.
-class ConsoleFullGenerator extends DefaultGenerator {
-  ConsoleFullGenerator()
-      : super('console-full', 'Console Application',
-            'A command-line application sample.',
-            categories: const ['dart', 'console']) {
-    addFile('.gitignore', common.gitignore);
-    addFile('analysis_options.yaml', common.analysisOptions);
-    addFile('CHANGELOG.md', common.changelog);
-    addFile('pubspec.yaml', _pubspec);
-    addFile('README.md', _readme);
-    setEntrypoint(
-      addFile('bin/__projectName__.dart', _mainDart),
-    );
-    addFile('lib/__projectName__.dart', _libDart);
-    addFile('test/__projectName___test.dart', _testDart);
-  }
-
-  @override
-  String getInstallInstructions(
-    String directory, {
-    String? scriptPath,
-  }) =>
-      super.getInstallInstructions(directory);
-}
-
-final String _pubspec = '''
-name: __projectName__
-description: A sample command-line application.
-version: 1.0.0
-# homepage: https://www.example.com
-
-environment:
-${common.sdkConstraint}
-
-# dependencies:
-#   path: ^1.8.0
-
-dev_dependencies:
-  lints: ^1.0.0
-  test: ^1.16.0
-''';
-
-final String _readme = '''
-A sample command-line application with an entrypoint in `bin/`, library code
-in `lib/`, and example unit test in `test/`.
-''';
-
-final String _mainDart = r'''
-import 'package:__projectName__/__projectName__.dart' as __projectName__;
-
-void main(List<String> arguments) {
-  print('Hello world: ${__projectName__.calculate()}!');
-}
-''';
-
-final String _libDart = '''
-int calculate() {
-  return 6 * 7;
-}
-''';
-
-final String _testDart = '''
-import 'package:__projectName__/__projectName__.dart';
-import 'package:test/test.dart';
-
-void main() {
-  test('calculate', () {
-    expect(calculate(), 42);
-  });
-}
-''';
diff --git a/pkg/dartdev/lib/src/templates/console_simple.dart b/pkg/dartdev/lib/src/templates/console_simple.dart
index ed6f793..8ab68be 100644
--- a/pkg/dartdev/lib/src/templates/console_simple.dart
+++ b/pkg/dartdev/lib/src/templates/console_simple.dart
@@ -8,9 +8,13 @@
 /// A generator for a simple command-line application.
 class ConsoleSimpleGenerator extends DefaultGenerator {
   ConsoleSimpleGenerator()
-      : super('console-simple', 'Simple Console Application',
-            'A simple command-line application.',
-            categories: const ['dart', 'console']) {
+      : super(
+          'console-simple',
+          'Simple Console Application',
+          'A simple command-line application.',
+          deprecated: true,
+          categories: const ['dart', 'console'],
+        ) {
     addFile('.gitignore', common.gitignore);
     addFile('analysis_options.yaml', common.analysisOptions);
     addFile('CHANGELOG.md', common.changelog);
@@ -36,7 +40,7 @@
 # homepage: https://www.example.com
 
 environment:
-${common.sdkConstraint}
+  ${common.sdkConstraint}
 
 # dependencies:
 #   path: ^1.8.0
diff --git a/pkg/dartdev/lib/src/templates/package.dart b/pkg/dartdev/lib/src/templates/package.dart
new file mode 100644
index 0000000..e92049d
--- /dev/null
+++ b/pkg/dartdev/lib/src/templates/package.dart
@@ -0,0 +1,160 @@
+// 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 '../templates.dart';
+import 'common.dart' as common;
+
+/// A generator for a simple command-line application.
+class PackageGenerator extends DefaultGenerator {
+  PackageGenerator()
+      : super(
+          'package',
+          'Dart Package',
+          'A package containing shared Dart libraries.',
+          categories: const ['dart'],
+          alternateId: 'package-simple',
+        ) {
+    addFile('.gitignore', _gitignore);
+    addFile('analysis_options.yaml', common.analysisOptions);
+    addFile('CHANGELOG.md', common.changelog);
+    addFile('pubspec.yaml', _pubspec);
+    addFile('README.md', _readme);
+    addFile('example/__projectName___example.dart', _exampleDart);
+    setEntrypoint(
+      addFile('lib/__projectName__.dart', _libDart),
+    );
+    addFile('lib/src/__projectName___base.dart', _libSrcDart);
+    addFile('test/__projectName___test.dart', _testDart);
+  }
+
+  @override
+  String getInstallInstructions(
+    String directory, {
+    String? scriptPath,
+  }) =>
+      super.getInstallInstructions(
+        directory,
+        scriptPath: 'example/${scriptPath}_example',
+      );
+}
+
+final String _gitignore = '''
+# Files and directories created by pub.
+.dart_tool/
+.packages
+
+# Conventional directory for build outputs.
+build/
+
+# Omit committing pubspec.lock for library packages; see
+# https://dart.dev/guides/libraries/private-files#pubspeclock.
+pubspec.lock
+''';
+
+final String _pubspec = '''
+name: __projectName__
+description: A starting point for Dart libraries or applications.
+version: 1.0.0
+# homepage: https://www.example.com
+
+environment:
+  ${common.sdkConstraint}
+
+# dependencies:
+#   path: ^1.8.0
+
+dev_dependencies:
+  lints: ^1.0.0
+  test: ^1.16.0
+''';
+
+final String _readme = '''
+<!-- 
+This README describes the package. If you publish this package to pub.dev,
+this README's contents appear on the landing page for your package.
+
+For information about how to write a good package README, see the guide for
+[writing package pages](https://dart.dev/guides/libraries/writing-package-pages). 
+
+For general information about developing packages, see the Dart guide for
+[creating packages](https://dart.dev/guides/libraries/create-library-packages)
+and the Flutter guide for
+[developing packages and plugins](https://flutter.dev/developing-packages). 
+-->
+
+TODO: Put a short description of the package here that helps potential users
+know whether this package might be useful for them.
+
+## Features
+
+TODO: List what your package can do. Maybe include images, gifs, or videos.
+
+## Getting started
+
+TODO: List prerequisites and provide or point to information on how to
+start using the package.
+
+## Usage
+
+TODO: Include short and useful examples for package users. Add longer examples
+to `/example` folder. 
+
+```dart
+const like = 'sample';
+```
+
+## Additional information
+
+TODO: Tell users more about the package: where to find more information, how to 
+contribute to the package, how to file issues, what response they can expect 
+from the package authors, and more.
+''';
+
+final String _exampleDart = r'''
+import 'package:__projectName__/__projectName__.dart';
+
+void main() {
+  var awesome = Awesome();
+  print('awesome: ${awesome.isAwesome}');
+}
+''';
+
+final String _libDart = '''
+/// Support for doing something awesome.
+///
+/// More dartdocs go here.
+library __projectName__;
+
+export 'src/__projectName___base.dart';
+
+// TODO: Export any libraries intended for clients of this package.
+''';
+
+final String _libSrcDart = '''
+// TODO: Put public facing types in this file.
+
+/// Checks if you are awesome. Spoiler: you are.
+class Awesome {
+  bool get isAwesome => true;
+}
+''';
+
+final String _testDart = '''
+import 'package:__projectName__/__projectName__.dart';
+import 'package:test/test.dart';
+
+void main() {
+  group('A group of tests', () {
+    final awesome = Awesome();
+
+    setUp(() {
+      // Additional setup goes here.
+    });
+
+    test('First Test', () {
+      expect(awesome.isAwesome, isTrue);
+    });
+  });
+}
+''';
diff --git a/pkg/dartdev/lib/src/templates/package_simple.dart b/pkg/dartdev/lib/src/templates/package_simple.dart
deleted file mode 100644
index 9827dd7..0000000
--- a/pkg/dartdev/lib/src/templates/package_simple.dart
+++ /dev/null
@@ -1,156 +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 '../templates.dart';
-import 'common.dart' as common;
-
-/// A generator for a simple command-line application.
-class PackageSimpleGenerator extends DefaultGenerator {
-  PackageSimpleGenerator()
-      : super('package-simple', 'Dart Package',
-            'A starting point for Dart libraries or applications.',
-            categories: const ['dart']) {
-    addFile('.gitignore', _gitignore);
-    addFile('analysis_options.yaml', common.analysisOptions);
-    addFile('CHANGELOG.md', common.changelog);
-    addFile('pubspec.yaml', _pubspec);
-    addFile('README.md', _readme);
-    addFile('example/__projectName___example.dart', _exampleDart);
-    setEntrypoint(
-      addFile('lib/__projectName__.dart', _libDart),
-    );
-    addFile('lib/src/__projectName___base.dart', _libSrcDart);
-    addFile('test/__projectName___test.dart', _testDart);
-  }
-
-  @override
-  String getInstallInstructions(
-    String directory, {
-    String? scriptPath,
-  }) =>
-      super.getInstallInstructions(
-        directory,
-        scriptPath: 'example/${scriptPath}_example',
-      );
-}
-
-final String _gitignore = '''
-# Files and directories created by pub.
-.dart_tool/
-.packages
-
-# Conventional directory for build outputs.
-build/
-
-# Omit committing pubspec.lock for library packages; see
-# https://dart.dev/guides/libraries/private-files#pubspeclock.
-pubspec.lock
-''';
-
-final String _pubspec = '''
-name: __projectName__
-description: A starting point for Dart libraries or applications.
-version: 1.0.0
-# homepage: https://www.example.com
-
-environment:
-${common.sdkConstraint}
-
-# dependencies:
-#   path: ^1.8.0
-
-dev_dependencies:
-  lints: ^1.0.0
-  test: ^1.16.0
-''';
-
-final String _readme = '''
-<!-- 
-This README describes the package. If you publish this package to pub.dev,
-this README's contents appear on the landing page for your package.
-
-For information about how to write a good package README, see the guide for
-[writing package pages](https://dart.dev/guides/libraries/writing-package-pages). 
-
-For general information about developing packages, see the Dart guide for
-[creating packages](https://dart.dev/guides/libraries/create-library-packages)
-and the Flutter guide for
-[developing packages and plugins](https://flutter.dev/developing-packages). 
--->
-
-TODO: Put a short description of the package here that helps potential users
-know whether this package might be useful for them.
-
-## Features
-
-TODO: List what your package can do. Maybe include images, gifs, or videos.
-
-## Getting started
-
-TODO: List prerequisites and provide or point to information on how to
-start using the package.
-
-## Usage
-
-TODO: Include short and useful examples for package users. Add longer examples
-to `/example` folder. 
-
-```dart
-const like = 'sample';
-```
-
-## Additional information
-
-TODO: Tell users more about the package: where to find more information, how to 
-contribute to the package, how to file issues, what response they can expect 
-from the package authors, and more.
-''';
-
-final String _exampleDart = r'''
-import 'package:__projectName__/__projectName__.dart';
-
-void main() {
-  var awesome = Awesome();
-  print('awesome: ${awesome.isAwesome}');
-}
-''';
-
-final String _libDart = '''
-/// Support for doing something awesome.
-///
-/// More dartdocs go here.
-library __projectName__;
-
-export 'src/__projectName___base.dart';
-
-// TODO: Export any libraries intended for clients of this package.
-''';
-
-final String _libSrcDart = '''
-// TODO: Put public facing types in this file.
-
-/// Checks if you are awesome. Spoiler: you are.
-class Awesome {
-  bool get isAwesome => true;
-}
-''';
-
-final String _testDart = '''
-import 'package:__projectName__/__projectName__.dart';
-import 'package:test/test.dart';
-
-void main() {
-  group('A group of tests', () {
-    final awesome = Awesome();
-
-    setUp(() {
-      // Additional setup goes here.
-    });
-
-    test('First Test', () {
-      expect(awesome.isAwesome, isTrue);
-    });
-  });
-}
-''';
diff --git a/pkg/dartdev/lib/src/templates/server_shelf.dart b/pkg/dartdev/lib/src/templates/server_shelf.dart
index c075f02..023ffea 100644
--- a/pkg/dartdev/lib/src/templates/server_shelf.dart
+++ b/pkg/dartdev/lib/src/templates/server_shelf.dart
@@ -9,8 +9,11 @@
 class ServerShelfGenerator extends DefaultGenerator {
   ServerShelfGenerator()
       : super(
-            'server-shelf', 'Server app', 'A server app using `package:shelf`',
-            categories: const ['dart', 'server']) {
+          'server-shelf',
+          'Server app',
+          'A server app using package:shelf.',
+          categories: const ['dart', 'server'],
+        ) {
     addFile('.gitignore', common.gitignore);
     addFile('analysis_options.yaml', common.analysisOptions);
     addFile('CHANGELOG.md', common.changelog);
@@ -42,7 +45,7 @@
 # homepage: https://www.example.com
 
 environment:
-${common.sdkConstraint}
+  ${common.sdkConstraint}
 
 dependencies:
   args: ^2.0.0
@@ -52,7 +55,6 @@
 dev_dependencies:
   http: ^0.13.0
   lints: ^1.0.0
-  test_process: ^2.0.0
   test: ^1.15.0
 ''';
 
@@ -125,7 +127,7 @@
 }
 
 Response _echoHandler(Request request) {
-  final message = params(request, 'message');
+  final message = request.params['message'];
   return Response.ok('$message\n');
 }
 
@@ -180,22 +182,28 @@
 ''';
 
 final String _test = r'''
+import 'dart:io';
+
 import 'package:http/http.dart';
 import 'package:test/test.dart';
-import 'package:test_process/test_process.dart';
 
 void main() {
   final port = '8080';
   final host = 'http://0.0.0.0:$port';
+  late Process p;
 
   setUp(() async {
-    await TestProcess.start(
+    p = await Process.start(
       'dart',
       ['run', 'bin/server.dart'],
       environment: {'PORT': port},
     );
+    // Wait for server to start and print to stdout.
+    await p.stdout.first;
   });
 
+  tearDown(() => p.kill());
+
   test('Root', () async {
     final response = await get(Uri.parse(host + '/'));
     expect(response.statusCode, 200);
@@ -207,6 +215,7 @@
     expect(response.statusCode, 200);
     expect(response.body, 'hello\n');
   });
+
   test('404', () async {
     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
new file mode 100644
index 0000000..19868273
--- /dev/null
+++ b/pkg/dartdev/lib/src/templates/web.dart
@@ -0,0 +1,109 @@
+// 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:path/path.dart' as p;
+
+import '../templates.dart';
+import 'common.dart' as common;
+
+/// A generator for a uber-simple web application.
+class WebGenerator extends DefaultGenerator {
+  WebGenerator()
+      : super(
+          'web',
+          'Bare-bones Web App',
+          'A web app that uses only core Dart libraries.',
+          alternateId: 'web-simple',
+          categories: const ['dart', 'web'],
+        ) {
+    addFile('.gitignore', common.gitignore);
+    addFile('analysis_options.yaml', common.analysisOptions);
+    addFile('CHANGELOG.md', common.changelog);
+    addFile('pubspec.yaml', _pubspec);
+    addFile('README.md', _readme);
+    addFile('web/index.html', _index);
+    setEntrypoint(
+      addFile('web/main.dart', _main),
+    );
+    addFile('web/styles.css', _styles);
+  }
+
+  @override
+  String getInstallInstructions(
+    String directory, {
+    String? scriptPath,
+  }) =>
+      '  cd ${p.relative(directory)}\n'
+      '  dart pub global activate webdev\n'
+      '  webdev serve';
+}
+
+final String _pubspec = '''
+name: __projectName__
+description: An absolute bare-bones web app.
+version: 1.0.0
+# homepage: https://www.example.com
+
+environment:
+  ${common.sdkConstraint}
+
+# dependencies:
+#   path: ^1.7.0
+
+dev_dependencies:
+  build_runner: ^2.1.4
+  build_web_compilers: ^3.2.1
+  lints: ^1.0.0
+''';
+
+final String _readme = '''
+An absolute bare-bones web app.
+''';
+
+final String _index = '''
+<!DOCTYPE html>
+
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="scaffolded-by" content="https://github.com/dart-lang/sdk">
+    <title>__projectName__</title>
+    <link rel="stylesheet" href="styles.css">
+    <script defer src="main.dart.js"></script>
+</head>
+
+<body>
+
+  <div id="output"></div>
+
+</body>
+</html>
+''';
+
+final String _main = '''
+import 'dart:html';
+
+void main() {
+  querySelector('#output')?.text = 'Your Dart app is running.';
+}
+''';
+
+final String _styles = '''
+@import url(https://fonts.googleapis.com/css?family=Roboto);
+
+html, body {
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  font-family: 'Roboto', sans-serif;
+}
+
+#output {
+  padding: 20px;
+  text-align: center;
+}
+''';
diff --git a/pkg/dartdev/lib/src/templates/web_simple.dart b/pkg/dartdev/lib/src/templates/web_simple.dart
deleted file mode 100644
index e22be74..0000000
--- a/pkg/dartdev/lib/src/templates/web_simple.dart
+++ /dev/null
@@ -1,105 +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:path/path.dart' as p;
-
-import '../templates.dart';
-import 'common.dart' as common;
-
-/// A generator for a uber-simple web application.
-class WebSimpleGenerator extends DefaultGenerator {
-  WebSimpleGenerator()
-      : super('web-simple', 'Bare-bones Web App',
-            'A web app that uses only core Dart libraries.',
-            categories: const ['dart', 'web']) {
-    addFile('.gitignore', common.gitignore);
-    addFile('analysis_options.yaml', common.analysisOptions);
-    addFile('CHANGELOG.md', common.changelog);
-    addFile('pubspec.yaml', _pubspec);
-    addFile('README.md', _readme);
-    addFile('web/index.html', _index);
-    setEntrypoint(
-      addFile('web/main.dart', _main),
-    );
-    addFile('web/styles.css', _styles);
-  }
-
-  @override
-  String getInstallInstructions(
-    String directory, {
-    String? scriptPath,
-  }) =>
-      '  cd ${p.relative(directory)}\n'
-      '  dart pub global activate webdev\n'
-      '  webdev serve';
-}
-
-final String _pubspec = '''
-name: __projectName__
-description: An absolute bare-bones web app.
-version: 1.0.0
-# homepage: https://www.example.com
-
-environment:
-${common.sdkConstraint}
-
-# dependencies:
-#   path: ^1.7.0
-
-dev_dependencies:
-  build_runner: ^2.1.4
-  build_web_compilers: ^3.2.1
-  lints: ^1.0.0
-''';
-
-final String _readme = '''
-An absolute bare-bones web app.
-''';
-
-final String _index = '''
-<!DOCTYPE html>
-
-<html>
-<head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta name="scaffolded-by" content="https://github.com/dart-lang/sdk">
-    <title>__projectName__</title>
-    <link rel="stylesheet" href="styles.css">
-    <script defer src="main.dart.js"></script>
-</head>
-
-<body>
-
-  <div id="output"></div>
-
-</body>
-</html>
-''';
-
-final String _main = '''
-import 'dart:html';
-
-void main() {
-  querySelector('#output')?.text = 'Your Dart app is running.';
-}
-''';
-
-final String _styles = '''
-@import url(https://fonts.googleapis.com/css?family=Roboto);
-
-html, body {
-  width: 100%;
-  height: 100%;
-  margin: 0;
-  padding: 0;
-  font-family: 'Roboto', sans-serif;
-}
-
-#output {
-  padding: 20px;
-  text-align: center;
-}
-''';
diff --git a/pkg/dartdev/lib/src/utils.dart b/pkg/dartdev/lib/src/utils.dart
index f4c5676..a80f7bd 100644
--- a/pkg/dartdev/lib/src/utils.dart
+++ b/pkg/dartdev/lib/src/utils.dart
@@ -31,8 +31,8 @@
 }
 
 /// String utility to trim some suffix from the end of a [String].
-String? trimEnd(String? s, String? suffix) {
-  if (s != null && suffix != null && suffix.isNotEmpty && s.endsWith(suffix)) {
+String trimEnd(String s, String? suffix) {
+  if (suffix != null && suffix.isNotEmpty && s.endsWith(suffix)) {
     return s.substring(0, s.length - suffix.length);
   }
   return s;
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index 04fc049..a75b441 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -172,15 +172,13 @@
 }
 
 void defineAnalyze() {
-  TestProject? p;
+  late TestProject p;
 
-  setUp(() => p = null);
-
-  tearDown(() async => await p?.dispose());
+  tearDown(() async => await p.dispose());
 
   test('--help', () async {
     p = project();
-    var result = await p!.run(['analyze', '--help']);
+    var result = await p.run(['analyze', '--help']);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -190,7 +188,7 @@
 
   test('--help --verbose', () async {
     p = project();
-    var result = await p!.run(['analyze', '--help', '--verbose']);
+    var result = await p.run(['analyze', '--help', '--verbose']);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -206,8 +204,7 @@
     test('folder and file', () async {
       p = project(mainSrc: "int get foo => 'str';\n");
       secondProject = project(mainSrc: "int get foo => 'str';\n");
-      var result =
-          await p!.run(['analyze', p!.dirPath, secondProject.mainPath]);
+      var result = await p.run(['analyze', p.dirPath, secondProject.mainPath]);
 
       expect(result.exitCode, 3);
       expect(result.stderr, isEmpty);
@@ -220,7 +217,7 @@
     test('two folders', () async {
       p = project(mainSrc: "int get foo => 'str';\n");
       secondProject = project(mainSrc: "int get foo => 'str';\n");
-      var result = await p!.run(['analyze', p!.dirPath, secondProject.dirPath]);
+      var result = await p.run(['analyze', p.dirPath, secondProject.dirPath]);
 
       expect(result.exitCode, 3);
       expect(result.stderr, isEmpty);
@@ -233,7 +230,7 @@
 
   test('no such directory', () async {
     p = project();
-    var result = await p!.run(['analyze', '/no/such/dir1/']);
+    var result = await p.run(['analyze', '/no/such/dir1/']);
 
     expect(result.exitCode, 64);
     expect(result.stdout, isEmpty);
@@ -245,7 +242,7 @@
   test('current working directory', () async {
     p = project(mainSrc: 'int get foo => 1;\n');
 
-    var result = await p!.run(['analyze'], workingDir: p!.dirPath);
+    var result = await p.run(['analyze'], workingDir: p.dirPath);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -255,7 +252,7 @@
   group('single directory', () {
     test('no errors', () async {
       p = project(mainSrc: 'int get foo => 1;\n');
-      var result = await p!.run(['analyze', p!.dirPath]);
+      var result = await p.run(['analyze', p.dirPath]);
 
       expect(result.exitCode, 0);
       expect(result.stderr, isEmpty);
@@ -264,7 +261,7 @@
 
     test('one error', () async {
       p = project(mainSrc: "int get foo => 'str';\n");
-      var result = await p!.run(['analyze', p!.dirPath]);
+      var result = await p.run(['analyze', p.dirPath]);
 
       expect(result.exitCode, 3);
       expect(result.stderr, isEmpty);
@@ -276,7 +273,7 @@
 
     test('two errors', () async {
       p = project(mainSrc: "int get foo => 'str';\nint get bar => 'str';\n");
-      var result = await p!.run(['analyze', p!.dirPath]);
+      var result = await p.run(['analyze', p.dirPath]);
 
       expect(result.exitCode, 3);
       expect(result.stderr, isEmpty);
@@ -287,7 +284,7 @@
   group('single file', () {
     test('no errors', () async {
       p = project(mainSrc: 'int get foo => 1;\n');
-      var result = await p!.run(['analyze', p!.mainPath]);
+      var result = await p.run(['analyze', p.mainPath]);
 
       expect(result.exitCode, 0);
       expect(result.stderr, isEmpty);
@@ -296,7 +293,7 @@
 
     test('one error', () async {
       p = project(mainSrc: "int get foo => 'str';\n");
-      var result = await p!.run(['analyze', p!.mainPath]);
+      var result = await p.run(['analyze', p.mainPath]);
 
       expect(result.exitCode, 3);
       expect(result.stderr, isEmpty);
@@ -311,7 +308,7 @@
     p = project(
         mainSrc: _unusedImportCodeSnippet,
         analysisOptions: _unusedImportAnalysisOptions);
-    var result = await p!.run(['analyze', '--fatal-warnings', p!.dirPath]);
+    var result = await p.run(['analyze', '--fatal-warnings', p.dirPath]);
 
     expect(result.exitCode, equals(2));
     expect(result.stderr, isEmpty);
@@ -322,7 +319,7 @@
     p = project(
         mainSrc: _unusedImportCodeSnippet,
         analysisOptions: _unusedImportAnalysisOptions);
-    var result = await p!.run(['analyze', p!.dirPath]);
+    var result = await p.run(['analyze', p.dirPath]);
 
     expect(result.exitCode, equals(2));
     expect(result.stderr, isEmpty);
@@ -333,7 +330,7 @@
     p = project(
         mainSrc: _unusedImportCodeSnippet,
         analysisOptions: _unusedImportAnalysisOptions);
-    var result = await p!.run(['analyze', '--no-fatal-warnings', p!.dirPath]);
+    var result = await p.run(['analyze', '--no-fatal-warnings', p.dirPath]);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -342,7 +339,7 @@
 
   test('info implicit no --fatal-infos', () async {
     p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
-    var result = await p!.run(['analyze', p!.dirPath]);
+    var result = await p.run(['analyze', p.dirPath]);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -351,7 +348,7 @@
 
   test('info --fatal-infos', () async {
     p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
-    var result = await p!.run(['analyze', '--fatal-infos', p!.dirPath]);
+    var result = await p.run(['analyze', '--fatal-infos', p.dirPath]);
 
     expect(result.exitCode, 1);
     expect(result.stderr, isEmpty);
@@ -365,7 +362,7 @@
   var one = 1;
   return result;
 }''');
-    var result = await p!.run(['analyze', '--verbose', p!.dirPath]);
+    var result = await p.run(['analyze', '--verbose', p.dirPath]);
 
     expect(result.exitCode, 3);
     expect(result.stderr, isEmpty);
@@ -387,7 +384,7 @@
 void f() {
   my_foo;
 }''');
-      p!.file('my_packages.json', '''
+      p.file('my_packages.json', '''
 {
   "configVersion": 2,
   "packages": [
@@ -400,10 +397,10 @@
   ]
 }
 ''');
-      var result = await p!.run([
+      var result = await p.run([
         'analyze',
-        '--packages=${p!.findFile('my_packages.json')!.path}',
-        p!.dirPath,
+        '--packages=${p.findFile('my_packages.json')!.path}',
+        p.dirPath,
       ]);
 
       expect(result.exitCode, 0);
@@ -413,10 +410,10 @@
 
     test('not existing', () async {
       p = project();
-      var result = await p!.run([
+      var result = await p.run([
         'analyze',
         '--packages=no.such.file',
-        p!.dirPath,
+        p.dirPath,
       ]);
 
       expect(result.exitCode, 64);
@@ -429,10 +426,10 @@
     var cache = project(name: 'cache');
 
     p = project(mainSrc: 'var v = 0;');
-    var result = await p!.run([
+    var result = await p.run([
       'analyze',
       '--cache=${cache.dirPath}',
-      p!.mainPath,
+      p.mainPath,
     ]);
 
     expect(result.exitCode, 0);
diff --git a/pkg/dartdev/test/commands/compile_test.dart b/pkg/dartdev/test/commands/compile_test.dart
index 82478e9..bac5e34 100644
--- a/pkg/dartdev/test/commands/compile_test.dart
+++ b/pkg/dartdev/test/commands/compile_test.dart
@@ -12,7 +12,7 @@
 const int compileErrorExitCode = 64;
 
 void main() {
-  group('compile', defineCompileTests, timeout: longTimeout);
+  group('compile -', defineCompileTests, timeout: longTimeout);
 }
 
 const String soundNullSafetyMessage = 'Info: Compiling with sound null safety';
@@ -99,6 +99,37 @@
     expect(result.exitCode, 0);
   });
 
+  test('Compile and run jit snapshot with environment variables', () async {
+    final p = project(mainSrc: '''
+        void main() {
+          print('1: ' + const String.fromEnvironment('foo'));
+          print('2: ' + const String.fromEnvironment('bar'));
+        }''');
+    final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
+    final outFile = path.canonicalize(path.join(p.dirPath, 'main.jit'));
+
+    var result = await p.run([
+      'compile',
+      'jit-snapshot',
+      '-Dfoo=bar',
+      '--define=bar=foo',
+      '-o',
+      outFile,
+      '-v',
+      inFile,
+    ]);
+    expect(result.stderr, isEmpty);
+    expect(result.exitCode, 0);
+    final file = File(outFile);
+    expect(file.existsSync(), true, reason: 'File not found: $outFile');
+
+    result = await p.run(['run', 'main.jit']);
+
+    // Ensure the -D and --define arguments were processed correctly.
+    expect(result.stdout, contains('1: bar'));
+    expect(result.stdout, contains('2: foo'));
+  });
+
   test('Compile and run executable', () async {
     final p = project(mainSrc: 'void main() { print("I love executables"); }');
     final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
diff --git a/pkg/dartdev/test/commands/create_integration_test.dart b/pkg/dartdev/test/commands/create_integration_test.dart
index e73a16d..05d0bf0 100644
--- a/pkg/dartdev/test/commands/create_integration_test.dart
+++ b/pkg/dartdev/test/commands/create_integration_test.dart
@@ -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.
 
+import 'dart:async';
+import 'dart:convert';
 import 'dart:io';
 
 import 'package:dartdev/src/commands/create.dart';
+import 'package:dartdev/src/templates.dart';
+import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
 import '../utils.dart';
@@ -14,41 +18,137 @@
 }
 
 void defineCreateTests() {
-  TestProject? p;
+  TestProject? proj;
 
-  setUp(() => p = null);
+  setUp(() => proj = null);
 
-  tearDown(() async => await p?.dispose());
+  tearDown(() async => await proj?.dispose());
 
   // Create tests for each template.
-  for (String templateId in CreateCommand.legalTemplateIds) {
+  for (String templateId
+      in CreateCommand.legalTemplateIds(includeDeprecated: true)) {
     test(templateId, () async {
-      p = project();
+      const projectName = 'template_project';
+      proj = project();
+      final p = proj!;
+      final templateGenerator = getGenerator(templateId)!;
 
-      ProcessResult createResult = await p!.run([
+      ProcessResult createResult = await p.run([
         'create',
         '--force',
         '--template',
         templateId,
-        'template_project',
+        projectName,
       ]);
       expect(createResult.exitCode, 0, reason: createResult.stderr);
 
       // Validate that the project analyzes cleanly.
-      // TODO: Should we use --fatal-infos here?
-      ProcessResult analyzeResult =
-          await p!.run(['analyze'], workingDir: p!.dir.path);
+      ProcessResult analyzeResult = await p.run(
+        ['analyze', '--fatal-infos', projectName],
+        workingDir: p.dir.path,
+      );
       expect(analyzeResult.exitCode, 0, reason: analyzeResult.stdout);
 
       // Validate that the code is well formatted.
-      ProcessResult formatResult = await p!.run([
+      ProcessResult formatResult = await p.run([
         'format',
         '--output',
         'none',
         '--set-exit-if-changed',
-        'template_project',
+        projectName,
       ]);
       expect(formatResult.exitCode, 0, reason: formatResult.stdout);
+
+      // Process the execution instructions provided by the template.
+      final runCommands = templateGenerator
+          .getInstallInstructions(
+            projectName,
+            scriptPath: projectName,
+          )
+          .split('\n')
+          // Remove directory change instructions.
+          .sublist(1)
+          .map((command) => command.trim())
+          .map((command) {
+        final commandParts = command.split(' ');
+        if (command.startsWith('dart ')) {
+          return commandParts.sublist(1);
+        }
+        return commandParts;
+      }).toList();
+
+      final isServerTemplate = templateGenerator.categories.contains('server');
+      final isWebTemplate = templateGenerator.categories.contains('web');
+      final workingDir = path.join(p.dirPath, projectName);
+
+      // Execute the templates run instructions.
+      for (int i = 0; i < runCommands.length; ++i) {
+        // The last command is always the command to execute the code generated
+        // by the template.
+        final isLastCommand = i == runCommands.length - 1;
+        final command = runCommands[i];
+        Process process;
+
+        if (isLastCommand && isWebTemplate) {
+          // The web template uses `webdev` to execute, not `dart`, so don't
+          // run the test through the project utility method.
+          process = await Process.start(
+              path.join(
+                p.pubCacheBinPath,
+                Platform.isWindows ? '${command.first}.bat' : command.first,
+              ),
+              [
+                ...command.sublist(1),
+                'web:0', // Allow for binding to a random available port.
+              ],
+              workingDirectory: workingDir,
+              environment: {
+                'PUB_CACHE': p.pubCachePath,
+                'PATH': path.dirname(Platform.resolvedExecutable) +
+                    (Platform.isWindows ? ';' : ':') +
+                    Platform.environment['PATH']!,
+              });
+        } else {
+          process = await p.start(
+            command,
+            workingDir: workingDir,
+          );
+        }
+
+        if (isLastCommand && (isServerTemplate || isWebTemplate)) {
+          final completer = Completer<void>();
+          late StreamSubscription stdoutSub;
+          late StreamSubscription stderrSub;
+          // Listen for well-known output from specific templates to determine
+          // if they've executed correctly. These templates won't exit on their
+          // own, so we'll need to terminate the process once we've verified it
+          // runs correctly.
+          stdoutSub = process.stdout.transform(utf8.decoder).listen((e) {
+            print('stdout: $e');
+            if ((isServerTemplate && e.contains('Server listening on port')) ||
+                (isWebTemplate && e.contains('Succeeded after'))) {
+              stderrSub.cancel();
+              stdoutSub.cancel();
+              process.kill();
+              completer.complete();
+            }
+          });
+          stderrSub = process.stderr
+              .transform(utf8.decoder)
+              .listen((e) => print('stderr: $e'));
+          await completer.future;
+
+          // Since we had to terminate the process manually, we aren't certain
+          // as to what the exit code will be on all platforms (should be -15
+          // for POSIX systems), so we'll just wait for the process to exit
+          // here.
+          await process.exitCode;
+        } else {
+          // If the sample should exit on its own, it should always result in
+          // an exit code of 0.
+          expect(await process.exitCode, 0);
+        }
+      }
     });
   }
 }
diff --git a/pkg/dartdev/test/commands/create_test.dart b/pkg/dartdev/test/commands/create_test.dart
index 872309e..7757636 100644
--- a/pkg/dartdev/test/commands/create_test.dart
+++ b/pkg/dartdev/test/commands/create_test.dart
@@ -54,13 +54,21 @@
   });
 
   test('default template exists', () async {
-    expect(CreateCommand.legalTemplateIds,
+    expect(CreateCommand.legalTemplateIds(),
         contains(CreateCommand.defaultTemplateId));
   });
 
-  test('all templates exist', () async {
-    for (String templateId in CreateCommand.legalTemplateIds) {
-      expect(CreateCommand.legalTemplateIds, contains(templateId));
+  test('no templates IDs overlap', () async {
+    final ids = <String>{};
+
+    for (final g in templates.generators) {
+      expect(ids.contains(g.id), false);
+      ids.add(g.id);
+
+      if (g.alternateId != null) {
+        expect(ids.contains(g.alternateId), false);
+        ids.add(g.alternateId!);
+      }
     }
   });
 
@@ -72,7 +80,6 @@
 
     String output = result.stdout.toString();
     var parsedResult = jsonDecode(output);
-    expect(parsedResult, hasLength(CreateCommand.legalTemplateIds.length));
     expect(parsedResult[0]['name'], isNotNull);
     expect(parsedResult[0]['label'], isNotNull);
     expect(parsedResult[0]['description'], isNotNull);
@@ -81,9 +88,7 @@
   test('no directory given', () async {
     p = project();
 
-    ProcessResult result = await p!.run([
-      'create',
-    ]);
+    ProcessResult result = await p!.run(['create']);
     expect(result.exitCode, 1);
   });
 
@@ -109,7 +114,8 @@
 
   test('project with normalized package name', () async {
     p = project();
-    final result = await p!.run(['create', 'requires-normalization']);
+    final result =
+        await p!.run(['create', '--no-pub', 'requires-normalization']);
     expect(result.stderr, isEmpty);
     expect(
         result.stdout,
@@ -140,7 +146,8 @@
   });
 
   // Create tests for each template.
-  for (String templateId in CreateCommand.legalTemplateIds) {
+  for (String templateId
+      in CreateCommand.legalTemplateIds(includeDeprecated: true)) {
     test(templateId, () async {
       p = project();
       const projectName = 'template_project';
diff --git a/pkg/dartdev/test/commands/doc_test.dart b/pkg/dartdev/test/commands/doc_test.dart
index 42ee01b..c597d50 100644
--- a/pkg/dartdev/test/commands/doc_test.dart
+++ b/pkg/dartdev/test/commands/doc_test.dart
@@ -6,30 +6,49 @@
 
 import '../utils.dart';
 
-const int compileErrorExitCode = 64;
+const int errorExitCode = 64;
 
 void main() {
   group('doc', defineDocTests, timeout: longTimeout);
 }
 
 void defineDocTests() {
-  test('Passing no args fails', () async {
-    final p = project();
-    final result = await p.run(['doc']);
-    expect(result.stderr, contains('Input directory not specified'));
-    expect(result.exitCode, compileErrorExitCode);
-  });
-
   test('--help', () async {
     final p = project();
     final result = await p.run(['doc', '--help']);
     expect(
       result.stdout,
-      contains('Usage: dart doc [arguments] <input directory>'),
+      contains('Usage: dart doc [arguments] [<directory>]'),
     );
     expect(result.exitCode, 0);
   });
 
+  test('Passing multiple directories fails', () async {
+    final p = project();
+    final result = await p.run(['doc', 'foo', 'bar']);
+    expect(result.stderr,
+        contains("'dart doc' only supports one input directory.'"));
+    expect(result.exitCode, errorExitCode);
+  });
+
+  test('defaults to documenting cwd', () async {
+    final p = project(mainSrc: 'void main() { print("Hello, World"); }');
+    p.file('lib/foo.dart', '''
+/// This is Foo. It uses [Bar].
+class Foo {
+  Bar bar;
+}
+
+/// Bar is very nice.
+class Bar {
+  _i = 42;
+}
+''');
+    final result = await p.run(['doc'], workingDir: p.dirPath);
+    expect(result.stdout, contains('Documenting dartdev_temp'));
+    expect(result.exitCode, 0);
+  });
+
   test('Document a library', () async {
     final p = project(mainSrc: 'void main() { print("Hello, World"); }');
     p.file('lib/foo.dart', '''
@@ -57,7 +76,10 @@
 }
 ''');
     final result = await p.run(['doc', '--dry-run', '--verbose', p.dirPath]);
-    expect(result.stdout, contains('Documenting dartdev_temp'));
+    expect(result.stdout, contains('Using the following options: [--input='));
+    // TODO(devoncarew): We should update package:dartdoc to emit some
+    // "Documenting ..." text here.
+    expect(result.stdout, isNot(contains('Documenting dartdev_temp')));
     expect(result.exitCode, 0);
   });
 
@@ -89,7 +111,7 @@
     final p = project(mainSrc: 'void main() { print("Hello, World"); }');
     p.file('lib/foo.dart', source);
     final result = await p.run(['doc', '--validate-links', p.dirPath]);
-    // TODO (mit@): Update this test to actually test for the
+    // TODO (mit): Update this test to actually test for the
     // --validate-links flag.
     expect(result.stdout, contains('Documenting dartdev_temp'));
   });
diff --git a/pkg/dartdev/test/no_such_file_test.dart b/pkg/dartdev/test/no_such_file_test.dart
index 1208a5e..4d8032d 100644
--- a/pkg/dartdev/test/no_such_file_test.dart
+++ b/pkg/dartdev/test/no_such_file_test.dart
@@ -33,7 +33,7 @@
     expect(result.stderr, isNotEmpty);
     expect(result.stderr, contains("Error when reading 'foo.dart':"));
     expect(result.stdout, isNotEmpty);
-    expect(result.stdout, contains("Info: Compiling with sound null safety\n"));
+    expect(result.stdout, contains('Info: Compiling with sound null safety\n'));
     expect(result.exitCode, 254);
   });
 }
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index 316c8bc..e77686f 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -45,6 +45,10 @@
 
   String get dirPath => dir.path;
 
+  String get pubCachePath => path.join(dirPath, 'pub_cache');
+
+  String get pubCacheBinPath => path.join(pubCachePath, 'bin');
+
   String get mainPath => path.join(dirPath, relativeFilePath);
 
   final String name;
@@ -122,19 +126,23 @@
     List<String> arguments, {
     String? workingDir,
   }) async {
-    _process = await Process.start(
+    final process = await Process.start(
         Platform.resolvedExecutable,
         [
           '--no-analytics',
           ...arguments,
         ],
         workingDirectory: workingDir ?? dir.path,
-        environment: {if (logAnalytics) '_DARTDEV_LOG_ANALYTICS': 'true'});
-    final stdoutContents = _process!.stdout.transform(utf8.decoder).join();
-    final stderrContents = _process!.stderr.transform(utf8.decoder).join();
-    final code = await _process!.exitCode;
+        environment: {
+          if (logAnalytics) '_DARTDEV_LOG_ANALYTICS': 'true',
+          'PUB_CACHE': pubCachePath,
+        });
+    _process = process;
+    final stdoutContents = process.stdout.transform(utf8.decoder).join();
+    final stderrContents = process.stderr.transform(utf8.decoder).join();
+    final code = await process.exitCode;
     return ProcessResult(
-      _process!.pid,
+      process.pid,
       code,
       await stdoutContents,
       await stderrContents,
@@ -152,7 +160,10 @@
           ...arguments,
         ],
         workingDirectory: workingDir ?? dir.path,
-        environment: {if (logAnalytics) '_DARTDEV_LOG_ANALYTICS': 'true'})
+        environment: {
+          if (logAnalytics) '_DARTDEV_LOG_ANALYTICS': 'true',
+          'PUB_CACHE': pubCachePath,
+        })
       ..then((p) => _process = p);
   }
 
diff --git a/pkg/dartdev/test/utils_test.dart b/pkg/dartdev/test/utils_test.dart
index 83f2567..811a0a5 100644
--- a/pkg/dartdev/test/utils_test.dart
+++ b/pkg/dartdev/test/utils_test.dart
@@ -37,10 +37,6 @@
   });
 
   group('trimEnd', () {
-    test('null string', () {
-      expect(trimEnd(null, 'suffix'), null);
-    });
-
     test('null suffix', () {
       expect(trimEnd('string', null), 'string');
     });
diff --git a/pkg/dds/OWNERS b/pkg/dds/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/dds/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/dds/lib/dds.dart b/pkg/dds/lib/dds.dart
index f31e447..4d8a5e7 100644
--- a/pkg/dds/lib/dds.dart
+++ b/pkg/dds/lib/dds.dart
@@ -46,13 +46,13 @@
     DevToolsConfiguration? devToolsConfiguration,
     bool logRequests = false,
   }) async {
-    if (remoteVmServiceUri.scheme != 'http') {
+    if (!remoteVmServiceUri.isScheme('http')) {
       throw ArgumentError(
         'remoteVmServiceUri must have an HTTP scheme. Actual: ${remoteVmServiceUri.scheme}',
       );
     }
     if (serviceUri != null) {
-      if (serviceUri.scheme != 'http') {
+      if (!serviceUri.isScheme('http')) {
         throw ArgumentError(
           'serviceUri must have an HTTP scheme. Actual: ${serviceUri.scheme}',
         );
diff --git a/pkg/dds/lib/devtools_server.dart b/pkg/dds/lib/devtools_server.dart
index 1462458..0a267d6 100644
--- a/pkg/dds/lib/devtools_server.dart
+++ b/pkg/dds/lib/devtools_server.dart
@@ -47,8 +47,24 @@
   late ClientManager clientManager;
   final bool _isChromeOS = File('/dev/.cros_milestone').existsSync();
 
-  static ArgParser buildArgParser({bool verbose = false}) {
+  /// Builds an arg parser for the DevTools server.
+  ///
+  /// [includeHelpOption] should be set to false if this arg parser will be used
+  /// in a Command subclass.
+  static ArgParser buildArgParser({
+    bool verbose = false,
+    bool includeHelpOption = true,
+  }) {
     final argParser = ArgParser();
+
+    if (includeHelpOption) {
+      argParser.addFlag(
+        argHelp,
+        negatable: false,
+        abbr: 'h',
+        help: 'Prints help output.',
+      );
+    }
     argParser
       ..addFlag(
         argVersion,
@@ -185,7 +201,7 @@
     bool debugMode = false,
     bool launchBrowser = false,
     bool enableNotifications = false,
-    bool allowEmbedding = false,
+    bool allowEmbedding = true,
     bool headlessMode = false,
     bool verboseMode = false,
     String? hostname,
@@ -252,6 +268,9 @@
     final _server = server!;
     if (allowEmbedding) {
       _server.defaultResponseHeaders.remove('x-frame-options', 'SAMEORIGIN');
+      // The origin-agent-cluster header is required to support the embedding of
+      // Dart DevTools in Chrome DevTools.
+      _server.defaultResponseHeaders.add('origin-agent-cluster', '?1');
     }
 
     // Ensure browsers don't cache older versions of the app.
diff --git a/pkg/dds/lib/src/dap/isolate_manager.dart b/pkg/dds/lib/src/dap/isolate_manager.dart
index ee48794..d13e8fa 100644
--- a/pkg/dds/lib/src/dap/isolate_manager.dart
+++ b/pkg/dds/lib/src/dap/isolate_manager.dart
@@ -445,11 +445,11 @@
     } else if (eventKind == vm.EventKind.kPauseStart) {
       // Don't resume from a PauseStart if this has already happened (see
       // comments on [thread.hasBeenStarted]).
-      if (!thread.hasBeenStarted) {
+      if (!thread.startupHandled) {
+        thread.startupHandled = true;
         // If requested, automatically resume. Otherwise send a Stopped event to
         // inform the client UI the thread is paused.
         if (resumeIfStarting) {
-          thread.hasBeenStarted = true;
           await resumeThread(thread.threadId);
         } else {
           sendStoppedOnEntryEvent(thread.threadId);
@@ -730,7 +730,11 @@
   int? exceptionReference;
   var paused = false;
 
-  /// Tracks whether an isolate has been started from its PauseStart state.
+  /// Tracks whether an isolates startup routine has been handled.
+  ///
+  /// The startup routine will either automatically resume the isolate or send
+  /// a stopped-on-entry event, depending on whether we're launching or
+  /// attaching.
   ///
   /// This is used to prevent trying to resume a thread twice if a PauseStart
   /// event arrives around the same time that are our initialization code (which
@@ -739,7 +743,12 @@
   ///
   /// If we send a duplicate resume, it could trigger an unwanted resume for a
   /// breakpoint or exception that occur early on.
-  bool hasBeenStarted = false;
+  ///
+  /// In the case of attach, a similar race exists.. The initialization may
+  /// choose not to resume the isolate (so we can attach to a VM with paused
+  /// isolates) but then a PauseStart event that arrived during initialization
+  /// could trigger a resume that we don't want.
+  bool startupHandled = false;
 
   /// The most recent pauseEvent for this isolate.
   vm.Event? pauseEvent;
diff --git a/pkg/dds/lib/src/devtools/memory_profile.dart b/pkg/dds/lib/src/devtools/memory_profile.dart
index f99caf4..03fe5c1 100644
--- a/pkg/dds/lib/src/devtools/memory_profile.dart
+++ b/pkg/dds/lib/src/devtools/memory_profile.dart
@@ -8,6 +8,7 @@
 import 'dart:async';
 import 'dart:io' as io;
 
+import 'package:collection/collection.dart';
 import 'package:devtools_shared/devtools_shared.dart';
 import 'package:vm_service/vm_service.dart';
 
@@ -117,7 +118,7 @@
 
   AdbMemoryInfo? adbMemoryInfo;
 
-  late EventSample eventSample;
+  EventSample eventSample = EventSample.empty();
 
   RasterCache? rasterCache;
 
@@ -227,9 +228,8 @@
         flutterViewListResponse.json!['views'].cast<Map<String, dynamic>>();
 
     // Each isolate should only have one FlutterView.
-    final flutterView = views.firstWhere(
+    final flutterView = views.firstWhereOrNull(
       (view) => view['type'] == 'FlutterView',
-      orElse: () => null,
     );
 
     if (flutterView == null) {
diff --git a/pkg/dds/test/dap/integration/test_support.dart b/pkg/dds/test/dap/integration/test_support.dart
index ebabce8..7a55bb2 100644
--- a/pkg/dds/test/dap/integration/test_support.dart
+++ b/pkg/dds/test/dap/integration/test_support.dart
@@ -33,7 +33,12 @@
 /// This is useful for debugging locally or on the bots and will include both
 /// DAP traffic (between the test DAP client and the DAP server) and the VM
 /// Service traffic (wrapped in a custom 'dart.log' event).
-final verboseLogging = Platform.environment['DAP_TEST_VERBOSE'] == 'true';
+///
+/// Verbose logging is temporarily enabled for all test runs to try and
+/// understand failures noted at https://github.com/dart-lang/sdk/issues/48274.
+/// Once resolved, this variable can be set back to the result of:
+///     Platform.environment['DAP_TEST_VERBOSE'] == 'true'
+final verboseLogging = true;
 
 /// A [RegExp] that matches the `path` part of a VM Service URI that contains
 /// an authentication token.
@@ -236,7 +241,30 @@
     await server.stop();
 
     // Clean up any temp folders created during the test runs.
-    testDir.deleteSync(recursive: true);
+    await tryDelete(testDir);
+  }
+
+  /// Tries to delete [dir] multiple times before printing a warning and giving up.
+  ///
+  /// This avoids "The process cannot access the file because it is being
+  /// used by another process" errors on Windows trying to delete folders that
+  /// have only very recently been unlocked.
+  Future<void> tryDelete(Directory dir) async {
+    const maxAttempts = 10;
+    const delay = Duration(milliseconds: 100);
+    var attempt = 0;
+    while (++attempt <= maxAttempts) {
+      try {
+        testDir.deleteSync(recursive: true);
+        break;
+      } catch (e) {
+        if (attempt == maxAttempts) {
+          print('Failed to delete $testDir after $maxAttempts attempts.\n$e');
+          break;
+        }
+        await Future.delayed(delay);
+      }
+    }
   }
 
   static Future<DapTestSession> setUp({List<String>? additionalArgs}) async {
diff --git a/pkg/dds/tool/devtools_server/serve_local.dart b/pkg/dds/tool/devtools_server/serve_local.dart
new file mode 100644
index 0000000..db893fe
--- /dev/null
+++ b/pkg/dds/tool/devtools_server/serve_local.dart
@@ -0,0 +1,33 @@
+// 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:args/args.dart';
+import 'package:dds/devtools_server.dart';
+
+const argDevToolsBuild = 'devtools-build';
+
+void main(List<String> args) {
+  final argParser = ArgParser()
+    ..addOption(
+      argDevToolsBuild,
+      help: 'The location of the DevTools build to serve from DevTools server '
+          '(e.g. --devtools-build=absolute/path/to/devtools/build).',
+      mandatory: true,
+    );
+
+  try {
+    final ArgResults argResults = argParser.parse(args);
+    unawaited(
+      DevToolsServer().serveDevTools(
+        customDevToolsPath: argResults[argDevToolsBuild],
+      ),
+    );
+  } on FormatException catch (e) {
+    print(e.message);
+    print('');
+    print(argParser.usage);
+  }
+}
diff --git a/pkg/dds_service_extensions/OWNERS b/pkg/dds_service_extensions/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/dds_service_extensions/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/dev_compiler/OWNERS b/pkg/dev_compiler/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/dev_compiler/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/dev_compiler/analysis_options.yaml b/pkg/dev_compiler/analysis_options.yaml
index f93da08..f591c75 100644
--- a/pkg/dev_compiler/analysis_options.yaml
+++ b/pkg/dev_compiler/analysis_options.yaml
@@ -22,6 +22,7 @@
   rules:
     # Not enforced by lints at any version.
     - always_declare_return_types
+    - depend_on_referenced_packages
     - directives_ordering
     - omit_local_variable_types
     - prefer_single_quotes
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 9761f01..14685a4 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -460,11 +460,11 @@
 }
 
 bool isSdkInternalRuntimeUri(Uri importUri) {
-  return importUri.scheme == 'dart' && importUri.path == '_runtime';
+  return importUri.isScheme('dart') && importUri.path == '_runtime';
 }
 
 String libraryUriToJsIdentifier(Uri importUri) {
-  if (importUri.scheme == 'dart') {
+  if (importUri.isScheme('dart')) {
     return isSdkInternalRuntimeUri(importUri) ? 'dart' : importUri.path;
   }
   return pathToJSIdentifier(p.withoutExtension(importUri.pathSegments.last));
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_command.dart b/pkg/dev_compiler/lib/src/compiler/shared_command.dart
index 77fc615..02472f7 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_command.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_command.dart
@@ -238,9 +238,6 @@
     // that build systems do not depend on passing windows-style paths here.
     return p.toUri(moduleName).toString();
   }
-
-  // TODO(nshahan) Cleanup when NNBD graduates experimental status.
-  bool get enableNullSafety => experiments['non-nullable'] ?? false;
 }
 
 /// Finds explicit module names of the form `path=name` in [summaryPaths],
@@ -350,7 +347,7 @@
 
 Uri sourcePathToRelativeUri(String source, {bool windows}) {
   var uri = sourcePathToUri(source, windows: windows);
-  if (uri.scheme == 'file') {
+  if (uri.isScheme('file')) {
     var uriPath = uri.path;
     var root = Uri.base.path;
     if (uriPath.startsWith(root)) {
@@ -403,7 +400,7 @@
       return sourcePath;
     }
 
-    if (uri.scheme == 'http') return sourcePath;
+    if (uri.isScheme('http')) return sourcePath;
 
     // Convert to a local file path if it's not.
     sourcePath = sourcePathToUri(p.absolute(p.fromUri(uri))).path;
diff --git a/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart b/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
index b2647e0..33b6496 100644
--- a/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
+++ b/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
@@ -32,7 +32,7 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme == 'file') {
+    if (uri.isScheme('file')) {
       return original.entityForUri(uri);
     }
 
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 9b9fd08..6f81197 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -10,7 +10,6 @@
 
 import 'package:args/args.dart';
 import 'package:build_integration/file_system/multi_root.dart';
-import 'package:cli_util/cli_util.dart' show getSdkPath;
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:kernel/binary/ast_to_binary.dart' as kernel show BinaryPrinter;
 import 'package:kernel/class_hierarchy.dart';
@@ -177,7 +176,7 @@
       options.multiRootScheme, multiRootPaths, fe.StandardFileSystem.instance);
 
   Uri toCustomUri(Uri uri) {
-    if (uri.scheme == '') {
+    if (!uri.hasScheme) {
       return Uri(scheme: options.multiRootScheme, path: '/' + uri.path);
     }
     return uri;
@@ -276,7 +275,7 @@
         additionalDills,
         DevCompilerTarget(TargetFlags(
             trackWidgetCreation: trackWidgetCreation,
-            enableNullSafety: options.enableNullSafety)),
+            enableNullSafety: options.soundNullSafety)),
         fileSystem: fileSystem,
         explicitExperimentalFlags: explicitExperimentalFlags,
         environmentDefines: declaredVariables,
@@ -315,7 +314,7 @@
         inputDigests,
         DevCompilerTarget(TargetFlags(
             trackWidgetCreation: trackWidgetCreation,
-            enableNullSafety: options.enableNullSafety)),
+            enableNullSafety: options.soundNullSafety)),
         fileSystem: fileSystem,
         explicitExperimentalFlags: explicitExperimentalFlags,
         environmentDefines: declaredVariables,
@@ -486,7 +485,7 @@
       compilerState.incrementalCompiler.updateNeededDillLibrariesWithHierarchy(
           neededDillLibraries, result.classHierarchy);
       for (var lib in neededDillLibraries) {
-        if (lib.importUri.scheme == 'dart') continue;
+        if (lib.importUri.isScheme('dart')) continue;
         var uri = compilerState.libraryToInputDill[lib.importUri];
         if (uri == null) {
           throw StateError('Library ${lib.importUri} was recorded as used, '
@@ -552,7 +551,7 @@
   var component = loadComponentFromBinary(inputs.single);
   var invalidLibraries = <Uri>[];
   for (var library in component.libraries) {
-    if (library.importUri.scheme != 'dart') {
+    if (!library.importUri.isScheme('dart')) {
       invalidLibraries.add(library.importUri);
     }
   }
@@ -837,11 +836,14 @@
 
 final defaultLibrarySpecPath = p.join(getSdkPath(), 'lib', 'libraries.json');
 
-/// Returns the absolute path to the default `.packages` file, or `null` if one
-/// could not be found.
+/// Return the path to the runtime Dart SDK.
+String getSdkPath() => p.dirname(p.dirname(Platform.resolvedExecutable));
+
+/// Returns the absolute path to the default `package_config.json` file, or
+/// `null` if one could not be found.
 ///
-/// Checks for a `.packages` file in the current working directory, or in any
-/// parent directory.
+/// Checks for a `.dart_tool/package_config.json` file in the current working
+/// directory, or in any parent directory.
 String _findPackagesFilePath() {
   // TODO(jmesserly): this was copied from package:package_config/discovery.dart
   // Unfortunately the relevant function is not public. CFE APIs require a URI
@@ -850,9 +852,9 @@
   if (!dir.isAbsolute) dir = dir.absolute;
   if (!dir.existsSync()) return null;
 
-  // Check for $cwd/.packages
+  // Check for $cwd/.dart_tool/package_config.json
   while (true) {
-    var file = File(p.join(dir.path, '.packages'));
+    var file = File.fromUri(dir.uri.resolve('.dart_tool/package_config.json'));
     if (file.existsSync()) return file.path;
 
     // If we didn't find it, search the parent directory.
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index e0efac6..f0a8fc7 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -496,10 +496,10 @@
   @override
   String jsLibraryAlias(Library library) {
     var uri = library.importUri.normalizePath();
-    if (uri.scheme == 'dart') return null;
+    if (uri.isScheme('dart')) return null;
 
     Iterable<String> segments;
-    if (uri.scheme == 'package') {
+    if (uri.isScheme('package')) {
       // Strip the package name.
       segments = uri.pathSegments.skip(1);
     } else {
@@ -518,6 +518,12 @@
   Iterable<String> jsPartDebuggerNames(Library library) =>
       library.parts.map((part) => part.partUri);
 
+  /// True when [library] is the sdk internal library 'dart:_internal'.
+  bool _isDartInternal(Library library) {
+    var importUri = library.importUri;
+    return importUri.isScheme('dart') && importUri.path == '_internal';
+  }
+
   @override
   bool isSdkInternalRuntime(Library l) {
     return isSdkInternalRuntimeUri(l.importUri);
@@ -525,7 +531,7 @@
 
   @override
   String libraryToModule(Library library) {
-    if (library.importUri.scheme == 'dart') {
+    if (library.importUri.isScheme('dart')) {
       // TODO(jmesserly): we need to split out HTML.
       return js_ast.dartSdkModule;
     }
@@ -1934,7 +1940,7 @@
 
   bool _isForwardingStub(Procedure member) {
     if (member.isForwardingStub || member.isForwardingSemiStub) {
-      if (_currentLibrary.importUri.scheme != 'dart') return true;
+      if (!_currentLibrary.importUri.isScheme('dart')) return true;
       // TODO(jmesserly): external methods in the SDK seem to get incorrectly
       // tagged as forwarding stubs even if they are patched. Perhaps there is
       // an ordering issue in CFE. So for now we pattern match to see if it
@@ -2248,7 +2254,7 @@
         _hierarchy.getClassAsInstanceOf(c.superclass, _coreTypes.iterableClass);
     if (parentIterable != null) return null;
 
-    if (c.enclosingLibrary.importUri.scheme == 'dart' &&
+    if (c.enclosingLibrary.importUri.isScheme('dart') &&
         c.procedures.any((m) => _jsExportName(m) == 'Symbol.iterator')) {
       return null;
     }
@@ -2758,7 +2764,7 @@
     var fn = _emitFunction(p.function, p.name.text)
       ..sourceInformation = _nodeEnd(p.fileEndOffset);
 
-    if (_currentLibrary.importUri.scheme == 'dart' &&
+    if (_currentLibrary.importUri.isScheme('dart') &&
         _isInlineJSFunction(p.function.body)) {
       fn = js_ast.simplifyPassThroughArrowFunCallBody(fn);
     }
@@ -3007,14 +3013,7 @@
     //   * `class A extends B {...}` where B is the InterfaceType.
     //   * Emitting non-null constructor calls.
     // * The InterfaceType is the Null type.
-    // * The types were written in JS context or as part of the dart:_runtime
-    //   library.
-    if (!emitNullability ||
-        type == _coreTypes.deprecatedNullType ||
-        // TODO(38701) Remove these once the SDK has unforked and is running
-        // "opted-in"
-        !coreLibrary.isNonNullableByDefault &&
-            (_isInForeignJS || isSdkInternalRuntime(currentLibrary))) {
+    if (!emitNullability || type == _coreTypes.deprecatedNullType) {
       return typeRep;
     }
 
@@ -3738,7 +3737,7 @@
 
   bool _reifyGenericFunction(Member m) =>
       m == null ||
-      m.enclosingLibrary.importUri.scheme != 'dart' ||
+      !m.enclosingLibrary.importUri.isScheme('dart') ||
       !m.annotations
           .any((a) => isBuiltinAnnotation(a, '_js_helper', 'NoReifyGeneric'));
 
@@ -5465,6 +5464,15 @@
     if (target.isFactory) return _emitFactoryInvocation(node);
 
     // Optimize some internal SDK calls.
+    if (_isDartInternal(target.enclosingLibrary)) {
+      var args = node.arguments;
+      if (args.positional.length == 1 &&
+          args.types.length == 1 &&
+          args.named.isEmpty &&
+          target.name.text == 'unsafeCast') {
+        return args.positional.single.accept(this);
+      }
+    }
     if (isSdkInternalRuntime(target.enclosingLibrary)) {
       var name = target.name.text;
       if (node.arguments.positional.isEmpty &&
@@ -5684,7 +5692,7 @@
 
   bool _isWebLibrary(Uri importUri) =>
       importUri != null &&
-      importUri.scheme == 'dart' &&
+      importUri.isScheme('dart') &&
       (importUri.path == 'html' ||
           importUri.path == 'svg' ||
           importUri.path == 'indexed_db' ||
@@ -5784,7 +5792,7 @@
 
     if (args.positional.isEmpty &&
         args.named.isEmpty &&
-        ctorClass.enclosingLibrary.importUri.scheme == 'dart') {
+        ctorClass.enclosingLibrary.importUri.isScheme('dart')) {
       // Skip the slow SDK factory constructors when possible.
       switch (ctorClass.name) {
         case 'Map':
@@ -6300,7 +6308,7 @@
       ]);
 
   bool _reifyFunctionType(FunctionNode f) {
-    if (_currentLibrary.importUri.scheme != 'dart') return true;
+    if (!_currentLibrary.importUri.isScheme('dart')) return true;
     var parent = f.parent;
 
     // SDK libraries can skip reification if they request it.
@@ -6329,7 +6337,7 @@
   /// under which functions are compiled and exported.
   String _jsExportName(NamedNode n) {
     var library = getLibrary(n);
-    if (library == null || library.importUri.scheme != 'dart') return null;
+    if (library == null || !library.importUri.isScheme('dart')) return null;
 
     return _annotationName(n, isJSExportNameAnnotation);
   }
@@ -6355,7 +6363,7 @@
   js_ast.Expression visitConstant(Constant node) {
     if (node is StaticTearOffConstant) {
       // JS() or external JS consts should not be lazily loaded.
-      var isSdk = node.target.enclosingLibrary.importUri.scheme == 'dart';
+      var isSdk = node.target.enclosingLibrary.importUri.isScheme('dart');
       if (_isInForeignJS) {
         return _emitStaticTarget(node.target);
       }
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 215ba19..4ba953c 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -299,7 +299,7 @@
     var libraryUri = Uri.parse(request.libraryUri);
     var moduleName = request.moduleName;
 
-    if (libraryUri.scheme == 'dart') {
+    if (libraryUri.isScheme('dart')) {
       // compiling expressions inside the SDK currently fails because
       // SDK kernel outlines do not contain information that is needed
       // to detect the scope for expression evaluation - such as local
@@ -329,7 +329,7 @@
     var originalComponent = _moduleCache.componentForModuleName[moduleName];
 
     var component = _sdkComponent;
-    if (libraryUri.scheme != 'dart') {
+    if (!libraryUri.isScheme('dart')) {
       _processedOptions.ticker.logMs('Collecting libraries for $moduleName');
 
       var libraries =
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 44fe33a..fa868d9 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -92,7 +92,7 @@
   var c = getAnnotationClass(value);
   if (c != null && c.name == className) {
     var uri = c.enclosingLibrary.importUri;
-    return uri.scheme == 'dart' && uri.path == libraryName;
+    return uri.isScheme('dart') && uri.path == libraryName;
   }
   return false;
 }
@@ -223,7 +223,7 @@
 ///
 /// `dart:html` has many of these.
 bool isUnsupportedFactoryConstructor(Procedure node) {
-  if (node.name.isPrivate && node.enclosingLibrary.importUri.scheme == 'dart') {
+  if (node.name.isPrivate && node.enclosingLibrary.importUri.isScheme('dart')) {
     var body = node.function.body;
     if (body is Block) {
       var statements = body.statements;
@@ -365,4 +365,4 @@
 }
 
 bool _isDartInternal(Uri uri) =>
-    uri.scheme == 'dart' && uri.path == '_internal';
+    uri.isScheme('dart') && uri.path == '_internal';
diff --git a/pkg/dev_compiler/lib/src/kernel/native_types.dart b/pkg/dev_compiler/lib/src/kernel/native_types.dart
index 665f722..6ff4cdf 100644
--- a/pkg/dev_compiler/lib/src/kernel/native_types.dart
+++ b/pkg/dev_compiler/lib/src/kernel/native_types.dart
@@ -170,5 +170,5 @@
   var c = getAnnotationClass(annotation);
   return c != null &&
       (c.name == 'Native' || c.name == 'JsPeerInterface') &&
-      c.enclosingLibrary.importUri.scheme == 'dart';
+      c.enclosingLibrary.importUri.isScheme('dart');
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
index 71aaed2..c1ec743 100644
--- a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
+++ b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
@@ -338,9 +338,9 @@
 
   bool _isInternalSdkAnnotation(Library library) {
     var uri = library.importUri;
-    return uri.scheme == 'dart' && uri.pathSegments[0] == '_js_helper' ||
+    return uri.isScheme('dart') && uri.pathSegments[0] == '_js_helper' ||
         allowPackageMetaAnnotations &&
-            uri.scheme == 'package' &&
+            uri.isScheme('package') &&
             uri.pathSegments[0] == 'meta';
   }
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 90dc78e..2fb1100 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -120,11 +120,11 @@
   /// test framework.
   bool _allowedTestLibrary(Uri uri) {
     // Multi-root scheme used by modular test framework.
-    if (uri.scheme == 'dev-dart-app') return true;
+    if (uri.isScheme('dev-dart-app')) return true;
     return allowedNativeTest(uri);
   }
 
-  bool _allowedDartLibrary(Uri uri) => uri.scheme == 'dart';
+  bool _allowedDartLibrary(Uri uri) => uri.isScheme('dart');
 
   @override
   bool enableNative(Uri uri) =>
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index 0d15516..acd4d9d 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -14,7 +14,6 @@
   bazel_worker: any
   build_integration:
     path: ../build_integration
-  cli_util: any
   collection: ^1.15.0
   front_end:
     path: ../front_end
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 7eaac57..7db89ce 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
@@ -315,6 +315,231 @@
               'Symbol(C.field): 42, Symbol(_field): 0}');
     });
   });
+
+  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}
+
+      enum E2 {id1, id2, id3}
+
+      main() {
+        var e = E.id2;
+        // Breakpoint: bp
+        print('hello world');
+      }
+        ''';
+
+    setUpAll(() async {
+      await driver.initSource(setup, source);
+    });
+
+    tearDownAll(() async {
+      await driver.cleanupTest();
+    });
+
+    test('evaluate to the correct string', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'E.id2.toString()',
+          expectedResult: 'E.id2');
+    });
+    test('evaluate to the correct index', () async {
+      await driver.check(
+          breakpointId: 'bp', expression: 'E.id3.index', expectedResult: '2');
+    });
+    test('compare properly against themselves', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'e == E.id2 && E.id2 == E.id2',
+          expectedResult: 'true');
+    });
+    test('compare properly against other enums', () async {
+      await driver.check(
+          breakpointId: 'bp',
+          expression: 'e != E2.id2 && E.id2 != E2.id2',
+          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/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index 90f0eef..c578305 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -9,9 +9,9 @@
 import 'dart:io' show Directory, File, Platform;
 
 import 'package:browser_launcher/browser_launcher.dart' as browser;
-import 'package:cli_util/cli_util.dart';
 import 'package:dev_compiler/dev_compiler.dart';
 import 'package:dev_compiler/src/compiler/module_builder.dart';
+import 'package:dev_compiler/src/kernel/command.dart';
 import 'package:dev_compiler/src/kernel/module_metadata.dart';
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:front_end/src/compute_platform_binaries_location.dart' as fe;
@@ -111,11 +111,17 @@
       this.sourceMap);
 
   static Future<TestCompiler> init(SetupCompilerOptions setup,
-      {Uri input, Uri output, Uri packages}) async {
+      {Uri input,
+      Uri output,
+      Uri packages,
+      Map<String, bool> experiments = const {}}) async {
     // Initialize the incremental compiler and module component.
     // TODO: extend this for multi-module compilations by storing separate
     // compilers/components/names per module.
     setup.options.packagesFileUri = packages;
+    setup.options.explicitExperimentalFlags.addAll(fe.parseExperimentalFlags(
+        experiments,
+        onError: (message) => throw Exception(message)));
     var compiler = DevelopmentIncrementalCompiler(setup.options, input);
     var compilerResult = await compiler.computeDelta();
     var component = compilerResult.component;
@@ -127,6 +133,7 @@
     var compilerOptions = SharedCompilerOptions(
         replCompile: true,
         moduleName: moduleName,
+        experiments: experiments,
         soundNullSafety: setup.soundNullSafety,
         emitDebugMetadata: true);
     var coreTypes = compilerResult.coreTypes;
@@ -271,7 +278,8 @@
   ///
   /// Depends on SDK artifacts (such as the sound and unsound dart_sdk.js
   /// files) generated from the 'dartdevc_test' target.
-  Future<void> initSource(SetupCompilerOptions setup, String source) async {
+  Future<void> initSource(SetupCompilerOptions setup, String source,
+      {Map<String, bool> experiments}) async {
     // Perform setup sanity checks.
     var summaryPath = setup.options.sdkSummary.toFilePath();
     if (!File(summaryPath).existsSync()) {
@@ -310,7 +318,10 @@
 
     // Initialize DDC and the incremental compiler, then perform a full compile.
     compiler = await TestCompiler.init(setup,
-        input: input, output: output, packages: packagesFile);
+        input: input,
+        output: output,
+        packages: packagesFile,
+        experiments: experiments);
 
     htmlBootstrapper = testDir.uri.resolve('bootstrapper.html');
     var bootstrapFile = File(htmlBootstrapper.toFilePath())..createSync();
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
index 8dc187d..e5e91cc 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_test.dart
@@ -42,7 +42,7 @@
 
   Module(this.importUri, this.fileUri)
       : name = libraryUriToJsIdentifier(importUri),
-        path = importUri.scheme == 'package'
+        path = importUri.isScheme('package')
             ? 'packages/${importUri.path}'
             : importUri.path;
 
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index 901ca21..1c5d392 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -568,7 +568,7 @@
   void visitLibrary(Library node) {
     _staticTypeContext.enterLibrary(node);
     if (librariesFromDill.contains(node) ||
-        node.importUri.scheme == 'package' &&
+        node.importUri.isScheme('package') &&
             node.importUri.pathSegments[0] == 'meta') {
       return;
     }
diff --git a/pkg/dev_compiler/test/shared_test_options.dart b/pkg/dev_compiler/test/shared_test_options.dart
index 88013a3..7edff24 100644
--- a/pkg/dev_compiler/test/shared_test_options.dart
+++ b/pkg/dev_compiler/test/shared_test_options.dart
@@ -4,8 +4,8 @@
 
 // @dart = 2.9
 
-import 'package:cli_util/cli_util.dart';
 import 'package:dev_compiler/dev_compiler.dart';
+import 'package:dev_compiler/src/kernel/command.dart';
 import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart';
 import 'package:front_end/src/fasta/incremental_serializer.dart';
diff --git a/pkg/dev_compiler/test/worker/worker_test.dart b/pkg/dev_compiler/test/worker/worker_test.dart
index 25a4474..6e3e03e 100644
--- a/pkg/dev_compiler/test/worker/worker_test.dart
+++ b/pkg/dev_compiler/test/worker/worker_test.dart
@@ -18,10 +18,12 @@
 void main() {
   var baseArgs = <String>[];
   final executableArgs = <String>[
-    Platform.script.resolve('../../bin/dartdevc.dart').path,
+    Platform.script
+        .resolve('../../bin/dartdevc.dart')
+        .toFilePath(windows: Platform.isWindows),
     '--sound-null-safety',
     '--dart-sdk-summary',
-    Uri.parse(Platform.resolvedExecutable)
+    Uri.file(Platform.resolvedExecutable, windows: Platform.isWindows)
         .resolve('ddc_outline_sound.dill')
         .path
   ];
diff --git a/pkg/diagnostic/CHANGELOG.md b/pkg/diagnostic/CHANGELOG.md
deleted file mode 100644
index cb12c59..0000000
--- a/pkg/diagnostic/CHANGELOG.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## 0.1.0
-
-* Initial version
diff --git a/pkg/diagnostic/LICENSE b/pkg/diagnostic/LICENSE
deleted file mode 100644
index 4d1ad40..0000000
--- a/pkg/diagnostic/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright 2018, the Dart project authors.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google LLC nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/diagnostic/README.md b/pkg/diagnostic/README.md
deleted file mode 100644
index 4c5ddfa..0000000
--- a/pkg/diagnostic/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Diagnostics for Dart
-
-This package defines the support used by Dart tools to represent diagnostics, and the diagnostic codes that are shared
-by those tools.
-
-## Support
-
-Post issues and feature requests at https://github.com/dart-lang/sdk/issues
-
-## License
-
-See the [LICENSE] file.
-
-[LICENSE]: https://github.com/dart-lang/sdk/blob/main/pkg/diagnostic/LICENSE
diff --git a/pkg/diagnostic/doc/diagnostics.md b/pkg/diagnostic/doc/diagnostics.md
deleted file mode 100644
index b0261a5..0000000
--- a/pkg/diagnostic/doc/diagnostics.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Diagnostics Design
-
-This document discusses the principles used to design the diagnostics used by
-Dart tooling.
diff --git a/pkg/diagnostic/lib/diagnostic.dart b/pkg/diagnostic/lib/diagnostic.dart
deleted file mode 100644
index babf863..0000000
--- a/pkg/diagnostic/lib/diagnostic.dart
+++ /dev/null
@@ -1,3 +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.
diff --git a/pkg/diagnostic/pubspec.yaml b/pkg/diagnostic/pubspec.yaml
deleted file mode 100644
index b42e69b..0000000
--- a/pkg/diagnostic/pubspec.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-name: diagnostic
-# This package is not intended for consumption on pub.dev. DO NOT publish.
-publish_to: none
-author: Dart Team <misc@dartlang.org>
-description: Diagnostics for Dart
-homepage: https://github.com/dart-lang/sdk/tree/master/pkg/diagnostic
-environment:
-  sdk: '>=2.0.0-dev.48.0 <3.0.0'
diff --git a/pkg/expect/OWNERS b/pkg/expect/OWNERS
new file mode 100644
index 0000000..2ae9543
--- /dev/null
+++ b/pkg/expect/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_ENG
+rnystrom@google.com
diff --git a/pkg/front_end/OWNERS b/pkg/front_end/OWNERS
new file mode 100644
index 0000000..33947e7
--- /dev/null
+++ b/pkg/front_end/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_CFE
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 a8355e8..3bd1f30 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -9,7 +9,7 @@
     show DiagnosticMessage, DiagnosticMessageHandler;
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
 
-import 'package:kernel/ast.dart' show Version;
+import 'package:kernel/ast.dart' show Component, Version;
 
 import 'package:kernel/default_language_version.dart' as kernel
     show defaultLanguageVersion;
@@ -19,6 +19,7 @@
 import '../base/nnbd_mode.dart';
 
 import '../fasta/kernel/macro.dart';
+import '../macro_serializer.dart';
 import 'experimental_flags.dart'
     show
         AllowedExperimentalFlags,
@@ -113,16 +114,32 @@
 
   /// Function that creates a [MacroExecutor] if supported.
   ///
-  /// This is an experimental feature.
+  /// This is part of the experimental macro feature.
   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.
   ///
-  /// This is an experimental feature.
+  /// This is part of the experimental macro feature.
   Map<MacroClass, Uri>? precompiledMacroUris;
 
+  /// The [Target] used for compiling macros.
+  ///
+  /// If `null`, macro declarations will not be precompiled, even when other
+  /// libraries depend on them.
+  /// This is part of the experimental macro feature.
+  Target? macroTarget;
+
+  /// Function that can create a [Uri] for the serialized result of a
+  /// [Component].
+  ///
+  /// This is used to turn a precompiled macro into a [Uri] that can be loaded
+  /// by the macro executor provided by [macroExecutorProvider].
+  ///
+  /// This is part of the experimental macro feature.
+  MacroSerializer? macroSerializer;
+
   /// Whether to generate code for the SDK.
   ///
   /// By default the front end resolves components using a prebuilt SDK summary.
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 379c5ac..aa49e7b 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -93,9 +93,9 @@
   if (!enabled!) {
     allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
     Set<ExperimentalFlag>? allowedFlags;
-    if (canonicalUri.scheme == 'dart') {
+    if (canonicalUri.isScheme('dart')) {
       allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
-    } else if (canonicalUri.scheme == 'package') {
+    } else if (canonicalUri.isScheme('package')) {
       int index = canonicalUri.path.indexOf('/');
       String packageName;
       if (index >= 0) {
@@ -123,9 +123,9 @@
   allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
 
   Set<ExperimentalFlag>? allowedFlags;
-  if (canonicalUri.scheme == 'dart') {
+  if (canonicalUri.isScheme('dart')) {
     allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
-  } else if (canonicalUri.scheme == 'package') {
+  } else if (canonicalUri.isScheme('package')) {
     int index = canonicalUri.path.indexOf('/');
     String packageName;
     if (index >= 0) {
@@ -187,9 +187,9 @@
 
   Set<ExperimentalFlag>? allowedFlags;
   bool enabledByAllowed = false;
-  if (canonicalUri.scheme == 'dart') {
+  if (canonicalUri.isScheme('dart')) {
     allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
-  } else if (canonicalUri.scheme == 'package') {
+  } else if (canonicalUri.isScheme('package')) {
     int index = canonicalUri.path.indexOf('/');
     String packageName;
     if (index >= 0) {
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 1a8f894..953dfa4 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
@@ -106,17 +106,17 @@
   ExperimentalFlag.constantUpdate2018: true,
   ExperimentalFlag.constructorTearoffs: true,
   ExperimentalFlag.controlFlowCollections: true,
-  ExperimentalFlag.enhancedEnums: false,
+  ExperimentalFlag.enhancedEnums: true,
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
   ExperimentalFlag.genericMetadata: true,
   ExperimentalFlag.macros: false,
-  ExperimentalFlag.namedArgumentsAnywhere: false,
+  ExperimentalFlag.namedArgumentsAnywhere: true,
   ExperimentalFlag.nonNullable: true,
   ExperimentalFlag.nonfunctionTypeAliases: true,
   ExperimentalFlag.setLiterals: true,
   ExperimentalFlag.spreadCollections: true,
-  ExperimentalFlag.superParameters: false,
+  ExperimentalFlag.superParameters: true,
   ExperimentalFlag.testExperiment: false,
   ExperimentalFlag.tripleShift: true,
   ExperimentalFlag.valueClass: false,
diff --git a/pkg/front_end/lib/src/api_prototype/expression_compilation_tools.dart b/pkg/front_end/lib/src/api_prototype/expression_compilation_tools.dart
new file mode 100644
index 0000000..f078627
--- /dev/null
+++ b/pkg/front_end/lib/src/api_prototype/expression_compilation_tools.dart
@@ -0,0 +1,213 @@
+// 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:front_end/src/api_prototype/incremental_kernel_generator.dart'
+    show isLegalIdentifier;
+
+import 'package:front_end/src/api_prototype/lowering_predicates.dart'
+    show isExtensionThisName;
+
+import 'package:kernel/ast.dart'
+    show
+        Class,
+        DartType,
+        DynamicType,
+        InterfaceType,
+        Library,
+        Nullability,
+        TypeParameter;
+
+import 'package:kernel/library_index.dart' show LibraryIndex;
+
+Map<String, DartType>? createDefinitionsWithTypes(
+    Iterable<Library>? knownLibraries,
+    List<String> definitionTypes,
+    List<String> definitions) {
+  if (knownLibraries == null) {
+    return null;
+  }
+
+  List<ParsedType> definitionTypesParsed =
+      parseDefinitionTypes(definitionTypes);
+  if (definitionTypesParsed.length != definitions.length) {
+    return null;
+  }
+
+  Set<String> libraryUris = collectParsedTypeUris(definitionTypesParsed);
+  LibraryIndex libraryIndex =
+      new LibraryIndex.fromLibraries(knownLibraries, libraryUris);
+
+  Map<String, DartType> completeDefinitions = {};
+  for (int i = 0; i < definitions.length; i++) {
+    String name = definitions[i];
+    if (isLegalIdentifier(name) || (i == 0 && isExtensionThisName(name))) {
+      ParsedType type = definitionTypesParsed[i];
+      DartType dartType = type.createDartType(libraryIndex);
+      completeDefinitions[name] = dartType;
+    }
+  }
+  return completeDefinitions;
+}
+
+List<TypeParameter>? createTypeParametersWithBounds(
+    Iterable<Library>? knownLibraries,
+    List<String> typeBounds,
+    List<String> typeDefaults,
+    List<String> typeDefinitions) {
+  if (knownLibraries == null) {
+    return null;
+  }
+
+  List<ParsedType> typeBoundsParsed = parseDefinitionTypes(typeBounds);
+  if (typeBoundsParsed.length != typeDefinitions.length) {
+    return null;
+  }
+  List<ParsedType> typeDefaultsParsed = parseDefinitionTypes(typeDefaults);
+  if (typeDefaultsParsed.length != typeDefinitions.length) {
+    return null;
+  }
+
+  Set<String> libraryUris = collectParsedTypeUris(typeBoundsParsed)
+    ..addAll(collectParsedTypeUris(typeDefaultsParsed));
+  LibraryIndex libraryIndex =
+      new LibraryIndex.fromLibraries(knownLibraries, libraryUris);
+
+  List<TypeParameter> typeParameters = [];
+  for (int i = 0; i < typeDefinitions.length; i++) {
+    String name = typeDefinitions[i];
+    if (!isLegalIdentifier(name)) continue;
+    ParsedType bound = typeBoundsParsed[i];
+    DartType dartTypeBound = bound.createDartType(libraryIndex);
+    ParsedType defaultType = typeDefaultsParsed[i];
+    DartType dartTypeDefaultType = defaultType.createDartType(libraryIndex);
+    typeParameters
+        .add(new TypeParameter(name, dartTypeBound, dartTypeDefaultType));
+  }
+  return typeParameters;
+}
+
+List<ParsedType> parseDefinitionTypes(List<String> definitionTypes) {
+  List<ParsedType> result = [];
+  int i = 0;
+  List<ParsedType> argumentReceivers = [];
+  while (i < definitionTypes.length) {
+    String uriOrNullString = definitionTypes[i];
+    if (uriOrNullString == "null") {
+      if (argumentReceivers.isEmpty) {
+        result.add(new ParsedType.nullType());
+      } else {
+        argumentReceivers
+            .removeLast()
+            .arguments!
+            .add(new ParsedType.nullType());
+      }
+      i++;
+      continue;
+    } else {
+      // We expect at least 4 elements: Uri, class name, nullability,
+      // number of type arguments.
+      if (i + 4 > definitionTypes.length) throw "invalid input";
+      String className = definitionTypes[i + 1];
+      int nullability = int.parse(definitionTypes[i + 2]);
+      int typeArgumentsCount = int.parse(definitionTypes[i + 3]);
+      ParsedType type = new ParsedType(uriOrNullString, className, nullability);
+      if (argumentReceivers.isEmpty) {
+        result.add(type);
+      } else {
+        argumentReceivers.removeLast().arguments!.add(type);
+      }
+      for (int j = 0; j < typeArgumentsCount; j++) {
+        argumentReceivers.add(type);
+      }
+      i += 4;
+    }
+  }
+  if (argumentReceivers.isNotEmpty) {
+    throw "Nesting error on input $definitionTypes";
+  }
+  return result;
+}
+
+class ParsedType {
+  final String? uri;
+  final String? className;
+  final int? nullability;
+  final List<ParsedType>? arguments;
+
+  bool get isNullType => uri == null;
+
+  ParsedType(this.uri, this.className, this.nullability) : arguments = [];
+
+  ParsedType.nullType()
+      : uri = null,
+        className = null,
+        nullability = null,
+        arguments = null;
+
+  @override
+  bool operator ==(Object other) {
+    if (other is! ParsedType) return false;
+    if (uri != other.uri) return false;
+    if (className != other.className) return false;
+    if (nullability != other.nullability) return false;
+    if (arguments?.length != other.arguments?.length) return false;
+    if (arguments != null) {
+      for (int i = 0; i < arguments!.length; i++) {
+        if (arguments![i] != other.arguments![i]) return false;
+      }
+    }
+    return true;
+  }
+
+  @override
+  int get hashCode {
+    if (isNullType) return 0;
+    int hash = 0x3fffffff & uri.hashCode;
+    hash = 0x3fffffff & (hash * 31 + (hash ^ className.hashCode));
+    hash = 0x3fffffff & (hash * 31 + (hash ^ nullability.hashCode));
+    for (ParsedType argument in arguments!) {
+      hash = 0x3fffffff & (hash * 31 + (hash ^ argument.hashCode));
+    }
+    return hash;
+  }
+
+  @override
+  String toString() {
+    if (isNullType) return "null-type";
+    return "$uri[$className] ($nullability) <$arguments>";
+  }
+
+  DartType createDartType(LibraryIndex libraryIndex) {
+    if (isNullType) return new DynamicType();
+    Class? classNode = libraryIndex.tryGetClass(uri!, className!);
+    if (classNode == null) return new DynamicType();
+
+    return new InterfaceType(
+        classNode,
+        _getDartNullability(),
+        arguments
+            ?.map((e) => e.createDartType(libraryIndex))
+            .toList(growable: false));
+  }
+
+  Nullability _getDartNullability() {
+    if (isNullType) throw "No nullability on the null type";
+    if (nullability == 0) return Nullability.nullable;
+    if (nullability == 1) return Nullability.nonNullable;
+    if (nullability == 2) return Nullability.legacy;
+    throw "Unknown nullability";
+  }
+}
+
+Set<String> collectParsedTypeUris(List<ParsedType> parsedTypes) {
+  Set<String> result = {};
+  List<ParsedType> workList = new List.from(parsedTypes);
+  while (workList.isNotEmpty) {
+    ParsedType type = workList.removeLast();
+    if (type.isNullType) continue;
+    result.add(type.uri!);
+    workList.addAll(type.arguments!);
+  }
+  return result;
+}
diff --git a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index ae632ec..880d764 100644
--- a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -25,13 +25,14 @@
 export '../fasta/incremental_serializer.dart' show IncrementalSerializer;
 
 abstract class IncrementalKernelGenerator {
-  factory IncrementalKernelGenerator(CompilerOptions options, Uri entryPoint,
+  factory IncrementalKernelGenerator(
+      CompilerOptions options, List<Uri> entryPoints,
       [Uri? initializeFromDillUri,
       bool? outlineOnly,
       IncrementalSerializer? incrementalSerializer]) {
     return new IncrementalCompiler(
         new CompilerContext(
-            new ProcessedOptions(options: options, inputs: [entryPoint])),
+            new ProcessedOptions(options: options, inputs: entryPoints)),
         initializeFromDillUri,
         outlineOnly,
         incrementalSerializer);
@@ -42,11 +43,11 @@
   /// Notice that the component has to include the platform, and that no other
   /// platform will be loaded.
   factory IncrementalKernelGenerator.fromComponent(
-      CompilerOptions options, Uri entryPoint, Component? component,
+      CompilerOptions options, List<Uri> entryPoints, Component? component,
       [bool? outlineOnly, IncrementalSerializer? incrementalSerializer]) {
     return new IncrementalCompiler.fromComponent(
         new CompilerContext(
-            new ProcessedOptions(options: options, inputs: [entryPoint])),
+            new ProcessedOptions(options: options, inputs: entryPoints)),
         component,
         outlineOnly,
         incrementalSerializer);
@@ -63,10 +64,10 @@
   /// Notice that the component has to include the platform, and that no other
   /// platform will be loaded.
   factory IncrementalKernelGenerator.forExpressionCompilationOnly(
-      CompilerOptions options, Uri entryPoint, Component component) {
+      CompilerOptions options, List<Uri> entryPoints, Component component) {
     return new IncrementalCompiler.forExpressionCompilationOnly(
         new CompilerContext(
-            new ProcessedOptions(options: options, inputs: [entryPoint])),
+            new ProcessedOptions(options: options, inputs: entryPoints)),
         component);
   }
 
diff --git a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
index ca6286c..39c7f32 100644
--- a/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/kernel_generator.dart
@@ -45,16 +45,19 @@
 /// The input [source] is expected to be a script with a main method, otherwise
 /// an error is reported.
 // TODO(sigmund): rename to kernelForScript?
-Future<CompilerResult?> kernelForProgram(
-    Uri source, CompilerOptions options) async {
-  return (await kernelForProgramInternal(source, options));
+Future<CompilerResult?> kernelForProgram(Uri source, CompilerOptions options,
+    {List<Uri> additionalSources: const <Uri>[]}) async {
+  return (await kernelForProgramInternal(source, options,
+      additionalSources: additionalSources));
 }
 
 Future<CompilerResult?> kernelForProgramInternal(
     Uri source, CompilerOptions options,
-    {bool retainDataForTesting: false, bool requireMain: true}) async {
-  ProcessedOptions pOptions =
-      new ProcessedOptions(options: options, inputs: [source]);
+    {List<Uri> additionalSources: const <Uri>[],
+    bool retainDataForTesting: false,
+    bool requireMain: true}) async {
+  ProcessedOptions pOptions = new ProcessedOptions(
+      options: options, inputs: [source, ...additionalSources]);
   return await CompilerContext.runWithOptions(pOptions, (context) async {
     CompilerResult result = await generateKernelInternal(
         includeHierarchyAndCoreTypes: true,
diff --git a/pkg/front_end/lib/src/api_prototype/language_version.dart b/pkg/front_end/lib/src/api_prototype/language_version.dart
index 566c816..94dcb51 100644
--- a/pkg/front_end/lib/src/api_prototype/language_version.dart
+++ b/pkg/front_end/lib/src/api_prototype/language_version.dart
@@ -57,7 +57,7 @@
     UriTranslator uriTranslator = await context.options.getUriTranslator();
     Uri? fileUri;
     Package? package;
-    if (uri.scheme == "package") {
+    if (uri.isScheme("package")) {
       fileUri = uriTranslator.translate(uri);
       package = uriTranslator.getPackage(uri);
     } else {
@@ -65,8 +65,8 @@
       package = uriTranslator.packages.packageOf(uri);
     }
     Uri packageUri = uri;
-    if (packageUri.scheme != 'dart' &&
-        packageUri.scheme != 'package' &&
+    if (!packageUri.isScheme('dart') &&
+        !packageUri.isScheme('package') &&
         package != null &&
         // ignore: unnecessary_null_comparison
         package.name != null) {
diff --git a/pkg/front_end/lib/src/api_prototype/standard_file_system.dart b/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
index e7fd2c5..d15af72 100644
--- a/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
+++ b/pkg/front_end/lib/src/api_prototype/standard_file_system.dart
@@ -23,12 +23,12 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme == 'file') {
+    if (uri.isScheme('file')) {
       return new _IoFileSystemEntity(uri);
-    } else if (uri.scheme == '') {
+    } else if (!uri.hasScheme) {
       // TODO(askesc): Empty schemes should have been handled elsewhere.
       return new _IoFileSystemEntity(Uri.base.resolveUri(uri));
-    } else if (uri.scheme == 'data') {
+    } else if (uri.isScheme('data')) {
       return new DataFileSystemEntity(Uri.base.resolveUri(uri));
     } else {
       throw new FileSystemException(
@@ -125,7 +125,7 @@
   final Uri uri;
 
   DataFileSystemEntity(this.uri)
-      : assert(uri.scheme == 'data'),
+      : assert(uri.isScheme('data')),
         assert(uri.data != null);
 
   @override
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index 357b21f..74fd203 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -10,12 +10,8 @@
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
 
-import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show StringToken;
-
 import 'package:kernel/kernel.dart' show Component;
 
-import 'package:kernel/ast.dart' as ir;
-
 import 'package:kernel/target/targets.dart' show Target;
 
 import '../api_prototype/compiler_options.dart'
@@ -126,12 +122,6 @@
 
 export 'compiler_state.dart' show InitializedCompilerState;
 
-void clearStringTokenCanonicalizer() {
-  // TODO(ahe): We should be able to remove this. Fasta should take care of
-  // clearing the cache when.
-  StringToken.canonicalizer.clear();
-}
-
 InitializedCompilerState initializeCompiler(
     InitializedCompilerState? oldState,
     Target target,
@@ -213,9 +203,3 @@
   options.fileSystem = const NullFileSystem();
   return compilerResult?.component;
 }
-
-/// Desugar API to determine whether [member] is a redirecting factory
-/// constructor.
-// TODO(sigmund): Delete this API once `member.isRedirectingFactory`
-// is implemented correctly for patch files (Issue #33495).
-bool isRedirectingFactory(ir.Procedure member) => member.isRedirectingFactory;
diff --git a/pkg/front_end/lib/src/api_unstable/vm.dart b/pkg/front_end/lib/src/api_unstable/vm.dart
index b915847..9190ebc 100644
--- a/pkg/front_end/lib/src/api_unstable/vm.dart
+++ b/pkg/front_end/lib/src/api_unstable/vm.dart
@@ -18,6 +18,9 @@
 export '../api_prototype/experimental_flags.dart'
     show defaultExperimentalFlags, ExperimentalFlag;
 
+export '../api_prototype/expression_compilation_tools.dart'
+    show createDefinitionsWithTypes, createTypeParametersWithBounds;
+
 export '../api_prototype/file_system.dart'
     show FileSystem, FileSystemEntity, FileSystemException;
 
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index f8a8de9..a91d6cb 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -563,7 +563,7 @@
     }
 
     // When compiling the SDK the input files are normally `dart:` URIs.
-    if (inputs.every((uri) => uri.scheme == 'dart')) {
+    if (inputs.every((uri) => uri.isScheme('dart'))) {
       return _packages = PackageConfig.empty;
     }
 
@@ -577,7 +577,7 @@
 
     Uri input = inputs.first;
 
-    if (input.scheme == 'packages') {
+    if (input.isScheme('package')) {
       report(
           messageCantInferPackagesFromPackageUri.withLocation(
               input, -1, noLength),
diff --git a/pkg/front_end/lib/src/compute_platform_binaries_location.dart b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
index c849e08..e53340f 100644
--- a/pkg/front_end/lib/src/compute_platform_binaries_location.dart
+++ b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
@@ -95,7 +95,7 @@
 /// Translates an SDK URI ("org-dartlang-sdk:///...") to a file URI.
 Uri translateSdk(Uri uri) {
   if (CompilerContext.isActive) {
-    if (uri.scheme == "org-dartlang-sdk") {
+    if (uri.isScheme("org-dartlang-sdk")) {
       String path = uri.path;
       if (path.startsWith("/sdk/")) {
         CompilerContext context = CompilerContext.current;
@@ -148,7 +148,7 @@
 }
 
 bool isExistingFile(Uri uri) {
-  if (uri.scheme == "file") {
+  if (uri.isScheme("file")) {
     return new File.fromUri(uri).existsSync();
   } else {
     return false;
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 05653ef..fd50ae4 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -51,9 +51,7 @@
   /// The types in the `on` clause of an extension or mixin declaration.
   List<TypeBuilder>? get onTypes;
 
-  ConstructorScope get constructors;
-
-  ConstructorScopeBuilder get constructorScopeBuilder;
+  ConstructorScope get constructorScope;
 
   @override
   Uri get fileUri;
@@ -62,6 +60,8 @@
 
   bool get isMacro;
 
+  bool get isAugmentation;
+
   bool get declaresConstConstructor;
 
   bool get isMixin;
@@ -124,11 +124,7 @@
       {bool isSetter: false, bool isSuper: false});
 
   /// Calls [f] for each constructor declared in this class.
-  ///
-  /// If [includeInjectedConstructors] is `true`, constructors only declared in
-  /// the patch class, if any, are included.
-  void forEachConstructor(void Function(String, MemberBuilder) f,
-      {bool includeInjectedConstructors: false});
+  void forEachConstructor(void Function(String, MemberBuilder) f);
 }
 
 abstract class ClassBuilderImpl extends DeclarationBuilderImpl
@@ -146,10 +142,7 @@
   List<TypeBuilder>? onTypes;
 
   @override
-  final ConstructorScope constructors;
-
-  @override
-  final ConstructorScopeBuilder constructorScopeBuilder;
+  final ConstructorScope constructorScope;
 
   @override
   bool isNullClass = false;
@@ -168,11 +161,10 @@
       this.interfaceBuilders,
       this.onTypes,
       Scope scope,
-      this.constructors,
+      this.constructorScope,
       LibraryBuilder parent,
       int charOffset)
-      : constructorScopeBuilder = new ConstructorScopeBuilder(constructors),
-        super(metadata, modifiers, name, parent, charOffset, scope);
+      : super(metadata, modifiers, name, parent, charOffset, scope);
 
   @override
   String get debugName => "ClassBuilder";
@@ -229,7 +221,7 @@
       return null;
     }
     MemberBuilder? declaration =
-        constructors.lookup(name == 'new' ? '' : name, charOffset, uri);
+        constructorScope.lookup(name == 'new' ? '' : name, charOffset, uri);
     if (declaration == null && isPatch) {
       return origin.findConstructorOrFactory(
           name, charOffset, uri, accessingLibrary);
@@ -326,7 +318,7 @@
     }
     if (name == "FutureOr") {
       LibraryBuilder parentLibrary = parent as LibraryBuilder;
-      if (parentLibrary.importUri.scheme == "dart" &&
+      if (parentLibrary.importUri.isScheme("dart") &&
           parentLibrary.importUri.path == "async") {
         assert(arguments != null && arguments.length == 1);
         return new FutureOrType(arguments!.single, nullability);
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 4490af2..4a09bd96 100644
--- a/pkg/front_end/lib/src/fasta/builder/declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/declaration_builder.dart
@@ -15,8 +15,6 @@
 abstract class DeclarationBuilder implements TypeDeclarationBuilder {
   Scope get scope;
 
-  ScopeBuilder get scopeBuilder;
-
   LibraryBuilder get library;
 
   /// Lookup a member accessed statically through this declaration.
@@ -48,15 +46,11 @@
   final Scope scope;
 
   @override
-  final ScopeBuilder scopeBuilder;
-
-  @override
   final Uri fileUri;
 
   DeclarationBuilderImpl(List<MetadataBuilder>? metadata, int modifiers,
       String name, LibraryBuilder parent, int charOffset, this.scope)
-      : scopeBuilder = new ScopeBuilder(scope),
-        fileUri = parent.fileUri,
+      : fileUri = parent.fileUri,
         super(metadata, modifiers, name, parent, charOffset);
 
   @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 eefc5d1..d35c1bf 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
@@ -134,7 +134,7 @@
           name == noNameSentinel ? null : name, functionNestingLevel,
           type: builtType,
           isFinal: isFinal,
-          isConst: isConst,
+          isConst: false,
           isInitializingFormal: isInitializingFormal,
           isCovariantByDeclaration: isCovariantByDeclaration,
           isRequired: isNamedRequired,
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index c86c3c0..423e617 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -42,10 +42,6 @@
 
   Scope get exportScope;
 
-  ScopeBuilder get scopeBuilder;
-
-  ScopeBuilder get exportScopeBuilder;
-
   List<Export> get exporters;
 
   abstract LibraryBuilder? partOfLibrary;
@@ -164,12 +160,6 @@
   final Scope exportScope;
 
   @override
-  final ScopeBuilder scopeBuilder;
-
-  @override
-  final ScopeBuilder exportScopeBuilder;
-
-  @override
   final List<Export> exporters = <Export>[];
 
   @override
@@ -182,9 +172,7 @@
   bool mayImplementRestrictedTypes = false;
 
   LibraryBuilderImpl(this.fileUri, this.scope, this.exportScope)
-      : scopeBuilder = new ScopeBuilder(scope),
-        exportScopeBuilder = new ScopeBuilder(exportScope),
-        super(null, -1);
+      : super(null, -1);
 
   @override
   bool get isSynthetic => 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 719b64d..9b9e14b 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -80,6 +80,9 @@
   /// This is normally the member itself, if a setter, but for instance
   /// lowered late fields this can be synthesized setters.
   List<ClassMember> get localSetters;
+
+  /// The builder for the enclosing class, if any.
+  ClassBuilder? get classBuilder;
 }
 
 abstract class MemberBuilderImpl extends ModifierBuilderImpl
@@ -100,7 +103,7 @@
       : this.fileUri = (fileUri ?? parent?.fileUri)!,
         super(parent, charOffset);
 
-  /// The builder for the enclosing class, if any.
+  @override
   ClassBuilder? get classBuilder =>
       parent is ClassBuilder ? parent as ClassBuilder : null;
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
index 65085dc..1e51ffb 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
@@ -28,6 +28,9 @@
   @override
   TypeDeclarationBuilder get origin;
 
+  /// Return `true` if this type declaration is an enum.
+  bool get isEnum;
+
   /// Creates the [DartType] corresponding to this declaration applied with
   /// [arguments] in [library] with the syntactical nullability defined by
   /// [nullabilityBuilder].
@@ -75,6 +78,9 @@
   bool get isTypeDeclaration => true;
 
   @override
+  bool get isEnum => false;
+
+  @override
   String get fullNameForErrors => name;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index 5960574..9d86de3 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -86,7 +86,7 @@
   }
 
   static void recordDependency(Uri uri) {
-    if (uri.scheme != "file" && uri.scheme != "http") {
+    if (!uri.isScheme("file") && !uri.isScheme("http")) {
       throw new ArgumentError("Expected a file or http URI, but got: '$uri'.");
     }
     CompilerContext? context = Zone.current[compilerContextKey];
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 18b8478..625151e 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
@@ -47,6 +47,9 @@
             cls.fileOffset);
 
   @override
+  bool get isEnum => cls.isEnum;
+
+  @override
   DillClassBuilder get origin => this;
 
   @override
@@ -56,6 +59,9 @@
   bool get isMacro => cls.isMacro;
 
   @override
+  bool get isAugmentation => false;
+
+  @override
   List<TypeVariableBuilder>? get typeVariables {
     List<TypeVariableBuilder>? typeVariables = super.typeVariables;
     if (typeVariables == null && cls.typeParameters.isNotEmpty) {
@@ -83,19 +89,19 @@
   void addField(Field field) {
     DillFieldBuilder builder = new DillFieldBuilder(field, this);
     String name = field.name.text;
-    scopeBuilder.addMember(name, builder);
+    scope.addLocalMember(name, builder, setter: false);
   }
 
   void addConstructor(Constructor constructor, Procedure? constructorTearOff) {
     DillConstructorBuilder builder =
         new DillConstructorBuilder(constructor, constructorTearOff, this);
     String name = constructor.name.text;
-    constructorScopeBuilder.addMember(name, builder);
+    constructorScope.addLocalMember(name, builder);
   }
 
   void addFactory(Procedure factory, Procedure? factoryTearOff) {
     String name = factory.name.text;
-    constructorScopeBuilder.addMember(
+    constructorScope.addLocalMember(
         name, new DillFactoryBuilder(factory, factoryTearOff, this));
   }
 
@@ -105,16 +111,20 @@
       case ProcedureKind.Factory:
         throw new UnsupportedError("Use addFactory for adding factories");
       case ProcedureKind.Setter:
-        scopeBuilder.addSetter(name, new DillSetterBuilder(procedure, this));
+        scope.addLocalMember(name, new DillSetterBuilder(procedure, this),
+            setter: true);
         break;
       case ProcedureKind.Getter:
-        scopeBuilder.addMember(name, new DillGetterBuilder(procedure, this));
+        scope.addLocalMember(name, new DillGetterBuilder(procedure, this),
+            setter: false);
         break;
       case ProcedureKind.Operator:
-        scopeBuilder.addMember(name, new DillOperatorBuilder(procedure, this));
+        scope.addLocalMember(name, new DillOperatorBuilder(procedure, this),
+            setter: false);
         break;
       case ProcedureKind.Method:
-        scopeBuilder.addMember(name, new DillMethodBuilder(procedure, this));
+        scope.addLocalMember(name, new DillMethodBuilder(procedure, this),
+            setter: false);
         break;
     }
   }
@@ -174,7 +184,7 @@
   @override
   void forEachConstructor(void Function(String, MemberBuilder) f,
       {bool includeInjectedConstructors: false}) {
-    constructors.forEach(f);
+    constructorScope.forEach(f);
   }
 
   void clearCachedValues() {
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 01f0010..5659abd 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
@@ -47,10 +47,11 @@
         case ExtensionMemberKind.Method:
           if (descriptor.isStatic) {
             Procedure procedure = descriptor.member.asProcedure;
-            scopeBuilder.addMember(
+            scope.addLocalMember(
                 name.text,
                 new DillExtensionStaticMethodBuilder(
-                    procedure, descriptor, this));
+                    procedure, descriptor, this),
+                setter: false);
           } else {
             _methods[name] = descriptor;
           }
@@ -60,23 +61,27 @@
           break;
         case ExtensionMemberKind.Getter:
           Procedure procedure = descriptor.member.asProcedure;
-          scopeBuilder.addMember(name.text,
-              new DillExtensionGetterBuilder(procedure, descriptor, this));
+          scope.addLocalMember(name.text,
+              new DillExtensionGetterBuilder(procedure, descriptor, this),
+              setter: false);
           break;
         case ExtensionMemberKind.Field:
           Field field = descriptor.member.asField;
-          scopeBuilder.addMember(name.text,
-              new DillExtensionFieldBuilder(field, descriptor, this));
+          scope.addLocalMember(
+              name.text, new DillExtensionFieldBuilder(field, descriptor, this),
+              setter: false);
           break;
         case ExtensionMemberKind.Setter:
           Procedure procedure = descriptor.member.asProcedure;
-          scopeBuilder.addSetter(name.text,
-              new DillExtensionSetterBuilder(procedure, descriptor, this));
+          scope.addLocalMember(name.text,
+              new DillExtensionSetterBuilder(procedure, descriptor, this),
+              setter: true);
           break;
         case ExtensionMemberKind.Operator:
           Procedure procedure = descriptor.member.asProcedure;
-          scopeBuilder.addMember(name.text,
-              new DillExtensionOperatorBuilder(procedure, descriptor, this));
+          scope.addLocalMember(name.text,
+              new DillExtensionOperatorBuilder(procedure, descriptor, this),
+              setter: false);
           break;
       }
     }
@@ -84,10 +89,11 @@
       Procedure procedure = descriptor.member.asProcedure;
       assert(_tearOffs.containsKey(name),
           "No tear found for ${descriptor} in ${_tearOffs}");
-      scopeBuilder.addMember(
+      scope.addLocalMember(
           name.text,
           new DillExtensionInstanceMethodBuilder(
-              procedure, descriptor, this, _tearOffs[name]!));
+              procedure, descriptor, this, _tearOffs[name]!),
+          setter: false);
     });
   }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index d09fac5..6643502 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -269,18 +269,19 @@
 
     bool isSetter = declaration.isSetter;
     if (isSetter) {
-      scopeBuilder.addSetter(name, declaration as MemberBuilder);
+      scope.addLocalMember(name, declaration as MemberBuilder, setter: true);
     } else {
-      scopeBuilder.addMember(name, declaration);
+      scope.addLocalMember(name, declaration, setter: false);
     }
     if (declaration.isExtension) {
-      scopeBuilder.addExtension(declaration as ExtensionBuilder);
+      scope.addExtension(declaration as ExtensionBuilder);
     }
     if (!name.startsWith("_") && !name.contains('#')) {
       if (isSetter) {
-        exportScopeBuilder.addSetter(name, declaration as MemberBuilder);
+        exportScope.addLocalMember(name, declaration as MemberBuilder,
+            setter: true);
       } else {
-        exportScopeBuilder.addMember(name, declaration);
+        exportScope.addLocalMember(name, declaration, setter: false);
       }
     }
     return declaration;
@@ -339,7 +340,8 @@
         case "void":
           // TODO(ahe): It's likely that we shouldn't be exporting these types
           // from dart:core, and this case can be removed.
-          declaration = loader.coreLibrary.exportScopeBuilder[name]!;
+          declaration = loader.coreLibrary.exportScope
+              .lookupLocalMember(name, setter: false)!;
           break;
 
         default:
@@ -353,7 +355,7 @@
           declaration = new InvalidTypeDeclarationBuilder(
               name, message.withoutLocation());
       }
-      exportScopeBuilder.addMember(name, declaration);
+      exportScope.addLocalMember(name, declaration, setter: false);
     });
 
     Map<Reference, Builder>? sourceBuildersMap =
@@ -374,9 +376,10 @@
         }
 
         if (declaration.isSetter) {
-          exportScopeBuilder.addSetter(name, declaration as MemberBuilder);
+          exportScope.addLocalMember(name, declaration as MemberBuilder,
+              setter: true);
         } else {
-          exportScopeBuilder.addMember(name, declaration);
+          exportScope.addLocalMember(name, declaration, setter: false);
         }
       } else {
         Uri libraryUri;
@@ -411,11 +414,12 @@
         if (isSetter) {
           declaration =
               library.exportScope.lookupLocalMember(name, setter: true)!;
-          exportScopeBuilder.addSetter(name, declaration as MemberBuilder);
+          exportScope.addLocalMember(name, declaration as MemberBuilder,
+              setter: true);
         } else {
           declaration =
               library.exportScope.lookupLocalMember(name, setter: false)!;
-          exportScopeBuilder.addMember(name, declaration);
+          exportScope.addLocalMember(name, declaration, setter: false);
         }
         // ignore: unnecessary_null_comparison
         if (declaration == null) {
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 9524f5b..b53d488 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -120,7 +120,7 @@
       assert(libraryBuilder != null, "No library found for $uri.");
       _builders[uri] = libraryBuilder!;
       assert(libraryBuilder.loader == this);
-      if (uri.scheme == "dart") {
+      if (uri.isScheme("dart")) {
         if (uri.path == "core") {
           _coreLibrary = libraryBuilder;
         }
@@ -352,7 +352,7 @@
   void registerLibraryBuilder(DillLibraryBuilder libraryBuilder) {
     Uri importUri = libraryBuilder.importUri;
     libraryBuilder.loader = this;
-    if (importUri.scheme == "dart" && importUri.path == "core") {
+    if (importUri.isScheme("dart") && importUri.path == "core") {
       _coreLibrary = libraryBuilder;
     }
     _builders[importUri] = libraryBuilder;
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 b5b737e..1a0b447 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_target.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_target.dart
@@ -12,6 +12,8 @@
 
 import '../compiler_context.dart' show CompilerContext;
 
+import '../kernel/benchmarker.dart' show BenchmarkPhases, Benchmarker;
+
 import '../messages.dart' show FormattedMessage, LocatedMessage, Message;
 
 import '../ticker.dart' show Ticker;
@@ -40,7 +42,10 @@
   /// Shared with [CompilerContext].
   final Map<Uri, Source> uriToSource = CompilerContext.current.uriToSource;
 
-  DillTarget(this.ticker, this.uriTranslator, this.backendTarget)
+  final Benchmarker? benchmarker;
+
+  DillTarget(this.ticker, this.uriTranslator, this.backendTarget,
+      {this.benchmarker})
       // ignore: unnecessary_null_comparison
       : assert(ticker != null),
         // ignore: unnecessary_null_comparison
@@ -81,9 +86,12 @@
 
   void buildOutlines({bool suppressFinalizationErrors: false}) {
     if (loader.libraries.isNotEmpty) {
+      benchmarker?.enterPhase(BenchmarkPhases.dill_buildOutlines);
       loader.buildOutlines();
+      benchmarker?.enterPhase(BenchmarkPhases.dill_finalizeExports);
       loader.finalizeExports(
           suppressFinalizationErrors: suppressFinalizationErrors);
+      benchmarker?.enterPhase(BenchmarkPhases.unknown);
     }
     isLoaded = true;
   }
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
index 66e0e85..f786f84 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
@@ -4113,6 +4113,42 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
+        Message Function(
+            DartType _type, String name, bool isNonNullableByDefault)>
+    templateOptionalSuperParameterWithoutInitializer = const Template<
+            Message Function(
+                DartType _type, String name, bool isNonNullableByDefault)>(
+        problemMessageTemplate:
+            r"""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.""",
+        withArguments: _withArgumentsOptionalSuperParameterWithoutInitializer);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+        Message Function(
+            DartType _type, String name, bool isNonNullableByDefault)>
+    codeOptionalSuperParameterWithoutInitializer = const Code<
+        Message Function(
+            DartType _type, String name, bool isNonNullableByDefault)>(
+  "OptionalSuperParameterWithoutInitializer",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsOptionalSuperParameterWithoutInitializer(
+    DartType _type, String name, bool isNonNullableByDefault) {
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  String type = typeParts.join();
+  return new Message(codeOptionalSuperParameterWithoutInitializer,
+      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.""" +
+              labeler.originMessages,
+      arguments: {'type': _type, 'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
         Message Function(String name, String name2, DartType _type,
             DartType _type2, String name3, bool isNonNullableByDefault)>
     templateOverrideTypeMismatchParameter = const Template<
diff --git a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
index d56e24f..55f8381 100644
--- a/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
+++ b/pkg/front_end/lib/src/fasta/hybrid_file_system.dart
@@ -37,7 +37,7 @@
   Future<FileSystemEntity> get delegate async {
     if (_delegate != null) return _delegate!;
     FileSystemEntity entity = _fs.memory.entityForUri(uri);
-    if (((uri.scheme != 'file' && uri.scheme != 'data') &&
+    if (((!uri.isScheme('file') && !uri.isScheme('data')) &&
             _fs.physical is StandardFileSystem) ||
         await entity.exists()) {
       _delegate = entity;
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index ec7df03..83268d3 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -27,6 +27,8 @@
 
   final PrefixBuilder? prefixBuilder;
 
+  final bool isAugmentationImport;
+
   final bool deferred;
 
   final String? prefix;
@@ -46,6 +48,7 @@
   Import(
       this.importer,
       this.imported,
+      this.isAugmentationImport,
       this.deferred,
       this.prefix,
       this.combinators,
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 2aabaff..e876c78 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -1272,7 +1272,7 @@
       _platformBuilders = <LibraryBuilder>[];
       for (DillLibraryBuilder builder
           in dillLoadedData.loader.libraryBuilders) {
-        if (builder.importUri.scheme == "dart") {
+        if (builder.importUri.isScheme("dart")) {
           _platformBuilders!.add(builder);
         } else {
           _userBuilders![builder.importUri] = builder;
@@ -1425,7 +1425,7 @@
         _platformBuilders = <LibraryBuilder>[];
         for (DillLibraryBuilder builder
             in _dillLoadedData!.loader.libraryBuilders) {
-          if (builder.importUri.scheme == "dart") {
+          if (builder.importUri.isScheme("dart")) {
             _platformBuilders!.add(builder);
           } else {
             _userBuilders![builder.importUri] = builder;
@@ -1492,7 +1492,7 @@
           partUriToLibraryImportUri[partUri] = library.importUri;
         }
       }
-      if (library.importUri.scheme == "dart") {
+      if (library.importUri.isScheme("dart")) {
         result.add(library);
         inputLibrariesFiltered?.add(library);
       } else {
@@ -1501,7 +1501,7 @@
       }
     }
     for (LibraryBuilder libraryBuilder in reusedLibraries) {
-      if (libraryBuilder.importUri.scheme == "dart" &&
+      if (libraryBuilder.importUri.isScheme("dart") &&
           !libraryBuilder.isSynthetic) {
         continue;
       }
@@ -1550,7 +1550,7 @@
     List<Library> removedLibraries = <Library>[];
     bool removedDillBuilders = false;
     for (Uri uri in potentiallyReferencedLibraries.keys) {
-      if (uri.scheme == "package") continue;
+      if (uri.isScheme("package")) continue;
       LibraryBuilder? builder =
           currentKernelTarget.loader.deregisterLibraryBuilder(uri);
       if (builder != null) {
@@ -1672,8 +1672,8 @@
 
       Class? cls;
       if (className != null) {
-        ClassBuilder? classBuilder =
-            libraryBuilder.scopeBuilder[className] as ClassBuilder?;
+        ClassBuilder? classBuilder = libraryBuilder.scope
+            .lookupLocalMember(className, setter: false) as ClassBuilder?;
         cls = classBuilder?.cls;
         if (cls == null) return null;
       }
@@ -1684,11 +1684,13 @@
         if (indexOfDot >= 0) {
           String beforeDot = methodName.substring(0, indexOfDot);
           String afterDot = methodName.substring(indexOfDot + 1);
-          Builder? builder = libraryBuilder.scopeBuilder[beforeDot];
+          Builder? builder =
+              libraryBuilder.scope.lookupLocalMember(beforeDot, setter: false);
           extensionName = beforeDot;
           if (builder is ExtensionBuilder) {
             extension = builder.extension;
-            Builder? subBuilder = builder.scopeBuilder[afterDot];
+            Builder? subBuilder =
+                builder.lookupLocalMember(afterDot, setter: false);
             if (subBuilder is MemberBuilder) {
               if (subBuilder.isExtensionInstanceMember) {
                 isStatic = false;
@@ -1731,6 +1733,16 @@
         }
       }
 
+      // Setup scope first in two-step process:
+      // 1) Create a new SourceLibraryBuilder, add imports and setup (import)
+      //    scope.
+      // 2) Create a new SourceLibraryBuilder, using a nested scope of the scope
+      //    we just created as the scope. The import scopes have been setup via
+      //    the parent chain.
+      // This is done to create the correct "layering" (i.e. definitions from
+      // the "self" library first, then imports while not having dill builders
+      // directly in the scope of a source builder (which can crash things in
+      // some circumstances).
       SourceLibraryBuilder debugLibrary = new SourceLibraryBuilder(
         importUri: libraryUri,
         fileUri: debugExprUri,
@@ -1739,6 +1751,7 @@
         loader: lastGoodKernelTarget.loader,
         nameOrigin: libraryBuilder,
         isUnsupported: libraryBuilder.isUnsupported,
+        isAugmentation: false,
       );
       libraryBuilder.scope.forEachLocalMember((name, member) {
         debugLibrary.scope.addLocalMember(name, member, setter: false);
@@ -1769,21 +1782,33 @@
           }
 
           debugLibrary.addImport(
-              null,
-              dependency.importedLibraryReference.canonicalName!.name,
-              null,
-              dependency.name,
-              combinators,
-              dependency.isDeferred,
-              -1,
-              -1,
-              -1,
-              -1);
+              metadata: null,
+              isAugmentationImport: false,
+              uri: dependency.importedLibraryReference.canonicalName!.name,
+              configurations: null,
+              prefix: dependency.name,
+              combinators: combinators,
+              deferred: dependency.isDeferred,
+              charOffset: -1,
+              prefixCharOffset: -1,
+              uriOffset: -1,
+              importIndex: -1);
         }
 
         debugLibrary.addImportsToScope();
         _ticker.logMs("Added imports");
       }
+      debugLibrary = new SourceLibraryBuilder(
+        importUri: libraryUri,
+        fileUri: debugExprUri,
+        packageLanguageVersion:
+            new ImplicitLanguageVersion(libraryBuilder.library.languageVersion),
+        loader: lastGoodKernelTarget.loader,
+        scope: debugLibrary.scope.createNestedScope("expression"),
+        nameOrigin: libraryBuilder,
+        isUnsupported: libraryBuilder.isUnsupported,
+        isAugmentation: false,
+      );
 
       HybridFileSystem hfs =
           lastGoodKernelTarget.fileSystem as HybridFileSystem;
@@ -1893,7 +1918,7 @@
       if (importUri != fileUri && invalidatedUris.contains(fileUri)) {
         return true;
       }
-      if (_hasToCheckPackageUris && importUri.scheme == "package") {
+      if (_hasToCheckPackageUris && importUri.isScheme("package")) {
         // Get package name, check if the base URI has changed for the package,
         // if it has, translate the URI again,
         // otherwise the URI cannot have changed.
@@ -1915,7 +1940,7 @@
     }
 
     void addBuilderAndInvalidateUris(Uri uri, LibraryBuilder libraryBuilder) {
-      if (uri.scheme == "dart" && !libraryBuilder.isSynthetic) {
+      if (uri.isScheme("dart") && !libraryBuilder.isSynthetic) {
         if (seenUris.add(libraryBuilder.importUri)) {
           reusedLibraries.add(libraryBuilder);
         }
@@ -2335,7 +2360,7 @@
     bool foundDartCore = false;
     for (int i = 0; i < component.libraries.length; i++) {
       Library library = component.libraries[i];
-      if (library.importUri.scheme == "dart" &&
+      if (library.importUri.isScheme("dart") &&
           library.importUri.path == "core") {
         foundDartCore = true;
         break;
@@ -2481,7 +2506,7 @@
         // (e.g. the package still exists and hasn't been updated).
         // Also verify NNBD settings.
         for (Library lib in data.component!.libraries) {
-          if (lib.importUri.scheme == "package" &&
+          if (lib.importUri.isScheme("package") &&
               uriTranslator.translate(lib.importUri, false) != lib.fileUri) {
             // Package has been removed or updated.
             // This library should be thrown away.
@@ -2629,7 +2654,7 @@
 extension on UriTranslator {
   Uri? getPartFileUri(Uri parentFileUri, LibraryPart part) {
     Uri? fileUri = getPartUri(parentFileUri, part);
-    if (fileUri.scheme == "package") {
+    if (fileUri.isScheme("package")) {
       // Part was specified via package URI and the resolve above thus
       // did not go as expected. Translate the package URI to get the
       // actual file URI.
diff --git a/pkg/front_end/lib/src/fasta/incremental_serializer.dart b/pkg/front_end/lib/src/fasta/incremental_serializer.dart
index 7289a11..bebdcd9 100644
--- a/pkg/front_end/lib/src/fasta/incremental_serializer.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_serializer.dart
@@ -43,7 +43,7 @@
         Uri uri = lib.importUri;
         // Uris need to be unique.
         if (!uris.add(lib.fileUri)) return false;
-        if (uri.scheme == "package") {
+        if (uri.isScheme("package")) {
           String thisPackageName = uri.pathSegments.first;
           if (packageName == null) {
             packageName = thisPackageName;
@@ -117,7 +117,7 @@
     List<Library> nonPackageLibraries = <Library>[];
     for (Library lib in component.libraries) {
       Uri uri = lib.importUri;
-      if (uri.scheme == "package") {
+      if (uri.isScheme("package")) {
         packageLibraries.add(lib);
       } else {
         nonPackageLibraries.add(lib);
@@ -179,7 +179,7 @@
     for (Library lib in component.libraries) {
       for (LibraryDependency dependency in lib.dependencies) {
         if (!got.contains(dependency.targetLibrary)) {
-          if (dependency.targetLibrary.importUri.scheme == "dart") {
+          if (dependency.targetLibrary.importUri.isScheme("dart")) {
             continue;
           }
           return false;
@@ -241,7 +241,7 @@
     for (Library lib in libraries) {
       for (LibraryDependency dep in lib.dependencies) {
         Library dependencyLibrary = dep.importedLibraryReference.asLibrary;
-        if (dependencyLibrary.importUri.scheme != "package") continue;
+        if (!dependencyLibrary.importUri.isScheme("package")) continue;
         Uri dependencyLibraryUri =
             dep.importedLibraryReference.asLibrary.fileUri;
         SerializationGroup? depGroup = uriToGroup[dependencyLibraryUri];
diff --git a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
new file mode 100644
index 0000000..404b3ad
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
@@ -0,0 +1,201 @@
+// 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 Benchmarker {
+  final List<PhaseTiming> _phaseTimings =
+      new List<PhaseTiming>.generate(BenchmarkPhases.values.length, (index) {
+    assert(BenchmarkPhases.values[index].index == index);
+    return new PhaseTiming(BenchmarkPhases.values[index]);
+  }, growable: false);
+
+  final Stopwatch _totalStopwatch = new Stopwatch()..start();
+  final Stopwatch _phaseStopwatch = new Stopwatch()..start();
+  final Stopwatch _subdivideStopwatch = new Stopwatch()..start();
+
+  BenchmarkPhases _currentPhase = BenchmarkPhases.implicitInitialization;
+  BenchmarkSubdivides? _subdivide;
+
+  void beginSubdivide(final BenchmarkSubdivides phase) {
+    BenchmarkSubdivides? subdivide = _subdivide;
+    if (subdivide != null) throw "Can't subdivide a subdivide";
+    _subdivideStopwatch.reset();
+    _subdivide = phase;
+  }
+
+  void endSubdivide() {
+    BenchmarkSubdivides? subdivide = _subdivide;
+    if (subdivide == null) throw "Can't end a nonexistent subdivide";
+    _phaseTimings[_currentPhase.index]
+        .subdivides[subdivide.index]
+        .addRuntime(_subdivideStopwatch.elapsedMicroseconds);
+    _subdivide = null;
+  }
+
+  void enterPhase(BenchmarkPhases phase) {
+    if (_currentPhase == phase) return;
+    if (_subdivide != null) throw "Can't enter a phase while in a subdivide";
+
+    _phaseTimings[_currentPhase.index]
+        .addRuntime(_phaseStopwatch.elapsedMicroseconds);
+    _phaseStopwatch.reset();
+    _currentPhase = phase;
+  }
+
+  void stop() {
+    enterPhase(BenchmarkPhases.end);
+    _totalStopwatch.stop();
+  }
+
+  Map<String, Object?> toJson() {
+    return <String, Object?>{
+      "totalTime": _totalStopwatch.elapsedMicroseconds,
+      "phases": _phaseTimings,
+    };
+  }
+}
+
+class PhaseTiming {
+  final BenchmarkPhases phase;
+  int _runtime = 0;
+
+  final List<SubdivideTiming> subdivides = new List<SubdivideTiming>.generate(
+      BenchmarkSubdivides.values.length, (index) {
+    assert(BenchmarkSubdivides.values[index].index == index);
+    return new SubdivideTiming(BenchmarkSubdivides.values[index]);
+  }, growable: false);
+
+  PhaseTiming(this.phase);
+
+  void addRuntime(int runtime) {
+    _runtime += runtime;
+  }
+
+  Map<String, Object?> toJson() {
+    List<SubdivideTiming> enteredSubdivides =
+        subdivides.where((element) => element._count > 0).toList();
+    return <String, Object?>{
+      "phase": phase.name,
+      "runtime": _runtime,
+      if (enteredSubdivides.isNotEmpty) "subdivides": enteredSubdivides,
+    };
+  }
+}
+
+class SubdivideTiming {
+  final BenchmarkSubdivides phase;
+  int _runtime = 0;
+  int _count = 0;
+
+  SubdivideTiming(this.phase);
+
+  void addRuntime(int runtime) {
+    _runtime += runtime;
+    _count++;
+  }
+
+  Map<String, Object?> toJson() {
+    return <String, Object?>{
+      "phase": phase.name,
+      "runtime": _runtime,
+      "count": _count,
+    };
+  }
+}
+
+enum BenchmarkPhases {
+  implicitInitialization,
+  loadSDK,
+  loadAdditionalDills,
+
+  dill_buildOutlines,
+  dill_finalizeExports,
+
+  outline_kernelBuildOutlines,
+  outline_becomeCoreLibrary,
+  outline_resolveParts,
+  outline_computeMacroDeclarations,
+  outline_computeLibraryScopes,
+  outline_computeMacroApplications,
+  outline_setupTopAndBottomTypes,
+  outline_resolveTypes,
+  outline_computeVariances,
+  outline_computeDefaultTypes,
+  outline_applyTypeMacros,
+  outline_buildMacroTypesForPhase1,
+  outline_checkSemantics,
+  outline_finishTypeVariables,
+  outline_createTypeInferenceEngine,
+  outline_buildComponent,
+  outline_installDefaultSupertypes,
+  outline_installSyntheticConstructors,
+  outline_resolveConstructors,
+  outline_link,
+  outline_computeCoreTypes,
+  outline_buildClassHierarchy,
+  outline_checkSupertypes,
+  outline_applyDeclarationMacros,
+  outline_buildMacroDeclarationsForPhase1,
+  outline_buildMacroDeclarationsForPhase2,
+  outline_buildClassHierarchyMembers,
+  outline_computeHierarchy,
+  outline_computeShowHideElements,
+  outline_installTypedefTearOffs,
+  outline_performTopLevelInference,
+  outline_checkOverrides,
+  outline_checkAbstractMembers,
+  outline_addNoSuchMethodForwarders,
+  outline_checkMixins,
+  outline_buildOutlineExpressions,
+  outline_checkTypes,
+  outline_checkRedirectingFactories,
+  outline_finishSynthesizedParameters,
+  outline_checkMainMethods,
+  outline_installAllComponentProblems,
+
+  body_buildBodies,
+  body_finishSynthesizedParameters,
+  body_finishDeferredLoadTearoffs,
+  body_finishNoSuchMethodForwarders,
+  body_collectSourceClasses,
+  body_applyDefinitionMacros,
+  body_buildMacroDefinitionsForPhase1,
+  body_buildMacroDefinitionsForPhase2,
+  body_buildMacroDefinitionsForPhase3,
+  body_finishNativeMethods,
+  body_finishPatchMethods,
+  body_finishAllConstructors,
+  body_runBuildTransformations,
+  body_verify,
+  body_installAllComponentProblems,
+
+  printComponentText,
+  omitPlatform,
+  writeComponent,
+  benchmarkAstVisit,
+  // add more here
+  //
+  end,
+  unknown,
+}
+
+enum BenchmarkSubdivides {
+  tokenize,
+
+  body_buildBody_benchmark_specific_diet_parser,
+  body_buildBody_benchmark_specific_parser,
+
+  inferConstructorParameterTypes,
+  inferDeclarationType,
+  inferExpression,
+  inferFieldInitializer,
+  inferFunctionBody,
+  inferInitializer,
+  inferMetadata,
+  inferMetadataKeepingHelper,
+  inferParameterInitializer,
+  inferInvocation,
+
+  buildOutlineExpressions,
+  delayedActionPerformer,
+}
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 89b7847..9471504 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/fasta/kernel/benchmarker.dart' show Benchmarker;
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/clone.dart';
@@ -83,7 +84,6 @@
     show internalProblem, unexpected, unhandled, unsupported;
 import '../scope.dart';
 import '../source/diet_parser.dart';
-import '../source/scope_listener.dart' show JumpTargetKind, ScopeListener;
 import '../source/source_class_builder.dart';
 import '../source/source_constructor_builder.dart';
 import '../source/source_enum_builder.dart';
@@ -92,7 +92,8 @@
 import '../source/source_function_builder.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 import '../source/source_procedure_builder.dart';
-import '../source/stack_listener_impl.dart' show offsetForToken;
+import '../source/stack_listener_impl.dart'
+    show StackListenerImpl, offsetForToken;
 import '../source/value_kinds.dart';
 import '../type_inference/type_inferrer.dart'
     show TypeInferrer, InferredFunctionBody, InitializerInferenceResult;
@@ -124,7 +125,13 @@
 // has been enabled by default.
 const Object invalidCollectionElement = const Object();
 
-class BodyBuilder extends ScopeListener<JumpTarget>
+enum JumpTargetKind {
+  Break,
+  Continue,
+  Goto, // Continue label in switch.
+}
+
+class BodyBuilder extends StackListenerImpl
     implements ExpressionGeneratorHelper, EnsureLoaded, DelayedActionPerformer {
   @override
   final Forest forest;
@@ -178,6 +185,8 @@
 
   final TypeInferrer typeInferrer;
 
+  final Benchmarker? benchmarker;
+
   /// Only used when [member] is a constructor. It tracks if an implicit super
   /// initializer is needed.
   ///
@@ -333,6 +342,12 @@
 
   final List<TypeParameter>? extensionTypeParameters;
 
+  Scope scope;
+
+  JumpTarget? breakTarget;
+
+  JumpTarget? continueTarget;
+
   BodyBuilder(
       {required this.libraryBuilder,
       required this.member,
@@ -355,13 +370,14 @@
         stringExpectedAfterNative = libraryBuilder
             .loader.target.backendTarget.nativeExtensionExpectsString,
         ignoreMainInGetMainClosure =
-            libraryBuilder.importUri.scheme == 'dart' &&
+            libraryBuilder.importUri.isScheme('dart') &&
                 (libraryBuilder.importUri.path == "_builtin" ||
                     libraryBuilder.importUri.path == "ui"),
         needsImplicitSuperInitializer =
             declarationBuilder is SourceClassBuilder &&
                 coreTypes.objectClass != declarationBuilder.cls,
-        super(enclosingScope) {
+        benchmarker = libraryBuilder.loader.target.benchmarker,
+        this.scope = enclosingScope {
     formalParameterScope?.forEach((String name, Builder builder) {
       if (builder is VariableBuilder) {
         typeInferrer.assignedVariables.declare(builder.variable!);
@@ -417,6 +433,147 @@
                 .createLocalTypeInferrer(
                     fileUri, declarationBuilder?.thisType, library, null));
 
+  JumpTarget createBreakTarget(int charOffset) {
+    return createJumpTarget(JumpTargetKind.Break, charOffset);
+  }
+
+  JumpTarget createContinueTarget(int charOffset) {
+    return createJumpTarget(JumpTargetKind.Continue, charOffset);
+  }
+
+  JumpTarget createGotoTarget(int charOffset) {
+    return createJumpTarget(JumpTargetKind.Goto, charOffset);
+  }
+
+  void enterLocalScope(String debugName, [Scope? newScope]) {
+    push(scope);
+    scope = newScope ?? scope.createNestedScope(debugName);
+    assert(checkState(null, [
+      ValueKinds.Scope,
+    ]));
+  }
+
+  @override
+  void exitLocalScope() {
+    assert(checkState(null, [
+      ValueKinds.Scope,
+    ]));
+    scope = pop() as Scope;
+    // ignore: unnecessary_null_comparison
+    assert(scope != null);
+  }
+
+  void enterBreakTarget(int charOffset, [JumpTarget? target]) {
+    push(breakTarget ?? NullValue.BreakTarget);
+    breakTarget = target ?? createBreakTarget(charOffset);
+  }
+
+  void enterContinueTarget(int charOffset, [JumpTarget? target]) {
+    push(continueTarget ?? NullValue.ContinueTarget);
+    continueTarget = target ?? createContinueTarget(charOffset);
+  }
+
+  JumpTarget? exitBreakTarget() {
+    JumpTarget? current = breakTarget;
+    breakTarget = pop() as JumpTarget?;
+    return current;
+  }
+
+  JumpTarget? exitContinueTarget() {
+    JumpTarget? current = continueTarget;
+    continueTarget = pop() as JumpTarget?;
+    return current;
+  }
+
+  @override
+  void beginBlockFunctionBody(Token begin) {
+    debugEvent("beginBlockFunctionBody");
+    enterLocalScope("block function body");
+  }
+
+  @override
+  void beginForStatement(Token token) {
+    debugEvent("beginForStatement");
+    enterLoop(token.charOffset);
+    enterLocalScope("for statement");
+  }
+
+  @override
+  void beginForControlFlow(Token? awaitToken, Token forToken) {
+    debugEvent("beginForControlFlow");
+    enterLocalScope("for in a collection");
+  }
+
+  @override
+  void beginDoWhileStatementBody(Token token) {
+    debugEvent("beginDoWhileStatementBody");
+    enterLocalScope("do-while statement body");
+  }
+
+  @override
+  void endDoWhileStatementBody(Token token) {
+    debugEvent("endDoWhileStatementBody");
+    Object? body = pop();
+    exitLocalScope();
+    push(body);
+  }
+
+  @override
+  void beginWhileStatementBody(Token token) {
+    debugEvent("beginWhileStatementBody");
+    enterLocalScope("while statement body");
+  }
+
+  @override
+  void endWhileStatementBody(Token token) {
+    debugEvent("endWhileStatementBody");
+    Object? body = pop();
+    exitLocalScope();
+    push(body);
+  }
+
+  @override
+  void beginForStatementBody(Token token) {
+    debugEvent("beginForStatementBody");
+    enterLocalScope("for statement body");
+  }
+
+  @override
+  void endForStatementBody(Token token) {
+    debugEvent("endForStatementBody");
+    Object? body = pop();
+    exitLocalScope();
+    push(body);
+  }
+
+  @override
+  void beginForInBody(Token token) {
+    debugEvent("beginForInBody");
+    enterLocalScope("for-in body");
+  }
+
+  @override
+  void endForInBody(Token token) {
+    debugEvent("endForInBody");
+    Object? body = pop();
+    exitLocalScope();
+    push(body);
+  }
+
+  @override
+  void beginElseStatement(Token token) {
+    debugEvent("beginElseStatement");
+    enterLocalScope("else");
+  }
+
+  @override
+  void endElseStatement(Token token) {
+    debugEvent("endElseStatement");
+    Object? body = pop();
+    exitLocalScope();
+    push(body);
+  }
+
   bool get inConstructor {
     return functionNestingLevel == 0 && member is ConstructorBuilder;
   }
@@ -636,7 +793,6 @@
     }
   }
 
-  @override
   JumpTarget createJumpTarget(JumpTargetKind kind, int charOffset) {
     return new JumpTarget(
         kind, functionNestingLevel, member as MemberBuilder, charOffset);
@@ -771,6 +927,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1622,7 +1779,8 @@
     return fakeReturn.expression!;
   }
 
-  void parseInitializers(Token token, {bool doFinishConstructor = true}) {
+  List<Initializer>? parseInitializers(Token token,
+      {bool doFinishConstructor = true}) {
     Parser parser = new Parser(this,
         useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     if (!token.isEof) {
@@ -1635,6 +1793,7 @@
       finishConstructor(
           member as DeclaredSourceConstructorBuilder, AsyncMarker.Sync, null);
     }
+    return _initializers;
   }
 
   Expression parseFieldInitializer(Token token) {
@@ -1664,11 +1823,11 @@
     return annotation;
   }
 
-  Arguments parseArguments(Token token) {
+  ArgumentsImpl parseArguments(Token token) {
     Parser parser = new Parser(this,
         useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
     token = parser.parseArgumentsRest(token);
-    Arguments arguments = pop() as Arguments;
+    ArgumentsImpl arguments = pop() as ArgumentsImpl;
     checkEmpty(token.charOffset);
     return arguments;
   }
@@ -1712,11 +1871,16 @@
     }
 
     List<Initializer>? initializers = _initializers;
-    if (initializers != null) {
-      if (libraryBuilder.enableSuperParametersInLibrary) {
-        if (initializers.isNotEmpty && initializers.last is SuperInitializer) {
-          SuperInitializer superInitializer =
-              initializers.last as SuperInitializer;
+    if (initializers != null && initializers.isNotEmpty) {
+      if (initializers.last is SuperInitializer) {
+        SuperInitializer superInitializer =
+            initializers.last as SuperInitializer;
+        if (builder.classBuilder.isEnum) {
+          initializers[initializers.length - 1] = buildInvalidInitializer(
+              buildProblem(fasta.messageEnumConstructorSuperInitializer,
+                  superInitializer.fileOffset, noLength))
+            ..parent = constructor;
+        } else if (libraryBuilder.enableSuperParametersInLibrary) {
           Arguments arguments = superInitializer.arguments;
 
           if (positionalSuperParametersAsArguments != null) {
@@ -1742,74 +1906,47 @@
             arguments.named.addAll(namedSuperParametersAsArguments);
             setParents(namedSuperParametersAsArguments, arguments);
           }
-
-          LocatedMessage? message = checkArgumentsForFunction(
-              superInitializer.target.function,
-              arguments,
-              arguments.fileOffset, <TypeParameter>[]);
-          if (message != null) {
-            initializers[initializers.length - 1] = buildInvalidInitializer(
-                buildUnresolvedError(
-                    forest.createNullLiteral(superInitializer.fileOffset),
-                    constructorNameForDiagnostics(
-                        superInitializer.target.name.text),
-                    arguments,
-                    superInitializer.fileOffset,
-                    isSuper: true,
-                    message: message,
-                    kind: UnresolvedKind.Constructor));
-          }
+        }
+      } else if (initializers.last is RedirectingInitializer) {
+        RedirectingInitializer redirectingInitializer =
+            initializers.last as RedirectingInitializer;
+        if (sourceClassBuilder is SourceEnumBuilder &&
+            libraryBuilder.enableEnhancedEnumsInLibrary) {
+          ArgumentsImpl arguments =
+              redirectingInitializer.arguments as ArgumentsImpl;
+          List<Expression> enumSyntheticArguments = [
+            new VariableGetImpl(constructor.function.positionalParameters[0],
+                forNullGuardedAccess: false)
+              ..parent = redirectingInitializer.arguments,
+            new VariableGetImpl(constructor.function.positionalParameters[1],
+                forNullGuardedAccess: false)
+              ..parent = redirectingInitializer.arguments
+          ];
+          arguments.positional.insertAll(0, enumSyntheticArguments);
+          arguments.argumentsOriginalOrder
+              ?.insertAll(0, enumSyntheticArguments);
         }
       }
 
-      Map<Initializer, InitializerInferenceResult> inferenceResults =
-          <Initializer, InitializerInferenceResult>{};
-      for (Initializer initializer in initializers) {
-        inferenceResults[initializer] =
-            typeInferrer.inferInitializer(this, initializer);
-      }
+      List<InitializerInferenceResult> inferenceResults =
+          new List<InitializerInferenceResult>.generate(
+              initializers.length,
+              (index) =>
+                  typeInferrer.inferInitializer(this, initializers[index]),
+              growable: false);
+
       if (!builder.isExternal) {
-        for (Initializer initializer in initializers) {
-          builder.addInitializer(initializer, this,
-              inferenceResult: inferenceResults[initializer]!);
+        for (int i = 0; i < initializers.length; i++) {
+          builder.addInitializer(initializers[i], this,
+              inferenceResult: inferenceResults[i]);
         }
       }
     }
+
     if (asyncModifier != AsyncMarker.Sync) {
       constructor.initializers.add(buildInvalidInitializer(buildProblem(
           fasta.messageConstructorNotSync, body!.fileOffset, noLength)));
     }
-    if (libraryBuilder.enableEnhancedEnumsInLibrary &&
-        sourceClassBuilder is SourceEnumBuilder &&
-        constructor.initializers.isNotEmpty &&
-        constructor.initializers.last is RedirectingInitializer) {
-      RedirectingInitializer redirectingInitializer =
-          constructor.initializers.last as RedirectingInitializer;
-      redirectingInitializer.arguments.positional.insertAll(0, [
-        new VariableGet(constructor.function.positionalParameters[0])
-          ..parent = redirectingInitializer.arguments,
-        new VariableGet(constructor.function.positionalParameters[1])
-          ..parent = redirectingInitializer.arguments
-      ]);
-
-      LocatedMessage? message = checkArgumentsForFunction(
-          redirectingInitializer.target.function,
-          redirectingInitializer.arguments,
-          builder.charOffset, const <TypeParameter>[]);
-      if (message != null) {
-        Initializer invalidInitializer = buildInvalidInitializer(
-            buildUnresolvedError(
-                forest.createNullLiteral(redirectingInitializer.fileOffset),
-                constructorNameForDiagnostics(builder.name, isSuper: false),
-                redirectingInitializer.arguments,
-                redirectingInitializer.fileOffset,
-                isSuper: false,
-                message: message,
-                kind: UnresolvedKind.Constructor));
-        constructor.initializers.removeLast();
-        constructor.initializers.add(invalidInitializer..parent = constructor);
-      }
-    }
     if (needsImplicitSuperInitializer) {
       /// >If no superinitializer is provided, an implicit superinitializer
       /// >of the form super() is added at the end of k’s initializer list,
@@ -1828,8 +1965,10 @@
             constructor.function.positionalParameters[0].name == "index" &&
             constructor.function.positionalParameters[1].name == "name");
         (positionalArguments ??= <Expression>[]).insertAll(0, [
-          new VariableGet(constructor.function.positionalParameters[0]),
-          new VariableGet(constructor.function.positionalParameters[1])
+          new VariableGetImpl(constructor.function.positionalParameters[0],
+              forNullGuardedAccess: false),
+          new VariableGetImpl(constructor.function.positionalParameters[1],
+              forNullGuardedAccess: false)
         ]);
       }
       if (positionalArguments != null || namedArguments != null) {
@@ -1860,7 +1999,14 @@
         initializer = buildSuperInitializer(
             true, superTarget, arguments, builder.charOffset);
       }
-      constructor.initializers.add(initializer);
+      if (libraryBuilder.enableSuperParametersInLibrary) {
+        InitializerInferenceResult inferenceResult =
+            typeInferrer.inferInitializer(this, initializer);
+        builder.addInitializer(initializer, this,
+            inferenceResult: inferenceResult);
+      } else {
+        constructor.initializers.add(initializer);
+      }
     }
     setParents(constructor.initializers, constructor);
     libraryBuilder.loader.transformListPostInference(constructor.initializers,
@@ -1934,10 +2080,12 @@
       List<Expression> positional;
       List<NamedExpression> named;
       if (libraryBuilder.enableNamedArgumentsAnywhereInLibrary) {
-        positional =
-            new List<Expression>.filled(positionalCount, dummyExpression);
+        positional = new List<Expression>.filled(
+            positionalCount, dummyExpression,
+            growable: true);
         named = new List<NamedExpression>.filled(
-            arguments.length - positionalCount, dummyNamedExpression);
+            arguments.length - positionalCount, dummyNamedExpression,
+            growable: true);
         int positionalIndex = 0;
         int namedIndex = 0;
         for (int i = 0; i < arguments.length; i++) {
@@ -3008,17 +3156,21 @@
 
   @override
   void beginThenStatement(Token token) {
+    debugEvent("beginThenStatement");
     Expression condition = popForValue();
     // This is matched by the call to [deferNode] in
     // [endThenStatement].
     typeInferrer.assignedVariables.beginNode();
     push(condition);
-    super.beginThenStatement(token);
+    enterLocalScope("then");
   }
 
   @override
   void endThenStatement(Token token) {
-    super.endThenStatement(token);
+    debugEvent("endThenStatement");
+    Object? body = pop();
+    exitLocalScope();
+    push(body);
     // This is matched by the call to [beginNode] in
     // [beginThenStatement] and by the call to [storeInfo] in
     // [endIfStatement].
@@ -3294,7 +3446,8 @@
       tryStatementInfoStack = tryStatementInfoStack
           .prepend(typeInferrer.assignedVariables.deferNode());
     }
-    super.beginBlock(token, blockKind);
+    debugEvent("beginBlock");
+    enterLocalScope("block");
   }
 
   @override
@@ -3344,7 +3497,6 @@
     }
   }
 
-  @override
   void enterLoop(int charOffset) {
     if (peek() is LabelTarget) {
       LabelTarget target = peek() as LabelTarget;
@@ -3998,13 +4150,12 @@
     enterLocalScope('FunctionTypeScope',
         scope.createNestedScope("function-type scope", isModifiable: true));
     if (typeVariables != null) {
-      ScopeBuilder scopeBuilder = new ScopeBuilder(scope);
       for (TypeVariableBuilder builder in typeVariables) {
         String name = builder.name;
-        TypeVariableBuilder? existing =
-            scopeBuilder[name] as TypeVariableBuilder?;
+        TypeVariableBuilder? existing = scope.lookupLocalMember(name,
+            setter: false) as TypeVariableBuilder?;
         if (existing == null) {
-          scopeBuilder.addMember(name, builder);
+          scope.addLocalMember(name, builder, setter: false);
         } else {
           reportDuplicatedDeclaration(existing, name, builder.charOffset);
         }
@@ -5390,7 +5541,7 @@
       } else {
         target = b.member;
       }
-      if (type is SourceEnumBuilder &&
+      if (type.isEnum &&
           !(libraryBuilder.enableEnhancedEnumsInLibrary &&
               target is Procedure &&
               target.kind == ProcedureKind.Factory)) {
@@ -5882,9 +6033,10 @@
 
   @override
   void beginDoWhileStatement(Token token) {
+    debugEvent("beginDoWhileStatement");
     // This is matched by the [endNode] call in [endDoWhileStatement].
     typeInferrer.assignedVariables.beginNode();
-    super.beginDoWhileStatement(token);
+    enterLoop(token.charOffset);
   }
 
   @override
@@ -6211,9 +6363,10 @@
 
   @override
   void beginWhileStatement(Token token) {
+    debugEvent("beginWhileStatement");
     // This is matched by the [endNode] call in [endWhileStatement].
     typeInferrer.assignedVariables.beginNode();
-    super.beginWhileStatement(token);
+    enterLoop(token.charOffset);
   }
 
   @override
@@ -6452,8 +6605,7 @@
       SwitchCase current = cases[i] = pop() as SwitchCase;
       if (labels != null) {
         for (Label label in labels) {
-          JumpTarget? target =
-              switchScope!.lookupLabel(label.name) as JumpTarget?;
+          JumpTarget? target = switchScope!.lookupLabel(label.name);
           if (target != null) {
             target.resolveGotos(forest, current);
           }
@@ -6512,7 +6664,7 @@
     if (hasTarget) {
       identifier = pop() as Identifier;
       name = identifier.name;
-      target = scope.lookupLabel(name) as JumpTarget?;
+      target = scope.lookupLabel(name);
     }
     if (target == null && name == null) {
       push(problemInLoopOrSwitch = buildProblemStatement(
@@ -6565,15 +6717,7 @@
     if (hasTarget) {
       identifier = pop() as Identifier;
       name = identifier.name;
-      Builder? namedTarget = scope.lookupLabel(identifier.name);
-      if (namedTarget != null && namedTarget is! JumpTarget) {
-        Token labelToken = continueKeyword.next!;
-        push(problemInLoopOrSwitch = buildProblemStatement(
-            fasta.messageContinueLabelNotTarget, labelToken.charOffset,
-            length: labelToken.length));
-        return;
-      }
-      target = namedTarget as JumpTarget?;
+      target = scope.lookupLabel(identifier.name);
       if (target == null) {
         if (switchScope == null) {
           push(buildProblemStatement(
@@ -7366,11 +7510,13 @@
 
 abstract class EnsureLoaded {
   void ensureLoaded(Member? member);
+
   bool isLoaded(Member? member);
 }
 
 class Operator {
   final Token token;
+
   String get name => token.stringValue!;
 
   final int charOffset;
@@ -7381,23 +7527,20 @@
   String toString() => "operator($name)";
 }
 
-class JumpTarget extends BuilderImpl {
+class JumpTarget {
   final List<Statement> users = <Statement>[];
 
   final JumpTargetKind kind;
 
   final int functionNestingLevel;
 
-  @override
   final MemberBuilder parent;
 
-  @override
   final int charOffset;
 
   JumpTarget(
       this.kind, this.functionNestingLevel, this.parent, this.charOffset);
 
-  @override
   Uri get fileUri => parent.fileUri!;
 
   bool get isBreakTarget => kind == JumpTargetKind.Break;
@@ -7457,11 +7600,10 @@
     users.clear();
   }
 
-  @override
   String get fullNameForErrors => "<jump-target>";
 }
 
-class LabelTarget extends BuilderImpl implements JumpTarget {
+class LabelTarget implements JumpTarget {
   @override
   final MemberBuilder parent;
 
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 88168b6..4bb0a08 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -728,7 +728,7 @@
     TreeNode result = super.visitSwitchStatement(node, removalSentinel);
     Library library = constantEvaluator.libraryOf(node);
     // ignore: unnecessary_null_comparison
-    if (library != null && library.isNonNullableByDefault) {
+    if (library != null) {
       for (SwitchCase switchCase in node.cases) {
         for (Expression caseExpression in switchCase.expressions) {
           if (caseExpression is ConstantExpression) {
@@ -965,7 +965,7 @@
   Map<String, String> _computeSupportedLibraries() {
     Map<String, String> map = {};
     for (Library library in component.libraries) {
-      if (library.importUri.scheme == 'dart') {
+      if (library.importUri.isScheme('dart')) {
         map[library.importUri.path] =
             DartLibrarySupport.getDartLibrarySupportValue(
                 library.importUri.path,
@@ -2810,7 +2810,9 @@
               templateConstEvalGetterNotFound
                   .withArguments(variable.name ?? ''));
     } else {
-      if (variable.parent is Let || _isFormalParameter(variable)) {
+      if (variable.parent is Let ||
+          variable.parent is LocalInitializer ||
+          _isFormalParameter(variable)) {
         return env.lookupVariable(node.variable) ??
             createEvaluationErrorConstant(
                 node,
@@ -4117,6 +4119,7 @@
   final EvaluationEnvironment? _parent;
 
   EvaluationEnvironment() : _parent = null;
+
   EvaluationEnvironment.withParent(this._parent);
 
   /// Whether the current environment is empty.
@@ -4214,18 +4217,21 @@
 /// Status that the statement returned a valid [Constant] value.
 class ReturnStatus extends ExecutionStatus {
   final Constant? value;
+
   ReturnStatus(this.value);
 }
 
 /// Status with an exception or error that the statement has thrown.
 class AbortStatus extends ExecutionStatus {
   final AbortConstant error;
+
   AbortStatus(this.error);
 }
 
 /// Status that the statement breaks out of an enclosing [LabeledStatement].
 class BreakStatus extends ExecutionStatus {
   final LabeledStatement target;
+
   BreakStatus(this.target);
 }
 
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 0cbb45a..3b70084 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
@@ -5,6 +5,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_algebra.dart';
 
+import '../builder/library_builder.dart';
 import '../source/source_library_builder.dart';
 import '../source/source_member_builder.dart';
 import 'kernel_helper.dart';
@@ -279,7 +280,8 @@
     Procedure tearOff,
     Member target,
     List<DartType> typeArguments,
-    FreshTypeParameters freshTypeParameters) {
+    FreshTypeParameters freshTypeParameters,
+    LibraryBuilder libraryBuilder) {
   int fileOffset = tearOff.fileOffset;
 
   List<TypeParameter> typeParameters;
@@ -318,7 +320,7 @@
   _createTearOffBody(tearOff, target, arguments);
   return new SynthesizedFunctionNode(
       substitutionMap, target.function!, tearOff.function,
-      identicalSignatures: false);
+      identicalSignatures: false, libraryBuilder: libraryBuilder);
 }
 
 /// Creates the synthesized [Procedure] node for a tear off lowering by the
@@ -326,7 +328,7 @@
 Procedure _createTearOffProcedure(SourceLibraryBuilder libraryBuilder,
     Name name, Uri fileUri, int fileOffset, Reference? reference) {
   return new Procedure(name, ProcedureKind.Method, new FunctionNode(null),
-      fileUri: fileUri, isStatic: true, reference: reference)
+      fileUri: fileUri, isStatic: true, isSynthetic: true, reference: reference)
     ..startFileOffset = fileOffset
     ..fileOffset = fileOffset
     ..fileEndOffset = fileOffset
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 ec5e04c..f1e283a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -3219,6 +3219,9 @@
                     messageAbstractClassConstructorTearOff,
                     nameOffset,
                     name.text.length);
+              } else if (declarationBuilder.cls.isEnum) {
+                return _helper.buildProblem(messageEnumConstructorTearoff,
+                    nameOffset, name.text.length);
               }
               tearOffExpression = _helper.forest
                   .createConstructorTearOff(token.charOffset, tearOff);
@@ -4570,32 +4573,14 @@
       int offset, Name name, Arguments arguments) {
     Constructor? constructor =
         _helper.lookupConstructor(name, isSuper: isSuper);
-    LocatedMessage? message;
-    if (constructor != null) {
-      // The check of the arguments is done later for super initializers if the
-      // 'super-parameters' language feature is enabled. In that case the
-      // additional parameters can be added at a later stage.
-      bool isPotentialSuperParametersReceiver =
-          isSuper && _helper.libraryBuilder.enableSuperParametersInLibrary;
-      // Additional arguments are added to the redirecting initializer of an
-      // enum constructor, so the check is performed later.
-      bool isEnumConstructorRedirectingInitializer =
-          constructor.enclosingClass.isEnum;
-      if (!isPotentialSuperParametersReceiver &&
-          !isEnumConstructorRedirectingInitializer) {
-        message = _helper.checkArgumentsForFunction(
-            constructor.function, arguments, offset, <TypeParameter>[]);
-      }
-    } else {
+    if (constructor == null) {
       String fullName =
           _helper.constructorNameForDiagnostics(name.text, isSuper: isSuper);
-      message = (isSuper
+      LocatedMessage message = (isSuper
               ? templateSuperclassHasNoConstructor
               : templateConstructorNotFound)
           .withArguments(fullName)
           .withLocation(_uri, fileOffset, lengthForToken(token));
-    }
-    if (message != null) {
       return _helper.buildInvalidInitializer(
           _helper.buildUnresolvedError(
               _forest.createNullLiteral(offset),
@@ -4609,10 +4594,10 @@
           offset);
     } else if (isSuper) {
       return _helper.buildSuperInitializer(
-          false, constructor!, arguments, offset);
+          false, constructor, arguments, offset);
     } else {
       return _helper.buildRedirectingInitializer(
-          constructor!, arguments, offset);
+          constructor, arguments, offset);
     }
   }
 
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 b5b8b97..878dc03b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -82,10 +82,39 @@
         (canonicalMember.classBuilder != classBuilder &&
             needsTypeOrCovarianceUpdate) ||
         needMixinStub;
-    bool needsSuperImpl = _superClassMember != null &&
-        _superClassMember!
+    bool needsSuperImpl = false;
+    Member? superTarget;
+    if (_superClassMember != null) {
+      superTarget =
+          _superClassMember!.getMember(_combinedMemberSignature.membersBuilder);
+      if (superTarget is Procedure &&
+          interfaceMember is Procedure &&
+          (superTarget.function.positionalParameters.length <
+                  interfaceMember.function.positionalParameters.length ||
+              superTarget.function.namedParameters.length <
+                  interfaceMember.function.namedParameters.length)) {
+        // [superTarget] is not a valid implementation for [interfaceMember]
+        // since [interfaceMember] has more parameters than [superTarget].
+        //
+        // For instance
+        //
+        //    class A {
+        //      void method() {}
+        //    }
+        //    abstract class B<T> extends A {
+        //      void method({T? a});
+        //    }
+        //
+        // Any concrete implementation of B must provide its own implementation
+        // of `B.method` and cannot forward to `A.method`.
+      } else {
+        // [superTarget] is a valid implementation for [interfaceMember] so
+        // we need to add concrete forwarding stub of the variances differ.
+        needsSuperImpl = _superClassMember!
                 .getCovariance(_combinedMemberSignature.membersBuilder) !=
             _combinedMemberSignature.combinedMemberSignatureCovariance;
+      }
+    }
     if (stubNeeded) {
       Procedure stub = _combinedMemberSignature.createMemberFromSignature(
           copyLocation: false)!;
@@ -124,7 +153,7 @@
         if (needsSuperImpl ||
             (needMixinStub && _superClassMember == _mixedInMember)) {
           _createForwardingImplIfNeeded(
-              stub.function, stub.name, classBuilder.cls,
+              stub.function, stub.name, classBuilder.cls, superTarget,
               isForwardingStub: needsForwardingStub);
         }
       }
@@ -136,16 +165,16 @@
             .applyCovariance(interfaceMember);
       }
       if (needsSuperImpl) {
-        _createForwardingImplIfNeeded(
-            interfaceMember.function!, interfaceMember.name, classBuilder.cls,
+        _createForwardingImplIfNeeded(interfaceMember.function!,
+            interfaceMember.name, classBuilder.cls, superTarget,
             isForwardingStub: true);
       }
       return null;
     }
   }
 
-  void _createForwardingImplIfNeeded(
-      FunctionNode function, Name name, Class enclosingClass,
+  void _createForwardingImplIfNeeded(FunctionNode function, Name name,
+      Class enclosingClass, Member? superTarget,
       {required bool isForwardingStub}) {
     // ignore: unnecessary_null_comparison
     assert(isForwardingStub != null);
@@ -155,12 +184,10 @@
     }
     // If there is no concrete implementation in the superclass, then the method
     // is fully abstract and we don't need to do anything.
-    if (_superClassMember == null) {
+    if (superTarget == null) {
       return;
     }
     Procedure procedure = function.parent as Procedure;
-    Member superTarget =
-        _superClassMember!.getMember(_combinedMemberSignature.membersBuilder);
     if (superTarget is Procedure && superTarget.isForwardingStub) {
       Procedure superProcedure = superTarget;
       superTarget = superProcedure.concreteForwardingStubTarget!;
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 f93f47e..e4a2839 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
@@ -1374,7 +1374,7 @@
         if (classBuilder is SourceClassBuilder && !declaredMember.isStatic) {
           assert(
               declaredMember.isSourceDeclaration &&
-                  declaredMember.classBuilder == classBuilder,
+                  declaredMember.classBuilder.origin == classBuilder,
               "Only declared members can override: ${declaredMember}");
           hasDeclaredMembers = true;
           if (declaredMember.isProperty) {
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 2e8000f..cc5d497 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -276,10 +276,7 @@
         typedefType: null);
     ExpressionInferenceResult inferredResult =
         inferrer.instantiateTearOff(resultType, typeContext, node);
-    Expression ensuredResultExpression =
-        inferrer.ensureAssignableResult(typeContext, inferredResult);
-    return new ExpressionInferenceResult(
-        inferredResult.inferredType, ensuredResultExpression);
+    return inferrer.ensureAssignableResult(typeContext, inferredResult);
   }
 
   @override
@@ -505,8 +502,9 @@
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: true);
 
-    Expression condition =
-        inferrer.ensureAssignableResult(expectedType, conditionResult);
+    Expression condition = inferrer
+        .ensureAssignableResult(expectedType, conditionResult)
+        .expression;
     node.condition = condition..parent = node;
     inferrer.flowAnalysis.assert_afterCondition(node.condition);
     if (node.message != null) {
@@ -662,8 +660,9 @@
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: true);
-    Expression condition =
-        inferrer.ensureAssignableResult(expectedType, conditionResult);
+    Expression condition = inferrer
+        .ensureAssignableResult(expectedType, conditionResult)
+        .expression;
     node.condition = condition..parent = node;
     inferrer.flowAnalysis.conditional_thenBegin(node.condition, node);
     bool isThenReachable = inferrer.flowAnalysis.isReachable;
@@ -755,8 +754,9 @@
     DartType receiverType = inferrer.getExtensionReceiverType(
         node.extension, extensionTypeArguments);
 
-    Expression receiver =
-        inferrer.ensureAssignableResult(receiverType, receiverResult);
+    Expression receiver = inferrer
+        .ensureAssignableResult(receiverType, receiverResult)
+        .expression;
 
     ObjectAccessTarget target = new ExtensionAccessTarget(
         node.target, null, ProcedureKind.Setter, extensionTypeArguments);
@@ -767,7 +767,8 @@
     ExpressionInferenceResult valueResult = inferrer.inferExpression(
         node.value, const UnknownType(), true,
         isVoidAllowed: false);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
 
     VariableDeclaration? valueVariable;
     if (node.forEffect) {
@@ -823,8 +824,9 @@
     DartType receiverType = inferrer.getExtensionReceiverType(
         node.extension, extensionTypeArguments);
 
-    Expression receiver =
-        inferrer.ensureAssignableResult(receiverType, receiverResult);
+    Expression receiver = inferrer
+        .ensureAssignableResult(receiverType, receiverResult)
+        .expression;
 
     VariableDeclaration? receiverVariable;
     Expression readReceiver;
@@ -876,11 +878,9 @@
         node.rhs,
         null);
 
-    Expression binary = binaryResult.expression;
-    DartType binaryType = binaryResult.inferredType;
-
-    Expression value = inferrer.ensureAssignable(valueType, binaryType, binary,
+    binaryResult = inferrer.ensureAssignableResult(valueType, binaryResult,
         isVoidAllowed: true);
+    Expression value = binaryResult.expression;
 
     VariableDeclaration? valueVariable;
     if (node.forEffect) {
@@ -952,7 +952,7 @@
         node.condition, boolType, !inferrer.isTopLevel,
         isVoidAllowed: true);
     Expression condition =
-        inferrer.ensureAssignableResult(boolType, conditionResult);
+        inferrer.ensureAssignableResult(boolType, conditionResult).expression;
     node.condition = condition..parent = node;
     inferrer.flowAnalysis.doStatement_end(condition);
     return const StatementInferenceResult();
@@ -1063,9 +1063,10 @@
   InitializerInferenceResult visitFieldInitializer(FieldInitializer node) {
     ExpressionInferenceResult initializerResult =
         inferrer.inferExpression(node.value, node.field.type, true);
-    Expression initializer = inferrer.ensureAssignableResult(
-        node.field.type, initializerResult,
-        fileOffset: node.fileOffset);
+    Expression initializer = inferrer
+        .ensureAssignableResult(node.field.type, initializerResult,
+            fileOffset: node.fileOffset)
+        .expression;
     node.value = initializer..parent = node;
     return const SuccessfulInitializerInferenceResult();
   }
@@ -1111,6 +1112,7 @@
     TreeNode parent = variable.parent!;
     Expression implicitDowncast = inferrer.ensureAssignable(
         variable.type, inferredType, variableGet,
+        isVoidAllowed: true,
         fileOffset: parent.fileOffset,
         errorTemplate: templateForInLoopElementTypeNotAssignable,
         nullabilityErrorTemplate:
@@ -1344,8 +1346,9 @@
       ExpressionInferenceResult conditionResult = inferrer.inferExpression(
           node.condition!, expectedType, !inferrer.isTopLevel,
           isVoidAllowed: true);
-      Expression condition =
-          inferrer.ensureAssignableResult(expectedType, conditionResult);
+      Expression condition = inferrer
+          .ensureAssignableResult(expectedType, conditionResult)
+          .expression;
       node.condition = condition..parent = node;
     }
 
@@ -1497,8 +1500,9 @@
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: true);
-    Expression condition =
-        inferrer.ensureAssignableResult(expectedType, conditionResult);
+    Expression condition = inferrer
+        .ensureAssignableResult(expectedType, conditionResult)
+        .expression;
     node.condition = condition..parent = node;
     inferrer.flowAnalysis.ifStatement_thenBegin(condition, node);
     StatementInferenceResult thenResult = inferrer.inferStatement(node.then);
@@ -1782,7 +1786,7 @@
           element.condition, boolType, typeChecksNeeded,
           isVoidAllowed: false);
       Expression condition =
-          inferrer.ensureAssignableResult(boolType, conditionResult);
+          inferrer.ensureAssignableResult(boolType, conditionResult).expression;
       element.condition = condition..parent = element;
       inferrer.flowAnalysis.ifStatement_thenBegin(condition, element);
       ExpressionInferenceResult thenResult = inferElement(
@@ -1934,15 +1938,11 @@
       ExpressionInferenceResult result = inferrer.inferExpression(
           element, inferredTypeArgument, inferenceNeeded || typeChecksNeeded,
           isVoidAllowed: true);
-      Expression replacement;
       if (inferredTypeArgument is! UnknownType) {
-        replacement = inferrer.ensureAssignableResult(
-            inferredTypeArgument, result,
+        result = inferrer.ensureAssignableResult(inferredTypeArgument, result,
             isVoidAllowed: inferredTypeArgument is VoidType);
-      } else {
-        replacement = result.expression;
       }
-      return new ExpressionInferenceResult(result.inferredType, replacement);
+      return result;
     }
   }
 
@@ -2100,14 +2100,16 @@
     ExpressionInferenceResult leftResult = inferrer.inferExpression(
         node.left, boolType, !inferrer.isTopLevel,
         isVoidAllowed: false);
-    Expression left = inferrer.ensureAssignableResult(boolType, leftResult);
+    Expression left =
+        inferrer.ensureAssignableResult(boolType, leftResult).expression;
     node.left = left..parent = node;
     inferrer.flowAnalysis.logicalBinaryOp_rightBegin(node.left, node,
         isAnd: node.operatorEnum == LogicalExpressionOperator.AND);
     ExpressionInferenceResult rightResult = inferrer.inferExpression(
         node.right, boolType, !inferrer.isTopLevel,
         isVoidAllowed: false);
-    Expression right = inferrer.ensureAssignableResult(boolType, rightResult);
+    Expression right =
+        inferrer.ensureAssignableResult(boolType, rightResult).expression;
     node.right = right..parent = node;
     inferrer.flowAnalysis.logicalBinaryOp_end(node, node.right,
         isAnd: node.operatorEnum == LogicalExpressionOperator.AND);
@@ -2389,7 +2391,7 @@
           entry.condition, boolType, typeChecksNeeded,
           isVoidAllowed: false);
       Expression condition =
-          inferrer.ensureAssignableResult(boolType, conditionResult);
+          inferrer.ensureAssignableResult(boolType, conditionResult).expression;
       entry.condition = condition..parent = entry;
       inferrer.flowAnalysis.ifStatement_thenBegin(condition, entry);
       // Note that this recursive invocation of inferMapEntry will add two types
@@ -2569,16 +2571,18 @@
       ExpressionInferenceResult keyResult = inferrer.inferExpression(
           entry.key, inferredKeyType, true,
           isVoidAllowed: true);
-      Expression key = inferrer.ensureAssignableResult(
-          inferredKeyType, keyResult,
-          isVoidAllowed: inferredKeyType is VoidType);
+      Expression key = inferrer
+          .ensureAssignableResult(inferredKeyType, keyResult,
+              isVoidAllowed: inferredKeyType is VoidType)
+          .expression;
       entry.key = key..parent = entry;
       ExpressionInferenceResult valueResult = inferrer.inferExpression(
           entry.value, inferredValueType, true,
           isVoidAllowed: true);
-      Expression value = inferrer.ensureAssignableResult(
-          inferredValueType, valueResult,
-          isVoidAllowed: inferredValueType is VoidType);
+      Expression value = inferrer
+          .ensureAssignableResult(inferredValueType, valueResult,
+              isVoidAllowed: inferredValueType is VoidType)
+          .expression;
       entry.value = value..parent = entry;
       actualTypes.add(keyResult.inferredType);
       actualTypes.add(valueResult.inferredType);
@@ -2937,9 +2941,10 @@
         inferrer.coreTypes.boolRawType(inferrer.library.nonNullable);
     ExpressionInferenceResult operandResult =
         inferrer.inferExpression(node.operand, boolType, !inferrer.isTopLevel);
-    Expression operand = inferrer.ensureAssignableResult(
-        boolType, operandResult,
-        fileOffset: node.fileOffset);
+    Expression operand = inferrer
+        .ensureAssignableResult(boolType, operandResult,
+            fileOffset: node.fileOffset)
+        .expression;
     node.operand = operand..parent = node;
     inferrer.flowAnalysis.logicalNot_end(node, node.operand);
     return new ExpressionInferenceResult(boolType, node);
@@ -3137,10 +3142,10 @@
         node.binaryName,
         node.rhs,
         null);
-    DartType binaryType = binaryResult.inferredType;
 
-    Expression binary =
-        inferrer.ensureAssignableResult(writeType, binaryResult);
+    binaryResult = inferrer.ensureAssignableResult(writeType, binaryResult);
+    DartType binaryType = binaryResult.inferredType;
+    Expression binary = binaryResult.expression;
 
     Expression write = _computePropertySet(node.writeOffset, writeReceiver,
         receiverType, node.propertyName, writeTarget, binary,
@@ -3197,7 +3202,8 @@
         .inferExpression(node.rhs, writeContext, true, isVoidAllowed: true);
     inferrer.flowAnalysis.ifNullExpression_end();
 
-    Expression rhs = inferrer.ensureAssignableResult(writeContext, rhsResult);
+    rhsResult = inferrer.ensureAssignableResult(writeContext, rhsResult);
+    Expression rhs = rhsResult.expression;
 
     DartType writeType = rhsResult.inferredType;
     Expression write = _computePropertySet(node.writeOffset, writeReceiver,
@@ -3328,7 +3334,8 @@
     ExpressionInferenceResult indexResult = inferrer
         .inferExpression(node.index, indexType, true, isVoidAllowed: true);
 
-    Expression index = inferrer.ensureAssignableResult(indexType, indexResult);
+    Expression index =
+        inferrer.ensureAssignableResult(indexType, indexResult).expression;
 
     ExpressionInferenceResult replacement = _computeIndexGet(
         node.fileOffset,
@@ -3369,7 +3376,8 @@
     ExpressionInferenceResult indexResult = inferrer
         .inferExpression(node.index, indexType, true, isVoidAllowed: true);
 
-    Expression index = inferrer.ensureAssignableResult(indexType, indexResult);
+    Expression index =
+        inferrer.ensureAssignableResult(indexType, indexResult).expression;
 
     VariableDeclaration? indexVariable;
     if (!node.forEffect && !isPureExpression(index)) {
@@ -3379,7 +3387,8 @@
 
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
 
     VariableDeclaration? valueVariable;
     Expression? returnedValue;
@@ -3436,7 +3445,8 @@
     ExpressionInferenceResult indexResult = inferrer
         .inferExpression(node.index, indexType, true, isVoidAllowed: true);
 
-    Expression index = inferrer.ensureAssignableResult(indexType, indexResult);
+    Expression index =
+        inferrer.ensureAssignableResult(indexType, indexResult).expression;
 
     VariableDeclaration? indexVariable;
     if (!isPureExpression(index)) {
@@ -3446,7 +3456,8 @@
 
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
 
     VariableDeclaration? valueVariable;
     Expression returnedValue;
@@ -3505,8 +3516,9 @@
     DartType receiverType = inferrer.getExtensionReceiverType(
         node.extension, extensionTypeArguments);
 
-    Expression receiver =
-        inferrer.ensureAssignableResult(receiverType, receiverResult);
+    Expression receiver = inferrer
+        .ensureAssignableResult(receiverType, receiverResult)
+        .expression;
 
     VariableDeclaration? receiverVariable;
     if (!isPureExpression(receiver)) {
@@ -3523,11 +3535,13 @@
     ExpressionInferenceResult indexResult = inferrer
         .inferExpression(node.index, indexType, true, isVoidAllowed: true);
 
-    Expression index = inferrer.ensureAssignableResult(indexType, indexResult);
+    Expression index =
+        inferrer.ensureAssignableResult(indexType, indexResult).expression;
 
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
 
     VariableDeclaration? valueVariable;
     Expression returnedValue;
@@ -3642,7 +3656,8 @@
 
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
     inferrer.flowAnalysis.ifNullExpression_end();
 
     DartType nonNullableReadType = readType.toNonNull();
@@ -3818,7 +3833,8 @@
     inferrer.flowAnalysis.ifNullExpression_rightBegin(read, readType);
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
     inferrer.flowAnalysis.ifNullExpression_end();
 
     DartType nonNullableReadType = readType.toNonNull();
@@ -3920,8 +3936,9 @@
     DartType receiverType = inferrer.getExtensionReceiverType(
         node.extension, extensionTypeArguments);
 
-    Expression receiver =
-        inferrer.ensureAssignableResult(receiverType, receiverResult);
+    Expression receiver = inferrer
+        .ensureAssignableResult(receiverType, receiverResult)
+        .expression;
 
     VariableDeclaration? receiverVariable;
     Expression readReceiver;
@@ -3988,7 +4005,8 @@
 
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
     inferrer.flowAnalysis.ifNullExpression_end();
 
     DartType nonNullableReadType = readType.toNonNull();
@@ -4134,7 +4152,7 @@
     }
     DartType rightType =
         inferrer.getPositionalParameterTypeForTarget(equalsTarget, leftType, 0);
-    right = inferrer.ensureAssignableResult(
+    rightResult = inferrer.ensureAssignableResult(
         rightType.withDeclaredNullability(inferrer.library.nullable),
         rightResult,
         errorTemplate: templateArgumentTypeNotAssignable,
@@ -4145,6 +4163,7 @@
             templateArgumentTypeNotAssignableNullabilityNull,
         nullabilityNullTypeErrorTemplate:
             templateArgumentTypeNotAssignableNullabilityNullType);
+    right = rightResult.expression;
 
     if (equalsTarget.isInstanceMember || equalsTarget.isObjectMember) {
       FunctionType functionType =
@@ -4238,7 +4257,8 @@
               .createBinary(fileOffset, left, binaryName, right));
     }
 
-    right = inferrer.ensureAssignableResult(rightType, rightResult);
+    rightResult = inferrer.ensureAssignableResult(rightType, rightResult);
+    right = rightResult.expression;
 
     if (isSpecialCasedBinaryOperator) {
       binaryType = inferrer.typeSchemaEnvironment
@@ -5105,15 +5125,15 @@
         node.binaryName,
         node.rhs,
         null);
-    Expression binary = binaryResult.expression;
-    DartType binaryType = binaryResult.inferredType;
 
     writeIndex = inferrer.ensureAssignable(
         writeIndexType, indexResult.inferredType, writeIndex,
         whyNotPromoted: whyNotPromotedIndex);
 
-    binary = inferrer.ensureAssignable(valueType, binaryType, binary,
+    binaryResult = inferrer.ensureAssignableResult(valueType, binaryResult,
         fileOffset: node.fileOffset);
+    Expression binary = binaryResult.expression;
+    DartType binaryType = binaryResult.inferredType;
 
     VariableDeclaration? valueVariable;
     Expression valueExpression;
@@ -5249,12 +5269,12 @@
         node.binaryName,
         node.rhs,
         null);
+
+    binaryResult = inferrer.ensureAssignableResult(valueType, binaryResult,
+        fileOffset: node.fileOffset);
     Expression binary = binaryResult.expression;
     DartType binaryType = binaryResult.inferredType;
 
-    binary = inferrer.ensureAssignable(valueType, binaryType, binary,
-        fileOffset: node.fileOffset);
-
     VariableDeclaration? valueVariable;
     Expression valueExpression;
     if (node.forEffect || node.forPostIncDec) {
@@ -5404,20 +5424,15 @@
         node.binaryName,
         node.rhs,
         null);
+
+    binaryResult = inferrer.ensureAssignableResult(valueType, binaryResult,
+        fileOffset: node.fileOffset);
     Expression binary = binaryResult.expression;
     DartType binaryType = binaryResult.inferredType;
 
     writeIndex = inferrer.ensureAssignable(
         writeIndexType, indexResult.inferredType, writeIndex);
 
-    Expression binaryReplacement = inferrer.ensureAssignable(
-        valueType, binaryType, binary,
-        fileOffset: node.fileOffset);
-    // ignore: unnecessary_null_comparison
-    if (binaryReplacement != null) {
-      binary = binaryReplacement;
-    }
-
     VariableDeclaration? valueVariable;
     Expression valueExpression;
     if (node.forEffect || node.forPostIncDec) {
@@ -5510,8 +5525,9 @@
     DartType receiverType = inferrer.getExtensionReceiverType(
         node.extension, extensionTypeArguments);
 
-    Expression receiver =
-        inferrer.ensureAssignableResult(receiverType, receiverResult);
+    Expression receiver = inferrer
+        .ensureAssignableResult(receiverType, receiverResult)
+        .expression;
 
     VariableDeclaration? receiverVariable;
     Expression readReceiver;
@@ -5586,13 +5602,12 @@
         node.rhs,
         null);
 
-    Expression binary = binaryResult.expression;
-    DartType binaryType = binaryResult.inferredType;
-
     writeIndex = inferrer.ensureAssignable(
         writeIndexType, indexResult.inferredType, writeIndex);
-    binary = inferrer.ensureAssignable(valueType, binaryType, binary,
+    binaryResult = inferrer.ensureAssignableResult(valueType, binaryResult,
         fileOffset: node.fileOffset);
+    Expression binary = binaryResult.expression;
+    DartType binaryType = binaryResult.inferredType;
 
     VariableDeclaration? valueVariable;
     Expression valueExpression;
@@ -5720,9 +5735,10 @@
     DartType writeContext = inferrer.getSetterType(target, receiverType);
     ExpressionInferenceResult rhsResult = inferrer
         .inferExpression(node.value, writeContext, true, isVoidAllowed: true);
-    DartType rhsType = rhsResult.inferredType;
-    Expression rhs = inferrer.ensureAssignableResult(writeContext, rhsResult,
+    rhsResult = inferrer.ensureAssignableResult(writeContext, rhsResult,
         fileOffset: node.fileOffset, isVoidAllowed: writeContext is VoidType);
+    Expression rhs = rhsResult.expression;
+    DartType rhsType = rhsResult.inferredType;
 
     Expression replacement = _computePropertySet(
         node.fileOffset, receiver, receiverType, node.name, target, rhs,
@@ -5776,7 +5792,8 @@
 
     ExpressionInferenceResult valueResult = inferrer
         .inferExpression(node.value, valueType, true, isVoidAllowed: true);
-    Expression value = inferrer.ensureAssignableResult(valueType, valueResult);
+    valueResult = inferrer.ensureAssignableResult(valueType, valueResult);
+    Expression value = valueResult.expression;
 
     Expression write = _computePropertySet(node.writeOffset, writeReceiver,
         nonNullReceiverType, node.name, writeTarget, value,
@@ -6022,8 +6039,9 @@
     TypeInferenceEngine.resolveInferenceNode(writeMember);
     ExpressionInferenceResult rhsResult = inferrer
         .inferExpression(node.value, writeContext, true, isVoidAllowed: true);
-    Expression rhs = inferrer.ensureAssignableResult(writeContext, rhsResult,
+    rhsResult = inferrer.ensureAssignableResult(writeContext, rhsResult,
         fileOffset: node.fileOffset, isVoidAllowed: writeContext is VoidType);
+    Expression rhs = rhsResult.expression;
     node.value = rhs..parent = node;
     DartType rhsType = rhsResult.inferredType;
     return new ExpressionInferenceResult(rhsType, node);
@@ -6165,8 +6183,9 @@
     }
     ExpressionInferenceResult rhsResult = inferrer
         .inferExpression(node.value, writeContext, true, isVoidAllowed: true);
-    Expression rhs = inferrer.ensureAssignableResult(writeContext, rhsResult,
+    rhsResult = inferrer.ensureAssignableResult(writeContext, rhsResult,
         fileOffset: node.fileOffset, isVoidAllowed: writeContext is VoidType);
+    Expression rhs = rhsResult.expression;
     node.value = rhs..parent = node;
     return new ExpressionInferenceResult(rhsResult.inferredType, node);
   }
@@ -6446,10 +6465,11 @@
     ExpressionInferenceResult rhsResult = inferrer.inferExpression(
         node.value, promotedType ?? declaredOrInferredType, true,
         isVoidAllowed: true);
-    Expression rhs = inferrer.ensureAssignableResult(
+    rhsResult = inferrer.ensureAssignableResult(
         declaredOrInferredType, rhsResult,
         fileOffset: node.fileOffset,
         isVoidAllowed: declaredOrInferredType is VoidType);
+    Expression rhs = rhsResult.expression;
     inferrer.flowAnalysis
         .write(node, variable, rhsResult.inferredType, rhsResult.expression);
     DartType resultType = rhsResult.inferredType;
@@ -6550,9 +6570,10 @@
             isLate: node.isLate,
             isImplicitlyTyped: node.isImplicitlyTyped);
       }
-      Expression initializer = inferrer.ensureAssignableResult(
+      initializerResult = inferrer.ensureAssignableResult(
           node.type, initializerResult,
           fileOffset: node.fileOffset, isVoidAllowed: node.type is VoidType);
+      Expression initializer = initializerResult.expression;
       node.initializer = initializer..parent = node;
     }
     if (!inferrer.isTopLevel) {
@@ -6820,8 +6841,9 @@
     ExpressionInferenceResult conditionResult = inferrer.inferExpression(
         node.condition, expectedType, !inferrer.isTopLevel,
         isVoidAllowed: false);
-    Expression condition =
-        inferrer.ensureAssignableResult(expectedType, conditionResult);
+    Expression condition = inferrer
+        .ensureAssignableResult(expectedType, conditionResult)
+        .expression;
     node.condition = condition..parent = node;
     inferrer.flowAnalysis.whileStatement_bodyBegin(node, node.condition);
     StatementInferenceResult bodyResult = inferrer.inferStatement(node.body);
@@ -6991,11 +7013,8 @@
 
   ExpressionInferenceResult visitParenthesized(
       ParenthesizedExpression node, DartType typeContext) {
-    ExpressionInferenceResult result = inferrer.inferExpression(
-        node.expression, typeContext, true,
+    return inferrer.inferExpression(node.expression, typeContext, true,
         isVoidAllowed: true);
-    return new ExpressionInferenceResult(
-        result.inferredType, result.expression);
   }
 
   void reportNonNullableInNullAwareWarningIfNeeded(
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 635fec7..bd652d3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -7,6 +7,10 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/clone.dart' show CloneVisitorNotMembers;
 import 'package:kernel/type_algebra.dart' show Substitution;
+import 'package:kernel/type_environment.dart';
+
+import '../builder/library_builder.dart';
+import '../messages.dart';
 
 /// Data for clone default values for synthesized function nodes once the
 /// original default values have been computed.
@@ -35,20 +39,26 @@
   /// named parameters.
   final bool identicalSignatures;
 
-  final List<int>? _positionalSuperParameters;
+  final List<int?>? _positionalSuperParameters;
 
   final List<String>? _namedSuperParameters;
 
   bool isOutlineNode;
 
+  final LibraryBuilder _libraryBuilder;
+
+  CloneVisitorNotMembers? _cloner;
+
   SynthesizedFunctionNode(
       this._typeSubstitution, this._original, this._synthesized,
       {this.identicalSignatures: true,
-      List<int>? positionalSuperParameters: null,
+      List<int?>? positionalSuperParameters: null,
       List<String>? namedSuperParameters: null,
-      this.isOutlineNode: false})
+      this.isOutlineNode: false,
+      required LibraryBuilder libraryBuilder})
       : _positionalSuperParameters = positionalSuperParameters,
         _namedSuperParameters = namedSuperParameters,
+        _libraryBuilder = libraryBuilder,
         // Check that [positionalSuperParameters] and [namedSuperParameters] are
         // provided or omitted together.
         assert((positionalSuperParameters == null) ==
@@ -56,11 +66,18 @@
         assert(positionalSuperParameters == null ||
             () {
               // Check that [positionalSuperParameters] is sorted if it's
-              // provided.
-              for (int i = 1; i < positionalSuperParameters.length; i++) {
-                if (positionalSuperParameters[i] <
-                    positionalSuperParameters[i - 1]) {
-                  return false;
+              // provided. The `null` values are allowed in-between the sorted
+              // values.
+              for (int i = -1, j = 0;
+                  j < positionalSuperParameters.length;
+                  j++) {
+                int? currentValue = positionalSuperParameters[j];
+                if (currentValue != null) {
+                  if (i == -1 || positionalSuperParameters[i]! < currentValue) {
+                    i = j;
+                  } else {
+                    return false;
+                  }
                 }
               }
               return true;
@@ -82,23 +99,11 @@
               return superParameterIndex == namedSuperParameters.length;
             }());
 
-  void cloneDefaultValues() {
+  void cloneDefaultValues(TypeEnvironment typeEnvironment) {
     // TODO(ahe): It is unclear if it is legal to use type variables in
     // default values, but Fasta is currently allowing it, and the VM
     // accepts it. If it isn't legal, the we can speed this up by using a
     // single cloner without substitution.
-    CloneVisitorNotMembers? cloner;
-
-    void cloneInitializer(VariableDeclaration originalParameter,
-        VariableDeclaration clonedParameter) {
-      if (originalParameter.initializer != null) {
-        cloner ??=
-            new CloneVisitorNotMembers(typeSubstitution: _typeSubstitution);
-        clonedParameter.initializer = cloner!
-            .clone(originalParameter.initializer!)
-          ..parent = clonedParameter;
-      }
-    }
 
     // For mixin application constructors, the argument count is the same, but
     // for redirecting tear off lowerings, the argument count of the tear off
@@ -109,14 +114,21 @@
       assert(_positionalSuperParameters != null ||
           _synthesized.positionalParameters.length ==
               _original.positionalParameters.length);
-      List<int>? positionalSuperParameters = _positionalSuperParameters;
+      List<int?>? positionalSuperParameters = _positionalSuperParameters;
       for (int i = 0; i < _original.positionalParameters.length; i++) {
         if (positionalSuperParameters == null) {
-          cloneInitializer(_original.positionalParameters[i],
+          _cloneInitializer(_original.positionalParameters[i],
               _synthesized.positionalParameters[i]);
         } else if (i < positionalSuperParameters.length) {
-          cloneInitializer(_original.positionalParameters[i],
-              _synthesized.positionalParameters[positionalSuperParameters[i]]);
+          int? superParameterIndex = positionalSuperParameters[i];
+          if (superParameterIndex != null) {
+            VariableDeclaration originalParameter =
+                _original.positionalParameters[i];
+            VariableDeclaration synthesizedParameter =
+                _synthesized.positionalParameters[superParameterIndex];
+            _cloneDefaultValueForSuperParameters(
+                originalParameter, synthesizedParameter, typeEnvironment);
+          }
         }
       }
 
@@ -131,7 +143,7 @@
       }
       for (int i = 0; i < _synthesized.namedParameters.length; i++) {
         if (namedSuperParameters == null) {
-          cloneInitializer(
+          _cloneInitializer(
               _original.namedParameters[i], _synthesized.namedParameters[i]);
         } else if (superParameterNameIndex < namedSuperParameters.length &&
             namedSuperParameters[superParameterNameIndex] ==
@@ -141,9 +153,12 @@
           int? originalNamedParameterIndex =
               originalNamedParameterIndices[superParameterName];
           if (originalNamedParameterIndex != null) {
-            cloneInitializer(
-                _original.namedParameters[originalNamedParameterIndex],
-                _synthesized.namedParameters[i]);
+            VariableDeclaration originalParameter =
+                _original.namedParameters[originalNamedParameterIndex];
+            VariableDeclaration synthesizedParameter =
+                _synthesized.namedParameters[i];
+            _cloneDefaultValueForSuperParameters(
+                originalParameter, synthesizedParameter, typeEnvironment);
           } else {
             // TODO(cstefantsova): Handle the erroneous case of missing names.
           }
@@ -155,7 +170,7 @@
         VariableDeclaration synthesizedParameter =
             _synthesized.positionalParameters[i];
         if (i < _original.positionalParameters.length) {
-          cloneInitializer(
+          _cloneInitializer(
               _original.positionalParameters[i], synthesizedParameter);
         } else {
           // Error case: use `null` as initializer.
@@ -175,7 +190,7 @@
           VariableDeclaration? originalParameter =
               originalParameters[synthesizedParameter.name!];
           if (originalParameter != null) {
-            cloneInitializer(originalParameter, synthesizedParameter);
+            _cloneInitializer(originalParameter, synthesizedParameter);
           } else {
             // Error case: use `null` as initializer.
             synthesizedParameter.initializer = new NullLiteral()
@@ -186,6 +201,43 @@
     }
   }
 
+  void _cloneInitializer(VariableDeclaration originalParameter,
+      VariableDeclaration clonedParameter) {
+    if (originalParameter.initializer != null) {
+      CloneVisitorNotMembers cloner = _cloner ??=
+          new CloneVisitorNotMembers(typeSubstitution: _typeSubstitution);
+      clonedParameter.initializer = cloner.clone(originalParameter.initializer!)
+        ..parent = clonedParameter;
+    }
+  }
+
+  void _cloneDefaultValueForSuperParameters(
+      VariableDeclaration originalParameter,
+      VariableDeclaration synthesizedParameter,
+      TypeEnvironment typeEnvironment) {
+    Member member = _synthesized.parent as Member;
+    Expression? originalParameterInitializer = originalParameter.initializer;
+    DartType? originalParameterInitializerType = originalParameterInitializer
+        ?.getStaticType(new StaticTypeContext(member, typeEnvironment));
+    DartType synthesizedParameterType = synthesizedParameter.type;
+    if (originalParameterInitializerType != null &&
+        typeEnvironment.isSubtypeOf(originalParameterInitializerType,
+            synthesizedParameterType, SubtypeCheckMode.withNullabilities)) {
+      _cloneInitializer(originalParameter, synthesizedParameter);
+    } else {
+      if (synthesizedParameterType.isPotentiallyNonNullable) {
+        _libraryBuilder.addProblem(
+            templateOptionalSuperParameterWithoutInitializer.withArguments(
+                synthesizedParameter.type,
+                synthesizedParameter.name!,
+                _libraryBuilder.isNonNullableByDefault),
+            synthesizedParameter.fileOffset,
+            synthesizedParameter.name?.length ?? 1,
+            _libraryBuilder.fileUri);
+      }
+    }
+  }
+
   @override
   String toString() {
     return "SynthesizedFunctionNode(original=${_original.parent}, "
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 9bad9b3..730ab5747 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -72,6 +72,7 @@
 import '../ticker.dart' show Ticker;
 import '../type_inference/type_schema.dart';
 import '../uri_translator.dart' show UriTranslator;
+import 'benchmarker.dart' show BenchmarkPhases, Benchmarker;
 import 'constant_evaluator.dart' as constants
     show
         EvaluationMode,
@@ -182,12 +183,15 @@
 
   final ProcessedOptions _options;
 
+  final Benchmarker? benchmarker;
+
   KernelTarget(this.fileSystem, this.includeComments, DillTarget dillTarget,
       this.uriTranslator)
       : dillTarget = dillTarget,
         backendTarget = dillTarget.backendTarget,
         _options = CompilerContext.current.options,
-        ticker = dillTarget.ticker {
+        ticker = dillTarget.ticker,
+        benchmarker = dillTarget.benchmarker {
     loader = createLoader();
   }
 
@@ -223,9 +227,11 @@
   Uri? translateUri(Uri uri) => uriTranslator.translate(uri);
 
   /// Returns a reference to the constructor of
-  /// [AbstractClassInstantiationError] error.  The constructor is expected to
+  /// `AbstractClassInstantiationError` error.  The constructor is expected to
   /// accept a single argument of type String, which is the name of the
   /// abstract class.
+  // TODO: Use some other error before `AbstractClassInstantiationError`
+  // is removed.
   MemberBuilder getAbstractClassInstantiationError(Loader loader) {
     return _cachedAbstractClassInstantiationError ??=
         loader.coreLibrary.getConstructor("AbstractClassInstantiationError");
@@ -391,62 +397,225 @@
     builder.mixedInTypeBuilder = null;
   }
 
+  bool _hasComputedNeededPrecompilations = false;
+
+  Future<NeededPrecompilations?> computeNeededPrecompilations() async {
+    assert(!_hasComputedNeededPrecompilations,
+        "Needed precompilations have already been computed.");
+    _hasComputedNeededPrecompilations = true;
+    if (loader.first == null) return null;
+    return withCrashReporting<NeededPrecompilations?>(() async {
+      benchmarker?.enterPhase(BenchmarkPhases.outline_kernelBuildOutlines);
+      await loader.buildOutlines();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_becomeCoreLibrary);
+      loader.coreLibrary.becomeCoreLibrary();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_resolveParts);
+      loader.resolveParts();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeMacroDeclarations);
+      NeededPrecompilations? result = loader.computeMacroDeclarations();
+
+      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+      return result;
+    }, () => loader.currentUriForCrashReporting);
+  }
+
+  /// Builds [augmentationLibraries] to the state expected after applying phase
+  /// 1 macros.
+  Future<void> _buildForPhase1(
+      Iterable<SourceLibraryBuilder> augmentationLibraries) async {
+    await loader.buildOutlines();
+    // Normally patch libraries are applied in [SourceLoader.resolveParts].
+    // For augmentation libraries we instead apply them directly here.
+    for (SourceLibraryBuilder augmentationLibrary in augmentationLibraries) {
+      augmentationLibrary.applyPatches();
+    }
+    loader.computeLibraryScopes(augmentationLibraries);
+    // TODO(johnniwinther): Support computation of macro applications in
+    // augmentation libraries?
+    loader.resolveTypes(augmentationLibraries);
+  }
+
+  /// Builds [augmentationLibraries] to the state expected after applying phase
+  /// 2 macros.
+  void _buildForPhase2(List<SourceLibraryBuilder> augmentationLibraries) {
+    loader.finishTypeVariables(
+        augmentationLibraries, objectClassBuilder, dynamicType);
+    for (SourceLibraryBuilder augmentationLibrary in augmentationLibraries) {
+      augmentationLibrary.build(loader.coreLibrary, modifyTarget: false);
+    }
+    loader.resolveConstructors(augmentationLibraries);
+  }
+
+  /// Builds [augmentationLibraries] to the state expected after applying phase
+  /// 3 macros.
+  void _buildForPhase3(List<SourceLibraryBuilder> augmentationLibraries) {
+    // Currently there nothing to do here. The method is left in for symmetry.
+  }
+
   Future<BuildResult> buildOutlines({CanonicalName? nameRoot}) async {
     if (loader.first == null) return new BuildResult();
     return withCrashReporting<BuildResult>(() async {
-      await loader.buildOutlines();
-      loader.coreLibrary.becomeCoreLibrary();
-      loader.resolveParts();
-      loader.computeMacroDeclarations();
-      loader.computeLibraryScopes();
+      if (!_hasComputedNeededPrecompilations) {
+        NeededPrecompilations? neededPrecompilations =
+            await computeNeededPrecompilations();
+        // To support macros, the needed macro libraries must be compiled be
+        // they are applied. Any supporting pipeline must therefore call
+        // [computeNeededPrecompilations] before calling [buildOutlines] in
+        // order to perform any need compilation in advance.
+        //
+        // If [neededPrecompilations] is non-null here, it means that macro
+        // compilation was needed but not performed.
+        if (neededPrecompilations != null) {
+          throw new UnsupportedError('Macro precompilation is not supported.');
+        }
+      }
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeLibraryScopes);
+      loader.computeLibraryScopes(loader.libraryBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeMacroApplications);
       MacroApplications? macroApplications =
           await loader.computeMacroApplications();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_setupTopAndBottomTypes);
       setupTopAndBottomTypes();
-      loader.resolveTypes();
-      loader.computeVariances();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_resolveTypes);
+      loader.resolveTypes(loader.sourceLibraryBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeVariances);
+      loader.computeVariances(loader.sourceLibraryBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeDefaultTypes);
       loader.computeDefaultTypes(
           dynamicType, nullType, bottomType, objectClassBuilder);
+
       if (macroApplications != null) {
-        await macroApplications.applyTypeMacros();
+        benchmarker?.enterPhase(BenchmarkPhases.outline_applyTypeMacros);
+        List<SourceLibraryBuilder> augmentationLibraries =
+            await macroApplications.applyTypeMacros(loader);
+        benchmarker
+            ?.enterPhase(BenchmarkPhases.outline_buildMacroTypesForPhase1);
+        await _buildForPhase1(augmentationLibraries);
       }
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkSemantics);
       List<SourceClassBuilder>? sourceClassBuilders =
           loader.checkSemantics(objectClassBuilder);
-      loader.finishTypeVariables(objectClassBuilder, dynamicType);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_finishTypeVariables);
+      loader.finishTypeVariables(
+          loader.sourceLibraryBuilders, objectClassBuilder, dynamicType);
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_createTypeInferenceEngine);
       loader.createTypeInferenceEngine();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_buildComponent);
       loader.buildComponent();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_installDefaultSupertypes);
       installDefaultSupertypes();
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_installSyntheticConstructors);
       installSyntheticConstructors(sourceClassBuilders);
-      loader.resolveConstructors();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_resolveConstructors);
+      loader.resolveConstructors(loader.sourceLibraryBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_link);
       component =
           link(new List<Library>.of(loader.libraries), nameRoot: nameRoot);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeCoreTypes);
       computeCoreTypes();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_buildClassHierarchy);
       loader.buildClassHierarchy(sourceClassBuilders, objectClassBuilder);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkSupertypes);
       loader.checkSupertypes(sourceClassBuilders, enumClass);
+
       if (macroApplications != null) {
-        await macroApplications.applyDeclarationMacros();
+        benchmarker?.enterPhase(BenchmarkPhases.outline_applyDeclarationMacros);
+        await macroApplications.applyDeclarationsMacros(loader.hierarchyBuilder,
+            (SourceLibraryBuilder augmentationLibrary) async {
+          List<SourceLibraryBuilder> augmentationLibraries = [
+            augmentationLibrary
+          ];
+          benchmarker?.enterPhase(
+              BenchmarkPhases.outline_buildMacroDeclarationsForPhase1);
+          await _buildForPhase1(augmentationLibraries);
+          benchmarker?.enterPhase(
+              BenchmarkPhases.outline_buildMacroDeclarationsForPhase2);
+          _buildForPhase2(augmentationLibraries);
+        });
       }
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_buildClassHierarchyMembers);
       loader.buildClassHierarchyMembers(sourceClassBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeHierarchy);
       loader.computeHierarchy();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_computeShowHideElements);
       loader.computeShowHideElements();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_installTypedefTearOffs);
       loader.installTypedefTearOffs();
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_performTopLevelInference);
       loader.performTopLevelInference(sourceClassBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkOverrides);
       loader.checkOverrides(sourceClassBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkAbstractMembers);
       loader.checkAbstractMembers(sourceClassBuilders);
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_addNoSuchMethodForwarders);
       loader.addNoSuchMethodForwarders(sourceClassBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkMixins);
       loader.checkMixins(sourceClassBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_buildOutlineExpressions);
       loader.buildOutlineExpressions(
           loader.hierarchy, synthesizedFunctionNodes);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkTypes);
       loader.checkTypes();
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_checkRedirectingFactories);
       loader.checkRedirectingFactories(sourceClassBuilders);
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_finishSynthesizedParameters);
       finishSynthesizedParameters(forOutline: true);
+
+      benchmarker?.enterPhase(BenchmarkPhases.outline_checkMainMethods);
       loader.checkMainMethods();
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.outline_installAllComponentProblems);
       installAllComponentProblems(loader.allComponentProblems);
       loader.allComponentProblems.clear();
+
+      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+
       // For whatever reason sourceClassBuilders is kept alive for some amount
       // of time, meaning that all source library builders will be kept alive
       // (for whatever amount of time) even though we convert them to dill
       // library builders. To avoid it we null it out here.
       sourceClassBuilders = null;
+
       return new BuildResult(
           component: component, macroApplications: macroApplications);
     }, () => loader.currentUriForCrashReporting);
@@ -468,23 +637,60 @@
     }
     return withCrashReporting<BuildResult>(() async {
       ticker.logMs("Building component");
-      await loader.buildBodies();
-      finishSynthesizedParameters();
-      loader.finishDeferredLoadTearoffs();
-      loader.finishNoSuchMethodForwarders();
-      List<SourceClassBuilder>? sourceClasses = loader.collectSourceClasses();
+
       if (macroApplications != null) {
-        await macroApplications.applyDefinitionMacros(
-            loader.coreTypes, loader.hierarchy);
+        benchmarker?.enterPhase(BenchmarkPhases.body_applyDefinitionMacros);
+        List<SourceLibraryBuilder> augmentationLibraries =
+            await macroApplications.applyDefinitionMacros();
+        benchmarker
+            ?.enterPhase(BenchmarkPhases.body_buildMacroDefinitionsForPhase1);
+        await _buildForPhase1(augmentationLibraries);
+        benchmarker
+            ?.enterPhase(BenchmarkPhases.body_buildMacroDefinitionsForPhase2);
+        _buildForPhase2(augmentationLibraries);
+        benchmarker
+            ?.enterPhase(BenchmarkPhases.body_buildMacroDefinitionsForPhase3);
+        _buildForPhase3(augmentationLibraries);
       }
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_buildBodies);
+      await loader.buildBodies(loader.sourceLibraryBuilders);
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_finishSynthesizedParameters);
+      finishSynthesizedParameters();
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_finishDeferredLoadTearoffs);
+      loader.finishDeferredLoadTearoffs();
+
+      benchmarker
+          ?.enterPhase(BenchmarkPhases.body_finishNoSuchMethodForwarders);
+      loader.finishNoSuchMethodForwarders();
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_collectSourceClasses);
+      List<SourceClassBuilder>? sourceClasses = loader.collectSourceClasses();
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_finishNativeMethods);
       loader.finishNativeMethods();
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_finishPatchMethods);
       loader.finishPatchMethods();
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_finishAllConstructors);
       finishAllConstructors(sourceClasses);
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_runBuildTransformations);
       runBuildTransformations();
 
-      if (verify) this.verify();
+      if (verify) {
+        benchmarker?.enterPhase(BenchmarkPhases.body_verify);
+        this.verify();
+      }
+
+      benchmarker?.enterPhase(BenchmarkPhases.body_installAllComponentProblems);
       installAllComponentProblems(loader.allComponentProblems);
 
+      benchmarker?.enterPhase(BenchmarkPhases.unknown);
+
       // For whatever reason sourceClasses is kept alive for some amount
       // of time, meaning that all source library builders will be kept alive
       // (for whatever amount of time) even though we convert them to dill
@@ -798,8 +1004,7 @@
         }
       }
 
-      superclassBuilder.forEachConstructor(addSyntheticConstructor,
-          includeInjectedConstructors: true);
+      superclassBuilder.forEachConstructor(addSyntheticConstructor);
 
       if (!isConstructorAdded) {
         builder.addSyntheticConstructor(_makeDefaultConstructor(
@@ -881,7 +1086,8 @@
         superConstructor, new Arguments(positional, named: named));
     SynthesizedFunctionNode synthesizedFunctionNode =
         new SynthesizedFunctionNode(
-            substitutionMap, superConstructor.function, function);
+            substitutionMap, superConstructor.function, function,
+            libraryBuilder: classBuilder.library);
     if (!isConst) {
       // For constant constructors default values are computed and cloned part
       // of the outline expression and therefore passed to the
@@ -939,7 +1145,7 @@
     for (SynthesizedFunctionNode synthesizedFunctionNode
         in synthesizedFunctionNodes) {
       if (!forOutline || synthesizedFunctionNode.isOutlineNode) {
-        synthesizedFunctionNode.cloneDefaultValues();
+        synthesizedFunctionNode.cloneDefaultValues(loader.typeEnvironment);
       }
     }
     if (!forOutline) {
@@ -1117,7 +1323,7 @@
           patchConstructorNames.add(name);
         }
       });
-      builder.constructors.forEach((String name, Builder builder) {
+      builder.constructorScope.forEach((String name, Builder builder) {
         if (builder is ConstructorBuilder) {
           patchConstructorNames.remove(name);
         }
@@ -1521,7 +1727,7 @@
   }
 
   void readPatchFiles(SourceLibraryBuilder library) {
-    assert(library.importUri.scheme == "dart");
+    assert(library.importUri.isScheme("dart"));
     List<Uri>? patches = uriTranslator.getDartPatches(library.importUri.path);
     if (patches != null) {
       SourceLibraryBuilder? first;
@@ -1587,7 +1793,9 @@
 
 class BuildResult {
   final Component? component;
+  final NeededPrecompilations? neededPrecompilations;
   final MacroApplications? macroApplications;
 
-  BuildResult({this.component, this.macroApplications});
+  BuildResult(
+      {this.component, this.macroApplications, this.neededPrecompilations});
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro.dart
index a637145..0b2bb54 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro.dart
@@ -2,35 +2,47 @@
 // for 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: Only import `Identifier` under a prefix if/when the presubmit check
-// allows duplicate imports if they have different prefixes.
 import 'package:_fe_analyzer_shared/src/macros/api.dart' as macro;
-import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
-import 'package:_fe_analyzer_shared/src/macros/executor_shared/remote_instance.dart';
-import 'package:kernel/ast.dart' show DartType, DynamicType;
-import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/core_types.dart';
-import 'package:kernel/type_environment.dart';
+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 IdentifierImpl dynamicIdentifier =
-    new IdentifierImpl(id: RemoteInstance.uniqueId, name: 'dynamic');
+final macro.IdentifierImpl dynamicIdentifier = new macro.IdentifierImpl(
+    id: macro.RemoteInstance.uniqueId, name: 'dynamic');
 
 class MacroDeclarationData {
   bool macrosAreAvailable = false;
@@ -65,14 +77,30 @@
 
   MacroApplication(this.classBuilder, this.constructorName);
 
-  late MacroInstanceIdentifier instanceIdentifier;
+  late macro.MacroInstanceIdentifier instanceIdentifier;
+
+  @override
+  String toString() {
+    return '${classBuilder.name}.'
+        '${constructorName.isEmpty ? 'new' : constructorName}()';
+  }
 }
 
 class MacroApplicationDataForTesting {
   Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData = {};
-  Map<MemberBuilder, List<MacroExecutionResult>> memberTypesResults = {};
-  Map<MemberBuilder, List<MacroExecutionResult>> memberDeclarationsResults = {};
-  Map<MemberBuilder, List<MacroExecutionResult>> memberDefinitionsResults = {};
+  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 {
@@ -85,10 +113,21 @@
   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 MacroExecutor _macroExecutor;
+  final macro.MacroExecutor _macroExecutor;
   final Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData;
   final MacroApplicationDataForTesting? dataForTesting;
+  List<_ApplicationData>? _applicationDataCache;
 
   MacroApplications(
       this._macroExecutor, this.libraryData, this.dataForTesting) {
@@ -96,13 +135,13 @@
   }
 
   static Future<MacroApplications> loadMacroIds(
-      MacroExecutor macroExecutor,
+      macro.MacroExecutor macroExecutor,
       Map<MacroClass, Uri> precompiledMacroUris,
       Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData,
       MacroApplicationDataForTesting? dataForTesting) async {
-    Map<ClassBuilder, MacroClassIdentifier> classIdCache = {};
+    Map<ClassBuilder, macro.MacroClassIdentifier> classIdCache = {};
 
-    Map<MacroApplication, MacroInstanceIdentifier> instanceIdCache = {};
+    Map<MacroApplication, macro.MacroInstanceIdentifier> instanceIdCache = {};
 
     Future<void> ensureMacroClassIds(
         List<MacroApplication>? applications) async {
@@ -112,16 +151,26 @@
               application.classBuilder.library.importUri,
               application.classBuilder.name);
           Uri? precompiledMacroUri = precompiledMacroUris[macroClass];
-          MacroClassIdentifier macroClassIdentifier =
-              classIdCache[application.classBuilder] ??= await macroExecutor
-                  .loadMacro(macroClass.importUri, macroClass.className,
-                      precompiledKernelUri: precompiledMacroUri);
-          application.instanceIdentifier = instanceIdCache[application] =
-              await macroExecutor.instantiateMacro(
-                  macroClassIdentifier,
-                  application.constructorName,
-                  // TODO(johnniwinther): Support macro arguments.
-                  new Arguments([], {}));
+          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";
+          }
         }
       }
     }
@@ -143,6 +192,8 @@
     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.
@@ -151,277 +202,653 @@
         _createMemberDeclaration(memberBuilder);
   }
 
-  macro.Declaration? _createMemberDeclaration(MemberBuilder 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 createTopLevelFunctionDeclaration(memberBuilder);
+      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}');
-      return null;
+      throw new UnimplementedError(
+          'Unsupported member ${memberBuilder} (${memberBuilder.runtimeType})');
     }
   }
 
-  Future<List<MacroExecutionResult>> _applyTypeMacros(
-      macro.Declaration declaration,
-      List<MacroApplication> macroApplications) async {
-    List<MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication in macroApplications) {
-      if (macroApplication.instanceIdentifier.shouldExecute(
-          // TODO(johnniwinther): Get the declaration kind from [declaration].
-          DeclarationKind.function,
-          Phase.types)) {
-        MacroExecutionResult result = await _macroExecutor.executeTypesPhase(
-            macroApplication.instanceIdentifier, declaration);
-        results.add(result);
+  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;
   }
 
-  Future<void> applyTypeMacros() async {
-    for (MapEntry<SourceLibraryBuilder,
-        LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
-      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) {
-          List<MacroExecutionResult> results =
-              await _applyTypeMacros(declaration, memberEntry.value);
-          dataForTesting?.memberTypesResults[memberBuilder] = 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<List<MacroExecutionResult>> _applyDeclarationMacros(
-      macro.Declaration declaration,
-      List<MacroApplication> macroApplications,
-      macro.TypeResolver typeResolver,
-      macro.ClassIntrospector classIntrospector) async {
-    List<MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication in macroApplications) {
+  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(
-          // TODO(johnniwinther): Get the declaration kind from [declaration].
-          DeclarationKind.function,
-          Phase.declarations)) {
-        MacroExecutionResult result =
+          _declarationKind(declaration), macro.Phase.declarations)) {
+        macro.MacroExecutionResult result =
             await _macroExecutor.executeDeclarationsPhase(
                 macroApplication.instanceIdentifier,
                 declaration,
+                identifierResolver,
                 typeResolver,
                 classIntrospector);
-        results.add(result);
-      }
-    }
-    return results;
-  }
-
-  Future<void> applyDeclarationMacros() async {
-    macro.TypeResolver typeResolver = new _TypeResolver(this);
-    macro.ClassIntrospector classIntrospector = new _ClassIntrospector();
-    for (MapEntry<SourceLibraryBuilder,
-        LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
-      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) {
-          List<MacroExecutionResult> results = await _applyDeclarationMacros(
-              declaration, memberEntry.value, typeResolver, classIntrospector);
-          dataForTesting?.memberDeclarationsResults[memberBuilder] = results;
+        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;
+      }
+    }
   }
 
-  Future<List<MacroExecutionResult>> _applyDefinitionMacros(
-      macro.Declaration declaration,
-      List<MacroApplication> macroApplications,
-      macro.TypeResolver typeResolver,
-      macro.ClassIntrospector classIntrospector,
-      macro.TypeDeclarationResolver typeDeclarationResolver) async {
-    List<MacroExecutionResult> results = [];
-    for (MacroApplication macroApplication in macroApplications) {
+  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(
-          // TODO(johnniwinther): Get the declaration kind from [declaration].
-          DeclarationKind.function,
-          Phase.definitions)) {
-        MacroExecutionResult result =
+          _declarationKind(declaration), macro.Phase.definitions)) {
+        macro.MacroExecutionResult result =
             await _macroExecutor.executeDefinitionsPhase(
                 macroApplication.instanceIdentifier,
                 declaration,
+                identifierResolver,
                 typeResolver,
                 classIntrospector,
                 typeDeclarationResolver);
-        results.add(result);
+        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 TypeEnvironment typeEnvironment;
+  late macro.TypeDeclarationResolver typeDeclarationResolver;
 
-  Future<void> applyDefinitionMacros(
-      CoreTypes coreTypes, ClassHierarchy classHierarchy) async {
-    typeEnvironment = new TypeEnvironment(coreTypes, classHierarchy);
-    macro.TypeResolver typeResolver = new _TypeResolver(this);
-    macro.ClassIntrospector classIntrospector = new _ClassIntrospector();
-    macro.TypeDeclarationResolver typeDeclarationResolver =
-        new _TypeDeclarationResolver();
-    for (MapEntry<SourceLibraryBuilder,
-        LibraryMacroApplicationData> libraryEntry in libraryData.entries) {
-      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) {
-          List<MacroExecutionResult> results = await _applyDefinitionMacros(
-              declaration,
-              memberEntry.value,
-              typeResolver,
-              classIntrospector,
-              typeDeclarationResolver);
-          dataForTesting?.memberDefinitionsResults[memberBuilder] = results;
-        }
+  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.FunctionDeclaration createTopLevelFunctionDeclaration(
-      SourceProcedureBuilder builder) {
-    List<ParameterDeclarationImpl>? positionalParameters;
-    List<ParameterDeclarationImpl>? namedParameters;
+  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<FormalParameterBuilder>? formals = builder.formals;
+  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) {
-        TypeAnnotationImpl type =
+        macro.TypeAnnotationImpl type =
             computeTypeAnnotation(builder.library, formal.type);
-        // TODO(johnniwinther): Support default values.
+        macro.IdentifierImpl identifier =
+            new _IdentifierImpl.forParameterBuilder(
+                id: macro.RemoteInstance.uniqueId,
+                name: formal.name,
+                parameterBuilder: formal,
+                libraryBuilder: builder.library);
         if (formal.isNamed) {
-          namedParameters.add(new ParameterDeclarationImpl(
-              id: RemoteInstance.uniqueId,
-              identifier: new IdentifierImpl(
-                  id: RemoteInstance.uniqueId, name: formal.name),
-              isRequired: formal.isNamedRequired,
-              isNamed: true,
-              type: type,
-              defaultValue: null));
+          namedParameters.add(new macro.ParameterDeclarationImpl(
+            id: macro.RemoteInstance.uniqueId,
+            identifier: identifier,
+            isRequired: formal.isNamedRequired,
+            isNamed: true,
+            type: type,
+          ));
         } else {
-          positionalParameters.add(new ParameterDeclarationImpl(
-              id: RemoteInstance.uniqueId,
-              identifier: new IdentifierImpl(
-                  id: RemoteInstance.uniqueId, name: formal.name),
-              isRequired: formal.isRequired,
-              isNamed: false,
-              type: type,
-              defaultValue: null));
+          positionalParameters.add(new macro.ParameterDeclarationImpl(
+            id: macro.RemoteInstance.uniqueId,
+            identifier: identifier,
+            isRequired: formal.isRequired,
+            isNamed: false,
+            type: type,
+          ));
         }
       }
     }
-
-    return new FunctionDeclarationImpl(
-        id: RemoteInstance.uniqueId,
-        identifier:
-            new IdentifierImpl(id: RemoteInstance.uniqueId, name: builder.name),
-        isAbstract: builder.isAbstract,
-        isExternal: builder.isExternal,
-        isGetter: builder.isGetter,
-        isSetter: builder.isSetter,
-        positionalParameters: positionalParameters,
-        namedParameters: namedParameters,
-        returnType: computeTypeAnnotation(builder.library, builder.returnType),
-        // TODO(johnniwinther): Support typeParameters
-        typeParameters: const []);
+    return [positionalParameters, namedParameters];
   }
 
-  Map<TypeBuilder?, _NamedTypeAnnotationImpl> _typeAnnotationCache = {};
+  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 [],
+    );
+  }
 
-  List<TypeAnnotationImpl> computeTypeAnnotations(
+  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]));
   }
 
-  _NamedTypeAnnotationImpl _computeTypeAnnotation(
+  macro.TypeAnnotationImpl _computeTypeAnnotation(
       LibraryBuilder libraryBuilder, TypeBuilder? typeBuilder) {
     if (typeBuilder != null) {
       if (typeBuilder is NamedTypeBuilder) {
         Object name = typeBuilder.name;
-        List<TypeAnnotationImpl> typeArguments =
+        List<macro.TypeAnnotationImpl> typeArguments =
             computeTypeAnnotations(libraryBuilder, typeBuilder.arguments);
         bool isNullable = typeBuilder.nullabilityBuilder.isNullable;
         if (name is String) {
-          return new _NamedTypeAnnotationImpl(
-              typeBuilder: typeBuilder,
-              libraryBuilder: libraryBuilder,
-              id: RemoteInstance.uniqueId,
-              identifier:
-                  new IdentifierImpl(id: RemoteInstance.uniqueId, name: name),
+          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 _NamedTypeAnnotationImpl(
-              typeBuilder: typeBuilder,
-              libraryBuilder: libraryBuilder,
-              id: RemoteInstance.uniqueId,
-              identifier: new IdentifierImpl(
-                  id: RemoteInstance.uniqueId,
-                  // TODO: We probably shouldn't be including the qualifier
-                  // here. Kernel should probably have its own implementation
-                  // of Identifier which holds on to the qualified reference
-                  // instead.
-                  name: '${name.qualifier}.${name.name}'),
+          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 _NamedTypeAnnotationImpl(
-        typeBuilder: typeBuilder,
-        libraryBuilder: libraryBuilder,
-        id: RemoteInstance.uniqueId,
+    return new macro.NamedTypeAnnotationImpl(
+        id: macro.RemoteInstance.uniqueId,
         identifier: dynamicIdentifier,
         isNullable: false,
         typeArguments: const []);
   }
 
-  TypeAnnotationImpl computeTypeAnnotation(
+  macro.TypeAnnotationImpl computeTypeAnnotation(
       LibraryBuilder libraryBuilder, TypeBuilder? typeBuilder) {
     return _typeAnnotationCache[typeBuilder] ??=
         _computeTypeAnnotation(libraryBuilder, typeBuilder);
   }
 
-  macro.StaticType resolveTypeAnnotation(
-      _NamedTypeAnnotationImpl typeAnnotation) {
-    TypeBuilder? typeBuilder = typeAnnotation.typeBuilder;
-    LibraryBuilder libraryBuilder = typeAnnotation.libraryBuilder;
-    DartType dartType;
-    if (typeBuilder != null) {
-      dartType = typeBuilder.build(libraryBuilder);
+  TypeBuilder _typeBuilderForAnnotation(
+      macro.TypeAnnotationCode typeAnnotation) {
+    NullabilityBuilder nullabilityBuilder;
+    if (typeAnnotation is macro.NullableTypeAnnotationCode) {
+      nullabilityBuilder = const NullabilityBuilder.nullable();
+      typeAnnotation = typeAnnotation.underlyingType;
     } else {
-      dartType = const DynamicType();
+      nullabilityBuilder = const NullabilityBuilder.omitted();
     }
-    return createStaticType(dartType);
+
+    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 = {};
@@ -431,22 +858,52 @@
   }
 }
 
-class _NamedTypeAnnotationImpl extends NamedTypeAnnotationImpl {
+class _IdentifierImpl extends macro.IdentifierImpl {
+  final TypeDeclarationBuilder? typeDeclarationBuilder;
+  final MemberBuilder? memberBuilder;
   final TypeBuilder? typeBuilder;
   final LibraryBuilder libraryBuilder;
+  final FormalParameterBuilder? parameterBuilder;
 
-  _NamedTypeAnnotationImpl({
-    required this.typeBuilder,
+  _IdentifierImpl.forTypeBuilder({
+    required TypeBuilder this.typeBuilder,
     required this.libraryBuilder,
     required int id,
-    required bool isNullable,
-    required IdentifierImpl identifier,
-    required List<TypeAnnotationImpl> typeArguments,
-  }) : super(
-            id: id,
-            isNullable: isNullable,
-            identifier: identifier,
-            typeArguments: typeArguments);
+    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 {
@@ -462,42 +919,106 @@
 
   @override
   Future<bool> isSubtypeOf(covariant _StaticTypeImpl other) {
-    return new Future.value(macroApplications.typeEnvironment
+    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> instantiateCode(macro.ExpressionCode code) {
-    // TODO: implement instantiateCode
-    throw new UnimplementedError();
-  }
-
-  @override
-  Future<macro.StaticType> instantiateType(
-      covariant _NamedTypeAnnotationImpl typeAnnotation) {
+  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) {
-    // TODO: implement constructorsOf
-    throw new UnimplementedError('_ClassIntrospector.constructorsOf');
+    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) {
-    // TODO: implement fieldsOf
-    throw new UnimplementedError('_ClassIntrospector.fieldsOf');
+    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
@@ -510,8 +1031,15 @@
   @override
   Future<List<macro.MethodDeclaration>> methodsOf(
       macro.ClassDeclaration clazz) {
-    // TODO: implement methodsOf
-    throw new UnimplementedError('_ClassIntrospector.methodsOf');
+    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
@@ -522,8 +1050,19 @@
 
   @override
   Future<macro.ClassDeclaration?> superclassOf(macro.ClassDeclaration clazz) {
-    // TODO: implement superclassOf
-    throw new UnimplementedError('_ClassIntrospector.superclassOf');
+    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();
   }
 }
 
@@ -534,3 +1073,37 @@
     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
index 02b0dc4..aeed256 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro_annotation_parser.dart
@@ -321,8 +321,8 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     _unexpected();
   }
 
@@ -426,6 +426,7 @@
   void beginFields(
       DeclarationKind declarationKind,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -579,6 +580,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -589,7 +591,8 @@
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
     _unexpected();
   }
 
@@ -599,8 +602,8 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     _unexpected();
   }
 
@@ -670,7 +673,8 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
     _unexpected();
   }
 
@@ -802,6 +806,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -902,6 +907,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -945,6 +951,7 @@
   @override
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1072,7 +1079,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     _unexpected();
   }
 
@@ -1163,6 +1170,7 @@
   @override
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
index 79badb9..ec26f2a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -66,7 +66,7 @@
   static bool isObject(DartType type) {
     if (type is InterfaceType && type.classNode.name == 'Object') {
       Uri importUri = type.classNode.enclosingLibrary.importUri;
-      return importUri.scheme == 'dart' && importUri.path == 'core';
+      return importUri.isScheme('dart') && importUri.path == 'core';
     }
     return false;
   }
@@ -504,7 +504,7 @@
   }
 
   String get originMessage {
-    if (importUri.scheme == 'dart' && importUri.path == 'core') {
+    if (importUri.isScheme('dart') && importUri.path == 'core') {
       if (node is Class && denylistedCoreClasses.contains(name)) {
         // Denylisted core class. Only print if ambiguous.
         List<LabeledNode> entityForName = typeLabeler.nameMap[name]!;
@@ -521,7 +521,7 @@
         return "";
       }
     }
-    Message message = (importUri == fileUri || importUri.scheme == 'dart')
+    Message message = (importUri == fileUri || importUri.isScheme('dart'))
         ? templateTypeOrigin.withArguments(toString(), importUri)
         : templateTypeOriginWithFileUri.withArguments(
             toString(), importUri, fileUri);
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index ae560e2..3c825f6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -241,7 +241,7 @@
     // 'dart:test' is used in the unit tests and isn't an actual part of the
     // platform.
     if (skipPlatform &&
-        node.importUri.scheme == 'dart' &&
+        node.importUri.isScheme('dart') &&
         node.importUri.path != 'test') {
       return;
     }
@@ -304,7 +304,7 @@
 
   bool isObjectClass(Class c) {
     return c.name == "Object" &&
-        c.enclosingLibrary.importUri.scheme == "dart" &&
+        c.enclosingLibrary.importUri.isScheme("dart") &&
         c.enclosingLibrary.importUri.path == "core";
   }
 
@@ -435,7 +435,7 @@
   }
 
   void _checkConstructorTearOff(Node node, Member tearOffTarget) {
-    if (tearOffTarget.enclosingLibrary.importUri.scheme == 'dart') {
+    if (tearOffTarget.enclosingLibrary.importUri.isScheme('dart')) {
       // Platform libraries are not compilation with test flags and might
       // contain tear-offs not expected when testing lowerings.
       return;
@@ -540,7 +540,7 @@
     // 'dart:test' is used in the unit tests and isn't an actual part of the
     // platform.
     if (skipPlatform &&
-        node.importUri.scheme == 'dart' &&
+        node.importUri.isScheme('dart') &&
         node.importUri.path != "test") {
       return;
     }
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 1d0b3f7..80d44c9 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -8,6 +8,7 @@
 
 enum ModifierEnum {
   Abstract,
+  Augment,
   Const,
   Covariant,
   External,
@@ -20,7 +21,9 @@
 
 const int abstractMask = 1;
 
-const int constMask = abstractMask << 1;
+const int augmentMask = abstractMask << 1;
+
+const int constMask = augmentMask << 1;
 
 const int covariantMask = constMask << 1;
 
@@ -60,6 +63,8 @@
 
 const Modifier Abstract = const Modifier(ModifierEnum.Abstract, abstractMask);
 
+const Modifier Augment = const Modifier(ModifierEnum.Augment, augmentMask);
+
 const Modifier Const = const Modifier(ModifierEnum.Const, constMask);
 
 const Modifier Covariant =
@@ -83,6 +88,7 @@
 
   factory Modifier.fromString(String string) {
     if (identical('abstract', string)) return Abstract;
+    if (identical('augment', string)) return Augment;
     if (identical('const', string)) return Const;
     if (identical('covariant', string)) return Covariant;
     if (identical('external', string)) return External;
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index 2ccd860..300080b 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -6,8 +6,10 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/type_environment.dart';
 
 import 'builder/builder.dart';
+import 'builder/class_builder.dart';
 import 'builder/extension_builder.dart';
 import 'builder/library_builder.dart';
 import 'builder/member_builder.dart';
@@ -25,6 +27,7 @@
 import 'kernel/hierarchy/class_member.dart' show ClassMember;
 import 'kernel/kernel_helper.dart';
 import 'problems.dart' show internalProblem, unsupported;
+import 'source/source_class_builder.dart';
 import 'source/source_library_builder.dart';
 import 'source/source_member_builder.dart';
 import 'util/helpers.dart' show DelayedActionPerformer;
@@ -466,7 +469,7 @@
     return forwardDeclaredLabels;
   }
 
-  Builder? lookupLabel(String name) {
+  JumpTarget? lookupLabel(String name) {
     return labels?[name] ?? _parent?.lookupLabel(name);
   }
 
@@ -612,6 +615,14 @@
     }
   }
 
+  MemberBuilder? lookupLocalMember(String name) {
+    return local[name];
+  }
+
+  void addLocalMember(String name, MemberBuilder builder) {
+    local[name] = builder;
+  }
+
   @override
   String toString() => "ConstructorScope($className, ${local.keys})";
 }
@@ -648,38 +659,6 @@
   }
 }
 
-class ScopeBuilder {
-  final Scope scope;
-
-  ScopeBuilder(this.scope);
-
-  void addMember(String name, Builder builder) {
-    scope._local[name] = builder;
-  }
-
-  void addSetter(String name, MemberBuilder builder) {
-    scope._setters[name] = builder;
-  }
-
-  void addExtension(ExtensionBuilder builder) {
-    scope.addExtension(builder);
-  }
-
-  Builder? operator [](String name) => scope._local[name];
-}
-
-class ConstructorScopeBuilder {
-  final ConstructorScope scope;
-
-  ConstructorScopeBuilder(this.scope);
-
-  void addMember(String name, MemberBuilder builder) {
-    scope.local[name] = builder;
-  }
-
-  MemberBuilder? operator [](String name) => scope.local[name];
-}
-
 abstract class ProblemBuilder extends BuilderImpl {
   final String name;
 
@@ -807,13 +786,27 @@
   bool get isConflictingSetter => false;
 
   @override
+  bool get isConflictingAugmentationMember => false;
+
+  @override
+  void set isConflictingAugmentationMember(bool value) {
+    throw new UnsupportedError(
+        'AmbiguousMemberBuilder.isConflictingAugmentationMember=');
+  }
+
+  @override
   void set parent(Builder? value) {
     throw new UnsupportedError('AmbiguousMemberBuilder.parent=');
   }
 
   @override
+  ClassBuilder get classBuilder {
+    throw new UnsupportedError('AmbiguousMemberBuilder.classBuilder');
+  }
+
+  @override
   LibraryBuilder get library {
-    throw new UnsupportedError('AmbiguousMemberBuilder.parent=');
+    throw new UnsupportedError('AmbiguousMemberBuilder.library');
   }
 
   // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface.
@@ -841,6 +834,23 @@
 
   @override
   List<ClassMember> get localSetters => const <ClassMember>[];
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
+    assert(false, "Unexpected call to $runtimeType.checkVariance.");
+  }
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    assert(false, "Unexpected call to $runtimeType.checkVariance.");
+  }
+
+  @override
+  bool get isAugmentation {
+    throw new UnsupportedError('AmbiguousMemberBuilder.isAugmentation');
+  }
 }
 
 class AmbiguousMemberBuilder extends AmbiguousBuilder
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 143fcb8..86e5832 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -332,6 +332,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -520,7 +521,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     debugEvent("Import");
     Object? name = pop(NullValue.Prefix);
 
@@ -530,7 +531,7 @@
 
     // Native imports must be skipped because they aren't assigned corresponding
     // LibraryDependency nodes.
-    Token importUriToken = importKeyword.next!;
+    Token importUriToken = augmentToken?.next ?? importKeyword.next!;
     String importUri =
         unescapeString(importUriToken.lexeme, importUriToken, this);
     if (importUri.startsWith("dart-ext:")) return;
@@ -722,8 +723,18 @@
       builder =
           lookupConstructor(beginToken, name!) as SourceFunctionBuilderImpl;
     } else {
-      builder = lookupBuilder(beginToken, getOrSet, name as String)
-          as SourceFunctionBuilderImpl;
+      Builder? memberBuilder =
+          lookupBuilder(beginToken, getOrSet, name as String);
+      if (currentClass?.isEnum == true &&
+          memberBuilder is SourceFieldBuilder &&
+          memberBuilder.name == "values") {
+        // This is the case of a method with the name 'values' declared in an
+        // Enum. In that case the method is replaced with the synthesized field
+        // in the outline building phase, and the error is reported there. At
+        // this point we skip the member.
+        return;
+      }
+      builder = memberBuilder as SourceFunctionBuilderImpl;
     }
     buildFunctionBody(
         createFunctionListener(builder),
@@ -906,8 +917,8 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     debugEvent("beginClassDeclaration");
     push(begin);
   }
@@ -919,7 +930,8 @@
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
     debugEvent("beginMixinDeclaration");
     push(mixinKeyword);
   }
@@ -1022,6 +1034,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1118,7 +1131,7 @@
     } else if (getOrSet != null && optional("set", getOrSet)) {
       declaration = libraryBuilder.scope.lookupLocalMember(name, setter: true);
     } else {
-      declaration = libraryBuilder.scopeBuilder[name];
+      declaration = libraryBuilder.scope.lookupLocalMember(name, setter: false);
     }
     declaration = handleDuplicatedName(declaration, token);
     checkBuilder(token, declaration, name);
@@ -1139,7 +1152,7 @@
     if (libraryBuilder.enableConstructorTearOffsInLibrary) {
       suffix = suffix == "new" ? "" : suffix;
     }
-    declaration = currentClass!.constructors.local[suffix];
+    declaration = currentClass!.constructorScope.local[suffix];
     declaration = handleDuplicatedName(declaration, token);
     checkBuilder(token, declaration, nameOrQualified);
     return declaration;
diff --git a/pkg/front_end/lib/src/fasta/source/directive_listener.dart b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
index ef44416..8e7fb53 100644
--- a/pkg/front_end/lib/src/fasta/source/directive_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/directive_listener.dart
@@ -82,7 +82,7 @@
   }
 
   @override
-  void endImport(Token? import, Token? semicolon) {
+  void endImport(Token? import, Token? augmentToken, Token? semicolon) {
     imports.add(new NamespaceDirective.import(_uri, _combinators));
     _uri = null;
     _combinators = null;
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 47620d5..146909d 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -43,6 +43,7 @@
 import '../kernel/utils.dart';
 import '../modifier.dart'
     show
+        Augment,
         Const,
         Covariant,
         External,
@@ -51,6 +52,7 @@
         Static,
         Var,
         abstractMask,
+        augmentMask,
         constMask,
         covariantMask,
         externalMask,
@@ -527,7 +529,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     debugEvent("EndImport");
     List<CombinatorBuilder>? combinators = pop() as List<CombinatorBuilder>?;
     bool isDeferred = pop() as bool;
@@ -540,17 +542,33 @@
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     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);
+        augmentToken = null;
+      }
+    }
+    bool isAugmentationImport = augmentToken != null;
     libraryBuilder.addImport(
-        metadata,
-        uri,
-        configurations,
-        prefix as String?,
-        combinators,
-        isDeferred,
-        importKeyword.charOffset,
-        prefixOffset,
-        uriOffset,
-        importIndex++);
+        metadata: metadata,
+        isAugmentationImport: isAugmentationImport,
+        uri: uri,
+        configurations: configurations,
+        prefix: prefix as String?,
+        combinators: combinators,
+        deferred: isDeferred,
+        charOffset: importKeyword.charOffset,
+        prefixCharOffset: prefixOffset,
+        uriOffset: uriOffset,
+        importIndex: importIndex++);
   }
 
   @override
@@ -795,8 +813,8 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     debugEvent("beginClassDeclaration");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
@@ -809,28 +827,33 @@
     libraryBuilder.setCurrentClassName(name.lexeme);
     inAbstractClass = abstractToken != null;
     push(abstractToken != null ? abstractMask : 0);
-    if (macroToken != null && !libraryBuilder.enableMacrosInLibrary) {
-      // 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);
-      macroToken = null;
+    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);
+        macroToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
     debugEvent("beginMixinDeclaration");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
     pushDeclarationContext(DeclarationContext.Mixin);
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
+    push(augmentToken ?? NullValue.Token);
     push(typeVariables ?? NullValue.TypeVariables);
     libraryBuilder.currentTypeParameterScopeBuilder
         .markAsMixinDeclaration(name.lexeme, name.charOffset, typeVariables);
@@ -892,8 +915,8 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     debugEvent("beginNamedMixinApplication");
     popDeclarationContext(
         DeclarationContext.ClassOrMixinOrNamedMixinApplication);
@@ -904,15 +927,18 @@
     libraryBuilder.currentTypeParameterScopeBuilder.markAsNamedMixinApplication(
         name.lexeme, name.charOffset, typeVariables);
     push(abstractToken != null ? abstractMask : 0);
-    if (macroToken != null && !libraryBuilder.enableMacrosInLibrary) {
-      addProblem(
-          templateExperimentNotEnabled.withArguments(
-              'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
-          macroToken.next!.charOffset,
-          macroToken.next!.length);
-      macroToken = null;
+    if (!libraryBuilder.enableMacrosInLibrary) {
+      if (macroToken != null) {
+        addProblem(
+            templateExperimentNotEnabled.withArguments(
+                'macros', libraryBuilder.enableMacrosVersionInLibrary.toText()),
+            macroToken.next!.charOffset,
+            macroToken.next!.length);
+        macroToken = null;
+      }
     }
     push(macroToken ?? NullValue.Token);
+    push(augmentToken ?? NullValue.Token);
   }
 
   @override
@@ -1052,6 +1078,7 @@
         ValueKinds.TypeBuilderOrNull,
         ValueKinds.ParserRecovery,
       ]),
+      /* augment token */ ValueKinds.TokenOrNull,
       /* macro token */ ValueKinds.TokenOrNull,
       /* modifiers */ ValueKinds.Integer,
       /* type variables */ ValueKinds.TypeVariableListOrNull,
@@ -1064,6 +1091,7 @@
         pop(NullValue.TypeBuilderList) as List<TypeBuilder>?;
     int supertypeOffset = popCharOffset();
     TypeBuilder? supertype = nullIfParserRecovery(pop()) as TypeBuilder?;
+    Token? augmentToken = pop(NullValue.Token) as Token?;
     Token? macroToken = pop(NullValue.Token) as Token?;
     int modifiers = pop() as int;
     List<TypeVariableBuilder>? typeVariables =
@@ -1142,7 +1170,8 @@
           nameOffset,
           endToken.charOffset,
           supertypeOffset,
-          isMacro: macroToken != null);
+          isMacro: macroToken != null,
+          isAugmentation: augmentToken != null);
     }
     libraryBuilder.setCurrentClassName(null);
     popDeclarationContext(DeclarationContext.Class);
@@ -1155,12 +1184,26 @@
   @override
   void endMixinDeclaration(Token mixinToken, Token endToken) {
     debugEvent("endMixinDeclaration");
+    assert(checkState(mixinToken, [
+      /* interfaces */ ValueKinds.TypeBuilderListOrNull,
+      /* supertypeConstraints */ unionOfKinds([
+        ValueKinds.TypeBuilderListOrNull,
+        ValueKinds.ParserRecovery,
+      ]),
+      /* type variables */ ValueKinds.TypeVariableListOrNull,
+      /* augment token */ ValueKinds.TokenOrNull,
+      /* name offset */ ValueKinds.Integer,
+      /* name */ ValueKinds.NameOrParserRecovery,
+      /* metadata */ ValueKinds.MetadataListOrNull,
+    ]));
+
     List<TypeBuilder>? interfaces =
         pop(NullValue.TypeBuilderList) as List<TypeBuilder>?;
     List<TypeBuilder>? supertypeConstraints =
         nullIfParserRecovery(pop()) as List<TypeBuilder>?;
     List<TypeVariableBuilder>? typeVariables =
         pop(NullValue.TypeVariables) as List<TypeVariableBuilder>?;
+    Token? augmentToken = pop(NullValue.Token) as Token?;
     int nameOffset = popCharOffset();
     Object? name = pop();
     List<MetadataBuilder>? metadata =
@@ -1227,7 +1270,8 @@
           startOffset,
           nameOffset,
           endToken.charOffset,
-          -1);
+          -1,
+          isAugmentation: augmentToken != null);
     }
     libraryBuilder.setCurrentClassName(null);
     popDeclarationContext(DeclarationContext.Mixin);
@@ -1367,12 +1411,20 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
     pushDeclarationContext(DeclarationContext.TopLevelMethod);
     libraryBuilder.beginNestedDeclaration(
         TypeParameterScopeKind.topLevelMethod, "#method",
         hasMembers: false);
-    push(externalToken != null ? externalMask : 0);
+    int modifiers = 0;
+    if (augmentToken != null) {
+      modifiers |= augmentMask;
+    }
+    if (externalToken != null) {
+      modifiers |= externalMask;
+    }
+    push(modifiers);
   }
 
   @override
@@ -1478,6 +1530,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1535,6 +1588,10 @@
     pushDeclarationContext(declarationContext);
 
     List<Modifier>? modifiers;
+    if (augmentToken != null) {
+      modifiers ??= <Modifier>[];
+      modifiers.add(Augment);
+    }
     if (externalToken != null) {
       modifiers ??= <Modifier>[];
       modifiers.add(External);
@@ -1916,6 +1973,7 @@
         ValueKinds.ParserRecovery,
         ValueKinds.TypeBuilder,
       ]),
+      /* augment token */ ValueKinds.TokenOrNull,
       /* macro token */ ValueKinds.TokenOrNull,
       /* modifiers */ ValueKinds.Integer,
       /* type variables */ ValueKinds.TypeVariableListOrNull,
@@ -1927,6 +1985,7 @@
     List<TypeBuilder>? interfaces =
         popIfNotNull(implementsKeyword) as List<TypeBuilder>?;
     Object? mixinApplication = pop();
+    Token? augmentToken = pop(NullValue.Token) as Token?;
     Token? macroToken = pop(NullValue.Token) as Token?;
     int modifiers = pop() as int;
     List<TypeVariableBuilder>? typeVariables =
@@ -1996,7 +2055,8 @@
           startCharOffset,
           charOffset,
           charEndOffset,
-          isMacro: macroToken != null);
+          isMacro: macroToken != null,
+          isAugmentation: augmentToken != null);
     }
     popDeclarationContext(DeclarationContext.NamedMixinApplication);
   }
@@ -2327,7 +2387,7 @@
         ..argumentsBeginToken = argumentsBeginToken);
     } else {
       assert(enumConstantInfo is ParserRecovery);
-      push(enumConstantInfo);
+      push(NullValue.EnumConstantInfo);
     }
   }
 
@@ -2369,6 +2429,26 @@
     int elementsCount = pop() as int;
     List<EnumConstantInfo?>? enumConstantInfos =
         const FixedNullableList<EnumConstantInfo>().pop(stack, elementsCount);
+
+    if (enumConstantInfos != null) {
+      List<EnumConstantInfo?>? parsedEnumConstantInfos;
+      for (int index = 0; index < enumConstantInfos.length; index++) {
+        EnumConstantInfo? info = enumConstantInfos[index];
+        if (info == null) {
+          parsedEnumConstantInfos = enumConstantInfos.take(index).toList();
+        } else if (parsedEnumConstantInfos != null) {
+          parsedEnumConstantInfos.add(info);
+        }
+      }
+      if (parsedEnumConstantInfos != null) {
+        if (parsedEnumConstantInfos.isEmpty) {
+          enumConstantInfos = null;
+        } else {
+          enumConstantInfos = parsedEnumConstantInfos;
+        }
+      }
+    }
+
     int endCharOffset = popCharOffset();
     int startCharOffset = popCharOffset();
     List<TypeBuilder>? interfaces = pop() as List<TypeBuilder>?;
@@ -2607,6 +2687,7 @@
   void beginFields(
       DeclarationKind declarationKind,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -2696,6 +2777,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -2736,6 +2818,7 @@
     List<FieldInfo>? fieldInfos = popFieldInfos(count);
     TypeBuilder? type = pop() as TypeBuilder?;
     int modifiers = (abstractToken != null ? abstractMask : 0) |
+        (augmentToken != null ? augmentMask : 0) |
         (externalToken != null ? externalMask : 0) |
         (staticToken != null ? staticMask : 0) |
         (covariantToken != null ? covariantMask : 0) |
@@ -3091,6 +3174,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -3106,8 +3190,17 @@
           beginToken.charOffset,
           -1);
     }
-    endClassFields(abstractToken, externalToken, staticToken, covariantToken,
-        lateToken, varFinalOrConst, count, beginToken, endToken);
+    endClassFields(
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        count,
+        beginToken,
+        endToken);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/scope_listener.dart b/pkg/front_end/lib/src/fasta/source/scope_listener.dart
deleted file mode 100644
index 221222f..0000000
--- a/pkg/front_end/lib/src/fasta/source/scope_listener.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.
-
-library fasta.scope_listener;
-
-import 'package:_fe_analyzer_shared/src/parser/block_kind.dart' show BlockKind;
-
-import 'package:_fe_analyzer_shared/src/parser/stack_listener.dart'
-    show NullValue;
-
-import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
-
-import '../scope.dart' show Scope;
-import 'stack_listener_impl.dart';
-import 'value_kinds.dart';
-
-enum JumpTargetKind {
-  Break,
-  Continue,
-  Goto, // Continue label in switch.
-}
-
-abstract class ScopeListener<J> extends StackListenerImpl {
-  Scope scope;
-
-  J? breakTarget;
-
-  J? continueTarget;
-
-  ScopeListener(Scope? scope) : scope = scope ?? new Scope.immutable();
-
-  J createJumpTarget(JumpTargetKind kind, int charOffset);
-
-  J createBreakTarget(int charOffset) {
-    return createJumpTarget(JumpTargetKind.Break, charOffset);
-  }
-
-  J createContinueTarget(int charOffset) {
-    return createJumpTarget(JumpTargetKind.Continue, charOffset);
-  }
-
-  J createGotoTarget(int charOffset) {
-    return createJumpTarget(JumpTargetKind.Goto, charOffset);
-  }
-
-  void enterLocalScope(String debugName, [Scope? newScope]) {
-    push(scope);
-    scope = newScope ?? scope.createNestedScope(debugName);
-    assert(checkState(null, [
-      ValueKinds.Scope,
-    ]));
-  }
-
-  @override
-  void exitLocalScope() {
-    assert(checkState(null, [
-      ValueKinds.Scope,
-    ]));
-    scope = pop() as Scope;
-    // ignore: unnecessary_null_comparison
-    assert(scope != null);
-  }
-
-  void enterBreakTarget(int charOffset, [J? target]) {
-    push(breakTarget ?? NullValue.BreakTarget);
-    breakTarget = target ?? createBreakTarget(charOffset);
-  }
-
-  void enterContinueTarget(int charOffset, [J? target]) {
-    push(continueTarget ?? NullValue.ContinueTarget);
-    continueTarget = target ?? createContinueTarget(charOffset);
-  }
-
-  J? exitBreakTarget() {
-    J? current = breakTarget;
-    breakTarget = pop() as J?;
-    return current;
-  }
-
-  J? exitContinueTarget() {
-    J? current = continueTarget;
-    continueTarget = pop() as J?;
-    return current;
-  }
-
-  void enterLoop(int charOffset) {
-    enterBreakTarget(charOffset);
-    enterContinueTarget(charOffset);
-  }
-
-  @override
-  void beginBlockFunctionBody(Token begin) {
-    debugEvent("beginBlockFunctionBody");
-    enterLocalScope("block function body");
-  }
-
-  @override
-  void beginForStatement(Token token) {
-    debugEvent("beginForStatement");
-    enterLoop(token.charOffset);
-    enterLocalScope("for statement");
-  }
-
-  @override
-  void beginForControlFlow(Token? awaitToken, Token forToken) {
-    debugEvent("beginForControlFlow");
-    enterLocalScope("for in a collection");
-  }
-
-  @override
-  void beginBlock(Token token, BlockKind blockKind) {
-    debugEvent("beginBlock");
-    enterLocalScope("block");
-  }
-
-  @override
-  void beginSwitchBlock(Token token) {
-    debugEvent("beginSwitchBlock");
-    enterLocalScope("switch block");
-    enterBreakTarget(token.charOffset);
-  }
-
-  @override
-  void beginDoWhileStatement(Token token) {
-    debugEvent("beginDoWhileStatement");
-    enterLoop(token.charOffset);
-  }
-
-  @override
-  void beginWhileStatement(Token token) {
-    debugEvent("beginWhileStatement");
-    enterLoop(token.charOffset);
-  }
-
-  @override
-  void beginDoWhileStatementBody(Token token) {
-    debugEvent("beginDoWhileStatementBody");
-    enterLocalScope("do-while statement body");
-  }
-
-  @override
-  void endDoWhileStatementBody(Token token) {
-    debugEvent("endDoWhileStatementBody");
-    Object? body = pop();
-    exitLocalScope();
-    push(body);
-  }
-
-  @override
-  void beginWhileStatementBody(Token token) {
-    debugEvent("beginWhileStatementBody");
-    enterLocalScope("while statement body");
-  }
-
-  @override
-  void endWhileStatementBody(Token token) {
-    debugEvent("endWhileStatementBody");
-    Object? body = pop();
-    exitLocalScope();
-    push(body);
-  }
-
-  @override
-  void beginForStatementBody(Token token) {
-    debugEvent("beginForStatementBody");
-    enterLocalScope("for statement body");
-  }
-
-  @override
-  void endForStatementBody(Token token) {
-    debugEvent("endForStatementBody");
-    Object? body = pop();
-    exitLocalScope();
-    push(body);
-  }
-
-  @override
-  void beginForInBody(Token token) {
-    debugEvent("beginForInBody");
-    enterLocalScope("for-in body");
-  }
-
-  @override
-  void endForInBody(Token token) {
-    debugEvent("endForInBody");
-    Object? body = pop();
-    exitLocalScope();
-    push(body);
-  }
-
-  @override
-  void beginThenStatement(Token token) {
-    debugEvent("beginThenStatement");
-    enterLocalScope("then");
-  }
-
-  @override
-  void endThenStatement(Token token) {
-    debugEvent("endThenStatement");
-    Object? body = pop();
-    exitLocalScope();
-    push(body);
-  }
-
-  @override
-  void beginElseStatement(Token token) {
-    debugEvent("beginElseStatement");
-    enterLocalScope("else");
-  }
-
-  @override
-  void endElseStatement(Token token) {
-    debugEvent("endElseStatement");
-    Object? body = pop();
-    exitLocalScope();
-    push(body);
-  }
-}
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 50fad75..0fe0d36 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
@@ -57,7 +57,6 @@
 import 'source_field_builder.dart';
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 import 'source_member_builder.dart';
-import 'source_procedure_builder.dart';
 
 Class initializeClass(
     Class? cls,
@@ -103,7 +102,10 @@
   @override
   final bool isMacro;
 
-  SourceClassBuilder? _patchBuilder;
+  @override
+  final bool isAugmentation;
+
+  List<SourceClassBuilder>? _patches;
 
   SourceClassBuilder(
       List<MetadataBuilder>? metadata,
@@ -124,7 +126,8 @@
       {Class? cls,
       this.mixedInTypeBuilder,
       this.isMixinDeclaration = false,
-      this.isMacro: false})
+      this.isMacro = false,
+      this.isAugmentation = false})
       : actualCls = initializeClass(cls, typeVariables, name, parent,
             startCharOffset, nameOffset, charEndOffset, referencesFromIndexed),
         super(metadata, modifiers, name, typeVariables, supertype, interfaces,
@@ -132,7 +135,7 @@
     actualCls.hasConstConstructor = declaresConstConstructor;
   }
 
-  SourceClassBuilder? get patchForTesting => _patchBuilder;
+  List<SourceClassBuilder>? get patchesForTesting => _patches;
 
   SourceClassBuilder? actualOrigin;
 
@@ -155,15 +158,17 @@
     void buildBuilders(String name, Builder? declaration) {
       while (declaration != null) {
         if (declaration.parent != this) {
-          if (fileUri != declaration.parent?.fileUri) {
-            unexpected("$fileUri", "${declaration.parent?.fileUri}", charOffset,
-                fileUri);
-          } else {
-            unexpected(
-                fullNameForErrors,
-                declaration.parent?.fullNameForErrors ?? '',
-                charOffset,
-                fileUri);
+          if (declaration.parent?.origin != this) {
+            if (fileUri != declaration.parent?.fileUri) {
+              unexpected("$fileUri", "${declaration.parent?.fileUri}",
+                  charOffset, fileUri);
+            } else {
+              unexpected(
+                  fullNameForErrors,
+                  declaration.parent?.fullNameForErrors ?? '',
+                  charOffset,
+                  fileUri);
+            }
           }
         } else if (declaration is SourceMemberBuilder) {
           SourceMemberBuilder memberBuilder = declaration;
@@ -172,7 +177,8 @@
             member.parent = cls;
             if (!memberBuilder.isPatch &&
                 !memberBuilder.isDuplicate &&
-                !memberBuilder.isConflictingSetter) {
+                !memberBuilder.isConflictingSetter &&
+                !memberBuilder.isConflictingAugmentationMember) {
               if (member is Procedure) {
                 cls.addProcedure(member);
               } else if (member is Field) {
@@ -196,7 +202,7 @@
     }
 
     scope.forEach(buildBuilders);
-    constructors.forEach(buildBuilders);
+    constructorScope.forEach(buildBuilders);
     if (supertypeBuilder != null) {
       supertypeBuilder = _checkSupertype(supertypeBuilder!);
     }
@@ -270,8 +276,8 @@
       }
     }
 
-    constructors.forEach((String name, Builder constructor) {
-      Builder? member = scopeBuilder[name];
+    constructorScope.forEach((String name, Builder constructor) {
+      Builder? member = scope.lookupLocalMember(name, setter: false);
       if (member == null) return;
       if (!member.isStatic) return;
       // TODO(ahe): Revisit these messages. It seems like the last two should
@@ -293,7 +299,7 @@
     });
 
     scope.forEachLocalSetter((String name, Builder setter) {
-      Builder? constructor = constructorScopeBuilder[name];
+      Builder? constructor = constructorScope.lookupLocalMember(name);
       if (constructor == null || !setter.isStatic) return;
       addProblem(templateConflictsWithConstructor.withArguments(name),
           setter.charOffset, noLength);
@@ -344,25 +350,45 @@
       }
     }
 
-    constructors.forEach(build);
+    constructorScope.forEach(build);
     scope.forEach(build);
   }
 
   @override
-  void forEachConstructor(void Function(String, MemberBuilder) f,
-      {bool includeInjectedConstructors: false}) {
+  void forEach(void f(String name, Builder builder)) {
     if (isPatch) {
-      actualOrigin!.forEachConstructor(f,
-          includeInjectedConstructors: includeInjectedConstructors);
+      actualOrigin!.forEach(f);
     } else {
-      constructors.forEach(f);
-      if (includeInjectedConstructors) {
-        _patchBuilder?.constructors
-            .forEach((String name, MemberBuilder builder) {
-          if (!builder.isPatch) {
-            f(name, builder);
-          }
-        });
+      scope.forEach(f);
+      List<SourceClassBuilder>? patchClasses = _patches;
+      if (patchClasses != null) {
+        for (SourceClassBuilder patchClass in patchClasses) {
+          patchClass.scope.forEach((String name, Builder builder) {
+            if (!builder.isPatch) {
+              f(name, builder);
+            }
+          });
+        }
+      }
+    }
+  }
+
+  @override
+  void forEachConstructor(void Function(String, MemberBuilder) f) {
+    if (isPatch) {
+      actualOrigin!.forEachConstructor(f);
+    } else {
+      constructorScope.forEach(f);
+      List<SourceClassBuilder>? patchClasses = _patches;
+      if (patchClasses != null) {
+        for (SourceClassBuilder patchClass in patchClasses) {
+          patchClass.constructorScope
+              .forEach((String name, MemberBuilder builder) {
+            if (!builder.isPatch) {
+              f(name, builder);
+            }
+          });
+        }
       }
     }
   }
@@ -382,8 +408,8 @@
     // assert checks that the names of the fields from the original declaration
     // and from the patch don't intersect.
     assert(
-        _patchBuilder == null ||
-            _patchBuilder!.scope.localMembers
+        _patches == null ||
+            _patches!.every((patchClass) => patchClass.scope.localMembers
                 .where((b) => b is SourceFieldBuilder)
                 .map((b) => (b as SourceFieldBuilder).name)
                 .toSet()
@@ -391,9 +417,14 @@
                     .where((b) => b is SourceFieldBuilder)
                     .map((b) => (b as SourceFieldBuilder).name)
                     .toSet())
-                .isEmpty,
+                .isEmpty),
         "Detected an attempt to patch a field.");
-    _patchBuilder?.scope.forEach(callbackFilteringFieldBuilders);
+    List<SourceClassBuilder>? patchClasses = _patches;
+    if (patchClasses != null) {
+      for (SourceClassBuilder patchClass in patchClasses) {
+        patchClass.scope.forEach(callbackFilteringFieldBuilders);
+      }
+    }
     scope.forEach(callbackFilteringFieldBuilders);
   }
 
@@ -412,8 +443,13 @@
     // Constructors can be patched, so iterate first over constructors in the
     // patch, and then over constructors in the original declaration skipping
     // those with the names that are in the patch.
-    _patchBuilder?.constructors.forEach(callbackFilteringFieldBuilders);
-    constructors.forEach(callbackFilteringFieldBuilders);
+    List<SourceClassBuilder>? patchClasses = _patches;
+    if (patchClasses != null) {
+      for (SourceClassBuilder patchClass in patchClasses) {
+        patchClass.constructorScope.forEach(callbackFilteringFieldBuilders);
+      }
+    }
+    constructorScope.forEach(callbackFilteringFieldBuilders);
   }
 
   /// Looks up the constructor by [name] on the class built by this class
@@ -569,26 +605,85 @@
   void applyPatch(Builder patch) {
     if (patch is SourceClassBuilder) {
       patch.actualOrigin = this;
-      _patchBuilder = patch;
-      // TODO(ahe): Complain if `patch.supertype` isn't null.
-      scope.forEachLocalMember((String name, Builder member) {
-        Builder? memberPatch =
-            patch.scope.lookupLocalMember(name, setter: false);
-        if (memberPatch != null) {
-          member.applyPatch(memberPatch);
+      (_patches ??= []).add(patch);
+
+      void applyAugmentation(String name, SourceMemberBuilder patchMember,
+          {required bool setter}) {
+        Builder? originMember = scope.lookupLocalMember(name, setter: setter);
+        if (patch.isAugmentation) {
+          if (originMember != null) {
+            if (patchMember.isAugmentation) {
+              originMember.applyPatch(patchMember);
+            } else {
+              patchMember.isConflictingAugmentationMember = true;
+              library.addProblem(
+                  templateNonAugmentationClassMemberConflict
+                      .withArguments(name),
+                  patchMember.charOffset,
+                  name.length,
+                  patchMember.fileUri,
+                  context: [
+                    messageNonAugmentationClassMemberConflictCause.withLocation(
+                        originMember.fileUri!,
+                        originMember.charOffset,
+                        name.length)
+                  ]);
+            }
+          } else {
+            if (patchMember.isAugmentation) {
+              library.addProblem(
+                  templateUnmatchedAugmentationClassMember.withArguments(name),
+                  patchMember.charOffset,
+                  name.length,
+                  patchMember.fileUri);
+            } else {
+              scope.addLocalMember(name, patchMember, setter: setter);
+            }
+          }
+        } else {
+          if (originMember != null) {
+            // Patch class implicitly assume matching members are patch
+            // members.
+            originMember.applyPatch(patchMember);
+          } else {
+            // Members injected into patch are not part of the origin scope.
+          }
+        }
+      }
+
+      patch.scope.forEachLocalMember((String name, Builder patchMember) {
+        if (patchMember is SourceMemberBuilder) {
+          applyAugmentation(name, patchMember, setter: false);
+        } else {
+          assert(false,
+              "Unexpected member ${patchMember} (${patchMember.runtimeType})");
         }
       });
-      scope.forEachLocalSetter((String name, Builder member) {
-        Builder? memberPatch =
-            patch.scope.lookupLocalMember(name, setter: true);
-        if (memberPatch != null) {
-          member.applyPatch(memberPatch);
+
+      patch.scope.forEachLocalSetter((String name, Builder patchMember) {
+        if (patchMember is SourceMemberBuilder) {
+          applyAugmentation(name, patchMember, setter: true);
+        } else {
+          assert(false,
+              "Unexpected member ${patchMember} (${patchMember.runtimeType})");
         }
       });
-      constructors.local.forEach((String name, Builder member) {
-        Builder? memberPatch = patch.constructors.local[name];
-        if (memberPatch != null) {
-          member.applyPatch(memberPatch);
+
+      patch.constructorScope.local
+          .forEach((String name, MemberBuilder patchConstructor) {
+        MemberBuilder? originConstructor = constructorScope.local[name];
+        if (patch.isAugmentation) {
+          if (originConstructor != null) {
+            // TODO(johnniwinther): Should we support constructor augmentation?
+            // Currently the syntax doesn't allow it.
+            originConstructor.applyPatch(patchConstructor);
+          } else {
+            constructorScope.addLocalMember(name, patchConstructor);
+          }
+        } else {
+          if (originConstructor != null) {
+            originConstructor.applyPatch(patchConstructor);
+          }
         }
       });
 
@@ -614,33 +709,90 @@
     }
   }
 
-  void checkSupertypes(CoreTypes coreTypes,
-      ClassHierarchyBuilder hierarchyBuilder, Class enumClass) {
+  void checkSupertypes(
+      CoreTypes coreTypes,
+      ClassHierarchyBuilder hierarchyBuilder,
+      Class enumClass,
+      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
     // interface appears multiple times in the 'implements' clause.
     // Moreover, it checks that `FutureOr` and `void` are not among the
     // supertypes and that `Enum` is not implemented by non-abstract classes.
 
-    if (!cls.isAbstract && !cls.isEnum) {
-      bool isEnumFound = false;
+    if (library.enableEnhancedEnumsInLibrary) {
+      bool hasEnumSuperinterface = false;
       List<Supertype> interfaces =
           hierarchyBuilder.getNodeFromClass(cls).superclasses;
-      for (int i = 0; !isEnumFound && i < interfaces.length; i++) {
+      for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
         if (interfaces[i].classNode == enumClass) {
-          isEnumFound = true;
+          hasEnumSuperinterface = true;
         }
       }
       interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
-      for (int i = 0; !isEnumFound && i < interfaces.length; i++) {
+      for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
         if (interfaces[i].classNode == enumClass) {
-          isEnumFound = true;
+          hasEnumSuperinterface = true;
         }
       }
-      if (isEnumFound) {
+      if (!cls.isAbstract && !cls.isEnum && hasEnumSuperinterface) {
         addProblem(templateEnumSupertypeOfNonAbstractClass.withArguments(name),
             charOffset, noLength);
       }
+
+      if (hasEnumSuperinterface) {
+        Builder? customValuesDeclaration =
+            scope.lookupLocalMember("values", setter: false);
+        if (customValuesDeclaration != null &&
+            !customValuesDeclaration.isStatic) {
+          // Retrieve the earliest declaration for error reporting.
+          while (customValuesDeclaration?.next != null) {
+            customValuesDeclaration = customValuesDeclaration?.next;
+          }
+          library.addProblem(
+              templateEnumImplementerContainsValuesDeclaration
+                  .withArguments(this.name),
+              customValuesDeclaration!.charOffset,
+              customValuesDeclaration.fullNameForErrors.length,
+              fileUri);
+        }
+        customValuesDeclaration =
+            scope.lookupLocalMember("values", setter: true);
+        if (customValuesDeclaration != null &&
+            !customValuesDeclaration.isStatic) {
+          // Retrieve the earliest declaration for error reporting.
+          while (customValuesDeclaration?.next != null) {
+            customValuesDeclaration = customValuesDeclaration?.next;
+          }
+          library.addProblem(
+              templateEnumImplementerContainsValuesDeclaration
+                  .withArguments(this.name),
+              customValuesDeclaration!.charOffset,
+              customValuesDeclaration.fullNameForErrors.length,
+              fileUri);
+        }
+      }
+    }
+    if (macroClass != null && !cls.isMacro && !cls.isAbstract) {
+      // TODO(johnniwinther): Merge this check with the loop above.
+      bool isMacroFound = false;
+      List<Supertype> interfaces =
+          hierarchyBuilder.getNodeFromClass(cls).superclasses;
+      for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
+        if (interfaces[i].classNode == macroClass) {
+          isMacroFound = true;
+        }
+      }
+      interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
+      for (int i = 0; !isMacroFound && i < interfaces.length; i++) {
+        if (interfaces[i].classNode == macroClass) {
+          isMacroFound = true;
+        }
+      }
+      if (isMacroFound) {
+        addProblem(templateMacroClassNotDeclaredMacro.withArguments(name),
+            charOffset, noLength);
+      }
     }
 
     void fail(NamedTypeBuilder target, Message message,
@@ -714,7 +866,7 @@
                 this.charOffset,
                 noLength);
           } else if (interface.cls.name == "FutureOr" &&
-              interface.cls.enclosingLibrary.importUri.scheme == "dart" &&
+              interface.cls.enclosingLibrary.importUri.isScheme("dart") &&
               interface.cls.enclosingLibrary.importUri.path == "async") {
             addProblem(messageImplementsFutureOr, this.charOffset, noLength);
           } else if (implemented.contains(interface)) {
@@ -952,30 +1104,35 @@
       return;
     }
 
-    // Check whether [redirecteeType] <: [factoryType].
-    if (!typeEnvironment.isSubtypeOf(
-        redirecteeType, factoryType, SubtypeCheckMode.ignoringNullabilities)) {
-      _addProblemForRedirectingFactory(
-          factory,
-          templateIncompatibleRedirecteeFunctionType.withArguments(
-              redirecteeType, factoryType, library.isNonNullableByDefault),
-          factory.redirectionTarget.charOffset,
-          noLength);
-    } else if (library.isNonNullableByDefault) {
-      if (!typeEnvironment.isSubtypeOf(
-          redirecteeType, factoryType, SubtypeCheckMode.withNullabilities)) {
+    // Redirection to generative enum constructors is forbidden and is reported
+    // as an error elsewhere.
+    if (!(cls.isEnum &&
+        (factory.redirectionTarget.target?.isConstructor ?? false))) {
+      // Check whether [redirecteeType] <: [factoryType].
+      if (!typeEnvironment.isSubtypeOf(redirecteeType, factoryType,
+          SubtypeCheckMode.ignoringNullabilities)) {
         _addProblemForRedirectingFactory(
             factory,
             templateIncompatibleRedirecteeFunctionType.withArguments(
                 redirecteeType, factoryType, library.isNonNullableByDefault),
             factory.redirectionTarget.charOffset,
             noLength);
+      } else if (library.isNonNullableByDefault) {
+        if (!typeEnvironment.isSubtypeOf(
+            redirecteeType, factoryType, SubtypeCheckMode.withNullabilities)) {
+          _addProblemForRedirectingFactory(
+              factory,
+              templateIncompatibleRedirecteeFunctionType.withArguments(
+                  redirecteeType, factoryType, library.isNonNullableByDefault),
+              factory.redirectionTarget.charOffset,
+              noLength);
+        }
       }
     }
   }
 
   void checkRedirectingFactories(TypeEnvironment typeEnvironment) {
-    Map<String, MemberBuilder> constructors = this.constructors.local;
+    Map<String, MemberBuilder> constructors = this.constructorScope.local;
     for (Builder? constructor in constructors.values) {
       do {
         if (constructor is RedirectingFactoryBuilder) {
@@ -1236,45 +1393,32 @@
     }
 
     forEach((String name, Builder builder) {
-      if (builder is SourceFieldBuilder) {
-        // Check fields.
-        checkVarianceInField(builder, typeEnvironment, cls.typeParameters);
-        library.checkTypesInField(builder, typeEnvironment);
-      } else if (builder is SourceProcedureBuilder) {
-        // Check procedures
-        checkVarianceInFunction(
-            builder.procedure, typeEnvironment, cls.typeParameters);
-        library.checkTypesInFunctionBuilder(builder, typeEnvironment);
+      if (builder is SourceMemberBuilder) {
+        builder.checkVariance(this, typeEnvironment);
+        builder.checkTypes(library, typeEnvironment);
       } else {
         assert(
-            builder is _RedirectingConstructorsFieldBuilder &&
-                builder.name == redirectingName,
-            "Unexpected member: $builder.");
+            false,
+            "Unexpected class member builder $builder "
+            "(${builder.runtimeType})");
       }
     });
 
     forEachConstructor((String name, MemberBuilder builder) {
-      if (builder is DeclaredSourceConstructorBuilder) {
-        library.checkTypesInConstructorBuilder(builder, typeEnvironment);
-      } else if (builder is RedirectingFactoryBuilder) {
-        library.checkTypesInRedirectingFactoryBuilder(builder, typeEnvironment);
-      } else if (builder is SourceFactoryBuilder) {
-        assert(builder.isFactory, "Unexpected constructor $builder.");
-        library.checkTypesInFunctionBuilder(builder, typeEnvironment);
+      if (builder is SourceMemberBuilder) {
+        builder.checkTypes(library, typeEnvironment);
       } else {
-        assert(
-            // This is a synthesized constructor.
-            builder is SyntheticSourceConstructorBuilder,
-            "Unexpected constructor: $builder.");
+        assert(false,
+            "Unexpected constructor builder $builder (${builder.runtimeType})");
       }
-    }, includeInjectedConstructors: true);
+    });
   }
 
   void addSyntheticConstructor(
       SyntheticSourceConstructorBuilder constructorBuilder) {
     String name = constructorBuilder.name;
-    constructorBuilder.next = constructorScopeBuilder[name];
-    constructorScopeBuilder.addMember(name, constructorBuilder);
+    constructorBuilder.next = constructorScope.lookupLocalMember(name);
+    constructorScope.addLocalMember(name, constructorBuilder);
     // Synthetic constructors are created after the component has been built
     // so we need to add the constructor to the class.
     cls.addConstructor(constructorBuilder.invokeTarget);
@@ -1299,7 +1443,7 @@
     scope.forEach((String name, Builder declaration) {
       count += declaration.finishPatch();
     });
-    constructors.forEach((String name, Builder declaration) {
+    constructorScope.forEach((String name, Builder declaration) {
       count += declaration.finishPatch();
     });
     return count;
@@ -1382,6 +1526,22 @@
     return noSuchMethod != null && noSuchMethod.enclosingClass != objectClass;
   }
 
+  List<Member> _getStaticMembers() {
+    List<Member> staticMembers = <Member>[];
+    for (Field field in cls.fields) {
+      if (field.isStatic) {
+        staticMembers.add(field);
+      }
+    }
+    for (Procedure procedure in cls.procedures) {
+      if (procedure.isStatic) {
+        staticMembers.add(procedure);
+      }
+    }
+    staticMembers.sort(ClassHierarchy.compareMembers);
+    return staticMembers;
+  }
+
   bool _addMissingNoSuchMethodForwarders(
       KernelTarget target, Set<Member> existingForwarders,
       {required bool forSetters}) {
@@ -1396,6 +1556,7 @@
         hierarchy.getDispatchTargets(cls, setters: forSetters);
     List<Member> declaredMembers =
         hierarchy.getDeclaredMembers(cls, setters: forSetters);
+    List<Member> staticMembers = _getStaticMembers();
 
     Procedure noSuchMethod = ClassHierarchy.findMemberByName(
         hierarchy.getInterfaceMembers(cls), noSuchMethodName) as Procedure;
@@ -1421,8 +1582,8 @@
               forSetter: forSetters);
       Member? member = combinedMemberSignature.canonicalMember;
       if (member != null) {
-        if (_isForwarderRequired(
-                clsHasUserDefinedNoSuchMethod, member, cls, concreteMembers,
+        if (_isForwarderRequired(clsHasUserDefinedNoSuchMethod, member, cls,
+                concreteMembers, staticMembers,
                 isPatch: member.fileUri != member.enclosingClass!.fileUri) &&
             !existingForwarders.contains(member)) {
           assert(!combinedMemberSignature.needsCovarianceMerging,
@@ -1473,12 +1634,13 @@
         bool superHasUserDefinedNoSuchMethod = _hasUserDefinedNoSuchMethod(
             nearestConcreteSuperclass, hierarchy, target.objectClass);
         {
-          List<Member> concrete =
+          List<Member> concreteMembers =
               hierarchy.getDispatchTargets(nearestConcreteSuperclass);
+          List<Member> staticMembers = _getStaticMembers();
           for (Member member
               in hierarchy.getInterfaceMembers(nearestConcreteSuperclass)) {
             if (_isForwarderRequired(superHasUserDefinedNoSuchMethod, member,
-                nearestConcreteSuperclass, concrete,
+                nearestConcreteSuperclass, concreteMembers, staticMembers,
                 isPatch: member.fileUri != member.enclosingClass!.fileUri)) {
               existingForwarders.add(member);
             }
@@ -1488,10 +1650,11 @@
         {
           List<Member> concreteSetters = hierarchy
               .getDispatchTargets(nearestConcreteSuperclass, setters: true);
+          List<Member> staticSetters = _getStaticMembers();
           for (Member member in hierarchy
               .getInterfaceMembers(nearestConcreteSuperclass, setters: true)) {
             if (_isForwarderRequired(superHasUserDefinedNoSuchMethod, member,
-                nearestConcreteSuperclass, concreteSetters)) {
+                nearestConcreteSuperclass, concreteSetters, staticSetters)) {
               existingSetterForwarders.add(member);
             }
           }
@@ -1517,7 +1680,7 @@
 
   /// Tells if a noSuchMethod forwarder is required for [member] in [cls].
   bool _isForwarderRequired(bool hasUserDefinedNoSuchMethod, Member member,
-      Class cls, List<Member> concreteMembers,
+      Class cls, List<Member> concreteMembers, List<Member> staticMembers,
       {bool isPatch = false}) {
     // A noSuchMethod forwarder is allowed for an abstract member if the class
     // has a user-defined noSuchMethod or if the member is private and is
@@ -1531,7 +1694,8 @@
     // A noSuchMethod forwarder is required if it's allowed and if there's no
     // concrete implementation or a forwarder already.
     bool isForwarderRequired = isForwarderAllowed &&
-        ClassHierarchy.findMemberByName(concreteMembers, member.name) == null;
+        ClassHierarchy.findMemberByName(concreteMembers, member.name) == null &&
+        ClassHierarchy.findMemberByName(staticMembers, member.name) == null;
     return isForwarderRequired;
   }
 
@@ -1625,7 +1789,7 @@
     }
     int count = constructorReferences!.length;
     if (count != 0) {
-      Map<String, MemberBuilder> constructors = this.constructors.local;
+      Map<String, MemberBuilder> constructors = this.constructorScope.local;
       // Copy keys to avoid concurrent modification error.
       for (MapEntry<String, MemberBuilder> entry in constructors.entries) {
         Builder? declaration = entry.value;
@@ -1690,6 +1854,16 @@
                     noLength);
                 targetNode = null;
               }
+              if (targetNode != null &&
+                  targetNode is Constructor &&
+                  targetNode.enclosingClass.isEnum) {
+                _addProblemForRedirectingFactory(
+                    declaration,
+                    messageEnumFactoryRedirectsToConstructor,
+                    redirectionTarget.charOffset,
+                    noLength);
+                targetNode = null;
+              }
               if (targetNode != null) {
                 List<DartType> typeArguments = declaration.typeArguments ??
                     new List<DartType>.filled(
@@ -2642,4 +2816,12 @@
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
     // Do nothing.
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {}
 }
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 8f7cfc8..06f77cb 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
@@ -6,6 +6,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
@@ -21,16 +22,17 @@
 import '../builder/type_variable_builder.dart';
 import '../constant_context.dart' show ConstantContext;
 import '../dill/dill_member_builder.dart';
+import '../identifiers.dart';
 import '../kernel/body_builder.dart' show BodyBuilder;
 import '../kernel/constructor_tearoff_lowering.dart';
-import '../kernel/expression_generator_helper.dart'
-    show ExpressionGeneratorHelper;
+import '../kernel/expression_generator_helper.dart';
 import '../kernel/hierarchy/class_member.dart' show ClassMember;
 import '../kernel/kernel_helper.dart' show SynthesizedFunctionNode;
 import '../kernel/utils.dart'
     show isRedirectingGenerativeConstructorImplementation;
 import '../messages.dart'
     show
+        LocatedMessage,
         Message,
         messageMoreThanOneSuperInitializer,
         messageRedirectingConstructorWithAnotherInitializer,
@@ -73,6 +75,8 @@
 
   Constructor get actualConstructor => _constructor;
 
+  List<DeclaredSourceConstructorBuilder>? _patches;
+
   bool _hasFormalsInferred = false;
 
   final bool _hasSuperInitializingFormals;
@@ -83,6 +87,12 @@
   @override
   List<FormalParameterBuilder>? formals;
 
+  @override
+  String get fullNameForErrors {
+    return "${flattenName(classBuilder.name, charOffset, fileUri)}"
+        "${name.isEmpty ? '' : '.$name'}";
+  }
+
   DeclaredSourceConstructorBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -144,8 +154,7 @@
   @override
   DeclaredSourceConstructorBuilder get origin => actualOrigin ?? this;
 
-  ConstructorBuilder? get patchForTesting =>
-      dataForTesting?.patchForTesting as ConstructorBuilder?;
+  List<SourceConstructorBuilder>? get patchForTesting => _patches;
 
   @override
   bool get isDeclarationInstanceMember => false;
@@ -204,6 +213,9 @@
             (formal.isInitializingFormal || formal.isSuperInitializingFormal)) {
           formal.variable!.type = const UnknownType();
           needsInference = true;
+        } else if (!formal.hasDeclaredInitializer &&
+            formal.isSuperInitializingFormal) {
+          needsInference = true;
         }
       }
       if (needsInference) {
@@ -219,7 +231,7 @@
   }
 
   /// Infers the types of any untyped initializing formals.
-  void inferFormalTypes(ClassHierarchy classHierarchy) {
+  void inferFormalTypes(TypeEnvironment typeEnvironment) {
     if (_hasFormalsInferred) return;
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
@@ -231,22 +243,24 @@
       }
 
       if (_hasSuperInitializingFormals) {
+        List<Initializer>? initializers;
         if (beginInitializers != null) {
           BodyBuilder bodyBuilder = library.loader
               .createBodyBuilderForOutlineExpression(
                   library, classBuilder, this, classBuilder.scope, fileUri);
           bodyBuilder.constantContext = ConstantContext.required;
-          bodyBuilder.parseInitializers(beginInitializers!,
+          initializers = bodyBuilder.parseInitializers(beginInitializers!,
               doFinishConstructor: false);
         }
         finalizeSuperInitializingFormals(
-            classHierarchy, _superParameterDefaultValueCloners);
+            typeEnvironment, _superParameterDefaultValueCloners, initializers);
       }
     }
     _hasFormalsInferred = true;
   }
 
-  ConstructorBuilder? _computeSuperTargetBuilder() {
+  ConstructorBuilder? _computeSuperTargetBuilder(
+      List<Initializer>? initializers) {
     Constructor superTarget;
     ClassBuilder superclassBuilder;
 
@@ -272,11 +286,12 @@
       return null;
     }
 
-    if (constructor.initializers.isNotEmpty &&
-        constructor.initializers.last is SuperInitializer) {
-      superTarget = (constructor.initializers.last as SuperInitializer).target;
+    if (initializers != null &&
+        initializers.isNotEmpty &&
+        initializers.last is SuperInitializer) {
+      superTarget = (initializers.last as SuperInitializer).target;
     } else {
-      MemberBuilder? memberBuilder = superclassBuilder.constructors
+      MemberBuilder? memberBuilder = superclassBuilder.constructorScope
           .lookup("", charOffset, library.fileUri);
       if (memberBuilder is ConstructorBuilder) {
         superTarget = memberBuilder.constructor;
@@ -292,8 +307,10 @@
     return constructorBuilder is ConstructorBuilder ? constructorBuilder : null;
   }
 
-  void finalizeSuperInitializingFormals(ClassHierarchy classHierarchy,
-      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+  void finalizeSuperInitializingFormals(
+      TypeEnvironment typeEnvironment,
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes,
+      List<Initializer>? initializers) {
     if (formals == null) return;
     if (!_hasSuperInitializingFormals) return;
 
@@ -305,7 +322,8 @@
       }
     }
 
-    ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder();
+    ConstructorBuilder? superTargetBuilder =
+        _computeSuperTargetBuilder(initializers);
     Constructor superTarget;
     List<FormalParameterBuilder>? superFormals;
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
@@ -333,20 +351,20 @@
     }
 
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
-      superTargetBuilder.inferFormalTypes(classHierarchy);
+      superTargetBuilder.inferFormalTypes(typeEnvironment);
     } else if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
       MemberBuilder? superTargetOriginBuilder = superTargetBuilder.actualOrigin;
       if (superTargetOriginBuilder is DeclaredSourceConstructorBuilder) {
-        superTargetOriginBuilder.inferFormalTypes(classHierarchy);
+        superTargetOriginBuilder.inferFormalTypes(typeEnvironment);
       }
     }
 
     int superInitializingFormalIndex = -1;
-    List<int>? positionalSuperParameters;
+    List<int?>? positionalSuperParameters;
     List<String>? namedSuperParameters;
 
-    Supertype? supertype = classHierarchy.getClassAsInstanceOf(
-        classBuilder.cls, superTarget.enclosingClass);
+    Supertype? supertype = typeEnvironment.hierarchy
+        .getClassAsInstanceOf(classBuilder.cls, superTarget.enclosingClass);
     assert(supertype != null);
     Map<TypeParameter, DartType> substitution =
         new Map<TypeParameter, DartType>.fromIterables(
@@ -366,8 +384,10 @@
                 superFormals[superInitializingFormalIndex];
             formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
                 correspondingSuperFormal.hasDeclaredInitializer;
-            if (!hasImmediatelyDeclaredInitializer) {
-              (positionalSuperParameters ??= <int>[]).add(formalIndex);
+            if (!hasImmediatelyDeclaredInitializer && !formal.isRequired) {
+              (positionalSuperParameters ??= <int?>[]).add(formalIndex);
+            } else {
+              (positionalSuperParameters ??= <int?>[]).add(null);
             }
           } else {
             // TODO(cstefantsova): Report an error.
@@ -383,7 +403,7 @@
           if (correspondingSuperFormal != null) {
             formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
                 correspondingSuperFormal.hasDeclaredInitializer;
-            if (!hasImmediatelyDeclaredInitializer) {
+            if (!hasImmediatelyDeclaredInitializer && !formal.isNamedRequired) {
               (namedSuperParameters ??= <String>[]).add(formal.name);
             }
           } else {
@@ -397,8 +417,6 @@
             type = substitute(type, substitution);
           }
           formal.variable!.type = type ?? const DynamicType();
-        } else {
-          formal.variable!.type = const DynamicType();
         }
       }
     }
@@ -408,7 +426,8 @@
           substitution, superTarget.function, constructor.function,
           positionalSuperParameters: positionalSuperParameters ?? const <int>[],
           namedSuperParameters: namedSuperParameters ?? const <String>[],
-          isOutlineNode: true));
+          isOutlineNode: true,
+          libraryBuilder: library));
     }
   }
 
@@ -461,7 +480,8 @@
 
   void addSuperParameterDefaultValueCloners(
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
-    ConstructorBuilder? superTargetBuilder = _computeSuperTargetBuilder();
+    ConstructorBuilder? superTargetBuilder =
+        _computeSuperTargetBuilder(constructor.initializers);
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
       superTargetBuilder
           .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
@@ -469,6 +489,7 @@
       superTargetBuilder
           .addSuperParameterDefaultValueCloners(synthesizedFunctionNodes);
     }
+
     synthesizedFunctionNodes.addAll(_superParameterDefaultValueCloners);
     _superParameterDefaultValueCloners.clear();
   }
@@ -523,8 +544,27 @@
             helper);
       } else {
         inferenceResult?.applyResult(initializers, _constructor);
-        initializers.add(initializer..parent = _constructor);
         superInitializer = initializer;
+
+        LocatedMessage? message = helper.checkArgumentsForFunction(
+            initializer.target.function,
+            initializer.arguments,
+            initializer.arguments.fileOffset, <TypeParameter>[]);
+        if (message != null) {
+          initializers.add(helper.buildInvalidInitializer(
+              helper.buildUnresolvedError(
+                  helper.forest.createNullLiteral(initializer.fileOffset),
+                  helper.constructorNameForDiagnostics(
+                      initializer.target.name.text),
+                  initializer.arguments,
+                  initializer.fileOffset,
+                  isSuper: true,
+                  message: message,
+                  kind: UnresolvedKind.Constructor))
+            ..parent = _constructor);
+        } else {
+          initializers.add(initializer..parent = _constructor);
+        }
       }
     } else if (initializer is RedirectingInitializer) {
       if (superInitializer != null) {
@@ -559,8 +599,28 @@
         redirectingInitializer = initializer;
       } else {
         inferenceResult?.applyResult(initializers, _constructor);
-        initializers.add(initializer..parent = _constructor);
         redirectingInitializer = initializer;
+
+        LocatedMessage? message = helper.checkArgumentsForFunction(
+            initializer.target.function,
+            initializer.arguments,
+            initializer.arguments.fileOffset, const <TypeParameter>[]);
+        if (message != null) {
+          initializers.add(helper.buildInvalidInitializer(
+              helper.buildUnresolvedError(
+                  helper.forest.createNullLiteral(initializer.fileOffset),
+                  helper.constructorNameForDiagnostics(
+                      initializer.target.name.text,
+                      isSuper: false),
+                  initializer.arguments,
+                  initializer.fileOffset,
+                  isSuper: false,
+                  message: message,
+                  kind: UnresolvedKind.Constructor))
+            ..parent = _constructor);
+        } else {
+          initializers.add(initializer..parent = _constructor);
+        }
       }
     } else if (redirectingInitializer != null) {
       int length = noLength;
@@ -618,6 +678,8 @@
     return 1;
   }
 
+  List<DeclaredSourceConstructorBuilder>? get patchesForTesting => _patches;
+
   @override
   void becomeNative(SourceLoader loader) {
     _constructor.isExternal = true;
@@ -629,7 +691,7 @@
     if (patch is DeclaredSourceConstructorBuilder) {
       if (checkPatch(patch)) {
         patch.actualOrigin = this;
-        dataForTesting?.patchForTesting = patch;
+        (_patches ??= []).add(patch);
       }
     } else {
       reportPatchMismatch(patch);
@@ -686,6 +748,22 @@
       formals = <FormalParameterBuilder>[];
     }
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInConstructorBuilder(this, typeEnvironment);
+    List<DeclaredSourceConstructorBuilder>? patches = _patches;
+    if (patches != null) {
+      for (DeclaredSourceConstructorBuilder patch in patches) {
+        patch.checkTypes(library, typeEnvironment);
+      }
+    }
+  }
 }
 
 class SyntheticSourceConstructorBuilder extends DillConstructorBuilder
@@ -760,4 +838,12 @@
       _synthesizedFunctionNode = null;
     }
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {}
 }
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 093c77c..7248daf 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
@@ -27,15 +27,20 @@
 import '../fasta_codes.dart'
     show
         LocatedMessage,
+        Severity,
+        messageEnumContainsValuesDeclaration,
         messageEnumEntryWithTypeArgumentsWithoutArguments,
+        messageEnumNonConstConstructor,
         messageNoUnnamedConstructorInObject,
         noLength,
+        templateConstructorNotFound,
         templateDuplicatedDeclaration,
         templateDuplicatedDeclarationCause,
         templateDuplicatedDeclarationSyntheticCause,
         templateEnumConstantSameNameAsEnclosing;
 
 import '../kernel/body_builder.dart';
+import '../kernel/constness.dart';
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/expression_generator_helper.dart';
 import '../kernel/kernel_helper.dart';
@@ -83,6 +88,7 @@
       this.objectType,
       this.stringType,
       SourceLibraryBuilder parent,
+      List<ConstructorReferenceBuilder> constructorReferences,
       int startCharOffset,
       int charOffset,
       int charEndOffset,
@@ -98,7 +104,7 @@
             scope,
             constructors,
             parent,
-            /* constructorReferences = */ null,
+            constructorReferences,
             startCharOffset,
             charOffset,
             charEndOffset,
@@ -113,6 +119,7 @@
       List<TypeBuilder>? interfaceBuilders,
       List<EnumConstantInfo?>? enumConstantInfos,
       SourceLibraryBuilder parent,
+      List<ConstructorReferenceBuilder> constructorReferences,
       int startCharOffset,
       int charOffset,
       int charEndOffset,
@@ -238,6 +245,20 @@
           referencesFromIndexed.lookupSetterReference(valuesName);
     }
 
+    Builder? customValuesDeclaration =
+        scope.lookupLocalMember("values", setter: false);
+    if (customValuesDeclaration != null) {
+      // Retrieve the earliest declaration for error reporting.
+      while (customValuesDeclaration?.next != null) {
+        customValuesDeclaration = customValuesDeclaration?.next;
+      }
+      parent.addProblem(
+          messageEnumContainsValuesDeclaration,
+          customValuesDeclaration!.charOffset,
+          customValuesDeclaration.fullNameForErrors.length,
+          fileUri);
+    }
+
     SourceFieldBuilder valuesBuilder = new SourceFieldBuilder(
         /* metadata = */ null,
         listType,
@@ -331,6 +352,17 @@
       members["toString"] = toStringBuilder;
     }
     String className = name;
+    final int startCharOffsetComputed =
+        metadata == null ? startCharOffset : metadata.first.charOffset;
+    scope.forEachLocalMember((name, member) {
+      if (name != "values") {
+        members[name] = member as MemberBuilder;
+      }
+    });
+    scope.forEachLocalSetter((name, member) {
+      setters[name] = member;
+    });
+
     if (enumConstantInfos != null) {
       for (int i = 0; i < enumConstantInfos.length; i++) {
         EnumConstantInfo enumConstantInfo = enumConstantInfos[i]!;
@@ -341,6 +373,18 @@
           // The existing declaration is synthetic if it has the same
           // charOffset as the enclosing enum.
           bool isSynthetic = existing.charOffset == charOffset;
+
+          // Report the error on the member that occurs later in the code.
+          int existingOffset;
+          int duplicateOffset;
+          if (existing.charOffset < enumConstantInfo.charOffset) {
+            existingOffset = existing.charOffset;
+            duplicateOffset = enumConstantInfo.charOffset;
+          } else {
+            existingOffset = enumConstantInfo.charOffset;
+            duplicateOffset = existing.charOffset;
+          }
+
           List<LocatedMessage> context = isSynthetic
               ? <LocatedMessage>[
                   templateDuplicatedDeclarationSyntheticCause
@@ -351,11 +395,10 @@
               : <LocatedMessage>[
                   templateDuplicatedDeclarationCause
                       .withArguments(name)
-                      .withLocation(
-                          parent.fileUri, existing.charOffset, name.length)
+                      .withLocation(parent.fileUri, existingOffset, name.length)
                 ];
           parent.addProblem(templateDuplicatedDeclaration.withArguments(name),
-              enumConstantInfo.charOffset, name.length, parent.fileUri,
+              duplicateOffset, name.length, parent.fileUri,
               context: context);
           enumConstantInfos[i] = null;
         } else if (name == className) {
@@ -392,14 +435,7 @@
         members[name] = fieldBuilder..next = existing;
       }
     }
-    final int startCharOffsetComputed =
-        metadata == null ? startCharOffset : metadata.first.charOffset;
-    scope.forEachLocalMember((name, member) {
-      members[name] = member as MemberBuilder;
-    });
-    scope.forEachLocalSetter((name, member) {
-      setters[name] = member;
-    });
+
     SourceEnumBuilder enumBuilder = new SourceEnumBuilder.internal(
         metadata,
         name,
@@ -420,6 +456,7 @@
         objectType,
         stringType,
         parent,
+        constructorReferences,
         startCharOffsetComputed,
         charOffset,
         charEndOffset,
@@ -435,22 +472,28 @@
     }
 
     members.forEach(setParent);
-    constructors.forEach(setParent);
+    constructorScope.local.forEach(setParent);
     selfType.bind(enumBuilder);
+
+    if (constructorScope.local.isNotEmpty) {
+      for (MemberBuilder constructorBuilder in constructorScope.local.values) {
+        if (!constructorBuilder.isFactory && !constructorBuilder.isConst) {
+          parent.addProblem(messageEnumNonConstConstructor,
+              constructorBuilder.charOffset, noLength, fileUri);
+        }
+      }
+    }
+
     return enumBuilder;
   }
 
   @override
-  TypeBuilder? get mixedInTypeBuilder => null;
+  bool get isEnum => true;
 
   @override
-  Class build(SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
-    cls.isEnum = true;
-    intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
-    stringType.resolveIn(
-        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
-    objectType.resolveIn(
-        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+  TypeBuilder? get mixedInTypeBuilder => null;
+
+  NamedTypeBuilder? _computeEnumSupertype() {
     TypeBuilder? supertypeBuilder = this.supertypeBuilder;
     NamedTypeBuilder? enumType;
 
@@ -464,6 +507,18 @@
       }
     }
     assert(enumType is NamedTypeBuilder && enumType.name == "_Enum");
+    return enumType;
+  }
+
+  @override
+  Class build(SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
+    cls.isEnum = true;
+    intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    stringType.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    objectType.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    NamedTypeBuilder? enumType = _computeEnumSupertype();
     enumType!.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
 
     listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
@@ -572,10 +627,16 @@
 
           String constructorName =
               enumConstantInfo.constructorReferenceBuilder?.suffix ?? "";
+          String fullConstructorNameForErrors =
+              enumConstantInfo.constructorReferenceBuilder?.fullNameForErrors ??
+                  name;
+          int fileOffset =
+              enumConstantInfo.constructorReferenceBuilder?.charOffset ??
+                  enumConstantInfo.charOffset;
           MemberBuilder? constructorBuilder =
-              constructorScopeBuilder[constructorName];
+              constructorScope.lookupLocalMember(constructorName);
 
-          Arguments arguments;
+          ArgumentsImpl arguments;
           List<Expression> enumSyntheticArguments = <Expression>[
             new IntLiteral(index++),
             new StringLiteral(constant),
@@ -589,67 +650,81 @@
               typeArguments.add(typeBuilder.build(library));
             }
           }
-          BodyBuilder? bodyBuilder;
-          if (enumConstantInfo.argumentsBeginToken != null ||
-              typeArgumentBuilders == null && cls.typeParameters.isNotEmpty) {
-            // We need to create a BodyBuilder in two cases: 1) if the
-            // arguments token is provided, we'll use the BodyBuilder to
+          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.
-            bodyBuilder = library.loader.createBodyBuilderForOutlineExpression(
-                library, this, this, scope, fileUri);
-            bodyBuilder.constantContext = ConstantContext.required;
-          }
-
-          if (enumConstantInfo.argumentsBeginToken != null) {
-            arguments = bodyBuilder!
-                .parseArguments(enumConstantInfo.argumentsBeginToken!);
-            bodyBuilder.performBacklogComputations(delayedActionPerformers);
-
-            arguments.positional.insertAll(0, enumSyntheticArguments);
-          } else {
-            arguments = new ArgumentsImpl(enumSyntheticArguments);
-          }
-
-          if (typeArguments != null && arguments is ArgumentsImpl) {
-            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) {
-            bodyBuilder ??= library.loader
+            // 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)
-              ..constantContext = ConstantContext.required;
-            field.buildBody(
-                classHierarchy.coreTypes,
-                bodyBuilder.buildUnresolvedError(
-                    new NullLiteral(),
-                    enumConstantInfo
-                            .constructorReferenceBuilder?.fullNameForErrors ??
-                        constructorName,
-                    arguments,
-                    enumConstantInfo.constructorReferenceBuilder?.charOffset ??
-                        enumConstantInfo.charOffset,
-                    kind: UnresolvedKind.Constructor));
-          } else {
-            Expression initializer = new ConstructorInvocation(
-                constructorBuilder.constructor, arguments,
-                isConst: true)
-              ..fileOffset = field.charOffset;
-            if (bodyBuilder != null) {
+                    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);
             }
-            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);
+            }
           }
         }
       }
@@ -658,21 +733,20 @@
     SourceProcedureBuilder toStringBuilder =
         firstMemberNamed("toString") as SourceProcedureBuilder;
 
-    TypeBuilder supertypeBuilder = this.supertypeBuilder!;
-    ClassBuilder enumClass = supertypeBuilder.declaration as ClassBuilder;
+    ClassBuilder enumClass =
+        _computeEnumSupertype()!.declaration as ClassBuilder;
     MemberBuilder? nameFieldBuilder =
         enumClass.lookupLocalMember("_name") as MemberBuilder?;
-    if (nameFieldBuilder != null) {
-      Field nameField = nameFieldBuilder.member as Field;
+    assert(nameFieldBuilder != null);
+    Field nameField = nameFieldBuilder!.member as Field;
 
-      toStringBuilder.body = new ReturnStatement(new StringConcatenation([
-        new StringLiteral("${cls.demangledName}."),
-        new InstanceGet.byReference(
-            InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
-            interfaceTargetReference: nameField.getterReference,
-            resultType: nameField.getterType),
-      ]));
-    }
+    toStringBuilder.body = new ReturnStatement(new StringConcatenation([
+      new StringLiteral("${cls.demangledName}."),
+      new InstanceGet.byReference(
+          InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
+          interfaceTargetReference: nameField.getterReference,
+          resultType: nameField.getterType),
+    ]));
 
     super.buildOutlineExpressions(library, classHierarchy,
         delayedActionPerformers, synthesizedFunctionNodes);
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 5d02635..16072e5 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
@@ -5,6 +5,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/constructor_reference_builder.dart';
@@ -28,6 +29,7 @@
 import '../type_inference/type_schema.dart';
 import '../util/helpers.dart';
 import 'name_scheme.dart';
+import 'source_class_builder.dart';
 import 'source_function_builder.dart';
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 import 'source_loader.dart' show SourceLoader;
@@ -46,6 +48,8 @@
 
   SourceFactoryBuilder? actualOrigin;
 
+  List<SourceFactoryBuilder>? _patches;
+
   SourceFactoryBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -80,8 +84,7 @@
     this.asyncModifier = asyncModifier;
   }
 
-  SourceFactoryBuilder? get patchForTesting =>
-      dataForTesting?.patchForTesting as SourceFactoryBuilder?;
+  List<SourceFactoryBuilder>? get patchesForTesting => _patches;
 
   @override
   AsyncMarker get asyncModifier => actualAsyncModifier;
@@ -215,7 +218,7 @@
     if (patch is SourceFactoryBuilder) {
       if (checkPatch(patch)) {
         patch.actualOrigin = this;
-        dataForTesting?.patchForTesting = patch;
+        (_patches ??= []).add(patch);
       }
     } else {
       reportPatchMismatch(patch);
@@ -246,6 +249,22 @@
     _finishPatch();
     return 1;
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInFunctionBuilder(this, typeEnvironment);
+    List<SourceFactoryBuilder>? patches = _patches;
+    if (patches != null) {
+      for (SourceFactoryBuilder patch in patches) {
+        patch.checkTypes(library, typeEnvironment);
+      }
+    }
+  }
 }
 
 class RedirectingFactoryBuilder extends SourceFactoryBuilder {
@@ -382,10 +401,9 @@
     List<DartType>? typeArguments = redirectingFactoryBody.typeArguments;
     Member? target = redirectingFactoryBody.target;
     if (typeArguments != null && typeArguments.any((t) => t is UnknownType)) {
-      TypeInferrerImpl inferrer = library.loader.typeInferenceEngine
-              .createLocalTypeInferrer(
-                  fileUri, classBuilder!.thisType, library, null)
-          as TypeInferrerImpl;
+      TypeInferrer inferrer = library.loader.typeInferenceEngine
+          .createLocalTypeInferrer(
+              fileUri, classBuilder!.thisType, library, null);
       inferrer.helper = library.loader.createBodyBuilderForOutlineExpression(
           library, classBuilder, this, classBuilder!.scope, fileUri);
       Builder? targetBuilder = redirectionTarget.target;
@@ -445,7 +463,8 @@
           _factoryTearOff!,
           target!,
           typeArguments ?? [],
-          _tearOffTypeParameters!));
+          _tearOffTypeParameters!,
+          library));
     }
     if (isConst && isPatch) {
       _finishPatch();
@@ -466,4 +485,14 @@
   List<DartType>? getTypeArguments() {
     return getRedirectingFactoryBody(_procedure)!.typeArguments;
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {}
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInRedirectingFactoryBuilder(this, typeEnvironment);
+  }
 }
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 5a71d1b..0f2b052 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
@@ -10,6 +10,7 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/src/legacy_erasure.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/class_builder.dart';
 import '../builder/field_builder.dart';
@@ -35,6 +36,7 @@
 import '../type_inference/type_inference_engine.dart'
     show IncludesTypeParametersNonCovariantly;
 import '../util/helpers.dart' show DelayedActionPerformer;
+import 'source_class_builder.dart';
 import 'source_member_builder.dart';
 
 class SourceFieldBuilder extends SourceMemberBuilderImpl
@@ -496,6 +498,19 @@
   @override
   List<ClassMember> get localSetters =>
       _localSetters ??= _fieldEncoding.getLocalSetters(this);
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
+    sourceClassBuilder.checkVarianceInField(
+        this, typeEnvironment, sourceClassBuilder.cls.typeParameters);
+  }
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInField(this, typeEnvironment);
+  }
 }
 
 /// Strategy pattern for creating different encodings of a declared field.
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 a0bf299..8c5da3c 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
@@ -66,6 +66,7 @@
 import '../kernel/internal_ast.dart';
 import '../kernel/kernel_helper.dart';
 import '../kernel/load_library_builder.dart';
+import '../kernel/macro.dart';
 import '../kernel/type_algorithms.dart'
     show
         NonSimplicityIssue,
@@ -95,7 +96,7 @@
 import '../operator.dart';
 import '../problems.dart' show unexpected, unhandled;
 import '../scope.dart';
-import '../type_inference/type_inferrer.dart' show TypeInferrerImpl;
+import '../type_inference/type_inferrer.dart' show TypeInferrer;
 import '../util/helpers.dart';
 import 'name_scheme.dart';
 import 'source_class_builder.dart' show SourceClassBuilder;
@@ -243,6 +244,9 @@
 
   List<SourceLibraryBuilder>? _patchLibraries;
 
+  /// `true` if this is an augmentation library.
+  final bool isAugmentation;
+
   SourceLibraryBuilder.internal(
       SourceLoader loader,
       Uri fileUri,
@@ -253,8 +257,9 @@
       Library library,
       LibraryBuilder? nameOrigin,
       Library? referencesFrom,
-      bool? referenceIsPartOwner,
-      bool isUnsupported)
+      {bool? referenceIsPartOwner,
+      required bool isUnsupported,
+      required bool isAugmentation})
       : this.fromScopes(
             loader,
             fileUri,
@@ -266,7 +271,8 @@
             library,
             nameOrigin,
             referencesFrom,
-            isUnsupported);
+            isUnsupported: isUnsupported,
+            isAugmentation: isAugmentation);
 
   SourceLibraryBuilder.fromScopes(
       this.loader,
@@ -279,7 +285,8 @@
       this.library,
       this._nameOrigin,
       this.referencesFrom,
-      this.isUnsupported)
+      {required this.isUnsupported,
+      required this.isAugmentation})
       : _languageVersion = packageLanguageVersion,
         currentTypeParameterScopeBuilder = _libraryTypeParameterScopeBuilder,
         referencesFromIndexed =
@@ -289,12 +296,12 @@
             new Scope.top()) {
     assert(
         _packageUri == null ||
-            importUri.scheme != 'package' ||
+            !importUri.isScheme('package') ||
             importUri.path.startsWith(_packageUri!.path),
         "Foreign package uri '$_packageUri' set on library with import uri "
         "'${importUri}'.");
     assert(
-        importUri.scheme != 'dart' || _packageUri == null,
+        !importUri.isScheme('dart') || _packageUri == null,
         "Package uri '$_packageUri' set on dart: library with import uri "
         "'${importUri}'.");
   }
@@ -469,7 +476,8 @@
       LibraryBuilder? nameOrigin,
       Library? referencesFrom,
       bool? referenceIsPartOwner,
-      required bool isUnsupported})
+      required bool isUnsupported,
+      required bool isAugmentation})
       : this.internal(
             loader,
             fileUri,
@@ -487,8 +495,9 @@
                   ..setLanguageVersion(packageLanguageVersion.version)),
             nameOrigin,
             referencesFrom,
-            referenceIsPartOwner,
-            isUnsupported);
+            referenceIsPartOwner: referenceIsPartOwner,
+            isUnsupported: isUnsupported,
+            isAugmentation: isAugmentation);
 
   @override
   bool get isPart => partOfName != null || partOfUri != null;
@@ -504,6 +513,29 @@
     (_patchLibraries ??= []).add(patchLibrary);
   }
 
+  /// Creates a synthesized augmentation library for the [source] code and
+  /// attach it as a patch library of this library.
+  ///
+  /// To support the parser of the [source], the library is registered as an
+  /// unparsed library on the [loader].
+  SourceLibraryBuilder createAugmentationLibrary(String source) {
+    int index = _patchLibraries?.length ?? 0;
+    Uri uri =
+        new Uri(scheme: augmentationScheme, path: '${fileUri.path}-$index');
+    SourceLibraryBuilder augmentationLibrary = new SourceLibraryBuilder(
+        fileUri: uri,
+        importUri: uri,
+        packageLanguageVersion: packageLanguageVersion,
+        loader: loader,
+        isUnsupported: false,
+        target: library,
+        origin: this,
+        isAugmentation: true);
+    addPatchLibrary(augmentationLibrary);
+    loader.registerUnparsedLibrarySource(augmentationLibrary, source);
+    return augmentationLibrary;
+  }
+
   List<NamedTypeBuilder> get unresolvedNamedTypes =>
       _libraryTypeParameterScopeBuilder.unresolvedNamedTypes;
 
@@ -638,7 +670,7 @@
     return previous;
   }
 
-  bool uriIsValid(Uri uri) => uri.scheme != MALFORMED_URI_SCHEME;
+  bool uriIsValid(Uri uri) => !uri.isScheme(MALFORMED_URI_SCHEME);
 
   Uri resolve(Uri baseUri, String? uri, int uriOffset, {isPart: false}) {
     if (uri == null) {
@@ -657,7 +689,7 @@
       return new Uri(
           scheme: MALFORMED_URI_SCHEME, query: Uri.encodeQueryComponent(uri));
     }
-    if (isPart && baseUri.scheme == "dart") {
+    if (isPart && baseUri.isScheme("dart")) {
       // Resolve using special rules for dart: URIs
       return resolveRelativeUri(baseUri, parsedUri);
     } else {
@@ -727,16 +759,17 @@
   }
 
   void addImport(
-      List<MetadataBuilder>? metadata,
-      String uri,
-      List<Configuration>? configurations,
-      String? prefix,
-      List<CombinatorBuilder>? combinators,
-      bool deferred,
-      int charOffset,
-      int prefixCharOffset,
-      int uriOffset,
-      int importIndex) {
+      {required List<MetadataBuilder>? metadata,
+      required bool isAugmentationImport,
+      required String uri,
+      required List<Configuration>? configurations,
+      required String? prefix,
+      required List<CombinatorBuilder>? combinators,
+      required bool deferred,
+      required int charOffset,
+      required int prefixCharOffset,
+      required int uriOffset,
+      required int importIndex}) {
     if (configurations != null) {
       for (Configuration config in configurations) {
         if (loader.getLibrarySupportValue(config.dottedName) ==
@@ -765,11 +798,23 @@
       }
     } else {
       resolvedUri = resolve(this.importUri, uri, uriOffset);
-      builder = loader.read(resolvedUri, uriOffset, accessor: this);
+      builder = loader.read(resolvedUri, uriOffset,
+          origin: isAugmentationImport ? this : null,
+          accessor: this,
+          isAugmentation: isAugmentationImport);
     }
 
-    imports.add(new Import(this, builder, deferred, prefix, combinators,
-        configurations, charOffset, prefixCharOffset, importIndex,
+    imports.add(new Import(
+        this,
+        builder,
+        isAugmentationImport,
+        deferred,
+        prefix,
+        combinators,
+        configurations,
+        charOffset,
+        prefixCharOffset,
+        importIndex,
         nativeImportPath: nativePath));
   }
 
@@ -1668,7 +1713,7 @@
     if (className != "Function") {
       return;
     }
-    if (decType == "class" && importUri.scheme == "dart") {
+    if (decType == "class" && importUri.isScheme("dart")) {
       // Allow declaration of class Function in the sdk.
       return;
     }
@@ -1736,7 +1781,8 @@
       int nameOffset,
       int endOffset,
       int supertypeOffset,
-      {required bool isMacro}) {
+      {required bool isMacro,
+      required bool isAugmentation}) {
     _addClass(
         TypeParameterScopeKind.classDeclaration,
         metadata,
@@ -1749,7 +1795,8 @@
         nameOffset,
         endOffset,
         supertypeOffset,
-        isMacro: isMacro);
+        isMacro: isMacro,
+        isAugmentation: isAugmentation);
   }
 
   void addMixinDeclaration(
@@ -1762,7 +1809,8 @@
       int startOffset,
       int nameOffset,
       int endOffset,
-      int supertypeOffset) {
+      int supertypeOffset,
+      {required bool isAugmentation}) {
     _addClass(
         TypeParameterScopeKind.mixinDeclaration,
         metadata,
@@ -1775,7 +1823,8 @@
         nameOffset,
         endOffset,
         supertypeOffset,
-        isMacro: false);
+        isMacro: false,
+        isAugmentation: isAugmentation);
   }
 
   void _addClass(
@@ -1790,7 +1839,8 @@
       int nameOffset,
       int endOffset,
       int supertypeOffset,
-      {required bool isMacro}) {
+      {required bool isMacro,
+      required bool isAugmentation}) {
     _checkBadFunctionDeclUse(className, kind, nameOffset);
     _checkBadFunctionParameter(typeVariables);
     // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
@@ -1828,7 +1878,9 @@
         typeVariables,
         applyMixins(supertype, startOffset, nameOffset, endOffset, className,
             isMixinDeclaration,
-            typeVariables: typeVariables, isMacro: false),
+            typeVariables: typeVariables,
+            isMacro: false,
+            isAugmentation: false),
         interfaces,
         // TODO(johnniwinther): Add the `on` clause types of a mixin declaration
         // here.
@@ -1842,7 +1894,8 @@
         endOffset,
         _currentClassReferencesFromIndexed,
         isMixinDeclaration: isMixinDeclaration,
-        isMacro: isMacro);
+        isMacro: isMacro,
+        isAugmentation: isAugmentation);
 
     constructorReferences.clear();
     Map<String, TypeVariableBuilder>? typeVariablesByName =
@@ -2103,7 +2156,8 @@
       List<TypeVariableBuilder>? typeVariables,
       int modifiers: 0,
       List<TypeBuilder>? interfaces,
-      required bool isMacro}) {
+      required bool isMacro,
+      required bool isAugmentation}) {
     if (name == null) {
       // The following parameters should only be used when building a named
       // mixin application.
@@ -2322,7 +2376,8 @@
             charEndOffset,
             referencesFromIndexedClass,
             mixedInTypeBuilder: isMixinDeclaration ? null : mixin,
-            isMacro: isNamedMixinApplication && isMacro);
+            isMacro: isNamedMixinApplication && isMacro,
+            isAugmentation: isNamedMixinApplication && isAugmentation);
         // TODO(ahe, kmillikin): Should always be true?
         // pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart can't
         // handle that :(
@@ -2350,7 +2405,8 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      {required bool isMacro}) {
+      {required bool isMacro,
+      required bool isAugmentation}) {
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name)
         .resolveNamedTypes(typeVariables, this);
@@ -2361,7 +2417,8 @@
         typeVariables: typeVariables,
         modifiers: modifiers,
         interfaces: interfaces,
-        isMacro: isMacro)!;
+        isMacro: isMacro,
+        isAugmentation: isAugmentation)!;
     checkTypeVariables(typeVariables, supertype.declaration);
   }
 
@@ -2816,10 +2873,13 @@
         typeVariables,
         applyMixins(supertypeBuilder, startCharOffset, charOffset,
             charEndOffset, name, /* isMixinDeclaration = */ false,
-            typeVariables: typeVariables, isMacro: false),
+            typeVariables: typeVariables,
+            isMacro: false,
+            isAugmentation: false),
         interfaceBuilders,
         enumConstantInfos,
         this,
+        new List<ConstructorReferenceBuilder>.of(constructorReferences),
         startCharOffset,
         charOffset,
         charEndOffset,
@@ -2831,6 +2891,7 @@
             debugName: "enum $name",
             isModifiable: false),
         new ConstructorScope(name, constructors));
+    constructorReferences.clear();
 
     Map<String, TypeVariableBuilder>? typeVariablesByName =
         checkTypeVariables(typeVariables, enumBuilder);
@@ -3156,9 +3217,9 @@
         preferred = declaration;
       } else if (other is LoadLibraryBuilder) {
         preferred = other;
-      } else if (otherUri.scheme == "dart" && uri.scheme != "dart") {
+      } else if (otherUri.isScheme("dart") && !uri.isScheme("dart")) {
         preferred = declaration;
-      } else if (uri.scheme == "dart" && otherUri.scheme != "dart") {
+      } else if (uri.isScheme("dart") && !otherUri.isScheme("dart")) {
         preferred = other;
       }
     }
@@ -3648,7 +3709,7 @@
           count += computeDefaultTypesForVariables(declaration.typeVariables,
               inErrorRecovery: issues.isNotEmpty);
 
-          declaration.constructors.forEach((String name, Builder member) {
+          declaration.constructorScope.forEach((String name, Builder member) {
             List<FormalParameterBuilder>? formals;
             if (member is SourceFactoryBuilder) {
               assert(member.isFactory,
@@ -3847,9 +3908,9 @@
         // import it into the patch library. This ensures that the origin
         // library is in scope of the patch library.
         if (isSetter) {
-          scopeBuilder.addSetter(name, member as MemberBuilder);
+          scope.addLocalMember(name, member as MemberBuilder, setter: true);
         } else {
-          scopeBuilder.addMember(name, member);
+          scope.addLocalMember(name, member, setter: false);
         }
       }
     }
@@ -3859,9 +3920,11 @@
       Builder member = patchDeclarations.current;
       // We need to inject all non-patch members into the origin library. This
       // should only apply to private members.
+      // For augmentation libraries, all members are injected into the origin
+      // library, regardless of privacy.
       if (member.isPatch) {
         // Ignore patches.
-      } else if (name.startsWith("_")) {
+      } else if (name.startsWith("_") || isAugmentation) {
         origin.injectMemberFromPatch(name, member);
       } else {
         origin.exportMemberFromPatch(name, member);
@@ -3891,15 +3954,15 @@
   void injectMemberFromPatch(String name, Builder member) {
     if (member.isSetter) {
       assert(scope.lookupLocalMember(name, setter: true) == null);
-      scopeBuilder.addSetter(name, member as MemberBuilder);
+      scope.addLocalMember(name, member as MemberBuilder, setter: true);
     } else {
       assert(scope.lookupLocalMember(name, setter: false) == null);
-      scopeBuilder.addMember(name, member);
+      scope.addLocalMember(name, member, setter: false);
     }
   }
 
   void exportMemberFromPatch(String name, Builder member) {
-    if (importUri.scheme != "dart" || !importUri.path.startsWith("_")) {
+    if (!importUri.isScheme("dart") || !importUri.path.startsWith("_")) {
       addProblem(templatePatchInjectionFailed.withArguments(name, importUri),
           member.charOffset, noLength, member.fileUri);
     }
@@ -4379,7 +4442,7 @@
       DartType receiverType,
       TypeEnvironment typeEnvironment,
       ClassHierarchy hierarchy,
-      TypeInferrerImpl typeInferrer,
+      TypeInferrer typeInferrer,
       Name name,
       Member? interfaceTarget,
       Arguments arguments,
@@ -4456,7 +4519,7 @@
   void checkBoundsInFunctionInvocation(
       TypeEnvironment typeEnvironment,
       ClassHierarchy hierarchy,
-      TypeInferrerImpl typeInferrer,
+      TypeInferrer typeInferrer,
       FunctionType functionType,
       String? localName,
       Arguments arguments,
@@ -4491,7 +4554,7 @@
   void checkBoundsInInstantiation(
       TypeEnvironment typeEnvironment,
       ClassHierarchy hierarchy,
-      TypeInferrerImpl typeInferrer,
+      TypeInferrer typeInferrer,
       FunctionType functionType,
       List<DartType> typeArguments,
       Uri fileUri,
@@ -4536,9 +4599,9 @@
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is SourceFieldBuilder) {
-        checkTypesInField(declaration, typeEnvironment);
+        declaration.checkTypes(this, typeEnvironment);
       } else if (declaration is SourceProcedureBuilder) {
-        checkTypesInFunctionBuilder(declaration, typeEnvironment);
+        declaration.checkTypes(this, typeEnvironment);
         if (declaration.isGetter) {
           Builder? setterDeclaration =
               scope.lookupLocalMember(declaration.name, setter: true);
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 97db119..88c7198 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -8,6 +8,9 @@
 import 'dart:convert' show utf8;
 import 'dart:typed_data' show Uint8List;
 
+import 'package:_fe_analyzer_shared/src/parser/forwarding_listener.dart'
+    show ForwardingListener;
+
 import 'package:_fe_analyzer_shared/src/macros/executor.dart'
     show MacroExecutor;
 import 'package:_fe_analyzer_shared/src/parser/class_member_parser.dart'
@@ -23,6 +26,9 @@
         ScannerResult,
         Token,
         scan;
+import 'package:front_end/src/fasta/kernel/benchmarker.dart'
+    show BenchmarkSubdivides;
+import 'package:front_end/src/fasta/source/source_type_alias_builder.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart'
     show ClassHierarchy, HandleAmbiguousSupertypes;
@@ -48,6 +54,7 @@
 import '../builder/member_builder.dart';
 import '../builder/modifier_builder.dart';
 import '../builder/named_type_builder.dart';
+import '../builder/prefix_builder.dart';
 import '../builder/procedure_builder.dart';
 import '../builder/type_alias_builder.dart';
 import '../builder/type_builder.dart';
@@ -86,6 +93,8 @@
 import 'source_class_builder.dart' show SourceClassBuilder;
 import 'source_constructor_builder.dart';
 import 'source_enum_builder.dart';
+import 'source_extension_builder.dart';
+import 'source_factory_builder.dart';
 import 'source_field_builder.dart';
 import 'source_library_builder.dart'
     show
@@ -156,7 +165,8 @@
 
   List<SourceLibraryBuilder>? _sourceLibraryBuilders;
 
-  final Queue<LibraryBuilder> _unparsedLibraries = new Queue<LibraryBuilder>();
+  final Queue<SourceLibraryBuilder> _unparsedLibraries =
+      new Queue<SourceLibraryBuilder>();
 
   final List<Library> libraries = <Library>[];
 
@@ -261,7 +271,7 @@
 
   void registerLibraryBuilder(LibraryBuilder libraryBuilder) {
     Uri uri = libraryBuilder.importUri;
-    if (uri.scheme == "dart" && uri.path == "core") {
+    if (uri.isScheme("dart") && uri.path == "core") {
       _coreLibrary = libraryBuilder;
     }
     _builders[uri] = libraryBuilder;
@@ -311,7 +321,8 @@
       required LanguageVersion packageLanguageVersion,
       SourceLibraryBuilder? origin,
       Library? referencesFrom,
-      bool? referenceIsPartOwner}) {
+      bool? referenceIsPartOwner,
+      bool isAugmentation: false}) {
     return new SourceLibraryBuilder(
         importUri: importUri,
         fileUri: fileUri,
@@ -322,8 +333,9 @@
         referencesFrom: referencesFrom,
         referenceIsPartOwner: referenceIsPartOwner,
         isUnsupported: origin?.library.isUnsupported ??
-            importUri.scheme == 'dart' &&
-                !target.uriTranslator.isLibrarySupported(importUri.path));
+            importUri.isScheme('dart') &&
+                !target.uriTranslator.isLibrarySupported(importUri.path),
+        isAugmentation: isAugmentation);
   }
 
   /// Return `"true"` if the [dottedName] is a 'dart.library.*' qualifier for a
@@ -353,11 +365,12 @@
       Uri? fileUri,
       SourceLibraryBuilder? origin,
       Library? referencesFrom,
-      bool? referenceIsPartOwner) {
+      bool? referenceIsPartOwner,
+      bool isAugmentation) {
     if (fileUri != null &&
-        (fileUri.scheme == "dart" ||
-            fileUri.scheme == "package" ||
-            fileUri.scheme == "dart-ext")) {
+        (fileUri.isScheme("dart") ||
+            fileUri.isScheme("package") ||
+            fileUri.isScheme("dart-ext"))) {
       fileUri = null;
     }
     package_config.Package? packageForLanguageVersion;
@@ -369,7 +382,7 @@
               new Uri(
                   scheme: untranslatableUriScheme,
                   path: Uri.encodeComponent("$uri"));
-          if (uri.scheme == "package") {
+          if (uri.isScheme("package")) {
             packageForLanguageVersion = target.uriTranslator.getPackage(uri);
           } else {
             packageForLanguageVersion =
@@ -392,8 +405,8 @@
     Message? packageLanguageVersionProblem;
     if (packageForLanguageVersion != null) {
       Uri importUri = origin?.importUri ?? uri;
-      if (importUri.scheme != 'dart' &&
-          importUri.scheme != 'package' &&
+      if (!importUri.isScheme('dart') &&
+          !importUri.isScheme('package') &&
           // ignore: unnecessary_null_comparison
           packageForLanguageVersion.name != null) {
         packageUri =
@@ -433,7 +446,8 @@
         packageLanguageVersion: packageLanguageVersion,
         origin: origin,
         referencesFrom: referencesFrom,
-        referenceIsPartOwner: referenceIsPartOwner);
+        referenceIsPartOwner: referenceIsPartOwner,
+        isAugmentation: isAugmentation);
     if (packageLanguageVersionProblem != null) {
       libraryBuilder.addPostponedProblem(
           packageLanguageVersionProblem, 0, noLength, libraryBuilder.fileUri);
@@ -451,7 +465,7 @@
     if (target.backendTarget.mayDefineRestrictedType(libraryUri)) {
       libraryBuilder.mayImplementRestrictedTypes = true;
     }
-    if (uri.scheme == "dart") {
+    if (uri.isScheme("dart")) {
       target.readPatchFiles(libraryBuilder);
     }
     _unparsedLibraries.addLast(libraryBuilder);
@@ -512,7 +526,7 @@
   }
 
   void _checkForDartCore(Uri uri, LibraryBuilder libraryBuilder) {
-    if (uri.scheme == "dart") {
+    if (uri.isScheme("dart")) {
       if (uri.path == "core") {
         _coreLibrary = libraryBuilder;
       } else if (uri.path == "typed_data") {
@@ -545,12 +559,14 @@
       required LibraryBuilder accessor,
       LibraryBuilder? origin,
       Library? referencesFrom,
-      bool? referenceIsPartOwner}) {
+      bool? referenceIsPartOwner,
+      bool isAugmentation: false}) {
     LibraryBuilder libraryBuilder = _read(uri,
         fileUri: fileUri,
         origin: origin,
         referencesFrom: referencesFrom,
-        referenceIsPartOwner: referenceIsPartOwner);
+        referenceIsPartOwner: referenceIsPartOwner,
+        isAugmentation: isAugmentation);
     libraryBuilder.recordAccess(charOffset, noLength, accessor.fileUri);
     if (!_hasLibraryAccess(imported: uri, importer: accessor.importUri) &&
         !accessor.isPatch) {
@@ -591,7 +607,7 @@
   }
 
   bool _hasLibraryAccess({required Uri imported, required Uri? importer}) {
-    if (imported.scheme == "dart" && imported.path.startsWith("_")) {
+    if (imported.isScheme("dart") && imported.path.startsWith("_")) {
       if (importer == null) {
         return false;
       } else {
@@ -606,7 +622,8 @@
       {Uri? fileUri,
       LibraryBuilder? origin,
       Library? referencesFrom,
-      bool? referenceIsPartOwner}) {
+      bool? referenceIsPartOwner,
+      bool isAugmentation: false}) {
     LibraryBuilder? libraryBuilder = _builders[uri];
     if (libraryBuilder == null) {
       if (target.dillTarget.isLoaded) {
@@ -618,7 +635,8 @@
             fileUri,
             origin as SourceLibraryBuilder?,
             referencesFrom,
-            referenceIsPartOwner);
+            referenceIsPartOwner,
+            isAugmentation);
       }
       _builders[uri] = libraryBuilder;
     }
@@ -636,9 +654,9 @@
     }
   }
 
-  Future<Null> buildBodies() async {
+  Future<Null> buildBodies(List<SourceLibraryBuilder> libraryBuilders) async {
     assert(_coreLibrary != null);
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       currentUriForCrashReporting = library.importUri;
       await buildBody(library);
     }
@@ -799,6 +817,7 @@
 
   Future<Token> tokenize(SourceLibraryBuilder library,
       {bool suppressLexicalErrors: false}) async {
+    target.benchmarker?.beginSubdivide(BenchmarkSubdivides.tokenize);
     Uri fileUri = library.fileUri;
 
     // Lookup the file URI in the cache.
@@ -806,17 +825,18 @@
 
     if (bytes == null) {
       // Error recovery.
-      if (fileUri.scheme == untranslatableUriScheme) {
+      if (fileUri.isScheme(untranslatableUriScheme)) {
         Message message =
             templateUntranslatableUri.withArguments(library.importUri);
         library.addProblemAtAccessors(message);
         bytes = synthesizeSourceForMissingFile(library.importUri, null);
       } else if (!fileUri.hasScheme) {
+        target.benchmarker?.endSubdivide();
         return internalProblem(
             templateInternalProblemUriMissingScheme.withArguments(fileUri),
             -1,
             library.importUri);
-      } else if (fileUri.scheme == SourceLibraryBuilder.MALFORMED_URI_SCHEME) {
+      } else if (fileUri.isScheme(SourceLibraryBuilder.MALFORMED_URI_SCHEME)) {
         library.addProblemAtAccessors(messageExpectedUri);
         bytes = synthesizeSourceForMissingFile(library.importUri, null);
       }
@@ -862,7 +882,8 @@
             enableNonNullable: target.isExperimentEnabledInLibraryByVersion(
                 ExperimentalFlag.nonNullable,
                 library.importUri,
-                library.packageLanguageVersion.version)),
+                library.packageLanguageVersion.version),
+            forAugmentationLibrary: library.isAugmentation),
         languageVersionChanged:
             (Scanner scanner, LanguageVersionToken version) {
       if (!suppressLexicalErrors) {
@@ -906,6 +927,7 @@
       }
       token = token.next!;
     }
+    target.benchmarker?.endSubdivide();
     return token;
   }
 
@@ -960,12 +982,25 @@
     _typeInferenceEngine!.typeDependencies[member] = typeDependency;
   }
 
+  /// Registers the [library] as unparsed with the given [source] code.
+  ///
+  /// This is used for creating synthesized augmentation libraries.
+  void registerUnparsedLibrarySource(
+      SourceLibraryBuilder library, String source) {
+    List<int> codeUnits = source.codeUnits;
+    Uint8List bytes = new Uint8List(codeUnits.length + 1);
+    bytes.setRange(0, codeUnits.length, codeUnits);
+    sourceBytes[library.fileUri] = bytes;
+    _unparsedLibraries.addLast(library);
+  }
+
+  /// Runs the [OutlineBuilder] on the source of all [_unparsedLibraries].
   Future<void> buildOutlines() async {
     _ensureCoreLibrary();
     while (_unparsedLibraries.isNotEmpty) {
-      LibraryBuilder library = _unparsedLibraries.removeFirst();
+      SourceLibraryBuilder library = _unparsedLibraries.removeFirst();
       currentUriForCrashReporting = library.importUri;
-      await buildOutline(library as SourceLibraryBuilder);
+      await buildOutline(library);
     }
     currentUriForCrashReporting = null;
     logSummary(outlineSummaryTemplate);
@@ -1023,7 +1058,7 @@
           continue;
         }
       }
-      if (libraryBuilder.importUri.scheme == 'package') {
+      if (libraryBuilder.importUri.isScheme('package')) {
         (libraryByPackage[null] ??= []).add(libraryBuilder);
       } else {
         if (emitNonPackageErrors) {
@@ -1095,7 +1130,30 @@
     // time we suppress lexical errors.
     Token tokens = await tokenize(library, suppressLexicalErrors: true);
     // ignore: unnecessary_null_comparison
-    if (tokens == null) return;
+    if (tokens == null) {
+      return;
+    }
+
+    if (target.benchmarker != null) {
+      // When benchmarking we do extra parsing on it's own to get a timing of
+      // how much time is spent on the actual parsing (as opposed to the
+      // building of what's parsed).
+      {
+        target.benchmarker?.beginSubdivide(
+            BenchmarkSubdivides.body_buildBody_benchmark_specific_diet_parser);
+        DietParser parser = new DietParser(new ForwardingListener());
+        parser.parseUnit(tokens);
+        target.benchmarker?.endSubdivide();
+      }
+      {
+        target.benchmarker?.beginSubdivide(
+            BenchmarkSubdivides.body_buildBody_benchmark_specific_parser);
+        Parser parser = new Parser(new ForwardingListener());
+        parser.parseUnit(tokens);
+        target.benchmarker?.endSubdivide();
+      }
+    }
+
     DietListener listener = createDietListener(library);
     DietParser parser = new DietParser(listener);
     parser.parseUnit(tokens);
@@ -1252,7 +1310,8 @@
     ticker.logMs("Applied patches");
   }
 
-  void computeLibraryScopes() {
+  /// Compute library scopes for [libraryBuilders].
+  void computeLibraryScopes(Iterable<LibraryBuilder> libraryBuilders) {
     Set<LibraryBuilder> exporters = new Set<LibraryBuilder>();
     Set<LibraryBuilder> exportees = new Set<LibraryBuilder>();
     for (LibraryBuilder library in libraryBuilders) {
@@ -1343,9 +1402,10 @@
     });
   }
 
-  void resolveTypes() {
+  /// Resolve [NamedTypeBuilder]s in [libraryBuilders].
+  void resolveTypes(Iterable<SourceLibraryBuilder> libraryBuilders) {
     int typeCount = 0;
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       typeCount += library.resolveTypes();
     }
     ticker.logMs("Resolved $typeCount types");
@@ -1354,10 +1414,8 @@
   /// Computes which macro declarations that needs to be precompiled in order
   /// to support macro application during compilation.
   ///
-  /// If no macros need precompilation, `null` is returned. Otherwise a map
-  /// from library uris to macro class names and the names of constructor their
-  /// constructors is returned.
-  Map<Uri, Map<String, List<String>>>? computeMacroDeclarations() {
+  /// If no macros need precompilation, `null` is returned.
+  NeededPrecompilations? computeMacroDeclarations() {
     if (!enableMacros) return null;
 
     LibraryBuilder? macroLibraryBuilder = lookupLibraryBuilder(macroLibraryUri);
@@ -1496,7 +1554,7 @@
             Map<String, List<String>>? constructorMap;
             for (ClassBuilder macroClass in macroClasses) {
               List<String> constructors =
-                  macroClass.constructors.local.keys.toList();
+                  macroClass.constructorScope.local.keys.toList();
               if (constructors.isNotEmpty) {
                 // TODO(johnniwinther): If there is no constructor here, it
                 // means the macro had no _explicit_ constructors. Since macro
@@ -1522,7 +1580,7 @@
           // be more layers but we'll compute these at the next attempt at
           // compilation, when this layer has been precompiled.
           // TODO(johnniwinther): Use this to trigger a precompile step.
-          return neededPrecompilations;
+          return new NeededPrecompilations(neededPrecompilations);
         }
       }
     }
@@ -1549,7 +1607,7 @@
               scope: classBuilder.scope,
               fileUri: classBuilder.fileUri,
               metadataBuilders: classBuilder.metadata);
-          builder.forEach((String name, Builder memberBuilder) {
+          classBuilder.forEach((String name, Builder memberBuilder) {
             if (memberBuilder is SourceProcedureBuilder) {
               List<MacroApplication>? macroApplications = prebuildAnnotations(
                   enclosingLibrary: libraryBuilder,
@@ -1570,6 +1628,9 @@
                 classMacroApplicationData.memberApplications[memberBuilder] =
                     macroApplications;
               }
+            } else {
+              throw new UnsupportedError("Unexpected class member "
+                  "$memberBuilder (${memberBuilder.runtimeType})");
             }
           });
           classBuilder.forEachConstructor((String name, Builder memberBuilder) {
@@ -1583,6 +1644,19 @@
                 classMacroApplicationData.memberApplications[memberBuilder] =
                     macroApplications;
               }
+            } else if (memberBuilder is SourceFactoryBuilder) {
+              List<MacroApplication>? macroApplications = prebuildAnnotations(
+                  enclosingLibrary: libraryBuilder,
+                  scope: classBuilder.scope,
+                  fileUri: memberBuilder.fileUri,
+                  metadataBuilders: memberBuilder.metadata);
+              if (macroApplications != null) {
+                classMacroApplicationData.memberApplications[memberBuilder] =
+                    macroApplications;
+              }
+            } else {
+              throw new UnsupportedError("Unexpected constructor "
+                  "$memberBuilder (${memberBuilder.runtimeType})");
             }
           });
 
@@ -1611,6 +1685,13 @@
             libraryMacroApplicationData.memberApplications[builder] =
                 macroApplications;
           }
+        } else if (builder is PrefixBuilder ||
+            builder is SourceExtensionBuilder ||
+            builder is SourceTypeAliasBuilder) {
+          // Macro applications are not supported.
+        } else {
+          throw new UnsupportedError("Unexpected library member "
+              "$builder (${builder.runtimeType})");
         }
       }
       if (libraryMacroApplicationData.classData.isNotEmpty ||
@@ -1648,9 +1729,9 @@
     ticker.logMs("Finished forwarders for $count procedures");
   }
 
-  void resolveConstructors() {
+  void resolveConstructors(List<SourceLibraryBuilder> libraryBuilders) {
     int count = 0;
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       count += library.resolveConstructors();
     }
     ticker.logMs("Resolved $count constructors");
@@ -1664,17 +1745,19 @@
     }
   }
 
-  void finishTypeVariables(ClassBuilder object, TypeBuilder dynamicType) {
+  void finishTypeVariables(Iterable<SourceLibraryBuilder> libraryBuilders,
+      ClassBuilder object, TypeBuilder dynamicType) {
     int count = 0;
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       count += library.finishTypeVariables(object, dynamicType);
     }
     ticker.logMs("Resolved $count type-variable bounds");
   }
 
-  void computeVariances() {
+  /// Computes variances of type parameters on typedefs in [libraryBuilders].
+  void computeVariances(Iterable<SourceLibraryBuilder> libraryBuilders) {
     int count = 0;
-    for (SourceLibraryBuilder library in sourceLibraryBuilders) {
+    for (SourceLibraryBuilder library in libraryBuilders) {
       count += library.computeVariances();
     }
     ticker.logMs("Computed variances of $count type variables");
@@ -1795,7 +1878,7 @@
 
   void _checkConstructorsForMixin(
       SourceClassBuilder cls, ClassBuilder builder) {
-    for (Builder constructor in builder.constructors.local.values) {
+    for (Builder constructor in builder.constructorScope.local.values) {
       if (constructor.isConstructor && !constructor.isSynthetic) {
         cls.addProblem(
             templateIllegalMixinDueToConstructors
@@ -1940,7 +2023,7 @@
     for (LibraryBuilder libraryBuilder in libraryBuilders) {
       if (!libraryBuilder.isPatch &&
           (libraryBuilder.loader == this ||
-              libraryBuilder.importUri.scheme == "dart" ||
+              libraryBuilder.importUri.isScheme("dart") ||
               libraryBuilder == this.first)) {
         if (libraries.add(libraryBuilder.library)) {
           workList.add(libraryBuilder.library);
@@ -2023,7 +2106,8 @@
       List<SourceClassBuilder> sourceClasses, Class enumClass) {
     for (SourceClassBuilder builder in sourceClasses) {
       if (builder.library.loader == this && !builder.isPatch) {
-        builder.checkSupertypes(coreTypes, hierarchyBuilder, enumClass);
+        builder.checkSupertypes(
+            coreTypes, hierarchyBuilder, enumClass, _macroClassBuilder?.cls);
       }
     }
     ticker.logMs("Checked supertypes");
@@ -2110,10 +2194,14 @@
       library.buildOutlineExpressions(
           classHierarchy, synthesizedFunctionNodes, delayedActionPerformers);
     }
+
+    target.benchmarker
+        ?.beginSubdivide(BenchmarkSubdivides.delayedActionPerformer);
     for (DelayedActionPerformer delayedActionPerformer
         in delayedActionPerformers) {
       delayedActionPerformer.performDelayedActions();
     }
+    target.benchmarker?.endSubdivide();
     ticker.logMs("Build outline expressions");
   }
 
@@ -2134,7 +2222,8 @@
   }
 
   void createTypeInferenceEngine() {
-    _typeInferenceEngine = new TypeInferenceEngineImpl(instrumentation);
+    _typeInferenceEngine =
+        new TypeInferenceEngineImpl(instrumentation, target.benchmarker);
   }
 
   void performTopLevelInference(List<SourceClassBuilder> sourceClasses) {
@@ -2489,9 +2578,11 @@
 }
 
 abstract class Enum {
+  String get _name;
 }
 
 abstract class _Enum {
+  final String _name;
 }
 
 class String {}
@@ -2541,10 +2632,12 @@
 
 _asyncThenWrapperHelper(continuation) {}
 
-_awaitHelper(object, thenCallback, errorCallback, awaiter) {}
+_awaitHelper(object, thenCallback, errorCallback) {}
 
 _completeOnAsyncReturn(_future, value, async_jump_var) {}
 
+_completeWithNoFutureOnAsyncReturn(_future, value, async_jump_var) {}
+
 _completeOnAsyncError(_future, e, st, async_jump_var) {}
 
 class _AsyncStarStreamController {
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 edfb1a1..f4cf938 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
@@ -6,6 +6,7 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../../base/common.dart';
 import '../builder/builder.dart';
@@ -13,11 +14,13 @@
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
 import '../kernel/kernel_helper.dart';
+import '../modifier.dart';
 import '../problems.dart' show unsupported;
 import '../source/source_library_builder.dart';
 import '../type_inference/type_inference_engine.dart'
     show InferenceDataForTesting;
 import '../util/helpers.dart' show DelayedActionPerformer;
+import 'source_class_builder.dart';
 
 abstract class SourceMemberBuilder implements MemberBuilder {
   MemberDataForTesting? get dataForTesting;
@@ -31,6 +34,23 @@
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes);
+
+  /// Checks the variance of type parameters [sourceClassBuilder] used in the
+  /// signature of this member.
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment);
+
+  /// Checks the signature types of this member.
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment);
+
+  /// Returns `true` if this member is an augmentation.
+  bool get isAugmentation;
+
+  /// Returns `true` if this member is a member declared in an augmentation
+  /// library that conflicts with a member in the origin library.
+  bool get isConflictingAugmentationMember;
+  void set isConflictingAugmentationMember(bool value);
 }
 
 mixin SourceMemberBuilderMixin implements SourceMemberBuilder {
@@ -43,6 +63,18 @@
       SourceLibraryBuilder library, void Function(Member, BuiltMemberKind) f) {
     assert(false, "Unexpected call to $runtimeType.buildMembers.");
   }
+
+  @override
+  bool get isAugmentation => false;
+
+  @override
+  bool get isConflictingAugmentationMember => false;
+
+  @override
+  void set isConflictingAugmentationMember(bool value) {
+    assert(false,
+        "Unexpected call to $runtimeType.isConflictingAugmentationMember=");
+  }
 }
 
 abstract class SourceMemberBuilderImpl extends MemberBuilderImpl
@@ -57,6 +89,9 @@
 
   bool get isRedirectingGenerativeConstructor => false;
 
+  @override
+  bool get isAugmentation => modifiers & augmentMask != 0;
+
   bool? _isConflictingSetter;
 
   @override
@@ -70,6 +105,20 @@
     _isConflictingSetter = value;
   }
 
+  bool? _isConflictingAugmentationMember;
+
+  @override
+  bool get isConflictingAugmentationMember {
+    return _isConflictingAugmentationMember ??= false;
+  }
+
+  @override
+  void set isConflictingAugmentationMember(bool value) {
+    assert(_isConflictingAugmentationMember == null,
+        '$this.isConflictingAugmentationMember has already been fixed.');
+    _isConflictingAugmentationMember = value;
+  }
+
   // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface.
   @override
   ProcedureKind? get kind => unsupported("kind", charOffset, fileUri);
@@ -114,8 +163,6 @@
 
 class MemberDataForTesting {
   final InferenceDataForTesting inferenceData = new InferenceDataForTesting();
-
-  MemberBuilder? patchForTesting;
 }
 
 /// If the name of [member] is private, update it to use the library reference
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 44af31f..5695450 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
@@ -4,6 +4,7 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_algebra.dart';
+import 'package:kernel/type_environment.dart';
 
 import '../builder/builder.dart';
 import '../builder/extension_builder.dart';
@@ -19,6 +20,7 @@
 import '../source/name_scheme.dart';
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 import '../source/source_loader.dart' show SourceLoader;
+import 'source_class_builder.dart';
 import 'source_function_builder.dart';
 import 'source_member_builder.dart';
 
@@ -52,6 +54,8 @@
 
   SourceProcedureBuilder? actualOrigin;
 
+  List<SourceProcedureBuilder>? _patches;
+
   SourceProcedureBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -104,8 +108,7 @@
     }
   }
 
-  ProcedureBuilder? get patchForTesting =>
-      dataForTesting?.patchForTesting as ProcedureBuilder?;
+  List<SourceProcedureBuilder>? get patchesForTesting => _patches;
 
   @override
   AsyncMarker get asyncModifier => actualAsyncModifier;
@@ -456,7 +459,7 @@
     if (patch is SourceProcedureBuilder) {
       if (checkPatch(patch)) {
         patch.actualOrigin = this;
-        dataForTesting?.patchForTesting = patch;
+        (_patches ??= []).add(patch);
       }
     } else {
       reportPatchMismatch(patch);
@@ -483,6 +486,31 @@
     origin.procedure.isRedirectingFactory = _procedure.isRedirectingFactory;
     return 1;
   }
+
+  @override
+  void checkVariance(
+      SourceClassBuilder sourceClassBuilder, TypeEnvironment typeEnvironment) {
+    sourceClassBuilder.checkVarianceInFunction(
+        procedure, typeEnvironment, sourceClassBuilder.cls.typeParameters);
+    List<SourceProcedureBuilder>? patches = _patches;
+    if (patches != null) {
+      for (SourceProcedureBuilder patch in patches) {
+        patch.checkVariance(sourceClassBuilder, typeEnvironment);
+      }
+    }
+  }
+
+  @override
+  void checkTypes(
+      SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
+    library.checkTypesInFunctionBuilder(this, typeEnvironment);
+    List<SourceProcedureBuilder>? patches = _patches;
+    if (patches != null) {
+      for (SourceProcedureBuilder patch in patches) {
+        patch.checkTypes(library, typeEnvironment);
+      }
+    }
+  }
 }
 
 class SourceProcedureMember extends BuilderClassMember {
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 7ff533d..b932aa9 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
@@ -279,7 +279,8 @@
           new Map<TypeParameter, DartType>.fromIterables(
               target.enclosingClass!.typeParameters, targetType.typeArguments),
           target.function!,
-          tearOff.function));
+          tearOff.function,
+          libraryBuilder: library));
     });
   }
 
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 6904eb1..5ccc48d 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
@@ -925,9 +925,10 @@
         ? inferrer.wrapType(_yieldElementContext,
             inferrer.coreTypes.iterableClass, inferrer.library.nonNullable)
         : _yieldElementContext;
-    Expression expression = inferrer.ensureAssignableResult(
-        expectedType, expressionResult,
-        fileOffset: node.fileOffset);
+    Expression expression = inferrer
+        .ensureAssignableResult(expectedType, expressionResult,
+            fileOffset: node.fileOffset)
+        .expression;
     node.expression = expression..parent = node;
     DartType type = expressionResult.inferredType;
     if (!identical(expressionResult.expression, expression)) {
@@ -1057,9 +1058,10 @@
             inferrer.coreTypes.streamClass, inferrer.library.nonNullable)
         : _yieldElementContext;
 
-    Expression expression = inferrer.ensureAssignableResult(
-        expectedType, expressionResult,
-        fileOffset: node.fileOffset);
+    Expression expression = inferrer
+        .ensureAssignableResult(expectedType, expressionResult,
+            fileOffset: node.fileOffset)
+        .expression;
     node.expression = expression..parent = node;
     DartType type = expressionResult.inferredType;
     if (!identical(expressionResult.expression, expression)) {
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 fcc9c8e..3459623 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
@@ -9,6 +9,7 @@
 import 'package:kernel/type_environment.dart';
 
 import '../../base/instrumentation.dart' show Instrumentation;
+import '../kernel/benchmarker.dart' show Benchmarker;
 import '../kernel/forest.dart';
 import '../kernel/hierarchy/hierarchy_builder.dart' show ClassHierarchyBuilder;
 import '../kernel/hierarchy/members_builder.dart' show ClassMembersBuilder;
@@ -144,7 +145,7 @@
     // Field types have all been inferred so we don't need to guard against
     // cyclic dependency.
     for (DeclaredSourceConstructorBuilder builder in toBeInferred.values) {
-      builder.inferFormalTypes(classHierarchy);
+      builder.inferFormalTypes(typeSchemaEnvironment);
     }
     toBeInferred.clear();
     for (TypeDependency typeDependency in typeDependencies.values) {
@@ -176,7 +177,9 @@
 /// Concrete implementation of [TypeInferenceEngine] specialized to work with
 /// kernel objects.
 class TypeInferenceEngineImpl extends TypeInferenceEngine {
-  TypeInferenceEngineImpl(Instrumentation? instrumentation)
+  final Benchmarker? benchmarker;
+
+  TypeInferenceEngineImpl(Instrumentation? instrumentation, this.benchmarker)
       : super(instrumentation);
 
   @override
@@ -190,8 +193,12 @@
       assignedVariables =
           new AssignedVariables<TreeNode, VariableDeclaration>();
     }
-    return new TypeInferrerImpl(
-        this, uri, false, thisType, library, assignedVariables, dataForTesting);
+    if (benchmarker == null) {
+      return new TypeInferrerImpl(this, uri, false, thisType, library,
+          assignedVariables, dataForTesting);
+    }
+    return new TypeInferrerImplBenchmarked(this, uri, false, thisType, library,
+        assignedVariables, dataForTesting, benchmarker!);
   }
 
   @override
@@ -205,8 +212,12 @@
       assignedVariables =
           new AssignedVariables<TreeNode, VariableDeclaration>();
     }
-    return new TypeInferrerImpl(
-        this, uri, true, thisType, library, assignedVariables, dataForTesting);
+    if (benchmarker == null) {
+      return new TypeInferrerImpl(this, uri, true, thisType, library,
+          assignedVariables, dataForTesting);
+    }
+    return new TypeInferrerImplBenchmarked(this, uri, true, thisType, library,
+        assignedVariables, dataForTesting, benchmarker!);
   }
 }
 
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 bdf3e38..9f5f948 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
@@ -27,6 +27,7 @@
 import '../builder/extension_builder.dart';
 import '../builder/member_builder.dart';
 import '../fasta_codes.dart';
+import '../kernel/benchmarker.dart' show BenchmarkSubdivides, Benchmarker;
 import '../kernel/constructor_tearoff_lowering.dart';
 import '../kernel/hierarchy/class_member.dart' show ClassMember;
 import '../kernel/inference_visitor.dart';
@@ -115,6 +116,8 @@
 
   AssignedVariables<TreeNode, VariableDeclaration> get assignedVariables;
 
+  InferenceHelper? helper;
+
   /// Performs full type inference on the given field initializer.
   ExpressionInferenceResult inferFieldInitializer(
       InferenceHelper helper, DartType declaredType, Expression initializer);
@@ -158,6 +161,19 @@
   // TODO(johnniwinther): We are still parameters on synthesized mixin
   //  application constructors.
   void inferConstructorParameterTypes(Constructor constructor);
+
+  InvocationInferenceResult inferInvocation(DartType typeContext, int offset,
+      FunctionType calleeType, ArgumentsImpl arguments,
+      {List<VariableDeclaration>? hoistedExpressions,
+      bool isSpecialCasedBinaryOperator: false,
+      bool isSpecialCasedTernaryOperator: false,
+      DartType? receiverType,
+      bool skipTypeArgumentInference: false,
+      bool isConst: false,
+      bool isImplicitExtensionMember: false,
+      bool isImplicitCall: false,
+      Member? staticTarget,
+      bool isExtensionMemberInvocation = false});
 }
 
 /// Concrete implementation of [TypeInferrer] specialized to work with kernel
@@ -207,6 +223,7 @@
   @override
   final SourceLibraryBuilder library;
 
+  @override
   InferenceHelper? helper;
 
   /// Context information for the current closure, or `null` if we are not
@@ -395,7 +412,7 @@
     } else if ((constructor = engine.toBeInferred[target]) != null) {
       engine.toBeInferred.remove(target);
       engine.beingInferred[target] = constructor!;
-      constructor.inferFormalTypes(classHierarchy);
+      constructor.inferFormalTypes(typeSchemaEnvironment);
       engine.beingInferred.remove(target);
     }
   }
@@ -447,29 +464,6 @@
         .isSubtypeWhenIgnoringNullabilities();
   }
 
-  Expression ensureAssignableResult(
-      DartType expectedType, ExpressionInferenceResult result,
-      {int? fileOffset,
-      bool isVoidAllowed: false,
-      Template<Message Function(DartType, DartType, bool)>? errorTemplate,
-      Template<Message Function(DartType, DartType, bool)>?
-          nullabilityErrorTemplate,
-      Template<Message Function(DartType, bool)>? nullabilityNullErrorTemplate,
-      Template<Message Function(DartType, DartType, bool)>?
-          nullabilityNullTypeErrorTemplate,
-      Template<Message Function(DartType, DartType, DartType, DartType, bool)>?
-          nullabilityPartErrorTemplate}) {
-    return ensureAssignable(
-        expectedType, result.inferredType, result.expression,
-        fileOffset: fileOffset,
-        isVoidAllowed: isVoidAllowed,
-        errorTemplate: errorTemplate,
-        nullabilityErrorTemplate: nullabilityErrorTemplate,
-        nullabilityNullErrorTemplate: nullabilityNullErrorTemplate,
-        nullabilityNullTypeErrorTemplate: nullabilityNullTypeErrorTemplate,
-        nullabilityPartErrorTemplate: nullabilityPartErrorTemplate);
-  }
-
   /// Ensures that [expressionType] is assignable to [contextType].
   ///
   /// Checks whether [expressionType] can be assigned to the greatest closure of
@@ -489,7 +483,40 @@
   /// before returned and therefore shouldn't be checked to be a `Future`
   /// directly.
   Expression ensureAssignable(
-      DartType contextType, DartType expressionType, Expression expression,
+      DartType expectedType, DartType expressionType, Expression expression,
+      {int? fileOffset,
+      DartType? declaredContextType,
+      DartType? runtimeCheckedType,
+      bool isVoidAllowed: false,
+      Template<Message Function(DartType, DartType, bool)>? errorTemplate,
+      Template<Message Function(DartType, DartType, bool)>?
+          nullabilityErrorTemplate,
+      Template<Message Function(DartType, bool)>? nullabilityNullErrorTemplate,
+      Template<Message Function(DartType, DartType, bool)>?
+          nullabilityNullTypeErrorTemplate,
+      Template<Message Function(DartType, DartType, DartType, DartType, bool)>?
+          nullabilityPartErrorTemplate,
+      Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
+    return ensureAssignableResult(expectedType,
+            new ExpressionInferenceResult(expressionType, expression),
+            fileOffset: fileOffset,
+            declaredContextType: declaredContextType,
+            runtimeCheckedType: runtimeCheckedType,
+            isVoidAllowed: isVoidAllowed,
+            errorTemplate: errorTemplate,
+            nullabilityErrorTemplate: nullabilityErrorTemplate,
+            nullabilityNullErrorTemplate: nullabilityNullErrorTemplate,
+            nullabilityNullTypeErrorTemplate: nullabilityNullTypeErrorTemplate,
+            nullabilityPartErrorTemplate: nullabilityPartErrorTemplate,
+            whyNotPromoted: whyNotPromoted)
+        .expression;
+  }
+
+  /// Same as [ensureAssignable], but accepts an [ExpressionInferenceResult]
+  /// rather than an expression and a type separately.  If no change is made,
+  /// [inferenceResult] is returned unchanged.
+  ExpressionInferenceResult ensureAssignableResult(
+      DartType contextType, ExpressionInferenceResult inferenceResult,
       {int? fileOffset,
       DartType? declaredContextType,
       DartType? runtimeCheckedType,
@@ -531,35 +558,37 @@
     // We don't need to insert assignability checks when doing top level type
     // inference since top level type inference only cares about the type that
     // is inferred (the kernel code is discarded).
-    if (isTopLevel) return expression;
+    if (isTopLevel) return inferenceResult;
 
-    fileOffset ??= expression.fileOffset;
+    fileOffset ??= inferenceResult.expression.fileOffset;
     contextType = computeGreatestClosure(contextType);
 
     DartType initialContextType = runtimeCheckedType ?? contextType;
 
     Template<Message Function(DartType, DartType, bool)>?
-        preciseTypeErrorTemplate = _getPreciseTypeErrorTemplate(expression);
+        preciseTypeErrorTemplate =
+        _getPreciseTypeErrorTemplate(inferenceResult.expression);
     AssignabilityResult assignabilityResult = _computeAssignabilityKind(
-        contextType, expressionType,
+        contextType, inferenceResult.inferredType,
         isNonNullableByDefault: isNonNullableByDefault,
         isVoidAllowed: isVoidAllowed,
         isExpressionTypePrecise: preciseTypeErrorTemplate != null);
 
     if (assignabilityResult.needsTearOff) {
-      TypedTearoff typedTearoff =
-          _tearOffCall(expression, expressionType as InterfaceType, fileOffset);
-      expression = typedTearoff.tearoff;
-      expressionType = typedTearoff.tearoffType;
+      TypedTearoff typedTearoff = _tearOffCall(inferenceResult.expression,
+          inferenceResult.inferredType as InterfaceType, fileOffset);
+      inferenceResult = new ExpressionInferenceResult(
+          typedTearoff.tearoffType, typedTearoff.tearoff);
     }
     if (assignabilityResult.implicitInstantiation != null) {
-      ExpressionInferenceResult instantiationResult =
-          _applyImplicitInstantiation(assignabilityResult.implicitInstantiation,
-              expressionType, expression);
-      expression = instantiationResult.expression;
-      expressionType = instantiationResult.inferredType;
+      inferenceResult = _applyImplicitInstantiation(
+          assignabilityResult.implicitInstantiation,
+          inferenceResult.inferredType,
+          inferenceResult.expression);
     }
 
+    DartType expressionType = inferenceResult.inferredType;
+    Expression expression = inferenceResult.expression;
     Expression result;
     switch (assignabilityResult.kind) {
       case AssignabilityKind.assignable:
@@ -656,8 +685,10 @@
 
     if (!identical(result, expression)) {
       flowAnalysis.forwardExpression(result, expression);
+      return new ExpressionInferenceResult(expressionType, result);
+    } else {
+      return inferenceResult;
     }
-    return result;
   }
 
   Expression _wrapTearoffErrorExpression(Expression expression,
@@ -1064,7 +1095,7 @@
               onType,
               onTypeInstantiateToBounds,
               target,
-              isPlatform: extensionBuilder.library.importUri.scheme == 'dart');
+              isPlatform: extensionBuilder.library.importUri.isScheme('dart'));
           if (noneMoreSpecific.isNotEmpty) {
             bool isMostSpecific = true;
             for (ExtensionAccessCandidate other in noneMoreSpecific) {
@@ -2033,19 +2064,18 @@
   @override
   ExpressionInferenceResult inferFieldInitializer(
     InferenceHelper helper,
-    DartType context,
+    DartType declaredType,
     Expression initializer,
   ) {
     assert(closureContext == null);
     assert(!isTopLevel);
     this.helper = helper;
     ExpressionInferenceResult initializerResult =
-        inferExpression(initializer, context, true, isVoidAllowed: true);
-    initializer = ensureAssignableResult(context, initializerResult,
-        isVoidAllowed: context is VoidType);
+        inferExpression(initializer, declaredType, true, isVoidAllowed: true);
+    initializerResult = ensureAssignableResult(declaredType, initializerResult,
+        isVoidAllowed: declaredType is VoidType);
     this.helper = null;
-    return new ExpressionInferenceResult(
-        initializerResult.inferredType, initializer);
+    return initializerResult;
   }
 
   @override
@@ -2079,6 +2109,7 @@
         result.hasChanged ? result.statement : body, futureValueType);
   }
 
+  @override
   InvocationInferenceResult inferInvocation(DartType typeContext, int offset,
       FunctionType calleeType, ArgumentsImpl arguments,
       {List<VariableDeclaration>? hoistedExpressions,
@@ -2546,7 +2577,8 @@
             argMessage.charOffset,
             argMessage.length,
             helper!,
-            isInapplicable: true);
+            isInapplicable: true,
+            hoistedArguments: localHoistedExpressions);
       } else {
         // Argument counts and names match. Compare types.
         int positionalShift = isImplicitExtensionMember ? 1 : 0;
@@ -3985,7 +4017,7 @@
     ExpressionInferenceResult result =
         inferExpression(initializer, declaredType, true);
     if (hasDeclaredInitializer) {
-      initializer = ensureAssignableResult(declaredType, result);
+      initializer = ensureAssignableResult(declaredType, result).expression;
     }
     this.helper = null;
     return initializer;
@@ -4641,6 +4673,167 @@
   }
 }
 
+class TypeInferrerImplBenchmarked implements TypeInferrer {
+  final TypeInferrerImpl impl;
+  final Benchmarker benchmarker;
+
+  TypeInferrerImplBenchmarked(
+      TypeInferenceEngine engine,
+      Uri uriForInstrumentation,
+      bool topLevel,
+      InterfaceType? thisType,
+      SourceLibraryBuilder library,
+      AssignedVariables<TreeNode, VariableDeclaration> assignedVariables,
+      InferenceDataForTesting? dataForTesting,
+      this.benchmarker)
+      : impl = new TypeInferrerImpl(engine, uriForInstrumentation, topLevel,
+            thisType, library, assignedVariables, dataForTesting);
+
+  @override
+  AssignedVariables<TreeNode, VariableDeclaration> get assignedVariables =>
+      impl.assignedVariables;
+
+  @override
+  FlowAnalysis<TreeNode, Statement, Expression, VariableDeclaration, DartType>
+      get flowAnalysis => impl.flowAnalysis;
+
+  @override
+  SourceLibraryBuilder get library => impl.library;
+
+  @override
+  TypeSchemaEnvironment get typeSchemaEnvironment => impl.typeSchemaEnvironment;
+
+  @override
+  Uri get uriForInstrumentation => impl.uriForInstrumentation;
+
+  @override
+  void inferConstructorParameterTypes(Constructor constructor) {
+    benchmarker
+        .beginSubdivide(BenchmarkSubdivides.inferConstructorParameterTypes);
+    impl.inferConstructorParameterTypes(constructor);
+    benchmarker.endSubdivide();
+  }
+
+  @override
+  DartType inferDeclarationType(DartType initializerType) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferDeclarationType);
+    DartType result = impl.inferDeclarationType(initializerType);
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  ExpressionInferenceResult inferExpression(
+      Expression expression, DartType typeContext, bool typeNeeded,
+      {bool isVoidAllowed = false, bool forEffect = false}) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferExpression);
+    ExpressionInferenceResult result = impl.inferExpression(
+        expression, typeContext, typeNeeded,
+        isVoidAllowed: isVoidAllowed, forEffect: forEffect);
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  ExpressionInferenceResult inferFieldInitializer(
+      InferenceHelper helper, DartType declaredType, Expression initializer) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferFieldInitializer);
+    ExpressionInferenceResult result =
+        impl.inferFieldInitializer(helper, declaredType, initializer);
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  InferredFunctionBody inferFunctionBody(InferenceHelper helper, int fileOffset,
+      DartType returnType, AsyncMarker asyncMarker, Statement body) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferFunctionBody);
+    InferredFunctionBody result = impl.inferFunctionBody(
+        helper, fileOffset, returnType, asyncMarker, body);
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  InitializerInferenceResult inferInitializer(
+      InferenceHelper helper, Initializer initializer) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferInitializer);
+    InitializerInferenceResult result =
+        impl.inferInitializer(helper, initializer);
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  void inferMetadata(
+      InferenceHelper helper, TreeNode? parent, List<Expression>? annotations) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferMetadata);
+    impl.inferMetadata(helper, parent, annotations);
+    benchmarker.endSubdivide();
+  }
+
+  @override
+  void inferMetadataKeepingHelper(
+      TreeNode parent, List<Expression> annotations) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferMetadataKeepingHelper);
+    impl.inferMetadataKeepingHelper(parent, annotations);
+    benchmarker.endSubdivide();
+  }
+
+  @override
+  Expression inferParameterInitializer(
+      InferenceHelper helper,
+      Expression initializer,
+      DartType declaredType,
+      bool hasDeclaredInitializer) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferParameterInitializer);
+    Expression result = impl.inferParameterInitializer(
+        helper, initializer, declaredType, hasDeclaredInitializer);
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  InvocationInferenceResult inferInvocation(DartType typeContext, int offset,
+      FunctionType calleeType, ArgumentsImpl arguments,
+      {List<VariableDeclaration>? hoistedExpressions,
+      bool isSpecialCasedBinaryOperator = false,
+      bool isSpecialCasedTernaryOperator = false,
+      DartType? receiverType,
+      bool skipTypeArgumentInference = false,
+      bool isConst = false,
+      bool isImplicitExtensionMember = false,
+      bool isImplicitCall = false,
+      Member? staticTarget,
+      bool isExtensionMemberInvocation = false}) {
+    benchmarker.beginSubdivide(BenchmarkSubdivides.inferInvocation);
+    InvocationInferenceResult result = impl.inferInvocation(
+      typeContext,
+      offset,
+      calleeType,
+      arguments,
+      hoistedExpressions: hoistedExpressions,
+      isSpecialCasedBinaryOperator: isSpecialCasedBinaryOperator,
+      isSpecialCasedTernaryOperator: isSpecialCasedTernaryOperator,
+      receiverType: receiverType,
+      skipTypeArgumentInference: skipTypeArgumentInference,
+      isConst: isConst,
+      isImplicitExtensionMember: isImplicitExtensionMember,
+      isImplicitCall: isImplicitCall,
+      staticTarget: staticTarget,
+      isExtensionMemberInvocation: isExtensionMemberInvocation,
+    );
+    benchmarker.endSubdivide();
+    return result;
+  }
+
+  @override
+  InferenceHelper? get helper => impl.helper;
+
+  @override
+  void set helper(InferenceHelper? helper) => impl.helper = helper;
+}
+
 abstract class MixinInferrer {
   final CoreTypes coreTypes;
   final TypeConstraintGatherer gatherer;
@@ -4874,6 +5067,16 @@
   /// Returns `true` if the arguments of the call where not applicable to the
   /// target.
   bool get isInapplicable;
+
+  static Expression _insertHoistedExpressions(
+      Expression expression, List<VariableDeclaration> hoistedExpressions) {
+    if (hoistedExpressions.isNotEmpty) {
+      for (int index = hoistedExpressions.length - 1; index >= 0; index--) {
+        expression = createLet(hoistedExpressions[index], expression);
+      }
+    }
+    return expression;
+  }
 }
 
 class SuccessfulInferenceResult implements InvocationInferenceResult {
@@ -4888,7 +5091,7 @@
   final DartType? inferredReceiverType;
 
   SuccessfulInferenceResult(this.inferredType, this.functionType,
-      {this.hoistedArguments, this.inferredReceiverType});
+      {required this.hoistedArguments, this.inferredReceiverType});
 
   @override
   Expression applyResult(Expression expression) {
@@ -4898,17 +5101,23 @@
     } else {
       assert(expression is InvocationExpression);
       if (expression is FactoryConstructorInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is TypeAliasedConstructorInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is TypeAliasedFactoryInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is ConstructorInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is DynamicInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is FunctionInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is InstanceGetterInvocation) {
         // The hoisting of InstanceGetterInvocation is performed elsewhere.
         return expression;
@@ -4917,13 +5126,18 @@
             expression.receiver, inferredReceiverType ?? const DynamicType());
         expression.receiver = createVariableGet(receiver)..parent = expression;
         return createLet(
-            receiver, _insertHoistedExpressions(expression, hoistedArguments));
+            receiver,
+            InvocationInferenceResult._insertHoistedExpressions(
+                expression, hoistedArguments));
       } else if (expression is LocalFunctionInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is StaticInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else if (expression is SuperMethodInvocation) {
-        return _insertHoistedExpressions(expression, hoistedArguments);
+        return InvocationInferenceResult._insertHoistedExpressions(
+            expression, hoistedArguments);
       } else {
         throw new StateError(
             "Unhandled invocation kind '${expression.runtimeType}'.");
@@ -4931,16 +5145,6 @@
     }
   }
 
-  static Expression _insertHoistedExpressions(
-      Expression expression, List<VariableDeclaration> hoistedExpressions) {
-    if (hoistedExpressions.isNotEmpty) {
-      for (int index = hoistedExpressions.length - 1; index >= 0; index--) {
-        expression = createLet(hoistedExpressions[index], expression);
-      }
-    }
-    return expression;
-  }
-
   @override
   bool get isInapplicable => false;
 }
@@ -4963,15 +5167,24 @@
   @override
   final bool isInapplicable;
 
+  final List<VariableDeclaration>? hoistedArguments;
+
   WrapInProblemInferenceResult(this.inferredType, this.functionType,
       this.message, this.fileOffset, this.length, this.helper,
-      {required this.isInapplicable})
+      {required this.isInapplicable, required this.hoistedArguments})
       // ignore: unnecessary_null_comparison
       : assert(isInapplicable != null);
 
   @override
   Expression applyResult(Expression expression) {
-    return helper.wrapInProblem(expression, message, fileOffset, length);
+    expression = helper.wrapInProblem(expression, message, fileOffset, length);
+    List<VariableDeclaration>? hoistedArguments = this.hoistedArguments;
+    if (hoistedArguments == null || hoistedArguments.isEmpty) {
+      return expression;
+    } else {
+      return InvocationInferenceResult._insertHoistedExpressions(
+          expression, hoistedArguments);
+    }
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema_elimination.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema_elimination.dart
index 8927d85..d1023db 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema_elimination.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema_elimination.dart
@@ -70,7 +70,7 @@
     assert(topType == const DynamicType() ||
         topType is InterfaceType &&
             topType.nullability == Nullability.nullable &&
-            topType.classNode.enclosingLibrary.importUri.scheme == "dart" &&
+            topType.classNode.enclosingLibrary.importUri.isScheme("dart") &&
             topType.classNode.enclosingLibrary.importUri.path == "core" &&
             topType.classNode.name == "Object");
     assert(
diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart
index dac8845..e4df37b 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator.dart
@@ -22,7 +22,7 @@
       dartLibraries.libraryInfoFor(libraryName)?.patches;
 
   bool isPlatformImplementation(Uri uri) {
-    if (uri.scheme != "dart") return false;
+    if (!uri.isScheme("dart")) return false;
     String path = uri.path;
     return dartLibraries.libraryInfoFor(path) == null || path.startsWith("_");
   }
@@ -31,8 +31,8 @@
   // callback, so we can provide an error location when one is available. For
   // example, if the error occurs in an `import`.
   Uri? translate(Uri uri, [bool reportMessage = true]) {
-    if (uri.scheme == "dart") return _translateDartUri(uri);
-    if (uri.scheme == "package") {
+    if (uri.isScheme("dart")) return _translateDartUri(uri);
+    if (uri.isScheme("package")) {
       return _translatePackageUri(uri, reportMessage);
     }
     return null;
@@ -42,7 +42,7 @@
   Package? getPackage(Uri uri) {
     // ignore: unnecessary_null_comparison
     if (packages == null) return null;
-    if (uri.scheme != "package") return null;
+    if (!uri.isScheme("package")) return null;
     int firstSlash = uri.path.indexOf('/');
     if (firstSlash == -1) return null;
     String packageName = uri.path.substring(0, firstSlash);
diff --git a/pkg/front_end/lib/src/fasta/util/outline_extractor.dart b/pkg/front_end/lib/src/fasta/util/outline_extractor.dart
index ff65e37..d1f5d0a 100644
--- a/pkg/front_end/lib/src/fasta/util/outline_extractor.dart
+++ b/pkg/front_end/lib/src/fasta/util/outline_extractor.dart
@@ -116,7 +116,7 @@
   Future<TopLevel> preprocessUri(Uri importUri, {Uri? partOf}) async {
     if (verbosityLevel >= 20) log("$importUri =>");
     Uri fileUri = importUri;
-    if (importUri.scheme == "package") {
+    if (importUri.isScheme("package")) {
       fileUri = uriTranslator.translate(importUri)!;
     }
     if (verbosityLevel >= 20) log("$fileUri");
@@ -202,14 +202,14 @@
       worklist.add(new _TopLevelAndAstNode(entrypointish, child));
 
       if (child is Part) {
-        if (child.uri.scheme != "dart") {
+        if (!child.uri.isScheme("dart")) {
           TopLevel partTopLevel = parsed[child.uri] ??
               await preprocessUri(child.uri, partOf: entrypointish.uri);
           await _premarkTopLevel(worklist, closed, partTopLevel);
         }
       } else if (child is Export) {
         for (Uri importedUri in child.uris) {
-          if (importedUri.scheme != "dart") {
+          if (!importedUri.isScheme("dart")) {
             TopLevel exportTopLevel =
                 parsed[importedUri] ?? await preprocessUri(importedUri);
             await _premarkTopLevel(worklist, closed, exportTopLevel);
@@ -230,7 +230,7 @@
         if (child is Import) {
           child.marked = Coloring.Marked;
           for (Uri importedUri in child.uris) {
-            if (importedUri.scheme != "dart") {
+            if (!importedUri.isScheme("dart")) {
               TopLevel importedTopLevel =
                   parsed[importedUri] ?? await preprocessUri(importedUri);
               imported.add(importedTopLevel);
@@ -238,7 +238,7 @@
           }
         } else if (child is PartOf) {
           child.marked = Coloring.Marked;
-          if (child.partOfUri.scheme != "dart") {
+          if (!child.partOfUri.isScheme("dart")) {
             TopLevel part = parsed[child.partOfUri]!;
             List<TopLevel> importsFromPart =
                 await _preprocessImportsAsNeeded(imports, part);
@@ -392,7 +392,7 @@
           if (child is Part) {
             child.marked = Coloring.Marked;
             // do stuff to part.
-            if (child.uri.scheme != "dart") {
+            if (!child.uri.isScheme("dart")) {
               other = parsed[child.uri] ??
                   await preprocessUri(child.uri, partOf: topLevel.uri);
             }
@@ -400,7 +400,7 @@
             child.marked = Coloring.Marked;
             // do stuff to export.
             for (Uri importedUri in child.uris) {
-              if (importedUri.scheme != "dart") {
+              if (!importedUri.isScheme("dart")) {
                 other = parsed[importedUri] ?? await preprocessUri(importedUri);
               }
             }
@@ -468,7 +468,7 @@
           }
           if (child is Import) {
             for (Uri importedUri in child.uris) {
-              if (importedUri.scheme != "dart") {
+              if (!importedUri.isScheme("dart")) {
                 imported.add(importedUri);
               }
             }
@@ -478,7 +478,7 @@
       if (sb.isNotEmpty) count++;
       Uri uri = entry.key;
       Uri fileUri = uri;
-      if (uri.scheme == "package") {
+      if (uri.isScheme("package")) {
         fileUri = uriTranslator.translate(uri)!;
       }
       result[fileUri] = sb.toString();
@@ -489,7 +489,7 @@
       // uri imports a file we haven't read. Check if it exists and include it
       // as an empty file if it does.
       Uri fileUri = uri;
-      if (uri.scheme == "package") {
+      if (uri.isScheme("package")) {
         fileUri = uriTranslator.translate(uri)!;
       }
       if (await fileSystem.entityForUri(fileUri).exists()) {
diff --git a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
index d7140cd..b691d1c 100644
--- a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
@@ -165,12 +165,13 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     ClassDeclarationBegin data = new ClassDeclarationBegin(ParserAstType.BEGIN,
         begin: begin,
         abstractToken: abstractToken,
         macroToken: macroToken,
+        augmentToken: augmentToken,
         name: name);
     seen(data);
   }
@@ -223,9 +224,10 @@
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
     MixinDeclarationBegin data = new MixinDeclarationBegin(ParserAstType.BEGIN,
-        mixinKeyword: mixinKeyword, name: name);
+        augmentToken: augmentToken, mixinKeyword: mixinKeyword, name: name);
     seen(data);
   }
 
@@ -595,6 +597,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -605,6 +608,7 @@
       Token endToken) {
     ClassFieldsEnd data = new ClassFieldsEnd(ParserAstType.END,
         abstractToken: abstractToken,
+        augmentToken: augmentToken,
         externalToken: externalToken,
         staticToken: staticToken,
         covariantToken: covariantToken,
@@ -619,6 +623,7 @@
   @override
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -629,6 +634,7 @@
       Token endToken) {
     MixinFieldsEnd data = new MixinFieldsEnd(ParserAstType.END,
         abstractToken: abstractToken,
+        augmentToken: augmentToken,
         externalToken: externalToken,
         staticToken: staticToken,
         covariantToken: covariantToken,
@@ -643,6 +649,7 @@
   @override
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -653,6 +660,7 @@
       Token endToken) {
     ExtensionFieldsEnd data = new ExtensionFieldsEnd(ParserAstType.END,
         abstractToken: abstractToken,
+        augmentToken: augmentToken,
         externalToken: externalToken,
         staticToken: staticToken,
         covariantToken: covariantToken,
@@ -667,6 +675,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -677,6 +686,7 @@
       Token endToken) {
     EnumFieldsEnd data = new EnumFieldsEnd(ParserAstType.END,
         abstractToken: abstractToken,
+        augmentToken: augmentToken,
         externalToken: externalToken,
         staticToken: staticToken,
         covariantToken: covariantToken,
@@ -920,13 +930,14 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     NamedMixinApplicationBegin data = new NamedMixinApplicationBegin(
         ParserAstType.BEGIN,
         begin: begin,
         abstractToken: abstractToken,
         macroToken: macroToken,
+        augmentToken: augmentToken,
         name: name);
     seen(data);
   }
@@ -1041,9 +1052,11 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     ImportEnd data = new ImportEnd(ParserAstType.END,
-        importKeyword: importKeyword, semicolon: semicolon);
+        importKeyword: importKeyword,
+        augmentToken: augmentToken,
+        semicolon: semicolon);
     seen(data);
   }
 
@@ -1310,6 +1323,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1318,6 +1332,7 @@
       Token name) {
     MethodBegin data = new MethodBegin(ParserAstType.BEGIN,
         declarationKind: declarationKind,
+        augmentToken: augmentToken,
         externalToken: externalToken,
         staticToken: staticToken,
         covariantToken: covariantToken,
@@ -1661,6 +1676,7 @@
   void beginFields(
       DeclarationKind declarationKind,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1670,6 +1686,7 @@
     FieldsBegin data = new FieldsBegin(ParserAstType.BEGIN,
         declarationKind: declarationKind,
         abstractToken: abstractToken,
+        augmentToken: augmentToken,
         externalToken: externalToken,
         staticToken: staticToken,
         covariantToken: covariantToken,
@@ -1702,9 +1719,12 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
     TopLevelMethodBegin data = new TopLevelMethodBegin(ParserAstType.BEGIN,
-        lastConsumed: lastConsumed, externalToken: externalToken);
+        lastConsumed: lastConsumed,
+        augmentToken: augmentToken,
+        externalToken: externalToken);
     seen(data);
   }
 
@@ -2831,12 +2851,14 @@
   final Token begin;
   final Token? abstractToken;
   final Token? macroToken;
+  final Token? augmentToken;
   final Token name;
 
   ClassDeclarationBegin(ParserAstType type,
       {required this.begin,
       this.abstractToken,
       this.macroToken,
+      this.augmentToken,
       required this.name})
       : super("ClassDeclaration", type);
 
@@ -2845,6 +2867,7 @@
         "begin": begin,
         "abstractToken": abstractToken,
         "macroToken": macroToken,
+        "augmentToken": augmentToken,
         "name": name,
       };
 }
@@ -2942,15 +2965,17 @@
 }
 
 class MixinDeclarationBegin extends ParserAstNode {
+  final Token? augmentToken;
   final Token mixinKeyword;
   final Token name;
 
   MixinDeclarationBegin(ParserAstType type,
-      {required this.mixinKeyword, required this.name})
+      {this.augmentToken, required this.mixinKeyword, required this.name})
       : super("MixinDeclaration", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+        "augmentToken": augmentToken,
         "mixinKeyword": mixinKeyword,
         "name": name,
       };
@@ -3632,6 +3657,7 @@
 
 class ClassFieldsEnd extends ParserAstNode {
   final Token? abstractToken;
+  final Token? augmentToken;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -3643,6 +3669,7 @@
 
   ClassFieldsEnd(ParserAstType type,
       {this.abstractToken,
+      this.augmentToken,
       this.externalToken,
       this.staticToken,
       this.covariantToken,
@@ -3656,6 +3683,7 @@
   @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -3669,6 +3697,7 @@
 
 class MixinFieldsEnd extends ParserAstNode {
   final Token? abstractToken;
+  final Token? augmentToken;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -3680,6 +3709,7 @@
 
   MixinFieldsEnd(ParserAstType type,
       {this.abstractToken,
+      this.augmentToken,
       this.externalToken,
       this.staticToken,
       this.covariantToken,
@@ -3693,6 +3723,7 @@
   @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -3706,6 +3737,7 @@
 
 class ExtensionFieldsEnd extends ParserAstNode {
   final Token? abstractToken;
+  final Token? augmentToken;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -3717,6 +3749,7 @@
 
   ExtensionFieldsEnd(ParserAstType type,
       {this.abstractToken,
+      this.augmentToken,
       this.externalToken,
       this.staticToken,
       this.covariantToken,
@@ -3730,6 +3763,7 @@
   @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -3743,6 +3777,7 @@
 
 class EnumFieldsEnd extends ParserAstNode {
   final Token? abstractToken;
+  final Token? augmentToken;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -3754,6 +3789,7 @@
 
   EnumFieldsEnd(ParserAstType type,
       {this.abstractToken,
+      this.augmentToken,
       this.externalToken,
       this.staticToken,
       this.covariantToken,
@@ -3767,6 +3803,7 @@
   @override
   Map<String, Object?> get deprecatedArguments => {
         "abstractToken": abstractToken,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -4199,12 +4236,14 @@
   final Token begin;
   final Token? abstractToken;
   final Token? macroToken;
+  final Token? augmentToken;
   final Token name;
 
   NamedMixinApplicationBegin(ParserAstType type,
       {required this.begin,
       this.abstractToken,
       this.macroToken,
+      this.augmentToken,
       required this.name})
       : super("NamedMixinApplication", type);
 
@@ -4213,6 +4252,7 @@
         "begin": begin,
         "abstractToken": abstractToken,
         "macroToken": macroToken,
+        "augmentToken": augmentToken,
         "name": name,
       };
 }
@@ -4417,14 +4457,17 @@
 
 class ImportEnd extends ParserAstNode {
   final Token importKeyword;
+  final Token? augmentToken;
   final Token? semicolon;
 
-  ImportEnd(ParserAstType type, {required this.importKeyword, this.semicolon})
+  ImportEnd(ParserAstType type,
+      {required this.importKeyword, this.augmentToken, this.semicolon})
       : super("Import", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "importKeyword": importKeyword,
+        "augmentToken": augmentToken,
         "semicolon": semicolon,
       };
 }
@@ -4896,6 +4939,7 @@
 
 class MethodBegin extends ParserAstNode {
   final DeclarationKind declarationKind;
+  final Token? augmentToken;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -4905,6 +4949,7 @@
 
   MethodBegin(ParserAstType type,
       {required this.declarationKind,
+      this.augmentToken,
       this.externalToken,
       this.staticToken,
       this.covariantToken,
@@ -4916,6 +4961,7 @@
   @override
   Map<String, Object?> get deprecatedArguments => {
         "declarationKind": declarationKind,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -5552,6 +5598,7 @@
 class FieldsBegin extends ParserAstNode {
   final DeclarationKind declarationKind;
   final Token? abstractToken;
+  final Token? augmentToken;
   final Token? externalToken;
   final Token? staticToken;
   final Token? covariantToken;
@@ -5562,6 +5609,7 @@
   FieldsBegin(ParserAstType type,
       {required this.declarationKind,
       this.abstractToken,
+      this.augmentToken,
       this.externalToken,
       this.staticToken,
       this.covariantToken,
@@ -5574,6 +5622,7 @@
   Map<String, Object?> get deprecatedArguments => {
         "declarationKind": declarationKind,
         "abstractToken": abstractToken,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
         "staticToken": staticToken,
         "covariantToken": covariantToken,
@@ -5619,15 +5668,17 @@
 
 class TopLevelMethodBegin extends ParserAstNode {
   final Token lastConsumed;
+  final Token? augmentToken;
   final Token? externalToken;
 
   TopLevelMethodBegin(ParserAstType type,
-      {required this.lastConsumed, this.externalToken})
+      {required this.lastConsumed, this.augmentToken, this.externalToken})
       : super("TopLevelMethod", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "lastConsumed": lastConsumed,
+        "augmentToken": augmentToken,
         "externalToken": externalToken,
       };
 }
diff --git a/pkg/front_end/lib/src/fasta/util/textual_outline.dart b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
index e902eab..8194d15 100644
--- a/pkg/front_end/lib/src/fasta/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
@@ -726,6 +726,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -862,7 +863,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     // ignore: unnecessary_null_comparison
     if (importKeyword != null && semicolon != null) {
       importExportsStartToChunk[importKeyword] = new _ImportChunk(
diff --git a/pkg/front_end/lib/src/isolate_macro_serializer.dart b/pkg/front_end/lib/src/isolate_macro_serializer.dart
new file mode 100644
index 0000000..ef98905
--- /dev/null
+++ b/pkg/front_end/lib/src/isolate_macro_serializer.dart
@@ -0,0 +1,33 @@
+// 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:kernel/kernel.dart';
+import 'macro_serializer.dart';
+
+/// [MacroSerializer] that uses blobs registered with the current [Isolate] to
+/// give access to precompiled macro [Component]s.
+///
+/// This can only be used with the [Isolate]-based macro executor.
+class IsolateMacroSerializer implements MacroSerializer {
+  final List<Uri> _createdUris = [];
+
+  @override
+  Future<void> close() {
+    for (Uri uri in _createdUris) {
+      (Isolate.current as dynamic).unregisterKernelBlobUri(uri);
+    }
+    _createdUris.clear();
+    return new Future.value();
+  }
+
+  @override
+  Future<Uri> createUriForComponent(Component component) {
+    Uri uri = (Isolate.current as dynamic)
+        .createUriForKernelBlob(writeComponentToBytes(component));
+    _createdUris.add(uri);
+    return new Future.value(uri);
+  }
+}
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 948c756..07c4b09 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -5,37 +5,30 @@
 /// Defines the front-end API for converting source code to Dart Kernel objects.
 library front_end.kernel_generator_impl;
 
+import 'package:_fe_analyzer_shared/src/macros/bootstrap.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor/serialization.dart';
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
-
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 
-import 'base/nnbd_mode.dart';
-
-import 'base/processed_options.dart' show ProcessedOptions;
-
-import 'fasta/compiler_context.dart' show CompilerContext;
-
-import 'fasta/crash.dart' show withCrashReporting;
-
-import 'fasta/dill/dill_target.dart' show DillTarget;
-
-import 'fasta/fasta_codes.dart' show LocatedMessage;
-
-import 'fasta/kernel/kernel_target.dart' show BuildResult, KernelTarget;
-
-import 'fasta/kernel/utils.dart' show printComponentText, serializeComponent;
-
-import 'fasta/kernel/verifier.dart' show verifyComponent;
-
-import 'fasta/source/source_loader.dart' show SourceLoader;
-
-import 'fasta/uri_translator.dart' show UriTranslator;
-
-import 'api_prototype/front_end.dart' show CompilerResult;
-
 import 'api_prototype/file_system.dart' show FileSystem;
+import 'api_prototype/front_end.dart' show CompilerOptions, CompilerResult;
+import 'api_prototype/kernel_generator.dart';
+import 'api_prototype/memory_file_system.dart';
+import 'base/nnbd_mode.dart';
+import 'base/processed_options.dart' show ProcessedOptions;
+import 'fasta/compiler_context.dart' show CompilerContext;
+import 'fasta/crash.dart' show withCrashReporting;
+import 'fasta/dill/dill_target.dart' show DillTarget;
+import 'fasta/fasta_codes.dart' show LocatedMessage;
+import 'fasta/hybrid_file_system.dart';
+import 'fasta/kernel/kernel_target.dart' show BuildResult, KernelTarget;
+import 'fasta/kernel/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;
+import 'fasta/uri_translator.dart' show UriTranslator;
 
 /// Implementation for the
 /// `package:front_end/src/api_prototype/kernel_generator.dart` and
@@ -69,125 +62,171 @@
 
   SourceLoader? sourceLoader;
   return withCrashReporting<CompilerResult>(() async {
-    UriTranslator uriTranslator = await options.getUriTranslator();
+    while (true) {
+      // TODO(johnniwinther): How much can we reuse between iterations?
+      UriTranslator uriTranslator = await options.getUriTranslator();
 
-    DillTarget dillTarget =
-        new DillTarget(options.ticker, uriTranslator, options.target);
+      DillTarget dillTarget =
+          new DillTarget(options.ticker, uriTranslator, options.target);
 
-    List<Component> loadedComponents = <Component>[];
+      List<Component> loadedComponents = <Component>[];
 
-    Component? sdkSummary = await options.loadSdkSummary(null);
-    // By using the nameRoot of the summary, we enable sharing the
-    // sdkSummary between multiple invocations.
-    CanonicalName nameRoot = sdkSummary?.root ?? new CanonicalName.root();
-    if (sdkSummary != null) {
-      dillTarget.loader.appendLibraries(sdkSummary);
-    }
+      Component? sdkSummary = await options.loadSdkSummary(null);
+      // By using the nameRoot of the summary, we enable sharing the
+      // sdkSummary between multiple invocations.
+      CanonicalName nameRoot = sdkSummary?.root ?? new CanonicalName.root();
+      if (sdkSummary != null) {
+        dillTarget.loader.appendLibraries(sdkSummary);
+      }
 
-    for (Component additionalDill
-        in await options.loadAdditionalDills(nameRoot)) {
-      loadedComponents.add(additionalDill);
-      dillTarget.loader.appendLibraries(additionalDill);
-    }
+      for (Component additionalDill
+          in await options.loadAdditionalDills(nameRoot)) {
+        loadedComponents.add(additionalDill);
+        dillTarget.loader.appendLibraries(additionalDill);
+      }
 
-    dillTarget.buildOutlines();
+      dillTarget.buildOutlines();
 
-    KernelTarget kernelTarget =
-        new KernelTarget(fs, false, dillTarget, uriTranslator);
-    sourceLoader = kernelTarget.loader;
-    kernelTarget.setEntryPoints(options.inputs);
-    BuildResult buildResult =
-        await kernelTarget.buildOutlines(nameRoot: nameRoot);
-    Component summaryComponent = buildResult.component!;
-    List<int>? summary = null;
-    if (buildSummary) {
-      if (options.verify) {
-        for (LocatedMessage error
-            in verifyComponent(summaryComponent, options.target)) {
-          options.report(error, Severity.error);
+      KernelTarget kernelTarget =
+          new KernelTarget(fs, false, dillTarget, uriTranslator);
+      sourceLoader = kernelTarget.loader;
+      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');
         }
       }
-      if (options.debugDump) {
-        printComponentText(summaryComponent,
-            libraryFilter: kernelTarget.isSourceLibraryForDebugging);
-      }
-
-      // Create the requested component ("truncating" or not).
-      //
-      // Note: we don't pass the library argument to the constructor to
-      // preserve the libraries parent pointer (it should continue to point
-      // to the component within KernelTarget).
-      Component trimmedSummaryComponent =
-          new Component(nameRoot: summaryComponent.root)
-            ..libraries.addAll(truncateSummary
-                ? kernelTarget.loader.libraries
-                : summaryComponent.libraries);
-      trimmedSummaryComponent.metadata.addAll(summaryComponent.metadata);
-      trimmedSummaryComponent.uriToSource.addAll(summaryComponent.uriToSource);
-
-      NonNullableByDefaultCompiledMode compiledMode =
-          NonNullableByDefaultCompiledMode.Weak;
-      switch (options.nnbdMode) {
-        case NnbdMode.Weak:
-          compiledMode = NonNullableByDefaultCompiledMode.Weak;
-          break;
-        case NnbdMode.Strong:
-          compiledMode = NonNullableByDefaultCompiledMode.Strong;
-          break;
-        case NnbdMode.Agnostic:
-          compiledMode = NonNullableByDefaultCompiledMode.Agnostic;
-          break;
-      }
-      if (kernelTarget.loader.hasInvalidNnbdModeLibrary) {
-        compiledMode = NonNullableByDefaultCompiledMode.Invalid;
-      }
-
-      trimmedSummaryComponent.setMainMethodAndMode(
-          trimmedSummaryComponent.mainMethodName, false, compiledMode);
-
-      // As documented, we only run outline transformations when we are building
-      // summaries without building a full component (at this time, that's
-      // the only need we have for these transformations).
-      if (!buildComponent) {
-        options.target.performOutlineTransformations(trimmedSummaryComponent);
-        options.ticker.logMs("Transformed outline");
-      }
-      // Don't include source (but do add it above to include importUris).
-      summary = serializeComponent(trimmedSummaryComponent,
-          includeSources: false, includeOffsets: includeOffsets);
-      options.ticker.logMs("Generated outline");
+      return _buildInternal(
+          options: options,
+          kernelTarget: kernelTarget,
+          nameRoot: nameRoot,
+          sdkSummary: sdkSummary,
+          loadedComponents: loadedComponents,
+          buildSummary: buildSummary,
+          truncateSummary: truncateSummary,
+          buildComponent: buildComponent,
+          includeOffsets: includeOffsets,
+          includeHierarchyAndCoreTypes: includeHierarchyAndCoreTypes,
+          retainDataForTesting: retainDataForTesting);
     }
-
-    Component? component;
-    if (buildComponent) {
-      buildResult = await kernelTarget.buildComponent(
-          macroApplications: buildResult.macroApplications,
-          verify: options.verify);
-      component = buildResult.component;
-      if (options.debugDump) {
-        printComponentText(component,
-            libraryFilter: kernelTarget.isSourceLibraryForDebugging);
-      }
-      options.ticker.logMs("Generated component");
-    }
-    // TODO(johnniwinther): Should we reuse the macro executor on subsequent
-    // compilations where possible?
-    buildResult.macroApplications?.close();
-
-    return new InternalCompilerResult(
-        summary: summary,
-        component: component,
-        sdkComponent: sdkSummary,
-        loadedComponents: loadedComponents,
-        classHierarchy:
-            includeHierarchyAndCoreTypes ? kernelTarget.loader.hierarchy : null,
-        coreTypes:
-            includeHierarchyAndCoreTypes ? kernelTarget.loader.coreTypes : null,
-        deps: new List<Uri>.of(CompilerContext.current.dependencies),
-        kernelTargetForTesting: retainDataForTesting ? kernelTarget : null);
   }, () => sourceLoader?.currentUriForCrashReporting ?? options.inputs.first);
 }
 
+Future<CompilerResult> _buildInternal(
+    {required ProcessedOptions options,
+    required KernelTarget kernelTarget,
+    required CanonicalName nameRoot,
+    required Component? sdkSummary,
+    required List<Component> loadedComponents,
+    required bool buildSummary,
+    required bool truncateSummary,
+    required bool buildComponent,
+    required bool includeOffsets,
+    required bool includeHierarchyAndCoreTypes,
+    required bool retainDataForTesting}) async {
+  BuildResult buildResult =
+      await kernelTarget.buildOutlines(nameRoot: nameRoot);
+  Component summaryComponent = buildResult.component!;
+  List<int>? summary = null;
+  if (buildSummary) {
+    if (options.verify) {
+      for (LocatedMessage error
+          in verifyComponent(summaryComponent, options.target)) {
+        options.report(error, Severity.error);
+      }
+    }
+    if (options.debugDump) {
+      printComponentText(summaryComponent,
+          libraryFilter: kernelTarget.isSourceLibraryForDebugging);
+    }
+
+    // Create the requested component ("truncating" or not).
+    //
+    // Note: we don't pass the library argument to the constructor to
+    // preserve the libraries parent pointer (it should continue to point
+    // to the component within KernelTarget).
+    Component trimmedSummaryComponent =
+        new Component(nameRoot: summaryComponent.root)
+          ..libraries.addAll(truncateSummary
+              ? kernelTarget.loader.libraries
+              : summaryComponent.libraries);
+    trimmedSummaryComponent.metadata.addAll(summaryComponent.metadata);
+    trimmedSummaryComponent.uriToSource.addAll(summaryComponent.uriToSource);
+
+    NonNullableByDefaultCompiledMode compiledMode =
+        NonNullableByDefaultCompiledMode.Weak;
+    switch (options.nnbdMode) {
+      case NnbdMode.Weak:
+        compiledMode = NonNullableByDefaultCompiledMode.Weak;
+        break;
+      case NnbdMode.Strong:
+        compiledMode = NonNullableByDefaultCompiledMode.Strong;
+        break;
+      case NnbdMode.Agnostic:
+        compiledMode = NonNullableByDefaultCompiledMode.Agnostic;
+        break;
+    }
+    if (kernelTarget.loader.hasInvalidNnbdModeLibrary) {
+      compiledMode = NonNullableByDefaultCompiledMode.Invalid;
+    }
+
+    trimmedSummaryComponent.setMainMethodAndMode(
+        trimmedSummaryComponent.mainMethodName, false, compiledMode);
+
+    // As documented, we only run outline transformations when we are building
+    // summaries without building a full component (at this time, that's
+    // the only need we have for these transformations).
+    if (!buildComponent) {
+      options.target.performOutlineTransformations(trimmedSummaryComponent);
+      options.ticker.logMs("Transformed outline");
+    }
+    // Don't include source (but do add it above to include importUris).
+    summary = serializeComponent(trimmedSummaryComponent,
+        includeSources: false, includeOffsets: includeOffsets);
+    options.ticker.logMs("Generated outline");
+  }
+
+  Component? component;
+  if (buildComponent) {
+    buildResult = await kernelTarget.buildComponent(
+        macroApplications: buildResult.macroApplications,
+        verify: options.verify);
+    component = buildResult.component;
+    if (options.debugDump) {
+      printComponentText(component,
+          libraryFilter: kernelTarget.isSourceLibraryForDebugging);
+    }
+    options.ticker.logMs("Generated component");
+  }
+  // TODO(johnniwinther): Should we reuse the macro executor on subsequent
+  // compilations where possible?
+  buildResult.macroApplications?.close();
+
+  return new InternalCompilerResult(
+      summary: summary,
+      component: component,
+      sdkComponent: sdkSummary,
+      loadedComponents: loadedComponents,
+      classHierarchy:
+          includeHierarchyAndCoreTypes ? kernelTarget.loader.hierarchy : null,
+      coreTypes:
+          includeHierarchyAndCoreTypes ? kernelTarget.loader.coreTypes : null,
+      deps: new List<Uri>.from(CompilerContext.current.dependencies),
+      kernelTargetForTesting: retainDataForTesting ? kernelTarget : null);
+}
+
 /// Result object of [generateKernel].
 class InternalCompilerResult implements CompilerResult {
   /// The generated summary bytes, if it was requested.
@@ -232,3 +271,51 @@
       this.coreTypes,
       this.kernelTargetForTesting});
 }
+
+/// A fake absolute directory used as the root of a memory-file system in the
+/// compilation below.
+Uri _defaultDir = Uri.parse('org-dartlang-macro:///a/b/c/');
+
+Future<void> _compileMacros(NeededPrecompilations neededPrecompilations,
+    CompilerOptions options) async {
+  assert(options.macroSerializer != null);
+  CompilerOptions precompilationOptions = new CompilerOptions();
+  precompilationOptions.target = options.macroTarget;
+  precompilationOptions.explicitExperimentalFlags =
+      options.explicitExperimentalFlags;
+  // TODO(johnniwinther): What is the right environment when it isn't passed
+  // by the caller? Dart2js calls the CFE without an environment, but it's
+  // macros likely need them.
+  precompilationOptions.environmentDefines = options.environmentDefines ?? {};
+  precompilationOptions.packagesFileUri = options.packagesFileUri;
+  precompilationOptions.precompiledMacroUris = options.precompiledMacroUris;
+  // TODO(johnniwinther): What if sdk root isn't set? How do we then get the
+  // right sdk?
+  precompilationOptions.sdkRoot = options.sdkRoot;
+  precompilationOptions.macroExecutorProvider = options.macroExecutorProvider;
+
+  Map<String, Map<String, List<String>>> macroDeclarations = {};
+  neededPrecompilations.macroDeclarations
+      .forEach((Uri uri, Map<String, List<String>> macroClasses) {
+    macroDeclarations[uri.toString()] = macroClasses;
+  });
+
+  Uri uri = _defaultDir.resolve('main.dart');
+  MemoryFileSystem fs = new MemoryFileSystem(_defaultDir);
+  fs.entityForUri(uri).writeAsStringSync(bootstrapMacroIsolate(
+      macroDeclarations, SerializationMode.byteDataClient));
+
+  precompilationOptions..fileSystem = new HybridFileSystem(fs);
+  CompilerResult? compilerResult =
+      await kernelForProgramInternal(uri, precompilationOptions);
+  Uri precompiledUri = await options.macroSerializer!
+      .createUriForComponent(compilerResult!.component!);
+  Map<MacroClass, 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;
+    }
+  });
+}
diff --git a/pkg/front_end/lib/src/macro_serializer.dart b/pkg/front_end/lib/src/macro_serializer.dart
new file mode 100644
index 0000000..a8e7ba7
--- /dev/null
+++ b/pkg/front_end/lib/src/macro_serializer.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 'package:kernel/ast.dart';
+
+/// Interface for supporting serialization of [Component]s for macro
+/// precompilation.
+abstract class MacroSerializer {
+  /// Returns a [Uri] that can be accessed by the macro executor.
+  Future<Uri> createUriForComponent(Component component);
+
+  /// Releases all resources of this serializer.
+  ///
+  /// This must be called when the [Uri]s created by [createUriForComponent]
+  /// are no longer needed.
+  Future<void> close();
+}
diff --git a/pkg/front_end/lib/src/temp_dir_macro_serializer.dart b/pkg/front_end/lib/src/temp_dir_macro_serializer.dart
new file mode 100644
index 0000000..c1630c8
--- /dev/null
+++ b/pkg/front_end/lib/src/temp_dir_macro_serializer.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 'dart:io';
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/kernel.dart';
+
+import 'fasta/kernel/utils.dart';
+import 'macro_serializer.dart';
+
+/// [MacroSerializer] that uses .dill files stored in a temporary directory to
+/// provided [Uri]s for precompiled macro [Component]s.
+///
+/// This can be used other with the isolate and process based macro executors.
+class TempDirMacroSerializer implements MacroSerializer {
+  final String? name;
+  Directory? tempDirectory;
+  int precompiledCount = 0;
+
+  TempDirMacroSerializer([this.name]);
+
+  Future<Directory> _ensureDirectory() async {
+    return tempDirectory ??= await Directory.systemTemp.createTemp(name);
+  }
+
+  @override
+  Future<Uri> createUriForComponent(Component component) async {
+    Directory directory = await _ensureDirectory();
+    Uri uri =
+        directory.absolute.uri.resolve('macros${precompiledCount++}.dill');
+    await writeComponentToFile(component, uri);
+    return uri;
+  }
+
+  @override
+  Future<void> close() async {
+    try {
+      await tempDirectory?.delete(recursive: true);
+    } catch (_) {}
+  }
+}
diff --git a/pkg/front_end/lib/src/testing/compiler_common.dart b/pkg/front_end/lib/src/testing/compiler_common.dart
index 0ee8f98..407f814 100644
--- a/pkg/front_end/lib/src/testing/compiler_common.dart
+++ b/pkg/front_end/lib/src/testing/compiler_common.dart
@@ -114,9 +114,13 @@
   }
 }
 
+const String _testUriScheme = 'org-dartlang-test';
+
+bool isTestUri(Uri uri) => uri.isScheme(_testUriScheme);
+
 /// A fake absolute directory used as the root of a memory-file system in the
 /// helpers above.
-Uri _defaultDir = Uri.parse('org-dartlang-test:///a/b/c/');
+Uri _defaultDir = Uri.parse('${_testUriScheme}:///a/b/c/');
 
 /// Convert relative file paths into an absolute Uri as expected by the test
 /// helpers above.
@@ -140,7 +144,7 @@
 ''';
 
 bool isDartCoreLibrary(Library lib) => isDartCore(lib.importUri);
-bool isDartCore(Uri uri) => uri.scheme == 'dart' && uri.path == 'core';
+bool isDartCore(Uri uri) => uri.isScheme('dart') && uri.path == 'core';
 
 /// Find a library in [component] whose Uri ends with the given [suffix]
 Library findLibrary(Component component, String suffix) {
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 b9a1a86..102912e 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -25,6 +25,7 @@
 import '../api_prototype/terminal_color_support.dart'
     show printDiagnosticMessage;
 import '../base/common.dart';
+import '../fasta/kernel/macro.dart';
 import '../fasta/messages.dart' show FormattedMessage;
 import '../kernel_generator_impl.dart' show InternalCompilerResult;
 import 'compiler_common.dart' show compileScript, toTestUri;
@@ -85,6 +86,10 @@
   dynamic customizeCompilerOptions(
           CompilerOptions options, TestData testData) =>
       null;
+
+  /// Called after running test on [testData] with the resulting
+  /// [testResultData].
+  void onCompilationResult(TestData testData, TestResultData testResultData) {}
 }
 
 abstract class DataComputer<T> {
@@ -369,12 +374,17 @@
 
   TestResultData testResultData =
       new TestResultData(config, customData, compilerResult);
+  config.onCompilationResult(testData, testResultData);
 
   Component component = compilerResult.component!;
   Map<Uri, Map<Id, ActualData<T>>> actualMaps = <Uri, Map<Id, ActualData<T>>>{};
   Map<Id, ActualData<T>> globalData = <Id, ActualData<T>>{};
 
   Map<Id, ActualData<T>> actualMapForUri(Uri? uri) {
+    if (uri?.scheme == augmentationScheme) {
+      throw new UnsupportedError(
+          "Annotations are not support on augmentation uris.");
+    }
     return actualMaps.putIfAbsent(uri ?? nullUri, () => <Id, ActualData<T>>{});
   }
 
@@ -386,9 +396,15 @@
 
     Map<Uri, Map<int, List<FormattedMessage>>> errorMap = {};
     for (FormattedMessage error in errors) {
+      Uri? uri = error.uri;
+      bool isAugmentation = uri?.scheme == augmentationScheme;
+      if (isAugmentation) {
+        uri = testData.entryPoint;
+      }
       Map<int, List<FormattedMessage>> map =
-          errorMap.putIfAbsent(error.uri ?? nullUri, () => {});
-      List<FormattedMessage> list = map.putIfAbsent(error.charOffset, () => []);
+          errorMap.putIfAbsent(uri ?? nullUri, () => {});
+      List<FormattedMessage> list =
+          map.putIfAbsent(isAugmentation ? -1 : error.charOffset, () => []);
       list.add(error);
     }
 
@@ -413,7 +429,14 @@
     Uri uri = node is Library
         ? node.fileUri
         : (node is Member ? node.fileUri : node.location!.file);
-    return actualMaps.putIfAbsent(uri, () => <Id, ActualData<T>>{});
+    if (uri.scheme == augmentationScheme) {
+      TreeNode library = node;
+      while (library is! Library) {
+        library = library.parent!;
+      }
+      uri = library.fileUri;
+    }
+    return actualMapForUri(uri);
   }
 
   void processMember(Member member, Map<Id, ActualData<T>> actualMap) {
@@ -451,8 +474,8 @@
 
   bool excludeLibrary(Library library) {
     return forUserLibrariesOnly &&
-        (library.importUri.scheme == 'dart' ||
-            library.importUri.scheme == 'package');
+        (library.importUri.isScheme('dart') ||
+            library.importUri.isScheme('package'));
   }
 
   await dataComputer.inspectTestResultData(testResultData);
diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart
index 4c4f476..a764f12 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -177,7 +177,7 @@
   MemberBuilder? memberBuilder;
   if (classBuilder != null) {
     if (member is Constructor || member is Procedure && member.isFactory) {
-      memberBuilder = classBuilder.constructors.local[memberName];
+      memberBuilder = classBuilder.constructorScope.local[memberName];
     } else {
       memberBuilder = classBuilder.scope.lookupLocalMember(memberName,
           setter: member is Procedure && member.isSetter) as MemberBuilder?;
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 74da302..6563de2 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -213,13 +213,25 @@
 DuplicatedParameterName/example: Fail
 Encoding/analyzerCode: Fail
 EnumConstantSameNameAsEnclosing/example: Fail
+EnumConstructorSuperInitializer/analyzerCode: Fail
+EnumConstructorSuperInitializer/example: Fail
+EnumConstructorTearoff/analyzerCode: Fail
+EnumConstructorTearoff/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
+EnumImplementerContainsValuesDeclaration/analyzerCode: Fail
+EnumImplementerContainsValuesDeclaration/example: Fail
 EnumInstantiation/example: Fail
+EnumNonConstConstructor/analyzerCode: Fail
+EnumNonConstConstructor/example: Fail
 EnumSupertypeOfNonAbstractClass/analyzerCode: Fail
 EnumSupertypeOfNonAbstractClass/example: Fail
 EqualityCannotBeEqualityOperand/part_wrapped_script1: Fail
@@ -566,6 +578,8 @@
 LibraryDirectiveNotFirst/script3: Fail
 ListLiteralTooManyTypeArguments/example: Fail
 LoadLibraryTakesNoArguments/example: Fail
+MacroClassNotDeclaredMacro/analyzerCode: Fail
+MacroClassNotDeclaredMacro/example: Fail
 MainNotFunctionDeclaration/analyzerCode: Fail
 MainNotFunctionDeclarationExported/analyzerCode: Fail
 MainNotFunctionDeclarationExported/part_wrapped_script: Fail
@@ -630,6 +644,8 @@
 NonAgnosticConstant/example: Fail
 NonAsciiIdentifier/expression: Fail
 NonAsciiIdentifier/part_wrapped_expression: Fail
+NonAugmentationClassMemberConflict/analyzerCode: Fail
+NonAugmentationClassMemberConflict/example: Fail
 NonConstConstructor/example: Fail
 NonConstFactory/example: Fail
 NonInstanceTypeVariableUse/example: Fail
@@ -693,6 +709,8 @@
 OperatorParameterMismatch2/example: Fail
 OperatorWithOptionalFormals/analyzerCode: Fail
 OperatorWithOptionalFormals/example: Fail
+OptionalSuperParameterWithoutInitializer/analyzerCode: Fail
+OptionalSuperParameterWithoutInitializer/example: Fail
 OverrideFewerNamedArguments/example: Fail
 OverrideFewerPositionalArguments/example: Fail
 OverrideMismatchNamedParameter/example: Fail
@@ -835,6 +853,8 @@
 UndefinedExtensionSetter/example: Fail
 UnexpectedToken/part_wrapped_script1: Fail
 UnexpectedToken/script1: Fail
+UnmatchedAugmentationClassMember/analyzerCode: Fail
+UnmatchedAugmentationClassMember/example: Fail
 UnmatchedToken/part_wrapped_script1: Fail
 UnmatchedToken/part_wrapped_script3: Fail
 UnmatchedToken/script1: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 67467be..d165d4c 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -482,6 +482,24 @@
   analyzerCode: MULTIPLE_IMPLEMENTS_CLAUSES
   script: "class A implements B implements C, D {}"
 
+MultipleClauses:
+  problemMessage: "Each '#string' definition can have at most one '#string2' clause."
+  correctionMessage: "Try combining all of the '#string2' clauses into a single clause."
+  experiments: enhanced-enums
+  analyzerCode: ParserErrorCode.MULTIPLE_CLAUSES
+  index: 121
+  script:
+    - "class B {} enum A implements B implements C, D { v; }"
+    - "class B {} enum A with B with C, D { v; }"
+
+OutOfOrderClauses:
+  problemMessage: "The '#string' clause must come before the '#string2' clause."
+  correctionMessage: "Try moving the '#string' clause before the '#string2' clause."
+  experiments: enhanced-enums
+  analyzerCode: ParserErrorCode.OUT_OF_ORDER_CLAUSES
+  index: 122
+  script: "class B {} class D {} enum A implements B with D { v; }"
+
 MultipleOnClauses:
   index: 26
   problemMessage: "Each mixin definition can have at most one on clause."
@@ -1135,10 +1153,6 @@
       }
     }
 
-ContinueLabelNotTarget:
-  problemMessage: "Target of continue must be a label."
-  analyzerCode: LABEL_UNDEFINED
-
 ContinueWithoutLabelInCase:
   index: 64
   problemMessage: "A continue statement in a switch statement must have a label as a target."
@@ -1321,6 +1335,12 @@
   script:
     - "import 'b.dart' d as b;"
 
+UnexpectedTokens:
+  problemMessage: "Unexpected tokens."
+  analyzerCode: ParserErrorCode.UNEXPECTED_TOKENS
+  index: 123
+  script: "enum E w Foo { v; }"
+
 LiteralWithClassAndNew:
   problemMessage: "A #string literal can't be prefixed by 'new #lexeme'."
   correctionMessage: "Try removing 'new' and '#lexeme'"
@@ -1706,6 +1726,7 @@
   problemMessage: "Field formal parameters can only be used in a constructor."
   correctionMessage: "Try removing 'this.'."
   analyzerCode: ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
+  hasPublishedDocs: true
   script:
     - "class C { void m(this.x); }"
 
@@ -5461,3 +5482,40 @@
 
 EnumEntryWithTypeArgumentsWithoutArguments:
   problemMessage: "Missing arguments in enum constructor invocation."
+
+EnumNonConstConstructor:
+  problemMessage: "Generative enum constructors must be marked as 'const'."
+
+EnumConstructorSuperInitializer:
+  problemMessage: "Enum constructors can't contain super-initializers."
+
+EnumConstructorTearoff:
+  problemMessage: "Enum constructors can't be torn off."
+
+EnumFactoryRedirectsToConstructor:
+  problemMessage: "Enum factory constructors can't redirect to generative constructors."
+
+EnumContainsValuesDeclaration:
+  problemMessage: "Enums can't contain declarations of members with the name 'values'."
+
+EnumImplementerContainsValuesDeclaration:
+  problemMessage: "'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'."
+
+MacroClassNotDeclaredMacro:
+  problemMessage: "Non-abstract class '#name' implements 'Macro' but isn't declared as a macro class."
+  correctionMessage: "Try adding the 'macro' class modifier."
+
+UnmatchedAugmentationClassMember:
+  problemMessage: "Augmentation member '#name' doesn't match a member in the augmented class."
+  correctionMessage: "Try changing the name to an existing member or removing the 'augment' modifier."
+
+NonAugmentationClassMemberConflict:
+  problemMessage: "Member '#name' conflicts with an existing member of the same name in the augmented class."
+  correctionMessage: "Try changing the name to an existing member or adding an 'augment' modifier."
+
+NonAugmentationClassMemberConflictCause:
+  problemMessage: "This is the existing member."
+  severity: CONTEXT
+
+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."
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart
new file mode 100644
index 0000000..8a9b209
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart
@@ -0,0 +1,60 @@
+class Class {
+  augment method() {}
+  augment void method() {}
+  augment get getter => null;
+  augment int get getter => 0;
+  augment set setter(value) {}
+  augment void set setter(value) {}
+  augment var field;
+  augment final field = 0;
+  augment const field = 0;
+  augment int field;
+  augment late var field;
+  augment late final field;
+  augment late int field;
+
+  augment static method() {}
+  augment static void method() {}
+  augment static get getter => null;
+  augment static int get getter => 0;
+  augment static set setter(value) {}
+  augment static void set setter(value) {}
+  augment static var field;
+  augment static final field = 0;
+  augment static const field = 0;
+  augment static int field;
+  augment static late var field;
+  augment static late final field;
+  augment static late int field;
+}
+
+mixin Mixin {
+  augment method() {}
+  augment void method() {}
+  augment get getter => null;
+  augment int get getter => 0;
+  augment set setter(value) {}
+  augment void set setter(value) {}
+  augment var field;
+  augment final field = 0;
+  augment const field = 0;
+  augment int field;
+  augment late var field;
+  augment late final field;
+  augment late int field;
+
+  augment static method() {}
+  augment static void method() {}
+  augment static get getter => null;
+  augment static int get getter => 0;
+  augment static set setter(value) {}
+  augment static void set setter(value) {}
+  augment static var field;
+  augment static final field = 0;
+  augment static const field = 0;
+  augment static int field;
+  augment static late var field;
+  augment static late final field;
+  augment static late int field;
+}
+
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
new file mode 100644
index 0000000..91c611c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
@@ -0,0 +1,730 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+            handleNoType(augment)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+            handleNoType(augment)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+            handleNoType(augment)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, var, })
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+            handleNoType(static)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+            handleNoType(static)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+            handleNoType(static)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, var, })
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, late, null, 1, augment, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 26, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(mixin)
+  beginMetadataStar(mixin)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
+    handleIdentifier(Mixin, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginMixinDeclaration(null, mixin, Mixin)
+      handleMixinOn(null, 0)
+      handleImplements(null, 0)
+      handleMixinHeader(mixin)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, null, method)
+            handleNoType(augment)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, get, getter)
+            handleNoType(augment)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endMixinMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endMixinMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, set, setter)
+            handleNoType(augment)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, var, })
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, null, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endMixinFields(null, augment, null, null, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endMixinFields(null, augment, null, null, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, null, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, null, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, null, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, null, null, late, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, null, method)
+            handleNoType(static)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, get, getter)
+            handleNoType(static)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endMixinMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endMixinMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, set, setter)
+            handleNoType(static)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMixinMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, var, })
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, static, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endMixinFields(null, augment, null, static, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endMixinFields(null, augment, null, static, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, static, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, static, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, static, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Mixin, null, augment, null, static, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endMixinFields(null, augment, null, static, null, late, null, 1, augment, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 26, {, })
+    endMixinDeclaration(mixin, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..7f35186
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
@@ -0,0 +1,1404 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, augment, null, null, null, null, null, augment, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralNull(=>)
+                              listener: handleLiteralNull(null)
+                    ensureSemicolon(null)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(}, null, augment, null, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, var, })
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, null, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+                listener: handleNoType(static)
+                ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                  parseFormalParameters(method, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                  parseFormalParameters(method, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+                listener: handleNoType(static)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralNull(=>)
+                              listener: handleLiteralNull(null)
+                    ensureSemicolon(null)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+                listener: handleNoType(static)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                  parseFormalParameters(setter, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                  parseFormalParameters(setter, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(}, null, augment, null, static, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, var, })
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, null, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, null, null, static, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, late, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, late, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, late, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 26, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(mixin)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(mixin)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, mixin, null, Instance of 'DirectiveContext')
+      parseMixin(null, mixin)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
+        ensureIdentifier(mixin, classOrMixinDeclaration)
+          listener: handleIdentifier(Mixin, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginMixinDeclaration(null, mixin, Mixin)
+        parseMixinHeaderOpt(Mixin, mixin)
+          parseMixinOnOpt(Mixin)
+            listener: handleMixinOn(null, 0)
+          parseClassOrMixinOrEnumImplementsOpt(Mixin)
+            listener: handleImplements(null, 0)
+          listener: handleMixinHeader(mixin)
+        parseClassOrMixinOrExtensionBody(Mixin, DeclarationKind.Mixin, Mixin)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar({)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            isReservedKeyword(()
+            parseMethod({, null, augment, null, null, null, null, null, augment, Instance of 'NoType', null, method, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, null, method)
+              listener: handleNoType(augment)
+              ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
+                listener: handleIdentifier(method, methodDeclaration)
+              parseQualifiedRestOpt(method, methodDeclarationContinuation)
+              parseMethodTypeVar(method)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                parseFormalParameters(method, 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(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(null, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, method, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, null, method)
+              listener: handleVoidKeyword(void)
+              ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                listener: handleIdentifier(method, methodDeclaration)
+              parseQualifiedRestOpt(method, methodDeclarationContinuation)
+              parseMethodTypeVar(method)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                parseFormalParameters(method, 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(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(null, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'NoType', get, getter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, get, getter)
+              listener: handleNoType(augment)
+              ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                listener: handleIdentifier(getter, methodDeclaration)
+              parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(=>)
+              parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+              parseInitializersOpt(getter)
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt(getter)
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              inPlainSync()
+              parseFunctionBody(getter, false, true)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralNull(=>)
+                            listener: handleLiteralNull(null)
+                  ensureSemicolon(null)
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endMixinMethod(get, augment, =>, null, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', get, getter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, get, getter)
+              listener: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(get)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                listener: handleIdentifier(getter, methodDeclaration)
+              parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(=>)
+              parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+              parseInitializersOpt(getter)
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt(getter)
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              inPlainSync()
+              parseFunctionBody(getter, false, true)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralInt(=>)
+                            listener: handleLiteralInt(0)
+                  ensureSemicolon(0)
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endMixinMethod(get, augment, =>, null, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'NoType', set, setter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, set, setter)
+              listener: handleNoType(augment)
+              ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                listener: handleIdentifier(setter, methodDeclaration)
+              parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(value)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(value, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, true)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(set, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(}, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', set, setter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, set, setter)
+              listener: handleVoidKeyword(void)
+              ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                listener: handleIdentifier(setter, methodDeclaration)
+              parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(value)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(value, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, true)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(set, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(}, null, augment, null, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, var, })
+              listener: handleNoType(var)
+              ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, null, null, null, var, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, null, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, final, ;)
+              listener: handleNoType(final)
+              ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Mixin, Mixin)
+                listener: beginFieldInitializer(=)
+                parseExpression(=)
+                  parsePrecedenceExpression(=, 1, true)
+                    parseUnaryExpression(=, true)
+                      parsePrimary(=, expression)
+                        parseLiteralInt(=)
+                          listener: handleLiteralInt(0)
+                listener: endFieldInitializer(=, ;)
+              listener: endMixinFields(null, augment, null, null, null, null, final, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, null, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, const, ;)
+              listener: handleNoType(const)
+              ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Mixin, Mixin)
+                listener: beginFieldInitializer(=)
+                parseExpression(=)
+                  parsePrecedenceExpression(=, 1, true)
+                    parseUnaryExpression(=, true)
+                      parsePrimary(=, expression)
+                        parseLiteralInt(=)
+                          listener: handleLiteralInt(0)
+                listener: endFieldInitializer(=, ;)
+              listener: endMixinFields(null, augment, null, null, null, null, const, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, null, ;)
+              listener: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(field)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, null, null, null, null, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, null, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, late, var, ;)
+              listener: handleNoType(var)
+              ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, null, null, late, var, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, null, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, late, final, ;)
+              listener: handleNoType(final)
+              ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, null, null, late, final, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, null, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, late, null, ;)
+              listener: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(field)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, null, null, late, null, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            isReservedKeyword(()
+            parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'NoType', null, method, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, null, method)
+              listener: handleNoType(static)
+              ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
+                listener: handleIdentifier(method, methodDeclaration)
+              parseQualifiedRestOpt(method, methodDeclarationContinuation)
+              parseMethodTypeVar(method)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                parseFormalParameters(method, MemberKind.StaticMethod)
+                  parseFormalParametersRest((, MemberKind.StaticMethod)
+                    listener: beginFormalParameters((, MemberKind.StaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              parseFunctionBody(), false, false)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(null, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'VoidType', null, method, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, null, method)
+              listener: handleVoidKeyword(void)
+              ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                listener: handleIdentifier(method, methodDeclaration)
+              parseQualifiedRestOpt(method, methodDeclarationContinuation)
+              parseMethodTypeVar(method)
+                listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                parseFormalParameters(method, MemberKind.StaticMethod)
+                  parseFormalParametersRest((, MemberKind.StaticMethod)
+                    listener: beginFormalParameters((, MemberKind.StaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              parseFunctionBody(), false, false)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(null, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'NoType', get, getter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, get, getter)
+              listener: handleNoType(static)
+              ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                listener: handleIdentifier(getter, methodDeclaration)
+              parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(=>)
+              parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+              parseInitializersOpt(getter)
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt(getter)
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(getter, false, false)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralNull(=>)
+                            listener: handleLiteralNull(null)
+                  ensureSemicolon(null)
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endMixinMethod(get, augment, =>, null, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'SimpleType', get, getter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, get, getter)
+              listener: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(get)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                listener: handleIdentifier(getter, methodDeclaration)
+              parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(=>)
+              parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+              parseInitializersOpt(getter)
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt(getter)
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(getter, false, false)
+                parseExpressionFunctionBody(=>, false)
+                  parseExpression(=>)
+                    parsePrecedenceExpression(=>, 1, true)
+                      parseUnaryExpression(=>, true)
+                        parsePrimary(=>, expression)
+                          parseLiteralInt(=>)
+                            listener: handleLiteralInt(0)
+                  ensureSemicolon(0)
+                  listener: handleExpressionFunctionBody(=>, ;)
+                  inGenerator()
+              listener: endMixinMethod(get, augment, =>, null, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'NoType', set, setter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, set, setter)
+              listener: handleNoType(static)
+              ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                listener: handleIdentifier(setter, methodDeclaration)
+              parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                parseFormalParameters(setter, MemberKind.StaticMethod)
+                  parseFormalParametersRest((, MemberKind.StaticMethod)
+                    listener: beginFormalParameters((, MemberKind.StaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(value)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(value, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, false)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(set, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'VoidType', set, setter, DeclarationKind.Mixin, Mixin, false)
+              listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, set, setter)
+              listener: handleVoidKeyword(void)
+              ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                listener: handleIdentifier(setter, methodDeclaration)
+              parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+              listener: handleNoTypeVariables(()
+              parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                parseFormalParameters(setter, MemberKind.StaticMethod)
+                  parseFormalParametersRest((, MemberKind.StaticMethod)
+                    listener: beginFormalParameters((, MemberKind.StaticMethod)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(value)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(value, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                    listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+              parseInitializersOpt())
+                listener: handleNoInitializers()
+              parseAsyncModifierOpt())
+                listener: handleAsyncModifier(null, null)
+                inPlainSync()
+              inPlainSync()
+              parseFunctionBody(), false, false)
+                listener: beginBlockFunctionBody({)
+                notEofOrValue(}, })
+                listener: endBlockFunctionBody(0, {, })
+              listener: endMixinMethod(set, augment, (, null, })
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(})
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(}, null, augment, null, static, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, var, })
+              listener: handleNoType(var)
+              ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, static, null, null, var, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, static, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, final, ;)
+              listener: handleNoType(final)
+              ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Mixin, Mixin)
+                listener: beginFieldInitializer(=)
+                parseExpression(=)
+                  parsePrecedenceExpression(=, 1, true)
+                    parseUnaryExpression(=, true)
+                      parsePrimary(=, expression)
+                        parseLiteralInt(=)
+                          listener: handleLiteralInt(0)
+                listener: endFieldInitializer(=, ;)
+              listener: endMixinFields(null, augment, null, static, null, null, final, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, static, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, const, ;)
+              listener: handleNoType(const)
+              ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Mixin, Mixin)
+                listener: beginFieldInitializer(=)
+                parseExpression(=)
+                  parsePrecedenceExpression(=, 1, true)
+                    parseUnaryExpression(=, true)
+                      parsePrimary(=, expression)
+                        parseLiteralInt(=)
+                          listener: handleLiteralInt(0)
+                listener: endFieldInitializer(=, ;)
+              listener: endMixinFields(null, augment, null, static, null, null, const, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, static, null, null, null, static, Instance of 'SimpleType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, null, ;)
+              listener: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(field)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, static, null, null, null, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, static, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, late, var, ;)
+              listener: handleNoType(var)
+              ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, static, null, late, var, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, static, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, late, final, ;)
+              listener: handleNoType(final)
+              ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, static, null, late, final, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, augment)
+          parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
+            parseMetadataStar(;)
+              listener: beginMetadataStar(augment)
+              listener: endMetadataStar(0)
+            listener: beginMember()
+            parseFields(;, null, augment, null, static, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Mixin, Mixin, false)
+              listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, late, null, ;)
+              listener: handleIdentifier(int, typeReference)
+              listener: handleNoTypeArguments(field)
+              listener: handleType(int, null)
+              ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                listener: handleIdentifier(field, fieldDeclaration)
+              parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Mixin, Mixin)
+                listener: handleNoFieldInitializer(;)
+              listener: endMixinFields(null, augment, null, static, null, late, null, 1, augment, ;)
+            listener: endMember()
+          notEofOrValue(}, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 26, {, })
+        listener: endMixinDeclaration(mixin, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.parser.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.parser.expect
new file mode 100644
index 0000000..abf7b68
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.parser.expect
@@ -0,0 +1,123 @@
+class Class {
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+
+augment static method() {}
+augment static void method() {}
+augment static get getter => null;
+augment static int get getter => 0;
+augment static set setter(value) {}
+augment static void set setter(value) {}
+augment static var field;
+augment static final field = 0;
+augment static const field = 0;
+augment static int field;
+augment static late var field;
+augment static late final field;
+augment static late int field;
+}
+
+mixin Mixin {
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+
+augment static method() {}
+augment static void method() {}
+augment static get getter => null;
+augment static int get getter => 0;
+augment static set setter(value) {}
+augment static void set setter(value) {}
+augment static var field;
+augment static final field = 0;
+augment static const field = 0;
+augment static int field;
+augment static late var field;
+augment static late final field;
+augment static late int field;
+}
+
+
+
+class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] static[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+}[SimpleToken]
+
+mixin[KeywordToken] Mixin[StringToken] {[BeginToken]
+augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] static[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.scanner.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.scanner.expect
new file mode 100644
index 0000000..abf7b68
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.scanner.expect
@@ -0,0 +1,123 @@
+class Class {
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+
+augment static method() {}
+augment static void method() {}
+augment static get getter => null;
+augment static int get getter => 0;
+augment static set setter(value) {}
+augment static void set setter(value) {}
+augment static var field;
+augment static final field = 0;
+augment static const field = 0;
+augment static int field;
+augment static late var field;
+augment static late final field;
+augment static late int field;
+}
+
+mixin Mixin {
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+
+augment static method() {}
+augment static void method() {}
+augment static get getter => null;
+augment static int get getter => 0;
+augment static set setter(value) {}
+augment static void set setter(value) {}
+augment static var field;
+augment static final field = 0;
+augment static const field = 0;
+augment static int field;
+augment static late var field;
+augment static late final field;
+augment static late int field;
+}
+
+
+
+class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] static[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+}[SimpleToken]
+
+mixin[KeywordToken] Mixin[StringToken] {[BeginToken]
+augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] static[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] static[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] static[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart b/pkg/front_end/parser_testcases/augmentation/member_errors.dart
new file mode 100644
index 0000000..94d62a9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart
@@ -0,0 +1,92 @@
+class Class {
+  augment augment method() {}
+  augment external method();
+  external augment method();
+
+  augment augment void method() {}
+  augment external void method();
+  external augment void method();
+
+  augment augment get getter => null;
+  augment external get getter;
+  external augment get getter;
+
+  augment augment int get getter => 0;
+  augment external int get getter;
+  external augment int get getter;
+
+  augment augment set setter(value) {}
+  augment external set setter(value);
+  external augment set setter(value);
+
+  augment augment void set setter(value) {}
+  augment external void set setter(value);
+  external augment void set setter(value);
+
+  augment augment var field;
+  augment external var field;
+  external augment var field;
+
+  augment augment final field = 0;
+  augment external final field;
+  external augment final field;
+
+  augment augment const field = 0;
+  augment external const field;
+  external augment const field;
+
+  augment augment int field;
+  augment external int field;
+  external augment int field;
+
+  augment augment late var field;
+  augment late var field;
+  augment late var field;
+
+  augment augment late final field;
+  augment late final field;
+  augment late final field;
+
+  augment augment late int field;
+  augment late int field;
+  augment late int field;
+
+  augment augment static method() {}
+  static augment method() {}
+
+  augment augment static void method() {}
+  static augment void method() {}
+
+  augment augment static get getter => null;
+  static augment get getter => null;
+
+  augment augment static int get getter => 0;
+  static augment int get getter => 0;
+
+  augment augment static set setter(value) {}
+  static augment set setter(value) {}
+
+  augment augment static void set setter(value) {}
+  static augment void set setter(value) {}
+
+  augment augment static var field;
+  static augment var field;
+
+  augment augment static final field = 0;
+  static augment final field = 0;
+
+  augment augment static const field = 0;
+  static augment const field = 0;
+
+  augment augment static int field;
+  static augment int field;
+
+  augment augment static late var field;
+  static augment late var field;
+
+  augment augment static late final field;
+  static augment late final field;
+
+  augment augment static late int field;
+  static augment late int field;
+}
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
new file mode 100644
index 0000000..693edbe
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
@@ -0,0 +1,1179 @@
+Problems reported:
+
+parser/augmentation/member_errors:2:11: The modifier 'augment' was already specified.
+  augment augment method() {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:3:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external method();
+          ^^^^^^^^
+
+parser/augmentation/member_errors:4:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment method();
+           ^^^^^^^
+
+parser/augmentation/member_errors:6:11: The modifier 'augment' was already specified.
+  augment augment void method() {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:7:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external void method();
+          ^^^^^^^^
+
+parser/augmentation/member_errors:8:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment void method();
+           ^^^^^^^
+
+parser/augmentation/member_errors:10:11: The modifier 'augment' was already specified.
+  augment augment get getter => null;
+          ^^^^^^^
+
+parser/augmentation/member_errors:11:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external get getter;
+          ^^^^^^^^
+
+parser/augmentation/member_errors:12:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment get getter;
+           ^^^^^^^
+
+parser/augmentation/member_errors:14:11: The modifier 'augment' was already specified.
+  augment augment int get getter => 0;
+          ^^^^^^^
+
+parser/augmentation/member_errors:15:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external int get getter;
+          ^^^^^^^^
+
+parser/augmentation/member_errors:16:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment int get getter;
+           ^^^^^^^
+
+parser/augmentation/member_errors:18:11: The modifier 'augment' was already specified.
+  augment augment set setter(value) {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:19:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external set setter(value);
+          ^^^^^^^^
+
+parser/augmentation/member_errors:20:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment set setter(value);
+           ^^^^^^^
+
+parser/augmentation/member_errors:22:11: The modifier 'augment' was already specified.
+  augment augment void set setter(value) {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:23:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external void set setter(value);
+          ^^^^^^^^
+
+parser/augmentation/member_errors:24:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment void set setter(value);
+           ^^^^^^^
+
+parser/augmentation/member_errors:26:11: The modifier 'augment' was already specified.
+  augment augment var field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:27:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external var field;
+          ^^^^^^^^
+
+parser/augmentation/member_errors:28:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment var field;
+           ^^^^^^^
+
+parser/augmentation/member_errors:30:11: The modifier 'augment' was already specified.
+  augment augment final field = 0;
+          ^^^^^^^
+
+parser/augmentation/member_errors:31:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external final field;
+          ^^^^^^^^
+
+parser/augmentation/member_errors:32:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment final field;
+           ^^^^^^^
+
+parser/augmentation/member_errors:34:11: The modifier 'augment' was already specified.
+  augment augment const field = 0;
+          ^^^^^^^
+
+parser/augmentation/member_errors:35:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external const field;
+          ^^^^^^^^
+
+parser/augmentation/member_errors:35:26: The const variable 'field' must be initialized.
+  augment external const field;
+                         ^^^^^
+
+parser/augmentation/member_errors:36:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment const field;
+           ^^^^^^^
+
+parser/augmentation/member_errors:36:26: The const variable 'field' must be initialized.
+  external augment const field;
+                         ^^^^^
+
+parser/augmentation/member_errors:38:11: The modifier 'augment' was already specified.
+  augment augment int field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:39:11: Members can't be declared to be both 'external' and 'augment'.
+  augment external int field;
+          ^^^^^^^^
+
+parser/augmentation/member_errors:40:12: Members can't be declared to be both 'augment' and 'external'.
+  external augment int field;
+           ^^^^^^^
+
+parser/augmentation/member_errors:42:11: The modifier 'augment' was already specified.
+  augment augment late var field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:46:11: The modifier 'augment' was already specified.
+  augment augment late final field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:50:11: The modifier 'augment' was already specified.
+  augment augment late int field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:54:11: The modifier 'augment' was already specified.
+  augment augment static method() {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:55:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment method() {}
+         ^^^^^^^
+
+parser/augmentation/member_errors:57:11: The modifier 'augment' was already specified.
+  augment augment static void method() {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:58:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment void method() {}
+         ^^^^^^^
+
+parser/augmentation/member_errors:60:11: The modifier 'augment' was already specified.
+  augment augment static get getter => null;
+          ^^^^^^^
+
+parser/augmentation/member_errors:61:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment get getter => null;
+         ^^^^^^^
+
+parser/augmentation/member_errors:63:11: The modifier 'augment' was already specified.
+  augment augment static int get getter => 0;
+          ^^^^^^^
+
+parser/augmentation/member_errors:64:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment int get getter => 0;
+         ^^^^^^^
+
+parser/augmentation/member_errors:66:11: The modifier 'augment' was already specified.
+  augment augment static set setter(value) {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:67:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment set setter(value) {}
+         ^^^^^^^
+
+parser/augmentation/member_errors:69:11: The modifier 'augment' was already specified.
+  augment augment static void set setter(value) {}
+          ^^^^^^^
+
+parser/augmentation/member_errors:70:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment void set setter(value) {}
+         ^^^^^^^
+
+parser/augmentation/member_errors:72:11: The modifier 'augment' was already specified.
+  augment augment static var field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:73:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment var field;
+         ^^^^^^^
+
+parser/augmentation/member_errors:75:11: The modifier 'augment' was already specified.
+  augment augment static final field = 0;
+          ^^^^^^^
+
+parser/augmentation/member_errors:76:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment final field = 0;
+         ^^^^^^^
+
+parser/augmentation/member_errors:78:11: The modifier 'augment' was already specified.
+  augment augment static const field = 0;
+          ^^^^^^^
+
+parser/augmentation/member_errors:79:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment const field = 0;
+         ^^^^^^^
+
+parser/augmentation/member_errors:81:11: The modifier 'augment' was already specified.
+  augment augment static int field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:82:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment int field;
+         ^^^^^^^
+
+parser/augmentation/member_errors:84:11: The modifier 'augment' was already specified.
+  augment augment static late var field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:85:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment late var field;
+         ^^^^^^^
+
+parser/augmentation/member_errors:87:11: The modifier 'augment' was already specified.
+  augment augment static late final field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:88:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment late final field;
+         ^^^^^^^
+
+parser/augmentation/member_errors:90:11: The modifier 'augment' was already specified.
+  augment augment static late int field;
+          ^^^^^^^
+
+parser/augmentation/member_errors:91:10: The modifier 'augment' should be before the modifier 'static'.
+  static augment late int field;
+         ^^^^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+            handleNoType(augment)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, external, null, null, null, null, method)
+            handleNoType(external)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(null, augment, (, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, method)
+            handleNoType(augment)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(null, external, (, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, external, null, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(null, augment, (, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(null, external, (, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+            handleNoType(augment)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, external, null, null, null, get, getter)
+            handleNoType(external)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(;)
+            handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(get, augment, ;, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, get, getter)
+            handleNoType(augment)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(;)
+            handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(get, external, ;, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, external, null, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(;)
+            handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(get, augment, ;, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(;)
+            handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(get, external, ;, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+            handleNoType(augment)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, external, null, null, null, set, setter)
+            handleNoType(external)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(set, augment, (, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, set, setter)
+            handleNoType(augment)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(set, external, (, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, external, null, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(set, augment, (, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassMethod(set, external, (, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, external, null, null, null, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, external, null, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, external, null, null, null, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, external, null, null, null, var, 1, external, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, external, null, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, external, null, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, external, null, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, external, null, null, null, final, 1, external, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, external, null, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}], field, field)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, external, null, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, external, null, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}], field, field)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, external, null, null, null, const, 1, external, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, external, null, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, external, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, external, null, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, external, null, null, null, null, 1, external, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+            handleNoType(static)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, null, method)
+            handleNoType(augment)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, static, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, augment, (, null, })
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, null, method)
+            handleVoidKeyword(void)
+            handleIdentifier(method, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(null, static, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+            handleNoType(static)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, get, getter)
+            handleNoType(augment)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralNull(null)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, static, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, augment, =>, null, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, get, getter)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(getter, methodDeclaration)
+            handleNoTypeVariables(=>)
+            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endClassMethod(get, static, =>, null, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+            handleNoType(static)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, set, setter)
+            handleNoType(augment)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, static, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, augment, (, null, })
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, set, setter)
+            handleVoidKeyword(void)
+            handleIdentifier(setter, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.StaticMethod)
+              beginMetadataStar(value)
+              endMetadataStar(0)
+              beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endClassMethod(set, static, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, var, })
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, null, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, null, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, null, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, static, null, null, final, 1, static, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, null, const, ;)
+            handleNoType(const)
+            handleIdentifier(field, fieldDeclaration)
+            beginFieldInitializer(=)
+              handleLiteralInt(0)
+            endFieldInitializer(=, ;)
+          endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, null, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, static, null, null, null, 1, static, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, late, var, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, late, var, ;)
+            handleNoType(var)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, static, null, late, var, 1, static, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, late, final, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, late, final, ;)
+            handleNoType(final)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, static, null, late, final, 1, static, ;)
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, augment, null, static, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, augment, null, static, null, late, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(static)
+        endMetadataStar(0)
+        handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, static, null, late, null, ;)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(field)
+            handleType(int, null)
+            handleIdentifier(field, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 65, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..01ea526
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
@@ -0,0 +1,1763 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, augment, null, null, null, null, null, augment, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(}, null, augment, external, null, null, null, null, external, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, null, method)
+                listener: handleNoType(external)
+                ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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: endClassMethod(null, augment, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, null, external, null, null, null, null, augment, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, method)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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: endClassMethod(null, external, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseMethod(}, null, augment, external, null, null, null, null, external, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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: endClassMethod(null, augment, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, external, null, null, null, null, augment, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(method, 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: endClassMethod(null, external, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralNull(=>)
+                              listener: handleLiteralNull(null)
+                    ensureSemicolon(null)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseMethod(;, null, augment, external, null, null, null, null, external, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, get, getter)
+                listener: handleNoType(external)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(;)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(get, augment, ;, null, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, external, null, null, null, null, augment, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, get, getter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(;)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(get, external, ;, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseMethod(;, null, augment, external, null, null, null, null, external, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(;)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(get, augment, ;, null, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, external, null, null, null, null, augment, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(;)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters(;, MemberKind.NonStaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(get, external, ;, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseMethod(}, null, augment, external, null, null, null, null, external, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, set, setter)
+                listener: handleNoType(external)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(set, augment, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, external, null, null, null, null, augment, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, set, setter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(set, external, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, null, null, null, null, augment, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseMethod(}, null, augment, external, null, null, null, null, external, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(set, augment, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, external, null, null, null, null, augment, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassMethod(set, external, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, null, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseFields(;, null, augment, external, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, external, null, null, null, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, external, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, external, null, null, null, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, external, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, external, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, external, null, null, null, var, 1, external, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseFields(;, null, augment, external, null, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, external, null, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, external, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, external, null, null, null, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, external, null, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, external, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, external, null, null, null, final, 1, external, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseFields(;, null, augment, external, null, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, external, null, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, external, const, DeclarationKind.Class, Class)
+                  reportRecoverableError(field, Message[ConstFieldWithoutInitializer, The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}])
+                    listener: handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}], field, field)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, external, null, null, null, const, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, external, null, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, external, const, DeclarationKind.Class, Class)
+                  reportRecoverableError(field, Message[ConstFieldWithoutInitializer, The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}])
+                    listener: handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}], field, field)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, external, null, null, null, const, 1, external, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+              listener: beginMember()
+              parseFields(;, null, augment, external, null, null, null, null, external, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, external, null, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, external, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, external, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+                listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, external, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, external, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, external, null, null, null, null, 1, external, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, augment, null, null, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+                listener: handleNoType(static)
+                ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                  parseFormalParameters(method, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(}, null, null, null, static, null, null, null, augment, Instance of 'NoType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, method)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                  parseFormalParameters(method, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, static, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                  parseFormalParameters(method, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseMethod(}, null, null, null, static, null, null, null, augment, Instance of 'VoidType', null, method, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, method)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(method, methodDeclaration)
+                parseQualifiedRestOpt(method, methodDeclarationContinuation)
+                parseMethodTypeVar(method)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(method, method, false, MemberKind.StaticMethod)
+                  parseFormalParameters(method, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(null, static, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+                listener: handleNoType(static)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralNull(=>)
+                              listener: handleLiteralNull(null)
+                    ensureSemicolon(null)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, null, static, null, null, null, augment, Instance of 'NoType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, getter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralNull(=>)
+                              listener: handleLiteralNull(null)
+                    ensureSemicolon(null)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, static, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, augment, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, null, null, static, null, null, null, augment, Instance of 'SimpleType', get, getter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, getter)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(getter, methodDeclaration)
+                parseQualifiedRestOpt(getter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(=>)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.StaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseInitializersOpt(getter)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(getter)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(getter, false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      parsePrecedenceExpression(=>, 1, true)
+                        parseUnaryExpression(=>, true)
+                          parsePrimary(=>, expression)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endClassMethod(get, static, =>, null, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(;, null, augment, null, static, null, null, null, static, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+                listener: handleNoType(static)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                  parseFormalParameters(setter, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseMethod(}, null, null, null, static, null, null, null, augment, Instance of 'NoType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, set, setter)
+                listener: handleNoType(augment)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                  parseFormalParameters(setter, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, static, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseMethod(}, null, augment, null, static, null, null, null, static, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                  parseFormalParameters(setter, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, augment, (, null, })
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseMethod(}, null, null, null, static, null, null, null, augment, Instance of 'VoidType', set, setter, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, set, setter)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(setter, methodDeclaration)
+                parseQualifiedRestOpt(setter, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.StaticMethod)
+                  parseFormalParameters(setter, MemberKind.StaticMethod)
+                    parseFormalParametersRest((, MemberKind.StaticMethod)
+                      listener: beginFormalParameters((, MemberKind.StaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(value)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(value, MemberKind.StaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.StaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endClassMethod(set, static, (, null, })
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(}, null, augment, null, static, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, var, })
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, null, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, null, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, null, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, null, final, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, static, null, null, final, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, null, const, const, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, const, ;)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, null, const, DeclarationKind.Class, Class)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(0)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, null, null, static, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, static, null, null, null, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, late, var, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, late, var, var, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, late, var, ;)
+                listener: handleNoType(var)
+                ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, null, null, var, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, static, null, late, var, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, late, final, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, late, final, final, Instance of 'NoType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, late, final, ;)
+                listener: handleNoType(final)
+                ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, null, null, final, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, static, null, late, final, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, augment, null, static, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, augment, null, static, null, late, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrValue(}, static)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(static)
+                listener: endMetadataStar(0)
+              reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
+                listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
+              listener: beginMember()
+              parseFields(;, null, null, null, static, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, late, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(field)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(field, fieldDeclaration)
+                parseFieldInitializerOpt(field, field, late, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 65, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.parser.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.parser.expect
new file mode 100644
index 0000000..652e6e7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.parser.expect
@@ -0,0 +1,187 @@
+class Class {
+augment augment method() {}
+augment external method();
+external augment method();
+
+augment augment void method() {}
+augment external void method();
+external augment void method();
+
+augment augment get getter => null;
+augment external get getter;
+external augment get getter;
+
+augment augment int get getter => 0;
+augment external int get getter;
+external augment int get getter;
+
+augment augment set setter(value) {}
+augment external set setter(value);
+external augment set setter(value);
+
+augment augment void set setter(value) {}
+augment external void set setter(value);
+external augment void set setter(value);
+
+augment augment var field;
+augment external var field;
+external augment var field;
+
+augment augment final field = 0;
+augment external final field;
+external augment final field;
+
+augment augment const field = 0;
+augment external const field;
+external augment const field;
+
+augment augment int field;
+augment external int field;
+external augment int field;
+
+augment augment late var field;
+augment late var field;
+augment late var field;
+
+augment augment late final field;
+augment late final field;
+augment late final field;
+
+augment augment late int field;
+augment late int field;
+augment late int field;
+
+augment augment static method() {}
+static augment method() {}
+
+augment augment static void method() {}
+static augment void method() {}
+
+augment augment static get getter => null;
+static augment get getter => null;
+
+augment augment static int get getter => 0;
+static augment int get getter => 0;
+
+augment augment static set setter(value) {}
+static augment set setter(value) {}
+
+augment augment static void set setter(value) {}
+static augment void set setter(value) {}
+
+augment augment static var field;
+static augment var field;
+
+augment augment static final field = 0;
+static augment final field = 0;
+
+augment augment static const field = 0;
+static augment const field = 0;
+
+augment augment static int field;
+static augment int field;
+
+augment augment static late var field;
+static augment late var field;
+
+augment augment static late final field;
+static augment late final field;
+
+augment augment static late int field;
+static augment late int field;
+}
+
+
+class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] const[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] const[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.scanner.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.scanner.expect
new file mode 100644
index 0000000..652e6e7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.scanner.expect
@@ -0,0 +1,187 @@
+class Class {
+augment augment method() {}
+augment external method();
+external augment method();
+
+augment augment void method() {}
+augment external void method();
+external augment void method();
+
+augment augment get getter => null;
+augment external get getter;
+external augment get getter;
+
+augment augment int get getter => 0;
+augment external int get getter;
+external augment int get getter;
+
+augment augment set setter(value) {}
+augment external set setter(value);
+external augment set setter(value);
+
+augment augment void set setter(value) {}
+augment external void set setter(value);
+external augment void set setter(value);
+
+augment augment var field;
+augment external var field;
+external augment var field;
+
+augment augment final field = 0;
+augment external final field;
+external augment final field;
+
+augment augment const field = 0;
+augment external const field;
+external augment const field;
+
+augment augment int field;
+augment external int field;
+external augment int field;
+
+augment augment late var field;
+augment late var field;
+augment late var field;
+
+augment augment late final field;
+augment late final field;
+augment late final field;
+
+augment augment late int field;
+augment late int field;
+augment late int field;
+
+augment augment static method() {}
+static augment method() {}
+
+augment augment static void method() {}
+static augment void method() {}
+
+augment augment static get getter => null;
+static augment get getter => null;
+
+augment augment static int get getter => 0;
+static augment int get getter => 0;
+
+augment augment static set setter(value) {}
+static augment set setter(value) {}
+
+augment augment static void set setter(value) {}
+static augment void set setter(value) {}
+
+augment augment static var field;
+static augment var field;
+
+augment augment static final field = 0;
+static augment final field = 0;
+
+augment augment static const field = 0;
+static augment const field = 0;
+
+augment augment static int field;
+static augment int field;
+
+augment augment static late var field;
+static augment late var field;
+
+augment augment static late final field;
+static augment late final field;
+
+augment augment static late int field;
+static augment late int field;
+}
+
+
+class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] const[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] const[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+static[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] static[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+static[KeywordToken] augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart
new file mode 100644
index 0000000..0348bf2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart
@@ -0,0 +1,18 @@
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+augment class Class {}
+augment abstract class Class {}
+augment class Class = Object with Mixin;
+augment abstract class Class = Object with Mixin;
+augment mixin Mixin {}
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
new file mode 100644
index 0000000..ff03f5c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.expect
@@ -0,0 +1,248 @@
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(, augment, null)
+      handleNoType(augment)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleNoType(augment)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(=>)
+      handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleLiteralNull(null)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(augment, get, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(;, augment, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(=>)
+      handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleLiteralInt(0)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(augment, get, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(;, augment, null)
+      handleNoType(augment)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, set, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, set, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, var, })
+      handleNoType(var)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, var, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, final, ;)
+      handleNoType(final)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(0)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, final, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, const, ;)
+      handleNoType(const)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(0)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, const, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, null, ;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(field)
+      handleType(int, null)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, late, var, ;)
+      handleNoType(var)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, late, var, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, late, final, ;)
+      handleNoType(final)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, late, final, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, late, null, ;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(field)
+      handleType(int, null)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, late, null, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(abstract, abstract, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(abstract, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(abstract, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, null, augment, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(abstract, abstract, null, augment, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(abstract, class, =, null, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
+    handleIdentifier(Mixin, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginMixinDeclaration(augment, mixin, Mixin)
+      handleMixinOn(null, 0)
+      handleImplements(null, 0)
+      handleMixinHeader(mixin)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
+    endMixinDeclaration(mixin, })
+  endTopLevelDeclaration()
+endCompilationUnit(18, )
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
new file mode 100644
index 0000000..3bc9178
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
@@ -0,0 +1,453 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(()
+      parseTopLevelMethod(, augment, null, augment, Instance of 'NoType', null, method, false)
+        listener: beginTopLevelMethod(, augment, null)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'VoidType', null, method, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(=>)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'NoType', get, getter, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(=>)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true)
+                parseUnaryExpression(=>, true)
+                  parsePrimary(=>, expression)
+                    parseLiteralNull(=>)
+                      listener: handleLiteralNull(null)
+            ensureSemicolon(null)
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(augment, get, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'SimpleType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(=>)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true)
+                parseUnaryExpression(=>, true)
+                  parsePrimary(=>, expression)
+                    parseLiteralInt(=>)
+                      listener: handleLiteralInt(0)
+            ensureSemicolon(0)
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(augment, get, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'NoType', set, setter, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, set, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, augment, null, augment, Instance of 'VoidType', set, setter, false)
+        listener: beginTopLevelMethod(}, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, set, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseFields(}, null, augment, null, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, var, })
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseFields(;, null, augment, null, null, null, null, final, final, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, final, ;)
+        listener: handleNoType(final)
+        ensureIdentifierPotentiallyRecovered(final, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(0)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, final, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseFields(;, null, augment, null, null, null, null, const, const, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, const, ;)
+        listener: handleNoType(const)
+        ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(0)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, const, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseFields(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, null, ;)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(field)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseFields(;, null, augment, null, null, null, late, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, late, var, ;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, late, null, augment, null, var, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, late, var, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseFields(;, null, augment, null, null, null, late, final, final, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, late, final, ;)
+        listener: handleNoType(final)
+        ensureIdentifierPotentiallyRecovered(final, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, late, null, augment, null, final, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, late, final, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      parseFields(;, null, augment, null, null, null, late, null, late, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, late, null, ;)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(field)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, late, null, augment, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, late, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, augment, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(abstract, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(abstract, abstract, null, augment, Class)
+        parseClass(Class, abstract, class, Class)
+          parseClassHeaderOpt(Class, abstract, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(abstract, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(abstract, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, null, augment, Class)
+        parseNamedMixinApplication(Class, class, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(abstract, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(abstract, abstract, null, augment, Class)
+        parseNamedMixinApplication(Class, abstract, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(abstract, class, =, null, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, mixin, null, Instance of 'DirectiveContext')
+      parseMixin(augment, mixin)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
+        ensureIdentifier(mixin, classOrMixinDeclaration)
+          listener: handleIdentifier(Mixin, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginMixinDeclaration(augment, mixin, Mixin)
+        parseMixinHeaderOpt(Mixin, mixin)
+          parseMixinOnOpt(Mixin)
+            listener: handleMixinOn(null, 0)
+          parseClassOrMixinOrEnumImplementsOpt(Mixin)
+            listener: handleImplements(null, 0)
+          listener: handleMixinHeader(mixin)
+        parseClassOrMixinOrExtensionBody(Mixin, DeclarationKind.Mixin, Mixin)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+          notEofOrValue(}, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
+        listener: endMixinDeclaration(mixin, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(18, )
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.parser.expect b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.parser.expect
new file mode 100644
index 0000000..bab1385
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.parser.expect
@@ -0,0 +1,39 @@
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+augment class Class {}
+augment abstract class Class {}
+augment class Class = Object with Mixin;
+augment abstract class Class = Object with Mixin;
+augment mixin Mixin {}
+
+
+augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] abstract[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+augment[KeywordToken] abstract[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+augment[KeywordToken] mixin[KeywordToken] Mixin[StringToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.scanner.expect b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.scanner.expect
new file mode 100644
index 0000000..bab1385
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.scanner.expect
@@ -0,0 +1,39 @@
+augment method() {}
+augment void method() {}
+augment get getter => null;
+augment int get getter => 0;
+augment set setter(value) {}
+augment void set setter(value) {}
+augment var field;
+augment final field = 0;
+augment const field = 0;
+augment int field;
+augment late var field;
+augment late final field;
+augment late int field;
+augment class Class {}
+augment abstract class Class {}
+augment class Class = Object with Mixin;
+augment abstract class Class = Object with Mixin;
+augment mixin Mixin {}
+
+
+augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] final[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] const[KeywordToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] final[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] late[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] abstract[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+augment[KeywordToken] abstract[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+augment[KeywordToken] mixin[KeywordToken] Mixin[StringToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart
new file mode 100644
index 0000000..edfc1f5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart
@@ -0,0 +1,39 @@
+augment augment method() {}
+augment external method();
+external augment method();
+
+augment augment void method() {}
+augment external void method();
+external augment void method();
+
+augment augment get getter => null;
+augment external get getter;
+external augment get getter;
+
+augment augment int get getter => 0;
+augment external int get getter;
+external augment int get getter;
+
+augment augment set setter(value) {}
+augment external set setter(value);
+external augment set setter(value);
+
+augment augment void set setter(value) {}
+augment external void set setter(value);
+external augment void set setter(value);
+
+augment augment var field;
+augment external var field;
+external augment var field;
+
+augment augment int field = 0;
+augment external int field;
+external augment int field;
+
+augment augment class Class {}
+abstract augment class Class {}
+
+augment augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
+
+augment augment mixin Mixin {}
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
new file mode 100644
index 0000000..e6b0821
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.expect
@@ -0,0 +1,570 @@
+Problems reported:
+
+parser/augmentation/top_level_errors:1:9: The modifier 'augment' was already specified.
+augment augment method() {}
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:2:9: Members can't be declared to be both 'external' and 'augment'.
+augment external method();
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:3:10: Members can't be declared to be both 'augment' and 'external'.
+external augment method();
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:5:9: The modifier 'augment' was already specified.
+augment augment void method() {}
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:6:9: Members can't be declared to be both 'external' and 'augment'.
+augment external void method();
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:7:10: Members can't be declared to be both 'augment' and 'external'.
+external augment void method();
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:9:9: The modifier 'augment' was already specified.
+augment augment get getter => null;
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:10:9: Members can't be declared to be both 'external' and 'augment'.
+augment external get getter;
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:11:10: Members can't be declared to be both 'augment' and 'external'.
+external augment get getter;
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:13:9: The modifier 'augment' was already specified.
+augment augment int get getter => 0;
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:14:9: Members can't be declared to be both 'external' and 'augment'.
+augment external int get getter;
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:15:10: Members can't be declared to be both 'augment' and 'external'.
+external augment int get getter;
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:17:9: The modifier 'augment' was already specified.
+augment augment set setter(value) {}
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:18:9: Members can't be declared to be both 'external' and 'augment'.
+augment external set setter(value);
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:19:10: Members can't be declared to be both 'augment' and 'external'.
+external augment set setter(value);
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:21:9: The modifier 'augment' was already specified.
+augment augment void set setter(value) {}
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:22:9: Members can't be declared to be both 'external' and 'augment'.
+augment external void set setter(value);
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:23:10: Members can't be declared to be both 'augment' and 'external'.
+external augment void set setter(value);
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:25:9: The modifier 'augment' was already specified.
+augment augment var field;
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:26:9: Members can't be declared to be both 'external' and 'augment'.
+augment external var field;
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:27:10: Members can't be declared to be both 'augment' and 'external'.
+external augment var field;
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:29:9: The modifier 'augment' was already specified.
+augment augment int field = 0;
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:30:9: Members can't be declared to be both 'external' and 'augment'.
+augment external int field;
+        ^^^^^^^^
+
+parser/augmentation/top_level_errors:31:10: Members can't be declared to be both 'augment' and 'external'.
+external augment int field;
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:33:9: The modifier 'augment' was already specified.
+augment augment class Class {}
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:34:10: The modifier 'augment' should be before the modifier 'abstract'.
+abstract augment class Class {}
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:36:9: The modifier 'augment' was already specified.
+augment augment class Class = Object with Mixin;
+        ^^^^^^^
+
+parser/augmentation/top_level_errors:37:10: The modifier 'augment' should be before the modifier 'abstract'.
+abstract augment class Class = Object with Mixin;
+         ^^^^^^^
+
+parser/augmentation/top_level_errors:39:9: The modifier 'augment' was already specified.
+augment augment mixin Mixin {}
+        ^^^^^^^
+
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginTopLevelMethod(, augment, null)
+      handleNoType(augment)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginTopLevelMethod(}, augment, external)
+      handleNoType(external)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(augment, null, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginTopLevelMethod(;, augment, external)
+      handleNoType(augment)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(external, null, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginTopLevelMethod(;, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginTopLevelMethod(}, augment, external)
+      handleVoidKeyword(void)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(augment, null, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginTopLevelMethod(;, augment, external)
+      handleVoidKeyword(void)
+      handleIdentifier(method, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(external, null, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginTopLevelMethod(;, augment, null)
+      handleNoType(augment)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(=>)
+      handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleLiteralNull(null)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(augment, get, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginTopLevelMethod(;, augment, external)
+      handleNoType(external)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(;)
+      handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(augment, get, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginTopLevelMethod(;, augment, external)
+      handleNoType(augment)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(;)
+      handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(external, get, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginTopLevelMethod(;, augment, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(=>)
+      handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleLiteralInt(0)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(augment, get, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginTopLevelMethod(;, augment, external)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(;)
+      handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(augment, get, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginTopLevelMethod(;, augment, external)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(getter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(;)
+      handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(external, get, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginTopLevelMethod(;, augment, null)
+      handleNoType(augment)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, set, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginTopLevelMethod(}, augment, external)
+      handleNoType(external)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(augment, set, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginTopLevelMethod(;, augment, external)
+      handleNoType(augment)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(external, set, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginTopLevelMethod(;, augment, null)
+      handleVoidKeyword(void)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(augment, set, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginTopLevelMethod(}, augment, external)
+      handleVoidKeyword(void)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(augment, set, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginTopLevelMethod(;, augment, external)
+      handleVoidKeyword(void)
+      handleIdentifier(setter, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(value)
+        endMetadataStar(0)
+        beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+          handleNoType(()
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleEmptyFunctionBody(;)
+    endTopLevelMethod(external, set, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, var, ;)
+      handleNoType(var)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(null, null, null, null, var, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, var, ;)
+      handleNoType(var)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(external, null, null, null, var, 1, augment, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, var, ;)
+      handleNoType(var)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(external, null, null, null, var, 1, external, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, null, ;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(field)
+      handleType(int, null)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      beginFieldInitializer(=)
+        handleLiteralInt(0)
+      endFieldInitializer(=, ;)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+    beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, null, ;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(field)
+      handleType(int, null)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(external, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(external)
+  beginMetadataStar(external)
+  endMetadataStar(0)
+  beginTopLevelMember(external)
+    handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+    beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, null, ;)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(field)
+      handleType(int, null)
+      handleIdentifier(field, topLevelVariableDeclaration)
+      handleNoFieldInitializer(;)
+    endTopLevelFields(external, null, null, null, null, 1, external, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}], augment, augment)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(abstract, abstract, null, augment, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(abstract, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(abstract, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, null, augment, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}], augment, augment)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(abstract, abstract, null, augment, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(abstract, class, =, null, ;)
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
+    handleIdentifier(Mixin, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginMixinDeclaration(augment, mixin, Mixin)
+      handleMixinOn(null, 0)
+      handleImplements(null, 0)
+      handleMixinHeader(mixin)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
+    endMixinDeclaration(mixin, })
+  endTopLevelDeclaration()
+endCompilationUnit(29, )
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
new file mode 100644
index 0000000..a5272f9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
@@ -0,0 +1,829 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      isReservedKeyword(()
+      parseTopLevelMethod(, augment, null, augment, Instance of 'NoType', null, method, false)
+        listener: beginTopLevelMethod(, augment, null)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, augment, external, external, Instance of 'NoType', null, method, false)
+        listener: beginTopLevelMethod(}, augment, external)
+        listener: handleNoType(external)
+        ensureIdentifierPotentiallyRecovered(external, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(augment, null, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, augment, external, augment, Instance of 'NoType', null, method, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(external, null, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'VoidType', null, method, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      parseTopLevelMethod(}, augment, external, external, Instance of 'VoidType', null, method, false)
+        listener: beginTopLevelMethod(}, augment, external)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(augment, null, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      parseTopLevelMethod(;, augment, external, augment, Instance of 'VoidType', null, method, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(method, topLevelFunctionDeclaration)
+        parseMethodTypeVar(method)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(method, method, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(method, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(external, null, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      isReservedKeyword(=>)
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'NoType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(=>)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true)
+                parseUnaryExpression(=>, true)
+                  parsePrimary(=>, expression)
+                    parseLiteralNull(=>)
+                      listener: handleLiteralNull(null)
+            ensureSemicolon(null)
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(augment, get, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      isReservedKeyword(;)
+      parseTopLevelMethod(;, augment, external, external, Instance of 'NoType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleNoType(external)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(;)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(augment, get, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      isReservedKeyword(;)
+      parseTopLevelMethod(;, augment, external, augment, Instance of 'NoType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(;)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(external, get, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'SimpleType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(=>)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(=>, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true)
+                parseUnaryExpression(=>, true)
+                  parsePrimary(=>, expression)
+                    parseLiteralInt(=>)
+                      listener: handleLiteralInt(0)
+            ensureSemicolon(0)
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(augment, get, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      parseTopLevelMethod(;, augment, external, external, Instance of 'SimpleType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(;)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(augment, get, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      parseTopLevelMethod(;, augment, external, augment, Instance of 'SimpleType', get, getter, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(getter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(;)
+        parseGetterOrFormalParameters(getter, getter, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters(;, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(getter)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(getter, false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(external, get, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'NoType', set, setter, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, set, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, augment, external, external, Instance of 'NoType', set, setter, false)
+        listener: beginTopLevelMethod(}, augment, external)
+        listener: handleNoType(external)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(augment, set, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, augment, external, augment, Instance of 'NoType', set, setter, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleNoType(augment)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(external, set, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseTopLevelMethod(;, augment, null, augment, Instance of 'VoidType', set, setter, false)
+        listener: beginTopLevelMethod(;, augment, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(augment, set, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      parseTopLevelMethod(}, augment, external, external, Instance of 'VoidType', set, setter, false)
+        listener: beginTopLevelMethod(}, augment, external)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(augment, set, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      parseTopLevelMethod(;, augment, external, augment, Instance of 'VoidType', set, setter, false)
+        listener: beginTopLevelMethod(;, augment, external)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(setter, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(setter, setter, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(setter, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(value)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(value, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, true)
+          listener: handleEmptyFunctionBody(;)
+        listener: endTopLevelMethod(external, set, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseFields(;, null, augment, null, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, var, ;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, null, var, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(null, null, null, null, var, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      parseFields(;, null, augment, external, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, var, ;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, external, var, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(external, null, null, null, var, 1, augment, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      parseFields(;, null, augment, external, null, null, null, var, var, Instance of 'NoType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, var, ;)
+        listener: handleNoType(var)
+        ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, external, var, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(external, null, null, null, var, 1, external, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseFields(;, null, augment, null, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, null, ;)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(field)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.TopLevel, null)
+          listener: beginFieldInitializer(=)
+          parseExpression(=)
+            parsePrecedenceExpression(=, 1, true)
+              parseUnaryExpression(=, true)
+                parsePrimary(=, expression)
+                  parseLiteralInt(=)
+                    listener: handleLiteralInt(0)
+          listener: endFieldInitializer(=, ;)
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(augment)
+      reportRecoverableError(external, Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'external' and 'augment'., Try removing one of the keywords., {string: external, string2: augment}], external, external)
+      parseFields(;, null, augment, external, null, null, null, null, external, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, null, ;)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(field)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, external, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(external, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(external)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(external)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(external)
+      reportRecoverableError(augment, Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}])
+        listener: handleRecoverableError(Message[ConflictingModifiers, Members can't be declared to be both 'augment' and 'external'., Try removing one of the keywords., {string: augment, string2: external}], augment, augment)
+      parseFields(;, null, augment, external, null, null, null, null, augment, Instance of 'SimpleType', field, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, augment, external, null, null, null, null, ;)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(field)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(field, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(field, field, null, null, augment, external, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(;)
+        listener: endTopLevelFields(external, null, null, null, null, 1, external, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, augment, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}])
+        listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}], augment, augment)
+      parseClassOrNamedMixinApplication(abstract, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(abstract, abstract, null, augment, Class)
+        parseClass(Class, abstract, class, Class)
+          parseClassHeaderOpt(Class, abstract, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(abstract, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(abstract, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseClassOrNamedMixinApplication(null, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, null, augment, Class)
+        parseNamedMixinApplication(Class, class, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      reportRecoverableError(augment, Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}])
+        listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'augment' should be before the modifier 'abstract'., Try re-ordering the modifiers., {string: augment, string2: abstract}], augment, augment)
+      parseClassOrNamedMixinApplication(abstract, null, augment, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(abstract, abstract, null, augment, Class)
+        parseNamedMixinApplication(Class, abstract, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(abstract, class, =, null, ;)
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, mixin, null, Instance of 'DirectiveContext')
+      reportRecoverableErrorWithToken(augment, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[DuplicatedModifier, The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
+      parseMixin(augment, mixin)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
+        ensureIdentifier(mixin, classOrMixinDeclaration)
+          listener: handleIdentifier(Mixin, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginMixinDeclaration(augment, mixin, Mixin)
+        parseMixinHeaderOpt(Mixin, mixin)
+          parseMixinOnOpt(Mixin)
+            listener: handleMixinOn(null, 0)
+          parseClassOrMixinOrEnumImplementsOpt(Mixin)
+            listener: handleImplements(null, 0)
+          listener: handleMixinHeader(mixin)
+        parseClassOrMixinOrExtensionBody(Mixin, DeclarationKind.Mixin, Mixin)
+          listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Mixin, {)
+          notEofOrValue(}, })
+          listener: endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 0, {, })
+        listener: endMixinDeclaration(mixin, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(29, )
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.parser.expect b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.parser.expect
new file mode 100644
index 0000000..d3344edb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.parser.expect
@@ -0,0 +1,81 @@
+augment augment method() {}
+augment external method();
+external augment method();
+
+augment augment void method() {}
+augment external void method();
+external augment void method();
+
+augment augment get getter => null;
+augment external get getter;
+external augment get getter;
+
+augment augment int get getter => 0;
+augment external int get getter;
+external augment int get getter;
+
+augment augment set setter(value) {}
+augment external set setter(value);
+external augment set setter(value);
+
+augment augment void set setter(value) {}
+augment external void set setter(value);
+external augment void set setter(value);
+
+augment augment var field;
+augment external var field;
+external augment var field;
+
+augment augment int field = 0;
+augment external int field;
+external augment int field;
+
+augment augment class Class {}
+abstract augment class Class {}
+
+augment augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
+
+augment augment mixin Mixin {}
+
+
+augment[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] mixin[KeywordToken] Mixin[StringToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.scanner.expect b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.scanner.expect
new file mode 100644
index 0000000..d3344edb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.scanner.expect
@@ -0,0 +1,81 @@
+augment augment method() {}
+augment external method();
+external augment method();
+
+augment augment void method() {}
+augment external void method();
+external augment void method();
+
+augment augment get getter => null;
+augment external get getter;
+external augment get getter;
+
+augment augment int get getter => 0;
+augment external int get getter;
+external augment int get getter;
+
+augment augment set setter(value) {}
+augment external set setter(value);
+external augment set setter(value);
+
+augment augment void set setter(value) {}
+augment external void set setter(value);
+external augment void set setter(value);
+
+augment augment var field;
+augment external var field;
+external augment var field;
+
+augment augment int field = 0;
+augment external int field;
+external augment int field;
+
+augment augment class Class {}
+abstract augment class Class {}
+
+augment augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
+
+augment augment mixin Mixin {}
+
+
+augment[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] method[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] null[KeywordToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] get[KeywordToken] getter[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+augment[KeywordToken] external[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] void[KeywordToken] set[KeywordToken] setter[StringToken]([BeginToken]value[StringToken])[SimpleToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] var[KeywordToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+augment[KeywordToken] external[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+external[KeywordToken] augment[KeywordToken] int[StringToken] field[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] augment[KeywordToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+
+augment[KeywordToken] augment[KeywordToken] mixin[KeywordToken] Mixin[StringToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
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 69b148f..92d5054 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
@@ -81,7 +81,7 @@
       beginMetadataStar(const)
       endMetadataStar(0)
       beginMember()
-        beginMethod(DeclarationKind.Enum, null, null, null, const, null, E)
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
           handleNoType(const)
           handleIdentifier(E, methodDeclaration)
           handleNoTypeVariables(()
@@ -95,7 +95,7 @@
       beginMetadataStar(const)
       endMetadataStar(0)
       beginMember()
-        beginMethod(DeclarationKind.Enum, null, null, null, const, null, E)
+        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
           handleNoType(const)
           handleIdentifier(E, methodDeclaration)
           handleIdentifier(named, methodDeclarationContinuation)
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 2403c22..7d106ee 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
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(enum)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, enum, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, enum)
       parseEnum(enum)
         listener: beginUncategorizedTopLevelDeclaration(enum)
         ensureIdentifier(enum, enumDeclaration)
@@ -124,8 +123,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          parseMethod(;, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, const, null, E)
+          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)
@@ -153,8 +152,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          parseMethod(;, null, null, null, null, null, const, const, Instance of 'NoType', null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, const, null, E)
+          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)
diff --git a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect
index ca25109..20669d0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(Future)
   endMetadataStar(0)
   beginTopLevelMember(Future)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Future, typeReference)
       beginTypeArguments(<)
         handleVoidKeyword(void)
@@ -35,7 +35,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleVoidKeyword(void)
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
index 0f6b7b2..79c6a54 100644
--- a/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/await_not_in_async.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Future)
-      parseTopLevelMethod(, null, , Instance of 'ComplexTypeInfo', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'ComplexTypeInfo', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Future, typeReference)
         listener: beginTypeArguments(<)
@@ -69,8 +69,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, g, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, g, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.expect
index 5689179..ee69b69 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(good, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -32,7 +32,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(bad, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.intertwined.expect
index 11a6354..6bebae6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_00.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, good, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, good, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(good, topLevelFunctionDeclaration)
@@ -68,8 +68,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, bad, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, bad, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bad, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
index 315d899..3d57472 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.expect
@@ -14,7 +14,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -24,7 +24,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -47,7 +47,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
             handleIdentifier(C, typeReference)
             handleNoTypeArguments(m)
             handleType(C, null)
@@ -114,7 +114,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, D)
+    beginClassDeclaration(class, null, null, null, D)
       handleNoType(D)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -124,7 +124,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
             handleNoType({)
             handleIdentifier(D, methodDeclaration)
             handleNoTypeVariables(()
@@ -147,7 +147,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
             handleIdentifier(D, typeReference)
             handleNoTypeArguments(m)
             handleType(D, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
index f075fef..659cd04 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_01.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -76,8 +75,8 @@
                 listener: beginMetadataStar(C)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, m, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, m, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
                 listener: handleIdentifier(C, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(C, null)
@@ -259,13 +258,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, D)
+        listener: beginClassDeclaration(class, null, null, null, D)
         parseClass(D, class, class, D)
           parseClassHeaderOpt(D, class, class)
             parseClassExtendsOpt(D)
@@ -285,8 +283,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -328,8 +326,8 @@
                 listener: beginMetadataStar(D)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, m, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, m, DeclarationKind.Class, D, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
                 listener: handleIdentifier(D, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(D, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.expect
index 9598908..68a57b9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(UnmatchedToken([), null)
+    beginTopLevelMethod(UnmatchedToken([), null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.intertwined.expect
index a83baa2..1d02334 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_02.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(UnmatchedToken([))
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(UnmatchedToken([), null, UnmatchedToken([), Instance of 'VoidType', null, foo, false)
-        listener: beginTopLevelMethod(UnmatchedToken([), null)
+      parseTopLevelMethod(UnmatchedToken([), null, null, UnmatchedToken([), Instance of 'VoidType', null, foo, false)
+        listener: beginTopLevelMethod(UnmatchedToken([), null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
index 9fea306..d14d975 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.expect
@@ -20,7 +20,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
index ffe546c..03de5d4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_03.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
index e8d4816..ddf140c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.expect
@@ -20,7 +20,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
index b4a6f0d..076e9d1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_04.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.expect
index aeaa26a..1de17cf 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(UnmatchedToken([), null)
+    beginTopLevelMethod(UnmatchedToken([), null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.intertwined.expect
index 3e561c0..d0d524e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_05.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(UnmatchedToken([))
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(UnmatchedToken([), null, UnmatchedToken([), Instance of 'VoidType', null, foo, false)
-        listener: beginTopLevelMethod(UnmatchedToken([), null)
+      parseTopLevelMethod(UnmatchedToken([), null, null, UnmatchedToken([), Instance of 'VoidType', null, foo, false)
+        listener: beginTopLevelMethod(UnmatchedToken([), null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect
index 2d94d81..94d65ab 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bracket_mismatch_06.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(UnmatchedToken((), null)
+    beginTopLevelMethod(UnmatchedToken((), null, null)
       handleNoType(UnmatchedToken(())
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 e861c72..c02d432 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl(UnmatchedToken(())
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(UnmatchedToken((), null, UnmatchedToken((), Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(UnmatchedToken((), null)
+      parseTopLevelMethod(UnmatchedToken((), null, null, UnmatchedToken((), Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(UnmatchedToken((), null, null)
         listener: handleNoType(UnmatchedToken(())
         ensureIdentifierPotentiallyRecovered(UnmatchedToken((), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.expect b/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.expect
index f1f56f6..eb0334a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.expect
@@ -20,7 +20,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(NonAsciiIdentifierToken(198), null)
+    beginTopLevelMethod(NonAsciiIdentifierToken(198), null, null)
       handleNoType(NonAsciiIdentifierToken(198))
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.intertwined.expect
index cace6c4..0e97664 100644
--- a/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/comment_on_non_ascii_identifier.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl(NonAsciiIdentifierToken(198))
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(NonAsciiIdentifierToken(198), null, NonAsciiIdentifierToken(198), Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(NonAsciiIdentifierToken(198), null)
+      parseTopLevelMethod(NonAsciiIdentifierToken(198), null, null, NonAsciiIdentifierToken(198), Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(NonAsciiIdentifierToken(198), null, null)
         listener: handleNoType(NonAsciiIdentifierToken(198))
         ensureIdentifierPotentiallyRecovered(NonAsciiIdentifierToken(198), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
index df50087..503568b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.expect
@@ -126,7 +126,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -136,7 +136,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -154,7 +154,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -181,7 +181,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -206,7 +206,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(=>)
@@ -221,7 +221,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables({)
@@ -239,7 +239,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -258,7 +258,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -280,7 +280,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(:)
@@ -306,7 +306,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -337,7 +337,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(=>)
@@ -354,7 +354,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables({)
@@ -374,7 +374,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -393,7 +393,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -415,7 +415,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(:)
@@ -441,7 +441,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -472,7 +472,7 @@
         beginMetadataStar(external)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo)
             handleNoType(external)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -496,7 +496,7 @@
         beginMetadataStar(external)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo)
             handleNoType(external)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -527,19 +527,19 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Foo)
             handleType(int, null)
             handleIdentifier(Foo, fieldDeclaration)
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(A)
             handleType(int, null)
@@ -550,7 +550,7 @@
             handleNoFieldInitializer(,)
             handleIdentifier(B, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 3, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 3, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 19, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
index 06d293d..5bc1f5c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_general.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -71,8 +70,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -134,8 +133,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -192,8 +191,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -229,8 +228,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -273,8 +272,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -320,8 +319,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -374,8 +373,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -442,8 +441,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -521,8 +520,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -564,8 +563,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -614,8 +613,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -661,8 +660,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -715,8 +714,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -783,8 +782,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -863,8 +862,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, external, null, null, null, null, external, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
+              parseMethod(}, null, null, external, null, null, null, null, external, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -920,8 +919,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, external, null, null, null, null, external, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, external, null, null, null, null, Foo)
+              parseMethod(;, null, null, external, null, null, null, null, external, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -998,18 +997,18 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', Foo, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', Foo, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Foo)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(Foo, fieldDeclaration)
-                parseFieldInitializerOpt(Foo, Foo, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(Foo, Foo, null, null, null, null, null, DeclarationKind.Class, Foo)
                   reportRecoverableError(Foo, MemberWithSameNameAsClass)
                     listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -1017,26 +1016,26 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', A, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', A, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(A)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(A, fieldDeclaration)
-                parseFieldInitializerOpt(A, A, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(A, A, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(,)
                 ensureIdentifier(,, fieldDeclaration)
                   listener: handleIdentifier(Foo, fieldDeclaration)
-                parseFieldInitializerOpt(Foo, Foo, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(Foo, Foo, null, null, null, null, null, DeclarationKind.Class, Foo)
                   reportRecoverableError(Foo, MemberWithSameNameAsClass)
                     listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
                   listener: handleNoFieldInitializer(,)
                 ensureIdentifier(,, fieldDeclaration)
                   listener: handleIdentifier(B, fieldDeclaration)
-                parseFieldInitializerOpt(B, B, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(B, B, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 3, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 3, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 19, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
index ddc254b..8aeed6f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -44,7 +44,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -63,7 +63,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -91,7 +91,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
index 3f0d02a..87c5040 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_get.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -71,8 +70,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -135,8 +134,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
index c5b9ca5..d5fe639 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -40,7 +40,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -59,7 +59,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,7 +87,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
index 510034d..fa54395 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -71,8 +70,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -135,8 +134,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
index 49cb540..4a03885 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -40,7 +40,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -59,7 +59,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,7 +87,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
index fdc9ae0..b421916 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_bad_name_set.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -71,8 +70,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -135,8 +134,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
index affdbb5..3482258 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -40,7 +40,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -57,7 +57,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -83,7 +83,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -101,7 +101,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
index 3e8ea041..62962ea 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_get.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -67,8 +66,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -127,8 +126,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -164,8 +163,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', get, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
index 3353b3f..3ff5a66 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -29,7 +29,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -53,7 +53,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -70,7 +70,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
index fbd18be..c192885 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_ok.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -65,8 +64,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -122,8 +121,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -158,8 +157,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
index 9ecbeda..457a791 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.expect
@@ -78,7 +78,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -88,7 +88,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -104,7 +104,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -129,7 +129,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -151,7 +151,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType(.)
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -176,7 +176,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -192,7 +192,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -217,7 +217,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -239,7 +239,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType(.)
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
index 06cf3f0..b44b5a7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_operator.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -68,13 +67,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
-                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, }, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
+                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, null, }, DeclarationKind.Class, Foo)
                   reportRecoverableError(/, MissingOperatorKeyword)
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
-                  parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                  parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -128,8 +127,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -163,7 +162,7 @@
                 listener: beginMetadataStar(.)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(., Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '.'., null, {lexeme: .}], ., .)
                 listener: handleInvalidMember(.)
@@ -174,13 +173,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(., ., null, null, null, null, null, null, ., Instance of 'NoType', null, DeclarationKind.Class, Foo)
-                parseInvalidOperatorDeclaration(., null, null, null, null, null, null, ., DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(., ., null, null, null, null, null, null, null, ., Instance of 'NoType', null, DeclarationKind.Class, Foo)
+                parseInvalidOperatorDeclaration(., null, null, null, null, null, null, null, ., DeclarationKind.Class, Foo)
                   reportRecoverableError(/, MissingOperatorKeyword)
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
-                  parseMethod(., null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                  parseMethod(., null, null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                     listener: handleNoType(.)
                     parseOperatorName(.)
                       listener: handleOperatorName(operator, /)
@@ -234,8 +233,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -269,13 +268,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
-                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, }, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
+                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, null, }, DeclarationKind.Class, Foo)
                   reportRecoverableError(/, MissingOperatorKeyword)
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
-                  parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                  parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -329,8 +328,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -364,7 +363,7 @@
                 listener: beginMetadataStar(.)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(., Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '.'., null, {lexeme: .}], ., .)
                 listener: handleInvalidMember(.)
@@ -375,13 +374,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(., ., null, null, null, null, null, null, ., Instance of 'NoType', null, DeclarationKind.Class, Foo)
-                parseInvalidOperatorDeclaration(., null, null, null, null, null, null, ., DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(., ., null, null, null, null, null, null, null, ., Instance of 'NoType', null, DeclarationKind.Class, Foo)
+                parseInvalidOperatorDeclaration(., null, null, null, null, null, null, null, ., DeclarationKind.Class, Foo)
                   reportRecoverableError(/, MissingOperatorKeyword)
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
-                  parseMethod(., null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                  parseMethod(., null, null, null, null, null, null, null, ., Instance of 'NoType', null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                     listener: handleNoType(.)
                     parseOperatorName(.)
                       listener: handleOperatorName(operator, /)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
index a93fe07..c317c4b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -48,7 +48,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -73,7 +73,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -91,7 +91,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
index 148639d..2f055dc 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_return_type.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -65,8 +64,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -123,8 +122,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -160,8 +159,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
index e78880d..5511c88 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -48,7 +48,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -73,7 +73,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -91,7 +91,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
diff --git a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
index d1bd6a8..ca72661 100644
--- a/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/constructor_recovery_set.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -65,8 +64,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -123,8 +122,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -160,8 +159,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', set, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.expect b/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.expect
index 5d938b3..787cbc4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.expect
@@ -20,7 +20,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.intertwined.expect
index 08ae948..32971a6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_await_for.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
index 1b4fc95..b202fb4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.expect
@@ -20,7 +20,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
index d816a82..fb0bab6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/empty_for.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 2741a0e..3fd8b9b 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
@@ -36,7 +36,7 @@
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, null, a)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, a)
             handleIdentifier(bool, typeReference)
             handleNoTypeArguments(a)
             handleType(bool, null)
@@ -71,7 +71,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -87,7 +87,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, set, c)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, set, c)
             handleNoType(;)
             handleIdentifier(c, methodDeclaration)
             handleNoTypeVariables(()
@@ -114,7 +114,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -152,7 +152,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 c951cb0..334068a 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
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: beginTypeVariables(<)
@@ -40,8 +39,8 @@
               listener: beginMetadataStar(bool)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, a, DeclarationKind.Extension, E, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, a)
+            parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, a, DeclarationKind.Extension, E, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, a)
               listener: handleIdentifier(bool, typeReference)
               listener: handleNoTypeArguments(a)
               listener: handleType(bool, null)
@@ -97,8 +96,8 @@
               listener: beginMetadataStar(int)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, b, DeclarationKind.Extension, E, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, get, b)
+            parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, b, DeclarationKind.Extension, E, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, get, b)
               listener: handleIdentifier(int, typeReference)
               listener: handleNoTypeArguments(get)
               listener: handleType(int, null)
@@ -134,8 +133,8 @@
               listener: beginMetadataStar(set)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', set, c, DeclarationKind.Extension, E, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, set, c)
+            parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', set, c, DeclarationKind.Extension, E, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, set, c)
               listener: handleNoType(;)
               ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                 listener: handleIdentifier(c, methodDeclaration)
@@ -181,8 +180,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -259,8 +258,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.expect b/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.expect
index 6e185cd..d5b73c8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.intertwined.expect
index c21fea8..bcc5d77 100644
--- a/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/for_in_with_colon.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
index 3caae1e..03b7aca 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -36,7 +36,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(C, typeReference)
             beginTypeArguments(<)
               handleRecoverableError(Message[ExpectedType, Expected a type, but got '}'., null, {lexeme: }}], }, })
@@ -49,7 +49,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
-          endClassFields(null, null, null, null, null, null, 1, C, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, C, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -57,7 +57,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
index 32d89ec..85024cb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_000032.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -32,9 +31,9 @@
                 listener: beginMetadataStar(C)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, C)
-                parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, C, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, C)
+                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, C, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(C, typeReference)
                   listener: beginTypeArguments(<)
@@ -52,13 +51,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, C)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, C)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(<, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], <, <)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, C, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, C, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -71,8 +70,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
index cfcdd2e..88f87a1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -41,7 +41,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -56,7 +56,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(,)
       handleType(A, null)
@@ -72,7 +72,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -92,7 +92,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables(extend)
-    beginClassDeclaration(class, null, null, Bar)
+    beginClassDeclaration(class, null, null, null, Bar)
       handleNoType(Bar)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -114,7 +114,7 @@
         beginMetadataStar(Bar)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Bar)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Bar)
             handleNoType({)
             handleIdentifier(Bar, methodDeclaration)
             handleNoTypeVariables(()
@@ -134,7 +134,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Baz, classOrMixinDeclaration)
     handleNoTypeVariables(on)
-    beginClassDeclaration(class, null, null, Baz)
+    beginClassDeclaration(class, null, null, null, Baz)
       handleNoType(Baz)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -156,7 +156,7 @@
         beginMetadataStar(Baz)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Baz)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Baz)
             handleNoType({)
             handleIdentifier(Baz, methodDeclaration)
             handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
index 0c27622..0d0dc27 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_22313.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,13 +34,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -63,13 +61,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -97,8 +94,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -131,13 +128,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extend)
-        listener: beginClassDeclaration(class, null, null, Bar)
+        listener: beginClassDeclaration(class, null, null, null, Bar)
         parseClass(Bar, class, class, Bar)
           parseClassHeaderOpt(Bar, class, class)
             parseClassExtendsOpt(Bar)
@@ -181,8 +177,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Bar, DeclarationKind.Class, Bar, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Bar)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, Bar, DeclarationKind.Class, Bar, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Bar)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Bar, methodDeclaration)
@@ -215,13 +211,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Baz, classOrMixinDeclaration)
         listener: handleNoTypeVariables(on)
-        listener: beginClassDeclaration(class, null, null, Baz)
+        listener: beginClassDeclaration(class, null, null, null, Baz)
         parseClass(Baz, class, class, Baz)
           parseClassHeaderOpt(Baz, class, class)
             parseClassExtendsOpt(Baz)
@@ -265,8 +260,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, Baz, DeclarationKind.Class, Baz, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Baz)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, Baz, DeclarationKind.Class, Baz, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Baz)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Baz, methodDeclaration)
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 50def6f..8b091c3 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
@@ -12,7 +12,7 @@
   beginMetadataStar(const)
   endMetadataStar(0)
   beginTopLevelMember(const)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
       handleNoType(const)
       handleIdentifier(annotation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Annotation, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Annotation)
+    beginClassDeclaration(class, null, null, null, Annotation)
       handleNoType(Annotation)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -35,18 +35,18 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(message)
             handleType(String, null)
             handleIdentifier(message, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, const, null, Annotation)
+          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Annotation)
             handleNoType(const)
             handleIdentifier(Annotation, methodDeclaration)
             handleNoTypeVariables(()
@@ -80,7 +80,7 @@
         handleNoType(E)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -95,7 +95,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -105,7 +105,7 @@
         beginMetadataStar(m)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
             handleNoType({)
             handleIdentifier(m, methodDeclaration)
             handleNoTypeVariables(()
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 8d39ca9..fd5d902 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
@@ -8,12 +8,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
-      parseFields(, null, null, null, null, null, const, const, Instance of 'NoType', annotation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
+      parseFields(, null, null, null, null, null, null, const, const, Instance of 'NoType', annotation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
         listener: handleNoType(const)
         ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
           listener: handleIdentifier(annotation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(annotation, annotation, null, null, null, const, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(annotation, annotation, null, null, null, null, const, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -29,13 +29,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Annotation, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Annotation)
+        listener: beginClassDeclaration(class, null, null, null, Annotation)
         parseClass(Annotation, class, class, Annotation)
           parseClassHeaderOpt(Annotation, class, class)
             parseClassExtendsOpt(Annotation)
@@ -54,16 +53,16 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleType', message, DeclarationKind.Class, Annotation, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleType', message, DeclarationKind.Class, Annotation, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(message)
                 listener: handleType(String, null)
                 ensureIdentifierPotentiallyRecovered(String, fieldDeclaration, false)
                   listener: handleIdentifier(message, fieldDeclaration)
-                parseFieldInitializerOpt(message, message, null, null, null, final, DeclarationKind.Class, Annotation)
+                parseFieldInitializerOpt(message, message, null, null, null, null, final, DeclarationKind.Class, Annotation)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Annotation)
@@ -71,8 +70,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, const, const, Instance of 'NoType', null, Annotation, DeclarationKind.Class, Annotation, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, const, null, Annotation)
+              parseMethod(;, null, null, null, null, null, null, const, const, Instance of 'NoType', null, Annotation, DeclarationKind.Class, Annotation, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Annotation)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Annotation, methodDeclaration)
@@ -113,8 +112,7 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -127,7 +125,7 @@
         listener: handleNoType(E)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -149,13 +147,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -175,8 +172,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, m, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, m, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(m, methodDeclaration)
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 d081a84..8eca861 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
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -45,7 +44,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -80,7 +78,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -121,7 +118,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -159,7 +155,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -204,7 +199,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -250,7 +244,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -307,7 +300,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -387,7 +379,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -459,7 +450,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -477,7 +467,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
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 2ac0d92..d1fcfd2 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
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Key)
+    beginClassDeclaration(abstract, abstract, null, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -76,7 +76,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -109,7 +109,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -141,7 +141,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -177,7 +177,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -212,7 +212,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -251,7 +251,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -331,7 +331,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -372,7 +372,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i)
             handleType(int, null)
@@ -417,7 +417,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(j)
             handleType(int, null)
@@ -461,7 +461,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(k)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(l)
             handleType(int, null)
@@ -556,7 +556,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(m)
             handleType(int, null)
@@ -620,7 +620,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(n)
             handleType(int, null)
@@ -683,7 +683,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(o)
             handleType(int, null)
@@ -734,7 +734,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(p)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(q)
             handleType(int, null)
@@ -838,7 +838,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(r)
             handleType(int, null)
@@ -891,7 +891,7 @@
         beginMetadataStar(s)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s)
             handleNoType(})
             handleIdentifier(s, methodDeclaration)
             handleNoTypeVariables(()
@@ -978,7 +978,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1069,7 +1069,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1157,7 +1157,7 @@
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working)
             handleNoType(})
             handleIdentifier(not_currently_working, methodDeclaration)
             handleNoTypeVariables(()
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 b1c109a..c90f416 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
@@ -7,14 +7,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-        parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
@@ -33,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -120,8 +118,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -193,8 +191,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -287,8 +285,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -367,8 +365,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -473,8 +471,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -560,8 +558,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -673,8 +671,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -767,8 +765,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
                 listener: handleType(int, null)
@@ -864,8 +862,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
                 listener: handleType(int, null)
@@ -949,8 +947,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
                 listener: handleType(int, null)
@@ -1053,8 +1051,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(int, null)
@@ -1145,8 +1143,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(int, null)
@@ -1284,8 +1282,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
                 listener: handleType(int, null)
@@ -1411,8 +1409,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
                 listener: handleType(int, null)
@@ -1527,8 +1525,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
                 listener: handleType(int, null)
@@ -1626,8 +1624,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
                 listener: handleType(int, null)
@@ -1749,8 +1747,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(int, null)
@@ -1856,8 +1854,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(s, methodDeclaration)
@@ -2094,8 +2092,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2339,8 +2337,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2548,8 +2546,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(not_currently_working, methodDeclaration)
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 0316b5f..27098f5 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
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Key)
+    beginClassDeclaration(abstract, abstract, null, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -76,7 +76,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -109,7 +109,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -141,7 +141,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -177,7 +177,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -212,7 +212,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -251,7 +251,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -331,7 +331,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -372,7 +372,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i)
             handleType(int, null)
@@ -417,7 +417,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(j)
             handleType(int, null)
@@ -461,7 +461,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(k)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(l)
             handleType(int, null)
@@ -556,7 +556,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(m)
             handleType(int, null)
@@ -620,7 +620,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(n)
             handleType(int, null)
@@ -683,7 +683,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(o)
             handleType(int, null)
@@ -734,7 +734,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(p)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(q)
             handleType(int, null)
@@ -838,7 +838,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(r)
             handleType(int, null)
@@ -891,7 +891,7 @@
         beginMetadataStar(s)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s)
             handleNoType(})
             handleIdentifier(s, methodDeclaration)
             handleNoTypeVariables(()
@@ -978,7 +978,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1069,7 +1069,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1157,7 +1157,7 @@
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working)
             handleNoType(})
             handleIdentifier(not_currently_working, methodDeclaration)
             handleNoTypeVariables(()
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 91ece53..7a715ee 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
@@ -7,14 +7,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-        parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
@@ -33,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -120,8 +118,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -193,8 +191,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -287,8 +285,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -367,8 +365,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -474,8 +472,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -561,8 +559,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -675,8 +673,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -769,8 +767,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
                 listener: handleType(int, null)
@@ -866,8 +864,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
                 listener: handleType(int, null)
@@ -951,8 +949,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
                 listener: handleType(int, null)
@@ -1055,8 +1053,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(int, null)
@@ -1147,8 +1145,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(int, null)
@@ -1286,8 +1284,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
                 listener: handleType(int, null)
@@ -1413,8 +1411,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
                 listener: handleType(int, null)
@@ -1530,8 +1528,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
                 listener: handleType(int, null)
@@ -1629,8 +1627,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
                 listener: handleType(int, null)
@@ -1753,8 +1751,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(int, null)
@@ -1860,8 +1858,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(s, methodDeclaration)
@@ -2098,8 +2096,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2343,8 +2341,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2552,8 +2550,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(not_currently_working, methodDeclaration)
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 c5a4273..529110a 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
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Key, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Key)
+    beginClassDeclaration(abstract, abstract, null, null, Key)
       handleNoType(Key)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -76,7 +76,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -109,7 +109,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -141,7 +141,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -177,7 +177,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -212,7 +212,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -251,7 +251,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -331,7 +331,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -372,7 +372,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i)
             handleType(int, null)
@@ -417,7 +417,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(j)
             handleType(int, null)
@@ -461,7 +461,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(k)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(l)
             handleType(int, null)
@@ -556,7 +556,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(m)
             handleType(int, null)
@@ -620,7 +620,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(n)
             handleType(int, null)
@@ -683,7 +683,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(o)
             handleType(int, null)
@@ -734,7 +734,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(p)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(q)
             handleType(int, null)
@@ -838,7 +838,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(r)
             handleType(int, null)
@@ -891,7 +891,7 @@
         beginMetadataStar(s)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s)
             handleNoType(})
             handleIdentifier(s, methodDeclaration)
             handleNoTypeVariables(()
@@ -978,7 +978,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1069,7 +1069,7 @@
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1157,7 +1157,7 @@
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working)
             handleNoType(})
             handleIdentifier(not_currently_working, methodDeclaration)
             handleNoTypeVariables(()
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 f8f7500..8c0dec2 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
@@ -7,14 +7,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-        parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Key, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Key)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Key)
         parseClass(Key, abstract, class, Key)
           parseClassHeaderOpt(Key, abstract, class)
             parseClassExtendsOpt(Key)
@@ -33,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, a)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, a, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -120,8 +118,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, b)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, b, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -193,8 +191,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, c)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, c, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -287,8 +285,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, d)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, d, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -367,8 +365,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, e)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, e, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -474,8 +472,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, f)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, f, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -561,8 +559,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, g, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -675,8 +673,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, h)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, h, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -769,8 +767,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, i)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, i, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
                 listener: handleType(int, null)
@@ -866,8 +864,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, j)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, j, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
                 listener: handleType(int, null)
@@ -951,8 +949,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, k)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, k, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
                 listener: handleType(int, null)
@@ -1055,8 +1053,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, l)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, l, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(int, null)
@@ -1147,8 +1145,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, m)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, m, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
                 listener: handleType(int, null)
@@ -1286,8 +1284,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, n)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, n, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
                 listener: handleType(int, null)
@@ -1413,8 +1411,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, o)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, o, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
                 listener: handleType(int, null)
@@ -1530,8 +1528,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, p)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, p, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
                 listener: handleType(int, null)
@@ -1629,8 +1627,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, q)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, q, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
                 listener: handleType(int, null)
@@ -1753,8 +1751,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, r)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, r, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(int, null)
@@ -1860,8 +1858,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, s)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, s, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(s, methodDeclaration)
@@ -2098,8 +2096,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2343,8 +2341,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Key, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2552,8 +2550,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, not_currently_working)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, not_currently_working, DeclarationKind.Class, Key, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(not_currently_working, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect
index 0b3a014..c7791cb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.expect
@@ -6,11 +6,9 @@
 
 WARNING: Reporting at eof --- see below for details.
 
-parser/error_recovery/issue_38415.crash:1:15: Expected ';' after this.
+parser/error_recovery/issue_38415.crash:1:14: Expected ';' after this.
 f() { m(T<R(<Z
-              ^...
-
-WARNING: Reporting at eof --- see below for details.
+             ^
 
 parser/error_recovery/issue_38415.crash:1:12: Can't find ')' to match '('.
 f() { m(T<R(<Z
@@ -32,7 +30,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(UnmatchedToken({), null)
+    beginTopLevelMethod(UnmatchedToken({), null, null)
       handleNoType(UnmatchedToken({))
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -64,8 +62,7 @@
           endBinaryExpression(<)
         endArguments(1, (, ))
         handleSend(m, })
-        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-        // WARNING: Reporting at eof for .
+        handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], Z, Z)
         handleExpressionStatement(;)
       endBlockFunctionBody(1, {, })
     endTopLevelMethod(f, null, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.intertwined.expect
index 6f0eacd..dc4c233 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_38415.crash_dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl(UnmatchedToken({))
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(UnmatchedToken({), null, UnmatchedToken({), Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(UnmatchedToken({), null)
+      parseTopLevelMethod(UnmatchedToken({), null, null, UnmatchedToken({), Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(UnmatchedToken({), null, null)
         listener: handleNoType(UnmatchedToken({))
         ensureIdentifierPotentiallyRecovered(UnmatchedToken({), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -102,9 +102,8 @@
                                     listener: endArguments(1, (, ))
                               listener: handleSend(m, })
                   ensureSemicolon())
-                    reportRecoverableError([, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], , )
-                      listener: // WARNING: Reporting at eof for .
+                    reportRecoverableError(Z, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], Z, Z)
                     rewriter()
                   listener: handleExpressionStatement(;)
           notEofOrValue(}, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.expect
index 33f3de8..7ff671e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.expect
@@ -34,7 +34,7 @@
   beginMetadataStar(n)
   endMetadataStar(0)
   beginTopLevelMember(n)
-    beginTopLevelMethod(UnmatchedToken(<), null)
+    beginTopLevelMethod(UnmatchedToken(<), null, null)
       handleIdentifier(n, typeReference)
       beginTypeArguments(<)
         handleIdentifier(S, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.intertwined.expect
index cc9940e..6ecd64d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39024.crash_dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(UnmatchedToken(<))
       listener: beginTopLevelMember(n)
-      parseTopLevelMethod(UnmatchedToken(<), null, UnmatchedToken(<), Instance of 'ComplexTypeInfo', null, e, false)
-        listener: beginTopLevelMethod(UnmatchedToken(<), null)
+      parseTopLevelMethod(UnmatchedToken(<), null, null, UnmatchedToken(<), Instance of 'ComplexTypeInfo', null, e, false)
+        listener: beginTopLevelMethod(UnmatchedToken(<), null, null)
         ensureIdentifier(UnmatchedToken(<), typeReference)
           listener: handleIdentifier(n, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
index abe79a6..d63b2d1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.expect
@@ -14,7 +14,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, <, <)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(co, typeReference)
             handleNoTypeArguments(operator)
             handleType(co, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
index 19f4ce1..be28034 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,12 +31,12 @@
                 listener: beginMetadataStar(co)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseInvalidOperatorDeclaration({, null, null, null, null, null, null, {, DeclarationKind.Class, A)
+              parseInvalidOperatorDeclaration({, null, null, null, null, null, null, null, {, DeclarationKind.Class, A)
                 reportRecoverableError(<, MissingOperatorKeyword)
                   listener: handleRecoverableError(MissingOperatorKeyword, <, <)
                 rewriter()
-                parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A, false)
-                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                   listener: handleIdentifier(co, typeReference)
                   listener: handleNoTypeArguments(operator)
                   listener: handleType(co, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
index ecd1166..ce215b5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -20,7 +20,7 @@
         beginMetadataStar(co)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(co, typeReference)
             handleNoTypeArguments(operator)
             handleType(co, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
index 6329811..076371f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39026_prime.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(co)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(co, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(co, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
index 8b108c7..9c65a46 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39033.crash_dart.intertwined.expect
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39058.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39058.crash_dart.intertwined.expect
index c386263..4bbd143 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39058.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39058.crash_dart.intertwined.expect
@@ -41,7 +41,7 @@
                                   rewriter()
                                 listener: handleLiteralList(0, [, null, ])
                     ensureSemicolon(])
-                      reportRecoverableError([, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       rewriter()
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39058_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39058_prime.crash_dart.intertwined.expect
index caab7bd..4ed5364 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39058_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39058_prime.crash_dart.intertwined.expect
@@ -41,7 +41,7 @@
                                   rewriter()
                                 listener: handleLiteralList(0, [, null, ])
                     ensureSemicolon(])
-                      reportRecoverableError([, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       rewriter()
                     listener: handleExpressionStatement(;)
           notEofOrValue(}, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.expect
index f1b7c51..0515832 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.expect
@@ -12,15 +12,15 @@
 }
 ^
 
-parser/error_recovery/issue_39060:3:1: Expected ';' after this.
-}
-^
+parser/error_recovery/issue_39060:2:9: Expected ';' after this.
+  {s A<}>
+        ^
 
 beginCompilationUnit(main)
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -49,7 +49,7 @@
           endTypeArguments(1, <, >)
           handleRecoverableError(Message[ExpectedButGot, Expected '[' before this., null, {string: [}], }, })
           handleLiteralList(0, [, null, ])
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
           handleExpressionStatement(;)
         endBlock(2, {, }, BlockKind(statement))
       endBlockFunctionBody(1, {, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.intertwined.expect
index c6ddd9b..0764dff 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39060.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -85,8 +85,8 @@
                                         rewriter()
                                       listener: handleLiteralList(0, [, null, ])
                           ensureSemicolon(])
-                            reportRecoverableError([, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                            reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                             rewriter()
                           listener: handleExpressionStatement(;)
                 notEofOrValue(}, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
index 16300c9..c93e4f0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.expect
@@ -46,7 +46,7 @@
   beginMetadataStar(async)
   endMetadataStar(0)
   beginTopLevelMember(async)
-    beginTopLevelMethod(), null)
+    beginTopLevelMethod(), null, null)
       handleNoType())
       handleIdentifier(async, topLevelFunctionDeclaration)
       handleNoTypeVariables(=>)
@@ -65,7 +65,7 @@
   beginMetadataStar(b)
   endMetadataStar(0)
   beginTopLevelMember(b)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(b, typeReference)
       beginTypeArguments(<)
         handleIdentifier(c, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
index a0bb58f..a00dc01 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39202.crash_dart.intertwined.expect
@@ -29,8 +29,8 @@
     parseTopLevelMemberImpl())
       listener: beginTopLevelMember(async)
       isReservedKeyword(=>)
-      parseTopLevelMethod(), null, ), Instance of 'NoType', null, async, false)
-        listener: beginTopLevelMethod(), null)
+      parseTopLevelMethod(), null, null, ), Instance of 'NoType', null, async, false)
+        listener: beginTopLevelMethod(), null, null)
         listener: handleNoType())
         ensureIdentifierPotentiallyRecovered(), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(async, topLevelFunctionDeclaration)
@@ -76,8 +76,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(b)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', $, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', $, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         ensureIdentifier(;, typeReference)
           listener: handleIdentifier(b, typeReference)
         listener: beginTypeArguments(<)
@@ -95,7 +95,7 @@
               listener: // WARNING: Reporting at eof for .
             rewriter()
           listener: handleIdentifier(, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
           reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
index e533d5c..68ce849 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -48,7 +48,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
index 87cebd9..fa84f97 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39230.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -68,13 +67,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
-                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, }, DeclarationKind.Class, C)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
+                parseInvalidOperatorDeclaration(}, null, null, null, null, null, null, null, }, DeclarationKind.Class, C)
                   reportRecoverableError(/, MissingOperatorKeyword)
                     listener: handleRecoverableError(MissingOperatorKeyword, /, /)
                   rewriter()
-                  parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                  parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.expect
index b18d71f..9e6d9e9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleRecoverableError(VoidWithTypeArguments, <, <)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.intertwined.expect
index f36fedc..a37a62b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_01.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         reportRecoverableError(<, VoidWithTypeArguments)
           listener: handleRecoverableError(VoidWithTypeArguments, <, <)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.expect
index ea1fdaf..2436bad 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(dynamic)
   endMetadataStar(0)
   beginTopLevelMember(dynamic)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(dynamic, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.intertwined.expect
index 8126215..02c6c97 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_02.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(dynamic)
-      parseTopLevelMethod(, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(dynamic, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.expect
index c630e6a..5db84c0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(int, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.intertwined.expect
index aefdb96..cdd8778 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_03.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.expect
index bb5654f..1c99adb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Foo)
   endMetadataStar(0)
   beginTopLevelMember(Foo)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Foo, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.intertwined.expect
index cc0c855..ecf04b2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_39958_04.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Foo)
-      parseTopLevelMethod(, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Foo, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
index c9eff1a..b9aaf43 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.expect
@@ -18,7 +18,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -41,7 +41,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginMixinDeclaration(mixin, M)
+    beginMixinDeclaration(null, mixin, M)
       handleMixinOn(null, 0)
       handleImplements(null, 0)
       handleMixinHeader(mixin)
@@ -54,7 +54,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(DND1, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, DND1)
+    beginClassDeclaration(class, null, null, null, DND1)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
index 32477fe..c7d638a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_41265.crash_dart.intertwined.expect
@@ -7,8 +7,7 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -21,7 +20,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -43,8 +42,7 @@
       listener: beginMetadataStar(mixin)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, mixin, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, mixin)
-      parseMixin(mixin)
+      parseMixin(null, mixin)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(mixin)
         ensureIdentifier(mixin, classOrMixinDeclaration)
           listener: handleIdentifier(M, classOrMixinDeclaration)
@@ -57,7 +55,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginMixinDeclaration(mixin, M)
+        listener: beginMixinDeclaration(null, mixin, M)
         parseMixinHeaderOpt(>, mixin)
           parseMixinOnOpt(>)
             listener: handleMixinOn(null, 0)
@@ -75,13 +73,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(DND1, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, DND1)
+        listener: beginClassDeclaration(class, null, null, null, DND1)
         parseClass(DND1, class, class, DND1)
           parseClassHeaderOpt(DND1, class, class)
             parseClassExtendsOpt(DND1)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
index 3a61651..686342b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.expect
@@ -26,7 +26,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
index c9a97e6..dda2036 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229.crash_dart.intertwined.expect
@@ -13,8 +13,8 @@
           listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
           listener: // WARNING: Reporting at eof for .
         rewriter()
-      parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
@@ -38,7 +38,7 @@
               listener: // WARNING: Reporting at eof for .
             rewriter()
           listener: handleIdentifier(, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
           reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
index 48888ea..18df5f8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.expect
@@ -20,7 +20,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
index f8c3b8a..2fe91c0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime.crash_dart.intertwined.expect
@@ -13,8 +13,8 @@
           listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
           listener: // WARNING: Reporting at eof for .
         rewriter()
-      parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
@@ -33,7 +33,7 @@
         listener: handleType(Stream, null)
         ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
           listener: handleIdentifier(, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
           reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.expect
index 2d08e02..ddb254a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(Stream)
   endMetadataStar(0)
   beginTopLevelMember(Stream)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.intertwined.expect
index 485e5a0..e904492 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_2.crash_dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Stream)
-      parseTopLevelMethod(, null, , Instance of 'ComplexTypeInfo', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'ComplexTypeInfo', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
index 3225ca5..ddccf96 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.expect
@@ -22,7 +22,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
index 5885b58..9c87b71 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_3.crash_dart.intertwined.expect
@@ -13,8 +13,8 @@
           listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
           listener: // WARNING: Reporting at eof for .
         rewriter()
-      parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
@@ -34,7 +34,7 @@
               listener: // WARNING: Reporting at eof for .
             rewriter()
           listener: handleIdentifier(, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
           reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect
index 39d125c..3773f15 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Stream)
   endMetadataStar(0)
   beginTopLevelMember(Stream)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect
index f4ac12c..2187353 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_4.crash_dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Stream)
-      parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', y, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
@@ -24,7 +24,7 @@
         listener: handleType(Stream, null)
         ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
           listener: handleIdentifier(y, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, Stream, ;)
   listener: endTopLevelDeclaration()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect
index c0c945b..3283dde 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(hello)
   endMetadataStar(0)
   beginTopLevelMember(hello)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleRecoverableError(MissingConstFinalVarOrType, hello, hello)
       handleNoType()
       handleIdentifier(hello, topLevelVariableDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect
index ddc263d..906e1c3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_5.dart.intertwined.expect
@@ -9,14 +9,14 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(hello)
       isReservedKeyword()
-      parseFields(, null, null, null, null, null, null, , Instance of 'NoType', hello, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'NoType', hello, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         reportRecoverableError(hello, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, hello, hello)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelVariableDeclaration, false)
           listener: handleIdentifier(hello, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(hello, hello, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(hello, hello, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon(hello)
           reportRecoverableError(hello, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect
index bbe91f5..5128e2e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(const)
   endMetadataStar(0)
   beginTopLevelMember(const)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
       handleNoType(const)
       handleIdentifier(foo, topLevelVariableDeclaration)
       handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'foo' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: foo}], foo, foo)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect
index 5b2699c..dc2d106 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_42229_prime_6.dart.intertwined.expect
@@ -8,12 +8,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
-      parseFields(, null, null, null, null, null, const, const, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, const, )
+      parseFields(, null, null, null, null, null, null, const, const, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
         listener: handleNoType(const)
         ensureIdentifierPotentiallyRecovered(const, topLevelVariableDeclaration, false)
           listener: handleIdentifier(foo, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(foo, foo, null, null, null, const, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(foo, foo, null, null, null, null, const, DeclarationKind.TopLevel, null)
           reportRecoverableError(foo, Message[ConstFieldWithoutInitializer, The const variable 'foo' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: foo}])
             listener: handleRecoverableError(Message[ConstFieldWithoutInitializer, The const variable 'foo' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: foo}], foo, foo)
           listener: handleNoFieldInitializer()
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 60b08d7..7d7451a 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
@@ -20,7 +20,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 172bb90..e3deae7 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
index fdef824..245c817 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090.crash_dart.intertwined.expect
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
index 4c19f5b..eb0e052 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_01.crash_dart.intertwined.expect
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
index b8f453d..14633f3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_43090_prime_02.crash_dart.intertwined.expect
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
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 6e0c9728..1e45c25 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
@@ -20,7 +20,7 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -80,7 +80,7 @@
   beginMetadataStar(bar)
   endMetadataStar(0)
   beginTopLevelMember(bar)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(bar, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 5369ad7..152a677 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(foo)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
@@ -164,8 +164,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(bar)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, bar, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, bar, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar, topLevelFunctionDeclaration)
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 624aaa6..999435a 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
@@ -28,7 +28,7 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -87,7 +87,7 @@
   beginMetadataStar(foo2)
   endMetadataStar(0)
   beginTopLevelMember(foo2)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(foo2, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -165,7 +165,7 @@
   beginMetadataStar(bar)
   endMetadataStar(0)
   beginTopLevelMember(bar)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(bar, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -224,7 +224,7 @@
   beginMetadataStar(bar2)
   endMetadataStar(0)
   beginTopLevelMember(bar2)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(bar2, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 8aeda7b..7f659af 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(foo)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
@@ -161,8 +161,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(foo2)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, foo2, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, foo2, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo2, topLevelFunctionDeclaration)
@@ -373,8 +373,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(bar)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, bar, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, bar, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar, topLevelFunctionDeclaration)
@@ -525,8 +525,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(bar2)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, bar2, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, bar2, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar2, topLevelFunctionDeclaration)
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 cc590c5..4d1bbe5 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
@@ -2,7 +2,7 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -60,7 +60,7 @@
   beginMetadataStar(foo2)
   endMetadataStar(0)
   beginTopLevelMember(foo2)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(foo2, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -136,7 +136,7 @@
   beginMetadataStar(bar)
   endMetadataStar(0)
   beginTopLevelMember(bar)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(bar, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -194,7 +194,7 @@
   beginMetadataStar(bar2)
   endMetadataStar(0)
   beginTopLevelMember(bar2)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(bar2, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 9d01254..7e08a7b 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(foo)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
@@ -135,8 +135,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(foo2)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, foo2, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, foo2, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo2, topLevelFunctionDeclaration)
@@ -294,8 +294,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(bar)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, bar, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, bar, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar, topLevelFunctionDeclaration)
@@ -420,8 +420,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(bar2)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, bar2, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, bar2, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar2, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
index 9a36032..7e9b174 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -60,12 +60,12 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -92,12 +92,12 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -114,12 +114,12 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -149,12 +149,12 @@
               endArguments(0, (, ))
               handleSend(Map, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -173,12 +173,12 @@
               endArguments(0, (, ))
               handleSend(Map, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -210,12 +210,12 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -236,12 +236,12 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -272,12 +272,12 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -297,7 +297,7 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
index 46c74ad..f077f6c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -47,7 +46,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -75,7 +74,7 @@
                                   parseLiteralSetOrMapSuffix(>, null)
                                     listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -83,8 +82,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -98,7 +97,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -120,7 +119,7 @@
                             parseLiteralSetOrMapSuffix(>, null)
                               listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -128,8 +127,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -143,7 +142,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -159,7 +158,7 @@
                                 parseLiteralSetOrMapSuffix(Map, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -167,8 +166,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -182,7 +181,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -213,7 +212,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Map, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -221,8 +220,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -236,7 +235,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -256,7 +255,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Map, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -264,8 +263,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -279,7 +278,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -322,7 +321,7 @@
                                     listener: handleLiteralMapEntry(:, })
                                     listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -330,8 +329,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -345,7 +344,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -376,7 +375,7 @@
                                   listener: handleLiteralMapEntry(:, })
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -384,8 +383,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -399,7 +398,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -436,7 +435,7 @@
                               listener: handleLiteralMapEntry(:, })
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -444,8 +443,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -459,7 +458,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -484,7 +483,7 @@
                             listener: handleLiteralMapEntry(:, })
                             listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
index 548af9c..675a55c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -62,12 +62,12 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -96,12 +96,12 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -120,12 +120,12 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -159,12 +159,12 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -187,12 +187,12 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -226,12 +226,12 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -254,12 +254,12 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -292,12 +292,12 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -319,7 +319,7 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
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 04648ed..41f0d2a 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -47,7 +46,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -74,7 +73,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -82,8 +81,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -97,7 +96,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -122,7 +121,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -130,8 +129,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -145,7 +144,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -160,7 +159,7 @@
                               listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -168,8 +167,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -183,7 +182,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -216,7 +215,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -224,8 +223,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -239,7 +238,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -261,7 +260,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -269,8 +268,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -284,7 +283,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -326,7 +325,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -334,8 +333,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -349,7 +348,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -379,7 +378,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -387,8 +386,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -402,7 +401,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -442,7 +441,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -450,8 +449,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -465,7 +464,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -493,7 +492,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
index fc0194c..d64ab7e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -28,7 +28,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -50,12 +50,12 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -76,12 +76,12 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -95,12 +95,12 @@
               handleNoTypeArguments([])
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -124,12 +124,12 @@
               endArguments(0, (, ))
               handleSend(List, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -145,12 +145,12 @@
               endArguments(0, (, ))
               handleSend(List, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -173,12 +173,12 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -195,12 +195,12 @@
               handleLiteralNull(null)
               handleIndexedExpression(null, [, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -222,12 +222,12 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -241,7 +241,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
index 78a0d51..425d4e2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -43,7 +42,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -71,7 +70,7 @@
                                       rewriter()
                                     listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -79,8 +78,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -90,7 +89,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -112,7 +111,7 @@
                                 rewriter()
                               listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -120,8 +119,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -131,7 +130,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -150,7 +149,7 @@
                                     rewriter()
                                   listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -158,8 +157,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -169,7 +168,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -197,7 +196,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(List, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -205,8 +204,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -216,7 +215,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -236,7 +235,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(List, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -244,8 +243,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -255,7 +254,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -286,7 +285,7 @@
                                               listener: handleLiteralNull(null)
                                     listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -294,8 +293,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -305,7 +304,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -329,7 +328,7 @@
                                   listener: handleLiteralNull(null)
                         listener: handleIndexedExpression(null, [, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -337,8 +336,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -348,7 +347,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -373,7 +372,7 @@
                                         listener: handleLiteralNull(null)
                               listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -381,8 +380,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -392,7 +391,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -408,7 +407,7 @@
                                       listener: handleLiteralNull(null)
                             listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
index 143a90d..269871a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -56,12 +56,12 @@
                 handleLiteralList(0, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -84,12 +84,12 @@
                 handleLiteralList(0, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -105,12 +105,12 @@
                 handleLiteralList(0, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -138,12 +138,12 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -163,12 +163,12 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -193,12 +193,12 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -215,12 +215,12 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -244,12 +244,12 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -265,7 +265,7 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
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 5602483..0e6be26 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -43,7 +42,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -70,7 +69,7 @@
                                 listener: handleLiteralList(0, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -78,8 +77,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -89,7 +88,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -114,7 +113,7 @@
                                 listener: handleLiteralList(0, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -122,8 +121,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -133,7 +132,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -151,7 +150,7 @@
                               listener: handleLiteralList(0, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -159,8 +158,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -170,7 +169,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -200,7 +199,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -208,8 +207,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -219,7 +218,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -241,7 +240,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -249,8 +248,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -260,7 +259,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -290,7 +289,7 @@
                                 listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -298,8 +297,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -309,7 +308,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -330,7 +329,7 @@
                               listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -338,8 +337,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -349,7 +348,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -377,7 +376,7 @@
                                 listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -385,8 +384,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -396,7 +395,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -415,7 +414,7 @@
                               listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
index 9792fa7..4214f48 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_list_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -44,7 +44,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -66,12 +66,12 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -93,12 +93,12 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -112,12 +112,12 @@
               handleNoTypeArguments([])
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -145,12 +145,12 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -170,12 +170,12 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -198,12 +198,12 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -218,12 +218,12 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -246,12 +246,12 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -266,7 +266,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
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 eba032d..888082a 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -43,7 +42,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -70,7 +69,7 @@
                                     rewriter()
                                   listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -78,8 +77,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -89,7 +88,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -116,7 +115,7 @@
                                     rewriter()
                                   listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -124,8 +123,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -135,7 +134,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -153,7 +152,7 @@
                                   rewriter()
                                 listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -161,8 +160,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -172,7 +171,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -203,7 +202,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -211,8 +210,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -222,7 +221,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -245,7 +244,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -253,8 +252,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -264,7 +263,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -294,7 +293,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -302,8 +301,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -313,7 +312,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -334,7 +333,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -342,8 +341,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -353,7 +352,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -383,7 +382,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -391,8 +390,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -402,7 +401,7 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -423,7 +422,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
index 88ac7ed..631092e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -44,7 +44,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -72,12 +72,12 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -105,12 +105,12 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -127,12 +127,12 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -166,12 +166,12 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -194,12 +194,12 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -231,12 +231,12 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -257,12 +257,12 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -294,12 +294,12 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Map, typeReference)
             beginTypeArguments(<)
               handleIdentifier(String, typeReference)
@@ -320,7 +320,7 @@
               handleLiteralMapEntry(:, })
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
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 ccc11a0..6d378b0 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -47,7 +46,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -74,7 +73,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -82,8 +81,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -97,7 +96,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -124,7 +123,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -132,8 +131,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -147,7 +146,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -162,7 +161,7 @@
                               parseLiteralSetOrMapSuffix(Map, null)
                                 listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -170,8 +169,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -185,7 +184,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -219,7 +218,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -227,8 +226,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -242,7 +241,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -265,7 +264,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -273,8 +272,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -288,7 +287,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -330,7 +329,7 @@
                                   listener: handleLiteralMapEntry(:, })
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -338,8 +337,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -353,7 +352,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -383,7 +382,7 @@
                                 listener: handleLiteralMapEntry(:, })
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -391,8 +390,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -406,7 +405,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -448,7 +447,7 @@
                                   listener: handleLiteralMapEntry(:, })
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -456,8 +455,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'ComplexTypeInfo', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 ensureIdentifier(final, typeReference)
                   listener: handleIdentifier(Map, typeReference)
                 listener: beginTypeArguments(<)
@@ -471,7 +470,7 @@
                 listener: handleType(Map, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -501,7 +500,7 @@
                                 listener: handleLiteralMapEntry(:, })
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
index 9138896..32e2980 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -54,12 +54,12 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -80,12 +80,12 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -99,12 +99,12 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -128,12 +128,12 @@
               endArguments(0, (, ))
               handleSend(Set, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -149,12 +149,12 @@
               endArguments(0, (, ))
               handleSend(Set, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -177,12 +177,12 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -197,12 +197,12 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -224,12 +224,12 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -243,7 +243,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
index 498b48a..809eb3c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -43,7 +42,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -68,7 +67,7 @@
                                   parseLiteralSetOrMapSuffix(>, null)
                                     listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -76,8 +75,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -87,7 +86,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -106,7 +105,7 @@
                             parseLiteralSetOrMapSuffix(>, null)
                               listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -114,8 +113,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -125,7 +124,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -141,7 +140,7 @@
                                 parseLiteralSetOrMapSuffix(Set, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -149,8 +148,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -160,7 +159,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -188,7 +187,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Set, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -196,8 +195,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -207,7 +206,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -227,7 +226,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Set, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -235,8 +234,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -246,7 +245,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -277,7 +276,7 @@
                                               listener: handleLiteralNull(null)
                                     listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -285,8 +284,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -296,7 +295,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -318,7 +317,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -326,8 +325,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -337,7 +336,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -362,7 +361,7 @@
                                         listener: handleLiteralNull(null)
                               listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -370,8 +369,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -381,7 +380,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -397,7 +396,7 @@
                                       listener: handleLiteralNull(null)
                             listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
index a2bf1e5..9c37cea 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_const.dart.expect
@@ -22,7 +22,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -56,12 +56,12 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -84,12 +84,12 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -105,12 +105,12 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -138,12 +138,12 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -163,12 +163,12 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -193,12 +193,12 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -215,12 +215,12 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -244,12 +244,12 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -265,7 +265,7 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
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 b2e7f3e..8285289 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -43,7 +42,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -67,7 +66,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -75,8 +74,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -86,7 +85,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -108,7 +107,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -116,8 +115,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -127,7 +126,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -142,7 +141,7 @@
                               listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -150,8 +149,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -161,7 +160,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -191,7 +190,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -199,8 +198,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -210,7 +209,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -232,7 +231,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -240,8 +239,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -251,7 +250,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -281,7 +280,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -289,8 +288,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -300,7 +299,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -321,7 +320,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -329,8 +328,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -340,7 +339,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -368,7 +367,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -376,8 +375,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -387,7 +386,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -406,7 +405,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
index a62bd2c..eb58d21 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_set_new.dart.expect
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(F, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, F)
+    beginClassDeclaration(class, null, null, null, F)
       handleNoType(F)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -44,7 +44,7 @@
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -66,12 +66,12 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -93,12 +93,12 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -112,12 +112,12 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -145,12 +145,12 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -170,12 +170,12 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -198,12 +198,12 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -218,12 +218,12 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -246,12 +246,12 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
             handleIdentifier(Set, typeReference)
             beginTypeArguments(<)
               handleIdentifier(Undefined, typeReference)
@@ -266,7 +266,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
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 dabdaef..77797c9 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(F, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, F)
+        listener: beginClassDeclaration(class, null, null, null, F)
         parseClass(F, class, class, F)
           parseClassHeaderOpt(F, class, class)
             parseClassExtendsOpt(F)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, {)
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo1, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -43,7 +42,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo1, fieldDeclaration)
-                parseFieldInitializerOpt(foo1, foo1, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -67,7 +66,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -75,8 +74,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo2, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -86,7 +85,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo2, fieldDeclaration)
-                parseFieldInitializerOpt(foo2, foo2, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -110,7 +109,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -118,8 +117,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo3, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -129,7 +128,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo3, fieldDeclaration)
-                parseFieldInitializerOpt(foo3, foo3, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -144,7 +143,7 @@
                               parseLiteralSetOrMapSuffix(Set, null)
                                 listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -152,8 +151,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo4, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -163,7 +162,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo4, fieldDeclaration)
-                parseFieldInitializerOpt(foo4, foo4, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -194,7 +193,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -202,8 +201,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo5, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -213,7 +212,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo5, fieldDeclaration)
-                parseFieldInitializerOpt(foo5, foo5, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -236,7 +235,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -244,8 +243,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo6, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -255,7 +254,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo6, fieldDeclaration)
-                parseFieldInitializerOpt(foo6, foo6, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -285,7 +284,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -293,8 +292,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo7, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -304,7 +303,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo7, fieldDeclaration)
-                parseFieldInitializerOpt(foo7, foo7, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -325,7 +324,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -333,8 +332,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo8, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -344,7 +343,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo8, fieldDeclaration)
-                parseFieldInitializerOpt(foo8, foo8, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -374,7 +373,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -382,8 +381,8 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, final, ;)
+              parseFields(;, null, null, null, null, null, null, final, final, Instance of 'SimpleTypeWith1Argument', foo9, DeclarationKind.Class, F, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, ;)
                 listener: handleIdentifier(Set, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(Undefined, typeReference)
@@ -393,7 +392,7 @@
                 listener: handleType(Set, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo9, fieldDeclaration)
-                parseFieldInitializerOpt(foo9, foo9, null, null, null, final, DeclarationKind.Class, F)
+                parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -414,7 +413,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.expect
index 6c4db58..2b53b35 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(UnmatchedToken((), null)
+    beginTopLevelMethod(UnmatchedToken((), null, null)
       handleNoType(UnmatchedToken(())
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.intertwined.expect
index 1dee993..d1c53b4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45327.crash_dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl(UnmatchedToken(())
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(UnmatchedToken((), null, UnmatchedToken((), Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(UnmatchedToken((), null)
+      parseTopLevelMethod(UnmatchedToken((), null, null, UnmatchedToken((), Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(UnmatchedToken((), null, null)
         listener: handleNoType(UnmatchedToken(())
         ensureIdentifierPotentiallyRecovered(UnmatchedToken((), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 aaf3524..d543918 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
@@ -22,7 +22,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -32,7 +32,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
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 4cba827..4efe113 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
@@ -7,8 +7,7 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(UnmatchedToken((), class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(UnmatchedToken((), class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
@@ -21,7 +20,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(>, class, class, Foo)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -41,8 +40,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
index 3bc1986..de46ff9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
@@ -227,7 +227,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, abstract)
+    beginClassDeclaration(class, null, null, null, abstract)
       handleNoType(abstract)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -243,7 +243,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, as)
+    beginClassDeclaration(class, null, null, null, as)
       handleNoType(as)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -259,7 +259,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, assert)
+    beginClassDeclaration(class, null, null, null, assert)
       handleNoType(assert)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -274,7 +274,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, async)
+    beginClassDeclaration(class, null, null, null, async)
       handleNoType(async)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -289,7 +289,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, await)
+    beginClassDeclaration(class, null, null, null, await)
       handleNoType(await)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -305,7 +305,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, break)
+    beginClassDeclaration(class, null, null, null, break)
       handleNoType(break)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -321,7 +321,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, case)
+    beginClassDeclaration(class, null, null, null, case)
       handleNoType(case)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -337,7 +337,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, catch)
+    beginClassDeclaration(class, null, null, null, catch)
       handleNoType(catch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -353,7 +353,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, class)
+    beginClassDeclaration(class, null, null, null, class)
       handleNoType(class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -369,7 +369,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, const)
+    beginClassDeclaration(class, null, null, null, const)
       handleNoType(const)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -385,7 +385,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, continue)
+    beginClassDeclaration(class, null, null, null, continue)
       handleNoType(continue)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -401,7 +401,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, covariant)
+    beginClassDeclaration(class, null, null, null, covariant)
       handleNoType(covariant)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -417,7 +417,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, default)
+    beginClassDeclaration(class, null, null, null, default)
       handleNoType(default)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -433,7 +433,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, deferred)
+    beginClassDeclaration(class, null, null, null, deferred)
       handleNoType(deferred)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -449,7 +449,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, do)
+    beginClassDeclaration(class, null, null, null, do)
       handleNoType(do)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -465,7 +465,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, dynamic)
+    beginClassDeclaration(class, null, null, null, dynamic)
       handleNoType(dynamic)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -481,7 +481,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, else)
+    beginClassDeclaration(class, null, null, null, else)
       handleNoType(else)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -497,7 +497,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, enum)
+    beginClassDeclaration(class, null, null, null, enum)
       handleNoType(enum)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -513,7 +513,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, export)
+    beginClassDeclaration(class, null, null, null, export)
       handleNoType(export)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -529,7 +529,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, extends)
+    beginClassDeclaration(class, null, null, null, extends)
       handleNoType(extends)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -545,7 +545,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, extension)
+    beginClassDeclaration(class, null, null, null, extension)
       handleNoType(extension)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -561,7 +561,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, external)
+    beginClassDeclaration(class, null, null, null, external)
       handleNoType(external)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -577,7 +577,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, factory)
+    beginClassDeclaration(class, null, null, null, factory)
       handleNoType(factory)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -593,7 +593,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, false)
+    beginClassDeclaration(class, null, null, null, false)
       handleNoType(false)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -609,7 +609,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, final)
+    beginClassDeclaration(class, null, null, null, final)
       handleNoType(final)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -625,7 +625,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, finally)
+    beginClassDeclaration(class, null, null, null, finally)
       handleNoType(finally)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -641,7 +641,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, for)
+    beginClassDeclaration(class, null, null, null, for)
       handleNoType(for)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -656,7 +656,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Function)
+    beginClassDeclaration(class, null, null, null, Function)
       handleNoType(Function)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -672,7 +672,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, get)
+    beginClassDeclaration(class, null, null, null, get)
       handleNoType(get)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -687,7 +687,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, hide)
+    beginClassDeclaration(class, null, null, null, hide)
       handleNoType(hide)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -703,7 +703,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, if)
+    beginClassDeclaration(class, null, null, null, if)
       handleNoType(if)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -719,7 +719,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, implements)
+    beginClassDeclaration(class, null, null, null, implements)
       handleNoType(implements)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -735,7 +735,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, import)
+    beginClassDeclaration(class, null, null, null, import)
       handleNoType(import)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -751,7 +751,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, in)
+    beginClassDeclaration(class, null, null, null, in)
       handleNoType(in)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -766,7 +766,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, inout)
+    beginClassDeclaration(class, null, null, null, inout)
       handleNoType(inout)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -782,7 +782,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, interface)
+    beginClassDeclaration(class, null, null, null, interface)
       handleNoType(interface)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -798,7 +798,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, is)
+    beginClassDeclaration(class, null, null, null, is)
       handleNoType(is)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -814,7 +814,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, late)
+    beginClassDeclaration(class, null, null, null, late)
       handleNoType(late)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -830,7 +830,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, library)
+    beginClassDeclaration(class, null, null, null, library)
       handleNoType(library)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -846,7 +846,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, mixin)
+    beginClassDeclaration(class, null, null, null, mixin)
       handleNoType(mixin)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -861,7 +861,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, native)
+    beginClassDeclaration(class, null, null, null, native)
       handleNoType(native)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -877,7 +877,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, new)
+    beginClassDeclaration(class, null, null, null, new)
       handleNoType(new)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -893,7 +893,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, null)
+    beginClassDeclaration(class, null, null, null, null)
       handleNoType(null)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -908,7 +908,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, of)
+    beginClassDeclaration(class, null, null, null, of)
       handleNoType(of)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -923,7 +923,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, on)
+    beginClassDeclaration(class, null, null, null, on)
       handleNoType(on)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -939,7 +939,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, operator)
+    beginClassDeclaration(class, null, null, null, operator)
       handleNoType(operator)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -954,7 +954,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, out)
+    beginClassDeclaration(class, null, null, null, out)
       handleNoType(out)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -970,7 +970,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, part)
+    beginClassDeclaration(class, null, null, null, part)
       handleNoType(part)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -985,7 +985,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, patch)
+    beginClassDeclaration(class, null, null, null, patch)
       handleNoType(patch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1001,7 +1001,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, required)
+    beginClassDeclaration(class, null, null, null, required)
       handleNoType(required)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1017,7 +1017,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, rethrow)
+    beginClassDeclaration(class, null, null, null, rethrow)
       handleNoType(rethrow)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1033,7 +1033,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, return)
+    beginClassDeclaration(class, null, null, null, return)
       handleNoType(return)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1049,7 +1049,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, set)
+    beginClassDeclaration(class, null, null, null, set)
       handleNoType(set)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1064,7 +1064,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, show)
+    beginClassDeclaration(class, null, null, null, show)
       handleNoType(show)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1079,7 +1079,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, source)
+    beginClassDeclaration(class, null, null, null, source)
       handleNoType(source)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1095,7 +1095,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, static)
+    beginClassDeclaration(class, null, null, null, static)
       handleNoType(static)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1111,7 +1111,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, super)
+    beginClassDeclaration(class, null, null, null, super)
       handleNoType(super)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1127,7 +1127,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, switch)
+    beginClassDeclaration(class, null, null, null, switch)
       handleNoType(switch)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1142,7 +1142,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, sync)
+    beginClassDeclaration(class, null, null, null, sync)
       handleNoType(sync)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1158,7 +1158,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, this)
+    beginClassDeclaration(class, null, null, null, this)
       handleNoType(this)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1174,7 +1174,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, throw)
+    beginClassDeclaration(class, null, null, null, throw)
       handleNoType(throw)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1190,7 +1190,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, true)
+    beginClassDeclaration(class, null, null, null, true)
       handleNoType(true)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1206,7 +1206,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, try)
+    beginClassDeclaration(class, null, null, null, try)
       handleNoType(try)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1222,7 +1222,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, typedef)
+    beginClassDeclaration(class, null, null, null, typedef)
       handleNoType(typedef)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1238,7 +1238,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, var)
+    beginClassDeclaration(class, null, null, null, var)
       handleNoType(var)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1254,7 +1254,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, void)
+    beginClassDeclaration(class, null, null, null, void)
       handleNoType(void)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1270,7 +1270,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, while)
+    beginClassDeclaration(class, null, null, null, while)
       handleNoType(while)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1286,7 +1286,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, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, with)
+    beginClassDeclaration(class, null, null, null, with)
       handleNoType(with)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -1301,7 +1301,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, yield)
+    beginClassDeclaration(class, null, null, null, yield)
       handleNoType(yield)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
index 6c9c866..dc599b5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
@@ -7,15 +7,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
           listener: handleIdentifier(abstract, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, abstract)
+        listener: beginClassDeclaration(class, null, null, null, abstract)
         parseClass(abstract, class, class, abstract)
           parseClassHeaderOpt(abstract, class, class)
             parseClassExtendsOpt(abstract)
@@ -37,15 +36,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
           listener: handleIdentifier(as, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, as)
+        listener: beginClassDeclaration(class, null, null, null, as)
         parseClass(as, class, class, as)
           parseClassHeaderOpt(as, class, class)
             parseClassExtendsOpt(as)
@@ -67,15 +65,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, assert)
+        listener: beginClassDeclaration(class, null, null, null, assert)
         parseClass(assert, class, class, assert)
           parseClassHeaderOpt(assert, class, class)
             parseClassExtendsOpt(assert)
@@ -97,13 +94,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, async)
+        listener: beginClassDeclaration(class, null, null, null, async)
         parseClass(async, class, class, async)
           parseClassHeaderOpt(async, class, class)
             parseClassExtendsOpt(async)
@@ -125,13 +121,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, await)
+        listener: beginClassDeclaration(class, null, null, null, await)
         parseClass(await, class, class, await)
           parseClassHeaderOpt(await, class, class)
             parseClassExtendsOpt(await)
@@ -153,15 +148,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, break)
+        listener: beginClassDeclaration(class, null, null, null, break)
         parseClass(break, class, class, break)
           parseClassHeaderOpt(break, class, class)
             parseClassExtendsOpt(break)
@@ -183,15 +177,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, case)
+        listener: beginClassDeclaration(class, null, null, null, case)
         parseClass(case, class, class, case)
           parseClassHeaderOpt(case, class, class)
             parseClassExtendsOpt(case)
@@ -213,15 +206,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, catch)
+        listener: beginClassDeclaration(class, null, null, null, catch)
         parseClass(catch, class, class, catch)
           parseClassHeaderOpt(catch, class, class)
             parseClassExtendsOpt(catch)
@@ -243,15 +235,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, class)
+        listener: beginClassDeclaration(class, null, null, null, class)
         parseClass(class, class, class, class)
           parseClassHeaderOpt(class, class, class)
             parseClassExtendsOpt(class)
@@ -273,15 +264,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, const)
+        listener: beginClassDeclaration(class, null, null, null, const)
         parseClass(const, class, class, const)
           parseClassHeaderOpt(const, class, class)
             parseClassExtendsOpt(const)
@@ -303,15 +293,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, continue)
+        listener: beginClassDeclaration(class, null, null, null, continue)
         parseClass(continue, class, class, continue)
           parseClassHeaderOpt(continue, class, class)
             parseClassExtendsOpt(continue)
@@ -333,15 +322,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
           listener: handleIdentifier(covariant, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, covariant)
+        listener: beginClassDeclaration(class, null, null, null, covariant)
         parseClass(covariant, class, class, covariant)
           parseClassHeaderOpt(covariant, class, class)
             parseClassExtendsOpt(covariant)
@@ -363,15 +351,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, default)
+        listener: beginClassDeclaration(class, null, null, null, default)
         parseClass(default, class, class, default)
           parseClassHeaderOpt(default, class, class)
             parseClassExtendsOpt(default)
@@ -393,15 +380,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
           listener: handleIdentifier(deferred, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, deferred)
+        listener: beginClassDeclaration(class, null, null, null, deferred)
         parseClass(deferred, class, class, deferred)
           parseClassHeaderOpt(deferred, class, class)
             parseClassExtendsOpt(deferred)
@@ -423,15 +409,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, do)
+        listener: beginClassDeclaration(class, null, null, null, do)
         parseClass(do, class, class, do)
           parseClassHeaderOpt(do, class, class)
             parseClassExtendsOpt(do)
@@ -453,15 +438,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
           listener: handleIdentifier(dynamic, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, dynamic)
+        listener: beginClassDeclaration(class, null, null, null, dynamic)
         parseClass(dynamic, class, class, dynamic)
           parseClassHeaderOpt(dynamic, class, class)
             parseClassExtendsOpt(dynamic)
@@ -483,15 +467,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, else)
+        listener: beginClassDeclaration(class, null, null, null, else)
         parseClass(else, class, class, else)
           parseClassHeaderOpt(else, class, class)
             parseClassExtendsOpt(else)
@@ -513,15 +496,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, enum)
+        listener: beginClassDeclaration(class, null, null, null, enum)
         parseClass(enum, class, class, enum)
           parseClassHeaderOpt(enum, class, class)
             parseClassExtendsOpt(enum)
@@ -543,15 +525,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
           listener: handleIdentifier(export, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, export)
+        listener: beginClassDeclaration(class, null, null, null, export)
         parseClass(export, class, class, export)
           parseClassHeaderOpt(export, class, class)
             parseClassExtendsOpt(export)
@@ -573,15 +554,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, extends)
+        listener: beginClassDeclaration(class, null, null, null, extends)
         parseClass(extends, class, class, extends)
           parseClassHeaderOpt(extends, class, class)
             parseClassExtendsOpt(extends)
@@ -603,15 +583,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
           listener: handleIdentifier(extension, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, extension)
+        listener: beginClassDeclaration(class, null, null, null, extension)
         parseClass(extension, class, class, extension)
           parseClassHeaderOpt(extension, class, class)
             parseClassExtendsOpt(extension)
@@ -633,15 +612,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
           listener: handleIdentifier(external, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, external)
+        listener: beginClassDeclaration(class, null, null, null, external)
         parseClass(external, class, class, external)
           parseClassHeaderOpt(external, class, class)
             parseClassExtendsOpt(external)
@@ -663,15 +641,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
           listener: handleIdentifier(factory, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, factory)
+        listener: beginClassDeclaration(class, null, null, null, factory)
         parseClass(factory, class, class, factory)
           parseClassHeaderOpt(factory, class, class)
             parseClassExtendsOpt(factory)
@@ -693,15 +670,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, false)
+        listener: beginClassDeclaration(class, null, null, null, false)
         parseClass(false, class, class, false)
           parseClassHeaderOpt(false, class, class)
             parseClassExtendsOpt(false)
@@ -723,15 +699,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, final)
+        listener: beginClassDeclaration(class, null, null, null, final)
         parseClass(final, class, class, final)
           parseClassHeaderOpt(final, class, class)
             parseClassExtendsOpt(final)
@@ -753,15 +728,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, finally)
+        listener: beginClassDeclaration(class, null, null, null, finally)
         parseClass(finally, class, class, finally)
           parseClassHeaderOpt(finally, class, class)
             parseClassExtendsOpt(finally)
@@ -783,15 +757,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, for)
+        listener: beginClassDeclaration(class, null, null, null, for)
         parseClass(for, class, class, for)
           parseClassHeaderOpt(for, class, class)
             parseClassExtendsOpt(for)
@@ -813,13 +786,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Function)
+        listener: beginClassDeclaration(class, null, null, null, Function)
         parseClass(Function, class, class, Function)
           parseClassHeaderOpt(Function, class, class)
             parseClassExtendsOpt(Function)
@@ -841,15 +813,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
           listener: handleIdentifier(get, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, get)
+        listener: beginClassDeclaration(class, null, null, null, get)
         parseClass(get, class, class, get)
           parseClassHeaderOpt(get, class, class)
             parseClassExtendsOpt(get)
@@ -871,13 +842,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, hide)
+        listener: beginClassDeclaration(class, null, null, null, hide)
         parseClass(hide, class, class, hide)
           parseClassHeaderOpt(hide, class, class)
             parseClassExtendsOpt(hide)
@@ -899,15 +869,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, if)
+        listener: beginClassDeclaration(class, null, null, null, if)
         parseClass(if, class, class, if)
           parseClassHeaderOpt(if, class, class)
             parseClassExtendsOpt(if)
@@ -929,15 +898,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
           listener: handleIdentifier(implements, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, implements)
+        listener: beginClassDeclaration(class, null, null, null, implements)
         parseClass(implements, class, class, implements)
           parseClassHeaderOpt(implements, class, class)
             parseClassExtendsOpt(implements)
@@ -959,15 +927,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
           listener: handleIdentifier(import, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, import)
+        listener: beginClassDeclaration(class, null, null, null, import)
         parseClass(import, class, class, import)
           parseClassHeaderOpt(import, class, class)
             parseClassExtendsOpt(import)
@@ -989,15 +956,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, in)
+        listener: beginClassDeclaration(class, null, null, null, in)
         parseClass(in, class, class, in)
           parseClassHeaderOpt(in, class, class)
             parseClassExtendsOpt(in)
@@ -1019,13 +985,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, inout)
+        listener: beginClassDeclaration(class, null, null, null, inout)
         parseClass(inout, class, class, inout)
           parseClassHeaderOpt(inout, class, class)
             parseClassExtendsOpt(inout)
@@ -1047,15 +1012,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
           listener: handleIdentifier(interface, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, interface)
+        listener: beginClassDeclaration(class, null, null, null, interface)
         parseClass(interface, class, class, interface)
           parseClassHeaderOpt(interface, class, class)
             parseClassExtendsOpt(interface)
@@ -1077,15 +1041,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, is)
+        listener: beginClassDeclaration(class, null, null, null, is)
         parseClass(is, class, class, is)
           parseClassHeaderOpt(is, class, class)
             parseClassExtendsOpt(is)
@@ -1107,15 +1070,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, late)
+        listener: beginClassDeclaration(class, null, null, null, late)
         parseClass(late, class, class, late)
           parseClassHeaderOpt(late, class, class)
             parseClassExtendsOpt(late)
@@ -1137,15 +1099,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
           listener: handleIdentifier(library, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, library)
+        listener: beginClassDeclaration(class, null, null, null, library)
         parseClass(library, class, class, library)
           parseClassHeaderOpt(library, class, class)
             parseClassExtendsOpt(library)
@@ -1167,15 +1128,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
           listener: handleIdentifier(mixin, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, mixin)
+        listener: beginClassDeclaration(class, null, null, null, mixin)
         parseClass(mixin, class, class, mixin)
           parseClassHeaderOpt(mixin, class, class)
             parseClassExtendsOpt(mixin)
@@ -1197,13 +1157,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, native)
+        listener: beginClassDeclaration(class, null, null, null, native)
         parseClass(native, class, class, native)
           parseClassHeaderOpt(native, class, class)
             parseClassExtendsOpt(native)
@@ -1225,15 +1184,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, new)
+        listener: beginClassDeclaration(class, null, null, null, new)
         parseClass(new, class, class, new)
           parseClassHeaderOpt(new, class, class)
             parseClassExtendsOpt(new)
@@ -1255,15 +1213,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, null)
+        listener: beginClassDeclaration(class, null, null, null, null)
         parseClass(null, class, class, null)
           parseClassHeaderOpt(null, class, class)
             parseClassExtendsOpt(null)
@@ -1285,13 +1242,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, of)
+        listener: beginClassDeclaration(class, null, null, null, of)
         parseClass(of, class, class, of)
           parseClassHeaderOpt(of, class, class)
             parseClassExtendsOpt(of)
@@ -1313,13 +1269,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, on)
+        listener: beginClassDeclaration(class, null, null, null, on)
         parseClass(on, class, class, on)
           parseClassHeaderOpt(on, class, class)
             parseClassExtendsOpt(on)
@@ -1341,15 +1296,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, operator)
+        listener: beginClassDeclaration(class, null, null, null, operator)
         parseClass(operator, class, class, operator)
           parseClassHeaderOpt(operator, class, class)
             parseClassExtendsOpt(operator)
@@ -1371,13 +1325,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, out)
+        listener: beginClassDeclaration(class, null, null, null, out)
         parseClass(out, class, class, out)
           parseClassHeaderOpt(out, class, class)
             parseClassExtendsOpt(out)
@@ -1399,15 +1352,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
           listener: handleIdentifier(part, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, part)
+        listener: beginClassDeclaration(class, null, null, null, part)
         parseClass(part, class, class, part)
           parseClassHeaderOpt(part, class, class)
             parseClassExtendsOpt(part)
@@ -1429,13 +1381,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, patch)
+        listener: beginClassDeclaration(class, null, null, null, patch)
         parseClass(patch, class, class, patch)
           parseClassHeaderOpt(patch, class, class)
             parseClassExtendsOpt(patch)
@@ -1457,15 +1408,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, required)
+        listener: beginClassDeclaration(class, null, null, null, required)
         parseClass(required, class, class, required)
           parseClassHeaderOpt(required, class, class)
             parseClassExtendsOpt(required)
@@ -1487,15 +1437,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, rethrow)
+        listener: beginClassDeclaration(class, null, null, null, rethrow)
         parseClass(rethrow, class, class, rethrow)
           parseClassHeaderOpt(rethrow, class, class)
             parseClassExtendsOpt(rethrow)
@@ -1517,15 +1466,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, return)
+        listener: beginClassDeclaration(class, null, null, null, return)
         parseClass(return, class, class, return)
           parseClassHeaderOpt(return, class, class)
             parseClassExtendsOpt(return)
@@ -1547,15 +1495,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
           listener: handleIdentifier(set, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, set)
+        listener: beginClassDeclaration(class, null, null, null, set)
         parseClass(set, class, class, set)
           parseClassHeaderOpt(set, class, class)
             parseClassExtendsOpt(set)
@@ -1577,13 +1524,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, show)
+        listener: beginClassDeclaration(class, null, null, null, show)
         parseClass(show, class, class, show)
           parseClassHeaderOpt(show, class, class)
             parseClassExtendsOpt(show)
@@ -1605,13 +1551,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, source)
+        listener: beginClassDeclaration(class, null, null, null, source)
         parseClass(source, class, class, source)
           parseClassHeaderOpt(source, class, class)
             parseClassExtendsOpt(source)
@@ -1633,15 +1578,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
           listener: handleIdentifier(static, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, static)
+        listener: beginClassDeclaration(class, null, null, null, static)
         parseClass(static, class, class, static)
           parseClassHeaderOpt(static, class, class)
             parseClassExtendsOpt(static)
@@ -1663,15 +1607,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, super)
+        listener: beginClassDeclaration(class, null, null, null, super)
         parseClass(super, class, class, super)
           parseClassHeaderOpt(super, class, class)
             parseClassExtendsOpt(super)
@@ -1693,15 +1636,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, switch)
+        listener: beginClassDeclaration(class, null, null, null, switch)
         parseClass(switch, class, class, switch)
           parseClassHeaderOpt(switch, class, class)
             parseClassExtendsOpt(switch)
@@ -1723,13 +1665,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, sync)
+        listener: beginClassDeclaration(class, null, null, null, sync)
         parseClass(sync, class, class, sync)
           parseClassHeaderOpt(sync, class, class)
             parseClassExtendsOpt(sync)
@@ -1751,15 +1692,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, this)
+        listener: beginClassDeclaration(class, null, null, null, this)
         parseClass(this, class, class, this)
           parseClassHeaderOpt(this, class, class)
             parseClassExtendsOpt(this)
@@ -1781,15 +1721,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, throw)
+        listener: beginClassDeclaration(class, null, null, null, throw)
         parseClass(throw, class, class, throw)
           parseClassHeaderOpt(throw, class, class)
             parseClassExtendsOpt(throw)
@@ -1811,15 +1750,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, true)
+        listener: beginClassDeclaration(class, null, null, null, true)
         parseClass(true, class, class, true)
           parseClassHeaderOpt(true, class, class)
             parseClassExtendsOpt(true)
@@ -1841,15 +1779,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, try)
+        listener: beginClassDeclaration(class, null, null, null, try)
         parseClass(try, class, class, try)
           parseClassHeaderOpt(try, class, class)
             parseClassExtendsOpt(try)
@@ -1871,15 +1808,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
           listener: handleIdentifier(typedef, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, typedef)
+        listener: beginClassDeclaration(class, null, null, null, typedef)
         parseClass(typedef, class, class, typedef)
           parseClassHeaderOpt(typedef, class, class)
             parseClassExtendsOpt(typedef)
@@ -1901,15 +1837,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, var)
+        listener: beginClassDeclaration(class, null, null, null, var)
         parseClass(var, class, class, var)
           parseClassHeaderOpt(var, class, class)
             parseClassExtendsOpt(var)
@@ -1931,15 +1866,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, void)
+        listener: beginClassDeclaration(class, null, null, null, void)
         parseClass(void, class, class, void)
           parseClassHeaderOpt(void, class, class)
             parseClassExtendsOpt(void)
@@ -1961,15 +1895,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, while)
+        listener: beginClassDeclaration(class, null, null, null, while)
         parseClass(while, class, class, while)
           parseClassHeaderOpt(while, class, class)
             parseClassExtendsOpt(while)
@@ -1991,15 +1924,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, with)
+        listener: beginClassDeclaration(class, null, null, null, with)
         parseClass(with, class, class, with)
           parseClassHeaderOpt(with, class, class)
             parseClassExtendsOpt(with)
@@ -2021,13 +1953,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, yield)
+        listener: beginClassDeclaration(class, null, null, null, yield)
         parseClass(yield, class, class, yield)
           parseClassHeaderOpt(yield, class, class)
             parseClassExtendsOpt(yield)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
index b29582c..c9c3900 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
@@ -227,7 +227,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
     handleIdentifier(abstract, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, abstract)
+    beginNamedMixinApplication(class, null, null, null, abstract)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -245,7 +245,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
     handleIdentifier(as, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, as)
+    beginNamedMixinApplication(class, null, null, null, as)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -263,7 +263,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, assert)
+    beginNamedMixinApplication(class, null, null, null, assert)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -280,7 +280,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(async, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, async)
+    beginNamedMixinApplication(class, null, null, null, async)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -297,7 +297,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(await, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, await)
+    beginNamedMixinApplication(class, null, null, null, await)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -315,7 +315,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, break)
+    beginNamedMixinApplication(class, null, null, null, break)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -333,7 +333,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, case)
+    beginNamedMixinApplication(class, null, null, null, case)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -351,7 +351,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, catch)
+    beginNamedMixinApplication(class, null, null, null, catch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -369,7 +369,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, class)
+    beginNamedMixinApplication(class, null, null, null, class)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -387,7 +387,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, const)
+    beginNamedMixinApplication(class, null, null, null, const)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -405,7 +405,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, continue)
+    beginNamedMixinApplication(class, null, null, null, continue)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -423,7 +423,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
     handleIdentifier(covariant, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, covariant)
+    beginNamedMixinApplication(class, null, null, null, covariant)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -441,7 +441,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, default)
+    beginNamedMixinApplication(class, null, null, null, default)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -459,7 +459,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
     handleIdentifier(deferred, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, deferred)
+    beginNamedMixinApplication(class, null, null, null, deferred)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -477,7 +477,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, do)
+    beginNamedMixinApplication(class, null, null, null, do)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -495,7 +495,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
     handleIdentifier(dynamic, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, dynamic)
+    beginNamedMixinApplication(class, null, null, null, dynamic)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -513,7 +513,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, else)
+    beginNamedMixinApplication(class, null, null, null, else)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -531,7 +531,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, enum)
+    beginNamedMixinApplication(class, null, null, null, enum)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -549,7 +549,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
     handleIdentifier(export, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, export)
+    beginNamedMixinApplication(class, null, null, null, export)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -567,7 +567,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, extends)
+    beginNamedMixinApplication(class, null, null, null, extends)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -585,7 +585,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
     handleIdentifier(extension, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, extension)
+    beginNamedMixinApplication(class, null, null, null, extension)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -603,7 +603,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
     handleIdentifier(external, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, external)
+    beginNamedMixinApplication(class, null, null, null, external)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -621,7 +621,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
     handleIdentifier(factory, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, factory)
+    beginNamedMixinApplication(class, null, null, null, factory)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -639,7 +639,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, false)
+    beginNamedMixinApplication(class, null, null, null, false)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -657,7 +657,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, final)
+    beginNamedMixinApplication(class, null, null, null, final)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -675,7 +675,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, finally)
+    beginNamedMixinApplication(class, null, null, null, finally)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -693,7 +693,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, for)
+    beginNamedMixinApplication(class, null, null, null, for)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -710,7 +710,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Function, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, Function)
+    beginNamedMixinApplication(class, null, null, null, Function)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -728,7 +728,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
     handleIdentifier(get, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, get)
+    beginNamedMixinApplication(class, null, null, null, get)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -745,7 +745,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(hide, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, hide)
+    beginNamedMixinApplication(class, null, null, null, hide)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -763,7 +763,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, if)
+    beginNamedMixinApplication(class, null, null, null, if)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -781,7 +781,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
     handleIdentifier(implements, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, implements)
+    beginNamedMixinApplication(class, null, null, null, implements)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -799,7 +799,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
     handleIdentifier(import, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, import)
+    beginNamedMixinApplication(class, null, null, null, import)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -817,7 +817,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, in)
+    beginNamedMixinApplication(class, null, null, null, in)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -834,7 +834,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(inout, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, inout)
+    beginNamedMixinApplication(class, null, null, null, inout)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -852,7 +852,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
     handleIdentifier(interface, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, interface)
+    beginNamedMixinApplication(class, null, null, null, interface)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -870,7 +870,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, is)
+    beginNamedMixinApplication(class, null, null, null, is)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -888,7 +888,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, late)
+    beginNamedMixinApplication(class, null, null, null, late)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -906,7 +906,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
     handleIdentifier(library, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, library)
+    beginNamedMixinApplication(class, null, null, null, library)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -924,7 +924,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
     handleIdentifier(mixin, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, mixin)
+    beginNamedMixinApplication(class, null, null, null, mixin)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -941,7 +941,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(native, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, native)
+    beginNamedMixinApplication(class, null, null, null, native)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -959,7 +959,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, new)
+    beginNamedMixinApplication(class, null, null, null, new)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -977,7 +977,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, null)
+    beginNamedMixinApplication(class, null, null, null, null)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -994,7 +994,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(of, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, of)
+    beginNamedMixinApplication(class, null, null, null, of)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1011,7 +1011,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(on, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, on)
+    beginNamedMixinApplication(class, null, null, null, on)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1029,7 +1029,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, operator)
+    beginNamedMixinApplication(class, null, null, null, operator)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1046,7 +1046,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(out, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, out)
+    beginNamedMixinApplication(class, null, null, null, out)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1064,7 +1064,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
     handleIdentifier(part, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, part)
+    beginNamedMixinApplication(class, null, null, null, part)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1081,7 +1081,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(patch, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, patch)
+    beginNamedMixinApplication(class, null, null, null, patch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1099,7 +1099,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, required)
+    beginNamedMixinApplication(class, null, null, null, required)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1117,7 +1117,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, rethrow)
+    beginNamedMixinApplication(class, null, null, null, rethrow)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1135,7 +1135,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, return)
+    beginNamedMixinApplication(class, null, null, null, return)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1153,7 +1153,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
     handleIdentifier(set, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, set)
+    beginNamedMixinApplication(class, null, null, null, set)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1170,7 +1170,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(show, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, show)
+    beginNamedMixinApplication(class, null, null, null, show)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1187,7 +1187,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(source, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, source)
+    beginNamedMixinApplication(class, null, null, null, source)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1205,7 +1205,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
     handleIdentifier(static, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, static)
+    beginNamedMixinApplication(class, null, null, null, static)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1223,7 +1223,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, super)
+    beginNamedMixinApplication(class, null, null, null, super)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1241,7 +1241,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, switch)
+    beginNamedMixinApplication(class, null, null, null, switch)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1258,7 +1258,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(sync, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, sync)
+    beginNamedMixinApplication(class, null, null, null, sync)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1276,7 +1276,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, this)
+    beginNamedMixinApplication(class, null, null, null, this)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1294,7 +1294,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, throw)
+    beginNamedMixinApplication(class, null, null, null, throw)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1312,7 +1312,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, true)
+    beginNamedMixinApplication(class, null, null, null, true)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1330,7 +1330,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, try)
+    beginNamedMixinApplication(class, null, null, null, try)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1348,7 +1348,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
     handleIdentifier(typedef, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, typedef)
+    beginNamedMixinApplication(class, null, null, null, typedef)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1366,7 +1366,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, var)
+    beginNamedMixinApplication(class, null, null, null, var)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1384,7 +1384,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, void)
+    beginNamedMixinApplication(class, null, null, null, void)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1402,7 +1402,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, while)
+    beginNamedMixinApplication(class, null, null, null, while)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1420,7 +1420,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, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, with)
+    beginNamedMixinApplication(class, null, null, null, with)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
@@ -1437,7 +1437,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(yield, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, null, yield)
+    beginNamedMixinApplication(class, null, null, null, yield)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments(with)
       handleType(A, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
index 732268f..aa74be1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
@@ -7,15 +7,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
           listener: handleIdentifier(abstract, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, abstract)
+        listener: beginNamedMixinApplication(class, null, null, null, abstract)
         parseNamedMixinApplication(abstract, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -36,15 +35,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
           listener: handleIdentifier(as, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, as)
+        listener: beginNamedMixinApplication(class, null, null, null, as)
         parseNamedMixinApplication(as, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -65,15 +63,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, assert)
+        listener: beginNamedMixinApplication(class, null, null, null, assert)
         parseNamedMixinApplication(assert, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -94,13 +91,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(async, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, async)
+        listener: beginNamedMixinApplication(class, null, null, null, async)
         parseNamedMixinApplication(async, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -121,13 +117,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(await, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, await)
+        listener: beginNamedMixinApplication(class, null, null, null, await)
         parseNamedMixinApplication(await, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -148,15 +143,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, break)
+        listener: beginNamedMixinApplication(class, null, null, null, break)
         parseNamedMixinApplication(break, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -177,15 +171,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, case)
+        listener: beginNamedMixinApplication(class, null, null, null, case)
         parseNamedMixinApplication(case, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -206,15 +199,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, catch)
+        listener: beginNamedMixinApplication(class, null, null, null, catch)
         parseNamedMixinApplication(catch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -235,15 +227,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, class)
+        listener: beginNamedMixinApplication(class, null, null, null, class)
         parseNamedMixinApplication(class, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -264,15 +255,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, const)
+        listener: beginNamedMixinApplication(class, null, null, null, const)
         parseNamedMixinApplication(const, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -293,15 +283,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, continue)
+        listener: beginNamedMixinApplication(class, null, null, null, continue)
         parseNamedMixinApplication(continue, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -322,15 +311,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
           listener: handleIdentifier(covariant, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, covariant)
+        listener: beginNamedMixinApplication(class, null, null, null, covariant)
         parseNamedMixinApplication(covariant, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -351,15 +339,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, default)
+        listener: beginNamedMixinApplication(class, null, null, null, default)
         parseNamedMixinApplication(default, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -380,15 +367,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
           listener: handleIdentifier(deferred, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, deferred)
+        listener: beginNamedMixinApplication(class, null, null, null, deferred)
         parseNamedMixinApplication(deferred, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -409,15 +395,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, do)
+        listener: beginNamedMixinApplication(class, null, null, null, do)
         parseNamedMixinApplication(do, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -438,15 +423,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
           listener: handleIdentifier(dynamic, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, dynamic)
+        listener: beginNamedMixinApplication(class, null, null, null, dynamic)
         parseNamedMixinApplication(dynamic, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -467,15 +451,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, else)
+        listener: beginNamedMixinApplication(class, null, null, null, else)
         parseNamedMixinApplication(else, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -496,15 +479,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, enum)
+        listener: beginNamedMixinApplication(class, null, null, null, enum)
         parseNamedMixinApplication(enum, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -525,15 +507,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
           listener: handleIdentifier(export, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, export)
+        listener: beginNamedMixinApplication(class, null, null, null, export)
         parseNamedMixinApplication(export, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -554,15 +535,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, extends)
+        listener: beginNamedMixinApplication(class, null, null, null, extends)
         parseNamedMixinApplication(extends, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -583,15 +563,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
           listener: handleIdentifier(extension, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, extension)
+        listener: beginNamedMixinApplication(class, null, null, null, extension)
         parseNamedMixinApplication(extension, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -612,15 +591,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
           listener: handleIdentifier(external, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, external)
+        listener: beginNamedMixinApplication(class, null, null, null, external)
         parseNamedMixinApplication(external, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -641,15 +619,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
           listener: handleIdentifier(factory, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, factory)
+        listener: beginNamedMixinApplication(class, null, null, null, factory)
         parseNamedMixinApplication(factory, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -670,15 +647,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, false)
+        listener: beginNamedMixinApplication(class, null, null, null, false)
         parseNamedMixinApplication(false, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -699,15 +675,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, final)
+        listener: beginNamedMixinApplication(class, null, null, null, final)
         parseNamedMixinApplication(final, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -728,15 +703,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, finally)
+        listener: beginNamedMixinApplication(class, null, null, null, finally)
         parseNamedMixinApplication(finally, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -757,15 +731,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, for)
+        listener: beginNamedMixinApplication(class, null, null, null, for)
         parseNamedMixinApplication(for, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -786,13 +759,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Function, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, Function)
+        listener: beginNamedMixinApplication(class, null, null, null, Function)
         parseNamedMixinApplication(Function, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -813,15 +785,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
           listener: handleIdentifier(get, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, get)
+        listener: beginNamedMixinApplication(class, null, null, null, get)
         parseNamedMixinApplication(get, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -842,13 +813,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(hide, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, hide)
+        listener: beginNamedMixinApplication(class, null, null, null, hide)
         parseNamedMixinApplication(hide, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -869,15 +839,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, if)
+        listener: beginNamedMixinApplication(class, null, null, null, if)
         parseNamedMixinApplication(if, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -898,15 +867,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
           listener: handleIdentifier(implements, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, implements)
+        listener: beginNamedMixinApplication(class, null, null, null, implements)
         parseNamedMixinApplication(implements, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -927,15 +895,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
           listener: handleIdentifier(import, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, import)
+        listener: beginNamedMixinApplication(class, null, null, null, import)
         parseNamedMixinApplication(import, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -956,15 +923,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, in)
+        listener: beginNamedMixinApplication(class, null, null, null, in)
         parseNamedMixinApplication(in, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -985,13 +951,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(inout, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, inout)
+        listener: beginNamedMixinApplication(class, null, null, null, inout)
         parseNamedMixinApplication(inout, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1012,15 +977,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
           listener: handleIdentifier(interface, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, interface)
+        listener: beginNamedMixinApplication(class, null, null, null, interface)
         parseNamedMixinApplication(interface, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1041,15 +1005,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, is)
+        listener: beginNamedMixinApplication(class, null, null, null, is)
         parseNamedMixinApplication(is, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1070,15 +1033,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, late)
+        listener: beginNamedMixinApplication(class, null, null, null, late)
         parseNamedMixinApplication(late, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1099,15 +1061,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
           listener: handleIdentifier(library, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, library)
+        listener: beginNamedMixinApplication(class, null, null, null, library)
         parseNamedMixinApplication(library, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1128,15 +1089,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
           listener: handleIdentifier(mixin, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, mixin)
+        listener: beginNamedMixinApplication(class, null, null, null, mixin)
         parseNamedMixinApplication(mixin, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1157,13 +1117,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(native, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, native)
+        listener: beginNamedMixinApplication(class, null, null, null, native)
         parseNamedMixinApplication(native, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1184,15 +1143,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, new)
+        listener: beginNamedMixinApplication(class, null, null, null, new)
         parseNamedMixinApplication(new, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1213,15 +1171,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, null)
+        listener: beginNamedMixinApplication(class, null, null, null, null)
         parseNamedMixinApplication(null, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1242,13 +1199,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(of, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, of)
+        listener: beginNamedMixinApplication(class, null, null, null, of)
         parseNamedMixinApplication(of, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1269,13 +1225,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(on, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, on)
+        listener: beginNamedMixinApplication(class, null, null, null, on)
         parseNamedMixinApplication(on, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1296,15 +1251,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, operator)
+        listener: beginNamedMixinApplication(class, null, null, null, operator)
         parseNamedMixinApplication(operator, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1325,13 +1279,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(out, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, out)
+        listener: beginNamedMixinApplication(class, null, null, null, out)
         parseNamedMixinApplication(out, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1352,15 +1305,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
           listener: handleIdentifier(part, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, part)
+        listener: beginNamedMixinApplication(class, null, null, null, part)
         parseNamedMixinApplication(part, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1381,13 +1333,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(patch, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, patch)
+        listener: beginNamedMixinApplication(class, null, null, null, patch)
         parseNamedMixinApplication(patch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1408,15 +1359,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, required)
+        listener: beginNamedMixinApplication(class, null, null, null, required)
         parseNamedMixinApplication(required, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1437,15 +1387,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, rethrow)
+        listener: beginNamedMixinApplication(class, null, null, null, rethrow)
         parseNamedMixinApplication(rethrow, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1466,15 +1415,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, return)
+        listener: beginNamedMixinApplication(class, null, null, null, return)
         parseNamedMixinApplication(return, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1495,15 +1443,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
           listener: handleIdentifier(set, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, set)
+        listener: beginNamedMixinApplication(class, null, null, null, set)
         parseNamedMixinApplication(set, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1524,13 +1471,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(show, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, show)
+        listener: beginNamedMixinApplication(class, null, null, null, show)
         parseNamedMixinApplication(show, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1551,13 +1497,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(source, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, source)
+        listener: beginNamedMixinApplication(class, null, null, null, source)
         parseNamedMixinApplication(source, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1578,15 +1523,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
           listener: handleIdentifier(static, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, static)
+        listener: beginNamedMixinApplication(class, null, null, null, static)
         parseNamedMixinApplication(static, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1607,15 +1551,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, super)
+        listener: beginNamedMixinApplication(class, null, null, null, super)
         parseNamedMixinApplication(super, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1636,15 +1579,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, switch)
+        listener: beginNamedMixinApplication(class, null, null, null, switch)
         parseNamedMixinApplication(switch, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1665,13 +1607,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(sync, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, sync)
+        listener: beginNamedMixinApplication(class, null, null, null, sync)
         parseNamedMixinApplication(sync, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1692,15 +1633,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, this)
+        listener: beginNamedMixinApplication(class, null, null, null, this)
         parseNamedMixinApplication(this, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1721,15 +1661,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, throw)
+        listener: beginNamedMixinApplication(class, null, null, null, throw)
         parseNamedMixinApplication(throw, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1750,15 +1689,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, true)
+        listener: beginNamedMixinApplication(class, null, null, null, true)
         parseNamedMixinApplication(true, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1779,15 +1717,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, try)
+        listener: beginNamedMixinApplication(class, null, null, null, try)
         parseNamedMixinApplication(try, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1808,15 +1745,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
           listener: handleIdentifier(typedef, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, typedef)
+        listener: beginNamedMixinApplication(class, null, null, null, typedef)
         parseNamedMixinApplication(typedef, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1837,15 +1773,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, var)
+        listener: beginNamedMixinApplication(class, null, null, null, var)
         parseNamedMixinApplication(var, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1866,15 +1801,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, void)
+        listener: beginNamedMixinApplication(class, null, null, null, void)
         parseNamedMixinApplication(void, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1895,15 +1829,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, while)
+        listener: beginNamedMixinApplication(class, null, null, null, while)
         parseNamedMixinApplication(while, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1924,15 +1857,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             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, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, with)
+        listener: beginNamedMixinApplication(class, null, null, null, with)
         parseNamedMixinApplication(with, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
@@ -1953,13 +1885,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(yield, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, null, yield)
+        listener: beginNamedMixinApplication(class, null, null, null, yield)
         parseNamedMixinApplication(yield, class, class)
           listener: handleIdentifier(A, typeReference)
           listener: handleNoTypeArguments(with)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
index 4d447d1..2e8af5e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
@@ -20,7 +20,7 @@
     // WARNING: Reporting at eof for .
     handleIdentifier(, classOrMixinDeclaration)
     handleNoTypeVariables()
-    beginClassDeclaration(class, null, null, )
+    beginClassDeclaration(class, null, null, null, )
       handleNoType()
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
index 64a2d2b..f94368d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
@@ -7,8 +7,7 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           insertSyntheticIdentifier(class, classOrMixinDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
@@ -18,7 +17,7 @@
             rewriter()
           listener: handleIdentifier(, classOrMixinDeclaration)
         listener: handleNoTypeVariables()
-        listener: beginClassDeclaration(class, null, null, )
+        listener: beginClassDeclaration(class, null, null, null, )
         parseClass(, class, class, )
           parseClassHeaderOpt(, class, class)
             parseClassExtendsOpt()
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
index 63e8b06..1767224 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -40,7 +40,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -57,7 +57,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -67,7 +67,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -77,7 +77,7 @@
         beginMetadataStar(List)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleRecoverableError(Message[ExpectedType, Expected a type, but got '>'., null, {lexeme: >}], >, >)
@@ -90,7 +90,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, 1, List, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
index 08cfe6a..4a8bcb9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,9 +31,9 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
-                parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
+                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -57,13 +56,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, A)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -74,13 +73,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -99,9 +97,9 @@
                 listener: beginMetadataStar(List)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, B)
-                parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, B, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, B)
+                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, B, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(List, typeReference)
                   listener: beginTypeArguments(<)
@@ -119,13 +117,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, B)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, B)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, List, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
index a9ee40d..5cf67ad 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -20,7 +20,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, x)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
index 4ee602f..87a3f46 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_1.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, x, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, x, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, x)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
index 78cd4a8..4ad32a3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, x)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
index f5178bd..8289af0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_2.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, x, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, x)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, x, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, x)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
index dad6879..7798fab 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -28,7 +28,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -49,7 +49,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
index 058793d..a6d366c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_3.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,9 +31,9 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
-                parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
+                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -62,13 +61,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, A)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
index fc06fb1..ecbf0e4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.expect
@@ -18,7 +18,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -28,7 +28,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -53,7 +53,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
index 0f37588..c2c8110 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_4.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,9 +31,9 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
-                parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
+                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -67,13 +66,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, A)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
index e10973c..dc854b9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.expect
@@ -82,7 +82,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -92,7 +92,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -117,7 +117,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -127,7 +127,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -137,7 +137,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -159,12 +159,12 @@
             handleType(Stream, null)
             handleIdentifier(foo, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -189,7 +189,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -199,7 +199,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -209,7 +209,7 @@
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -231,12 +231,12 @@
             handleType(Stream, null)
             handleIdentifier(foo, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
         beginMetadataStar(Stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Stream)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Stream)
             handleIdentifier(Stream, typeReference)
             beginTypeArguments(<)
               handleIdentifier(List, typeReference)
@@ -280,12 +280,12 @@
         beginMetadataStar(baz)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
             handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
             handleNoType(})
             handleIdentifier(baz, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, baz, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, baz, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
@@ -293,7 +293,7 @@
   beginMetadataStar(Stream)
   endMetadataStar(0)
   beginTopLevelMember(Stream)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
@@ -336,7 +336,7 @@
   beginMetadataStar(baz)
   endMetadataStar(0)
   beginTopLevelMember(baz)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
       handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
       handleNoType(})
       handleIdentifier(baz, topLevelVariableDeclaration)
@@ -348,7 +348,7 @@
   beginTopLevelMember(Stream)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(Stream, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
index fc2c4c6..31a1079 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46505_prime_5.crash_dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,9 +31,9 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
-                parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, A)
+                parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, A, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -67,13 +66,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, A)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, A)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -84,13 +83,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -109,8 +107,8 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, B, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, B, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -136,9 +134,9 @@
                 listener: handleType(Stream, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo, fieldDeclaration)
-                parseFieldInitializerOpt(foo, foo, null, null, null, null, DeclarationKind.Class, B)
+                parseFieldInitializerOpt(foo, foo, null, null, null, null, null, DeclarationKind.Class, B)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
               listener: endMember()
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, B)
@@ -146,9 +144,9 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, ;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, B)
-                parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, B, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              recoverFromInvalidMember(>, ;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', null, DeclarationKind.Class, B)
+                parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', }, DeclarationKind.Class, B, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                   ensureIdentifier(;, typeReference)
                     listener: handleIdentifier(Stream, typeReference)
                   listener: beginTypeArguments(<)
@@ -181,13 +179,13 @@
                         listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
                       rewriter()
                     listener: handleIdentifier(, fieldDeclaration)
-                  parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.Class, B)
+                  parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.Class, B)
                     listener: handleNoFieldInitializer(})
                   ensureSemicolon()
                     reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -198,13 +196,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -223,8 +220,8 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'ComplexTypeInfo', foo, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -250,9 +247,9 @@
                 listener: handleType(Stream, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(foo, fieldDeclaration)
-                parseFieldInitializerOpt(foo, foo, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(foo, foo, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, Stream, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
               listener: endMember()
             notEofOrValue(}, Stream)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -260,8 +257,8 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', null, Stream, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Stream)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', null, Stream, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Stream)
                 ensureIdentifier(;, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
                 listener: beginTypeArguments(<)
@@ -344,16 +341,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+              parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                 reportRecoverableError(baz, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
                   listener: handleIdentifier(baz, fieldDeclaration)
-                parseFieldInitializerOpt(baz, baz, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(baz, baz, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, baz, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, baz, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
@@ -365,8 +362,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(Stream)
-      parseTopLevelMethod(}, null, }, Instance of 'ComplexTypeInfo', null, Stream, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'ComplexTypeInfo', null, Stream, false)
+        listener: beginTopLevelMethod(}, null, null)
         ensureIdentifier(}, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
@@ -445,14 +442,14 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(baz)
       isReservedKeyword(;)
-      parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', baz, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
         reportRecoverableError(baz, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, baz, baz)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
           listener: handleIdentifier(baz, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(baz, baz, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(baz, baz, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, baz, ;)
   listener: endTopLevelDeclaration(Stream)
@@ -467,8 +464,8 @@
           listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
           listener: // WARNING: Reporting at eof for .
         rewriter()
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         ensureIdentifier(;, typeReference)
           listener: handleIdentifier(Stream, typeReference)
         listener: beginTypeArguments(<)
@@ -497,7 +494,7 @@
         listener: handleType(Stream, null)
         ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
           listener: handleIdentifier(, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
           reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
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 151c812..499a3c6 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
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -20,7 +20,7 @@
         beginMetadataStar(stream)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, stream)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream)
             handleNoType({)
             handleIdentifier(stream, methodDeclaration)
             beginTypeVariables(<)
@@ -58,7 +58,7 @@
         beginMetadataStar(stream2)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, stream2)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream2)
             handleNoType(})
             handleIdentifier(stream2, methodDeclaration)
             beginTypeVariables(<)
@@ -97,7 +97,7 @@
         beginMetadataStar(stream3)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, stream3)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream3)
             handleNoType(})
             handleIdentifier(stream3, methodDeclaration)
             beginTypeVariables(<)
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 4c286fe..81224ad 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(<)
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, stream, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, stream)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, stream, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(stream, methodDeclaration)
@@ -93,8 +92,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(<)
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, stream2, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, stream2)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, stream2, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream2)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(stream2, methodDeclaration)
@@ -157,8 +156,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(<)
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, stream3, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, stream3)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, stream3, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream3)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(stream3, methodDeclaration)
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 7653208..1404e10 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
@@ -8,7 +8,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 6c25f67..8b1d296 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
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 6d47444..74df9c4 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 6ee505e..f165cd4 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart
new file mode 100644
index 0000000..4b9525a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart
@@ -0,0 +1,65 @@
+enum E w /*cursor, about to type 'with'*/ {
+  v
+}
+
+enum E w /*cursor, about to type 'with'*/ implements Foo {
+  v
+}
+
+enum E implements Foo with Bar {
+  v
+}
+
+enum E implements Foo implements Bar implements Bar2 {
+  v
+}
+
+enum E w /*cursor, about to type 'with' instead of implements*/ Foo {
+  v
+}
+
+enum E implemen /*cursor, about to type 'implements'*/ {
+  v
+}
+
+enum E implements Foo w/*about to write 'with'*/ {
+  v
+}
+
+enum E with /* cursor */ {
+  v
+}
+
+enum E impl implements Foo {
+  v
+}
+
+// Right order
+enum E with Foo implements Bar {
+  v
+}
+
+// Wrong order
+enum E implements Bar with Foo {
+  v
+}
+
+// Right order but with "gunk" before and between.
+enum E gunk1 with Foo gunk2 implements Bar {
+  v
+}
+
+// Wrong order but with "gunk" before and between.
+enum E gunk1 implements Bar gunk2 with Foo {
+  v
+}
+
+// (Partially) right order but additional clauses.
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+  v
+}
+
+// Wrong order and additional clauses.
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+  v
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect
new file mode 100644
index 0000000..5837f2d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.expect
@@ -0,0 +1,512 @@
+Problems reported:
+
+parser/error_recovery/issue_48371:1:8: Unexpected token 'w'.
+enum E w /*cursor, about to type 'with'*/ {
+       ^
+
+parser/error_recovery/issue_48371:5:8: Unexpected token 'w'.
+enum E w /*cursor, about to type 'with'*/ implements Foo {
+       ^
+
+parser/error_recovery/issue_48371:9:23: The 'with' clause must come before the 'implements' clause.
+enum E implements Foo with Bar {
+                      ^^^^
+
+parser/error_recovery/issue_48371:13:23: Each 'enum' definition can have at most one 'implements' clause.
+enum E implements Foo implements Bar implements Bar2 {
+                      ^^^^^^^^^^
+
+parser/error_recovery/issue_48371:13:38: Each 'enum' definition can have at most one 'implements' clause.
+enum E implements Foo implements Bar implements Bar2 {
+                                     ^^^^^^^^^^
+
+parser/error_recovery/issue_48371:17:8: Unexpected tokens.
+enum E w /*cursor, about to type 'with' instead of implements*/ Foo {
+       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+parser/error_recovery/issue_48371:21:8: Unexpected token 'implemen'.
+enum E implemen /*cursor, about to type 'implements'*/ {
+       ^^^^^^^^
+
+parser/error_recovery/issue_48371:25:23: Unexpected token 'w'.
+enum E implements Foo w/*about to write 'with'*/ {
+                      ^
+
+parser/error_recovery/issue_48371:29:26: Expected a type, but got '{'.
+enum E with /* cursor */ {
+                         ^
+
+parser/error_recovery/issue_48371:33:8: Unexpected token 'impl'.
+enum E impl implements Foo {
+       ^^^^
+
+parser/error_recovery/issue_48371:43:23: The 'with' clause must come before the 'implements' clause.
+enum E implements Bar with Foo {
+                      ^^^^
+
+parser/error_recovery/issue_48371:48:8: Unexpected token 'gunk1'.
+enum E gunk1 with Foo gunk2 implements Bar {
+       ^^^^^
+
+parser/error_recovery/issue_48371:48:23: Unexpected token 'gunk2'.
+enum E gunk1 with Foo gunk2 implements Bar {
+                      ^^^^^
+
+parser/error_recovery/issue_48371:53:8: Unexpected token 'gunk1'.
+enum E gunk1 implements Bar gunk2 with Foo {
+       ^^^^^
+
+parser/error_recovery/issue_48371:53:29: Unexpected token 'gunk2'.
+enum E gunk1 implements Bar gunk2 with Foo {
+                            ^^^^^
+
+parser/error_recovery/issue_48371:53:35: The 'with' clause must come before the 'implements' clause.
+enum E gunk1 implements Bar gunk2 with Foo {
+                                  ^^^^
+
+parser/error_recovery/issue_48371:58:17: Each 'enum' definition can have at most one 'with' clause.
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+                ^^^^
+
+parser/error_recovery/issue_48371:58:42: Each 'enum' definition can have at most one 'implements' clause.
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+                                         ^^^^^^^^^^
+
+parser/error_recovery/issue_48371:58:58: Each 'enum' definition can have at most one 'with' clause.
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+                                                         ^^^^
+
+parser/error_recovery/issue_48371:58:68: Each 'enum' definition can have at most one 'implements' clause.
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+                                                                   ^^^^^^^^^^
+
+parser/error_recovery/issue_48371:63:23: Each 'enum' definition can have at most one 'implements' clause.
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+                      ^^^^^^^^^^
+
+parser/error_recovery/issue_48371:63:39: The 'with' clause must come before the 'implements' clause.
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+                                      ^^^^
+
+parser/error_recovery/issue_48371:63:48: Each 'enum' definition can have at most one 'with' clause.
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+                                               ^^^^
+
+parser/error_recovery/issue_48371:63:58: Each 'enum' definition can have at most one 'implements' clause.
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+                                                         ^^^^^^^^^^
+
+parser/error_recovery/issue_48371:63:74: Each 'enum' definition can have at most one 'with' clause.
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+                                                                         ^^^^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(w)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}], w, w)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(w)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}], w, w)
+      handleEnumNoWithClause()
+      handleIdentifier(Foo, typeReference)
+      handleNoTypeArguments({)
+      handleType(Foo, null)
+      handleImplements(implements, 1)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(implements)
+      handleEnumNoWithClause()
+      handleIdentifier(Foo, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Foo, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(implements)
+      handleEnumNoWithClause()
+      handleIdentifier(Foo, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(Foo, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(w)
+      handleRecoverableError(UnexpectedTokens, w, Foo)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(implemen)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'implemen'., null, {lexeme: implemen}], implemen, implemen)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(implements)
+      handleEnumNoWithClause()
+      handleIdentifier(Foo, typeReference)
+      handleNoTypeArguments(w)
+      handleType(Foo, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}], w, w)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(with)
+      beginTypeList({)
+        handleRecoverableError(Message[ExpectedType, Expected a type, but got '{'., null, {lexeme: {}], {, {)
+        handleIdentifier(, typeReference)
+        handleNoTypeArguments({)
+        handleType(, null)
+      endTypeList(1)
+      handleEnumWithClause(with)
+      handleImplements(null, 0)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(impl)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'impl'., null, {lexeme: impl}], impl, impl)
+      handleEnumNoWithClause()
+      handleIdentifier(Foo, typeReference)
+      handleNoTypeArguments({)
+      handleType(Foo, null)
+      handleImplements(implements, 1)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(with)
+      beginTypeList(Foo)
+        handleIdentifier(Foo, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(Foo, null)
+      endTypeList(1)
+      handleEnumWithClause(with)
+      handleIdentifier(Bar, typeReference)
+      handleNoTypeArguments({)
+      handleType(Bar, null)
+      handleImplements(implements, 1)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(implements)
+      handleEnumNoWithClause()
+      handleIdentifier(Bar, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Bar, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(gunk1)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk1'., null, {lexeme: gunk1}], gunk1, gunk1)
+      beginTypeList(Foo)
+        handleIdentifier(Foo, typeReference)
+        handleNoTypeArguments(gunk2)
+        handleType(Foo, null)
+      endTypeList(1)
+      handleEnumWithClause(with)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk2'., null, {lexeme: gunk2}], gunk2, gunk2)
+      handleIdentifier(Bar, typeReference)
+      handleNoTypeArguments({)
+      handleType(Bar, null)
+      handleImplements(implements, 1)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(gunk1)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk1'., null, {lexeme: gunk1}], gunk1, gunk1)
+      handleEnumNoWithClause()
+      handleIdentifier(Bar, typeReference)
+      handleNoTypeArguments(gunk2)
+      handleType(Bar, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk2'., null, {lexeme: gunk2}], gunk2, gunk2)
+      handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(with)
+      beginTypeList(Foo)
+        handleIdentifier(Foo, typeReference)
+        handleNoTypeArguments(with)
+        handleType(Foo, null)
+      endTypeList(1)
+      handleEnumWithClause(with)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+      handleIdentifier(Bar, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(Bar, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(implements)
+      handleEnumNoWithClause()
+      handleIdentifier(Bar, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(Bar, null)
+      handleImplements(implements, 1)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+      handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+      handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+      handleEnumHeader(enum, {)
+      beginMetadataStar(v)
+      endMetadataStar(0)
+      handleIdentifier(v, enumValueDeclaration)
+      handleNoTypeNameInConstructorReference(})
+      beginConstructorReference(v)
+        handleNoTypeArguments(})
+        handleNoConstructorReferenceContinuationAfterTypeArguments(})
+      endConstructorReference(v, null, }, ConstructorReferenceContext.Const)
+      handleNoArguments(v)
+      handleEnumElement({)
+      handleEnumElements(}, 1)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration()
+endCompilationUnit(15, )
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
new file mode 100644
index 0000000..98d94b2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.intertwined.expect
@@ -0,0 +1,681 @@
+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(w)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableError(w, Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}], w, w)
+          parseEnumWithClauseOpt(w)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(w)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(w)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableError(w, Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}], w, w)
+          parseEnumWithClauseOpt(w)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(w)
+            listener: handleIdentifier(Foo, typeReference)
+            listener: handleNoTypeArguments({)
+            listener: handleType(Foo, null)
+            listener: handleImplements(implements, 1)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(implements)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleIdentifier(Foo, typeReference)
+            listener: handleNoTypeArguments(with)
+            listener: handleType(Foo, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Foo, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+            reportRecoverableError(with, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+              listener: handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+            parseEnumWithClauseOpt(Foo)
+              parseTypeList(with)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(implements)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleIdentifier(Foo, typeReference)
+            listener: handleNoTypeArguments(implements)
+            listener: handleType(Foo, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Foo, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(Foo, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+            reportRecoverableError(implements, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+            parseClassOrMixinOrEnumImplementsOpt(Foo)
+          recoveryEnumWith(Bar, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(Bar, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+            reportRecoverableError(implements, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+            parseClassOrMixinOrEnumImplementsOpt(Bar)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(w)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableErrorWithEnd(w, Foo, UnexpectedTokens)
+              listener: handleRecoverableError(UnexpectedTokens, w, Foo)
+          parseEnumWithClauseOpt(Foo)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(Foo)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(implemen)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableError(implemen, Message[UnexpectedToken, Unexpected token 'implemen'., null, {lexeme: implemen}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'implemen'., null, {lexeme: implemen}], implemen, implemen)
+          parseEnumWithClauseOpt(implemen)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(implemen)
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(implements)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleIdentifier(Foo, typeReference)
+            listener: handleNoTypeArguments(w)
+            listener: handleType(Foo, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Foo, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(Foo, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+          recoverySmallLookAheadSkipTokens(Foo, [{, with, implements])
+            reportRecoverableError(w, Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'w'., null, {lexeme: w}], w, w)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(with)
+          parseEnumWithClauseOpt(E)
+            parseTypeList(with)
+              listener: beginTypeList({)
+              reportRecoverableErrorWithToken({, Instance of 'Template<(Token) => Message>')
+                listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '{'., null, {lexeme: {}], {, {)
+              rewriter()
+              listener: handleIdentifier(, typeReference)
+              listener: handleNoTypeArguments({)
+              listener: handleType(, null)
+              listener: endTypeList(1)
+            listener: handleEnumWithClause(with)
+          parseClassOrMixinOrEnumImplementsOpt()
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(impl)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableError(impl, Message[UnexpectedToken, Unexpected token 'impl'., null, {lexeme: impl}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'impl'., null, {lexeme: impl}], impl, impl)
+          parseEnumWithClauseOpt(impl)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(impl)
+            listener: handleIdentifier(Foo, typeReference)
+            listener: handleNoTypeArguments({)
+            listener: handleType(Foo, null)
+            listener: handleImplements(implements, 1)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(with)
+          parseEnumWithClauseOpt(E)
+            parseTypeList(with)
+              listener: beginTypeList(Foo)
+              listener: handleIdentifier(Foo, typeReference)
+              listener: handleNoTypeArguments(implements)
+              listener: handleType(Foo, null)
+              listener: endTypeList(1)
+            listener: handleEnumWithClause(with)
+          parseClassOrMixinOrEnumImplementsOpt(Foo)
+            listener: handleIdentifier(Bar, typeReference)
+            listener: handleNoTypeArguments({)
+            listener: handleType(Bar, null)
+            listener: handleImplements(implements, 1)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(implements)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleIdentifier(Bar, typeReference)
+            listener: handleNoTypeArguments(with)
+            listener: handleType(Bar, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Bar, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+            reportRecoverableError(with, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+              listener: handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+            parseEnumWithClauseOpt(Bar)
+              parseTypeList(with)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(gunk1)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableError(gunk1, Message[UnexpectedToken, Unexpected token 'gunk1'., null, {lexeme: gunk1}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk1'., null, {lexeme: gunk1}], gunk1, gunk1)
+          parseEnumWithClauseOpt(gunk1)
+            parseTypeList(with)
+              listener: beginTypeList(Foo)
+              listener: handleIdentifier(Foo, typeReference)
+              listener: handleNoTypeArguments(gunk2)
+              listener: handleType(Foo, null)
+              listener: endTypeList(1)
+            listener: handleEnumWithClause(with)
+          recoveryEnumWith(Foo, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+          recoverySmallLookAheadSkipTokens(Foo, [{, with, implements])
+            reportRecoverableError(gunk2, Message[UnexpectedToken, Unexpected token 'gunk2'., null, {lexeme: gunk2}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk2'., null, {lexeme: gunk2}], gunk2, gunk2)
+          parseClassOrMixinOrEnumImplementsOpt(gunk2)
+            listener: handleIdentifier(Bar, typeReference)
+            listener: handleNoTypeArguments({)
+            listener: handleType(Bar, null)
+            listener: handleImplements(implements, 1)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(gunk1)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+            reportRecoverableError(gunk1, Message[UnexpectedToken, Unexpected token 'gunk1'., null, {lexeme: gunk1}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk1'., null, {lexeme: gunk1}], gunk1, gunk1)
+          parseEnumWithClauseOpt(gunk1)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(gunk1)
+            listener: handleIdentifier(Bar, typeReference)
+            listener: handleNoTypeArguments(gunk2)
+            listener: handleType(Bar, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Bar, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(Bar, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+          recoverySmallLookAheadSkipTokens(Bar, [{, with, implements])
+            reportRecoverableError(gunk2, Message[UnexpectedToken, Unexpected token 'gunk2'., null, {lexeme: gunk2}])
+              listener: handleRecoverableError(Message[UnexpectedToken, Unexpected token 'gunk2'., null, {lexeme: gunk2}], gunk2, gunk2)
+          recoveryEnumWith(gunk2, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+            reportRecoverableError(with, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+              listener: handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+            parseEnumWithClauseOpt(gunk2)
+              parseTypeList(with)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(with)
+          parseEnumWithClauseOpt(E)
+            parseTypeList(with)
+              listener: beginTypeList(Foo)
+              listener: handleIdentifier(Foo, typeReference)
+              listener: handleNoTypeArguments(with)
+              listener: handleType(Foo, null)
+              listener: endTypeList(1)
+            listener: handleEnumWithClause(with)
+          recoveryEnumWith(Foo, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+            reportRecoverableError(with, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+            parseEnumWithClauseOpt(Foo)
+              parseTypeList(with)
+          parseClassOrMixinOrEnumImplementsOpt(Foo2)
+            listener: handleIdentifier(Bar, typeReference)
+            listener: handleNoTypeArguments(implements)
+            listener: handleType(Bar, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Bar, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+          recoveryEnumImplements(Bar, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+            reportRecoverableError(implements, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+            parseClassOrMixinOrEnumImplementsOpt(Bar)
+          recoveryEnumWith(Bar2, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+            reportRecoverableError(with, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+            parseEnumWithClauseOpt(Bar2)
+              parseTypeList(with)
+          recoveryEnumWith(Foo3, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+          recoveryEnumImplements(Foo3, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+            reportRecoverableError(implements, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+            parseClassOrMixinOrEnumImplementsOpt(Foo3)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(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(implements)
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleIdentifier(Bar, typeReference)
+            listener: handleNoTypeArguments(implements)
+            listener: handleType(Bar, null)
+            listener: handleImplements(implements, 1)
+          recoveryEnumWith(Bar, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(Bar, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+            reportRecoverableError(implements, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+            parseClassOrMixinOrEnumImplementsOpt(Bar)
+          recoveryEnumWith(Bar2, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+            reportRecoverableError(with, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+              listener: handleRecoverableError(Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}], with, with)
+            parseEnumWithClauseOpt(Bar2)
+              parseTypeList(with)
+          recoveryEnumWith(Foo, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+            reportRecoverableError(with, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+            parseEnumWithClauseOpt(Foo)
+              parseTypeList(with)
+          recoveryEnumWith(Foo2, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+          recoveryEnumImplements(Foo2, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+            reportRecoverableError(implements, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}], implements, implements)
+            parseClassOrMixinOrEnumImplementsOpt(Foo2)
+          recoveryEnumWith(Bar3, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+            reportRecoverableError(with, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+              listener: handleRecoverableError(Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}], with, with)
+            parseEnumWithClauseOpt(Bar3)
+              parseTypeList(with)
+        listener: handleEnumHeader(enum, {)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(v)
+            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: handleNoArguments(v)
+          listener: handleEnumElement({)
+        listener: handleEnumElements(}, 1)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(15, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.parser.expect
new file mode 100644
index 0000000..ccf057b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.parser.expect
@@ -0,0 +1,135 @@
+NOTICE: Stream was rewritten by parser!
+
+enum E w {
+v
+}
+
+enum E w implements Foo {
+v
+}
+
+enum E implements Foo with Bar {
+v
+}
+
+enum E implements Foo implements Bar implements Bar2 {
+v
+}
+
+enum E w Foo {
+v
+}
+
+enum E implemen {
+v
+}
+
+enum E implements Foo w {
+v
+}
+
+enum E with *synthetic*{
+v
+}
+
+enum E impl implements Foo {
+v
+}
+
+
+enum E with Foo implements Bar {
+v
+}
+
+
+enum E implements Bar with Foo {
+v
+}
+
+
+enum E gunk1 with Foo gunk2 implements Bar {
+v
+}
+
+
+enum E gunk1 implements Bar gunk2 with Foo {
+v
+}
+
+
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+v
+}
+
+
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+v
+}
+
+
+enum[KeywordToken] E[StringToken] w[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] w[StringToken] implements[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Foo[StringToken] with[KeywordToken] Bar[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Foo[StringToken] implements[KeywordToken] Bar[StringToken] implements[KeywordToken] Bar2[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] w[StringToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implemen[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Foo[StringToken] w[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] with[KeywordToken] [SyntheticStringToken]{[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] impl[StringToken] implements[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] with[KeywordToken] Foo[StringToken] implements[KeywordToken] Bar[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Bar[StringToken] with[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] gunk1[StringToken] with[KeywordToken] Foo[StringToken] gunk2[StringToken] implements[KeywordToken] Bar[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] gunk1[StringToken] implements[KeywordToken] Bar[StringToken] gunk2[StringToken] with[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] with[KeywordToken] Foo[StringToken] with[KeywordToken] Foo2[StringToken] implements[KeywordToken] Bar[StringToken] implements[KeywordToken] Bar2[StringToken] with[KeywordToken] Foo3[StringToken] implements[KeywordToken] Bar3[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Bar[StringToken] implements[KeywordToken] Bar2[StringToken] with[KeywordToken] Foo[StringToken] with[KeywordToken] Foo2[StringToken] implements[KeywordToken] Bar3[StringToken] with[KeywordToken] Foo3[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.scanner.expect
new file mode 100644
index 0000000..2f0b51f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371.dart.scanner.expect
@@ -0,0 +1,133 @@
+enum E w {
+v
+}
+
+enum E w implements Foo {
+v
+}
+
+enum E implements Foo with Bar {
+v
+}
+
+enum E implements Foo implements Bar implements Bar2 {
+v
+}
+
+enum E w Foo {
+v
+}
+
+enum E implemen {
+v
+}
+
+enum E implements Foo w {
+v
+}
+
+enum E with {
+v
+}
+
+enum E impl implements Foo {
+v
+}
+
+
+enum E with Foo implements Bar {
+v
+}
+
+
+enum E implements Bar with Foo {
+v
+}
+
+
+enum E gunk1 with Foo gunk2 implements Bar {
+v
+}
+
+
+enum E gunk1 implements Bar gunk2 with Foo {
+v
+}
+
+
+enum E with Foo with Foo2 implements Bar implements Bar2 with Foo3 implements Bar3 {
+v
+}
+
+
+enum E implements Bar implements Bar2 with Foo with Foo2 implements Bar3 with Foo3 {
+v
+}
+
+
+enum[KeywordToken] E[StringToken] w[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] w[StringToken] implements[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Foo[StringToken] with[KeywordToken] Bar[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Foo[StringToken] implements[KeywordToken] Bar[StringToken] implements[KeywordToken] Bar2[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] w[StringToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implemen[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Foo[StringToken] w[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] with[KeywordToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken] impl[StringToken] implements[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] with[KeywordToken] Foo[StringToken] implements[KeywordToken] Bar[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Bar[StringToken] with[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] gunk1[StringToken] with[KeywordToken] Foo[StringToken] gunk2[StringToken] implements[KeywordToken] Bar[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] gunk1[StringToken] implements[KeywordToken] Bar[StringToken] gunk2[StringToken] with[KeywordToken] Foo[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] with[KeywordToken] Foo[StringToken] with[KeywordToken] Foo2[StringToken] implements[KeywordToken] Bar[StringToken] implements[KeywordToken] Bar2[StringToken] with[KeywordToken] Foo3[StringToken] implements[KeywordToken] Bar3[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+
+
+enum[KeywordToken] E[StringToken] implements[KeywordToken] Bar[StringToken] implements[KeywordToken] Bar2[StringToken] with[KeywordToken] Foo[StringToken] with[KeywordToken] Foo2[StringToken] implements[KeywordToken] Bar3[StringToken] with[KeywordToken] Foo3[StringToken] {[BeginToken]
+v[StringToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart
new file mode 100644
index 0000000..3c1a3f0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart
@@ -0,0 +1,3 @@
+library enum;
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.expect
new file mode 100644
index 0000000..998ca28
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.expect
@@ -0,0 +1,30 @@
+Problems reported:
+
+parser/error_recovery/issue_48371_prime1:1:9: 'enum' can't be used as an identifier because it's a keyword.
+library enum;
+        ^^^^
+
+beginCompilationUnit(library)
+  beginMetadataStar(library)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(library)
+    beginLibraryName(library)
+      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, libraryName)
+    endLibraryName(library, ;)
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.intertwined.expect
new file mode 100644
index 0000000..7fa7ad9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.intertwined.expect
@@ -0,0 +1,50 @@
+parseUnit(library)
+  skipErrorTokens(library)
+  listener: beginCompilationUnit(library)
+  syntheticPreviousToken(library)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(library)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, library, null, Instance of 'DirectiveContext')
+      parseLibraryName(library)
+        listener: beginUncategorizedTopLevelDeclaration(library)
+        listener: beginLibraryName(library)
+        parseQualified(library, libraryName, libraryNameContinuation)
+          ensureIdentifier(library, libraryName)
+            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+              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, libraryName)
+        ensureSemicolon(enum)
+        listener: endLibraryName(library, ;)
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(library)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.parser.expect
new file mode 100644
index 0000000..b9b70ef
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.parser.expect
@@ -0,0 +1,7 @@
+library enum;
+
+main() {}
+
+library[KeywordToken] enum[KeywordToken];[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.scanner.expect
new file mode 100644
index 0000000..b9b70ef
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime1.dart.scanner.expect
@@ -0,0 +1,7 @@
+library enum;
+
+main() {}
+
+library[KeywordToken] enum[KeywordToken];[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart
new file mode 100644
index 0000000..5292968
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart
@@ -0,0 +1,3 @@
+import "lib.dart" as enum;
+
+main() {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.expect
new file mode 100644
index 0000000..ba48fb3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.expect
@@ -0,0 +1,37 @@
+Problems reported:
+
+parser/error_recovery/issue_48371_prime2:1:22: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum;
+                     ^^^^
+
+beginCompilationUnit(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, as)
+      beginConditionalUris(as)
+      endConditionalUris(0)
+      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, importPrefixDeclaration)
+      handleImportPrefix(null, as)
+      beginCombinators(;)
+      endCombinators(0)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.intertwined.expect
new file mode 100644
index 0000000..1de2eb6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.intertwined.expect
@@ -0,0 +1,61 @@
+parseUnit(import)
+  skipErrorTokens(import)
+  listener: beginCompilationUnit(import)
+  syntheticPreviousToken(import)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, as)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(as)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          ensureIdentifier(as, importPrefixDeclaration)
+            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+              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, importPrefixDeclaration)
+          listener: handleImportPrefix(null, as)
+        parseCombinatorStar(enum)
+          listener: beginCombinators(;)
+          listener: endCombinators(0)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(import)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.parser.expect
new file mode 100644
index 0000000..42d3699
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.parser.expect
@@ -0,0 +1,9 @@
+import "lib.dart" as enum;
+
+main() {}
+
+
+import[KeywordToken] "lib.dart"[StringToken] as[KeywordToken] enum[KeywordToken];[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.scanner.expect
new file mode 100644
index 0000000..42d3699
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime2.dart.scanner.expect
@@ -0,0 +1,9 @@
+import "lib.dart" as enum;
+
+main() {}
+
+
+import[KeywordToken] "lib.dart"[StringToken] as[KeywordToken] enum[KeywordToken];[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart
new file mode 100644
index 0000000..6c44311
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart
@@ -0,0 +1,11 @@
+enum /* about to add an enum here */
+
+class A {
+  void foo(int x) {
+    print(x * 42);
+  }
+} 
+
+enum E /* about to add an enum here */
+
+int f() {}
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
new file mode 100644
index 0000000..e02aece
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
@@ -0,0 +1,111 @@
+Problems reported:
+
+parser/error_recovery/issue_48371_prime3:3:1: Expected an identifier, but got 'class'.
+class A {
+^^^^^
+
+parser/error_recovery/issue_48371_prime3:3:1: Expected a enum body, but got 'class'.
+class A {
+^^^^^
+
+parser/error_recovery/issue_48371_prime3:11:1: Expected a enum body, but got 'int'.
+int f() {}
+^^^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., Try inserting an identifier before 'class'., {lexeme: class}], class, class)
+    handleIdentifier(, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(class)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'class'., An enum definition must have a body with at least one constant name., {lexeme: class}], class, class)
+      handleEnumHeader(enum, {)
+      handleEnumElements(, 0)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(A, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, A)
+      handleNoType(A)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
+            handleVoidKeyword(void)
+            handleIdentifier(foo, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              handleIdentifier(print, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(*)
+                handleNoArguments(*)
+                handleSend(x, *)
+                beginBinaryExpression(*)
+                  handleLiteralInt(42)
+                endBinaryExpression(*)
+              endArguments(1, (, ))
+              handleSend(print, ;)
+              handleExpressionStatement(;)
+            endBlockFunctionBody(1, {, })
+          endClassMethod(null, void, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginEnum(enum)
+      handleNoTypeVariables(int)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'int'., An enum definition must have a body with at least one constant name., {lexeme: int}], int, int)
+      handleEnumHeader(enum, {)
+      handleEnumElements(E, 0)
+    endEnum(enum, {, 0)
+  endTopLevelDeclaration(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(f)
+      handleType(int, null)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(4, )
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
new file mode 100644
index 0000000..81e1bf1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
@@ -0,0 +1,218 @@
+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)
+          insertSyntheticIdentifier(enum, enumDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got 'class'., Try inserting an identifier before 'class'., {lexeme: class}], messageOnToken: null)
+            reportRecoverableError(class, Message[ExpectedIdentifier, Expected an identifier, but got 'class'., Try inserting an identifier before 'class'., {lexeme: class}])
+              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., Try inserting an identifier before 'class'., {lexeme: class}], class, class)
+            rewriter()
+          listener: handleIdentifier(, enumDeclaration)
+        listener: beginEnum(enum)
+        parseEnumHeaderOpt(, enum)
+          listener: handleNoTypeVariables(class)
+          recoverySmallLookAheadSkipTokens(, [{, with, implements])
+          parseEnumWithClauseOpt()
+            listener: handleEnumNoWithClause()
+          recoveryEnumWith(, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+          recoverySmallLookAheadSkipTokens(, [{, with, implements])
+          parseClassOrMixinOrEnumImplementsOpt()
+            listener: handleImplements(null, 0)
+          recoveryEnumWith(, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+          recoverySmallLookAheadSkipTokens(, [{, with, implements])
+        ensureBlock(, Instance of 'Template<(Token) => Message>', null)
+          reportRecoverableError(class, Message[ExpectedEnumBody, Expected a enum body, but got 'class'., An enum definition must have a body with at least one constant name., {lexeme: class}])
+            listener: handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'class'., An enum definition must have a body with at least one constant name., {lexeme: class}], class, class)
+          insertBlock()
+            rewriter()
+            rewriter()
+        listener: handleEnumHeader(enum, {)
+        listener: handleEnumElements(, 0)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(A, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, A)
+        parseClass(A, class, class, A)
+          parseClassHeaderOpt(A, class, class)
+            parseClassExtendsOpt(A)
+              listener: handleNoType(A)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, A)
+              parseMetadataStar({)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(foo, methodDeclaration)
+                parseQualifiedRestOpt(foo, methodDeclarationContinuation)
+                parseMethodTypeVar(foo)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(foo, foo, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(foo, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), 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)
+                                                    parseSendOrFunctionLiteral((, expression)
+                                                      parseSend((, expression)
+                                                        isNextIdentifier(()
+                                                        ensureIdentifier((, expression)
+                                                          listener: handleIdentifier(x, expression)
+                                                        listener: handleNoTypeArguments(*)
+                                                        parseArgumentsOpt(x)
+                                                          listener: handleNoArguments(*)
+                                                        listener: handleSend(x, *)
+                                                listener: beginBinaryExpression(*)
+                                                parsePrecedenceExpression(*, 15, true)
+                                                  parseUnaryExpression(*, true)
+                                                    parsePrimary(*, expression)
+                                                      parseLiteralInt(*)
+                                                        listener: handleLiteralInt(42)
+                                                listener: endBinaryExpression(*)
+                                            listener: endArguments(1, (, ))
+                                      listener: handleSend(print, ;)
+                          ensureSemicolon())
+                          listener: handleExpressionStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endClassMethod(null, void, (, null, })
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(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(int)
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+          parseEnumWithClauseOpt(E)
+            listener: handleEnumNoWithClause()
+          recoveryEnumWith(E, Message[MultipleClauses, Each 'enum' definition can have at most one 'with' clause., Try combining all of the 'with' clauses into a single clause., {string: enum, string2: with}])
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+          parseClassOrMixinOrEnumImplementsOpt(E)
+            listener: handleImplements(null, 0)
+          recoveryEnumWith(E, Message[OutOfOrderClauses, The 'with' clause must come before the 'implements' clause., Try moving the 'with' clause before the 'implements' clause., {string: with, string2: implements}])
+          recoveryEnumImplements(E, Message[MultipleClauses, Each 'enum' definition can have at most one 'implements' clause., Try combining all of the 'implements' clauses into a single clause., {string: enum, string2: implements}])
+          recoverySmallLookAheadSkipTokens(E, [{, with, implements])
+        ensureBlock(E, Instance of 'Template<(Token) => Message>', null)
+          reportRecoverableError(int, Message[ExpectedEnumBody, Expected a enum body, but got 'int'., An enum definition must have a body with at least one constant name., {lexeme: int}])
+            listener: handleRecoverableError(Message[ExpectedEnumBody, Expected a enum body, but got 'int'., An enum definition must have a body with at least one constant name., {lexeme: int}], int, int)
+          insertBlock(E)
+            rewriter()
+            rewriter()
+        listener: handleEnumHeader(enum, {)
+        listener: handleEnumElements(E, 0)
+        listener: endEnum(enum, {, 0)
+  listener: endTopLevelDeclaration(int)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, f, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(f)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, 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)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.parser.expect
new file mode 100644
index 0000000..3866e50b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.parser.expect
@@ -0,0 +1,27 @@
+NOTICE: Stream was rewritten by parser!
+
+enum
+
+*synthetic*{}class A {
+void foo(int x) {
+print(x * 42);
+}
+}
+
+enum E
+
+{}int f() {}
+
+
+enum[KeywordToken]
+
+[SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]class[KeywordToken] A[StringToken] {[BeginToken]
+void[KeywordToken] foo[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]x[StringToken] *[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken]
+
+{[SyntheticBeginToken]}[SyntheticToken]int[StringToken] f[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.scanner.expect
new file mode 100644
index 0000000..9f59c93
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.scanner.expect
@@ -0,0 +1,25 @@
+enum
+
+class A {
+void foo(int x) {
+print(x * 42);
+}
+}
+
+enum E
+
+int f() {}
+
+
+enum[KeywordToken]
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+void[KeywordToken] foo[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]x[StringToken] *[SimpleToken] 42[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] E[StringToken]
+
+int[StringToken] f[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart
new file mode 100644
index 0000000..970f1dc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart
@@ -0,0 +1,10 @@
+import "lib.dart" show enum;
+import "lib.dart" hide enum;
+import "lib.dart" as enum show enum hide enum;
+import "lib.dart" show enum hide enum as enum;
+import "lib.dart" show enum, x, enum;
+import "lib.dart" hide enum, x, enum;
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+
+main() {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.expect
new file mode 100644
index 0000000..2bb9402
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.expect
@@ -0,0 +1,318 @@
+Problems reported:
+
+parser/error_recovery/issue_48371_prime4:1:24: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum;
+                       ^^^^
+
+parser/error_recovery/issue_48371_prime4:2:24: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" hide enum;
+                       ^^^^
+
+parser/error_recovery/issue_48371_prime4:3:22: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum hide enum;
+                     ^^^^
+
+parser/error_recovery/issue_48371_prime4:3:32: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum hide enum;
+                               ^^^^
+
+parser/error_recovery/issue_48371_prime4:3:42: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum hide enum;
+                                         ^^^^
+
+parser/error_recovery/issue_48371_prime4:4:24: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum hide enum as enum;
+                       ^^^^
+
+parser/error_recovery/issue_48371_prime4:4:34: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum hide enum as enum;
+                                 ^^^^
+
+parser/error_recovery/issue_48371_prime4:4:42: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum hide enum as enum;
+                                         ^^^^
+
+parser/error_recovery/issue_48371_prime4:4:39: The prefix ('as' clause) should come before any show/hide combinators.
+import "lib.dart" show enum hide enum as enum;
+                                      ^^
+
+parser/error_recovery/issue_48371_prime4:5:24: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum;
+                       ^^^^
+
+parser/error_recovery/issue_48371_prime4:5:33: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum;
+                                ^^^^
+
+parser/error_recovery/issue_48371_prime4:6:24: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" hide enum, x, enum;
+                       ^^^^
+
+parser/error_recovery/issue_48371_prime4:6:33: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" hide enum, x, enum;
+                                ^^^^
+
+parser/error_recovery/issue_48371_prime4:7:22: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+                     ^^^^
+
+parser/error_recovery/issue_48371_prime4:7:32: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+                               ^^^^
+
+parser/error_recovery/issue_48371_prime4:7:41: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+                                        ^^^^
+
+parser/error_recovery/issue_48371_prime4:7:51: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+                                                  ^^^^
+
+parser/error_recovery/issue_48371_prime4:7:60: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+                                                           ^^^^
+
+parser/error_recovery/issue_48371_prime4:8:24: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+                       ^^^^
+
+parser/error_recovery/issue_48371_prime4:8:33: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+                                ^^^^
+
+parser/error_recovery/issue_48371_prime4:8:43: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+                                          ^^^^
+
+parser/error_recovery/issue_48371_prime4:8:52: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+                                                   ^^^^
+
+parser/error_recovery/issue_48371_prime4:8:60: 'enum' can't be used as an identifier because it's a keyword.
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+                                                           ^^^^
+
+parser/error_recovery/issue_48371_prime4:8:57: The prefix ('as' clause) should come before any show/hide combinators.
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+                                                        ^^
+
+beginCompilationUnit(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, show)
+      beginConditionalUris(show)
+      endConditionalUris(0)
+      handleImportPrefix(null, null)
+      beginCombinators(show)
+        beginShow(show)
+          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, combinator)
+          handleIdentifierList(1)
+        endShow(show)
+      endCombinators(1)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, hide)
+      beginConditionalUris(hide)
+      endConditionalUris(0)
+      handleImportPrefix(null, null)
+      beginCombinators(hide)
+        beginHide(hide)
+          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, combinator)
+          handleIdentifierList(1)
+        endHide(hide)
+      endCombinators(1)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, as)
+      beginConditionalUris(as)
+      endConditionalUris(0)
+      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, importPrefixDeclaration)
+      handleImportPrefix(null, as)
+      beginCombinators(show)
+        beginShow(show)
+          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, combinator)
+          handleIdentifierList(1)
+        endShow(show)
+        beginHide(hide)
+          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, combinator)
+          handleIdentifierList(1)
+        endHide(hide)
+      endCombinators(2)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, show)
+      beginConditionalUris(show)
+      endConditionalUris(0)
+      handleImportPrefix(null, null)
+      beginCombinators(show)
+        beginShow(show)
+          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, combinator)
+          handleIdentifierList(1)
+        endShow(show)
+        beginHide(hide)
+          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, combinator)
+          handleIdentifierList(1)
+        endHide(hide)
+      endCombinators(2)
+    endImport(import, null, null)
+    beginConditionalUris(as)
+    endConditionalUris(0)
+    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, importPrefixDeclaration)
+    handleImportPrefix(null, as)
+    handleRecoverableError(PrefixAfterCombinator, as, as)
+    beginCombinators(;)
+    endCombinators(0)
+    handleRecoverImport(;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, show)
+      beginConditionalUris(show)
+      endConditionalUris(0)
+      handleImportPrefix(null, null)
+      beginCombinators(show)
+        beginShow(show)
+          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, combinator)
+          handleIdentifier(x, combinator)
+          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, combinator)
+          handleIdentifierList(3)
+        endShow(show)
+      endCombinators(1)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, hide)
+      beginConditionalUris(hide)
+      endConditionalUris(0)
+      handleImportPrefix(null, null)
+      beginCombinators(hide)
+        beginHide(hide)
+          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, combinator)
+          handleIdentifier(x, combinator)
+          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, combinator)
+          handleIdentifierList(3)
+        endHide(hide)
+      endCombinators(1)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, as)
+      beginConditionalUris(as)
+      endConditionalUris(0)
+      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, importPrefixDeclaration)
+      handleImportPrefix(null, as)
+      beginCombinators(show)
+        beginShow(show)
+          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, combinator)
+          handleIdentifier(x, combinator)
+          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, combinator)
+          handleIdentifierList(3)
+        endShow(show)
+        beginHide(hide)
+          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, combinator)
+          handleIdentifier(x, combinator)
+          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, combinator)
+          handleIdentifierList(3)
+        endHide(hide)
+      endCombinators(2)
+    endImport(import, null, ;)
+  endTopLevelDeclaration(import)
+  beginMetadataStar(import)
+  endMetadataStar(0)
+  beginUncategorizedTopLevelDeclaration(import)
+    beginImport(import)
+      beginLiteralString("lib.dart")
+      endLiteralString(0, show)
+      beginConditionalUris(show)
+      endConditionalUris(0)
+      handleImportPrefix(null, null)
+      beginCombinators(show)
+        beginShow(show)
+          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, combinator)
+          handleIdentifier(x, combinator)
+          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, combinator)
+          handleIdentifierList(3)
+        endShow(show)
+        beginHide(hide)
+          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, combinator)
+          handleIdentifier(x, combinator)
+          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, combinator)
+          handleIdentifierList(3)
+        endHide(hide)
+      endCombinators(2)
+    endImport(import, null, null)
+    beginConditionalUris(as)
+    endConditionalUris(0)
+    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, importPrefixDeclaration)
+    handleImportPrefix(null, as)
+    handleRecoverableError(PrefixAfterCombinator, as, as)
+    beginCombinators(;)
+    endCombinators(0)
+    handleRecoverImport(;)
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(9, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.intertwined.expect
new file mode 100644
index 0000000..172c6c3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.intertwined.expect
@@ -0,0 +1,432 @@
+parseUnit(import)
+  skipErrorTokens(import)
+  listener: beginCompilationUnit(import)
+  syntheticPreviousToken(import)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, show)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(show)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          listener: handleImportPrefix(null, null)
+        parseCombinatorStar("lib.dart")
+          listener: beginCombinators(show)
+          parseShow("lib.dart")
+            listener: beginShow(show)
+            parseIdentifierList(show)
+              ensureIdentifier(show, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(1)
+            listener: endShow(show)
+          listener: endCombinators(1)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, hide)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(hide)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          listener: handleImportPrefix(null, null)
+        parseCombinatorStar("lib.dart")
+          listener: beginCombinators(hide)
+          parseHide("lib.dart")
+            listener: beginHide(hide)
+            parseIdentifierList(hide)
+              ensureIdentifier(hide, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(1)
+            listener: endHide(hide)
+          listener: endCombinators(1)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, as)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(as)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          ensureIdentifier(as, importPrefixDeclaration)
+            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+              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, importPrefixDeclaration)
+          listener: handleImportPrefix(null, as)
+        parseCombinatorStar(enum)
+          listener: beginCombinators(show)
+          parseShow(enum)
+            listener: beginShow(show)
+            parseIdentifierList(show)
+              ensureIdentifier(show, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(1)
+            listener: endShow(show)
+          parseHide(enum)
+            listener: beginHide(hide)
+            parseIdentifierList(hide)
+              ensureIdentifier(hide, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(1)
+            listener: endHide(hide)
+          listener: endCombinators(2)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, show)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(show)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          listener: handleImportPrefix(null, null)
+        parseCombinatorStar("lib.dart")
+          listener: beginCombinators(show)
+          parseShow("lib.dart")
+            listener: beginShow(show)
+            parseIdentifierList(show)
+              ensureIdentifier(show, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(1)
+            listener: endShow(show)
+          parseHide(enum)
+            listener: beginHide(hide)
+            parseIdentifierList(hide)
+              ensureIdentifier(hide, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(1)
+            listener: endHide(hide)
+          listener: endCombinators(2)
+        listener: endImport(import, null, null)
+        parseImportRecovery("lib.dart")
+          parseConditionalUriStar("lib.dart")
+          parseImportPrefixOpt("lib.dart")
+          parseCombinatorStar("lib.dart")
+            parseShow("lib.dart")
+              parseIdentifierList(show)
+                ensureIdentifier(show, combinator)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+            parseHide(enum)
+              parseIdentifierList(hide)
+                ensureIdentifier(hide, combinator)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+          skipUnexpectedTokenOpt(enum, [if, deferred, as, hide, show, ;])
+          parseConditionalUriStar(enum)
+            listener: beginConditionalUris(as)
+            listener: endConditionalUris(0)
+          parseImportPrefixOpt(enum)
+            ensureIdentifier(as, importPrefixDeclaration)
+              reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                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, importPrefixDeclaration)
+            listener: handleImportPrefix(null, as)
+          reportRecoverableError(as, PrefixAfterCombinator)
+            listener: handleRecoverableError(PrefixAfterCombinator, as, as)
+          parseCombinatorStar(enum)
+            listener: beginCombinators(;)
+            listener: endCombinators(0)
+          listener: handleRecoverImport(;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, show)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(show)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          listener: handleImportPrefix(null, null)
+        parseCombinatorStar("lib.dart")
+          listener: beginCombinators(show)
+          parseShow("lib.dart")
+            listener: beginShow(show)
+            parseIdentifierList(show)
+              ensureIdentifier(show, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              ensureIdentifier(,, combinator)
+                listener: handleIdentifier(x, combinator)
+              ensureIdentifier(,, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(3)
+            listener: endShow(show)
+          listener: endCombinators(1)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, hide)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(hide)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          listener: handleImportPrefix(null, null)
+        parseCombinatorStar("lib.dart")
+          listener: beginCombinators(hide)
+          parseHide("lib.dart")
+            listener: beginHide(hide)
+            parseIdentifierList(hide)
+              ensureIdentifier(hide, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              ensureIdentifier(,, combinator)
+                listener: handleIdentifier(x, combinator)
+              ensureIdentifier(,, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(3)
+            listener: endHide(hide)
+          listener: endCombinators(1)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, as)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(as)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          ensureIdentifier(as, importPrefixDeclaration)
+            reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+              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, importPrefixDeclaration)
+          listener: handleImportPrefix(null, as)
+        parseCombinatorStar(enum)
+          listener: beginCombinators(show)
+          parseShow(enum)
+            listener: beginShow(show)
+            parseIdentifierList(show)
+              ensureIdentifier(show, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              ensureIdentifier(,, combinator)
+                listener: handleIdentifier(x, combinator)
+              ensureIdentifier(,, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(3)
+            listener: endShow(show)
+          parseHide(enum)
+            listener: beginHide(hide)
+            parseIdentifierList(hide)
+              ensureIdentifier(hide, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              ensureIdentifier(,, combinator)
+                listener: handleIdentifier(x, combinator)
+              ensureIdentifier(,, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(3)
+            listener: endHide(hide)
+          listener: endCombinators(2)
+        listener: endImport(import, null, ;)
+  listener: endTopLevelDeclaration(import)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(import)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, import, null, Instance of 'DirectiveContext')
+      parseImport(import)
+        listener: beginUncategorizedTopLevelDeclaration(import)
+        listener: beginImport(import)
+        ensureLiteralString(import)
+          parseLiteralString(import)
+            parseSingleLiteralString(import)
+              listener: beginLiteralString("lib.dart")
+              listener: endLiteralString(0, show)
+        parseConditionalUriStar("lib.dart")
+          listener: beginConditionalUris(show)
+          listener: endConditionalUris(0)
+        parseImportPrefixOpt("lib.dart")
+          listener: handleImportPrefix(null, null)
+        parseCombinatorStar("lib.dart")
+          listener: beginCombinators(show)
+          parseShow("lib.dart")
+            listener: beginShow(show)
+            parseIdentifierList(show)
+              ensureIdentifier(show, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              ensureIdentifier(,, combinator)
+                listener: handleIdentifier(x, combinator)
+              ensureIdentifier(,, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(3)
+            listener: endShow(show)
+          parseHide(enum)
+            listener: beginHide(hide)
+            parseIdentifierList(hide)
+              ensureIdentifier(hide, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              ensureIdentifier(,, combinator)
+                listener: handleIdentifier(x, combinator)
+              ensureIdentifier(,, combinator)
+                reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                  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, combinator)
+              listener: handleIdentifierList(3)
+            listener: endHide(hide)
+          listener: endCombinators(2)
+        listener: endImport(import, null, null)
+        parseImportRecovery("lib.dart")
+          parseConditionalUriStar("lib.dart")
+          parseImportPrefixOpt("lib.dart")
+          parseCombinatorStar("lib.dart")
+            parseShow("lib.dart")
+              parseIdentifierList(show)
+                ensureIdentifier(show, combinator)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                ensureIdentifier(,, combinator)
+                ensureIdentifier(,, combinator)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+            parseHide(enum)
+              parseIdentifierList(hide)
+                ensureIdentifier(hide, combinator)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                ensureIdentifier(,, combinator)
+                ensureIdentifier(,, combinator)
+                  reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+          skipUnexpectedTokenOpt(enum, [if, deferred, as, hide, show, ;])
+          parseConditionalUriStar(enum)
+            listener: beginConditionalUris(as)
+            listener: endConditionalUris(0)
+          parseImportPrefixOpt(enum)
+            ensureIdentifier(as, importPrefixDeclaration)
+              reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+                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, importPrefixDeclaration)
+            listener: handleImportPrefix(null, as)
+          reportRecoverableError(as, PrefixAfterCombinator)
+            listener: handleRecoverableError(PrefixAfterCombinator, as, as)
+          parseCombinatorStar(enum)
+            listener: beginCombinators(;)
+            listener: endCombinators(0)
+          listener: handleRecoverImport(;)
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(import)
+  listener: endCompilationUnit(9, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.parser.expect
new file mode 100644
index 0000000..79afafe
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.parser.expect
@@ -0,0 +1,23 @@
+import "lib.dart" show enum;
+import "lib.dart" hide enum;
+import "lib.dart" as enum show enum hide enum;
+import "lib.dart" show enum hide enum as enum;
+import "lib.dart" show enum, x, enum;
+import "lib.dart" hide enum, x, enum;
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+
+main() {}
+
+
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] hide[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] as[KeywordToken] enum[KeywordToken] show[KeywordToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken] as[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] hide[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] as[KeywordToken] enum[KeywordToken] show[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken] as[KeywordToken] enum[KeywordToken];[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.scanner.expect
new file mode 100644
index 0000000..79afafe
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime4.dart.scanner.expect
@@ -0,0 +1,23 @@
+import "lib.dart" show enum;
+import "lib.dart" hide enum;
+import "lib.dart" as enum show enum hide enum;
+import "lib.dart" show enum hide enum as enum;
+import "lib.dart" show enum, x, enum;
+import "lib.dart" hide enum, x, enum;
+import "lib.dart" as enum show enum, x, enum hide enum, x, enum;
+import "lib.dart" show enum, x, enum hide enum, x, enum as enum;
+
+main() {}
+
+
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] hide[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] as[KeywordToken] enum[KeywordToken] show[KeywordToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken] as[KeywordToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] hide[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] as[KeywordToken] enum[KeywordToken] show[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken];[SimpleToken]
+import[KeywordToken] "lib.dart"[StringToken] show[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken] hide[KeywordToken] enum[KeywordToken],[SimpleToken] x[StringToken],[SimpleToken] enum[KeywordToken] as[KeywordToken] enum[KeywordToken];[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart
new file mode 100644
index 0000000..fe9c022
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart
@@ -0,0 +1,31 @@
+class A {
+  A(int x);
+  A.y(int x);
+}
+
+class B extends A {
+  B(int x) : assert(x > 0) super(x);
+}
+
+class B2 extends A {
+  B2(int x) : assert(x > 0) super.y(x);
+}
+
+class B3 extends A {
+  B3(int x) : assert(x > 0) this.y(x);
+  B3.y(int x);
+}
+
+class C extends A {
+  int y;
+  C(int x) : assert(x > 0) y = 2*21;
+}
+
+class D extends A {
+  D(int x) : assert(x > 0) assert(x - 1 > 0);
+}
+
+class E extends A {
+  final int y;
+  E(int x) : assert(x > 0) this.y = x*2;
+}
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
new file mode 100644
index 0000000..9cff1ec
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
@@ -0,0 +1,534 @@
+Problems reported:
+
+parser/error_recovery/issue_48411:7:26: Expected ',' after this.
+  B(int x) : assert(x > 0) super(x);
+                         ^
+
+parser/error_recovery/issue_48411:11:27: Expected ',' after this.
+  B2(int x) : assert(x > 0) super.y(x);
+                          ^
+
+parser/error_recovery/issue_48411:15:27: Expected ',' after this.
+  B3(int x) : assert(x > 0) this.y(x);
+                          ^
+
+parser/error_recovery/issue_48411:21:26: Expected ',' after this.
+  C(int x) : assert(x > 0) y = 2*21;
+                         ^
+
+parser/error_recovery/issue_48411:25:26: Expected ',' after this.
+  D(int x) : assert(x > 0) assert(x - 1 > 0);
+                         ^
+
+parser/error_recovery/issue_48411:30:26: Expected ',' after this.
+  E(int x) : assert(x > 0) this.y = x*2;
+                         ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(A, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, A)
+      handleNoType(A)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(A)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+            handleNoType({)
+            handleIdentifier(A, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, A, (, null, ;)
+        endMember()
+        beginMetadataStar(A)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+            handleNoType(;)
+            handleIdentifier(A, methodDeclaration)
+            handleIdentifier(y, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, A, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, B)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(B)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B)
+            handleNoType({)
+            handleIdentifier(B, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, super)
+              endInitializer(super)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(x, ))
+                endArguments(1, (, ))
+                handleSend(super, ;)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B2, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, B2)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(B2)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2)
+            handleNoType({)
+            handleIdentifier(B2, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, super)
+              endInitializer(super)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleIdentifier(y, expressionContinuation)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(x, ))
+                endArguments(1, (, ))
+                handleSend(y, ;)
+                handleEndingBinaryExpression(.)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B2, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B3, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, B3)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(B3)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+            handleNoType({)
+            handleIdentifier(B3, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, this)
+              endInitializer(this)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(y, expressionContinuation)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(x, ))
+                endArguments(1, (, ))
+                handleSend(y, ;)
+                handleEndingBinaryExpression(.)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B3, (, :, ;)
+        endMember()
+        beginMetadataStar(B3)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+            handleNoType(;)
+            handleIdentifier(B3, methodDeclaration)
+            handleIdentifier(y, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B3, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, C)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, y)
+              endInitializer(y)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleLiteralInt(2)
+                beginBinaryExpression(*)
+                  handleLiteralInt(21)
+                endBinaryExpression(*)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(D, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, D)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(D)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
+            handleNoType({)
+            handleIdentifier(D, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, assert)
+              endInitializer(assert)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ;)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, D, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(E, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, E)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(final)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+        endMember()
+        beginMetadataStar(E)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, E)
+            handleNoType(;)
+            handleIdentifier(E, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, this)
+              endInitializer(this)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(y, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleEndingBinaryExpression(.)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(*)
+                handleNoArguments(*)
+                handleSend(x, *)
+                beginBinaryExpression(*)
+                  handleLiteralInt(2)
+                endBinaryExpression(*)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, E, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(7, )
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
new file mode 100644
index 0000000..891b53a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
@@ -0,0 +1,1028 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(A, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, A)
+        parseClass(A, class, class, A)
+          parseClassHeaderOpt(A, class, class)
+            parseClassExtendsOpt(A)
+              listener: handleNoType(A)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, A)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, A)
+              parseMetadataStar({)
+                listener: beginMetadataStar(A)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, A, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(A, methodDeclaration)
+                parseQualifiedRestOpt(A, methodDeclarationContinuation)
+                parseMethodTypeVar(A)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(A, A, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(A, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, A, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, A)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(A)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(.)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, A, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(A, methodDeclaration)
+                parseQualifiedRestOpt(A, methodDeclarationContinuation)
+                  parseQualifiedRest(A, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(y, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(y)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(y, A, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(y, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, A, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, B)
+        parseClass(B, class, class, B)
+          parseClassHeaderOpt(B, class, class)
+            parseClassExtendsOpt(B)
+              parseClassExtendsSeenExtendsClause(extends, B)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, B)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, B)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, B)
+              parseMetadataStar({)
+                listener: beginMetadataStar(B)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, B, DeclarationKind.Class, B, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(B, methodDeclaration)
+                parseQualifiedRestOpt(B, methodDeclarationContinuation)
+                parseMethodTypeVar(B)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(B, B, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(B, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, super)
+                      listener: endInitializer(super)
+                    reportRecoverableError(), Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+                    rewriter()
+                    parseInitializer(,)
+                      listener: beginInitializer(super)
+                      parseSuperInitializerExpression(,)
+                        parseInitializerExpressionRest(,)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    isNextIdentifier(()
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments())
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments())
+                                                    listener: handleSend(x, ))
+                                        listener: endArguments(1, (, ))
+                                    listener: handleSend(super, ;)
+                          listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B2, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, B2)
+        parseClass(B2, class, class, B2)
+          parseClassHeaderOpt(B2, class, class)
+            parseClassExtendsOpt(B2)
+              parseClassExtendsSeenExtendsClause(extends, B2)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, B2)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, B2)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, B2)
+              parseMetadataStar({)
+                listener: beginMetadataStar(B2)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, B2, DeclarationKind.Class, B2, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(B2, methodDeclaration)
+                parseQualifiedRestOpt(B2, methodDeclarationContinuation)
+                parseMethodTypeVar(B2)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(B2, B2, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(B2, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, super)
+                      listener: endInitializer(super)
+                    reportRecoverableError(), Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+                    rewriter()
+                    parseInitializer(,)
+                      listener: beginInitializer(super)
+                      parseSuperInitializerExpression(,)
+                        parseInitializerExpressionRest(,)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                              parsePrimary(., expressionContinuation)
+                                parseSendOrFunctionLiteral(., expressionContinuation)
+                                  parseSend(., expressionContinuation)
+                                    isNextIdentifier(.)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(y, expressionContinuation)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(y)
+                                      parseArguments(y)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      isNextIdentifier(()
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(x, ))
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(y, ;)
+                              listener: handleEndingBinaryExpression(.)
+                          listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B2, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B3, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, B3)
+        parseClass(B3, class, class, B3)
+          parseClassHeaderOpt(B3, class, class)
+            parseClassExtendsOpt(B3)
+              parseClassExtendsSeenExtendsClause(extends, B3)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, B3)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, B3)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, B3)
+              parseMetadataStar({)
+                listener: beginMetadataStar(B3)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, B3, DeclarationKind.Class, B3, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(B3, methodDeclaration)
+                parseQualifiedRestOpt(B3, methodDeclarationContinuation)
+                parseMethodTypeVar(B3)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(B3, B3, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(B3, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, this)
+                      listener: endInitializer(this)
+                    reportRecoverableError(), Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+                    rewriter()
+                    parseInitializer(,)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(,)
+                        parseExpression(,)
+                          parsePrecedenceExpression(,, 1, true)
+                            parseUnaryExpression(,, true)
+                              parsePrimary(,, expression)
+                                parseThisExpression(,, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation)
+                              parseSendOrFunctionLiteral(., expressionContinuation)
+                                parseSend(., expressionContinuation)
+                                  isNextIdentifier(.)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(y, expressionContinuation)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(y)
+                                    parseArguments(y)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    isNextIdentifier(()
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments())
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments())
+                                                    listener: handleSend(x, ))
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(y, ;)
+                            listener: handleEndingBinaryExpression(.)
+                        listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B3, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, B3)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, B3)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(B3)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(.)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, B3, DeclarationKind.Class, B3, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(B3, methodDeclaration)
+                parseQualifiedRestOpt(B3, methodDeclarationContinuation)
+                  parseQualifiedRest(B3, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(y, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(y)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(y, B3, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(y, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B3, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              parseClassExtendsSeenExtendsClause(extends, C)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', y, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(y, fieldDeclaration)
+                parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, C)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(C, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(C, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, y)
+                      listener: endInitializer(y)
+                    reportRecoverableError(), Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+                    rewriter()
+                    parseInitializer(,)
+                      listener: beginInitializer(y)
+                      parseInitializerExpressionRest(,)
+                        parseExpression(,)
+                          parsePrecedenceExpression(,, 1, true)
+                            parseUnaryExpression(,, true)
+                              parsePrimary(,, expression)
+                                parseSendOrFunctionLiteral(,, expression)
+                                  parseSend(,, expression)
+                                    isNextIdentifier(,)
+                                    ensureIdentifier(,, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(y, =)
+                            parsePrecedenceExpression(=, 1, true)
+                              parseUnaryExpression(=, true)
+                                parsePrimary(=, expression)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(2)
+                              listener: beginBinaryExpression(*)
+                              parsePrecedenceExpression(*, 15, true)
+                                parseUnaryExpression(*, true)
+                                  parsePrimary(*, expression)
+                                    parseLiteralInt(*)
+                                      listener: handleLiteralInt(21)
+                              listener: endBinaryExpression(*)
+                            listener: handleAssignmentExpression(=)
+                        listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt(21)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(21, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, C, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(D, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, D)
+        parseClass(D, class, class, D)
+          parseClassHeaderOpt(D, class, class)
+            parseClassExtendsOpt(D)
+              parseClassExtendsSeenExtendsClause(extends, D)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, D)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, D)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, D)
+              parseMetadataStar({)
+                listener: beginMetadataStar(D)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(D, methodDeclaration)
+                parseQualifiedRestOpt(D, methodDeclarationContinuation)
+                parseMethodTypeVar(D)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(D, D, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(D, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, assert)
+                      listener: endInitializer(assert)
+                    reportRecoverableError(), Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+                    rewriter()
+                    parseInitializer(,)
+                      listener: beginInitializer(assert)
+                      parseAssert(,, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(-)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(-)
+                                    listener: handleSend(x, -)
+                            listener: beginBinaryExpression(-)
+                            parsePrecedenceExpression(-, 14, true)
+                              parseUnaryExpression(-, true)
+                                parsePrimary(-, expression)
+                                  parseLiteralInt(-)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(-)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ;)
+                      listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, D, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(E, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, E)
+        parseClass(E, class, class, E)
+          parseClassHeaderOpt(E, class, class)
+            parseClassExtendsOpt(E)
+              parseClassExtendsSeenExtendsClause(extends, E)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, E)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, final)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, E)
+              parseMetadataStar({)
+                listener: beginMetadataStar(final)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleType', y, DeclarationKind.Class, E, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(y, fieldDeclaration)
+                parseFieldInitializerOpt(y, y, null, null, null, null, final, DeclarationKind.Class, E)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+              listener: endMember()
+            notEofOrValue(}, E)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, E)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(E)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, E, DeclarationKind.Class, E, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, E)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, 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)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, this)
+                      listener: endInitializer(this)
+                    reportRecoverableError(), Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ',' after this., null, {string: ,}], ), ))
+                    rewriter()
+                    parseInitializer(,)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(,)
+                        parseExpression(,)
+                          parsePrecedenceExpression(,, 1, true)
+                            parseUnaryExpression(,, true)
+                              parsePrimary(,, expression)
+                                parseThisExpression(,, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation)
+                              parseSendOrFunctionLiteral(., expressionContinuation)
+                                parseSend(., expressionContinuation)
+                                  isNextIdentifier(.)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(y, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(y)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(y, =)
+                            listener: handleEndingBinaryExpression(.)
+                            parsePrecedenceExpression(=, 1, true)
+                              parseUnaryExpression(=, true)
+                                parsePrimary(=, expression)
+                                  parseSendOrFunctionLiteral(=, expression)
+                                    parseSend(=, expression)
+                                      isNextIdentifier(=)
+                                      ensureIdentifier(=, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(*)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(*)
+                                      listener: handleSend(x, *)
+                              listener: beginBinaryExpression(*)
+                              parsePrecedenceExpression(*, 15, true)
+                                parseUnaryExpression(*, true)
+                                  parsePrimary(*, expression)
+                                    parseLiteralInt(*)
+                                      listener: handleLiteralInt(2)
+                              listener: endBinaryExpression(*)
+                            listener: handleAssignmentExpression(=)
+                        listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt(2)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(2, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, E, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(7, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.parser.expect
new file mode 100644
index 0000000..8495c22
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.parser.expect
@@ -0,0 +1,67 @@
+NOTICE: Stream was rewritten by parser!
+
+class A {
+A(int x);
+A.y(int x);
+}
+
+class B extends A {
+B(int x) : assert(x > 0) ,super(x);
+}
+
+class B2 extends A {
+B2(int x) : assert(x > 0) ,super.y(x);
+}
+
+class B3 extends A {
+B3(int x) : assert(x > 0) ,this.y(x);
+B3.y(int x);
+}
+
+class C extends A {
+int y;
+C(int x) : assert(x > 0) ,y = 2*21;
+}
+
+class D extends A {
+D(int x) : assert(x > 0) ,assert(x - 1 > 0);
+}
+
+class E extends A {
+final int y;
+E(int x) : assert(x > 0) ,this.y = x*2;
+}
+
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+A[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+A[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] ,[SyntheticToken]super[KeywordToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B2[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] ,[SyntheticToken]super[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B3[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] ,[SyntheticToken]this[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+B3[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+int[StringToken] y[StringToken];[SimpleToken]
+C[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] ,[SyntheticToken]y[StringToken] =[SimpleToken] 2[StringToken]*[SimpleToken]21[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] D[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+D[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] ,[SyntheticToken]assert[KeywordToken]([BeginToken]x[StringToken] -[SimpleToken] 1[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] E[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+final[KeywordToken] int[StringToken] y[StringToken];[SimpleToken]
+E[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] ,[SyntheticToken]this[KeywordToken].[SimpleToken]y[StringToken] =[SimpleToken] x[StringToken]*[SimpleToken]2[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.scanner.expect
new file mode 100644
index 0000000..5d6cd73
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.scanner.expect
@@ -0,0 +1,65 @@
+class A {
+A(int x);
+A.y(int x);
+}
+
+class B extends A {
+B(int x) : assert(x > 0) super(x);
+}
+
+class B2 extends A {
+B2(int x) : assert(x > 0) super.y(x);
+}
+
+class B3 extends A {
+B3(int x) : assert(x > 0) this.y(x);
+B3.y(int x);
+}
+
+class C extends A {
+int y;
+C(int x) : assert(x > 0) y = 2*21;
+}
+
+class D extends A {
+D(int x) : assert(x > 0) assert(x - 1 > 0);
+}
+
+class E extends A {
+final int y;
+E(int x) : assert(x > 0) this.y = x*2;
+}
+
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+A[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+A[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] super[KeywordToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B2[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] super[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B3[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] this[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+B3[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+int[StringToken] y[StringToken];[SimpleToken]
+C[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] y[StringToken] =[SimpleToken] 2[StringToken]*[SimpleToken]21[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] D[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+D[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] -[SimpleToken] 1[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] E[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+final[KeywordToken] int[StringToken] y[StringToken];[SimpleToken]
+E[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken] this[KeywordToken].[SimpleToken]y[StringToken] =[SimpleToken] x[StringToken]*[SimpleToken]2[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart
new file mode 100644
index 0000000..da7078e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart
@@ -0,0 +1,31 @@
+class A {
+  A(int x);
+  A.y(int x);
+}
+
+class B extends A {
+  B(int x) : assert(x > 0), super(x);
+}
+
+class B2 extends A {
+  B2(int x) : assert(x > 0), super.y(x);
+}
+
+class B3 extends A {
+  B3(int x) : assert(x > 0), this.y(x);
+  B3.y(int x);
+}
+
+class C extends A {
+  int y;
+  C(int x) : assert(x > 0), y = 2*21;
+}
+
+class D extends A {
+  D(int x) : assert(x > 0), assert(x - 1 > 0);
+}
+
+class E extends A {
+  final int y;
+  E(int x) : assert(x > 0), this.y = x*2;
+}
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
new file mode 100644
index 0000000..6b97b24
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect
@@ -0,0 +1,502 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(A, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, A)
+      handleNoType(A)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(A)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+            handleNoType({)
+            handleIdentifier(A, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, A, (, null, ;)
+        endMember()
+        beginMetadataStar(A)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+            handleNoType(;)
+            handleIdentifier(A, methodDeclaration)
+            handleIdentifier(y, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, A, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, B)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(B)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B)
+            handleNoType({)
+            handleIdentifier(B, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(x, ))
+                endArguments(1, (, ))
+                handleSend(super, ;)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B2, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, B2)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(B2)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2)
+            handleNoType({)
+            handleIdentifier(B2, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleIdentifier(y, expressionContinuation)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(x, ))
+                endArguments(1, (, ))
+                handleSend(y, ;)
+                handleEndingBinaryExpression(.)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B2, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(B3, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, B3)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(B3)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+            handleNoType({)
+            handleIdentifier(B3, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(y, expressionContinuation)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(x, ))
+                endArguments(1, (, ))
+                handleSend(y, ;)
+                handleEndingBinaryExpression(.)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B3, (, :, ;)
+        endMember()
+        beginMetadataStar(B3)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+            handleNoType(;)
+            handleIdentifier(B3, methodDeclaration)
+            handleIdentifier(y, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, B3, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, C)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(y)
+                handleIdentifier(y, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleLiteralInt(2)
+                beginBinaryExpression(*)
+                  handleLiteralInt(21)
+                endBinaryExpression(*)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(D, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, D)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(D)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
+            handleNoType({)
+            handleIdentifier(D, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, -)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ;)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, D, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(E, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, E)
+      handleIdentifier(A, typeReference)
+      handleNoTypeArguments({)
+      handleType(A, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(final)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(y)
+            handleType(int, null)
+            handleIdentifier(y, fieldDeclaration)
+            handleNoFieldInitializer(;)
+          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+        endMember()
+        beginMetadataStar(E)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, E)
+            handleNoType(;)
+            handleIdentifier(E, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(x)
+                handleType(int, null)
+                handleIdentifier(x, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(>)
+                  handleNoArguments(>)
+                  handleSend(x, >)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(0)
+                  endBinaryExpression(>)
+                endAssert(assert, Assert.Initializer, (, null, ,)
+              endInitializer(,)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(y, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(y, =)
+                handleEndingBinaryExpression(.)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(*)
+                handleNoArguments(*)
+                handleSend(x, *)
+                beginBinaryExpression(*)
+                  handleLiteralInt(2)
+                endBinaryExpression(*)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(2, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, E, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(7, )
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
new file mode 100644
index 0000000..40c0fe6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
@@ -0,0 +1,1010 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(A, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, A)
+        parseClass(A, class, class, A)
+          parseClassHeaderOpt(A, class, class)
+            parseClassExtendsOpt(A)
+              listener: handleNoType(A)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, A)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, A)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, A)
+              parseMetadataStar({)
+                listener: beginMetadataStar(A)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, A, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(A, methodDeclaration)
+                parseQualifiedRestOpt(A, methodDeclarationContinuation)
+                parseMethodTypeVar(A)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(A, A, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(A, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, A, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, A)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(A)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(.)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, A, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(A, methodDeclaration)
+                parseQualifiedRestOpt(A, methodDeclarationContinuation)
+                  parseQualifiedRest(A, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(y, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(y)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(y, A, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(y, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, A, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, B)
+        parseClass(B, class, class, B)
+          parseClassHeaderOpt(B, class, class)
+            parseClassExtendsOpt(B)
+              parseClassExtendsSeenExtendsClause(extends, B)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, B)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, B)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, B)
+              parseMetadataStar({)
+                listener: beginMetadataStar(B)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, B, DeclarationKind.Class, B, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(B, methodDeclaration)
+                parseQualifiedRestOpt(B, methodDeclarationContinuation)
+                parseMethodTypeVar(B)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(B, B, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(B, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ,)
+                      listener: endInitializer(,)
+                    parseInitializer(,)
+                      listener: beginInitializer(super)
+                      parseSuperInitializerExpression(,)
+                        parseInitializerExpressionRest(,)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    isNextIdentifier(()
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments())
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments())
+                                                    listener: handleSend(x, ))
+                                        listener: endArguments(1, (, ))
+                                    listener: handleSend(super, ;)
+                          listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B2, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, B2)
+        parseClass(B2, class, class, B2)
+          parseClassHeaderOpt(B2, class, class)
+            parseClassExtendsOpt(B2)
+              parseClassExtendsSeenExtendsClause(extends, B2)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, B2)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, B2)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, B2)
+              parseMetadataStar({)
+                listener: beginMetadataStar(B2)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, B2, DeclarationKind.Class, B2, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(B2, methodDeclaration)
+                parseQualifiedRestOpt(B2, methodDeclarationContinuation)
+                parseMethodTypeVar(B2)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(B2, B2, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(B2, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ,)
+                      listener: endInitializer(,)
+                    parseInitializer(,)
+                      listener: beginInitializer(super)
+                      parseSuperInitializerExpression(,)
+                        parseInitializerExpressionRest(,)
+                          parseExpression(,)
+                            parsePrecedenceExpression(,, 1, true)
+                              parseUnaryExpression(,, true)
+                                parsePrimary(,, expression)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                              parsePrimary(., expressionContinuation)
+                                parseSendOrFunctionLiteral(., expressionContinuation)
+                                  parseSend(., expressionContinuation)
+                                    isNextIdentifier(.)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(y, expressionContinuation)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(y)
+                                      parseArguments(y)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          parseExpression(()
+                                            parsePrecedenceExpression((, 1, true)
+                                              parseUnaryExpression((, true)
+                                                parsePrimary((, expression)
+                                                  parseSendOrFunctionLiteral((, expression)
+                                                    parseSend((, expression)
+                                                      isNextIdentifier(()
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments())
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments())
+                                                      listener: handleSend(x, ))
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(y, ;)
+                              listener: handleEndingBinaryExpression(.)
+                          listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B2, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(B3, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, B3)
+        parseClass(B3, class, class, B3)
+          parseClassHeaderOpt(B3, class, class)
+            parseClassExtendsOpt(B3)
+              parseClassExtendsSeenExtendsClause(extends, B3)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, B3)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, B3)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, B3)
+              parseMetadataStar({)
+                listener: beginMetadataStar(B3)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, B3, DeclarationKind.Class, B3, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(B3, methodDeclaration)
+                parseQualifiedRestOpt(B3, methodDeclarationContinuation)
+                parseMethodTypeVar(B3)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(B3, B3, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(B3, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ,)
+                      listener: endInitializer(,)
+                    parseInitializer(,)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(,)
+                        parseExpression(,)
+                          parsePrecedenceExpression(,, 1, true)
+                            parseUnaryExpression(,, true)
+                              parsePrimary(,, expression)
+                                parseThisExpression(,, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation)
+                              parseSendOrFunctionLiteral(., expressionContinuation)
+                                parseSend(., expressionContinuation)
+                                  isNextIdentifier(.)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(y, expressionContinuation)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(y)
+                                    parseArguments(y)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    isNextIdentifier(()
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments())
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments())
+                                                    listener: handleSend(x, ))
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(y, ;)
+                            listener: handleEndingBinaryExpression(.)
+                        listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B3, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, B3)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, B3)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(B3)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(.)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, B3, DeclarationKind.Class, B3, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(B3, methodDeclaration)
+                parseQualifiedRestOpt(B3, methodDeclarationContinuation)
+                  parseQualifiedRest(B3, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(y, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(y)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(y, B3, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(y, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, B3, (, null, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              parseClassExtendsSeenExtendsClause(extends, C)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', y, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(y, fieldDeclaration)
+                parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, C)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(C, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(C, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ,)
+                      listener: endInitializer(,)
+                    parseInitializer(,)
+                      listener: beginInitializer(y)
+                      parseInitializerExpressionRest(,)
+                        parseExpression(,)
+                          parsePrecedenceExpression(,, 1, true)
+                            parseUnaryExpression(,, true)
+                              parsePrimary(,, expression)
+                                parseSendOrFunctionLiteral(,, expression)
+                                  parseSend(,, expression)
+                                    isNextIdentifier(,)
+                                    ensureIdentifier(,, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(y, =)
+                            parsePrecedenceExpression(=, 1, true)
+                              parseUnaryExpression(=, true)
+                                parsePrimary(=, expression)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(2)
+                              listener: beginBinaryExpression(*)
+                              parsePrecedenceExpression(*, 15, true)
+                                parseUnaryExpression(*, true)
+                                  parsePrimary(*, expression)
+                                    parseLiteralInt(*)
+                                      listener: handleLiteralInt(21)
+                              listener: endBinaryExpression(*)
+                            listener: handleAssignmentExpression(=)
+                        listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt(21)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(21, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, C, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(D, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, D)
+        parseClass(D, class, class, D)
+          parseClassHeaderOpt(D, class, class)
+            parseClassExtendsOpt(D)
+              parseClassExtendsSeenExtendsClause(extends, D)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, D)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, D)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, D)
+              parseMetadataStar({)
+                listener: beginMetadataStar(D)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(D, methodDeclaration)
+                parseQualifiedRestOpt(D, methodDeclarationContinuation)
+                parseMethodTypeVar(D)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(D, D, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(D, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ,)
+                      listener: endInitializer(,)
+                    parseInitializer(,)
+                      listener: beginInitializer(assert)
+                      parseAssert(,, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(-)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(-)
+                                    listener: handleSend(x, -)
+                            listener: beginBinaryExpression(-)
+                            parsePrecedenceExpression(-, 14, true)
+                              parseUnaryExpression(-, true)
+                                parsePrimary(-, expression)
+                                  parseLiteralInt(-)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(-)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ;)
+                      listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, D, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(E, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, E)
+        parseClass(E, class, class, E)
+          parseClassHeaderOpt(E, class, class)
+            parseClassExtendsOpt(E)
+              parseClassExtendsSeenExtendsClause(extends, E)
+                listener: handleIdentifier(A, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(A, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(A)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(A)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(A, DeclarationKind.Class, E)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, final)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, E)
+              parseMetadataStar({)
+                listener: beginMetadataStar(final)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields({, null, null, null, null, null, null, final, final, Instance of 'SimpleType', y, DeclarationKind.Class, E, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, final, {)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(y, fieldDeclaration)
+                parseFieldInitializerOpt(y, y, null, null, null, null, final, DeclarationKind.Class, E)
+                  listener: handleNoFieldInitializer(;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+              listener: endMember()
+            notEofOrValue(}, E)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, E)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(E)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, E, DeclarationKind.Class, E, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, E)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, 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)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(>)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(>)
+                                    listener: handleSend(x, >)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true)
+                              parseUnaryExpression(>, true)
+                                parsePrimary(>, expression)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(0)
+                            listener: endBinaryExpression(>)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ,)
+                      listener: endInitializer(,)
+                    parseInitializer(,)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(,)
+                        parseExpression(,)
+                          parsePrecedenceExpression(,, 1, true)
+                            parseUnaryExpression(,, true)
+                              parsePrimary(,, expression)
+                                parseThisExpression(,, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation)
+                              parseSendOrFunctionLiteral(., expressionContinuation)
+                                parseSend(., expressionContinuation)
+                                  isNextIdentifier(.)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(y, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(y)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(y, =)
+                            listener: handleEndingBinaryExpression(.)
+                            parsePrecedenceExpression(=, 1, true)
+                              parseUnaryExpression(=, true)
+                                parsePrimary(=, expression)
+                                  parseSendOrFunctionLiteral(=, expression)
+                                    parseSend(=, expression)
+                                      isNextIdentifier(=)
+                                      ensureIdentifier(=, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(*)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(*)
+                                      listener: handleSend(x, *)
+                              listener: beginBinaryExpression(*)
+                              parsePrecedenceExpression(*, 15, true)
+                                parseUnaryExpression(*, true)
+                                  parsePrimary(*, expression)
+                                    parseLiteralInt(*)
+                                      listener: handleLiteralInt(2)
+                              listener: endBinaryExpression(*)
+                            listener: handleAssignmentExpression(=)
+                        listener: endInitializer(;)
+                    listener: endInitializers(2, :, ;)
+                parseAsyncModifierOpt(2)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(2, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, E, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(7, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.parser.expect
new file mode 100644
index 0000000..a88951b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.parser.expect
@@ -0,0 +1,65 @@
+class A {
+A(int x);
+A.y(int x);
+}
+
+class B extends A {
+B(int x) : assert(x > 0), super(x);
+}
+
+class B2 extends A {
+B2(int x) : assert(x > 0), super.y(x);
+}
+
+class B3 extends A {
+B3(int x) : assert(x > 0), this.y(x);
+B3.y(int x);
+}
+
+class C extends A {
+int y;
+C(int x) : assert(x > 0), y = 2*21;
+}
+
+class D extends A {
+D(int x) : assert(x > 0), assert(x - 1 > 0);
+}
+
+class E extends A {
+final int y;
+E(int x) : assert(x > 0), this.y = x*2;
+}
+
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+A[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+A[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] super[KeywordToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B2[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] super[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B3[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] this[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+B3[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+int[StringToken] y[StringToken];[SimpleToken]
+C[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] y[StringToken] =[SimpleToken] 2[StringToken]*[SimpleToken]21[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] D[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+D[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] -[SimpleToken] 1[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] E[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+final[KeywordToken] int[StringToken] y[StringToken];[SimpleToken]
+E[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] this[KeywordToken].[SimpleToken]y[StringToken] =[SimpleToken] x[StringToken]*[SimpleToken]2[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.scanner.expect
new file mode 100644
index 0000000..a88951b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.scanner.expect
@@ -0,0 +1,65 @@
+class A {
+A(int x);
+A.y(int x);
+}
+
+class B extends A {
+B(int x) : assert(x > 0), super(x);
+}
+
+class B2 extends A {
+B2(int x) : assert(x > 0), super.y(x);
+}
+
+class B3 extends A {
+B3(int x) : assert(x > 0), this.y(x);
+B3.y(int x);
+}
+
+class C extends A {
+int y;
+C(int x) : assert(x > 0), y = 2*21;
+}
+
+class D extends A {
+D(int x) : assert(x > 0), assert(x - 1 > 0);
+}
+
+class E extends A {
+final int y;
+E(int x) : assert(x > 0), this.y = x*2;
+}
+
+
+class[KeywordToken] A[StringToken] {[BeginToken]
+A[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+A[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] super[KeywordToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B2[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] super[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] B3[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+B3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] this[KeywordToken].[SimpleToken]y[StringToken]([BeginToken]x[StringToken])[SimpleToken];[SimpleToken]
+B3[StringToken].[SimpleToken]y[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+int[StringToken] y[StringToken];[SimpleToken]
+C[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] y[StringToken] =[SimpleToken] 2[StringToken]*[SimpleToken]21[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] D[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+D[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] -[SimpleToken] 1[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] E[StringToken] extends[KeywordToken] A[StringToken] {[BeginToken]
+final[KeywordToken] int[StringToken] y[StringToken];[SimpleToken]
+E[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]x[StringToken] >[SimpleToken] 0[StringToken])[SimpleToken],[SimpleToken] this[KeywordToken].[SimpleToken]y[StringToken] =[SimpleToken] x[StringToken]*[SimpleToken]2[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart
new file mode 100644
index 0000000..586fb09
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart
@@ -0,0 +1,17 @@
+// From https://dart-review.googlesource.com/c/sdk/+/113126
+
+class C {
+  C() : assert = 0;
+}
+
+class C {
+  C() : null = 0;
+}
+
+class C {
+  C() : super = 0;
+}
+
+class C {
+  C() : this = 0;
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.expect
new file mode 100644
index 0000000..2a7d64a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.expect
@@ -0,0 +1,293 @@
+Problems reported:
+
+parser/error_recovery/issue_48411_prime_1:4:16: Expected '(' before this.
+  C() : assert = 0;
+               ^
+
+parser/error_recovery/issue_48411_prime_1:4:16: Only factory constructor can specify '=' redirection.
+  C() : assert = 0;
+               ^
+
+parser/error_recovery/issue_48411_prime_1:4:18: Expected an identifier, but got '0'.
+  C() : assert = 0;
+                 ^
+
+parser/error_recovery/issue_48411_prime_1:4:16: Expected ';' after this.
+  C() : assert = 0;
+               ^
+
+parser/error_recovery/issue_48411_prime_1:4:18: Expected a class member, but got '0'.
+  C() : assert = 0;
+                 ^
+
+parser/error_recovery/issue_48411_prime_1:4:19: Expected a class member, but got ';'.
+  C() : assert = 0;
+                  ^
+
+parser/error_recovery/issue_48411_prime_1:8:7: Expected an initializer.
+  C() : null = 0;
+      ^
+
+parser/error_recovery/issue_48411_prime_1:8:9: Expected a function body, but got 'null'.
+  C() : null = 0;
+        ^^^^
+
+parser/error_recovery/issue_48411_prime_1:8:9: Expected a class member, but got 'null'.
+  C() : null = 0;
+        ^^^^
+
+parser/error_recovery/issue_48411_prime_1:8:14: Operator declarations must be preceded by the keyword 'operator'.
+  C() : null = 0;
+             ^
+
+parser/error_recovery/issue_48411_prime_1:8:14: The string '=' isn't a user-definable operator.
+  C() : null = 0;
+             ^
+
+parser/error_recovery/issue_48411_prime_1:8:14: A method declaration needs an explicit list of parameters.
+  C() : null = 0;
+             ^
+
+parser/error_recovery/issue_48411_prime_1:8:16: Expected a function body, but got '0'.
+  C() : null = 0;
+               ^
+
+parser/error_recovery/issue_48411_prime_1:8:16: Expected a class member, but got '0'.
+  C() : null = 0;
+               ^
+
+parser/error_recovery/issue_48411_prime_1:8:17: Expected a class member, but got ';'.
+  C() : null = 0;
+                ^
+
+parser/error_recovery/issue_48411_prime_1:16:14: Expected '.' before this.
+  C() : this = 0;
+             ^
+
+parser/error_recovery/issue_48411_prime_1:16:9: Expected an assignment after the field name.
+  C() : this = 0;
+        ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleRecoverableError(Message[ExpectedButGot, Expected '(' before this., null, {string: (}], =, =)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments())
+                  handleNoArguments())
+                  handleSend(, ))
+                endAssert(assert, Assert.Initializer, (, null, =)
+              endInitializer(=)
+            endInitializers(1, :, =)
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(0)
+              endConstructorReference(, null, 0, ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(null)
+                handleRecoverableError(ExpectedAnInitializer, :, :)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, =)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(null)
+                handleNoArguments(null)
+                handleSend(, null)
+                handleAssignmentExpression(=)
+              endInitializer(null)
+            endInitializers(1, :, null)
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'null'., null, {lexeme: null}], null, null)
+            handleInvalidFunctionBody({)
+          endClassConstructor(null, C, (, :, })
+        endMember()
+        beginMetadataStar(null)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'null'., null, {lexeme: null}], null, null)
+          handleInvalidMember(null)
+        endMember()
+        beginMetadataStar(=)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(MissingOperatorKeyword, =, =)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
+            handleNoType(null)
+            handleRecoverableError(Message[InvalidOperator, The string '=' isn't a user-definable operator., null, {lexeme: =}], =, =)
+            handleInvalidOperatorName(operator, =)
+            handleNoTypeVariables(0)
+            handleRecoverableError(MissingMethodParameters, =, =)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '0'., null, {lexeme: 0}], 0, 0)
+            handleInvalidFunctionBody({)
+          endClassMethod(null, operator, (, null, })
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(super)
+                handleSuperExpression(super, expression)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(1, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, C)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[ExpectedButGot, Expected '.' before this., null, {string: .}], =, =)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, =)
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, =)
+                handleEndingBinaryExpression(.)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=)
+                handleAssignmentExpression(=)
+              endInitializer(;)
+            endInitializers(1, :, ;)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endClassConstructor(null, C, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration()
+endCompilationUnit(4, )
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
new file mode 100644
index 0000000..0c60901
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
@@ -0,0 +1,490 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(C, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(C, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        reportRecoverableError(=, Message[ExpectedButGot, Expected '(' before this., null, {string: (}])
+                          listener: handleRecoverableError(Message[ExpectedButGot, Expected '(' before this., null, {string: (}], =, =)
+                        rewriter()
+                        parseExpression(()
+                          parsePrecedenceExpression((, 1, true)
+                            parseUnaryExpression((, true)
+                              parsePrimary((, expression)
+                                parseSendOrFunctionLiteral((, expression)
+                                  parseSend((, expression)
+                                    isNextIdentifier(()
+                                    ensureIdentifier((, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments())
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments())
+                                    listener: handleSend(, ))
+                        listener: endAssert(assert, Assert.Initializer, (, null, =)
+                      listener: endInitializer(=)
+                    listener: endInitializers(1, :, =)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null, false)
+                    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}])
+                          listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+                        rewriter()
+                      listener: handleIdentifier(, constructorReference)
+                    listener: beginConstructorReference()
+                    parseQualifiedRestOpt(, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(0)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(0)
+                    listener: endConstructorReference(, null, 0, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endClassConstructor(null, C, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrValue(}, ;)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(0, DeclarationKind.Class, C)
+              parseMetadataStar(0)
+                listener: beginMetadataStar(;)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(0, 0, null, null, null, null, null, null, null, 0, Instance of 'NoType', null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(C, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(C, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(null)
+                      insertSyntheticIdentifier(:, fieldInitializer, message: ExpectedAnInitializer, messageOnToken: :)
+                        reportRecoverableError(:, ExpectedAnInitializer)
+                          listener: handleRecoverableError(ExpectedAnInitializer, :, :)
+                        rewriter()
+                      rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          parsePrecedenceExpression(:, 1, true)
+                            parseUnaryExpression(:, true)
+                              parsePrimary(:, expression)
+                                parseSendOrFunctionLiteral(:, expression)
+                                  parseSend(:, expression)
+                                    isNextIdentifier(:)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, =)
+                            parsePrecedenceExpression(=, 1, true)
+                              parseUnaryExpression(=, true)
+                                parsePrimary(=, expression)
+                                  parseSendOrFunctionLiteral(=, expression)
+                                    parseSend(=, expression)
+                                      isNextIdentifier(=)
+                                      ensureIdentifier(=, expression)
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(null)
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments(null)
+                                      listener: handleSend(, null)
+                            listener: handleAssignmentExpression(=)
+                        listener: endInitializer(null)
+                    listener: endInitializers(1, :, null)
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, Instance of 'Template<(Token) => Message>', null)
+                    reportRecoverableError(null, Message[ExpectedFunctionBody, Expected a function body, but got 'null'., null, {lexeme: null}])
+                      listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got 'null'., null, {lexeme: null}], null, null)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endClassConstructor(null, C, (, :, })
+              listener: endMember()
+            notEofOrValue(}, null)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(null)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'null'., null, {lexeme: null}], null, null)
+                listener: handleInvalidMember(null)
+                listener: endMember()
+            notEofOrValue(}, =)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(null, DeclarationKind.Class, C)
+              parseMetadataStar(null)
+                listener: beginMetadataStar(=)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(null, null, null, null, null, null, null, null, null, null, Instance of 'NoType', null, DeclarationKind.Class, C)
+                parseInvalidOperatorDeclaration(null, null, null, null, null, null, null, null, null, DeclarationKind.Class, C)
+                  reportRecoverableError(=, MissingOperatorKeyword)
+                    listener: handleRecoverableError(MissingOperatorKeyword, =, =)
+                  rewriter()
+                  parseMethod(null, null, null, null, null, null, null, null, null, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
+                    listener: handleNoType(null)
+                    parseOperatorName(null)
+                      isUnaryMinus(=)
+                      reportRecoverableErrorWithToken(=, Instance of 'Template<(Token) => Message>')
+                        listener: handleRecoverableError(Message[InvalidOperator, The string '=' isn't a user-definable operator., null, {lexeme: =}], =, =)
+                      listener: handleInvalidOperatorName(operator, =)
+                    parseMethodTypeVar(=)
+                      listener: handleNoTypeVariables(0)
+                    parseGetterOrFormalParameters(=, operator, false, MemberKind.NonStaticMethod)
+                      missingParameterMessage(MemberKind.NonStaticMethod)
+                      reportRecoverableError(=, MissingMethodParameters)
+                        listener: handleRecoverableError(MissingMethodParameters, =, =)
+                      rewriter()
+                      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)
+                      ensureBlock(), Instance of 'Template<(Token) => Message>', null)
+                        reportRecoverableError(0, Message[ExpectedFunctionBody, Expected a function body, but got '0'., null, {lexeme: 0}])
+                          listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '0'., null, {lexeme: 0}], 0, 0)
+                        insertBlock())
+                          rewriter()
+                          rewriter()
+                      listener: handleInvalidFunctionBody({)
+                    listener: endClassMethod(null, operator, (, null, })
+                  listener: endMember()
+            notEofOrValue(}, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrValue(}, ;)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(0, DeclarationKind.Class, C)
+              parseMetadataStar(0)
+                listener: beginMetadataStar(;)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(0, 0, null, null, null, null, null, null, null, 0, Instance of 'NoType', null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
+                  listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(C, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(C, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(super)
+                      parseSuperInitializerExpression(:)
+                        parseInitializerExpressionRest(:)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true)
+                              parseUnaryExpression(:, true)
+                                parsePrimary(:, expression)
+                                  parseSuperExpression(:, expression)
+                                    listener: handleSuperExpression(super, expression)
+                              parsePrecedenceExpression(=, 1, true)
+                                parseUnaryExpression(=, true)
+                                  parsePrimary(=, expression)
+                                    parseLiteralInt(=)
+                                      listener: handleLiteralInt(0)
+                              listener: handleAssignmentExpression(=)
+                          listener: endInitializer(;)
+                    listener: endInitializers(1, :, ;)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, C, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, C)
+        parseClass(C, class, class, C)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(C, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(C, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      reportRecoverableError(=, Message[ExpectedButGot, Expected '.' before this., null, {string: .}])
+                        listener: handleRecoverableError(Message[ExpectedButGot, Expected '.' before this., null, {string: .}], =, =)
+                      rewriter()
+                      rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          parsePrecedenceExpression(:, 1, true)
+                            parseUnaryExpression(:, true)
+                              parsePrimary(:, expression)
+                                parseSendOrFunctionLiteral(:, expression)
+                                  parseSend(:, expression)
+                                    isNextIdentifier(:)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, =)
+                            parsePrecedenceExpression(=, 1, true)
+                              parseUnaryExpression(=, true)
+                                parsePrimary(=, expression)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation)
+                                parseSendOrFunctionLiteral(., expressionContinuation)
+                                  parseSend(., expressionContinuation)
+                                    isNextIdentifier(.)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, =)
+                              listener: handleEndingBinaryExpression(.)
+                              parsePrecedenceExpression(=, 1, true)
+                                parseUnaryExpression(=, true)
+                                  parsePrimary(=, expression)
+                                    parseLiteralInt(=)
+                                      listener: handleLiteralInt(0)
+                              listener: handleAssignmentExpression(=)
+                            listener: handleAssignmentExpression(=)
+                        listener: endInitializer(;)
+                    listener: endInitializers(1, :, ;)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endClassConstructor(null, C, (, :, ;)
+              listener: endMember()
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.parser.expect
new file mode 100644
index 0000000..240f58bc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.parser.expect
@@ -0,0 +1,35 @@
+NOTICE: Stream was rewritten by parser!
+
+class C {
+C() : assert (*synthetic*)= *synthetic*;0;
+}
+
+class C {
+C() : *synthetic*=*synthetic*{}null operator= (){}0;
+}
+
+class C {
+C() : super = 0;
+}
+
+class C {
+C() : *synthetic*=this .*synthetic*= 0;
+}
+
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] assert[KeywordToken] ([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]null[KeywordToken] operator[SyntheticKeywordToken]=[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]0[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] super[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken] .[SyntheticToken][SyntheticStringToken]=[SimpleToken] 0[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.scanner.expect
new file mode 100644
index 0000000..1550ac2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.scanner.expect
@@ -0,0 +1,33 @@
+class C {
+C() : assert = 0;
+}
+
+class C {
+C() : null = 0;
+}
+
+class C {
+C() : super = 0;
+}
+
+class C {
+C() : this = 0;
+}
+
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] assert[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] null[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] super[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+C[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
index 673d794..99e1e95 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.expect
@@ -138,7 +138,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -148,7 +148,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -156,12 +156,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -169,12 +169,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(assert)
             handleType(int, null)
@@ -183,12 +183,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(async)
             handleType(int, null)
@@ -196,12 +196,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(await)
             handleType(int, null)
@@ -209,12 +209,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(break)
             handleType(int, null)
@@ -223,12 +223,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(case)
             handleType(int, null)
@@ -237,12 +237,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(catch)
             handleType(int, null)
@@ -251,12 +251,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(class)
             handleType(int, null)
@@ -265,12 +265,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(const)
             handleType(int, null)
@@ -279,12 +279,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(continue)
             handleType(int, null)
@@ -293,12 +293,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -306,12 +306,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(default)
             handleType(int, null)
@@ -320,12 +320,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -333,12 +333,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(do)
             handleType(int, null)
@@ -347,12 +347,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -360,12 +360,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(else)
             handleType(int, null)
@@ -374,12 +374,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(enum)
             handleType(int, null)
@@ -388,12 +388,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -401,12 +401,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extends)
             handleType(int, null)
@@ -415,12 +415,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extension)
             handleType(int, null)
@@ -428,12 +428,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -441,12 +441,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -454,12 +454,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(false)
             handleType(int, null)
@@ -468,12 +468,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(final)
             handleType(int, null)
@@ -482,12 +482,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(finally)
             handleType(int, null)
@@ -496,12 +496,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(for)
             handleType(int, null)
@@ -510,12 +510,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -523,12 +523,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -536,12 +536,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(hide)
             handleType(int, null)
@@ -549,12 +549,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(if)
             handleType(int, null)
@@ -563,12 +563,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -576,12 +576,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -589,12 +589,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(in)
             handleType(int, null)
@@ -603,12 +603,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(inout)
             handleType(int, null)
@@ -616,12 +616,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -629,12 +629,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(is)
             handleType(int, null)
@@ -643,12 +643,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -656,12 +656,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -669,12 +669,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -682,12 +682,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(native)
             handleType(int, null)
@@ -695,12 +695,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(new)
             handleType(int, null)
@@ -709,12 +709,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(null)
             handleType(int, null)
@@ -723,12 +723,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(of)
             handleType(int, null)
@@ -736,12 +736,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(on)
             handleType(int, null)
@@ -749,12 +749,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -762,12 +762,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(out)
             handleType(int, null)
@@ -775,12 +775,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -788,12 +788,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(patch)
             handleType(int, null)
@@ -801,12 +801,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -814,12 +814,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(rethrow)
             handleType(int, null)
@@ -828,12 +828,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(return)
             handleType(int, null)
@@ -842,12 +842,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -855,12 +855,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(show)
             handleType(int, null)
@@ -868,12 +868,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(source)
             handleType(int, null)
@@ -881,12 +881,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -894,12 +894,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(super)
             handleType(int, null)
@@ -908,12 +908,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(switch)
             handleType(int, null)
@@ -922,12 +922,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(sync)
             handleType(int, null)
@@ -935,12 +935,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(this)
             handleType(int, null)
@@ -949,12 +949,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(throw)
             handleType(int, null)
@@ -963,12 +963,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(true)
             handleType(int, null)
@@ -977,12 +977,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(try)
             handleType(int, null)
@@ -991,12 +991,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -1004,12 +1004,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(var)
             handleType(int, null)
@@ -1018,12 +1018,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(void)
             handleType(int, null)
@@ -1032,12 +1032,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(while)
             handleType(int, null)
@@ -1046,12 +1046,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -1060,12 +1060,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(yield)
             handleType(int, null)
@@ -1073,7 +1073,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 69, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
index c6060ad..20ad844 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_fields.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
@@ -32,14 +31,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(abstract, fieldDeclaration)
-                parseFieldInitializerOpt(abstract, abstract, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -48,7 +47,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -56,14 +55,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(as, fieldDeclaration)
-                parseFieldInitializerOpt(as, as, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -72,7 +71,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -82,8 +81,8 @@
               listener: beginMember()
               isReservedKeyword(assert)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(assert)
                 listener: handleType(int, null)
@@ -91,7 +90,7 @@
                   reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(assert, assert, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(assert, assert, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -100,7 +99,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -108,14 +107,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(async)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(async, fieldDeclaration)
-                parseFieldInitializerOpt(async, async, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(async, async, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -124,7 +123,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -132,14 +131,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(await)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(await, fieldDeclaration)
-                parseFieldInitializerOpt(await, await, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(await, await, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -148,7 +147,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -158,8 +157,8 @@
               listener: beginMember()
               isReservedKeyword(break)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(break)
                 listener: handleType(int, null)
@@ -167,7 +166,7 @@
                   reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(break, break, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(break, break, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -176,7 +175,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -186,8 +185,8 @@
               listener: beginMember()
               isReservedKeyword(case)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(case)
                 listener: handleType(int, null)
@@ -195,7 +194,7 @@
                   reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(case, case, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(case, case, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -204,7 +203,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -214,8 +213,8 @@
               listener: beginMember()
               isReservedKeyword(catch)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(catch)
                 listener: handleType(int, null)
@@ -223,7 +222,7 @@
                   reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(catch, catch, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(catch, catch, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -232,7 +231,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -242,8 +241,8 @@
               listener: beginMember()
               isReservedKeyword(class)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(class)
                 listener: handleType(int, null)
@@ -251,7 +250,7 @@
                   reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(class, class, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(class, class, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -260,7 +259,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -270,8 +269,8 @@
               listener: beginMember()
               isReservedKeyword(const)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(const)
                 listener: handleType(int, null)
@@ -279,7 +278,7 @@
                   reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(const, const, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(const, const, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -288,7 +287,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -298,8 +297,8 @@
               listener: beginMember()
               isReservedKeyword(continue)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(continue)
                 listener: handleType(int, null)
@@ -307,7 +306,7 @@
                   reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(continue, continue, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(continue, continue, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -316,7 +315,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -324,14 +323,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(covariant, fieldDeclaration)
-                parseFieldInitializerOpt(covariant, covariant, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -340,7 +339,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -350,8 +349,8 @@
               listener: beginMember()
               isReservedKeyword(default)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(default)
                 listener: handleType(int, null)
@@ -359,7 +358,7 @@
                   reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(default, default, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(default, default, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -368,7 +367,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -376,14 +375,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(deferred, fieldDeclaration)
-                parseFieldInitializerOpt(deferred, deferred, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -392,7 +391,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -402,8 +401,8 @@
               listener: beginMember()
               isReservedKeyword(do)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(do)
                 listener: handleType(int, null)
@@ -411,7 +410,7 @@
                   reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(do, do, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(do, do, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -420,7 +419,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -428,14 +427,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(dynamic, fieldDeclaration)
-                parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -444,7 +443,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -454,8 +453,8 @@
               listener: beginMember()
               isReservedKeyword(else)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(else)
                 listener: handleType(int, null)
@@ -463,7 +462,7 @@
                   reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(else, else, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(else, else, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -472,7 +471,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -482,8 +481,8 @@
               listener: beginMember()
               isReservedKeyword(enum)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(enum)
                 listener: handleType(int, null)
@@ -491,7 +490,7 @@
                   reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(enum, enum, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(enum, enum, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -500,7 +499,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -508,14 +507,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(export, fieldDeclaration)
-                parseFieldInitializerOpt(export, export, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -524,7 +523,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -534,8 +533,8 @@
               listener: beginMember()
               isReservedKeyword(extends)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extends)
                 listener: handleType(int, null)
@@ -543,7 +542,7 @@
                   reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(extends, extends, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(extends, extends, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -552,7 +551,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -560,14 +559,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extension)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(extension, fieldDeclaration)
-                parseFieldInitializerOpt(extension, extension, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(extension, extension, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -576,7 +575,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -584,14 +583,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(external, fieldDeclaration)
-                parseFieldInitializerOpt(external, external, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -600,7 +599,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -608,14 +607,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(factory, fieldDeclaration)
-                parseFieldInitializerOpt(factory, factory, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -624,7 +623,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -634,8 +633,8 @@
               listener: beginMember()
               isReservedKeyword(false)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(false)
                 listener: handleType(int, null)
@@ -643,7 +642,7 @@
                   reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(false, false, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(false, false, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -652,7 +651,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -662,8 +661,8 @@
               listener: beginMember()
               isReservedKeyword(final)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(final)
                 listener: handleType(int, null)
@@ -671,7 +670,7 @@
                   reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(final, final, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(final, final, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -680,7 +679,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -690,8 +689,8 @@
               listener: beginMember()
               isReservedKeyword(finally)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(finally)
                 listener: handleType(int, null)
@@ -699,7 +698,7 @@
                   reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(finally, finally, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(finally, finally, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -708,7 +707,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -718,8 +717,8 @@
               listener: beginMember()
               isReservedKeyword(for)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(for)
                 listener: handleType(int, null)
@@ -727,7 +726,7 @@
                   reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(for, for, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(for, for, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -736,7 +735,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -744,14 +743,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(Function, fieldDeclaration)
-                parseFieldInitializerOpt(Function, Function, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -760,7 +759,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -769,14 +768,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(get, fieldDeclaration)
-                parseFieldInitializerOpt(get, get, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -785,7 +784,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -793,14 +792,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(hide)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(hide, fieldDeclaration)
-                parseFieldInitializerOpt(hide, hide, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(hide, hide, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -809,7 +808,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -819,8 +818,8 @@
               listener: beginMember()
               isReservedKeyword(if)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(if)
                 listener: handleType(int, null)
@@ -828,7 +827,7 @@
                   reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(if, if, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(if, if, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -837,7 +836,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -845,14 +844,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(implements, fieldDeclaration)
-                parseFieldInitializerOpt(implements, implements, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -861,7 +860,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -869,14 +868,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(import, fieldDeclaration)
-                parseFieldInitializerOpt(import, import, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -885,7 +884,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -895,8 +894,8 @@
               listener: beginMember()
               isReservedKeyword(in)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(in)
                 listener: handleType(int, null)
@@ -904,7 +903,7 @@
                   reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(in, in, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(in, in, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -913,7 +912,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -921,14 +920,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(inout)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(inout, fieldDeclaration)
-                parseFieldInitializerOpt(inout, inout, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(inout, inout, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -937,7 +936,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -945,14 +944,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(interface, fieldDeclaration)
-                parseFieldInitializerOpt(interface, interface, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -961,7 +960,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -971,8 +970,8 @@
               listener: beginMember()
               isReservedKeyword(is)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(is)
                 listener: handleType(int, null)
@@ -980,7 +979,7 @@
                   reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(is, is, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(is, is, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -989,7 +988,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -997,14 +996,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(late, fieldDeclaration)
-                parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1013,7 +1012,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1021,14 +1020,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(library, fieldDeclaration)
-                parseFieldInitializerOpt(library, library, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1037,7 +1036,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1045,14 +1044,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(mixin, fieldDeclaration)
-                parseFieldInitializerOpt(mixin, mixin, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1061,7 +1060,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1069,14 +1068,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(native)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(native, fieldDeclaration)
-                parseFieldInitializerOpt(native, native, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(native, native, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1085,7 +1084,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1095,8 +1094,8 @@
               listener: beginMember()
               isReservedKeyword(new)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(new)
                 listener: handleType(int, null)
@@ -1104,7 +1103,7 @@
                   reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(new, new, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(new, new, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1113,7 +1112,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1123,8 +1122,8 @@
               listener: beginMember()
               isReservedKeyword(null)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(null)
                 listener: handleType(int, null)
@@ -1132,7 +1131,7 @@
                   reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(null, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(null, null, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1141,7 +1140,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1149,14 +1148,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(of)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(of, fieldDeclaration)
-                parseFieldInitializerOpt(of, of, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(of, of, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1165,7 +1164,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1173,14 +1172,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(on)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(on, fieldDeclaration)
-                parseFieldInitializerOpt(on, on, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(on, on, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1189,7 +1188,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1198,14 +1197,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isUnaryMinus(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(operator, fieldDeclaration)
-                parseFieldInitializerOpt(operator, operator, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1214,7 +1213,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1222,14 +1221,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(out)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(out, fieldDeclaration)
-                parseFieldInitializerOpt(out, out, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(out, out, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1238,7 +1237,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1246,14 +1245,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(part, fieldDeclaration)
-                parseFieldInitializerOpt(part, part, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1262,7 +1261,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1270,14 +1269,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(patch)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(patch, fieldDeclaration)
-                parseFieldInitializerOpt(patch, patch, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(patch, patch, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1286,7 +1285,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1294,14 +1293,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(required, fieldDeclaration)
-                parseFieldInitializerOpt(required, required, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1310,7 +1309,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1320,8 +1319,8 @@
               listener: beginMember()
               isReservedKeyword(rethrow)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(rethrow)
                 listener: handleType(int, null)
@@ -1329,7 +1328,7 @@
                   reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(rethrow, rethrow, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(rethrow, rethrow, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1338,7 +1337,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1348,8 +1347,8 @@
               listener: beginMember()
               isReservedKeyword(return)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(return)
                 listener: handleType(int, null)
@@ -1357,7 +1356,7 @@
                   reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(return, return, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(return, return, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1366,7 +1365,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1375,14 +1374,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(set, fieldDeclaration)
-                parseFieldInitializerOpt(set, set, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1391,7 +1390,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1399,14 +1398,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(show)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(show, fieldDeclaration)
-                parseFieldInitializerOpt(show, show, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(show, show, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1415,7 +1414,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1423,14 +1422,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(source)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(source, fieldDeclaration)
-                parseFieldInitializerOpt(source, source, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(source, source, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1439,7 +1438,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1447,14 +1446,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(static, fieldDeclaration)
-                parseFieldInitializerOpt(static, static, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1463,7 +1462,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1471,97 +1470,17 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              isReservedKeyword(super)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(super)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-                    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, fieldDeclaration)
-                parseFieldInitializerOpt(super, super, null, null, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(switch)
-              indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(switch)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
-                  reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
-                    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, fieldDeclaration)
-                parseFieldInitializerOpt(switch, switch, null, null, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(sync)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
-                  listener: handleIdentifier(sync, fieldDeclaration)
-                parseFieldInitializerOpt(sync, sync, null, null, null, null, DeclarationKind.Class, WrapperClass)
-                  listener: beginFieldInitializer(=)
-                  parseExpression(=)
-                    parsePrecedenceExpression(=, 1, true)
-                      parseUnaryExpression(=, true)
-                        parsePrimary(=, expression)
-                          parseLiteralInt(=)
-                            listener: handleLiteralInt(42)
-                  listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
-              listener: endMember()
-            notEofOrValue(}, int)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(int)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
-                parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                   listener: handleIdentifier(int, typeReference)
-                  listener: handleNoTypeArguments(this)
+                  listener: handleNoTypeArguments(super)
                   listener: handleType(int, null)
                   ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
-                    reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
-                      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, fieldDeclaration)
-                  parseFieldInitializerOpt(this, this, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                    reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                      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, fieldDeclaration)
+                  parseFieldInitializerOpt(super, super, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                     listener: beginFieldInitializer(=)
                     parseExpression(=)
                       parsePrecedenceExpression(=, 1, true)
@@ -1570,7 +1489,86 @@
                             parseLiteralInt(=)
                               listener: handleLiteralInt(42)
                     listener: endFieldInitializer(=, ;)
-                  listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(switch)
+              indicatesMethodOrField(=)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(switch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, true)
+                  reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+                    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, fieldDeclaration)
+                parseFieldInitializerOpt(switch, switch, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(sync)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                  listener: handleIdentifier(sync, fieldDeclaration)
+                parseFieldInitializerOpt(sync, sync, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                  listener: beginFieldInitializer(=)
+                  parseExpression(=)
+                    parsePrecedenceExpression(=, 1, true)
+                      parseUnaryExpression(=, true)
+                        parsePrimary(=, expression)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+              listener: endMember()
+            notEofOrValue(}, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(this)
+                  listener: handleType(int, null)
+                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                    reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+                      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, fieldDeclaration)
+                  parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                    listener: beginFieldInitializer(=)
+                    parseExpression(=)
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseLiteralInt(=)
+                              listener: handleLiteralInt(42)
+                    listener: endFieldInitializer(=, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
                 listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1580,8 +1578,8 @@
               listener: beginMember()
               isReservedKeyword(throw)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(throw)
                 listener: handleType(int, null)
@@ -1589,7 +1587,7 @@
                   reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(throw, throw, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(throw, throw, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1598,7 +1596,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1608,8 +1606,8 @@
               listener: beginMember()
               isReservedKeyword(true)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(true)
                 listener: handleType(int, null)
@@ -1617,7 +1615,7 @@
                   reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(true, true, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(true, true, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1626,7 +1624,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1636,8 +1634,8 @@
               listener: beginMember()
               isReservedKeyword(try)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(try)
                 listener: handleType(int, null)
@@ -1645,7 +1643,7 @@
                   reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(try, try, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(try, try, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1654,7 +1652,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1662,14 +1660,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(typedef, fieldDeclaration)
-                parseFieldInitializerOpt(typedef, typedef, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1678,7 +1676,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1688,8 +1686,8 @@
               listener: beginMember()
               isReservedKeyword(var)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(var)
                 listener: handleType(int, null)
@@ -1697,7 +1695,7 @@
                   reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(var, var, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(var, var, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1706,7 +1704,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1716,8 +1714,8 @@
               listener: beginMember()
               isReservedKeyword(void)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(void)
                 listener: handleType(int, null)
@@ -1725,7 +1723,7 @@
                   reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(void, void, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(void, void, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1734,7 +1732,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1744,8 +1742,8 @@
               listener: beginMember()
               isReservedKeyword(while)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(while)
                 listener: handleType(int, null)
@@ -1753,7 +1751,7 @@
                   reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(while, while, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(while, while, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1762,7 +1760,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1772,8 +1770,8 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, WrapperClass, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, WrapperClass, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -1781,7 +1779,7 @@
                   reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(with, with, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1790,7 +1788,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1798,14 +1796,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(yield)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(yield, fieldDeclaration)
-                parseFieldInitializerOpt(yield, yield, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(yield, yield, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -1814,7 +1812,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 69, {, })
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 a281a5c..6eb5e42 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
@@ -112,9 +112,9 @@
   }
   ^
 
-parser/error_recovery/keyword_named_class_methods:75:3: Expected ';' after this.
-  }
-  ^
+parser/error_recovery/keyword_named_class_methods:74:23: Expected ';' after this.
+    return do(x-1) + 1;
+                      ^
 
 parser/error_recovery/keyword_named_class_methods:82:7: 'else' can't be used as an identifier because it's a keyword.
   int else(int x) {
@@ -308,6 +308,14 @@
   int super(int x) {
       ^^^^^
 
+parser/error_recovery/keyword_named_class_methods:282:7: Expected ';' after this.
+  int super(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods:282:12: Expected an identifier, but got '('.
+  int super(int x) {
+           ^
+
 parser/error_recovery/keyword_named_class_methods:287:7: 'switch' can't be used as an identifier because it's a keyword.
   int switch(int x) {
       ^^^^^^
@@ -478,7 +486,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -488,7 +496,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -546,7 +554,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -604,7 +612,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, assert)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, assert)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(assert)
             handleType(int, null)
@@ -661,7 +669,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, async)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, async)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(async)
             handleType(int, null)
@@ -719,7 +727,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, await)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, await)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(await)
             handleType(int, null)
@@ -777,7 +785,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, break)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, break)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(break)
             handleType(int, null)
@@ -842,7 +850,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, case)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, case)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(case)
             handleType(int, null)
@@ -902,7 +910,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, catch)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, catch)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(catch)
             handleType(int, null)
@@ -962,7 +970,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, class)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, class)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(class)
             handleType(int, null)
@@ -1022,7 +1030,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, const)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, const)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(const)
             handleType(int, null)
@@ -1086,7 +1094,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, continue)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, continue)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(continue)
             handleType(int, null)
@@ -1151,7 +1159,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -1209,7 +1217,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, default)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, default)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(default)
             handleType(int, null)
@@ -1269,7 +1277,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -1327,7 +1335,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, do)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, do)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(do)
             handleType(int, null)
@@ -1394,7 +1402,7 @@
                 handleNoArguments())
                 handleSend(, ))
                 handleParenthesizedCondition(()
-                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
               endDoWhileStatement(do, while, ;)
             endBlockFunctionBody(3, {, })
           endClassMethod(null, int, (, null, })
@@ -1402,7 +1410,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -1460,7 +1468,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, else)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, else)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(else)
             handleType(int, null)
@@ -1530,7 +1538,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, enum)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, enum)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(enum)
             handleType(int, null)
@@ -1590,7 +1598,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -1648,7 +1656,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, extends)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extends)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extends)
             handleType(int, null)
@@ -1708,7 +1716,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, extension)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extension)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(extension)
             handleType(int, null)
@@ -1766,7 +1774,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -1824,7 +1832,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -1882,7 +1890,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, false)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, false)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(false)
             handleType(int, null)
@@ -1941,7 +1949,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, final)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, final)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(final)
             handleType(int, null)
@@ -2028,7 +2036,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, finally)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, finally)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(finally)
             handleType(int, null)
@@ -2088,7 +2096,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, for)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, for)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(for)
             handleType(int, null)
@@ -2168,7 +2176,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -2226,7 +2234,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -2284,7 +2292,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, hide)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, hide)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(hide)
             handleType(int, null)
@@ -2342,7 +2350,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, if)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, if)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(if)
             handleType(int, null)
@@ -2413,7 +2421,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -2471,7 +2479,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -2529,7 +2537,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, in)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, in)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(in)
             handleType(int, null)
@@ -2589,7 +2597,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, inout)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, inout)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(inout)
             handleType(int, null)
@@ -2647,7 +2655,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -2705,7 +2713,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, is)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, is)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(is)
             handleType(int, null)
@@ -2774,7 +2782,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -2832,7 +2840,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -2890,7 +2898,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -2948,7 +2956,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, native)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, native)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(native)
             handleType(int, null)
@@ -3006,7 +3014,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, new)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, new)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(new)
             handleType(int, null)
@@ -3070,7 +3078,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, null)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(null)
             handleType(int, null)
@@ -3129,7 +3137,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, of)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, of)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(of)
             handleType(int, null)
@@ -3187,7 +3195,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, on)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, on)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(on)
             handleType(int, null)
@@ -3245,7 +3253,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -3303,7 +3311,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, out)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, out)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(out)
             handleType(int, null)
@@ -3361,7 +3369,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -3419,7 +3427,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, patch)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, patch)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(patch)
             handleType(int, null)
@@ -3477,7 +3485,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -3535,7 +3543,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, rethrow)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, rethrow)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(rethrow)
             handleType(int, null)
@@ -3595,7 +3603,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, return)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, return)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(return)
             handleType(int, null)
@@ -3651,7 +3659,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -3709,7 +3717,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, show)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, show)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(show)
             handleType(int, null)
@@ -3767,7 +3775,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, source)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, source)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(source)
             handleType(int, null)
@@ -3825,7 +3833,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -3883,12 +3891,23 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, super)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(super)
             handleType(int, null)
             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, methodDeclaration)
+            handleIdentifier(super, fieldDeclaration)
+            handleNoFieldInitializer(()
+            handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(()
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ()
+            handleNoType(;)
+            handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+            handleIdentifier(, methodDeclaration)
             handleNoTypeVariables(()
             beginFormalParameters((, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
@@ -3937,12 +3956,12 @@
                 endBinaryExpression(+)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endClassMethod(null, , (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, switch)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, switch)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(switch)
             handleType(int, null)
@@ -4014,7 +4033,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, sync)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, sync)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(sync)
             handleType(int, null)
@@ -4072,7 +4091,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(this)
             handleType(int, null)
@@ -4080,12 +4099,12 @@
             handleIdentifier(this, fieldDeclaration)
             handleNoFieldInitializer(()
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, ()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ()
             handleNoType(;)
             handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
             handleIdentifier(, methodDeclaration)
@@ -4142,7 +4161,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, throw)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, throw)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(throw)
             handleType(int, null)
@@ -4198,7 +4217,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, true)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, true)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(true)
             handleType(int, null)
@@ -4257,7 +4276,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, try)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, try)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(try)
             handleType(int, null)
@@ -4325,7 +4344,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -4383,7 +4402,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, var)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, var)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(var)
             handleType(int, null)
@@ -4470,7 +4489,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, void)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, void)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(void)
             handleType(int, null)
@@ -4557,7 +4576,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, while)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, while)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(while)
             handleType(int, null)
@@ -4628,7 +4647,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -4688,7 +4707,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, yield)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, yield)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(yield)
             handleType(int, null)
@@ -4743,7 +4762,7 @@
             endBlockFunctionBody(2, {, })
           endClassMethod(null, int, (, null, })
         endMember()
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration()
 endCompilationUnit(1, )
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 75b6cd7..2b9a2c3 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -176,8 +175,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -322,8 +321,8 @@
               listener: beginMember()
               isReservedKeyword(assert)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, assert, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, assert)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, assert, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, assert)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(assert)
                 listener: handleType(int, null)
@@ -459,8 +458,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, async, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, async)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, async, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, async)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(async)
                 listener: handleType(int, null)
@@ -603,8 +602,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, await, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, await)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, await, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, await)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(await)
                 listener: handleType(int, null)
@@ -752,8 +751,8 @@
               listener: beginMember()
               isReservedKeyword(break)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, break, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, break)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, break, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, break)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(break)
                 listener: handleType(int, null)
@@ -931,8 +930,8 @@
               listener: beginMember()
               isReservedKeyword(case)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, case, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, case)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, case, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, case)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(case)
                 listener: handleType(int, null)
@@ -1078,8 +1077,8 @@
               listener: beginMember()
               isReservedKeyword(catch)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, catch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, catch)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, catch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, catch)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(catch)
                 listener: handleType(int, null)
@@ -1225,8 +1224,8 @@
               listener: beginMember()
               isReservedKeyword(class)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, class, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, class)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, class, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(class)
                 listener: handleType(int, null)
@@ -1372,8 +1371,8 @@
               listener: beginMember()
               isReservedKeyword(const)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, const, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, const)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, const, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, const)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(const)
                 listener: handleType(int, null)
@@ -1524,8 +1523,8 @@
               listener: beginMember()
               isReservedKeyword(continue)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, continue, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, continue)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, continue, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, continue)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(continue)
                 listener: handleType(int, null)
@@ -1701,8 +1700,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -1847,8 +1846,8 @@
               listener: beginMember()
               isReservedKeyword(default)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, default, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, default)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, default, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, default)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(default)
                 listener: handleType(int, null)
@@ -1992,8 +1991,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -2138,8 +2137,8 @@
               listener: beginMember()
               isReservedKeyword(do)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, do, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, do)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, do, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, do)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(do)
                 listener: handleType(int, null)
@@ -2325,8 +2324,8 @@
                             ensureCloseParen(, ()
                           listener: handleParenthesizedCondition(()
                         ensureSemicolon())
-                          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                          reportRecoverableError(;, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
                           rewriter()
                         listener: endDoWhileStatement(do, while, ;)
                   notEofOrValue(}, })
@@ -2339,8 +2338,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -2485,8 +2484,8 @@
               listener: beginMember()
               isReservedKeyword(else)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, else, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, else)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, else, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, else)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(else)
                 listener: handleType(int, null)
@@ -2682,8 +2681,8 @@
               listener: beginMember()
               isReservedKeyword(enum)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, enum, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, enum)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, enum, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, enum)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(enum)
                 listener: handleType(int, null)
@@ -2827,8 +2826,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -2973,8 +2972,8 @@
               listener: beginMember()
               isReservedKeyword(extends)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, extends, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, extends)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, extends, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extends)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extends)
                 listener: handleType(int, null)
@@ -3118,8 +3117,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, extension, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, extension)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, extension, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extension)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extension)
                 listener: handleType(int, null)
@@ -3262,8 +3261,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -3406,8 +3405,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -3552,8 +3551,8 @@
               listener: beginMember()
               isReservedKeyword(false)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, false, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, false, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, false)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(false)
                 listener: handleType(int, null)
@@ -3694,8 +3693,8 @@
               listener: beginMember()
               isReservedKeyword(final)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, final, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, final)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, final, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, final)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(final)
                 listener: handleType(int, null)
@@ -3933,8 +3932,8 @@
               listener: beginMember()
               isReservedKeyword(finally)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, finally, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, finally)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, finally, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, finally)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(finally)
                 listener: handleType(int, null)
@@ -4080,8 +4079,8 @@
               listener: beginMember()
               isReservedKeyword(for)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, for, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, for)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, for, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, for)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(for)
                 listener: handleType(int, null)
@@ -4292,8 +4291,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -4437,8 +4436,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -4581,8 +4580,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, hide, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, hide)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, hide, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, hide)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(hide)
                 listener: handleType(int, null)
@@ -4727,8 +4726,8 @@
               listener: beginMember()
               isReservedKeyword(if)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, if, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, if)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, if, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, if)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(if)
                 listener: handleType(int, null)
@@ -4910,8 +4909,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -5054,8 +5053,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -5200,8 +5199,8 @@
               listener: beginMember()
               isReservedKeyword(in)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, in, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, in)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, in, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, in)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(in)
                 listener: handleType(int, null)
@@ -5345,8 +5344,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, inout, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, inout)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, inout, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, inout)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(inout)
                 listener: handleType(int, null)
@@ -5489,8 +5488,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -5635,8 +5634,8 @@
               listener: beginMember()
               isReservedKeyword(is)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, is, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, is)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, is, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, is)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(is)
                 listener: handleType(int, null)
@@ -5812,8 +5811,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, late, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, late, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
@@ -5956,8 +5955,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -6100,8 +6099,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -6244,8 +6243,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, native, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, native)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, native, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, native)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(native)
                 listener: handleType(int, null)
@@ -6390,8 +6389,8 @@
               listener: beginMember()
               isReservedKeyword(new)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, new, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, new)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, new, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, new)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(new)
                 listener: handleType(int, null)
@@ -6543,8 +6542,8 @@
               listener: beginMember()
               isReservedKeyword(null)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, null, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, null, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, null)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(null)
                 listener: handleType(int, null)
@@ -6683,8 +6682,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, of, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, of)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, of, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, of)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(of)
                 listener: handleType(int, null)
@@ -6827,8 +6826,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, on, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, on)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, on, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, on)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(on)
                 listener: handleType(int, null)
@@ -6972,9 +6971,9 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isUnaryMinus(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
                 isUnaryMinus(()
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -7117,8 +7116,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, out, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, out)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, out, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, out)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(out)
                 listener: handleType(int, null)
@@ -7261,8 +7260,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -7405,8 +7404,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, patch, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, patch)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, patch, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, patch)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(patch)
                 listener: handleType(int, null)
@@ -7549,8 +7548,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, required, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, required, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
@@ -7695,8 +7694,8 @@
               listener: beginMember()
               isReservedKeyword(rethrow)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, rethrow, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, rethrow)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, rethrow, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, rethrow)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(rethrow)
                 listener: handleType(int, null)
@@ -7842,8 +7841,8 @@
               listener: beginMember()
               isReservedKeyword(return)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, return, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, return)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, return, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, return)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(return)
                 listener: handleType(int, null)
@@ -7984,8 +7983,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -8128,8 +8127,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, show, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, show)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, show, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, show)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(show)
                 listener: handleType(int, null)
@@ -8272,8 +8271,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, source, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, source)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, source, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, source)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(source)
                 listener: handleType(int, null)
@@ -8416,8 +8415,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -8560,141 +8559,164 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              isReservedKeyword(super)
-              indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, super, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, super)
-                listener: handleIdentifier(int, typeReference)
-                listener: handleNoTypeArguments(super)
-                listener: handleType(int, null)
-                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
-                  reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
-                    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, methodDeclaration)
-                parseQualifiedRestOpt(super, methodDeclarationContinuation)
-                parseMethodTypeVar(super)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(super, super, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(super, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
-                        parseMetadataStar(()
-                          listener: beginMetadataStar(int)
-                          listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
+              recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', super, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(super)
+                  listener: handleType(int, null)
+                  ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
+                    reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+                      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, fieldDeclaration)
+                  parseFieldInitializerOpt(super, super, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                    listener: handleNoFieldInitializer(()
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endMember()
+            notEofOrValue(}, ()
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(()
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
+                parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ()
+                  listener: handleNoType(;)
+                  ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                    insertSyntheticIdentifier(;, methodDeclaration, message: null, 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(, methodDeclaration)
+                  parseQualifiedRestOpt(, methodDeclarationContinuation)
+                  parseMethodTypeVar()
+                    listener: handleNoTypeVariables(()
+                  parseGetterOrFormalParameters(, (, false, MemberKind.NonStaticMethod)
+                    parseFormalParameters(, MemberKind.NonStaticMethod)
+                      parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                        listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                        parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
+                          parseMetadataStar(()
+                            listener: beginMetadataStar(int)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(int, MemberKind.NonStaticMethod, 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.mandatory, MemberKind.NonStaticMethod)
+                        listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                  parseInitializersOpt())
+                    listener: handleNoInitializers()
+                  parseAsyncModifierOpt())
+                    listener: handleAsyncModifier(null, null)
+                    inPlainSync()
                   inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  listener: beginBlockFunctionBody({)
-                  notEofOrValue(}, if)
-                  parseStatement({)
-                    parseStatementX({)
-                      parseIfStatement({)
-                        listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if)
-                          parseExpressionInParenthesisRest(()
-                            parseExpression(()
-                              parsePrecedenceExpression((, 1, true)
-                                parseUnaryExpression((, true)
-                                  parsePrimary((, expression)
-                                    parseSendOrFunctionLiteral((, expression)
-                                      parseSend((, expression)
-                                        isNextIdentifier(()
-                                        ensureIdentifier((, expression)
-                                          listener: handleIdentifier(x, expression)
-                                        listener: handleNoTypeArguments(==)
-                                        parseArgumentsOpt(x)
-                                          listener: handleNoArguments(==)
-                                        listener: handleSend(x, ==)
-                                listener: beginBinaryExpression(==)
-                                parsePrecedenceExpression(==, 8, true)
-                                  parseUnaryExpression(==, true)
-                                    parsePrimary(==, expression)
-                                      parseLiteralInt(==)
-                                        listener: handleLiteralInt(0)
-                                listener: endBinaryExpression(==)
-                            ensureCloseParen(0, ()
-                          listener: handleParenthesizedCondition(()
-                        listener: beginThenStatement(return)
-                        parseStatement())
-                          parseStatementX())
-                            parseReturnStatement())
-                              listener: beginReturnStatement(return)
-                              parseExpression(return)
-                                parsePrecedenceExpression(return, 1, true)
-                                  parseUnaryExpression(return, true)
-                                    parsePrimary(return, expression)
-                                      parseLiteralInt(return)
-                                        listener: handleLiteralInt(42)
-                              ensureSemicolon(42)
-                              listener: endReturnStatement(true, return, ;)
-                              inGenerator()
-                        listener: endThenStatement(;)
-                        listener: endIfStatement(if, null)
-                  notEofOrValue(}, return)
-                  parseStatement(;)
-                    parseStatementX(;)
-                      parseReturnStatement(;)
-                        listener: beginReturnStatement(return)
-                        parseExpression(return)
-                          parsePrecedenceExpression(return, 1, true)
-                            parseUnaryExpression(return, true)
-                              parsePrimary(return, expression)
-                                parseSuperExpression(return, expression)
-                                  listener: handleSuperExpression(super, expression)
-                                  listener: handleNoTypeArguments(()
-                                  parseArguments(super)
-                                    parseArgumentsRest(()
-                                      listener: beginArguments(()
-                                      parseExpression(()
-                                        parsePrecedenceExpression((, 1, true)
-                                          parseUnaryExpression((, true)
-                                            parsePrimary((, expression)
-                                              parseSendOrFunctionLiteral((, expression)
-                                                parseSend((, expression)
-                                                  isNextIdentifier(()
-                                                  ensureIdentifier((, expression)
-                                                    listener: handleIdentifier(x, expression)
-                                                  listener: handleNoTypeArguments(-)
-                                                  parseArgumentsOpt(x)
-                                                    listener: handleNoArguments(-)
-                                                  listener: handleSend(x, -)
-                                          listener: beginBinaryExpression(-)
-                                          parsePrecedenceExpression(-, 14, true)
-                                            parseUnaryExpression(-, true)
-                                              parsePrimary(-, expression)
-                                                parseLiteralInt(-)
-                                                  listener: handleLiteralInt(1)
-                                          listener: endBinaryExpression(-)
-                                      listener: endArguments(1, (, ))
-                                  listener: handleSend(super, +)
-                            listener: beginBinaryExpression(+)
-                            parsePrecedenceExpression(+, 14, true)
-                              parseUnaryExpression(+, true)
-                                parsePrimary(+, expression)
-                                  parseLiteralInt(+)
-                                    listener: handleLiteralInt(1)
-                            listener: endBinaryExpression(+)
-                        ensureSemicolon(1)
-                        listener: endReturnStatement(true, return, ;)
-                        inGenerator()
-                  notEofOrValue(}, })
-                  listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
-              listener: endMember()
+                  parseFunctionBody(), false, true)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrValue(}, if)
+                    parseStatement({)
+                      parseStatementX({)
+                        parseIfStatement({)
+                          listener: beginIfStatement(if)
+                          ensureParenthesizedCondition(if)
+                            parseExpressionInParenthesisRest(()
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true)
+                                  parseUnaryExpression((, true)
+                                    parsePrimary((, expression)
+                                      parseSendOrFunctionLiteral((, expression)
+                                        parseSend((, expression)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(==)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(==)
+                                          listener: handleSend(x, ==)
+                                  listener: beginBinaryExpression(==)
+                                  parsePrecedenceExpression(==, 8, true)
+                                    parseUnaryExpression(==, true)
+                                      parsePrimary(==, expression)
+                                        parseLiteralInt(==)
+                                          listener: handleLiteralInt(0)
+                                  listener: endBinaryExpression(==)
+                              ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition(()
+                          listener: beginThenStatement(return)
+                          parseStatement())
+                            parseStatementX())
+                              parseReturnStatement())
+                                listener: beginReturnStatement(return)
+                                parseExpression(return)
+                                  parsePrecedenceExpression(return, 1, true)
+                                    parseUnaryExpression(return, true)
+                                      parsePrimary(return, expression)
+                                        parseLiteralInt(return)
+                                          listener: handleLiteralInt(42)
+                                ensureSemicolon(42)
+                                listener: endReturnStatement(true, return, ;)
+                                inGenerator()
+                          listener: endThenStatement(;)
+                          listener: endIfStatement(if, null)
+                    notEofOrValue(}, return)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseReturnStatement(;)
+                          listener: beginReturnStatement(return)
+                          parseExpression(return)
+                            parsePrecedenceExpression(return, 1, true)
+                              parseUnaryExpression(return, true)
+                                parsePrimary(return, expression)
+                                  parseSuperExpression(return, expression)
+                                    listener: handleSuperExpression(super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        parseExpression(()
+                                          parsePrecedenceExpression((, 1, true)
+                                            parseUnaryExpression((, true)
+                                              parsePrimary((, expression)
+                                                parseSendOrFunctionLiteral((, expression)
+                                                  parseSend((, expression)
+                                                    isNextIdentifier(()
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, -)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true)
+                                              parseUnaryExpression(-, true)
+                                                parsePrimary(-, expression)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-)
+                                        listener: endArguments(1, (, ))
+                                    listener: handleSend(super, +)
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true)
+                                parseUnaryExpression(+, true)
+                                  parsePrimary(+, expression)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+)
+                          ensureSemicolon(1)
+                          listener: endReturnStatement(true, return, ;)
+                          inGenerator()
+                    notEofOrValue(}, })
+                    listener: endBlockFunctionBody(2, {, })
+                  listener: endClassMethod(null, , (, null, })
+                listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
               parseMetadataStar(})
@@ -8703,8 +8725,8 @@
               listener: beginMember()
               isReservedKeyword(switch)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, switch, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, switch)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, switch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, switch)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(switch)
                 listener: handleType(int, null)
@@ -8895,8 +8917,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, sync, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, sync)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, sync, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, sync)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(sync)
                 listener: handleType(int, null)
@@ -9039,9 +9061,9 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(int, }, null, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
-                parseFields(}, null, null, null, null, null, null, }, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, })
+              recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, DeclarationKind.Class, WrapperClass)
+                parseFields(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', this, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                   listener: handleIdentifier(int, typeReference)
                   listener: handleNoTypeArguments(this)
                   listener: handleType(int, null)
@@ -9049,13 +9071,13 @@
                     reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
                       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, fieldDeclaration)
-                  parseFieldInitializerOpt(this, this, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                  parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                     listener: handleNoFieldInitializer(()
                   ensureSemicolon(this)
                     reportRecoverableError(this, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], this, this)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
                 listener: endMember()
             notEofOrValue(}, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -9063,9 +9085,9 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
-                parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, ()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, WrapperClass)
+                parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, (, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ()
                   listener: handleNoType(;)
                   ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                     insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
@@ -9205,8 +9227,8 @@
               listener: beginMember()
               isReservedKeyword(throw)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, throw, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, throw)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, throw, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, throw)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(throw)
                 listener: handleType(int, null)
@@ -9347,8 +9369,8 @@
               listener: beginMember()
               isReservedKeyword(true)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, true, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, true, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, true)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(true)
                 listener: handleType(int, null)
@@ -9489,8 +9511,8 @@
               listener: beginMember()
               isReservedKeyword(try)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, try, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, try)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, try, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, try)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(try)
                 listener: handleType(int, null)
@@ -9672,8 +9694,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
@@ -9818,8 +9840,8 @@
               listener: beginMember()
               isReservedKeyword(var)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, var, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, var)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, var, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, var)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(var)
                 listener: handleType(int, null)
@@ -10057,8 +10079,8 @@
               listener: beginMember()
               isReservedKeyword(void)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, void, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, void)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, void, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, void)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(void)
                 listener: handleType(int, null)
@@ -10297,8 +10319,8 @@
               listener: beginMember()
               isReservedKeyword(while)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, while, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, while)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, while, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, while)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(while)
                 listener: handleType(int, null)
@@ -10482,8 +10504,8 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, with, DeclarationKind.Class, WrapperClass, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, with, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -10627,8 +10649,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, yield, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, yield)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, yield, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, yield)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(yield)
                 listener: handleType(int, null)
@@ -10766,7 +10788,7 @@
                 listener: endClassMethod(null, int, (, null, })
               listener: endMember()
             notEofOrValue(}, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration()
   reportAllErrorTokens(class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
index 70d958e..5eaa7cd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart.parser.expect
@@ -281,7 +281,7 @@
 return static(x-1) + 1;
 }
 
-int super(int x) {
+int super;*synthetic*(int x) {
 if (x == 0) return 42;
 return super(x-1) + 1;
 }
@@ -629,7 +629,7 @@
 return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
 }[SimpleToken]
 
-int[StringToken] super[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+int[StringToken] super[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
 if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
 return[KeywordToken] super[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
 }[SimpleToken]
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 89ea476..a1fd276 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
@@ -796,7 +796,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -819,7 +819,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -844,7 +844,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -872,7 +872,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -897,7 +897,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -925,7 +925,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -953,7 +953,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -976,7 +976,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1001,7 +1001,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1029,7 +1029,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1054,7 +1054,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1082,7 +1082,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1110,7 +1110,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1134,7 +1134,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1160,7 +1160,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1189,7 +1189,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1215,7 +1215,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1244,7 +1244,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1273,7 +1273,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1296,7 +1296,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1321,7 +1321,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1349,7 +1349,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1374,7 +1374,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1402,7 +1402,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1430,7 +1430,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1453,7 +1453,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1478,7 +1478,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1506,7 +1506,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1531,7 +1531,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1559,7 +1559,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1587,7 +1587,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1611,7 +1611,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1637,7 +1637,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1666,7 +1666,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1692,7 +1692,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1721,7 +1721,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1750,7 +1750,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1774,7 +1774,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1800,7 +1800,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1829,7 +1829,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1855,7 +1855,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1884,7 +1884,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1913,7 +1913,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1937,7 +1937,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1963,7 +1963,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1992,7 +1992,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2018,7 +2018,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2047,7 +2047,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2076,7 +2076,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2100,7 +2100,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2126,7 +2126,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2155,7 +2155,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2181,7 +2181,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2210,7 +2210,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2239,7 +2239,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2263,7 +2263,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2289,7 +2289,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2318,7 +2318,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2344,7 +2344,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2373,7 +2373,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2402,7 +2402,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2426,7 +2426,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2452,7 +2452,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2481,7 +2481,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2507,7 +2507,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2536,7 +2536,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2565,7 +2565,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2588,7 +2588,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2613,7 +2613,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2641,7 +2641,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2666,7 +2666,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2694,7 +2694,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2722,7 +2722,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2746,7 +2746,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2772,7 +2772,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2801,7 +2801,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2827,7 +2827,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2856,7 +2856,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2885,7 +2885,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2908,7 +2908,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2933,7 +2933,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2961,7 +2961,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2986,7 +2986,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3014,7 +3014,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3042,7 +3042,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3066,7 +3066,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3092,7 +3092,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3121,7 +3121,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3147,7 +3147,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3176,7 +3176,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3205,7 +3205,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3228,7 +3228,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3253,7 +3253,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3281,7 +3281,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3306,7 +3306,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3334,7 +3334,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3362,7 +3362,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3386,7 +3386,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3412,7 +3412,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3441,7 +3441,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3467,7 +3467,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3496,7 +3496,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3525,7 +3525,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3549,7 +3549,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3575,7 +3575,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3604,7 +3604,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3630,7 +3630,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3659,7 +3659,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3688,7 +3688,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3711,7 +3711,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3736,7 +3736,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3764,7 +3764,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3789,7 +3789,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3817,7 +3817,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3845,7 +3845,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3869,7 +3869,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3895,7 +3895,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3924,7 +3924,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3950,7 +3950,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3979,7 +3979,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4008,7 +4008,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4031,7 +4031,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4056,7 +4056,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4084,7 +4084,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4109,7 +4109,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4137,7 +4137,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4165,7 +4165,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4188,7 +4188,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4213,7 +4213,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4241,7 +4241,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4266,7 +4266,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4294,7 +4294,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4322,7 +4322,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4345,7 +4345,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4370,7 +4370,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4398,7 +4398,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4423,7 +4423,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4451,7 +4451,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4479,7 +4479,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4503,7 +4503,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4529,7 +4529,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4558,7 +4558,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4584,7 +4584,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4613,7 +4613,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4642,7 +4642,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4666,7 +4666,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4692,7 +4692,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4721,7 +4721,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4747,7 +4747,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4776,7 +4776,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4805,7 +4805,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4829,7 +4829,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4855,7 +4855,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4884,7 +4884,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4910,7 +4910,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4939,7 +4939,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4968,7 +4968,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4992,7 +4992,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5018,7 +5018,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5047,7 +5047,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5073,7 +5073,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5102,7 +5102,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5131,7 +5131,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5154,7 +5154,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5179,7 +5179,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5207,7 +5207,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5232,7 +5232,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5260,7 +5260,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5288,7 +5288,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5311,7 +5311,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5336,7 +5336,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5364,7 +5364,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5389,7 +5389,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5417,7 +5417,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5445,7 +5445,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5468,7 +5468,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5493,7 +5493,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5521,7 +5521,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5546,7 +5546,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5574,7 +5574,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5602,7 +5602,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5626,7 +5626,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5652,7 +5652,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5681,7 +5681,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5707,7 +5707,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5736,7 +5736,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5765,7 +5765,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5788,7 +5788,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5813,7 +5813,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5841,7 +5841,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5866,7 +5866,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5894,7 +5894,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5922,7 +5922,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5945,7 +5945,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5970,7 +5970,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5998,7 +5998,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6023,7 +6023,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6051,7 +6051,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6079,7 +6079,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6103,7 +6103,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6129,7 +6129,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6158,7 +6158,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6184,7 +6184,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6213,7 +6213,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6242,7 +6242,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6265,7 +6265,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6290,7 +6290,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6318,7 +6318,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6343,7 +6343,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6371,7 +6371,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6399,7 +6399,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6422,7 +6422,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6447,7 +6447,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6475,7 +6475,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6500,7 +6500,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6528,7 +6528,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6556,7 +6556,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6580,7 +6580,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6606,7 +6606,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6635,7 +6635,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6661,7 +6661,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6690,7 +6690,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6719,7 +6719,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6742,7 +6742,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6767,7 +6767,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6795,7 +6795,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6820,7 +6820,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6848,7 +6848,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6876,7 +6876,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6899,7 +6899,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6924,7 +6924,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6952,7 +6952,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6977,7 +6977,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7005,7 +7005,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7033,7 +7033,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7056,7 +7056,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7081,7 +7081,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7109,7 +7109,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7134,7 +7134,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7162,7 +7162,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7190,7 +7190,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7213,7 +7213,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7238,7 +7238,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7266,7 +7266,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7291,7 +7291,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7319,7 +7319,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7347,7 +7347,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7371,7 +7371,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7397,7 +7397,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7426,7 +7426,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7452,7 +7452,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7481,7 +7481,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7510,7 +7510,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7534,7 +7534,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7560,7 +7560,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7589,7 +7589,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7615,7 +7615,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7644,7 +7644,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7673,7 +7673,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7696,7 +7696,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7721,7 +7721,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7749,7 +7749,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7774,7 +7774,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7802,7 +7802,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7830,7 +7830,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7853,7 +7853,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7878,7 +7878,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7906,7 +7906,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7931,7 +7931,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7959,7 +7959,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7987,7 +7987,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8010,7 +8010,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8035,7 +8035,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8063,7 +8063,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8088,7 +8088,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8116,7 +8116,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8144,7 +8144,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8167,7 +8167,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8192,7 +8192,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8220,7 +8220,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8245,7 +8245,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8273,7 +8273,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8301,7 +8301,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8324,7 +8324,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8349,7 +8349,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8377,7 +8377,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8402,7 +8402,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8430,7 +8430,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8458,7 +8458,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8481,7 +8481,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8506,7 +8506,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8534,7 +8534,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8559,7 +8559,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8587,7 +8587,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8615,7 +8615,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8638,7 +8638,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8663,7 +8663,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8691,7 +8691,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8716,7 +8716,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8744,7 +8744,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8772,7 +8772,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8796,7 +8796,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8822,7 +8822,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8851,7 +8851,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8877,7 +8877,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8906,7 +8906,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8935,7 +8935,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8959,7 +8959,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8985,7 +8985,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9014,7 +9014,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9040,7 +9040,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9069,7 +9069,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9098,7 +9098,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9121,7 +9121,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9146,7 +9146,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9174,7 +9174,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9199,7 +9199,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9227,7 +9227,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9255,7 +9255,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9278,7 +9278,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9303,7 +9303,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9331,7 +9331,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9356,7 +9356,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9384,7 +9384,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9412,7 +9412,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9435,7 +9435,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9460,7 +9460,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9488,7 +9488,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9513,7 +9513,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9541,7 +9541,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9569,7 +9569,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9592,7 +9592,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9617,7 +9617,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9645,7 +9645,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9670,7 +9670,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9698,7 +9698,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9726,7 +9726,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9750,7 +9750,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9776,7 +9776,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9805,7 +9805,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9831,7 +9831,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9860,7 +9860,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9889,7 +9889,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9913,7 +9913,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9939,7 +9939,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9968,7 +9968,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9994,7 +9994,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10023,7 +10023,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10052,7 +10052,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10075,7 +10075,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10100,7 +10100,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10128,7 +10128,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10153,7 +10153,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10181,7 +10181,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10209,7 +10209,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10233,7 +10233,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10259,7 +10259,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10288,7 +10288,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10314,7 +10314,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10343,7 +10343,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10372,7 +10372,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10396,7 +10396,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10422,7 +10422,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10451,7 +10451,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10477,7 +10477,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10506,7 +10506,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10535,7 +10535,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10559,7 +10559,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10585,7 +10585,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10614,7 +10614,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10640,7 +10640,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10669,7 +10669,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10698,7 +10698,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10722,7 +10722,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10748,7 +10748,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10777,7 +10777,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10803,7 +10803,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10832,7 +10832,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10861,7 +10861,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10884,7 +10884,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10909,7 +10909,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10937,7 +10937,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10962,7 +10962,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10990,7 +10990,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11018,7 +11018,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11042,7 +11042,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11068,7 +11068,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11097,7 +11097,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11123,7 +11123,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11152,7 +11152,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11181,7 +11181,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11205,7 +11205,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11231,7 +11231,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11260,7 +11260,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11286,7 +11286,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11315,7 +11315,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11344,7 +11344,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11368,7 +11368,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11394,7 +11394,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11423,7 +11423,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11449,7 +11449,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11478,7 +11478,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11507,7 +11507,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11531,7 +11531,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11557,7 +11557,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11586,7 +11586,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11612,7 +11612,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11641,7 +11641,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11670,7 +11670,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11693,7 +11693,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11718,7 +11718,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11746,7 +11746,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11771,7 +11771,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -11799,7 +11799,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 251738d..af2dd41 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -48,8 +48,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -92,8 +92,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -144,8 +144,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -188,8 +188,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -240,8 +240,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -292,8 +292,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -332,8 +332,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -376,8 +376,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -428,8 +428,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -472,8 +472,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -524,8 +524,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -576,8 +576,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -617,8 +617,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -662,8 +662,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -715,8 +715,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -760,8 +760,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -813,8 +813,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -866,8 +866,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -906,8 +906,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -950,8 +950,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1002,8 +1002,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1046,8 +1046,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1098,8 +1098,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1150,8 +1150,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1190,8 +1190,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1234,8 +1234,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1286,8 +1286,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1330,8 +1330,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1382,8 +1382,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1434,8 +1434,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1475,8 +1475,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1520,8 +1520,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1573,8 +1573,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1618,8 +1618,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1671,8 +1671,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1724,8 +1724,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1765,8 +1765,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1810,8 +1810,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1863,8 +1863,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1908,8 +1908,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1961,8 +1961,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2014,8 +2014,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2055,8 +2055,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2100,8 +2100,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2153,8 +2153,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2198,8 +2198,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2251,8 +2251,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2304,8 +2304,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2345,8 +2345,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2390,8 +2390,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2443,8 +2443,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2488,8 +2488,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2541,8 +2541,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2594,8 +2594,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2635,8 +2635,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2680,8 +2680,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2733,8 +2733,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2778,8 +2778,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2831,8 +2831,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2884,8 +2884,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2925,8 +2925,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2970,8 +2970,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3023,8 +3023,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3068,8 +3068,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3121,8 +3121,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3174,8 +3174,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3214,8 +3214,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3258,8 +3258,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3310,8 +3310,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3354,8 +3354,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3406,8 +3406,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3458,8 +3458,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3499,8 +3499,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3544,8 +3544,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3597,8 +3597,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3642,8 +3642,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3695,8 +3695,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3748,8 +3748,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3788,8 +3788,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3832,8 +3832,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3884,8 +3884,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3928,8 +3928,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3980,8 +3980,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4032,8 +4032,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4073,8 +4073,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4118,8 +4118,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4171,8 +4171,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4216,8 +4216,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4269,8 +4269,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4322,8 +4322,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4362,8 +4362,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4406,8 +4406,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4458,8 +4458,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4502,8 +4502,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4554,8 +4554,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4606,8 +4606,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4647,8 +4647,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4692,8 +4692,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4745,8 +4745,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4790,8 +4790,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4843,8 +4843,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4896,8 +4896,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4937,8 +4937,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4982,8 +4982,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5035,8 +5035,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5080,8 +5080,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5133,8 +5133,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5186,8 +5186,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5226,8 +5226,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5270,8 +5270,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5322,8 +5322,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5366,8 +5366,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5418,8 +5418,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5470,8 +5470,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5511,8 +5511,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5556,8 +5556,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5609,8 +5609,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5654,8 +5654,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5707,8 +5707,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5760,8 +5760,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5800,8 +5800,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5844,8 +5844,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5896,8 +5896,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5940,8 +5940,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5992,8 +5992,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6044,8 +6044,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6084,8 +6084,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6128,8 +6128,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6180,8 +6180,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6224,8 +6224,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6276,8 +6276,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6328,8 +6328,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6368,8 +6368,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6412,8 +6412,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6464,8 +6464,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6508,8 +6508,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6560,8 +6560,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6612,8 +6612,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6653,8 +6653,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6698,8 +6698,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6751,8 +6751,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6796,8 +6796,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6849,8 +6849,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6902,8 +6902,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6943,8 +6943,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6988,8 +6988,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7041,8 +7041,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7086,8 +7086,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7139,8 +7139,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7192,8 +7192,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7233,8 +7233,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7278,8 +7278,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7331,8 +7331,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7376,8 +7376,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7429,8 +7429,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7482,8 +7482,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7523,8 +7523,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7568,8 +7568,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7621,8 +7621,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7666,8 +7666,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7719,8 +7719,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7772,8 +7772,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7812,8 +7812,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7856,8 +7856,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7908,8 +7908,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7952,8 +7952,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8004,8 +8004,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8056,8 +8056,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8096,8 +8096,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8140,8 +8140,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8192,8 +8192,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8236,8 +8236,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8288,8 +8288,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8340,8 +8340,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8380,8 +8380,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8424,8 +8424,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8476,8 +8476,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8520,8 +8520,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8572,8 +8572,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8624,8 +8624,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8665,8 +8665,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8710,8 +8710,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8763,8 +8763,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8808,8 +8808,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8861,8 +8861,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8914,8 +8914,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8954,8 +8954,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8998,8 +8998,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9050,8 +9050,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9094,8 +9094,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9146,8 +9146,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9198,8 +9198,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9238,8 +9238,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9282,8 +9282,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9334,8 +9334,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9378,8 +9378,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9430,8 +9430,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9482,8 +9482,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9523,8 +9523,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9568,8 +9568,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9621,8 +9621,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9666,8 +9666,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9719,8 +9719,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9772,8 +9772,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9812,8 +9812,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9856,8 +9856,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9908,8 +9908,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9952,8 +9952,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10004,8 +10004,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10056,8 +10056,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10096,8 +10096,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10140,8 +10140,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10192,8 +10192,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10236,8 +10236,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10288,8 +10288,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10340,8 +10340,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10381,8 +10381,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10426,8 +10426,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10479,8 +10479,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10524,8 +10524,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10577,8 +10577,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10630,8 +10630,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10670,8 +10670,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10714,8 +10714,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10766,8 +10766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10810,8 +10810,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10862,8 +10862,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10914,8 +10914,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10954,8 +10954,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10998,8 +10998,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11050,8 +11050,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11094,8 +11094,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11146,8 +11146,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11198,8 +11198,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11238,8 +11238,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11282,8 +11282,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11334,8 +11334,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11378,8 +11378,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11430,8 +11430,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11482,8 +11482,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11522,8 +11522,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11566,8 +11566,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11618,8 +11618,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11662,8 +11662,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11714,8 +11714,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11766,8 +11766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11807,8 +11807,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11852,8 +11852,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11905,8 +11905,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11950,8 +11950,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12003,8 +12003,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12056,8 +12056,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12097,8 +12097,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12142,8 +12142,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12195,8 +12195,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12240,8 +12240,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12293,8 +12293,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12346,8 +12346,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12386,8 +12386,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12430,8 +12430,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12482,8 +12482,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12526,8 +12526,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12578,8 +12578,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12630,8 +12630,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12670,8 +12670,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12714,8 +12714,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12766,8 +12766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12810,8 +12810,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12862,8 +12862,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12914,8 +12914,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12954,8 +12954,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12998,8 +12998,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13050,8 +13050,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13094,8 +13094,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13146,8 +13146,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13198,8 +13198,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13238,8 +13238,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13282,8 +13282,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13334,8 +13334,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13378,8 +13378,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13430,8 +13430,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13482,8 +13482,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13522,8 +13522,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13566,8 +13566,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13618,8 +13618,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13662,8 +13662,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13714,8 +13714,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13766,8 +13766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13806,8 +13806,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13850,8 +13850,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13902,8 +13902,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13946,8 +13946,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13998,8 +13998,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14050,8 +14050,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14090,8 +14090,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14134,8 +14134,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14186,8 +14186,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14230,8 +14230,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14282,8 +14282,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14334,8 +14334,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14375,8 +14375,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14420,8 +14420,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14473,8 +14473,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14518,8 +14518,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14571,8 +14571,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14624,8 +14624,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14665,8 +14665,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14710,8 +14710,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14763,8 +14763,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14808,8 +14808,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14861,8 +14861,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14914,8 +14914,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14954,8 +14954,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14998,8 +14998,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15050,8 +15050,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15094,8 +15094,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15146,8 +15146,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15198,8 +15198,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15238,8 +15238,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15282,8 +15282,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15334,8 +15334,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15378,8 +15378,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15430,8 +15430,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15482,8 +15482,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15522,8 +15522,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15566,8 +15566,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15618,8 +15618,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15662,8 +15662,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15714,8 +15714,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15766,8 +15766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15806,8 +15806,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15850,8 +15850,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15902,8 +15902,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15946,8 +15946,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15998,8 +15998,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16050,8 +16050,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16091,8 +16091,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16136,8 +16136,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16189,8 +16189,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16234,8 +16234,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16287,8 +16287,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16340,8 +16340,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16381,8 +16381,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16426,8 +16426,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16479,8 +16479,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16524,8 +16524,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16577,8 +16577,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16630,8 +16630,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16670,8 +16670,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16714,8 +16714,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16766,8 +16766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16810,8 +16810,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16862,8 +16862,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16914,8 +16914,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16955,8 +16955,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17000,8 +17000,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17053,8 +17053,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17098,8 +17098,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17151,8 +17151,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17204,8 +17204,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17245,8 +17245,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17290,8 +17290,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17343,8 +17343,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17388,8 +17388,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17441,8 +17441,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17494,8 +17494,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17535,8 +17535,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17580,8 +17580,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17633,8 +17633,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17678,8 +17678,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17731,8 +17731,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17784,8 +17784,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17825,8 +17825,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17870,8 +17870,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17923,8 +17923,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17968,8 +17968,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18021,8 +18021,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18074,8 +18074,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18114,8 +18114,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18158,8 +18158,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18210,8 +18210,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18254,8 +18254,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18306,8 +18306,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18358,8 +18358,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18399,8 +18399,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18444,8 +18444,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18497,8 +18497,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18542,8 +18542,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18595,8 +18595,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18648,8 +18648,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18689,8 +18689,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18734,8 +18734,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18787,8 +18787,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18832,8 +18832,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18885,8 +18885,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18938,8 +18938,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18979,8 +18979,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19024,8 +19024,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19077,8 +19077,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19122,8 +19122,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19175,8 +19175,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19228,8 +19228,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19269,8 +19269,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19314,8 +19314,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19367,8 +19367,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19412,8 +19412,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19465,8 +19465,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19518,8 +19518,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19558,8 +19558,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19602,8 +19602,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19654,8 +19654,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19698,8 +19698,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19750,8 +19750,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
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 402c2ea..e3ca5ec 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -25,7 +25,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -50,7 +50,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -78,7 +78,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -103,7 +103,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -131,7 +131,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -159,7 +159,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -182,7 +182,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -207,7 +207,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -235,7 +235,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -260,7 +260,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -288,7 +288,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -316,7 +316,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -339,7 +339,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -364,7 +364,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -392,7 +392,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -417,7 +417,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -445,7 +445,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -473,7 +473,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -496,7 +496,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -521,7 +521,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -549,7 +549,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -574,7 +574,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -602,7 +602,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -630,7 +630,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -653,7 +653,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -678,7 +678,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -706,7 +706,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -731,7 +731,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -759,7 +759,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -787,7 +787,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -810,7 +810,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -835,7 +835,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -863,7 +863,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -888,7 +888,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -916,7 +916,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -944,7 +944,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -967,7 +967,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -992,7 +992,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1020,7 +1020,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1045,7 +1045,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1073,7 +1073,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1101,7 +1101,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1124,7 +1124,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1149,7 +1149,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1177,7 +1177,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1202,7 +1202,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1230,7 +1230,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1258,7 +1258,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1281,7 +1281,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1306,7 +1306,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1334,7 +1334,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1359,7 +1359,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1387,7 +1387,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1415,7 +1415,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1438,7 +1438,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1463,7 +1463,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1491,7 +1491,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1516,7 +1516,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1544,7 +1544,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1572,7 +1572,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1595,7 +1595,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1620,7 +1620,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1648,7 +1648,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1673,7 +1673,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1701,7 +1701,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1729,7 +1729,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1752,7 +1752,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1777,7 +1777,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1805,7 +1805,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1830,7 +1830,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1858,7 +1858,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1886,7 +1886,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1909,7 +1909,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1934,7 +1934,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1962,7 +1962,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -1987,7 +1987,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2015,7 +2015,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2043,7 +2043,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2066,7 +2066,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2091,7 +2091,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2119,7 +2119,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2144,7 +2144,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2172,7 +2172,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2200,7 +2200,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2223,7 +2223,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2248,7 +2248,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2276,7 +2276,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2301,7 +2301,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2329,7 +2329,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2357,7 +2357,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2380,7 +2380,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2405,7 +2405,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2433,7 +2433,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2458,7 +2458,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2486,7 +2486,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2514,7 +2514,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2537,7 +2537,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2562,7 +2562,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2590,7 +2590,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2615,7 +2615,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2643,7 +2643,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2671,7 +2671,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2694,7 +2694,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2719,7 +2719,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2747,7 +2747,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2772,7 +2772,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2800,7 +2800,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2828,7 +2828,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2851,7 +2851,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2876,7 +2876,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2904,7 +2904,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2929,7 +2929,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2957,7 +2957,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -2985,7 +2985,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3008,7 +3008,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3033,7 +3033,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3061,7 +3061,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3086,7 +3086,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3114,7 +3114,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3142,7 +3142,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3165,7 +3165,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3190,7 +3190,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3218,7 +3218,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3243,7 +3243,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3271,7 +3271,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3299,7 +3299,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3322,7 +3322,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3347,7 +3347,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3375,7 +3375,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3400,7 +3400,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3428,7 +3428,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3456,7 +3456,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3479,7 +3479,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3504,7 +3504,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3532,7 +3532,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3557,7 +3557,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3585,7 +3585,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3613,7 +3613,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3636,7 +3636,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3661,7 +3661,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3689,7 +3689,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3714,7 +3714,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3742,7 +3742,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3770,7 +3770,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3793,7 +3793,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3818,7 +3818,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3846,7 +3846,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3871,7 +3871,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3899,7 +3899,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3927,7 +3927,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3950,7 +3950,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -3975,7 +3975,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4003,7 +4003,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4028,7 +4028,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4056,7 +4056,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4084,7 +4084,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4107,7 +4107,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4132,7 +4132,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4160,7 +4160,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4185,7 +4185,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4213,7 +4213,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4241,7 +4241,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4264,7 +4264,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4289,7 +4289,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4317,7 +4317,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4342,7 +4342,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4370,7 +4370,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4398,7 +4398,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4421,7 +4421,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4446,7 +4446,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4474,7 +4474,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4499,7 +4499,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4527,7 +4527,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4555,7 +4555,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4578,7 +4578,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4603,7 +4603,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4631,7 +4631,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4656,7 +4656,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4684,7 +4684,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4712,7 +4712,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4735,7 +4735,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4760,7 +4760,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4788,7 +4788,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4813,7 +4813,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4841,7 +4841,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4869,7 +4869,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4892,7 +4892,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4917,7 +4917,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4945,7 +4945,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4970,7 +4970,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -4998,7 +4998,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5026,7 +5026,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5049,7 +5049,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5074,7 +5074,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5102,7 +5102,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5127,7 +5127,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5155,7 +5155,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5183,7 +5183,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5206,7 +5206,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5231,7 +5231,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5259,7 +5259,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5284,7 +5284,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5312,7 +5312,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5340,7 +5340,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5363,7 +5363,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5388,7 +5388,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5416,7 +5416,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5441,7 +5441,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5469,7 +5469,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5497,7 +5497,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5520,7 +5520,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5545,7 +5545,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5573,7 +5573,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5598,7 +5598,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5626,7 +5626,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5654,7 +5654,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5677,7 +5677,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5702,7 +5702,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5730,7 +5730,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5755,7 +5755,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5783,7 +5783,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5811,7 +5811,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5834,7 +5834,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5859,7 +5859,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5887,7 +5887,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5912,7 +5912,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5940,7 +5940,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5968,7 +5968,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -5991,7 +5991,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6016,7 +6016,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6044,7 +6044,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6069,7 +6069,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6097,7 +6097,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6125,7 +6125,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6148,7 +6148,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6173,7 +6173,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6201,7 +6201,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6226,7 +6226,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6254,7 +6254,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6282,7 +6282,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6305,7 +6305,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6330,7 +6330,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6358,7 +6358,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6383,7 +6383,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6411,7 +6411,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6439,7 +6439,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6462,7 +6462,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6487,7 +6487,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6515,7 +6515,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6540,7 +6540,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6568,7 +6568,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6596,7 +6596,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6619,7 +6619,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6644,7 +6644,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6672,7 +6672,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6697,7 +6697,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6725,7 +6725,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6753,7 +6753,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6776,7 +6776,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6801,7 +6801,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6829,7 +6829,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6854,7 +6854,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6882,7 +6882,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6910,7 +6910,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6933,7 +6933,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6958,7 +6958,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -6986,7 +6986,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7011,7 +7011,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7039,7 +7039,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7067,7 +7067,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7090,7 +7090,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7115,7 +7115,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7143,7 +7143,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7168,7 +7168,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7196,7 +7196,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7224,7 +7224,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7247,7 +7247,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7272,7 +7272,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7300,7 +7300,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7325,7 +7325,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7353,7 +7353,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7381,7 +7381,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7404,7 +7404,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7429,7 +7429,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7457,7 +7457,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7482,7 +7482,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7510,7 +7510,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7538,7 +7538,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7561,7 +7561,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7586,7 +7586,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7614,7 +7614,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7639,7 +7639,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7667,7 +7667,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7695,7 +7695,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7718,7 +7718,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7743,7 +7743,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7771,7 +7771,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7796,7 +7796,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7824,7 +7824,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7852,7 +7852,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7875,7 +7875,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7900,7 +7900,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7928,7 +7928,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7953,7 +7953,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -7981,7 +7981,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8009,7 +8009,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8032,7 +8032,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8057,7 +8057,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8085,7 +8085,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8110,7 +8110,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8138,7 +8138,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8166,7 +8166,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8189,7 +8189,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8214,7 +8214,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8242,7 +8242,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8267,7 +8267,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8295,7 +8295,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8323,7 +8323,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8346,7 +8346,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8371,7 +8371,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8399,7 +8399,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8424,7 +8424,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8452,7 +8452,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8480,7 +8480,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8503,7 +8503,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8528,7 +8528,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8556,7 +8556,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8581,7 +8581,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8609,7 +8609,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8637,7 +8637,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8660,7 +8660,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8685,7 +8685,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8713,7 +8713,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8738,7 +8738,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8766,7 +8766,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8794,7 +8794,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8817,7 +8817,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8842,7 +8842,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8870,7 +8870,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8895,7 +8895,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8923,7 +8923,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8951,7 +8951,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8974,7 +8974,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -8999,7 +8999,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9027,7 +9027,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9052,7 +9052,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9080,7 +9080,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9108,7 +9108,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9131,7 +9131,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9156,7 +9156,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9184,7 +9184,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9209,7 +9209,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9237,7 +9237,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9265,7 +9265,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9288,7 +9288,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9313,7 +9313,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9341,7 +9341,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9366,7 +9366,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9394,7 +9394,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9422,7 +9422,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9445,7 +9445,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9470,7 +9470,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9498,7 +9498,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9523,7 +9523,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9551,7 +9551,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9579,7 +9579,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9602,7 +9602,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9627,7 +9627,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9655,7 +9655,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9680,7 +9680,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9708,7 +9708,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9736,7 +9736,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9759,7 +9759,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9784,7 +9784,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9812,7 +9812,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9837,7 +9837,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9865,7 +9865,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9893,7 +9893,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9916,7 +9916,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9941,7 +9941,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9969,7 +9969,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -9994,7 +9994,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10022,7 +10022,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10050,7 +10050,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10073,7 +10073,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10098,7 +10098,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10126,7 +10126,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10151,7 +10151,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10179,7 +10179,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10207,7 +10207,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10230,7 +10230,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10255,7 +10255,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10283,7 +10283,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10308,7 +10308,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10336,7 +10336,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10364,7 +10364,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10387,7 +10387,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10412,7 +10412,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10440,7 +10440,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10465,7 +10465,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10493,7 +10493,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10521,7 +10521,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10544,7 +10544,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10569,7 +10569,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10597,7 +10597,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10622,7 +10622,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10650,7 +10650,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10678,7 +10678,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10701,7 +10701,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10726,7 +10726,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10754,7 +10754,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10779,7 +10779,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -10807,7 +10807,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 639e26d..ce4b7a3 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -47,8 +47,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -90,8 +90,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -141,8 +141,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -184,8 +184,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -235,8 +235,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -286,8 +286,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -325,8 +325,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -368,8 +368,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -419,8 +419,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -462,8 +462,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -513,8 +513,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -564,8 +564,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -603,8 +603,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -646,8 +646,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -697,8 +697,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -740,8 +740,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -791,8 +791,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -842,8 +842,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -881,8 +881,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -924,8 +924,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -975,8 +975,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1018,8 +1018,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1069,8 +1069,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1120,8 +1120,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1159,8 +1159,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1202,8 +1202,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1253,8 +1253,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1296,8 +1296,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1347,8 +1347,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1398,8 +1398,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1437,8 +1437,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1480,8 +1480,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1531,8 +1531,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1574,8 +1574,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1625,8 +1625,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1676,8 +1676,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1715,8 +1715,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1758,8 +1758,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1809,8 +1809,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1852,8 +1852,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1903,8 +1903,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1954,8 +1954,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -1993,8 +1993,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2036,8 +2036,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2087,8 +2087,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2130,8 +2130,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2181,8 +2181,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2232,8 +2232,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2271,8 +2271,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2314,8 +2314,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2365,8 +2365,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2408,8 +2408,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2459,8 +2459,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2510,8 +2510,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2549,8 +2549,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2592,8 +2592,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2643,8 +2643,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2686,8 +2686,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2737,8 +2737,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2788,8 +2788,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2827,8 +2827,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2870,8 +2870,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2921,8 +2921,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -2964,8 +2964,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3015,8 +3015,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3066,8 +3066,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3105,8 +3105,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3148,8 +3148,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3199,8 +3199,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3242,8 +3242,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3293,8 +3293,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3344,8 +3344,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3383,8 +3383,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3426,8 +3426,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3477,8 +3477,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3520,8 +3520,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3571,8 +3571,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3622,8 +3622,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3661,8 +3661,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3704,8 +3704,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3755,8 +3755,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3798,8 +3798,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3849,8 +3849,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3900,8 +3900,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3939,8 +3939,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -3982,8 +3982,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4033,8 +4033,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4076,8 +4076,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4127,8 +4127,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4178,8 +4178,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4217,8 +4217,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4260,8 +4260,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4311,8 +4311,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4354,8 +4354,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4405,8 +4405,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4456,8 +4456,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4495,8 +4495,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4538,8 +4538,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4589,8 +4589,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4632,8 +4632,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4683,8 +4683,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4734,8 +4734,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4773,8 +4773,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4816,8 +4816,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4867,8 +4867,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4910,8 +4910,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -4961,8 +4961,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5012,8 +5012,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5051,8 +5051,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5094,8 +5094,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5145,8 +5145,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5188,8 +5188,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5239,8 +5239,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5290,8 +5290,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5329,8 +5329,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5372,8 +5372,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5423,8 +5423,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5466,8 +5466,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5517,8 +5517,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5568,8 +5568,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5607,8 +5607,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5650,8 +5650,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5701,8 +5701,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5744,8 +5744,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5795,8 +5795,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5846,8 +5846,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5885,8 +5885,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5928,8 +5928,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -5979,8 +5979,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6022,8 +6022,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6073,8 +6073,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6124,8 +6124,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6163,8 +6163,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6206,8 +6206,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6257,8 +6257,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6300,8 +6300,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6351,8 +6351,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6402,8 +6402,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6441,8 +6441,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6484,8 +6484,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6535,8 +6535,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6578,8 +6578,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6629,8 +6629,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6680,8 +6680,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6719,8 +6719,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6762,8 +6762,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6813,8 +6813,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6856,8 +6856,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6907,8 +6907,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6958,8 +6958,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -6997,8 +6997,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7040,8 +7040,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7091,8 +7091,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7134,8 +7134,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7185,8 +7185,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7236,8 +7236,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7275,8 +7275,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7318,8 +7318,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7369,8 +7369,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7412,8 +7412,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7463,8 +7463,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7514,8 +7514,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7553,8 +7553,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7596,8 +7596,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7647,8 +7647,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7690,8 +7690,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7741,8 +7741,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7792,8 +7792,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7831,8 +7831,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7874,8 +7874,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7925,8 +7925,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -7968,8 +7968,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8019,8 +8019,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8070,8 +8070,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8109,8 +8109,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8152,8 +8152,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8203,8 +8203,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8246,8 +8246,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8297,8 +8297,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8348,8 +8348,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8387,8 +8387,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8430,8 +8430,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8481,8 +8481,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8524,8 +8524,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8575,8 +8575,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8626,8 +8626,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8665,8 +8665,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8708,8 +8708,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8759,8 +8759,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8802,8 +8802,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8853,8 +8853,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8904,8 +8904,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8943,8 +8943,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -8986,8 +8986,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9037,8 +9037,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9080,8 +9080,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9131,8 +9131,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9182,8 +9182,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9221,8 +9221,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9264,8 +9264,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9315,8 +9315,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9358,8 +9358,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9409,8 +9409,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9460,8 +9460,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9499,8 +9499,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9542,8 +9542,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9593,8 +9593,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9636,8 +9636,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9687,8 +9687,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9738,8 +9738,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9777,8 +9777,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9820,8 +9820,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9871,8 +9871,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9914,8 +9914,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -9965,8 +9965,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10016,8 +10016,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10055,8 +10055,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10098,8 +10098,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10149,8 +10149,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10192,8 +10192,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10243,8 +10243,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10294,8 +10294,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10333,8 +10333,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10376,8 +10376,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10427,8 +10427,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10470,8 +10470,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10521,8 +10521,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10572,8 +10572,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10611,8 +10611,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10654,8 +10654,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10705,8 +10705,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10748,8 +10748,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10799,8 +10799,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10850,8 +10850,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10889,8 +10889,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10932,8 +10932,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -10983,8 +10983,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11026,8 +11026,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11077,8 +11077,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11128,8 +11128,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11167,8 +11167,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11210,8 +11210,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11261,8 +11261,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11304,8 +11304,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11355,8 +11355,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11406,8 +11406,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11445,8 +11445,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11488,8 +11488,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11539,8 +11539,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11582,8 +11582,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11633,8 +11633,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11684,8 +11684,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11723,8 +11723,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11766,8 +11766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11817,8 +11817,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11860,8 +11860,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11911,8 +11911,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -11962,8 +11962,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12001,8 +12001,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12044,8 +12044,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12095,8 +12095,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12138,8 +12138,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12189,8 +12189,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12240,8 +12240,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12279,8 +12279,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12322,8 +12322,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12373,8 +12373,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12416,8 +12416,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12467,8 +12467,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12518,8 +12518,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12557,8 +12557,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12600,8 +12600,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12651,8 +12651,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12694,8 +12694,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12745,8 +12745,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12796,8 +12796,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12835,8 +12835,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12878,8 +12878,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12929,8 +12929,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -12972,8 +12972,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13023,8 +13023,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13074,8 +13074,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13113,8 +13113,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13156,8 +13156,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13207,8 +13207,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13250,8 +13250,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13301,8 +13301,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13352,8 +13352,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13391,8 +13391,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13434,8 +13434,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13485,8 +13485,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13528,8 +13528,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13579,8 +13579,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13630,8 +13630,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13669,8 +13669,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13712,8 +13712,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13763,8 +13763,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13806,8 +13806,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13857,8 +13857,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13908,8 +13908,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13947,8 +13947,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -13990,8 +13990,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14041,8 +14041,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14084,8 +14084,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14135,8 +14135,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14186,8 +14186,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14225,8 +14225,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14268,8 +14268,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14319,8 +14319,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14362,8 +14362,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14413,8 +14413,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14464,8 +14464,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14503,8 +14503,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14546,8 +14546,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14597,8 +14597,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14640,8 +14640,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14691,8 +14691,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14742,8 +14742,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14781,8 +14781,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14824,8 +14824,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14875,8 +14875,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14918,8 +14918,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -14969,8 +14969,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15020,8 +15020,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15059,8 +15059,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15102,8 +15102,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15153,8 +15153,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15196,8 +15196,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15247,8 +15247,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15298,8 +15298,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15337,8 +15337,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15380,8 +15380,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15431,8 +15431,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15474,8 +15474,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15525,8 +15525,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15576,8 +15576,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15615,8 +15615,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15658,8 +15658,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15709,8 +15709,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15752,8 +15752,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15803,8 +15803,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15854,8 +15854,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15893,8 +15893,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15936,8 +15936,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -15987,8 +15987,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16030,8 +16030,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16081,8 +16081,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16132,8 +16132,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16171,8 +16171,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16214,8 +16214,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16265,8 +16265,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16308,8 +16308,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16359,8 +16359,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16410,8 +16410,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16449,8 +16449,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16492,8 +16492,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16543,8 +16543,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16586,8 +16586,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16637,8 +16637,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16688,8 +16688,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16727,8 +16727,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16770,8 +16770,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16821,8 +16821,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16864,8 +16864,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16915,8 +16915,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -16966,8 +16966,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17005,8 +17005,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17048,8 +17048,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17099,8 +17099,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17142,8 +17142,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17193,8 +17193,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17244,8 +17244,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17283,8 +17283,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17326,8 +17326,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17377,8 +17377,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17420,8 +17420,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17471,8 +17471,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17522,8 +17522,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17561,8 +17561,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17604,8 +17604,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17655,8 +17655,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17698,8 +17698,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17749,8 +17749,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17800,8 +17800,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17839,8 +17839,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17882,8 +17882,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17933,8 +17933,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -17976,8 +17976,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18027,8 +18027,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18078,8 +18078,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18117,8 +18117,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18160,8 +18160,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18211,8 +18211,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18254,8 +18254,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18305,8 +18305,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18356,8 +18356,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18395,8 +18395,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18438,8 +18438,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18489,8 +18489,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18532,8 +18532,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18583,8 +18583,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18634,8 +18634,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18673,8 +18673,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18716,8 +18716,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18767,8 +18767,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18810,8 +18810,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18861,8 +18861,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18912,8 +18912,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18951,8 +18951,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -18994,8 +18994,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19045,8 +19045,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19088,8 +19088,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
@@ -19139,8 +19139,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
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 5b96bf3..3867cc6 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
@@ -12,7 +12,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(UnmatchedToken((), null)
+    beginTopLevelMethod(UnmatchedToken((), null, null)
       handleNoType(UnmatchedToken(())
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
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 0b284d4..1a5f237 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl(UnmatchedToken(())
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(UnmatchedToken((), null, UnmatchedToken((), Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(UnmatchedToken((), null)
+      parseTopLevelMethod(UnmatchedToken((), null, null, UnmatchedToken((), Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(UnmatchedToken((), null, null)
         listener: handleNoType(UnmatchedToken(())
         ensureIdentifierPotentiallyRecovered(UnmatchedToken((), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -50,13 +50,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
index 8221f5c..ed9be4d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.expect
@@ -136,7 +136,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(abstract)
       handleType(int, null)
@@ -149,7 +149,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(as)
       handleType(int, null)
@@ -162,7 +162,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(assert)
       handleType(int, null)
@@ -176,7 +176,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(async)
       handleType(int, null)
@@ -189,7 +189,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(await)
       handleType(int, null)
@@ -202,7 +202,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(break)
       handleType(int, null)
@@ -216,7 +216,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(case)
       handleType(int, null)
@@ -230,7 +230,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(catch)
       handleType(int, null)
@@ -244,7 +244,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(class)
       handleType(int, null)
@@ -258,7 +258,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(const)
       handleType(int, null)
@@ -272,7 +272,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(continue)
       handleType(int, null)
@@ -286,7 +286,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(covariant)
       handleType(int, null)
@@ -299,7 +299,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(default)
       handleType(int, null)
@@ -313,7 +313,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(deferred)
       handleType(int, null)
@@ -326,7 +326,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(do)
       handleType(int, null)
@@ -340,7 +340,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(dynamic)
       handleType(int, null)
@@ -353,7 +353,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(else)
       handleType(int, null)
@@ -367,7 +367,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(enum)
       handleType(int, null)
@@ -381,7 +381,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(export)
       handleType(int, null)
@@ -394,7 +394,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(extends)
       handleType(int, null)
@@ -408,7 +408,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(extension)
       handleType(int, null)
@@ -421,7 +421,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(external)
       handleType(int, null)
@@ -434,7 +434,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(factory)
       handleType(int, null)
@@ -447,7 +447,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(false)
       handleType(int, null)
@@ -461,7 +461,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(final)
       handleType(int, null)
@@ -475,7 +475,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(finally)
       handleType(int, null)
@@ -489,7 +489,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(for)
       handleType(int, null)
@@ -503,7 +503,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(Function)
       handleType(int, null)
@@ -516,7 +516,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(get)
       handleType(int, null)
@@ -529,7 +529,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(hide)
       handleType(int, null)
@@ -542,7 +542,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(if)
       handleType(int, null)
@@ -556,7 +556,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(implements)
       handleType(int, null)
@@ -569,7 +569,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(import)
       handleType(int, null)
@@ -582,7 +582,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(in)
       handleType(int, null)
@@ -596,7 +596,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(inout)
       handleType(int, null)
@@ -609,7 +609,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(interface)
       handleType(int, null)
@@ -622,7 +622,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(is)
       handleType(int, null)
@@ -636,7 +636,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(late)
       handleType(int, null)
@@ -649,7 +649,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(library)
       handleType(int, null)
@@ -662,7 +662,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(mixin)
       handleType(int, null)
@@ -675,7 +675,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(native)
       handleType(int, null)
@@ -688,7 +688,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(new)
       handleType(int, null)
@@ -702,7 +702,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(null)
       handleType(int, null)
@@ -716,7 +716,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(of)
       handleType(int, null)
@@ -729,7 +729,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(on)
       handleType(int, null)
@@ -742,7 +742,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(operator)
       handleType(int, null)
@@ -755,7 +755,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(out)
       handleType(int, null)
@@ -768,7 +768,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(part)
       handleType(int, null)
@@ -781,7 +781,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(patch)
       handleType(int, null)
@@ -794,7 +794,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(required)
       handleType(int, null)
@@ -807,7 +807,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(rethrow)
       handleType(int, null)
@@ -821,7 +821,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(return)
       handleType(int, null)
@@ -835,7 +835,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(set)
       handleType(int, null)
@@ -848,7 +848,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(show)
       handleType(int, null)
@@ -861,7 +861,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(source)
       handleType(int, null)
@@ -874,7 +874,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(static)
       handleType(int, null)
@@ -887,7 +887,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(super)
       handleType(int, null)
@@ -901,7 +901,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(switch)
       handleType(int, null)
@@ -915,7 +915,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(sync)
       handleType(int, null)
@@ -928,7 +928,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(this)
       handleType(int, null)
@@ -942,7 +942,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(throw)
       handleType(int, null)
@@ -956,7 +956,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(true)
       handleType(int, null)
@@ -970,7 +970,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(try)
       handleType(int, null)
@@ -984,7 +984,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(typedef)
       handleType(int, null)
@@ -997,7 +997,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(var)
       handleType(int, null)
@@ -1011,7 +1011,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(void)
       handleType(int, null)
@@ -1025,7 +1025,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(while)
       handleType(int, null)
@@ -1039,7 +1039,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(with)
       handleType(int, null)
@@ -1053,7 +1053,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(yield)
       handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
index b2228b8..8d0fc89 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_fields.dart.intertwined.expect
@@ -8,14 +8,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
-      parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(abstract, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(abstract, abstract, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -32,14 +32,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(as, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(as, as, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -58,8 +58,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(assert)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', assert, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(assert)
         listener: handleType(int, null)
@@ -67,7 +67,7 @@
           reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(assert, assert, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(assert, assert, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -84,14 +84,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', async, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(async)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(async, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(async, async, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(async, async, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -108,14 +108,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', await, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(await)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(await, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(await, await, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(await, await, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -134,8 +134,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(break)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', break, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(break)
         listener: handleType(int, null)
@@ -143,7 +143,7 @@
           reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(break, break, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(break, break, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -162,8 +162,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(case)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', case, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(case)
         listener: handleType(int, null)
@@ -171,7 +171,7 @@
           reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(case, case, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(case, case, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -190,8 +190,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(catch)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', catch, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(catch)
         listener: handleType(int, null)
@@ -199,7 +199,7 @@
           reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(catch, catch, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(catch, catch, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -218,8 +218,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(class)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', class, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(class)
         listener: handleType(int, null)
@@ -227,7 +227,7 @@
           reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(class, class, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(class, class, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -246,8 +246,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(const)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', const, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(const)
         listener: handleType(int, null)
@@ -255,7 +255,7 @@
           reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(const, const, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(const, const, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -274,8 +274,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(continue)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', continue, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(continue)
         listener: handleType(int, null)
@@ -283,7 +283,7 @@
           reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(continue, continue, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(continue, continue, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -300,14 +300,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(covariant, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(covariant, covariant, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -326,8 +326,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(default)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', default, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(default)
         listener: handleType(int, null)
@@ -335,7 +335,7 @@
           reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(default, default, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(default, default, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -352,14 +352,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(deferred, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(deferred, deferred, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -378,8 +378,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(do)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', do, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(do)
         listener: handleType(int, null)
@@ -387,7 +387,7 @@
           reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(do, do, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(do, do, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -404,14 +404,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(dynamic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -430,8 +430,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(else)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', else, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(else)
         listener: handleType(int, null)
@@ -439,7 +439,7 @@
           reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(else, else, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(else, else, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -458,8 +458,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(enum)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', enum, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(enum)
         listener: handleType(int, null)
@@ -467,7 +467,7 @@
           reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(enum, enum, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(enum, enum, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -484,14 +484,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(export, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(export, export, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -510,8 +510,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(extends)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', extends, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extends)
         listener: handleType(int, null)
@@ -519,7 +519,7 @@
           reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(extends, extends, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(extends, extends, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -536,14 +536,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', extension, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extension)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(extension, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(extension, extension, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(extension, extension, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -560,14 +560,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(external, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(external, external, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -584,14 +584,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(factory, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(factory, factory, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -610,8 +610,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(false)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', false, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(false)
         listener: handleType(int, null)
@@ -619,7 +619,7 @@
           reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(false, false, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(false, false, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -638,8 +638,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(final)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', final, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(final)
         listener: handleType(int, null)
@@ -647,7 +647,7 @@
           reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(final, final, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(final, final, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -666,8 +666,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(finally)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', finally, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(finally)
         listener: handleType(int, null)
@@ -675,7 +675,7 @@
           reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(finally, finally, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(finally, finally, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -694,8 +694,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(for)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', for, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(for)
         listener: handleType(int, null)
@@ -703,7 +703,7 @@
           reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(for, for, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(for, for, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -720,14 +720,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(Function, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(Function, Function, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -744,14 +744,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(get, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(get, get, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -768,14 +768,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', hide, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(hide)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(hide, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(hide, hide, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(hide, hide, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -794,8 +794,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(if)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', if, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(if)
         listener: handleType(int, null)
@@ -803,7 +803,7 @@
           reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(if, if, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(if, if, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -820,14 +820,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(implements, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(implements, implements, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -844,14 +844,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(import, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(import, import, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -870,8 +870,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(in)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', in, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(in)
         listener: handleType(int, null)
@@ -879,7 +879,7 @@
           reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(in, in, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(in, in, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -896,14 +896,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', inout, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(inout)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(inout, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(inout, inout, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(inout, inout, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -920,14 +920,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(interface, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(interface, interface, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -946,8 +946,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(is)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', is, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(is)
         listener: handleType(int, null)
@@ -955,7 +955,7 @@
           reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(is, is, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(is, is, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -972,14 +972,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', late, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(late)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(late, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -996,14 +996,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(library, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(library, library, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1020,14 +1020,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(mixin, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(mixin, mixin, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1044,14 +1044,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', native, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(native)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(native, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(native, native, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(native, native, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1070,8 +1070,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(new)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', new, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(new)
         listener: handleType(int, null)
@@ -1079,7 +1079,7 @@
           reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(new, new, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(new, new, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1098,8 +1098,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(null)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(null)
         listener: handleType(int, null)
@@ -1107,7 +1107,7 @@
           reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(null, null, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(null, null, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1124,14 +1124,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', of, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(of)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(of, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(of, of, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(of, of, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1148,14 +1148,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', on, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(on)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(on, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(on, on, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(on, on, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1172,14 +1172,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operator, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operator, operator, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1196,14 +1196,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', out, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(out)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(out, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(out, out, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(out, out, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1220,14 +1220,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(part, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(part, part, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1244,14 +1244,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', patch, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(patch)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(patch, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(patch, patch, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(patch, patch, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1268,14 +1268,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', required, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(required)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(required, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(required, required, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1294,8 +1294,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(rethrow)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', rethrow, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(rethrow)
         listener: handleType(int, null)
@@ -1303,7 +1303,7 @@
           reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(rethrow, rethrow, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(rethrow, rethrow, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1322,8 +1322,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(return)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', return, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(return)
         listener: handleType(int, null)
@@ -1331,7 +1331,7 @@
           reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(return, return, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(return, return, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1348,14 +1348,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(set, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(set, set, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1372,14 +1372,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', show, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(show)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(show, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(show, show, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(show, show, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1396,14 +1396,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', source, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(source)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(source, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(source, source, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(source, source, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1420,14 +1420,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(static, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(static, static, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1444,18 +1444,16 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      isReservedKeyword(super)
-      indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', super, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(super)
         listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, true)
+        ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(super, super, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(super, super, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1474,8 +1472,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(switch)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', switch, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(switch)
         listener: handleType(int, null)
@@ -1483,7 +1481,7 @@
           reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(switch, switch, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(switch, switch, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1500,14 +1498,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', sync, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(sync)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(sync, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(sync, sync, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(sync, sync, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1524,8 +1522,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', this, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(this)
         listener: handleType(int, null)
@@ -1533,7 +1531,7 @@
           reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(this, this, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1552,8 +1550,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(throw)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', throw, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(throw)
         listener: handleType(int, null)
@@ -1561,7 +1559,7 @@
           reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(throw, throw, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(throw, throw, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1580,8 +1578,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(true)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', true, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(true)
         listener: handleType(int, null)
@@ -1589,7 +1587,7 @@
           reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(true, true, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(true, true, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1608,8 +1606,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(try)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', try, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(try)
         listener: handleType(int, null)
@@ -1617,7 +1615,7 @@
           reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(try, try, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(try, try, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1634,14 +1632,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typedef, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typedef, typedef, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1660,8 +1658,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(var)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', var, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(var)
         listener: handleType(int, null)
@@ -1669,7 +1667,7 @@
           reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(var, var, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(var, var, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1688,8 +1686,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(void)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', void, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(void)
         listener: handleType(int, null)
@@ -1697,7 +1695,7 @@
           reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(void, void, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(void, void, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1716,8 +1714,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(while)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', while, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(while)
         listener: handleType(int, null)
@@ -1725,7 +1723,7 @@
           reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(while, while, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(while, while, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1744,8 +1742,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(with)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
@@ -1753,7 +1751,7 @@
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(with, with, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1770,14 +1768,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', yield, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(yield)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(yield, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(yield, yield, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(yield, yield, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
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 85b9f18..bd52e60 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
@@ -112,9 +112,9 @@
 }
 ^
 
-parser/error_recovery/keyword_named_top_level_methods:74:1: Expected ';' after this.
-}
-^
+parser/error_recovery/keyword_named_top_level_methods:73:21: Expected ';' after this.
+  return do(x-1) + 1;
+                    ^
 
 parser/error_recovery/keyword_named_top_level_methods:81:5: 'else' can't be used as an identifier because it's a keyword.
 int else(int x) {
@@ -468,7 +468,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(abstract)
       handleType(int, null)
@@ -525,7 +525,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(as)
       handleType(int, null)
@@ -582,7 +582,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(assert)
       handleType(int, null)
@@ -638,7 +638,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(async)
       handleType(int, null)
@@ -695,7 +695,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(await)
       handleType(int, null)
@@ -752,7 +752,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(break)
       handleType(int, null)
@@ -816,7 +816,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(case)
       handleType(int, null)
@@ -875,7 +875,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(catch)
       handleType(int, null)
@@ -934,7 +934,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(class)
       handleType(int, null)
@@ -993,7 +993,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(const)
       handleType(int, null)
@@ -1056,7 +1056,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(continue)
       handleType(int, null)
@@ -1120,7 +1120,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(covariant)
       handleType(int, null)
@@ -1177,7 +1177,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(default)
       handleType(int, null)
@@ -1236,7 +1236,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(deferred)
       handleType(int, null)
@@ -1293,7 +1293,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(do)
       handleType(int, null)
@@ -1359,7 +1359,7 @@
           handleNoArguments())
           handleSend(, ))
           handleParenthesizedCondition(()
-          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+          handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
         endDoWhileStatement(do, while, ;)
       endBlockFunctionBody(3, {, })
     endTopLevelMethod(int, null, })
@@ -1367,7 +1367,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(dynamic)
       handleType(int, null)
@@ -1424,7 +1424,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(else)
       handleType(int, null)
@@ -1493,7 +1493,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(enum)
       handleType(int, null)
@@ -1552,7 +1552,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(export)
       handleType(int, null)
@@ -1609,7 +1609,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(extends)
       handleType(int, null)
@@ -1668,7 +1668,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(extension)
       handleType(int, null)
@@ -1725,7 +1725,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(external)
       handleType(int, null)
@@ -1782,7 +1782,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(factory)
       handleType(int, null)
@@ -1839,7 +1839,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(false)
       handleType(int, null)
@@ -1897,7 +1897,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(final)
       handleType(int, null)
@@ -1983,7 +1983,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(finally)
       handleType(int, null)
@@ -2042,7 +2042,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(for)
       handleType(int, null)
@@ -2121,7 +2121,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(Function)
       handleType(int, null)
@@ -2178,7 +2178,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(get)
       handleType(int, null)
@@ -2235,7 +2235,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(hide)
       handleType(int, null)
@@ -2292,7 +2292,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(if)
       handleType(int, null)
@@ -2362,7 +2362,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(implements)
       handleType(int, null)
@@ -2419,7 +2419,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(import)
       handleType(int, null)
@@ -2476,7 +2476,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(in)
       handleType(int, null)
@@ -2535,7 +2535,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(inout)
       handleType(int, null)
@@ -2592,7 +2592,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(interface)
       handleType(int, null)
@@ -2649,7 +2649,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(is)
       handleType(int, null)
@@ -2717,7 +2717,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(late)
       handleType(int, null)
@@ -2774,7 +2774,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(library)
       handleType(int, null)
@@ -2831,7 +2831,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(mixin)
       handleType(int, null)
@@ -2888,7 +2888,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(native)
       handleType(int, null)
@@ -2945,7 +2945,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(new)
       handleType(int, null)
@@ -3008,7 +3008,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(null)
       handleType(int, null)
@@ -3066,7 +3066,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(of)
       handleType(int, null)
@@ -3123,7 +3123,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(on)
       handleType(int, null)
@@ -3180,7 +3180,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(operator)
       handleType(int, null)
@@ -3237,7 +3237,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(out)
       handleType(int, null)
@@ -3294,7 +3294,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(part)
       handleType(int, null)
@@ -3351,7 +3351,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(patch)
       handleType(int, null)
@@ -3408,7 +3408,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(required)
       handleType(int, null)
@@ -3465,7 +3465,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(rethrow)
       handleType(int, null)
@@ -3524,7 +3524,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(return)
       handleType(int, null)
@@ -3579,7 +3579,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(set)
       handleType(int, null)
@@ -3636,7 +3636,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(show)
       handleType(int, null)
@@ -3693,7 +3693,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(source)
       handleType(int, null)
@@ -3750,7 +3750,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(static)
       handleType(int, null)
@@ -3807,7 +3807,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(super)
       handleType(int, null)
@@ -3865,7 +3865,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(switch)
       handleType(int, null)
@@ -3936,7 +3936,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(sync)
       handleType(int, null)
@@ -3993,7 +3993,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(this)
       handleType(int, null)
@@ -4051,7 +4051,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(throw)
       handleType(int, null)
@@ -4106,7 +4106,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(true)
       handleType(int, null)
@@ -4164,7 +4164,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(try)
       handleType(int, null)
@@ -4231,7 +4231,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(typedef)
       handleType(int, null)
@@ -4288,7 +4288,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(var)
       handleType(int, null)
@@ -4374,7 +4374,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(void)
       handleType(int, null)
@@ -4460,7 +4460,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(while)
       handleType(int, null)
@@ -4530,7 +4530,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(with)
       handleType(int, null)
@@ -4589,7 +4589,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(yield)
       handleType(int, null)
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 bad4dea..21af54c 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, abstract, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', null, abstract, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
@@ -148,8 +148,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, as, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, as, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
@@ -290,8 +290,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(assert)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, assert, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, assert, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(assert)
         listener: handleType(int, null)
@@ -423,8 +423,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, async, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, async, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(async)
         listener: handleType(int, null)
@@ -563,8 +563,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, await, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, await, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(await)
         listener: handleType(int, null)
@@ -708,8 +708,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(break)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, break, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, break, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(break)
         listener: handleType(int, null)
@@ -883,8 +883,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(case)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, case, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, case, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(case)
         listener: handleType(int, null)
@@ -1026,8 +1026,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(catch)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, catch, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, catch, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(catch)
         listener: handleType(int, null)
@@ -1169,8 +1169,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(class)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, class, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, class, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(class)
         listener: handleType(int, null)
@@ -1312,8 +1312,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(const)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, const, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, const, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(const)
         listener: handleType(int, null)
@@ -1460,8 +1460,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(continue)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, continue, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, continue, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(continue)
         listener: handleType(int, null)
@@ -1633,8 +1633,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, covariant, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, covariant, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
@@ -1775,8 +1775,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(default)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, default, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, default, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(default)
         listener: handleType(int, null)
@@ -1916,8 +1916,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, deferred, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, deferred, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
@@ -2058,8 +2058,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(do)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, do, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, do, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(do)
         listener: handleType(int, null)
@@ -2241,8 +2241,8 @@
                     ensureCloseParen(, ()
                   listener: handleParenthesizedCondition(()
                 ensureSemicolon())
-                  reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], }, })
+                  reportRecoverableError(;, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ;, ;)
                   rewriter()
                 listener: endDoWhileStatement(do, while, ;)
           notEofOrValue(}, })
@@ -2255,8 +2255,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, dynamic, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, dynamic, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
@@ -2397,8 +2397,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(else)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, else, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, else, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(else)
         listener: handleType(int, null)
@@ -2590,8 +2590,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(enum)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, enum, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, enum, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(enum)
         listener: handleType(int, null)
@@ -2731,8 +2731,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, export, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, export, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
@@ -2873,8 +2873,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(extends)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, extends, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, extends, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extends)
         listener: handleType(int, null)
@@ -3014,8 +3014,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, extension, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, extension, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(extension)
         listener: handleType(int, null)
@@ -3154,8 +3154,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, external, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, external, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
@@ -3294,8 +3294,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, factory, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, factory, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
@@ -3436,8 +3436,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(false)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, false, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, false, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(false)
         listener: handleType(int, null)
@@ -3574,8 +3574,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(final)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, final, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, final, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(final)
         listener: handleType(int, null)
@@ -3809,8 +3809,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(finally)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, finally, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, finally, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(finally)
         listener: handleType(int, null)
@@ -3952,8 +3952,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(for)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, for, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, for, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(for)
         listener: handleType(int, null)
@@ -4160,8 +4160,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, Function, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, Function, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
@@ -4300,8 +4300,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, get, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, get, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
@@ -4440,8 +4440,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, hide, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, hide, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(hide)
         listener: handleType(int, null)
@@ -4582,8 +4582,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(if)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, if, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, if, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(if)
         listener: handleType(int, null)
@@ -4761,8 +4761,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, implements, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, implements, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
@@ -4901,8 +4901,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, import, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, import, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
@@ -5043,8 +5043,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(in)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, in, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, in, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(in)
         listener: handleType(int, null)
@@ -5184,8 +5184,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, inout, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, inout, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(inout)
         listener: handleType(int, null)
@@ -5324,8 +5324,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, interface, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, interface, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
@@ -5466,8 +5466,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(is)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, is, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, is, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(is)
         listener: handleType(int, null)
@@ -5639,8 +5639,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, late, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, late, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(late)
         listener: handleType(int, null)
@@ -5779,8 +5779,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, library, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, library, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
@@ -5919,8 +5919,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, mixin, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, mixin, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
@@ -6059,8 +6059,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, native, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, native, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(native)
         listener: handleType(int, null)
@@ -6201,8 +6201,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(new)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, new, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, new, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(new)
         listener: handleType(int, null)
@@ -6350,8 +6350,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(null)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, null, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, null, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(null)
         listener: handleType(int, null)
@@ -6486,8 +6486,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, of, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, of, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(of)
         listener: handleType(int, null)
@@ -6626,8 +6626,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, on, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, on, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(on)
         listener: handleType(int, null)
@@ -6766,8 +6766,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, operator, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, operator, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
@@ -6906,8 +6906,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, out, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, out, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(out)
         listener: handleType(int, null)
@@ -7046,8 +7046,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, part, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, part, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
@@ -7186,8 +7186,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, patch, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, patch, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(patch)
         listener: handleType(int, null)
@@ -7326,8 +7326,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, required, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, required, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(required)
         listener: handleType(int, null)
@@ -7468,8 +7468,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(rethrow)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, rethrow, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, rethrow, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(rethrow)
         listener: handleType(int, null)
@@ -7611,8 +7611,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(return)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, return, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, return, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(return)
         listener: handleType(int, null)
@@ -7748,8 +7748,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, set, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, set, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
@@ -7888,8 +7888,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, show, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, show, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(show)
         listener: handleType(int, null)
@@ -8028,8 +8028,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, source, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, source, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(source)
         listener: handleType(int, null)
@@ -8168,8 +8168,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, static, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, static, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
@@ -8308,14 +8308,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      isReservedKeyword(super)
-      indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, super, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, super, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(super)
         listener: handleType(int, null)
-        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
           reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
             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, topLevelFunctionDeclaration)
@@ -8447,8 +8445,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(switch)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, switch, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, switch, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(switch)
         listener: handleType(int, null)
@@ -8635,8 +8633,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, sync, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, sync, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(sync)
         listener: handleType(int, null)
@@ -8775,8 +8773,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, this, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, this, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(this)
         listener: handleType(int, null)
@@ -8912,8 +8910,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(throw)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, throw, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, throw, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(throw)
         listener: handleType(int, null)
@@ -9050,8 +9048,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(true)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, true, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, true, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(true)
         listener: handleType(int, null)
@@ -9188,8 +9186,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(try)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, try, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, try, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(try)
         listener: handleType(int, null)
@@ -9367,8 +9365,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, typedef, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, typedef, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
@@ -9509,8 +9507,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(var)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, var, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, var, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(var)
         listener: handleType(int, null)
@@ -9744,8 +9742,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(void)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, void, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, void, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(void)
         listener: handleType(int, null)
@@ -9980,8 +9978,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(while)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, while, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, while, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(while)
         listener: handleType(int, null)
@@ -10161,8 +10159,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(with)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, with, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, with, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
@@ -10302,8 +10300,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, yield, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, yield, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(yield)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
index 1f1f6e6..953f7ba 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.expect
@@ -436,9 +436,9 @@
 typedef void = void Function();
              ^
 
-parser/error_recovery/keyword_named_typedefs:132:14: Expected ';' after this.
+parser/error_recovery/keyword_named_typedefs:132:9: Expected ';' after this.
 typedef void = void Function();
-             ^
+        ^^^^
 
 parser/error_recovery/keyword_named_typedefs:132:14: Expected a declaration, but got '='.
 typedef void = void Function();
@@ -2219,7 +2219,7 @@
       handleRecoverableError(MissingTypedefParameters, =, =)
       beginFormalParameters((, MemberKind.FunctionTypeAlias)
       endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
-      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
     endTypedef(typedef, null, ;)
   endTopLevelDeclaration(=)
   beginMetadataStar(=)
@@ -2231,7 +2231,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(=, null)
+    beginTopLevelMethod(=, null, null)
       handleVoidKeyword(void)
       handleIdentifier(Function, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
index 93da896..01e1ecf 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_typedefs.dart.intertwined.expect
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -29,7 +28,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -54,7 +52,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -76,7 +73,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -101,7 +97,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -123,7 +118,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -148,7 +142,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -168,7 +161,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -191,7 +183,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -211,7 +202,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -234,7 +224,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -256,7 +245,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -281,7 +269,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -303,7 +290,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -328,7 +314,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -350,7 +335,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -375,7 +359,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -397,7 +380,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -422,7 +404,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -444,7 +425,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -469,7 +449,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -491,7 +470,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -516,7 +494,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -538,7 +515,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -563,7 +539,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -585,7 +560,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -610,7 +584,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -632,7 +605,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -657,7 +629,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -679,7 +650,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -704,7 +674,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -726,7 +695,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -751,7 +719,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -773,7 +740,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -798,7 +764,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -820,7 +785,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -845,7 +809,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -867,7 +830,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -892,7 +854,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -914,7 +875,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -939,7 +899,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -961,7 +920,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -986,7 +944,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1008,7 +965,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1033,7 +989,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1055,7 +1010,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1080,7 +1034,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1102,7 +1055,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1127,7 +1079,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1149,7 +1100,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1174,7 +1124,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1196,7 +1145,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1221,7 +1169,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1243,7 +1190,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1268,7 +1214,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1290,7 +1235,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1315,7 +1259,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1337,7 +1280,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1362,7 +1304,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1382,7 +1323,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1405,7 +1345,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1427,7 +1366,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1452,7 +1390,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1474,7 +1411,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1499,7 +1435,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1521,7 +1456,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1546,7 +1480,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1568,7 +1501,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1593,7 +1525,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1613,7 +1544,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1636,7 +1566,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1658,7 +1587,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1683,7 +1611,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1705,7 +1632,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1730,7 +1656,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1752,7 +1677,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1777,7 +1701,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1799,7 +1722,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1824,7 +1746,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1846,7 +1767,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1871,7 +1791,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1891,7 +1810,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1914,7 +1832,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1936,7 +1853,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1961,7 +1877,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1983,7 +1898,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2008,7 +1922,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2028,7 +1941,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2051,7 +1963,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2071,7 +1982,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2094,7 +2004,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2116,7 +2025,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2141,7 +2049,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2161,7 +2068,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2184,7 +2090,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2206,7 +2111,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2231,7 +2135,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2251,7 +2154,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2274,7 +2176,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2296,7 +2197,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2321,7 +2221,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2343,7 +2242,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2368,7 +2266,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2390,7 +2287,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2415,7 +2311,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2437,7 +2332,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2462,7 +2356,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2482,7 +2375,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2505,7 +2397,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2525,7 +2416,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2548,7 +2438,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2570,7 +2459,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2595,7 +2483,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2617,7 +2504,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2642,7 +2528,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2664,7 +2549,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2689,7 +2573,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2709,7 +2592,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2732,7 +2614,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2754,7 +2635,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2779,7 +2659,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2801,7 +2680,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2826,7 +2704,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2848,7 +2725,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2873,7 +2749,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2895,7 +2770,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2920,7 +2794,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2942,7 +2815,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2967,7 +2839,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -2989,7 +2860,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3014,7 +2884,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3036,7 +2905,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3057,8 +2925,8 @@
             listener: beginFormalParameters((, MemberKind.FunctionTypeAlias)
             listener: endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
         ensureSemicolon())
-          reportRecoverableError((, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
-            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
+          reportRecoverableError(void, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], void, void)
           rewriter()
         listener: endTypedef(typedef, null, ;)
   listener: endTopLevelDeclaration(=)
@@ -3078,8 +2946,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(=)
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(=, null, =, Instance of 'VoidType', null, Function, false)
-        listener: beginTopLevelMethod(=, null)
+      parseTopLevelMethod(=, null, null, =, Instance of 'VoidType', null, Function, false)
+        listener: beginTopLevelMethod(=, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(Function, topLevelFunctionDeclaration)
@@ -3104,7 +2972,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3126,7 +2993,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3151,7 +3017,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3173,7 +3038,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3198,7 +3062,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -3218,7 +3081,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
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 38ec0b6..e2047f3 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
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -40,7 +40,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -58,7 +58,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(with)
             handleType(int, null)
@@ -67,12 +67,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(7)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, with)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -89,7 +89,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, with)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, with)
             handleVoidKeyword(void)
             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, methodDeclaration)
@@ -117,7 +117,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(with)
       handleType(int, null)
@@ -134,7 +134,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(with)
       handleType(int, 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 eaf2a2d..6934455 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -34,8 +33,8 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, with, DeclarationKind.Class, C, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, with)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, with, DeclarationKind.Class, C, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -78,8 +77,8 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, C, true)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.Class, C, true)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
                 listener: handleType(int, null)
@@ -87,7 +86,7 @@
                   reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
                     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, fieldDeclaration)
-                parseFieldInitializerOpt(with, with, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -96,7 +95,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(7)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -106,8 +105,8 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(=>)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, with, DeclarationKind.Class, C, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, with)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, with, DeclarationKind.Class, C, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, with)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -147,8 +146,8 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', set, with, DeclarationKind.Class, C, true)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, with)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', set, with, DeclarationKind.Class, C, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, with)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, true)
                   reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
@@ -198,8 +197,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(with)
       indicatesMethodOrField(()
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, with, true)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, with, true)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
@@ -238,8 +237,8 @@
       listener: beginTopLevelMember(int)
       isReservedKeyword(with)
       indicatesMethodOrField(=)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', with, DeclarationKind.TopLevel, null, true)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(with)
         listener: handleType(int, null)
@@ -247,7 +246,7 @@
           reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
             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, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(with, with, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
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 ce905c8..5eeaf82 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, With)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, With)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(With)
             handleType(int, null)
@@ -31,7 +31,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(With)
             handleType(int, null)
@@ -39,12 +39,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(7)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, With)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, With)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -60,7 +60,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, With)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, With)
             handleVoidKeyword(void)
             handleIdentifier(With, methodDeclaration)
             handleNoTypeVariables(()
@@ -87,7 +87,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(With)
       handleType(int, null)
@@ -103,7 +103,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(With)
       handleType(int, 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 74b3c11..e653b4e 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, With, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, With)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, With, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, With)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(With)
                 listener: handleType(int, null)
@@ -72,14 +71,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(With)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(With, fieldDeclaration)
-                parseFieldInitializerOpt(With, With, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(With, With, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -88,7 +87,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(7)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -96,8 +95,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, With, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, With)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, With, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, With)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -133,8 +132,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', set, With, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, With)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', set, With, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, With)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(With, methodDeclaration)
@@ -180,8 +179,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, With, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, With, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(With)
         listener: handleType(int, null)
@@ -216,14 +215,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', With, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(With)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(With, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(With, With, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(With, With, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
index fe1e36e..afef61e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.expect
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -39,7 +39,7 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
       handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
       handleNoType(})
       handleIdentifier(foo, topLevelVariableDeclaration)
@@ -52,7 +52,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(M1, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, M1)
+    beginClassDeclaration(class, null, null, null, M1)
       handleNoType(M1)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -62,13 +62,13 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
             handleNoType({)
             handleIdentifier(foo, fieldDeclaration)
             handleNoFieldInitializer(class)
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], foo, foo)
-          endClassFields(null, null, null, null, null, null, 1, foo, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, foo, ;)
         endMember()
         beginMetadataStar(class)
         endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
index 86fc4d7..8d8ff43 100644
--- a/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/method_called_with_prime2.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
@@ -38,14 +37,14 @@
       listener: beginTopLevelMember(foo)
       isReservedKeyword(class)
       indicatesMethodOrField(M1)
-      parseFields(}, null, null, null, null, null, null, }, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, })
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
         reportRecoverableError(foo, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
           listener: handleIdentifier(foo, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(foo, foo, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(foo, foo, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(class)
         ensureSemicolon(foo)
           reportRecoverableError(foo, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -58,13 +57,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(M1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, M1)
+        listener: beginClassDeclaration(class, null, null, null, M1)
         parseClass(M1, class, class, M1)
           parseClassHeaderOpt(M1, class, class)
             parseClassExtendsOpt(M1)
@@ -85,20 +83,20 @@
               listener: beginMember()
               isReservedKeyword(class)
               indicatesMethodOrField(M2)
-              parseFields({, null, null, null, null, null, null, {, Instance of 'NoType', foo, DeclarationKind.Class, M1, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'NoType', foo, DeclarationKind.Class, M1, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 reportRecoverableError(foo, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, foo, foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, fieldDeclaration, false)
                   listener: handleIdentifier(foo, fieldDeclaration)
-                parseFieldInitializerOpt(foo, foo, null, null, null, null, DeclarationKind.Class, M1)
+                parseFieldInitializerOpt(foo, foo, null, null, null, null, null, DeclarationKind.Class, M1)
                   listener: handleNoFieldInitializer(class)
                 ensureSemicolon(foo)
                   reportRecoverableError(foo, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], foo, foo)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, 1, foo, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, foo, ;)
               listener: endMember()
             notEofOrValue(}, class)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, M1)
@@ -106,7 +104,7 @@
                 listener: beginMetadataStar(class)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, M1)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, M1)
                 reportAndSkipClassInClass(class)
                   reportRecoverableError(class, ClassInClass)
                     listener: handleRecoverableError(ClassInClass, class, class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
index 0e96030..423eb50 100644
--- a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
@@ -392,7 +392,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
index 8db03b1..50019dd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 7790834..3af857b 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 d506c5a..a2da381 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
@@ -28,14 +28,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(C)
-      parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
+      parseFields(/, null, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, /)
         listener: handleIdentifier(C, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(C, null)
         ensureIdentifierPotentiallyRecovered(C, topLevelVariableDeclaration, false)
           listener: handleIdentifier(o, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(o, o, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(o, o, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(p)
         ensureSemicolon(o)
           reportRecoverableError(o, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -49,14 +49,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(p)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(p, typeReference)
         listener: handleNoTypeArguments(y)
         listener: handleType(p, null)
         ensureIdentifierPotentiallyRecovered(p, topLevelVariableDeclaration, false)
           listener: handleIdentifier(y, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(r)
         ensureSemicolon(y)
           reportRecoverableError(y, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -70,14 +70,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(r, null)
         ensureIdentifierPotentiallyRecovered(r, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i, i, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i, i, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(g)
         ensureSemicolon(i)
           reportRecoverableError(i, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -91,14 +91,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(g)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(g, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(g, null)
         ensureIdentifierPotentiallyRecovered(g, topLevelVariableDeclaration, false)
           listener: handleIdentifier(h, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(h, h, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(h, h, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(t)
         ensureSemicolon(h)
           reportRecoverableError(h, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -113,8 +113,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, t, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, t, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(t, topLevelFunctionDeclaration)
@@ -204,14 +204,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(,)
       listener: beginTopLevelMember(t)
-      parseFields(,, null, null, null, null, null, null, ,, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ,)
+      parseFields(,, null, null, null, null, null, null, null, ,, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ,)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
         ensureIdentifierPotentiallyRecovered(t, topLevelVariableDeclaration, false)
           listener: handleIdentifier(h, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(h, h, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(h, h, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(h)
           reportRecoverableError(h, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -225,14 +225,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', D, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', D, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(D)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(D, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(D, D, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(D, D, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(a)
         ensureSemicolon(D)
           reportRecoverableError(D, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -246,14 +246,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(a, null)
         ensureIdentifierPotentiallyRecovered(a, topLevelVariableDeclaration, false)
           listener: handleIdentifier(r, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(t)
         ensureSemicolon(r)
           reportRecoverableError(r, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -267,14 +267,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', p, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', p, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(p)
         listener: handleType(t, null)
         ensureIdentifierPotentiallyRecovered(t, topLevelVariableDeclaration, false)
           listener: handleIdentifier(p, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(p, p, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(p, p, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(r)
         ensureSemicolon(p)
           reportRecoverableError(p, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -288,14 +288,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(r, null)
         ensureIdentifierPotentiallyRecovered(r, topLevelVariableDeclaration, false)
           listener: handleIdentifier(o, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(o, o, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(o, o, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(j)
         ensureSemicolon(o)
           reportRecoverableError(o, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -309,14 +309,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(j)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(j, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(j, null)
         ensureIdentifierPotentiallyRecovered(j, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(c)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -330,14 +330,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(c)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(c, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(c, null)
         ensureIdentifierPotentiallyRecovered(c, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(a)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -351,14 +351,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(a, null)
         ensureIdentifierPotentiallyRecovered(a, topLevelVariableDeclaration, false)
           listener: handleIdentifier(u, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(u, u, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(u, u, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(t)
         ensureSemicolon(u)
           reportRecoverableError(u, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -372,14 +372,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
         ensureIdentifierPotentiallyRecovered(t, topLevelVariableDeclaration, false)
           listener: handleIdentifier(h, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(h, h, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(h, h, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(o)
         ensureSemicolon(h)
           reportRecoverableError(h, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -393,14 +393,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(o, null)
         ensureIdentifierPotentiallyRecovered(o, topLevelVariableDeclaration, false)
           listener: handleIdentifier(r, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(r)
           reportRecoverableError(r, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -414,8 +414,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'PrefixedType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'PrefixedType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, prefixedTypeReference)
         listener: handleIdentifier(P, typeReferenceContinuation)
         listener: handleQualified(.)
@@ -423,7 +423,7 @@
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(P, topLevelVariableDeclaration, false)
           listener: handleIdentifier(l, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(l)
           reportRecoverableError(l, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -437,14 +437,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(a)
           reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -458,14 +458,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -479,14 +479,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -500,14 +500,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(h)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -521,14 +521,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(h, null)
         ensureIdentifierPotentiallyRecovered(h, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(A)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -542,14 +542,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(A)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(A, typeReference)
         listener: handleNoTypeArguments(U)
         listener: handleType(A, null)
         ensureIdentifierPotentiallyRecovered(A, topLevelVariableDeclaration, false)
           listener: handleIdentifier(U, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(U, U, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(U, U, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(T)
         ensureSemicolon(U)
           reportRecoverableError(U, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -563,14 +563,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(T)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', H, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', H, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(H)
         listener: handleType(T, null)
         ensureIdentifierPotentiallyRecovered(T, topLevelVariableDeclaration, false)
           listener: handleIdentifier(H, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(H, H, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(H, H, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(O)
         ensureSemicolon(H)
           reportRecoverableError(H, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -584,14 +584,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(O)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', R, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', R, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(O, typeReference)
         listener: handleNoTypeArguments(R)
         listener: handleType(O, null)
         ensureIdentifierPotentiallyRecovered(O, topLevelVariableDeclaration, false)
           listener: handleIdentifier(R, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(R, R, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(R, R, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(S)
         ensureSemicolon(R)
           reportRecoverableError(R, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -605,14 +605,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(S)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(S, typeReference)
         listener: handleNoTypeArguments(f)
         listener: handleType(S, null)
         ensureIdentifierPotentiallyRecovered(S, topLevelVariableDeclaration, false)
           listener: handleIdentifier(f, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f, f, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(f)
           reportRecoverableError(f, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -626,14 +626,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(i, null)
         ensureIdentifierPotentiallyRecovered(i, topLevelVariableDeclaration, false)
           listener: handleIdentifier(l, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(l)
           reportRecoverableError(l, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -648,14 +648,14 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
       isReservedKeyword(/)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         reportRecoverableError(e, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, e, e)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(/)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -689,14 +689,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(f)
-      parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
+      parseFields(/, null, null, null, null, null, null, null, /, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, /)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(f, null)
         ensureIdentifierPotentiallyRecovered(f, topLevelVariableDeclaration, false)
           listener: handleIdentifier(o, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(o, o, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(o, o, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(r)
         ensureSemicolon(o)
           reportRecoverableError(o, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -710,14 +710,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(r, null)
         ensureIdentifierPotentiallyRecovered(r, topLevelVariableDeclaration, false)
           listener: handleIdentifier(d, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(d, d, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(d, d, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(d)
           reportRecoverableError(d, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -731,14 +731,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(a)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -752,14 +752,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(a, null)
         ensureIdentifierPotentiallyRecovered(a, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i, i, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i, i, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(l)
         ensureSemicolon(i)
           reportRecoverableError(i, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -773,8 +773,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleType', null, s, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleType', null, s, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(l, null)
@@ -819,14 +819,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(A)
-      parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+      parseFields(., null, null, null, null, null, null, null, ., Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
         listener: handleIdentifier(A, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(A, null)
         ensureIdentifierPotentiallyRecovered(A, topLevelVariableDeclaration, false)
           listener: handleIdentifier(l, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(l)
         ensureSemicolon(l)
           reportRecoverableError(l, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -840,14 +840,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(l, null)
         ensureIdentifierPotentiallyRecovered(l, topLevelVariableDeclaration, false)
           listener: handleIdentifier(r, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(r)
           reportRecoverableError(r, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -861,14 +861,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(g)
         listener: handleType(i, null)
         ensureIdentifierPotentiallyRecovered(i, topLevelVariableDeclaration, false)
           listener: handleIdentifier(g, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(g, g, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(g, g, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(h)
         ensureSemicolon(g)
           reportRecoverableError(g, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -882,14 +882,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(h, null)
         ensureIdentifierPotentiallyRecovered(h, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -903,14 +903,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(r, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(r)
           reportRecoverableError(r, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -924,14 +924,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(s, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(s, s, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(s, s, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(s)
           reportRecoverableError(s, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -945,14 +945,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(r, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(v)
         ensureSemicolon(r)
           reportRecoverableError(r, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -966,14 +966,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(v)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(v, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(v, null)
         ensureIdentifierPotentiallyRecovered(v, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(d)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -987,8 +987,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'PrefixedType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'PrefixedType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(d, prefixedTypeReference)
         listener: handleIdentifier(U, typeReferenceContinuation)
         listener: handleQualified(.)
@@ -996,7 +996,7 @@
         listener: handleType(d, null)
         ensureIdentifierPotentiallyRecovered(U, topLevelVariableDeclaration, false)
           listener: handleIdentifier(s, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(s, s, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(s, s, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(s)
           reportRecoverableError(s, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1010,14 +1010,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', o, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(o)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(o, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(o, o, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(o, o, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(f)
         ensureSemicolon(o)
           reportRecoverableError(o, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1031,14 +1031,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(f, null)
         ensureIdentifierPotentiallyRecovered(f, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(h)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1052,14 +1052,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(h)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(h, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(h, null)
         ensureIdentifierPotentiallyRecovered(h, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i, i, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i, i, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(i)
           reportRecoverableError(i, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1073,14 +1073,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(s, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(s, s, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(s, s, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(o)
         ensureSemicolon(s)
           reportRecoverableError(s, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1094,14 +1094,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(o, null)
         ensureIdentifierPotentiallyRecovered(o, topLevelVariableDeclaration, false)
           listener: handleIdentifier(u, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(u, u, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(u, u, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(r)
         ensureSemicolon(u)
           reportRecoverableError(u, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1115,14 +1115,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(r)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(r, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(r, null)
         ensureIdentifierPotentiallyRecovered(r, topLevelVariableDeclaration, false)
           listener: handleIdentifier(c, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(c, c, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(c, c, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(c)
           reportRecoverableError(c, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1136,14 +1136,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(c, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(c, c, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(c, c, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(o)
         ensureSemicolon(c)
           reportRecoverableError(c, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1157,14 +1157,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(o, null)
         ensureIdentifierPotentiallyRecovered(o, topLevelVariableDeclaration, false)
           listener: handleIdentifier(d, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(d, d, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(d, d, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(d)
           reportRecoverableError(d, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1178,14 +1178,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i, i, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i, i, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(i)
           reportRecoverableError(i, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1199,14 +1199,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', g, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(g)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(g, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(g, g, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(g, g, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(o)
         ensureSemicolon(g)
           reportRecoverableError(g, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1220,14 +1220,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', v, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', v, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(v)
         listener: handleType(o, null)
         ensureIdentifierPotentiallyRecovered(o, topLevelVariableDeclaration, false)
           listener: handleIdentifier(v, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(v, v, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(v, v, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(v)
           reportRecoverableError(v, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1241,14 +1241,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(r)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(r, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(n)
         ensureSemicolon(r)
           reportRecoverableError(r, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1262,14 +1262,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(n, null)
         ensureIdentifierPotentiallyRecovered(n, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(d)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1283,14 +1283,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(d, typeReference)
         listener: handleNoTypeArguments(b)
         listener: handleType(d, null)
         ensureIdentifierPotentiallyRecovered(d, topLevelVariableDeclaration, false)
           listener: handleIdentifier(b, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(b, b, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(b, b, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(y)
         ensureSemicolon(b)
           reportRecoverableError(b, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1304,14 +1304,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(y)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(y, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(y, null)
         ensureIdentifierPotentiallyRecovered(y, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(/)
         ensureSemicolon(a)
           reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1345,14 +1345,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(B)
-      parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', S, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
+      parseFields(/, null, null, null, null, null, null, null, /, Instance of 'SimpleType', S, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, /)
         listener: handleIdentifier(B, typeReference)
         listener: handleNoTypeArguments(S)
         listener: handleType(B, null)
         ensureIdentifierPotentiallyRecovered(B, topLevelVariableDeclaration, false)
           listener: handleIdentifier(S, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(S, S, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(S, S, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(D)
         ensureSemicolon(S)
           reportRecoverableError(S, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1367,14 +1367,14 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(D)
       isReservedKeyword(-)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', D, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', D, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         reportRecoverableError(D, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, D, D)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelVariableDeclaration, false)
           listener: handleIdentifier(D, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(D, D, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(D, D, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(-)
         ensureSemicolon(D)
           reportRecoverableError(D, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1398,14 +1398,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(-)
       listener: beginTopLevelMember(s)
-      parseFields(-, null, null, null, null, null, null, -, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, -)
+      parseFields(-, null, null, null, null, null, null, null, -, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, -)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(y)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1419,14 +1419,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(y)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(y, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(y, null)
         ensureIdentifierPotentiallyRecovered(y, topLevelVariableDeclaration, false)
           listener: handleIdentifier(l, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(l)
           reportRecoverableError(l, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1440,14 +1440,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', l, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(l)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(l, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(l)
           reportRecoverableError(l, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1461,14 +1461,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', c, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(c)
         listener: handleType(i, null)
         ensureIdentifierPotentiallyRecovered(i, topLevelVariableDeclaration, false)
           listener: handleIdentifier(c, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(c, c, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(c, c, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(c)
           reportRecoverableError(c, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1482,14 +1482,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(n, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(n, n, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(n, n, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(n)
           reportRecoverableError(n, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1503,14 +1503,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(t)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1524,14 +1524,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
         ensureIdentifierPotentiallyRecovered(t, topLevelVariableDeclaration, false)
           listener: handleIdentifier(h, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(h, h, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(h, h, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(a)
         ensureSemicolon(h)
           reportRecoverableError(h, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1545,14 +1545,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(a)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', t, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(a, typeReference)
         listener: handleNoTypeArguments(t)
         listener: handleType(a, null)
         ensureIdentifierPotentiallyRecovered(a, topLevelVariableDeclaration, false)
           listener: handleIdentifier(t, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(t, t, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(t, t, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(c)
         ensureSemicolon(t)
           reportRecoverableError(t, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1566,14 +1566,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(c)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(c, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(c, null)
         ensureIdentifierPotentiallyRecovered(c, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(n)
         ensureSemicolon(a)
           reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1587,14 +1587,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', b, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(b)
         listener: handleType(n, null)
         ensureIdentifierPotentiallyRecovered(n, topLevelVariableDeclaration, false)
           listener: handleIdentifier(b, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(b, b, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(b, b, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(b)
           reportRecoverableError(b, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1608,14 +1608,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', f, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(f)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(f, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f, f, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(o)
         ensureSemicolon(f)
           reportRecoverableError(f, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1629,14 +1629,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(o)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', u, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(o, typeReference)
         listener: handleNoTypeArguments(u)
         listener: handleType(o, null)
         ensureIdentifierPotentiallyRecovered(o, topLevelVariableDeclaration, false)
           listener: handleIdentifier(u, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(u, u, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(u, u, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(n)
         ensureSemicolon(u)
           reportRecoverableError(u, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1650,14 +1650,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(n)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(n, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(n, null)
         ensureIdentifierPotentiallyRecovered(n, topLevelVariableDeclaration, false)
           listener: handleIdentifier(d, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(d, d, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(d, d, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(d)
           reportRecoverableError(d, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1671,14 +1671,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', n, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(i, null)
         ensureIdentifierPotentiallyRecovered(i, topLevelVariableDeclaration, false)
           listener: handleIdentifier(n, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(n, n, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(n, n, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(t)
         ensureSemicolon(n)
           reportRecoverableError(n, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1692,14 +1692,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(t)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(t, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(t, null)
         ensureIdentifierPotentiallyRecovered(t, topLevelVariableDeclaration, false)
           listener: handleIdentifier(h, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(h, h, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(h, h, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(e)
         ensureSemicolon(h)
           reportRecoverableError(h, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1713,14 +1713,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(e)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', L, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', L, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(e, typeReference)
         listener: handleNoTypeArguments(L)
         listener: handleType(e, null)
         ensureIdentifierPotentiallyRecovered(e, topLevelVariableDeclaration, false)
           listener: handleIdentifier(L, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(L, L, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(L, L, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(I)
         ensureSemicolon(L)
           reportRecoverableError(L, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1734,14 +1734,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(I)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', C, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', C, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(I, typeReference)
         listener: handleNoTypeArguments(C)
         listener: handleType(I, null)
         ensureIdentifierPotentiallyRecovered(I, topLevelVariableDeclaration, false)
           listener: handleIdentifier(C, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(C, C, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(C, C, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(E)
         ensureSemicolon(C)
           reportRecoverableError(C, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1755,14 +1755,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(E)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', N, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', N, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(E, typeReference)
         listener: handleNoTypeArguments(N)
         listener: handleType(E, null)
         ensureIdentifierPotentiallyRecovered(E, topLevelVariableDeclaration, false)
           listener: handleIdentifier(N, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(N, N, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(N, N, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(S)
         ensureSemicolon(N)
           reportRecoverableError(N, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1776,8 +1776,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(S)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleType', null, E, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleType', null, E, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(S, typeReference)
         listener: handleNoTypeArguments(E)
         listener: handleType(S, null)
@@ -1822,14 +1822,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(m)
-      parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+      parseFields(., null, null, null, null, null, null, null, ., Instance of 'SimpleType', d, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
         listener: handleIdentifier(m, typeReference)
         listener: handleNoTypeArguments(d)
         listener: handleType(m, null)
         ensureIdentifierPotentiallyRecovered(m, topLevelVariableDeclaration, false)
           listener: handleIdentifier(d, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(d, d, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(d, d, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(f)
         ensureSemicolon(d)
           reportRecoverableError(d, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1843,14 +1843,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(f, null)
         ensureIdentifierPotentiallyRecovered(f, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i, i, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i, i, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(l)
         ensureSemicolon(i)
           reportRecoverableError(i, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1864,8 +1864,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleType', null, e, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleType', null, e, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(l, null)
@@ -1930,14 +1930,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(/)
       listener: beginTopLevelMember(T)
-      parseFields(/, null, null, null, null, null, null, /, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, /)
+      parseFields(/, null, null, null, null, null, null, null, /, Instance of 'SimpleType', h, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, /)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(h)
         listener: handleType(T, null)
         ensureIdentifierPotentiallyRecovered(T, topLevelVariableDeclaration, false)
           listener: handleIdentifier(h, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(h, h, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(h, h, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(h)
           reportRecoverableError(h, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1951,14 +1951,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(i, null)
         ensureIdentifierPotentiallyRecovered(i, topLevelVariableDeclaration, false)
           listener: handleIdentifier(s, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(s, s, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(s, s, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(f)
         ensureSemicolon(s)
           reportRecoverableError(s, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1972,14 +1972,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(f)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', i, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(f, typeReference)
         listener: handleNoTypeArguments(i)
         listener: handleType(f, null)
         ensureIdentifierPotentiallyRecovered(f, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i, i, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i, i, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(l)
         ensureSemicolon(i)
           reportRecoverableError(i, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -1993,14 +1993,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(l)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(l, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(l, null)
         ensureIdentifierPotentiallyRecovered(l, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2014,14 +2014,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', s, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(s)
         listener: handleType(i, null)
         ensureIdentifierPotentiallyRecovered(i, topLevelVariableDeclaration, false)
           listener: handleIdentifier(s, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(s, s, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(s, s, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(s)
           reportRecoverableError(s, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2035,14 +2035,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(v)
         ensureSemicolon(a)
           reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2056,14 +2056,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(v)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', e, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(v, typeReference)
         listener: handleNoTypeArguments(e)
         listener: handleType(v, null)
         ensureIdentifierPotentiallyRecovered(v, topLevelVariableDeclaration, false)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(d)
         ensureSemicolon(e)
           reportRecoverableError(e, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2077,14 +2077,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(d)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(d, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(d, null)
         ensureIdentifierPotentiallyRecovered(d, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(s)
         ensureSemicolon(a)
           reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2098,14 +2098,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(s)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', U, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(s, typeReference)
         listener: handleNoTypeArguments(U)
         listener: handleType(s, null)
         ensureIdentifierPotentiallyRecovered(s, topLevelVariableDeclaration, false)
           listener: handleIdentifier(U, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(U, U, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(U, U, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(T)
         ensureSemicolon(U)
           reportRecoverableError(U, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2119,14 +2119,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(T)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', F, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', F, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(T, typeReference)
         listener: handleNoTypeArguments(F)
         listener: handleType(T, null)
         ensureIdentifierPotentiallyRecovered(T, topLevelVariableDeclaration, false)
           listener: handleIdentifier(F, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(F, F, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(F, F, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(-)
         ensureSemicolon(F)
           reportRecoverableError(F, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2170,8 +2170,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(6)
       listener: beginTopLevelMember(L)
-      parseTopLevelMethod(6, null, 6, Instance of 'SimpleType', null, E, false)
-        listener: beginTopLevelMethod(6, null)
+      parseTopLevelMethod(6, null, null, 6, Instance of 'SimpleType', null, E, false)
+        listener: beginTopLevelMethod(6, null, null)
         listener: handleIdentifier(L, typeReference)
         listener: handleNoTypeArguments(E)
         listener: handleType(L, null)
@@ -2216,14 +2216,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(m)
-      parseFields(., null, null, null, null, null, null, ., Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+      parseFields(., null, null, null, null, null, null, null, ., Instance of 'SimpleType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
         listener: handleIdentifier(m, typeReference)
         listener: handleNoTypeArguments(a)
         listener: handleType(m, null)
         ensureIdentifierPotentiallyRecovered(m, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(i)
         ensureSemicolon(a)
           reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
@@ -2237,8 +2237,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(i)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleType', null, n, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleType', null, n, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(i, typeReference)
         listener: handleNoTypeArguments(n)
         listener: handleType(i, null)
diff --git a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect
index 4013553..2eaade3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(Future)
   endMetadataStar(0)
   beginTopLevelMember(Future)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Future, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
@@ -38,7 +38,7 @@
   beginMetadataStar(List)
   endMetadataStar(0)
   beginTopLevelMember(List)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleIdentifier(List, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
index 0de9b98..73a9892 100644
--- a/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/yield_not_in_generator.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Future)
-      parseTopLevelMethod(, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleTypeWith1Argument', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Future, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
@@ -76,8 +76,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(List)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleTypeWith1Argument', null, g, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleTypeWith1Argument', null, g, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(List, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
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 3f37bf0..1744160 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -27,7 +27,7 @@
         beginMetadataStar(method)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, null, method)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, method)
             handleNoType({)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
@@ -45,7 +45,7 @@
   beginMetadataStar(test)
   endMetadataStar(0)
   beginTopLevelMember(test)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 39d1b6c..ddf7ace 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,7 +34,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
@@ -53,8 +51,8 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, method, DeclarationKind.Extension, type, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, method)
+            parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, method, DeclarationKind.Extension, type, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, method)
               listener: handleNoType({)
               ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                 listener: handleIdentifier(method, methodDeclaration)
@@ -89,8 +87,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(test)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, test, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, test, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.expect b/pkg/front_end/parser_testcases/extension_type.dart.expect
index 2eb3be8..316dfd7 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
index e59e494..b1af445 100644
--- a/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_type.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,7 +34,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
index 01e24a9..f37431c 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
@@ -50,7 +50,7 @@
         beginMetadataStar(addChild)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild)
             handleNoType({)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
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 1394b80..835d04c 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,13 +34,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -66,7 +64,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
@@ -84,8 +81,8 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
+            parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild)
               listener: handleNoType({)
               ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
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 9f907a0..7c25b4ce 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
@@ -44,7 +44,7 @@
         beginMetadataStar(addChild)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild)
             handleNoType({)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
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 fa98447..d0869ba 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,13 +34,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -66,7 +64,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
@@ -84,8 +81,8 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, addChild)
+            parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild)
               listener: handleNoType({)
               ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.expect b/pkg/front_end/parser_testcases/extensions/static.dart.expect
index cb69c93..932e894 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
@@ -44,7 +44,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild)
             handleNoType(static)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
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 ac55bc5..57ce9e6 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,13 +34,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -66,7 +64,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
@@ -84,8 +81,8 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod({, null, null, static, null, null, null, static, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
+            parseMethod({, null, null, null, static, null, null, null, static, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
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 8efa048..3224be6 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -25,7 +25,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleIdentifier(A, typeReference)
       handleNoTypeArguments({)
       handleType(A, null)
@@ -50,7 +50,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
+          beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild)
             handleNoType(static)
             handleIdentifier(addChild, methodDeclaration)
             handleNoTypeVariables(()
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 ef95892..f23594f 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -35,13 +34,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -66,7 +64,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
@@ -84,8 +81,8 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod({, null, null, static, null, null, null, static, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
-              listener: beginMethod(DeclarationKind.Extension, null, static, null, null, null, addChild)
+            parseMethod({, null, null, null, static, null, null, null, static, Instance of 'NoType', null, addChild, DeclarationKind.Extension, null, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
                 listener: handleIdentifier(addChild, methodDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
index ad7134a..97f7555 100644
--- a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.expect
@@ -36,7 +36,7 @@
   beginMetadataStar(x)
   endMetadataStar(0)
   beginTopLevelMember(x)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(x, topLevelFunctionDeclaration)
       handleNoTypeVariables(.)
@@ -57,7 +57,7 @@
   beginMetadataStar(y)
   endMetadataStar(0)
   beginTopLevelMember(y)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
       handleRecoverableError(MissingConstFinalVarOrType, y, y)
       handleNoType(.)
       handleIdentifier(y, topLevelVariableDeclaration)
@@ -69,7 +69,7 @@
   beginMetadataStar(x)
   endMetadataStar(0)
   beginTopLevelMember(x)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(x, topLevelFunctionDeclaration)
       handleNoTypeVariables(.)
@@ -90,7 +90,7 @@
   beginMetadataStar(z)
   endMetadataStar(0)
   beginTopLevelMember(z)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
       handleRecoverableError(MissingConstFinalVarOrType, z, z)
       handleNoType(.)
       handleIdentifier(z, topLevelVariableDeclaration)
@@ -102,7 +102,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
index 029957f..7bf2cf8 100644
--- a/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/ambiguous_builder_01.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(x)
       isReservedKeyword(.)
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, x, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, x, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(x, topLevelFunctionDeclaration)
@@ -54,14 +54,14 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(y)
       isReservedKeyword(=)
-      parseFields(., null, null, null, null, null, null, ., Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+      parseFields(., null, null, null, null, null, null, null, ., Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
         reportRecoverableError(y, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, y, y)
         listener: handleNoType(.)
         ensureIdentifierPotentiallyRecovered(., topLevelVariableDeclaration, false)
           listener: handleIdentifier(y, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -79,8 +79,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(x)
       isReservedKeyword(.)
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, x, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, x, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(x, topLevelFunctionDeclaration)
@@ -124,14 +124,14 @@
     parseTopLevelMemberImpl(.)
       listener: beginTopLevelMember(z)
       isReservedKeyword(=)
-      parseFields(., null, null, null, null, null, null, ., Instance of 'NoType', z, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, .)
+      parseFields(., null, null, null, null, null, null, null, ., Instance of 'NoType', z, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, .)
         reportRecoverableError(z, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, z, z)
         listener: handleNoType(.)
         ensureIdentifierPotentiallyRecovered(., topLevelVariableDeclaration, false)
           listener: handleIdentifier(z, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(z, z, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(z, z, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -148,8 +148,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, foo, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, foo, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/assignment.dart.expect b/pkg/front_end/parser_testcases/general/assignment.dart.expect
index 793fb9e..78fc80b 100644
--- a/pkg/front_end/parser_testcases/general/assignment.dart.expect
+++ b/pkg/front_end/parser_testcases/general/assignment.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/assignment.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/assignment.dart.intertwined.expect
index 6595c40..0005bed 100644
--- a/pkg/front_end/parser_testcases/general/assignment.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/assignment.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
index c8d6b3b..83fb2b4 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -22,12 +22,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -35,12 +35,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -48,12 +48,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -61,12 +61,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -74,12 +74,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -87,12 +87,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -100,12 +100,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -113,12 +113,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -126,12 +126,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -139,12 +139,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -152,12 +152,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -165,12 +165,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -178,12 +178,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -191,12 +191,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -204,12 +204,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -217,12 +217,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -230,12 +230,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -243,12 +243,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -256,12 +256,12 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, null)
@@ -269,7 +269,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
index 1ec01c0..8f9f913 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_class_fields.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
@@ -32,14 +31,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(abstract, fieldDeclaration)
-                parseFieldInitializerOpt(abstract, abstract, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -48,7 +47,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -56,14 +55,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(as, fieldDeclaration)
-                parseFieldInitializerOpt(as, as, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -72,7 +71,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -80,14 +79,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(covariant, fieldDeclaration)
-                parseFieldInitializerOpt(covariant, covariant, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -96,7 +95,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -104,14 +103,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(deferred, fieldDeclaration)
-                parseFieldInitializerOpt(deferred, deferred, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -120,7 +119,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -128,14 +127,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(dynamic, fieldDeclaration)
-                parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -144,7 +143,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -152,14 +151,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(export, fieldDeclaration)
-                parseFieldInitializerOpt(export, export, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -168,7 +167,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -176,14 +175,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(external, fieldDeclaration)
-                parseFieldInitializerOpt(external, external, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -192,7 +191,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -200,14 +199,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(factory, fieldDeclaration)
-                parseFieldInitializerOpt(factory, factory, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -216,7 +215,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -224,14 +223,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(Function, fieldDeclaration)
-                parseFieldInitializerOpt(Function, Function, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -240,7 +239,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -249,14 +248,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(get, fieldDeclaration)
-                parseFieldInitializerOpt(get, get, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -265,7 +264,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -273,14 +272,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(implements, fieldDeclaration)
-                parseFieldInitializerOpt(implements, implements, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -289,7 +288,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -297,14 +296,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(import, fieldDeclaration)
-                parseFieldInitializerOpt(import, import, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -313,7 +312,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -321,14 +320,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(interface, fieldDeclaration)
-                parseFieldInitializerOpt(interface, interface, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -337,7 +336,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -345,14 +344,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(library, fieldDeclaration)
-                parseFieldInitializerOpt(library, library, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -361,7 +360,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -370,14 +369,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isUnaryMinus(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(operator, fieldDeclaration)
-                parseFieldInitializerOpt(operator, operator, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -386,7 +385,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -394,14 +393,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(mixin, fieldDeclaration)
-                parseFieldInitializerOpt(mixin, mixin, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -410,7 +409,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -418,14 +417,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(part, fieldDeclaration)
-                parseFieldInitializerOpt(part, part, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -434,7 +433,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -443,14 +442,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(set, fieldDeclaration)
-                parseFieldInitializerOpt(set, set, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -459,7 +458,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -467,14 +466,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(static, fieldDeclaration)
-                parseFieldInitializerOpt(static, static, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -483,7 +482,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -491,14 +490,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(typedef, fieldDeclaration)
-                parseFieldInitializerOpt(typedef, typedef, null, null, null, null, DeclarationKind.Class, WrapperClass)
+                parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -507,7 +506,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
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 b89c4ab..65c4451 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(WrapperClass, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, WrapperClass)
+    beginClassDeclaration(class, null, null, null, WrapperClass)
       handleNoType(WrapperClass)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(abstract)
             handleType(int, null)
@@ -69,7 +69,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(as)
             handleType(int, null)
@@ -124,7 +124,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(covariant)
             handleType(int, null)
@@ -179,7 +179,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(deferred)
             handleType(int, null)
@@ -234,7 +234,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(dynamic)
             handleType(int, null)
@@ -289,7 +289,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(export)
             handleType(int, null)
@@ -344,7 +344,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(external)
             handleType(int, null)
@@ -399,7 +399,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(factory)
             handleType(int, null)
@@ -454,7 +454,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(Function)
             handleType(int, null)
@@ -509,7 +509,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -564,7 +564,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(implements)
             handleType(int, null)
@@ -619,7 +619,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(import)
             handleType(int, null)
@@ -674,7 +674,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(interface)
             handleType(int, null)
@@ -729,7 +729,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(library)
             handleType(int, null)
@@ -784,7 +784,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -839,7 +839,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(mixin)
             handleType(int, null)
@@ -894,7 +894,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(part)
             handleType(int, null)
@@ -949,7 +949,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(set)
             handleType(int, null)
@@ -1004,7 +1004,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(static)
             handleType(int, null)
@@ -1059,7 +1059,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(typedef)
             handleType(int, 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 375106c..8006263 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, WrapperClass)
+        listener: beginClassDeclaration(class, null, null, null, WrapperClass)
         parseClass(WrapperClass, class, class, WrapperClass)
           parseClassHeaderOpt(WrapperClass, class, class)
             parseClassExtendsOpt(WrapperClass)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, abstract)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(int, null)
@@ -169,8 +168,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, as)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
                 listener: handleType(int, null)
@@ -306,8 +305,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, covariant)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
                 listener: handleType(int, null)
@@ -443,8 +442,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, deferred)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
                 listener: handleType(int, null)
@@ -580,8 +579,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, dynamic)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
                 listener: handleType(int, null)
@@ -717,8 +716,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, export)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
                 listener: handleType(int, null)
@@ -854,8 +853,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, external)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
                 listener: handleType(int, null)
@@ -991,8 +990,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, factory)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
                 listener: handleType(int, null)
@@ -1128,8 +1127,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Function)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
                 listener: handleType(int, null)
@@ -1266,8 +1265,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -1403,8 +1402,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, implements)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
                 listener: handleType(int, null)
@@ -1540,8 +1539,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, import)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
                 listener: handleType(int, null)
@@ -1677,8 +1676,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, interface)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
                 listener: handleType(int, null)
@@ -1814,8 +1813,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, library)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
                 listener: handleType(int, null)
@@ -1952,9 +1951,9 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isUnaryMinus(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, WrapperClass, false)
                 isUnaryMinus(()
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -2090,8 +2089,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, mixin)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
                 listener: handleType(int, null)
@@ -2227,8 +2226,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, part)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
                 listener: handleType(int, null)
@@ -2365,8 +2364,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
                 listener: handleType(int, null)
@@ -2502,8 +2501,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, static)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
                 listener: handleType(int, null)
@@ -2639,8 +2638,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, typedef)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
                 listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
index 85e6adb..c4c9824 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(abstract)
       handleType(int, null)
@@ -15,7 +15,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(as)
       handleType(int, null)
@@ -28,7 +28,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(covariant)
       handleType(int, null)
@@ -41,7 +41,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(deferred)
       handleType(int, null)
@@ -54,7 +54,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(dynamic)
       handleType(int, null)
@@ -67,7 +67,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(export)
       handleType(int, null)
@@ -80,7 +80,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(external)
       handleType(int, null)
@@ -93,7 +93,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(factory)
       handleType(int, null)
@@ -106,7 +106,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(Function)
       handleType(int, null)
@@ -119,7 +119,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(get)
       handleType(int, null)
@@ -132,7 +132,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(implements)
       handleType(int, null)
@@ -145,7 +145,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(import)
       handleType(int, null)
@@ -158,7 +158,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(interface)
       handleType(int, null)
@@ -171,7 +171,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(library)
       handleType(int, null)
@@ -184,7 +184,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(operator)
       handleType(int, null)
@@ -197,7 +197,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(mixin)
       handleType(int, null)
@@ -210,7 +210,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(part)
       handleType(int, null)
@@ -223,7 +223,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(set)
       handleType(int, null)
@@ -236,7 +236,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(static)
       handleType(int, null)
@@ -249,7 +249,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(typedef)
       handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
index 8ecab82..65cde96 100644
--- a/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/built_in_identifier_top_level_fields.dart.intertwined.expect
@@ -8,14 +8,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
-      parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'SimpleType', abstract, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(abstract, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(abstract, abstract, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -32,14 +32,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', as, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(as, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(as, as, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -56,14 +56,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', covariant, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(covariant, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(covariant, covariant, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -80,14 +80,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', deferred, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(deferred, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(deferred, deferred, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -104,14 +104,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', dynamic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(dynamic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -128,14 +128,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', export, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(export, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(export, export, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -152,14 +152,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', external, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(external, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(external, external, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -176,14 +176,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', factory, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(factory, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(factory, factory, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -200,14 +200,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', Function, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(Function, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(Function, Function, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -224,14 +224,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', get, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(get, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(get, get, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -248,14 +248,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', implements, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(implements, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(implements, implements, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -272,14 +272,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', import, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(import, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(import, import, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -296,14 +296,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', interface, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(interface, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(interface, interface, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -320,14 +320,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', library, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(library, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(library, library, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -344,14 +344,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', operator, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operator, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operator, operator, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -368,14 +368,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', mixin, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(mixin, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(mixin, mixin, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -392,14 +392,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', part, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(part, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(part, part, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -416,14 +416,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', set, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(set, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(set, set, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -440,14 +440,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', static, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(static, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(static, static, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -464,14 +464,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(int)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', typedef, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typedef, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typedef, typedef, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
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 0304d29..ed37033 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
@@ -2,7 +2,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(abstract)
       handleType(int, null)
@@ -56,7 +56,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(as)
       handleType(int, null)
@@ -110,7 +110,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(covariant)
       handleType(int, null)
@@ -164,7 +164,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(deferred)
       handleType(int, null)
@@ -218,7 +218,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(dynamic)
       handleType(int, null)
@@ -272,7 +272,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(export)
       handleType(int, null)
@@ -326,7 +326,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(external)
       handleType(int, null)
@@ -380,7 +380,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(factory)
       handleType(int, null)
@@ -434,7 +434,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(Function)
       handleType(int, null)
@@ -488,7 +488,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(get)
       handleType(int, null)
@@ -542,7 +542,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(implements)
       handleType(int, null)
@@ -596,7 +596,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(import)
       handleType(int, null)
@@ -650,7 +650,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(interface)
       handleType(int, null)
@@ -704,7 +704,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(library)
       handleType(int, null)
@@ -758,7 +758,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(operator)
       handleType(int, null)
@@ -812,7 +812,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(mixin)
       handleType(int, null)
@@ -866,7 +866,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(part)
       handleType(int, null)
@@ -920,7 +920,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(set)
       handleType(int, null)
@@ -974,7 +974,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(static)
       handleType(int, null)
@@ -1028,7 +1028,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(typedef)
       handleType(int, null)
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 61e3d1b..3657522 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, abstract, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', null, abstract, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(abstract)
         listener: handleType(int, null)
@@ -141,8 +141,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, as, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, as, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(as)
         listener: handleType(int, null)
@@ -274,8 +274,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, covariant, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, covariant, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(covariant)
         listener: handleType(int, null)
@@ -407,8 +407,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, deferred, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, deferred, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(deferred)
         listener: handleType(int, null)
@@ -540,8 +540,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, dynamic, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, dynamic, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(dynamic)
         listener: handleType(int, null)
@@ -673,8 +673,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, export, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, export, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(export)
         listener: handleType(int, null)
@@ -806,8 +806,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, external, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, external, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(external)
         listener: handleType(int, null)
@@ -939,8 +939,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, factory, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, factory, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(factory)
         listener: handleType(int, null)
@@ -1072,8 +1072,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, Function, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, Function, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(Function)
         listener: handleType(int, null)
@@ -1205,8 +1205,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, get, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, get, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(int, null)
@@ -1338,8 +1338,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, implements, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, implements, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(implements)
         listener: handleType(int, null)
@@ -1471,8 +1471,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, import, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, import, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(import)
         listener: handleType(int, null)
@@ -1604,8 +1604,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, interface, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, interface, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(interface)
         listener: handleType(int, null)
@@ -1737,8 +1737,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, library, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, library, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(library)
         listener: handleType(int, null)
@@ -1870,8 +1870,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, operator, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, operator, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(operator)
         listener: handleType(int, null)
@@ -2003,8 +2003,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, mixin, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, mixin, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(mixin)
         listener: handleType(int, null)
@@ -2136,8 +2136,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, part, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, part, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(part)
         listener: handleType(int, null)
@@ -2269,8 +2269,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, set, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, set, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(set)
         listener: handleType(int, null)
@@ -2402,8 +2402,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, static, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, static, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(static)
         listener: handleType(int, null)
@@ -2535,8 +2535,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(int)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, typedef, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, typedef, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(typedef)
         listener: handleType(int, null)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart
new file mode 100644
index 0000000..e92c5b9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart
@@ -0,0 +1,13 @@
+void main() {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+
+  on();
+}
+
+void on() {}
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
new file mode 100644
index 0000000..bbc6919
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.expect
@@ -0,0 +1,65 @@
+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({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(on, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(on, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(on, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..5a8b511
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.intertwined.expect
@@ -0,0 +1,147 @@
+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(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, on)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(on)
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      parsePrecedenceExpression(}, 1, true)
+                        parseUnaryExpression(}, true)
+                          parsePrimary(}, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(}, expression)
+                              looksLikeFunctionBody(;)
+                              parseSend(}, expression)
+                                isNextIdentifier(})
+                                ensureIdentifier(}, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(on, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(on)
+                                  parseArguments(on)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(on, ;)
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, on, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(on, topLevelFunctionDeclaration)
+        parseMethodTypeVar(on)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(on, on, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(on, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.parser.expect
new file mode 100644
index 0000000..ae4a8fa
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.parser.expect
@@ -0,0 +1,29 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+on();
+}
+
+void on() {}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+on[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] on[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.scanner.expect
new file mode 100644
index 0000000..ae4a8fa
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.dart.scanner.expect
@@ -0,0 +1,29 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+on();
+}
+
+void on() {}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+on[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] on[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block.equivalence_info b/pkg/front_end/parser_testcases/general/call_on_after_try_block.equivalence_info
new file mode 100644
index 0000000..7e10e9d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block.equivalence_info
@@ -0,0 +1,5 @@
+files:
+  - call_on_after_try_block.dart
+  - call_on_after_try_block_prime.dart
+filters:
+  - ignoreListenerArguments
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart
new file mode 100644
index 0000000..1809732
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart
@@ -0,0 +1,15 @@
+void main() {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+
+  on(e) {
+    ;
+  }
+  on("");
+}
+
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
new file mode 100644
index 0000000..2622377
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.expect
@@ -0,0 +1,76 @@
+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({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        beginMetadataStar(on)
+        endMetadataStar(0)
+        handleNoTypeVariables(()
+        beginLocalFunctionDeclaration(on)
+          handleNoType(})
+          beginFunctionName(on)
+            handleIdentifier(on, localFunctionDeclaration)
+          endFunctionName(on, ()
+          beginFormalParameters((, MemberKind.Local)
+            beginMetadataStar(e)
+            endMetadataStar(0)
+            beginFormalParameter(e, MemberKind.Local, null, null, null)
+              handleNoType(()
+              handleIdentifier(e, formalParameterDeclaration)
+              handleFormalParameterWithoutValue())
+            endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+          endFormalParameters(1, (, ), MemberKind.Local)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          beginBlockFunctionBody({)
+            handleEmptyStatement(;)
+          endBlockFunctionBody(1, {, })
+        endLocalFunctionDeclaration(})
+        handleIdentifier(on, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString("")
+          endLiteralString(0, ))
+        endArguments(1, (, ))
+        handleSend(on, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..16b73ff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.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(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, on)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(on)
+                  listener: beginMetadataStar(on)
+                  listener: endMetadataStar(0)
+                  listener: handleNoTypeVariables(()
+                  listener: beginLocalFunctionDeclaration(on)
+                  listener: handleNoType(})
+                  parseNamedFunctionRest(}, on, on, false)
+                    listener: beginFunctionName(on)
+                    ensureIdentifier(}, localFunctionDeclaration)
+                      inPlainSync()
+                      listener: handleIdentifier(on, localFunctionDeclaration)
+                    listener: endFunctionName(on, ()
+                    parseFormalParametersRequiredOpt(on, MemberKind.Local)
+                      parseFormalParametersRest((, MemberKind.Local)
+                        listener: beginFormalParameters((, MemberKind.Local)
+                        parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                          parseMetadataStar(()
+                            listener: beginMetadataStar(e)
+                            listener: endMetadataStar(0)
+                          listener: beginFormalParameter(e, MemberKind.Local, null, null, null)
+                          listener: handleNoType(()
+                          ensureIdentifier((, formalParameterDeclaration)
+                            listener: handleIdentifier(e, formalParameterDeclaration)
+                          listener: handleFormalParameterWithoutValue())
+                          listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                        listener: endFormalParameters(1, (, ), MemberKind.Local)
+                    parseInitializersOpt())
+                      listener: handleNoInitializers()
+                    parseAsyncOptBody(), false, false)
+                      parseAsyncModifierOpt())
+                        listener: handleAsyncModifier(null, null)
+                        inPlainSync()
+                      parseFunctionBody(), false, false)
+                        listener: beginBlockFunctionBody({)
+                        notEofOrValue(}, ;)
+                        parseStatement({)
+                          parseStatementX({)
+                            parseEmptyStatement({)
+                              listener: handleEmptyStatement(;)
+                        notEofOrValue(}, })
+                        listener: endBlockFunctionBody(1, {, })
+                    listener: endLocalFunctionDeclaration(})
+          notEofOrValue(}, on)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(on)
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      parsePrecedenceExpression(}, 1, true)
+                        parseUnaryExpression(}, true)
+                          parsePrimary(}, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(}, expression)
+                              looksLikeFunctionBody(;)
+                              parseSend(}, expression)
+                                isNextIdentifier(})
+                                ensureIdentifier(}, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(on, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(on)
+                                  parseArguments(on)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      parseExpression(()
+                                        parsePrecedenceExpression((, 1, true)
+                                          parseUnaryExpression((, true)
+                                            parsePrimary((, expression)
+                                              parseLiteralString(()
+                                                parseSingleLiteralString(()
+                                                  listener: beginLiteralString("")
+                                                  listener: endLiteralString(0, ))
+                                      listener: endArguments(1, (, ))
+                                listener: handleSend(on, ;)
+                    ensureSemicolon())
+                    listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.parser.expect
new file mode 100644
index 0000000..0966333
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.parser.expect
@@ -0,0 +1,33 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+on(e) {
+;
+}
+on("");
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+on[KeywordToken]([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken]([BeginToken]""[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.scanner.expect
new file mode 100644
index 0000000..0966333
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.dart.scanner.expect
@@ -0,0 +1,33 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+on(e) {
+;
+}
+on("");
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+on[KeywordToken]([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken]([BeginToken]""[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2.equivalence_info b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.equivalence_info
new file mode 100644
index 0000000..66ae9f7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2.equivalence_info
@@ -0,0 +1,5 @@
+files:
+  - call_on_after_try_block2.dart
+  - call_on_after_try_block2_prime.dart
+filters:
+  - ignoreListenerArguments
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart
new file mode 100644
index 0000000..6545ea2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart
@@ -0,0 +1,15 @@
+void main() {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+
+  onX(e) {
+    ;
+  }
+  onX("");
+}
+
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
new file mode 100644
index 0000000..0bd07bd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.expect
@@ -0,0 +1,76 @@
+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({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        beginMetadataStar(onX)
+        endMetadataStar(0)
+        handleNoTypeVariables(()
+        beginLocalFunctionDeclaration(onX)
+          handleNoType(})
+          beginFunctionName(onX)
+            handleIdentifier(onX, localFunctionDeclaration)
+          endFunctionName(onX, ()
+          beginFormalParameters((, MemberKind.Local)
+            beginMetadataStar(e)
+            endMetadataStar(0)
+            beginFormalParameter(e, MemberKind.Local, null, null, null)
+              handleNoType(()
+              handleIdentifier(e, formalParameterDeclaration)
+              handleFormalParameterWithoutValue())
+            endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+          endFormalParameters(1, (, ), MemberKind.Local)
+          handleNoInitializers()
+          handleAsyncModifier(null, null)
+          beginBlockFunctionBody({)
+            handleEmptyStatement(;)
+          endBlockFunctionBody(1, {, })
+        endLocalFunctionDeclaration(})
+        handleIdentifier(onX, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString("")
+          endLiteralString(0, ))
+        endArguments(1, (, ))
+        handleSend(onX, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..6922931
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
@@ -0,0 +1,170 @@
+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(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, onX)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(onX)
+                listener: beginMetadataStar(onX)
+                listener: endMetadataStar(0)
+                listener: handleNoTypeVariables(()
+                listener: beginLocalFunctionDeclaration(onX)
+                listener: handleNoType(})
+                parseNamedFunctionRest(}, onX, onX, false)
+                  listener: beginFunctionName(onX)
+                  ensureIdentifier(}, localFunctionDeclaration)
+                    listener: handleIdentifier(onX, localFunctionDeclaration)
+                  listener: endFunctionName(onX, ()
+                  parseFormalParametersRequiredOpt(onX, MemberKind.Local)
+                    parseFormalParametersRest((, MemberKind.Local)
+                      listener: beginFormalParameters((, MemberKind.Local)
+                      parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Local)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(e)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(e, MemberKind.Local, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier((, formalParameterDeclaration)
+                          listener: handleIdentifier(e, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Local)
+                      listener: endFormalParameters(1, (, ), MemberKind.Local)
+                  parseInitializersOpt())
+                    listener: handleNoInitializers()
+                  parseAsyncOptBody(), false, false)
+                    parseAsyncModifierOpt())
+                      listener: handleAsyncModifier(null, null)
+                      inPlainSync()
+                    parseFunctionBody(), false, false)
+                      listener: beginBlockFunctionBody({)
+                      notEofOrValue(}, ;)
+                      parseStatement({)
+                        parseStatementX({)
+                          parseEmptyStatement({)
+                            listener: handleEmptyStatement(;)
+                      notEofOrValue(}, })
+                      listener: endBlockFunctionBody(1, {, })
+                  listener: endLocalFunctionDeclaration(})
+          notEofOrValue(}, onX)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(onX)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(onX, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(onX)
+                                parseArguments(onX)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString("")
+                                                listener: endLiteralString(0, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(onX, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.parser.expect
new file mode 100644
index 0000000..d3fb703
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.parser.expect
@@ -0,0 +1,33 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+onX(e) {
+;
+}
+onX("");
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+onX[StringToken]([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken]([BeginToken]""[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.scanner.expect
new file mode 100644
index 0000000..d3fb703
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.scanner.expect
@@ -0,0 +1,33 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+onX(e) {
+;
+}
+onX("");
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+onX[StringToken]([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken]([BeginToken]""[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart
new file mode 100644
index 0000000..802f69e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart
@@ -0,0 +1,11 @@
+void main(int on) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  on.toString();
+}
+
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
new file mode 100644
index 0000000..a76f004
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.expect
@@ -0,0 +1,65 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(on)
+          handleType(int, null)
+          handleIdentifier(on, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(on, expression)
+        handleNoTypeArguments(.)
+        handleNoArguments(.)
+        handleSend(on, .)
+        handleIdentifier(toString, expressionContinuation)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(toString, ;)
+        handleEndingBinaryExpression(.)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..1961dd6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
@@ -0,0 +1,144 @@
+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)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(on, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, on)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(on)
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      parsePrecedenceExpression(}, 1, true)
+                        parseUnaryExpression(}, true)
+                          parsePrimary(}, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(}, expression)
+                              parseSend(}, expression)
+                                isNextIdentifier(})
+                                ensureIdentifier(}, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(on, expression)
+                                listener: handleNoTypeArguments(.)
+                                parseArgumentsOpt(on)
+                                  listener: handleNoArguments(.)
+                                listener: handleSend(on, .)
+                        parsePrimary(., expressionContinuation)
+                          parseSendOrFunctionLiteral(., expressionContinuation)
+                            looksLikeFunctionBody(;)
+                            parseSend(., expressionContinuation)
+                              isNextIdentifier(.)
+                              ensureIdentifier(., expressionContinuation)
+                                listener: handleIdentifier(toString, expressionContinuation)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(toString)
+                                parseArguments(toString)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                              listener: handleSend(toString, ;)
+                        listener: handleEndingBinaryExpression(.)
+                    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/general/call_on_after_try_block3.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.parser.expect
new file mode 100644
index 0000000..3b86aa5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.parser.expect
@@ -0,0 +1,25 @@
+void main(int on) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+on.toString();
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.scanner.expect
new file mode 100644
index 0000000..3b86aa5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.scanner.expect
@@ -0,0 +1,25 @@
+void main(int on) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+on.toString();
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.equivalence_info b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.equivalence_info
new file mode 100644
index 0000000..313a263
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.equivalence_info
@@ -0,0 +1,5 @@
+files:
+  - call_on_after_try_block3.dart
+  - call_on_after_try_block3_prime.dart
+filters:
+  - ignoreListenerArguments
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart
new file mode 100644
index 0000000..d01b2e8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart
@@ -0,0 +1,11 @@
+void main(int onX) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  onX.toString();
+}
+
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
new file mode 100644
index 0000000..7ae894f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.expect
@@ -0,0 +1,65 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(onX)
+          handleType(int, null)
+          handleIdentifier(onX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(onX, expression)
+        handleNoTypeArguments(.)
+        handleNoArguments(.)
+        handleSend(onX, .)
+        handleIdentifier(toString, expressionContinuation)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(toString, ;)
+        handleEndingBinaryExpression(.)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..10c263e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
@@ -0,0 +1,140 @@
+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)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(onX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(onX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, onX)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(onX)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(onX, expression)
+                              listener: handleNoTypeArguments(.)
+                              parseArgumentsOpt(onX)
+                                listener: handleNoArguments(.)
+                              listener: handleSend(onX, .)
+                      parsePrimary(., expressionContinuation)
+                        parseSendOrFunctionLiteral(., expressionContinuation)
+                          looksLikeFunctionBody(;)
+                          parseSend(., expressionContinuation)
+                            isNextIdentifier(.)
+                            ensureIdentifier(., expressionContinuation)
+                              listener: handleIdentifier(toString, expressionContinuation)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(toString)
+                              parseArguments(toString)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  listener: endArguments(0, (, ))
+                            listener: handleSend(toString, ;)
+                      listener: handleEndingBinaryExpression(.)
+                  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/general/call_on_after_try_block3_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.parser.expect
new file mode 100644
index 0000000..a96a920
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.parser.expect
@@ -0,0 +1,25 @@
+void main(int onX) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+onX.toString();
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.scanner.expect
new file mode 100644
index 0000000..a96a920
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.scanner.expect
@@ -0,0 +1,25 @@
+void main(int onX) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+onX.toString();
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart
new file mode 100644
index 0000000..3f71e09
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart
@@ -0,0 +1,11 @@
+void main(int on) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  on = 42;
+}
+
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
new file mode 100644
index 0000000..44a3071
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.expect
@@ -0,0 +1,61 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(on)
+          handleType(int, null)
+          handleIdentifier(on, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(on, expression)
+        handleNoTypeArguments(=)
+        handleNoArguments(=)
+        handleSend(on, =)
+        handleLiteralInt(42)
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..3fee6f6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
@@ -0,0 +1,135 @@
+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)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(on, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, on)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(on)
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      parsePrecedenceExpression(}, 1, true)
+                        parseUnaryExpression(}, true)
+                          parsePrimary(}, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(}, expression)
+                              parseSend(}, expression)
+                                isNextIdentifier(})
+                                ensureIdentifier(}, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(on, expression)
+                                listener: handleNoTypeArguments(=)
+                                parseArgumentsOpt(on)
+                                  listener: handleNoArguments(=)
+                                listener: handleSend(on, =)
+                        parsePrecedenceExpression(=, 1, true)
+                          parseUnaryExpression(=, true)
+                            parsePrimary(=, expression)
+                              parseLiteralInt(=)
+                                listener: handleLiteralInt(42)
+                        listener: handleAssignmentExpression(=)
+                    ensureSemicolon(42)
+                    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/general/call_on_after_try_block4.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.parser.expect
new file mode 100644
index 0000000..0af7587
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.parser.expect
@@ -0,0 +1,25 @@
+void main(int on) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+on = 42;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.scanner.expect
new file mode 100644
index 0000000..0af7587
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.scanner.expect
@@ -0,0 +1,25 @@
+void main(int on) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+on = 42;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.equivalence_info b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.equivalence_info
new file mode 100644
index 0000000..23cbacc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.equivalence_info
@@ -0,0 +1,5 @@
+files:
+  - call_on_after_try_block4.dart
+  - call_on_after_try_block4_prime.dart
+filters:
+  - ignoreListenerArguments
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart
new file mode 100644
index 0000000..7e56a69
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart
@@ -0,0 +1,11 @@
+void main(int onX) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  onX = 42;
+}
+
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
new file mode 100644
index 0000000..dff16a5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.expect
@@ -0,0 +1,61 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(onX)
+          handleType(int, null)
+          handleIdentifier(onX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(onX, expression)
+        handleNoTypeArguments(=)
+        handleNoArguments(=)
+        handleSend(onX, =)
+        handleLiteralInt(42)
+        handleAssignmentExpression(=)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..4a8d11a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
@@ -0,0 +1,131 @@
+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)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(onX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(onX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, onX)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(onX)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(onX, expression)
+                              listener: handleNoTypeArguments(=)
+                              parseArgumentsOpt(onX)
+                                listener: handleNoArguments(=)
+                              listener: handleSend(onX, =)
+                      parsePrecedenceExpression(=, 1, true)
+                        parseUnaryExpression(=, true)
+                          parsePrimary(=, expression)
+                            parseLiteralInt(=)
+                              listener: handleLiteralInt(42)
+                      listener: handleAssignmentExpression(=)
+                  ensureSemicolon(42)
+                  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/general/call_on_after_try_block4_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.parser.expect
new file mode 100644
index 0000000..0b125f4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.parser.expect
@@ -0,0 +1,25 @@
+void main(int onX) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+onX = 42;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.scanner.expect
new file mode 100644
index 0000000..0b125f4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.scanner.expect
@@ -0,0 +1,25 @@
+void main(int onX) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+onX = 42;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart
new file mode 100644
index 0000000..eeac09a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart
@@ -0,0 +1,11 @@
+void main(int on) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  on;
+}
+
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
new file mode 100644
index 0000000..1318bfe
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.expect
@@ -0,0 +1,59 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(on)
+          handleType(int, null)
+          handleIdentifier(on, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(on, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(on, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..761800b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.intertwined.expect
@@ -0,0 +1,129 @@
+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)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  inPlainSync()
+                  listener: handleIdentifier(on, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, on, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, on)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, false)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                  looksLikeLocalFunction(on)
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      parsePrecedenceExpression(}, 1, true)
+                        parseUnaryExpression(}, true)
+                          parsePrimary(}, expression)
+                            inPlainSync()
+                            parseSendOrFunctionLiteral(}, expression)
+                              parseSend(}, expression)
+                                isNextIdentifier(})
+                                ensureIdentifier(}, expression)
+                                  inPlainSync()
+                                  listener: handleIdentifier(on, expression)
+                                listener: handleNoTypeArguments(;)
+                                parseArgumentsOpt(on)
+                                  listener: handleNoArguments(;)
+                                listener: handleSend(on, ;)
+                    ensureSemicolon(on)
+                    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/general/call_on_after_try_block5.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.parser.expect
new file mode 100644
index 0000000..5e272ff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.parser.expect
@@ -0,0 +1,25 @@
+void main(int on) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+on;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.scanner.expect
new file mode 100644
index 0000000..5e272ff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.dart.scanner.expect
@@ -0,0 +1,25 @@
+void main(int on) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+on;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] on[KeywordToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+on[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5.equivalence_info b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.equivalence_info
new file mode 100644
index 0000000..39d6b9d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5.equivalence_info
@@ -0,0 +1,5 @@
+files:
+  - call_on_after_try_block5.dart
+  - call_on_after_try_block5_prime.dart
+filters:
+  - ignoreListenerArguments
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart
new file mode 100644
index 0000000..8bd11f3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart
@@ -0,0 +1,11 @@
+void main(int onX) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  onX;
+}
+
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
new file mode 100644
index 0000000..f03df25
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.expect
@@ -0,0 +1,59 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(onX)
+          handleType(int, null)
+          handleIdentifier(onX, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(onX, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(onX, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
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
new file mode 100644
index 0000000..0570855
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
@@ -0,0 +1,125 @@
+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)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(onX)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(onX, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, onX, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, onX)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(onX)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(onX, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(onX)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(onX, ;)
+                  ensureSemicolon(onX)
+                  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/general/call_on_after_try_block5_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.parser.expect
new file mode 100644
index 0000000..f75602b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.parser.expect
@@ -0,0 +1,25 @@
+void main(int onX) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+onX;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.scanner.expect
new file mode 100644
index 0000000..f75602b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.scanner.expect
@@ -0,0 +1,25 @@
+void main(int onX) {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+onX;
+}
+
+
+
+void[KeywordToken] main[StringToken]([BeginToken]int[StringToken] onX[StringToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+onX[StringToken];[SimpleToken]
+}[SimpleToken]
+
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart
new file mode 100644
index 0000000..4313b11
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart
@@ -0,0 +1,13 @@
+void main() {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+
+  onX();
+}
+
+void onX() {}
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
new file mode 100644
index 0000000..3848d33
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.expect
@@ -0,0 +1,65 @@
+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({)
+        beginTryStatement(try)
+          beginBlock({, BlockKind(try statement))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(try statement))
+          beginCatchClause(catch)
+            beginFormalParameters((, MemberKind.Catch)
+              beginMetadataStar(e)
+              endMetadataStar(0)
+              beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                handleNoType(()
+                handleIdentifier(e, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+            endFormalParameters(1, (, ), MemberKind.Catch)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(null, catch, null)
+          beginCatchClause(on)
+            handleIdentifier(Foo, typeReference)
+            handleNoTypeArguments({)
+            handleType(Foo, null)
+          endCatchClause({)
+          beginBlock({, BlockKind(catch clause))
+            handleEmptyStatement(;)
+          endBlock(1, {, }, BlockKind(catch clause))
+          handleCatchBlock(on, null, null)
+        endTryStatement(2, try, null)
+        handleIdentifier(onX, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(onX, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(onX, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
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
new file mode 100644
index 0000000..40100a5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
@@ -0,0 +1,144 @@
+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(}, try)
+          parseStatement({)
+            parseStatementX({)
+              parseTryStatement({)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, null, try statement)
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(try statement))
+                listener: beginCatchClause(catch)
+                parseFormalParameters(catch, MemberKind.Catch)
+                  parseFormalParametersRest((, MemberKind.Catch)
+                    listener: beginFormalParameters((, MemberKind.Catch)
+                    parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.Catch)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(e)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(e, MemberKind.Catch, null, null, null)
+                      listener: handleNoType(()
+                      ensureIdentifier((, formalParameterDeclaration)
+                        listener: handleIdentifier(e, formalParameterDeclaration)
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, e, null, null, FormalParameterKind.mandatory, MemberKind.Catch)
+                    listener: endFormalParameters(1, (, ), MemberKind.Catch)
+                listener: endCatchClause({)
+                parseBlock(), BlockKind(catch clause))
+                  ensureBlock(), null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(null, catch, null)
+                listener: beginCatchClause(on)
+                listener: handleIdentifier(Foo, typeReference)
+                listener: handleNoTypeArguments({)
+                listener: handleType(Foo, null)
+                listener: endCatchClause({)
+                parseBlock(Foo, BlockKind(catch clause))
+                  ensureBlock(Foo, null, catch clause)
+                  listener: beginBlock({, BlockKind(catch clause))
+                  notEofOrValue(}, ;)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseEmptyStatement({)
+                        listener: handleEmptyStatement(;)
+                  notEofOrValue(}, })
+                  listener: endBlock(1, {, }, BlockKind(catch clause))
+                listener: handleCatchBlock(on, null, null)
+                listener: endTryStatement(2, try, null)
+          notEofOrValue(}, onX)
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, false)
+                looksLikeLocalFunction(onX)
+                parseExpressionStatement(})
+                  parseExpression(})
+                    parsePrecedenceExpression(}, 1, true)
+                      parseUnaryExpression(}, true)
+                        parsePrimary(}, expression)
+                          parseSendOrFunctionLiteral(}, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend(}, expression)
+                              isNextIdentifier(})
+                              ensureIdentifier(}, expression)
+                                listener: handleIdentifier(onX, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(onX)
+                                parseArguments(onX)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                              listener: handleSend(onX, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, onX, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(onX, topLevelFunctionDeclaration)
+        parseMethodTypeVar(onX)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(onX, onX, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(onX, 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(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.parser.expect
new file mode 100644
index 0000000..cb01c79
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.parser.expect
@@ -0,0 +1,29 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+onX();
+}
+
+void onX() {}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+onX[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] onX[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.scanner.expect
new file mode 100644
index 0000000..cb01c79
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.scanner.expect
@@ -0,0 +1,29 @@
+void main() {
+try {
+;
+} catch (e) {
+;
+} on Foo {
+;
+}
+
+onX();
+}
+
+void onX() {}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+try[KeywordToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] catch[KeywordToken] ([BeginToken]e[StringToken])[SimpleToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken] on[KeywordToken] Foo[StringToken] {[BeginToken]
+;[SimpleToken]
+}[SimpleToken]
+
+onX[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] onX[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
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 339b30f..514a391 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 4db3219..1d66387 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 920de7d..ab3cd87 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 07a9f87..036a456 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 f18f5e1..a127cb2 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 e4ee639..5e86f7b 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 a92ef45..647163d 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 ca056bd..47b2f02 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 b80b01b..fc05dac 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 6b51be2..dfe42d1 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 2738857..76a1c9d 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 e2e0d1a..19f3f2c 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 487dc8f..d7bc5fb 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 a4b6952..dbf54d7 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/for.dart.expect b/pkg/front_end/parser_testcases/general/for.dart.expect
index 33fd303..e7b50ee 100644
--- a/pkg/front_end/parser_testcases/general/for.dart.expect
+++ b/pkg/front_end/parser_testcases/general/for.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/for.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/for.dart.intertwined.expect
index 6b2e0e1..e71f836 100644
--- a/pkg/front_end/parser_testcases/general/for.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/for.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/for_in.dart.expect b/pkg/front_end/parser_testcases/general/for_in.dart.expect
index c00444c..1e64b61 100644
--- a/pkg/front_end/parser_testcases/general/for_in.dart.expect
+++ b/pkg/front_end/parser_testcases/general/for_in.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/for_in.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/for_in.dart.intertwined.expect
index 6be8639..c58995c 100644
--- a/pkg/front_end/parser_testcases/general/for_in.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/for_in.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.expect b/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.expect
index 54e4fc4..9d23aa54 100644
--- a/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.expect
+++ b/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.intertwined.expect
index 29a07e7..4fea17d 100644
--- a/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/for_in_no_decl.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect b/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect
index 9ea424a..5dc94ea 100644
--- a/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect
+++ b/pkg/front_end/parser_testcases/general/for_no_decl.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/for_no_decl.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/for_no_decl.dart.intertwined.expect
index 191bb85..07adb6d 100644
--- a/pkg/front_end/parser_testcases/general/for_no_decl.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/for_no_decl.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/function_declaration.dart.expect b/pkg/front_end/parser_testcases/general/function_declaration.dart.expect
index 4b497e8..c6677b1 100644
--- a/pkg/front_end/parser_testcases/general/function_declaration.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_declaration.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/function_declaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_declaration.dart.intertwined.expect
index 6b65195..1413759 100644
--- a/pkg/front_end/parser_testcases/general/function_declaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_declaration.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/function_expression.dart.expect b/pkg/front_end/parser_testcases/general/function_expression.dart.expect
index 2904ea3..d6f7444 100644
--- a/pkg/front_end/parser_testcases/general/function_expression.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_expression.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/function_expression.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_expression.dart.intertwined.expect
index 45036c8..4a83b37 100644
--- a/pkg/front_end/parser_testcases/general/function_expression.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_expression.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
index 8b8e356..bfa32fb 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
@@ -84,7 +84,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
       handleNoType(var)
       handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -109,7 +109,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_closeBracket, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -134,7 +134,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_closeParen, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -162,7 +162,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_colon, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -189,7 +189,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_comma, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -215,7 +215,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_equals, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -241,7 +241,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -267,7 +267,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_openParen, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -289,7 +289,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -315,7 +315,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_period_methodInvocation_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -348,7 +348,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -376,7 +376,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -399,7 +399,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -441,7 +441,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_as, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -476,7 +476,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -518,7 +518,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_bang_openBracket, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -556,7 +556,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_bang_paren, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -593,7 +593,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_bar, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -635,7 +635,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_caret, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -677,7 +677,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_is, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -719,7 +719,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -749,7 +749,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_minus, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -785,7 +785,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_openBracket, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -822,7 +822,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_openBracket_error, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -866,7 +866,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_openBracket_unambiguous, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -907,7 +907,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_percent, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -949,7 +949,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_period_period, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -993,7 +993,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_plus, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1035,7 +1035,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1076,7 +1076,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1118,7 +1118,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1164,7 +1164,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1206,7 +1206,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1247,7 +1247,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_question_question, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1289,7 +1289,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_slash, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -1331,7 +1331,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
       beginFieldInitializer(=)
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 b8955d7..bb3f747 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
@@ -8,12 +8,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
-      parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
+      parseFields(, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_closeBrace, typeArgs_closeBrace, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_closeBrace, typeArgs_closeBrace, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -53,12 +53,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBracket, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBracket, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeBracket, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_closeBracket, typeArgs_closeBracket, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_closeBracket, typeArgs_closeBracket, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -98,12 +98,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeParen, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeParen, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_closeParen, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_closeParen, typeArgs_closeParen, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_closeParen, typeArgs_closeParen, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -153,12 +153,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_colon, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_colon, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_colon, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_colon, typeArgs_colon, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_colon, typeArgs_colon, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -205,12 +205,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_comma, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_comma, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_comma, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_comma, typeArgs_comma, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_comma, typeArgs_comma, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -256,12 +256,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_equals, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_equals, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_equals, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_equals, typeArgs_equals, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_equals, typeArgs_equals, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -301,12 +301,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_not_equals, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_not_equals, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_not_equals, typeArgs_not_equals, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_not_equals, typeArgs_not_equals, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -346,12 +346,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_openParen, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_openParen, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_openParen, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_openParen, typeArgs_openParen, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_openParen, typeArgs_openParen, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -386,12 +386,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_period_methodInvocation, typeArgs_period_methodInvocation, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_period_methodInvocation, typeArgs_period_methodInvocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -428,12 +428,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_period_methodInvocation_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_period_methodInvocation_generic, typeArgs_period_methodInvocation_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_period_methodInvocation_generic, typeArgs_period_methodInvocation_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -485,12 +485,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_propertyAccess, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_propertyAccess, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_period_propertyAccess, typeArgs_period_propertyAccess, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_period_propertyAccess, typeArgs_period_propertyAccess, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -534,12 +534,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_semicolon, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_semicolon, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(typeArgs_semicolon, typeArgs_semicolon, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(typeArgs_semicolon, typeArgs_semicolon, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -572,12 +572,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_ampersand, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_ampersand, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_ampersand, operators_ampersand, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_ampersand, operators_ampersand, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -675,12 +675,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_as, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_as, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_as, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_as, operators_as, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_as, operators_as, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -764,12 +764,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_asterisk, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_asterisk, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_asterisk, operators_asterisk, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_asterisk, operators_asterisk, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -867,12 +867,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bang_openBracket, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_bang_openBracket, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_bang_openBracket, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_bang_openBracket, operators_bang_openBracket, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_bang_openBracket, operators_bang_openBracket, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -964,12 +964,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bang_paren, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_bang_paren, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_bang_paren, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_bang_paren, operators_bang_paren, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_bang_paren, operators_bang_paren, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1064,12 +1064,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bar, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_bar, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_bar, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_bar, operators_bar, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_bar, operators_bar, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1167,12 +1167,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_caret, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_caret, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_caret, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_caret, operators_caret, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_caret, operators_caret, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1270,12 +1270,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_is, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_is, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_is, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_is, operators_is, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_is, operators_is, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1369,12 +1369,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_lessThan, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_lessThan, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_lessThan, operators_lessThan, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_lessThan, operators_lessThan, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1433,12 +1433,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_minus, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_minus, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_minus, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_minus, operators_minus, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_minus, operators_minus, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1523,12 +1523,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_openBracket, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_openBracket, operators_openBracket, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_openBracket, operators_openBracket, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1617,12 +1617,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket_error, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket_error, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_openBracket_error, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_openBracket_error, operators_openBracket_error, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_openBracket_error, operators_openBracket_error, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1727,12 +1727,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket_unambiguous, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_openBracket_unambiguous, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_openBracket_unambiguous, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_openBracket_unambiguous, operators_openBracket_unambiguous, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_openBracket_unambiguous, operators_openBracket_unambiguous, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1834,12 +1834,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_percent, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_percent, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_percent, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_percent, operators_percent, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_percent, operators_percent, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1937,12 +1937,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_period_period, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_period_period, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_period_period, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_period_period, operators_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_period_period, operators_period_period, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2042,12 +2042,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_plus, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_plus, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_plus, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_plus, operators_plus, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_plus, operators_plus, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2147,12 +2147,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_question, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_question, operators_question, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_question, operators_question, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2253,12 +2253,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_question_period_methodInvocation, operators_question_period_methodInvocation, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_question_period_methodInvocation, operators_question_period_methodInvocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2357,12 +2357,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_question_period_methodInvocation_generic, operators_question_period_methodInvocation_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_question_period_methodInvocation_generic, operators_question_period_methodInvocation_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2465,12 +2465,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_period, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_period, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_question_period_period, operators_question_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_question_period_period, operators_question_period_period, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2575,12 +2575,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_propertyAccess, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_propertyAccess, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_question_period_propertyAccess, operators_question_period_propertyAccess, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_question_period_propertyAccess, operators_question_period_propertyAccess, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2675,12 +2675,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_question, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_question, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_question_question, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_question_question, operators_question_question, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_question_question, operators_question_question, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2778,12 +2778,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_slash, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_slash, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_slash, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_slash, operators_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_slash, operators_slash, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -2881,12 +2881,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_tilde_slash, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', operators_tilde_slash, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(operators_tilde_slash, operators_tilde_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(operators_tilde_slash, operators_tilde_slash, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect
index 63ed9e6..0742124 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
       handleNoType(var)
       handleIdentifier(simpleIdentifier, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -25,7 +25,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(method, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -54,7 +54,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(prefixedIdentifier, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -82,7 +82,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(three_identifiers, topLevelVariableDeclaration)
       beginFieldInitializer(=)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect
index 7e231fe..53ec6e5 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_kinds.dart.intertwined.expect
@@ -8,12 +8,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
-      parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', simpleIdentifier, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
+      parseFields(, null, null, null, null, null, null, var, var, Instance of 'NoType', simpleIdentifier, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(simpleIdentifier, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(simpleIdentifier, simpleIdentifier, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(simpleIdentifier, simpleIdentifier, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -46,12 +46,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', method, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', method, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(method, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(method, method, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(method, method, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -99,12 +99,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', prefixedIdentifier, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', prefixedIdentifier, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(prefixedIdentifier, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(prefixedIdentifier, prefixedIdentifier, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(prefixedIdentifier, prefixedIdentifier, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -148,12 +148,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', three_identifiers, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', three_identifiers, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(three_identifiers, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(three_identifiers, three_identifiers, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(three_identifiers, three_identifiers, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
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 ec7a398..dca4bd9 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
@@ -830,7 +830,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -852,7 +852,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -876,7 +876,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -904,7 +904,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -936,7 +936,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -968,7 +968,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       beginFunctionType(void)
         beginTypeVariables(<)
           beginMetadataStar(T)
@@ -1000,7 +1000,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 1615902..f2c7a7f 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
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -38,7 +37,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -73,7 +71,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -114,7 +111,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -159,7 +155,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -204,7 +199,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -249,7 +243,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -280,7 +273,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -315,7 +307,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -356,7 +347,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -401,7 +391,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -446,7 +435,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -491,7 +479,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -534,7 +521,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -581,7 +567,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -644,7 +629,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -711,7 +695,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -768,7 +751,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -825,7 +807,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -872,7 +853,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -923,7 +903,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -980,7 +959,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1041,7 +1019,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1102,7 +1079,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1164,8 +1140,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f1, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f1, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         listener: beginMetadataStar(T)
@@ -1184,7 +1160,7 @@
         listener: endFunctionType(Function, null)
         ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
           listener: handleIdentifier(f1, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f1, f1, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f1, f1, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
   listener: endTopLevelDeclaration(void)
@@ -1194,8 +1170,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f2, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f2, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1218,7 +1194,7 @@
         listener: endFunctionType(Function, null)
         ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
           listener: handleIdentifier(f2, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f2, f2, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f2, f2, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
   listener: endTopLevelDeclaration(void)
@@ -1228,8 +1204,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f3, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f3, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1258,7 +1234,7 @@
         listener: endFunctionType(Function, null)
         ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
           listener: handleIdentifier(f3, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f3, f3, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f3, f3, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
   listener: endTopLevelDeclaration(void)
@@ -1268,8 +1244,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f4, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f4, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1302,7 +1278,7 @@
         listener: endFunctionType(Function, null)
         ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
           listener: handleIdentifier(f4, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f4, f4, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f4, f4, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
   listener: endTopLevelDeclaration(void)
@@ -1312,8 +1288,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f5, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f5, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1346,7 +1322,7 @@
         listener: endFunctionType(Function, null)
         ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
           listener: handleIdentifier(f5, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f5, f5, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f5, f5, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
   listener: endTopLevelDeclaration(void)
@@ -1356,8 +1332,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f6, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f6, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: beginFunctionType(void)
         listener: beginTypeVariables(<)
         parseMetadataStar(<)
@@ -1390,7 +1366,7 @@
         listener: endFunctionType(Function, null)
         ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
           listener: handleIdentifier(f6, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(f6, f6, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(f6, f6, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
   listener: endTopLevelDeclaration(main)
@@ -1401,8 +1377,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 9132fd3..4962c43 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -46,7 +46,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(ConfigurationService, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, ConfigurationService)
+    beginClassDeclaration(class, null, null, null, ConfigurationService)
       handleNoType(ConfigurationService)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -56,18 +56,18 @@
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(_configuration)
             handleType(Configuration, null)
             handleIdentifier(_configuration, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, Configuration, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Configuration, ;)
         endMember()
         beginMetadataStar(ConfigurationService)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, ConfigurationService)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ConfigurationService)
             handleNoType(;)
             handleIdentifier(ConfigurationService, methodDeclaration)
             handleNoTypeVariables(()
@@ -114,7 +114,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, set, configuration)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, configuration)
             handleVoidKeyword(void)
             handleIdentifier(configuration, methodDeclaration)
             handleNoTypeVariables(()
@@ -164,7 +164,7 @@
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, configuration)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, configuration)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(get)
             handleType(Configuration, null)
@@ -219,7 +219,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, method)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method)
             handleVoidKeyword(void)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
@@ -245,7 +245,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -275,7 +275,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Configuration, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Configuration)
+    beginClassDeclaration(class, null, null, null, Configuration)
       handleNoType(Configuration)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -285,7 +285,7 @@
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(get)
             handleType(Configuration, null)
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 d392486..7b2445b 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(ConfigurationService, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, ConfigurationService)
+        listener: beginClassDeclaration(class, null, null, null, ConfigurationService)
         parseClass(ConfigurationService, class, class, ConfigurationService)
           parseClassHeaderOpt(ConfigurationService, class, class)
             parseClassExtendsOpt(ConfigurationService)
@@ -32,16 +31,16 @@
                 listener: beginMetadataStar(Configuration)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', _configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', _configuration, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(_configuration)
                 listener: handleType(Configuration, null)
                 ensureIdentifierPotentiallyRecovered(Configuration, fieldDeclaration, false)
                   listener: handleIdentifier(_configuration, fieldDeclaration)
-                parseFieldInitializerOpt(_configuration, _configuration, null, null, null, null, DeclarationKind.Class, ConfigurationService)
+                parseFieldInitializerOpt(_configuration, _configuration, null, null, null, null, null, DeclarationKind.Class, ConfigurationService)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, Configuration, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, Configuration, ;)
               listener: endMember()
             notEofOrValue(}, ConfigurationService)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, ConfigurationService)
@@ -50,8 +49,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, ConfigurationService, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, ConfigurationService)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, ConfigurationService, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ConfigurationService)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(ConfigurationService, methodDeclaration)
@@ -151,8 +150,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', set, configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, set, configuration)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', set, configuration, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, configuration)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(configuration, methodDeclaration)
@@ -258,8 +257,8 @@
                 listener: beginMetadataStar(Configuration)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', get, configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, configuration)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', get, configuration, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, configuration)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(Configuration, null)
@@ -390,8 +389,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, method, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, method)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, method, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(method, methodDeclaration)
@@ -451,8 +450,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'NoType', null, Foo, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -512,13 +511,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Configuration, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Configuration)
+        listener: beginClassDeclaration(class, null, null, null, Configuration)
         parseClass(Configuration, class, class, Configuration)
           parseClassHeaderOpt(Configuration, class, class)
             parseClassExtendsOpt(Configuration)
@@ -537,8 +535,8 @@
                 listener: beginMetadataStar(Configuration)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, foo, DeclarationKind.Class, Configuration, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, foo)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, foo, DeclarationKind.Class, Configuration, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(Configuration, null)
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 be61163..911e2dd 100644
--- a/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45120.dart.expect
@@ -87,7 +87,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleVoidKeyword(void)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 94b8325..a2eaf9f 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
@@ -29,7 +29,6 @@
         listener: endMetadata(@, null, typedef)
       listener: endMetadataStar(1)
     parseTopLevelKeywordDeclaration(), typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(), typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -153,8 +152,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(;, null, ;, Instance of 'VoidType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 56fea87..213652b 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -54,7 +54,7 @@
   beginMetadataStar(g)
   endMetadataStar(0)
   beginTopLevelMember(g)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -126,7 +126,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 e11f90e..fb14934 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -117,8 +117,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(g)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
@@ -273,8 +273,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 783ba33..2f24240 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -54,7 +54,7 @@
   beginMetadataStar(g)
   endMetadataStar(0)
   beginTopLevelMember(g)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -127,7 +127,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 b3285c7..c5323dd 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -117,8 +117,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(g)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
@@ -282,8 +282,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 bb09df4..55f2041 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -54,7 +54,7 @@
   beginMetadataStar(g)
   endMetadataStar(0)
   beginTopLevelMember(g)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -125,7 +125,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 5267088..364c2db 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -117,8 +117,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(g)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
@@ -273,8 +273,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 ee5784b..6d2ad97 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -54,7 +54,7 @@
   beginMetadataStar(g)
   endMetadataStar(0)
   beginTopLevelMember(g)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -126,7 +126,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 6809693..917e374 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -117,8 +117,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(g)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
@@ -282,8 +282,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 2af7731..6b1850a 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -54,7 +54,7 @@
   beginMetadataStar(g)
   endMetadataStar(0)
   beginTopLevelMember(g)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -144,7 +144,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 2ceba23..9f9ba52 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -117,8 +117,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(g)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
@@ -311,8 +311,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 ec48ff4..af3542b 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -54,7 +54,7 @@
   beginMetadataStar(g)
   endMetadataStar(0)
   beginTopLevelMember(g)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(g, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -145,7 +145,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 48f9c8b..0d4dd9d 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -117,8 +117,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(g)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(g, topLevelFunctionDeclaration)
@@ -320,8 +320,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect
index 5804baa..d6b9eeb 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       beginTypeVariables(<)
@@ -30,7 +30,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(m, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect
index 2611916..c2d87c4 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -43,8 +43,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, m, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, m, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(m, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect
index 72c0d1a..6152cb1 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       beginTypeVariables(<)
@@ -24,7 +24,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(m, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect
index 8c886bc..31583f3 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
@@ -43,8 +43,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, m, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, m, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(m, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect
index c74a161..c08a421 100644
--- a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect
index 406fe2c..cb4e3f7 100644
--- a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect
index f0770d5..db45d9b 100644
--- a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect
index 4f3fe74..075efbb 100644
--- a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect
index 5e09e8f..2842fa7 100644
--- a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect
index 1876a12..abc7128 100644
--- a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect
index a4e0369..398a61b 100644
--- a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect
index 91cb220..d752307 100644
--- a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect
index 1170055..f6b6a1f 100644
--- a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect
index d685108..935f19a 100644
--- a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/metadata.dart.expect b/pkg/front_end/parser_testcases/general/metadata.dart.expect
index b86186a..6e3fbf8d 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.expect
@@ -107,7 +107,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -939,7 +939,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
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 3432673..e61e6cb 100644
--- a/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/metadata.dart.intertwined.expect
@@ -229,13 +229,12 @@
         listener: endMetadata(@, ., class)
       listener: endMetadataStar(10)
     parseTopLevelKeywordDeclaration(), class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(), class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -257,7 +256,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(}, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -344,7 +342,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -443,7 +440,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -548,7 +544,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -665,7 +660,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -797,7 +791,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -935,7 +928,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1064,7 +1056,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1202,7 +1193,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1343,7 +1333,6 @@
       listener: beginMetadataStar(typedef)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, typedef, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(;, typedef)
       parseTypedef(typedef)
         listener: beginUncategorizedTopLevelDeclaration(typedef)
         listener: beginTypedef(typedef)
@@ -1714,13 +1703,12 @@
         listener: endMetadata(@, ., class)
       listener: endMetadataStar(9)
     parseTopLevelKeywordDeclaration(), class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(), class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
diff --git a/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.expect b/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.expect
index 0d03eb7..5d6d871 100644
--- a/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.expect
+++ b/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(UnmatchedToken({), null)
+    beginTopLevelMethod(UnmatchedToken({), null, null)
       handleNoType(UnmatchedToken({))
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.intertwined.expect
index f0cb42b..2fec437 100644
--- a/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/missing_end_bracket.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl(UnmatchedToken({))
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(UnmatchedToken({), null, UnmatchedToken({), Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(UnmatchedToken({), null)
+      parseTopLevelMethod(UnmatchedToken({), null, null, UnmatchedToken({), Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(UnmatchedToken({), null, null)
         listener: handleNoType(UnmatchedToken({))
         ensureIdentifierPotentiallyRecovered(UnmatchedToken({), topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
index 419693a..e9179ab 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.expect
@@ -46,7 +46,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -56,7 +56,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNewAsIdentifier(new)
@@ -73,7 +73,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(constructor_field_initializer, methodDeclarationContinuation)
@@ -113,7 +113,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, =, =)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType(new)
             handleRecoverableError(Message[InvalidOperator, The string '=' isn't a user-definable operator., null, {lexeme: =}], =, =)
             handleInvalidOperatorName(operator, =)
@@ -147,7 +147,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(D, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, D)
+    beginClassDeclaration(class, null, null, null, D)
       handleNoType(D)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -275,7 +275,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
             handleNoType(;)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(super_invocation, methodDeclarationContinuation)
@@ -302,7 +302,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
             handleNoType(;)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(this_redirection, methodDeclarationContinuation)
@@ -332,7 +332,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, })
       handleNoType(var)
       handleIdentifier(constructor_invocation_const, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -354,7 +354,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_const_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -378,7 +378,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_const_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -400,7 +400,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_const_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -426,7 +426,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -448,7 +448,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -472,7 +472,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -494,7 +494,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_explicit_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -520,7 +520,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -541,7 +541,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -565,7 +565,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -591,7 +591,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_invocation_implicit_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -617,7 +617,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -637,7 +637,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -663,7 +663,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_generic_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -695,7 +695,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -721,7 +721,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -746,7 +746,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed_generic, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -777,7 +777,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed_generic_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
@@ -814,7 +814,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
       handleNoType(var)
       handleIdentifier(constructor_tearoff_prefixed_method_invocation, topLevelVariableDeclaration)
       beginFieldInitializer(=)
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 5976ef9..8c87ac4 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -33,8 +32,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -69,8 +68,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -153,7 +152,7 @@
                 listener: beginMetadataStar(new)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'new'., null, {lexeme: new}], new, new)
                 listener: handleInvalidMember(new)
@@ -164,13 +163,13 @@
                 listener: beginMetadataStar(=)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(new, new, null, null, null, null, null, null, new, Instance of 'NoType', null, DeclarationKind.Class, C)
-                parseInvalidOperatorDeclaration(new, null, null, null, null, null, null, new, DeclarationKind.Class, C)
+              recoverFromInvalidMember(new, new, null, null, null, null, null, null, null, new, Instance of 'NoType', null, DeclarationKind.Class, C)
+                parseInvalidOperatorDeclaration(new, null, null, null, null, null, null, null, new, DeclarationKind.Class, C)
                   reportRecoverableError(=, MissingOperatorKeyword)
                     listener: handleRecoverableError(MissingOperatorKeyword, =, =)
                   rewriter()
-                  parseMethod(new, null, null, null, null, null, null, new, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                  parseMethod(new, null, null, null, null, null, null, null, new, Instance of 'NoType', null, operator, DeclarationKind.Class, C, false)
+                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                     listener: handleNoType(new)
                     parseOperatorName(new)
                       isUnaryMinus(=)
@@ -209,7 +208,7 @@
                 listener: beginMetadataStar(null)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, Instance of 'NoType', null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got 'null'., null, {lexeme: null}], null, null)
                 listener: handleInvalidMember(null)
@@ -220,7 +219,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(null, null, null, null, null, null, null, null, null, Instance of 'NoType', null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(null, null, null, null, null, null, null, null, null, null, Instance of 'NoType', null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
@@ -234,13 +233,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(D, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, D)
+        listener: beginClassDeclaration(class, null, null, null, D)
         parseClass(D, class, class, D)
           parseClassHeaderOpt(D, class, class)
             parseClassExtendsOpt(D)
@@ -498,8 +496,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -561,8 +559,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, D)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, D, DeclarationKind.Class, D, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -626,12 +624,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(var)
-      parseFields(}, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
+      parseFields(}, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, })
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_const, constructor_invocation_const, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_const, constructor_invocation_const, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -667,12 +665,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_const_generic, constructor_invocation_const_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_const_generic, constructor_invocation_const_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -709,12 +707,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_prefixed, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const_prefixed, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_const_prefixed, constructor_invocation_const_prefixed, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_const_prefixed, constructor_invocation_const_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -751,12 +749,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_const_prefixed_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_const_prefixed_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_const_prefixed_generic, constructor_invocation_const_prefixed_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_const_prefixed_generic, constructor_invocation_const_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -797,12 +795,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_explicit, constructor_invocation_explicit, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_explicit, constructor_invocation_explicit, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -839,12 +837,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_explicit_generic, constructor_invocation_explicit_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_explicit_generic, constructor_invocation_explicit_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -882,12 +880,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_prefixed, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit_prefixed, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_explicit_prefixed, constructor_invocation_explicit_prefixed, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_explicit_prefixed, constructor_invocation_explicit_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -925,12 +923,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_explicit_prefixed_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_explicit_prefixed_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_explicit_prefixed_generic, constructor_invocation_explicit_prefixed_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_explicit_prefixed_generic, constructor_invocation_explicit_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -972,12 +970,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_implicit, constructor_invocation_implicit, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_implicit, constructor_invocation_implicit, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1018,12 +1016,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_implicit_generic, constructor_invocation_implicit_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_implicit_generic, constructor_invocation_implicit_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1059,12 +1057,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_prefixed, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit_prefixed, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_implicit_prefixed, constructor_invocation_implicit_prefixed, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_implicit_prefixed, constructor_invocation_implicit_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1116,12 +1114,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_invocation_implicit_prefixed_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_invocation_implicit_prefixed_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_invocation_implicit_prefixed_generic, constructor_invocation_implicit_prefixed_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_invocation_implicit_prefixed_generic, constructor_invocation_implicit_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1161,12 +1159,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff, constructor_tearoff, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff, constructor_tearoff, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1203,12 +1201,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_generic, constructor_tearoff_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_generic, constructor_tearoff_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1251,12 +1249,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_generic_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_generic_method_invocation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_generic_method_invocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_generic_method_invocation, constructor_tearoff_generic_method_invocation, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_generic_method_invocation, constructor_tearoff_generic_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1314,12 +1312,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_method_invocation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_method_invocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_method_invocation, constructor_tearoff_method_invocation, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_method_invocation, constructor_tearoff_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1371,12 +1369,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_prefixed, constructor_tearoff_prefixed, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_prefixed, constructor_tearoff_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1424,12 +1422,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_generic, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_generic, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed_generic, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_prefixed_generic, constructor_tearoff_prefixed_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_prefixed_generic, constructor_tearoff_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1483,12 +1481,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_generic_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_generic_method_invocation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed_generic_method_invocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_prefixed_generic_method_invocation, constructor_tearoff_prefixed_generic_method_invocation, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_prefixed_generic_method_invocation, constructor_tearoff_prefixed_generic_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
@@ -1557,12 +1555,12 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(var)
-      parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_method_invocation, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, ;)
+      parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', constructor_tearoff_prefixed_method_invocation, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, ;)
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(constructor_tearoff_prefixed_method_invocation, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(constructor_tearoff_prefixed_method_invocation, constructor_tearoff_prefixed_method_invocation, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(constructor_tearoff_prefixed_method_invocation, constructor_tearoff_prefixed_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
             parsePrecedenceExpression(=, 1, true)
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 5c996b6..87f4d7f 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(bool, typeReference)
             handleNoTypeArguments(operator)
             handleType(bool, null)
@@ -43,7 +43,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -72,7 +72,7 @@
         beginMetadataStar(bool)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(bool, typeReference)
             handleNoTypeArguments(operator)
             handleType(bool, null)
@@ -101,7 +101,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -130,7 +130,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, 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 21ad05a..0f8ef5f 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(bool)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(bool, null)
@@ -90,8 +89,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -148,8 +147,8 @@
                 listener: beginMetadataStar(bool)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(bool, null)
@@ -206,8 +205,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -264,8 +263,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
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 52352ee..1f57566 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
@@ -11,7 +11,7 @@
     handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
     handleIdentifier(operator, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, operator)
+    beginClassDeclaration(class, null, null, null, operator)
       handleNoType(operator)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -21,7 +21,7 @@
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType({)
             handleOperatorName(operator, ^)
             handleNoTypeVariables(()
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 710f8db..dec4f2e 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
@@ -7,15 +7,14 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
             listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
           listener: handleIdentifier(operator, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, operator)
+        listener: beginClassDeclaration(class, null, null, null, operator)
         parseClass(operator, class, class, operator)
           parseClassHeaderOpt(operator, class, class)
             parseClassExtendsOpt(operator)
@@ -34,8 +33,8 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, operator, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, operator, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, ^)
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 72dfdce..3632e57 100644
--- a/pkg/front_end/parser_testcases/general/try_catch.dart.expect
+++ b/pkg/front_end/parser_testcases/general/try_catch.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 ec37294..e241c98 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/general/try_finally.dart.expect b/pkg/front_end/parser_testcases/general/try_finally.dart.expect
index 8f0f03e..032ea2e 100644
--- a/pkg/front_end/parser_testcases/general/try_finally.dart.expect
+++ b/pkg/front_end/parser_testcases/general/try_finally.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/general/try_finally.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/try_finally.dart.intertwined.expect
index 4e09409..fe8200b 100644
--- a/pkg/front_end/parser_testcases/general/try_finally.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/try_finally.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart b/pkg/front_end/parser_testcases/macros/augment_class.dart
new file mode 100644
index 0000000..5164686
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart
@@ -0,0 +1,4 @@
+augment class Class {}
+abstract augment class Class {}
+augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.expect
new file mode 100644
index 0000000..fd173c1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.expect
@@ -0,0 +1,154 @@
+Problems reported:
+
+parser/macros/augment_class:1:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment class Class {}
+^^^^^^^
+
+parser/macros/augment_class:1:1: Expected ';' after this.
+augment class Class {}
+^^^^^^^
+
+parser/macros/augment_class:2:1: Can't have modifier 'abstract' here.
+abstract augment class Class {}
+^^^^^^^^
+
+parser/macros/augment_class:2:10: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+abstract augment class Class {}
+         ^^^^^^^
+
+parser/macros/augment_class:2:10: Expected ';' after this.
+abstract augment class Class {}
+         ^^^^^^^
+
+parser/macros/augment_class:3:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment class Class = Object with Mixin;
+^^^^^^^
+
+parser/macros/augment_class:3:1: Expected ';' after this.
+augment class Class = Object with Mixin;
+^^^^^^^
+
+parser/macros/augment_class:4:1: Can't have modifier 'abstract' here.
+abstract augment class Class = Object with Mixin;
+^^^^^^^^
+
+parser/macros/augment_class:4:10: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+abstract augment class Class = Object with Mixin;
+         ^^^^^^^
+
+parser/macros/augment_class:4:10: Expected ';' after this.
+abstract augment class Class = Object with Mixin;
+         ^^^^^^^
+
+beginCompilationUnit(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType()
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginTopLevelMember(abstract)
+    handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(abstract)
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, abstract, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, Class)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(augment)
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(})
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, null, null, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(abstract)
+  beginMetadataStar(abstract)
+  endMetadataStar(0)
+  beginTopLevelMember(abstract)
+    handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
+      handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+      handleNoType(abstract)
+      handleIdentifier(augment, topLevelVariableDeclaration)
+      handleNoFieldInitializer(class)
+      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, 1, abstract, ;)
+  endTopLevelDeclaration(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    beginNamedMixinApplication(class, null, null, null, Class)
+      handleIdentifier(Object, typeReference)
+      handleNoTypeArguments(with)
+      handleType(Object, null)
+      beginTypeList(Mixin)
+        handleIdentifier(Mixin, typeReference)
+        handleNoTypeArguments(;)
+        handleType(Mixin, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration()
+endCompilationUnit(8, )
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.intertwined.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.intertwined.expect
new file mode 100644
index 0000000..6f3bad2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.intertwined.expect
@@ -0,0 +1,208 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(class)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(abstract)
+      reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(}, null, null, null, null, null, null, null, abstract, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(abstract)
+        ensureIdentifierPotentiallyRecovered(abstract, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(class)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, abstract, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, Class)
+        parseClass(Class, class, class, Class)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class)
+              listener: handleNoType(Class)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(Class)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(Class)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrValue(}, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(augment)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(}, null, null, null, null, null, null, null, }, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, })
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(class)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, null, null, Class)
+        parseNamedMixinApplication(Class, class, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration(abstract)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(abstract)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(abstract)
+      reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+        listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(;, null, null, null, null, null, null, null, abstract, Instance of 'NoType', augment, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
+        reportRecoverableError(augment, MissingConstFinalVarOrType)
+          listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+        listener: handleNoType(abstract)
+        ensureIdentifierPotentiallyRecovered(abstract, topLevelVariableDeclaration, false)
+          listener: handleIdentifier(augment, topLevelVariableDeclaration)
+        parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.TopLevel, null)
+          listener: handleNoFieldInitializer(class)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, 1, abstract, ;)
+  listener: endTopLevelDeclaration(class)
+  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
+      parseClassOrNamedMixinApplication(null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(=)
+        listener: beginNamedMixinApplication(class, null, null, null, Class)
+        parseNamedMixinApplication(Class, class, class)
+          listener: handleIdentifier(Object, typeReference)
+          listener: handleNoTypeArguments(with)
+          listener: handleType(Object, null)
+          parseMixinApplicationRest(Object)
+            parseTypeList(with)
+              listener: beginTypeList(Mixin)
+              listener: handleIdentifier(Mixin, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(Mixin, null)
+              listener: endTypeList(1)
+            listener: handleNamedMixinApplicationWithClause(with)
+          ensureSemicolon(Mixin)
+          listener: endNamedMixinApplication(class, class, =, null, ;)
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(8, )
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.parser.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.parser.expect
new file mode 100644
index 0000000..f8f65a9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.parser.expect
@@ -0,0 +1,11 @@
+NOTICE: Stream was rewritten by parser!
+
+augment ;class Class {}
+abstract augment ;class Class {}
+augment ;class Class = Object with Mixin;
+abstract augment ;class Class = Object with Mixin;
+
+augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/macros/augment_class.dart.scanner.expect b/pkg/front_end/parser_testcases/macros/augment_class.dart.scanner.expect
new file mode 100644
index 0000000..7808f04
--- /dev/null
+++ b/pkg/front_end/parser_testcases/macros/augment_class.dart.scanner.expect
@@ -0,0 +1,9 @@
+augment class Class {}
+abstract augment class Class {}
+augment class Class = Object with Mixin;
+abstract augment class Class = Object with Mixin;
+
+augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+abstract[KeywordToken] augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]}[SimpleToken]
+augment[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken]
+abstract[KeywordToken] augment[StringToken] class[KeywordToken] Class[StringToken] =[SimpleToken] Object[StringToken] with[KeywordToken] Mixin[StringToken];[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
index 3198253..ddf0d81 100644
--- a/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, macro, Class)
+    beginClassDeclaration(class, null, macro, null, Class)
       handleNoType(Class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -19,7 +19,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, macro, Class)
+    beginClassDeclaration(abstract, abstract, macro, null, Class)
       handleNoType(Class)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -34,7 +34,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(class, null, macro, Class)
+    beginNamedMixinApplication(class, null, macro, null, Class)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
@@ -51,7 +51,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Class, classOrMixinDeclaration)
     handleNoTypeVariables(=)
-    beginNamedMixinApplication(abstract, abstract, macro, Class)
+    beginNamedMixinApplication(abstract, abstract, macro, null, Class)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(with)
       handleType(Object, null)
diff --git a/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect b/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
index 08e38d8..5430ce6 100644
--- a/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/macros/macro_class.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(macro)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, macro, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, macro)
-      parseClassOrNamedMixinApplication(null, macro, class)
+      parseClassOrNamedMixinApplication(null, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, macro, Class)
+        listener: beginClassDeclaration(class, null, macro, null, Class)
         parseClass(Class, class, class, Class)
           parseClassHeaderOpt(Class, class, class)
             parseClassExtendsOpt(Class)
@@ -35,14 +34,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, macro, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, macro)
-        parseTopLevelKeywordModifiers(abstract, macro)
-      parseClassOrNamedMixinApplication(abstract, macro, class)
+      parseClassOrNamedMixinApplication(abstract, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, macro, Class)
+        listener: beginClassDeclaration(abstract, abstract, macro, null, Class)
         parseClass(Class, abstract, class, Class)
           parseClassHeaderOpt(Class, abstract, class)
             parseClassExtendsOpt(Class)
@@ -64,13 +61,12 @@
       listener: beginMetadataStar(macro)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, macro, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, macro)
-      parseClassOrNamedMixinApplication(null, macro, class)
+      parseClassOrNamedMixinApplication(null, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(class, null, macro, Class)
+        listener: beginNamedMixinApplication(class, null, macro, null, Class)
         parseNamedMixinApplication(Class, class, class)
           listener: handleIdentifier(Object, typeReference)
           listener: handleNoTypeArguments(with)
@@ -91,14 +87,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, macro, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, macro)
-        parseTopLevelKeywordModifiers(abstract, macro)
-      parseClassOrNamedMixinApplication(abstract, macro, class)
+      parseClassOrNamedMixinApplication(abstract, macro, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class, classOrMixinDeclaration)
         listener: handleNoTypeVariables(=)
-        listener: beginNamedMixinApplication(abstract, abstract, macro, Class)
+        listener: beginNamedMixinApplication(abstract, abstract, macro, null, Class)
         parseNamedMixinApplication(Class, abstract, class)
           listener: handleIdentifier(Object, typeReference)
           listener: handleNoTypeArguments(with)
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 559ccec..d504573 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 d9048a1..985578d 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 eca0386..a2d09c6 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 ccd3a17..0e86802 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 8464fb7..b3e65bd 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 c9e91b4..37721d8 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 9255ce3..620e5ab 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 7dd363a..8e4acb1 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 1529f35..7835582 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 629cc0a..d8d323d 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 37ab35f..89c58a5 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 58371cc..1b8fd87 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 bcb0253..8d817a4 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 1d0e15f8..9a8e4f2 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 1540cdb..20ea60b 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 6f56fde..9fbc8ef 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 12c7433..50105ca 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 3cfb54ca..021b068 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
index 048ba71..aaad1aa 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.expect
@@ -58,7 +58,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, C)
+    beginClassDeclaration(abstract, abstract, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -69,87 +69,87 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
         beginMember()
-          beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, {)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i1)
             handleType(int, null)
             handleIdentifier(i1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, final, 1, final, ;)
+          endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
         beginMember()
-          beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, ;)
             handleNoType(abstract)
             handleIdentifier(i2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, final, 1, final, ;)
+          endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
         beginMember()
-          beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, null, ;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, null, ;)
             handleIdentifier(num, typeReference)
             handleNoTypeArguments(i3)
             handleType(num, null)
             handleIdentifier(i3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, covariant, null, null, 1, covariant, ;)
+          endClassFields(abstract, null, null, null, covariant, null, null, 1, covariant, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
         beginMember()
-          beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, var, ;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, var, ;)
             handleNoType(var)
             handleIdentifier(i4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, covariant, null, var, 1, covariant, ;)
+          endClassFields(abstract, null, null, null, covariant, null, var, 1, covariant, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
         beginMember()
-          beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, ;)
             handleNoType(abstract)
             handleIdentifier(i5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, final, 1, final, ;)
+          endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(var)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
         beginMember()
-          beginFields(DeclarationKind.Class, abstract, null, null, null, null, var, ;)
+          beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, var, ;)
             handleNoType(abstract)
             handleIdentifier(i6, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, var, 1, var, ;)
+          endClassFields(abstract, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(C, typeReference)
             handleNoTypeArguments(abstract)
             handleType(C, null)
             handleIdentifier(abstract, fieldDeclaration)
             handleNoFieldInitializer(i7)
             handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], abstract, abstract)
-          endClassFields(null, null, null, null, null, null, 1, C, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, C, ;)
         endMember()
         beginMetadataStar(i7)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, i7, i7)
             handleNoType(;)
             handleIdentifier(i7, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, i7, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, i7, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
     endClassDeclaration(abstract, })
@@ -159,7 +159,7 @@
   beginTopLevelMember(var)
     handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
     handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, })
       handleNoType(abstract)
       handleIdentifier(foo, topLevelVariableDeclaration)
       handleNoFieldInitializer(;)
@@ -170,7 +170,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Bar, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(abstract, abstract, null, Bar)
+    beginClassDeclaration(abstract, abstract, null, null, Bar)
       handleNoType(Bar)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -182,12 +182,12 @@
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'required' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: required, string2: covariant}], required, required)
         handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'required' here., Try removing 'required'., {lexeme: required}], required, required)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, x, x)
             handleNoType(required)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, covariant, null, null, 1, covariant, ;)
+          endClassFields(null, null, null, null, covariant, null, null, 1, covariant, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(abstract, })
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
index 525c27c..7401376 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/abstract_placement.dart.intertwined.expect
@@ -7,14 +7,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-        parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, C)
+        listener: beginClassDeclaration(abstract, abstract, null, null, C)
         parseClass(C, abstract, class, C)
           parseClassHeaderOpt(C, abstract, class)
             parseClassExtendsOpt(C)
@@ -35,16 +33,16 @@
               reportRecoverableError(abstract, Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
               listener: beginMember()
-              parseFields({, abstract, null, null, null, null, final, abstract, Instance of 'SimpleType', i1, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, {)
+              parseFields({, abstract, null, null, null, null, null, final, abstract, Instance of 'SimpleType', i1, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i1)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(i1, fieldDeclaration)
-                parseFieldInitializerOpt(i1, i1, null, abstract, null, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i1, i1, null, abstract, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -54,14 +52,14 @@
               reportRecoverableError(abstract, Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
               listener: beginMember()
-              parseFields(;, abstract, null, null, null, null, final, abstract, Instance of 'NoType', i2, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
+              parseFields(;, abstract, null, null, null, null, null, final, abstract, Instance of 'NoType', i2, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, ;)
                 listener: handleNoType(abstract)
                 ensureIdentifierPotentiallyRecovered(abstract, fieldDeclaration, false)
                   listener: handleIdentifier(i2, fieldDeclaration)
-                parseFieldInitializerOpt(i2, i2, null, abstract, null, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i2, i2, null, abstract, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -71,16 +69,16 @@
               reportRecoverableError(abstract, Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
               listener: beginMember()
-              parseFields(;, abstract, null, null, covariant, null, null, abstract, Instance of 'SimpleType', i3, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, null, ;)
+              parseFields(;, abstract, null, null, null, covariant, null, null, abstract, Instance of 'SimpleType', i3, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, null, ;)
                 listener: handleIdentifier(num, typeReference)
                 listener: handleNoTypeArguments(i3)
                 listener: handleType(num, null)
                 ensureIdentifierPotentiallyRecovered(num, fieldDeclaration, false)
                   listener: handleIdentifier(i3, fieldDeclaration)
-                parseFieldInitializerOpt(i3, i3, null, abstract, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i3, i3, null, abstract, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, covariant, null, null, 1, covariant, ;)
+                listener: endClassFields(abstract, null, null, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -90,14 +88,14 @@
               reportRecoverableError(abstract, Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: abstract, string2: covariant}], abstract, abstract)
               listener: beginMember()
-              parseFields(;, abstract, null, null, covariant, null, var, var, Instance of 'NoType', i4, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, abstract, null, null, covariant, null, var, ;)
+              parseFields(;, abstract, null, null, null, covariant, null, var, var, Instance of 'NoType', i4, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(i4, fieldDeclaration)
-                parseFieldInitializerOpt(i4, i4, null, abstract, null, var, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i4, i4, null, abstract, null, null, var, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, covariant, null, var, 1, covariant, ;)
+                listener: endClassFields(abstract, null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -107,14 +105,14 @@
               reportRecoverableError(abstract, Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'final'., Try re-ordering the modifiers., {string: abstract, string2: final}], abstract, abstract)
               listener: beginMember()
-              parseFields(;, abstract, null, null, null, null, final, abstract, Instance of 'NoType', i5, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, final, ;)
+              parseFields(;, abstract, null, null, null, null, null, final, abstract, Instance of 'NoType', i5, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, ;)
                 listener: handleNoType(abstract)
                 ensureIdentifierPotentiallyRecovered(abstract, fieldDeclaration, false)
                   listener: handleIdentifier(i5, fieldDeclaration)
-                parseFieldInitializerOpt(i5, i5, null, abstract, null, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i5, i5, null, abstract, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, final, 1, final, ;)
+                listener: endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, var)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -124,14 +122,14 @@
               reportRecoverableError(abstract, Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
               listener: beginMember()
-              parseFields(;, abstract, null, null, null, null, var, abstract, Instance of 'NoType', i6, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, var, ;)
+              parseFields(;, abstract, null, null, null, null, null, var, abstract, Instance of 'NoType', i6, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, abstract, null, null, null, null, null, var, ;)
                 listener: handleNoType(abstract)
                 ensureIdentifierPotentiallyRecovered(abstract, fieldDeclaration, false)
                   listener: handleIdentifier(i6, fieldDeclaration)
-                parseFieldInitializerOpt(i6, i6, null, abstract, null, var, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i6, i6, null, abstract, null, null, var, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, var, 1, var, ;)
+                listener: endClassFields(abstract, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrValue(}, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -139,20 +137,20 @@
                 listener: beginMetadataStar(C)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', abstract, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', abstract, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(C, typeReference)
                 listener: handleNoTypeArguments(abstract)
                 listener: handleType(C, null)
                 ensureIdentifierPotentiallyRecovered(C, fieldDeclaration, false)
                   listener: handleIdentifier(abstract, fieldDeclaration)
-                parseFieldInitializerOpt(abstract, abstract, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(i7)
                 ensureSemicolon(abstract)
                   reportRecoverableError(abstract, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], abstract, abstract)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, 1, C, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, C, ;)
               listener: endMember()
             notEofOrValue(}, i7)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -161,16 +159,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', i7, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', i7, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 reportRecoverableError(i7, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, i7, i7)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, fieldDeclaration, false)
                   listener: handleIdentifier(i7, fieldDeclaration)
-                parseFieldInitializerOpt(i7, i7, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i7, i7, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, i7, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, i7, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
@@ -186,12 +184,12 @@
         listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'abstract' should be before the modifier 'var'., Try re-ordering the modifiers., {string: abstract, string2: var}], abstract, abstract)
       reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'abstract' here., Try removing 'abstract'., {lexeme: abstract}], abstract, abstract)
-      parseFields(}, null, null, null, null, null, var, abstract, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, })
+      parseFields(}, null, null, null, null, null, null, var, abstract, Instance of 'NoType', foo, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, })
         listener: handleNoType(abstract)
         ensureIdentifierPotentiallyRecovered(abstract, topLevelVariableDeclaration, false)
           listener: handleIdentifier(foo, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(foo, foo, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(foo, foo, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(abstract)
@@ -200,14 +198,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-        parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Bar, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(abstract, abstract, null, Bar)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Bar)
         parseClass(Bar, abstract, class, Bar)
           parseClassHeaderOpt(Bar, abstract, class)
             parseClassExtendsOpt(Bar)
@@ -231,16 +227,16 @@
                 listener: handleRecoverableError(Message[ExtraneousModifier, Can't have modifier 'required' here., Try removing 'required'., {lexeme: required}], required, required)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields({, null, null, null, covariant, null, null, required, Instance of 'NoType', x, DeclarationKind.Class, Bar, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, null, {)
+              parseFields({, null, null, null, null, covariant, null, null, required, Instance of 'NoType', x, DeclarationKind.Class, Bar, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, null, {)
                 reportRecoverableError(x, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x, x)
                 listener: handleNoType(required)
                 ensureIdentifierPotentiallyRecovered(required, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.Class, Bar)
+                parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Bar)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, covariant, null, null, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
index 1542fd5..dab5f4b 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.expect
@@ -41,7 +41,7 @@
   endMetadataStar(0)
   beginTopLevelMember(final)
     handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
-    beginFields(DeclarationKind.TopLevel, null, external, null, null, null, final, )
+    beginFields(DeclarationKind.TopLevel, null, null, external, null, null, null, final, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(i1)
       handleType(int, null)
@@ -53,7 +53,7 @@
   endMetadataStar(0)
   beginTopLevelMember(var)
     handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'var'., Try re-ordering the modifiers., {string: external, string2: var}], external, external)
-    beginFields(DeclarationKind.TopLevel, null, external, null, null, null, var, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, external, null, null, null, var, ;)
       handleNoType(external)
       handleIdentifier(i2, topLevelVariableDeclaration)
       handleNoFieldInitializer(;)
@@ -64,7 +64,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -75,66 +75,66 @@
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: external, string2: covariant}], external, external)
         beginMember()
-          beginFields(DeclarationKind.Class, null, external, null, covariant, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, external, null, covariant, null, null, {)
             handleIdentifier(num, typeReference)
             handleNoTypeArguments(i3)
             handleType(num, null)
             handleIdentifier(i3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, external, null, covariant, null, null, 1, covariant, ;)
+          endClassFields(null, null, external, null, covariant, null, null, 1, covariant, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
         beginMember()
-          beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, external, null, null, null, final, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(i4)
             handleType(int, null)
             handleIdentifier(i4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, external, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, external, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
         beginMember()
-          beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, external, null, null, null, final, ;)
             handleNoType(external)
             handleIdentifier(i5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, external, null, null, null, final, 1, final, ;)
+          endClassFields(null, null, external, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
         beginMember()
-          beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, external, static, null, null, final, ;)
             handleNoType(final)
             handleIdentifier(i6, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, external, static, null, null, final, 1, static, ;)
+          endClassFields(null, null, external, static, null, null, final, 1, static, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
         beginMember()
-          beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, external, static, null, null, final, ;)
             handleNoType(external)
             handleIdentifier(i7, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, external, static, null, null, final, 1, static, ;)
+          endClassFields(null, null, external, static, null, null, final, 1, static, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'static' should be before the modifier 'final'., Try re-ordering the modifiers., {string: static, string2: final}], static, static)
         handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
         beginMember()
-          beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
+          beginFields(DeclarationKind.Class, null, null, external, static, null, null, final, ;)
             handleNoType(external)
             handleIdentifier(i8, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, external, static, null, null, final, 1, final, ;)
+          endClassFields(null, null, external, static, null, null, final, 1, final, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
index 23beab2..69002dd 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/external_placement.dart.intertwined.expect
@@ -10,14 +10,14 @@
       listener: beginTopLevelMember(final)
       reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}])
         listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
-      parseFields(, null, external, null, null, null, final, external, Instance of 'SimpleType', i1, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, external, null, null, null, final, )
+      parseFields(, null, null, external, null, null, null, final, external, Instance of 'SimpleType', i1, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, external, null, null, null, final, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(i1)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i1, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i1, i1, null, null, external, final, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i1, i1, null, null, null, external, final, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(external, null, null, null, final, 1, final, ;)
   listener: endTopLevelDeclaration(var)
@@ -29,12 +29,12 @@
       listener: beginTopLevelMember(var)
       reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'var'., Try re-ordering the modifiers., {string: external, string2: var}])
         listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'var'., Try re-ordering the modifiers., {string: external, string2: var}], external, external)
-      parseFields(;, null, external, null, null, null, var, external, Instance of 'NoType', i2, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, external, null, null, null, var, ;)
+      parseFields(;, null, null, external, null, null, null, var, external, Instance of 'NoType', i2, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, external, null, null, null, var, ;)
         listener: handleNoType(external)
         ensureIdentifierPotentiallyRecovered(external, topLevelVariableDeclaration, false)
           listener: handleIdentifier(i2, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(i2, i2, null, null, external, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(i2, i2, null, null, null, external, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(external, null, null, null, var, 1, var, ;)
   listener: endTopLevelDeclaration(class)
@@ -43,13 +43,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -70,16 +69,16 @@
               reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: external, string2: covariant}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'covariant'., Try re-ordering the modifiers., {string: external, string2: covariant}], external, external)
               listener: beginMember()
-              parseFields({, null, external, null, covariant, null, null, external, Instance of 'SimpleType', i3, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, external, null, covariant, null, null, {)
+              parseFields({, null, null, external, null, covariant, null, null, external, Instance of 'SimpleType', i3, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, covariant, null, null, {)
                 listener: handleIdentifier(num, typeReference)
                 listener: handleNoTypeArguments(i3)
                 listener: handleType(num, null)
                 ensureIdentifierPotentiallyRecovered(num, fieldDeclaration, false)
                   listener: handleIdentifier(i3, fieldDeclaration)
-                parseFieldInitializerOpt(i3, i3, null, null, external, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i3, i3, null, null, null, external, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, external, null, covariant, null, null, 1, covariant, ;)
+                listener: endClassFields(null, null, external, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -89,16 +88,16 @@
               reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
               listener: beginMember()
-              parseFields(;, null, external, null, null, null, final, external, Instance of 'SimpleType', i4, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
+              parseFields(;, null, null, external, null, null, null, final, external, Instance of 'SimpleType', i4, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, final, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i4)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(i4, fieldDeclaration)
-                parseFieldInitializerOpt(i4, i4, null, null, external, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i4, i4, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, external, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, external, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -108,14 +107,14 @@
               reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'final'., Try re-ordering the modifiers., {string: external, string2: final}], external, external)
               listener: beginMember()
-              parseFields(;, null, external, null, null, null, final, external, Instance of 'NoType', i5, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, external, null, null, null, final, ;)
+              parseFields(;, null, null, external, null, null, null, final, external, Instance of 'NoType', i5, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, final, ;)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, fieldDeclaration, false)
                   listener: handleIdentifier(i5, fieldDeclaration)
-                parseFieldInitializerOpt(i5, i5, null, null, external, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i5, i5, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, external, null, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, external, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -125,14 +124,14 @@
               reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
               listener: beginMember()
-              parseFields(;, null, external, static, null, null, final, final, Instance of 'NoType', i6, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
+              parseFields(;, null, null, external, static, null, null, final, final, Instance of 'NoType', i6, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, static, null, null, final, ;)
                 listener: handleNoType(final)
                 ensureIdentifierPotentiallyRecovered(final, fieldDeclaration, false)
                   listener: handleIdentifier(i6, fieldDeclaration)
-                parseFieldInitializerOpt(i6, i6, null, null, external, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i6, i6, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, external, static, null, null, final, 1, static, ;)
+                listener: endClassFields(null, null, external, static, null, null, final, 1, static, ;)
               listener: endMember()
             notEofOrValue(}, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -142,14 +141,14 @@
               reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
               listener: beginMember()
-              parseFields(;, null, external, static, null, null, final, external, Instance of 'NoType', i7, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
+              parseFields(;, null, null, external, static, null, null, final, external, Instance of 'NoType', i7, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, static, null, null, final, ;)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, fieldDeclaration, false)
                   listener: handleIdentifier(i7, fieldDeclaration)
-                parseFieldInitializerOpt(i7, i7, null, null, external, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i7, i7, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, external, static, null, null, final, 1, static, ;)
+                listener: endClassFields(null, null, external, static, null, null, final, 1, static, ;)
               listener: endMember()
             notEofOrValue(}, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -161,14 +160,14 @@
               reportRecoverableError(external, Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}])
                 listener: handleRecoverableError(Message[ModifierOutOfOrder, The modifier 'external' should be before the modifier 'static'., Try re-ordering the modifiers., {string: external, string2: static}], external, external)
               listener: beginMember()
-              parseFields(;, null, external, static, null, null, final, external, Instance of 'NoType', i8, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, external, static, null, null, final, ;)
+              parseFields(;, null, null, external, static, null, null, final, external, Instance of 'NoType', i8, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, external, static, null, null, final, ;)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, fieldDeclaration, false)
                   listener: handleIdentifier(i8, fieldDeclaration)
-                parseFieldInitializerOpt(i8, i8, null, null, external, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(i8, i8, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, external, static, null, null, final, 1, final, ;)
+                listener: endClassFields(null, null, external, static, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
index d9f84e6..22d669e 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.expect
@@ -24,7 +24,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -48,7 +48,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, })
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, null, })
       handleRecoverableError(MissingConstFinalVarOrType, y, y)
       handleNoType(late)
       handleIdentifier(y, topLevelVariableDeclaration)
@@ -60,7 +60,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -70,17 +70,17 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, z, z)
             handleNoType(late)
             handleIdentifier(z, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, late, null, 1, late, ;)
+          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -105,7 +105,7 @@
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, static, null, null, null, bar)
+          beginMethod(DeclarationKind.Class, null, null, static, null, null, null, bar)
             handleVoidKeyword(void)
             handleIdentifier(bar, methodDeclaration)
             handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
index c5b6907..bf85ccf 100644
--- a/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/error_recovery/late_without_var_etc.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -58,14 +58,14 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(late)
       isReservedKeyword(;)
-      parseFields(}, null, null, null, null, late, null, late, Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, })
+      parseFields(}, null, null, null, null, null, late, null, late, Instance of 'NoType', y, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, null, })
         reportRecoverableError(y, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, y, y)
         listener: handleNoType(late)
         ensureIdentifierPotentiallyRecovered(late, topLevelVariableDeclaration, false)
           listener: handleIdentifier(y, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(y, y, late, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(y, y, late, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, late, null, 1, late, ;)
   listener: endTopLevelDeclaration(class)
@@ -74,13 +74,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(;, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(;, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -100,16 +99,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields({, null, null, null, null, late, null, late, Instance of 'NoType', z, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
+              parseFields({, null, null, null, null, null, late, null, late, Instance of 'NoType', z, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, {)
                 reportRecoverableError(z, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, z, z)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(z, fieldDeclaration)
-                parseFieldInitializerOpt(z, z, late, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(z, z, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, late, null, 1, late, ;)
+                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrValue(}, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -117,8 +116,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -170,8 +169,8 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, static, null, null, null, static, Instance of 'VoidType', null, bar, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, static, null, null, null, bar)
+              parseMethod(}, null, null, null, static, null, null, null, static, Instance of 'VoidType', null, bar, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(bar, methodDeclaration)
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 9eb39b0..fe8f216 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39286.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 f7c4821..0109ec5 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
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 f839c84..024e3ff 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 08c5d05..c9caa2d 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
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 8a970e4..93f0fc4 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 28c57f8..0609ba0 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
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 ed21533..7bf5d36 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(test, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 67b9a92..536cdc4 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, test, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, test, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(test, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect
index 0b8bec0..f0d583e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect
index 9b90848..fa230b5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39326.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect
index 8254bd8..c8ea584 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Logger)
   endMetadataStar(0)
   beginTopLevelMember(Logger)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Logger, typeReference)
       handleNoTypeArguments(get)
       handleType(Logger, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect
index 01fa912..d451892 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Logger)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', get, log, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', get, log, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Logger, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(Logger, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect
index 683bb10..6185fd0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Logger)
   endMetadataStar(0)
   beginTopLevelMember(Logger)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Logger, typeReference)
       handleNoTypeArguments(get)
       handleType(Logger, null)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect
index fc65700..e244fe9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39697_prime.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Logger)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', get, log, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', get, log, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Logger, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(Logger, 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 9d5ae52..c7ab142 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType({)
             handleOperatorName(operator, [])
             handleNoTypeVariables(()
@@ -44,7 +44,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 4271b3d..427c908 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, [])
@@ -93,8 +92,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 c583b3c..7637e0a 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(A, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(A)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleNoType({)
             handleOperatorName(operator, [])
             handleNoTypeVariables(()
@@ -44,7 +44,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 4124e8f..9e35037 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(A, class, class, A)
           parseClassHeaderOpt(A, class, class)
             parseClassExtendsOpt(A)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, operator, DeclarationKind.Class, A, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, [])
@@ -93,8 +92,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 24db2d4..46fbaed 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(?)
       handleType(Object, ?)
@@ -28,7 +28,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(?)
       handleType(Object, ?)
@@ -61,7 +61,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 58c95fc..e532ab1 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(, null, , Instance of 'SimpleNullableType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleNullableType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(?)
         listener: handleType(Object, ?)
@@ -58,8 +58,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleNullableType', null, bar, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleNullableType', null, bar, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(?)
         listener: handleType(Object, ?)
@@ -115,8 +115,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 2e03885..9bd99df 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
@@ -2,7 +2,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(?)
       handleType(Object, ?)
@@ -28,7 +28,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(?)
       handleType(Object, ?)
@@ -61,7 +61,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 50ee388..3cd3ac7 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(, null, , Instance of 'SimpleNullableType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleNullableType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(?)
         listener: handleType(Object, ?)
@@ -58,8 +58,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleNullableType', null, bar, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleNullableType', null, bar, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(?)
         listener: handleType(Object, ?)
@@ -115,8 +115,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 784d7f5..a0cc20d 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
@@ -2,7 +2,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(?)
       handleType(Object, ?)
@@ -28,7 +28,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(?)
       handleType(Object, ?)
@@ -61,7 +61,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 1ce0ec5..abe2650 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(, null, , Instance of 'SimpleNullableType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleNullableType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(?)
         listener: handleType(Object, ?)
@@ -58,8 +58,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleNullableType', null, bar, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleNullableType', null, bar, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(?)
         listener: handleType(Object, ?)
@@ -115,8 +115,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 8045c84..c5bf508 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
@@ -2,7 +2,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(bar)
       handleType(Object, null)
@@ -50,7 +50,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 7d4f5c2..c56b490 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, bar, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', null, bar, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(bar)
         listener: handleType(Object, null)
@@ -87,8 +87,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 deeede9..e2bd69d 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
@@ -2,7 +2,7 @@
   beginMetadataStar(Object)
   endMetadataStar(0)
   beginTopLevelMember(Object)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Object, typeReference)
       handleNoTypeArguments(bar)
       handleType(Object, null)
@@ -50,7 +50,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 8db1a2c..fde2d69 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Object)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, bar, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', null, bar, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Object, typeReference)
         listener: handleNoTypeArguments(bar)
         listener: handleType(Object, null)
@@ -87,8 +87,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.expect
index f733ac0..8928d97 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleRecoverableError(Message[UnexpectedToken, Unexpected token '!'., null, {lexeme: !}], !, !)
@@ -27,7 +27,7 @@
   beginMetadataStar(bar)
   endMetadataStar(0)
   beginTopLevelMember(bar)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(bar, topLevelFunctionDeclaration)
       handleRecoverableError(Message[UnexpectedToken, Unexpected token '!'., null, {lexeme: !}], !, !)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.intertwined.expect
index 468cde8..242f5b2 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime5.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(foo)
       isReservedKeyword(!)
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
@@ -46,8 +46,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(bar)
       isReservedKeyword(!)
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, bar, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, bar, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.expect
index f0bd214..0bea5f7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(foo)
   endMetadataStar(0)
   beginTopLevelMember(foo)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(foo, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -16,7 +16,7 @@
   beginMetadataStar(bar)
   endMetadataStar(0)
   beginTopLevelMember(bar)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(bar, topLevelFunctionDeclaration)
       beginTypeVariables(<)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.intertwined.expect
index 8ff499f..4dfc115 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39776_prime6.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(foo)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, foo, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, foo, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo, topLevelFunctionDeclaration)
@@ -44,8 +44,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(bar)
       isReservedKeyword(<)
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, bar, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, bar, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(bar, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
index 174b591..880bee0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
@@ -30,7 +30,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -40,68 +40,68 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, {)
             handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
             handleNoType(late)
             handleIdentifier(x1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, late, null, 1, late, ;)
+          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, static, null, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
             handleNoType(late)
             handleIdentifier(x2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, static, null, late, null, 1, static, ;)
+          endClassFields(null, null, null, static, null, late, null, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
             handleNoType(late)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
+          endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, late, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
             handleNoType(late)
             handleIdentifier(x4, fieldDeclaration)
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, late, null, 1, late, ;)
+          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, static, null, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
             handleNoType(late)
             handleIdentifier(x5, fieldDeclaration)
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, static, null, late, null, 1, static, ;)
+          endClassFields(null, null, null, static, null, late, null, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
             handleNoType(late)
             handleIdentifier(x6, fieldDeclaration)
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
+          endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
index 281f0c0..93daa85 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -33,16 +32,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields({, null, null, null, null, late, null, late, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, {)
+              parseFields({, null, null, null, null, null, late, null, late, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, {)
                 reportRecoverableError(x1, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x1, x1)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(x1, fieldDeclaration)
-                parseFieldInitializerOpt(x1, x1, late, null, null, null, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x1, x1, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, late, null, 1, late, ;)
+                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrValue(}, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -51,16 +50,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields(;, null, null, static, null, late, null, late, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
+              parseFields(;, null, null, null, static, null, late, null, late, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, late, null, ;)
                 reportRecoverableError(x2, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x2, x2)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(x2, fieldDeclaration)
-                parseFieldInitializerOpt(x2, x2, late, null, null, null, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x2, x2, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, static, null, late, null, 1, static, ;)
+                listener: endClassFields(null, null, null, static, null, late, null, 1, static, ;)
               listener: endMember()
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -69,16 +68,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields(;, null, null, null, covariant, late, null, late, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
+              parseFields(;, null, null, null, null, covariant, late, null, late, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, ;)
                 reportRecoverableError(x3, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x3, x3)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(x3, fieldDeclaration)
-                parseFieldInitializerOpt(x3, x3, late, null, null, null, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x3, x3, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -87,14 +86,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, null, null, late, null, late, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, ;)
+              parseFields(;, null, null, null, null, null, late, null, late, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, ;)
                 reportRecoverableError(x4, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x4, x4)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(x4, fieldDeclaration)
-                parseFieldInitializerOpt(x4, x4, late, null, null, null, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x4, x4, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -103,7 +102,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, late, null, 1, late, ;)
+                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrValue(}, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -112,14 +111,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, static, null, late, null, late, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, static, null, late, null, ;)
+              parseFields(;, null, null, null, static, null, late, null, late, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, late, null, ;)
                 reportRecoverableError(x5, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x5, x5)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(x5, fieldDeclaration)
-                parseFieldInitializerOpt(x5, x5, late, null, null, null, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x5, x5, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -128,7 +127,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, static, null, late, null, 1, static, ;)
+                listener: endClassFields(null, null, null, static, null, late, null, 1, static, ;)
               listener: endMember()
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -137,14 +136,14 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(=)
-              parseFields(;, null, null, null, covariant, late, null, late, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, null, ;)
+              parseFields(;, null, null, null, null, covariant, late, null, late, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, ;)
                 reportRecoverableError(x6, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, x6, x6)
                 listener: handleNoType(late)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(x6, fieldDeclaration)
-                parseFieldInitializerOpt(x6, x6, late, null, null, null, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x6, x6, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -153,7 +152,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, covariant, late, null, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
index 33dcf4a..3b6c7ed 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,62 +14,62 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, var, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, {)
             handleNoType(var)
             handleIdentifier(x1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, var, 1, var, ;)
+          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
+          beginFields(DeclarationKind.Class, null, null, null, static, null, null, var, ;)
             handleNoType(var)
             handleIdentifier(x2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, static, null, null, var, 1, static, ;)
+          endClassFields(null, null, null, static, null, null, var, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, ;)
             handleNoType(var)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
+          endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
         endMember()
         beginMetadataStar(var)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, var, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, ;)
             handleNoType(var)
             handleIdentifier(x4, fieldDeclaration)
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, var, 1, var, ;)
+          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
+          beginFields(DeclarationKind.Class, null, null, null, static, null, null, var, ;)
             handleNoType(var)
             handleIdentifier(x5, fieldDeclaration)
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, static, null, null, var, 1, static, ;)
+          endClassFields(null, null, null, static, null, null, var, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, ;)
             handleNoType(var)
             handleIdentifier(x6, fieldDeclaration)
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
+          endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
index 167db06..3a718ae 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858_prime1.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -32,14 +31,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, var, var, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, var, {)
+              parseFields({, null, null, null, null, null, null, var, var, Instance of 'NoType', x1, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, {)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x1, fieldDeclaration)
-                parseFieldInitializerOpt(x1, x1, null, null, null, var, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x1, x1, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, var, 1, var, ;)
+                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrValue(}, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -47,14 +46,14 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, static, null, null, var, var, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
+              parseFields(;, null, null, null, static, null, null, var, var, Instance of 'NoType', x2, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x2, fieldDeclaration)
-                parseFieldInitializerOpt(x2, x2, null, null, null, var, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x2, x2, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, static, null, null, var, 1, static, ;)
+                listener: endClassFields(null, null, null, static, null, null, var, 1, static, ;)
               listener: endMember()
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -62,14 +61,14 @@
                 listener: beginMetadataStar(covariant)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, covariant, null, var, var, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
+              parseFields(;, null, null, null, null, covariant, null, var, var, Instance of 'NoType', x3, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x3, fieldDeclaration)
-                parseFieldInitializerOpt(x3, x3, null, null, null, var, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x3, x3, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, var)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -77,12 +76,12 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, var, ;)
+              parseFields(;, null, null, null, null, null, null, var, var, Instance of 'NoType', x4, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x4, fieldDeclaration)
-                parseFieldInitializerOpt(x4, x4, null, null, null, var, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x4, x4, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -91,7 +90,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, var, 1, var, ;)
+                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrValue(}, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -99,12 +98,12 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, static, null, null, var, var, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, static, null, null, var, ;)
+              parseFields(;, null, null, null, static, null, null, var, var, Instance of 'NoType', x5, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x5, fieldDeclaration)
-                parseFieldInitializerOpt(x5, x5, null, null, null, var, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x5, x5, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -113,7 +112,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, static, null, null, var, 1, static, ;)
+                listener: endClassFields(null, null, null, static, null, null, var, 1, static, ;)
               listener: endMember()
             notEofOrValue(}, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -121,12 +120,12 @@
                 listener: beginMetadataStar(covariant)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, covariant, null, var, var, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, var, ;)
+              parseFields(;, null, null, null, null, covariant, null, var, var, Instance of 'NoType', x6, DeclarationKind.Class, X, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, ;)
                 listener: handleNoType(var)
                 ensureIdentifierPotentiallyRecovered(var, fieldDeclaration, false)
                   listener: handleIdentifier(x6, fieldDeclaration)
-                parseFieldInitializerOpt(x6, x6, null, null, null, var, DeclarationKind.Class, X)
+                parseFieldInitializerOpt(x6, x6, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -135,7 +134,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, covariant, null, var, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.expect
index 2237904..7217bcd 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.intertwined.expect
index 7be843b..936ebb0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.expect
index 2661638..ab38809 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.intertwined.expect
index 4d90b4e..4a45768 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.expect
index 8fdf15f..fc31623 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.intertwined.expect
index bda756d..85cbf83 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.expect
index 005915d..07986d7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.intertwined.expect
index 9e17362..178480e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.expect
index f9990c4..a14690f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.intertwined.expect
index d9a4309..fc65ecc 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect
index 537e3e4..ba8a1cc 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect
index cd8f064..ea5feb9 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.expect
index 947256d..3c88f4e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.intertwined.expect
index 6c1ac05..42f9b1c 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_conditional_2.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect
index abcfbe6..aa1df2a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect
index faba2d8..f9de6bf 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_access.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect
index c8c2deb..8415b5f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect
index 81546e3..4bd6584 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_index_set.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 6ab48a8..9dcfc3f 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
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 b381072..2f84138 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 a0af8fd..a4df5d6 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
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 79d8e62..872d2a6 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect
index d0ea866..9fe3525 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.expect
@@ -12,7 +12,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect
index 3c3dc60..243dd75 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_method_call_no_type_arguments.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 5bf1444..a3bcbdb 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
@@ -24,7 +24,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 bd14c6d..dab8c9f 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 c200dba..5c7e077 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
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 abbe1a2..c14c7a9 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 68029a8..f7f74f3 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40793.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 b152414..4ff2191 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 1e4e813..330ec02 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 aa7d301..1da22990 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 39bbef9..8c44af9 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 fe14ada..9fa6435 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 10abc1f..c790069 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 49c026b..7a10fec 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 40fbd06..1a04353 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 e9f2347..944e564 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 1a737fe..fa573f88 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
@@ -2,7 +2,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 0ba3f9c..ae28fcf 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
index 507ba0a..db5428e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,13 +14,13 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, final, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(x)
             handleType(int, null)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, covariant, late, final, 1, covariant, ;)
+          endClassFields(null, null, null, null, covariant, late, final, 1, covariant, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
index 2c7dd9e..2959bb1 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_01.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -32,16 +31,16 @@
                 listener: beginMetadataStar(covariant)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
+              parseFields({, null, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, final, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(x)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, late, null, null, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(x, x, late, null, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, covariant, late, final, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, covariant, late, final, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
index dc9c09c..87e9f40 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -20,7 +20,7 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, final, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(x)
             handleType(int, null)
@@ -29,7 +29,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, late, final, 1, covariant, ;)
+          endClassFields(null, null, null, null, null, late, final, 1, covariant, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
index b8addec..a46fdb0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_02.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(covariant)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, late, final, {)
+              parseFields({, null, null, null, null, covariant, late, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, late, final, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(x)
                 listener: handleType(int, null)
@@ -41,7 +40,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 reportRecoverableError(covariant, FinalAndCovariantLateWithInitializer)
                   listener: handleRecoverableError(FinalAndCovariantLateWithInitializer, covariant, covariant)
-                parseFieldInitializerOpt(x, x, late, null, null, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(x, x, late, null, null, null, final, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -50,7 +49,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, late, final, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, null, late, final, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
index b3f7815..b2cab2f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.expect
@@ -10,7 +10,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -20,7 +20,7 @@
         beginMetadataStar(covariant)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, covariant, null, final, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, final, {)
             handleRecoverableError(FinalAndCovariant, covariant, covariant)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(x)
@@ -29,7 +29,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, final, 1, covariant, ;)
+          endClassFields(null, null, null, null, null, null, final, 1, covariant, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
index 884d7c4..4e26098 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40805_03.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(covariant)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, covariant, null, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, covariant, null, final, {)
+              parseFields({, null, null, null, null, covariant, null, final, final, Instance of 'SimpleType', x, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, covariant, null, final, {)
                 reportRecoverableError(covariant, FinalAndCovariant)
                   listener: handleRecoverableError(FinalAndCovariant, covariant, covariant)
                 listener: handleIdentifier(int, typeReference)
@@ -41,7 +40,7 @@
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, null, null, null, final, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(x, x, null, null, null, null, final, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -50,7 +49,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, final, 1, covariant, ;)
+                listener: endClassFields(null, null, null, null, null, null, final, 1, covariant, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 483e3af..b03f7c8 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,29 +14,29 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
             handleType(String, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, String, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, String, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(y)
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -85,7 +85,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(a, methodDeclarationContinuation)
@@ -149,7 +149,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(b, methodDeclarationContinuation)
@@ -213,7 +213,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(c, methodDeclarationContinuation)
@@ -277,7 +277,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(d, methodDeclarationContinuation)
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 1b44701..2739059 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,16 +31,16 @@
                 listener: beginMetadataStar(String)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
                 ensureIdentifierPotentiallyRecovered(?, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, String, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, String, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -49,16 +48,16 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(y, fieldDeclaration)
-                parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -67,8 +66,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -173,8 +172,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -318,8 +317,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -463,8 +462,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -608,8 +607,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
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 a5a1d9f..ef0735d 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,29 +14,29 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
             handleType(String, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, String, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, String, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(y)
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
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 a2fe16d..b8fd957 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,16 +31,16 @@
                 listener: beginMetadataStar(String)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
                 ensureIdentifierPotentiallyRecovered(?, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, String, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, String, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -49,16 +48,16 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(y, fieldDeclaration)
-                parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -67,8 +66,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
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 151beb8..e9498ef 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,29 +14,29 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(?)
             handleType(String, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, String, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, String, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(y)
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -96,7 +96,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -153,7 +153,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, bar)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar)
             handleVoidKeyword(void)
             handleIdentifier(bar, methodDeclaration)
             handleNoTypeVariables(()
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 ea077fe..19ff1e8 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,16 +31,16 @@
                 listener: beginMetadataStar(String)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(String, ?)
                 ensureIdentifierPotentiallyRecovered(?, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, String, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, String, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -49,16 +48,16 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', y, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(y)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(y, fieldDeclaration)
-                parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -67,8 +66,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -203,8 +202,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -344,8 +343,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, }, Instance of 'VoidType', null, bar, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, bar)
+              parseMethod(}, null, null, null, null, null, null, null, }, Instance of 'VoidType', null, bar, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(bar, methodDeclaration)
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 e768c12..7f0bd3e 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41177.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 9961d09..68efe3e 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
index 3a0663e..64122c4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(bool)
   endMetadataStar(0)
   beginTopLevelMember(bool)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(bool, typeReference)
       handleNoTypeArguments(x)
       handleType(bool, null)
@@ -13,7 +13,7 @@
   beginMetadataStar(bool)
   endMetadataStar(0)
   beginTopLevelMember(bool)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(bool, typeReference)
       handleNoTypeArguments(x)
       handleType(bool, null)
@@ -24,7 +24,7 @@
   beginMetadataStar(errors)
   endMetadataStar(0)
   beginTopLevelMember(errors)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(errors, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -72,7 +72,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -82,7 +82,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(c0, methodDeclarationContinuation)
@@ -106,7 +106,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(c1, methodDeclarationContinuation)
@@ -134,7 +134,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
index 6ade11d..af76789 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.intertwined.expect
@@ -8,14 +8,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(bool)
-      parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         listener: handleIdentifier(bool, typeReference)
         listener: handleNoTypeArguments(x)
         listener: handleType(bool, null)
         ensureIdentifierPotentiallyRecovered(bool, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, bool, ;)
   listener: endTopLevelDeclaration(bool)
@@ -25,14 +25,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(bool)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', x, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(bool, typeReference)
         listener: handleNoTypeArguments(x)
         listener: handleType(bool, null)
         ensureIdentifierPotentiallyRecovered(bool, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, bool, ;)
   listener: endTopLevelDeclaration(errors)
@@ -43,8 +43,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(errors)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, errors, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, errors, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(errors, topLevelFunctionDeclaration)
@@ -187,13 +187,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -213,8 +212,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -266,8 +265,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, C, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -324,8 +323,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 c107cbf..9b642f3 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(Order)
   endMetadataStar(0)
   beginTopLevelMember(Order)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleIdentifier(Order, typeReference)
       handleNoTypeArguments(method1)
       handleType(Order, null)
@@ -83,7 +83,7 @@
   beginMetadataStar(Order)
   endMetadataStar(0)
   beginTopLevelMember(Order)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(Order, typeReference)
       handleNoTypeArguments(method2)
       handleType(Order, null)
@@ -164,7 +164,7 @@
   beginMetadataStar(Order)
   endMetadataStar(0)
   beginTopLevelMember(Order)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(Order, typeReference)
       handleNoTypeArguments(method3)
       handleType(Order, null)
@@ -246,7 +246,7 @@
   beginMetadataStar(Order)
   endMetadataStar(0)
   beginTopLevelMember(Order)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleIdentifier(Order, typeReference)
       handleNoTypeArguments(method4)
       handleType(Order, null)
@@ -308,7 +308,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Order, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Order)
+    beginClassDeclaration(class, null, null, null, Order)
       handleNoType(Order)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -318,24 +318,24 @@
         beginMetadataStar(List)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(List, typeReference)
             handleNoTypeArguments(?)
             handleType(List, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, List, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(?)
             handleType(int, ?)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
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 263bcd9..b07dc15 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(Order)
-      parseTopLevelMethod(, null, , Instance of 'SimpleType', null, method1, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'SimpleType', null, method1, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleIdentifier(Order, typeReference)
         listener: handleNoTypeArguments(method1)
         listener: handleType(Order, null)
@@ -174,8 +174,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(Order)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, method2, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, method2, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(Order, typeReference)
         listener: handleNoTypeArguments(method2)
         listener: handleType(Order, null)
@@ -340,8 +340,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(Order)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, method3, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, method3, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(Order, typeReference)
         listener: handleNoTypeArguments(method3)
         listener: handleType(Order, null)
@@ -516,8 +516,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(Order)
-      parseTopLevelMethod(}, null, }, Instance of 'SimpleType', null, method4, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'SimpleType', null, method4, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleIdentifier(Order, typeReference)
         listener: handleNoTypeArguments(method4)
         listener: handleType(Order, null)
@@ -635,13 +635,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Order, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Order)
+        listener: beginClassDeclaration(class, null, null, null, Order)
         parseClass(Order, class, class, Order)
           parseClassHeaderOpt(Order, class, class)
             parseClassExtendsOpt(Order)
@@ -660,16 +659,16 @@
                 listener: beginMetadataStar(List)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Order, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleNullableType', x, DeclarationKind.Class, Order, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(List, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(List, ?)
                 ensureIdentifierPotentiallyRecovered(?, fieldDeclaration, false)
                   listener: handleIdentifier(x, fieldDeclaration)
-                parseFieldInitializerOpt(x, x, null, null, null, null, DeclarationKind.Class, Order)
+                parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Order)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, List, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
               listener: endMember()
             notEofOrValue(}, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Order)
@@ -677,16 +676,16 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleNullableType', y, DeclarationKind.Class, Order, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleNullableType', y, DeclarationKind.Class, Order, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(?)
                 listener: handleType(int, ?)
                 ensureIdentifierPotentiallyRecovered(?, fieldDeclaration, false)
                   listener: handleIdentifier(y, fieldDeclaration)
-                parseFieldInitializerOpt(y, y, null, null, null, null, DeclarationKind.Class, Order)
+                parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Order)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
index a305eb1..3e3995b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.expect
@@ -26,7 +26,7 @@
   beginTopLevelMember(Future)
     handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
     // WARNING: Reporting at eof for .
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(Future, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
index adc5a86..4d72599 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_44477.dart.intertwined.expect
@@ -13,8 +13,8 @@
           listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
           listener: // WARNING: Reporting at eof for .
         rewriter()
-      parseFields(, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'ComplexTypeInfo', , DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         ensureIdentifier(, typeReference)
           listener: handleIdentifier(Future, typeReference)
         listener: beginTypeArguments(<)
@@ -38,7 +38,7 @@
               listener: // WARNING: Reporting at eof for .
             rewriter()
           listener: handleIdentifier(, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(, , null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer()
         ensureSemicolon()
           reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
diff --git a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
index ec45784..dab179c 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -99,7 +99,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(late, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -123,7 +123,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -133,7 +133,7 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late)
             handleNoType({)
             handleIdentifier(late, methodDeclaration)
             handleNoTypeVariables(()
@@ -161,7 +161,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -171,7 +171,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -179,7 +179,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 8fb9358..d52f8d6 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -267,8 +267,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(late)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, late, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, late, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(late, topLevelFunctionDeclaration)
@@ -326,13 +326,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -351,8 +350,8 @@
                 listener: beginMetadataStar(late)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, late, DeclarationKind.Class, X, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, late, DeclarationKind.Class, X, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(late, methodDeclaration)
@@ -418,13 +417,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
@@ -443,14 +441,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(late, fieldDeclaration)
-                parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.Class, Y)
+                parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -459,7 +457,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
index 7d1c8bd..4bf8c3c 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -117,7 +117,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(late, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -141,7 +141,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -151,7 +151,7 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late)
             handleNoType({)
             handleIdentifier(late, methodDeclaration)
             handleNoTypeVariables(()
@@ -179,7 +179,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -189,7 +189,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(late)
             handleType(int, null)
@@ -197,7 +197,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 7c01aa3..779ed57 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -316,8 +316,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(late)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, late, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, late, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(late, topLevelFunctionDeclaration)
@@ -375,13 +375,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -400,8 +399,8 @@
                 listener: beginMetadataStar(late)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, late, DeclarationKind.Class, X, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, late)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, late, DeclarationKind.Class, X, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(late, methodDeclaration)
@@ -467,13 +466,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
@@ -492,14 +490,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', late, DeclarationKind.Class, Y, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(late, fieldDeclaration)
-                parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.Class, Y)
+                parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -508,7 +506,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect
index 3b88ac0..9673703 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
index 1f6705c..5bc1168 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect
index 27a18c6..d59a18a 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect
index 8f678d0..779bb69 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.expect
index 24f6535..dd6ce2f 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.intertwined.expect
index 21d6ac3..5ed49af 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.expect
index 43511af..df1aa00 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.intertwined.expect
index 835a55b..28566d1 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.expect
index 419aa04..fed0fd1 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.intertwined.expect
index 64ea13a..40b8536 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect
index 5050179..595666c 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
index 4d0d581e..9e58ef9c 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect
index 096a6b9..6bbea90 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect
index 43d4d51..8059ae9 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect
index e58d1a7..b99baea 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
index 53ef115..d0ca72f 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect
index 547ae08..71e11d0 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect
index 53029f6..b3d8ee3 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect
index 24c1311..3305337 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
index d3b5d2b..b15f181 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect
index 3683c7e..4f4a015 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect
index 58b1601..2b8b343 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect
index 2cec617..3a6ac78 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
index 45e774e..bb93a2f 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect
index 013e4c7..5555c17 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect
index 17963ec..71a5e93 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.expect
index 69104ba..e8062f8 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.intertwined.expect
index 6738bc5..60e3550f 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex_with_parens.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
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 92ef663..9c2a5d2 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Class1, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Class1)
+    beginClassDeclaration(class, null, null, null, Class1)
       handleNoType(Class1)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(operator)
             handleType(int, null)
@@ -43,7 +43,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleVoidKeyword(void)
             handleOperatorName(operator, []=)
             handleNoTypeVariables(()
@@ -79,7 +79,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 d9b1e75..1799ed6 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Class1, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Class1)
+        listener: beginClassDeclaration(class, null, null, null, Class1)
         parseClass(Class1, class, class, Class1)
           parseClassHeaderOpt(Class1, class, class)
             parseClassExtendsOpt(Class1)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Class1, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Class1, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(int, null)
@@ -90,8 +89,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, ;, Instance of 'VoidType', null, operator, DeclarationKind.Class, Class1, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'VoidType', null, operator, DeclarationKind.Class, Class1, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleVoidKeyword(void)
                 parseOperatorName(void)
                   listener: handleOperatorName(operator, []=)
@@ -149,8 +148,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
index 8f3bab8..1262919 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -99,7 +99,7 @@
   beginMetadataStar(required)
   endMetadataStar(0)
   beginTopLevelMember(required)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(required, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -123,7 +123,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -133,7 +133,7 @@
         beginMetadataStar(required)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required)
             handleNoType({)
             handleIdentifier(required, methodDeclaration)
             handleNoTypeVariables(()
@@ -161,7 +161,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -171,7 +171,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -179,7 +179,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 8506b7e..1339faa 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -267,8 +267,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(required)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, required, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, required, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(required, topLevelFunctionDeclaration)
@@ -326,13 +326,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -351,8 +350,8 @@
                 listener: beginMetadataStar(required)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, required, DeclarationKind.Class, X, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, required, DeclarationKind.Class, X, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(required, methodDeclaration)
@@ -418,13 +417,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
@@ -443,14 +441,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(required, fieldDeclaration)
-                parseFieldInitializerOpt(required, required, null, null, null, null, DeclarationKind.Class, Y)
+                parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -459,7 +457,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 9bd3e32..0201be0 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -99,7 +99,7 @@
   beginMetadataStar(required)
   endMetadataStar(0)
   beginTopLevelMember(required)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(required, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -134,7 +134,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(X, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, X)
+    beginClassDeclaration(class, null, null, null, X)
       handleNoType(X)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -144,7 +144,7 @@
         beginMetadataStar(required)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required)
             handleNoType({)
             handleIdentifier(required, methodDeclaration)
             handleNoTypeVariables(()
@@ -172,7 +172,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Y, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Y)
+    beginClassDeclaration(class, null, null, null, Y)
       handleNoType(Y)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -182,7 +182,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(required)
             handleType(int, null)
@@ -190,7 +190,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 7523c1c..9e00462 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
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -267,8 +267,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(required)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, required, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, required, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(required, topLevelFunctionDeclaration)
@@ -342,13 +342,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(X, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, X)
+        listener: beginClassDeclaration(class, null, null, null, X)
         parseClass(X, class, class, X)
           parseClassHeaderOpt(X, class, class)
             parseClassExtendsOpt(X)
@@ -367,8 +366,8 @@
                 listener: beginMetadataStar(required)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'NoType', null, required, DeclarationKind.Class, X, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, required)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'NoType', null, required, DeclarationKind.Class, X, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(required, methodDeclaration)
@@ -434,13 +433,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Y, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Y)
+        listener: beginClassDeclaration(class, null, null, null, Y)
         parseClass(Y, class, class, Y)
           parseClassHeaderOpt(Y, class, class)
             parseClassExtendsOpt(Y)
@@ -459,14 +457,14 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', required, DeclarationKind.Class, Y, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(required, fieldDeclaration)
-                parseFieldInitializerOpt(required, required, null, null, null, null, DeclarationKind.Class, Y)
+                parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -475,7 +473,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 ded8c58..677cc26 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
@@ -26,7 +26,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -37,7 +37,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}], >>, >)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(Foo, typeReference)
             handleNoTypeArguments(operator)
             handleType(Foo, null)
@@ -64,7 +64,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 e396b6a..bb151a0 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,11 +31,11 @@
                 listener: beginMetadataStar(Foo)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
                 reportRecoverableErrorWithEnd(>>, >, Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}])
                   listener: handleRecoverableError(Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}], >>, >)
                 rewriter()
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(Foo, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(Foo, null)
@@ -89,8 +88,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 5f001f3..1bb956b 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
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
             handleIdentifier(Foo, typeReference)
             handleNoTypeArguments(operator)
             handleType(Foo, null)
@@ -41,7 +41,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleNoType(})
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 6f0f152..d083d95 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
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(Foo)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator)
                 listener: handleIdentifier(Foo, typeReference)
                 listener: handleNoTypeArguments(operator)
                 listener: handleType(Foo, null)
@@ -86,8 +85,8 @@
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleNoType(})
         ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 9e5e0d5..7d1245d 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
@@ -8,7 +8,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
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 ac687d6..aabf7a7 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
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
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 80b04fe..f167070 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
@@ -12,7 +12,7 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, null, operator)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(operator)
             handleType(String, null)
@@ -37,7 +37,7 @@
         beginMetadataStar(String)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Extension, null, null, null, null, null, call)
+          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, call)
             handleIdentifier(String, typeReference)
             handleNoTypeArguments(call)
             handleType(String, null)
@@ -65,7 +65,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -94,7 +94,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables(extends)
-    beginClassDeclaration(abstract, abstract, null, Foo)
+    beginClassDeclaration(abstract, abstract, null, null, Foo)
       handleIdentifier(List, typeReference)
       beginTypeArguments(<)
         handleIdentifier(List, typeReference)
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 3a379e4..b8e8393 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
@@ -7,7 +7,6 @@
       listener: beginMetadataStar(extension)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, extension, null, Instance of 'DirectiveContext')
-      parseTopLevelKeywordModifiers(, extension)
       parseExtension(extension)
         listener: beginExtensionDeclarationPrelude(extension)
         listener: handleNoTypeVariables(on)
@@ -24,8 +23,8 @@
               listener: beginMetadataStar(String)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Extension, null, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, operator)
+            parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', null, operator, DeclarationKind.Extension, null, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator)
               listener: handleIdentifier(String, typeReference)
               listener: handleNoTypeArguments(operator)
               listener: handleType(String, null)
@@ -75,8 +74,8 @@
               listener: beginMetadataStar(String)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, call, DeclarationKind.Extension, null, false)
-              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, call)
+            parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', null, call, DeclarationKind.Extension, null, false)
+              listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, call)
               listener: handleIdentifier(String, typeReference)
               listener: handleNoTypeArguments(call)
               listener: handleType(String, null)
@@ -131,8 +130,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, main, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, main, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -207,14 +206,12 @@
       listener: beginMetadataStar(abstract)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-        parseTopLevelKeywordModifiers(abstract, class)
-      parseClassOrNamedMixinApplication(abstract, null, class)
+      parseClassOrNamedMixinApplication(abstract, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(abstract)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables(extends)
-        listener: beginClassDeclaration(abstract, abstract, null, Foo)
+        listener: beginClassDeclaration(abstract, abstract, null, null, Foo)
         parseClass(Foo, abstract, class, Foo)
           parseClassHeaderOpt(Foo, abstract, class)
             parseClassExtendsOpt(Foo)
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect
index 0b9ca1d..3349c66 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.expect
@@ -8,7 +8,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect
index 9a4f6ba..e56cb27 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect
index 00c203f..7824dd46 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect
index ccdb9f8..d3c8ed1 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_39326.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect
index 537e3e4..ba8a1cc 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect
index cd8f064..ea5feb9 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.expect
index 947256d..3c88f4e 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.intertwined.expect
index 6c1ac05..42f9b1c 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_2.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect
index 7570ccb..99ba27f 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(f)
   endMetadataStar(0)
   beginTopLevelMember(f)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleNoType()
       handleIdentifier(f, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.intertwined.expect
index 2e8a975f..ce7e5a6 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_3.dart.intertwined.expect
@@ -9,8 +9,8 @@
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(f)
       isReservedKeyword(()
-      parseTopLevelMethod(, null, , Instance of 'NoType', null, f, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'NoType', null, f, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleNoType()
         ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(f, topLevelFunctionDeclaration)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
index 138a4ba..6b18cf8 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.expect
@@ -2,7 +2,7 @@
   beginMetadataStar(var)
   endMetadataStar(0)
   beginTopLevelMember(var)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
       handleNoType(var)
       handleIdentifier(a, topLevelVariableDeclaration)
       handleNoFieldInitializer(,)
@@ -19,7 +19,7 @@
   beginMetadataStar(List)
   endMetadataStar(0)
   beginTopLevelMember(List)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleIdentifier(List, typeReference)
       handleNoTypeArguments(get)
       handleType(List, null)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
index 1044c77..1f44de0 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40267_conditional_4.dart.intertwined.expect
@@ -8,28 +8,28 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(var)
-      parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, var, )
+      parseFields(, null, null, null, null, null, null, var, var, Instance of 'NoType', a, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
         listener: handleNoType(var)
         ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
           listener: handleIdentifier(a, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(a, a, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(a, a, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(,)
         ensureIdentifier(,, topLevelVariableDeclaration)
           listener: handleIdentifier(b, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(b, b, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(b, b, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(,)
         ensureIdentifier(,, topLevelVariableDeclaration)
           listener: handleIdentifier(c, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(c, c, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(c, c, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(,)
         ensureIdentifier(,, topLevelVariableDeclaration)
           listener: handleIdentifier(d, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(d, d, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(d, d, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(,)
         ensureIdentifier(,, topLevelVariableDeclaration)
           listener: handleIdentifier(e, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(e, e, null, null, null, var, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(e, e, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, var, 5, var, ;)
   listener: endTopLevelDeclaration(List)
@@ -39,8 +39,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(List)
-      parseTopLevelMethod(;, null, ;, Instance of 'SimpleType', get, f, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'SimpleType', get, f, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleIdentifier(List, typeReference)
         listener: handleNoTypeArguments(get)
         listener: handleType(List, null)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
index 667962a..6481b9d 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(late, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, late)
+    beginClassDeclaration(class, null, null, null, late)
       handleNoType(late)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(required, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, required)
+    beginClassDeclaration(class, null, null, null, required)
       handleNoType(required)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -45,7 +45,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -76,7 +76,7 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(late, typeReference)
             handleNoTypeArguments(l)
             handleType(late, null)
@@ -88,12 +88,12 @@
               endArguments(0, (, ))
               handleSend(late, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, late, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, late, ;)
         endMember()
         beginMetadataStar(required)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(required, typeReference)
             handleNoTypeArguments(r)
             handleType(required, null)
@@ -105,7 +105,7 @@
               endArguments(0, (, ))
               handleSend(required, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, required, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, required, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
index c89a6b0..3a276f8 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(late, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, late)
+        listener: beginClassDeclaration(class, null, null, null, late)
         parseClass(late, class, class, late)
           parseClassHeaderOpt(late, class, class)
             parseClassExtendsOpt(late)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, late, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, late, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -72,13 +71,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(required, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, required)
+        listener: beginClassDeclaration(class, null, null, null, required)
         parseClass(required, class, class, required)
           parseClassHeaderOpt(required, class, class)
             parseClassExtendsOpt(required)
@@ -97,8 +95,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, required, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, required, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -137,13 +135,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -162,14 +159,14 @@
                 listener: beginMetadataStar(late)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(late, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(late, null)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(l, fieldDeclaration)
-                parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -189,7 +186,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(late, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, late, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, late, ;)
               listener: endMember()
             notEofOrValue(}, required)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -197,14 +194,14 @@
                 listener: beginMetadataStar(required)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(required, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(required, null)
                 ensureIdentifierPotentiallyRecovered(required, fieldDeclaration, false)
                   listener: handleIdentifier(r, fieldDeclaration)
-                parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -224,7 +221,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(required, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, required, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, required, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
index d54d704..26f2e58 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.expect
@@ -4,7 +4,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xlate, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Xlate)
+    beginClassDeclaration(class, null, null, null, Xlate)
       handleNoType(Xlate)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -14,7 +14,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -35,7 +35,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Xrequired, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Xrequired)
+    beginClassDeclaration(class, null, null, null, Xrequired)
       handleNoType(Xrequired)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -45,7 +45,7 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(get)
             handleType(int, null)
@@ -66,7 +66,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(C, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, C)
+    beginClassDeclaration(class, null, null, null, C)
       handleNoType(C)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -76,7 +76,7 @@
         beginMetadataStar(Xlate)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(Xlate, typeReference)
             handleNoTypeArguments(l)
             handleType(Xlate, null)
@@ -88,12 +88,12 @@
               endArguments(0, (, ))
               handleSend(Xlate, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, Xlate, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Xlate, ;)
         endMember()
         beginMetadataStar(Xrequired)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(Xrequired, typeReference)
             handleNoTypeArguments(r)
             handleType(Xrequired, null)
@@ -105,7 +105,7 @@
               endArguments(0, (, ))
               handleSend(Xrequired, ;)
             endFieldInitializer(=, ;)
-          endClassFields(null, null, null, null, null, null, 1, Xrequired, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, Xrequired, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
index b03a234..524bc98 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/issue_40288_prime.dart.intertwined.expect
@@ -7,13 +7,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xlate, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Xlate)
+        listener: beginClassDeclaration(class, null, null, null, Xlate)
         parseClass(Xlate, class, class, Xlate)
           parseClassHeaderOpt(Xlate, class, class)
             parseClassExtendsOpt(Xlate)
@@ -32,8 +31,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, Xlate, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, Xlate, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -72,13 +71,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Xrequired, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Xrequired)
+        listener: beginClassDeclaration(class, null, null, null, Xrequired)
         parseClass(Xrequired, class, class, Xrequired)
           parseClassHeaderOpt(Xrequired, class, class)
             parseClassExtendsOpt(Xrequired)
@@ -97,8 +95,8 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, Xrequired, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, get, g)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', get, g, DeclarationKind.Class, Xrequired, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(int, null)
@@ -137,13 +135,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(C, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, C)
+        listener: beginClassDeclaration(class, null, null, null, C)
         parseClass(C, class, class, C)
           parseClassHeaderOpt(C, class, class)
             parseClassExtendsOpt(C)
@@ -162,14 +159,14 @@
                 listener: beginMetadataStar(Xlate)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', l, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(Xlate, typeReference)
                 listener: handleNoTypeArguments(l)
                 listener: handleType(Xlate, null)
                 ensureIdentifierPotentiallyRecovered(Xlate, fieldDeclaration, false)
                   listener: handleIdentifier(l, fieldDeclaration)
-                parseFieldInitializerOpt(l, l, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -189,7 +186,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Xlate, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, Xlate, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, Xlate, ;)
               listener: endMember()
             notEofOrValue(}, Xrequired)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -197,14 +194,14 @@
                 listener: beginMetadataStar(Xrequired)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', r, DeclarationKind.Class, C, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(Xrequired, typeReference)
                 listener: handleNoTypeArguments(r)
                 listener: handleType(Xrequired, null)
                 ensureIdentifierPotentiallyRecovered(Xrequired, fieldDeclaration, false)
                   listener: handleIdentifier(r, fieldDeclaration)
-                parseFieldInitializerOpt(r, r, null, null, null, null, DeclarationKind.Class, C)
+                parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
                     parsePrecedenceExpression(=, 1, true)
@@ -224,7 +221,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Xrequired, ;)
                   listener: endFieldInitializer(=, ;)
-                listener: endClassFields(null, null, null, null, null, null, 1, Xrequired, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, Xrequired, ;)
               listener: endMember()
             notEofOrValue(}, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
index 5c1d956..5cee3c6 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.expect
@@ -12,7 +12,7 @@
         handleNoType(T)
       endTypeVariable(>, 0, null, null)
     endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, A)
+    beginClassDeclaration(class, null, null, null, A)
       handleNoType(>)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -27,7 +27,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(B, classOrMixinDeclaration)
     handleNoTypeVariables(implements)
-    beginClassDeclaration(class, null, null, B)
+    beginClassDeclaration(class, null, null, null, B)
       handleNoType(B)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
index 16f17a7..6bf308c 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/nullable_type_argument.dart.intertwined.expect
@@ -7,8 +7,7 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(A, classOrMixinDeclaration)
@@ -21,7 +20,7 @@
         listener: handleNoType(T)
         listener: endTypeVariable(>, 0, null, null)
         listener: endTypeVariables(<, >)
-        listener: beginClassDeclaration(class, null, null, A)
+        listener: beginClassDeclaration(class, null, null, null, A)
         parseClass(>, class, class, A)
           parseClassHeaderOpt(>, class, class)
             parseClassExtendsOpt(>)
@@ -43,13 +42,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(B, classOrMixinDeclaration)
         listener: handleNoTypeVariables(implements)
-        listener: beginClassDeclaration(class, null, null, B)
+        listener: beginClassDeclaration(class, null, null, null, B)
         parseClass(B, class, class, B)
           parseClassHeaderOpt(B, class, class)
             parseClassExtendsOpt(B)
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 285a104..dd68ff3 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
@@ -64,7 +64,7 @@
   beginMetadataStar(int)
   endMetadataStar(0)
   beginTopLevelMember(int)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(x1)
       handleType(int, null)
@@ -76,7 +76,7 @@
   endMetadataStar(0)
   beginTopLevelMember(late)
     handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, null, late)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(x2)
       handleType(int, null)
@@ -88,7 +88,7 @@
   endMetadataStar(0)
   beginTopLevelMember(late)
     handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, null, late)
       handleIdentifier(List, typeReference)
       beginTypeArguments(<)
         handleIdentifier(int, typeReference)
@@ -104,7 +104,7 @@
   endMetadataStar(0)
   beginTopLevelMember(late)
     handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, final, late)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, final, late)
       handleIdentifier(int, typeReference)
       handleNoTypeArguments(x4)
       handleType(int, null)
@@ -115,7 +115,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleIdentifier(late, typeReference)
       handleNoTypeArguments(x5)
       handleType(late, null)
@@ -132,7 +132,7 @@
   beginMetadataStar(late)
   endMetadataStar(0)
   beginTopLevelMember(late)
-    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
       handleRecoverableError(MissingConstFinalVarOrType, late, late)
       handleNoType(;)
       handleIdentifier(late, topLevelVariableDeclaration)
@@ -148,7 +148,7 @@
   beginMetadataStar(main)
   endMetadataStar(0)
   beginTopLevelMember(main)
-    beginTopLevelMethod(;, null)
+    beginTopLevelMethod(;, null, null)
       handleNoType(;)
       handleIdentifier(main, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -246,7 +246,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -256,31 +256,31 @@
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(z1)
             handleType(int, null)
             handleIdentifier(z1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
         handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, late)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(z2)
             handleType(int, null)
             handleIdentifier(z2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, late, null, 1, int, ;)
+          endClassFields(null, null, null, null, null, late, null, 1, int, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
         handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, late)
             handleIdentifier(List, typeReference)
             beginTypeArguments(<)
               handleIdentifier(int, typeReference)
@@ -290,30 +290,30 @@
             handleType(List, null)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, late, null, 1, List, ;)
+          endClassFields(null, null, null, null, null, late, null, 1, List, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
         handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, late, final, late)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, late, final, late)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(z4)
             handleType(int, null)
             handleIdentifier(z4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, late, final, 1, final, ;)
+          endClassFields(null, null, null, null, null, late, final, 1, final, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleIdentifier(late, typeReference)
             handleNoTypeArguments(z5)
             handleType(late, null)
             handleIdentifier(z5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, late, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, late, ;)
         endMember()
         beginMetadataStar(;)
         endMetadataStar(0)
@@ -324,12 +324,12 @@
         beginMetadataStar(late)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
             handleRecoverableError(MissingConstFinalVarOrType, late, late)
             handleNoType(;)
             handleIdentifier(late, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, 1, late, ;)
+          endClassFields(null, null, null, null, null, null, null, 1, late, ;)
         endMember()
         beginMetadataStar(;)
         endMetadataStar(0)
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 3841fa7..c03aca1 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
@@ -8,14 +8,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(int)
-      parseFields(, null, null, null, null, null, null, , Instance of 'SimpleType', x1, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
+      parseFields(, null, null, null, null, null, null, null, , Instance of 'SimpleType', x1, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, )
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(x1)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x1, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x1, x1, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x1, x1, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, int, ;)
   listener: endTopLevelDeclaration(late)
@@ -28,14 +28,14 @@
       indicatesMethodOrField(;)
       reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-      parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleType', x2, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
+      parseFields(late, null, null, null, null, null, late, null, late, Instance of 'SimpleType', x2, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, null, late)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(x2)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x2, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x2, x2, late, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x2, x2, late, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, late, null, 1, int, ;)
   listener: endTopLevelDeclaration(late)
@@ -48,8 +48,8 @@
       indicatesMethodOrField(;)
       reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-      parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
+      parseFields(late, null, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, null, late)
         listener: handleIdentifier(List, typeReference)
         listener: beginTypeArguments(<)
         listener: handleIdentifier(int, typeReference)
@@ -59,7 +59,7 @@
         listener: handleType(List, null)
         ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x3, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x3, x3, late, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x3, x3, late, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, late, null, 1, List, ;)
   listener: endTopLevelDeclaration(late)
@@ -72,14 +72,14 @@
       indicatesMethodOrField(;)
       reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
         listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
-      parseFields(late, null, null, null, null, late, final, final, Instance of 'SimpleType', x4, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, late, final, late)
+      parseFields(late, null, null, null, null, null, late, final, final, Instance of 'SimpleType', x4, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, late, final, late)
         listener: handleIdentifier(int, typeReference)
         listener: handleNoTypeArguments(x4)
         listener: handleType(int, null)
         ensureIdentifierPotentiallyRecovered(int, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x4, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x4, x4, late, null, null, final, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x4, x4, late, null, null, null, final, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, late, final, 1, final, ;)
   listener: endTopLevelDeclaration(late)
@@ -89,14 +89,14 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(late)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', x5, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', x5, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         listener: handleIdentifier(late, typeReference)
         listener: handleNoTypeArguments(x5)
         listener: handleType(late, null)
         ensureIdentifierPotentiallyRecovered(late, topLevelVariableDeclaration, false)
           listener: handleIdentifier(x5, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(x5, x5, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(x5, x5, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, late, ;)
   listener: endTopLevelDeclaration(;)
@@ -117,14 +117,14 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(late)
       isReservedKeyword(;)
-      parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.TopLevel, null, false)
-        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
+      parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.TopLevel, null, false)
+        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, null, ;)
         reportRecoverableError(late, MissingConstFinalVarOrType)
           listener: handleRecoverableError(MissingConstFinalVarOrType, late, late)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelVariableDeclaration, false)
           listener: handleIdentifier(late, topLevelVariableDeclaration)
-        parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.TopLevel, null)
+        parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: handleNoFieldInitializer(;)
         listener: endTopLevelFields(null, null, null, null, null, 1, late, ;)
   listener: endTopLevelDeclaration(;)
@@ -145,8 +145,8 @@
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(main)
       isReservedKeyword(()
-      parseTopLevelMethod(;, null, ;, Instance of 'NoType', null, main, false)
-        listener: beginTopLevelMethod(;, null)
+      parseTopLevelMethod(;, null, null, ;, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(;, null, null)
         listener: handleNoType(;)
         ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(main, topLevelFunctionDeclaration)
@@ -336,13 +336,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -361,16 +360,16 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields({, null, null, null, null, null, null, {, Instance of 'SimpleType', z1, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
+              parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', z1, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(z1)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(z1, fieldDeclaration)
-                parseFieldInitializerOpt(z1, z1, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(z1, z1, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -381,16 +380,16 @@
               reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                 listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
               listener: beginMember()
-              parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleType', z2, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
+              parseFields(late, null, null, null, null, null, late, null, late, Instance of 'SimpleType', z2, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(z2)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(z2, fieldDeclaration)
-                parseFieldInitializerOpt(z2, z2, late, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(z2, z2, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, late, null, 1, int, ;)
+                listener: endClassFields(null, null, null, null, null, late, null, 1, int, ;)
               listener: endMember()
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -401,8 +400,8 @@
               reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                 listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
               listener: beginMember()
-              parseFields(late, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
+              parseFields(late, null, null, null, null, null, late, null, late, Instance of 'SimpleTypeWith1Argument', x3, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, late, null, late)
                 listener: handleIdentifier(List, typeReference)
                 listener: beginTypeArguments(<)
                 listener: handleIdentifier(int, typeReference)
@@ -412,9 +411,9 @@
                 listener: handleType(List, null)
                 ensureIdentifierPotentiallyRecovered(>, fieldDeclaration, false)
                   listener: handleIdentifier(x3, fieldDeclaration)
-                parseFieldInitializerOpt(x3, x3, late, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(x3, x3, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, late, null, 1, List, ;)
+                listener: endClassFields(null, null, null, null, null, late, null, 1, List, ;)
               listener: endMember()
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -425,16 +424,16 @@
               reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
                 listener: handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
               listener: beginMember()
-              parseFields(late, null, null, null, null, late, final, final, Instance of 'SimpleType', z4, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, late, final, late)
+              parseFields(late, null, null, null, null, null, late, final, final, Instance of 'SimpleType', z4, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, late, final, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(z4)
                 listener: handleType(int, null)
                 ensureIdentifierPotentiallyRecovered(int, fieldDeclaration, false)
                   listener: handleIdentifier(z4, fieldDeclaration)
-                parseFieldInitializerOpt(z4, z4, late, null, null, final, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(z4, z4, late, null, null, null, final, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, late, final, 1, final, ;)
+                listener: endClassFields(null, null, null, null, null, late, final, 1, final, ;)
               listener: endMember()
             notEofOrValue(}, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -442,16 +441,16 @@
                 listener: beginMetadataStar(late)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'SimpleType', z5, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'SimpleType', z5, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 listener: handleIdentifier(late, typeReference)
                 listener: handleNoTypeArguments(z5)
                 listener: handleType(late, null)
                 ensureIdentifierPotentiallyRecovered(late, fieldDeclaration, false)
                   listener: handleIdentifier(z5, fieldDeclaration)
-                parseFieldInitializerOpt(z5, z5, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(z5, z5, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, late, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, late, ;)
               listener: endMember()
             notEofOrValue(}, ;)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -459,7 +458,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
@@ -471,16 +470,16 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(;)
-              parseFields(;, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.Class, Foo, false)
-                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
+              parseFields(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', late, DeclarationKind.Class, Foo, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                 reportRecoverableError(late, MissingConstFinalVarOrType)
                   listener: handleRecoverableError(MissingConstFinalVarOrType, late, late)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, fieldDeclaration, false)
                   listener: handleIdentifier(late, fieldDeclaration)
-                parseFieldInitializerOpt(late, late, null, null, null, null, DeclarationKind.Class, Foo)
+                parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, 1, late, ;)
+                listener: endClassFields(null, null, null, null, null, null, null, 1, late, ;)
               listener: endMember()
             notEofOrValue(}, ;)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -488,7 +487,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(;, Instance of 'Template<(Token) => Message>')
                   listener: handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
index fb681d6..a27babc 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.expect
@@ -16,7 +16,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(, null)
+    beginTopLevelMethod(, null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo1, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -52,7 +52,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo2, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -87,7 +87,7 @@
   beginMetadataStar(void)
   endMetadataStar(0)
   beginTopLevelMember(void)
-    beginTopLevelMethod(}, null)
+    beginTopLevelMethod(}, null, null)
       handleVoidKeyword(void)
       handleIdentifier(foo3, topLevelFunctionDeclaration)
       handleNoTypeVariables(()
@@ -125,7 +125,7 @@
   beginClassOrMixinOrNamedMixinApplicationPrelude(class)
     handleIdentifier(Foo, classOrMixinDeclaration)
     handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, Foo)
+    beginClassDeclaration(class, null, null, null, Foo)
       handleNoType(Foo)
       handleClassExtends(null, 1)
       handleClassNoWithClause()
@@ -135,7 +135,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, foo4)
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo4)
             handleVoidKeyword(void)
             handleIdentifier(foo4, methodDeclaration)
             handleNoTypeVariables(()
diff --git a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
index f214652..d218d3f 100644
--- a/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/non-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
@@ -8,8 +8,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(, null, , Instance of 'VoidType', null, foo1, false)
-        listener: beginTopLevelMethod(, null)
+      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, foo1, false)
+        listener: beginTopLevelMethod(, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo1, topLevelFunctionDeclaration)
@@ -91,8 +91,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, foo2, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, foo2, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo2, topLevelFunctionDeclaration)
@@ -172,8 +172,8 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(void)
-      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, foo3, false)
-        listener: beginTopLevelMethod(}, null)
+      parseTopLevelMethod(}, null, null, }, Instance of 'VoidType', null, foo3, false)
+        listener: beginTopLevelMethod(}, null, null)
         listener: handleVoidKeyword(void)
         ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
           listener: handleIdentifier(foo3, topLevelFunctionDeclaration)
@@ -254,13 +254,12 @@
       listener: beginMetadataStar(class)
       listener: endMetadataStar(0)
     parseTopLevelKeywordDeclaration(}, class, null, Instance of 'DirectiveContext')
-      parseClassDeclarationModifiers(}, class)
-      parseClassOrNamedMixinApplication(null, null, class)
+      parseClassOrNamedMixinApplication(null, null, null, class)
         listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
         ensureIdentifier(class, classOrMixinDeclaration)
           listener: handleIdentifier(Foo, classOrMixinDeclaration)
         listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, Foo)
+        listener: beginClassDeclaration(class, null, null, null, Foo)
         parseClass(Foo, class, class, Foo)
           parseClassHeaderOpt(Foo, class, class)
             parseClassExtendsOpt(Foo)
@@ -279,8 +278,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo4, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, foo4)
+              parseMethod({, null, null, null, null, null, null, null, {, Instance of 'VoidType', null, foo4, DeclarationKind.Class, Foo, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo4)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo4, methodDeclaration)
diff --git a/pkg/front_end/test/ast_nodes_has_to_string_test.dart b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
index 0c27d6f..ea54f97 100644
--- a/pkg/front_end/test/ast_nodes_has_to_string_test.dart
+++ b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
@@ -55,7 +55,7 @@
               .where((Member m) =>
                   !m.isAbstract &&
                   m.name.text == "toString" &&
-                  m.enclosingLibrary.importUri.scheme != "dart")
+                  !m.enclosingLibrary.importUri.isScheme("dart"))
               .toList();
           if (toStringList.length > 1) throw "What?";
           if (toStringList.length == 1) {
@@ -157,7 +157,7 @@
             .where((Member m) =>
                 !m.isAbstract &&
                 m.name.text == "toString" &&
-                m.enclosingLibrary.importUri.scheme != "dart")
+                !m.enclosingLibrary.importUri.isScheme("dart"))
             .toList();
         Member toString = toStringList.single;
         if (toString.fileUri != uri) continue;
diff --git a/pkg/front_end/test/comments_on_certain_arguments_tool.dart b/pkg/front_end/test/comments_on_certain_arguments_tool.dart
index 254ff7d..3607cc2 100644
--- a/pkg/front_end/test/comments_on_certain_arguments_tool.dart
+++ b/pkg/front_end/test/comments_on_certain_arguments_tool.dart
@@ -88,7 +88,7 @@
   component = incrementalCompilerResult.component;
 
   for (Library library in component.libraries) {
-    if (library.importUri.scheme == "dart") continue;
+    if (library.importUri.isScheme("dart")) continue;
     // This isn't perfect because of parts, but (for now) it'll do.
     for (Uri uri in libUris) {
       if (library.fileUri.toString().startsWith(uri.toString())) {
diff --git a/pkg/front_end/test/compile_benchmark.dart b/pkg/front_end/test/compile_benchmark.dart
index c244da3..e6cea76 100644
--- a/pkg/front_end/test/compile_benchmark.dart
+++ b/pkg/front_end/test/compile_benchmark.dart
@@ -363,7 +363,7 @@
 
   @override
   void visitLibrary(Library node) {
-    if (node.importUri.scheme == "package" &&
+    if (node.importUri.isScheme("package") &&
         node.importUri.pathSegments.first == "front_end") {
       super.visitLibrary(node);
     }
@@ -395,7 +395,7 @@
 
   @override
   void visitLibrary(Library node) {
-    if (node.importUri.scheme == "package" &&
+    if (node.importUri.isScheme("package") &&
         node.importUri.pathSegments.first == "front_end") {
       super.visitLibrary(node);
     }
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 437c010..e6ffb2b 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -778,9 +778,9 @@
   void _rewriteImportsExportsToUriInternal(
       Token uriToken, Uri oldUri, List<_Replacement> replacements, Uri newUri) {
     Uri tokenUri = _getUri(uriToken, oldUri, resolvePackage: false);
-    if (tokenUri.scheme == "package" || tokenUri.scheme == "dart") return;
+    if (tokenUri.isScheme("package") || tokenUri.isScheme("dart")) return;
     Uri asPackageUri = _getImportUri(tokenUri);
-    if (asPackageUri.scheme == "package") {
+    if (asPackageUri.isScheme("package")) {
       // Just replace with this package uri.
       replacements.add(new _Replacement(
         uriToken.offset - 1,
@@ -803,7 +803,7 @@
     String uriString = uriToken.lexeme;
     uriString = uriString.substring(1, uriString.length - 1);
     Uri uriTokenUri = uri.resolve(uriString);
-    if (resolvePackage && uriTokenUri.scheme == "package") {
+    if (resolvePackage && uriTokenUri.isScheme("package")) {
       Package package = _latestCrashingIncrementalCompiler!
           .getPackageForPackageName(uriTokenUri.pathSegments.first)!;
       uriTokenUri = package.packageUriRoot
diff --git a/pkg/front_end/test/desugar_test.dart b/pkg/front_end/test/desugar_test.dart
index 18342bb..33f3477 100644
--- a/pkg/front_end/test/desugar_test.dart
+++ b/pkg/front_end/test/desugar_test.dart
@@ -14,7 +14,6 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'package:front_end/src/api_unstable/dart2js.dart' as api;
 import 'package:front_end/src/compute_platform_binaries_location.dart';
 import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
 import 'package:front_end/src/testing/compiler_common.dart';
@@ -64,7 +63,6 @@
       .firstWhere((m) => m.name.text == constructorName) as ir.Procedure;
   Expect.isTrue(
       member.kind == ir.ProcedureKind.Factory, "$member is not a factory");
-  Expect.isTrue(api.isRedirectingFactory(member));
   Expect.isTrue(member.isRedirectingFactory);
 }
 
diff --git a/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart b/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart
index a5f766e..b2076ac 100644
--- a/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart
+++ b/pkg/front_end/test/enable_non_nullable/enable_non_nullable_test.dart
@@ -116,7 +116,7 @@
   Expect.isFalse(
       hadDiagnostic, "Compilation had diagnostics (errors, warnings)!");
   for (Library library in result.component!.libraries) {
-    if (library.importUri.scheme != 'dart') {
+    if (!library.importUri.isScheme('dart')) {
       bool usesLegacy =
           await uriUsesLegacyLanguageVersion(library.fileUri, options);
       VersionAndPackageUri versionAndPackageUri =
@@ -143,7 +143,7 @@
           "Expected library ${library.importUri} with version "
           "${library.languageVersion} to be opted in.");
       Expect.isTrue(
-          versionAndPackageUri.packageUri.scheme != 'package' ||
+          !versionAndPackageUri.packageUri.isScheme('package') ||
               !versionAndPackageUri.packageUri.path
                   .startsWith('allowed_package') ||
               library.languageVersion < versionOptsInAllowed ||
diff --git a/pkg/front_end/test/expression_compilation_tools_test.dart b/pkg/front_end/test/expression_compilation_tools_test.dart
new file mode 100644
index 0000000..9e12fb4
--- /dev/null
+++ b/pkg/front_end/test/expression_compilation_tools_test.dart
@@ -0,0 +1,135 @@
+// 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/minitest.dart';
+
+import 'package:front_end/src/api_prototype/expression_compilation_tools.dart';
+
+void main() {
+  // null value.
+  expect(parseDefinitionTypes(["null"]), [new ParsedType.nullType()]);
+
+  // String, kNonNullable
+  expect(
+      parseDefinitionTypes([
+        "dart:core",
+        "_OneByteString",
+        "1",
+        "0",
+      ]),
+      [new ParsedType("dart:core", "_OneByteString", 1)]);
+
+  // List<something it can't represent which thus becomes an explicit
+  // dynamic/null>, kNonNullable.
+  expect(parseDefinitionTypes(["dart:core", "List", "1", "1", "null"]), [
+    new ParsedType("dart:core", "List", 1)
+      ..arguments!.add(new ParsedType.nullType())
+  ]);
+
+  // List<int>, kNonNullable
+  expect(
+      parseDefinitionTypes([
+        "dart:core",
+        "_GrowableList",
+        "1",
+        "1",
+        "dart:core",
+        "int",
+        "1",
+        "0",
+      ]),
+      [
+        new ParsedType("dart:core", "_GrowableList", 1)
+          ..arguments!.add(new ParsedType("dart:core", "int", 1))
+      ]);
+
+  // Map<int, int>, kNonNullable
+  expect(
+      parseDefinitionTypes([
+        "dart:core",
+        "Map",
+        "1",
+        "2",
+        "dart:core",
+        "int",
+        "1",
+        "0",
+        "dart:core",
+        "int",
+        "1",
+        "0",
+      ]),
+      [
+        new ParsedType("dart:core", "Map", 1)
+          ..arguments!.add(new ParsedType("dart:core", "int", 1))
+          ..arguments!.add(new ParsedType("dart:core", "int", 1))
+      ]);
+
+  // [0] = String
+  // [1] = int
+  // [2] = List<String>
+  // [3] = Bar
+  // [4] = null
+  // [5] = HashMap<Map<int, List<int>>, List<String>>
+  expect(
+      parseDefinitionTypes([
+        // String, kNonNullable, no arguments
+        "dart:core", "_OneByteString", "1", "0",
+        // Int, kNonNullable, no arguments
+        "dart:core", "_Smi", "1", "0",
+        // List, kNonNullable, 1 argument
+        "dart:core", "_GrowableList", "1", "1",
+        //  -> String, kNonNullable (i.e. the above is List<String>)
+        /**/ "dart:core", "String", "1", "0",
+        // "Bar", kNonNullable, no arguments
+        "file://wherever/t.dart", "Bar", "1", "0",
+        // null value
+        "null",
+        // HashMap, kNonNullable, 2 arguments
+        "dart:collection", "_InternalLinkedHashMap", "1", "2",
+        //   -> Map, kNonNullable, 2 arguments
+        /**/ "dart:core", "Map", "1", "2",
+        //   -> -> int, kNonNullable, no arguments
+        /*/**/*/ "dart:core", "int", "1", "0",
+        //   -> -> List, kNonNullable, 1 argument
+        /*/**/*/ "dart:core", "List", "1", "1",
+        //   -> -> -> int, kNonNullable, no arguments
+        /*/*/**/*/*/ "dart:core", "int", "1", "0",
+        //   -> List, kNonNullable, 1 argument
+        "dart:core", "List", "1", "1",
+        //   -> -> String, kNonNullable, no arguments
+        "dart:core", "String", "1", "0"
+      ]),
+      <ParsedType>[
+        // String
+        new ParsedType("dart:core", "_OneByteString", 1),
+        // int
+        new ParsedType("dart:core", "_Smi", 1),
+        // List<String>
+        new ParsedType("dart:core", "_GrowableList", 1)
+          ..arguments!.addAll([
+            new ParsedType("dart:core", "String", 1),
+          ]),
+        // Bar
+        new ParsedType("file://wherever/t.dart", "Bar", 1),
+        // null value
+        new ParsedType.nullType(),
+        // HashMap<Map<int, List<int>>, List<String>>
+        new ParsedType("dart:collection", "_InternalLinkedHashMap", 1)
+          ..arguments!.addAll([
+            new ParsedType("dart:core", "Map", 1)
+              ..arguments!.addAll([
+                new ParsedType("dart:core", "int", 1),
+                new ParsedType("dart:core", "List", 1)
+                  ..arguments!.addAll([
+                    new ParsedType("dart:core", "int", 1),
+                  ]),
+              ]),
+            new ParsedType("dart:core", "List", 1)
+              ..arguments!.addAll([
+                new ParsedType("dart:core", "String", 1),
+              ]),
+          ]),
+      ]);
+}
diff --git a/pkg/front_end/test/fasta/expression_suite.dart b/pkg/front_end/test/fasta/expression_suite.dart
index 03eeb59..47c08bb 100644
--- a/pkg/front_end/test/fasta/expression_suite.dart
+++ b/pkg/front_end/test/fasta/expression_suite.dart
@@ -4,8 +4,6 @@
 
 library fasta.test.expression_test;
 
-import "dart:convert" show JsonEncoder;
-
 import "dart:io" show File, IOSink;
 
 import 'dart:typed_data' show Uint8List;
@@ -16,6 +14,12 @@
     show CompilerOptions, DiagnosticMessage;
 import 'package:front_end/src/api_prototype/experimental_flags.dart';
 
+import 'package:front_end/src/api_prototype/expression_compilation_tools.dart'
+    show createDefinitionsWithTypes, createTypeParametersWithBounds;
+
+import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart'
+    show IncrementalCompilerResult;
+
 import "package:front_end/src/api_prototype/memory_file_system.dart"
     show MemoryFileSystem;
 
@@ -33,8 +37,21 @@
 import 'package:front_end/src/fasta/incremental_compiler.dart'
     show IncrementalCompiler;
 
+import 'package:front_end/src/fasta/kernel/utils.dart'
+    show serializeComponent, serializeProcedure;
+
 import "package:kernel/ast.dart"
-    show Procedure, Component, DynamicType, DartType, TypeParameter;
+    show
+        Class,
+        Component,
+        Constructor,
+        DartType,
+        DynamicType,
+        Field,
+        Library,
+        Member,
+        Procedure,
+        TypeParameter;
 
 import 'package:kernel/target/targets.dart' show TargetFlags;
 
@@ -49,13 +66,8 @@
 
 import "package:yaml/yaml.dart" show YamlMap, YamlList, loadYamlNode;
 
-import '../../lib/src/fasta/kernel/utils.dart'
-    show serializeComponent, serializeProcedure;
-
 import '../utils/kernel_chain.dart' show runDiff, openWrite;
 
-const JsonEncoder json = const JsonEncoder.withIndent("  ");
-
 class Context extends ChainContext {
   final CompilerContext compilerContext;
   final List<DiagnosticMessage> errors;
@@ -63,7 +75,11 @@
   @override
   final List<Step> steps;
 
-  Context(this.compilerContext, this.errors, bool updateExpectations)
+  final bool fuzz;
+  final Set<Uri> fuzzedLibraries = {};
+  int fuzzCompiles = 0;
+
+  Context(this.compilerContext, this.errors, bool updateExpectations, this.fuzz)
       : steps = <Step>[
           const ReadTest(),
           const CompileExpression(),
@@ -98,7 +114,7 @@
   String printResult(Uri entryPoint, Context context) {
     StringBuffer buffer = new StringBuffer();
     buffer.write("Errors: {\n");
-    for (var error in errors) {
+    for (DiagnosticMessage error in errors) {
       for (String message in error.plainTextFormatted) {
         for (String line in splitLines(message)) {
           buffer.write("  ");
@@ -132,8 +148,14 @@
 
   final List<String> definitions;
 
+  final List<String> definitionTypes;
+
   final List<String> typeDefinitions;
 
+  final List<String> typeBounds;
+
+  final List<String> typeDefaults;
+
   final bool isStaticMethod;
 
   final Uri? library;
@@ -151,7 +173,10 @@
       this.entryPoint,
       this.import,
       this.definitions,
+      this.definitionTypes,
       this.typeDefinitions,
+      this.typeBounds,
+      this.typeDefaults,
       this.isStaticMethod,
       this.library,
       this.className,
@@ -164,7 +189,10 @@
         "$entryPoint, "
         "$import, "
         "$definitions, "
+        "$definitionTypes, "
         "$typeDefinitions,"
+        "$typeBounds,"
+        "$typeDefaults,"
         "$library, "
         "$className, "
         "static = $isStaticMethod)";
@@ -201,11 +229,13 @@
   @override
   Future<Result<Null>> run(List<TestCase> tests, Context context) async {
     String actual = "";
-    for (var test in tests) {
-      var primary = test.results.first.printResult(test.entryPoint!, context);
+    for (TestCase test in tests) {
+      String primary =
+          test.results.first.printResult(test.entryPoint!, context);
       actual += primary;
       for (int i = 1; i < test.results.length; ++i) {
-        var secondary = test.results[i].printResult(test.entryPoint!, context);
+        String secondary =
+            test.results[i].printResult(test.entryPoint!, context);
         if (primary != secondary) {
           return fail(
               null,
@@ -215,7 +245,7 @@
         }
       }
     }
-    var test = tests.first;
+    TestCase test = tests.first;
     Uri testUri = test.description.uri;
     File expectedFile = new File("${testUri.toFilePath()}$suffix");
     if (await expectedFile.exists()) {
@@ -259,7 +289,10 @@
     Uri? entryPoint;
     Uri? import;
     List<String> definitions = <String>[];
+    List<String> definitionTypes = <String>[];
     List<String> typeDefinitions = <String>[];
+    List<String> typeBounds = <String>[];
+    List<String> typeDefaults = <String>[];
     bool isStaticMethod = false;
     Uri? library;
     String? className;
@@ -271,9 +304,8 @@
 
     final List<TestCase> tests = [];
     for (YamlMap map in maps) {
-      for (var _key in map.keys) {
-        String key = _key;
-        var value = map[key];
+      for (String key in map.keys) {
+        dynamic value = map[key];
 
         if (key == "entry_point") {
           entryPoint = description.uri.resolveUri(Uri.parse(value as String));
@@ -289,27 +321,37 @@
           methodName = value as String;
         } else if (key == "definitions") {
           definitions = (value as YamlList).map((x) => x as String).toList();
+        } else if (key == "definition_types") {
+          definitionTypes =
+              (value as YamlList).map((x) => x as String).toList();
         } else if (key == "type_definitions") {
           typeDefinitions =
               (value as YamlList).map((x) => x as String).toList();
+        } else if (key == "type_bounds") {
+          typeBounds = (value as YamlList).map((x) => x as String).toList();
+        } else if (key == "type_defaults") {
+          typeDefaults = (value as YamlList).map((x) => x as String).toList();
         } else if (key == "static") {
           isStaticMethod = value;
         } else if (key == "expression") {
           expression = value;
         }
       }
-      var test = new TestCase(
+      TestCase test = new TestCase(
           description,
           entryPoint,
           import,
           definitions,
+          definitionTypes,
           typeDefinitions,
+          typeBounds,
+          typeDefaults,
           isStaticMethod,
           library,
           className,
           methodName,
           expression);
-      var result = test.validate();
+      String? result = test.validate();
       if (result != null) {
         return new Result.fail(tests, result);
       }
@@ -328,15 +370,29 @@
   // 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,
-      Component component, Context context) async {
-    Map<String, DartType> definitions = {};
-    for (String name in test.definitions) {
-      definitions[name] = new DynamicType();
+      IncrementalCompilerResult compilerResult, Context context) async {
+    Map<String, DartType>? definitions = createDefinitionsWithTypes(
+        compilerResult.classHierarchy?.knownLibraries,
+        test.definitionTypes,
+        test.definitions);
+
+    if (definitions == null) {
+      definitions = {};
+      for (String name in test.definitions) {
+        definitions[name] = new DynamicType();
+      }
     }
-    List<TypeParameter> typeParams = [];
-    for (String name in test.typeDefinitions) {
-      typeParams
-          .add(new TypeParameter(name, new DynamicType(), new DynamicType()));
+    List<TypeParameter>? typeParams = createTypeParametersWithBounds(
+        compilerResult.classHierarchy?.knownLibraries,
+        test.typeBounds,
+        test.typeDefaults,
+        test.typeDefinitions);
+    if (typeParams == null) {
+      typeParams = [];
+      for (String name in test.typeDefinitions) {
+        typeParams
+            .add(new TypeParameter(name, new DynamicType(), new DynamicType()));
+      }
     }
 
     Procedure? compiledProcedure = await compiler.compileExpression(
@@ -353,7 +409,119 @@
     test.results.add(new CompilationResult(compiledProcedure, errors));
     if (compiledProcedure != null) {
       // Confirm we can serialize generated procedure.
-      component.computeCanonicalNames();
+      compilerResult.component.computeCanonicalNames();
+      List<int> list = serializeProcedure(compiledProcedure);
+      assert(list.length > 0);
+    }
+
+    if (context.fuzz) {
+      await fuzz(compiler, compilerResult, context);
+    }
+  }
+
+  Future<void> fuzz(IncrementalCompiler compiler,
+      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);
+      }
+
+      for (Class c in lib.classes) {
+        for (Member m in c.members) {
+          await fuzzMember(m, compiler, lib.importUri, context);
+        }
+      }
+    }
+  }
+
+  Future<void> fuzzMember(Member m, IncrementalCompiler compiler,
+      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
+    } else if (m is Procedure && !m.isGetter) {
+      expression = "$expression()";
+    } else if (m is Constructor) {
+      if (m.parent is! Class) {
+        return;
+      }
+      Class parent = m.parent as Class;
+      if (m.name.text != "") {
+        expression = "${parent.name}.${m.name.text}()";
+      } else {
+        expression = "${parent.name}()";
+      }
+    } else {
+      print("Ignoring $m (${m.runtimeType})");
+      return;
+    }
+
+    String? className;
+    if (m.parent is Class && m is! Constructor) {
+      Class parent = m.parent as Class;
+      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,
+        className, !m.isInstanceMember, context);
+    if (className != null && !m.isInstanceMember) {
+      await fuzzTryCompile(compiler, "$className.$expression.toString()",
+          libraryUri, null, !m.isInstanceMember, context);
+    }
+    await fuzzTryCompile(compiler, "$expression.toString() == '42'", libraryUri,
+        className, !m.isInstanceMember, context);
+    if (className != null && !m.isInstanceMember) {
+      await fuzzTryCompile(
+          compiler,
+          "$className.$expression.toString() == '42'",
+          libraryUri,
+          null,
+          !m.isInstanceMember,
+          context);
+    }
+    await fuzzTryCompile(
+        compiler,
+        "() { var x = $expression.toString(); x == '42'; }()",
+        libraryUri,
+        className,
+        !m.isInstanceMember,
+        context);
+    if (className != null && !m.isInstanceMember) {
+      await fuzzTryCompile(
+          compiler,
+          "() { var x = $className.$expression.toString(); x == '42'; }()",
+          libraryUri,
+          null,
+          !m.isInstanceMember,
+          context);
+    }
+  }
+
+  Future<void> fuzzTryCompile(IncrementalCompiler compiler, 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);
     }
@@ -362,7 +530,7 @@
   @override
   Future<Result<List<TestCase>>> run(
       List<TestCase> tests, Context context) async {
-    for (var test in tests) {
+    for (TestCase test in tests) {
       context.fileSystem.entityForUri(test.entryPoint!).writeAsBytesSync(
           await new File.fromUri(test.entryPoint!).readAsBytes());
 
@@ -371,11 +539,12 @@
             await new File.fromUri(test.import!).readAsBytes());
       }
 
-      var sourceCompiler = new IncrementalCompiler(context.compilerContext);
-      var sourceCompilerResult =
+      IncrementalCompiler sourceCompiler =
+          new IncrementalCompiler(context.compilerContext);
+      IncrementalCompilerResult sourceCompilerResult =
           await sourceCompiler.computeDelta(entryPoints: [test.entryPoint!]);
       Component component = sourceCompilerResult.component;
-      var errors = context.takeErrors();
+      List<DiagnosticMessage> errors = context.takeErrors();
       if (!errors.isEmpty) {
         return fail(
             tests,
@@ -387,11 +556,13 @@
           path: test.entryPoint!.path + ".dill");
       Uint8List dillData = await serializeComponent(component);
       context.fileSystem.entityForUri(dillFileUri).writeAsBytesSync(dillData);
-      await compileExpression(test, sourceCompiler, component, context);
+      Set<Uri> beforeFuzzedLibraries = context.fuzzedLibraries.toSet();
+      await compileExpression(
+          test, sourceCompiler, sourceCompilerResult, context);
 
-      var dillCompiler =
+      IncrementalCompiler dillCompiler =
           new IncrementalCompiler(context.compilerContext, dillFileUri);
-      var dillCompilerResult =
+      IncrementalCompilerResult dillCompilerResult =
           await dillCompiler.computeDelta(entryPoints: [test.entryPoint!]);
       component = dillCompilerResult.component;
       component.computeCanonicalNames();
@@ -400,7 +571,9 @@
       // Since it compiled successfully from source, the bootstrap-from-Dill
       // should also succeed without errors.
       assert(errors.isEmpty);
-      await compileExpression(test, dillCompiler, component, context);
+      context.fuzzedLibraries.clear();
+      context.fuzzedLibraries.addAll(beforeFuzzedLibraries);
+      await compileExpression(test, dillCompiler, dillCompilerResult, context);
     }
     return new Result.pass(tests);
   }
@@ -448,13 +621,15 @@
 
   final bool updateExpectations = environment["updateExpectations"] == "true";
 
+  final bool fuzz = environment["fuzz"] == "true";
+
   final CompilerContext compilerContext = new CompilerContext(options);
 
   // 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);
+  return new Context(compilerContext, errors, updateExpectations, fuzz);
 }
 
 void main([List<String> arguments = const []]) =>
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 787ad86..c35e622 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -95,7 +95,8 @@
                     new NoneTarget(new TargetFlags())),
                 uriTranslator)
             .loader,
-        isUnsupported: false);
+        isUnsupported: false,
+        isAugmentation: false);
     libraryBuilder.markLanguageVersionFinal();
     LoadLibraryBuilder loadLibraryBuilder =
         new LoadLibraryBuilder(libraryBuilder, dummyLibraryDependency, -1);
@@ -118,7 +119,7 @@
         new TypeParameter("T"), libraryBuilder);
     VariableDeclaration variable = new VariableDeclaration(null);
 
-    TypeInferenceEngineImpl engine = new TypeInferenceEngineImpl(null);
+    TypeInferenceEngineImpl engine = new TypeInferenceEngineImpl(null, null);
     engine.prepareTopLevel(coreTypes, hierarchy);
 
     BodyBuilder helper = new BodyBuilder(
diff --git a/pkg/front_end/test/fasta/parser/parser.status b/pkg/front_end/test/fasta/parser/parser.status
deleted file mode 100644
index 1c18c23..0000000
--- a/pkg/front_end/test/fasta/parser/parser.status
+++ /dev/null
@@ -1,2092 +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.md file.
-
-issue23520: Fail
-issue28367: Fail
-pkg/analyzer_cli/test/data/file_with_error: Fail
-pkg/compiler/test/data/one_line_dart_program: Fail
-pkg/front_end/test/fasta/function_type_recovery: Fail
-pkg/front_end/test/fasta/rasta/bad_interpolation: Fail
-pkg/front_end/test/fasta/rasta/issue_000032: Fail
-pkg/front_end/test/fasta/rasta/issue_000035: Fail
-pkg/front_end/test/fasta/rasta/issue_000035a: Fail
-pkg/front_end/test/fasta/rasta/issue_000036: Fail
-pkg/front_end/test/fasta/rasta/issue_000039: Fail
-pkg/front_end/test/fasta/rasta/issue_000041: Fail
-pkg/front_end/test/fasta/rasta/issue_000044: Fail
-pkg/front_end/test/fasta/rasta/issue_000045: Fail
-pkg/front_end/test/fasta/rasta/issue_000046: Fail
-pkg/front_end/test/fasta/rasta/issue_000047: Fail
-pkg/front_end/test/fasta/rasta/malformed_const_constructor: Fail
-pkg/front_end/test/fasta/rasta/mandatory_parameter_initializer: Fail
-pkg/front_end/test/fasta/rasta/native_is_illegal: Fail
-pkg/front_end/test/fasta/rasta/parser_error: Fail
-pkg/front_end/test/fasta/rasta/super: Fail
-pkg/front_end/test/fasta/rasta/type_with_parse_error: Fail
-pkg/front_end/test/fasta/rasta/unresolved_recovery: Fail
-pkg/testing/test/dart_sdk_negative_test: Fail
-runtime/bin/builtin: Fail
-runtime/bin/common_patch: Fail
-runtime/bin/directory_patch: Fail
-runtime/bin/eventhandler_patch: Fail
-runtime/bin/file_patch: Fail
-runtime/bin/file_system_entity_patch: Fail
-runtime/bin/filter_patch: Fail
-runtime/bin/io_service_patch: Fail
-runtime/bin/platform_patch: Fail
-runtime/bin/process_patch: Fail
-runtime/bin/secure_socket_patch: Fail
-runtime/bin/socket_patch: Fail
-runtime/bin/stdio_patch: Fail
-runtime/bin/vmservice/server: Fail
-runtime/bin/vmservice/vmservice_io: Fail
-runtime/lib/array: Fail
-runtime/lib/async_patch: Fail
-runtime/lib/bigint: Fail
-runtime/lib/bool_patch: Fail
-runtime/lib/class_id: Fail
-runtime/lib/compact_hash: Fail
-runtime/lib/convert_patch: Fail
-runtime/lib/core_patch: Fail
-runtime/lib/date_patch: Fail
-runtime/lib/developer: Fail
-runtime/lib/double_patch: Fail
-runtime/lib/double: Fail
-runtime/lib/errors_patch: Fail
-runtime/lib/function_patch: Fail
-runtime/lib/function: Fail
-runtime/lib/growable_array: Fail
-runtime/lib/identical_patch: Fail
-runtime/lib/integers_patch: Fail
-runtime/lib/integers: Fail
-runtime/lib/internal_patch: Fail
-runtime/lib/isolate_patch: Fail
-runtime/lib/lib_prefix: Fail
-runtime/lib/math_patch: Fail
-runtime/lib/mirror_reference: Fail
-runtime/lib/mirrors_impl: Fail
-runtime/lib/mirrors_patch: Fail
-runtime/lib/object_patch: Fail
-runtime/lib/profiler: Fail
-runtime/lib/regexp_patch: Fail
-runtime/lib/stopwatch_patch: Fail
-runtime/lib/string_buffer_patch: Fail
-runtime/lib/string_patch: Fail
-runtime/lib/timeline: Fail
-runtime/lib/type_patch: Fail
-runtime/lib/typed_data_patch: Fail
-runtime/lib/typed_data: Fail
-runtime/lib/uri_patch: Fail
-runtime/lib/vmservice_patch: Fail
-runtime/lib/weak_property: Fail
-runtime/observatory/tests/service/developer_extension_test: Fail
-samples/sample_extension/sample_asynchronous_extension: Fail
-samples/sample_extension/sample_synchronous_extension: Fail
-sdk/lib/_blink/dartium/_blink_dartium: Fail
-sdk/lib/_internal/js_dev_runtime/lib/html/dart2js/html_dart2js: Fail
-sdk/lib/_internal/js_dev_runtime/lib/indexed_db/dart2js/indexed_db_dart2js: Fail
-sdk/lib/_internal/js_dev_runtime/lib/svg/dart2js/svg_dart2js: Fail
-sdk/lib/_internal/js_dev_runtime/lib/web_audio/dart2js/web_audio_dart2js: Fail
-sdk/lib/_internal/js_dev_runtime/lib/web_gl/dart2js/web_gl_dart2js: Fail
-sdk/lib/_internal/js_dev_runtime/lib/web_sql/dart2js/web_sql_dart2js: Fail
-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types: Fail
-sdk/lib/_internal/js_dev_runtime/private/native_typed_data: Fail
-sdk/lib/_internal/js_runtime/lib/native_typed_data: Fail
-sdk/lib/html/dart2js/html_dart2js: Fail
-sdk/lib/indexed_db/dart2js/indexed_db_dart2js: Fail
-sdk/lib/js/dartium/js_dartium: Fail
-sdk/lib/svg/dart2js/svg_dart2js: Fail
-sdk/lib/web_audio/dart2js/web_audio_dart2js: Fail
-sdk/lib/web_gl/dart2js/web_gl_dart2js: Fail
-sdk/lib/web_sql/dart2js/web_sql_dart2js: Fail
-tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t02: Fail
-tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t04: Fail
-tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t05: Fail
-tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t06: Fail
-tests/co19/src/Language/Classes/Constructors/Factories/redirecting_constructor_t02: Fail
-tests/co19/src/Language/Classes/Constructors/Factories/redirecting_constructor_t03: Fail
-tests/co19/src/Language/Classes/Constructors/Factories/syntax_t03: Fail
-tests/co19/src/Language/Classes/Constructors/Factories/syntax_t04: Fail
-tests/co19/src/Language/Classes/Constructors/Factories/syntax_t05: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t02: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t03: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t04: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t05: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t07: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t09: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t10: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t11: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t16: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/syntax_t03: Fail
-tests/co19/src/Language/Classes/Constructors/Generative_Constructors/syntax_t06: Fail
-tests/co19/src/Language/Classes/declarations_t12: Fail
-tests/co19/src/Language/Classes/declarations_t13: Fail
-tests/co19/src/Language/Classes/declarations_t14: Fail
-tests/co19/src/Language/Classes/declarations_t15: Fail
-tests/co19/src/Language/Classes/declarations_t16: Fail
-tests/co19/src/Language/Classes/declarations_t17: Fail
-tests/co19/src/Language/Classes/declarations_t18: Fail
-tests/co19/src/Language/Classes/declarations_t19: Fail
-tests/co19/src/Language/Classes/declarations_t20: Fail
-tests/co19/src/Language/Classes/declarations_t21: Fail
-tests/co19/src/Language/Classes/declarations_t22: Fail
-tests/co19/src/Language/Classes/declarations_t23: Fail
-tests/co19/src/Language/Classes/declarations_t24: Fail
-tests/co19/src/Language/Classes/declarations_t25: Fail
-tests/co19/src/Language/Classes/declarations_t26: Fail
-tests/co19/src/Language/Classes/declarations_t27: Fail
-tests/co19/src/Language/Classes/declarations_t28: Fail
-tests/co19/src/Language/Classes/declarations_t29: Fail
-tests/co19/src/Language/Classes/declarations_t30: Fail
-tests/co19/src/Language/Classes/declarations_t31: Fail
-tests/co19/src/Language/Classes/declarations_t32: Fail
-tests/co19/src/Language/Classes/definition_t02: Fail
-tests/co19/src/Language/Classes/definition_t03: Fail
-tests/co19/src/Language/Classes/definition_t04: Fail
-tests/co19/src/Language/Classes/definition_t05: Fail
-tests/co19/src/Language/Classes/definition_t06: Fail
-tests/co19/src/Language/Classes/definition_t07: Fail
-tests/co19/src/Language/Classes/definition_t08: Fail
-tests/co19/src/Language/Classes/definition_t09: Fail
-tests/co19/src/Language/Classes/definition_t10: Fail
-tests/co19/src/Language/Classes/definition_t11: Fail
-tests/co19/src/Language/Classes/definition_t12: Fail
-tests/co19/src/Language/Classes/definition_t13: Fail
-tests/co19/src/Language/Classes/definition_t14: Fail
-tests/co19/src/Language/Classes/definition_t15: Fail
-tests/co19/src/Language/Classes/definition_t16: Fail
-tests/co19/src/Language/Classes/definition_t17: Fail
-tests/co19/src/Language/Classes/definition_t18: Fail
-tests/co19/src/Language/Classes/definition_t19: Fail
-tests/co19/src/Language/Classes/definition_t21: Fail
-tests/co19/src/Language/Classes/definition_t22: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t02: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t03: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t04: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t05: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t06: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t07: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t08: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t09: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t10: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t11: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t12: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t13: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t14: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t15: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t16: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t17: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t18: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t19: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t20: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t21: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t22: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/optional_parameter_t05: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/optional_parameter_t07: Fail
-tests/co19/src/Language/Classes/Instance_Methods/Operators/syntax_t02: Fail
-tests/co19/src/Language/Classes/member_definition_t01: Fail
-tests/co19/src/Language/Classes/member_definition_t02: Fail
-tests/co19/src/Language/Classes/member_definition_t04: Fail
-tests/co19/src/Language/Classes/member_definition_t05: Fail
-tests/co19/src/Language/Classes/member_definition_t06: Fail
-tests/co19/src/Language/Classes/member_definition_t07: Fail
-tests/co19/src/Language/Classes/member_definition_t08: Fail
-tests/co19/src/Language/Classes/member_definition_t09: Fail
-tests/co19/src/Language/Classes/member_definition_t10: Fail
-tests/co19/src/Language/Classes/member_definition_t11: Fail
-tests/co19/src/Language/Classes/member_definition_t12: Fail
-tests/co19/src/Language/Classes/member_definition_t13: Fail
-tests/co19/src/Language/Classes/member_definition_t14: Fail
-tests/co19/src/Language/Classes/member_definition_t15: Fail
-tests/co19/src/Language/Classes/member_definition_t16: Fail
-tests/co19/src/Language/Classes/member_definition_t17: Fail
-tests/co19/src/Language/Classes/member_definition_t19: Fail
-tests/co19/src/Language/Classes/member_definition_t21: Fail
-tests/co19/src/Language/Classes/member_definition_t22: Fail
-tests/co19/src/Language/Classes/member_definition_t24: Fail
-tests/co19/src/Language/Classes/member_definition_t25: Fail
-tests/co19/src/Language/Classes/method_definition_t02: Fail
-tests/co19/src/Language/Classes/method_definition_t07: Fail
-tests/co19/src/Language/Classes/method_definition_t08: Fail
-tests/co19/src/Language/Classes/method_definition_t09: Fail
-tests/co19/src/Language/Classes/mixins_t02: Fail
-tests/co19/src/Language/Classes/Setters/name_t08: Fail
-tests/co19/src/Language/Classes/Setters/name_t09: Fail
-tests/co19/src/Language/Classes/Setters/name_t10: Fail
-tests/co19/src/Language/Classes/Setters/name_t11: Fail
-tests/co19/src/Language/Classes/Setters/name_t12: Fail
-tests/co19/src/Language/Classes/Setters/name_t13: Fail
-tests/co19/src/Language/Classes/Setters/name_t14: Fail
-tests/co19/src/Language/Classes/Setters/name_t15: Fail
-tests/co19/src/Language/Classes/Superclasses/wrong_superclass_t06: Fail
-tests/co19/src/Language/Classes/Superinterfaces/syntax_t02: Fail
-tests/co19/src/Language/Enums/syntax_t04: Fail
-tests/co19/src/Language/Enums/syntax_t05: Fail
-tests/co19/src/Language/Enums/syntax_t06: Fail
-tests/co19/src/Language/Enums/syntax_t07: Fail
-tests/co19/src/Language/Enums/syntax_t08: Fail
-tests/co19/src/Language/Enums/syntax_t09: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_lib_p2: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_lib: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_t01: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_t02: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_t03: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_t04: Fail
-tests/co19/src/Language/Errors_and_Warnings/compile_error_t05: Fail
-tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t12: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t13: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t14: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t15: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t16: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t18: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t19: Fail
-tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t20: Fail
-tests/co19/src/Language/Expressions/Await_Expressions/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Await_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Await_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Booleans/boolean_literals_t01: Fail
-tests/co19/src/Language/Expressions/Booleans/boolean_literals_t02: Fail
-tests/co19/src/Language/Expressions/Booleans/boolean_literals_t03: Fail
-tests/co19/src/Language/Expressions/Conditional/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Conditional/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Conditional/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Conditional/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Conditional/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t12: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t15: Fail
-tests/co19/src/Language/Expressions/Equality/syntax_t16: Fail
-tests/co19/src/Language/Expressions/Function_Expressions/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Function_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Function_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Function_Invocation/Actual_Argument_List_Evaluation/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t01: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t03: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t04: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t11: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t12: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t13: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t14: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t15: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t16: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t17: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t18: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t19: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t20: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t21: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t22: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t23: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t24: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t25: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t26: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t27: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t28: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t29: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t30: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t31: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t32: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t33: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t34: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t38: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t39: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t40: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t41: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t42: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t43: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t44: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t45: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t46: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t47: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t48: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t49: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t50: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t51: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t52: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t02: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t04: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t05: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t06: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t07: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t08: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t09: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t10: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t11: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t13: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t16: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_built_in_t01: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t09: Fail
-tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t07: Fail
-tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Instance_Creation/Const/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Instance_Creation/Const/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Instance_Creation/New/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Instance_Creation/New/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Instance_Creation/New/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Lists/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Lists/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Lists/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Lists/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Lists/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Lists/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Maps/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t12: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t13: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t14: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t15: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t17: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t18: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Method_Invocation/Super_Invocation/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t18: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t19: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t20: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t21: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t22: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t23: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t24: Fail
-tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t25: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t16: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t17: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t18: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t21: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t22: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t23: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t24: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t25: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t26: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t27: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t29: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t30: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t31: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t32: Fail
-tests/co19/src/Language/Expressions/Numbers/syntax_t33: Fail
-tests/co19/src/Language/Expressions/Postfix_Expressions/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Postfix_Expressions/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Postfix_Expressions/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/named_parameters_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/positional_parameters_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/deferred_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t09: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t09: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_failed_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_failed_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_failed_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/expression_evaluation_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/named_parameters_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/positional_parameters_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/deferred_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_access_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_assignment_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t09: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t10: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t11: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t12: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t13: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t14: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t15: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t16: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t17: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_unary_bitwise_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t09: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t10: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_list_access_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_list_assignment_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t09: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t10: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t11: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t12: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t13: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t14: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t15: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t16: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t17: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_unary_bitwise_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t01: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t02: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t03: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t04: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t05: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t06: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t07: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t08: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t09: Fail
-tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t10: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t12: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t13: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t14: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t15: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t16: Fail
-tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t17: Fail
-tests/co19/src/Language/Expressions/Shift/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Shift/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Shift/syntax_t04: Fail
-tests/co19/src/Language/Expressions/Shift/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Shift/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Shift/syntax_t07: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t02: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t03: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t04: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t05: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t06: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t07: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t08: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t09: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t10: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t11: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t12: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t13: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t14: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t15: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t16: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t17: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t18: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t19: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t20: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t21: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t22: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t23: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t24: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t25: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t26: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t27: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t28: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t29: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t30: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t31: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t32: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t33: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t34: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t36: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t38: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t40: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t42: Fail
-tests/co19/src/Language/Expressions/Strings/multi_line_t44: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t08: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t09: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t10: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t11: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t14: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t15: Fail
-tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t16: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t02: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t03: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t04: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t05: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t06: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t07: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t10: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t11: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t12: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t13: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t14: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t15: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t16: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t17: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t18: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t19: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t20: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t21: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t22: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t23: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t24: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t25: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t26: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t27: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t28: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t29: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t30: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t31: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t32: Fail
-tests/co19/src/Language/Expressions/Strings/string_literal_t33: Fail
-tests/co19/src/Language/Expressions/This/definition_t01: Fail
-tests/co19/src/Language/Expressions/This/definition_t02: Fail
-tests/co19/src/Language/Expressions/This/definition_t03: Fail
-tests/co19/src/Language/Expressions/This/definition_t04: Fail
-tests/co19/src/Language/Expressions/This/placement_t02: Fail
-tests/co19/src/Language/Expressions/Type_Cast/syntax_t02: Fail
-tests/co19/src/Language/Expressions/Type_Cast/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Type_Cast/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Type_Cast/syntax_t06: Fail
-tests/co19/src/Language/Expressions/Type_Test/syntax_t03: Fail
-tests/co19/src/Language/Expressions/Type_Test/syntax_t05: Fail
-tests/co19/src/Language/Expressions/Unary_Expressions/syntax_t24: Fail
-tests/co19/src/Language/Expressions/Unary_Expressions/syntax_t25: Fail
-tests/co19/src/Language/Expressions/Unary_Expressions/syntax_t26: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t04: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t05: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t08: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t09: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t12: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t13: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t15: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t02: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t03: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t06: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t07: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t08: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t09: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t10: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t13: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t14: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t15: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t16: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t17: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t20: Fail
-tests/co19/src/Language/Functions/Formal_Parameters/syntax_t21: Fail
-tests/co19/src/Language/Functions/Function_Declarations/static_preface_t01: Fail
-tests/co19/src/Language/Functions/Function_Declarations/static_preface_t02: Fail
-tests/co19/src/Language/Functions/syntax_t06: Fail
-tests/co19/src/Language/Functions/syntax_t07: Fail
-tests/co19/src/Language/Functions/syntax_t08: Fail
-tests/co19/src/Language/Functions/syntax_t09: Fail
-tests/co19/src/Language/Functions/syntax_t10: Fail
-tests/co19/src/Language/Functions/syntax_t12: Fail
-tests/co19/src/Language/Functions/syntax_t13: Fail
-tests/co19/src/Language/Functions/syntax_t14: Fail
-tests/co19/src/Language/Functions/syntax_t15: Fail
-tests/co19/src/Language/Functions/syntax_t16: Fail
-tests/co19/src/Language/Functions/syntax_t17: Fail
-tests/co19/src/Language/Functions/syntax_t18: Fail
-tests/co19/src/Language/Functions/syntax_t19: Fail
-tests/co19/src/Language/Functions/syntax_t20: Fail
-tests/co19/src/Language/Functions/syntax_t21: Fail
-tests/co19/src/Language/Functions/syntax_t23: Fail
-tests/co19/src/Language/Functions/syntax_t24: Fail
-tests/co19/src/Language/Functions/syntax_t25: Fail
-tests/co19/src/Language/Functions/syntax_t28: Fail
-tests/co19/src/Language/Functions/syntax_t29: Fail
-tests/co19/src/Language/Functions/syntax_t30: Fail
-tests/co19/src/Language/Functions/syntax_t32: Fail
-tests/co19/src/Language/Functions/syntax_t33: Fail
-tests/co19/src/Language/Functions/syntax_t34: Fail
-tests/co19/src/Language/Functions/syntax_t35: Fail
-tests/co19/src/Language/Generics/syntax_t05: Fail
-tests/co19/src/Language/Generics/syntax_t06: Fail
-tests/co19/src/Language/Generics/syntax_t07: Fail
-tests/co19/src/Language/Generics/syntax_t08: Fail
-tests/co19/src/Language/Generics/syntax_t10: Fail
-tests/co19/src/Language/Generics/syntax_t11: Fail
-tests/co19/src/Language/Generics/syntax_t12: Fail
-tests/co19/src/Language/Generics/syntax_t13: Fail
-tests/co19/src/Language/Generics/syntax_t14: Fail
-tests/co19/src/Language/Generics/syntax_t15: Fail
-tests/co19/src/Language/Generics/syntax_t17: Fail
-tests/co19/src/Language/Interfaces/Superinterfaces/definition_t05: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t15_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t16_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t17_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t18_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t19_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t20_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t21_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t22_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t23_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t24_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t25_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t26_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t27_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t28: Fail
-tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t29_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t01_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t04_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t05_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t06_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/namespace_changes_t07: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/namespace_changes_t08: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t01: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t02: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t03: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t04: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t05: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t06: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t07: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t08: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t09: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t10: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t11: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t12: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t13: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t14: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t16: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t17: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t18: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t19: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t20: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t21: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t22: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t23: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t24: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t27: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t28: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t29: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t30: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t31: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t32: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t33: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t34: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t39: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t40: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t42: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t43: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/part_4: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/part_6: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/part_7: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/part_8: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t02: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t03: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t04: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t05: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t07: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t08: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t01: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t02: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t03: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t04: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t09: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t13: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t02: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t03: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t04: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t05: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t06: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t07: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t08: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t09: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t10: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t11: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t12: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t13: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t14: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t15: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t16: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t17: Fail
-tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t18: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t02_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t03_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t04_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t05_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t06_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t07_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t08_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t09_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t10_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t11_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t12_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t13_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t14_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t15_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t16_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t17_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t18_lib: Fail
-tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t19_lib: Fail
-tests/co19/src/Language/Metadata/before_type_param_t01: Fail
-tests/co19/src/Language/Metadata/compilation_t05: Fail
-tests/co19/src/Language/Metadata/compilation_t06: Fail
-tests/co19/src/Language/Metadata/compilation_t07: Fail
-tests/co19/src/Language/Metadata/syntax_t04: Fail
-tests/co19/src/Language/Metadata/syntax_t05: Fail
-tests/co19/src/Language/Metadata/syntax_t06: Fail
-tests/co19/src/Language/Metadata/syntax_t07: Fail
-tests/co19/src/Language/Metadata/syntax_t08: Fail
-tests/co19/src/Language/Mixins/Mixin_Application/deferred_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/whitespace_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/whitespace_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/whitespace_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_lib: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t10: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t11: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/unicode_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t01: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t02: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t03: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t04: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t05: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t06: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t07: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t08: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t09: Fail
-tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t11: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_07_equality_t02: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_07_equality_t03: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_07_equality_t05: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t02: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t03: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t05: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t06: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t08: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t09: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t11: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t12: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t14: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t16: Fail
-tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t18: Fail
-tests/co19/src/Language/Statements/Assert/syntax_t01: Fail
-tests/co19/src/Language/Statements/Assert/syntax_t02: Fail
-tests/co19/src/Language/Statements/Assert/syntax_t03: Fail
-tests/co19/src/Language/Statements/Assert/syntax_t04: Fail
-tests/co19/src/Language/Statements/Assert/syntax_t05: Fail
-tests/co19/src/Language/Statements/Blocks/execution_t04: Fail
-tests/co19/src/Language/Statements/Blocks/execution_t05: Fail
-tests/co19/src/Language/Statements/Break/syntax_t01: Fail
-tests/co19/src/Language/Statements/Continue/syntax_t01: Fail
-tests/co19/src/Language/Statements/Continue/syntax_t02: Fail
-tests/co19/src/Language/Statements/Do/syntax_t01: Fail
-tests/co19/src/Language/Statements/Do/syntax_t02: Fail
-tests/co19/src/Language/Statements/Do/syntax_t03: Fail
-tests/co19/src/Language/Statements/Do/syntax_t04: Fail
-tests/co19/src/Language/Statements/Do/syntax_t05: Fail
-tests/co19/src/Language/Statements/Do/syntax_t06: Fail
-tests/co19/src/Language/Statements/Do/syntax_t07: Fail
-tests/co19/src/Language/Statements/Expression_Statements/syntax_t02: Fail
-tests/co19/src/Language/Statements/Expression_Statements/syntax_t07: Fail
-tests/co19/src/Language/Statements/Expression_Statements/syntax_t12: Fail
-tests/co19/src/Language/Statements/Expression_Statements/syntax_t13: Fail
-tests/co19/src/Language/Statements/For/Asynchronous_For_in/syntax_t01: Fail
-tests/co19/src/Language/Statements/For/Asynchronous_For_in/syntax_t03: Fail
-tests/co19/src/Language/Statements/For/syntax_t01: Fail
-tests/co19/src/Language/Statements/For/syntax_t02: Fail
-tests/co19/src/Language/Statements/For/syntax_t03: Fail
-tests/co19/src/Language/Statements/For/syntax_t04: Fail
-tests/co19/src/Language/Statements/For/syntax_t05: Fail
-tests/co19/src/Language/Statements/For/syntax_t06: Fail
-tests/co19/src/Language/Statements/For/syntax_t08: Fail
-tests/co19/src/Language/Statements/For/syntax_t10: Fail
-tests/co19/src/Language/Statements/For/syntax_t14: Fail
-tests/co19/src/Language/Statements/For/syntax_t15: Fail
-tests/co19/src/Language/Statements/For/syntax_t17: Fail
-tests/co19/src/Language/Statements/If/syntax_t01: Fail
-tests/co19/src/Language/Statements/If/syntax_t02: Fail
-tests/co19/src/Language/Statements/If/syntax_t03: Fail
-tests/co19/src/Language/Statements/If/syntax_t04: Fail
-tests/co19/src/Language/Statements/If/syntax_t05: Fail
-tests/co19/src/Language/Statements/If/syntax_t06: Fail
-tests/co19/src/Language/Statements/If/syntax_t07: Fail
-tests/co19/src/Language/Statements/If/syntax_t08: Fail
-tests/co19/src/Language/Statements/Labels/scope_t03: Fail
-tests/co19/src/Language/Statements/Labels/syntax_t02: Fail
-tests/co19/src/Language/Statements/Labels/syntax_t04: Fail
-tests/co19/src/Language/Statements/Labels/syntax_t06: Fail
-tests/co19/src/Language/Statements/Labels/syntax_t07: Fail
-tests/co19/src/Language/Statements/Labels/syntax_t08: Fail
-tests/co19/src/Language/Statements/Labels/syntax_t09: Fail
-tests/co19/src/Language/Statements/Local_Function_Declaration/syntax_t02: Fail
-tests/co19/src/Language/Statements/Local_Function_Declaration/syntax_t03: Fail
-tests/co19/src/Language/Statements/Local_Variable_Declaration/syntax_t03: Fail
-tests/co19/src/Language/Statements/Local_Variable_Declaration/syntax_t04: Fail
-tests/co19/src/Language/Statements/Local_Variable_Declaration/syntax_t13: Fail
-tests/co19/src/Language/Statements/Return/syntax_t03: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t04: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t05: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t06: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t07: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t08: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t09: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t10: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t11: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t12: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t14: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t15: Fail
-tests/co19/src/Language/Statements/Switch/syntax_t18: Fail
-tests/co19/src/Language/Statements/Try/syntax_t02: Fail
-tests/co19/src/Language/Statements/Try/syntax_t03: Fail
-tests/co19/src/Language/Statements/Try/syntax_t04: Fail
-tests/co19/src/Language/Statements/Try/syntax_t07: Fail
-tests/co19/src/Language/Statements/Try/syntax_t08: Fail
-tests/co19/src/Language/Statements/Try/syntax_t09: Fail
-tests/co19/src/Language/Statements/Try/syntax_t10: Fail
-tests/co19/src/Language/Statements/Try/syntax_t11: Fail
-tests/co19/src/Language/Statements/Try/syntax_t16: Fail
-tests/co19/src/Language/Statements/Try/syntax_t17: Fail
-tests/co19/src/Language/Statements/Try/syntax_t18: Fail
-tests/co19/src/Language/Statements/Try/syntax_t19: Fail
-tests/co19/src/Language/Statements/Try/syntax_t20: Fail
-tests/co19/src/Language/Statements/Try/syntax_t21: Fail
-tests/co19/src/Language/Statements/Try/syntax_t22: Fail
-tests/co19/src/Language/Statements/While/syntax_t01: Fail
-tests/co19/src/Language/Statements/While/syntax_t02: Fail
-tests/co19/src/Language/Statements/While/syntax_t03: Fail
-tests/co19/src/Language/Statements/While/syntax_t04: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t07: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t08: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t09: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t10: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/location_t01: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/location_t03: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/location_t05: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t07: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t08: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t09: Fail
-tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t10: Fail
-tests/co19/src/Language/Types/Static_Types/syntax_t01: Fail
-tests/co19/src/Language/Types/Static_Types/syntax_t02: Fail
-tests/co19/src/Language/Types/Static_Types/syntax_t03: Fail
-tests/co19/src/Language/Types/Static_Types/syntax_t04: Fail
-tests/co19/src/Language/Types/Static_Types/syntax_t05: Fail
-tests/co19/src/Language/Types/Static_Types/syntax_t07: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/param_default_value_t01: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/param_default_value_t04: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/param_default_value_t05: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t02: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t03: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t04: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t05: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t06: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t07: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t08: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t09: Fail
-tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t10: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t01: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t03: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t04: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t05: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t06: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t07: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t08: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t09: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t10: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t11: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t12: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t13: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t14: Fail
-tests/co19/src/Language/Types/Type_Void/syntax_t15: Fail
-tests/co19/src/Language/Variables/library_variable_t01_lib: Fail
-tests/co19/src/Language/Variables/library_variable_t02: Fail
-tests/co19/src/Language/Variables/library_variable_t03: Fail
-tests/co19/src/Language/Variables/library_variable_t04: Fail
-tests/co19/src/Language/Variables/library_variable_t05: Fail
-tests/co19/src/Language/Variables/library_variable_t06: Fail
-tests/co19/src/Language/Variables/library_variable_t07: Fail
-tests/co19/src/Language/Variables/static_variable_t02: Fail
-tests/co19/src/Language/Variables/syntax_t03: Fail
-tests/co19/src/Language/Variables/syntax_t06: Fail
-tests/co19/src/Language/Variables/syntax_t07: Fail
-tests/co19/src/Language/Variables/syntax_t09: Fail
-tests/co19/src/Language/Variables/syntax_t10: Fail
-tests/co19/src/Language/Variables/syntax_t11: Fail
-tests/co19/src/Language/Variables/syntax_t15: Fail
-tests/co19/src/Language/Variables/syntax_t16: Fail
-tests/co19/src/Language/Variables/syntax_t17: Fail
-tests/co19/src/Language/Variables/syntax_t18: Fail
-tests/co19/src/Language/Variables/syntax_t19: Fail
-tests/co19/src/Language/Variables/syntax_t20: Fail
-tests/co19/src/Language/Variables/syntax_t21: Fail
-tests/co19/src/Language/Variables/syntax_t22: Fail
-tests/co19/src/Language/Variables/syntax_t23: Fail
-tests/co19/src/LibTest/html/HttpRequest/responseType_A01_t03: Fail
-tests/co19/src/WebPlatformTest/dom/nodes/Document-createElement_t01: Fail
-tests/co19/src/WebPlatformTest/dom/nodes/DOMImplementation-createHTMLDocument_t01: Fail
-tests/co19/src/WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: Fail
-tests/corelib_strong/from_environment_const_type_test: Fail
-tests/corelib_strong/from_environment_const_type_undefined_test: Fail
-tests/corelib_strong/symbol_reserved_word_test: Fail
-tests/corelib/from_environment_const_type_test: Fail
-tests/corelib/from_environment_const_type_undefined_test: Fail
-tests/corelib/symbol_reserved_word_test: Fail
-tests/web/deferred_custom_loader_test: Fail
-tests/web/empty_negative_test: Fail
-tests/web/invalid_annotation_test: Fail
-tests/web/invalid_annotation2_test: Fail
-tests/web/invalid_length_negative_test: Fail
-tests/web/LayoutTests_fast_mediastream_getusermedia_t01_test: Fail
-tests/web/switch_test: Fail
-tests/web/timer_negative_test: Fail
-tests/web/typed_locals_test: Fail
-tests/web/native/abstract_class_test: Fail
-tests/web/native/bound_closure_test: Fail
-tests/web/native/browser_compat_1_prepatched_test: Fail
-tests/web/native/browser_compat_1_unpatched_test: Fail
-tests/web/native/browser_compat_2_test: Fail
-tests/web/native/core_type_check_native_test: Fail
-tests/web/native/dispatch_property_initialization_test: Fail
-tests/web/native/downcast_test: Fail
-tests/web/native/error_safeToString_test: Fail
-tests/web/native/event_loop_test: Fail
-tests/web/native/fake_thing_2_test: Fail
-tests/web/native/fake_thing_test: Fail
-tests/web/native/field_type_test: Fail
-tests/web/native/field_type2_test: Fail
-tests/web/native/fixup_get_tag_test: Fail
-tests/web/native/hash_code_test: Fail
-tests/web/native/issue9182_test: Fail
-tests/web/native/jsobject_test: Fail
-tests/web/native/native_call_arity1_frog_test: Fail
-tests/web/native/native_call_arity2_frog_test: Fail
-tests/web/native/native_call_arity3_frog_test: Fail
-tests/web/native/native_checked_arguments1_frog_test: Fail
-tests/web/native/native_checked_fields_frog_test: Fail
-tests/web/native/native_class_avoids_hidden_name_frog_test: Fail
-tests/web/native/native_class_fields_2_test: Fail
-tests/web/native/native_class_fields_3_test: Fail
-tests/web/native/native_class_fields_test: Fail
-tests/web/native/native_class_inheritance1_frog_test: Fail
-tests/web/native/native_class_inheritance2_frog_test: Fail
-tests/web/native/native_class_inheritance3_frog_test: Fail
-tests/web/native/native_class_inheritance4_frog_test: Fail
-tests/web/native/native_class_is_check1_frog_test: Fail
-tests/web/native/native_class_is_check3_frog_test: Fail
-tests/web/native/native_class_with_dart_methods_frog_test: Fail
-tests/web/native/native_closure_identity_frog_test: Fail
-tests/web/native/native_constructor_name_test: Fail
-tests/web/native/native_equals_frog_test: Fail
-tests/web/native/native_exception2_test: Fail
-tests/web/native/native_exceptions1_frog_test: Fail
-tests/web/native/native_field_invocation_test: Fail
-tests/web/native/native_field_invocation2_test: Fail
-tests/web/native/native_field_invocation3_test: Fail
-tests/web/native/native_field_invocation4_test: Fail
-tests/web/native/native_field_invocation5_test: Fail
-tests/web/native/native_field_invocation6_test: Fail
-tests/web/native/native_field_name_test: Fail
-tests/web/native/native_field_optimization_test: Fail
-tests/web/native/native_field_rename_1_frog_test: Fail
-tests/web/native/native_field_rename_2_frog_test: Fail
-tests/web/native/native_library_same_name_used_frog_test: Fail
-tests/web/native/native_library_same_name_used_lib2: Fail
-tests/web/native/native_method_inlining_test: Fail
-tests/web/native/native_method_rename1_frog_test: Fail
-tests/web/native/native_method_rename2_frog_test: Fail
-tests/web/native/native_method_rename3_frog_test: Fail
-tests/web/native/native_method_with_keyword_name_test: Fail
-tests/web/native/native_missing_method1_frog_test: Fail
-tests/web/native/native_missing_method2_frog_test: Fail
-tests/web/native/native_mixin_field_test: Fail
-tests/web/native/native_mixin_multiple_test: Fail
-tests/web/native/native_mixin_multiple2_test: Fail
-tests/web/native/native_mixin_multiple3_test: Fail
-tests/web/native/native_mixin_test: Fail
-tests/web/native/native_mixin_with_plain_test: Fail
-tests/web/native/native_named_constructors2_frog_test: Fail
-tests/web/native/native_named_constructors3_frog_test: Fail
-tests/web/native/native_no_such_method_exception_frog_test: Fail
-tests/web/native/native_no_such_method_exception2_frog_test: Fail
-tests/web/native/native_no_such_method_exception3_frog_test: Fail
-tests/web/native/native_no_such_method_exception4_frog_test: Fail
-tests/web/native/native_no_such_method_exception5_frog_test: Fail
-tests/web/native/native_novel_html_test: Fail
-tests/web/native/native_null_closure_frog_test: Fail
-tests/web/native/native_null_frog_test: Fail
-tests/web/native/native_property_frog_test: Fail
-tests/web/native/native_testing: Fail
-tests/web/native/native_to_string_frog_test: Fail
-tests/web/native/native_use_native_name_in_table_frog_test: Fail
-tests/web/native/native_wrapping_function_frog_test: Fail
-tests/web/native/native_wrapping_function3_frog_test: Fail
-tests/web/native/oddly_named_fields_test: Fail
-tests/web/native/runtimetype_test: Fail
-tests/web/native/static_methods_test: Fail
-tests/web/native/subclassing_1_test: Fail
-tests/web/native/subclassing_2_test: Fail
-tests/web/native/subclassing_3_test: Fail
-tests/web/native/subclassing_4_test: Fail
-tests/web/native/subclassing_5_test: Fail
-tests/web/native/subclassing_constructor_1_test: Fail
-tests/web/native/subclassing_super_call_test: Fail
-tests/web/native/subclassing_super_field_1_test: Fail
-tests/web/native/subclassing_super_field_2_test: Fail
-tests/web/native/subclassing_type_test: Fail
-tests/web/native/super_call_test: Fail
-tests/web/native/super_property_test: Fail
-tests/web/switch_test: Fail
-tests/web/timer_negative_test: Fail
-tests/web/typed_locals_test: Fail
-tests/web_2/deferred_custom_loader_test: Fail
-tests/web_2/empty_negative_test: Fail
-tests/web_2/invalid_annotation_test: Fail
-tests/web_2/invalid_annotation2_test: Fail
-tests/web_2/invalid_length_negative_test: Fail
-tests/web_2/LayoutTests_fast_mediastream_getusermedia_t01_test: Fail
-tests/web_2/switch_test: Fail
-tests/web_2/timer_negative_test: Fail
-tests/web_2/typed_locals_test: Fail
-tests/web_2/native/abstract_class_test: Fail
-tests/web_2/native/bound_closure_test: Fail
-tests/web_2/native/browser_compat_1_prepatched_test: Fail
-tests/web_2/native/browser_compat_1_unpatched_test: Fail
-tests/web_2/native/browser_compat_2_test: Fail
-tests/web_2/native/core_type_check_native_test: Fail
-tests/web_2/native/dispatch_property_initialization_test: Fail
-tests/web_2/native/downcast_test: Fail
-tests/web_2/native/error_safeToString_test: Fail
-tests/web_2/native/event_loop_test: Fail
-tests/web_2/native/fake_thing_2_test: Fail
-tests/web_2/native/fake_thing_test: Fail
-tests/web_2/native/field_type_test: Fail
-tests/web_2/native/field_type2_test: Fail
-tests/web_2/native/fixup_get_tag_test: Fail
-tests/web_2/native/hash_code_test: Fail
-tests/web_2/native/issue9182_test: Fail
-tests/web_2/native/jsobject_test: Fail
-tests/web_2/native/native_call_arity1_frog_test: Fail
-tests/web_2/native/native_call_arity2_frog_test: Fail
-tests/web_2/native/native_call_arity3_frog_test: Fail
-tests/web_2/native/native_checked_arguments1_frog_test: Fail
-tests/web_2/native/native_checked_fields_frog_test: Fail
-tests/web_2/native/native_class_avoids_hidden_name_frog_test: Fail
-tests/web_2/native/native_class_fields_2_test: Fail
-tests/web_2/native/native_class_fields_3_test: Fail
-tests/web_2/native/native_class_fields_test: Fail
-tests/web_2/native/native_class_inheritance1_frog_test: Fail
-tests/web_2/native/native_class_inheritance2_frog_test: Fail
-tests/web_2/native/native_class_inheritance3_frog_test: Fail
-tests/web_2/native/native_class_inheritance4_frog_test: Fail
-tests/web_2/native/native_class_is_check1_frog_test: Fail
-tests/web_2/native/native_class_is_check3_frog_test: Fail
-tests/web_2/native/native_class_with_dart_methods_frog_test: Fail
-tests/web_2/native/native_closure_identity_frog_test: Fail
-tests/web_2/native/native_constructor_name_test: Fail
-tests/web_2/native/native_equals_frog_test: Fail
-tests/web_2/native/native_exception2_test: Fail
-tests/web_2/native/native_exceptions1_frog_test: Fail
-tests/web_2/native/native_field_invocation_test: Fail
-tests/web_2/native/native_field_invocation2_test: Fail
-tests/web_2/native/native_field_invocation3_test: Fail
-tests/web_2/native/native_field_invocation4_test: Fail
-tests/web_2/native/native_field_invocation5_test: Fail
-tests/web_2/native/native_field_invocation6_test: Fail
-tests/web_2/native/native_field_name_test: Fail
-tests/web_2/native/native_field_optimization_test: Fail
-tests/web_2/native/native_field_rename_1_frog_test: Fail
-tests/web_2/native/native_field_rename_2_frog_test: Fail
-tests/web_2/native/native_library_same_name_used_frog_test: Fail
-tests/web_2/native/native_library_same_name_used_lib2: Fail
-tests/web_2/native/native_method_inlining_test: Fail
-tests/web_2/native/native_method_rename1_frog_test: Fail
-tests/web_2/native/native_method_rename2_frog_test: Fail
-tests/web_2/native/native_method_rename3_frog_test: Fail
-tests/web_2/native/native_method_with_keyword_name_test: Fail
-tests/web_2/native/native_missing_method1_frog_test: Fail
-tests/web_2/native/native_missing_method2_frog_test: Fail
-tests/web_2/native/native_mixin_field_test: Fail
-tests/web_2/native/native_mixin_multiple_test: Fail
-tests/web_2/native/native_mixin_multiple2_test: Fail
-tests/web_2/native/native_mixin_multiple3_test: Fail
-tests/web_2/native/native_mixin_test: Fail
-tests/web_2/native/native_mixin_with_plain_test: Fail
-tests/web_2/native/native_named_constructors2_frog_test: Fail
-tests/web_2/native/native_named_constructors3_frog_test: Fail
-tests/web_2/native/native_no_such_method_exception_frog_test: Fail
-tests/web_2/native/native_no_such_method_exception2_frog_test: Fail
-tests/web_2/native/native_no_such_method_exception3_frog_test: Fail
-tests/web_2/native/native_no_such_method_exception4_frog_test: Fail
-tests/web_2/native/native_no_such_method_exception5_frog_test: Fail
-tests/web_2/native/native_novel_html_test: Fail
-tests/web_2/native/native_null_closure_frog_test: Fail
-tests/web_2/native/native_null_frog_test: Fail
-tests/web_2/native/native_property_frog_test: Fail
-tests/web_2/native/native_testing: Fail
-tests/web_2/native/native_to_string_frog_test: Fail
-tests/web_2/native/native_use_native_name_in_table_frog_test: Fail
-tests/web_2/native/native_wrapping_function_frog_test: Fail
-tests/web_2/native/native_wrapping_function3_frog_test: Fail
-tests/web_2/native/oddly_named_fields_test: Fail
-tests/web_2/native/runtimetype_test: Fail
-tests/web_2/native/static_methods_test: Fail
-tests/web_2/native/subclassing_1_test: Fail
-tests/web_2/native/subclassing_2_test: Fail
-tests/web_2/native/subclassing_3_test: Fail
-tests/web_2/native/subclassing_4_test: Fail
-tests/web_2/native/subclassing_5_test: Fail
-tests/web_2/native/subclassing_constructor_1_test: Fail
-tests/web_2/native/subclassing_super_call_test: Fail
-tests/web_2/native/subclassing_super_field_1_test: Fail
-tests/web_2/native/subclassing_super_field_2_test: Fail
-tests/web_2/native/subclassing_type_test: Fail
-tests/web_2/native/super_call_test: Fail
-tests/web_2/native/super_property_test: Fail
-tests/web_2/switch_test: Fail
-tests/web_2/timer_negative_test: Fail
-tests/web_2/typed_locals_test: Fail
-tests/language_2/abstract_syntax_test: Fail
-tests/language_2/arg_param_trailing_comma_test: Fail
-tests/language_strong/argument_definition_test: Fail
-tests/language_strong/assign_instance_method_negative_test: Fail
-tests/language_strong/async_await_syntax_test: Fail
-tests/language_strong/await_backwards_compatibility_test: Fail
-tests/language_strong/bad_constructor_test: Fail
-tests/language_strong/bad_initializer1_negative_test: Fail
-tests/language_strong/bad_initializer2_negative_test: Fail
-tests/language_strong/bad_named_constructor_negative_test: Fail
-tests/language_strong/bad_raw_string_test: Fail
-tests/language_strong/black_listed_test: Fail
-tests/language_strong/body_less_constructor_wrong_arg_negative_test: Fail
-tests/language_strong/built_in_identifier_prefix_test: Fail
-tests/language_strong/built_in_identifier_test: Fail
-tests/language_strong/cascade_test: Fail
-tests/language_strong/class_cycle2_test: Fail
-tests/language_strong/class_keyword_test: Fail
-tests/language_strong/class_syntax_test: Fail
-tests/language_strong/closure_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/compile_time_constant13_test: Fail
-tests/language_strong/const_counter_negative_test: Fail
-tests/language_strong/const_native_factory_test: Fail
-tests/language_strong/const_optional_args_negative_test: Fail
-tests/language_strong/constructor_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/constructor_initializer_test: Fail
-tests/language_strong/constructor_name_test: Fail
-tests/language_strong/constructor_redirect1_negative_test: Fail
-tests/language_strong/constructor_redirect2_negative_test: Fail
-tests/language_strong/constructor_setter_negative_test: Fail
-tests/language_strong/constructor3_negative_test: Fail
-tests/language_strong/cyclic_typedef_test: Fail
-tests/language_strong/deferred_type_dependency_test: Fail
-tests/language_strong/duplicate_export_negative_test: Fail
-tests/language_strong/duplicate_interface_negative_test: Fail
-tests/language_strong/enum_is_keyword_test: Fail
-tests/language_strong/enum_syntax_test: Fail
-tests/language_strong/export_ambiguous_main_negative_test: Fail
-tests/language_strong/extend_type_parameter_negative_test: Fail
-tests/language_strong/extend_type_parameter2_negative_test: Fail
-tests/language_strong/external_test: Fail
-tests/language_strong/factory_negative_test: Fail
-tests/language_strong/factory2_negative_test: Fail
-tests/language_strong/field_method4_negative_test: Fail
-tests/language_strong/field1_negative_test: Fail
-tests/language_strong/field2_negative_test: Fail
-tests/language_strong/field3a_negative_test: Fail
-tests/language_strong/field4_negative_test: Fail
-tests/language_strong/field5_negative_test: Fail
-tests/language_strong/field6_negative_test: Fail
-tests/language_strong/field6a_negative_test: Fail
-tests/language_strong/function_syntax_test: Fail
-tests/language_strong/function_type_parameter_negative_test: Fail
-tests/language_strong/function_type_parameter2_negative_test: Fail
-tests/language_strong/get_set_syntax_test: Fail
-tests/language_strong/getter_declaration_negative_test: Fail
-tests/language_strong/illegal_declaration_test: Fail
-tests/language_strong/import_combinators_negative_test: Fail
-tests/language_strong/inst_field_initializer1_negative_test: Fail
-tests/language_strong/instance_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/instance_method_negative_test: Fail
-tests/language_strong/instance_method2_negative_test: Fail
-tests/language_strong/interface_cycle_test: Fail
-tests/language_strong/interface_static_non_final_fields_negative_test: Fail
-tests/language_strong/interface2_negative_test: Fail
-tests/language_strong/keyword_type_expression_test: Fail
-tests/language_strong/label2_negative_test: Fail
-tests/language_strong/label3_negative_test: Fail
-tests/language_strong/label5_negative_test: Fail
-tests/language_strong/label6_negative_test: Fail
-tests/language_strong/library_negative_test: Fail
-tests/language_strong/list_literal_syntax_test: Fail
-tests/language_strong/list_literal2_negative_test: Fail
-tests/language_strong/literal_unary_plus_test: Fail
-tests/language_strong/main_test: Fail
-tests/language_strong/malformed_inheritance_test: Fail
-tests/language_strong/malformed_test: Fail
-tests/language_strong/map_literal2_negative_test: Fail
-tests/language_strong/metadata_test: Fail
-tests/language_strong/method_override2_test: Fail
-tests/language_strong/mixin_forwarding_constructor4_test: Fail
-tests/language_strong/mixin_illegal_syntax_test: Fail
-tests/language_strong/mixin_invalid_inheritance1_test: Fail
-tests/language_strong/named_constructor_test: Fail
-tests/language_strong/named_parameters_aggregated_test: Fail
-tests/language_strong/no_such_method_negative_test: Fail
-tests/language_strong/non_const_super_negative_test: Fail
-tests/language_strong/null_test: Fail
-tests/language_strong/number_identifier_test: Fail
-tests/language_strong/override_field_method1_negative_test: Fail
-tests/language_strong/override_field_method2_negative_test: Fail
-tests/language_strong/override_field_method4_negative_test: Fail
-tests/language_strong/override_field_method5_negative_test: Fail
-tests/language_strong/override_inheritance_generic_test: Fail
-tests/language_strong/parameter_default_test: Fail
-tests/language_strong/parameter_initializer1_negative_test: Fail
-tests/language_strong/parameter_initializer2_negative_test: Fail
-tests/language_strong/parameter_initializer3_negative_test: Fail
-tests/language_strong/parameter_initializer4_negative_test: Fail
-tests/language_strong/parameter_initializer6_negative_test: Fail
-tests/language_strong/prefix1_negative_test: Fail
-tests/language_strong/prefix10_negative_test: Fail
-tests/language_strong/prefix11_negative_test: Fail
-tests/language_strong/prefix12_negative_test: Fail
-tests/language_strong/prefix13_negative_test: Fail
-tests/language_strong/prefix15_negative_test: Fail
-tests/language_strong/prefix2_negative_test: Fail
-tests/language_strong/prefix3_negative_test: Fail
-tests/language_strong/prefix4_negative_test: Fail
-tests/language_strong/prefix5_negative_test: Fail
-tests/language_strong/prefix6_negative_test: Fail
-tests/language_strong/prefix7_negative_test: Fail
-tests/language_strong/prefix8_negative_test: Fail
-tests/language_strong/private_member1_negative_test: Fail
-tests/language_strong/private_member2_negative_test: Fail
-tests/language_strong/private_member3_negative_test: Fail
-tests/language_strong/regress_23051_test: Fail
-tests/language_strong/script1_negative_test: Fail
-tests/language_strong/script2_negative_test: Fail
-tests/language_strong/source_self_negative_test: Fail
-tests/language_strong/static_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/static_parameter_test: Fail
-tests/language_strong/static_top_level_test: Fail
-tests/language_strong/string_interpolation9_test: Fail
-tests/language_strong/string_unicode1_negative_test: Fail
-tests/language_strong/string_unicode2_negative_test: Fail
-tests/language_strong/string_unicode3_negative_test: Fail
-tests/language_strong/string_unicode4_negative_test: Fail
-tests/language_strong/switch1_negative_test: Fail
-tests/language_strong/switch3_negative_test: Fail
-tests/language_strong/switch4_negative_test: Fail
-tests/language_strong/switch5_negative_test: Fail
-tests/language_strong/switch7_negative_test: Fail
-tests/language_strong/sync_generator2_test: Fail
-tests/language_strong/syntax_test: Fail
-tests/language_strong/tearoff_basic_test: Fail
-tests/language_strong/tearoff_constructor_basic_test: Fail
-tests/language_strong/try_catch_on_syntax_test: Fail
-tests/language_strong/try_catch_syntax_test: Fail
-tests/language_strong/type_variable_bounds2_test: Fail
-tests/language_strong/type_variable_static_context_negative_test: Fail
-tests/language_strong/unbalanced_brace_test: Fail
-tests/language_strong/unresolved_in_factory_negative_test: Fail
-tests/language_strong/unresolved_top_level_method_negative_test: Fail
-tests/language_strong/unresolved_top_level_var_negative_test: Fail
-tests/language_strong/unsigned_right_shift_test: Fail
-tests/language_strong/variable_declaration_metadata_test: Fail
-tests/language/argument_definition_test: Fail
-tests/language/assert_initializer_test: Fail
-tests/language/assign_instance_method_negative_test: Fail
-tests/language/async_await_syntax_test: Fail
-tests/language/await_backwards_compatibility_test: Fail
-tests/language/bad_constructor_test: Fail
-tests/language/bad_initializer1_negative_test: Fail
-tests/language/bad_initializer2_negative_test: Fail
-tests/language/bad_named_constructor_negative_test: Fail
-tests/language/bad_raw_string_test: Fail
-tests/language/bad_typedef_test: Fail
-tests/language/black_listed_test: Fail
-tests/language/body_less_constructor_wrong_arg_negative_test: Fail
-tests/language/built_in_identifier_test: Fail
-tests/language/cascade_test: Fail
-tests/language/class_cycle2_test: Fail
-tests/language/class_keyword_test: Fail
-tests/language/class_syntax_test: Fail
-tests/language/closure_call_wrong_argument_count_negative_test: Fail
-tests/language/compile_time_constant13_test: Fail
-tests/language/const_counter_negative_test: Fail
-tests/language/const_getter_test: Fail
-tests/language/const_native_factory_test: Fail
-tests/language/const_optional_args_negative_test: Fail
-tests/language/constructor_call_wrong_argument_count_negative_test: Fail
-tests/language/constructor_initializer_test: Fail
-tests/language/constructor_name_test: Fail
-tests/language/constructor_redirect1_negative_test: Fail
-tests/language/constructor_redirect2_negative_test: Fail
-tests/language/constructor_setter_negative_test: Fail
-tests/language/constructor3_negative_test: Fail
-tests/language/covariant_test: Fail
-tests/language/cyclic_typedef_test: Fail
-tests/language/deferred_type_dependency_test: Fail
-tests/language/duplicate_export_negative_test: Fail
-tests/language/duplicate_interface_negative_test: Fail
-tests/language/enum_is_keyword_test: Fail
-tests/language/enum_syntax_test: Fail
-tests/language/export_ambiguous_main_negative_test: Fail
-tests/language/extend_type_parameter_negative_test: Fail
-tests/language/extend_type_parameter2_negative_test: Fail
-tests/language/external_test: Fail
-tests/language/factory_negative_test: Fail
-tests/language/factory2_negative_test: Fail
-tests/language/field_method4_negative_test: Fail
-tests/language/field1_negative_test: Fail
-tests/language/field2_negative_test: Fail
-tests/language/field3a_negative_test: Fail
-tests/language/field4_negative_test: Fail
-tests/language/field5_negative_test: Fail
-tests/language/field6_negative_test: Fail
-tests/language/field6a_negative_test: Fail
-tests/language/function_syntax_test: Fail
-tests/language/function_type_parameter_negative_test: Fail
-tests/language/function_type_parameter2_negative_test: Fail
-tests/language/generic_function_typedef2_test: Fail
-tests/language/get_set_syntax_test: Fail
-tests/language/getter_declaration_negative_test: Fail
-tests/language/illegal_declaration_test: Fail
-tests/language/import_combinators_negative_test: Fail
-tests/language/inst_field_initializer1_negative_test: Fail
-tests/language/instance_call_wrong_argument_count_negative_test: Fail
-tests/language/instance_method_negative_test: Fail
-tests/language/instance_method2_negative_test: Fail
-tests/language/interface_cycle_test: Fail
-tests/language/interface_static_non_final_fields_negative_test: Fail
-tests/language/interface2_negative_test: Fail
-tests/language/keyword_type_expression_test: Fail
-tests/language/label2_negative_test: Fail
-tests/language/label3_negative_test: Fail
-tests/language/label5_negative_test: Fail
-tests/language/label6_negative_test: Fail
-tests/language/library_negative_test: Fail
-tests/language/list_literal_syntax_test: Fail
-tests/language/list_literal2_negative_test: Fail
-tests/language/literal_unary_plus_test: Fail
-tests/language/main_test: Fail
-tests/language/malformed_inheritance_test: Fail
-tests/language/malformed_test: Fail
-tests/language/map_literal2_negative_test: Fail
-tests/language/metadata_test: Fail
-tests/language/method_name_test: Fail
-tests/language/method_override2_test: Fail
-tests/language/mixin_forwarding_constructor4_test: Fail
-tests/language/mixin_illegal_syntax_test: Fail
-tests/language/mixin_invalid_inheritance1_test: Fail
-tests/language/mixin_supertype_subclass_test: Fail
-tests/language/mixin_supertype_subclass2_test: Fail
-tests/language/mixin_supertype_subclass4_test: Fail
-tests/language/named_constructor_test: Fail
-tests/language/named_parameters_aggregated_test: Fail
-tests/language/no_such_method_negative_test: Fail
-tests/language/non_const_super_negative_test: Fail
-tests/language/null_test: Fail
-tests/language/number_identifier_test: Fail
-tests/language/override_field_method1_negative_test: Fail
-tests/language/override_field_method2_negative_test: Fail
-tests/language/override_field_method4_negative_test: Fail
-tests/language/override_field_method5_negative_test: Fail
-tests/language/override_inheritance_generic_test: Fail
-tests/language/parameter_default_test: Fail
-tests/language/parameter_initializer1_negative_test: Fail
-tests/language/parameter_initializer2_negative_test: Fail
-tests/language/parameter_initializer3_negative_test: Fail
-tests/language/parameter_initializer4_negative_test: Fail
-tests/language/parameter_initializer5_negative_test: Fail
-tests/language/parameter_initializer6_negative_test: Fail
-tests/language/prefix1_negative_test: Fail
-tests/language/prefix10_negative_test: Fail
-tests/language/prefix11_negative_test: Fail
-tests/language/prefix12_negative_test: Fail
-tests/language/prefix13_negative_test: Fail
-tests/language/prefix15_negative_test: Fail
-tests/language/prefix2_negative_test: Fail
-tests/language/prefix3_negative_test: Fail
-tests/language/prefix4_negative_test: Fail
-tests/language/prefix5_negative_test: Fail
-tests/language/prefix6_negative_test: Fail
-tests/language/prefix7_negative_test: Fail
-tests/language/prefix8_negative_test: Fail
-tests/language/private_member1_negative_test: Fail
-tests/language/private_member2_negative_test: Fail
-tests/language/private_member3_negative_test: Fail
-tests/language/regress_23051_test: Fail
-tests/language/script1_negative_test: Fail
-tests/language/script2_negative_test: Fail
-tests/language/source_self_negative_test: Fail
-tests/language/static_call_wrong_argument_count_negative_test: Fail
-tests/language/static_parameter_test: Fail
-tests/language/static_top_level_test: Fail
-tests/language/string_interpolation1_test: Fail
-tests/language/string_interpolation2_test: Fail
-tests/language/string_interpolation3_test: Fail
-tests/language/string_interpolation4_test: Fail
-tests/language/string_interpolation5_test: Fail
-tests/language/string_interpolation6_test: Fail
-tests/language/string_interpolation9_test: Fail
-tests/language/string_unicode1_negative_test: Fail
-tests/language/string_unicode2_negative_test: Fail
-tests/language/string_unicode3_negative_test: Fail
-tests/language/string_unicode4_negative_test: Fail
-tests/language/switch1_negative_test: Fail
-tests/language/switch3_negative_test: Fail
-tests/language/switch4_negative_test: Fail
-tests/language/switch5_negative_test: Fail
-tests/language/switch7_negative_test: Fail
-tests/language/sync_generator2_test: Fail
-tests/language/syntax_test: Fail
-tests/language/tearoff_basic_test: Fail
-tests/language/tearoff_constructor_basic_test: Fail
-tests/language/try_catch_on_syntax_test: Fail
-tests/language/try_catch_syntax_test: Fail
-tests/language/type_variable_bounds2_test: Fail
-tests/language/type_variable_static_context_negative_test: Fail
-tests/language/unbalanced_brace_test: Fail
-tests/language/unresolved_in_factory_negative_test: Fail
-tests/language/unresolved_top_level_method_negative_test: Fail
-tests/language/unresolved_top_level_var_negative_test: Fail
-tests/language/unsigned_right_shift_test: Fail
-tests/language/variable_declaration_metadata_test: Fail
-tests/language/vm/debug_break_enabled_vm_test: Fail
-tests/language/vm/debug_break_vm_test: Fail
-tests/lib_strong/mirrors/metadata_allowed_values_test: Fail
-tests/lib_strong/mirrors/metadata_scope_test: Fail
-tests/lib_strong/mirrors/mirror_in_static_init_test: Fail
-tests/lib_strong/mirrors/other_declarations_location_test: Fail
-tests/lib_strong/mirrors/syntax_error_test: Fail
-tests/lib_strong/mirrors/typevariable_mirror_metadata_test: Fail
-tests/lib/async/future_or_bad_type_test: Fail
-tests/lib/mirrors/metadata_allowed_values_test: Fail
-tests/lib/mirrors/metadata_scope_test: Fail
-tests/lib/mirrors/mirror_in_static_init_test: Fail
-tests/lib/mirrors/other_declarations_location_test: Fail
-tests/lib/mirrors/syntax_error_test: Fail
-tests/lib/mirrors/typevariable_mirror_metadata_test: Fail
-tests/standalone/io/snapshot_fail_script: Fail
-tests/standalone/io/test_extension: Fail
-tests/standalone/io/test_relative_extension: Fail
-tests/standalone/package/sibling_isolate: Fail
-third_party/pkg/linter/test/_data/synthetic/synthetic: Fail
-third_party/pkg/linter/test/rules/cascade_invocations: Fail
-third_party/pkg/resource/test/loader_data_test: Fail
-third_party/pkg/resource/test/loader_file_test: Fail
-third_party/pkg/resource/test/loader_http_test: Fail
diff --git a/pkg/front_end/test/fasta/parser/parser_suite.dart b/pkg/front_end/test/fasta/parser/parser_suite.dart
deleted file mode 100644
index 2dac9f9..0000000
--- a/pkg/front_end/test/fasta/parser/parser_suite.dart
+++ /dev/null
@@ -1,50 +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.md file.
-
-import 'package:_fe_analyzer_shared/src/parser/parser.dart'
-    show ParserError, parse;
-import 'package:front_end/src/fasta/source/diet_parser.dart';
-
-import 'package:testing/testing.dart'
-    show Chain, ChainContext, Result, Step, runMe;
-
-import '../../utils/scanner_chain.dart' show Read, Scan, ScannedFile;
-
-Future<ChainContext> createContext(
-    Chain suite, Map<String, String> environment) {
-  return new Future.value(new ScannerContext());
-}
-
-class ScannerContext extends ChainContext {
-  @override
-  final List<Step> steps = const <Step>[
-    const Read(),
-    const Scan(),
-    const Parse(),
-  ];
-}
-
-class Parse extends Step<ScannedFile, Null, ChainContext> {
-  const Parse();
-
-  @override
-  String get name => "parse";
-
-  @override
-  Future<Result<Null>> run(ScannedFile file, ChainContext context) {
-    try {
-      List<ParserError> errors = parse(file.result.tokens,
-          useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
-      if (errors.isNotEmpty) {
-        return new Future.value(fail(null, errors.join("\n")));
-      }
-    } on ParserError catch (e, s) {
-      return new Future.value(fail(null, e, s));
-    }
-    return new Future.value(pass(null));
-  }
-}
-
-void main(List<String> arguments) =>
-    runMe(arguments, createContext, configurationPath: "../../../testing.json");
diff --git a/pkg/front_end/test/fasta/parser/testing.json b/pkg/front_end/test/fasta/parser/testing.json
deleted file mode 100644
index 8265d1e..0000000
--- a/pkg/front_end/test/fasta/parser/testing.json
+++ /dev/null
@@ -1,31 +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.md file.",
-  "packages": "../../../../../.dart_tool/package_config.json",
-  "suites": [
-    {
-      "name": "parser",
-      "kind": "Chain",
-      "source": "parser_suite.dart",
-      "path": "../../",
-      "status": "parser.status",
-      "pattern": [
-        "\\.dart$"
-      ],
-      "exclude": [
-        "README.dart",
-        "xcodebuild/",
-        "tools/sdks/"
-      ]
-    }
-  ],
-  "analyze": {
-    "uris": [
-      "../../../lib/src/fasta/parser/",
-      "../../../lib/src/fasta/parser/bin/"
-    ],
-    "exclude": [
-    ]
-  }
-}
diff --git a/pkg/front_end/test/fasta/scanner/scanner.status b/pkg/front_end/test/fasta/scanner/scanner.status
deleted file mode 100644
index 3987742..0000000
--- a/pkg/front_end/test/fasta/scanner/scanner.status
+++ /dev/null
@@ -1,242 +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.md file.
-
-pkg/testing/test/dart_sdk_negative_test: Fail
-tests/web_2/empty_negative_test: Fail
-tests/web_2/invalid_length_negative_test: Fail
-tests/web_2/timer_negative_test: Fail
-tests/language_strong/assign_instance_method_negative_test: Fail
-tests/language_strong/bad_initializer1_negative_test: Fail
-tests/language_strong/bad_initializer2_negative_test: Fail
-tests/language_strong/bad_named_constructor_negative_test: Fail
-tests/language_strong/body_less_constructor_wrong_arg_negative_test: Fail
-tests/language_strong/closure_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/const_counter_negative_test: Fail
-tests/language_strong/const_optional_args_negative_test: Fail
-tests/language_strong/constructor_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/constructor_redirect1_negative_test: Fail
-tests/language_strong/constructor_redirect2_negative_test: Fail
-tests/language_strong/constructor_setter_negative_test: Fail
-tests/language_strong/constructor3_negative_test: Fail
-tests/language_strong/duplicate_export_negative_test: Fail
-tests/language_strong/duplicate_interface_negative_test: Fail
-tests/language_strong/export_ambiguous_main_negative_test: Fail
-tests/language_strong/extend_type_parameter_negative_test: Fail
-tests/language_strong/extend_type_parameter2_negative_test: Fail
-tests/language_strong/factory_negative_test: Fail
-tests/language_strong/factory2_negative_test: Fail
-tests/language_strong/factory3_negative_test: Fail
-tests/language_strong/field_method4_negative_test: Fail
-tests/language_strong/field1_negative_test: Fail
-tests/language_strong/field2_negative_test: Fail
-tests/language_strong/field3_negative_test: Fail
-tests/language_strong/field3a_negative_test: Fail
-tests/language_strong/field4_negative_test: Fail
-tests/language_strong/field5_negative_test: Fail
-tests/language_strong/field6_negative_test: Fail
-tests/language_strong/field6a_negative_test: Fail
-tests/language_strong/function_type_parameter_negative_test: Fail
-tests/language_strong/function_type_parameter2_negative_test: Fail
-tests/language_strong/getter_declaration_negative_test: Fail
-tests/language_strong/import_combinators_negative_test: Fail
-tests/language_strong/inst_field_initializer1_negative_test: Fail
-tests/language_strong/instance_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/instance_method_negative_test: Fail
-tests/language_strong/instance_method2_negative_test: Fail
-tests/language_strong/interface_injection1_negative_test: Fail
-tests/language_strong/interface_injection2_negative_test: Fail
-tests/language_strong/interface_static_method_negative_test: Fail
-tests/language_strong/interface_static_non_final_fields_negative_test: Fail
-tests/language_strong/interface2_negative_test: Fail
-tests/language_strong/is_not_class1_negative_test: Fail
-tests/language_strong/is_not_class4_negative_test: Fail
-tests/language_strong/issue1578_negative_test: Fail
-tests/language_strong/label2_negative_test: Fail
-tests/language_strong/label3_negative_test: Fail
-tests/language_strong/label5_negative_test: Fail
-tests/language_strong/label6_negative_test: Fail
-tests/language_strong/label8_negative_test: Fail
-tests/language_strong/library_negative_test: Fail
-tests/language_strong/list_literal_negative_test: Fail
-tests/language_strong/list_literal2_negative_test: Fail
-tests/language_strong/map_literal_negative_test: Fail
-tests/language_strong/map_literal2_negative_test: Fail
-tests/language_strong/new_expression1_negative_test: Fail
-tests/language_strong/new_expression2_negative_test: Fail
-tests/language_strong/new_expression3_negative_test: Fail
-tests/language_strong/no_such_method_negative_test: Fail
-tests/language_strong/non_const_super_negative_test: Fail
-tests/language_strong/operator1_negative_test: Fail
-tests/language_strong/operator2_negative_test: Fail
-tests/language_strong/override_field_method1_negative_test: Fail
-tests/language_strong/override_field_method2_negative_test: Fail
-tests/language_strong/override_field_method4_negative_test: Fail
-tests/language_strong/override_field_method5_negative_test: Fail
-tests/language_strong/parameter_initializer1_negative_test: Fail
-tests/language_strong/parameter_initializer2_negative_test: Fail
-tests/language_strong/parameter_initializer3_negative_test: Fail
-tests/language_strong/parameter_initializer4_negative_test: Fail
-tests/language_strong/parameter_initializer6_negative_test: Fail
-tests/language_strong/prefix1_negative_test: Fail
-tests/language_strong/prefix10_negative_test: Fail
-tests/language_strong/prefix11_negative_test: Fail
-tests/language_strong/prefix12_negative_test: Fail
-tests/language_strong/prefix13_negative_test: Fail
-tests/language_strong/prefix15_negative_test: Fail
-tests/language_strong/prefix18_negative_test: Fail
-tests/language_strong/prefix2_negative_test: Fail
-tests/language_strong/prefix3_negative_test: Fail
-tests/language_strong/prefix4_negative_test: Fail
-tests/language_strong/prefix5_negative_test: Fail
-tests/language_strong/prefix6_negative_test: Fail
-tests/language_strong/prefix7_negative_test: Fail
-tests/language_strong/prefix8_negative_test: Fail
-tests/language_strong/private_member1_negative_test: Fail
-tests/language_strong/private_member2_negative_test: Fail
-tests/language_strong/private_member3_negative_test: Fail
-tests/language_strong/script1_negative_test: Fail
-tests/language_strong/script2_negative_test: Fail
-tests/language_strong/source_self_negative_test: Fail
-tests/language_strong/static_call_wrong_argument_count_negative_test: Fail
-tests/language_strong/string_escape4_negative_test: Fail
-tests/language_strong/string_interpolate1_negative_test: Fail
-tests/language_strong/string_interpolate2_negative_test: Fail
-tests/language_strong/string_interpolation1_negative_test: Fail
-tests/language_strong/string_interpolation2_negative_test: Fail
-tests/language_strong/string_interpolation3_negative_test: Fail
-tests/language_strong/string_interpolation4_negative_test: Fail
-tests/language_strong/string_interpolation5_negative_test: Fail
-tests/language_strong/string_interpolation6_negative_test: Fail
-tests/language_strong/string_unicode1_negative_test: Fail
-tests/language_strong/string_unicode2_negative_test: Fail
-tests/language_strong/string_unicode3_negative_test: Fail
-tests/language_strong/string_unicode4_negative_test: Fail
-tests/language_strong/switch1_negative_test: Fail
-tests/language_strong/switch3_negative_test: Fail
-tests/language_strong/switch4_negative_test: Fail
-tests/language_strong/switch5_negative_test: Fail
-tests/language_strong/switch7_negative_test: Fail
-tests/language_strong/test_negative_test: Fail
-tests/language_strong/type_variable_static_context_negative_test: Fail
-tests/language_strong/unary_plus_negative_test: Fail
-tests/language_strong/unhandled_exception_negative_test: Fail
-tests/language_strong/unresolved_in_factory_negative_test: Fail
-tests/language_strong/unresolved_top_level_method_negative_test: Fail
-tests/language_strong/unresolved_top_level_var_negative_test: Fail
-tests/language/assign_instance_method_negative_test: Fail
-tests/language/bad_initializer1_negative_test: Fail
-tests/language/bad_initializer2_negative_test: Fail
-tests/language/bad_named_constructor_negative_test: Fail
-tests/language/body_less_constructor_wrong_arg_negative_test: Fail
-tests/language/closure_call_wrong_argument_count_negative_test: Fail
-tests/language/const_counter_negative_test: Fail
-tests/language/const_optional_args_negative_test: Fail
-tests/language/constructor_call_wrong_argument_count_negative_test: Fail
-tests/language/constructor_redirect1_negative_test: Fail
-tests/language/constructor_redirect2_negative_test: Fail
-tests/language/constructor_setter_negative_test: Fail
-tests/language/constructor3_negative_test: Fail
-tests/language/deep_nesting1_negative_test: Fail
-tests/language/deep_nesting2_negative_test: Fail
-tests/language/duplicate_export_negative_test: Fail
-tests/language/duplicate_interface_negative_test: Fail
-tests/language/export_ambiguous_main_negative_test: Fail
-tests/language/extend_type_parameter_negative_test: Fail
-tests/language/extend_type_parameter2_negative_test: Fail
-tests/language/factory_negative_test: Fail
-tests/language/factory2_negative_test: Fail
-tests/language/factory3_negative_test: Fail
-tests/language/field_method4_negative_test: Fail
-tests/language/field1_negative_test: Fail
-tests/language/field2_negative_test: Fail
-tests/language/field3_negative_test: Fail
-tests/language/field3a_negative_test: Fail
-tests/language/field4_negative_test: Fail
-tests/language/field5_negative_test: Fail
-tests/language/field6_negative_test: Fail
-tests/language/field6a_negative_test: Fail
-tests/language/function_type_parameter_negative_test: Fail
-tests/language/function_type_parameter2_negative_test: Fail
-tests/language/getter_declaration_negative_test: Fail
-tests/language/import_combinators_negative_test: Fail
-tests/language/inst_field_initializer1_negative_test: Fail
-tests/language/instance_call_wrong_argument_count_negative_test: Fail
-tests/language/instance_method_negative_test: Fail
-tests/language/instance_method2_negative_test: Fail
-tests/language/interface_injection1_negative_test: Fail
-tests/language/interface_injection2_negative_test: Fail
-tests/language/interface_static_method_negative_test: Fail
-tests/language/interface_static_non_final_fields_negative_test: Fail
-tests/language/interface2_negative_test: Fail
-tests/language/is_not_class1_negative_test: Fail
-tests/language/is_not_class4_negative_test: Fail
-tests/language/issue1578_negative_test: Fail
-tests/language/label2_negative_test: Fail
-tests/language/label3_negative_test: Fail
-tests/language/label5_negative_test: Fail
-tests/language/label6_negative_test: Fail
-tests/language/label8_negative_test: Fail
-tests/language/library_negative_test: Fail
-tests/language/list_literal_negative_test: Fail
-tests/language/list_literal2_negative_test: Fail
-tests/language/map_literal_negative_test: Fail
-tests/language/map_literal2_negative_test: Fail
-tests/language/new_expression1_negative_test: Fail
-tests/language/new_expression2_negative_test: Fail
-tests/language/new_expression3_negative_test: Fail
-tests/language/no_such_method_negative_test: Fail
-tests/language/non_const_super_negative_test: Fail
-tests/language/operator1_negative_test: Fail
-tests/language/operator2_negative_test: Fail
-tests/language/override_field_method1_negative_test: Fail
-tests/language/override_field_method2_negative_test: Fail
-tests/language/override_field_method4_negative_test: Fail
-tests/language/override_field_method5_negative_test: Fail
-tests/language/parameter_initializer1_negative_test: Fail
-tests/language/parameter_initializer2_negative_test: Fail
-tests/language/parameter_initializer3_negative_test: Fail
-tests/language/parameter_initializer4_negative_test: Fail
-tests/language/parameter_initializer5_negative_test: Fail
-tests/language/parameter_initializer6_negative_test: Fail
-tests/language/prefix1_negative_test: Fail
-tests/language/prefix10_negative_test: Fail
-tests/language/prefix11_negative_test: Fail
-tests/language/prefix12_negative_test: Fail
-tests/language/prefix13_negative_test: Fail
-tests/language/prefix15_negative_test: Fail
-tests/language/prefix18_negative_test: Fail
-tests/language/prefix2_negative_test: Fail
-tests/language/prefix3_negative_test: Fail
-tests/language/prefix4_negative_test: Fail
-tests/language/prefix5_negative_test: Fail
-tests/language/prefix6_negative_test: Fail
-tests/language/prefix7_negative_test: Fail
-tests/language/prefix8_negative_test: Fail
-tests/language/private_member1_negative_test: Fail
-tests/language/private_member2_negative_test: Fail
-tests/language/private_member3_negative_test: Fail
-tests/language/script1_negative_test: Fail
-tests/language/script2_negative_test: Fail
-tests/language/source_self_negative_test: Fail
-tests/language/static_call_wrong_argument_count_negative_test: Fail
-tests/language/string_escape4_negative_test: Fail
-tests/language/string_interpolate1_negative_test: Fail
-tests/language/string_interpolate2_negative_test: Fail
-tests/language/string_unicode1_negative_test: Fail
-tests/language/string_unicode2_negative_test: Fail
-tests/language/string_unicode3_negative_test: Fail
-tests/language/string_unicode4_negative_test: Fail
-tests/language/switch1_negative_test: Fail
-tests/language/switch3_negative_test: Fail
-tests/language/switch4_negative_test: Fail
-tests/language/switch5_negative_test: Fail
-tests/language/switch7_negative_test: Fail
-tests/language/test_negative_test: Fail
-tests/language/type_variable_static_context_negative_test: Fail
-tests/language/unary_plus_negative_test: Fail
-tests/language/unhandled_exception_negative_test: Fail
-tests/language/unresolved_in_factory_negative_test: Fail
-tests/language/unresolved_top_level_method_negative_test: Fail
-tests/language/unresolved_top_level_var_negative_test: Fail
-tests/standalone/io/process_exit_negative_test: Fail
diff --git a/pkg/front_end/test/fasta/scanner/scanner_suite.dart b/pkg/front_end/test/fasta/scanner/scanner_suite.dart
deleted file mode 100644
index 69ea079..0000000
--- a/pkg/front_end/test/fasta/scanner/scanner_suite.dart
+++ /dev/null
@@ -1,23 +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.md file.
-
-import 'package:testing/testing.dart' show Chain, ChainContext, Step, runMe;
-
-import '../../utils/scanner_chain.dart' show Read, Scan;
-
-Future<ChainContext> createContext(
-    Chain suite, Map<String, String> environment) {
-  return new Future.value(new ScannerContext());
-}
-
-class ScannerContext extends ChainContext {
-  @override
-  final List<Step> steps = const <Step>[
-    const Read(),
-    const Scan(),
-  ];
-}
-
-void main(List<String> arguments) =>
-    runMe(arguments, createContext, configurationPath: "../../../testing.json");
diff --git a/pkg/front_end/test/fasta/scanner/testing.json b/pkg/front_end/test/fasta/scanner/testing.json
deleted file mode 100644
index 711f0cf..0000000
--- a/pkg/front_end/test/fasta/scanner/testing.json
+++ /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.md file.",
-  "packages": "../../../../../.dart_tool/package_config.json",
-  "suites": [
-    {
-      "name": "scanner",
-      "kind": "Chain",
-      "source": "scanner_suite.dart",
-      "path": "../../../../../",
-      "status": "scanner.status",
-      "pattern": [
-        "\\.dart$"
-      ],
-      "exclude": [
-      ]
-    }
-  ],
-  "analyze": {
-    "uris": [
-      "../../../lib/src/fasta/scanner/",
-      "../../../lib/src/fasta/scanner/bin/",
-      "../../../lib/src/fasta/scanner/testing/"
-    ],
-    "exclude": [
-    ]
-  }
-}
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 02231dd..2b3db8d 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -598,7 +598,7 @@
         }
         for (String argument in parsedOptions.arguments) {
           Uri uri = description.uri.resolve(argument);
-          if (uri.scheme != 'package') {
+          if (!uri.isScheme('package')) {
             File f = new File.fromUri(uri);
             if (!f.existsSync()) {
               throw new UnsupportedError("No file found: $f ($argument)");
@@ -1328,11 +1328,11 @@
     Map<Uri, LibraryBuilder> builders = {};
     for (LibraryBuilder builder
         in incrementalCompiler.kernelTargetForTesting!.loader.libraryBuilders) {
-      if (builder.importUri.scheme == "dart" && !builder.isSynthetic) continue;
+      if (builder.importUri.isScheme("dart") && !builder.isSynthetic) continue;
       builders[builder.fileUri] = builder;
       for (LibraryPart part in builder.library.parts) {
         Uri thisPartUri = builder.importUri.resolve(part.partUri);
-        if (thisPartUri.scheme == "package") {
+        if (thisPartUri.isScheme("package")) {
           thisPartUri = incrementalCompiler
               .kernelTargetForTesting!.uriTranslator
               .translate(thisPartUri)!;
@@ -1761,8 +1761,8 @@
       component.libraries.map((Library library) => library.importUri).toSet();
   Set<Uri> userLibraries = component.libraries
       .where((Library library) =>
-          library.importUri.scheme != 'dart' &&
-          library.importUri.scheme != 'package' &&
+          !library.importUri.isScheme('dart') &&
+          !library.importUri.isScheme('package') &&
           !excludedLibraries.contains(library))
       .map((Library library) => library.importUri)
       .toSet();
@@ -2171,7 +2171,7 @@
       ComponentResult result, FastaContext context) {
     Component component = result.component;
     Uri uri =
-        component.uriToSource.keys.firstWhere((uri) => uri.scheme == "file");
+        component.uriToSource.keys.firstWhere((uri) => uri.isScheme("file"));
     KernelTarget target = result.sourceTarget;
     ClassHierarchyBuilder hierarchy = target.loader.hierarchyBuilder;
     StringBuffer sb = new StringBuffer();
diff --git a/pkg/front_end/test/fasta/tool_git_test.dart b/pkg/front_end/test/fasta/tool_git_test.dart
index 6e4b231..092e026 100644
--- a/pkg/front_end/test/fasta/tool_git_test.dart
+++ b/pkg/front_end/test/fasta/tool_git_test.dart
@@ -114,7 +114,7 @@
     "dump-ir": {
       "exitCode": 2,
       "stdout": "",
-      "stderr": "Usage: dump-ir dillfile [output]\n",
+      "stderr": "Usage: dump-ir dillFile [output]\n",
     },
   };
 
diff --git a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart
index f037ae5..6bb5a32 100644
--- a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_nnbd_test.dart
@@ -48,13 +48,13 @@
         "the core library and the test library.");
     Library firstLibrary = env.component.libraries.first;
     Library secondLibrary = env.component.libraries.last;
-    if (firstLibrary.importUri.scheme == "dart" &&
+    if (firstLibrary.importUri.isScheme("dart") &&
         firstLibrary.importUri.path == "core") {
       _coreLibrary = firstLibrary;
       _testLibrary = secondLibrary;
     } else {
       assert(
-          secondLibrary.importUri.scheme == "dart" &&
+          secondLibrary.importUri.isScheme("dart") &&
               secondLibrary.importUri.path == "core",
           "One of the libraries is expected to be 'dart:core'.");
       _coreLibrary == secondLibrary;
diff --git a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
index e42fc10..f0aa16d 100644
--- a/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_constraint_gatherer_test.dart
@@ -48,13 +48,13 @@
         "the core library and the test library.");
     Library firstLibrary = env.component.libraries.first;
     Library secondLibrary = env.component.libraries.last;
-    if (firstLibrary.importUri.scheme == "dart" &&
+    if (firstLibrary.importUri.isScheme("dart") &&
         firstLibrary.importUri.path == "core") {
       _coreLibrary = firstLibrary;
       _testLibrary = secondLibrary;
     } else {
       assert(
-          secondLibrary.importUri.scheme == "dart" &&
+          secondLibrary.importUri.isScheme("dart") &&
               secondLibrary.importUri.path == "core",
           "One of the libraries is expected to be 'dart:core'.");
       _coreLibrary == secondLibrary;
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
index 182d44b..df6740e 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_nnbd_test.dart
@@ -46,13 +46,13 @@
         "the core library and the test library.");
     Library firstLibrary = typeParserEnvironment.component.libraries.first;
     Library secondLibrary = typeParserEnvironment.component.libraries.last;
-    if (firstLibrary.importUri.scheme == "dart" &&
+    if (firstLibrary.importUri.isScheme("dart") &&
         firstLibrary.importUri.path == "core") {
       _coreLibrary = firstLibrary;
       _testLibrary = secondLibrary;
     } else {
       assert(
-          secondLibrary.importUri.scheme == "dart" &&
+          secondLibrary.importUri.isScheme("dart") &&
               secondLibrary.importUri.path == "core",
           "One of the libraries is expected to be 'dart:core'.");
       _coreLibrary == secondLibrary;
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
index 526e061..cd094fe 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_environment_test.dart
@@ -46,13 +46,13 @@
         "the core library and the test library.");
     Library firstLibrary = typeParserEnvironment.component.libraries.first;
     Library secondLibrary = typeParserEnvironment.component.libraries.last;
-    if (firstLibrary.importUri.scheme == "dart" &&
+    if (firstLibrary.importUri.isScheme("dart") &&
         firstLibrary.importUri.path == "core") {
       _coreLibrary = firstLibrary;
       _testLibrary = secondLibrary;
     } else {
       assert(
-          secondLibrary.importUri.scheme == "dart" &&
+          secondLibrary.importUri.isScheme("dart") &&
               secondLibrary.importUri.path == "core",
           "One of the libraries is expected to be 'dart:core'.");
       _coreLibrary == secondLibrary;
diff --git a/pkg/front_end/test/fasta/types/legacy_upper_bound_helper.dart b/pkg/front_end/test/fasta/types/legacy_upper_bound_helper.dart
index a47c4ee..ecb3664 100644
--- a/pkg/front_end/test/fasta/types/legacy_upper_bound_helper.dart
+++ b/pkg/front_end/test/fasta/types/legacy_upper_bound_helper.dart
@@ -28,13 +28,13 @@
         "the core library and the test library.");
     Library firstLibrary = env.component.libraries.first;
     Library secondLibrary = env.component.libraries.last;
-    if (firstLibrary.importUri.scheme == "dart" &&
+    if (firstLibrary.importUri.isScheme("dart") &&
         firstLibrary.importUri.path == "core") {
       coreLibrary = firstLibrary;
       testLibrary = secondLibrary;
     } else {
       assert(
-          secondLibrary.importUri.scheme == "dart" &&
+          secondLibrary.importUri.isScheme("dart") &&
               secondLibrary.importUri.path == "core",
           "One of the libraries is expected to be 'dart:core'.");
       coreLibrary = secondLibrary;
diff --git a/pkg/front_end/test/hot_reload_e2e_test.dart b/pkg/front_end/test/hot_reload_e2e_test.dart
index 69069c9..07cf63b 100644
--- a/pkg/front_end/test/hot_reload_e2e_test.dart
+++ b/pkg/front_end/test/hot_reload_e2e_test.dart
@@ -309,7 +309,7 @@
     ..fileSystem = fs
     ..target = new VmTarget(new TargetFlags())
     ..environmentDefines = {};
-  return new IncrementalKernelGenerator(options, entryUri);
+  return new IncrementalKernelGenerator(options, [entryUri]);
 }
 
 Future<bool> rebuild(IncrementalKernelGenerator compiler, Uri outputUri) async {
@@ -330,7 +330,7 @@
   // TODO(sigmund): the incremental generator should always filter these
   // libraries instead.
   new BinaryPrinter(sink,
-          libraryFilter: (library) => library.importUri.scheme != 'dart')
+          libraryFilter: (library) => !library.importUri.isScheme('dart'))
       .writeComponentFile(component);
   await sink.close();
 }
diff --git a/pkg/front_end/test/incremental_bulk_compiler_full.dart b/pkg/front_end/test/incremental_bulk_compiler_full.dart
index 9edfd97..0856796 100644
--- a/pkg/front_end/test/incremental_bulk_compiler_full.dart
+++ b/pkg/front_end/test/incremental_bulk_compiler_full.dart
@@ -76,7 +76,7 @@
     late List<int> oneShotSerialized;
     try {
       IncrementalKernelGenerator compiler =
-          new IncrementalKernelGenerator(getOptions(), uri);
+          new IncrementalKernelGenerator(getOptions(), [uri]);
       oneShotSerialized =
           util.postProcess((await compiler.computeDelta()).component);
     } catch (e) {
@@ -89,7 +89,7 @@
     try {
       globalDebuggingNames = new NameSystem();
       if (context.compiler == null) {
-        context.compiler = new IncrementalKernelGenerator(getOptions(), uri);
+        context.compiler = new IncrementalKernelGenerator(getOptions(), [uri]);
       }
       IncrementalCompilerResult compilerResult = await context.compiler!
           .computeDelta(entryPoints: [uri], fullComponent: true);
@@ -106,7 +106,7 @@
     try {
       globalDebuggingNames = new NameSystem();
       if (context.compiler == null) {
-        context.compiler = new IncrementalKernelGenerator(getOptions(), uri);
+        context.compiler = new IncrementalKernelGenerator(getOptions(), [uri]);
       }
       IncrementalCompilerResult compilerResult = await context.compiler!
           .computeDelta(entryPoints: [uri], fullComponent: true);
diff --git a/pkg/front_end/test/incremental_dart2js_tester.dart b/pkg/front_end/test/incremental_dart2js_tester.dart
index 59add48..c3d7600 100644
--- a/pkg/front_end/test/incremental_dart2js_tester.dart
+++ b/pkg/front_end/test/incremental_dart2js_tester.dart
@@ -220,7 +220,7 @@
     uris = c.uriToSource.values
         .map((s) => s.importUri)
         .whereType<Uri>()
-        .where((u) => u.scheme != "dart")
+        .where((u) => !u.isScheme("dart"))
         .toSet()
         .toList();
 
diff --git a/pkg/front_end/test/incremental_flutter_tester.dart b/pkg/front_end/test/incremental_flutter_tester.dart
index 4a745aa..7527279 100644
--- a/pkg/front_end/test/incremental_flutter_tester.dart
+++ b/pkg/front_end/test/incremental_flutter_tester.dart
@@ -120,7 +120,7 @@
   List<Uri> uris = c.uriToSource.values
       .map((s) => s.importUri)
       .whereType<Uri>()
-      .where((u) => u.scheme != "dart")
+      .where((u) => !u.isScheme("dart"))
       .toSet()
       .toList();
 
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 20ed53a..e72f3f2 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -789,7 +789,7 @@
           // null is always there, so allow it implicitly.
           // Dart scheme uris too.
           // ignore: unnecessary_null_comparison
-          if (uri == null || uri.scheme == "org-dartlang-sdk") continue;
+          if (uri == null || uri.isScheme("org-dartlang-sdk")) continue;
           if (!allowed.contains(uri)) {
             return new Result<TestData>(
                 data,
@@ -1226,7 +1226,7 @@
   Component component = compilerResult.component;
   StringBuffer sb = new StringBuffer();
   for (Library library in component.libraries) {
-    if (library.importUri.scheme == "dart") continue;
+    if (library.importUri.isScheme("dart")) continue;
     sb.writeln("Library ${library.importUri}");
     for (Class c in library.classes) {
       sb.writeln("  - Class ${c.name}");
@@ -1533,7 +1533,7 @@
   while (workList.isNotEmpty) {
     Library library = workList.removeLast();
     for (LibraryDependency dependency in library.dependencies) {
-      if (dependency.targetLibrary.importUri.scheme == "dart") continue;
+      if (dependency.targetLibrary.importUri.isScheme("dart")) continue;
       if (libraries.add(dependency.targetLibrary)) {
         workList.add(dependency.targetLibrary);
         allLibraries.add(dependency.targetLibrary);
@@ -1607,7 +1607,7 @@
   if (world["neededDillLibraries"] != null) {
     List<Uri> actualContent = <Uri>[];
     for (Library lib in neededDillLibraries!) {
-      if (lib.importUri.scheme == "dart") continue;
+      if (lib.importUri.isScheme("dart")) continue;
       actualContent.add(lib.importUri);
     }
 
@@ -1652,7 +1652,7 @@
   Component c = new Component();
   List<Uri> dartUris = <Uri>[];
   for (Library lib in component.libraries) {
-    if (lib.importUri.scheme == "dart") {
+    if (lib.importUri.isScheme("dart")) {
       dartUris.add(lib.importUri);
     } else {
       c.libraries.add(lib);
@@ -1686,7 +1686,7 @@
 int countNonSyntheticPlatformLibraries(Component c) {
   int result = 0;
   for (Library lib in c.libraries) {
-    if (!lib.isSynthetic && lib.importUri.scheme == "dart") result++;
+    if (!lib.isSynthetic && lib.importUri.isScheme("dart")) result++;
   }
   return result;
 }
diff --git a/pkg/front_end/test/incremental_utils.dart b/pkg/front_end/test/incremental_utils.dart
index 8a46cd6..49c7663 100644
--- a/pkg/front_end/test/incremental_utils.dart
+++ b/pkg/front_end/test/incremental_utils.dart
@@ -77,7 +77,7 @@
     for (Uri uri in uris) {
       // ignore: unnecessary_null_comparison
       if (uri == null) continue;
-      if (uri.scheme != "org-dartlang-test") continue;
+      if (!uri.isScheme("org-dartlang-test")) continue;
       // The file system doesn't have the sources for any modules.
       // For now assume that that is always what's going on.
       if (!await fileSystem.entityForUri(uri).exists()) continue;
diff --git a/pkg/front_end/test/language_versioning/language_versioning_test.dart b/pkg/front_end/test/language_versioning/language_versioning_test.dart
index 5e88669..dabc98e 100644
--- a/pkg/front_end/test/language_versioning/language_versioning_test.dart
+++ b/pkg/front_end/test/language_versioning/language_versioning_test.dart
@@ -85,7 +85,7 @@
     CompilerOptions options = testResultData.customData;
     Component component = testResultData.compilerResult.component!;
     for (Library library in component.libraries) {
-      if (library.importUri.scheme == "dart") continue;
+      if (library.importUri.isScheme("dart")) continue;
       Version lvFile =
           (await lv.languageVersionForUri(library.fileUri, options)).version;
       Version lvImportUri =
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index d61759d..2d91952 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -259,6 +259,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -306,7 +307,7 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     Token importUriToken = importKeyword.next!;
     String importUri = importUriToken.lexeme;
     if (importUri.startsWith("r")) {
@@ -315,7 +316,7 @@
       importUri = importUri.substring(1, importUri.length - 1);
     }
     Uri resolved = uri.resolve(importUri);
-    if (resolved.scheme == "package") {
+    if (resolved.isScheme("package")) {
       if (description.cache.packages != null) {
         resolved = description.cache.packages!.resolve(resolved)!;
       }
@@ -345,7 +346,7 @@
       exportUri = exportUri.substring(1, exportUri.length - 1);
     }
     Uri resolved = uri.resolve(exportUri);
-    if (resolved.scheme == "package") {
+    if (resolved.isScheme("package")) {
       if (description.cache.packages != null) {
         resolved = description.cache.packages!.resolve(resolved)!;
       }
diff --git a/pkg/front_end/test/macro_api_test.dart b/pkg/front_end/test/macro_api_test.dart
new file mode 100644
index 0000000..70c3503
--- /dev/null
+++ b/pkg/front_end/test/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.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/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro.dart
index 4979c76..5a90a29 100644
--- 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
@@ -5,54 +5,360 @@
 import 'dart:async';
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
 
-macro class FunctionDefinitionMacro1 implements FunctionDefinitionMacro {
+macro
+
+class FunctionDefinitionMacro1 implements FunctionDefinitionMacro {
   const FunctionDefinitionMacro1();
 
-  FutureOr<void> buildDefinitionForFunction(
-      FunctionDeclaration function, FunctionDefinitionBuilder builder) {
-      builder.augment(new FunctionBodyCode.fromString('''{
-  return 42;
+  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
+      FunctionDefinitionBuilder builder) {
+    builder.augment(new FunctionBodyCode.fromString('''{
+  throw 42;
 }'''));
   }
 }
 
-macro class FunctionDefinitionMacro2 implements FunctionDefinitionMacro {
+macro
+
+class FunctionDefinitionMacro2 implements FunctionDefinitionMacro {
   const FunctionDefinitionMacro2();
 
-  FutureOr<void> buildDefinitionForFunction(
-      FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
+  FutureOr<void> buildDefinitionForFunction(FunctionDeclaration function,
+      FunctionDefinitionBuilder builder) async {
     if (function.positionalParameters.isEmpty) {
       return;
     }
-    StaticType returnType = await builder.instantiateType(function.returnType);
+    StaticType returnType = await builder.resolve(function.returnType.code);
     StaticType parameterType =
-        await builder.instantiateType(function.positionalParameters.first.type);
+    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 {
+macro
+
+class FunctionTypesMacro1 implements FunctionTypesMacro {
   const FunctionTypesMacro1();
 
-  FutureOr<void> buildTypesForFunction(
-      FunctionDeclaration function, TypeBuilder builder) {
-    builder.declareType(new DeclarationCode.fromString('''
-class ${function.identifier.name}GeneratedClass {}
-'''));
+  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 {
+macro
+
+class FunctionDeclarationsMacro1 implements FunctionDeclarationsMacro {
   const FunctionDeclarationsMacro1();
 
-  FutureOr<void> buildDeclarationsForFunction(
-      FunctionDeclaration function, DeclarationBuilder builder) {
+  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() {}
+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/pkgs/macro/lib/macro1.dart b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro1.dart
new file mode 100644
index 0000000..e732909
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro1.dart
@@ -0,0 +1,20 @@
+// 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 Macro1 implements ClassDeclarationsMacro {
+  const Macro1();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) {
+    builder.declareInClass(new DeclarationCode.fromString('''
+  get isMacro => true;
+'''));
+  }
+}
diff --git a/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro2.dart b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro2.dart
new file mode 100644
index 0000000..6173f58
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/pkgs/macro/lib/macro2.dart
@@ -0,0 +1,24 @@
+// 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';
+import 'macro1.dart';
+
+@Macro1()
+macro
+
+class Macro2 implements ClassDeclarationsMacro {
+  const Macro2();
+
+  @override
+  FutureOr<void> buildDeclarationsForClass(ClassDeclaration clazz,
+      ClassMemberDeclarationBuilder builder) {
+    if (isMacro) {
+      builder.declareInClass(new DeclarationCode.fromString('''
+  hasMacro() => true;
+'''));
+    }
+  }
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/declarations.dart b/pkg/front_end/test/macro_application/data/tests/declarations.dart
index a992685..a225e74 100644
--- a/pkg/front_end/test/macro_application/data/tests/declarations.dart
+++ b/pkg/front_end/test/macro_application/data/tests/declarations.dart
@@ -5,13 +5,153 @@
 import 'package:macro/macro.dart';
 
 /*member: topLevelFunction1:
-void topLevelFunction1GeneratedMethod() {}
+void topLevelFunction1GeneratedMethod_() {}
 */
 @FunctionDeclarationsMacro1()
 void topLevelFunction1() {}
 
-@FunctionDeclarationsMacro1()
 /*member: topLevelFunction2:
-void topLevelFunction2GeneratedMethod() {}
+void topLevelFunction2GeneratedMethod_e() {}
 */
-void topLevelFunction2() {}
+@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
new file mode 100644
index 0000000..27bb5b1
--- /dev/null
+++ b/pkg/front_end/test/macro_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=''");
+  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/layers.dart b/pkg/front_end/test/macro_application/data/tests/layers.dart
new file mode 100644
index 0000000..8a09eda
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/layers.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/macro2.dart';
+
+@Macro2()
+/*class: Class:
+augment class Class {
+  hasMacro() => true;
+
+}*/
+class Class {}
diff --git a/pkg/front_end/test/macro_application/data/tests/layers.dart.expect b/pkg/front_end/test/macro_application/data/tests/layers.dart.expect
new file mode 100644
index 0000000..749a2c7
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/layers.dart.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro2.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro2.dart";
+
+@#C1
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ hasMacro() → dynamic
+    return true;
+}
+
+constants  {
+  #C1 = mac::Macro2 {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/parameters.dart b/pkg/front_end/test/macro_application/data/tests/parameters.dart
index bb606bb..c71841a 100644
--- a/pkg/front_end/test/macro_application/data/tests/parameters.dart
+++ b/pkg/front_end/test/macro_application/data/tests/parameters.dart
@@ -2,32 +2,51 @@
 // for 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, ) {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external void topLevelFunction1(int a);
 
 /*member: topLevelFunction2:
 augment void topLevelFunction2(int a, int b, ) {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external void topLevelFunction2(int a, int b);
 
 /*member: topLevelFunction3:
 augment void topLevelFunction3(int a, [int? b, ]) {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external void topLevelFunction3(int a, [int? b]);
 
 /*member: topLevelFunction4:
 augment void topLevelFunction4(int a, {int? b, int? c, }) {
-  return 42;
+  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/macro_application/data/tests/parameters.dart.expect
new file mode 100644
index 0000000..91ba10d
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/parameters.dart.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:macro/macro.dart" as mac;
+import "dart:core" as core;
+
+import "package:macro/macro.dart";
+
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction1(core::int a) → void {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction2(core::int a, core::int b) → void {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction3(core::int a, [core::int? b = #C2]) → void {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction4(core::int a, {core::int? b = #C2, core::int? c = #C2}) → void {
+  throw 42;
+}
+
+constants  {
+  #C1 = mac::FunctionDefinitionMacro1 {}
+  #C2 = null
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/sequence.dart b/pkg/front_end/test/macro_application/data/tests/sequence.dart
new file mode 100644
index 0000000..b27f58f
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/sequence.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 'package:macro/macro.dart';
+
+@SequenceMacro()
+/*class: Class1:
+augment class Class1 {
+  method() {}
+}*/
+class Class1 {}
+
+@SequenceMacro()
+@SequenceMacro()
+/*class: Class2:
+augment class Class2 {
+  method() {}
+  method1() {}
+}*/
+class Class2 {}
+
+@SequenceMacro()
+/*class: Class3:
+augment class Class3 {
+  method1() {}
+}*/
+class Class3 {
+  method() {}
+}
+
+@SequenceMacro()
+@SequenceMacro()
+@SequenceMacro()
+/*class: Class4:
+augment class Class4 {
+  method1() {}
+  method3() {}
+  method4() {}
+}*/
+class Class4 {
+  method() {}
+  method2() {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect b/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect
new file mode 100644
index 0000000..273f4d9
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/sequence.dart.expect
@@ -0,0 +1,48 @@
+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 Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ method() → dynamic {}
+}
+@#C1
+@#C1
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ method() → dynamic {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ method1() → dynamic {}
+}
+@#C1
+class Class3 extends core::Object {
+  synthetic constructor •() → self::Class3
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ method1() → dynamic {}
+  method method() → dynamic {}
+}
+@#C1
+@#C1
+@#C1
+class Class4 extends core::Object {
+  synthetic constructor •() → self::Class4
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ method1() → dynamic {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-5 */ method3() → dynamic {}
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-6 */ method4() → dynamic {}
+  method method() → dynamic {}
+  method method2() → dynamic {}
+}
+
+constants  {
+  #C1 = mac::SequenceMacro {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/subtypes.dart b/pkg/front_end/test/macro_application/data/tests/subtypes.dart
index 245908a..b4028fd 100644
--- a/pkg/front_end/test/macro_application/data/tests/subtypes.dart
+++ b/pkg/front_end/test/macro_application/data/tests/subtypes.dart
@@ -2,6 +2,33 @@
 // for 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 {}
@@ -19,33 +46,49 @@
 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/macro_application/data/tests/subtypes.dart.expect
new file mode 100644
index 0000000..5488629
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/subtypes.dart.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:macro/macro.dart" as mac;
+
+import "package:macro/macro.dart";
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::B1 {
+  synthetic constructor •() → self::B2
+    : super self::B1::•()
+    ;
+}
+class C1 extends self::C2 {
+  synthetic constructor •() → self::C1
+    : super self::C2::•()
+    ;
+}
+class C2 extends core::Object {
+  synthetic constructor •() → self::C2
+    : super core::Object::•()
+    ;
+}
+class D1 extends core::Object {
+  synthetic constructor •() → self::D1
+    : super core::Object::•()
+    ;
+}
+class D2 extends core::Object {
+  synthetic constructor •() → self::D2
+    : super core::Object::•()
+    ;
+}
+@#C1
+@#C2
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelFunction1(self::A a) → self::A {
+  core::print("isExactly=true");
+  core::print("isSubtype=true");
+  throw 42;
+}
+@#C1
+@#C2
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelFunction2(self::B1 a) → self::B2 {
+  core::print("isExactly=false");
+  core::print("isSubtype=true");
+  throw 42;
+}
+@#C1
+@#C2
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelFunction3(self::C1 a) → self::C2 {
+  core::print("isExactly=false");
+  core::print("isSubtype=false");
+  throw 42;
+}
+@#C1
+@#C2
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-4 */ topLevelFunction4(self::D1 a) → self::D2 {
+  core::print("isExactly=false");
+  core::print("isSubtype=false");
+  throw 42;
+}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction1GeneratedMethod_es() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ topLevelFunction2GeneratedMethod_s() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-2 */ topLevelFunction3GeneratedMethod_() → void {}
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-3 */ topLevelFunction4GeneratedMethod_() → void {}
+
+constants  {
+  #C1 = mac::FunctionDeclarationsMacro2 {}
+  #C2 = mac::FunctionDefinitionMacro2 {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/supertypes.dart b/pkg/front_end/test/macro_application/data/tests/supertypes.dart
new file mode 100644
index 0000000..37c4038
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/supertypes.dart
@@ -0,0 +1,76 @@
+// 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/supertypes.dart.expect b/pkg/front_end/test/macro_application/data/tests/supertypes.dart.expect
new file mode 100644
index 0000000..535be53b
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/supertypes.dart.expect
@@ -0,0 +1,51 @@
+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 A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ getSuperClass() → core::String {
+    return "Object";
+  }
+}
+@#C1
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ getSuperClass() → core::String {
+    return "A";
+  }
+}
+@#C1
+class M extends core::Object /*isMixinDeclaration*/  {
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ getSuperClass() → core::String {
+    return "Object";
+  }
+}
+abstract class _C&A&M = self::A with self::M /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_C&A&M
+    : super self::A::•()
+    ;
+  mixin-super-stub method getSuperClass() → core::String
+    return super.{self::M::getSuperClass}();
+}
+@#C1
+class C extends self::_C&A&M {
+  synthetic constructor •() → self::C
+    : super self::_C&A&M::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ getSuperClass() → core::String {
+    return "A";
+  }
+}
+
+constants  {
+  #C1 = mac::SupertypesMacro {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/to_string.dart b/pkg/front_end/test/macro_application/data/tests/to_string.dart
new file mode 100644
index 0000000..7a0be62
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/to_string.dart
@@ -0,0 +1,42 @@
+// 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: A:
+augment class A {
+  toString() {
+    return "A(a=${a},b=${b})";
+  }
+}*/
+class A {
+  var a;
+  var b;
+}
+
+@ToStringMacro()
+/*class: B:
+augment class B {
+  toString() {
+    return "B(c=${c},d=${d},e=${e})";
+  }
+}*/
+class B {
+  var c, d;
+  var e;
+}
+
+@ToStringMacro()
+class C {
+  var f;
+
+  @override
+  String toString() => 'C()';
+}
+
+class D {
+  var g;
+  var h;
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect b/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect
new file mode 100644
index 0000000..68d6ea1
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/to_string.dart.expect
@@ -0,0 +1,52 @@
+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 A extends core::Object {
+  field dynamic a = null;
+  field dynamic b = null;
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ toString() → core::String {
+    return "A(a=${this.{self::A::a}{dynamic}},b=${this.{self::A::b}{dynamic}})";
+  }
+}
+@#C1
+class B extends core::Object {
+  field dynamic c = null;
+  field dynamic d = null;
+  field dynamic e = null;
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-augmentation:/a/b/c/main.dart-1 */ toString() → core::String {
+    return "B(c=${this.{self::B::c}{dynamic}},d=${this.{self::B::d}{dynamic}},e=${this.{self::B::e}{dynamic}})";
+  }
+}
+@#C1
+class C extends core::Object {
+  field dynamic f = null;
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  @#C2
+  method toString() → core::String
+    return "C()";
+}
+class D extends core::Object {
+  field dynamic g = null;
+  field dynamic h = null;
+  synthetic constructor •() → self::D
+    : super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = mac::ToStringMacro {}
+  #C2 = core::_Override {}
+}
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
index b6a4cd8..f61a9a2 100644
--- a/pkg/front_end/test/macro_application/data/tests/type_annotations.dart
+++ b/pkg/front_end/test/macro_application/data/tests/type_annotations.dart
@@ -2,62 +2,94 @@
 // for 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() {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external void topLevelFunction1();
 
 /*member: topLevelFunction2:
 augment dynamic topLevelFunction2() {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external dynamic topLevelFunction2();
 
 /*member: topLevelFunction3:
 augment int topLevelFunction3() {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external int topLevelFunction3();
 
 /*member: topLevelFunction4:
 augment dynamic topLevelFunction4() {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external topLevelFunction4();
 
 /*member: topLevelFunction5:
-augment math.Random topLevelFunction5() {
-  return 42;
+augment Random topLevelFunction5() {
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external math.Random topLevelFunction5();
 
 /*member: topLevelFunction6:
 augment List<int> topLevelFunction6() {
-  return 42;
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external List<int> topLevelFunction6();
 
 /*member: topLevelFunction7:
-augment Map<math.Random, List<int>> topLevelFunction7() {
-  return 42;
+augment Map<Random, List<int>> topLevelFunction7() {
+  throw 42;
 }*/
 @FunctionDefinitionMacro1()
 external Map<math.Random, List<int>> topLevelFunction7();
 
 /*member: topLevelFunction8:
 augment Map<int?, String>? topLevelFunction8() {
-  return 42;
+  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/macro_application/data/tests/type_annotations.dart.expect
new file mode 100644
index 0000000..ac3d6e3
--- /dev/null
+++ b/pkg/front_end/test/macro_application/data/tests/type_annotations.dart.expect
@@ -0,0 +1,45 @@
+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:math" as math;
+import "package:macro/macro.dart";
+
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction1() → void {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction2() → dynamic {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction3() → core::int {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction4() → dynamic {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction5() → math::Random {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction6() → core::List<core::int> {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction7() → core::Map<math::Random, core::List<core::int>> {
+  throw 42;
+}
+@#C1
+static method /* from org-dartlang-augmentation:/a/b/c/main.dart-0 */ topLevelFunction8() → core::Map<core::int?, core::String>? {
+  throw 42;
+}
+
+constants  {
+  #C1 = mac::FunctionDefinitionMacro1 {}
+}
diff --git a/pkg/front_end/test/macro_application/data/tests/types.dart b/pkg/front_end/test/macro_application/data/tests/types.dart
index c10a353..5da560d 100644
--- a/pkg/front_end/test/macro_application/data/tests/types.dart
+++ b/pkg/front_end/test/macro_application/data/tests/types.dart
@@ -2,16 +2,61 @@
 // for 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';
 
-@FunctionTypesMacro1()
 /*member: topLevelFunction1:
-class topLevelFunction1GeneratedClass {}
-*/
+class topLevelFunction1GeneratedClass {
+  external void method();
+}*/
+@FunctionTypesMacro1()
 void topLevelFunction1() {}
 
-@FunctionTypesMacro1()
 /*member: topLevelFunction2:
-class topLevelFunction2GeneratedClass {}
-*/
-void 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
new file mode 100644
index 0000000..e36ef4f
--- /dev/null
+++ b/pkg/front_end/test/macro_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 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
index 0ad035b..3b988bb 100644
--- a/pkg/front_end/test/macro_application/macro_application_test.dart
+++ b/pkg/front_end/test/macro_application/macro_application_test.dart
@@ -2,84 +2,68 @@
 // for 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 'dart:io' show Directory, File, Platform;
 
 import 'package:_fe_analyzer_shared/src/macros/api.dart';
-import 'package:_fe_analyzer_shared/src/macros/bootstrap.dart';
 import 'package:_fe_analyzer_shared/src/macros/executor.dart';
-import 'package:_fe_analyzer_shared/src/macros/isolated_executor/isolated_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, Id;
+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/api_prototype/kernel_generator.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/kernel/utils.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';
 
-const Map<String, Map<String, List<String>>> macroDeclarations = {
-  'package:macro/macro.dart': {
-    'FunctionDefinitionMacro1': [''],
-    'FunctionDefinitionMacro2': [''],
-    'FunctionTypesMacro1': [''],
-    'FunctionDeclarationsMacro1': [''],
-  }
-};
-
-Future<Uri> compileMacros(Directory directory) async {
-  CompilerOptions options = new CompilerOptions();
-  options.target = new VmTarget(new TargetFlags());
-  options.explicitExperimentalFlags[ExperimentalFlag.macros] = true;
-  options.environmentDefines = {};
-  options.packagesFileUri = Platform.script.resolve('data/package_config.json');
-
-  CompilerResult? compilerResult = await compileScript(
-      {'main.dart': bootstrapMacroIsolate(macroDeclarations)},
-      options: options, requireMain: false);
-  Uri uri = directory.absolute.uri.resolve('macros.dill');
-  await writeComponentToFile(compilerResult!.component!, uri);
-  return uri;
-}
+import '../utils/kernel_chain.dart';
 
 Future<void> main(List<String> args) async {
+  bool generateExpectations = args.contains('-g');
   enableMacros = true;
 
-  Directory tempDirectory =
-      await Directory.systemTemp.createTemp('macro_application');
-
-  Uri macrosUri = await compileMacros(tempDirectory);
-  Map<MacroClass, Uri> precompiledMacroUris = {};
-  macroDeclarations
-      .forEach((String macroUri, Map<String, List<String>> macroClasses) {
-    macroClasses.forEach((String macroClass, List<String> constructorNames) {
-      precompiledMacroUris[new MacroClass(Uri.parse(macroUri), macroClass)] =
-          macrosUri;
-    });
-  });
-
-  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(precompiledMacroUris)]),
-      preserveWhitespaceInAnnotations: 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 Map<MacroClass, Uri> precompiledMacroUris;
+  final Directory dataDir;
+  final MacroSerializer macroSerializer;
+  final bool generateExpectations;
+  final Map<MacroClass, Uri> precompiledMacroUris = {};
 
-  MacroTestConfig(this.precompiledMacroUris)
+  MacroTestConfig(this.dataDir, this.macroSerializer,
+      {required this.generateExpectations})
       : super(cfeMarker, 'cfe',
             explicitExperimentalFlags: {ExperimentalFlag.macros: true},
             packageConfigUri:
@@ -88,9 +72,60 @@
   @override
   void customizeCompilerOptions(CompilerOptions options, TestData testData) {
     options.macroExecutorProvider = () async {
-      return await isolatedExecutor.start();
+      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;
   }
 }
 
@@ -101,6 +136,108 @@
   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}) {
@@ -112,35 +249,70 @@
         .loader
         .dataForTesting!
         .macroApplicationData;
-    StringBuffer sb = new StringBuffer();
+    StringBuffer sb = StringBuffer();
+    List<DeclarationCode> mergedAugmentations = [];
     for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
         in macroApplicationData.memberTypesResults.entries) {
-      if (entry.key.member == member) {
+      if (_isMember(entry.key, member)) {
         for (MacroExecutionResult result in entry.value) {
-          sb.write('\n${codeToString(result.augmentations.first)}');
+          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 (entry.key.member == member) {
+      if (_isMember(entry.key, member)) {
         for (MacroExecutionResult result in entry.value) {
-          sb.write('\n${codeToString(result.augmentations.first)}');
+          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 (entry.key.member == member) {
+      if (_isMember(entry.key, member)) {
         for (MacroExecutionResult result in entry.value) {
-          sb.write('\n${codeToString(result.augmentations.first)}');
+          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);
-      registry.registerValue(
-          member.fileUri, member.fileOffset, id, sb.toString(), member);
+      MemberBuilder memberBuilder =
+          lookupMemberBuilder(testResultData.compilerResult, member)!;
+      registry.registerValue(memberBuilder.fileUri!, memberBuilder.charOffset,
+          id, sb.toString(), member);
     }
   }
 }
diff --git a/pkg/front_end/test/macros/data/tests/macro_declarations.dart b/pkg/front_end/test/macros/data/tests/macro_declarations.dart
index c780d61..1ddcfd5 100644
--- a/pkg/front_end/test/macros/data/tests/macro_declarations.dart
+++ b/pkg/front_end/test/macros/data/tests/macro_declarations.dart
@@ -38,20 +38,20 @@
 
 macro class MixinAlias with Alias {}
 
-class ExtendsNoKeyword extends Macro {}
+class /*error: error=MacroClassNotDeclaredMacro*/ExtendsNoKeyword extends Macro {}
 
-class ImplementsNoKeyword implements Macro {}
+class /*error: error=MacroClassNotDeclaredMacro*/ImplementsNoKeyword implements Macro {}
 
-class MixinNoKeyword with Macro {}
+class /*error: error=MacroClassNotDeclaredMacro*/MixinNoKeyword with Macro {}
 
-class ExtendsAliasNoKeyword extends Alias {}
+class /*error: error=MacroClassNotDeclaredMacro*/ExtendsAliasNoKeyword extends Alias {}
 
-class ImplementsAliasNoKeyword implements Alias {}
+class /*error: error=MacroClassNotDeclaredMacro*/ImplementsAliasNoKeyword implements Alias {}
 
-class MixinAliasNoKeyword with Alias {}
+class /*error: error=MacroClassNotDeclaredMacro*/MixinAliasNoKeyword with Alias {}
 
-class NamedMixin1NoKeyword = Macro with _Mixin;
+class /*error: error=MacroClassNotDeclaredMacro*/NamedMixin1NoKeyword = Macro with _Mixin;
 
-class NamedMixin2NoKeyword = Object with Macro;
+class /*error: error=MacroClassNotDeclaredMacro*/NamedMixin2NoKeyword = Object with Macro;
 
 void main() {}
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
index 47c4300..01f9653 100644
--- a/pkg/front_end/test/macros/macro_test.dart
+++ b/pkg/front_end/test/macros/macro_test.dart
@@ -6,7 +6,7 @@
 
 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_shared/serialization.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';
@@ -17,6 +17,7 @@
 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 {
@@ -78,6 +79,17 @@
   }
 
   @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();
 }
@@ -91,6 +103,7 @@
   static const String appliedMacros = 'appliedMacros';
   static const String macroClassIds = 'macroClassIds';
   static const String macroInstanceIds = 'macroInstanceIds';
+  static const String error = 'error';
 }
 
 String constructorNameToString(String constructorName) {
@@ -98,9 +111,9 @@
 }
 
 String importUriToString(Uri importUri) {
-  if (importUri.scheme == 'package') {
+  if (importUri.isScheme('package')) {
     return importUri.toString();
-  } else if (importUri.scheme == 'dart') {
+  } else if (importUri.isScheme('dart')) {
     return importUri.toString();
   } else {
     return importUri.pathSegments.last;
@@ -126,6 +139,7 @@
 
   MacroDeclarationData get macroDeclarationData => testResultData.compilerResult
       .kernelTargetForTesting!.loader.dataForTesting!.macroDeclarationData;
+
   MacroApplicationDataForTesting get macroApplicationData => testResultData
       .compilerResult
       .kernelTargetForTesting!
@@ -280,10 +294,9 @@
   List<_MacroInstanceIdentifier> macroInstances = [];
 
   @override
-  Future<String> buildAugmentationLibrary(
-      Iterable<MacroExecutionResult> macroResults) {
-    // TODO: implement buildAugmentationLibrary
-    throw UnimplementedError();
+  String buildAugmentationLibrary(Iterable<MacroExecutionResult> macroResults,
+      ResolvedIdentifier Function(Identifier) resolveIdentifier) {
+    return '';
   }
 
   @override
@@ -295,6 +308,7 @@
   Future<MacroExecutionResult> executeDeclarationsPhase(
       MacroInstanceIdentifier macro,
       Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector) async {
     return new _MacroExecutionResult();
@@ -304,6 +318,7 @@
   Future<MacroExecutionResult> executeDefinitionsPhase(
       MacroInstanceIdentifier macro,
       Declaration declaration,
+      IdentifierResolver identifierResolver,
       TypeResolver typeResolver,
       ClassIntrospector classIntrospector,
       TypeDeclarationResolver typeDeclarationResolver) async {
@@ -311,8 +326,8 @@
   }
 
   @override
-  Future<MacroExecutionResult> executeTypesPhase(
-      MacroInstanceIdentifier macro, Declaration declaration) async {
+  Future<MacroExecutionResult> executeTypesPhase(MacroInstanceIdentifier macro,
+      Declaration declaration, IdentifierResolver identifierResolver) async {
     return new _MacroExecutionResult();
   }
 
@@ -383,11 +398,16 @@
 
 class _MacroExecutionResult implements MacroExecutionResult {
   @override
-  Iterable<DeclarationCode> augmentations = const [];
+  Map<String, Iterable<DeclarationCode>> classAugmentations = const {};
 
   @override
-  Iterable<DeclarationCode> imports = const [];
+  Iterable<DeclarationCode> libraryAugmentations = const [];
 
   @override
-  void serialize(Serializer serializer) {}
+  Iterable<String> newTypeNames = const [];
+
+  @override
+  void serialize(Serializer serializer) {
+    throw UnimplementedError();
+  }
 }
diff --git a/pkg/front_end/test/mock_file_system.dart b/pkg/front_end/test/mock_file_system.dart
index 60e45be..fa674e1 100644
--- a/pkg/front_end/test/mock_file_system.dart
+++ b/pkg/front_end/test/mock_file_system.dart
@@ -11,7 +11,8 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (scheme != null && uri.scheme != scheme) throw "unsupported";
+    final scheme = this.scheme;
+    if (scheme != null && !uri.isScheme(scheme)) throw "unsupported";
     return new MockFileSystemEntity(uri, this);
   }
 }
diff --git a/pkg/front_end/test/parser_suite.dart b/pkg/front_end/test/parser_suite.dart
index 5910e30..9ed7b26 100644
--- a/pkg/front_end/test/parser_suite.dart
+++ b/pkg/front_end/test/parser_suite.dart
@@ -88,18 +88,28 @@
 ScannerConfiguration scannerConfiguration = new ScannerConfiguration(
     enableTripleShift: true,
     enableExtensionMethods: true,
-    enableNonNullable: true);
+    enableNonNullable: true,
+    forAugmentationLibrary: false);
 
 ScannerConfiguration scannerConfigurationNonNNBD = new ScannerConfiguration(
     enableTripleShift: true,
     enableExtensionMethods: true,
-    enableNonNullable: false);
+    enableNonNullable: false,
+    forAugmentationLibrary: false);
 
 ScannerConfiguration scannerConfigurationNonTripleShift =
     new ScannerConfiguration(
         enableTripleShift: false,
         enableExtensionMethods: true,
-        enableNonNullable: true);
+        enableNonNullable: true,
+        forAugmentationLibrary: false);
+
+ScannerConfiguration scannerConfigurationAugmentation =
+    new ScannerConfiguration(
+        enableTripleShift: true,
+        enableExtensionMethods: true,
+        enableNonNullable: true,
+        forAugmentationLibrary: true);
 
 class Context extends ChainContext with MatchContext {
   @override
@@ -432,6 +442,8 @@
     config = scannerConfigurationNonNNBD;
   } else if (firstDir == "no-triple-shift") {
     config = scannerConfigurationNonTripleShift;
+  } else if (firstDir == "augmentation") {
+    config = scannerConfigurationAugmentation;
   } else {
     config = scannerConfiguration;
   }
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 65979d9..92bd9ea 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -199,16 +199,18 @@
   }
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     seen(begin);
     seen(abstractToken);
     seen(macroToken);
+    seen(augmentToken);
     seen(name);
     doPrint('beginClassDeclaration('
         '$begin, '
         '$abstractToken, '
         '$macroToken, '
+        '$augmentToken, '
         '$name)');
     indent++;
   }
@@ -259,10 +261,13 @@
   }
 
   @override
-  void beginMixinDeclaration(Token mixinKeyword, Token name) {
+  void beginMixinDeclaration(
+      Token? augmentToken, Token mixinKeyword, Token name) {
+    seen(augmentToken);
     seen(mixinKeyword);
     seen(name);
-    doPrint('beginMixinDeclaration(' '$mixinKeyword, ' '$name)');
+    doPrint(
+        'beginMixinDeclaration(' '$augmentToken, ' '$mixinKeyword, ' '$name)');
     indent++;
   }
 
@@ -662,6 +667,7 @@
   @override
   void endClassFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -672,6 +678,7 @@
       Token endToken) {
     indent--;
     seen(abstractToken);
+    seen(augmentToken);
     seen(externalToken);
     seen(staticToken);
     seen(covariantToken);
@@ -681,6 +688,7 @@
     seen(endToken);
     doPrint('endClassFields('
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -694,6 +702,7 @@
   @override
   void endMixinFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -704,6 +713,7 @@
       Token endToken) {
     indent--;
     seen(abstractToken);
+    seen(augmentToken);
     seen(externalToken);
     seen(staticToken);
     seen(covariantToken);
@@ -713,6 +723,7 @@
     seen(endToken);
     doPrint('endMixinFields('
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -726,6 +737,7 @@
   @override
   void endExtensionFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -736,6 +748,7 @@
       Token endToken) {
     indent--;
     seen(abstractToken);
+    seen(augmentToken);
     seen(externalToken);
     seen(staticToken);
     seen(covariantToken);
@@ -745,6 +758,7 @@
     seen(endToken);
     doPrint('endExtensionFields('
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -758,6 +772,7 @@
   @override
   void endEnumFields(
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -768,6 +783,7 @@
       Token endToken) {
     indent--;
     seen(abstractToken);
+    seen(augmentToken);
     seen(externalToken);
     seen(staticToken);
     seen(covariantToken);
@@ -777,6 +793,7 @@
     seen(endToken);
     doPrint('endEnumFields('
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -1022,16 +1039,18 @@
   }
 
   @override
-  void beginNamedMixinApplication(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginNamedMixinApplication(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     seen(begin);
     seen(abstractToken);
     seen(macroToken);
+    seen(augmentToken);
     seen(name);
     doPrint('beginNamedMixinApplication('
         '$begin, '
         '$abstractToken, '
         '$macroToken, '
+        '$augmentToken, '
         '$name)');
     indent++;
   }
@@ -1149,11 +1168,12 @@
   }
 
   @override
-  void endImport(Token importKeyword, Token? semicolon) {
+  void endImport(Token importKeyword, Token? augmentToken, Token? semicolon) {
     indent--;
     seen(importKeyword);
+    seen(augmentToken);
     seen(semicolon);
-    doPrint('endImport(' '$importKeyword, ' '$semicolon)');
+    doPrint('endImport(' '$importKeyword, ' '$augmentToken, ' '$semicolon)');
   }
 
   @override
@@ -1408,12 +1428,14 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
       Token? varFinalOrConst,
       Token? getOrSet,
       Token name) {
+    seen(augmentToken);
     seen(externalToken);
     seen(staticToken);
     seen(covariantToken);
@@ -1422,6 +1444,7 @@
     seen(name);
     doPrint('beginMethod('
         '$declarationKind, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -1792,6 +1815,7 @@
   void beginFields(
       DeclarationKind declarationKind,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1799,6 +1823,7 @@
       Token? varFinalOrConst,
       Token lastConsumed) {
     seen(abstractToken);
+    seen(augmentToken);
     seen(externalToken);
     seen(staticToken);
     seen(covariantToken);
@@ -1808,6 +1833,7 @@
     doPrint('beginFields('
         '$declarationKind, '
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -1847,10 +1873,15 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed, Token? externalToken) {
+  void beginTopLevelMethod(
+      Token lastConsumed, Token? augmentToken, Token? externalToken) {
     seen(lastConsumed);
+    seen(augmentToken);
     seen(externalToken);
-    doPrint('beginTopLevelMethod(' '$lastConsumed, ' '$externalToken)');
+    doPrint('beginTopLevelMethod('
+        '$lastConsumed, '
+        '$augmentToken, '
+        '$externalToken)');
     indent++;
   }
 
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index 61ba320..fdcc4b9 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -126,8 +126,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
@@ -139,6 +139,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 9a545e4..3c015f1 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -162,33 +162,6 @@
   }
 
   @override
-  Token? parseClassDeclarationModifiers(Token start, Token keyword) {
-    doPrint('parseClassDeclarationModifiers(' '$start, ' '$keyword)');
-    indent++;
-    var result = super.parseClassDeclarationModifiers(start, keyword);
-    indent--;
-    return result;
-  }
-
-  @override
-  void parseTopLevelKeywordModifiers(Token start, Token keyword) {
-    doPrint('parseTopLevelKeywordModifiers(' '$start, ' '$keyword)');
-    indent++;
-    var result = super.parseTopLevelKeywordModifiers(start, keyword);
-    indent--;
-    return result;
-  }
-
-  @override
-  void reportTopLevelModifierError(Token modifier, Token afterModifiers) {
-    doPrint('reportTopLevelModifierError(' '$modifier, ' '$afterModifiers)');
-    indent++;
-    var result = super.reportTopLevelModifierError(modifier, afterModifiers);
-    indent--;
-    return result;
-  }
-
-  @override
   Token parseTopLevelKeywordDeclaration(Token start, Token keyword,
       Token? macroToken, DirectiveContext? directiveState) {
     doPrint('parseTopLevelKeywordDeclaration('
@@ -574,6 +547,34 @@
   }
 
   @override
+  Token? recoveryEnumWith(Token token, codes.Message message) {
+    doPrint('recoveryEnumWith(' '$token, ' '$message)');
+    indent++;
+    var result = super.recoveryEnumWith(token, message);
+    indent--;
+    return result;
+  }
+
+  @override
+  Token? recoveryEnumImplements(Token token, codes.Message message) {
+    doPrint('recoveryEnumImplements(' '$token, ' '$message)');
+    indent++;
+    var result = super.recoveryEnumImplements(token, message);
+    indent--;
+    return result;
+  }
+
+  @override
+  Token? recoverySmallLookAheadSkipTokens(
+      final Token token, Iterable<String> lookFor) {
+    doPrint('recoverySmallLookAheadSkipTokens(' '$token, ' '$lookFor)');
+    indent++;
+    var result = super.recoverySmallLookAheadSkipTokens(token, lookFor);
+    indent--;
+    return result;
+  }
+
+  @override
   Token parseEnumElement(Token token) {
     doPrint('parseEnumElement(' '$token)');
     indent++;
@@ -583,15 +584,16 @@
   }
 
   @override
-  Token parseClassOrNamedMixinApplication(
-      Token? abstractToken, Token? macroToken, Token classKeyword) {
+  Token parseClassOrNamedMixinApplication(Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token classKeyword) {
     doPrint('parseClassOrNamedMixinApplication('
         '$abstractToken, '
         '$macroToken, '
+        '$augmentToken, '
         '$classKeyword)');
     indent++;
     var result = super.parseClassOrNamedMixinApplication(
-        abstractToken, macroToken, classKeyword);
+        abstractToken, macroToken, augmentToken, classKeyword);
     indent--;
     return result;
   }
@@ -666,10 +668,10 @@
   }
 
   @override
-  Token parseMixin(Token mixinKeyword) {
-    doPrint('parseMixin(' '$mixinKeyword)');
+  Token parseMixin(Token? augmentToken, Token mixinKeyword) {
+    doPrint('parseMixin(' '$augmentToken, ' '$mixinKeyword)');
     indent++;
-    var result = super.parseMixin(mixinKeyword);
+    var result = super.parseMixin(augmentToken, mixinKeyword);
     indent--;
     return result;
   }
@@ -820,6 +822,7 @@
   Token parseFields(
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -834,6 +837,7 @@
     doPrint('parseFields('
         '$beforeStart, '
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -849,6 +853,7 @@
     var result = super.parseFields(
         beforeStart,
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -867,6 +872,7 @@
   @override
   Token parseTopLevelMethod(
       Token beforeStart,
+      Token? augmentToken,
       Token? externalToken,
       Token beforeType,
       TypeInfo typeInfo,
@@ -875,6 +881,7 @@
       bool nameIsRecovered) {
     doPrint('parseTopLevelMethod('
         '$beforeStart, '
+        '$augmentToken, '
         '$externalToken, '
         '$beforeType, '
         '$typeInfo, '
@@ -882,8 +889,8 @@
         '$name, '
         '$nameIsRecovered)');
     indent++;
-    var result = super.parseTopLevelMethod(beforeStart, externalToken,
-        beforeType, typeInfo, getOrSet, name, nameIsRecovered);
+    var result = super.parseTopLevelMethod(beforeStart, augmentToken,
+        externalToken, beforeType, typeInfo, getOrSet, name, nameIsRecovered);
     indent--;
     return result;
   }
@@ -903,6 +910,7 @@
       Token name,
       Token? lateToken,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? varFinalOrConst,
       DeclarationKind kind,
@@ -912,6 +920,7 @@
         '$name, '
         '$lateToken, '
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$varFinalOrConst, '
         '$kind, '
@@ -922,6 +931,7 @@
         name,
         lateToken,
         abstractToken,
+        augmentToken,
         externalToken,
         varFinalOrConst,
         kind,
@@ -1172,6 +1182,7 @@
   Token parseMethod(
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -1187,6 +1198,7 @@
     doPrint('parseMethod('
         '$beforeStart, '
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -1203,6 +1215,7 @@
     var result = super.parseMethod(
         beforeStart,
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -2231,6 +2244,7 @@
   Token parseInvalidOperatorDeclaration(
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -2242,6 +2256,7 @@
     doPrint('parseInvalidOperatorDeclaration('
         '$beforeStart, '
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -2254,6 +2269,7 @@
     var result = super.parseInvalidOperatorDeclaration(
         beforeStart,
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
@@ -2271,6 +2287,7 @@
       Token token,
       Token beforeStart,
       Token? abstractToken,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
@@ -2285,6 +2302,7 @@
         '$token, '
         '$beforeStart, '
         '$abstractToken, '
+        '$augmentToken, '
         '$externalToken, '
         '$staticToken, '
         '$covariantToken, '
@@ -2300,6 +2318,7 @@
         token,
         beforeStart,
         abstractToken,
+        augmentToken,
         externalToken,
         staticToken,
         covariantToken,
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index 37c6c0c..17c7ff3 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -111,8 +111,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     if (name.lexeme == "Parser") insideParserClass = true;
   }
 
@@ -124,6 +124,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index 9828fd4..e49039c 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -12,7 +12,10 @@
 import 'package:front_end/src/fasta/builder/builder.dart';
 import 'package:front_end/src/fasta/builder/member_builder.dart';
 import 'package:front_end/src/fasta/source/source_class_builder.dart';
+import 'package:front_end/src/fasta/source/source_constructor_builder.dart';
+import 'package:front_end/src/fasta/source/source_factory_builder.dart';
 import 'package:front_end/src/fasta/source/source_member_builder.dart';
+import 'package:front_end/src/fasta/source/source_procedure_builder.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';
@@ -171,8 +174,17 @@
     SourceMemberBuilder? memberBuilder =
         lookupMemberBuilder(compilerResult, member, required: false)
             as SourceMemberBuilder?;
-    MemberBuilder? patchMember = memberBuilder?.dataForTesting?.patchForTesting;
-    if (patchMember != null) {
+    List<MemberBuilder>? patchMembers;
+    if (memberBuilder is SourceProcedureBuilder) {
+      patchMembers = memberBuilder.patchesForTesting;
+    }
+    if (memberBuilder is DeclaredSourceConstructorBuilder) {
+      patchMembers = memberBuilder.patchesForTesting;
+    }
+    if (memberBuilder is SourceFactoryBuilder) {
+      patchMembers = memberBuilder.patchesForTesting;
+    }
+    if (patchMembers != null) {
       features.add(Tags.patch);
     }
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 19431ef..f1532f1 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -28,6 +28,7 @@
 affecting
 afterwards
 agree
+agreeing
 ahe
 ai
 aiki
@@ -90,6 +91,7 @@
 backping
 backstop
 badly
+bail
 bang
 bar
 basically
@@ -105,6 +107,9 @@
 belonging
 beloning
 benchmark
+benchmarked
+benchmarker
+benchmarking
 benchmarks
 bf
 bi
@@ -118,6 +123,7 @@
 bk
 blindly
 blob
+blobs
 blocking
 bmp
 bn
@@ -173,6 +179,7 @@
 char
 charcode
 chars
+checkout
 checkpoint
 chloestefantsova
 chunks
@@ -207,10 +214,13 @@
 combinations
 combinator
 combiner
+communicate
+communicates
 communication
 compared
 compares
 compilations
+complement
 completers
 completes
 complicating
@@ -262,6 +272,7 @@
 csslib
 cstefantsova
 ctx
+customizable
 customized
 cut
 cwd
@@ -374,6 +385,7 @@
 effects
 efficient
 efficiently
+eight
 eighth
 elem
 eliminating
@@ -491,6 +503,7 @@
 futureor
 g
 gardening
+gb
 gen
 generation
 getable
@@ -514,6 +527,7 @@
 gradually
 granted
 graphs
+grouper
 growability
 gt
 guarantee
@@ -559,6 +573,7 @@
 ideographic
 idn
 ids
+idx
 iff
 il
 imitate
@@ -651,6 +666,7 @@
 jvm
 k
 kallentu
+kb
 kernel's
 kill
 klass
@@ -666,10 +682,12 @@
 lang
 largest
 lattice
+launch
 launched
 launcher
 layer
 layered
+layering
 layers
 layout
 lc
@@ -694,6 +712,7 @@
 linebreak
 linter
 linux
+listening
 lives
 ll
 llub
@@ -701,6 +720,7 @@
 locationd
 logged
 logically
+lookahead
 lots
 lp
 lparen
@@ -728,6 +748,7 @@
 masking
 masks
 master
+materialize
 mature
 mb
 mc
@@ -764,6 +785,7 @@
 nameless
 namer
 natively
+nativewrappers
 nbsp
 nc
 ncs
@@ -781,6 +803,7 @@
 nnbd
 node's
 nominality
+nonexistent
 nonimplementation
 norm
 normalization
@@ -826,6 +849,7 @@
 orphans
 ors
 os
+ourselves
 outlined
 outputs
 outputting
@@ -834,6 +858,7 @@
 overlooked
 overshadowed
 oversight
+overview
 overwrite
 overwriting
 ownership
@@ -892,6 +917,7 @@
 precompilations
 precompile
 precompiled
+precompiling
 preexisted
 preexisting
 prefixing
@@ -909,6 +935,7 @@
 println
 prioritization
 proc
+processes
 processor
 producers
 product
@@ -932,6 +959,7 @@
 qi
 qm
 quad
+qualify
 quantified
 queries
 quick
@@ -1035,6 +1063,7 @@
 repo
 repositories
 repurposed
+requesting
 requests
 requirement
 res
@@ -1071,6 +1100,7 @@
 rs
 runnable
 s
+safer
 sandboxed
 sanitizing
 saw
@@ -1160,6 +1190,7 @@
 specifics
 speeding
 spend
+spent
 spuriously
 sq
 sra
@@ -1175,6 +1206,7 @@
 starter
 stated
 statics
+stats
 stderr
 stdin
 stdio
@@ -1199,6 +1231,9 @@
 stubs
 stx
 sub
+subdivide
+subdivided
+subdivides
 subexpression
 subexpression's
 subexpressions
@@ -1274,6 +1309,7 @@
 tiki
 tilde
 till
+timings
 tiny
 tj
 tm
@@ -1293,6 +1329,7 @@
 traced
 tracker
 traditional
+transferable
 transformers
 transforming
 translation
@@ -1306,6 +1343,7 @@
 ts
 tty
 tuple
+twos
 typeref
 u
 ufeff
@@ -1355,7 +1393,9 @@
 unpaired
 unparsed
 unpleasant
+unqualified
 unreachable
+unregister
 unseen
 unset
 unshadowed
@@ -1449,6 +1489,10 @@
 xdc
 xdfff
 xef
+xff
+xffff
+xffffffff
+xffffffffffffffff
 xi
 xj
 xk
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index d69db07..e442d51 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -1249,6 +1249,7 @@
 follows
 food
 for
+forbidden
 force
 forced
 forest
@@ -2153,6 +2154,7 @@
 parsed
 parser
 parser's
+parsers
 parses
 parsing
 part
diff --git a/pkg/front_end/test/spell_checking_list_messages.txt b/pkg/front_end/test/spell_checking_list_messages.txt
index 3230d25..664608e 100644
--- a/pkg/front_end/test/spell_checking_list_messages.txt
+++ b/pkg/front_end/test/spell_checking_list_messages.txt
@@ -16,6 +16,9 @@
 api
 argument(s)
 assigning
+augment
+augmentation
+augmented
 b
 c
 compilercontext.runincontext
@@ -45,6 +48,7 @@
 libraries.json
 list.filled
 loadlibrary
+macro
 migrate
 name.#name
 name.stack
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index bea0c4d..5f1144f 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -41,6 +41,7 @@
 assure
 asterisk
 atomic
+augmented
 auth
 authority
 autobianchi
@@ -64,6 +65,8 @@
 bbb
 bc
 bench
+benchmarker
+benchmarkers
 besides
 beta
 bigger
@@ -78,6 +81,7 @@
 boundarykey
 bowtie
 boz
+bp
 bq
 brand
 brave
@@ -188,6 +192,7 @@
 descriptors
 deviation
 dfast
+dfuzz
 di
 diagnosticable
 dictionaries
@@ -195,7 +200,6 @@
 differentiate
 dijkstra
 dijkstras
-dillfile
 dinteractive
 dirname
 disagree
@@ -269,6 +273,7 @@
 filters
 fisk
 five
+fl
 floor
 fluctuate
 foo'bar'baz
@@ -331,6 +336,7 @@
 illustrate
 image
 images
+implemen
 implementor
 implementors
 imprecision
@@ -398,6 +404,7 @@
 minimize
 minimizer
 minimizing
+minitest
 minst
 mintty
 minutes
@@ -529,6 +536,7 @@
 repro
 reproduce
 reproduction
+req
 resuming
 retaining
 retainingpath
diff --git a/pkg/front_end/test/static_types/analysis_helper.dart b/pkg/front_end/test/static_types/analysis_helper.dart
index 6564bd1..ab60ab7 100644
--- a/pkg/front_end/test/static_types/analysis_helper.dart
+++ b/pkg/front_end/test/static_types/analysis_helper.dart
@@ -312,7 +312,7 @@
     String uriString = relativizeUri(uri)!;
     Map<String, List<FormattedMessage>> actualMap = _actualMessages.putIfAbsent(
         uriString, () => <String, List<FormattedMessage>>{});
-    if (uri.scheme == 'org-dartlang-sdk') {
+    if (uri.isScheme('org-dartlang-sdk')) {
       location = new Location(Uri.base.resolve(uri.path.substring(1)),
           location.line, location.column);
     }
diff --git a/pkg/front_end/test/static_types/static_type_test.dart b/pkg/front_end/test/static_types/static_type_test.dart
index 80a339d..41bc89c 100644
--- a/pkg/front_end/test/static_types/static_type_test.dart
+++ b/pkg/front_end/test/static_types/static_type_test.dart
@@ -136,7 +136,7 @@
     if (object is ConstructorInvocation) {
       Class cls = object.target.enclosingClass;
       return cls.name == 'ReachabilityError' &&
-          cls.enclosingLibrary.importUri.scheme == 'dart' &&
+          cls.enclosingLibrary.importUri.isScheme('dart') &&
           cls.enclosingLibrary.importUri.path == '_internal';
     }
     return false;
diff --git a/pkg/front_end/test/token_test.dart b/pkg/front_end/test/token_test.dart
index 301e6ec..aad4e9f 100644
--- a/pkg/front_end/test/token_test.dart
+++ b/pkg/front_end/test/token_test.dart
@@ -84,6 +84,7 @@
     var builtInKeywords = new Set<Keyword>.from([
       Keyword.ABSTRACT,
       Keyword.AS,
+      Keyword.AUGMENT,
       Keyword.COVARIANT,
       Keyword.DEFERRED,
       Keyword.DYNAMIC,
diff --git a/pkg/front_end/test/utils/kernel_chain.dart b/pkg/front_end/test/utils/kernel_chain.dart
index 2c96443..d526f13 100644
--- a/pkg/front_end/test/utils/kernel_chain.dart
+++ b/pkg/front_end/test/utils/kernel_chain.dart
@@ -384,8 +384,8 @@
       TextSerializationVerifier verifier =
           new TextSerializationVerifier(root: component.root);
       for (Library library in component.libraries) {
-        if (library.importUri.scheme != "dart" &&
-            library.importUri.scheme != "package") {
+        if (!library.importUri.isScheme("dart") &&
+            !library.importUri.isScheme("package")) {
           verifier.verify(library);
         }
       }
@@ -401,7 +401,7 @@
 
       if (writeRoundTripStatus) {
         Uri uri = component.uriToSource.keys
-            .firstWhere((uri) => uri.scheme == "file");
+            .firstWhere((uri) => uri.isScheme("file"));
         String filename = "${uri.toFilePath()}${suffix}";
         uri = new File(filename).uri;
         StringBuffer buffer = new StringBuffer();
diff --git a/pkg/front_end/test/vm_service_coverage.dart b/pkg/front_end/test/vm_service_coverage.dart
index 2112bd0..cb6736c 100644
--- a/pkg/front_end/test/vm_service_coverage.dart
+++ b/pkg/front_end/test/vm_service_coverage.dart
@@ -112,10 +112,10 @@
   }
 
   bool includeCoverageFor(Uri uri) {
-    if (uri.scheme == "dart") {
+    if (uri.isScheme("dart")) {
       return false;
     }
-    if (uri.scheme == "package") {
+    if (uri.isScheme("package")) {
       return uri.pathSegments.first == "front_end" ||
           uri.pathSegments.first == "_fe_analyzer_shared" ||
           uri.pathSegments.first == "kernel";
diff --git a/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart b/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
index 3128758..70b7dad 100644
--- a/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
+++ b/pkg/front_end/test/vm_service_coverage_constant_evaluator.dart
@@ -23,7 +23,7 @@
 
   @override
   bool includeCoverageFor(Uri uri) {
-    if (uri.scheme != "package") return false;
+    if (!uri.isScheme("package")) return false;
     if (uri.path.startsWith("front_end/src/fasta/kernel/constant_")) {
       return true;
     }
diff --git a/pkg/front_end/test/weekly_tester.dart b/pkg/front_end/test/weekly_tester.dart
index 2fe9bbf..077210e 100644
--- a/pkg/front_end/test/weekly_tester.dart
+++ b/pkg/front_end/test/weekly_tester.dart
@@ -124,6 +124,24 @@
     }
   }
 
+  {
+    // Expression suite with fuzzing.
+    Uri expressionSuite =
+        Platform.script.resolve("fasta/expression_suite.dart");
+    if (!new File.fromUri(expressionSuite).existsSync()) {
+      exitCode = 1;
+      print("Couldn't find $expressionSuite");
+    } else {
+      startedProcesses.add(await run(
+        [
+          expressionSuite.toString(),
+          "-Dfuzz=true",
+        ],
+        "expression suite",
+      ));
+    }
+  }
+
   // Wait for everything to finish.
   List<int> exitCodes =
       await Future.wait(startedProcesses.map((e) => e.process.exitCode));
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart b/pkg/front_end/testcases/dart2js/issue48304.dart
new file mode 100644
index 0000000..89351f8
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.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.
+
+abstract class B {
+  call<T>();
+}
+
+class C implements B {
+  call<T>() => print(T);
+}
+
+abstract class A {}
+
+class Wrapper {
+  Wrapper(this.b, this.call);
+  final B b;
+  final B call;
+}
+
+void main() {
+  B b = C();
+  b<A>();
+  Wrapper(b, b).b<A>();
+  (Wrapper(b, b).b)<A>();
+  Wrapper(b, b).call<A>();
+  (Wrapper(b, b).call)<A>();
+}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.strong.expect
new file mode 100644
index 0000000..9f1d34d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.strong.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method call<T extends core::Object? = dynamic>() → dynamic;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    return core::print(self::C::call::T%);
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Wrapper extends core::Object {
+  final field self::B b;
+  final field self::B call;
+  constructor •(self::B b, self::B call) → self::Wrapper
+    : self::Wrapper::b = b, self::Wrapper::call = call, super core::Object::•()
+    ;
+  static method _#new#tearOff(self::B b, self::B call) → self::Wrapper
+    return new self::Wrapper::•(b, call);
+}
+static method main() → void {
+  self::B b = new self::C::•();
+  b.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.strong.transformed.expect
new file mode 100644
index 0000000..9f1d34d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.strong.transformed.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method call<T extends core::Object? = dynamic>() → dynamic;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    return core::print(self::C::call::T%);
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Wrapper extends core::Object {
+  final field self::B b;
+  final field self::B call;
+  constructor •(self::B b, self::B call) → self::Wrapper
+    : self::Wrapper::b = b, self::Wrapper::call = call, super core::Object::•()
+    ;
+  static method _#new#tearOff(self::B b, self::B call) → self::Wrapper
+    return new self::Wrapper::•(b, call);
+}
+static method main() → void {
+  self::B b = new self::C::•();
+  b.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.textual_outline.expect
new file mode 100644
index 0000000..05d076b
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+abstract class B {
+  call<T>();
+}
+
+class C implements B {
+  call<T>() => print(T);
+}
+
+abstract class A {}
+
+class Wrapper {
+  Wrapper(this.b, this.call);
+  final B b;
+  final B call;
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6997d4b
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+abstract class A {}
+
+abstract class B {
+  call<T>();
+}
+
+class C implements B {
+  call<T>() => print(T);
+}
+
+class Wrapper {
+  Wrapper(this.b, this.call);
+  final B b;
+  final B call;
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.weak.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.expect
new file mode 100644
index 0000000..9f1d34d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method call<T extends core::Object? = dynamic>() → dynamic;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    return core::print(self::C::call::T%);
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Wrapper extends core::Object {
+  final field self::B b;
+  final field self::B call;
+  constructor •(self::B b, self::B call) → self::Wrapper
+    : self::Wrapper::b = b, self::Wrapper::call = call, super core::Object::•()
+    ;
+  static method _#new#tearOff(self::B b, self::B call) → self::Wrapper
+    return new self::Wrapper::•(b, call);
+}
+static method main() → void {
+  self::B b = new self::C::•();
+  b.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.modular.expect
new file mode 100644
index 0000000..9f1d34d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method call<T extends core::Object? = dynamic>() → dynamic;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    return core::print(self::C::call::T%);
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Wrapper extends core::Object {
+  final field self::B b;
+  final field self::B call;
+  constructor •(self::B b, self::B call) → self::Wrapper
+    : self::Wrapper::b = b, self::Wrapper::call = call, super core::Object::•()
+    ;
+  static method _#new#tearOff(self::B b, self::B call) → self::Wrapper
+    return new self::Wrapper::•(b, call);
+}
+static method main() → void {
+  self::B b = new self::C::•();
+  b.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+}
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.outline.expect
new file mode 100644
index 0000000..f6c8da7
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.outline.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    ;
+  abstract method call<T extends core::Object? = dynamic>() → dynamic;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    ;
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class Wrapper extends core::Object {
+  final field self::B b;
+  final field self::B call;
+  constructor •(self::B b, self::B call) → self::Wrapper
+    ;
+  static method _#new#tearOff(self::B b, self::B call) → self::Wrapper
+    return new self::Wrapper::•(b, call);
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/dart2js/issue48304.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.transformed.expect
new file mode 100644
index 0000000..9f1d34d
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/issue48304.dart.weak.transformed.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  abstract method call<T extends core::Object? = dynamic>() → dynamic;
+}
+class C extends core::Object implements self::B {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method call<T extends core::Object? = dynamic>() → dynamic
+    return core::print(self::C::call::T%);
+  static method _#new#tearOff() → self::C
+    return new self::C::•();
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class Wrapper extends core::Object {
+  final field self::B b;
+  final field self::B call;
+  constructor •(self::B b, self::B call) → self::Wrapper
+    : self::Wrapper::b = b, self::Wrapper::call = call, super core::Object::•()
+    ;
+  static method _#new#tearOff(self::B b, self::B call) → self::Wrapper
+    return new self::Wrapper::•(b, call);
+}
+static method main() → void {
+  self::B b = new self::C::•();
+  b.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::b}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}<self::A>(){() → dynamic};
+  new self::Wrapper::•(b, b).{self::Wrapper::call}{self::B}.{self::B::call}<self::A>(){() → dynamic};
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart
new file mode 100644
index 0000000..47f596b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.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.
+
+class C {
+  String log = "";
+
+  C(int x, int y, {int z = 42}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+}
+
+main() {
+  expect("x=1, y=2, z=3", C(1, 2, z: 3).log);
+  expect("x=1, y=2, z=3", C.named1(1, 2, 3).log);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.strong.expect
new file mode 100644
index 0000000..b3c69f0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.strong.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..b3c69f0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.strong.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..88d946e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class C {
+  String log = "";
+  C(int x, int y, {int z = 42}) {}
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+}
+
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..055fa68
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class C {
+  C(int x, int y, {int z = 42}) {}
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+  String log = "";
+}
+
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.expect
new file mode 100644
index 0000000..b3c69f0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.modular.expect
new file mode 100644
index 0000000..b3c69f0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.outline.expect
new file mode 100644
index 0000000..36d2092
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log;
+  constructor •(core::int x, core::int y, {core::int z = 42}) → self::C
+    ;
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    ;
+}
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.transformed.expect
new file mode 100644
index 0000000..b3c69f0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/class_redirecting_initializer.dart.weak.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart
new file mode 100644
index 0000000..ad84c08
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart
@@ -0,0 +1,69 @@
+// 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;
+  final int element = 42; // Error.
+}
+
+enum E2 {
+  element,
+  element; // Error.
+}
+
+enum E3 {
+  element;
+
+  void element() {} // Error.
+}
+
+enum E4 {
+  element;
+
+  static void element() {} // Error.
+}
+
+enum E5 {
+  element;
+
+  static int element = 42; // Error.
+}
+
+enum E6 {
+  element; // Error.
+
+  void set element(E6 value) {}
+}
+
+enum E7 {
+  element; // Ok.
+
+  static void set element(E7 value) {}
+}
+
+class A8 {
+  void set element(dynamic value) {}
+}
+
+enum E8 with A8 {
+  element // Error.
+}
+
+class A9 {
+  int element = 42;
+}
+
+enum E9 with A9 {
+  element // Error.
+}
+
+class A10 {
+  void element() {}
+}
+
+enum E10 with A10 {
+  element // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect
new file mode 100644
index 0000000..bac3cd9
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect
@@ -0,0 +1,241 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  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 = #C5;
+  static const field self::E2 element = #C4;
+  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 = #C6;
+  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}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  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}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  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}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  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}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  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}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  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}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2>[#C4]
+  #C6 = <self::E3>[]
+  #C7 = <self::E4>[]
+  #C8 = <self::E5>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10: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)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect
new file mode 100644
index 0000000..37fade4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect
@@ -0,0 +1,236 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  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 = #C5;
+  static const field self::E2 element = #C4;
+  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 = #C6;
+  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}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  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}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  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}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  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}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  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}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 extends core::_Enum implements self::A8 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  set element(dynamic value) → void {}
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 extends core::_Enum implements self::A9 /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int element = 42;
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  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}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 extends core::_Enum implements self::A10 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  method element() → void {}
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2>[#C4]
+  #C6 = <self::E3>[]
+  #C7 = <self::E4>[]
+  #C8 = <self::E5>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10: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)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
new file mode 100644
index 0000000..1a83d84
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
@@ -0,0 +1,60 @@
+enum E1 {
+  element;
+
+  final int element = 42;
+}
+
+enum E2 {
+  element,
+  element;
+}
+
+enum E3 {
+  element;
+
+  void element() {}
+}
+
+enum E4 {
+  element;
+
+  static void element() {}
+}
+
+enum E5 {
+  element;
+
+  static int element = 42;
+}
+
+enum E6 {
+  element;
+
+  void set element(E6 value) {}
+}
+
+enum E7 {
+  element;
+
+  static void set element(E7 value) {}
+}
+
+class A8 {
+  void set element(dynamic value) {}
+}
+
+enum E8 with A8 { element }
+
+class A9 {
+  int element = 42;
+}
+
+enum E9 with A9 { element }
+
+class A10 {
+  void element() {}
+}
+
+enum E10 with A10 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2ef28c8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline_modelled.expect
@@ -0,0 +1,60 @@
+class A10 {
+  void element() {}
+}
+
+class A8 {
+  void set element(dynamic value) {}
+}
+
+class A9 {
+  int element = 42;
+}
+
+enum E1 {
+  element;
+
+  final int element = 42;
+}
+
+enum E10 with A10 { element }
+
+enum E2 {
+  element,
+  element;
+}
+
+enum E3 {
+  element;
+
+  void element() {}
+}
+
+enum E4 {
+  element;
+
+  static void element() {}
+}
+
+enum E5 {
+  element;
+
+  static int element = 42;
+}
+
+enum E6 {
+  element;
+
+  void set element(E6 value) {}
+}
+
+enum E7 {
+  element;
+
+  static void set element(E7 value) {}
+}
+
+enum E8 with A8 { element }
+
+enum E9 with A9 { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect
new file mode 100644
index 0000000..a1dbcac
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect
@@ -0,0 +1,241 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  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 = #C5;
+  static const field self::E2 element = #C4;
+  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 = #C6;
+  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}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  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}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  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}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  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}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  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}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  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}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1*>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2*>[#C4]
+  #C6 = <self::E3*>[]
+  #C7 = <self::E4*>[]
+  #C8 = <self::E5*>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6*>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7*>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8*>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10: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)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect
new file mode 100644
index 0000000..a1dbcac
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect
@@ -0,0 +1,241 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  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 = #C5;
+  static const field self::E2 element = #C4;
+  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 = #C6;
+  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}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  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}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  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}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  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}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  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}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  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}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1*>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2*>[#C4]
+  #C6 = <self::E3*>[]
+  #C7 = <self::E4*>[]
+  #C8 = <self::E5*>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6*>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7*>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8*>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10: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)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.outline.expect
new file mode 100644
index 0000000..2f845e4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.outline.expect
@@ -0,0 +1,225 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+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>[];
+  final field core::int 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>[];
+  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}}";
+  method element() → void
+    ;
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[];
+  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}}";
+  static method element() → void
+    ;
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[];
+  static field core::int 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}}";
+}
+class E6 extends core::_Enum /*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}}";
+  set element(self::E6 value) → void
+    ;
+}
+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}}";
+  static set element(self::E7 value) → void
+    ;
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    ;
+  set element(dynamic value) → void
+    ;
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*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 A9 extends core::Object {
+  field core::int element;
+  synthetic constructor •() → self::A9
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+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}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    ;
+  method element() → void
+    ;
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*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:///conflicting_elements.dart:5:6 -> ListConstant(const <E1*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:10:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:11:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:15:6 -> ListConstant(const <E3*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:21:6 -> ListConstant(const <E4*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:27:6 -> ListConstant(const <E5*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:33:6 -> ListConstant(const <E6*>[const E6{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:34:3 -> InstanceConstant(const E6{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:39:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:40:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:49:6 -> ListConstant(const <E8*>[const E8{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:50:3 -> InstanceConstant(const E8{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:57:6 -> ListConstant(const <E9*>[const E9{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:58:3 -> InstanceConstant(const E9{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:65:6 -> ListConstant(const <E10*>[const E10{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:66:3 -> InstanceConstant(const E10{})
+Extra constant evaluation: evaluated: 72, effectively constant: 16
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect
new file mode 100644
index 0000000..00f7ff2
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect
@@ -0,0 +1,236 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  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 = #C5;
+  static const field self::E2 element = #C4;
+  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 = #C6;
+  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}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  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}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  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}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  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}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  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}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 extends core::_Enum implements self::A8 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  set element(dynamic value) → void {}
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 extends core::_Enum implements self::A9 /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int element = 42;
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  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}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 extends core::_Enum implements self::A10 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  method element() → void {}
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1*>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2*>[#C4]
+  #C6 = <self::E3*>[]
+  #C7 = <self::E4*>[]
+  #C8 = <self::E5*>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6*>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7*>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8*>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10: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)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart
new file mode 100644
index 0000000..b2719d2
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.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.
+
+enum E {
+  one, // Ok.
+  two.named(), // Ok.
+  three.f(), // Error.
+  four.f2(); // Error.
+
+  const E();
+
+  const E.named()
+    : this(); // Ok.
+
+  factory E.f() => values.first;
+
+  factory E.f2() {
+    return const E(); // Error.
+  }
+
+  const factory E.f3() = E; // Error.
+
+  factory E.f4() = E; // Error.
+
+  factory E.f5() = E.f; // Ok.
+
+  factory E.f6(int value) = E.f; // Error.
+}
+
+test() {
+  new E(); // Error.
+  const E(); // Error.
+  E.new; // Error.
+
+  new E.named(); // Error.
+  const E().named(); // Error.
+  E.named; // Error.
+
+  new E.f(); // Ok.
+  const E.f(); // Error.
+  E.f; // Ok.
+}
+
+main() {}
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
new file mode 100644
index 0000000..7840205
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+//   const factory E.f3() = E; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+//   factory E.f4() = E; // Error.
+//                    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+//   three.f(), // Error.
+//        ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+//   four.f2(); // Error.
+//       ^^
+//
+// 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.
+//                             ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+//     return const E(); // Error.
+//                  ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+//   new E(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+//   const E(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+//   E.new; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+//   new E.named(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+//   const E().named(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+//   E.named; // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const E.f(); // Error.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E one = #C3;
+  static const field self::E two = #C6;
+  static const field self::E three = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E four = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+  four.f2(); // Error.
+      ^^";
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10]/*isLegacy*/;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name) → self::E
+    : this self::E::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static factory f() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^".{core::Iterable::first}{self::E};
+  static factory f2() → self::E {
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+    return const E(); // Error.
+                 ^";
+  }
+  static factory f3() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+  const factory E.f3() = E; // Error.
+                         ^";
+  static factory f4() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+  factory E.f4() = E; // Error.
+                   ^";
+  static factory f5() → self::E
+    return self::E::f();
+  static factory f6(core::int value) → 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.
+                            ^";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+  new E(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+  const E(); // Error.
+        ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+  E.new; // Error.
+    ^^^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+  new E.named(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+  const E().named(); // Error.
+        ^"{dynamic}.named();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+  E.named; // Error.
+    ^^^^^";
+  self::E::f();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const E.f(); // Error.
+        ^";
+  #C11;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "one"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "two"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = constructor-tearoff self::E::f3
+  #C8 = constructor-tearoff self::E::f4
+  #C9 = constructor-tearoff self::E::f5
+  #C10 = constructor-tearoff self::E::f6
+  #C11 = constructor-tearoff self::E::f
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructor_calls.dart:
+- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
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
new file mode 100644
index 0000000..7840205
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+//   const factory E.f3() = E; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+//   factory E.f4() = E; // Error.
+//                    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+//   three.f(), // Error.
+//        ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+//   four.f2(); // Error.
+//       ^^
+//
+// 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.
+//                             ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+//     return const E(); // Error.
+//                  ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+//   new E(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+//   const E(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+//   E.new; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+//   new E.named(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+//   const E().named(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+//   E.named; // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const E.f(); // Error.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E one = #C3;
+  static const field self::E two = #C6;
+  static const field self::E three = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E four = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+  four.f2(); // Error.
+      ^^";
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10]/*isLegacy*/;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name) → self::E
+    : this self::E::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static factory f() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^".{core::Iterable::first}{self::E};
+  static factory f2() → self::E {
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+    return const E(); // Error.
+                 ^";
+  }
+  static factory f3() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+  const factory E.f3() = E; // Error.
+                         ^";
+  static factory f4() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+  factory E.f4() = E; // Error.
+                   ^";
+  static factory f5() → self::E
+    return self::E::f();
+  static factory f6(core::int value) → 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.
+                            ^";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+  new E(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+  const E(); // Error.
+        ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+  E.new; // Error.
+    ^^^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+  new E.named(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+  const E().named(); // Error.
+        ^"{dynamic}.named();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+  E.named; // Error.
+    ^^^^^";
+  self::E::f();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const E.f(); // Error.
+        ^";
+  #C11;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "one"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "two"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = constructor-tearoff self::E::f3
+  #C8 = constructor-tearoff self::E::f4
+  #C9 = constructor-tearoff self::E::f5
+  #C10 = constructor-tearoff self::E::f6
+  #C11 = constructor-tearoff self::E::f
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructor_calls.dart:
+- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect
new file mode 100644
index 0000000..e490318
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+enum E {
+  one,
+  two.named(),
+  three.f(),
+  four.f2();
+
+  const E();
+  const E.named() : this();
+  factory E.f() => values.first;
+  factory E.f2() {
+    return const E();
+  }
+  const factory E.f3() = E;
+  factory E.f4() = E;
+  factory E.f5() = E.f;
+  factory E.f6(int value) = E.f;
+}
+
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0351378
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+enum E {
+  one,
+  two.named(),
+  three.f(),
+  four.f2();
+
+  const E();
+  const E.named() : this();
+  factory E.f() => values.first;
+  factory E.f2() {
+    return const E();
+  }
+  const factory E.f3() = E;
+  factory E.f4() = E;
+  factory E.f5() = E.f;
+  factory E.f6(int value) = E.f;
+}
+
+main() {}
+test() {}
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
new file mode 100644
index 0000000..7840205
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+//   const factory E.f3() = E; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+//   factory E.f4() = E; // Error.
+//                    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+//   three.f(), // Error.
+//        ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+//   four.f2(); // Error.
+//       ^^
+//
+// 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.
+//                             ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+//     return const E(); // Error.
+//                  ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+//   new E(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+//   const E(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+//   E.new; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+//   new E.named(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+//   const E().named(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+//   E.named; // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const E.f(); // Error.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E one = #C3;
+  static const field self::E two = #C6;
+  static const field self::E three = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E four = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+  four.f2(); // Error.
+      ^^";
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10]/*isLegacy*/;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name) → self::E
+    : this self::E::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static factory f() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^".{core::Iterable::first}{self::E};
+  static factory f2() → self::E {
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+    return const E(); // Error.
+                 ^";
+  }
+  static factory f3() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+  const factory E.f3() = E; // Error.
+                         ^";
+  static factory f4() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+  factory E.f4() = E; // Error.
+                   ^";
+  static factory f5() → self::E
+    return self::E::f();
+  static factory f6(core::int value) → 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.
+                            ^";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+  new E(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+  const E(); // Error.
+        ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+  E.new; // Error.
+    ^^^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+  new E.named(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+  const E().named(); // Error.
+        ^"{dynamic}.named();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+  E.named; // Error.
+    ^^^^^";
+  self::E::f();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const E.f(); // Error.
+        ^";
+  #C11;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "one"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "two"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = constructor-tearoff self::E::f3
+  #C8 = constructor-tearoff self::E::f4
+  #C9 = constructor-tearoff self::E::f5
+  #C10 = constructor-tearoff self::E::f6
+  #C11 = constructor-tearoff self::E::f
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructor_calls.dart:
+- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
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
new file mode 100644
index 0000000..7840205
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+//   const factory E.f3() = E; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+//   factory E.f4() = E; // Error.
+//                    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+//   three.f(), // Error.
+//        ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+//   four.f2(); // Error.
+//       ^^
+//
+// 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.
+//                             ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+//     return const E(); // Error.
+//                  ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+//   new E(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+//   const E(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+//   E.new; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+//   new E.named(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+//   const E().named(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+//   E.named; // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const E.f(); // Error.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E one = #C3;
+  static const field self::E two = #C6;
+  static const field self::E three = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E four = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+  four.f2(); // Error.
+      ^^";
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10]/*isLegacy*/;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name) → self::E
+    : this self::E::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static factory f() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^".{core::Iterable::first}{self::E};
+  static factory f2() → self::E {
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+    return const E(); // Error.
+                 ^";
+  }
+  static factory f3() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+  const factory E.f3() = E; // Error.
+                         ^";
+  static factory f4() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+  factory E.f4() = E; // Error.
+                   ^";
+  static factory f5() → self::E
+    return self::E::f();
+  static factory f6(core::int value) → 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.
+                            ^";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+  new E(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+  const E(); // Error.
+        ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+  E.new; // Error.
+    ^^^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+  new E.named(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+  const E().named(); // Error.
+        ^"{dynamic}.named();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+  E.named; // Error.
+    ^^^^^";
+  self::E::f();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const E.f(); // Error.
+        ^";
+  #C11;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "one"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "two"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = constructor-tearoff self::E::f3
+  #C8 = constructor-tearoff self::E::f4
+  #C9 = constructor-tearoff self::E::f5
+  #C10 = constructor-tearoff self::E::f6
+  #C11 = constructor-tearoff self::E::f
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructor_calls.dart:
+- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.outline.expect
new file mode 100644
index 0000000..220fd42
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.outline.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+//   const factory E.f3() = E; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+//   factory E.f4() = E; // Error.
+//                    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+//   three.f(), // Error.
+//        ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+//   four.f2(); // Error.
+//       ^^
+//
+// 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.
+//                             ^
+//
+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::one, self::E::two, self::E::three, self::E::four];
+  static const field self::E one = const self::E::•(0, "one");
+  static const field self::E two = const self::E::named(1, "two");
+  static const field self::E three = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E four = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+  four.f2(); // Error.
+      ^^";
+  static final field dynamic _redirecting# = <dynamic>[self::E::f3, self::E::f4, self::E::f5, self::E::f6]/*isLegacy*/;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name) → self::E
+    : this self::E::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static factory f() → self::E
+    ;
+  static factory f2() → self::E
+    ;
+  static factory f3() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+  const factory E.f3() = E; // Error.
+                         ^";
+  static factory f4() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+  factory E.f4() = E; // Error.
+                   ^";
+  static factory f5() → self::E
+    return self::E::f();
+  static factory f6(core::int value) → 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.
+                            ^";
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///constructor_calls.dart:5:6 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "one"})
+Evaluated: StaticGet @ org-dartlang-testcase:///constructor_calls.dart:5:6 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "two"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constructor_calls.dart:6:3 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constructor_calls.dart:7:3 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "two"})
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructor_calls.dart:5:6 -> ConstructorTearOffConstant(E.f3)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructor_calls.dart:5:6 -> ConstructorTearOffConstant(E.f4)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructor_calls.dart:5:6 -> ConstructorTearOffConstant(E.f5)
+Evaluated: ConstructorTearOff @ org-dartlang-testcase:///constructor_calls.dart:5:6 -> ConstructorTearOffConstant(E.f6)
+Extra constant evaluation: evaluated: 20, effectively constant: 8
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
new file mode 100644
index 0000000..7840205
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
@@ -0,0 +1,156 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+//   const factory E.f3() = E; // Error.
+//                          ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+//   factory E.f4() = E; // Error.
+//                    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+//   three.f(), // Error.
+//        ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+//   four.f2(); // Error.
+//       ^^
+//
+// 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.
+//                             ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+//     return const E(); // Error.
+//                  ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+//   new E(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+//   const E(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+//   E.new; // Error.
+//     ^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+//   new E.named(); // Error.
+//       ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+//   const E().named(); // Error.
+//         ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+//   E.named; // Error.
+//     ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const E.f(); // Error.
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E one = #C3;
+  static const field self::E two = #C6;
+  static const field self::E three = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^";
+  static const field self::E four = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:9:7: Error: Couldn't find constructor 'E.f2'.
+  four.f2(); // Error.
+      ^^";
+  static final field dynamic _redirecting# = <dynamic>[#C7, #C8, #C9, #C10]/*isLegacy*/;
+  const constructor •(core::int index, core::String name) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  const constructor named(core::int index, core::String name) → self::E
+    : this self::E::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  static factory f() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:8:8: Error: Couldn't find constructor 'E.f'.
+  three.f(), // Error.
+       ^".{core::Iterable::first}{self::E};
+  static factory f2() → self::E {
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:19:18: Error: Enums can't be instantiated.
+    return const E(); // Error.
+                 ^";
+  }
+  static factory f3() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:22:26: Error: Enum factory constructors can't redirect to generative constructors.
+  const factory E.f3() = E; // Error.
+                         ^";
+  static factory f4() → self::E
+    return invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:24:20: Error: Enum factory constructors can't redirect to generative constructors.
+  factory E.f4() = E; // Error.
+                   ^";
+  static factory f5() → self::E
+    return self::E::f();
+  static factory f6(core::int value) → 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.
+                            ^";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:32:7: Error: Enums can't be instantiated.
+  new E(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:33:9: Error: Enums can't be instantiated.
+  const E(); // Error.
+        ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:34:5: Error: Enum constructors can't be torn off.
+  E.new; // Error.
+    ^^^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:36:7: Error: Enums can't be instantiated.
+  new E.named(); // Error.
+      ^";
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:37:9: Error: Enums can't be instantiated.
+  const E().named(); // Error.
+        ^"{dynamic}.named();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:38:5: Error: Enum constructors can't be torn off.
+  E.named; // Error.
+    ^^^^^";
+  self::E::f();
+  invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_calls.dart:41:9: Error: Cannot invoke a non-'const' factory where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const E.f(); // Error.
+        ^";
+  #C11;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "one"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "two"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = constructor-tearoff self::E::f3
+  #C8 = constructor-tearoff self::E::f4
+  #C9 = constructor-tearoff self::E::f5
+  #C10 = constructor-tearoff self::E::f6
+  #C11 = constructor-tearoff self::E::f
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructor_calls.dart:
+- E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart
new file mode 100644
index 0000000..e7a0979
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.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.
+
+enum T {
+  t;
+
+  const T.named();
+}
+
+enum S {
+  s.named();
+
+  const S();
+}
+
+void main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.strong.expect
new file mode 100644
index 0000000..65cd747
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.strong.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+//   t;
+//    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+//   s.named();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+class S extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::S> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  const constructor •(core::int index, core::String name) → self::S
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "S.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.strong.transformed.expect
new file mode 100644
index 0000000..65cd747
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.strong.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+//   t;
+//    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+//   s.named();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+class S extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::S> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  const constructor •(core::int index, core::String name) → self::S
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "S.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect
new file mode 100644
index 0000000..99971da
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+enum T {
+  t;
+
+  const T.named();
+}
+
+enum S {
+  s.named();
+
+  const S();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..487c963
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+enum S {
+  s.named();
+
+  const S();
+}
+
+enum T {
+  t;
+
+  const T.named();
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.expect
new file mode 100644
index 0000000..65cd747
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+//   t;
+//    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+//   s.named();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+class S extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::S> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  const constructor •(core::int index, core::String name) → self::S
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "S.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.modular.expect
new file mode 100644
index 0000000..65cd747
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+//   t;
+//    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+//   s.named();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+class S extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::S> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  const constructor •(core::int index, core::String name) → self::S
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "S.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.outline.expect
new file mode 100644
index 0000000..3f74c75
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.outline.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+//   t;
+//    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+//   s.named();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = const <self::T>[self::T::t];
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+class S extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::S> values = const <self::S>[self::S::s];
+  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  const constructor •(core::int index, core::String name) → self::S
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "S.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.transformed.expect
new file mode 100644
index 0000000..65cd747
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart.weak.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+//   t;
+//    ^
+//
+// pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+//   s.named();
+//    ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:6:4: Error: Couldn't find constructor 'T'.
+  t;
+   ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+class S extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::S> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  static const field self::S s = invalid-expression "pkg/front_end/testcases/enhanced_enums/constructor_not_found.dart:12:4: Error: Couldn't find constructor 'S.named'.
+  s.named();
+   ^^^^^";
+  const constructor •(core::int index, core::String name) → self::S
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "S.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart b/pkg/front_end/testcases/enhanced_enums/declared_values.dart
new file mode 100644
index 0000000..a560ba7
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.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.
+
+enum E1 {
+  element;
+
+  static const List<E1> values = [E1.element]; // Error in E1.
+}
+
+enum E2 {
+  element;
+
+  int values = 42; // Error in E2.
+}
+
+enum E3 {
+  element;
+
+  static const List<E3> values = [E3.element]; // Error in E3.
+  int values = 42; // Duplicate.
+}
+
+enum E4 {
+  element;
+
+  static void set values(List<E4> x) {} // Ok.
+}
+
+enum E5 {
+  element;
+
+  static void set values(dynamic x) {} // Ok.
+}
+
+enum E6 {
+  element;
+
+  static void set values(Never x) {} // Error in E6.
+}
+
+enum E7 {
+  element;
+
+  void values() {} // Error in E7.
+}
+
+main() {}
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
new file mode 100644
index 0000000..dde0f55
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   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'.
+//   int values = 42; // Error in E2.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:21:7: Error: 'values' is already declared in this scope.
+//   int values = 42; // Duplicate.
+//       ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Context: Previous declaration of 'values'.
+//   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'.
+//   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'.
+//   void values() {} // Error in E7.
+//        ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:36:6: Error: The type 'List<E6>' of the getter 'E6.values' is not a subtype of the type 'Never' of the setter 'E6.values'.
+//  - 'List' is from 'dart:core'.
+//  - 'E6' is from 'pkg/front_end/testcases/enhanced_enums/declared_values.dart'.
+// enum E6 {
+//      ^^^^^...
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:39:19: Context: This is the declaration of the setter 'E6.values'.
+//   static void set values(Never x) {} // Error in E6.
+//                   ^^^^^^
+//
+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}}";
+}
+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}}";
+}
+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}}";
+}
+class E4 extends core::_Enum /*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}}";
+  static set values(core::List<self::E4> x) → void {}
+}
+class E5 extends core::_Enum /*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}}";
+  static set values(dynamic x) → void {}
+}
+class E6 extends core::_Enum /*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}}";
+  static set values(Never x) → void {}
+}
+class E7 extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${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]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_values.dart:
+- E1. (from org-dartlang-testcase:///declared_values.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_values.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_values.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_values.dart:24:6)
+- E5. (from org-dartlang-testcase:///declared_values.dart:30:6)
+- E6. (from org-dartlang-testcase:///declared_values.dart:36:6)
+- E7. (from org-dartlang-testcase:///declared_values.dart:42:6)
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
new file mode 100644
index 0000000..dde0f55
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.strong.transformed.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   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'.
+//   int values = 42; // Error in E2.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:21:7: Error: 'values' is already declared in this scope.
+//   int values = 42; // Duplicate.
+//       ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Context: Previous declaration of 'values'.
+//   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'.
+//   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'.
+//   void values() {} // Error in E7.
+//        ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:36:6: Error: The type 'List<E6>' of the getter 'E6.values' is not a subtype of the type 'Never' of the setter 'E6.values'.
+//  - 'List' is from 'dart:core'.
+//  - 'E6' is from 'pkg/front_end/testcases/enhanced_enums/declared_values.dart'.
+// enum E6 {
+//      ^^^^^...
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:39:19: Context: This is the declaration of the setter 'E6.values'.
+//   static void set values(Never x) {} // Error in E6.
+//                   ^^^^^^
+//
+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}}";
+}
+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}}";
+}
+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}}";
+}
+class E4 extends core::_Enum /*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}}";
+  static set values(core::List<self::E4> x) → void {}
+}
+class E5 extends core::_Enum /*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}}";
+  static set values(dynamic x) → void {}
+}
+class E6 extends core::_Enum /*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}}";
+  static set values(Never x) → void {}
+}
+class E7 extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${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]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_values.dart:
+- E1. (from org-dartlang-testcase:///declared_values.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_values.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_values.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_values.dart:24:6)
+- E5. (from org-dartlang-testcase:///declared_values.dart:30:6)
+- E6. (from org-dartlang-testcase:///declared_values.dart:36:6)
+- E7. (from org-dartlang-testcase:///declared_values.dart:42:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect
new file mode 100644
index 0000000..2c03b28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline.expect
@@ -0,0 +1,44 @@
+enum E1 {
+  element;
+
+  static const List<E1> values = [E1.element];
+}
+
+enum E2 {
+  element;
+
+  int values = 42;
+}
+
+enum E3 {
+  element;
+
+  static const List<E3> values = [E3.element];
+  int values = 42;
+}
+
+enum E4 {
+  element;
+
+  static void set values(List<E4> x) {}
+}
+
+enum E5 {
+  element;
+
+  static void set values(dynamic x) {}
+}
+
+enum E6 {
+  element;
+
+  static void set values(Never x) {}
+}
+
+enum E7 {
+  element;
+
+  void values() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2c03b28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,44 @@
+enum E1 {
+  element;
+
+  static const List<E1> values = [E1.element];
+}
+
+enum E2 {
+  element;
+
+  int values = 42;
+}
+
+enum E3 {
+  element;
+
+  static const List<E3> values = [E3.element];
+  int values = 42;
+}
+
+enum E4 {
+  element;
+
+  static void set values(List<E4> x) {}
+}
+
+enum E5 {
+  element;
+
+  static void set values(dynamic x) {}
+}
+
+enum E6 {
+  element;
+
+  static void set values(Never x) {}
+}
+
+enum E7 {
+  element;
+
+  void values() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..3acc5b0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   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'.
+//   int values = 42; // Error in E2.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:21:7: Error: 'values' is already declared in this scope.
+//   int values = 42; // Duplicate.
+//       ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Context: Previous declaration of 'values'.
+//   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'.
+//   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'.
+//   void values() {} // Error in E7.
+//        ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:36:6: Error: The type 'List<E6>' of the getter 'E6.values' is not a subtype of the type 'Never' of the setter 'E6.values'.
+//  - 'List' is from 'dart:core'.
+//  - 'E6' is from 'pkg/front_end/testcases/enhanced_enums/declared_values.dart'.
+// enum E6 {
+//      ^^^^^...
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:39:19: Context: This is the declaration of the setter 'E6.values'.
+//   static void set values(Never x) {} // Error in E6.
+//                   ^^^^^^
+//
+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}}";
+}
+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}}";
+}
+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}}";
+}
+class E4 extends core::_Enum /*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}}";
+  static set values(core::List<self::E4> x) → void {}
+}
+class E5 extends core::_Enum /*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}}";
+  static set values(dynamic x) → void {}
+}
+class E6 extends core::_Enum /*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}}";
+  static set values(Never x) → void {}
+}
+class E7 extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${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]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_values.dart:
+- E1. (from org-dartlang-testcase:///declared_values.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_values.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_values.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_values.dart:24:6)
+- E5. (from org-dartlang-testcase:///declared_values.dart:30:6)
+- E6. (from org-dartlang-testcase:///declared_values.dart:36:6)
+- E7. (from org-dartlang-testcase:///declared_values.dart:42:6)
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
new file mode 100644
index 0000000..3acc5b0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.modular.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   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'.
+//   int values = 42; // Error in E2.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:21:7: Error: 'values' is already declared in this scope.
+//   int values = 42; // Duplicate.
+//       ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Context: Previous declaration of 'values'.
+//   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'.
+//   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'.
+//   void values() {} // Error in E7.
+//        ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:36:6: Error: The type 'List<E6>' of the getter 'E6.values' is not a subtype of the type 'Never' of the setter 'E6.values'.
+//  - 'List' is from 'dart:core'.
+//  - 'E6' is from 'pkg/front_end/testcases/enhanced_enums/declared_values.dart'.
+// enum E6 {
+//      ^^^^^...
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:39:19: Context: This is the declaration of the setter 'E6.values'.
+//   static void set values(Never x) {} // Error in E6.
+//                   ^^^^^^
+//
+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}}";
+}
+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}}";
+}
+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}}";
+}
+class E4 extends core::_Enum /*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}}";
+  static set values(core::List<self::E4> x) → void {}
+}
+class E5 extends core::_Enum /*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}}";
+  static set values(dynamic x) → void {}
+}
+class E6 extends core::_Enum /*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}}";
+  static set values(Never x) → void {}
+}
+class E7 extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${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]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_values.dart:
+- E1. (from org-dartlang-testcase:///declared_values.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_values.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_values.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_values.dart:24:6)
+- E5. (from org-dartlang-testcase:///declared_values.dart:30:6)
+- E6. (from org-dartlang-testcase:///declared_values.dart:36:6)
+- E7. (from org-dartlang-testcase:///declared_values.dart:42:6)
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
new file mode 100644
index 0000000..535787e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.outline.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   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'.
+//   int values = 42; // Error in E2.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:21:7: Error: 'values' is already declared in this scope.
+//   int values = 42; // Duplicate.
+//       ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Context: Previous declaration of 'values'.
+//   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'.
+//   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'.
+//   void values() {} // Error in E7.
+//        ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:36:6: Error: The type 'List<E6>' of the getter 'E6.values' is not a subtype of the type 'Never' of the setter 'E6.values'.
+//  - 'List' is from 'dart:core'.
+//  - 'E6' is from 'pkg/front_end/testcases/enhanced_enums/declared_values.dart'.
+// enum E6 {
+//      ^^^^^...
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:39:19: Context: This is the declaration of the setter 'E6.values'.
+//   static void set values(Never x) {} // Error in E6.
+//                   ^^^^^^
+//
+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}}";
+}
+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}}";
+}
+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}}";
+  static set values(core::List<self::E4> x) → void
+    ;
+}
+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}}";
+  static set values(dynamic x) → void
+    ;
+}
+class E6 extends core::_Enum /*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}}";
+  static set values(Never x) → void
+    ;
+}
+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}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:5:6 -> ListConstant(const <E1*>[const E1{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:6:3 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:11:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:12:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:17:6 -> ListConstant(const <E3*>[const E3{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:18:3 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:24:6 -> ListConstant(const <E4*>[const E4{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:25:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:30:6 -> ListConstant(const <E5*>[const E5{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:31:3 -> InstanceConstant(const E5{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:36:6 -> ListConstant(const <E6*>[const E6{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:37:3 -> InstanceConstant(const E6{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///declared_values.dart:42:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///declared_values.dart:43:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 49, effectively constant: 14
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
new file mode 100644
index 0000000..3acc5b0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/declared_values.dart.weak.transformed.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   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'.
+//   int values = 42; // Error in E2.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:21:7: Error: 'values' is already declared in this scope.
+//   int values = 42; // Duplicate.
+//       ^^^^^^
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:20:25: Context: Previous declaration of 'values'.
+//   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'.
+//   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'.
+//   void values() {} // Error in E7.
+//        ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:36:6: Error: The type 'List<E6>' of the getter 'E6.values' is not a subtype of the type 'Never' of the setter 'E6.values'.
+//  - 'List' is from 'dart:core'.
+//  - 'E6' is from 'pkg/front_end/testcases/enhanced_enums/declared_values.dart'.
+// enum E6 {
+//      ^^^^^...
+// pkg/front_end/testcases/enhanced_enums/declared_values.dart:39:19: Context: This is the declaration of the setter 'E6.values'.
+//   static void set values(Never x) {} // Error in E6.
+//                   ^^^^^^
+//
+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}}";
+}
+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}}";
+}
+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}}";
+}
+class E4 extends core::_Enum /*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}}";
+  static set values(core::List<self::E4> x) → void {}
+}
+class E5 extends core::_Enum /*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}}";
+  static set values(dynamic x) → void {}
+}
+class E6 extends core::_Enum /*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}}";
+  static set values(Never x) → void {}
+}
+class E7 extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${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]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///declared_values.dart:
+- E1. (from org-dartlang-testcase:///declared_values.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_values.dart:11:6)
+- E3. (from org-dartlang-testcase:///declared_values.dart:17:6)
+- E4. (from org-dartlang-testcase:///declared_values.dart:24:6)
+- E5. (from org-dartlang-testcase:///declared_values.dart:30:6)
+- E6. (from org-dartlang-testcase:///declared_values.dart:36:6)
+- E7. (from org-dartlang-testcase:///declared_values.dart:42:6)
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 7321935..cc27a95 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
@@ -14,7 +14,7 @@
   static const field self::E<core::int, core::String> one = #C3;
   static const field self::E<core::double, core::num> two = #C6;
   static const field self::E<core::int, core::int> three = #C9;
-  static const field self::E<dynamic, dynamic> four = #C12;
+  static const field self::E<core::num, core::bool> four = #C12;
   const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
     : super core::_Enum::•(index, name)
     ;
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
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 7321935..cc27a95 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
@@ -14,7 +14,7 @@
   static const field self::E<core::int, core::String> one = #C3;
   static const field self::E<core::double, core::num> two = #C6;
   static const field self::E<core::int, core::int> three = #C9;
-  static const field self::E<dynamic, dynamic> four = #C12;
+  static const field self::E<core::num, core::bool> four = #C12;
   const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
     : super core::_Enum::•(index, name)
     ;
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
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 5598791..5838648 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
@@ -14,7 +14,7 @@
   static const field self::E<core::int, core::String> one = #C3;
   static const field self::E<core::double, core::num> two = #C6;
   static const field self::E<core::int, core::int> three = #C9;
-  static const field self::E<dynamic, dynamic> four = #C12;
+  static const field self::E<core::num, core::bool> four = #C12;
   const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
     : super core::_Enum::•(index, name)
     ;
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
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 5598791..5838648 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
@@ -14,7 +14,7 @@
   static const field self::E<core::int, core::String> one = #C3;
   static const field self::E<core::double, core::num> two = #C6;
   static const field self::E<core::int, core::int> three = #C9;
-  static const field self::E<dynamic, dynamic> four = #C12;
+  static const field self::E<core::num, core::bool> four = #C12;
   const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
     : super core::_Enum::•(index, name)
     ;
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
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 c39aa4b..d5da873 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
@@ -14,7 +14,7 @@
   static const field self::E<core::int, core::String> one = const self::E::•<core::int, core::String>(0, "one");
   static const field self::E<core::double, core::num> two = const self::E::•<core::double, core::num>(1, "two");
   static const field self::E<core::int, core::int> three = const self::E::named<core::int, core::int>(2, "three", 42);
-  static const field self::E<dynamic, dynamic> four = const self::E::•<core::num, core::bool>(3, "four");
+  static const field self::E<core::num, core::bool> four = const self::E::•<core::num, core::bool>(3, "four");
   const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
     : super core::_Enum::•(index, name)
     ;
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 5598791..5838648 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
@@ -14,7 +14,7 @@
   static const field self::E<core::int, core::String> one = #C3;
   static const field self::E<core::double, core::num> two = #C6;
   static const field self::E<core::int, core::int> three = #C9;
-  static const field self::E<dynamic, dynamic> four = #C12;
+  static const field self::E<core::num, core::bool> four = #C12;
   const constructor •(core::int index, core::String name) → self::E<self::E::X%, self::E::Y%>
     : super core::_Enum::•(index, name)
     ;
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
index 95879d2..bf189d3 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
index d680f8a..ce0af0b 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect
index 4344750..c5514b9 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline.expect
@@ -1,18 +1,26 @@
 abstract class A extends Enum {
   int get foo => index;
 }
+
 enum EA with A { element }
+
 abstract class B implements Enum {
   int get foo => index;
 }
+
 enum EB with B { element }
+
 mixin M on Enum {
   int get foo => index;
 }
+
 enum EM with M { element }
+
 mixin N implements Enum {
   int get foo => index;
 }
+
 enum EN with N { element }
+
 expectEquals(x, y) {}
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1a4630a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+abstract class A extends Enum {
+  int get foo => index;
+}
+
+abstract class B implements Enum {
+  int get foo => index;
+}
+
+enum EA with A { element }
+
+enum EB with B { element }
+
+enum EM with M { element }
+
+enum EN with N { element }
+
+expectEquals(x, y) {}
+main() {}
+mixin M on Enum {
+  int get foo => index;
+}
+mixin N implements Enum {
+  int get foo => index;
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
index f8907f3..3b7f732 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
index f8907f3..3b7f732 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
index dbfdd01..37f7523 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
@@ -21,7 +21,7 @@
   const constructor •(core::int index, core::String name) → self::EA
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -42,7 +42,7 @@
   const constructor •(core::int index, core::String name) → self::EB
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -61,7 +61,7 @@
   const constructor •(core::int index, core::String name) → self::EM
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -80,7 +80,7 @@
   const constructor •(core::int index, core::String name) → self::EN
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic
   ;
@@ -97,4 +97,4 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_as_supertype.dart:21:18 -> InstanceConstant(const EM{})
 Evaluated: ListLiteral @ org-dartlang-testcase:///enum_as_supertype.dart:27:6 -> ListConstant(const <EN*>[const EN{}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_as_supertype.dart:27:18 -> InstanceConstant(const EN{})
-Extra constant evaluation: evaluated: 20, effectively constant: 8
+Extra constant evaluation: evaluated: 32, effectively constant: 8
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
index 4417c2a..99d70ca 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
index 494cf2f..ac5b77e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
index 494cf2f..ac5b77e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
index 707dc9c..4f3495e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline.expect
@@ -1,5 +1,17 @@
 X foo<X>(X x) => x;
-enum E1 { bar(foo); const E1(int Function(int) f); }
-enum E2<X> { bar(foo); const E2(X f); }
+
+enum E1 {
+  bar(foo);
+
+  const E1(int Function(int) f);
+}
+
+enum E2<X> {
+  bar(foo);
+
+  const E2(X f);
+}
+
 enum E3<X extends num, Y extends String, Z extends Function(X, Y)> { element }
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4f3495e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+X foo<X>(X x) => x;
+
+enum E1 {
+  bar(foo);
+
+  const E1(int Function(int) f);
+}
+
+enum E2<X> {
+  bar(foo);
+
+  const E2(X f);
+}
+
+enum E3<X extends num, Y extends String, Z extends Function(X, Y)> { element }
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
index 7e8bae6..9ea4317 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/instantiated_generic_enum_types.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
index 7e8bae6..9ea4317 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/instantiated_generic_enum_types.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect
index 8ce4f0c..88e3d26 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline.expect
@@ -1,4 +1,11 @@
-enum E<X> { one(1), two("2"); final X field; const E(this.field); }
+enum E<X> {
+  one(1),
+  two("2");
+
+  final X field;
+  const E(this.field);
+}
+
 test() {}
 foo(E<int> ei, E<String> es) {}
 bar(E<int> ei, E<String> es) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d32b67f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+bar(E<int> ei, E<String> es) {}
+baz(E<Object> ei, E<Object> es) {}
+boz(E<Never> ei, E<Never> es) {}
+checkIsNotType<T>(x) {}
+checkIsType<T>(x) {}
+
+enum E<X> {
+  one(1),
+  two("2");
+
+  final X field;
+  const E(this.field);
+}
+
+foo(E<int> ei, E<String> es) {}
+main() {}
+test() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
index fb83333..c23f2d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/instantiated_generic_enum_types.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
index fb83333..c23f2d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/instantiated_generic_enum_types.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect
index 0f67ffa..cb1e18e 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = const <self::E<dynamic>>[self::E::one, self::E::two];
+  final field self::E::X% field;
   static const field self::E<core::int> one = const self::E::•<core::int>(0, "one", 1);
   static const field self::E<core::String> two = const self::E::•<core::String>(1, "two", "2");
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
index fb83333..c23f2d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48084.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
index 1da7d5a..d250b38 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48084.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
index 1da7d5a..d250b38 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48084.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
index 57d7640..b188f35 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
@@ -1,3 +1,12 @@
-enum E { one("foo"), two("bar"); final String field; const E(this.field); @override String toString() => field; }
+enum E {
+  one("foo"),
+  two("bar");
+
+  final String field;
+  const E(this.field);
+  @override
+  String toString() => field;
+}
+
 expectEquals(a, b) {}
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b188f35
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+enum E {
+  one("foo"),
+  two("bar");
+
+  final String field;
+  const E(this.field);
+  @override
+  String toString() => field;
+}
+
+expectEquals(a, b) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
index 32c1780..87ec425 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48084.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
index 32c1780..87ec425 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48084.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
index 1419d47..264ede3 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = const <self::E>[self::E::one, self::E::two];
+  final field core::String field;
   static const field self::E one = const self::E::•(0, "one", "foo");
   static const field self::E two = const self::E::•(1, "two", "bar");
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
index 32c1780..87ec425 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48181.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
index 0f6d2ba..f964e09 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
+//   f3.foo();
+//     ^
+//
 // pkg/front_end/testcases/enhanced_enums/issue48181.dart:12:5: Error: Couldn't find constructor 'F'.
 //   f1,
 //     ^
@@ -10,10 +14,6 @@
 //   f2(42),
 //     ^
 //
-// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
-//   f3.foo();
-//     ^^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48181.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
index 0f6d2ba..f964e09 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
+//   f3.foo();
+//     ^
+//
 // pkg/front_end/testcases/enhanced_enums/issue48181.dart:12:5: Error: Couldn't find constructor 'F'.
 //   f1,
 //     ^
@@ -10,10 +14,6 @@
 //   f2(42),
 //     ^
 //
-// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
-//   f3.foo();
-//     ^^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48181.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect
index ac00eb5e..90d4341 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline.expect
@@ -1,3 +1,16 @@
-enum E { e1, e2; factory E.f(int i) => E.values[i]; }
-enum F { f1, f2(42), f3.foo(); factory F(int i) => F.values[i]; }
+enum E {
+  e1,
+  e2;
+
+  factory E.f(int i) => E.values[i];
+}
+
+enum F {
+  f1,
+  f2(42),
+  f3.foo();
+
+  factory F(int i) => F.values[i];
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..90d4341
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+enum E {
+  e1,
+  e2;
+
+  factory E.f(int i) => E.values[i];
+}
+
+enum F {
+  f1,
+  f2(42),
+  f3.foo();
+
+  factory F(int i) => F.values[i];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
index ff44426..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
+//   f3.foo();
+//     ^
+//
 // pkg/front_end/testcases/enhanced_enums/issue48181.dart:12:5: Error: Couldn't find constructor 'F'.
 //   f1,
 //     ^
@@ -10,10 +14,6 @@
 //   f2(42),
 //     ^
 //
-// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
-//   f3.foo();
-//     ^^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48181.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
index ff44426..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
+//   f3.foo();
+//     ^
+//
 // pkg/front_end/testcases/enhanced_enums/issue48181.dart:12:5: Error: Couldn't find constructor 'F'.
 //   f1,
 //     ^
@@ -10,10 +14,6 @@
 //   f2(42),
 //     ^
 //
-// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
-//   f3.foo();
-//     ^^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48181.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.outline.expect
index dbb7eac..d61af01 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.outline.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
+//   f3.foo();
+//     ^
+//
 // pkg/front_end/testcases/enhanced_enums/issue48181.dart:12:5: Error: Couldn't find constructor 'F'.
 //   f1,
 //     ^
@@ -10,10 +14,6 @@
 //   f2(42),
 //     ^
 //
-// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
-//   f3.foo();
-//     ^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
index ff44426..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
+//   f3.foo();
+//     ^
+//
 // pkg/front_end/testcases/enhanced_enums/issue48181.dart:12:5: Error: Couldn't find constructor 'F'.
 //   f1,
 //     ^
@@ -10,10 +14,6 @@
 //   f2(42),
 //     ^
 //
-// pkg/front_end/testcases/enhanced_enums/issue48181.dart:14:5: Error: Couldn't find constructor 'F.foo'.
-//   f3.foo();
-//     ^^^
-//
 import self as self;
 import "dart:core" as core;
 
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/issue48232.dart b/pkg/front_end/testcases/enhanced_enums/issue48232.dart
new file mode 100644
index 0000000..633928f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.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.
+
+enum E {
+    v([]); // No error.
+  const E(_);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect
new file mode 100644
index 0000000..d829c61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _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/issue48232.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.transformed.expect
new file mode 100644
index 0000000..d829c61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _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/issue48232.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
new file mode 100644
index 0000000..359a7ab
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+enum E {
+  v([]);
+
+  const E(_);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..359a7ab
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+enum E {
+  v([]);
+
+  const E(_);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect
new file mode 100644
index 0000000..018ab8b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _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/issue48232.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.modular.expect
new file mode 100644
index 0000000..018ab8b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _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/issue48232.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.outline.expect
new file mode 100644
index 0000000..b2e8953
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+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::v];
+  static const field self::E v = const self::E::•(0, "v", const <dynamic>[]);
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48232.dart:5:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "v"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48232.dart:6:5 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "v"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect
new file mode 100644
index 0000000..018ab8b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _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/issue48303.dart b/pkg/front_end/testcases/enhanced_enums/issue48303.dart
new file mode 100644
index 0000000..a5a178f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.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.
+
+mixin M1 on Enum {
+  int mixedInMethod1(int v) => v;
+}
+
+enum E with M1 {
+  e1,
+  e2,
+  e3;
+}
+
+expectEquals(x, y) {
+  if (x != y) {
+    throw "Expected $x to be equal to $y.";
+  }
+}
+
+main() {
+  expectEquals(E.e1.toString(), "E.e1");
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.expect
new file mode 100644
index 0000000..bd7335d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.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)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.transformed.expect
new file mode 100644
index 0000000..830bd89
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 extends core::_Enum implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.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)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
new file mode 100644
index 0000000..f5732c3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
@@ -0,0 +1,12 @@
+mixin M1 on Enum {
+  int mixedInMethod1(int v) => v;
+}
+
+enum E with M1 {
+  e1,
+  e2,
+  e3;
+}
+
+expectEquals(x, y) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5c66761
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+enum E with M1 {
+  e1,
+  e2,
+  e3;
+}
+
+expectEquals(x, y) {}
+main() {}
+mixin M1 on Enum {
+  int mixedInMethod1(int v) => v;
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.expect
new file mode 100644
index 0000000..c400ee6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.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)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.modular.expect
new file mode 100644
index 0000000..c400ee6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.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)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.outline.expect
new file mode 100644
index 0000000..4ed3de3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.outline.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    ;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*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
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48303.dart:9:6 -> ListConstant(const <E*>[const E{}, const E{}, const E{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48303.dart:10:3 -> InstanceConstant(const E{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48303.dart:11:3 -> InstanceConstant(const E{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48303.dart:12:3 -> InstanceConstant(const E{})
+Extra constant evaluation: evaluated: 11, effectively constant: 4
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.transformed.expect
new file mode 100644
index 0000000..cf0dbb9
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 extends core::_Enum implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.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)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart b/pkg/front_end/testcases/enhanced_enums/issue48388.dart
new file mode 100644
index 0000000..eda8388
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.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.
+
+mixin M1 on Enum {
+  final int values = 42; // Error.
+}
+
+mixin M2 on Enum {
+  static final int values = 42; // Ok.
+}
+
+mixin M3 on Enum {
+  void set values(String x) {} // Error.
+}
+
+mixin M4 on Enum {
+  static void set values(String x) {} // Ok.
+}
+
+mixin M5 on Enum {
+  num get values => 0; // Error.
+  void set values(num x) {} // Error.
+}
+
+abstract class E1 extends Enum {
+  int values() => 42; // Error.
+}
+
+abstract class E2 extends Enum {
+  static int values() => 42; // Ok.
+}
+
+abstract class E3 extends Enum {
+  void set values(num x) {} // Error.
+}
+
+abstract class E4 extends Enum {
+  static void set values(num x) {} // Ok.
+}
+
+abstract class E5 extends Enum {
+  num get values => 0; // Error.
+  void set values(num x) {} // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.transformed.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline.expect
new file mode 100644
index 0000000..a098e65
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+mixin M1 on Enum {
+  final int values = 42;
+}
+mixin M2 on Enum {
+  static final int values = 42;
+}
+mixin M3 on Enum {
+  void set values(String x) {}
+}
+mixin M4 on Enum {
+  static void set values(String x) {}
+}
+mixin M5 on Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
+
+abstract class E1 extends Enum {
+  int values() => 42;
+}
+
+abstract class E2 extends Enum {
+  static int values() => 42;
+}
+
+abstract class E3 extends Enum {
+  void set values(num x) {}
+}
+
+abstract class E4 extends Enum {
+  static void set values(num x) {}
+}
+
+abstract class E5 extends Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ab86f28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline_modelled.expect
@@ -0,0 +1,38 @@
+abstract class E1 extends Enum {
+  int values() => 42;
+}
+
+abstract class E2 extends Enum {
+  static int values() => 42;
+}
+
+abstract class E3 extends Enum {
+  void set values(num x) {}
+}
+
+abstract class E4 extends Enum {
+  static void set values(num x) {}
+}
+
+abstract class E5 extends Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
+
+main() {}
+mixin M1 on Enum {
+  final int values = 42;
+}
+mixin M2 on Enum {
+  static final int values = 42;
+}
+mixin M3 on Enum {
+  void set values(String x) {}
+}
+mixin M4 on Enum {
+  static void set values(String x) {}
+}
+mixin M5 on Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.modular.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.outline.expect
new file mode 100644
index 0000000..7152d79
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.outline.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void
+    ;
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void
+    ;
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    ;
+  set values(core::num x) → void
+    ;
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    ;
+  method values() → core::int
+    ;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    ;
+  static method values() → core::int
+    ;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    ;
+  set values(core::num x) → void
+    ;
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    ;
+  static set values(core::num x) → void
+    ;
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    ;
+  get values() → core::num
+    ;
+  set values(core::num x) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.transformed.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart
new file mode 100644
index 0000000..7869a49
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart
@@ -0,0 +1,20 @@
+// 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.
+
+enum E1 {
+  element;
+
+  E1(); // Error.
+  E1.named(); // Error.
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super(); // Error.
+  const E2.named2() : super(42, "42"); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.strong.expect
new file mode 100644
index 0000000..022e129
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.strong.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..022e129
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.strong.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..47d7784
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+enum E1 {
+  element;
+
+  E1();
+  E1.named();
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super();
+  const E2.named2() : super(42, "42");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..47d7784
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+enum E1 {
+  element;
+
+  E1();
+  E1.named();
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super();
+  const E2.named2() : super(42, "42");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.expect
new file mode 100644
index 0000000..022e129
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.modular.expect
new file mode 100644
index 0000000..022e129
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..c6d15b1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // 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 invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    ;
+  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::one, self::E2::two];
+  static const field self::E2 one = const self::E2::named1(0, "one");
+  static const field self::E2 two = const self::E2::named2(1, "two");
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..022e129
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart.weak.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
index c358d70..a026fd3 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
index c358d70..a026fd3 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
index 1037478..4235f68 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
@@ -1,3 +1,27 @@
-enum E { one(1), two(2); final int foo; final int bar = 42; static E staticFoo = new E.f(); const E(this.foo); factory E.f() => E.one; int method(int value) => value + 10; String staticMethod(double d, bool b) => "$d$b"; }
-enum E2<X> { one<num>(1), two("2"); final X foo; final X? bar = null; static var staticFoo = () => new E2.f(); const E2(this.foo); factory E2.f() => throw 42; int method(int value) => value + 10; String staticMethod(double d, X x) => "$d$x"; }
+enum E {
+  one(1),
+  two(2);
+
+  final int foo;
+  final int bar = 42;
+  static E staticFoo = new E.f();
+  const E(this.foo);
+  factory E.f() => E.one;
+  int method(int value) => value + 10;
+  String staticMethod(double d, bool b) => "$d$b";
+}
+
+enum E2<X> {
+  one<num>(1),
+  two("2");
+
+  final X foo;
+  final X? bar = null;
+  static var staticFoo = () => new E2.f();
+  const E2(this.foo);
+  factory E2.f() => throw 42;
+  int method(int value) => value + 10;
+  String staticMethod(double d, X x) => "$d$x";
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4235f68
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline_modelled.expect
@@ -0,0 +1,27 @@
+enum E {
+  one(1),
+  two(2);
+
+  final int foo;
+  final int bar = 42;
+  static E staticFoo = new E.f();
+  const E(this.foo);
+  factory E.f() => E.one;
+  int method(int value) => value + 10;
+  String staticMethod(double d, bool b) => "$d$b";
+}
+
+enum E2<X> {
+  one<num>(1),
+  two("2");
+
+  final X foo;
+  final X? bar = null;
+  static var staticFoo = () => new E2.f();
+  const E2(this.foo);
+  factory E2.f() => throw 42;
+  int method(int value) => value + 10;
+  String staticMethod(double d, X x) => "$d$x";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
index 16019e2..2cd33ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
index 16019e2..2cd33ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
index 65b7311..b88e3da 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = const <self::E>[self::E::one, self::E::two];
-  static const field self::E one = const self::E::•(0, "one", 1);
-  static const field self::E two = const self::E::•(1, "two", 2);
   final field core::int foo;
   final field core::int bar;
   static field self::E staticFoo;
+  static const field self::E one = const self::E::•(0, "one", 1);
+  static const field self::E two = const self::E::•(1, "two", 2);
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = const <self::E2<dynamic>>[self::E2::one, self::E2::two];
-  static const field self::E2<core::num> one = const self::E2::•<core::num>(0, "one", 1);
-  static const field self::E2<core::String> two = const self::E2::•<core::String>(1, "two", "2");
   final field self::E2::X% foo;
   final field self::E2::X? bar;
   static field () → self::E2<dynamic> staticFoo;
+  static const field self::E2<core::num> one = const self::E2::•<core::num>(0, "one", 1);
+  static const field self::E2<core::String> two = const self::E2::•<core::String>(1, "two", "2");
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
index 16019e2..2cd33ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
index 9056dd8..db452f8 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
index 9056dd8..db452f8 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
index c2dd324..1cff5f7 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline.expect
@@ -1,4 +1,29 @@
-enum E0 { one(1, bar: 1), two(2, bar: 2); final int foo; final int bar; const E0(this.foo, {required this.bar}); }
-enum E1<X> { one(foo: "1"), two(foo: 2); final X foo; const E1({required this.foo}); }
-enum E2<X, Y, Z> { one(1, bar: "1", baz: 3.14), two("2", baz: 3.14, bar: 2), three(3.0, bar: false); final X foo; final Y bar; final Z? baz; const E2(this.foo, {required this.bar, this.baz = null}); }
+enum E0 {
+  one(1, bar: 1),
+  two(2, bar: 2);
+
+  final int foo;
+  final int bar;
+  const E0(this.foo, {required this.bar});
+}
+
+enum E1<X> {
+  one(foo: "1"),
+  two(foo: 2);
+
+  final X foo;
+  const E1({required this.foo});
+}
+
+enum E2<X, Y, Z> {
+  one(1, bar: "1", baz: 3.14),
+  two("2", baz: 3.14, bar: 2),
+  three(3.0, bar: false);
+
+  final X foo;
+  final Y bar;
+  final Z? baz;
+  const E2(this.foo, {required this.bar, this.baz = null});
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1cff5f7
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,29 @@
+enum E0 {
+  one(1, bar: 1),
+  two(2, bar: 2);
+
+  final int foo;
+  final int bar;
+  const E0(this.foo, {required this.bar});
+}
+
+enum E1<X> {
+  one(foo: "1"),
+  two(foo: 2);
+
+  final X foo;
+  const E1({required this.foo});
+}
+
+enum E2<X, Y, Z> {
+  one(1, bar: "1", baz: 3.14),
+  two("2", baz: 3.14, bar: 2),
+  three(3.0, bar: false);
+
+  final X foo;
+  final Y bar;
+  final Z? baz;
+  const E2(this.foo, {required this.bar, this.baz = null});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
index 5c96c28..7e7d8fa 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
index 5c96c28..7e7d8fa 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
index c98ffa3..593c828 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = const <self::E0>[self::E0::one, self::E0::two];
-  static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
-  static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
+  static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
   const constructor •(core::int index, core::String name, core::int foo, {required core::int bar}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = const <self::E1<dynamic>>[self::E1::one, self::E1::two];
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = const self::E1::•<core::String>(0, "one", foo: "1");
   static const field self::E1<core::int> two = const self::E1::•<core::int>(1, "two", foo: 2);
-  final field self::E1::X% foo;
   const constructor •(core::int index, core::String name, {required self::E1::X% foo}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = const <self::E2<dynamic, dynamic, dynamic>>[self::E2::one, self::E2::two, self::E2::three];
-  static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
-  static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
-  static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
+  static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
+  static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
   const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar, self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
index 5c96c28..7e7d8fa 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/folder.options b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/folder.options
new file mode 100644
index 0000000..c0139f7
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/folder.options
@@ -0,0 +1 @@
+--enable-experiment=enhanced-enums,named-arguments-anywhere
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart
new file mode 100644
index 0000000..73290e0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.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.
+
+class C {
+  String log = "";
+
+  C(int x, int y, {int z = 42}) {
+    log = "x=$x, y=$y, z=$z";
+  }
+
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+  C.named2(int x, int y, int z) : this(x, z: z, y);
+  C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+main() {
+  expect("x=1, y=2, z=3", C(1, 2, z: 3).log);
+  expect("x=1, y=2, z=3", C(z: 3, 1, 2).log);
+  expect("x=1, y=2, z=3", C(1, z: 3, 2).log);
+  expect("x=1, y=2, z=3", C.named1(1, 2, 3).log);
+  expect("x=1, y=2, z=3", C.named2(1, 2, 3).log);
+  expect("x=1, y=2, z=3", C.named3(1, 2, 3).log);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.strong.expect
new file mode 100644
index 0000000..af3e1a4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.strong.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+  constructor named2(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = x, final core::int #t2 = z, this self::C::•(#t1, y, z: #t2)
+    ;
+  constructor named3(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t3 = z, this self::C::•(x, y, z: #t3)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t4 = 3 in new self::C::•(1, 2, z: #t4)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t5 = 1 in let final core::int #t6 = 3 in new self::C::•(#t5, 2, z: #t6)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named2(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named3(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.strong.transformed.expect
new file mode 100644
index 0000000..233e403
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.strong.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+  constructor named2(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = x, final core::int #t2 = z, this self::C::•(#t1, y, z: #t2)
+    ;
+  constructor named3(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t3 = z, this self::C::•(x, y, z: #t3)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t4 = 3 in new self::C::•(1, 2, z: #t4)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t5 = 1 in let final core::int #t6 = 3 in new self::C::•(#t5, 2, z: #t6)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named2(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named3(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///issue48276.dart:19:32 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///issue48276.dart:20:29 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///issue48276.dart:20:35 -> IntConstant(3)
+Extra constant evaluation: evaluated: 50, effectively constant: 3
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.textual_outline.expect
new file mode 100644
index 0000000..ecd5096
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class C {
+  String log = "";
+  C(int x, int y, {int z = 42}) {}
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+  C.named2(int x, int y, int z) : this(x, z: z, y);
+  C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6df982e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class C {
+  C(int x, int y, {int z = 42}) {}
+  C.named1(int x, int y, int z) : this(x, y, z: z);
+  C.named2(int x, int y, int z) : this(x, z: z, y);
+  C.named3(int x, int y, int z) : this(z: z, x, y);
+  String log = "";
+}
+
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.expect
new file mode 100644
index 0000000..af3e1a4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+  constructor named2(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = x, final core::int #t2 = z, this self::C::•(#t1, y, z: #t2)
+    ;
+  constructor named3(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t3 = z, this self::C::•(x, y, z: #t3)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t4 = 3 in new self::C::•(1, 2, z: #t4)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t5 = 1 in let final core::int #t6 = 3 in new self::C::•(#t5, 2, z: #t6)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named2(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named3(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.modular.expect
new file mode 100644
index 0000000..af3e1a4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+  constructor named2(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = x, final core::int #t2 = z, this self::C::•(#t1, y, z: #t2)
+    ;
+  constructor named3(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t3 = z, this self::C::•(x, y, z: #t3)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t4 = 3 in new self::C::•(1, 2, z: #t4)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t5 = 1 in let final core::int #t6 = 3 in new self::C::•(#t5, 2, z: #t6)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named2(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named3(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.outline.expect
new file mode 100644
index 0000000..3724069
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log;
+  constructor •(core::int x, core::int y, {core::int z = 42}) → self::C
+    ;
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    ;
+  constructor named2(core::int x, core::int y, core::int z) → self::C
+    ;
+  constructor named3(core::int x, core::int y, core::int z) → self::C
+    ;
+}
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.transformed.expect
new file mode 100644
index 0000000..233e403
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/issue48276.dart.weak.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::String log = "";
+  constructor •(core::int x, core::int y, {core::int z = #C1}) → self::C
+    : super core::Object::•() {
+    this.{self::C::log} = "x=${x}, y=${y}, z=${z}";
+  }
+  constructor named1(core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(x, y, z: z)
+    ;
+  constructor named2(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = x, final core::int #t2 = z, this self::C::•(#t1, y, z: #t2)
+    ;
+  constructor named3(core::int x, core::int y, core::int z) → self::C
+    : final core::int #t3 = z, this self::C::•(x, y, z: #t3)
+    ;
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", new self::C::•(1, 2, z: 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t4 = 3 in new self::C::•(1, 2, z: #t4)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", (let final core::int #t5 = 1 in let final core::int #t6 = 3 in new self::C::•(#t5, 2, z: #t6)).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named1(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named2(1, 2, 3).{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", new self::C::named3(1, 2, 3).{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///issue48276.dart:19:32 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///issue48276.dart:20:29 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///issue48276.dart:20:35 -> IntConstant(3)
+Extra constant evaluation: evaluated: 50, effectively constant: 3
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart
new file mode 100644
index 0000000..e5f467c
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.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.
+
+enum C {
+  a(1, 2, z: 3),
+  b(z: 3, 1, 2),
+  c(1, z: 3, 2),
+  d.named1(1, 2, 3),
+  e.named2(1, 2, 3),
+  f.named3(1, 2, 3),
+  ;
+
+  final String log;
+
+  const C(int x, int y, {int z = 42})
+    : this.log = "x=$x, y=$y, z=$z";
+
+  const C.named1(int x, int y, int z) : this(x, y, z: z);
+  const C.named2(int x, int y, int z) : this(x, z: z, y);
+  const C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+main() {
+  expect("x=1, y=2, z=3", C.a.log);
+  expect("x=1, y=2, z=3", C.b.log);
+  expect("x=1, y=2, z=3", C.c.log);
+  expect("x=1, y=2, z=3", C.d.log);
+  expect("x=1, y=2, z=3", C.e.log);
+  expect("x=1, y=2, z=3", C.f.log);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
new file mode 100644
index 0000000..1d119a5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::C> values = #C20;
+  final field core::String log;
+  static const field self::C a = #C4;
+  static const field self::C b = #C7;
+  static const field self::C c = #C10;
+  static const field self::C d = #C13;
+  static const field self::C e = #C16;
+  static const field self::C f = #C19;
+  const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
+    : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
+    ;
+  const constructor named1(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(index, name, x, y, z: z)
+    ;
+  const constructor named2(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = index, final core::String #t2 = name, final core::int #t3 = x, final core::int #t4 = z, this self::C::•(#t1, #t2, #t3, y, z: #t4)
+    ;
+  const constructor named3(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t5 = index, final core::String #t6 = name, final core::int #t7 = z, this self::C::•(#t5, #t6, x, y, z: #t7)
+    ;
+  method toString() → core::String
+    return "C.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", #C4.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C7.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C10.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C13.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C16.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C19.{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = "x=1, y=2, z=3"
+  #C2 = 0
+  #C3 = "a"
+  #C4 = self::C {log:#C1, index:#C2, _name:#C3}
+  #C5 = 1
+  #C6 = "b"
+  #C7 = self::C {log:#C1, index:#C5, _name:#C6}
+  #C8 = 2
+  #C9 = "c"
+  #C10 = self::C {log:#C1, index:#C8, _name:#C9}
+  #C11 = 3
+  #C12 = "d"
+  #C13 = self::C {log:#C1, index:#C11, _name:#C12}
+  #C14 = 4
+  #C15 = "e"
+  #C16 = self::C {log:#C1, index:#C14, _name:#C15}
+  #C17 = 5
+  #C18 = "f"
+  #C19 = self::C {log:#C1, index:#C17, _name:#C18}
+  #C20 = <self::C>[#C4, #C7, #C10, #C13, #C16, #C19]
+  #C21 = 42
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_constructor.dart:
+- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
+- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
+- C.named3 (from org-dartlang-testcase:///redirecting_constructor.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..1d119a5
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::C> values = #C20;
+  final field core::String log;
+  static const field self::C a = #C4;
+  static const field self::C b = #C7;
+  static const field self::C c = #C10;
+  static const field self::C d = #C13;
+  static const field self::C e = #C16;
+  static const field self::C f = #C19;
+  const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
+    : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
+    ;
+  const constructor named1(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(index, name, x, y, z: z)
+    ;
+  const constructor named2(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = index, final core::String #t2 = name, final core::int #t3 = x, final core::int #t4 = z, this self::C::•(#t1, #t2, #t3, y, z: #t4)
+    ;
+  const constructor named3(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t5 = index, final core::String #t6 = name, final core::int #t7 = z, this self::C::•(#t5, #t6, x, y, z: #t7)
+    ;
+  method toString() → core::String
+    return "C.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", #C4.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C7.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C10.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C13.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C16.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C19.{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = "x=1, y=2, z=3"
+  #C2 = 0
+  #C3 = "a"
+  #C4 = self::C {log:#C1, index:#C2, _name:#C3}
+  #C5 = 1
+  #C6 = "b"
+  #C7 = self::C {log:#C1, index:#C5, _name:#C6}
+  #C8 = 2
+  #C9 = "c"
+  #C10 = self::C {log:#C1, index:#C8, _name:#C9}
+  #C11 = 3
+  #C12 = "d"
+  #C13 = self::C {log:#C1, index:#C11, _name:#C12}
+  #C14 = 4
+  #C15 = "e"
+  #C16 = self::C {log:#C1, index:#C14, _name:#C15}
+  #C17 = 5
+  #C18 = "f"
+  #C19 = self::C {log:#C1, index:#C17, _name:#C18}
+  #C20 = <self::C>[#C4, #C7, #C10, #C13, #C16, #C19]
+  #C21 = 42
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_constructor.dart:
+- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
+- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
+- C.named3 (from org-dartlang-testcase:///redirecting_constructor.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..d49769a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+enum C {
+  a(1, 2, z: 3),
+  b(z: 3, 1, 2),
+  c(1, z: 3, 2),
+  d.named1(1, 2, 3),
+  e.named2(1, 2, 3),
+  f.named3(1, 2, 3),
+  ;
+
+  final String log;
+  const C(int x, int y, {int z = 42}) : this.log = "x=$x, y=$y, z=$z";
+  const C.named1(int x, int y, int z) : this(x, y, z: z);
+  const C.named2(int x, int y, int z) : this(x, z: z, y);
+  const C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8fff920
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+enum C {
+  a(1, 2, z: 3),
+  b(z: 3, 1, 2),
+  c(1, z: 3, 2),
+  d.named1(1, 2, 3),
+  e.named2(1, 2, 3),
+  f.named3(1, 2, 3),
+  ;
+
+  final String log;
+  const C(int x, int y, {int z = 42}) : this.log = "x=$x, y=$y, z=$z";
+  const C.named1(int x, int y, int z) : this(x, y, z: z);
+  const C.named2(int x, int y, int z) : this(x, z: z, y);
+  const C.named3(int x, int y, int z) : this(z: z, x, y);
+}
+
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
new file mode 100644
index 0000000..20fc39a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::C> values = #C20;
+  final field core::String log;
+  static const field self::C a = #C4;
+  static const field self::C b = #C7;
+  static const field self::C c = #C10;
+  static const field self::C d = #C13;
+  static const field self::C e = #C16;
+  static const field self::C f = #C19;
+  const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
+    : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
+    ;
+  const constructor named1(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(index, name, x, y, z: z)
+    ;
+  const constructor named2(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = index, final core::String #t2 = name, final core::int #t3 = x, final core::int #t4 = z, this self::C::•(#t1, #t2, #t3, y, z: #t4)
+    ;
+  const constructor named3(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t5 = index, final core::String #t6 = name, final core::int #t7 = z, this self::C::•(#t5, #t6, x, y, z: #t7)
+    ;
+  method toString() → core::String
+    return "C.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", #C4.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C7.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C10.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C13.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C16.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C19.{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = "x=1, y=2, z=3"
+  #C2 = 0
+  #C3 = "a"
+  #C4 = self::C {log:#C1, index:#C2, _name:#C3}
+  #C5 = 1
+  #C6 = "b"
+  #C7 = self::C {log:#C1, index:#C5, _name:#C6}
+  #C8 = 2
+  #C9 = "c"
+  #C10 = self::C {log:#C1, index:#C8, _name:#C9}
+  #C11 = 3
+  #C12 = "d"
+  #C13 = self::C {log:#C1, index:#C11, _name:#C12}
+  #C14 = 4
+  #C15 = "e"
+  #C16 = self::C {log:#C1, index:#C14, _name:#C15}
+  #C17 = 5
+  #C18 = "f"
+  #C19 = self::C {log:#C1, index:#C17, _name:#C18}
+  #C20 = <self::C*>[#C4, #C7, #C10, #C13, #C16, #C19]
+  #C21 = 42
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_constructor.dart:
+- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
+- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
+- C.named3 (from org-dartlang-testcase:///redirecting_constructor.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..20fc39a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::C> values = #C20;
+  final field core::String log;
+  static const field self::C a = #C4;
+  static const field self::C b = #C7;
+  static const field self::C c = #C10;
+  static const field self::C d = #C13;
+  static const field self::C e = #C16;
+  static const field self::C f = #C19;
+  const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
+    : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
+    ;
+  const constructor named1(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(index, name, x, y, z: z)
+    ;
+  const constructor named2(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = index, final core::String #t2 = name, final core::int #t3 = x, final core::int #t4 = z, this self::C::•(#t1, #t2, #t3, y, z: #t4)
+    ;
+  const constructor named3(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t5 = index, final core::String #t6 = name, final core::int #t7 = z, this self::C::•(#t5, #t6, x, y, z: #t7)
+    ;
+  method toString() → core::String
+    return "C.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", #C4.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C7.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C10.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C13.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C16.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C19.{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = "x=1, y=2, z=3"
+  #C2 = 0
+  #C3 = "a"
+  #C4 = self::C {log:#C1, index:#C2, _name:#C3}
+  #C5 = 1
+  #C6 = "b"
+  #C7 = self::C {log:#C1, index:#C5, _name:#C6}
+  #C8 = 2
+  #C9 = "c"
+  #C10 = self::C {log:#C1, index:#C8, _name:#C9}
+  #C11 = 3
+  #C12 = "d"
+  #C13 = self::C {log:#C1, index:#C11, _name:#C12}
+  #C14 = 4
+  #C15 = "e"
+  #C16 = self::C {log:#C1, index:#C14, _name:#C15}
+  #C17 = 5
+  #C18 = "f"
+  #C19 = self::C {log:#C1, index:#C17, _name:#C18}
+  #C20 = <self::C*>[#C4, #C7, #C10, #C13, #C16, #C19]
+  #C21 = 42
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_constructor.dart:
+- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
+- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
+- C.named3 (from org-dartlang-testcase:///redirecting_constructor.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..d5fea66
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::C> values = const <self::C>[self::C::a, self::C::b, self::C::c, self::C::d, self::C::e, self::C::f];
+  final field core::String log;
+  static const field self::C a = const self::C::•(0, "a", 1, 2, z: 3);
+  static const field self::C b = let final core::int #t1 = 1 in let final core::String #t2 = "b" in let final core::int #t3 = 3 in const self::C::•(#t1, #t2, 1, 2, z: #t3);
+  static const field self::C c = let final core::int #t4 = 2 in let final core::String #t5 = "c" in let final core::int #t6 = 1 in let final core::int #t7 = 3 in const self::C::•(#t4, #t5, #t6, 2, z: #t7);
+  static const field self::C d = const self::C::named1(3, "d", 1, 2, 3);
+  static const field self::C e = const self::C::named2(4, "e", 1, 2, 3);
+  static const field self::C f = const self::C::named3(5, "f", 1, 2, 3);
+  const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = 42}) → self::C
+    : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
+    ;
+  const constructor named1(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(index, name, x, y, z: z)
+    ;
+  const constructor named2(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t8 = index, final core::String #t9 = name, final core::int #t10 = x, final core::int #t11 = z, this self::C::•(#t8, #t9, #t10, y, z: #t11)
+    ;
+  const constructor named3(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t12 = index, final core::String #t13 = name, final core::int #t14 = z, this self::C::•(#t12, #t13, x, y, z: #t14)
+    ;
+  method toString() → core::String
+    return "C.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///redirecting_constructor.dart:5:6 -> ListConstant(const <C*>[const C{C.log: "x=1, y=2, z=3", _Enum.index: 0, _Enum._name: "a"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 1, _Enum._name: "b"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 2, _Enum._name: "c"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 3, _Enum._name: "d"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 4, _Enum._name: "e"}, const C{C.log: "x=1, y=2, z=3", _Enum.index: 5, _Enum._name: "f"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:6:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 0, _Enum._name: "a"})
+Evaluated: Let @ org-dartlang-testcase:///redirecting_constructor.dart:7:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 1, _Enum._name: "b"})
+Evaluated: Let @ org-dartlang-testcase:///redirecting_constructor.dart:8:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 2, _Enum._name: "c"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:9:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 3, _Enum._name: "d"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:10:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 4, _Enum._name: "e"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_constructor.dart:11:3 -> InstanceConstant(const C{C.log: "x=1, y=2, z=3", _Enum.index: 5, _Enum._name: "f"})
+Extra constant evaluation: evaluated: 38, effectively constant: 7
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..20fc39a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::C> values = #C20;
+  final field core::String log;
+  static const field self::C a = #C4;
+  static const field self::C b = #C7;
+  static const field self::C c = #C10;
+  static const field self::C d = #C13;
+  static const field self::C e = #C16;
+  static const field self::C f = #C19;
+  const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
+    : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
+    ;
+  const constructor named1(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : this self::C::•(index, name, x, y, z: z)
+    ;
+  const constructor named2(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t1 = index, final core::String #t2 = name, final core::int #t3 = x, final core::int #t4 = z, this self::C::•(#t1, #t2, #t3, y, z: #t4)
+    ;
+  const constructor named3(core::int index, core::String name, core::int x, core::int y, core::int z) → self::C
+    : final core::int #t5 = index, final core::String #t6 = name, final core::int #t7 = z, this self::C::•(#t5, #t6, x, y, z: #t7)
+    ;
+  method toString() → core::String
+    return "C.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {
+  self::expect("x=1, y=2, z=3", #C4.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C7.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C10.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C13.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C16.{self::C::log}{core::String});
+  self::expect("x=1, y=2, z=3", #C19.{self::C::log}{core::String});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = "x=1, y=2, z=3"
+  #C2 = 0
+  #C3 = "a"
+  #C4 = self::C {log:#C1, index:#C2, _name:#C3}
+  #C5 = 1
+  #C6 = "b"
+  #C7 = self::C {log:#C1, index:#C5, _name:#C6}
+  #C8 = 2
+  #C9 = "c"
+  #C10 = self::C {log:#C1, index:#C8, _name:#C9}
+  #C11 = 3
+  #C12 = "d"
+  #C13 = self::C {log:#C1, index:#C11, _name:#C12}
+  #C14 = 4
+  #C15 = "e"
+  #C16 = self::C {log:#C1, index:#C14, _name:#C15}
+  #C17 = 5
+  #C18 = "f"
+  #C19 = self::C {log:#C1, index:#C17, _name:#C18}
+  #C20 = <self::C*>[#C4, #C7, #C10, #C13, #C16, #C19]
+  #C21 = 42
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///redirecting_constructor.dart:
+- C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
+- C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
+- C.named3 (from org-dartlang-testcase:///redirecting_constructor.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
index ffb1eca..309b974 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/qualified_names_with_no_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
index ffb1eca..309b974 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/qualified_names_with_no_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect
index bc9f7ff..e53cb1d 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline.expect
@@ -1,2 +1,7 @@
-enum E { a.b() ; const E.b(); }
+enum E {
+  a.b();
+
+  const E.b();
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e53cb1d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+enum E {
+  a.b();
+
+  const E.b();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/qualified_names_with_no_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/qualified_names_with_no_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/recovery_in_elements.dart b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart
new file mode 100644
index 0000000..cfe7ef0
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart
@@ -0,0 +1,15 @@
+// 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 {
+  element, // The declaration of the element is correct.
+
+  final String foo = "foo"; // Error: attempt to parse the field as an element.
+}
+
+test() {
+  return E.element; // No error: the element is added to the enum.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.strong.expect
new file mode 100644
index 0000000..a8b2f34
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.strong.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected an identifier, but got 'final'.
+// Try inserting an identifier before 'final'.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected '}' before this.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  return #C3;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///recovery_in_elements.dart:
+- E. (from org-dartlang-testcase:///recovery_in_elements.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/recovery_in_elements.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.strong.transformed.expect
new file mode 100644
index 0000000..a8b2f34
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.strong.transformed.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected an identifier, but got 'final'.
+// Try inserting an identifier before 'final'.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected '}' before this.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  return #C3;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///recovery_in_elements.dart:
+- E. (from org-dartlang-testcase:///recovery_in_elements.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/recovery_in_elements.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.textual_outline.expect
new file mode 100644
index 0000000..da5979b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E { element, final String foo = "foo"; }
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.expect
new file mode 100644
index 0000000..f5d37c6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected an identifier, but got 'final'.
+// Try inserting an identifier before 'final'.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected '}' before this.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  return #C3;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///recovery_in_elements.dart:
+- E. (from org-dartlang-testcase:///recovery_in_elements.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/recovery_in_elements.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.modular.expect
new file mode 100644
index 0000000..f5d37c6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected an identifier, but got 'final'.
+// Try inserting an identifier before 'final'.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected '}' before this.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  return #C3;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///recovery_in_elements.dart:
+- E. (from org-dartlang-testcase:///recovery_in_elements.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/recovery_in_elements.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.outline.expect
new file mode 100644
index 0000000..55b1431
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.outline.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected an identifier, but got 'final'.
+// Try inserting an identifier before 'final'.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected '}' before this.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+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::element];
+  static const field self::E element = const self::E::•(0, "element");
+  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}}";
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///recovery_in_elements.dart:5:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///recovery_in_elements.dart:6:3 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "element"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.transformed.expect
new file mode 100644
index 0000000..f5d37c6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart.weak.transformed.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected an identifier, but got 'final'.
+// Try inserting an identifier before 'final'.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/recovery_in_elements.dart:8:3: Error: Expected '}' before this.
+//   final String foo = "foo"; // Error: attempt to parse the field as an element.
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*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 core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  return #C3;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "element"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///recovery_in_elements.dart:
+- E. (from org-dartlang-testcase:///recovery_in_elements.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/redirecting_initializers.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
index 99bf4f6..2e42601 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
index 99bf4f6..2e42601 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
index 8246ad5..89a8e24 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline.expect
@@ -1,3 +1,19 @@
-enum E1 { one(1), two.named(2); final int foo; const E1(this.foo); const E1.named(int value) : this(value); }
-enum E2 { one(1), two.named(2); final int foo; const E2(this.foo); const E2.named(int value) : this(value, value); }
+enum E1 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+  const E1(this.foo);
+  const E1.named(int value) : this(value);
+}
+
+enum E2 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+  const E2(this.foo);
+  const E2.named(int value) : this(value, value);
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..89a8e24
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+enum E1 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+  const E1(this.foo);
+  const E1.named(int value) : this(value);
+}
+
+enum E2 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+  const E2(this.foo);
+  const E2.named(int value) : this(value, value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
index 352aa87..6b1338a 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
index 352aa87..6b1338a 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
index 6ded04c..b00ddd1 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
@@ -12,9 +12,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = const <self::E1>[self::E1::one, self::E1::two];
+  final field core::int foo;
   static const field self::E1 one = const self::E1::•(0, "one", 1);
   static const field self::E1 two = const self::E1::named(1, "two", 2);
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -26,9 +26,9 @@
 }
 class E2 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2> values = const <self::E2>[self::E2::one, self::E2::two];
+  final field core::int foo;
   static const field self::E2 one = const self::E2::•(0, "one", 1);
   static const field self::E2 two = const self::E2::named(1, "two", 2);
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
index 352aa87..6b1338a 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
index b546ffd..375eda9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
index b546ffd..375eda9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
index d11d9cd..0815587 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline.expect
@@ -1,3 +1,21 @@
-enum E1 { one(1), two.named(2); final int foo; const E1(this.foo); const E1.named(int value) : foo = value; }
-enum E2<X, Y> { one<int, String>(1, "one"), two.named("two", 2), three.named("three", "three"); final X foo; final Y bar; const E2(this.foo, this.bar); const E2.named(Y this.bar, X this.foo); }
+enum E1 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+  const E1(this.foo);
+  const E1.named(int value) : foo = value;
+}
+
+enum E2<X, Y> {
+  one<int, String>(1, "one"),
+  two.named("two", 2),
+  three.named("three", "three");
+
+  final X foo;
+  final Y bar;
+  const E2(this.foo, this.bar);
+  const E2.named(Y this.bar, X this.foo);
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0815587
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+enum E1 {
+  one(1),
+  two.named(2);
+
+  final int foo;
+  const E1(this.foo);
+  const E1.named(int value) : foo = value;
+}
+
+enum E2<X, Y> {
+  one<int, String>(1, "one"),
+  two.named("two", 2),
+  three.named("three", "three");
+
+  final X foo;
+  final Y bar;
+  const E2(this.foo, this.bar);
+  const E2.named(Y this.bar, X this.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
index c1e1607..88a8796 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
index c1e1607..88a8796 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
index e4af5a2..f072647 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = const <self::E1>[self::E1::one, self::E1::two];
+  final field core::int foo;
   static const field self::E1 one = const self::E1::•(0, "one", 1);
   static const field self::E1 two = const self::E1::named(1, "two", 2);
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = const <self::E2<dynamic, dynamic>>[self::E2::one, self::E2::two, self::E2::three];
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = const self::E2::•<core::int, core::String>(0, "one", 1, "one");
   static const field self::E2<core::int, core::String> two = const self::E2::named<core::int, core::String>(1, "two", "two", 2);
   static const field self::E2<core::String, core::String> three = const self::E2::named<core::String, core::String>(2, "three", "three", "three");
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
index c1e1607..88a8796 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
index 8c56fb4..0e0079c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
index 8c56fb4..0e0079c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect
index b33af83..0a18666 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline.expect
@@ -1,10 +1,30 @@
 abstract class I {
   void foo();
 }
-enum E1 implements I { one, two; void foo() {} }
+
+enum E1 implements I {
+  one,
+  two;
+
+  void foo() {}
+}
+
 enum E2 implements I { one, two }
-enum E3 implements I? { one, two; void foo() {} }
-enum E4 { one, two; void foo() {} }
+
+enum E3 implements I? {
+  one,
+  two;
+
+  void foo() {}
+}
+
+enum E4 {
+  one,
+  two;
+
+  void foo() {}
+}
+
 bar(I i) {}
 test(E1 e1, E2 e2, E3 e3, E4 e4) {}
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8fe40d6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.textual_outline_modelled.expect
@@ -0,0 +1,31 @@
+abstract class I {
+  void foo();
+}
+
+bar(I i) {}
+
+enum E1 implements I {
+  one,
+  two;
+
+  void foo() {}
+}
+
+enum E2 implements I { one, two }
+
+enum E3 implements I? {
+  one,
+  two;
+
+  void foo() {}
+}
+
+enum E4 {
+  one,
+  two;
+
+  void foo() {}
+}
+
+main() {}
+test(E1 e1, E2 e2, E3 e3, E4 e4) {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
index 6e10e5c..16540f3 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -77,7 +77,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -128,7 +128,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
index 4a5994b..ceb7cd71 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A extends core::_Enum implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M extends core::_Enum implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -78,7 +78,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -129,7 +129,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect
index 8e3abd8..a428d0b 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline.expect
@@ -1,15 +1,21 @@
 class A {
   String get foo => "foo";
 }
+
 class B {
   int bar() => 42;
 }
+
 mixin M {
   void set callOnAssignment(void Function() f) {}
 }
+
 enum E1 with A { one, two }
+
 enum E2 with A, B { one, two }
+
 enum E3 with M { one, two }
+
 expectEquals(x, y) {}
 expectThrows(void Function() f) {}
 void throwOnCall() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bd0fbf1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+class A {
+  String get foo => "foo";
+}
+
+class B {
+  int bar() => 42;
+}
+
+enum E1 with A { one, two }
+
+enum E2 with A, B { one, two }
+
+enum E3 with M { one, two }
+
+expectEquals(x, y) {}
+expectThrows(void Function() f) {}
+main() {}
+mixin M {
+  void set callOnAssignment(void Function() f) {}
+}
+void throwOnCall() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
index 82c66e8..62be6f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -77,7 +77,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -128,7 +128,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
index 82c66e8..62be6f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -77,7 +77,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -128,7 +128,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect
index abd958f..d37a555 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect
@@ -32,7 +32,7 @@
   const constructor •(core::int index, core::String name) → self::E1
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -55,7 +55,7 @@
   const constructor •(core::int index, core::String name) → self::E2
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -71,7 +71,7 @@
   const constructor •(core::int index, core::String name) → self::E3
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic
   ;
@@ -93,4 +93,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///simple_mixins.dart:23:6 -> ListConstant(const <E3*>[const E3{}, const E3{}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_mixins.dart:23:18 -> InstanceConstant(const E3{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_mixins.dart:23:23 -> InstanceConstant(const E3{})
-Extra constant evaluation: evaluated: 22, effectively constant: 9
+Extra constant evaluation: evaluated: 31, effectively constant: 9
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
index af40a65..fcb9129 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A extends core::_Enum implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M extends core::_Enum implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -78,7 +78,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
@@ -129,7 +129,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart
new file mode 100644
index 0000000..c21d902
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.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.
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {
+  new B(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..c38913d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  int field;
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e85d57e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.field);
+  int field;
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..03c7d16
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+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/enhanced_enums/super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options b/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options
new file mode 100644
index 0000000..3bea431
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options
@@ -0,0 +1 @@
+--enable-experiment=enhanced-enums,super-parameters
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart
new file mode 100644
index 0000000..7869a49
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart
@@ -0,0 +1,20 @@
+// 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.
+
+enum E1 {
+  element;
+
+  E1(); // Error.
+  E1.named(); // Error.
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super(); // Error.
+  const E2.named2() : super(42, "42"); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..47d7784
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+enum E1 {
+  element;
+
+  E1();
+  E1.named();
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super();
+  const E2.named2() : super(42, "42");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..47d7784
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+enum E1 {
+  element;
+
+  E1();
+  E1.named();
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super();
+  const E2.named2() : super(42, "42");
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..35667795
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // 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 invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    ;
+  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::one, self::E2::two];
+  static const field self::E2 one = const self::E2::named1(0, "one");
+  static const field self::E2 two = const self::E2::named2(1, "two");
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(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 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart
new file mode 100644
index 0000000..c21d902
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.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.
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {
+  new B(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..c38913d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  int field;
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e85d57e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.field);
+  int field;
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..03c7d16
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+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/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+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
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
index 2a27047..f4b5349 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/supertype_resolved_before_checking.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
index f14e87d..da949ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/supertype_resolved_before_checking.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
index 5874d3e..998e815 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline.expect
@@ -1,6 +1,12 @@
 mixin GM<T> on Enum {}
 mixin M on Object {}
+
 abstract class I {}
+
 abstract class GI<T> {}
-enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> { element }
+
+enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> {
+  element
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9a1883e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+abstract class GI<T> {}
+
+abstract class I {}
+
+enum E<S extends num, T extends num> with GM<T>, M implements I, GI<S> {
+  element
+}
+
+main() {}
+mixin GM<T> on Enum {}
+mixin M on Object {}
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
index 93e970e..5e0c562 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/supertype_resolved_before_checking.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
index 93e970e..5e0c562 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/supertype_resolved_before_checking.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
index 7647f76..b8c85bc 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
@@ -30,7 +30,7 @@
   const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic
   ;
@@ -39,4 +39,4 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6 -> ListConstant(const <E<dynamic, dynamic>*>[const E<num*, num*>{}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:18:27 -> InstanceConstant(const E<num*, num*>{})
-Extra constant evaluation: evaluated: 6, effectively constant: 2
+Extra constant evaluation: evaluated: 9, effectively constant: 2
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
index af64aef..737b8b8 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/evaluate_extension_method.expression.yaml b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml
new file mode 100644
index 0000000..ad1a058
--- /dev/null
+++ b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml
@@ -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.
+
+entry_point: "main.dart"
+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.
+expression: |
+  x.first.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
new file mode 100644
index 0000000..8545fba
--- /dev/null
+++ b/pkg/front_end/testcases/expression/evaluate_extension_method.expression.yaml.expect
@@ -0,0 +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*});
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
new file mode 100644
index 0000000..e43e163
--- /dev/null
+++ b/pkg/front_end/testcases/expression/evaluate_fold_on_list.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.
+
+entry_point: "main.dart"
+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: |
+  x.fold<int>(0, (previousValue, element) => previousValue + element.length)
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
new file mode 100644
index 0000000..84d4688
--- /dev/null
+++ b/pkg/front_end/testcases/expression/evaluate_fold_on_list.expression.yaml.expect
@@ -0,0 +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*};
diff --git a/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml
new file mode 100644
index 0000000..b6739e7
--- /dev/null
+++ b/pkg/front_end/testcases/expression/instantiate_enum.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.
+
+entry_point: "main.dart"
+definitions: []
+position: "main.dart"
+expression: |
+  En(123, 'foo')
diff --git a/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml.expect b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml.expect
new file mode 100644
index 0000000..447cbd7
--- /dev/null
+++ b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml.expect
@@ -0,0 +1,7 @@
+Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:1: Error: Enums can't be instantiated.
+  En(123, 'foo')
+  ^^
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: Enums can't be instantiated.\nEn(123, 'foo')\n^^";
diff --git a/pkg/front_end/testcases/expression/main.dart b/pkg/front_end/testcases/expression/main.dart
index 0c25d47..35045e1 100644
--- a/pkg/front_end/testcases/expression/main.dart
+++ b/pkg/front_end/testcases/expression/main.dart
@@ -100,3 +100,32 @@
   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/platform_isandroid.expression.yaml b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml
new file mode 100644
index 0000000..eabefb8
--- /dev/null
+++ b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml
@@ -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.
+
+entry_point: "main.dart"
+definitions: []
+position: "dart:io"
+static: true
+expression: |
+  Platform.isAndroid
diff --git a/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
new file mode 100644
index 0000000..872d5f9
--- /dev/null
+++ b/pkg/front_end/testcases/expression/platform_isandroid.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+static method /*isLegacy, from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return dart.io::Platform::isAndroid;
diff --git a/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml
new file mode 100644
index 0000000..5565212
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml
@@ -0,0 +1,15 @@
+# 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.
+
+entry_point: "main.dart"
+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
new file mode 100644
index 0000000..5865e1f
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation.expression.yaml.expect
@@ -0,0 +1,9 @@
+Errors: {
+  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.
+   - '_Closure' is from 'dart:core'.
+  Try changing 'call' to a method or explicitly invoke 'call'.
+  x().fold<int>(0, (previousValue, element) => previousValue + element.length)
+   ^
+}
+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));
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
new file mode 100644
index 0000000..f441fdd
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml
@@ -0,0 +1,15 @@
+# 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.
+
+entry_point: "main.dart"
+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
new file mode 100644
index 0000000..7b31ce4
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_closure_evaluation_2.expression.yaml.expect
@@ -0,0 +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));
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
new file mode 100644
index 0000000..c8bbfc0
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml
@@ -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.
+
+entry_point: "main.dart"
+definitions: ["x"]
+# List<String>
+definition_types: ["dart:core", "List", "1", "1", "dart:core", "String", "1", "0"]
+type_definitions: ["E"]
+# String
+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: |
+  () { List<E> y = []; x.addAll(y); }()
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
new file mode 100644
index 0000000..680d8c5
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_definition_bound_1.expression.yaml.expect
@@ -0,0 +1,7 @@
+Errors: {
+}
+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};
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
new file mode 100644
index 0000000..ca8e903
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml
@@ -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.
+
+entry_point: "main.dart"
+definitions: ["x"]
+# List<String>
+definition_types: ["dart:core", "List", "1", "1", "dart:core", "String", "1", "0"]
+type_definitions: ["E"]
+# String
+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: |
+  () { List<E> y = []; y.addAll(x); }
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
new file mode 100644
index 0000000..be07da0
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_definition_bound_2.expression.yaml.expect
@@ -0,0 +1,12 @@
+Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:31: Error: The argument type 'List<String>' can't be assigned to the parameter type 'Iterable<E>'.
+   - 'List' is from 'dart:core'.
+   - 'Iterable' is from 'dart:core'.
+  () { List<E> y = []; y.addAll(x); }
+                                ^
+}
+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};
+  };
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
new file mode 100644
index 0000000..80d4f5b
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_definition_bound_3.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.
+
+entry_point: "main.dart"
+definitions: []
+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
new file mode 100644
index 0000000..f70deb2
--- /dev/null
+++ b/pkg/front_end/testcases/expression/type_definition_bound_3.expression.yaml.expect
@@ -0,0 +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*);
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 adcb97b..739da7f 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
@@ -28,16 +28,16 @@
 static method Extension|asyncMethod(lowered final core::int* #this) → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -45,7 +45,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -58,7 +58,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
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 4e5d4b5..2aa57c8 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
@@ -17,18 +17,18 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error, :async_op) in null;
-        :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error) in null;
+        :result_or_exception;
         self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
         self::expect(0, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
         self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in let final core::int* #t5 = 0 in let final core::int* #t6 = 42 in let final void #t7 = def::Extension|set#property(#t5, #t6) in #t6);
@@ -38,7 +38,7 @@
         self::expect(87, let final core::Object* #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty = 87);
         self::expect(87, let final core::Object* #t12 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -46,7 +46,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -100,4 +100,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:31 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:45 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///deferred_explicit_access.dart:12:45 -> IntConstant(42)
-Extra constant evaluation: evaluated: 92, effectively constant: 3
+Extra constant evaluation: evaluated: 91, effectively constant: 3
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 299f5f6..f4d6fd7 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
@@ -9,18 +9,18 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error, :async_op) in null;
-        :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(LoadLibrary(prefix), :async_op_then, :async_op_error) in null;
+        :result_or_exception;
         self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
         self::expect(42, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::topLevelField = 42);
         self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in def::topLevelField);
@@ -29,7 +29,7 @@
         self::expect(87, let final core::Object* #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelProperty);
         self::expect(87, let final core::Object* #t8 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -37,7 +37,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart b/pkg/front_end/testcases/general/DeltaBlue.dart
index a69a085..1086dab 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart
@@ -18,7 +18,7 @@
 //
 // Translated first from Smalltalk to JavaScript, and finally to
 // Dart by Google 2008-2010.
-// @dart=2.9
+
 /**
  * A Dart implementation of the DeltaBlue constraint-solving
  * algorithm, as described in:
@@ -122,7 +122,7 @@
    * there is one, or nil, if there isn't.
    * Assume: I am not already satisfied.
    */
-  Constraint satisfy(mark) {
+  Constraint? satisfy(mark) {
     chooseMethod(mark);
     if (!isSatisfied()) {
       if (strength == REQUIRED) {
@@ -132,7 +132,7 @@
     }
     markInputs(mark);
     Variable out = output();
-    Constraint overridden = out.determinedBy;
+    Constraint? overridden = out.determinedBy;
     if (overridden != null) overridden.markUnsatisfied();
     out.determinedBy = this;
     if (!planner.addPropagate(this, mark)) print("Cycle encountered");
@@ -410,7 +410,7 @@
  **/
 class Variable {
   List<Constraint> constraints = <Constraint>[];
-  Constraint determinedBy;
+  Constraint? determinedBy;
   int mark = 0;
   Strength walkStrength = WEAKEST;
   bool stay = true;
@@ -453,7 +453,7 @@
    */
   void incrementalAdd(Constraint c) {
     int mark = newMark();
-    for (Constraint overridden = c.satisfy(mark);
+    for (Constraint? overridden = c.satisfy(mark);
         overridden != null;
         overridden = overridden.satisfy(mark));
   }
@@ -579,7 +579,7 @@
         Constraint c = v.constraints[i];
         if (!c.isSatisfied()) unsatisfied.add(c);
       }
-      Constraint determining = v.determinedBy;
+      Constraint? determining = v.determinedBy;
       for (int i = 0; i < v.constraints.length; i++) {
         Constraint next = v.constraints[i];
         if (next != determining && next.isSatisfied()) {
@@ -592,7 +592,7 @@
   }
 
   void addConstraintsConsumingTo(Variable v, List<Constraint> coll) {
-    Constraint determining = v.determinedBy;
+    Constraint? determining = v.determinedBy;
     for (int i = 0; i < v.constraints.length; i++) {
       Constraint c = v.constraints[i];
       if (c != determining && c.isSatisfied()) coll.add(c);
@@ -636,7 +636,7 @@
  */
 void chainTest(int n) {
   planner = new Planner();
-  Variable prev = null, first = null, last = null;
+  Variable? prev = null, first = null, last = null;
   // Build chain of n equality constraints.
   for (int i = 0; i <= n; i++) {
     Variable v = new Variable("v$i", 0);
@@ -645,8 +645,8 @@
     if (i == n) last = v;
     prev = v;
   }
-  new StayConstraint(last, STRONG_DEFAULT);
-  EditConstraint edit = new EditConstraint(first, PREFERRED);
+  new StayConstraint(last!, STRONG_DEFAULT);
+  EditConstraint edit = new EditConstraint(first!, PREFERRED);
   Plan plan = planner.extractPlanFromConstraints(<Constraint>[edit]);
   for (int i = 0; i < 100; i++) {
     first.value = i;
@@ -668,7 +668,7 @@
   planner = new Planner();
   Variable scale = new Variable("scale", 10);
   Variable offset = new Variable("offset", 1000);
-  Variable src = null, dst = null;
+  Variable? src = null, dst = null;
 
   List<Variable> dests = <Variable>[];
   for (int i = 0; i < n; i++) {
@@ -678,8 +678,8 @@
     new StayConstraint(src, NORMAL);
     new ScaleConstraint(src, scale, offset, dst, REQUIRED);
   }
-  change(src, 17);
-  if (dst.value != 1170) print("Projection 1 failed");
+  change(src!, 17);
+  if (dst!.value != 1170) print("Projection 1 failed");
   change(dst, 1050);
   if (src.value != 5) print("Projection 2 failed");
   change(scale, 5);
@@ -702,4 +702,4 @@
   edit.destroyConstraint();
 }
 
-Planner planner;
+late Planner planner;
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline.expect
index d32aa29..7b19b9f 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 
 class DeltaBlue {
@@ -45,7 +44,7 @@
   void execute();
   void recalculate();
   void addConstraint() {}
-  Constraint satisfy(mark) {}
+  Constraint? satisfy(mark) {}
   void destroyConstraint() {}
   bool isInput() => false;
 }
@@ -118,7 +117,7 @@
 
 class Variable {
   List<Constraint> constraints = <Constraint>[];
-  Constraint determinedBy;
+  Constraint? determinedBy;
   int mark = 0;
   Strength walkStrength = WEAKEST;
   bool stay = true;
@@ -151,4 +150,4 @@
 void chainTest(int n) {}
 void projectionTest(int n) {}
 void change(Variable v, int newValue) {}
-Planner planner;
+late Planner planner;
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline_modelled.expect
index 3e2df26..a9bbfdc 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.textual_outline_modelled.expect
@@ -1,6 +1,3 @@
-// @dart = 2.9
-Planner planner;
-
 abstract class BinaryConstraint extends Constraint {
   BinaryConstraint(this.v1, this.v2, Strength strength) : super(strength) {}
   Variable input() => direction == FORWARD ? v1 : v2;
@@ -17,9 +14,8 @@
   void recalculate() {}
   void removeFromGraph() {}
 }
-
 abstract class Constraint {
-  Constraint satisfy(mark) {}
+  Constraint? satisfy(mark) {}
   Variable output();
   bool inputsKnown(int mark);
   bool isInput() => false;
@@ -36,7 +32,6 @@
   void recalculate();
   void removeFromGraph();
 }
-
 abstract class UnaryConstraint extends Constraint {
   UnaryConstraint(this.myOutput, Strength strength) : super(strength) {}
   Variable output() => myOutput;
@@ -51,30 +46,24 @@
   void recalculate() {}
   void removeFromGraph() {}
 }
-
 class DeltaBlue {
   void run() {}
 }
-
 class EditConstraint extends UnaryConstraint {
   EditConstraint(Variable v, Strength str) : super(v, str);
   bool isInput() => true;
   void execute() {}
 }
-
 class EqualityConstraint extends BinaryConstraint {
-  EqualityConstraint(Variable v1, Variable v2, Strength strength)
-      : super(v1, v2, strength);
+  EqualityConstraint(Variable v1, Variable v2, Strength strength) : super(v1, v2, strength);
   void execute() {}
 }
-
 class Plan {
   List<Constraint> list = <Constraint>[];
   int size() => list.length;
   void addConstraint(Constraint c) {}
   void execute() {}
 }
-
 class Planner {
   List<Constraint> removePropagateFrom(Variable out) {}
   Plan extractPlanFromConstraints(List<Constraint> constraints) {}
@@ -86,11 +75,8 @@
   void incrementalAdd(Constraint c) {}
   void incrementalRemove(Constraint c) {}
 }
-
 class ScaleConstraint extends BinaryConstraint {
-  ScaleConstraint(
-      Variable src, this.scale, this.offset, Variable dest, Strength strength)
-      : super(src, dest, strength);
+  ScaleConstraint( Variable src, this.scale, this.offset, Variable dest, Strength strength) : super(src, dest, strength);
   final Variable offset;
   final Variable scale;
   void addToGraph() {}
@@ -99,21 +85,12 @@
   void recalculate() {}
   void removeFromGraph() {}
 }
-
 class StayConstraint extends UnaryConstraint {
   StayConstraint(Variable v, Strength str) : super(v, str);
   void execute() {}
 }
-
 class Strength {
-  Strength nextWeaker() => const <Strength>[
-        STRONG_PREFERRED,
-        PREFERRED,
-        STRONG_DEFAULT,
-        NORMAL,
-        WEAK_DEFAULT,
-        WEAKEST
-      ][value];
+  Strength nextWeaker() => const <Strength>[ STRONG_PREFERRED, PREFERRED, STRONG_DEFAULT, NORMAL, WEAK_DEFAULT, WEAKEST ][value];
   const Strength(this.value, this.name);
   final String name;
   final int value;
@@ -122,9 +99,8 @@
   static bool stronger(Strength s1, Strength s2) {}
   static bool weaker(Strength s1, Strength s2) {}
 }
-
 class Variable {
-  Constraint determinedBy;
+  Constraint? determinedBy;
   List<Constraint> constraints = <Constraint>[];
   Strength walkStrength = WEAKEST;
   Variable(this.name, this.value);
@@ -135,7 +111,6 @@
   void addConstraint(Constraint c) {}
   void removeConstraint(Constraint c) {}
 }
-
 const NORMAL = const Strength(4, "normal");
 const PREFERRED = const Strength(2, "preferred");
 const REQUIRED = const Strength(0, "required");
@@ -150,3 +125,7 @@
 void chainTest(int n) {}
 void change(Variable v, int newValue) {}
 void projectionTest(int n) {}
+---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+Planner planner;
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
index c7ae21e..8b0ef07 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.expect
@@ -1,512 +1,452 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class DeltaBlue extends core::Object {
-  synthetic constructor •() → self::DeltaBlue*
+  synthetic constructor •() → self::DeltaBlue
     : super core::Object::•()
     ;
   method run() → void {
     self::chainTest(100);
     self::projectionTest(100);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Strength extends core::Object /*hasConstConstructor*/  {
-  final field core::int* value;
-  final field core::String* name;
-  const constructor •(core::int* value, core::String* name) → self::Strength*
+  final field core::int value;
+  final field core::String name;
+  const constructor •(core::int value, core::String name) → self::Strength
     : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
     ;
-  method nextWeaker() → self::Strength*
-    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int*}){(core::int*) →* self::Strength*};
-  static method stronger(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}{core::int*}.{core::num::<}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  method nextWeaker() → self::Strength
+    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int}){(core::int) → self::Strength};
+  static method stronger(self::Strength s1, self::Strength s2) → core::bool {
+    return s1.{self::Strength::value}{core::int}.{core::num::<}(s2.{self::Strength::value}{core::int}){(core::num) → core::bool};
   }
-  static method weaker(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}{core::int*}.{core::num::>}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  static method weaker(self::Strength s1, self::Strength s2) → core::bool {
+    return s1.{self::Strength::value}{core::int}.{core::num::>}(s2.{self::Strength::value}{core::int}){(core::num) → core::bool};
   }
-  static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength* {
-    return self::Strength::weaker(s1, s2) ?{self::Strength*} s1 : s2;
+  static method weakest(self::Strength s1, self::Strength s2) → self::Strength {
+    return self::Strength::weaker(s1, s2) ?{self::Strength} s1 : s2;
   }
-  static method strongest(self::Strength* s1, self::Strength* s2) → self::Strength* {
-    return self::Strength::stronger(s1, s2) ?{self::Strength*} s1 : s2;
+  static method strongest(self::Strength s1, self::Strength s2) → self::Strength {
+    return self::Strength::stronger(s1, s2) ?{self::Strength} s1 : s2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Constraint extends core::Object /*hasConstConstructor*/  {
-  final field self::Strength* strength;
-  const constructor •(self::Strength* strength) → self::Constraint*
+  final field self::Strength strength;
+  const constructor •(self::Strength strength) → self::Constraint
     : self::Constraint::strength = strength, super core::Object::•()
     ;
-  abstract method isSatisfied() → core::bool*;
+  abstract method isSatisfied() → core::bool;
   abstract method markUnsatisfied() → void;
   abstract method addToGraph() → void;
   abstract method removeFromGraph() → void;
-  abstract method chooseMethod(core::int* mark) → void;
-  abstract method markInputs(core::int* mark) → void;
-  abstract method inputsKnown(core::int* mark) → core::bool*;
-  abstract method output() → self::Variable*;
+  abstract method chooseMethod(core::int mark) → void;
+  abstract method markInputs(core::int mark) → void;
+  abstract method inputsKnown(core::int mark) → core::bool;
+  abstract method output() → self::Variable;
   abstract method execute() → void;
   abstract method recalculate() → void;
   method addConstraint() → void {
-    this.{self::Constraint::addToGraph}(){() →* void};
-    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint*) →* void};
+    this.{self::Constraint::addToGraph}(){() → void};
+    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint) → void};
   }
-  method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-    if(!this.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
-      if(this.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} #C22) {
+  method satisfy(dynamic mark) → self::Constraint? {
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+    if(!this.{self::Constraint::isSatisfied}(){() → core::bool}) {
+      if(this.{self::Constraint::strength}{self::Strength} =={core::Object::==}{(core::Object) → core::bool} #C22) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-    self::Variable* out = this.{self::Constraint::output}(){() →* self::Variable*};
-    self::Constraint* overridden = out.{self::Variable::determinedBy}{self::Constraint*};
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+    self::Variable out = this.{self::Constraint::output}(){() → self::Variable};
+    self::Constraint? overridden = out.{self::Variable::determinedBy}{self::Constraint?};
     if(!(overridden == null))
-      overridden.{self::Constraint::markUnsatisfied}(){() →* void};
+      overridden{self::Constraint}.{self::Constraint::markUnsatisfied}(){() → void};
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*){(self::Constraint*, core::int*) →* core::bool*})
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(self::Constraint, core::int) → core::bool})
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     return overridden;
   }
   method destroyConstraint() → void {
-    if(this.{self::Constraint::isSatisfied}(){() →* core::bool*})
-      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint*) →* void};
-    this.{self::Constraint::removeFromGraph}(){() →* void};
+    if(this.{self::Constraint::isSatisfied}(){() → core::bool})
+      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint) → void};
+    this.{self::Constraint::removeFromGraph}(){() → void};
   }
-  method isInput() → core::bool*
+  method isInput() → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 UnaryConstraint extends self::Constraint {
-  final field self::Variable* myOutput;
-  field core::bool* satisfied = false;
-  constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
+  final field self::Variable myOutput;
+  field core::bool satisfied = false;
+  constructor •(self::Variable myOutput, self::Strength strength) → self::UnaryConstraint
     : self::UnaryConstraint::myOutput = myOutput, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}(){() →* void};
+    this.{self::Constraint::addConstraint}(){() → void};
   }
   method addToGraph() → void {
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
-  method chooseMethod(core::int* mark) → void {
-    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*});
+  method chooseMethod(core::int mark) → void {
+    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::walkStrength}{self::Strength});
   }
-  method isSatisfied() → core::bool*
-    return this.{self::UnaryConstraint::satisfied}{core::bool*};
-  method markInputs(core::int* mark) → void {}
-  method output() → self::Variable*
-    return this.{self::UnaryConstraint::myOutput}{self::Variable*};
+  method isSatisfied() → core::bool
+    return this.{self::UnaryConstraint::satisfied}{core::bool};
+  method markInputs(core::int mark) → void {}
+  method output() → self::Variable
+    return this.{self::UnaryConstraint::myOutput}{self::Variable};
   method recalculate() → void {
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength*};
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() →* core::bool*};
-    if(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay}{core::bool*})
-      this.{self::Constraint::execute}(){() →* void};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() → core::bool};
+    if(this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::stay}{core::bool})
+      this.{self::Constraint::execute}(){() → void};
   }
   method markUnsatisfied() → void {
     this.{self::UnaryConstraint::satisfied} = false;
   }
-  method inputsKnown(core::int* mark) → core::bool*
+  method inputsKnown(core::int mark) → core::bool
     return true;
   method removeFromGraph() → void {
-    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable*} == null))
-      this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable} == null))
+      this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
 }
 class StayConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::StayConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::StayConstraint
     : super self::UnaryConstraint::•(v, str)
     ;
   method execute() → void {}
 }
 class EditConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::EditConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::EditConstraint
     : super self::UnaryConstraint::•(v, str)
     ;
-  method isInput() → core::bool*
+  method isInput() → core::bool
     return true;
   method execute() → void {}
 }
 abstract class BinaryConstraint extends self::Constraint {
-  field self::Variable* v1;
-  field self::Variable* v2;
-  field core::int* direction = #C1;
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
+  field self::Variable v1;
+  field self::Variable v2;
+  field core::int direction = #C1;
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::BinaryConstraint
     : self::BinaryConstraint::v1 = v1, self::BinaryConstraint::v2 = v2, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}(){() →* void};
+    this.{self::Constraint::addConstraint}(){() → void};
   }
-  method chooseMethod(core::int* mark) → void {
-    if(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C1;
+  method chooseMethod(core::int mark) → void {
+    if(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C4 : #C1;
     }
-    if(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    if(this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C20 : #C1;
     }
-    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*})) {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength})) {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C20 : #C1;
     }
     else {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C20;
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C4 : #C20;
     }
   }
   method addToGraph() → void {
-    this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
-    this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
+    this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
-  method isSatisfied() → core::bool*
-    return !(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C1);
-  method markInputs(core::int* mark) → void {
-    this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+  method isSatisfied() → core::bool
+    return !(this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1);
+  method markInputs(core::int mark) → void {
+    this.{self::BinaryConstraint::input}(){() → self::Variable}.{self::Variable::mark} = mark;
   }
-  method input() → self::Variable*
-    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v1}{self::Variable*} : this.{self::BinaryConstraint::v2}{self::Variable*};
-  method output() → self::Variable*
-    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v2}{self::Variable*} : this.{self::BinaryConstraint::v1}{self::Variable*};
+  method input() → self::Variable
+    return this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4 ?{self::Variable} this.{self::BinaryConstraint::v1}{self::Variable} : this.{self::BinaryConstraint::v2}{self::Variable};
+  method output() → self::Variable
+    return this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4 ?{self::Variable} this.{self::BinaryConstraint::v2}{self::Variable} : this.{self::BinaryConstraint::v1}{self::Variable};
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*};
-    if(out.{self::Variable::stay}{core::bool*})
-      this.{self::Constraint::execute}(){() →* void};
+    self::Variable ihn = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    self::Variable out = this.{self::BinaryConstraint::output}(){() → self::Variable};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength}, ihn.{self::Variable::walkStrength}{self::Strength});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool};
+    if(out.{self::Variable::stay}{core::bool})
+      this.{self::Constraint::execute}(){() → void};
   }
   method markUnsatisfied() → void {
     this.{self::BinaryConstraint::direction} = #C1;
   }
-  method inputsKnown(core::int* mark) → core::bool* {
-    self::Variable* i = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    return i.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark || i.{self::Variable::stay}{core::bool*} || i.{self::Variable::determinedBy}{self::Constraint*} == null;
+  method inputsKnown(core::int mark) → core::bool {
+    self::Variable i = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    return i.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark || i.{self::Variable::stay}{core::bool} || i.{self::Variable::determinedBy}{self::Constraint?} == null;
   }
   method removeFromGraph() → void {
-    if(!(this.{self::BinaryConstraint::v1}{self::Variable*} == null))
-      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
-    if(!(this.{self::BinaryConstraint::v2}{self::Variable*} == null))
-      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::BinaryConstraint::v1}{self::Variable} == null))
+      this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
+    if(!(this.{self::BinaryConstraint::v2}{self::Variable} == null))
+      this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
 }
 class ScaleConstraint extends self::BinaryConstraint {
-  final field self::Variable* scale;
-  final field self::Variable* offset;
-  constructor •(self::Variable* src, self::Variable* scale, self::Variable* offset, self::Variable* dest, self::Strength* strength) → self::ScaleConstraint*
+  final field self::Variable scale;
+  final field self::Variable offset;
+  constructor •(self::Variable src, self::Variable scale, self::Variable offset, self::Variable dest, self::Strength strength) → self::ScaleConstraint
     : self::ScaleConstraint::scale = scale, self::ScaleConstraint::offset = offset, super self::BinaryConstraint::•(src, dest, strength)
     ;
   method addToGraph() → void {
     super.{self::BinaryConstraint::addToGraph}();
-    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
-    this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
+    this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
   }
   method removeFromGraph() → void {
     super.{self::BinaryConstraint::removeFromGraph}();
-    if(!(this.{self::ScaleConstraint::scale}{self::Variable*} == null))
-      this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
-    if(!(this.{self::ScaleConstraint::offset}{self::Variable*} == null))
-      this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::ScaleConstraint::scale}{self::Variable} == null))
+      this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
+    if(!(this.{self::ScaleConstraint::offset}{self::Variable} == null))
+      this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
   }
-  method markInputs(core::int* mark) → void {
+  method markInputs(core::int mark) → void {
     super.{self::BinaryConstraint::markInputs}(mark);
-    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::mark} = mark;
+    this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::mark} = mark;
   }
   method execute() → void {
-    if(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4) {
-      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+    if(this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4) {
+      this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::value}{core::int}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int};
     }
     else {
-      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+      this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::value}{core::int}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int};
     }
   }
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::stay}{core::bool*};
-    if(out.{self::Variable::stay}{core::bool*})
-      this.{self::ScaleConstraint::execute}(){() →* void};
+    self::Variable ihn = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    self::Variable out = this.{self::BinaryConstraint::output}(){() → self::Variable};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength}, ihn.{self::Variable::walkStrength}{self::Strength});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool} && this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::stay}{core::bool} && this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::stay}{core::bool};
+    if(out.{self::Variable::stay}{core::bool})
+      this.{self::ScaleConstraint::execute}(){() → void};
   }
 }
 class EqualityConstraint extends self::BinaryConstraint {
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::EqualityConstraint*
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::EqualityConstraint
     : super self::BinaryConstraint::•(v1, v2, strength)
     ;
   method execute() → void {
-    this.{self::BinaryConstraint::output}(){() →* self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::value}{core::int*};
+    this.{self::BinaryConstraint::output}(){() → self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() → self::Variable}.{self::Variable::value}{core::int};
   }
 }
 class Variable extends core::Object {
-  field core::List<self::Constraint*>* constraints = <self::Constraint*>[];
-  field self::Constraint* determinedBy = null;
-  field core::int* mark = 0;
-  field self::Strength* walkStrength = #C18;
-  field core::bool* stay = true;
-  field core::int* value;
-  final field core::String* name;
-  constructor •(core::String* name, core::int* value) → self::Variable*
+  field core::List<self::Constraint> constraints = <self::Constraint>[];
+  field self::Constraint? determinedBy = null;
+  field core::int mark = 0;
+  field self::Strength walkStrength = #C18;
+  field core::bool stay = true;
+  field core::int value;
+  final field core::String name;
+  constructor •(core::String name, core::int value) → self::Variable
     : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
     ;
-  method addConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraint(self::Constraint c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::add}(c){(self::Constraint) → void};
   }
-  method removeConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::remove}(c){(core::Object*) →* core::bool*};
-    if(this.{self::Variable::determinedBy}{self::Constraint*} =={self::Constraint::==}{(dynamic) →* core::bool*} c)
+  method removeConstraint(self::Constraint c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::remove}(c){(core::Object?) → core::bool};
+    if(this.{self::Variable::determinedBy}{self::Constraint?} =={core::Object::==}{(core::Object) → core::bool} c)
       this.{self::Variable::determinedBy} = 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
 }
 class Planner extends core::Object {
-  field core::int* currentMark = 0;
-  synthetic constructor •() → self::Planner*
+  field core::int currentMark = 0;
+  synthetic constructor •() → self::Planner
     : super core::Object::•()
     ;
-  method incrementalAdd(self::Constraint* c) → void {
-    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
-    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*}; !(overridden == null); overridden = overridden.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*})
+  method incrementalAdd(self::Constraint c) → void {
+    core::int mark = this.{self::Planner::newMark}(){() → core::int};
+    for (self::Constraint? overridden = c.{self::Constraint::satisfy}(mark){(dynamic) → self::Constraint?}; !(overridden == null); overridden = overridden{self::Constraint}.{self::Constraint::satisfy}(mark){(dynamic) → self::Constraint?})
       ;
   }
-  method incrementalRemove(self::Constraint* c) → void {
-    self::Variable* out = c.{self::Constraint::output}(){() →* self::Variable*};
-    c.{self::Constraint::markUnsatisfied}(){() →* void};
-    c.{self::Constraint::removeFromGraph}(){() →* void};
-    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable*) →* core::List<self::Constraint*>*};
-    self::Strength* strength = #C22;
+  method incrementalRemove(self::Constraint c) → void {
+    self::Variable out = c.{self::Constraint::output}(){() → self::Variable};
+    c.{self::Constraint::markUnsatisfied}(){() → void};
+    c.{self::Constraint::removeFromGraph}(){() → void};
+    core::List<self::Constraint> unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable) → core::List<self::Constraint>};
+    self::Strength strength = #C22;
     do {
-      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* u = unsatisfied.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(u.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} strength)
-          this.{self::Planner::incrementalAdd}(u){(self::Constraint*) →* void};
+      for (core::int i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint u = unsatisfied.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(u.{self::Constraint::strength}{self::Strength} =={core::Object::==}{(core::Object) → core::bool} strength)
+          this.{self::Planner::incrementalAdd}(u){(self::Constraint) → void};
       }
-      strength = strength.{self::Strength::nextWeaker}(){() →* self::Strength*};
+      strength = strength.{self::Strength::nextWeaker}(){() → self::Strength};
     }
-    while (!(strength =={self::Strength::==}{(dynamic) →* core::bool*} #C18))
+    while (!(strength =={core::Object::==}{(core::Object) → core::bool} #C18))
   }
-  method newMark() → core::int*
-    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  method makePlan(core::List<self::Constraint*>* sources) → self::Plan* {
-    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
-    self::Plan* plan = new self::Plan::•();
-    core::List<self::Constraint*>* todo = sources;
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Constraint* c = todo.{core::List::removeLast}(){() →* self::Constraint*};
-      if(!(c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int*) →* core::bool*}) {
-        plan.{self::Plan::addConstraint}(c){(self::Constraint*) →* void};
-        c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark} = mark;
-        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+  method newMark() → core::int
+    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  method makePlan(core::List<self::Constraint> sources) → self::Plan {
+    core::int mark = this.{self::Planner::newMark}(){() → core::int};
+    self::Plan plan = new self::Plan::•();
+    core::List<self::Constraint> todo = sources;
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Constraint c = todo.{core::List::removeLast}(){() → self::Constraint};
+      if(!(c.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int) → core::bool}) {
+        plan.{self::Plan::addConstraint}(c){(self::Constraint) → void};
+        c.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark} = mark;
+        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() → self::Variable}, todo){(self::Variable, core::List<self::Constraint>) → void};
       }
     }
     return plan;
   }
-  method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan* {
-    core::List<self::Constraint*>* sources = <self::Constraint*>[];
-    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      self::Constraint* c = constraints.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-      if(c.{self::Constraint::isInput}(){() →* core::bool*} && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-        sources.{core::List::add}(c){(self::Constraint*) →* void};
+  method extractPlanFromConstraints(core::List<self::Constraint> constraints) → self::Plan {
+    core::List<self::Constraint> sources = <self::Constraint>[];
+    for (core::int i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      self::Constraint c = constraints.{core::List::[]}(i){(core::int) → self::Constraint};
+      if(c.{self::Constraint::isInput}(){() → core::bool} && c.{self::Constraint::isSatisfied}(){() → core::bool})
+        sources.{core::List::add}(c){(self::Constraint) → void};
     }
-    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint*>*) →* self::Plan*};
+    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint>) → self::Plan};
   }
-  method addPropagate(self::Constraint* c, core::int* mark) → core::bool* {
-    core::List<self::Constraint*>* todo = <self::Constraint*>[c];
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Constraint* d = todo.{core::List::removeLast}(){() →* self::Constraint*};
-      if(d.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-        this.{self::Planner::incrementalRemove}(c){(self::Constraint*) →* void};
+  method addPropagate(self::Constraint c, core::int mark) → core::bool {
+    core::List<self::Constraint> todo = <self::Constraint>[c];
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Constraint d = todo.{core::List::removeLast}(){() → self::Constraint};
+      if(d.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+        this.{self::Planner::incrementalRemove}(c){(self::Constraint) → void};
         return false;
       }
-      d.{self::Constraint::recalculate}(){() →* void};
-      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+      d.{self::Constraint::recalculate}(){() → void};
+      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() → self::Variable}, todo){(self::Variable, core::List<self::Constraint>) → void};
     }
     return true;
   }
-  method removePropagateFrom(self::Variable* out) → core::List<self::Constraint*>* {
+  method removePropagateFrom(self::Variable out) → core::List<self::Constraint> {
     out.{self::Variable::determinedBy} = null;
     out.{self::Variable::walkStrength} = #C18;
     out.{self::Variable::stay} = true;
-    core::List<self::Constraint*>* unsatisfied = <self::Constraint*>[];
-    core::List<self::Variable*>* todo = <self::Variable*>[out];
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Variable* v = todo.{core::List::removeLast}(){() →* self::Variable*};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(!c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-          unsatisfied.{core::List::add}(c){(self::Constraint*) →* void};
+    core::List<self::Constraint> unsatisfied = <self::Constraint>[];
+    core::List<self::Variable> todo = <self::Variable>[out];
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Variable v = todo.{core::List::removeLast}(){() → self::Variable};
+      for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint c = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(!c.{self::Constraint::isSatisfied}(){() → core::bool})
+          unsatisfied.{core::List::add}(c){(self::Constraint) → void};
       }
-      self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* next = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(!(next =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && next.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
-          next.{self::Constraint::recalculate}(){() →* void};
-          todo.{core::List::add}(next.{self::Constraint::output}(){() →* self::Variable*}){(self::Variable*) →* void};
+      self::Constraint? determining = v.{self::Variable::determinedBy}{self::Constraint?};
+      for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint next = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(!(next =={core::Object::==}{(core::Object) → core::bool} determining) && next.{self::Constraint::isSatisfied}(){() → core::bool}) {
+          next.{self::Constraint::recalculate}(){() → void};
+          todo.{core::List::add}(next.{self::Constraint::output}(){() → self::Variable}){(self::Variable) → void};
         }
       }
     }
     return unsatisfied;
   }
-  method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void {
-    self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
-    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-      if(!(c =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-        coll.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraintsConsumingTo(self::Variable v, core::List<self::Constraint> coll) → void {
+    self::Constraint? determining = v.{self::Variable::determinedBy}{self::Constraint?};
+    for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      self::Constraint c = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+      if(!(c =={core::Object::==}{(core::Object) → core::bool} determining) && c.{self::Constraint::isSatisfied}(){() → core::bool})
+        coll.{core::List::add}(c){(self::Constraint) → void};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Plan extends core::Object {
-  field core::List<self::Constraint*>* list = <self::Constraint*>[];
-  synthetic constructor •() → self::Plan*
+  field core::List<self::Constraint> list = <self::Constraint>[];
+  synthetic constructor •() → self::Plan
     : super core::Object::•()
     ;
-  method addConstraint(self::Constraint* c) → void {
-    this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraint(self::Constraint c) → void {
+    this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::add}(c){(self::Constraint) → void};
   }
-  method size() → core::int*
-    return this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*};
+  method size() → core::int
+    return this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::length}{core::int};
   method execute() → void {
-    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*}.{self::Constraint::execute}(){() →* void};
+    for (core::int i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint}.{self::Constraint::execute}(){() → void};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 self::Strength* REQUIRED = #C22;
-static const field self::Strength* STRONG_PREFERRED = #C3;
-static const field self::Strength* PREFERRED = #C6;
-static const field self::Strength* STRONG_DEFAULT = #C9;
-static const field self::Strength* NORMAL = #C12;
-static const field self::Strength* WEAK_DEFAULT = #C15;
-static const field self::Strength* WEAKEST = #C18;
-static const field core::int* NONE = #C1;
-static const field core::int* FORWARD = #C4;
-static const field core::int* BACKWARD = #C20;
-static field self::Planner* planner;
+static const field self::Strength REQUIRED = #C22;
+static const field self::Strength STRONG_PREFERRED = #C3;
+static const field self::Strength PREFERRED = #C6;
+static const field self::Strength STRONG_DEFAULT = #C9;
+static const field self::Strength NORMAL = #C12;
+static const field self::Strength WEAK_DEFAULT = #C15;
+static const field self::Strength WEAKEST = #C18;
+static const field core::int NONE = #C1;
+static const field core::int FORWARD = #C4;
+static const field core::int BACKWARD = #C20;
+late static field self::Planner planner;
 static method main() → dynamic {
-  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() →* void};
+  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() → void};
 }
-static method chainTest(core::int* n) → void {
+static method chainTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable* prev = null;
-  self::Variable* first = null;
-  self::Variable* last = null;
-  for (core::int* i = 0; i.{core::num::<=}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    self::Variable* v = new self::Variable::•("v${i}", 0);
+  self::Variable? prev = null;
+  self::Variable? first = null;
+  self::Variable? last = null;
+  for (core::int i = 0; i.{core::num::<=}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    self::Variable v = new self::Variable::•("v${i}", 0);
     if(!(prev == null))
-      new self::EqualityConstraint::•(prev, v, #C22);
-    if(i =={core::num::==}{(core::Object*) →* core::bool*} 0)
+      new self::EqualityConstraint::•(prev{self::Variable}, v, #C22);
+    if(i =={core::num::==}{(core::Object) → core::bool} 0)
       first = v;
-    if(i =={core::num::==}{(core::Object*) →* core::bool*} n)
+    if(i =={core::num::==}{(core::Object) → core::bool} n)
       last = v;
     prev = v;
   }
-  new self::StayConstraint::•(last, #C9);
-  self::EditConstraint* edit = new self::EditConstraint::•(first, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    first.{self::Variable::value} = i;
-    plan.{self::Plan::execute}(){() →* void};
-    if(!(last.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i)) {
+  new self::StayConstraint::•(last!, #C9);
+  self::EditConstraint edit = new self::EditConstraint::•(first!, #C6);
+  self::Plan plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint>[edit]){(core::List<self::Constraint>) → self::Plan};
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    first{self::Variable}.{self::Variable::value} = i;
+    plan.{self::Plan::execute}(){() → void};
+    if(!(last{self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i)) {
       core::print("Chain test failed:");
-      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}{core::int*}}.");
+      core::print("Expected last value to be ${i} but it was ${last{self::Variable}.{self::Variable::value}{core::int}}.");
     }
   }
 }
-static method projectionTest(core::int* n) → void {
+static method projectionTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable* scale = new self::Variable::•("scale", 10);
-  self::Variable* offset = new self::Variable::•("offset", 1000);
-  self::Variable* src = null;
-  self::Variable* dst = null;
-  core::List<self::Variable*>* dests = <self::Variable*>[];
-  for (core::int* i = 0; i.{core::num::<}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  self::Variable scale = new self::Variable::•("scale", 10);
+  self::Variable offset = new self::Variable::•("offset", 1000);
+  self::Variable? src = null;
+  self::Variable? dst = null;
+  core::List<self::Variable> dests = <self::Variable>[];
+  for (core::int i = 0; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     src = new self::Variable::•("src", i);
     dst = new self::Variable::•("dst", i);
-    dests.{core::List::add}(dst){(self::Variable*) →* void};
-    new self::StayConstraint::•(src, #C12);
-    new self::ScaleConstraint::•(src, scale, offset, dst, #C22);
+    dests.{core::List::add}(dst{self::Variable}){(self::Variable) → void};
+    new self::StayConstraint::•(src{self::Variable}, #C12);
+    new self::ScaleConstraint::•(src{self::Variable}, scale, offset, dst{self::Variable}, #C22);
   }
-  self::change(src, 17);
-  if(!(dst.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1170))
+  self::change(src!, 17);
+  if(!(dst!.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} 1170))
     core::print("Projection 1 failed");
-  self::change(dst, 1050);
-  if(!(src.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 5))
+  self::change(dst{self::Variable}, 1050);
+  if(!(src{self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} 5))
     core::print("Projection 2 failed");
   self::change(scale, 5);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(1000){(core::num*) →* core::int*}))
+  for (core::int i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num) → core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(dests.{core::List::[]}(i){(core::int) → self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i.{core::num::*}(5){(core::num) → core::int}.{core::num::+}(1000){(core::num) → core::int}))
       core::print("Projection 3 failed");
   }
   self::change(offset, 2000);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(2000){(core::num*) →* core::int*}))
+  for (core::int i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num) → core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(dests.{core::List::[]}(i){(core::int) → self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i.{core::num::*}(5){(core::num) → core::int}.{core::num::+}(2000){(core::num) → core::int}))
       core::print("Projection 4 failed");
   }
 }
-static method change(self::Variable* v, core::int* newValue) → void {
-  self::EditConstraint* edit = new self::EditConstraint::•(v, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
-  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method change(self::Variable v, core::int newValue) → void {
+  self::EditConstraint edit = new self::EditConstraint::•(v, #C6);
+  self::Plan plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint>[edit]){(core::List<self::Constraint>) → self::Plan};
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     v.{self::Variable::value} = newValue;
-    plan.{self::Plan::execute}(){() →* void};
+    plan.{self::Plan::execute}(){() → void};
   }
-  edit.{self::Constraint::destroyConstraint}(){() →* void};
+  edit.{self::Constraint::destroyConstraint}(){() → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
index c7ae21e..8b0ef07 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.modular.expect
@@ -1,512 +1,452 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class DeltaBlue extends core::Object {
-  synthetic constructor •() → self::DeltaBlue*
+  synthetic constructor •() → self::DeltaBlue
     : super core::Object::•()
     ;
   method run() → void {
     self::chainTest(100);
     self::projectionTest(100);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Strength extends core::Object /*hasConstConstructor*/  {
-  final field core::int* value;
-  final field core::String* name;
-  const constructor •(core::int* value, core::String* name) → self::Strength*
+  final field core::int value;
+  final field core::String name;
+  const constructor •(core::int value, core::String name) → self::Strength
     : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
     ;
-  method nextWeaker() → self::Strength*
-    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int*}){(core::int*) →* self::Strength*};
-  static method stronger(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}{core::int*}.{core::num::<}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  method nextWeaker() → self::Strength
+    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int}){(core::int) → self::Strength};
+  static method stronger(self::Strength s1, self::Strength s2) → core::bool {
+    return s1.{self::Strength::value}{core::int}.{core::num::<}(s2.{self::Strength::value}{core::int}){(core::num) → core::bool};
   }
-  static method weaker(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}{core::int*}.{core::num::>}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  static method weaker(self::Strength s1, self::Strength s2) → core::bool {
+    return s1.{self::Strength::value}{core::int}.{core::num::>}(s2.{self::Strength::value}{core::int}){(core::num) → core::bool};
   }
-  static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength* {
-    return self::Strength::weaker(s1, s2) ?{self::Strength*} s1 : s2;
+  static method weakest(self::Strength s1, self::Strength s2) → self::Strength {
+    return self::Strength::weaker(s1, s2) ?{self::Strength} s1 : s2;
   }
-  static method strongest(self::Strength* s1, self::Strength* s2) → self::Strength* {
-    return self::Strength::stronger(s1, s2) ?{self::Strength*} s1 : s2;
+  static method strongest(self::Strength s1, self::Strength s2) → self::Strength {
+    return self::Strength::stronger(s1, s2) ?{self::Strength} s1 : s2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Constraint extends core::Object /*hasConstConstructor*/  {
-  final field self::Strength* strength;
-  const constructor •(self::Strength* strength) → self::Constraint*
+  final field self::Strength strength;
+  const constructor •(self::Strength strength) → self::Constraint
     : self::Constraint::strength = strength, super core::Object::•()
     ;
-  abstract method isSatisfied() → core::bool*;
+  abstract method isSatisfied() → core::bool;
   abstract method markUnsatisfied() → void;
   abstract method addToGraph() → void;
   abstract method removeFromGraph() → void;
-  abstract method chooseMethod(core::int* mark) → void;
-  abstract method markInputs(core::int* mark) → void;
-  abstract method inputsKnown(core::int* mark) → core::bool*;
-  abstract method output() → self::Variable*;
+  abstract method chooseMethod(core::int mark) → void;
+  abstract method markInputs(core::int mark) → void;
+  abstract method inputsKnown(core::int mark) → core::bool;
+  abstract method output() → self::Variable;
   abstract method execute() → void;
   abstract method recalculate() → void;
   method addConstraint() → void {
-    this.{self::Constraint::addToGraph}(){() →* void};
-    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint*) →* void};
+    this.{self::Constraint::addToGraph}(){() → void};
+    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint) → void};
   }
-  method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-    if(!this.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
-      if(this.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} #C22) {
+  method satisfy(dynamic mark) → self::Constraint? {
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+    if(!this.{self::Constraint::isSatisfied}(){() → core::bool}) {
+      if(this.{self::Constraint::strength}{self::Strength} =={core::Object::==}{(core::Object) → core::bool} #C22) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-    self::Variable* out = this.{self::Constraint::output}(){() →* self::Variable*};
-    self::Constraint* overridden = out.{self::Variable::determinedBy}{self::Constraint*};
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+    self::Variable out = this.{self::Constraint::output}(){() → self::Variable};
+    self::Constraint? overridden = out.{self::Variable::determinedBy}{self::Constraint?};
     if(!(overridden == null))
-      overridden.{self::Constraint::markUnsatisfied}(){() →* void};
+      overridden{self::Constraint}.{self::Constraint::markUnsatisfied}(){() → void};
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*){(self::Constraint*, core::int*) →* core::bool*})
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(self::Constraint, core::int) → core::bool})
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     return overridden;
   }
   method destroyConstraint() → void {
-    if(this.{self::Constraint::isSatisfied}(){() →* core::bool*})
-      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint*) →* void};
-    this.{self::Constraint::removeFromGraph}(){() →* void};
+    if(this.{self::Constraint::isSatisfied}(){() → core::bool})
+      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint) → void};
+    this.{self::Constraint::removeFromGraph}(){() → void};
   }
-  method isInput() → core::bool*
+  method isInput() → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 UnaryConstraint extends self::Constraint {
-  final field self::Variable* myOutput;
-  field core::bool* satisfied = false;
-  constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
+  final field self::Variable myOutput;
+  field core::bool satisfied = false;
+  constructor •(self::Variable myOutput, self::Strength strength) → self::UnaryConstraint
     : self::UnaryConstraint::myOutput = myOutput, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}(){() →* void};
+    this.{self::Constraint::addConstraint}(){() → void};
   }
   method addToGraph() → void {
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
-  method chooseMethod(core::int* mark) → void {
-    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*});
+  method chooseMethod(core::int mark) → void {
+    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::walkStrength}{self::Strength});
   }
-  method isSatisfied() → core::bool*
-    return this.{self::UnaryConstraint::satisfied}{core::bool*};
-  method markInputs(core::int* mark) → void {}
-  method output() → self::Variable*
-    return this.{self::UnaryConstraint::myOutput}{self::Variable*};
+  method isSatisfied() → core::bool
+    return this.{self::UnaryConstraint::satisfied}{core::bool};
+  method markInputs(core::int mark) → void {}
+  method output() → self::Variable
+    return this.{self::UnaryConstraint::myOutput}{self::Variable};
   method recalculate() → void {
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength*};
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() →* core::bool*};
-    if(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay}{core::bool*})
-      this.{self::Constraint::execute}(){() →* void};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() → core::bool};
+    if(this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::stay}{core::bool})
+      this.{self::Constraint::execute}(){() → void};
   }
   method markUnsatisfied() → void {
     this.{self::UnaryConstraint::satisfied} = false;
   }
-  method inputsKnown(core::int* mark) → core::bool*
+  method inputsKnown(core::int mark) → core::bool
     return true;
   method removeFromGraph() → void {
-    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable*} == null))
-      this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable} == null))
+      this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
 }
 class StayConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::StayConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::StayConstraint
     : super self::UnaryConstraint::•(v, str)
     ;
   method execute() → void {}
 }
 class EditConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::EditConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::EditConstraint
     : super self::UnaryConstraint::•(v, str)
     ;
-  method isInput() → core::bool*
+  method isInput() → core::bool
     return true;
   method execute() → void {}
 }
 abstract class BinaryConstraint extends self::Constraint {
-  field self::Variable* v1;
-  field self::Variable* v2;
-  field core::int* direction = #C1;
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
+  field self::Variable v1;
+  field self::Variable v2;
+  field core::int direction = #C1;
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::BinaryConstraint
     : self::BinaryConstraint::v1 = v1, self::BinaryConstraint::v2 = v2, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}(){() →* void};
+    this.{self::Constraint::addConstraint}(){() → void};
   }
-  method chooseMethod(core::int* mark) → void {
-    if(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C1;
+  method chooseMethod(core::int mark) → void {
+    if(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C4 : #C1;
     }
-    if(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    if(this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C20 : #C1;
     }
-    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*})) {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength})) {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C20 : #C1;
     }
     else {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C20;
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C4 : #C20;
     }
   }
   method addToGraph() → void {
-    this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
-    this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
+    this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
-  method isSatisfied() → core::bool*
-    return !(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C1);
-  method markInputs(core::int* mark) → void {
-    this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+  method isSatisfied() → core::bool
+    return !(this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1);
+  method markInputs(core::int mark) → void {
+    this.{self::BinaryConstraint::input}(){() → self::Variable}.{self::Variable::mark} = mark;
   }
-  method input() → self::Variable*
-    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v1}{self::Variable*} : this.{self::BinaryConstraint::v2}{self::Variable*};
-  method output() → self::Variable*
-    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v2}{self::Variable*} : this.{self::BinaryConstraint::v1}{self::Variable*};
+  method input() → self::Variable
+    return this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4 ?{self::Variable} this.{self::BinaryConstraint::v1}{self::Variable} : this.{self::BinaryConstraint::v2}{self::Variable};
+  method output() → self::Variable
+    return this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4 ?{self::Variable} this.{self::BinaryConstraint::v2}{self::Variable} : this.{self::BinaryConstraint::v1}{self::Variable};
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*};
-    if(out.{self::Variable::stay}{core::bool*})
-      this.{self::Constraint::execute}(){() →* void};
+    self::Variable ihn = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    self::Variable out = this.{self::BinaryConstraint::output}(){() → self::Variable};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength}, ihn.{self::Variable::walkStrength}{self::Strength});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool};
+    if(out.{self::Variable::stay}{core::bool})
+      this.{self::Constraint::execute}(){() → void};
   }
   method markUnsatisfied() → void {
     this.{self::BinaryConstraint::direction} = #C1;
   }
-  method inputsKnown(core::int* mark) → core::bool* {
-    self::Variable* i = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    return i.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark || i.{self::Variable::stay}{core::bool*} || i.{self::Variable::determinedBy}{self::Constraint*} == null;
+  method inputsKnown(core::int mark) → core::bool {
+    self::Variable i = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    return i.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark || i.{self::Variable::stay}{core::bool} || i.{self::Variable::determinedBy}{self::Constraint?} == null;
   }
   method removeFromGraph() → void {
-    if(!(this.{self::BinaryConstraint::v1}{self::Variable*} == null))
-      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
-    if(!(this.{self::BinaryConstraint::v2}{self::Variable*} == null))
-      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::BinaryConstraint::v1}{self::Variable} == null))
+      this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
+    if(!(this.{self::BinaryConstraint::v2}{self::Variable} == null))
+      this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
 }
 class ScaleConstraint extends self::BinaryConstraint {
-  final field self::Variable* scale;
-  final field self::Variable* offset;
-  constructor •(self::Variable* src, self::Variable* scale, self::Variable* offset, self::Variable* dest, self::Strength* strength) → self::ScaleConstraint*
+  final field self::Variable scale;
+  final field self::Variable offset;
+  constructor •(self::Variable src, self::Variable scale, self::Variable offset, self::Variable dest, self::Strength strength) → self::ScaleConstraint
     : self::ScaleConstraint::scale = scale, self::ScaleConstraint::offset = offset, super self::BinaryConstraint::•(src, dest, strength)
     ;
   method addToGraph() → void {
     super.{self::BinaryConstraint::addToGraph}();
-    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
-    this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
+    this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
   }
   method removeFromGraph() → void {
     super.{self::BinaryConstraint::removeFromGraph}();
-    if(!(this.{self::ScaleConstraint::scale}{self::Variable*} == null))
-      this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
-    if(!(this.{self::ScaleConstraint::offset}{self::Variable*} == null))
-      this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::ScaleConstraint::scale}{self::Variable} == null))
+      this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
+    if(!(this.{self::ScaleConstraint::offset}{self::Variable} == null))
+      this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
   }
-  method markInputs(core::int* mark) → void {
+  method markInputs(core::int mark) → void {
     super.{self::BinaryConstraint::markInputs}(mark);
-    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::mark} = mark;
+    this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::mark} = mark;
   }
   method execute() → void {
-    if(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4) {
-      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+    if(this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4) {
+      this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::value}{core::int}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int};
     }
     else {
-      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+      this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::value}{core::int}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int};
     }
   }
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::stay}{core::bool*};
-    if(out.{self::Variable::stay}{core::bool*})
-      this.{self::ScaleConstraint::execute}(){() →* void};
+    self::Variable ihn = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    self::Variable out = this.{self::BinaryConstraint::output}(){() → self::Variable};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength}, ihn.{self::Variable::walkStrength}{self::Strength});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool} && this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::stay}{core::bool} && this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::stay}{core::bool};
+    if(out.{self::Variable::stay}{core::bool})
+      this.{self::ScaleConstraint::execute}(){() → void};
   }
 }
 class EqualityConstraint extends self::BinaryConstraint {
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::EqualityConstraint*
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::EqualityConstraint
     : super self::BinaryConstraint::•(v1, v2, strength)
     ;
   method execute() → void {
-    this.{self::BinaryConstraint::output}(){() →* self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::value}{core::int*};
+    this.{self::BinaryConstraint::output}(){() → self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() → self::Variable}.{self::Variable::value}{core::int};
   }
 }
 class Variable extends core::Object {
-  field core::List<self::Constraint*>* constraints = <self::Constraint*>[];
-  field self::Constraint* determinedBy = null;
-  field core::int* mark = 0;
-  field self::Strength* walkStrength = #C18;
-  field core::bool* stay = true;
-  field core::int* value;
-  final field core::String* name;
-  constructor •(core::String* name, core::int* value) → self::Variable*
+  field core::List<self::Constraint> constraints = <self::Constraint>[];
+  field self::Constraint? determinedBy = null;
+  field core::int mark = 0;
+  field self::Strength walkStrength = #C18;
+  field core::bool stay = true;
+  field core::int value;
+  final field core::String name;
+  constructor •(core::String name, core::int value) → self::Variable
     : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
     ;
-  method addConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraint(self::Constraint c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::add}(c){(self::Constraint) → void};
   }
-  method removeConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::remove}(c){(core::Object*) →* core::bool*};
-    if(this.{self::Variable::determinedBy}{self::Constraint*} =={self::Constraint::==}{(dynamic) →* core::bool*} c)
+  method removeConstraint(self::Constraint c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::remove}(c){(core::Object?) → core::bool};
+    if(this.{self::Variable::determinedBy}{self::Constraint?} =={core::Object::==}{(core::Object) → core::bool} c)
       this.{self::Variable::determinedBy} = 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
 }
 class Planner extends core::Object {
-  field core::int* currentMark = 0;
-  synthetic constructor •() → self::Planner*
+  field core::int currentMark = 0;
+  synthetic constructor •() → self::Planner
     : super core::Object::•()
     ;
-  method incrementalAdd(self::Constraint* c) → void {
-    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
-    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*}; !(overridden == null); overridden = overridden.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*})
+  method incrementalAdd(self::Constraint c) → void {
+    core::int mark = this.{self::Planner::newMark}(){() → core::int};
+    for (self::Constraint? overridden = c.{self::Constraint::satisfy}(mark){(dynamic) → self::Constraint?}; !(overridden == null); overridden = overridden{self::Constraint}.{self::Constraint::satisfy}(mark){(dynamic) → self::Constraint?})
       ;
   }
-  method incrementalRemove(self::Constraint* c) → void {
-    self::Variable* out = c.{self::Constraint::output}(){() →* self::Variable*};
-    c.{self::Constraint::markUnsatisfied}(){() →* void};
-    c.{self::Constraint::removeFromGraph}(){() →* void};
-    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable*) →* core::List<self::Constraint*>*};
-    self::Strength* strength = #C22;
+  method incrementalRemove(self::Constraint c) → void {
+    self::Variable out = c.{self::Constraint::output}(){() → self::Variable};
+    c.{self::Constraint::markUnsatisfied}(){() → void};
+    c.{self::Constraint::removeFromGraph}(){() → void};
+    core::List<self::Constraint> unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable) → core::List<self::Constraint>};
+    self::Strength strength = #C22;
     do {
-      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* u = unsatisfied.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(u.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} strength)
-          this.{self::Planner::incrementalAdd}(u){(self::Constraint*) →* void};
+      for (core::int i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint u = unsatisfied.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(u.{self::Constraint::strength}{self::Strength} =={core::Object::==}{(core::Object) → core::bool} strength)
+          this.{self::Planner::incrementalAdd}(u){(self::Constraint) → void};
       }
-      strength = strength.{self::Strength::nextWeaker}(){() →* self::Strength*};
+      strength = strength.{self::Strength::nextWeaker}(){() → self::Strength};
     }
-    while (!(strength =={self::Strength::==}{(dynamic) →* core::bool*} #C18))
+    while (!(strength =={core::Object::==}{(core::Object) → core::bool} #C18))
   }
-  method newMark() → core::int*
-    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  method makePlan(core::List<self::Constraint*>* sources) → self::Plan* {
-    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
-    self::Plan* plan = new self::Plan::•();
-    core::List<self::Constraint*>* todo = sources;
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Constraint* c = todo.{core::List::removeLast}(){() →* self::Constraint*};
-      if(!(c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int*) →* core::bool*}) {
-        plan.{self::Plan::addConstraint}(c){(self::Constraint*) →* void};
-        c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark} = mark;
-        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+  method newMark() → core::int
+    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  method makePlan(core::List<self::Constraint> sources) → self::Plan {
+    core::int mark = this.{self::Planner::newMark}(){() → core::int};
+    self::Plan plan = new self::Plan::•();
+    core::List<self::Constraint> todo = sources;
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Constraint c = todo.{core::List::removeLast}(){() → self::Constraint};
+      if(!(c.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int) → core::bool}) {
+        plan.{self::Plan::addConstraint}(c){(self::Constraint) → void};
+        c.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark} = mark;
+        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() → self::Variable}, todo){(self::Variable, core::List<self::Constraint>) → void};
       }
     }
     return plan;
   }
-  method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan* {
-    core::List<self::Constraint*>* sources = <self::Constraint*>[];
-    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      self::Constraint* c = constraints.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-      if(c.{self::Constraint::isInput}(){() →* core::bool*} && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-        sources.{core::List::add}(c){(self::Constraint*) →* void};
+  method extractPlanFromConstraints(core::List<self::Constraint> constraints) → self::Plan {
+    core::List<self::Constraint> sources = <self::Constraint>[];
+    for (core::int i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      self::Constraint c = constraints.{core::List::[]}(i){(core::int) → self::Constraint};
+      if(c.{self::Constraint::isInput}(){() → core::bool} && c.{self::Constraint::isSatisfied}(){() → core::bool})
+        sources.{core::List::add}(c){(self::Constraint) → void};
     }
-    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint*>*) →* self::Plan*};
+    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint>) → self::Plan};
   }
-  method addPropagate(self::Constraint* c, core::int* mark) → core::bool* {
-    core::List<self::Constraint*>* todo = <self::Constraint*>[c];
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Constraint* d = todo.{core::List::removeLast}(){() →* self::Constraint*};
-      if(d.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-        this.{self::Planner::incrementalRemove}(c){(self::Constraint*) →* void};
+  method addPropagate(self::Constraint c, core::int mark) → core::bool {
+    core::List<self::Constraint> todo = <self::Constraint>[c];
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Constraint d = todo.{core::List::removeLast}(){() → self::Constraint};
+      if(d.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+        this.{self::Planner::incrementalRemove}(c){(self::Constraint) → void};
         return false;
       }
-      d.{self::Constraint::recalculate}(){() →* void};
-      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+      d.{self::Constraint::recalculate}(){() → void};
+      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() → self::Variable}, todo){(self::Variable, core::List<self::Constraint>) → void};
     }
     return true;
   }
-  method removePropagateFrom(self::Variable* out) → core::List<self::Constraint*>* {
+  method removePropagateFrom(self::Variable out) → core::List<self::Constraint> {
     out.{self::Variable::determinedBy} = null;
     out.{self::Variable::walkStrength} = #C18;
     out.{self::Variable::stay} = true;
-    core::List<self::Constraint*>* unsatisfied = <self::Constraint*>[];
-    core::List<self::Variable*>* todo = <self::Variable*>[out];
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Variable* v = todo.{core::List::removeLast}(){() →* self::Variable*};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(!c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-          unsatisfied.{core::List::add}(c){(self::Constraint*) →* void};
+    core::List<self::Constraint> unsatisfied = <self::Constraint>[];
+    core::List<self::Variable> todo = <self::Variable>[out];
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Variable v = todo.{core::List::removeLast}(){() → self::Variable};
+      for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint c = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(!c.{self::Constraint::isSatisfied}(){() → core::bool})
+          unsatisfied.{core::List::add}(c){(self::Constraint) → void};
       }
-      self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* next = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(!(next =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && next.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
-          next.{self::Constraint::recalculate}(){() →* void};
-          todo.{core::List::add}(next.{self::Constraint::output}(){() →* self::Variable*}){(self::Variable*) →* void};
+      self::Constraint? determining = v.{self::Variable::determinedBy}{self::Constraint?};
+      for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint next = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(!(next =={core::Object::==}{(core::Object) → core::bool} determining) && next.{self::Constraint::isSatisfied}(){() → core::bool}) {
+          next.{self::Constraint::recalculate}(){() → void};
+          todo.{core::List::add}(next.{self::Constraint::output}(){() → self::Variable}){(self::Variable) → void};
         }
       }
     }
     return unsatisfied;
   }
-  method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void {
-    self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
-    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-      if(!(c =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-        coll.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraintsConsumingTo(self::Variable v, core::List<self::Constraint> coll) → void {
+    self::Constraint? determining = v.{self::Variable::determinedBy}{self::Constraint?};
+    for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      self::Constraint c = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+      if(!(c =={core::Object::==}{(core::Object) → core::bool} determining) && c.{self::Constraint::isSatisfied}(){() → core::bool})
+        coll.{core::List::add}(c){(self::Constraint) → void};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Plan extends core::Object {
-  field core::List<self::Constraint*>* list = <self::Constraint*>[];
-  synthetic constructor •() → self::Plan*
+  field core::List<self::Constraint> list = <self::Constraint>[];
+  synthetic constructor •() → self::Plan
     : super core::Object::•()
     ;
-  method addConstraint(self::Constraint* c) → void {
-    this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraint(self::Constraint c) → void {
+    this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::add}(c){(self::Constraint) → void};
   }
-  method size() → core::int*
-    return this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*};
+  method size() → core::int
+    return this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::length}{core::int};
   method execute() → void {
-    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*}.{self::Constraint::execute}(){() →* void};
+    for (core::int i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint}.{self::Constraint::execute}(){() → void};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 self::Strength* REQUIRED = #C22;
-static const field self::Strength* STRONG_PREFERRED = #C3;
-static const field self::Strength* PREFERRED = #C6;
-static const field self::Strength* STRONG_DEFAULT = #C9;
-static const field self::Strength* NORMAL = #C12;
-static const field self::Strength* WEAK_DEFAULT = #C15;
-static const field self::Strength* WEAKEST = #C18;
-static const field core::int* NONE = #C1;
-static const field core::int* FORWARD = #C4;
-static const field core::int* BACKWARD = #C20;
-static field self::Planner* planner;
+static const field self::Strength REQUIRED = #C22;
+static const field self::Strength STRONG_PREFERRED = #C3;
+static const field self::Strength PREFERRED = #C6;
+static const field self::Strength STRONG_DEFAULT = #C9;
+static const field self::Strength NORMAL = #C12;
+static const field self::Strength WEAK_DEFAULT = #C15;
+static const field self::Strength WEAKEST = #C18;
+static const field core::int NONE = #C1;
+static const field core::int FORWARD = #C4;
+static const field core::int BACKWARD = #C20;
+late static field self::Planner planner;
 static method main() → dynamic {
-  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() →* void};
+  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() → void};
 }
-static method chainTest(core::int* n) → void {
+static method chainTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable* prev = null;
-  self::Variable* first = null;
-  self::Variable* last = null;
-  for (core::int* i = 0; i.{core::num::<=}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    self::Variable* v = new self::Variable::•("v${i}", 0);
+  self::Variable? prev = null;
+  self::Variable? first = null;
+  self::Variable? last = null;
+  for (core::int i = 0; i.{core::num::<=}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    self::Variable v = new self::Variable::•("v${i}", 0);
     if(!(prev == null))
-      new self::EqualityConstraint::•(prev, v, #C22);
-    if(i =={core::num::==}{(core::Object*) →* core::bool*} 0)
+      new self::EqualityConstraint::•(prev{self::Variable}, v, #C22);
+    if(i =={core::num::==}{(core::Object) → core::bool} 0)
       first = v;
-    if(i =={core::num::==}{(core::Object*) →* core::bool*} n)
+    if(i =={core::num::==}{(core::Object) → core::bool} n)
       last = v;
     prev = v;
   }
-  new self::StayConstraint::•(last, #C9);
-  self::EditConstraint* edit = new self::EditConstraint::•(first, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    first.{self::Variable::value} = i;
-    plan.{self::Plan::execute}(){() →* void};
-    if(!(last.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i)) {
+  new self::StayConstraint::•(last!, #C9);
+  self::EditConstraint edit = new self::EditConstraint::•(first!, #C6);
+  self::Plan plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::Constraint>[edit]){(core::List<self::Constraint>) → self::Plan};
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    first{self::Variable}.{self::Variable::value} = i;
+    plan.{self::Plan::execute}(){() → void};
+    if(!(last{self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i)) {
       core::print("Chain test failed:");
-      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}{core::int*}}.");
+      core::print("Expected last value to be ${i} but it was ${last{self::Variable}.{self::Variable::value}{core::int}}.");
     }
   }
 }
-static method projectionTest(core::int* n) → void {
+static method projectionTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable* scale = new self::Variable::•("scale", 10);
-  self::Variable* offset = new self::Variable::•("offset", 1000);
-  self::Variable* src = null;
-  self::Variable* dst = null;
-  core::List<self::Variable*>* dests = <self::Variable*>[];
-  for (core::int* i = 0; i.{core::num::<}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  self::Variable scale = new self::Variable::•("scale", 10);
+  self::Variable offset = new self::Variable::•("offset", 1000);
+  self::Variable? src = null;
+  self::Variable? dst = null;
+  core::List<self::Variable> dests = <self::Variable>[];
+  for (core::int i = 0; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     src = new self::Variable::•("src", i);
     dst = new self::Variable::•("dst", i);
-    dests.{core::List::add}(dst){(self::Variable*) →* void};
-    new self::StayConstraint::•(src, #C12);
-    new self::ScaleConstraint::•(src, scale, offset, dst, #C22);
+    dests.{core::List::add}(dst{self::Variable}){(self::Variable) → void};
+    new self::StayConstraint::•(src{self::Variable}, #C12);
+    new self::ScaleConstraint::•(src{self::Variable}, scale, offset, dst{self::Variable}, #C22);
   }
-  self::change(src, 17);
-  if(!(dst.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1170))
+  self::change(src!, 17);
+  if(!(dst!.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} 1170))
     core::print("Projection 1 failed");
-  self::change(dst, 1050);
-  if(!(src.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 5))
+  self::change(dst{self::Variable}, 1050);
+  if(!(src{self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} 5))
     core::print("Projection 2 failed");
   self::change(scale, 5);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(1000){(core::num*) →* core::int*}))
+  for (core::int i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num) → core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(dests.{core::List::[]}(i){(core::int) → self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i.{core::num::*}(5){(core::num) → core::int}.{core::num::+}(1000){(core::num) → core::int}))
       core::print("Projection 3 failed");
   }
   self::change(offset, 2000);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(2000){(core::num*) →* core::int*}))
+  for (core::int i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num) → core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(dests.{core::List::[]}(i){(core::int) → self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i.{core::num::*}(5){(core::num) → core::int}.{core::num::+}(2000){(core::num) → core::int}))
       core::print("Projection 4 failed");
   }
 }
-static method change(self::Variable* v, core::int* newValue) → void {
-  self::EditConstraint* edit = new self::EditConstraint::•(v, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint*>[edit]){(core::List<self::Constraint*>*) →* self::Plan*};
-  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method change(self::Variable v, core::int newValue) → void {
+  self::EditConstraint edit = new self::EditConstraint::•(v, #C6);
+  self::Plan plan = self::planner.{self::Planner::extractPlanFromConstraints}(<self::EditConstraint>[edit]){(core::List<self::Constraint>) → self::Plan};
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     v.{self::Variable::value} = newValue;
-    plan.{self::Plan::execute}(){() →* void};
+    plan.{self::Plan::execute}(){() → void};
   }
-  edit.{self::Constraint::destroyConstraint}(){() →* void};
+  edit.{self::Constraint::destroyConstraint}(){() → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.outline.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.outline.expect
index 61148bb..b97846c 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.outline.expect
@@ -1,159 +1,129 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class DeltaBlue extends core::Object {
-  synthetic constructor •() → self::DeltaBlue*
+  synthetic constructor •() → self::DeltaBlue
     ;
   method run() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Strength extends core::Object /*hasConstConstructor*/  {
-  final field core::int* value;
-  final field core::String* name;
-  const constructor •(core::int* value, core::String* name) → self::Strength*
+  final field core::int value;
+  final field core::String name;
+  const constructor •(core::int value, core::String name) → self::Strength
     : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
     ;
-  method nextWeaker() → self::Strength*
+  method nextWeaker() → self::Strength
     ;
-  static method stronger(self::Strength* s1, self::Strength* s2) → core::bool*
+  static method stronger(self::Strength s1, self::Strength s2) → core::bool
     ;
-  static method weaker(self::Strength* s1, self::Strength* s2) → core::bool*
+  static method weaker(self::Strength s1, self::Strength s2) → core::bool
     ;
-  static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength*
+  static method weakest(self::Strength s1, self::Strength s2) → self::Strength
     ;
-  static method strongest(self::Strength* s1, self::Strength* s2) → self::Strength*
+  static method strongest(self::Strength s1, self::Strength s2) → self::Strength
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Constraint extends core::Object /*hasConstConstructor*/  {
-  final field self::Strength* strength;
-  const constructor •(self::Strength* strength) → self::Constraint*
+  final field self::Strength strength;
+  const constructor •(self::Strength strength) → self::Constraint
     : self::Constraint::strength = strength, super core::Object::•()
     ;
-  abstract method isSatisfied() → core::bool*;
+  abstract method isSatisfied() → core::bool;
   abstract method markUnsatisfied() → void;
   abstract method addToGraph() → void;
   abstract method removeFromGraph() → void;
-  abstract method chooseMethod(core::int* mark) → void;
-  abstract method markInputs(core::int* mark) → void;
-  abstract method inputsKnown(core::int* mark) → core::bool*;
-  abstract method output() → self::Variable*;
+  abstract method chooseMethod(core::int mark) → void;
+  abstract method markInputs(core::int mark) → void;
+  abstract method inputsKnown(core::int mark) → core::bool;
+  abstract method output() → self::Variable;
   abstract method execute() → void;
   abstract method recalculate() → void;
   method addConstraint() → void
     ;
-  method satisfy(dynamic mark) → self::Constraint*
+  method satisfy(dynamic mark) → self::Constraint?
     ;
   method destroyConstraint() → void
     ;
-  method isInput() → core::bool*
+  method isInput() → 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
 }
 abstract class UnaryConstraint extends self::Constraint {
-  final field self::Variable* myOutput;
-  field core::bool* satisfied;
-  constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
+  final field self::Variable myOutput;
+  field core::bool satisfied;
+  constructor •(self::Variable myOutput, self::Strength strength) → self::UnaryConstraint
     ;
   method addToGraph() → void
     ;
-  method chooseMethod(core::int* mark) → void
+  method chooseMethod(core::int mark) → void
     ;
-  method isSatisfied() → core::bool*
+  method isSatisfied() → core::bool
     ;
-  method markInputs(core::int* mark) → void
+  method markInputs(core::int mark) → void
     ;
-  method output() → self::Variable*
+  method output() → self::Variable
     ;
   method recalculate() → void
     ;
   method markUnsatisfied() → void
     ;
-  method inputsKnown(core::int* mark) → core::bool*
+  method inputsKnown(core::int mark) → core::bool
     ;
   method removeFromGraph() → void
     ;
 }
 class StayConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::StayConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::StayConstraint
     ;
   method execute() → void
     ;
 }
 class EditConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::EditConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::EditConstraint
     ;
-  method isInput() → core::bool*
+  method isInput() → core::bool
     ;
   method execute() → void
     ;
 }
 abstract class BinaryConstraint extends self::Constraint {
-  field self::Variable* v1;
-  field self::Variable* v2;
-  field core::int* direction;
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
+  field self::Variable v1;
+  field self::Variable v2;
+  field core::int direction;
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::BinaryConstraint
     ;
-  method chooseMethod(core::int* mark) → void
+  method chooseMethod(core::int mark) → void
     ;
   method addToGraph() → void
     ;
-  method isSatisfied() → core::bool*
+  method isSatisfied() → core::bool
     ;
-  method markInputs(core::int* mark) → void
+  method markInputs(core::int mark) → void
     ;
-  method input() → self::Variable*
+  method input() → self::Variable
     ;
-  method output() → self::Variable*
+  method output() → self::Variable
     ;
   method recalculate() → void
     ;
   method markUnsatisfied() → void
     ;
-  method inputsKnown(core::int* mark) → core::bool*
+  method inputsKnown(core::int mark) → core::bool
     ;
   method removeFromGraph() → void
     ;
 }
 class ScaleConstraint extends self::BinaryConstraint {
-  final field self::Variable* scale;
-  final field self::Variable* offset;
-  constructor •(self::Variable* src, self::Variable* scale, self::Variable* offset, self::Variable* dest, self::Strength* strength) → self::ScaleConstraint*
+  final field self::Variable scale;
+  final field self::Variable offset;
+  constructor •(self::Variable src, self::Variable scale, self::Variable offset, self::Variable dest, self::Strength strength) → self::ScaleConstraint
     ;
   method addToGraph() → void
     ;
   method removeFromGraph() → void
     ;
-  method markInputs(core::int* mark) → void
+  method markInputs(core::int mark) → void
     ;
   method execute() → void
     ;
@@ -161,106 +131,76 @@
     ;
 }
 class EqualityConstraint extends self::BinaryConstraint {
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::EqualityConstraint*
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::EqualityConstraint
     ;
   method execute() → void
     ;
 }
 class Variable extends core::Object {
-  field core::List<self::Constraint*>* constraints;
-  field self::Constraint* determinedBy;
-  field core::int* mark;
-  field self::Strength* walkStrength;
-  field core::bool* stay;
-  field core::int* value;
-  final field core::String* name;
-  constructor •(core::String* name, core::int* value) → self::Variable*
+  field core::List<self::Constraint> constraints;
+  field self::Constraint? determinedBy;
+  field core::int mark;
+  field self::Strength walkStrength;
+  field core::bool stay;
+  field core::int value;
+  final field core::String name;
+  constructor •(core::String name, core::int value) → self::Variable
     ;
-  method addConstraint(self::Constraint* c) → void
+  method addConstraint(self::Constraint c) → void
     ;
-  method removeConstraint(self::Constraint* c) → void
+  method removeConstraint(self::Constraint 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 Planner extends core::Object {
-  field core::int* currentMark;
-  synthetic constructor •() → self::Planner*
+  field core::int currentMark;
+  synthetic constructor •() → self::Planner
     ;
-  method incrementalAdd(self::Constraint* c) → void
+  method incrementalAdd(self::Constraint c) → void
     ;
-  method incrementalRemove(self::Constraint* c) → void
+  method incrementalRemove(self::Constraint c) → void
     ;
-  method newMark() → core::int*
+  method newMark() → core::int
     ;
-  method makePlan(core::List<self::Constraint*>* sources) → self::Plan*
+  method makePlan(core::List<self::Constraint> sources) → self::Plan
     ;
-  method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan*
+  method extractPlanFromConstraints(core::List<self::Constraint> constraints) → self::Plan
     ;
-  method addPropagate(self::Constraint* c, core::int* mark) → core::bool*
+  method addPropagate(self::Constraint c, core::int mark) → core::bool
     ;
-  method removePropagateFrom(self::Variable* out) → core::List<self::Constraint*>*
+  method removePropagateFrom(self::Variable out) → core::List<self::Constraint>
     ;
-  method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void
+  method addConstraintsConsumingTo(self::Variable v, core::List<self::Constraint> coll) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Plan extends core::Object {
-  field core::List<self::Constraint*>* list;
-  synthetic constructor •() → self::Plan*
+  field core::List<self::Constraint> list;
+  synthetic constructor •() → self::Plan
     ;
-  method addConstraint(self::Constraint* c) → void
+  method addConstraint(self::Constraint c) → void
     ;
-  method size() → core::int*
+  method size() → core::int
     ;
   method execute() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 self::Strength* REQUIRED = const self::Strength::•(0, "required");
-static const field self::Strength* STRONG_PREFERRED = const self::Strength::•(1, "strongPreferred");
-static const field self::Strength* PREFERRED = const self::Strength::•(2, "preferred");
-static const field self::Strength* STRONG_DEFAULT = const self::Strength::•(3, "strongDefault");
-static const field self::Strength* NORMAL = const self::Strength::•(4, "normal");
-static const field self::Strength* WEAK_DEFAULT = const self::Strength::•(5, "weakDefault");
-static const field self::Strength* WEAKEST = const self::Strength::•(6, "weakest");
-static const field core::int* NONE = 1;
-static const field core::int* FORWARD = 2;
-static const field core::int* BACKWARD = 0;
-static field self::Planner* planner;
+static const field self::Strength REQUIRED = const self::Strength::•(0, "required");
+static const field self::Strength STRONG_PREFERRED = const self::Strength::•(1, "strongPreferred");
+static const field self::Strength PREFERRED = const self::Strength::•(2, "preferred");
+static const field self::Strength STRONG_DEFAULT = const self::Strength::•(3, "strongDefault");
+static const field self::Strength NORMAL = const self::Strength::•(4, "normal");
+static const field self::Strength WEAK_DEFAULT = const self::Strength::•(5, "weakDefault");
+static const field self::Strength WEAKEST = const self::Strength::•(6, "weakest");
+static const field core::int NONE = 1;
+static const field core::int FORWARD = 2;
+static const field core::int BACKWARD = 0;
+late static field self::Planner planner;
 static method main() → dynamic
   ;
-static method chainTest(core::int* n) → void
+static method chainTest(core::int n) → void
   ;
-static method projectionTest(core::int* n) → void
+static method projectionTest(core::int n) → void
   ;
-static method change(self::Variable* v, core::int* newValue) → void
+static method change(self::Variable v, core::int newValue) → void
   ;
 
 
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
index 2bbd69a..f39595d 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.weak.transformed.expect
@@ -1,512 +1,452 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class DeltaBlue extends core::Object {
-  synthetic constructor •() → self::DeltaBlue*
+  synthetic constructor •() → self::DeltaBlue
     : super core::Object::•()
     ;
   method run() → void {
     self::chainTest(100);
     self::projectionTest(100);
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Strength extends core::Object /*hasConstConstructor*/  {
-  final field core::int* value;
-  final field core::String* name;
-  const constructor •(core::int* value, core::String* name) → self::Strength*
+  final field core::int value;
+  final field core::String name;
+  const constructor •(core::int value, core::String name) → self::Strength
     : self::Strength::value = value, self::Strength::name = name, super core::Object::•()
     ;
-  method nextWeaker() → self::Strength*
-    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int*}){(core::int*) →* self::Strength*};
-  static method stronger(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}{core::int*}.{core::num::<}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  method nextWeaker() → self::Strength
+    return #C19.{core::List::[]}(this.{self::Strength::value}{core::int}){(core::int) → self::Strength};
+  static method stronger(self::Strength s1, self::Strength s2) → core::bool {
+    return s1.{self::Strength::value}{core::int}.{core::num::<}(s2.{self::Strength::value}{core::int}){(core::num) → core::bool};
   }
-  static method weaker(self::Strength* s1, self::Strength* s2) → core::bool* {
-    return s1.{self::Strength::value}{core::int*}.{core::num::>}(s2.{self::Strength::value}{core::int*}){(core::num*) →* core::bool*};
+  static method weaker(self::Strength s1, self::Strength s2) → core::bool {
+    return s1.{self::Strength::value}{core::int}.{core::num::>}(s2.{self::Strength::value}{core::int}){(core::num) → core::bool};
   }
-  static method weakest(self::Strength* s1, self::Strength* s2) → self::Strength* {
-    return self::Strength::weaker(s1, s2) ?{self::Strength*} s1 : s2;
+  static method weakest(self::Strength s1, self::Strength s2) → self::Strength {
+    return self::Strength::weaker(s1, s2) ?{self::Strength} s1 : s2;
   }
-  static method strongest(self::Strength* s1, self::Strength* s2) → self::Strength* {
-    return self::Strength::stronger(s1, s2) ?{self::Strength*} s1 : s2;
+  static method strongest(self::Strength s1, self::Strength s2) → self::Strength {
+    return self::Strength::stronger(s1, s2) ?{self::Strength} s1 : s2;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Constraint extends core::Object /*hasConstConstructor*/  {
-  final field self::Strength* strength;
-  const constructor •(self::Strength* strength) → self::Constraint*
+  final field self::Strength strength;
+  const constructor •(self::Strength strength) → self::Constraint
     : self::Constraint::strength = strength, super core::Object::•()
     ;
-  abstract method isSatisfied() → core::bool*;
+  abstract method isSatisfied() → core::bool;
   abstract method markUnsatisfied() → void;
   abstract method addToGraph() → void;
   abstract method removeFromGraph() → void;
-  abstract method chooseMethod(core::int* mark) → void;
-  abstract method markInputs(core::int* mark) → void;
-  abstract method inputsKnown(core::int* mark) → core::bool*;
-  abstract method output() → self::Variable*;
+  abstract method chooseMethod(core::int mark) → void;
+  abstract method markInputs(core::int mark) → void;
+  abstract method inputsKnown(core::int mark) → core::bool;
+  abstract method output() → self::Variable;
   abstract method execute() → void;
   abstract method recalculate() → void;
   method addConstraint() → void {
-    this.{self::Constraint::addToGraph}(){() →* void};
-    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint*) →* void};
+    this.{self::Constraint::addToGraph}(){() → void};
+    self::planner.{self::Planner::incrementalAdd}(this){(self::Constraint) → void};
   }
-  method satisfy(dynamic mark) → self::Constraint* {
-    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-    if(!this.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
-      if(this.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} #C22) {
+  method satisfy(dynamic mark) → self::Constraint? {
+    this.{self::Constraint::chooseMethod}(mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+    if(!this.{self::Constraint::isSatisfied}(){() → core::bool}) {
+      if(this.{self::Constraint::strength}{self::Strength} =={core::Object::==}{(core::Object) → core::bool} #C22) {
         core::print("Could not satisfy a required constraint!");
       }
       return null;
     }
-    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic} core::int*){(core::int*) →* void};
-    self::Variable* out = this.{self::Constraint::output}(){() →* self::Variable*};
-    self::Constraint* overridden = out.{self::Variable::determinedBy}{self::Constraint*};
+    this.{self::Constraint::markInputs}(mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+    self::Variable out = this.{self::Constraint::output}(){() → self::Variable};
+    self::Constraint? overridden = out.{self::Variable::determinedBy}{self::Constraint?};
     if(!(overridden == null))
-      overridden.{self::Constraint::markUnsatisfied}(){() →* void};
+      overridden{self::Constraint}.{self::Constraint::markUnsatisfied}(){() → void};
     out.{self::Variable::determinedBy} = this;
-    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic} core::int*){(self::Constraint*, core::int*) →* core::bool*})
+    if(!self::planner.{self::Planner::addPropagate}(this, mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(self::Constraint, core::int) → core::bool})
       core::print("Cycle encountered");
-    out.{self::Variable::mark} = mark as{TypeError,ForDynamic} core::int*;
+    out.{self::Variable::mark} = mark as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     return overridden;
   }
   method destroyConstraint() → void {
-    if(this.{self::Constraint::isSatisfied}(){() →* core::bool*})
-      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint*) →* void};
-    this.{self::Constraint::removeFromGraph}(){() →* void};
+    if(this.{self::Constraint::isSatisfied}(){() → core::bool})
+      self::planner.{self::Planner::incrementalRemove}(this){(self::Constraint) → void};
+    this.{self::Constraint::removeFromGraph}(){() → void};
   }
-  method isInput() → core::bool*
+  method isInput() → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 UnaryConstraint extends self::Constraint {
-  final field self::Variable* myOutput;
-  field core::bool* satisfied = false;
-  constructor •(self::Variable* myOutput, self::Strength* strength) → self::UnaryConstraint*
+  final field self::Variable myOutput;
+  field core::bool satisfied = false;
+  constructor •(self::Variable myOutput, self::Strength strength) → self::UnaryConstraint
     : self::UnaryConstraint::myOutput = myOutput, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}(){() →* void};
+    this.{self::Constraint::addConstraint}(){() → void};
   }
   method addToGraph() → void {
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
-  method chooseMethod(core::int* mark) → void {
-    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*});
+  method chooseMethod(core::int mark) → void {
+    this.{self::UnaryConstraint::satisfied} = !(this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::walkStrength}{self::Strength});
   }
-  method isSatisfied() → core::bool*
-    return this.{self::UnaryConstraint::satisfied}{core::bool*};
-  method markInputs(core::int* mark) → void {}
-  method output() → self::Variable*
-    return this.{self::UnaryConstraint::myOutput}{self::Variable*};
+  method isSatisfied() → core::bool
+    return this.{self::UnaryConstraint::satisfied}{core::bool};
+  method markInputs(core::int mark) → void {}
+  method output() → self::Variable
+    return this.{self::UnaryConstraint::myOutput}{self::Variable};
   method recalculate() → void {
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength*};
-    this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() →* core::bool*};
-    if(this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::stay}{core::bool*})
-      this.{self::Constraint::execute}(){() →* void};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::walkStrength} = this.{self::Constraint::strength}{self::Strength};
+    this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::stay} = !this.{self::Constraint::isInput}(){() → core::bool};
+    if(this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::stay}{core::bool})
+      this.{self::Constraint::execute}(){() → void};
   }
   method markUnsatisfied() → void {
     this.{self::UnaryConstraint::satisfied} = false;
   }
-  method inputsKnown(core::int* mark) → core::bool*
+  method inputsKnown(core::int mark) → core::bool
     return true;
   method removeFromGraph() → void {
-    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable*} == null))
-      this.{self::UnaryConstraint::myOutput}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::UnaryConstraint::myOutput}{self::Variable} == null))
+      this.{self::UnaryConstraint::myOutput}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
     this.{self::UnaryConstraint::satisfied} = false;
   }
 }
 class StayConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::StayConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::StayConstraint
     : super self::UnaryConstraint::•(v, str)
     ;
   method execute() → void {}
 }
 class EditConstraint extends self::UnaryConstraint {
-  constructor •(self::Variable* v, self::Strength* str) → self::EditConstraint*
+  constructor •(self::Variable v, self::Strength str) → self::EditConstraint
     : super self::UnaryConstraint::•(v, str)
     ;
-  method isInput() → core::bool*
+  method isInput() → core::bool
     return true;
   method execute() → void {}
 }
 abstract class BinaryConstraint extends self::Constraint {
-  field self::Variable* v1;
-  field self::Variable* v2;
-  field core::int* direction = #C1;
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::BinaryConstraint*
+  field self::Variable v1;
+  field self::Variable v2;
+  field core::int direction = #C1;
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::BinaryConstraint
     : self::BinaryConstraint::v1 = v1, self::BinaryConstraint::v2 = v2, super self::Constraint::•(strength) {
-    this.{self::Constraint::addConstraint}(){() →* void};
+    this.{self::Constraint::addConstraint}(){() → void};
   }
-  method chooseMethod(core::int* mark) → void {
-    if(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C1;
+  method chooseMethod(core::int mark) → void {
+    if(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C4 : #C1;
     }
-    if(this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    if(this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+      this.{self::BinaryConstraint::direction} = !(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C20 : #C1;
     }
-    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*})) {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C20 : #C1;
+    if(self::Strength::weaker(this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength})) {
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C20 : #C1;
     }
     else {
-      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength*}, this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::walkStrength}{self::Strength*}) ?{core::int*} #C4 : #C20;
+      this.{self::BinaryConstraint::direction} = self::Strength::stronger(this.{self::Constraint::strength}{self::Strength}, this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::walkStrength}{self::Strength}) ?{core::int} #C4 : #C20;
     }
   }
   method addToGraph() → void {
-    this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
-    this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
+    this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
-  method isSatisfied() → core::bool*
-    return !(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C1);
-  method markInputs(core::int* mark) → void {
-    this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::mark} = mark;
+  method isSatisfied() → core::bool
+    return !(this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1);
+  method markInputs(core::int mark) → void {
+    this.{self::BinaryConstraint::input}(){() → self::Variable}.{self::Variable::mark} = mark;
   }
-  method input() → self::Variable*
-    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v1}{self::Variable*} : this.{self::BinaryConstraint::v2}{self::Variable*};
-  method output() → self::Variable*
-    return this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4 ?{self::Variable*} this.{self::BinaryConstraint::v2}{self::Variable*} : this.{self::BinaryConstraint::v1}{self::Variable*};
+  method input() → self::Variable
+    return this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4 ?{self::Variable} this.{self::BinaryConstraint::v1}{self::Variable} : this.{self::BinaryConstraint::v2}{self::Variable};
+  method output() → self::Variable
+    return this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4 ?{self::Variable} this.{self::BinaryConstraint::v2}{self::Variable} : this.{self::BinaryConstraint::v1}{self::Variable};
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*};
-    if(out.{self::Variable::stay}{core::bool*})
-      this.{self::Constraint::execute}(){() →* void};
+    self::Variable ihn = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    self::Variable out = this.{self::BinaryConstraint::output}(){() → self::Variable};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength}, ihn.{self::Variable::walkStrength}{self::Strength});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool};
+    if(out.{self::Variable::stay}{core::bool})
+      this.{self::Constraint::execute}(){() → void};
   }
   method markUnsatisfied() → void {
     this.{self::BinaryConstraint::direction} = #C1;
   }
-  method inputsKnown(core::int* mark) → core::bool* {
-    self::Variable* i = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    return i.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark || i.{self::Variable::stay}{core::bool*} || i.{self::Variable::determinedBy}{self::Constraint*} == null;
+  method inputsKnown(core::int mark) → core::bool {
+    self::Variable i = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    return i.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark || i.{self::Variable::stay}{core::bool} || i.{self::Variable::determinedBy}{self::Constraint?} == null;
   }
   method removeFromGraph() → void {
-    if(!(this.{self::BinaryConstraint::v1}{self::Variable*} == null))
-      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
-    if(!(this.{self::BinaryConstraint::v2}{self::Variable*} == null))
-      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::BinaryConstraint::v1}{self::Variable} == null))
+      this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
+    if(!(this.{self::BinaryConstraint::v2}{self::Variable} == null))
+      this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
     this.{self::BinaryConstraint::direction} = #C1;
   }
 }
 class ScaleConstraint extends self::BinaryConstraint {
-  final field self::Variable* scale;
-  final field self::Variable* offset;
-  constructor •(self::Variable* src, self::Variable* scale, self::Variable* offset, self::Variable* dest, self::Strength* strength) → self::ScaleConstraint*
+  final field self::Variable scale;
+  final field self::Variable offset;
+  constructor •(self::Variable src, self::Variable scale, self::Variable offset, self::Variable dest, self::Strength strength) → self::ScaleConstraint
     : self::ScaleConstraint::scale = scale, self::ScaleConstraint::offset = offset, super self::BinaryConstraint::•(src, dest, strength)
     ;
   method addToGraph() → void {
     super.{self::BinaryConstraint::addToGraph}();
-    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
-    this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::addConstraint}(this){(self::Constraint*) →* void};
+    this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
+    this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::addConstraint}(this){(self::Constraint) → void};
   }
   method removeFromGraph() → void {
     super.{self::BinaryConstraint::removeFromGraph}();
-    if(!(this.{self::ScaleConstraint::scale}{self::Variable*} == null))
-      this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
-    if(!(this.{self::ScaleConstraint::offset}{self::Variable*} == null))
-      this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::removeConstraint}(this){(self::Constraint*) →* void};
+    if(!(this.{self::ScaleConstraint::scale}{self::Variable} == null))
+      this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
+    if(!(this.{self::ScaleConstraint::offset}{self::Variable} == null))
+      this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::removeConstraint}(this){(self::Constraint) → void};
   }
-  method markInputs(core::int* mark) → void {
+  method markInputs(core::int mark) → void {
     super.{self::BinaryConstraint::markInputs}(mark);
-    this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::mark} = mark;
+    this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::mark} = this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::mark} = mark;
   }
   method execute() → void {
-    if(this.{self::BinaryConstraint::direction}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} #C4) {
-      this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+    if(this.{self::BinaryConstraint::direction}{core::int} =={core::num::==}{(core::Object) → core::bool} #C4) {
+      this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::value}{core::int}.{core::num::*}(this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int}.{core::num::+}(this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int};
     }
     else {
-      this.{self::BinaryConstraint::v1}{self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable*}.{self::Variable::value}{core::int*}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::value}{core::int*}){(core::num*) →* core::int*};
+      this.{self::BinaryConstraint::v1}{self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::v2}{self::Variable}.{self::Variable::value}{core::int}.{core::num::-}(this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int}.{core::num::~/}(this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::value}{core::int}){(core::num) → core::int};
     }
   }
   method recalculate() → void {
-    self::Variable* ihn = this.{self::BinaryConstraint::input}(){() →* self::Variable*};
-    self::Variable* out = this.{self::BinaryConstraint::output}(){() →* self::Variable*};
-    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength*}, ihn.{self::Variable::walkStrength}{self::Strength*});
-    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::scale}{self::Variable*}.{self::Variable::stay}{core::bool*} && this.{self::ScaleConstraint::offset}{self::Variable*}.{self::Variable::stay}{core::bool*};
-    if(out.{self::Variable::stay}{core::bool*})
-      this.{self::ScaleConstraint::execute}(){() →* void};
+    self::Variable ihn = this.{self::BinaryConstraint::input}(){() → self::Variable};
+    self::Variable out = this.{self::BinaryConstraint::output}(){() → self::Variable};
+    out.{self::Variable::walkStrength} = self::Strength::weakest(this.{self::Constraint::strength}{self::Strength}, ihn.{self::Variable::walkStrength}{self::Strength});
+    out.{self::Variable::stay} = ihn.{self::Variable::stay}{core::bool} && this.{self::ScaleConstraint::scale}{self::Variable}.{self::Variable::stay}{core::bool} && this.{self::ScaleConstraint::offset}{self::Variable}.{self::Variable::stay}{core::bool};
+    if(out.{self::Variable::stay}{core::bool})
+      this.{self::ScaleConstraint::execute}(){() → void};
   }
 }
 class EqualityConstraint extends self::BinaryConstraint {
-  constructor •(self::Variable* v1, self::Variable* v2, self::Strength* strength) → self::EqualityConstraint*
+  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::EqualityConstraint
     : super self::BinaryConstraint::•(v1, v2, strength)
     ;
   method execute() → void {
-    this.{self::BinaryConstraint::output}(){() →* self::Variable*}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() →* self::Variable*}.{self::Variable::value}{core::int*};
+    this.{self::BinaryConstraint::output}(){() → self::Variable}.{self::Variable::value} = this.{self::BinaryConstraint::input}(){() → self::Variable}.{self::Variable::value}{core::int};
   }
 }
 class Variable extends core::Object {
-  field core::List<self::Constraint*>* constraints = core::_GrowableList::•<self::Constraint*>(0);
-  field self::Constraint* determinedBy = null;
-  field core::int* mark = 0;
-  field self::Strength* walkStrength = #C18;
-  field core::bool* stay = true;
-  field core::int* value;
-  final field core::String* name;
-  constructor •(core::String* name, core::int* value) → self::Variable*
+  field core::List<self::Constraint> constraints = core::_GrowableList::•<self::Constraint>(0);
+  field self::Constraint? determinedBy = null;
+  field core::int mark = 0;
+  field self::Strength walkStrength = #C18;
+  field core::bool stay = true;
+  field core::int value;
+  final field core::String name;
+  constructor •(core::String name, core::int value) → self::Variable
     : self::Variable::name = name, self::Variable::value = value, super core::Object::•()
     ;
-  method addConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraint(self::Constraint c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::add}(c){(self::Constraint) → void};
   }
-  method removeConstraint(self::Constraint* c) → void {
-    this.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::remove}(c){(core::Object*) →* core::bool*};
-    if(this.{self::Variable::determinedBy}{self::Constraint*} =={self::Constraint::==}{(dynamic) →* core::bool*} c)
+  method removeConstraint(self::Constraint c) → void {
+    this.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::remove}(c){(core::Object?) → core::bool};
+    if(this.{self::Variable::determinedBy}{self::Constraint?} =={core::Object::==}{(core::Object) → core::bool} c)
       this.{self::Variable::determinedBy} = 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
 }
 class Planner extends core::Object {
-  field core::int* currentMark = 0;
-  synthetic constructor •() → self::Planner*
+  field core::int currentMark = 0;
+  synthetic constructor •() → self::Planner
     : super core::Object::•()
     ;
-  method incrementalAdd(self::Constraint* c) → void {
-    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
-    for (self::Constraint* overridden = c.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*}; !(overridden == null); overridden = overridden.{self::Constraint::satisfy}(mark){(dynamic) →* self::Constraint*})
+  method incrementalAdd(self::Constraint c) → void {
+    core::int mark = this.{self::Planner::newMark}(){() → core::int};
+    for (self::Constraint? overridden = c.{self::Constraint::satisfy}(mark){(dynamic) → self::Constraint?}; !(overridden == null); overridden = overridden{self::Constraint}.{self::Constraint::satisfy}(mark){(dynamic) → self::Constraint?})
       ;
   }
-  method incrementalRemove(self::Constraint* c) → void {
-    self::Variable* out = c.{self::Constraint::output}(){() →* self::Variable*};
-    c.{self::Constraint::markUnsatisfied}(){() →* void};
-    c.{self::Constraint::removeFromGraph}(){() →* void};
-    core::List<self::Constraint*>* unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable*) →* core::List<self::Constraint*>*};
-    self::Strength* strength = #C22;
+  method incrementalRemove(self::Constraint c) → void {
+    self::Variable out = c.{self::Constraint::output}(){() → self::Variable};
+    c.{self::Constraint::markUnsatisfied}(){() → void};
+    c.{self::Constraint::removeFromGraph}(){() → void};
+    core::List<self::Constraint> unsatisfied = this.{self::Planner::removePropagateFrom}(out){(self::Variable) → core::List<self::Constraint>};
+    self::Strength strength = #C22;
     do {
-      for (core::int* i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* u = unsatisfied.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(u.{self::Constraint::strength}{self::Strength*} =={self::Strength::==}{(dynamic) →* core::bool*} strength)
-          this.{self::Planner::incrementalAdd}(u){(self::Constraint*) →* void};
+      for (core::int i = 0; i.{core::num::<}(unsatisfied.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint u = unsatisfied.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(u.{self::Constraint::strength}{self::Strength} =={core::Object::==}{(core::Object) → core::bool} strength)
+          this.{self::Planner::incrementalAdd}(u){(self::Constraint) → void};
       }
-      strength = strength.{self::Strength::nextWeaker}(){() →* self::Strength*};
+      strength = strength.{self::Strength::nextWeaker}(){() → self::Strength};
     }
-    while (!(strength =={self::Strength::==}{(dynamic) →* core::bool*} #C18))
+    while (!(strength =={core::Object::==}{(core::Object) → core::bool} #C18))
   }
-  method newMark() → core::int*
-    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  method makePlan(core::List<self::Constraint*>* sources) → self::Plan* {
-    core::int* mark = this.{self::Planner::newMark}(){() →* core::int*};
-    self::Plan* plan = new self::Plan::•();
-    core::List<self::Constraint*>* todo = sources;
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Constraint* c = todo.{core::List::removeLast}(){() →* self::Constraint*};
-      if(!(c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int*) →* core::bool*}) {
-        plan.{self::Plan::addConstraint}(c){(self::Constraint*) →* void};
-        c.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark} = mark;
-        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+  method newMark() → core::int
+    return this.{self::Planner::currentMark} = this.{self::Planner::currentMark}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  method makePlan(core::List<self::Constraint> sources) → self::Plan {
+    core::int mark = this.{self::Planner::newMark}(){() → core::int};
+    self::Plan plan = new self::Plan::•();
+    core::List<self::Constraint> todo = sources;
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Constraint c = todo.{core::List::removeLast}(){() → self::Constraint};
+      if(!(c.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) && c.{self::Constraint::inputsKnown}(mark){(core::int) → core::bool}) {
+        plan.{self::Plan::addConstraint}(c){(self::Constraint) → void};
+        c.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark} = mark;
+        this.{self::Planner::addConstraintsConsumingTo}(c.{self::Constraint::output}(){() → self::Variable}, todo){(self::Variable, core::List<self::Constraint>) → void};
       }
     }
     return plan;
   }
-  method extractPlanFromConstraints(core::List<self::Constraint*>* constraints) → self::Plan* {
-    core::List<self::Constraint*>* sources = core::_GrowableList::•<self::Constraint*>(0);
-    for (core::int* i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      self::Constraint* c = constraints.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-      if(c.{self::Constraint::isInput}(){() →* core::bool*} && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-        sources.{core::List::add}(c){(self::Constraint*) →* void};
+  method extractPlanFromConstraints(core::List<self::Constraint> constraints) → self::Plan {
+    core::List<self::Constraint> sources = core::_GrowableList::•<self::Constraint>(0);
+    for (core::int i = 0; i.{core::num::<}(constraints.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      self::Constraint c = constraints.{core::List::[]}(i){(core::int) → self::Constraint};
+      if(c.{self::Constraint::isInput}(){() → core::bool} && c.{self::Constraint::isSatisfied}(){() → core::bool})
+        sources.{core::List::add}(c){(self::Constraint) → void};
     }
-    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint*>*) →* self::Plan*};
+    return this.{self::Planner::makePlan}(sources){(core::List<self::Constraint>) → self::Plan};
   }
-  method addPropagate(self::Constraint* c, core::int* mark) → core::bool* {
-    core::List<self::Constraint*>* todo = core::_GrowableList::_literal1<self::Constraint*>(c);
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Constraint* d = todo.{core::List::removeLast}(){() →* self::Constraint*};
-      if(d.{self::Constraint::output}(){() →* self::Variable*}.{self::Variable::mark}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} mark) {
-        this.{self::Planner::incrementalRemove}(c){(self::Constraint*) →* void};
+  method addPropagate(self::Constraint c, core::int mark) → core::bool {
+    core::List<self::Constraint> todo = core::_GrowableList::_literal1<self::Constraint>(c);
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Constraint d = todo.{core::List::removeLast}(){() → self::Constraint};
+      if(d.{self::Constraint::output}(){() → self::Variable}.{self::Variable::mark}{core::int} =={core::num::==}{(core::Object) → core::bool} mark) {
+        this.{self::Planner::incrementalRemove}(c){(self::Constraint) → void};
         return false;
       }
-      d.{self::Constraint::recalculate}(){() →* void};
-      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() →* self::Variable*}, todo){(self::Variable*, core::List<self::Constraint*>*) →* void};
+      d.{self::Constraint::recalculate}(){() → void};
+      this.{self::Planner::addConstraintsConsumingTo}(d.{self::Constraint::output}(){() → self::Variable}, todo){(self::Variable, core::List<self::Constraint>) → void};
     }
     return true;
   }
-  method removePropagateFrom(self::Variable* out) → core::List<self::Constraint*>* {
+  method removePropagateFrom(self::Variable out) → core::List<self::Constraint> {
     out.{self::Variable::determinedBy} = null;
     out.{self::Variable::walkStrength} = #C18;
     out.{self::Variable::stay} = true;
-    core::List<self::Constraint*>* unsatisfied = core::_GrowableList::•<self::Constraint*>(0);
-    core::List<self::Variable*>* todo = core::_GrowableList::_literal1<self::Variable*>(out);
-    while (todo.{core::List::length}{core::int*}.{core::num::>}(0){(core::num*) →* core::bool*}) {
-      self::Variable* v = todo.{core::List::removeLast}(){() →* self::Variable*};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(!c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-          unsatisfied.{core::List::add}(c){(self::Constraint*) →* void};
+    core::List<self::Constraint> unsatisfied = core::_GrowableList::•<self::Constraint>(0);
+    core::List<self::Variable> todo = core::_GrowableList::_literal1<self::Variable>(out);
+    while (todo.{core::List::length}{core::int}.{core::num::>}(0){(core::num) → core::bool}) {
+      self::Variable v = todo.{core::List::removeLast}(){() → self::Variable};
+      for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint c = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(!c.{self::Constraint::isSatisfied}(){() → core::bool})
+          unsatisfied.{core::List::add}(c){(self::Constraint) → void};
       }
-      self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
-      for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-        self::Constraint* next = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-        if(!(next =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && next.{self::Constraint::isSatisfied}(){() →* core::bool*}) {
-          next.{self::Constraint::recalculate}(){() →* void};
-          todo.{core::List::add}(next.{self::Constraint::output}(){() →* self::Variable*}){(self::Variable*) →* void};
+      self::Constraint? determining = v.{self::Variable::determinedBy}{self::Constraint?};
+      for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+        self::Constraint next = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+        if(!(next =={core::Object::==}{(core::Object) → core::bool} determining) && next.{self::Constraint::isSatisfied}(){() → core::bool}) {
+          next.{self::Constraint::recalculate}(){() → void};
+          todo.{core::List::add}(next.{self::Constraint::output}(){() → self::Variable}){(self::Variable) → void};
         }
       }
     }
     return unsatisfied;
   }
-  method addConstraintsConsumingTo(self::Variable* v, core::List<self::Constraint*>* coll) → void {
-    self::Constraint* determining = v.{self::Variable::determinedBy}{self::Constraint*};
-    for (core::int* i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      self::Constraint* c = v.{self::Variable::constraints}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*};
-      if(!(c =={self::Constraint::==}{(dynamic) →* core::bool*} determining) && c.{self::Constraint::isSatisfied}(){() →* core::bool*})
-        coll.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraintsConsumingTo(self::Variable v, core::List<self::Constraint> coll) → void {
+    self::Constraint? determining = v.{self::Variable::determinedBy}{self::Constraint?};
+    for (core::int i = 0; i.{core::num::<}(v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      self::Constraint c = v.{self::Variable::constraints}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint};
+      if(!(c =={core::Object::==}{(core::Object) → core::bool} determining) && c.{self::Constraint::isSatisfied}(){() → core::bool})
+        coll.{core::List::add}(c){(self::Constraint) → void};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Plan extends core::Object {
-  field core::List<self::Constraint*>* list = core::_GrowableList::•<self::Constraint*>(0);
-  synthetic constructor •() → self::Plan*
+  field core::List<self::Constraint> list = core::_GrowableList::•<self::Constraint>(0);
+  synthetic constructor •() → self::Plan
     : super core::Object::•()
     ;
-  method addConstraint(self::Constraint* c) → void {
-    this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::add}(c){(self::Constraint*) →* void};
+  method addConstraint(self::Constraint c) → void {
+    this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::add}(c){(self::Constraint) → void};
   }
-  method size() → core::int*
-    return this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*};
+  method size() → core::int
+    return this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::length}{core::int};
   method execute() → void {
-    for (core::int* i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      this.{self::Plan::list}{core::List<self::Constraint*>*}.{core::List::[]}(i){(core::int*) →* self::Constraint*}.{self::Constraint::execute}(){() →* void};
+    for (core::int i = 0; i.{core::num::<}(this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      this.{self::Plan::list}{core::List<self::Constraint>}.{core::List::[]}(i){(core::int) → self::Constraint}.{self::Constraint::execute}(){() → void};
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 self::Strength* REQUIRED = #C22;
-static const field self::Strength* STRONG_PREFERRED = #C3;
-static const field self::Strength* PREFERRED = #C6;
-static const field self::Strength* STRONG_DEFAULT = #C9;
-static const field self::Strength* NORMAL = #C12;
-static const field self::Strength* WEAK_DEFAULT = #C15;
-static const field self::Strength* WEAKEST = #C18;
-static const field core::int* NONE = #C1;
-static const field core::int* FORWARD = #C4;
-static const field core::int* BACKWARD = #C20;
-static field self::Planner* planner;
+static const field self::Strength REQUIRED = #C22;
+static const field self::Strength STRONG_PREFERRED = #C3;
+static const field self::Strength PREFERRED = #C6;
+static const field self::Strength STRONG_DEFAULT = #C9;
+static const field self::Strength NORMAL = #C12;
+static const field self::Strength WEAK_DEFAULT = #C15;
+static const field self::Strength WEAKEST = #C18;
+static const field core::int NONE = #C1;
+static const field core::int FORWARD = #C4;
+static const field core::int BACKWARD = #C20;
+late static field self::Planner planner;
 static method main() → dynamic {
-  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() →* void};
+  new self::DeltaBlue::•().{self::DeltaBlue::run}(){() → void};
 }
-static method chainTest(core::int* n) → void {
+static method chainTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable* prev = null;
-  self::Variable* first = null;
-  self::Variable* last = null;
-  for (core::int* i = 0; i.{core::num::<=}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    self::Variable* v = new self::Variable::•("v${i}", 0);
+  self::Variable? prev = null;
+  self::Variable? first = null;
+  self::Variable? last = null;
+  for (core::int i = 0; i.{core::num::<=}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    self::Variable v = new self::Variable::•("v${i}", 0);
     if(!(prev == null))
-      new self::EqualityConstraint::•(prev, v, #C22);
-    if(i =={core::num::==}{(core::Object*) →* core::bool*} 0)
+      new self::EqualityConstraint::•(prev{self::Variable}, v, #C22);
+    if(i =={core::num::==}{(core::Object) → core::bool} 0)
       first = v;
-    if(i =={core::num::==}{(core::Object*) →* core::bool*} n)
+    if(i =={core::num::==}{(core::Object) → core::bool} n)
       last = v;
     prev = v;
   }
-  new self::StayConstraint::•(last, #C9);
-  self::EditConstraint* edit = new self::EditConstraint::•(first, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::Constraint*>(edit)){(core::List<self::Constraint*>*) →* self::Plan*};
-  for (core::int* i = 0; i.{core::num::<}(100){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    first.{self::Variable::value} = i;
-    plan.{self::Plan::execute}(){() →* void};
-    if(!(last.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i)) {
+  new self::StayConstraint::•(last!, #C9);
+  self::EditConstraint edit = new self::EditConstraint::•(first!, #C6);
+  self::Plan plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::Constraint>(edit)){(core::List<self::Constraint>) → self::Plan};
+  for (core::int i = 0; i.{core::num::<}(100){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    first{self::Variable}.{self::Variable::value} = i;
+    plan.{self::Plan::execute}(){() → void};
+    if(!(last{self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i)) {
       core::print("Chain test failed:");
-      core::print("Expected last value to be ${i} but it was ${last.{self::Variable::value}{core::int*}}.");
+      core::print("Expected last value to be ${i} but it was ${last{self::Variable}.{self::Variable::value}{core::int}}.");
     }
   }
 }
-static method projectionTest(core::int* n) → void {
+static method projectionTest(core::int n) → void {
   self::planner = new self::Planner::•();
-  self::Variable* scale = new self::Variable::•("scale", 10);
-  self::Variable* offset = new self::Variable::•("offset", 1000);
-  self::Variable* src = null;
-  self::Variable* dst = null;
-  core::List<self::Variable*>* dests = core::_GrowableList::•<self::Variable*>(0);
-  for (core::int* i = 0; i.{core::num::<}(n){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  self::Variable scale = new self::Variable::•("scale", 10);
+  self::Variable offset = new self::Variable::•("offset", 1000);
+  self::Variable? src = null;
+  self::Variable? dst = null;
+  core::List<self::Variable> dests = core::_GrowableList::•<self::Variable>(0);
+  for (core::int i = 0; i.{core::num::<}(n){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     src = new self::Variable::•("src", i);
     dst = new self::Variable::•("dst", i);
-    dests.{core::List::add}(dst){(self::Variable*) →* void};
-    new self::StayConstraint::•(src, #C12);
-    new self::ScaleConstraint::•(src, scale, offset, dst, #C22);
+    dests.{core::List::add}(dst{self::Variable}){(self::Variable) → void};
+    new self::StayConstraint::•(src{self::Variable}, #C12);
+    new self::ScaleConstraint::•(src{self::Variable}, scale, offset, dst{self::Variable}, #C22);
   }
-  self::change(src, 17);
-  if(!(dst.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 1170))
+  self::change(src!, 17);
+  if(!(dst!.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} 1170))
     core::print("Projection 1 failed");
-  self::change(dst, 1050);
-  if(!(src.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 5))
+  self::change(dst{self::Variable}, 1050);
+  if(!(src{self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} 5))
     core::print("Projection 2 failed");
   self::change(scale, 5);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(1000){(core::num*) →* core::int*}))
+  for (core::int i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num) → core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(dests.{core::List::[]}(i){(core::int) → self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i.{core::num::*}(5){(core::num) → core::int}.{core::num::+}(1000){(core::num) → core::int}))
       core::print("Projection 3 failed");
   }
   self::change(offset, 2000);
-  for (core::int* i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num*) →* core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    if(!(dests.{core::List::[]}(i){(core::int*) →* self::Variable*}.{self::Variable::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} i.{core::num::*}(5){(core::num*) →* core::int*}.{core::num::+}(2000){(core::num*) →* core::int*}))
+  for (core::int i = 0; i.{core::num::<}(n.{core::num::-}(1){(core::num) → core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    if(!(dests.{core::List::[]}(i){(core::int) → self::Variable}.{self::Variable::value}{core::int} =={core::num::==}{(core::Object) → core::bool} i.{core::num::*}(5){(core::num) → core::int}.{core::num::+}(2000){(core::num) → core::int}))
       core::print("Projection 4 failed");
   }
 }
-static method change(self::Variable* v, core::int* newValue) → void {
-  self::EditConstraint* edit = new self::EditConstraint::•(v, #C6);
-  self::Plan* plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::EditConstraint*>(edit)){(core::List<self::Constraint*>*) →* self::Plan*};
-  for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method change(self::Variable v, core::int newValue) → void {
+  self::EditConstraint edit = new self::EditConstraint::•(v, #C6);
+  self::Plan plan = self::planner.{self::Planner::extractPlanFromConstraints}(core::_GrowableList::_literal1<self::EditConstraint>(edit)){(core::List<self::Constraint>) → self::Plan};
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     v.{self::Variable::value} = newValue;
-    plan.{self::Plan::execute}(){() →* void};
+    plan.{self::Plan::execute}(){() → void};
   }
-  edit.{self::Constraint::destroyConstraint}(){() →* void};
+  edit.{self::Constraint::destroyConstraint}(){() → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/abstract_members.dart b/pkg/front_end/testcases/general/abstract_members.dart
index 656f193..127c6fc 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart
+++ b/pkg/front_end/testcases/general/abstract_members.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 Interface1 {
   void interfaceMethod1() {}
 }
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.textual_outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.textual_outline.expect
index 1b76287..866053c 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Interface1 {
   void interfaceMethod1() {}
 }
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/abstract_members.dart.textual_outline_modelled.expect
index 4f03476..77e8755 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A implements Interface1, Interface2, Interface3 {
   aMethod() {}
   abstractMethod();
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
index d874a11..c71dba4 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/abstract_members.dart:21:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:19:16: Error: Can't inherit members that conflict with each other.
 // abstract class A implements Interface1, Interface2, Interface3 {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
 // abstract class B extends A {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property3=
@@ -48,59 +48,59 @@
 //
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
 // class MyMock1 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
 // class MyMock2 extends MyMock1 {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property2=
@@ -117,125 +117,110 @@
 //
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:25:12: Context: 'A.property2=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:12: Context: 'A.property2=' is defined here.
 //   void set property2(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:66:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:64:16: Error: Can't inherit members that conflict with each other.
 // abstract class D extends C implements Interface2 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is one inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:61:8: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:59:8: Context: This is the other inherited member.
 //   void interfaceMethod1(_) {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:74:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:72:16: Error: Can't inherit members that conflict with each other.
 // abstract class F extends E implements Interface1 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:69:12: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:67:12: Context: This is the other inherited member.
 //   void set interfaceMethod1(_) {}
 //            ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:86:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:84:16: Error: Can't inherit members that conflict with each other.
 // abstract class H extends G implements Foo {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:77:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:75:8: Context: This is one inherited member.
 //   void foo() {}
 //        ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:81:14: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:79:14: Context: This is the other inherited member.
 //   Object get foo => null;
 //              ^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:98:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:96:16: Error: Can't inherit members that conflict with each other.
 // abstract class J extends I implements Bar {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:89:14: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:87:14: Context: This is one inherited member.
 //   Object get foo => null;
 //              ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:93:10: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:91:10: Context: This is the other inherited member.
 //   Object foo() {}
 //          ^^^
 //
+// pkg/front_end/testcases/general/abstract_members.dart:79:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+//  - 'Object' is from 'dart:core'.
+//   Object get foo => null;
+//                     ^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:87:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+//  - 'Object' is from 'dart:core'.
+//   Object get foo => null;
+//                     ^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:91:10: Error: A non-null value must be returned since the return type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object foo() {}
+//          ^
+//
 import self as self;
 import "dart:core" as core;
 
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
   method interfaceMethod1() → 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 Interface2 extends core::Object {
   field dynamic interfaceMethod1 = null;
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
   method interfaceMethod2() → 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 Interface3 extends core::Object {
-  synthetic constructor •() → self::Interface3*
+  synthetic constructor •() → self::Interface3
     : super core::Object::•()
     ;
   method interfaceMethod3() → 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 class A extends core::Object implements self::Interface1, self::Interface2, self::Interface3 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method aMethod() → dynamic {}
@@ -243,20 +228,10 @@
   abstract set property1(dynamic _) → void;
   abstract set property2(dynamic _) → void;
   abstract set property3(dynamic _) → 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 class B extends self::A {
   final field dynamic property1 = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method aMethod() → dynamic {}
@@ -264,7 +239,7 @@
 }
 class MyClass extends self::B {
   field dynamic property2 = null;
-  synthetic constructor •() → self::MyClass*
+  synthetic constructor •() → self::MyClass
     : super self::B::•()
     ;
   method aaMethod() → dynamic {}
@@ -273,155 +248,106 @@
   method cMethod() → dynamic {}
 }
 class MyMock1 extends self::B {
-  synthetic constructor •() → self::MyMock1*
+  synthetic constructor •() → self::MyMock1
     : super self::B::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
   no-such-method-forwarder method interfaceMethod2() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder method interfaceMethod3() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property3(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property1(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property2(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 class MyMock2 extends self::MyMock1 {
-  synthetic constructor •() → self::MyMock2*
+  synthetic constructor •() → self::MyMock2
     : super self::MyMock1::•()
     ;
-  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class MyMock3 extends self::B {
-  synthetic constructor •() → self::MyMock3*
+  synthetic constructor •() → self::MyMock3
     : super self::B::•()
     ;
-  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method interfaceMethod1(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 class D extends self::C implements self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
   set interfaceMethod1(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 class F extends self::E implements self::Interface1 {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  get foo() → 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
+  get foo() → core::Object
+    return invalid-expression "pkg/front_end/testcases/general/abstract_members.dart:79:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+ - 'Object' is from 'dart:core'.
+  Object get foo => null;
+                    ^" in null as{TypeError,ForNonNullableByDefault} core::Object;
 }
 abstract class H extends self::G implements self::Foo {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     : super self::G::•()
     ;
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  get foo() → 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
+  get foo() → core::Object
+    return invalid-expression "pkg/front_end/testcases/general/abstract_members.dart:87:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+ - 'Object' is from 'dart:core'.
+  Object get foo => null;
+                    ^" in null as{TypeError,ForNonNullableByDefault} core::Object;
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method foo() → core::Object* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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::Object {
+    return invalid-expression "pkg/front_end/testcases/general/abstract_members.dart:91:10: Error: A non-null value must be returned since the return type 'Object' doesn't allow null.
+ - 'Object' is from 'dart:core'.
+  Object foo() {}
+         ^" in null;
+  }
 }
 abstract class J extends self::I implements self::Bar {
-  synthetic constructor •() → self::J*
+  synthetic constructor •() → self::J
     : super self::I::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect
index d874a11..c71dba4 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.modular.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/abstract_members.dart:21:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:19:16: Error: Can't inherit members that conflict with each other.
 // abstract class A implements Interface1, Interface2, Interface3 {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
 // abstract class B extends A {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property3=
@@ -48,59 +48,59 @@
 //
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
 // class MyMock1 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
 // class MyMock2 extends MyMock1 {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property2=
@@ -117,125 +117,110 @@
 //
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:25:12: Context: 'A.property2=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:12: Context: 'A.property2=' is defined here.
 //   void set property2(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:66:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:64:16: Error: Can't inherit members that conflict with each other.
 // abstract class D extends C implements Interface2 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is one inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:61:8: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:59:8: Context: This is the other inherited member.
 //   void interfaceMethod1(_) {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:74:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:72:16: Error: Can't inherit members that conflict with each other.
 // abstract class F extends E implements Interface1 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:69:12: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:67:12: Context: This is the other inherited member.
 //   void set interfaceMethod1(_) {}
 //            ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:86:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:84:16: Error: Can't inherit members that conflict with each other.
 // abstract class H extends G implements Foo {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:77:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:75:8: Context: This is one inherited member.
 //   void foo() {}
 //        ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:81:14: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:79:14: Context: This is the other inherited member.
 //   Object get foo => null;
 //              ^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:98:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:96:16: Error: Can't inherit members that conflict with each other.
 // abstract class J extends I implements Bar {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:89:14: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:87:14: Context: This is one inherited member.
 //   Object get foo => null;
 //              ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:93:10: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:91:10: Context: This is the other inherited member.
 //   Object foo() {}
 //          ^^^
 //
+// pkg/front_end/testcases/general/abstract_members.dart:79:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+//  - 'Object' is from 'dart:core'.
+//   Object get foo => null;
+//                     ^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:87:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+//  - 'Object' is from 'dart:core'.
+//   Object get foo => null;
+//                     ^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:91:10: Error: A non-null value must be returned since the return type 'Object' doesn't allow null.
+//  - 'Object' is from 'dart:core'.
+//   Object foo() {}
+//          ^
+//
 import self as self;
 import "dart:core" as core;
 
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
   method interfaceMethod1() → 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 Interface2 extends core::Object {
   field dynamic interfaceMethod1 = null;
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
   method interfaceMethod2() → 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 Interface3 extends core::Object {
-  synthetic constructor •() → self::Interface3*
+  synthetic constructor •() → self::Interface3
     : super core::Object::•()
     ;
   method interfaceMethod3() → 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 class A extends core::Object implements self::Interface1, self::Interface2, self::Interface3 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method aMethod() → dynamic {}
@@ -243,20 +228,10 @@
   abstract set property1(dynamic _) → void;
   abstract set property2(dynamic _) → void;
   abstract set property3(dynamic _) → 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 class B extends self::A {
   final field dynamic property1 = null;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method aMethod() → dynamic {}
@@ -264,7 +239,7 @@
 }
 class MyClass extends self::B {
   field dynamic property2 = null;
-  synthetic constructor •() → self::MyClass*
+  synthetic constructor •() → self::MyClass
     : super self::B::•()
     ;
   method aaMethod() → dynamic {}
@@ -273,155 +248,106 @@
   method cMethod() → dynamic {}
 }
 class MyMock1 extends self::B {
-  synthetic constructor •() → self::MyMock1*
+  synthetic constructor •() → self::MyMock1
     : super self::B::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     return null;
   no-such-method-forwarder method interfaceMethod2() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} dynamic;
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder method interfaceMethod3() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property3(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property1(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property2(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#C11, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic};
 }
 class MyMock2 extends self::MyMock1 {
-  synthetic constructor •() → self::MyMock2*
+  synthetic constructor •() → self::MyMock2
     : super self::MyMock1::•()
     ;
-  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class MyMock3 extends self::B {
-  synthetic constructor •() → self::MyMock3*
+  synthetic constructor •() → self::MyMock3
     : super self::B::•()
     ;
-  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   method interfaceMethod1(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 class D extends self::C implements self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super core::Object::•()
     ;
   set interfaceMethod1(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 class F extends self::E implements self::Interface1 {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     : super core::Object::•()
     ;
-  get foo() → 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
+  get foo() → core::Object
+    return invalid-expression "pkg/front_end/testcases/general/abstract_members.dart:79:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+ - 'Object' is from 'dart:core'.
+  Object get foo => null;
+                    ^" in null as{TypeError,ForNonNullableByDefault} core::Object;
 }
 abstract class H extends self::G implements self::Foo {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     : super self::G::•()
     ;
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super core::Object::•()
     ;
-  get foo() → 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
+  get foo() → core::Object
+    return invalid-expression "pkg/front_end/testcases/general/abstract_members.dart:87:21: Error: The value 'null' can't be returned from a function with return type 'Object' because 'Object' is not nullable.
+ - 'Object' is from 'dart:core'.
+  Object get foo => null;
+                    ^" in null as{TypeError,ForNonNullableByDefault} core::Object;
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  method foo() → core::Object* {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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::Object {
+    return invalid-expression "pkg/front_end/testcases/general/abstract_members.dart:91:10: Error: A non-null value must be returned since the return type 'Object' doesn't allow null.
+ - 'Object' is from 'dart:core'.
+  Object foo() {}
+         ^" in null;
+  }
 }
 abstract class J extends self::I implements self::Bar {
-  synthetic constructor •() → self::J*
+  synthetic constructor •() → self::J
     : super self::I::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
index 9685255..ed720cb 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.weak.outline.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/abstract_members.dart:21:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:19:16: Error: Can't inherit members that conflict with each other.
 // abstract class A implements Interface1, Interface2, Interface3 {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
 // abstract class B extends A {
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property3=
@@ -48,59 +48,59 @@
 //
 // class MyClass extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
 // class MyMock1 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
 // class MyMock2 extends MyMock1 {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
 //  - A.abstractMethod
 //  - A.property1=
 //  - A.property2=
@@ -117,68 +117,68 @@
 //
 // class MyMock3 extends B {
 //       ^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:23:3: Context: 'A.abstractMethod' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:21:3: Context: 'A.abstractMethod' is defined here.
 //   abstractMethod();
 //   ^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property1=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:22:12: Context: 'A.property1=' is defined here.
 //   void set property1(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:25:12: Context: 'A.property2=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:23:12: Context: 'A.property2=' is defined here.
 //   void set property2(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:26:12: Context: 'A.property3=' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:24:12: Context: 'A.property3=' is defined here.
 //   void set property3(_);
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: 'Interface1.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: 'Interface1.interfaceMethod1' is defined here.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: 'Interface2.interfaceMethod1' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: 'Interface2.interfaceMethod1' is defined here.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:12:8: Context: 'Interface2.interfaceMethod2' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:10:8: Context: 'Interface2.interfaceMethod2' is defined here.
 //   void interfaceMethod2() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:18:8: Context: 'Interface3.interfaceMethod3' is defined here.
+// pkg/front_end/testcases/general/abstract_members.dart:16:8: Context: 'Interface3.interfaceMethod3' is defined here.
 //   void interfaceMethod3() {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:66:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:64:16: Error: Can't inherit members that conflict with each other.
 // abstract class D extends C implements Interface2 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:14:7: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is one inherited member.
 //   var interfaceMethod1;
 //       ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:61:8: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:59:8: Context: This is the other inherited member.
 //   void interfaceMethod1(_) {}
 //        ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:74:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:72:16: Error: Can't inherit members that conflict with each other.
 // abstract class F extends E implements Interface1 {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:8:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
 //   void interfaceMethod1() {}
 //        ^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/general/abstract_members.dart:69:12: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:67:12: Context: This is the other inherited member.
 //   void set interfaceMethod1(_) {}
 //            ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:86:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:84:16: Error: Can't inherit members that conflict with each other.
 // abstract class H extends G implements Foo {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:77:8: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:75:8: Context: This is one inherited member.
 //   void foo() {}
 //        ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:81:14: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:79:14: Context: This is the other inherited member.
 //   Object get foo => null;
 //              ^^^
 //
-// pkg/front_end/testcases/general/abstract_members.dart:98:16: Error: Can't inherit members that conflict with each other.
+// pkg/front_end/testcases/general/abstract_members.dart:96:16: Error: Can't inherit members that conflict with each other.
 // abstract class J extends I implements Bar {}
 //                ^
-// pkg/front_end/testcases/general/abstract_members.dart:89:14: Context: This is one inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:87:14: Context: This is one inherited member.
 //   Object get foo => null;
 //              ^^^
-// pkg/front_end/testcases/general/abstract_members.dart:93:10: Context: This is the other inherited member.
+// pkg/front_end/testcases/general/abstract_members.dart:91:10: Context: This is the other inherited member.
 //   Object foo() {}
 //          ^^^
 //
@@ -186,56 +186,26 @@
 import "dart:core" as core;
 
 class Interface1 extends core::Object {
-  synthetic constructor •() → self::Interface1*
+  synthetic constructor •() → self::Interface1
     ;
   method interfaceMethod1() → 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 Interface2 extends core::Object {
   field dynamic interfaceMethod1;
-  synthetic constructor •() → self::Interface2*
+  synthetic constructor •() → self::Interface2
     ;
   method interfaceMethod2() → 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 Interface3 extends core::Object {
-  synthetic constructor •() → self::Interface3*
+  synthetic constructor •() → self::Interface3
     ;
   method interfaceMethod3() → 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 class A extends core::Object implements self::Interface1, self::Interface2, self::Interface3 {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method aMethod() → dynamic
     ;
@@ -243,20 +213,10 @@
   abstract set property1(dynamic _) → void;
   abstract set property2(dynamic _) → void;
   abstract set property3(dynamic _) → 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 class B extends self::A {
   final field dynamic property1;
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   method aMethod() → dynamic
     ;
@@ -265,7 +225,7 @@
 }
 class MyClass extends self::B {
   field dynamic property2;
-  synthetic constructor •() → self::MyClass*
+  synthetic constructor •() → self::MyClass
     ;
   method aaMethod() → dynamic
     ;
@@ -277,147 +237,87 @@
     ;
 }
 class MyMock1 extends self::B {
-  synthetic constructor •() → self::MyMock1*
+  synthetic constructor •() → self::MyMock1
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::Invocation _) → dynamic
     ;
   no-such-method-forwarder method interfaceMethod2() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder method abstractMethod() → dynamic
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 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::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#abstractMethod, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
   no-such-method-forwarder method interfaceMethod1() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder method interfaceMethod3() → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod3, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod3, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property3(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property3=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set interfaceMethod1(dynamic value) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#interfaceMethod1=, 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 set property1(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property1=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
   no-such-method-forwarder set property2(dynamic _) → void
-    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property2=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
+    return this.{self::MyMock1::noSuchMethod}(new core::_InvocationMirror::_withType(#property2=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[_]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic};
 }
 class MyMock2 extends self::MyMock1 {
-  synthetic constructor •() → self::MyMock2*
+  synthetic constructor •() → self::MyMock2
     ;
-  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class MyMock3 extends self::B {
-  synthetic constructor •() → self::MyMock3*
+  synthetic constructor •() → self::MyMock3
     ;
-  abstract method noSuchMethod(core::Invocation* _) → dynamic;
+  abstract method noSuchMethod(core::Invocation _) → dynamic;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method interfaceMethod1(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 class D extends self::C implements self::Interface2 {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
 }
 class E extends core::Object {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
   set interfaceMethod1(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 class F extends self::E implements self::Interface1 {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
 }
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
   method foo() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class G extends core::Object {
-  synthetic constructor •() → self::G*
+  synthetic constructor •() → self::G
     ;
-  get foo() → core::Object*
+  get foo() → core::Object
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 H extends self::G implements self::Foo {
-  synthetic constructor •() → self::H*
+  synthetic constructor •() → self::H
     ;
 }
 class Bar extends core::Object {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
-  get foo() → core::Object*
+  get foo() → core::Object
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
-  method foo() → core::Object*
+  method foo() → core::Object
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 J extends self::I implements self::Bar {
-  synthetic constructor •() → self::J*
+  synthetic constructor •() → self::J
     ;
 }
 static method main() → dynamic
@@ -425,32 +325,32 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> SymbolConstant(#interfaceMethod2)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:12:8 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> SymbolConstant(#abstractMethod)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:23:3 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> SymbolConstant(#interfaceMethod1)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:8:8 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> SymbolConstant(#interfaceMethod3)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:18:8 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> SymbolConstant(#property3=)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:26:12 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> SymbolConstant(#interfaceMethod1=)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:14:7 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> SymbolConstant(#property1=)
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> SymbolConstant(#interfaceMethod2)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:10:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> SymbolConstant(#abstractMethod)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:21:3 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> SymbolConstant(#interfaceMethod1)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:6:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> SymbolConstant(#interfaceMethod3)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:16:8 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> SymbolConstant(#property3=)
 Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> ListConstant(const <Type*>[])
 Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:24:12 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> SymbolConstant(#property2=)
-Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:25:12 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:12:7 -> SymbolConstant(#interfaceMethod1=)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:12:7 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:12:7 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:22:12 -> SymbolConstant(#property1=)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:22:12 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:22:12 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-testcase:///abstract_members.dart:23:12 -> SymbolConstant(#property2=)
+Evaluated: ListLiteral @ org-dartlang-testcase:///abstract_members.dart:23:12 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-testcase:///abstract_members.dart:23:12 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 73, effectively constant: 28
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart b/pkg/front_end/testcases/general/abstract_operator_override.dart
index 47d3698..89d5f93 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart
+++ b/pkg/front_end/testcases/general/abstract_operator_override.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 {
   A operator +(B b) => new A();
   A operator -() => new A();
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline.expect
index 5e5db9f..cbb8adc 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A operator +(B b) => new A();
   A operator -() => new A();
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline_modelled.expect
index 26007df..a8a7f31 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A operator +(B b) => new A();
   A operator -() => new A();
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.expect
index 6b85486..eb7c6ae 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -84,41 +84,31 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     return new self::A::•();
-  operator unary-() → self::A*
+  operator unary-() → self::A
     return new self::A::•();
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     return new self::A::•();
-  operator []=(self::B* b1, self::B* b2) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 []=(self::B b1, self::B b2) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract operator +(self::A* a) → self::A*;
-  abstract operator unary-() → self::B*;
-  abstract operator [](self::A* a) → self::A*;
-  abstract operator []=(self::A* a, self::B* b) → void;
+  abstract operator +(self::A a) → self::A;
+  abstract operator unary-() → self::B;
+  abstract operator [](self::A a) → self::A;
+  abstract operator []=(self::A a, self::B b) → void;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  abstract operator [](self::B* b) → self::B*;
-  abstract operator []=(self::B* b, self::A* a) → void;
+  abstract operator [](self::B b) → self::B;
+  abstract operator []=(self::B b, self::A a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect
index 6b85486..eb7c6ae 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -84,41 +84,31 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     return new self::A::•();
-  operator unary-() → self::A*
+  operator unary-() → self::A
     return new self::A::•();
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     return new self::A::•();
-  operator []=(self::B* b1, self::B* b2) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 []=(self::B b1, self::B b2) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract operator +(self::A* a) → self::A*;
-  abstract operator unary-() → self::B*;
-  abstract operator [](self::A* a) → self::A*;
-  abstract operator []=(self::A* a, self::B* b) → void;
+  abstract operator +(self::A a) → self::A;
+  abstract operator unary-() → self::B;
+  abstract operator [](self::A a) → self::A;
+  abstract operator []=(self::A a, self::B b) → void;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  abstract operator [](self::B* b) → self::B*;
-  abstract operator []=(self::B* b, self::A* a) → void;
+  abstract operator [](self::B b) → self::B;
+  abstract operator []=(self::B b, self::A a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.outline.expect
index 529c1d7..77101de 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -84,40 +84,30 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     ;
-  operator unary-() → self::A*
+  operator unary-() → self::A
     ;
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     ;
-  operator []=(self::B* b1, self::B* b2) → void
+  operator []=(self::B b1, self::B b2) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
     ;
-  abstract operator +(self::A* a) → self::A*;
-  abstract operator unary-() → self::B*;
-  abstract operator [](self::A* a) → self::A*;
-  abstract operator []=(self::A* a, self::B* b) → void;
+  abstract operator +(self::A a) → self::A;
+  abstract operator unary-() → self::B;
+  abstract operator [](self::A a) → self::A;
+  abstract operator []=(self::A a, self::B b) → void;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract operator [](self::B* b) → self::B*;
-  abstract operator []=(self::B* b, self::A* a) → void;
+  abstract operator [](self::B b) → self::B;
+  abstract operator []=(self::B b, self::A a) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.transformed.expect
index 6b85486..eb7c6ae 100644
--- a/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_operator_override.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -84,41 +84,31 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     return new self::A::•();
-  operator unary-() → self::A*
+  operator unary-() → self::A
     return new self::A::•();
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     return new self::A::•();
-  operator []=(self::B* b1, self::B* b2) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 []=(self::B b1, self::B b2) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract operator +(self::A* a) → self::A*;
-  abstract operator unary-() → self::B*;
-  abstract operator [](self::A* a) → self::A*;
-  abstract operator []=(self::A* a, self::B* b) → void;
+  abstract operator +(self::A a) → self::A;
+  abstract operator unary-() → self::B;
+  abstract operator [](self::A a) → self::A;
+  abstract operator []=(self::A a, self::B b) → void;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  abstract operator [](self::B* b) → self::B*;
-  abstract operator []=(self::B* b, self::A* a) → void;
+  abstract operator [](self::B b) → self::B;
+  abstract operator []=(self::B b, self::A a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart
index b7152e5..8a0f040 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.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 {
   void foo() {}
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline.expect
index 09d2c13..5b023fe 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   void foo() {}
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline_modelled.expect
index bee9faa..7f52cec 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B extends A {
   void foo([a]);
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.expect
index 90c7a87..60f6733 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,62 +36,42 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   abstract method foo([dynamic a = #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 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   abstract method foo([dynamic a = #C1]) → void;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::A implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::A::•()
     ;
   abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
 }
 abstract class E extends self::A implements self::I {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::A::•()
     ;
   abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect
index 90c7a87..60f6733 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,62 +36,42 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   abstract method foo([dynamic a = #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 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   abstract method foo([dynamic a = #C1]) → void;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::A implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::A::•()
     ;
   abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
 }
 abstract class E extends self::A implements self::I {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::A::•()
     ;
   abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
index d789cb9..670f664 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,57 +36,37 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method foo() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     ;
   abstract method foo([dynamic a]) → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   abstract method foo([dynamic a]) → void;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class D extends self::A implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   abstract member-signature method foo([dynamic a]) → void; -> self::I::foo
 }
 abstract class E extends self::A implements self::I {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
   abstract member-signature method foo([dynamic a]) → void; -> self::I::foo
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.transformed.expect
index 90c7a87..60f6733 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,62 +36,42 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 I extends core::Object {
-  synthetic constructor •() → self::I*
+  synthetic constructor •() → self::I
     : super core::Object::•()
     ;
   abstract method foo([dynamic a = #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 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   abstract method foo([dynamic a = #C1]) → void;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::A implements self::I {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::A::•()
     ;
   abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
 }
 abstract class E extends self::A implements self::I {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::A::•()
     ;
   abstract member-signature method foo([dynamic a = #C1]) → void; -> self::I::foo
 }
 class F extends self::E {
-  synthetic constructor •() → self::F*
+  synthetic constructor •() → self::F
     : super self::E::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart
index 3899c92..ee62ec7 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.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
+
 abstract class A {
-  A foo() => null;
+  A foo() => throw '';
 }
 
 abstract class B extends A {
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline.expect
index 815f3ac..1943350 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 abstract class A {
-  A foo() => null;
+  A foo() => throw '';
 }
 
 abstract class B extends A {
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline_modelled.expect
index 815f3ac..1943350 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 abstract class A {
-  A foo() => null;
+  A foo() => throw '';
 }
 
 abstract class B extends A {
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
index 882db16..04cdcaf 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
@@ -1,52 +1,33 @@
-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::•()
     ;
-  method foo() → self::A*
-    return null;
-  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
+  method foo() → self::A
+    return throw "";
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract method foo() → self::B*;
+  abstract method foo() → self::B;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::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
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  no-such-method-forwarder method foo() → self::B*
-    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} self::B*;
+  no-such-method-forwarder method foo() → self::B
+    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} self::B;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect
index 882db16..04cdcaf 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.modular.expect
@@ -1,52 +1,33 @@
-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::•()
     ;
-  method foo() → self::A*
-    return null;
-  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
+  method foo() → self::A
+    return throw "";
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract method foo() → self::B*;
+  abstract method foo() → self::B;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::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
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  no-such-method-forwarder method foo() → self::B*
-    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} self::B*;
+  no-such-method-forwarder method foo() → self::B
+    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} self::B;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
index 41d6539..0686850 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.outline.expect
@@ -1,48 +1,29 @@
-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
     ;
-  method foo() → self::A*
+  method foo() → self::A
     ;
-  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 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract method foo() → self::B*;
+  abstract method foo() → self::B;
 }
 class C extends core::Object {
-  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
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  no-such-method-forwarder method foo() → self::B*
-    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} self::B*;
+  no-such-method-forwarder method foo() → self::B
+    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::B;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
index 882db16..04cdcaf 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
@@ -1,52 +1,33 @@
-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::•()
     ;
-  method foo() → self::A*
-    return null;
-  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
+  method foo() → self::A
+    return throw "";
 }
 abstract class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  abstract method foo() → self::B*;
+  abstract method foo() → self::B;
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* _) → dynamic
+  method noSuchMethod(core::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
 }
 class D extends self::C implements self::B {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  no-such-method-forwarder method foo() → self::B*
-    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} self::B*;
+  no-such-method-forwarder method foo() → self::B
+    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} self::B;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/accessors.dart b/pkg/front_end/testcases/general/accessors.dart
index 67c5b20..5ac1323 100644
--- a/pkg/front_end/testcases/general/accessors.dart
+++ b/pkg/front_end/testcases/general/accessors.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
+
 void set onlySetter(value) {
   print("onlySetter called with $value.");
 }
diff --git a/pkg/front_end/testcases/general/accessors.dart.textual_outline.expect b/pkg/front_end/testcases/general/accessors.dart.textual_outline.expect
index a9e633e..9c4a898 100644
--- a/pkg/front_end/testcases/general/accessors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 void set onlySetter(value) {}
 
 class C {
diff --git a/pkg/front_end/testcases/general/accessors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/accessors.dart.textual_outline_modelled.expect
index 7bea72f..3072e99 100644
--- a/pkg/front_end/testcases/general/accessors.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   testC() {}
   testD() {}
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.expect b/pkg/front_end/testcases/general/accessors.dart.weak.expect
index d09f07b..9e6c42b 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,7 +22,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set onlySetter(dynamic value) → void {
@@ -37,7 +37,7 @@
             ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
       throw "No error thrown";
     }
-    on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+    on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
       core::print("Expected error: ${e}");
     }
     this.{self::C::onlySetter} = "hest";
@@ -50,22 +50,12 @@
           ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
     this.{self::C::onlySetter} = "hest";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
     : super self::C::•()
     ;
-  get onlySetter() → core::String*
+  get onlySetter() → core::String
     return "D.onlySetter called.";
   set onlySetter(dynamic value) → void {
     core::print("D.onlySetter called with ${value}.");
@@ -81,10 +71,10 @@
           ^^^^^^^^^^");
     throw "No error thrown";
   }
-  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
     core::print("Expected error: ${e}");
   }
   self::onlySetter = "fisk";
-  new self::C::•().{self::C::testC}(){() →* dynamic};
-  new self::D::•().{self::C::testD}(){() →* dynamic};
+  new self::C::•().{self::C::testC}(){() → dynamic};
+  new self::D::•().{self::C::testD}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect b/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect
index d09f07b..9e6c42b 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,7 +22,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set onlySetter(dynamic value) → void {
@@ -37,7 +37,7 @@
             ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
       throw "No error thrown";
     }
-    on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+    on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
       core::print("Expected error: ${e}");
     }
     this.{self::C::onlySetter} = "hest";
@@ -50,22 +50,12 @@
           ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
     this.{self::C::onlySetter} = "hest";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
     : super self::C::•()
     ;
-  get onlySetter() → core::String*
+  get onlySetter() → core::String
     return "D.onlySetter called.";
   set onlySetter(dynamic value) → void {
     core::print("D.onlySetter called with ${value}.");
@@ -81,10 +71,10 @@
           ^^^^^^^^^^");
     throw "No error thrown";
   }
-  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
     core::print("Expected error: ${e}");
   }
   self::onlySetter = "fisk";
-  new self::C::•().{self::C::testC}(){() →* dynamic};
-  new self::D::•().{self::C::testD}(){() →* dynamic};
+  new self::C::•().{self::C::testC}(){() → dynamic};
+  new self::D::•().{self::C::testD}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.outline.expect b/pkg/front_end/testcases/general/accessors.dart.weak.outline.expect
index a0876da..c899f60 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-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 onlySetter(dynamic value) → void
     ;
@@ -11,21 +11,11 @@
     ;
   method testD() → 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 D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  get onlySetter() → core::String*
+  get onlySetter() → core::String
     ;
   set onlySetter(dynamic value) → void
     ;
diff --git a/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
index d09f07b..9e6c42b 100644
--- a/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/accessors.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,7 +22,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   set onlySetter(dynamic value) → void {
@@ -37,7 +37,7 @@
             ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
       throw "No error thrown";
     }
-    on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+    on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
       core::print("Expected error: ${e}");
     }
     this.{self::C::onlySetter} = "hest";
@@ -50,22 +50,12 @@
           ^^^^^^^^^^" in this{<unresolved>}.onlySetter);
     this.{self::C::onlySetter} = "hest";
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
     : super self::C::•()
     ;
-  get onlySetter() → core::String*
+  get onlySetter() → core::String
     return "D.onlySetter called.";
   set onlySetter(dynamic value) → void {
     core::print("D.onlySetter called with ${value}.");
@@ -81,10 +71,10 @@
           ^^^^^^^^^^");
     throw "No error thrown";
   }
-  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
     core::print("Expected error: ${e}");
   }
   self::onlySetter = "fisk";
-  new self::C::•().{self::C::testC}(){() →* dynamic};
-  new self::D::•().{self::C::testD}(){() →* dynamic};
+  new self::C::•().{self::C::testC}(){() → dynamic};
+  new self::D::•().{self::C::testD}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/all_variances.dart b/pkg/front_end/testcases/general/all_variances.dart
index 8d98162..3f1a118 100644
--- a/pkg/front_end/testcases/general/all_variances.dart
+++ b/pkg/front_end/testcases/general/all_variances.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 checks how type parameters of different variances are serialized.
 
 typedef F<W, X, Y, Z> = X Function(Y, Z Function(Z));
diff --git a/pkg/front_end/testcases/general/all_variances.dart.textual_outline.expect b/pkg/front_end/testcases/general/all_variances.dart.textual_outline.expect
index e3a12d0..e174256 100644
--- a/pkg/front_end/testcases/general/all_variances.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/all_variances.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 typedef F<W, X, Y, Z> = X Function(Y, Z Function(Z));
 main() {}
diff --git a/pkg/front_end/testcases/general/all_variances.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/all_variances.dart.textual_outline_modelled.expect
index 5b8c061..487ff53 100644
--- a/pkg/front_end/testcases/general/all_variances.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/all_variances.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 typedef F<W, X, Y, Z> = X Function(Y, Z Function(Z));
diff --git a/pkg/front_end/testcases/general/all_variances.dart.weak.expect b/pkg/front_end/testcases/general/all_variances.dart.weak.expect
index f7afd1b..daa49a0 100644
--- a/pkg/front_end/testcases/general/all_variances.dart.weak.expect
+++ b/pkg/front_end/testcases/general/all_variances.dart.weak.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<unrelated W extends core::Object* = dynamic, X extends core::Object* = dynamic, contravariant Y extends core::Object* = dynamic, invariant Z extends core::Object* = dynamic> = (Y*, (Z*) →* Z*) →* X*;
+typedef F<unrelated W extends core::Object? = dynamic, X extends core::Object? = dynamic, contravariant Y extends core::Object? = dynamic, invariant Z extends core::Object? = dynamic> = (Y%, (Z%) → Z%) → X%;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect b/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect
index f7afd1b..daa49a0 100644
--- a/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/all_variances.dart.weak.modular.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<unrelated W extends core::Object* = dynamic, X extends core::Object* = dynamic, contravariant Y extends core::Object* = dynamic, invariant Z extends core::Object* = dynamic> = (Y*, (Z*) →* Z*) →* X*;
+typedef F<unrelated W extends core::Object? = dynamic, X extends core::Object? = dynamic, contravariant Y extends core::Object? = dynamic, invariant Z extends core::Object? = dynamic> = (Y%, (Z%) → Z%) → X%;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/all_variances.dart.weak.outline.expect b/pkg/front_end/testcases/general/all_variances.dart.weak.outline.expect
index 23f7ffa..40eee95 100644
--- a/pkg/front_end/testcases/general/all_variances.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/all_variances.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<unrelated W extends core::Object* = dynamic, X extends core::Object* = dynamic, contravariant Y extends core::Object* = dynamic, invariant Z extends core::Object* = dynamic> = (Y*, (Z*) →* Z*) →* X*;
+typedef F<unrelated W extends core::Object? = dynamic, X extends core::Object? = dynamic, contravariant Y extends core::Object? = dynamic, invariant Z extends core::Object? = dynamic> = (Y%, (Z%) → Z%) → X%;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/all_variances.dart.weak.transformed.expect b/pkg/front_end/testcases/general/all_variances.dart.weak.transformed.expect
index f7afd1b..daa49a0 100644
--- a/pkg/front_end/testcases/general/all_variances.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/all_variances.dart.weak.transformed.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F<unrelated W extends core::Object* = dynamic, X extends core::Object* = dynamic, contravariant Y extends core::Object* = dynamic, invariant Z extends core::Object* = dynamic> = (Y*, (Z*) →* Z*) →* X*;
+typedef F<unrelated W extends core::Object? = dynamic, X extends core::Object? = dynamic, contravariant Y extends core::Object? = dynamic, invariant Z extends core::Object? = dynamic> = (Y%, (Z%) → Z%) → X%;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart b/pkg/front_end/testcases/general/ambiguous_exports.dart
index 1ee8c77..123d1dd 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart
+++ b/pkg/front_end/testcases/general/ambiguous_exports.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
+
 export 'hello.dart' show main;
 
 export 'map.dart' show main;
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline.expect
index 88998de..7fe554b 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 export 'hello.dart' show main;
 export 'map.dart' show main;
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline_modelled.expect
index 88998de..7fe554b 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 export 'hello.dart' show main;
 export 'map.dart' show main;
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect
index 8155e8e..c4277c5 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = #C1;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -22,7 +22,7 @@
   core::print("Hello, World!");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect
index 8155e8e..c4277c5 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = #C1;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -22,7 +22,7 @@
   core::print("Hello, World!");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect
index 8f8c65a..97b23de 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,15 +11,15 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/general/hello.dart' and 'pkg/front_end/testcases/general/map.dart'.\"}";
+static const field dynamic _exports# = "{\"main\":\"'main' is exported from both 'pkg/front_end/testcases/general/hello.dart' and 'pkg/front_end/testcases/general/map.dart'.\"}" /*isLegacy*/;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect
index 8155e8e..c4277c5 100644
--- a/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/ambiguous_exports.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,9 +12,9 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 export "org-dartlang-testcase:///map.dart" show main;
 
-static const field dynamic _exports# = #C1;
+static const field dynamic _exports# = #C1 /*isLegacy*/;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
@@ -22,7 +22,7 @@
   core::print("Hello, World!");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart b/pkg/front_end/testcases/general/annotation_eof.dart
index 0a6ab32..55b8bb0 100644
--- a/pkg/front_end/testcases/general/annotation_eof.dart
+++ b/pkg/front_end/testcases/general/annotation_eof.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() {
   print('There is a dangling annotation at the end of this file');
 }
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_eof.dart.textual_outline.expect
index f6bb0c3..a1a8776 100644
--- a/pkg/front_end/testcases/general/annotation_eof.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_eof.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 @AnnotationAtEOF
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart.weak.expect b/pkg/front_end/testcases/general/annotation_eof.dart.weak.expect
index f4d0e531..bde2743 100644
--- a/pkg/front_end/testcases/general/annotation_eof.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_eof.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect
index f4d0e531..bde2743 100644
--- a/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_eof.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_eof.dart.weak.outline.expect
index 6c6eddf..29c5fd5 100644
--- a/pkg/front_end/testcases/general/annotation_eof.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_eof.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/annotation_eof.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_eof.dart.weak.transformed.expect
index f4d0e531..bde2743 100644
--- a/pkg/front_end/testcases/general/annotation_eof.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_eof.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart b/pkg/front_end/testcases/general/annotation_on_enum_values.dart
index a992a24..7e7fca2 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart
+++ b/pkg/front_end/testcases/general/annotation_on_enum_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
+
 // This test checks that annotations on enum values are preserved by the
 // compiler.
 
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect
index acd4589..6b1018f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int hest = 42;
 
 class Fisk<T> {
@@ -13,4 +12,5 @@
   baz,
   cafebabe,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect
index e371c97..1b22ef3 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.textual_outline_modelled.expect
@@ -1,10 +1,10 @@
-// @dart = 2.9
 class Fisk<T> {
   const Fisk.fisk(this.x);
   final T x;
 }
 
 const int hest = 42;
+
 enum Foo {
   @hest
   bar,
@@ -12,4 +12,5 @@
   baz,
   cafebabe,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
index 80eb1d7..68a491f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
@@ -1,48 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Fisk<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::Fisk::T* x;
-  const constructor fisk(self::Fisk::T* x) → self::Fisk<self::Fisk::T*>*
+class Fisk<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::Fisk::T% x;
+  const constructor fisk(self::Fisk::T% x) → self::Fisk<self::Fisk::T%>
     : self::Fisk::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 Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = #C10;
+  static const field core::List<self::Foo> values = #C10;
   @#C11
-  static const field self::Foo* bar = #C3;
+  static const field self::Foo bar = #C3;
   @#C12
-  static const field self::Foo* baz = #C6;
-  static const field self::Foo* cafebabe = #C9;
-  const constructor •(core::int* index, core::String* name) → self::Foo*
+  static const field self::Foo baz = #C6;
+  static const field self::Foo cafebabe = #C9;
+  const constructor •(core::int index, core::String name) → self::Foo
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${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 core::int* hest = #C11;
+static const field core::int hest = #C11;
 static method main() → dynamic {}
 
 constants  {
@@ -64,6 +43,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
index 80eb1d7..68a491f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
@@ -1,48 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Fisk<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::Fisk::T* x;
-  const constructor fisk(self::Fisk::T* x) → self::Fisk<self::Fisk::T*>*
+class Fisk<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::Fisk::T% x;
+  const constructor fisk(self::Fisk::T% x) → self::Fisk<self::Fisk::T%>
     : self::Fisk::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 Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = #C10;
+  static const field core::List<self::Foo> values = #C10;
   @#C11
-  static const field self::Foo* bar = #C3;
+  static const field self::Foo bar = #C3;
   @#C12
-  static const field self::Foo* baz = #C6;
-  static const field self::Foo* cafebabe = #C9;
-  const constructor •(core::int* index, core::String* name) → self::Foo*
+  static const field self::Foo baz = #C6;
+  static const field self::Foo cafebabe = #C9;
+  const constructor •(core::int index, core::String name) → self::Foo
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${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 core::int* hest = #C11;
+static const field core::int hest = #C11;
 static method main() → dynamic {}
 
 constants  {
@@ -64,6 +43,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
index e14c553..42e2727 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
@@ -1,48 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Fisk<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::Fisk::T* x;
-  const constructor fisk(self::Fisk::T* x) → self::Fisk<self::Fisk::T*>*
+class Fisk<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::Fisk::T% x;
+  const constructor fisk(self::Fisk::T% x) → self::Fisk<self::Fisk::T%>
     : self::Fisk::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 Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
+  static const field core::List<self::Foo> values = const <self::Foo>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
   @self::hest
-  static const field self::Foo* bar = const self::Foo::•(0, "bar");
-  @self::Fisk::fisk<core::int*>(self::hest)
-  static const field self::Foo* baz = const self::Foo::•(1, "baz");
-  static const field self::Foo* cafebabe = const self::Foo::•(2, "cafebabe");
-  const constructor •(core::int* index, core::String* name) → self::Foo*
+  static const field self::Foo bar = const self::Foo::•(0, "bar");
+  @self::Fisk::fisk<core::int>(self::hest)
+  static const field self::Foo baz = const self::Foo::•(1, "baz");
+  static const field self::Foo cafebabe = const self::Foo::•(2, "cafebabe");
+  const constructor •(core::int index, core::String name) → self::Foo
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${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 core::int* hest = 42;
+static const field core::int hest = 42;
 static method main() → dynamic
   ;
 
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
index 80eb1d7..68a491f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
@@ -1,48 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Fisk<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  final field self::Fisk::T* x;
-  const constructor fisk(self::Fisk::T* x) → self::Fisk<self::Fisk::T*>*
+class Fisk<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  final field self::Fisk::T% x;
+  const constructor fisk(self::Fisk::T% x) → self::Fisk<self::Fisk::T%>
     : self::Fisk::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 Foo extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Foo*>* values = #C10;
+  static const field core::List<self::Foo> values = #C10;
   @#C11
-  static const field self::Foo* bar = #C3;
+  static const field self::Foo bar = #C3;
   @#C12
-  static const field self::Foo* baz = #C6;
-  static const field self::Foo* cafebabe = #C9;
-  const constructor •(core::int* index, core::String* name) → self::Foo*
+  static const field self::Foo baz = #C6;
+  static const field self::Foo cafebabe = #C9;
+  const constructor •(core::int index, core::String name) → self::Foo
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Foo.${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 core::int* hest = #C11;
+static const field core::int hest = #C11;
 static method main() → dynamic {}
 
 constants  {
@@ -64,6 +43,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_top.dart b/pkg/front_end/testcases/general/annotation_top.dart
index ee7490b..b3601f6 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart
+++ b/pkg/front_end/testcases/general/annotation_top.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
+
 @a
 @A(1)
 library test;
@@ -26,7 +26,7 @@
 
 @a
 @A(3)
-int f1, f2;
+int? f1, f2;
 
 @a
 @A(4)
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_top.dart.textual_outline.expect
index 2135285..e016597 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_top.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @a
 @A(1)
 library test;
@@ -21,7 +20,7 @@
 typedef F2 = void Function();
 @a
 @A(3)
-int f1, f2;
+int? f1, f2;
 @a
 @A(4)
 void main() {}
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/annotation_top.dart.textual_outline_modelled.expect
index 09e49c6..1d26ed8 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/annotation_top.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @a
 @A(1)
 library test;
@@ -14,7 +13,7 @@
 const Object a = const Object();
 @a
 @A(3)
-int f1, f2;
+int? f1, f2;
 @a
 @A(3)
 typedef F2 = void Function();
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.weak.expect b/pkg/front_end/testcases/general/annotation_top.dart.weak.expect
index b8fa4b8..c2da223 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_top.dart.weak.expect
@@ -1,54 +1,34 @@
 @#C1
 @#C2
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 @#C2
-typedef F1 = () →* void;
+typedef F1 = () → void;
 @#C1
 @#C2
-typedef F2 = () →* void;
+typedef F2 = () → void;
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* value) → self::A*
+  const constructor •(core::int value) → 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
 }
 @#C1
 @#C2
 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
 }
-static const field core::Object* a = #C1;
+static const field core::Object a = #C1;
 @#C1
 @#C2
-static field core::int* f1;
+static field core::int? f1;
 @#C1
 @#C2
-static field core::int* f2;
+static field core::int? f2;
 @#C1
 @#C2
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect
index b8fa4b8..c2da223 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_top.dart.weak.modular.expect
@@ -1,54 +1,34 @@
 @#C1
 @#C2
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 @#C2
-typedef F1 = () →* void;
+typedef F1 = () → void;
 @#C1
 @#C2
-typedef F2 = () →* void;
+typedef F2 = () → void;
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* value) → self::A*
+  const constructor •(core::int value) → 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
 }
 @#C1
 @#C2
 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
 }
-static const field core::Object* a = #C1;
+static const field core::Object a = #C1;
 @#C1
 @#C2
-static field core::int* f1;
+static field core::int? f1;
 @#C1
 @#C2
-static field core::int* f2;
+static field core::int? f2;
 @#C1
 @#C2
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_top.dart.weak.outline.expect
index f0fe7fb..d31937d 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_top.dart.weak.outline.expect
@@ -1,53 +1,33 @@
 @test::a
 @test::A::•(1)
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @self::a
 @self::A::•(2)
-typedef F1 = () →* void;
+typedef F1 = () → void;
 @self::a
 @self::A::•(3)
-typedef F2 = () →* void;
+typedef F2 = () → void;
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* value) → self::A*
+  const constructor •(core::int value) → 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
 }
 @self::a
 @self::A::•(2)
 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
 }
-static const field core::Object* a = const core::Object::•();
+static const field core::Object a = const core::Object::•();
 @self::a
 @self::A::•(3)
-static field core::int* f1;
+static field core::int? f1;
 @self::a
 @self::A::•(3)
-static field core::int* f2;
+static field core::int? f2;
 @self::a
 @self::A::•(4)
 static method main() → void
diff --git a/pkg/front_end/testcases/general/annotation_top.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_top.dart.weak.transformed.expect
index b8fa4b8..c2da223 100644
--- a/pkg/front_end/testcases/general/annotation_top.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_top.dart.weak.transformed.expect
@@ -1,54 +1,34 @@
 @#C1
 @#C2
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 @#C1
 @#C2
-typedef F1 = () →* void;
+typedef F1 = () → void;
 @#C1
 @#C2
-typedef F2 = () →* void;
+typedef F2 = () → void;
 class A extends core::Object /*hasConstConstructor*/  {
-  const constructor •(core::int* value) → self::A*
+  const constructor •(core::int value) → 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
 }
 @#C1
 @#C2
 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
 }
-static const field core::Object* a = #C1;
+static const field core::Object a = #C1;
 @#C1
 @#C2
-static field core::int* f1;
+static field core::int? f1;
 @#C1
 @#C2
-static field core::int* f2;
+static field core::int? f2;
 @#C1
 @#C2
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart b/pkg/front_end/testcases/general/annotation_typedef_formals.dart
index 1eb641f..bfa05d7 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.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 compiler handles annotations on formals of
 // typedefs.
 
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline.expect
index 85560f8..15fb5d5 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int foo = 21;
 const int bar = 42;
 const int baz = 84;
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline_modelled.expect
index 38e9070..b301156 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int bar = 42;
 const int baz = 84;
 const int foo = 21;
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 d6f9911..44bd339 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
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 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;
-static const field core::int* foo = #C1;
-static const field core::int* bar = #C2;
-static const field core::int* baz = #C3;
+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;
+static const field core::int foo = #C1;
+static const field core::int bar = #C2;
+static const field core::int baz = #C3;
 static method main() → dynamic {}
 
 constants  {
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 d6f9911..44bd339 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
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 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;
-static const field core::int* foo = #C1;
-static const field core::int* bar = #C2;
-static const field core::int* baz = #C3;
+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;
+static const field core::int foo = #C1;
+static const field core::int bar = #C2;
+static const field core::int baz = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.outline.expect
index c1deefb..e3a44ee 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals.dart.weak.outline.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-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 = 21;
-static const field core::int* bar = 42;
-static const field core::int* baz = 84;
+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 = 21;
+static const field core::int bar = 42;
+static const field core::int baz = 84;
 static method main() → dynamic
   ;
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 d6f9911..44bd339 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
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 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;
-static const field core::int* foo = #C1;
-static const field core::int* bar = #C2;
-static const field core::int* baz = #C3;
+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;
+static const field core::int foo = #C1;
+static const field core::int bar = #C2;
+static const field core::int baz = #C3;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart
index 81560dc..64d7e03 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.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 annotation on a formal parameter of a typedef is
 // resolved to the top-level constant, and not to the parameter itself in case
 // of a name match.
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline.expect
index 2549290..31a5a66 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int app = 0;
 typedef int F(@app int app);
 main() {}
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline_modelled.expect
index af7fca0..e353a08 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int app = 0;
 main() {}
 typedef int F(@app int app);
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 9bab9c9..95d7ed5 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
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int* app) →* core::int*;
-static const field core::int* app = #C1;
+typedef F = (@#C1 core::int app) → core::int;
+static const field core::int app = #C1;
 static method main() → dynamic {}
 
 constants  {
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 9bab9c9..95d7ed5 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
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int* app) →* core::int*;
-static const field core::int* app = #C1;
+typedef F = (@#C1 core::int app) → core::int;
+static const field core::int app = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.outline.expect
index 4c75196..f4adaf4 100644
--- a/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_typedef_formals_resolution.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (core::int*) →* core::int*;
-static const field core::int* app = 0;
+typedef F = (core::int) → core::int;
+static const field core::int app = 0;
 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 9bab9c9..95d7ed5 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
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef F = (@#C1 core::int* app) →* core::int*;
-static const field core::int* app = #C1;
+typedef F = (@#C1 core::int app) → core::int;
+static const field core::int app = #C1;
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart b/pkg/front_end/testcases/general/annotation_variable_declaration.dart
index 7635fa4..82ff403 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.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 = 42;
 
 class Bar {
@@ -12,7 +12,7 @@
 class Baz {
   Baz(@foo constructorFormal);
 
-  factory Baz.bazFactory(@foo factoryFormal) => null;
+  factory Baz.bazFactory(@foo factoryFormal) => throw '';
 
   fisk(@foo formal1, @Bar() formal2, @Bar.named(foo) formal3,
       @foo @Bar.named(foo) formal4,
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline.expect
index 788c674..82a6689 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const int foo = 42;
 
 class Bar {
@@ -8,7 +7,7 @@
 
 class Baz {
   Baz(@foo constructorFormal);
-  factory Baz.bazFactory(@foo factoryFormal) => null;
+  factory Baz.bazFactory(@foo factoryFormal) => throw '';
   fisk(@foo formal1, @Bar() formal2, @Bar.named(foo) formal3,
       @foo @Bar.named(foo) formal4,
       [@foo optional]) {}
diff --git a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline_modelled.expect
index cbd062c..a836c90 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bar {
   const Bar();
   const Bar.named(x);
@@ -6,7 +5,7 @@
 
 class Baz {
   Baz(@foo constructorFormal);
-  factory Baz.bazFactory(@foo factoryFormal) => null;
+  factory Baz.bazFactory(@foo factoryFormal) => throw '';
   fisk(@foo formal1, @Bar() formal2, @Bar.named(foo) formal3,
       @foo @Bar.named(foo) formal4,
       [@foo optional]) {}
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 de080e6..d111b25 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
@@ -1,58 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({@#C1 dynamic named}) →* dynamic;
+typedef hest_t = ({@#C1 dynamic named}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar*
+  const constructor •() → self::Bar
     : super core::Object::•()
     ;
-  const constructor named(dynamic x) → self::Bar*
+  const constructor named(dynamic x) → 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 Baz extends core::Object {
-  constructor •(@#C1 dynamic constructorFormal) → self::Baz*
+  constructor •(@#C1 dynamic constructorFormal) → self::Baz
     : super core::Object::•()
     ;
-  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz*
-    return null;
+  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz
+    return throw "";
   method fisk(@#C1 dynamic formal1, @#C2 dynamic formal2, @#C2 dynamic formal3, @#C1 @#C2 dynamic formal4, [@#C1 dynamic optional = #C3]) → dynamic {
     @#C1 dynamic local1;
     @#C2 dynamic local2;
     @#C2 dynamic local3;
     @#C1 @#C2 dynamic local4;
-    @#C1 core::String* localWithInitializer = "hello";
+    @#C1 core::String localWithInitializer = "hello";
     @#C1 @#C2 dynamic localGroupPart1;
     @#C1 @#C2 dynamic localGroupPart2;
     function naebdyr(@#C1 dynamic nestedFormal) → Null
       return null;
-    (dynamic) →* Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
+    (dynamic) → Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
   }
   method hest({@#C1 dynamic named = #C3}) → 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 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/annotation_variable_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.modular.expect
index de080e6..d111b25 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
@@ -1,58 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({@#C1 dynamic named}) →* dynamic;
+typedef hest_t = ({@#C1 dynamic named}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar*
+  const constructor •() → self::Bar
     : super core::Object::•()
     ;
-  const constructor named(dynamic x) → self::Bar*
+  const constructor named(dynamic x) → 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 Baz extends core::Object {
-  constructor •(@#C1 dynamic constructorFormal) → self::Baz*
+  constructor •(@#C1 dynamic constructorFormal) → self::Baz
     : super core::Object::•()
     ;
-  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz*
-    return null;
+  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz
+    return throw "";
   method fisk(@#C1 dynamic formal1, @#C2 dynamic formal2, @#C2 dynamic formal3, @#C1 @#C2 dynamic formal4, [@#C1 dynamic optional = #C3]) → dynamic {
     @#C1 dynamic local1;
     @#C2 dynamic local2;
     @#C2 dynamic local3;
     @#C1 @#C2 dynamic local4;
-    @#C1 core::String* localWithInitializer = "hello";
+    @#C1 core::String localWithInitializer = "hello";
     @#C1 @#C2 dynamic localGroupPart1;
     @#C1 @#C2 dynamic localGroupPart2;
     function naebdyr(@#C1 dynamic nestedFormal) → Null
       return null;
-    (dynamic) →* Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
+    (dynamic) → Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
   }
   method hest({@#C1 dynamic named = #C3}) → 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 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/annotation_variable_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
index cf16cc9..2ca5306 100644
--- a/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_variable_declaration.dart.weak.outline.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({named: dynamic}) →* dynamic;
+typedef hest_t = ({named: dynamic}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar*
+  const constructor •() → self::Bar
     : super core::Object::•()
     ;
-  const constructor named(dynamic x) → self::Bar*
+  const constructor named(dynamic x) → 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 Baz extends core::Object {
-  constructor •(dynamic constructorFormal) → self::Baz*
+  constructor •(dynamic constructorFormal) → self::Baz
     ;
-  static factory bazFactory(dynamic factoryFormal) → self::Baz*
+  static factory bazFactory(dynamic factoryFormal) → self::Baz
     ;
   method fisk(dynamic formal1, dynamic formal2, dynamic formal3, dynamic formal4, [dynamic optional]) → dynamic
     ;
   method hest({dynamic named}) → 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 = 42;
+static const field core::int foo = 42;
 static method main() → dynamic
   ;
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 de080e6..d111b25 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
@@ -1,58 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef hest_t = ({@#C1 dynamic named}) →* dynamic;
+typedef hest_t = ({@#C1 dynamic named}) → dynamic;
 class Bar extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::Bar*
+  const constructor •() → self::Bar
     : super core::Object::•()
     ;
-  const constructor named(dynamic x) → self::Bar*
+  const constructor named(dynamic x) → 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 Baz extends core::Object {
-  constructor •(@#C1 dynamic constructorFormal) → self::Baz*
+  constructor •(@#C1 dynamic constructorFormal) → self::Baz
     : super core::Object::•()
     ;
-  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz*
-    return null;
+  static factory bazFactory(@#C1 dynamic factoryFormal) → self::Baz
+    return throw "";
   method fisk(@#C1 dynamic formal1, @#C2 dynamic formal2, @#C2 dynamic formal3, @#C1 @#C2 dynamic formal4, [@#C1 dynamic optional = #C3]) → dynamic {
     @#C1 dynamic local1;
     @#C2 dynamic local2;
     @#C2 dynamic local3;
     @#C1 @#C2 dynamic local4;
-    @#C1 core::String* localWithInitializer = "hello";
+    @#C1 core::String localWithInitializer = "hello";
     @#C1 @#C2 dynamic localGroupPart1;
     @#C1 @#C2 dynamic localGroupPart2;
     function naebdyr(@#C1 dynamic nestedFormal) → Null
       return null;
-    (dynamic) →* Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
+    (dynamic) → Null roedmus = (@#C1 dynamic closureFormal) → Null => null;
   }
   method hest({@#C1 dynamic named = #C3}) → 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 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/argument.dart b/pkg/front_end/testcases/general/argument.dart
index e483d8a..8642ce9 100644
--- a/pkg/front_end/testcases/general/argument.dart
+++ b/pkg/front_end/testcases/general/argument.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 Base {}
 
 class Foo extends Base {}
diff --git a/pkg/front_end/testcases/general/argument.dart.textual_outline.expect b/pkg/front_end/testcases/general/argument.dart.textual_outline.expect
index c9367b3..09a1fdd 100644
--- a/pkg/front_end/testcases/general/argument.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/argument.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Base {}
 
 class Foo extends Base {}
diff --git a/pkg/front_end/testcases/general/argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/argument.dart.textual_outline_modelled.expect
index 66bc084..3150668 100644
--- a/pkg/front_end/testcases/general/argument.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/argument.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Base {}
 
 class Bar extends Base {}
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.expect b/pkg/front_end/testcases/general/argument.dart.weak.expect
index e667193..e9814c5 100644
--- a/pkg/front_end/testcases/general/argument.dart.weak.expect
+++ b/pkg/front_end/testcases/general/argument.dart.weak.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::Base {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super self::Base::•()
     ;
 }
 class Bar extends self::Base {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super self::Base::•()
     ;
 }
 class Baz extends self::Base {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.modular.expect b/pkg/front_end/testcases/general/argument.dart.weak.modular.expect
index e667193..e9814c5 100644
--- a/pkg/front_end/testcases/general/argument.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/argument.dart.weak.modular.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::Base {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super self::Base::•()
     ;
 }
 class Bar extends self::Base {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super self::Base::•()
     ;
 }
 class Baz extends self::Base {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.outline.expect b/pkg/front_end/testcases/general/argument.dart.weak.outline.expect
index 4dc8fe1..c976045 100644
--- a/pkg/front_end/testcases/general/argument.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/argument.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::Base {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
 }
 class Bar extends self::Base {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     ;
 }
 class Baz extends self::Base {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     ;
 }
 static method foo(dynamic x) → void
diff --git a/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect b/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect
index e667193..e9814c5 100644
--- a/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/argument.dart.weak.transformed.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo extends self::Base {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super self::Base::•()
     ;
 }
 class Bar extends self::Base {
-  synthetic constructor •() → self::Bar*
+  synthetic constructor •() → self::Bar
     : super self::Base::•()
     ;
 }
 class Baz extends self::Base {
-  synthetic constructor •() → self::Baz*
+  synthetic constructor •() → self::Baz
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart b/pkg/front_end/testcases/general/argument_mismatch.dart
index ed5aa97..ec2894e 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart
+++ b/pkg/front_end/testcases/general/argument_mismatch.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
+
 foo() {}
 
 test() {
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline.expect
index 0a62fd2..3b58842 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 foo() {}
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline_modelled.expect
index 3bcd9ca..1391a6a 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/argument_mismatch.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 foo() {}
 main() {}
 test() {}
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.expect
index b0d5171..4ad0d86 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.expect
+++ b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect
index b0d5171..4ad0d86 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.outline.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.outline.expect
index 33d65b1..9bfb41e 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/argument_mismatch.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/argument_mismatch.dart.weak.transformed.expect b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.transformed.expect
index b0d5171..4ad0d86 100644
--- a/pkg/front_end/testcases/general/argument_mismatch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/argument_mismatch.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/arithmetic.dart b/pkg/front_end/testcases/general/arithmetic.dart
index d1d5bfb..9441f1c 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart
+++ b/pkg/front_end/testcases/general/arithmetic.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
-
 int foo(int x, int y) {
   var z = x + y;
   return z << 4;
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.textual_outline.expect b/pkg/front_end/testcases/general/arithmetic.dart.textual_outline.expect
index 96ca7d7..5c6fdec 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 int foo(int x, int y) {}
 void loop(List xs) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/arithmetic.dart.textual_outline_modelled.expect
index 19ae1c4..d2e4a11 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 int foo(int x, int y) {}
 main() {}
 void loop(List xs) {}
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.expect
index 0e703fd..720607a 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::int* x, core::int* y) → core::int* {
-  core::int* z = x.{core::num::+}(y){(core::num*) →* core::int*};
-  return z.{core::int::<<}(4){(core::int*) →* core::int*};
+static method foo(core::int x, core::int y) → core::int {
+  core::int z = x.{core::num::+}(y){(core::num) → core::int};
+  return z.{core::int::<<}(4){(core::int) → core::int};
 }
-static method loop(core::List<dynamic>* xs) → void {
-  core::int* _ = xs.{core::List::length}{core::int*};
-  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method loop(core::List<dynamic> xs) → void {
+  core::int _ = xs.{core::List::length}{core::int};
+  for (core::int i = 0; i.{core::num::<}(xs.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect
index 0e703fd..720607a 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::int* x, core::int* y) → core::int* {
-  core::int* z = x.{core::num::+}(y){(core::num*) →* core::int*};
-  return z.{core::int::<<}(4){(core::int*) →* core::int*};
+static method foo(core::int x, core::int y) → core::int {
+  core::int z = x.{core::num::+}(y){(core::num) → core::int};
+  return z.{core::int::<<}(4){(core::int) → core::int};
 }
-static method loop(core::List<dynamic>* xs) → void {
-  core::int* _ = xs.{core::List::length}{core::int*};
-  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method loop(core::List<dynamic> xs) → void {
+  core::int _ = xs.{core::List::length}{core::int};
+  for (core::int i = 0; i.{core::num::<}(xs.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.outline.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.outline.expect
index 6a82a38..e78ce7e 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.outline.expect
@@ -1,10 +1,10 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::int* x, core::int* y) → core::int*
+static method foo(core::int x, core::int y) → core::int
   ;
-static method loop(core::List<dynamic>* xs) → void
+static method loop(core::List<dynamic> xs) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect
index 595172d..cedcaed 100644
--- a/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/arithmetic.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method foo(core::int* x, core::int* y) → core::int* {
-  core::int* z = x.{core::num::+}(y){(core::num*) →* core::int*};
-  return z.{core::int::<<}(4){(core::int*) →* core::int*};
+static method foo(core::int x, core::int y) → core::int {
+  core::int z = x.{core::num::+}(y){(core::num) → core::int};
+  return z.{core::int::<<}(4){(core::int) → core::int};
 }
-static method loop(core::List<dynamic>* xs) → void {
-  core::int* _ = xs.{core::List::length}{core::int*};
-  for (core::int* i = 0; i.{core::num::<}(xs.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+static method loop(core::List<dynamic> xs) → void {
+  core::int _ = xs.{core::List::length}{core::int};
+  for (core::int i = 0; i.{core::num::<}(xs.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/arrow_function.dart b/pkg/front_end/testcases/general/arrow_function.dart
index f189150..0b8e57d 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart
+++ b/pkg/front_end/testcases/general/arrow_function.dart
@@ -1,5 +1,5 @@
 // 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>() => () => T;
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.textual_outline.expect b/pkg/front_end/testcases/general/arrow_function.dart.textual_outline.expect
index 3ac95b3..b66ca49 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/arrow_function.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main<T>() => () => T;
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/arrow_function.dart.textual_outline_modelled.expect
index 3ac95b3..b66ca49 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/arrow_function.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main<T>() => () => T;
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.weak.expect b/pkg/front_end/testcases/general/arrow_function.dart.weak.expect
index 964b0b4..eb9e929 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/arrow_function.dart.weak.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object* = dynamic>() → dynamic
-  return () → core::Type* => self::main::T*;
+static method main<T extends core::Object? = dynamic>() → dynamic
+  return () → core::Type => self::main::T%;
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect
index 964b0b4..eb9e929 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/arrow_function.dart.weak.modular.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object* = dynamic>() → dynamic
-  return () → core::Type* => self::main::T*;
+static method main<T extends core::Object? = dynamic>() → dynamic
+  return () → core::Type => self::main::T%;
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.weak.outline.expect b/pkg/front_end/testcases/general/arrow_function.dart.weak.outline.expect
index 5ea07d3..f19948f 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/arrow_function.dart.weak.outline.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object* = dynamic>() → dynamic
+static method main<T extends core::Object? = dynamic>() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/arrow_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/arrow_function.dart.weak.transformed.expect
index 964b0b4..eb9e929 100644
--- a/pkg/front_end/testcases/general/arrow_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/arrow_function.dart.weak.transformed.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main<T extends core::Object* = dynamic>() → dynamic
-  return () → core::Type* => self::main::T*;
+static method main<T extends core::Object? = dynamic>() → dynamic
+  return () → core::Type => self::main::T%;
diff --git a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart
index e6ee1c2..dd3d5b3 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.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 "package:expect/expect.dart";
 
 class A {
diff --git a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.textual_outline.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.textual_outline.expect
index 9cb355d..0ee755e 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.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/assign_to_initializing_formal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.textual_outline_modelled.expect
index c0dd247..4d7dc12 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.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/assign_to_initializing_formal.dart.weak.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.expect
index 49729e1..c7f1953 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.expect
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,22 +14,12 @@
 class A extends core::Object {
   field dynamic x;
   field dynamic y;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : self::A::x = x, self::A::y = () → Null {
       invalid-expression "pkg/front_end/testcases/general/assign_to_initializing_formal.dart:13:11: Error: Can't assign to the final variable 'x'.
           x = 3;
           ^";
     }, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/assign_to_initializing_formal.dart.weak.modular.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.modular.expect
index 49729e1..c7f1953 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,22 +14,12 @@
 class A extends core::Object {
   field dynamic x;
   field dynamic y;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : self::A::x = x, self::A::y = () → Null {
       invalid-expression "pkg/front_end/testcases/general/assign_to_initializing_formal.dart:13:11: Error: Can't assign to the final variable 'x'.
           x = 3;
           ^";
     }, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/assign_to_initializing_formal.dart.weak.outline.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.outline.expect
index ddf3acf..e59235d 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -7,18 +7,8 @@
 class A extends core::Object {
   field dynamic x;
   field dynamic y;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → 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/assign_to_initializing_formal.dart.weak.transformed.expect b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.transformed.expect
index 49729e1..c7f1953 100644
--- a/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/assign_to_initializing_formal.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,22 +14,12 @@
 class A extends core::Object {
   field dynamic x;
   field dynamic y;
-  constructor •(dynamic x) → self::A*
+  constructor •(dynamic x) → self::A
     : self::A::x = x, self::A::y = () → Null {
       invalid-expression "pkg/front_end/testcases/general/assign_to_initializing_formal.dart:13:11: Error: Can't assign to the final variable 'x'.
           x = 3;
           ^";
     }, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/async_function.dart b/pkg/front_end/testcases/general/async_function.dart
index 3ba8a91..66a6f7e 100644
--- a/pkg/front_end/testcases/general/async_function.dart
+++ b/pkg/front_end/testcases/general/async_function.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:async';
 
 Future<String> asyncString() async {
diff --git a/pkg/front_end/testcases/general/async_function.dart.textual_outline.expect b/pkg/front_end/testcases/general/async_function.dart.textual_outline.expect
index 8440a30..20ff937 100644
--- a/pkg/front_end/testcases/general/async_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 Future<String> asyncString() async {}
diff --git a/pkg/front_end/testcases/general/async_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/async_function.dart.textual_outline_modelled.expect
index c2af55e..2451edd 100644
--- a/pkg/front_end/testcases/general/async_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 Future<String> asyncString() async {}
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 4a640a9..5e81b91 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.expect
@@ -1,33 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field core::List<core::String*>* stringList = <core::String*>["bar"];
-static method asyncString() → asy::Future<core::String*>* async {
+static field core::List<core::String> stringList = <core::String>["bar"];
+static method asyncString() → asy::Future<core::String> async {
   return "foo";
 }
-static method asyncString2() → asy::Future<core::String*>* async {
+static method asyncString2() → asy::Future<core::String> async {
   return self::asyncString();
 }
-static method syncStarString() → core::Iterable<core::String*>* sync* {
+static method syncStarString() → core::Iterable<core::String> sync* {
   yield "foo";
   yield* self::syncStarString2();
   yield* self::stringList;
 }
-static method syncStarString2() → core::Iterable<core::String*>* sync* {
+static method syncStarString2() → core::Iterable<core::String> sync* {
   yield "foo";
 }
-static method asyncStarString() → asy::Stream<core::String*>* async* {
+static method asyncStarString() → asy::Stream<core::String> async* {
   yield "foo";
   yield* self::asyncStarString2();
   yield await self::asyncString();
 }
-static method asyncStarString2() → asy::Stream<core::String*>* async* {
+static method asyncStarString2() → asy::Stream<core::String> async* {
   yield "bar";
 }
 static method main() → dynamic async {
-  core::String* str = await self::asyncString();
+  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 4a640a9..5e81b91 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
@@ -1,33 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field core::List<core::String*>* stringList = <core::String*>["bar"];
-static method asyncString() → asy::Future<core::String*>* async {
+static field core::List<core::String> stringList = <core::String>["bar"];
+static method asyncString() → asy::Future<core::String> async {
   return "foo";
 }
-static method asyncString2() → asy::Future<core::String*>* async {
+static method asyncString2() → asy::Future<core::String> async {
   return self::asyncString();
 }
-static method syncStarString() → core::Iterable<core::String*>* sync* {
+static method syncStarString() → core::Iterable<core::String> sync* {
   yield "foo";
   yield* self::syncStarString2();
   yield* self::stringList;
 }
-static method syncStarString2() → core::Iterable<core::String*>* sync* {
+static method syncStarString2() → core::Iterable<core::String> sync* {
   yield "foo";
 }
-static method asyncStarString() → asy::Stream<core::String*>* async* {
+static method asyncStarString() → asy::Stream<core::String> async* {
   yield "foo";
   yield* self::asyncStarString2();
   yield await self::asyncString();
 }
-static method asyncStarString2() → asy::Stream<core::String*>* async* {
+static method asyncStarString2() → asy::Stream<core::String> async* {
   yield "bar";
 }
 static method main() → dynamic async {
-  core::String* str = await self::asyncString();
+  core::String str = await self::asyncString();
 }
diff --git a/pkg/front_end/testcases/general/async_function.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_function.dart.weak.outline.expect
index b2b99f7..44980f9 100644
--- a/pkg/front_end/testcases/general/async_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/async_function.dart.weak.outline.expect
@@ -1,22 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
 
 import "dart:async";
 
-static field core::List<core::String*>* stringList;
-static method asyncString() → asy::Future<core::String*>* async 
+static field core::List<core::String> stringList;
+static method asyncString() → asy::Future<core::String> async 
   ;
-static method asyncString2() → asy::Future<core::String*>* async 
+static method asyncString2() → asy::Future<core::String> async 
   ;
-static method syncStarString() → core::Iterable<core::String*>* sync* 
+static method syncStarString() → core::Iterable<core::String> sync* 
   ;
-static method syncStarString2() → core::Iterable<core::String*>* sync* 
+static method syncStarString2() → core::Iterable<core::String> sync* 
   ;
-static method asyncStarString() → asy::Stream<core::String*>* async* 
+static method asyncStarString() → asy::Stream<core::String> async* 
   ;
-static method asyncStarString2() → asy::Stream<core::String*>* async* 
+static method asyncStarString2() → asy::Stream<core::String> async* 
   ;
 static method main() → dynamic async 
   ;
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 295921a..cd8de28 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -6,43 +6,43 @@
 
 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 */ {
-  final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
+static field core::List<core::String> stringList = core::_GrowableList::_literal1<core::String>("bar");
+static method asyncString() → asy::Future<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  core::String? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = "foo";
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method asyncString2() → asy::Future<core::String*>* /* originally async */ {
-  final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
+static method asyncString2() → asy::Future<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<core::String>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -52,20 +52,20 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method syncStarString() → core::Iterable<core::String*>* /* originally sync* */ {
-  function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-    core::int* :await_jump_var = 0;
+static method syncStarString() → core::Iterable<core::String> /* 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} = "foo";
@@ -84,13 +84,13 @@
     }
     return :sync_op;
   }
-  return new core::_SyncIterable::•<core::String*>(:sync_op_gen);
+  return new core::_SyncIterable::•<core::String>(:sync_op_gen);
 }
-static method syncStarString2() → core::Iterable<core::String*>* /* originally sync* */ {
-  function :sync_op_gen() → (core::_SyncIterator<dynamic>*, dynamic, dynamic) →* core::bool* {
-    core::int* :await_jump_var = 0;
+static method syncStarString2() → core::Iterable<core::String> /* 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} = "foo";
@@ -101,39 +101,39 @@
     }
     return :sync_op;
   }
-  return new core::_SyncIterable::•<core::String*>(:sync_op_gen);
+  return new core::_SyncIterable::•<core::String>(:sync_op_gen);
 }
-static method asyncStarString() → asy::Stream<core::String*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<core::String*>* :controller;
+static method asyncStarString() → asy::Stream<core::String> /* originally async* */ {
+  asy::_AsyncStarStreamController<core::String>? :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;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
         {
-          if(:controller.{asy::_AsyncStarStreamController::add}("foo"){(core::String*) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::add}("foo"){(core::String) → core::bool})
             return null;
           else
             [yield] null;
-          if(:controller.{asy::_AsyncStarStreamController::addStream}(self::asyncStarString2()){(asy::Stream<core::String*>) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::addStream}(self::asyncStarString2()){(asy::Stream<core::String>) → core::bool})
             return null;
           else
             [yield] null;
-          [yield] let dynamic #t1 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error, :async_op) in null;
-          if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::String*>(:result)){(core::String*) → core::bool})
+          [yield] let dynamic #t1 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error) in null;
+          if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::String>(:result_or_exception)){(core::String) → 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 {
@@ -141,32 +141,32 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::String*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String*>};
+  :controller = new asy::_AsyncStarStreamController::•<core::String>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String>};
   return :controller_stream;
 }
-static method asyncStarString2() → asy::Stream<core::String*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<core::String*>* :controller;
+static method asyncStarString2() → asy::Stream<core::String> /* originally async* */ {
+  asy::_AsyncStarStreamController<core::String>? :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;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
         {
-          if(:controller.{asy::_AsyncStarStreamController::add}("bar"){(core::String*) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::add}("bar"){(core::String) → 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 {
@@ -174,35 +174,35 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::String*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String*>};
+  :controller = new asy::_AsyncStarStreamController::•<core::String>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::String>};
   return :controller_stream;
 }
 static method main() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error, :async_op) in null;
-        core::String* str = _in::unsafeCast<core::String*>(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::asyncString(), :async_op_then, :async_op_error) in null;
+        core::String str = _in::unsafeCast<core::String>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart b/pkg/front_end/testcases/general/async_function_returns_future_or.dart
new file mode 100644
index 0000000..8a4d911
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart
@@ -0,0 +1,37 @@
+// 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';
+
+main() async {
+  await returnsString();
+  await returnsFutureOrString();
+  await returnsAwaitFutureOrString();
+  await returnsFutureString();
+  await returnsAwaitFutureString();
+  await returnsObject();
+  await returnsFutureOrObject();
+  await returnsAwaitFutureOrObject();
+  await returnsFutureObject();
+  await returnsAwaitFutureObject();
+}
+
+Future<String> returnsString() async => 'a';
+Future<String> returnsFutureOrString() async => getFutureOr<String>('a');
+Future<String> returnsAwaitFutureOrString() async =>
+    await getFutureOr<String>('a');
+Future<String> returnsFutureString() async => getFuture<String>('a');
+FutureOr<String> returnsAwaitFutureString() async =>
+    await getFuture<String>('a');
+
+Future<Object> returnsObject() async => Object();
+Future<Object> returnsFutureOrObject() async => getFutureOr<Object>(Object());
+Future<Object> returnsAwaitFutureOrObject() async =>
+    await getFutureOr<Object>(Object());
+Future<Object> returnsFutureObject() async => getFuture<Object>(Object());
+FutureOr<Object> returnsAwaitFutureObject() async =>
+    await getFuture<Object>(Object());
+
+FutureOr<T> getFutureOr<T>(T v) async => v;
+Future<T> getFuture<T>(T v) async => v;
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.textual_outline.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.textual_outline.expect
new file mode 100644
index 0000000..94a1eca
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+import 'dart:async';
+
+main() async {}
+Future<String> returnsString() async => 'a';
+Future<String> returnsFutureOrString() async => getFutureOr<String>('a');
+Future<String> returnsAwaitFutureOrString() async =>
+    await getFutureOr<String>('a');
+Future<String> returnsFutureString() async => getFuture<String>('a');
+FutureOr<String> returnsAwaitFutureString() async =>
+    await getFuture<String>('a');
+Future<Object> returnsObject() async => Object();
+Future<Object> returnsFutureOrObject() async => getFutureOr<Object>(Object());
+Future<Object> returnsAwaitFutureOrObject() async =>
+    await getFutureOr<Object>(Object());
+Future<Object> returnsFutureObject() async => getFuture<Object>(Object());
+FutureOr<Object> returnsAwaitFutureObject() async =>
+    await getFuture<Object>(Object());
+FutureOr<T> getFutureOr<T>(T v) async => v;
+Future<T> getFuture<T>(T v) async => v;
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..41cf593
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+import 'dart:async';
+
+Future<Object> returnsAwaitFutureOrObject() async =>
+    await getFutureOr<Object>(Object());
+Future<Object> returnsFutureObject() async => getFuture<Object>(Object());
+Future<Object> returnsFutureOrObject() async => getFutureOr<Object>(Object());
+Future<Object> returnsObject() async => Object();
+Future<String> returnsAwaitFutureOrString() async =>
+    await getFutureOr<String>('a');
+Future<String> returnsFutureOrString() async => getFutureOr<String>('a');
+Future<String> returnsFutureString() async => getFuture<String>('a');
+Future<String> returnsString() async => 'a';
+Future<T> getFuture<T>(T v) async => v;
+FutureOr<Object> returnsAwaitFutureObject() async =>
+    await getFuture<Object>(Object());
+FutureOr<String> returnsAwaitFutureString() async =>
+    await getFuture<String>('a');
+FutureOr<T> getFutureOr<T>(T v) async => v;
+main() async {}
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
new file mode 100644
index 0000000..6f8e4d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic async {
+  await self::returnsString();
+  await self::returnsFutureOrString();
+  await self::returnsAwaitFutureOrString();
+  await self::returnsFutureString();
+  await self::returnsAwaitFutureString();
+  await self::returnsObject();
+  await self::returnsFutureOrObject();
+  await self::returnsAwaitFutureOrObject();
+  await self::returnsFutureObject();
+  await self::returnsAwaitFutureObject();
+}
+static method returnsString() → asy::Future<core::String> async 
+  return "a";
+static method returnsFutureOrString() → asy::Future<core::String> async 
+  return self::getFutureOr<core::String>("a");
+static method returnsAwaitFutureOrString() → asy::Future<core::String> async 
+  return await self::getFutureOr<core::String>("a");
+static method returnsFutureString() → asy::Future<core::String> async 
+  return self::getFuture<core::String>("a");
+static method returnsAwaitFutureString() → FutureOr<core::String> async 
+  return await self::getFuture<core::String>("a");
+static method returnsObject() → asy::Future<core::Object> async 
+  return new core::Object::•();
+static method returnsFutureOrObject() → asy::Future<core::Object> async 
+  return self::getFutureOr<core::Object>(new core::Object::•());
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async 
+  return await self::getFutureOr<core::Object>(new core::Object::•());
+static method returnsFutureObject() → asy::Future<core::Object> async 
+  return self::getFuture<core::Object>(new core::Object::•());
+static method returnsAwaitFutureObject() → FutureOr<core::Object> async 
+  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 
+  return v;
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async 
+  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
new file mode 100644
index 0000000..6f8e4d4
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.modular.expect
@@ -0,0 +1,43 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic async {
+  await self::returnsString();
+  await self::returnsFutureOrString();
+  await self::returnsAwaitFutureOrString();
+  await self::returnsFutureString();
+  await self::returnsAwaitFutureString();
+  await self::returnsObject();
+  await self::returnsFutureOrObject();
+  await self::returnsAwaitFutureOrObject();
+  await self::returnsFutureObject();
+  await self::returnsAwaitFutureObject();
+}
+static method returnsString() → asy::Future<core::String> async 
+  return "a";
+static method returnsFutureOrString() → asy::Future<core::String> async 
+  return self::getFutureOr<core::String>("a");
+static method returnsAwaitFutureOrString() → asy::Future<core::String> async 
+  return await self::getFutureOr<core::String>("a");
+static method returnsFutureString() → asy::Future<core::String> async 
+  return self::getFuture<core::String>("a");
+static method returnsAwaitFutureString() → FutureOr<core::String> async 
+  return await self::getFuture<core::String>("a");
+static method returnsObject() → asy::Future<core::Object> async 
+  return new core::Object::•();
+static method returnsFutureOrObject() → asy::Future<core::Object> async 
+  return self::getFutureOr<core::Object>(new core::Object::•());
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async 
+  return await self::getFutureOr<core::Object>(new core::Object::•());
+static method returnsFutureObject() → asy::Future<core::Object> async 
+  return self::getFuture<core::Object>(new core::Object::•());
+static method returnsAwaitFutureObject() → FutureOr<core::Object> async 
+  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 
+  return v;
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async 
+  return v;
diff --git a/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.outline.expect
new file mode 100644
index 0000000..98b26fc
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.outline.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method main() → dynamic async 
+  ;
+static method returnsString() → asy::Future<core::String> async 
+  ;
+static method returnsFutureOrString() → asy::Future<core::String> async 
+  ;
+static method returnsAwaitFutureOrString() → asy::Future<core::String> async 
+  ;
+static method returnsFutureString() → asy::Future<core::String> async 
+  ;
+static method returnsAwaitFutureString() → FutureOr<core::String> async 
+  ;
+static method returnsObject() → asy::Future<core::Object> async 
+  ;
+static method returnsFutureOrObject() → asy::Future<core::Object> async 
+  ;
+static method returnsAwaitFutureOrObject() → asy::Future<core::Object> async 
+  ;
+static method returnsFutureObject() → asy::Future<core::Object> async 
+  ;
+static method returnsAwaitFutureObject() → FutureOr<core::Object> async 
+  ;
+static method getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<self::getFutureOr::T%> async 
+  ;
+static method getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<self::getFuture::T%> async 
+  ;
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
new file mode 100644
index 0000000..2ccc693
--- /dev/null
+++ b/pkg/front_end/testcases/general/async_function_returns_future_or.dart.weak.transformed.expect
@@ -0,0 +1,386 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+static method main() → 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 :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L1:
+      {
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnsString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnsFutureOrString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnsAwaitFutureOrString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnsFutureString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnsAwaitFutureString(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::String>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnsObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnsFutureOrObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnsAwaitFutureOrObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnsFutureObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnsAwaitFutureObject(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::Object>(:result_or_exception);
+      }
+      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 returnsString() → asy::Future<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;
+  (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 = "a";
+        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 returnsFutureOrString() → asy::Future<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;
+  (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 = self::getFutureOr<core::String>("a");
+        break #L3;
+      }
+      asy::_completeOnAsyncReturn(: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 returnsAwaitFutureOrString() → asy::Future<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;
+  (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 
+    try {
+      #L4:
+      {
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::getFutureOr<core::String>("a"), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::String>(:result_or_exception);
+        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;
+}
+static method returnsFutureString() → asy::Future<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;
+  (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::getFuture<core::String>("a");
+        break #L5;
+      }
+      asy::_completeOnAsyncReturn(: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 returnsAwaitFutureString() → FutureOr<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;
+  (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 
+    try {
+      #L6:
+      {
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::getFuture<core::String>("a"), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::String>(:result_or_exception);
+        break #L6;
+      }
+      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 returnsObject() → asy::Future<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;
+  (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 {
+      #L7:
+      {
+        :return_value = new core::Object::•();
+        break #L7;
+      }
+      asy::_completeOnAsyncReturn(: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 returnsFutureOrObject() → asy::Future<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;
+  (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 {
+      #L8:
+      {
+        :return_value = self::getFutureOr<core::Object>(new core::Object::•());
+        break #L8;
+      }
+      asy::_completeOnAsyncReturn(: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 returnsAwaitFutureOrObject() → asy::Future<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;
+  (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 
+    try {
+      #L9:
+      {
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::getFutureOr<core::Object>(new core::Object::•()), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::Object>(:result_or_exception);
+        break #L9;
+      }
+      asy::_completeOnAsyncReturn(: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 returnsFutureObject() → asy::Future<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;
+  (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 {
+      #L10:
+      {
+        :return_value = self::getFuture<core::Object>(new core::Object::•());
+        break #L10;
+      }
+      asy::_completeOnAsyncReturn(: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 returnsAwaitFutureObject() → FutureOr<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;
+  (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 
+    try {
+      #L11:
+      {
+        [yield] let dynamic #t14 = asy::_awaitHelper(self::getFuture<core::Object>(new core::Object::•()), :async_op_then, :async_op_error) in null;
+        :return_value = _in::unsafeCast<core::Object>(:result_or_exception);
+        break #L11;
+      }
+      asy::_completeOnAsyncReturn(: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 getFutureOr<T extends core::Object? = dynamic>(self::getFutureOr::T% v) → FutureOr<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;
+  (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 {
+      #L12:
+      {
+        :return_value = v;
+        break #L12;
+      }
+      asy::_completeOnAsyncReturn(: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 getFuture<T extends core::Object? = dynamic>(self::getFuture::T% v) → asy::Future<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;
+  (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 {
+      #L13:
+      {
+        :return_value = v;
+        break #L13;
+      }
+      asy::_completeOnAsyncReturn(: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;
+}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart
index 1d6d599..83315cd 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.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
-
 foo() async {
   Bar x;
   for (dynamic y in x.z) {}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect
index 675b31e..e475901 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo() async {}
 main() {}
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect
index 675b31e..e475901 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo() async {}
 main() {}
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 5472a32..05a55b2 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
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:8:3: Error: 'Bar' isn't a type.
+// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:6:3: Error: 'Bar' isn't a type.
 //   Bar x;
 //   ^^^
 //
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 5472a32..05a55b2 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
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:8:3: Error: 'Bar' isn't a type.
+// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:6:3: Error: 'Bar' isn't a type.
 //   Bar x;
 //   ^^^
 //
diff --git a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect
index b695053..9c7c616 100644
--- a/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/async_method_with_invalid_type.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method foo() → dynamic async 
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 c05a8b5..5a6c5a5 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
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:8:3: Error: 'Bar' isn't a type.
+// pkg/front_end/testcases/general/async_method_with_invalid_type.dart:6:3: Error: 'Bar' isn't a type.
 //   Bar x;
 //   ^^^
 //
@@ -11,28 +11,28 @@
 import "dart:core" as core;
 
 static method foo() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         invalid-type x;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/async_nested.dart b/pkg/front_end/testcases/general/async_nested.dart
index 669f7f4..4369751 100644
--- a/pkg/front_end/testcases/general/async_nested.dart
+++ b/pkg/front_end/testcases/general/async_nested.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 has been automatically generated by script
 // "async_nested_test_generator.dart".
 
@@ -32,7 +32,7 @@
 }
 
 class Node {
-  final List<Node> nested;
+  final List<Node>? nested;
   final String name;
 
   Node(this.name, [this.nested]) {}
diff --git a/pkg/front_end/testcases/general/async_nested.dart.textual_outline.expect b/pkg/front_end/testcases/general/async_nested.dart.textual_outline.expect
index 62c9c4d..0e8b16b 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 import 'dart:async';
 
 void main() async {}
 
 class Node {
-  final List<Node> nested;
+  final List<Node>? nested;
   final String name;
   Node(this.name, [this.nested]) {}
   String toString() => '<$name:[${nested?.join(', ')}]>';
diff --git a/pkg/front_end/testcases/general/async_nested.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/async_nested.dart.textual_outline_modelled.expect
index d47e785..e5f9ca1 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 import 'dart:async';
 
 class Node {
   Node(this.name, [this.nested]) {}
   String toString() => '<$name:[${nested?.join(', ')}]>';
-  final List<Node> nested;
+  final List<Node>? nested;
   final String name;
   toSimpleString() {}
 }
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 48269f1..f7a0987 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,32 +6,23 @@
 import "dart:async";
 
 class Node extends core::Object {
-  final field core::List<self::Node*>* nested;
-  final field core::String* name;
-  constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
+  final field core::List<self::Node>? nested;
+  final field core::String name;
+  constructor •(core::String name, [core::List<self::Node>? nested = #C1]) → self::Node
     : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
-  method toString() → core::String*
-    return "<${this.{self::Node::name}{core::String*}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested}{core::List<self::Node*>*} in #t1 == null ?{core::String*} null : #t1.{core::Iterable::join}(", "){([core::String*]) →* core::String*}}]>";
+  method toString() → core::String
+    return "<${this.{self::Node::name}{core::String}}:[${let final core::List<self::Node>? #t1 = this.{self::Node::nested}{core::List<self::Node>?} in #t1 == null ?{core::String?} null : #t1{core::List<self::Node>}.{core::Iterable::join}(", "){([core::String]) → core::String}}]>";
   method toSimpleString() → dynamic {
-    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested}{core::List<self::Node*>*} in #t2 == null ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}(){() →* dynamic}){((self::Node*) →* dynamic) →* core::Iterable<dynamic>*};
-    return "${this.{self::Node::name}{core::String*}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3 == null ?{core::String*} null : #t3.{core::Iterable::join}(" "){([core::String*]) →* core::String*}}".{core::String::trim}(){() →* core::String*};
+    core::Iterable<dynamic>? tmp = let final core::List<self::Node>? #t2 = this.{self::Node::nested}{core::List<self::Node>?} in #t2 == null ?{core::Iterable<dynamic>?} null : #t2{core::List<self::Node>}.{core::Iterable::map}<dynamic>((self::Node child) → dynamic => child.{self::Node::toSimpleString}(){() → dynamic}){((self::Node) → dynamic) → core::Iterable<dynamic>};
+    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};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  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 method main() → void async {
-  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} core::String*;
+  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;
   core::print(actual);
-  if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
+  if(!(actual =={core::String::==}{(core::Object) → core::bool} expected)) {
     throw "Expected '${expected}' but got '${actual}'";
   }
 }
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 48269f1..f7a0987 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -6,32 +6,23 @@
 import "dart:async";
 
 class Node extends core::Object {
-  final field core::List<self::Node*>* nested;
-  final field core::String* name;
-  constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
+  final field core::List<self::Node>? nested;
+  final field core::String name;
+  constructor •(core::String name, [core::List<self::Node>? nested = #C1]) → self::Node
     : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
-  method toString() → core::String*
-    return "<${this.{self::Node::name}{core::String*}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested}{core::List<self::Node*>*} in #t1 == null ?{core::String*} null : #t1.{core::Iterable::join}(", "){([core::String*]) →* core::String*}}]>";
+  method toString() → core::String
+    return "<${this.{self::Node::name}{core::String}}:[${let final core::List<self::Node>? #t1 = this.{self::Node::nested}{core::List<self::Node>?} in #t1 == null ?{core::String?} null : #t1{core::List<self::Node>}.{core::Iterable::join}(", "){([core::String]) → core::String}}]>";
   method toSimpleString() → dynamic {
-    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested}{core::List<self::Node*>*} in #t2 == null ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}(){() →* dynamic}){((self::Node*) →* dynamic) →* core::Iterable<dynamic>*};
-    return "${this.{self::Node::name}{core::String*}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3 == null ?{core::String*} null : #t3.{core::Iterable::join}(" "){([core::String*]) →* core::String*}}".{core::String::trim}(){() →* core::String*};
+    core::Iterable<dynamic>? tmp = let final core::List<self::Node>? #t2 = this.{self::Node::nested}{core::List<self::Node>?} in #t2 == null ?{core::Iterable<dynamic>?} null : #t2{core::List<self::Node>}.{core::Iterable::map}<dynamic>((self::Node child) → dynamic => child.{self::Node::toSimpleString}(){() → dynamic}){((self::Node) → dynamic) → core::Iterable<dynamic>};
+    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};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  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 method main() → void async {
-  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} core::String*;
+  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;
   core::print(actual);
-  if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
+  if(!(actual =={core::String::==}{(core::Object) → core::bool} expected)) {
     throw "Expected '${expected}' but got '${actual}'";
   }
 }
diff --git a/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect b/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
index f2d2efa..60f8e3e 100644
--- a/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/async_nested.dart.weak.outline.expect
@@ -1,27 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 class Node extends core::Object {
-  final field core::List<self::Node*>* nested;
-  final field core::String* name;
-  constructor •(core::String* name, [core::List<self::Node*>* nested]) → self::Node*
+  final field core::List<self::Node>? nested;
+  final field core::String name;
+  constructor •(core::String name, [core::List<self::Node>? nested]) → self::Node
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
   method toSimpleString() → 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 noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 static method main() → void async 
   ;
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 758329d..9082a3a 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -7,70 +7,61 @@
 import "dart:async";
 
 class Node extends core::Object {
-  final field core::List<self::Node*>* nested;
-  final field core::String* name;
-  constructor •(core::String* name, [core::List<self::Node*>* nested = #C1]) → self::Node*
+  final field core::List<self::Node>? nested;
+  final field core::String name;
+  constructor •(core::String name, [core::List<self::Node>? nested = #C1]) → self::Node
     : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
-  method toString() → core::String*
-    return "<${this.{self::Node::name}{core::String*}}:[${let final core::List<self::Node*>* #t1 = this.{self::Node::nested}{core::List<self::Node*>*} in #t1 == null ?{core::String*} null : #t1.{core::Iterable::join}(", "){([core::String*]) →* core::String*}}]>";
+  method toString() → core::String
+    return "<${this.{self::Node::name}{core::String}}:[${let final core::List<self::Node>? #t1 = this.{self::Node::nested}{core::List<self::Node>?} in #t1 == null ?{core::String?} null : #t1{core::List<self::Node>}.{core::Iterable::join}(", "){([core::String]) → core::String}}]>";
   method toSimpleString() → dynamic {
-    core::Iterable<dynamic>* tmp = let final core::List<self::Node*>* #t2 = this.{self::Node::nested}{core::List<self::Node*>*} in #t2 == null ?{core::Iterable<dynamic>*} null : #t2.{core::Iterable::map}<dynamic>((self::Node* child) → dynamic => child.{self::Node::toSimpleString}(){() →* dynamic}){((self::Node*) →* dynamic) →* core::Iterable<dynamic>*};
-    return "${this.{self::Node::name}{core::String*}} ${let final core::Iterable<dynamic>* #t3 = tmp in #t3 == null ?{core::String*} null : #t3.{core::Iterable::join}(" "){([core::String*]) →* core::String*}}".{core::String::trim}(){() →* core::String*};
+    core::Iterable<dynamic>? tmp = let final core::List<self::Node>? #t2 = this.{self::Node::nested}{core::List<self::Node>?} in #t2 == null ?{core::Iterable<dynamic>?} null : #t2{core::List<self::Node>}.{core::Iterable::map}<dynamic>((self::Node child) → dynamic => child.{self::Node::toSimpleString}(){() → dynamic}){((self::Node) → dynamic) → core::Iterable<dynamic>};
+    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};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  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 method main() → void /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  self::Node* :async_temporary_0;
-  self::Node* :async_temporary_1;
-  self::Node* :async_temporary_2;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  self::Node :async_temporary_0;
+  self::Node :async_temporary_1;
+  self::Node :async_temporary_2;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        core::String* expected = "1 2 3 4 5 6 7 8 9 10";
-        :async_temporary_2 = new self::Node::•("2", core::_GrowableList::•<self::Node*>(0));
-        [yield] let dynamic #t4 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("7", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t5 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node*>(_in::unsafeCast<self::Node*>(:result)))), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_1 = _in::unsafeCast<self::Node*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("8", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("9", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t8 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node*>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_1), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result)))))), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t9 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node*>(_in::unsafeCast<self::Node*>(:result)))), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_0 = _in::unsafeCast<self::Node*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node*>(new self::Node::•("10", core::_GrowableList::•<self::Node*>(0))), :async_op_then, :async_op_error, :async_op) in null;
-        self::Node* node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node*>(_in::unsafeCast<self::Node*>(:async_temporary_2), _in::unsafeCast<self::Node*>(:async_temporary_0), _in::unsafeCast<self::Node*>(:result)));
-        core::String* actual = node.{self::Node::toSimpleString}(){() →* dynamic} as{TypeError,ForDynamic} core::String*;
+        core::String expected = "1 2 3 4 5 6 7 8 9 10";
+        :async_temporary_2 = new self::Node::•("2", core::_GrowableList::•<self::Node>(0));
+        [yield] let dynamic #t4 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("7", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t5 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node>(_in::unsafeCast<self::Node>(:result_or_exception)))), :async_op_then, :async_op_error) in null;
+        :async_temporary_1 = _in::unsafeCast<self::Node>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("8", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
+        :async_temporary_0 = _in::unsafeCast<self::Node>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("9", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t8 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node>(_in::unsafeCast<self::Node>(:async_temporary_1), _in::unsafeCast<self::Node>(:async_temporary_0), _in::unsafeCast<self::Node>(:result_or_exception)))))), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t9 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node>(_in::unsafeCast<self::Node>(:result_or_exception)))), :async_op_then, :async_op_error) in null;
+        :async_temporary_0 = _in::unsafeCast<self::Node>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(asy::Future::value<self::Node>(new self::Node::•("10", core::_GrowableList::•<self::Node>(0))), :async_op_then, :async_op_error) in null;
+        self::Node node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node>(_in::unsafeCast<self::Node>(:async_temporary_2), _in::unsafeCast<self::Node>(:async_temporary_0), _in::unsafeCast<self::Node>(:result_or_exception)));
+        core::String actual = node.{self::Node::toSimpleString}(){() → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
         core::print(actual);
-        if(!(actual =={core::String::==}{(core::Object*) →* core::bool*} expected)) {
+        if(!(actual =={core::String::==}{(core::Object) → core::bool} expected)) {
           throw "Expected '${expected}' but got '${actual}'";
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/await.dart b/pkg/front_end/testcases/general/await.dart
index a34fe00..03f2945 100644
--- a/pkg/front_end/testcases/general/await.dart
+++ b/pkg/front_end/testcases/general/await.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
+
 main() async {
   print(await "Hello, World!");
 }
diff --git a/pkg/front_end/testcases/general/await.dart.textual_outline.expect b/pkg/front_end/testcases/general/await.dart.textual_outline.expect
index ff8d120..386f405 100644
--- a/pkg/front_end/testcases/general/await.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/await.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() async {}
diff --git a/pkg/front_end/testcases/general/await.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/await.dart.textual_outline_modelled.expect
index ff8d120..386f405 100644
--- a/pkg/front_end/testcases/general/await.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/await.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() async {}
diff --git a/pkg/front_end/testcases/general/await.dart.weak.expect b/pkg/front_end/testcases/general/await.dart.weak.expect
index 5b1be33..e1be515 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await.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/await.dart.weak.modular.expect b/pkg/front_end/testcases/general/await.dart.weak.modular.expect
index 5b1be33..e1be515 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/await.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/await.dart.weak.outline.expect b/pkg/front_end/testcases/general/await.dart.weak.outline.expect
index b3304ef..074fe5d 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/await.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/await.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
index 6107389..245023e 100644
--- a/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await.dart.weak.transformed.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 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>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper("Hello, World!", :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<core::String*>(:result));
+        [yield] let dynamic #t1 = asy::_awaitHelper("Hello, World!", :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::String>(:result_or_exception));
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/await_complex.dart b/pkg/front_end/testcases/general/await_complex.dart
index 8046619..0a0fc8e 100644
--- a/pkg/front_end/testcases/general/await_complex.dart
+++ b/pkg/front_end/testcases/general/await_complex.dart
@@ -1,7 +1,7 @@
 // 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.9
+
 // This test was adapted from language_2/await_test
 
 import 'dart:async';
@@ -115,7 +115,7 @@
 }
 
 asserts() async {
-  for (final FutureOr<T> Function<T>(T) func in <Function>[id, future]) {
+  for (final FutureOr<T> Function<T>(T) func in [id, future]) {
     assert(await func(true));
     assert(id(true), await func("message"));
     assert(await func(true), await (func("message")));
@@ -129,7 +129,7 @@
 }
 
 controlFlow() async {
-  for (final FutureOr<T> Function<T>(T) func in <Function>[id, future]) {
+  for (final FutureOr<T> Function<T>(T) func in [id, future]) {
     // For.
     var c = 0;
     for (var i = await (func(0)); await func(i < 5); await func(i++)) {
diff --git a/pkg/front_end/testcases/general/await_complex.dart.textual_outline.expect b/pkg/front_end/testcases/general/await_complex.dart.textual_outline.expect
index 77158ae..16785e4 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 int globalVariable = 1;
diff --git a/pkg/front_end/testcases/general/await_complex.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/await_complex.dart.textual_outline_modelled.expect
index 7ef3245..ddaab5f 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 FutureOr<T> future<T>(T value) async => 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 20324c7..280661a 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.weak.expect
@@ -1,175 +1,173 @@
-library;
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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'.
+//     assert(id(true), await func("message"));
+//            ^
+//
 import self as self;
 import "dart:core" as core;
+import "dart:_internal" as _in;
 import "dart:async" as asy;
 
 import "dart:async";
 
 class C extends core::Object {
-  static field core::int* staticField = 1;
-  field core::int* field = 1;
-  synthetic constructor •() → self::C*
+  static field core::int staticField = 1;
+  field core::int field = 1;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get staticGetter() → core::int*
+  static get staticGetter() → core::int
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  static method staticFoo(core::int* param) → core::int*
+  static method staticFoo(core::int param) → core::int
     return param;
-  get getter() → core::int*
-    return this.{self::C::field}{core::int*};
+  get getter() → core::int
+    return this.{self::C::field}{core::int};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  method foo(core::int* param) → core::int*
+  method foo(core::int param) → core::int
     return param;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* globalVariable = 1;
-static final field core::bool* assertStatementsEnabled = (() → core::bool* {
+static field core::int globalVariable = 1;
+static final field core::bool assertStatementsEnabled = (() → core::bool {
   try {
     assert(false);
     return false;
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return true;
   }
-})(){() →* core::bool*};
-static method topLevelFoo(core::int* param) → core::int*
+})(){() → core::bool};
+static method topLevelFoo(core::int param) → core::int
   return 1;
-static get topLevelGetter() → core::int*
+static get topLevelGetter() → core::int
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  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} core::num*){(core::num*) →* core::num*};
+  core::num f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(3, d);
-  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} core::num*){(core::num*) →* core::num*};
+  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 {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  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} core::num*){(core::num*) →* core::num*};
+  core::num b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, d);
-  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} core::num*){(core::num*) →* core::num*};
+  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 {
-  self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  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);
-  core::num* b = inst.{self::C::getter}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num b = inst.{self::C::getter}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num d = inst.{self::C::foo}(1){(core::int) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, d);
-  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} core::num*){(core::num*) →* core::num*};
+  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 {
-  core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String*) →* core::String*};
+  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::•();
-  core::num* d = c.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
-  core::int* cnt = 2;
-  core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
-  self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
-  core::num* e = b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::C c = new self::C::•();
+  core::num d = c.{self::C::field}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::int cnt = 2;
+  core::List<core::int> b = <core::int>[1, 2, 3];
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int, core::int) → void};
+  self::expect(1, b.{core::List::[]}(cnt){(core::int) → core::int});
+  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 {
-  core::bool* a = false;
-  core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
+  core::bool a = false;
+  core::bool b = true;
+  core::bool c = a || b || await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
-  dynamic e = a is core::int* ?{dynamic} await self::dummy() : 2;
+  dynamic e = a is{ForNonNullableByDefault} core::int ?{dynamic} await self::dummy() : 2;
   self::expect(2, e);
   try {
-    dynamic f = a is core::int* ?{dynamic} await self::dummy() : 2;
+    dynamic f = a is{ForNonNullableByDefault} core::int ?{dynamic} await self::dummy() : 2;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
 }
 static method asserts() → dynamic async {
-  for (final core::Function* #t1 in <core::Function*>[#C1, #C2]) {
-    final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t1 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
-    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*});
-    assert(self::id<core::bool*>(true) as{TypeError} core::bool*, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
-    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+  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'.
+    assert(id(true), await func(\"message\"));
+           ^" in self::id<core::bool>(true) as{TypeError,ForNonNullableByDefault} core::bool, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
+    assert(await func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
     try {
-      assert(await func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+      assert(await func<core::bool>(false){(core::bool) → FutureOr<core::bool>}, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
       if(self::assertStatementsEnabled)
         throw "Didn't throw";
     }
-    on core::AssertionError* catch(final core::AssertionError* e) {
-      self::expect("message", e.{core::AssertionError::message}{core::Object*});
+    on core::AssertionError catch(final core::AssertionError e) {
+      self::expect("message", e.{core::AssertionError::message}{core::Object?});
     }
   }
 }
 static method controlFlow() → dynamic async {
-  for (final core::Function* #t2 in <core::Function*>[#C1, #C2]) {
-    final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t2 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
-    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* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3){(core::int*) →* FutureOr<core::int*>*}) {
-      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+  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>}) {
+      c = c.{core::num::+}(1){(core::num) → core::int};
     }
     self::expect(5, c);
     c = 0;
-    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
-      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+    while (await func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>})
+      c = c.{core::num::+}(1){(core::num) → core::int};
     self::expect(5, c);
     c = 0;
     do {
-      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+      c = c.{core::num::+}(1){(core::num) → core::int};
     }
-    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
+    while (await func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>})
     self::expect(5, c);
-    if(await func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}) {
+    if(await func<core::bool>(c =={core::num::==}{(core::Object) → core::bool} 5){(core::bool) → FutureOr<core::bool>}) {
       self::expect(5, c);
     }
     else {
       throw "unreachable";
     }
     try {
-      throw await func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*};
+      throw await func<core::String>("string"){(core::String) → FutureOr<core::String>};
     }
-    on core::String* catch(no-exception-var) {
+    on core::String catch(no-exception-var) {
     }
     try {
-      await throw "string";
+      let final Never #t3 = await throw "string" in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
-    on core::String* catch(no-exception-var) {
+    on core::String catch(no-exception-var) {
     }
     try
       try {
@@ -177,24 +175,24 @@
           try {
             throw "string";
           }
-          on dynamic catch(final dynamic e) {
+          on core::Object catch(final core::Object e) {
             self::expect("string", e);
-            self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+            self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
             rethrow;
           }
         finally {
-          self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+          self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
         }
       }
-      on dynamic catch(final dynamic e) {
-        self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+      on core::Object catch(final core::Object e) {
+        self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
         self::expect("string", e);
       }
     finally {
-      self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+      self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
     }
     #L1:
-    switch(await func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}) {
+    switch(await func<core::int>(2){(core::int) → FutureOr<core::int>}) {
       #L2:
       case #C3:
         {
@@ -206,31 +204,31 @@
           throw "unreachable";
         }
     }
-    self::expect(42, await(() → asy::Future<dynamic>* async {
-      return await func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
-    })(){() →* asy::Future<dynamic>*});
-    self::expect(42, await(() → asy::Future<dynamic>* async {
-      return func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
-    })(){() →* asy::Future<dynamic>*});
-    function testStream1() → asy::Stream<core::int*>* async* {
-      yield await func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*};
+    self::expect(42, await(() → asy::Future<core::int> async {
+      return await func<core::int>(42){(core::int) → FutureOr<core::int>};
+    })(){() → asy::Future<core::int>});
+    self::expect(42, await(() → asy::Future<core::int> async {
+      return func<core::int>(42){(core::int) → FutureOr<core::int>};
+    })(){() → asy::Future<core::int>});
+    function testStream1() → asy::Stream<core::int> async* {
+      yield await func<core::int>(42){(core::int) → FutureOr<core::int>};
     }
-    self::expectList(<dynamic>[42], await testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
-    function testStream2() → asy::Stream<core::int*>* async* {
-      yield* await func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*};
+    self::expectList(<dynamic>[42], await testStream1(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>});
+    function testStream2() → asy::Stream<core::int> async* {
+      yield* await func<asy::Stream<core::int>>(self::intStream()){(asy::Stream<core::int>) → FutureOr<asy::Stream<core::int>>};
     }
-    self::expectList(<dynamic>[42], await testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
+    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 
   return value;
-static method id<T extends core::Object* = dynamic>(self::id::T* value) → FutureOr<self::id::T*>*
+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* {
+static method intStream() → asy::Stream<core::int> async* {
   yield 42;
 }
 static method main() → dynamic async {
-  for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  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();
     await self::instanceMembers();
@@ -241,15 +239,15 @@
   }
 }
 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}";
 }
-static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic {
-  if(!(expected.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} actual.{core::List::length}{core::int*})) {
+static method expectList(core::List<dynamic> expected, core::List<dynamic> actual) → dynamic {
+  if(!(expected.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} actual.{core::List::length}{core::int})) {
     throw "Expected ${expected}, actual ${actual}";
   }
-  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    self::expect(expected.{core::List::[]}(i){(core::int*) →* dynamic}, actual.{core::List::[]}(i){(core::int*) →* dynamic});
+  for (core::int i = 0; i.{core::num::<}(expected.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    self::expect(expected.{core::List::[]}(i){(core::int) → dynamic}, actual.{core::List::[]}(i){(core::int) → dynamic});
   }
 }
 
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 20324c7..280661a 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
@@ -1,175 +1,173 @@
-library;
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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'.
+//     assert(id(true), await func("message"));
+//            ^
+//
 import self as self;
 import "dart:core" as core;
+import "dart:_internal" as _in;
 import "dart:async" as asy;
 
 import "dart:async";
 
 class C extends core::Object {
-  static field core::int* staticField = 1;
-  field core::int* field = 1;
-  synthetic constructor •() → self::C*
+  static field core::int staticField = 1;
+  field core::int field = 1;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get staticGetter() → core::int*
+  static get staticGetter() → core::int
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  static method staticFoo(core::int* param) → core::int*
+  static method staticFoo(core::int param) → core::int
     return param;
-  get getter() → core::int*
-    return this.{self::C::field}{core::int*};
+  get getter() → core::int
+    return this.{self::C::field}{core::int};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  method foo(core::int* param) → core::int*
+  method foo(core::int param) → core::int
     return param;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* globalVariable = 1;
-static final field core::bool* assertStatementsEnabled = (() → core::bool* {
+static field core::int globalVariable = 1;
+static final field core::bool assertStatementsEnabled = (() → core::bool {
   try {
     assert(false);
     return false;
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return true;
   }
-})(){() →* core::bool*};
-static method topLevelFoo(core::int* param) → core::int*
+})(){() → core::bool};
+static method topLevelFoo(core::int param) → core::int
   return 1;
-static get topLevelGetter() → core::int*
+static get topLevelGetter() → core::int
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic async {
-  core::num* a = self::C::staticField.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  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} core::num*){(core::num*) →* core::num*};
+  core::num f = (self::C::staticField = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, f);
-  core::num* b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num b = self::C::staticGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, b);
-  core::num* c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num c = (self::C::staticSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, c);
-  core::num* d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num d = self::C::staticFoo(2).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(3, d);
-  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} core::num*){(core::num*) →* core::num*};
+  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 {
-  core::num* a = self::globalVariable.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  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} core::num*){(core::num*) →* core::num*};
+  core::num b = self::topLevelGetter.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, b);
-  core::num* c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num c = (self::topLevelSetter = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, c);
-  core::num* d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num d = self::topLevelFoo(1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, d);
-  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} core::num*){(core::num*) →* core::num*};
+  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 {
-  self::C* inst = new self::C::•();
-  core::num* a = inst.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  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);
-  core::num* b = inst.{self::C::getter}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num b = inst.{self::C::getter}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, b);
-  core::num* c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num c = (inst.{self::C::setter} = 1).{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, c);
-  core::num* d = inst.{self::C::foo}(1){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  core::num d = inst.{self::C::foo}(1){(core::int) → core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
   self::expect(2, d);
-  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} core::num*){(core::num*) →* core::num*};
+  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 {
-  core::String* a = "${self::globalVariable} ${await self::dummy()} ".{core::String::+}(await "someString"){(core::String*) →* core::String*};
+  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::•();
-  core::num* d = c.{self::C::field}{core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
-  core::int* cnt = 2;
-  core::List<core::int*>* b = <core::int*>[1, 2, 3];
-  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
-  self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
-  core::num* e = b.{core::List::[]}(0){(core::int*) →* core::int*}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+  self::C c = new self::C::•();
+  core::num d = c.{self::C::field}{core::int}.{core::num::+}(await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+  core::int cnt = 2;
+  core::List<core::int> b = <core::int>[1, 2, 3];
+  b.{core::List::[]=}(cnt, await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int, core::int) → void};
+  self::expect(1, b.{core::List::[]}(cnt){(core::int) → core::int});
+  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 {
-  core::bool* a = false;
-  core::bool* b = true;
-  core::bool* c = a || b || await self::dummy() as{TypeError,ForDynamic} core::bool*;
+  core::bool a = false;
+  core::bool b = true;
+  core::bool c = a || b || await self::dummy() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
   self::expect(true, c);
   dynamic d = a || b ?{dynamic} a : await self::dummy();
   self::expect(false, d);
-  dynamic e = a is core::int* ?{dynamic} await self::dummy() : 2;
+  dynamic e = a is{ForNonNullableByDefault} core::int ?{dynamic} await self::dummy() : 2;
   self::expect(2, e);
   try {
-    dynamic f = a is core::int* ?{dynamic} await self::dummy() : 2;
+    dynamic f = a is{ForNonNullableByDefault} core::int ?{dynamic} await self::dummy() : 2;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
 }
 static method asserts() → dynamic async {
-  for (final core::Function* #t1 in <core::Function*>[#C1, #C2]) {
-    final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t1 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
-    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*});
-    assert(self::id<core::bool*>(true) as{TypeError} core::bool*, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
-    assert(await func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+  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'.
+    assert(id(true), await func(\"message\"));
+           ^" in self::id<core::bool>(true) as{TypeError,ForNonNullableByDefault} core::bool, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
+    assert(await func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
     try {
-      assert(await func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, await func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*});
+      assert(await func<core::bool>(false){(core::bool) → FutureOr<core::bool>}, await func<core::String>("message"){(core::String) → FutureOr<core::String>});
       if(self::assertStatementsEnabled)
         throw "Didn't throw";
     }
-    on core::AssertionError* catch(final core::AssertionError* e) {
-      self::expect("message", e.{core::AssertionError::message}{core::Object*});
+    on core::AssertionError catch(final core::AssertionError e) {
+      self::expect("message", e.{core::AssertionError::message}{core::Object?});
     }
   }
 }
 static method controlFlow() → dynamic async {
-  for (final core::Function* #t2 in <core::Function*>[#C1, #C2]) {
-    final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t2 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
-    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* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3){(core::int*) →* FutureOr<core::int*>*}) {
-      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+  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>}) {
+      c = c.{core::num::+}(1){(core::num) → core::int};
     }
     self::expect(5, c);
     c = 0;
-    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
-      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+    while (await func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>})
+      c = c.{core::num::+}(1){(core::num) → core::int};
     self::expect(5, c);
     c = 0;
     do {
-      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+      c = c.{core::num::+}(1){(core::num) → core::int};
     }
-    while (await func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*})
+    while (await func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>})
     self::expect(5, c);
-    if(await func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}) {
+    if(await func<core::bool>(c =={core::num::==}{(core::Object) → core::bool} 5){(core::bool) → FutureOr<core::bool>}) {
       self::expect(5, c);
     }
     else {
       throw "unreachable";
     }
     try {
-      throw await func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*};
+      throw await func<core::String>("string"){(core::String) → FutureOr<core::String>};
     }
-    on core::String* catch(no-exception-var) {
+    on core::String catch(no-exception-var) {
     }
     try {
-      await throw "string";
+      let final Never #t3 = await throw "string" in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
     }
-    on core::String* catch(no-exception-var) {
+    on core::String catch(no-exception-var) {
     }
     try
       try {
@@ -177,24 +175,24 @@
           try {
             throw "string";
           }
-          on dynamic catch(final dynamic e) {
+          on core::Object catch(final core::Object e) {
             self::expect("string", e);
-            self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+            self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
             rethrow;
           }
         finally {
-          self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+          self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
         }
       }
-      on dynamic catch(final dynamic e) {
-        self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+      on core::Object catch(final core::Object e) {
+        self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
         self::expect("string", e);
       }
     finally {
-      self::expect(0, await func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*});
+      self::expect(0, await func<core::int>(0){(core::int) → FutureOr<core::int>});
     }
     #L1:
-    switch(await func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}) {
+    switch(await func<core::int>(2){(core::int) → FutureOr<core::int>}) {
       #L2:
       case #C3:
         {
@@ -206,31 +204,31 @@
           throw "unreachable";
         }
     }
-    self::expect(42, await(() → asy::Future<dynamic>* async {
-      return await func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
-    })(){() →* asy::Future<dynamic>*});
-    self::expect(42, await(() → asy::Future<dynamic>* async {
-      return func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
-    })(){() →* asy::Future<dynamic>*});
-    function testStream1() → asy::Stream<core::int*>* async* {
-      yield await func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*};
+    self::expect(42, await(() → asy::Future<core::int> async {
+      return await func<core::int>(42){(core::int) → FutureOr<core::int>};
+    })(){() → asy::Future<core::int>});
+    self::expect(42, await(() → asy::Future<core::int> async {
+      return func<core::int>(42){(core::int) → FutureOr<core::int>};
+    })(){() → asy::Future<core::int>});
+    function testStream1() → asy::Stream<core::int> async* {
+      yield await func<core::int>(42){(core::int) → FutureOr<core::int>};
     }
-    self::expectList(<dynamic>[42], await testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
-    function testStream2() → asy::Stream<core::int*>* async* {
-      yield* await func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*};
+    self::expectList(<dynamic>[42], await testStream1(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>});
+    function testStream2() → asy::Stream<core::int> async* {
+      yield* await func<asy::Stream<core::int>>(self::intStream()){(asy::Stream<core::int>) → FutureOr<asy::Stream<core::int>>};
     }
-    self::expectList(<dynamic>[42], await testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*});
+    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 
   return value;
-static method id<T extends core::Object* = dynamic>(self::id::T* value) → FutureOr<self::id::T*>*
+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* {
+static method intStream() → asy::Stream<core::int> async* {
   yield 42;
 }
 static method main() → dynamic async {
-  for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  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();
     await self::instanceMembers();
@@ -241,15 +239,15 @@
   }
 }
 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}";
 }
-static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic {
-  if(!(expected.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} actual.{core::List::length}{core::int*})) {
+static method expectList(core::List<dynamic> expected, core::List<dynamic> actual) → dynamic {
+  if(!(expected.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} actual.{core::List::length}{core::int})) {
     throw "Expected ${expected}, actual ${actual}";
   }
-  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    self::expect(expected.{core::List::[]}(i){(core::int*) →* dynamic}, actual.{core::List::[]}(i){(core::int*) →* dynamic});
+  for (core::int i = 0; i.{core::num::<}(expected.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    self::expect(expected.{core::List::[]}(i){(core::int) → dynamic}, actual.{core::List::[]}(i){(core::int) → dynamic});
   }
 }
 
diff --git a/pkg/front_end/testcases/general/await_complex.dart.weak.outline.expect b/pkg/front_end/testcases/general/await_complex.dart.weak.outline.expect
index e421062..db13fdf 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/await_complex.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,38 +6,28 @@
 import "dart:async";
 
 class C extends core::Object {
-  static field core::int* staticField;
-  field core::int* field;
-  synthetic constructor •() → self::C*
+  static field core::int staticField;
+  field core::int field;
+  synthetic constructor •() → self::C
     ;
-  static get staticGetter() → core::int*
+  static get staticGetter() → core::int
     ;
   static set staticSetter(dynamic val) → void
     ;
-  static method staticFoo(core::int* param) → core::int*
+  static method staticFoo(core::int param) → core::int
     ;
-  get getter() → core::int*
+  get getter() → core::int
     ;
   set setter(dynamic val) → void
     ;
-  method foo(core::int* param) → core::int*
+  method foo(core::int param) → 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 core::int* globalVariable;
-static final field core::bool* assertStatementsEnabled;
-static method topLevelFoo(core::int* param) → core::int*
+static field core::int globalVariable;
+static final field core::bool assertStatementsEnabled;
+static method topLevelFoo(core::int param) → core::int
   ;
-static get topLevelGetter() → core::int*
+static get topLevelGetter() → core::int
   ;
 static set topLevelSetter(dynamic val) → void
   ;
@@ -57,15 +47,15 @@
   ;
 static method controlFlow() → dynamic async 
   ;
-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 
   ;
-static method id<T extends core::Object* = dynamic>(self::id::T* value) → FutureOr<self::id::T*>*
+static method id<T extends core::Object? = dynamic>(self::id::T% value) → FutureOr<self::id::T%>
   ;
-static method intStream() → asy::Stream<core::int*>* async* 
+static method intStream() → asy::Stream<core::int> async* 
   ;
 static method main() → dynamic async 
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
-static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic
+static method expectList(core::List<dynamic> expected, core::List<dynamic> actual) → dynamic
   ;
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 087766ec..e4c6804 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
@@ -1,4 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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'.
+//     assert(id(true), await func("message"));
+//            ^
+//
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -7,307 +14,297 @@
 import "dart:async";
 
 class C extends core::Object {
-  static field core::int* staticField = 1;
-  field core::int* field = 1;
-  synthetic constructor •() → self::C*
+  static field core::int staticField = 1;
+  field core::int field = 1;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static get staticGetter() → core::int*
+  static get staticGetter() → core::int
     return self::C::staticField;
   static set staticSetter(dynamic val) → void {
-    self::C::staticField = val as{TypeError,ForDynamic} core::int*;
+    self::C::staticField = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  static method staticFoo(core::int* param) → core::int*
+  static method staticFoo(core::int param) → core::int
     return param;
-  get getter() → core::int*
-    return this.{self::C::field}{core::int*};
+  get getter() → core::int
+    return this.{self::C::field}{core::int};
   set setter(dynamic val) → void {
-    this.{self::C::field} = val as{TypeError,ForDynamic} core::int*;
+    this.{self::C::field} = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   }
-  method foo(core::int* param) → core::int*
+  method foo(core::int param) → core::int
     return param;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* globalVariable = 1;
-static final field core::bool* assertStatementsEnabled = (() → core::bool* {
+static field core::int globalVariable = 1;
+static final field core::bool assertStatementsEnabled = (() → core::bool {
   try {
     assert(false);
     return false;
   }
-  on dynamic catch(final dynamic _) {
+  on core::Object catch(final core::Object _) {
     return true;
   }
-})(){() →* core::bool*};
-static method topLevelFoo(core::int* param) → core::int*
+})(){() → core::bool};
+static method topLevelFoo(core::int param) → core::int
   return 1;
-static get topLevelGetter() → core::int*
+static get topLevelGetter() → core::int
   return self::globalVariable;
 static set topLevelSetter(dynamic val) → void {
-  self::globalVariable = val as{TypeError,ForDynamic} core::int*;
+  self::globalVariable = val as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
 }
 static method dummy() → dynamic
   return 1;
 static method staticMembers() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  core::int* :async_temporary_0;
-  core::int* :async_temporary_1;
-  core::int* :async_temporary_2;
-  core::int* :async_temporary_3;
-  core::int* :async_temporary_4;
-  core::int* :async_temporary_5;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  core::int :async_temporary_0;
+  core::int :async_temporary_1;
+  core::int :async_temporary_2;
+  core::int :async_temporary_3;
+  core::int :async_temporary_4;
+  core::int :async_temporary_5;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :async_temporary_0 = self::C::staticField;
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num a = _in::unsafeCast<core::int>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, a);
         :async_temporary_1 = self::C::staticField = 1;
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* f = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num f = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, f);
         :async_temporary_2 = self::C::staticGetter;
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num b = _in::unsafeCast<core::int>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, b);
         :async_temporary_3 = self::C::staticSetter = 1;
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num c = _in::unsafeCast<core::int>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, c);
         :async_temporary_4 = self::C::staticFoo(2);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num d = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(3, d);
-        :async_temporary_5 = 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*};
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_5).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        :async_temporary_5 = 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};
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num e = _in::unsafeCast<core::int>(:async_temporary_5).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(5, e);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method topLevelMembers() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  core::int* :async_temporary_0;
-  core::int* :async_temporary_1;
-  core::int* :async_temporary_2;
-  core::int* :async_temporary_3;
-  core::int* :async_temporary_4;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  core::int :async_temporary_0;
+  core::int :async_temporary_1;
+  core::int :async_temporary_2;
+  core::int :async_temporary_3;
+  core::int :async_temporary_4;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :async_temporary_0 = self::globalVariable;
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num a = _in::unsafeCast<core::int>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, a);
         :async_temporary_1 = self::topLevelGetter;
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num b = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, b);
         :async_temporary_2 = self::topLevelSetter = 1;
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num c = _in::unsafeCast<core::int>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, c);
         :async_temporary_3 = self::topLevelFoo(1);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num d = _in::unsafeCast<core::int>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, d);
-        :async_temporary_4 = 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*};
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        :async_temporary_4 = 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};
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num e = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(5, e);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method instanceMembers() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  core::int* :async_temporary_0;
-  core::int* :async_temporary_1;
-  core::int* :async_temporary_2;
-  core::int* :async_temporary_3;
-  core::int* :async_temporary_4;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  core::int :async_temporary_0;
+  core::int :async_temporary_1;
+  core::int :async_temporary_2;
+  core::int :async_temporary_3;
+  core::int :async_temporary_4;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        self::C* inst = new self::C::•();
-        :async_temporary_0 = inst.{self::C::field}{core::int*};
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* a = _in::unsafeCast<core::int*>(:async_temporary_0).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        self::C inst = new self::C::•();
+        :async_temporary_0 = inst.{self::C::field}{core::int};
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num a = _in::unsafeCast<core::int>(:async_temporary_0).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, a);
-        :async_temporary_1 = inst.{self::C::getter}{core::int*};
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* b = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        :async_temporary_1 = inst.{self::C::getter}{core::int};
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num b = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, b);
         :async_temporary_2 = inst.{self::C::setter} = 1;
-        [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* c = _in::unsafeCast<core::int*>(:async_temporary_2).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t14 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num c = _in::unsafeCast<core::int>(:async_temporary_2).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, c);
-        :async_temporary_3 = inst.{self::C::foo}(1){(core::int*) →* core::int*};
-        [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_3).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        :async_temporary_3 = inst.{self::C::foo}(1){(core::int) → core::int};
+        [yield] let dynamic #t15 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num d = _in::unsafeCast<core::int>(:async_temporary_3).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, d);
-        :async_temporary_4 = 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*};
-        [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        :async_temporary_4 = 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};
+        [yield] let dynamic #t16 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num e = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(5, e);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method others() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
   dynamic :async_temporary_0;
-  core::int* :async_temporary_1;
-  core::int* :async_temporary_2;
-  core::List<core::int*>* :async_temporary_3;
-  core::int* :async_temporary_4;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  core::int :async_temporary_1;
+  core::int :async_temporary_2;
+  core::List<core::int> :async_temporary_3;
+  core::int :async_temporary_4;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
         :async_temporary_0 = self::globalVariable;
-        [yield] let dynamic #t17 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_0 = "${_in::unsafeCast<core::int*>(:async_temporary_0)} ${:result} ";
-        [yield] let dynamic #t18 = asy::_awaitHelper("someString", :async_op_then, :async_op_error, :async_op) in null;
-        core::String* a = _in::unsafeCast<core::String*>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String*>(:result)){(core::String*) →* core::String*};
+        [yield] let dynamic #t17 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        :async_temporary_0 = "${_in::unsafeCast<core::int>(:async_temporary_0)} ${:result_or_exception} ";
+        [yield] let dynamic #t18 = asy::_awaitHelper("someString", :async_op_then, :async_op_error) in null;
+        core::String a = _in::unsafeCast<core::String>(:async_temporary_0).{core::String::+}(_in::unsafeCast<core::String>(:result_or_exception)){(core::String) → core::String};
         self::expect("1 1 someString", a);
-        self::C* c = new self::C::•();
-        :async_temporary_1 = c.{self::C::field}{core::int*};
-        [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* d = _in::unsafeCast<core::int*>(:async_temporary_1).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
-        core::int* cnt = 2;
-        core::List<core::int*>* b = core::_GrowableList::_literal3<core::int*>(1, 2, 3);
+        self::C c = new self::C::•();
+        :async_temporary_1 = c.{self::C::field}{core::int};
+        [yield] let dynamic #t19 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num d = _in::unsafeCast<core::int>(:async_temporary_1).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+        core::int cnt = 2;
+        core::List<core::int> b = core::_GrowableList::_literal3<core::int>(1, 2, 3);
         :async_temporary_3 = b;
         :async_temporary_2 = cnt;
-        [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::List<core::int*>*>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int*>(:async_temporary_2), :result as{TypeError,ForDynamic} core::int*){(core::int*, core::int*) →* void};
-        self::expect(1, b.{core::List::[]}(cnt){(core::int*) →* core::int*});
-        :async_temporary_4 = b.{core::List::[]}(0){(core::int*) →* core::int*};
-        [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-        core::num* e = _in::unsafeCast<core::int*>(:async_temporary_4).{core::num::+}(:result as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+        [yield] let dynamic #t20 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::List<core::int>>(:async_temporary_3).{core::List::[]=}(_in::unsafeCast<core::int>(:async_temporary_2), :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int, core::int) → void};
+        self::expect(1, b.{core::List::[]}(cnt){(core::int) → core::int});
+        :async_temporary_4 = b.{core::List::[]}(0){(core::int) → core::int};
+        [yield] let dynamic #t21 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+        core::num e = _in::unsafeCast<core::int>(:async_temporary_4).{core::num::+}(:result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
         self::expect(2, e);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method conditionals() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  core::bool* :async_temporary_0;
+  core::bool :async_temporary_0;
   dynamic :async_temporary_1;
   dynamic :async_temporary_2;
   dynamic :async_temporary_3;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
-        core::bool* a = false;
-        core::bool* b = true;
+        core::bool a = false;
+        core::bool b = true;
         :async_temporary_0 = (a || b) =={core::Object::==}{(core::Object) → core::bool} true;
-        if(_in::unsafeCast<core::bool*>(:async_temporary_0))
+        if(_in::unsafeCast<core::bool>(:async_temporary_0))
           ;
         else {
-          [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_0 = :result as{TypeError,ForDynamic} core::bool* =={core::Object::==}{(core::Object) → core::bool} true;
+          [yield] let dynamic #t22 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+          :async_temporary_0 = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool =={core::Object::==}{(core::Object) → core::bool} true;
         }
-        core::bool* c = _in::unsafeCast<core::bool*>(:async_temporary_0);
+        core::bool c = _in::unsafeCast<core::bool>(:async_temporary_0);
         self::expect(true, c);
         if(a || b) {
           :async_temporary_1 = a;
         }
         else {
-          [yield] let dynamic #t23 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_1 = :result;
+          [yield] let dynamic #t23 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+          :async_temporary_1 = :result_or_exception;
         }
         dynamic d = :async_temporary_1;
         self::expect(false, d);
-        if(a is core::int*) {
-          [yield] let dynamic #t24 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_2 = :result;
+        if(a is{ForNonNullableByDefault} core::int) {
+          [yield] let dynamic #t24 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+          :async_temporary_2 = :result_or_exception;
         }
         else {
           :async_temporary_2 = 2;
@@ -315,110 +312,111 @@
         dynamic e = :async_temporary_2;
         self::expect(2, e);
         try {
-          if(a is core::int*) {
-            [yield] let dynamic #t25 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_3 = :result;
+          if(a is{ForNonNullableByDefault} core::int) {
+            [yield] let dynamic #t25 = asy::_awaitHelper(self::dummy(), :async_op_then, :async_op_error) in null;
+            :async_temporary_3 = :result_or_exception;
           }
           else {
             :async_temporary_3 = 2;
           }
           dynamic f = :async_temporary_3;
         }
-        on dynamic catch(final dynamic e) {
+        on core::Object catch(final core::Object e) {
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method asserts() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
         {
-          core::Iterator<core::Function*>* :sync-for-iterator = core::_GrowableList::_literal2<core::Function*>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<core::Function*>*};
+          core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>> :sync-for-iterator = core::_GrowableList::_literal2<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final core::Function* #t26 = :sync-for-iterator.{core::Iterator::current}{core::Function*};
+            final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func = :sync-for-iterator.{core::Iterator::current}{<T extends core::Object? = dynamic>(T%) → FutureOr<T%>};
             {
-              final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t26 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
               assert {
-                [yield] let dynamic #t27 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                assert(_in::unsafeCast<core::bool*>(:result));
+                [yield] let dynamic #t26 = asy::_awaitHelper(func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
+                assert(_in::unsafeCast<core::bool>(:result_or_exception));
               }
               assert {
-                if(self::id<core::bool*>(true) as{TypeError} core::bool*)
+                if(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'.
+    assert(id(true), await func(\"message\"));
+           ^" in self::id<core::bool>(true) as{TypeError,ForNonNullableByDefault} core::bool)
                   ;
                 else {
-                  [yield] let dynamic #t28 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  assert(false, _in::unsafeCast<core::String*>(:result));
+                  [yield] let dynamic #t27 = asy::_awaitHelper(func<core::String>("message"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
+                  assert(false, _in::unsafeCast<core::String>(:result_or_exception));
                 }
               }
               assert {
-                [yield] let dynamic #t29 = asy::_awaitHelper(func<core::bool*>(true){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool*>(:result))
+                [yield] let dynamic #t28 = asy::_awaitHelper(func<core::bool>(true){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool>(:result_or_exception))
                   ;
                 else {
-                  [yield] let dynamic #t30 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  assert(false, _in::unsafeCast<core::String*>(:result));
+                  [yield] let dynamic #t29 = asy::_awaitHelper(func<core::String>("message"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
+                  assert(false, _in::unsafeCast<core::String>(:result_or_exception));
                 }
               }
               try {
                 assert {
-                  [yield] let dynamic #t31 = asy::_awaitHelper(func<core::bool*>(false){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  if(_in::unsafeCast<core::bool*>(:result))
+                  [yield] let dynamic #t30 = asy::_awaitHelper(func<core::bool>(false){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
+                  if(_in::unsafeCast<core::bool>(:result_or_exception))
                     ;
                   else {
-                    [yield] let dynamic #t32 = asy::_awaitHelper(func<core::String*>("message"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    assert(false, _in::unsafeCast<core::String*>(:result));
+                    [yield] let dynamic #t31 = asy::_awaitHelper(func<core::String>("message"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
+                    assert(false, _in::unsafeCast<core::String>(:result_or_exception));
                   }
                 }
                 if(self::assertStatementsEnabled)
                   throw "Didn't throw";
               }
-              on core::AssertionError* catch(final core::AssertionError* e) {
-                self::expect("message", e.{core::AssertionError::message}{core::Object*});
+              on core::AssertionError catch(final core::AssertionError e) {
+                self::expect("message", e.{core::AssertionError::message}{core::Object?});
               }
             }
           }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method controlFlow() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
@@ -426,41 +424,40 @@
   dynamic :saved_try_context_var3;
   dynamic :exception0;
   dynamic :stack_trace0;
-  core::List<dynamic>* :async_temporary_0;
-  core::List<dynamic>* :async_temporary_1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  core::List<dynamic> :async_temporary_0;
+  core::List<dynamic> :async_temporary_1;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
         {
-          core::Iterator<core::Function*>* :sync-for-iterator = core::_GrowableList::_literal2<core::Function*>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<core::Function*>*};
+          core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>> :sync-for-iterator = core::_GrowableList::_literal2<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>(#C1, #C2).{core::Iterable::iterator}{core::Iterator<<T extends core::Object? = dynamic>(T%) → FutureOr<T%>>};
           for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-            final core::Function* #t33 = :sync-for-iterator.{core::Iterator::current}{core::Function*};
+            final <T extends core::Object? = dynamic>(T%) → FutureOr<T%>func = :sync-for-iterator.{core::Iterator::current}{<T extends core::Object? = dynamic>(T%) → FutureOr<T%>};
             {
-              final <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>* func = #t33 as{TypeError} <T extends core::Object* = dynamic>(T*) →* FutureOr<T*>*;
-              core::int* c = 0;
+              core::int c = 0;
               {
-                dynamic #t34 = true;
-                core::int* #t35;
+                dynamic #t32 = true;
+                core::int #t33;
                 #L8:
                 while (true) {
-                  core::int* i;
-                  if(#t34) {
-                    #t34 = false;
-                    [yield] let dynamic #t36 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    i = _in::unsafeCast<core::int*>(:result);
+                  core::int i;
+                  if(#t32) {
+                    #t32 = false;
+                    [yield] let dynamic #t34 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                    i = _in::unsafeCast<core::int>(:result_or_exception);
                   }
                   else {
-                    i = #t35;
-                    [yield] let dynamic #t37 = asy::_awaitHelper(func<core::int*>(let final core::int* #t38 = i in let final core::int* #t39 = i = #t38.{core::num::+}(1){(core::num*) →* core::int*} in #t38){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    _in::unsafeCast<core::int*>(:result);
+                    i = #t33;
+                    [yield] let dynamic #t35 = asy::_awaitHelper(func<core::int>(let final core::int #t36 = i in let final core::int #t37 = i = #t36.{core::num::+}(1){(core::num) → core::int} in #t36){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                    _in::unsafeCast<core::int>(:result_or_exception);
                   }
-                  [yield] let dynamic #t40 = asy::_awaitHelper(func<core::bool*>(i.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  if(_in::unsafeCast<core::bool*>(:result)) {
+                  [yield] let dynamic #t38 = asy::_awaitHelper(func<core::bool>(i.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
+                  if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                     {
-                      c = c.{core::num::+}(1){(core::num*) →* core::int*};
+                      c = c.{core::num::+}(1){(core::num) → core::int};
                     }
-                    #t35 = i;
+                    #t33 = i;
                   }
                   else
                     break #L8;
@@ -470,38 +467,38 @@
               c = 0;
               #L9:
               while (true) {
-                [yield] let dynamic #t41 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool*>(:result))
-                  c = c.{core::num::+}(1){(core::num*) →* core::int*};
+                [yield] let dynamic #t39 = asy::_awaitHelper(func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
+                if(_in::unsafeCast<core::bool>(:result_or_exception))
+                  c = c.{core::num::+}(1){(core::num) → core::int};
                 else
                   break #L9;
               }
               self::expect(5, c);
               c = 0;
               do {
-                c = c.{core::num::+}(1){(core::num*) →* core::int*};
-                [yield] let dynamic #t42 = asy::_awaitHelper(func<core::bool*>(c.{core::num::<}(5){(core::num*) →* core::bool*}){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
+                c = c.{core::num::+}(1){(core::num) → core::int};
+                [yield] let dynamic #t40 = asy::_awaitHelper(func<core::bool>(c.{core::num::<}(5){(core::num) → core::bool}){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
               }
-              while (_in::unsafeCast<core::bool*>(:result))
+              while (_in::unsafeCast<core::bool>(:result_or_exception))
               self::expect(5, c);
-              [yield] let dynamic #t43 = asy::_awaitHelper(func<core::bool*>(c =={core::num::==}{(core::Object*) →* core::bool*} 5){(core::bool*) →* FutureOr<core::bool*>*}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool*>(:result)) {
+              [yield] let dynamic #t41 = asy::_awaitHelper(func<core::bool>(c =={core::num::==}{(core::Object) → core::bool} 5){(core::bool) → FutureOr<core::bool>}, :async_op_then, :async_op_error) in null;
+              if(_in::unsafeCast<core::bool>(:result_or_exception)) {
                 self::expect(5, c);
               }
               else {
                 throw "unreachable";
               }
               try {
-                [yield] let dynamic #t44 = asy::_awaitHelper(func<core::String*>("string"){(core::String*) →* FutureOr<core::String*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                throw _in::unsafeCast<core::String*>(:result);
+                [yield] let dynamic #t42 = asy::_awaitHelper(func<core::String>("string"){(core::String) → FutureOr<core::String>}, :async_op_then, :async_op_error) in null;
+                throw _in::unsafeCast<core::String>(:result_or_exception);
               }
-              on core::String* catch(no-exception-var) {
+              on core::String catch(no-exception-var) {
               }
               try {
-                [yield] let dynamic #t45 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error, :async_op) in null;
-                _in::unsafeCast<Never*>(:result);
+                [yield] let dynamic #t43 = asy::_awaitHelper(throw "string", :async_op_then, :async_op_error) in null;
+                let final Never #t44 = _in::unsafeCast<Never>(:result_or_exception) in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
               }
-              on core::String* catch(no-exception-var) {
+              on core::String catch(no-exception-var) {
               }
               try
                 try {
@@ -509,30 +506,30 @@
                     try {
                       throw "string";
                     }
-                    on dynamic catch(final dynamic e) {
+                    on core::Object catch(final core::Object e) {
                       self::expect("string", e);
-                      [yield] let dynamic #t46 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                      self::expect(0, _in::unsafeCast<core::int*>(:result));
+                      [yield] let dynamic #t45 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                      self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
                       rethrow;
                     }
                   finally {
-                    [yield] let dynamic #t47 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                    self::expect(0, _in::unsafeCast<core::int*>(:result));
+                    [yield] let dynamic #t46 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                    self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
                   }
                 }
-                on dynamic catch(final dynamic e) {
-                  [yield] let dynamic #t48 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                  self::expect(0, _in::unsafeCast<core::int*>(:result));
+                on core::Object catch(final core::Object e) {
+                  [yield] let dynamic #t47 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                  self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
                   self::expect("string", e);
                 }
               finally {
-                [yield] let dynamic #t49 = asy::_awaitHelper(func<core::int*>(0){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                self::expect(0, _in::unsafeCast<core::int*>(:result));
+                [yield] let dynamic #t48 = asy::_awaitHelper(func<core::int>(0){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                self::expect(0, _in::unsafeCast<core::int>(:result_or_exception));
               }
               #L10:
               {
-                [yield] let dynamic #t50 = asy::_awaitHelper(func<core::int*>(2){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                switch(_in::unsafeCast<core::int*>(:result)) {
+                [yield] let dynamic #t49 = asy::_awaitHelper(func<core::int>(2){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                switch(_in::unsafeCast<core::int>(:result_or_exception)) {
                   #L11:
                   case #C3:
                     {
@@ -545,87 +542,87 @@
                     }
                 }
               }
-              [yield] let dynamic #t51 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
-                final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+              [yield] let dynamic #t50 = asy::_awaitHelper((() → asy::Future<core::int> /* originally async */ {
+                final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
                 core::bool* :is_sync = false;
-                FutureOr<dynamic>* :return_value;
-                (dynamic) →* dynamic :async_op_then;
-                (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-                core::int* :await_jump_var = 0;
+                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;
                 dynamic :saved_try_context_var0;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try {
                     #L13:
                     {
-                      [yield] let dynamic #t52 = asy::_awaitHelper(func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
-                      :return_value = :result;
+                      [yield] let dynamic #t51 = asy::_awaitHelper(func<core::int>(42){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                      :return_value = _in::unsafeCast<core::int>(:result_or_exception);
                       break #L13;
                     }
-                    asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+                    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(){() →* dynamic};
+                :async_op(null, null){() → dynamic};
                 :is_sync = true;
                 return :async_future;
-              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expect(42, :result);
-              [yield] let dynamic #t53 = asy::_awaitHelper((() → asy::Future<dynamic>* /* originally async */ {
-                final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+              })(){() → 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 */ {
+                final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
                 core::bool* :is_sync = false;
-                FutureOr<dynamic>* :return_value;
-                (dynamic) →* dynamic :async_op_then;
-                (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-                core::int* :await_jump_var = 0;
+                FutureOr<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try {
                     #L14:
                     {
-                      :return_value = func<dynamic>(42){(dynamic) →* FutureOr<dynamic>*};
+                      :return_value = func<core::int>(42){(core::int) → FutureOr<core::int>};
                       break #L14;
                     }
                     asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+                :async_op(null, null){() → dynamic};
                 :is_sync = true;
                 return :async_future;
-              })(){() →* asy::Future<dynamic>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expect(42, :result);
-              function testStream1() → asy::Stream<core::int*>* /* originally async* */ {
-                asy::_AsyncStarStreamController<core::int*>* :controller;
+              })(){() → asy::Future<core::int>}, :async_op_then, :async_op_error) in null;
+              self::expect(42, _in::unsafeCast<core::int>(:result_or_exception));
+              function testStream1() → asy::Stream<core::int> /* originally async* */ {
+                asy::_AsyncStarStreamController<core::int>? :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;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try
                     try {
                       #L15:
                       {
-                        [yield] let dynamic #t54 = asy::_awaitHelper(func<core::int*>(42){(core::int*) →* FutureOr<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                        if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int*>(:result)){(core::int*) → core::bool})
+                        [yield] let dynamic #t53 = asy::_awaitHelper(func<core::int>(42){(core::int) → FutureOr<core::int>}, :async_op_then, :async_op_error) in null;
+                        if(:controller.{asy::_AsyncStarStreamController::add}(_in::unsafeCast<core::int>(:result_or_exception)){(core::int) → 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 {
@@ -633,36 +630,36 @@
                   }
                 :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
                 :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
-                :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int*>};
+                :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
+                :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
                 return :controller_stream;
               }
               :async_temporary_0 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t55 = asy::_awaitHelper(testStream1(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_0), _in::unsafeCast<core::List<core::int*>*>(:result));
-              function testStream2() → asy::Stream<core::int*>* /* originally async* */ {
-                asy::_AsyncStarStreamController<core::int*>* :controller;
+              [yield] let dynamic #t54 = asy::_awaitHelper(testStream1(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>}, :async_op_then, :async_op_error) in null;
+              self::expectList(_in::unsafeCast<core::List<dynamic>>(:async_temporary_0), _in::unsafeCast<core::List<core::int>>(:result_or_exception));
+              function testStream2() → asy::Stream<core::int> /* originally async* */ {
+                asy::_AsyncStarStreamController<core::int>? :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;
-                function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+                function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                   try
                     try {
                       #L16:
                       {
-                        [yield] let dynamic #t56 = asy::_awaitHelper(func<asy::Stream<core::int*>*>(self::intStream()){(asy::Stream<core::int*>*) →* FutureOr<asy::Stream<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-                        if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int*>*>(:result)){(asy::Stream<core::int*>) → core::bool})
+                        [yield] let dynamic #t55 = asy::_awaitHelper(func<asy::Stream<core::int>>(self::intStream()){(asy::Stream<core::int>) → FutureOr<asy::Stream<core::int>>}, :async_op_then, :async_op_error) in null;
+                        if(:controller.{asy::_AsyncStarStreamController::addStream}(_in::unsafeCast<asy::Stream<core::int>>(:result_or_exception)){(asy::Stream<core::int>) → 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 {
@@ -670,38 +667,38 @@
                   }
                 :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
                 :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-                :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
-                :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int*>};
+                :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
+                :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
                 return :controller_stream;
               }
               :async_temporary_1 = core::_GrowableList::_literal1<dynamic>(42);
-              [yield] let dynamic #t57 = asy::_awaitHelper(testStream2(){() →* asy::Stream<core::int*>*}.{asy::Stream::toList}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-              self::expectList(_in::unsafeCast<core::List<dynamic>*>(:async_temporary_1), _in::unsafeCast<core::List<core::int*>*>(:result));
+              [yield] let dynamic #t56 = asy::_awaitHelper(testStream2(){() → asy::Stream<core::int>}.{asy::Stream::toList}(){() → asy::Future<core::List<core::int>>}, :async_op_then, :async_op_error) in null;
+              self::expectList(_in::unsafeCast<core::List<dynamic>>(:async_temporary_1), _in::unsafeCast<core::List<core::int>>(:result_or_exception));
             }
           }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method future<T extends core::Object* = dynamic>(self::future::T* value) → FutureOr<self::future::T*>* /* originally async */ {
-  final asy::_Future<self::future::T*>* :async_future = new asy::_Future::•<self::future::T*>();
+static method future<T extends core::Object? = dynamic>(self::future::T% value) → FutureOr<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::future::T%>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L17:
       {
@@ -711,39 +708,39 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method id<T extends core::Object* = dynamic>(self::id::T* value) → FutureOr<self::id::T*>*
+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*>* /* originally async* */ {
-  asy::_AsyncStarStreamController<core::int*>* :controller;
+static method intStream() → asy::Stream<core::int> /* originally async* */ {
+  asy::_AsyncStarStreamController<core::int>? :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;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L18:
         {
-          if(:controller.{asy::_AsyncStarStreamController::add}(42){(core::int*) → core::bool})
+          if(:controller.{asy::_AsyncStarStreamController::add}(42){(core::int) → 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 {
@@ -751,62 +748,62 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :controller = new asy::_AsyncStarStreamController::•<core::int*>(:async_op);
-  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int*>};
+  :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
   return :controller_stream;
 }
 static method main() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L19:
       {
-        for (core::int* i = 0; i.{core::num::<}(11){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-          [yield] let dynamic #t58 = asy::_awaitHelper(self::staticMembers(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t59 = asy::_awaitHelper(self::topLevelMembers(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t60 = asy::_awaitHelper(self::instanceMembers(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t61 = asy::_awaitHelper(self::conditionals(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t62 = asy::_awaitHelper(self::others(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t63 = asy::_awaitHelper(self::asserts(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t64 = asy::_awaitHelper(self::controlFlow(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+        for (core::int i = 0; i.{core::num::<}(11){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+          [yield] let dynamic #t57 = asy::_awaitHelper(self::staticMembers(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t58 = asy::_awaitHelper(self::topLevelMembers(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t59 = asy::_awaitHelper(self::instanceMembers(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t60 = asy::_awaitHelper(self::conditionals(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t61 = asy::_awaitHelper(self::others(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t62 = asy::_awaitHelper(self::asserts(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t63 = asy::_awaitHelper(self::controlFlow(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 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}";
 }
-static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic {
-  if(!(expected.{core::List::length}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} actual.{core::List::length}{core::int*})) {
+static method expectList(core::List<dynamic> expected, core::List<dynamic> actual) → dynamic {
+  if(!(expected.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} actual.{core::List::length}{core::int})) {
     throw "Expected ${expected}, actual ${actual}";
   }
-  for (core::int* i = 0; i.{core::num::<}(expected.{core::List::length}{core::int*}){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-    self::expect(expected.{core::List::[]}(i){(core::int*) →* dynamic}, actual.{core::List::[]}(i){(core::int*) →* dynamic});
+  for (core::int i = 0; i.{core::num::<}(expected.{core::List::length}{core::int}){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    self::expect(expected.{core::List::[]}(i){(core::int) → dynamic}, actual.{core::List::[]}(i){(core::int) → dynamic});
   }
 }
 
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart b/pkg/front_end/testcases/general/await_in_cascade.dart
index c73b599..47cc183 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart
+++ b/pkg/front_end/testcases/general/await_in_cascade.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
+
 // This test was adapted from language_2/await_in_cascade_  test
 
 import 'dart:async';
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline.expect
index 136cd51..543028a 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 class C {
diff --git a/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline_modelled.expect
index 97ba6b5..305a56e 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 class C {
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 8a57698..b0ffd22 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
@@ -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 C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int*>*>* async 
-    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};
+  method m() → asy::Future<core::List<core::int>> async 
+    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 
     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 method main() → dynamic async {
-  self::expect(42, (await new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}).{core::Iterable::first}{core::int*});
+  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 {
-  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/await_in_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.modular.expect
index 8a57698..b0ffd22 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
@@ -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 C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int*>*>* async 
-    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};
+  method m() → asy::Future<core::List<core::int>> async 
+    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 
     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 method main() → dynamic async {
-  self::expect(42, (await new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}).{core::Iterable::first}{core::int*});
+  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 {
-  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/await_in_cascade.dart.weak.outline.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.outline.expect
index 753246b..80aeb4b 100644
--- a/pkg/front_end/testcases/general/await_in_cascade.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/await_in_cascade.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,22 +6,12 @@
 import "dart:async";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method m() → asy::Future<core::List<core::int*>*>* async 
+  method m() → asy::Future<core::List<core::int>> async 
     ;
-  method _m() → asy::Future<core::int*>* async 
+  method _m() → asy::Future<core::int> 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/await_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_in_cascade.dart.weak.transformed.expect
index 0372529..652b3a2 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -7,107 +7,97 @@
 import "dart:async";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method m() → asy::Future<core::List<core::int*>*>* /* originally async */ {
-    final asy::_Future<core::List<core::int*>*>* :async_future = new asy::_Future::•<core::List<core::int*>*>();
+  method m() → asy::Future<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;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
+    core::List<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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          final core::List<core::int*>* #t1 = core::_GrowableList::•<core::int*>(0);
-          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(){() →* asy::Future<core::int*>*}, :async_op_then, :async_op_error, :async_op) in null;
-          #t1.{core::List::add}(_in::unsafeCast<core::int*>(:result)){(core::int*) →* void};
+          final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+          [yield] let dynamic #t2 = asy::_awaitHelper(this.{self::C::_m}(){() → asy::Future<core::int>}, :async_op_then, :async_op_error) in null;
+          #t1.{core::List::add}(_in::unsafeCast<core::int>(:result_or_exception)){(core::int) → void};
           :return_value = block {} =>#t1;
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        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(){() →* dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
-  method _m() → asy::Future<core::int*>* /* originally async */ {
-    final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
+  method _m() → asy::Future<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;
-    (dynamic) →* dynamic :async_op_then;
-    (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-    core::int* :await_jump_var = 0;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
           :return_value = 42;
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        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(){() →* 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>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(){() →* asy::Future<core::List<core::int*>*>*}, :async_op_then, :async_op_error, :async_op) in null;
-        self::expect(42, _in::unsafeCast<core::List<core::int*>*>(:result).{core::Iterable::first}{core::int*});
+        [yield] let dynamic #t3 = asy::_awaitHelper(new self::C::•().{self::C::m}(){() → asy::Future<core::List<core::int>>}, :async_op_then, :async_op_error) in null;
+        self::expect(42, _in::unsafeCast<core::List<core::int>>(:result_or_exception).{core::Iterable::first}{core::int});
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 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/await_in_non_async.dart b/pkg/front_end/testcases/general/await_in_non_async.dart
index 43361b4..7cbf642 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart
+++ b/pkg/front_end/testcases/general/await_in_non_async.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
+
 main() {
   foo();
 }
diff --git a/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline.expect
index 0097a33..afc9a41 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 foo() {}
diff --git a/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline_modelled.expect
index 822c313..d530fa8 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/await_in_non_async.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 foo() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.expect
index aa3b0e2..90a69de 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.expect
+++ b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect
index aa3b0e2..90a69de 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.outline.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.outline.expect
index 4c2eb20..8c1aacc 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/await_in_non_async.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/await_in_non_async.dart.weak.transformed.expect b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.transformed.expect
index aa3b0e2..90a69de 100644
--- a/pkg/front_end/testcases/general/await_in_non_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/await_in_non_async.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart b/pkg/front_end/testcases/general/bad_setter_abstract.dart
index 429614e..fa583b0 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.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
+
 set b();
 
 set c(x, y);
@@ -17,7 +17,7 @@
 }
 
 main() {
-  bool threw;
+  bool threw = false;
   try {
     threw = true;
     new A().a = null;
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.textual_outline.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.textual_outline.expect
index 3fd780c..679a54a 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 set b();
 set c(x, y);
 class A {
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.expect
index 839e066..bf81db2 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -44,7 +44,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void {
@@ -63,19 +63,9 @@
       ;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::•()
     ;
   set a(dynamic #synthetic) → void {
@@ -94,16 +84,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 set b(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
@@ -122,13 +102,13 @@
   }
 }
 static method main() → dynamic {
-  core::bool* threw;
+  core::bool threw = false;
   try {
     threw = true;
     new self::A::•().{self::A::a} = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -138,7 +118,7 @@
     new self::A::•().{self::A::d} = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -148,7 +128,7 @@
     self::b = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -161,7 +141,7 @@
     self::c = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -171,7 +151,7 @@
     throw new core::AbstractClassInstantiationError::•("B");
     threw = false;
   }
-  on core::AbstractClassInstantiationError* catch(final core::AbstractClassInstantiationError* _) {
+  on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
   }
   if(!threw) {
     throw "Expected an error above.";
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect
index 839e066..bf81db2 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -44,7 +44,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void {
@@ -63,19 +63,9 @@
       ;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::•()
     ;
   set a(dynamic #synthetic) → void {
@@ -94,16 +84,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 set b(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
@@ -122,13 +102,13 @@
   }
 }
 static method main() → dynamic {
-  core::bool* threw;
+  core::bool threw = false;
   try {
     threw = true;
     new self::A::•().{self::A::a} = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -138,7 +118,7 @@
     new self::A::•().{self::A::d} = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -148,7 +128,7 @@
     self::b = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -161,7 +141,7 @@
     self::c = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -171,7 +151,7 @@
     throw new core::AbstractClassInstantiationError::•("B");
     threw = false;
   }
-  on core::AbstractClassInstantiationError* catch(final core::AbstractClassInstantiationError* _) {
+  on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
   }
   if(!threw) {
     throw "Expected an error above.";
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.outline.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.outline.expect
index 00001aa..607733b 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,40 +16,20 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   set a(dynamic #synthetic) → void
     ;
   set d(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
 }
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   set a(dynamic #synthetic) → void
     ;
   set d(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
 }
 static set b(dynamic #synthetic) → void
   ;
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.transformed.expect
index 839e066..bf81db2 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -44,7 +44,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void {
@@ -63,19 +63,9 @@
       ;
     }
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::•()
     ;
   set a(dynamic #synthetic) → void {
@@ -94,16 +84,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 set b(dynamic #synthetic) → void {
   invalid-expression "pkg/front_end/testcases/general/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
@@ -122,13 +102,13 @@
   }
 }
 static method main() → dynamic {
-  core::bool* threw;
+  core::bool threw = false;
   try {
     threw = true;
     new self::A::•().{self::A::a} = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -138,7 +118,7 @@
     new self::A::•().{self::A::d} = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -148,7 +128,7 @@
     self::b = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -161,7 +141,7 @@
     self::c = null;
     threw = false;
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
   }
   if(!threw) {
     throw "Expected an error above.";
@@ -171,7 +151,7 @@
     throw new core::AbstractClassInstantiationError::•("B");
     threw = false;
   }
-  on core::AbstractClassInstantiationError* catch(final core::AbstractClassInstantiationError* _) {
+  on core::AbstractClassInstantiationError catch(final core::AbstractClassInstantiationError _) {
   }
   if(!threw) {
     throw "Expected an error above.";
diff --git a/pkg/front_end/testcases/general/bad_store.dart b/pkg/front_end/testcases/general/bad_store.dart
index 9e0174a..b1de494 100644
--- a/pkg/front_end/testcases/general/bad_store.dart
+++ b/pkg/front_end/testcases/general/bad_store.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 {
   var field;
 }
diff --git a/pkg/front_end/testcases/general/bad_store.dart.textual_outline.expect b/pkg/front_end/testcases/general/bad_store.dart.textual_outline.expect
index 68aecce..1749c06 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bad_store.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   var field;
 }
diff --git a/pkg/front_end/testcases/general/bad_store.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bad_store.dart.textual_outline_modelled.expect
index 6ff3adf..1745116 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bad_store.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   var field;
 }
diff --git a/pkg/front_end/testcases/general/bad_store.dart.weak.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.expect
index f25c04b..6e8b3c0 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bad_store.dart.weak.expect
@@ -1,29 +1,19 @@
-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
 }
 static method identity(dynamic x) → dynamic
   return x;
 static method use(dynamic x) → void {}
-static method main(core::List<core::String*>* args) → dynamic {
+static method main(core::List<core::String> args) → dynamic {
   dynamic foo = self::identity(new self::Foo::•());
-  if(args.{core::List::length}{core::int*}.{core::num::>}(1){(core::num*) →* core::bool*}) {
+  if(args.{core::List::length}{core::int}.{core::num::>}(1){(core::num) → core::bool}) {
     foo{dynamic}.field = "string";
     dynamic first = foo{dynamic}.field;
     self::use(first);
diff --git a/pkg/front_end/testcases/general/bad_store.dart.weak.modular.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.modular.expect
index f25c04b..6e8b3c0 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bad_store.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 {
   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
 }
 static method identity(dynamic x) → dynamic
   return x;
 static method use(dynamic x) → void {}
-static method main(core::List<core::String*>* args) → dynamic {
+static method main(core::List<core::String> args) → dynamic {
   dynamic foo = self::identity(new self::Foo::•());
-  if(args.{core::List::length}{core::int*}.{core::num::>}(1){(core::num*) →* core::bool*}) {
+  if(args.{core::List::length}{core::int}.{core::num::>}(1){(core::num) → core::bool}) {
     foo{dynamic}.field = "string";
     dynamic first = foo{dynamic}.field;
     self::use(first);
diff --git a/pkg/front_end/testcases/general/bad_store.dart.weak.outline.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.outline.expect
index ec06a08..f7adcea 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bad_store.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-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
 }
 static method identity(dynamic x) → dynamic
   ;
 static method use(dynamic x) → void
   ;
-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/bad_store.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bad_store.dart.weak.transformed.expect
index f25c04b..6e8b3c0 100644
--- a/pkg/front_end/testcases/general/bad_store.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bad_store.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 {
   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
 }
 static method identity(dynamic x) → dynamic
   return x;
 static method use(dynamic x) → void {}
-static method main(core::List<core::String*>* args) → dynamic {
+static method main(core::List<core::String> args) → dynamic {
   dynamic foo = self::identity(new self::Foo::•());
-  if(args.{core::List::length}{core::int*}.{core::num::>}(1){(core::num*) →* core::bool*}) {
+  if(args.{core::List::length}{core::int}.{core::num::>}(1){(core::num) → core::bool}) {
     foo{dynamic}.field = "string";
     dynamic first = foo{dynamic}.field;
     self::use(first);
diff --git a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart
index 1f679a4..44f446d 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.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 ContravariantUse<T> = Function(T);
 
 typedef InvariantUse<T> = T Function(T);
diff --git a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline.expect
index 298a790..c9ae869 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 typedef ContravariantUse<T> = Function(T);
 typedef InvariantUse<T> = T Function(T);
 
diff --git a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline_modelled.expect
index e2c9c7c..2b6edb9 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 class B<T> extends A<Function(T)> {}
diff --git a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.expect
index 1e435e2..cf5a68f 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -113,521 +113,231 @@
 import self as self;
 import "dart:core" as core;
 
-typedef ContravariantUse<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef InvariantUse<invariant T extends core::Object* = dynamic> = (T*) →* T*;
+typedef ContravariantUse<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef InvariantUse<invariant T extends core::Object? = dynamic> = (T%) → T%;
 class Empty extends core::Object {
-  synthetic constructor •() → self::Empty*
+  synthetic constructor •() → self::Empty
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  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<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic 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 Bc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bc<self::Bc::T*>*
+class Bc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bc<self::Bc::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 Bi<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bi<self::Bi::T*>*
+class Bi<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bi<self::Bi::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
 }
-class Cc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cc<self::Cc::T*>*
+class Cc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cc<self::Cc::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 Ci<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Ci<self::Ci::T*>*
+class Ci<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ci<self::Ci::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 D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::D<self::D::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 Dc<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Dc<self::Dc::T*>*
+class Dc<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Dc<self::Dc::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 Di<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Di<self::Di::T*>*
+class Di<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Di<self::Di::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 E<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::E<self::E::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 Ec<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::Ec<self::Ec::T*>*
+class Ec<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ec<self::Ec::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 Ei<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::Ei<self::Ei::T*>*
+class Ei<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ei<self::Ei::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 _F&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&A::T*>*
+abstract class _F&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&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 F<T extends core::Object* = dynamic> extends self::_F&Object&A<self::F::T*> {
-  synthetic constructor •() → self::F<self::F::T*>*
+class F<T extends core::Object? = dynamic> extends self::_F&Object&A<self::F::T%> {
+  synthetic constructor •() → self::F<self::F::T%>
     : super self::_F&Object&A::•()
     ;
 }
-abstract class _Fc&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&A::T*>*
+abstract class _Fc&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&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 Fc<T extends core::Object* = dynamic> extends self::_Fc&Object&A<self::Fc::T*> {
-  synthetic constructor •() → self::Fc<self::Fc::T*>*
+class Fc<T extends core::Object? = dynamic> extends self::_Fc&Object&A<self::Fc::T%> {
+  synthetic constructor •() → self::Fc<self::Fc::T%>
     : super self::_Fc&Object&A::•()
     ;
 }
-abstract class _Fi&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&A::T*>*
+abstract class _Fi&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&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 Fi<T extends core::Object* = dynamic> extends self::_Fi&Object&A<self::Fi::T*> {
-  synthetic constructor •() → self::Fi<self::Fi::T*>*
+class Fi<T extends core::Object? = dynamic> extends self::_Fi&Object&A<self::Fi::T%> {
+  synthetic constructor •() → self::Fi<self::Fi::T%>
     : super self::_Fi&Object&A::•()
     ;
 }
-abstract class _G&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::T*>*
+abstract class _G&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::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 G<T extends core::Object* = dynamic> extends self::_G&A&Empty<self::G::T*> {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends self::_G&A&Empty<self::G::T%> {
+  synthetic constructor •() → self::G<self::G::T%>
     : super self::_G&A&Empty::•()
     ;
 }
-abstract class _Gc&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::T*>*
+abstract class _Gc&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::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 Gc<T extends core::Object* = dynamic> extends self::_Gc&A&Empty<self::Gc::T*> {
-  synthetic constructor •() → self::Gc<self::Gc::T*>*
+class Gc<T extends core::Object? = dynamic> extends self::_Gc&A&Empty<self::Gc::T%> {
+  synthetic constructor •() → self::Gc<self::Gc::T%>
     : super self::_Gc&A&Empty::•()
     ;
 }
-abstract class _Gi&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::T*>*
+abstract class _Gi&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::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 Gi<T extends core::Object* = dynamic> extends self::_Gi&A&Empty<self::Gi::T*> {
-  synthetic constructor •() → self::Gi<self::Gi::T*>*
+class Gi<T extends core::Object? = dynamic> extends self::_Gi&A&Empty<self::Gi::T%> {
+  synthetic constructor •() → self::Gi<self::Gi::T%>
     : super self::_Gi&A&Empty::•()
     ;
 }
-class Hff<T extends core::Object* = dynamic> extends self::A<((self::Hff::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hff<self::Hff::T*>*
+class Hff<T extends core::Object? = dynamic> extends self::A<((self::Hff::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hff<self::Hff::T%>
     : super self::A::•()
     ;
 }
-class Hfc<T extends core::Object* = dynamic> extends self::A<((self::Hfc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hfc<self::Hfc::T*>*
+class Hfc<T extends core::Object? = dynamic> extends self::A<((self::Hfc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hfc<self::Hfc::T%>
     : super self::A::•()
     ;
 }
-class Hcf<T extends core::Object* = dynamic> extends self::A<((self::Hcf::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcf<self::Hcf::T*>*
+class Hcf<T extends core::Object? = dynamic> extends self::A<((self::Hcf::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcf<self::Hcf::T%>
     : super self::A::•()
     ;
 }
-class Hcc<T extends core::Object* = dynamic> extends self::A<((self::Hcc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcc<self::Hcc::T*>*
+class Hcc<T extends core::Object? = dynamic> extends self::A<((self::Hcc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcc<self::Hcc::T%>
     : super self::A::•()
     ;
 }
-class Hii<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hii<self::Hii::T*>*
+class Hii<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hii<self::Hii::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 Iafc<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iafc::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iafc<self::Iafc::T*>*
+class Iafc<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iafc::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iafc<self::Iafc::T%>
     : super self::A::•()
     ;
 }
-class Iacf<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iacf::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iacf<self::Iacf::T*>*
+class Iacf<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iacf::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iacf<self::Iacf::T%>
     : super self::A::•()
     ;
 }
-class Ifac<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Ifac::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Ifac<self::Ifac::T*>*
+class Ifac<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Ifac::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Ifac<self::Ifac::T%>
     : super self::A::•()
     ;
 }
-class Ifca<T extends core::Object* = dynamic> extends self::A<((self::A<self::Ifca::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Ifca<self::Ifca::T*>*
+class Ifca<T extends core::Object? = dynamic> extends self::A<((self::A<self::Ifca::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Ifca<self::Ifca::T%>
     : super self::A::•()
     ;
 }
-class Icaf<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Icaf::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Icaf<self::Icaf::T*>*
+class Icaf<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Icaf::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Icaf<self::Icaf::T%>
     : super self::A::•()
     ;
 }
-class Icfa<T extends core::Object* = dynamic> extends self::A<((self::A<self::Icfa::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Icfa<self::Icfa::T*>*
+class Icfa<T extends core::Object? = dynamic> extends self::A<((self::A<self::Icfa::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Icfa<self::Icfa::T%>
     : super self::A::•()
     ;
 }
-class Jfff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfff<self::Jfff::T*>*
+class Jfff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfff<self::Jfff::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 Jffc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jffc<self::Jffc::T*>*
+class Jffc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jffc<self::Jffc::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 Jfcf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcf<self::Jfcf::T*>*
+class Jfcf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcf<self::Jfcf::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 Jfcc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcc<self::Jfcc::T*>*
+class Jfcc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcc<self::Jfcc::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 Jcff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcff<self::Jcff::T*>*
+class Jcff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcff<self::Jcff::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 Jcfc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcfc<self::Jcfc::T*>*
+class Jcfc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcfc<self::Jcfc::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 Jccf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccf<self::Jccf::T*>*
+class Jccf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccf<self::Jccf::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 Jccc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccc<self::Jccc::T*>*
+class Jccc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccc<self::Jccc::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/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect
index 1e435e2..cf5a68f 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -113,521 +113,231 @@
 import self as self;
 import "dart:core" as core;
 
-typedef ContravariantUse<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef InvariantUse<invariant T extends core::Object* = dynamic> = (T*) →* T*;
+typedef ContravariantUse<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef InvariantUse<invariant T extends core::Object? = dynamic> = (T%) → T%;
 class Empty extends core::Object {
-  synthetic constructor •() → self::Empty*
+  synthetic constructor •() → self::Empty
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  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<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic 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 Bc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bc<self::Bc::T*>*
+class Bc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bc<self::Bc::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 Bi<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bi<self::Bi::T*>*
+class Bi<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bi<self::Bi::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
 }
-class Cc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cc<self::Cc::T*>*
+class Cc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cc<self::Cc::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 Ci<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Ci<self::Ci::T*>*
+class Ci<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ci<self::Ci::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 D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::D<self::D::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 Dc<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Dc<self::Dc::T*>*
+class Dc<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Dc<self::Dc::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 Di<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Di<self::Di::T*>*
+class Di<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Di<self::Di::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 E<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::E<self::E::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 Ec<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::Ec<self::Ec::T*>*
+class Ec<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ec<self::Ec::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 Ei<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::Ei<self::Ei::T*>*
+class Ei<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ei<self::Ei::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 _F&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&A::T*>*
+abstract class _F&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&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 F<T extends core::Object* = dynamic> extends self::_F&Object&A<self::F::T*> {
-  synthetic constructor •() → self::F<self::F::T*>*
+class F<T extends core::Object? = dynamic> extends self::_F&Object&A<self::F::T%> {
+  synthetic constructor •() → self::F<self::F::T%>
     : super self::_F&Object&A::•()
     ;
 }
-abstract class _Fc&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&A::T*>*
+abstract class _Fc&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&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 Fc<T extends core::Object* = dynamic> extends self::_Fc&Object&A<self::Fc::T*> {
-  synthetic constructor •() → self::Fc<self::Fc::T*>*
+class Fc<T extends core::Object? = dynamic> extends self::_Fc&Object&A<self::Fc::T%> {
+  synthetic constructor •() → self::Fc<self::Fc::T%>
     : super self::_Fc&Object&A::•()
     ;
 }
-abstract class _Fi&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&A::T*>*
+abstract class _Fi&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&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 Fi<T extends core::Object* = dynamic> extends self::_Fi&Object&A<self::Fi::T*> {
-  synthetic constructor •() → self::Fi<self::Fi::T*>*
+class Fi<T extends core::Object? = dynamic> extends self::_Fi&Object&A<self::Fi::T%> {
+  synthetic constructor •() → self::Fi<self::Fi::T%>
     : super self::_Fi&Object&A::•()
     ;
 }
-abstract class _G&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::T*>*
+abstract class _G&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::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 G<T extends core::Object* = dynamic> extends self::_G&A&Empty<self::G::T*> {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends self::_G&A&Empty<self::G::T%> {
+  synthetic constructor •() → self::G<self::G::T%>
     : super self::_G&A&Empty::•()
     ;
 }
-abstract class _Gc&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::T*>*
+abstract class _Gc&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::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 Gc<T extends core::Object* = dynamic> extends self::_Gc&A&Empty<self::Gc::T*> {
-  synthetic constructor •() → self::Gc<self::Gc::T*>*
+class Gc<T extends core::Object? = dynamic> extends self::_Gc&A&Empty<self::Gc::T%> {
+  synthetic constructor •() → self::Gc<self::Gc::T%>
     : super self::_Gc&A&Empty::•()
     ;
 }
-abstract class _Gi&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::T*>*
+abstract class _Gi&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::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 Gi<T extends core::Object* = dynamic> extends self::_Gi&A&Empty<self::Gi::T*> {
-  synthetic constructor •() → self::Gi<self::Gi::T*>*
+class Gi<T extends core::Object? = dynamic> extends self::_Gi&A&Empty<self::Gi::T%> {
+  synthetic constructor •() → self::Gi<self::Gi::T%>
     : super self::_Gi&A&Empty::•()
     ;
 }
-class Hff<T extends core::Object* = dynamic> extends self::A<((self::Hff::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hff<self::Hff::T*>*
+class Hff<T extends core::Object? = dynamic> extends self::A<((self::Hff::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hff<self::Hff::T%>
     : super self::A::•()
     ;
 }
-class Hfc<T extends core::Object* = dynamic> extends self::A<((self::Hfc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hfc<self::Hfc::T*>*
+class Hfc<T extends core::Object? = dynamic> extends self::A<((self::Hfc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hfc<self::Hfc::T%>
     : super self::A::•()
     ;
 }
-class Hcf<T extends core::Object* = dynamic> extends self::A<((self::Hcf::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcf<self::Hcf::T*>*
+class Hcf<T extends core::Object? = dynamic> extends self::A<((self::Hcf::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcf<self::Hcf::T%>
     : super self::A::•()
     ;
 }
-class Hcc<T extends core::Object* = dynamic> extends self::A<((self::Hcc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcc<self::Hcc::T*>*
+class Hcc<T extends core::Object? = dynamic> extends self::A<((self::Hcc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcc<self::Hcc::T%>
     : super self::A::•()
     ;
 }
-class Hii<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hii<self::Hii::T*>*
+class Hii<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hii<self::Hii::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 Iafc<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iafc::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iafc<self::Iafc::T*>*
+class Iafc<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iafc::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iafc<self::Iafc::T%>
     : super self::A::•()
     ;
 }
-class Iacf<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iacf::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iacf<self::Iacf::T*>*
+class Iacf<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iacf::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iacf<self::Iacf::T%>
     : super self::A::•()
     ;
 }
-class Ifac<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Ifac::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Ifac<self::Ifac::T*>*
+class Ifac<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Ifac::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Ifac<self::Ifac::T%>
     : super self::A::•()
     ;
 }
-class Ifca<T extends core::Object* = dynamic> extends self::A<((self::A<self::Ifca::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Ifca<self::Ifca::T*>*
+class Ifca<T extends core::Object? = dynamic> extends self::A<((self::A<self::Ifca::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Ifca<self::Ifca::T%>
     : super self::A::•()
     ;
 }
-class Icaf<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Icaf::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Icaf<self::Icaf::T*>*
+class Icaf<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Icaf::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Icaf<self::Icaf::T%>
     : super self::A::•()
     ;
 }
-class Icfa<T extends core::Object* = dynamic> extends self::A<((self::A<self::Icfa::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Icfa<self::Icfa::T*>*
+class Icfa<T extends core::Object? = dynamic> extends self::A<((self::A<self::Icfa::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Icfa<self::Icfa::T%>
     : super self::A::•()
     ;
 }
-class Jfff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfff<self::Jfff::T*>*
+class Jfff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfff<self::Jfff::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 Jffc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jffc<self::Jffc::T*>*
+class Jffc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jffc<self::Jffc::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 Jfcf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcf<self::Jfcf::T*>*
+class Jfcf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcf<self::Jfcf::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 Jfcc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcc<self::Jfcc::T*>*
+class Jfcc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcc<self::Jfcc::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 Jcff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcff<self::Jcff::T*>*
+class Jcff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcff<self::Jcff::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 Jcfc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcfc<self::Jcfc::T*>*
+class Jcfc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcfc<self::Jcfc::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 Jccf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccf<self::Jccf::T*>*
+class Jccf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccf<self::Jccf::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 Jccc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccc<self::Jccc::T*>*
+class Jccc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccc<self::Jccc::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/bad_type_variable_uses_in_supertypes.dart.weak.outline.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.outline.expect
index 02aaae8..b00d931 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -113,483 +113,193 @@
 import self as self;
 import "dart:core" as core;
 
-typedef ContravariantUse<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef InvariantUse<invariant T extends core::Object* = dynamic> = (T*) →* T*;
+typedef ContravariantUse<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef InvariantUse<invariant T extends core::Object? = dynamic> = (T%) → T%;
 class Empty extends core::Object {
-  synthetic constructor •() → self::Empty*
+  synthetic constructor •() → self::Empty
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::A<self::A::T*>*
+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<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic 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 Bc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bc<self::Bc::T*>*
+class Bc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bc<self::Bc::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 Bi<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bi<self::Bi::T*>*
+class Bi<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bi<self::Bi::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
 }
-class Cc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cc<self::Cc::T*>*
+class Cc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cc<self::Cc::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 Ci<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Ci<self::Ci::T*>*
+class Ci<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ci<self::Ci::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 D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::D<self::D::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 Dc<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Dc<self::Dc::T*>*
+class Dc<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Dc<self::Dc::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 Di<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Di<self::Di::T*>*
+class Di<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Di<self::Di::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 E<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::E<self::E::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 Ec<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::Ec<self::Ec::T*>*
+class Ec<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ec<self::Ec::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 Ei<T extends core::Object* = dynamic> = core::Object with self::Empty {
-  synthetic constructor •() → self::Ei<self::Ei::T*>*
+class Ei<T extends core::Object? = dynamic> = core::Object with self::Empty {
+  synthetic constructor •() → self::Ei<self::Ei::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 _F&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&A::T*>*
+abstract class _F&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&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 F<T extends core::Object* = dynamic> extends self::_F&Object&A<self::F::T*> {
-  synthetic constructor •() → self::F<self::F::T*>*
+class F<T extends core::Object? = dynamic> extends self::_F&Object&A<self::F::T%> {
+  synthetic constructor •() → self::F<self::F::T%>
     ;
 }
-abstract class _Fc&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&A::T*>*
+abstract class _Fc&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&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 Fc<T extends core::Object* = dynamic> extends self::_Fc&Object&A<self::Fc::T*> {
-  synthetic constructor •() → self::Fc<self::Fc::T*>*
+class Fc<T extends core::Object? = dynamic> extends self::_Fc&Object&A<self::Fc::T%> {
+  synthetic constructor •() → self::Fc<self::Fc::T%>
     ;
 }
-abstract class _Fi&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&A::T*>*
+abstract class _Fi&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&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 Fi<T extends core::Object* = dynamic> extends self::_Fi&Object&A<self::Fi::T*> {
-  synthetic constructor •() → self::Fi<self::Fi::T*>*
+class Fi<T extends core::Object? = dynamic> extends self::_Fi&Object&A<self::Fi::T%> {
+  synthetic constructor •() → self::Fi<self::Fi::T%>
     ;
 }
-abstract class _G&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::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 G<T extends core::Object* = dynamic> extends self::_G&A&Empty<self::G::T*> {
-  synthetic constructor •() → self::G<self::G::T*>*
+abstract class _G&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::T%>
     ;
 }
-abstract class _Gc&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::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 Gc<T extends core::Object* = dynamic> extends self::_Gc&A&Empty<self::Gc::T*> {
-  synthetic constructor •() → self::Gc<self::Gc::T*>*
+class G<T extends core::Object? = dynamic> extends self::_G&A&Empty<self::G::T%> {
+  synthetic constructor •() → self::G<self::G::T%>
     ;
 }
-abstract class _Gi&A&Empty<T extends core::Object* = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::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 Gi<T extends core::Object* = dynamic> extends self::_Gi&A&Empty<self::Gi::T*> {
-  synthetic constructor •() → self::Gi<self::Gi::T*>*
+abstract class _Gc&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::T%>
     ;
 }
-class Hff<T extends core::Object* = dynamic> extends self::A<((self::Hff::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hff<self::Hff::T*>*
+class Gc<T extends core::Object? = dynamic> extends self::_Gc&A&Empty<self::Gc::T%> {
+  synthetic constructor •() → self::Gc<self::Gc::T%>
     ;
 }
-class Hfc<T extends core::Object* = dynamic> extends self::A<((self::Hfc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hfc<self::Hfc::T*>*
+abstract class _Gi&A&Empty<T extends core::Object? = dynamic> = core::Object with self::Empty /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::T%>
     ;
 }
-class Hcf<T extends core::Object* = dynamic> extends self::A<((self::Hcf::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcf<self::Hcf::T*>*
+class Gi<T extends core::Object? = dynamic> extends self::_Gi&A&Empty<self::Gi::T%> {
+  synthetic constructor •() → self::Gi<self::Gi::T%>
     ;
 }
-class Hcc<T extends core::Object* = dynamic> extends self::A<((self::Hcc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcc<self::Hcc::T*>*
+class Hff<T extends core::Object? = dynamic> extends self::A<((self::Hff::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hff<self::Hff::T%>
     ;
 }
-class Hii<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hii<self::Hii::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 Iafc<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iafc::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iafc<self::Iafc::T*>*
+class Hfc<T extends core::Object? = dynamic> extends self::A<((self::Hfc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hfc<self::Hfc::T%>
     ;
 }
-class Iacf<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iacf::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iacf<self::Iacf::T*>*
+class Hcf<T extends core::Object? = dynamic> extends self::A<((self::Hcf::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcf<self::Hcf::T%>
     ;
 }
-class Ifac<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Ifac::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Ifac<self::Ifac::T*>*
+class Hcc<T extends core::Object? = dynamic> extends self::A<((self::Hcc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcc<self::Hcc::T%>
     ;
 }
-class Ifca<T extends core::Object* = dynamic> extends self::A<((self::A<self::Ifca::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Ifca<self::Ifca::T*>*
+class Hii<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hii<self::Hii::T%>
     ;
 }
-class Icaf<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Icaf::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Icaf<self::Icaf::T*>*
+class Iafc<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iafc::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iafc<self::Iafc::T%>
     ;
 }
-class Icfa<T extends core::Object* = dynamic> extends self::A<((self::A<self::Icfa::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Icfa<self::Icfa::T*>*
+class Iacf<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iacf::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iacf<self::Iacf::T%>
     ;
 }
-class Jfff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfff<self::Jfff::T*>*
+class Ifac<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Ifac::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Ifac<self::Ifac::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 Jffc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jffc<self::Jffc::T*>*
+class Ifca<T extends core::Object? = dynamic> extends self::A<((self::A<self::Ifca::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Ifca<self::Ifca::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 Jfcf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcf<self::Jfcf::T*>*
+class Icaf<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Icaf::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Icaf<self::Icaf::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 Jfcc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcc<self::Jfcc::T*>*
+class Icfa<T extends core::Object? = dynamic> extends self::A<((self::A<self::Icfa::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Icfa<self::Icfa::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 Jcff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcff<self::Jcff::T*>*
+class Jfff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfff<self::Jfff::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 Jcfc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcfc<self::Jcfc::T*>*
+class Jffc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jffc<self::Jffc::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 Jccf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccf<self::Jccf::T*>*
+class Jfcf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcf<self::Jfcf::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 Jccc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccc<self::Jccc::T*>*
+class Jfcc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcc<self::Jfcc::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 Jcff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcff<self::Jcff::T%>
+    ;
+}
+class Jcfc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcfc<self::Jcfc::T%>
+    ;
+}
+class Jccf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccf<self::Jccf::T%>
+    ;
+}
+class Jccc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccc<self::Jccc::T%>
+    ;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.transformed.expect
index 6ec787e..0bdc8f7 100644
--- a/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bad_type_variable_uses_in_supertypes.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -113,521 +113,231 @@
 import self as self;
 import "dart:core" as core;
 
-typedef ContravariantUse<contravariant T extends core::Object* = dynamic> = (T*) →* dynamic;
-typedef InvariantUse<invariant T extends core::Object* = dynamic> = (T*) →* T*;
+typedef ContravariantUse<contravariant T extends core::Object? = dynamic> = (T%) → dynamic;
+typedef InvariantUse<invariant T extends core::Object? = dynamic> = (T%) → T%;
 class Empty extends core::Object {
-  synthetic constructor •() → self::Empty*
+  synthetic constructor •() → self::Empty
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  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<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic 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 Bc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bc<self::Bc::T*>*
+class Bc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bc<self::Bc::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 Bi<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Bi<self::Bi::T*>*
+class Bi<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Bi<self::Bi::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
 }
-class Cc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Cc<self::Cc::T*>*
+class Cc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Cc<self::Cc::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 Ci<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Ci<self::Ci::T*>*
+class Ci<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Ci<self::Ci::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 D<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::D<self::D::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 Dc<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Dc<self::Dc::T*>*
+class Dc<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Dc<self::Dc::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 Di<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Di<self::Di::T*>*
+class Di<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Di<self::Di::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 E<T extends core::Object* = dynamic> extends core::Object implements self::Empty /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::Object? = dynamic> extends core::Object implements self::Empty /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::E<self::E::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 Ec<T extends core::Object* = dynamic> extends core::Object implements self::Empty /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::Ec<self::Ec::T*>*
+class Ec<T extends core::Object? = dynamic> extends core::Object implements self::Empty /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Ec<self::Ec::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 Ei<T extends core::Object* = dynamic> extends core::Object implements self::Empty /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::Ei<self::Ei::T*>*
+class Ei<T extends core::Object? = dynamic> extends core::Object implements self::Empty /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Ei<self::Ei::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 _F&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&A::T*>*
+abstract class _F&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_F&Object&A<self::_F&Object&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 F<T extends core::Object* = dynamic> extends self::_F&Object&A<self::F::T*> {
-  synthetic constructor •() → self::F<self::F::T*>*
+class F<T extends core::Object? = dynamic> extends self::_F&Object&A<self::F::T%> {
+  synthetic constructor •() → self::F<self::F::T%>
     : super self::_F&Object&A::•()
     ;
 }
-abstract class _Fc&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&A::T*>*
+abstract class _Fc&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fc&Object&A<self::_Fc&Object&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 Fc<T extends core::Object* = dynamic> extends self::_Fc&Object&A<self::Fc::T*> {
-  synthetic constructor •() → self::Fc<self::Fc::T*>*
+class Fc<T extends core::Object? = dynamic> extends self::_Fc&Object&A<self::Fc::T%> {
+  synthetic constructor •() → self::Fc<self::Fc::T%>
     : super self::_Fc&Object&A::•()
     ;
 }
-abstract class _Fi&Object&A<T extends core::Object* = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&A::T*>*
+abstract class _Fi&Object&A<T extends core::Object? = dynamic> extends core::Object /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fi&Object&A<self::_Fi&Object&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 Fi<T extends core::Object* = dynamic> extends self::_Fi&Object&A<self::Fi::T*> {
-  synthetic constructor •() → self::Fi<self::Fi::T*>*
+class Fi<T extends core::Object? = dynamic> extends self::_Fi&Object&A<self::Fi::T%> {
+  synthetic constructor •() → self::Fi<self::Fi::T%>
     : super self::_Fi&Object&A::•()
     ;
 }
-abstract class _G&A&Empty<T extends core::Object* = dynamic> extends core::Object implements self::Empty /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::T*>*
+abstract class _G&A&Empty<T extends core::Object? = dynamic> extends core::Object implements self::Empty /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_G&A&Empty<self::_G&A&Empty::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 G<T extends core::Object* = dynamic> extends self::_G&A&Empty<self::G::T*> {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends core::Object? = dynamic> extends self::_G&A&Empty<self::G::T%> {
+  synthetic constructor •() → self::G<self::G::T%>
     : super self::_G&A&Empty::•()
     ;
 }
-abstract class _Gc&A&Empty<T extends core::Object* = dynamic> extends core::Object implements self::Empty /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::T*>*
+abstract class _Gc&A&Empty<T extends core::Object? = dynamic> extends core::Object implements self::Empty /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Gc&A&Empty<self::_Gc&A&Empty::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 Gc<T extends core::Object* = dynamic> extends self::_Gc&A&Empty<self::Gc::T*> {
-  synthetic constructor •() → self::Gc<self::Gc::T*>*
+class Gc<T extends core::Object? = dynamic> extends self::_Gc&A&Empty<self::Gc::T%> {
+  synthetic constructor •() → self::Gc<self::Gc::T%>
     : super self::_Gc&A&Empty::•()
     ;
 }
-abstract class _Gi&A&Empty<T extends core::Object* = dynamic> extends core::Object implements self::Empty /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::T*>*
+abstract class _Gi&A&Empty<T extends core::Object? = dynamic> extends core::Object implements self::Empty /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Gi&A&Empty<self::_Gi&A&Empty::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 Gi<T extends core::Object* = dynamic> extends self::_Gi&A&Empty<self::Gi::T*> {
-  synthetic constructor •() → self::Gi<self::Gi::T*>*
+class Gi<T extends core::Object? = dynamic> extends self::_Gi&A&Empty<self::Gi::T%> {
+  synthetic constructor •() → self::Gi<self::Gi::T%>
     : super self::_Gi&A&Empty::•()
     ;
 }
-class Hff<T extends core::Object* = dynamic> extends self::A<((self::Hff::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hff<self::Hff::T*>*
+class Hff<T extends core::Object? = dynamic> extends self::A<((self::Hff::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hff<self::Hff::T%>
     : super self::A::•()
     ;
 }
-class Hfc<T extends core::Object* = dynamic> extends self::A<((self::Hfc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hfc<self::Hfc::T*>*
+class Hfc<T extends core::Object? = dynamic> extends self::A<((self::Hfc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hfc<self::Hfc::T%>
     : super self::A::•()
     ;
 }
-class Hcf<T extends core::Object* = dynamic> extends self::A<((self::Hcf::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcf<self::Hcf::T*>*
+class Hcf<T extends core::Object? = dynamic> extends self::A<((self::Hcf::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcf<self::Hcf::T%>
     : super self::A::•()
     ;
 }
-class Hcc<T extends core::Object* = dynamic> extends self::A<((self::Hcc::T*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Hcc<self::Hcc::T*>*
+class Hcc<T extends core::Object? = dynamic> extends self::A<((self::Hcc::T%) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Hcc<self::Hcc::T%>
     : super self::A::•()
     ;
 }
-class Hii<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Hii<self::Hii::T*>*
+class Hii<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Hii<self::Hii::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 Iafc<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iafc::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iafc<self::Iafc::T*>*
+class Iafc<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iafc::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iafc<self::Iafc::T%>
     : super self::A::•()
     ;
 }
-class Iacf<T extends core::Object* = dynamic> extends self::A<self::A<((self::Iacf::T*) →* dynamic) →* dynamic>*> {
-  synthetic constructor •() → self::Iacf<self::Iacf::T*>*
+class Iacf<T extends core::Object? = dynamic> extends self::A<self::A<((self::Iacf::T%) → dynamic) → dynamic>> {
+  synthetic constructor •() → self::Iacf<self::Iacf::T%>
     : super self::A::•()
     ;
 }
-class Ifac<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Ifac::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Ifac<self::Ifac::T*>*
+class Ifac<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Ifac::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Ifac<self::Ifac::T%>
     : super self::A::•()
     ;
 }
-class Ifca<T extends core::Object* = dynamic> extends self::A<((self::A<self::Ifca::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Ifca<self::Ifca::T*>*
+class Ifca<T extends core::Object? = dynamic> extends self::A<((self::A<self::Ifca::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Ifca<self::Ifca::T%>
     : super self::A::•()
     ;
 }
-class Icaf<T extends core::Object* = dynamic> extends self::A<(self::A<(self::Icaf::T*) →* dynamic>*) →* dynamic> {
-  synthetic constructor •() → self::Icaf<self::Icaf::T*>*
+class Icaf<T extends core::Object? = dynamic> extends self::A<(self::A<(self::Icaf::T%) → dynamic>) → dynamic> {
+  synthetic constructor •() → self::Icaf<self::Icaf::T%>
     : super self::A::•()
     ;
 }
-class Icfa<T extends core::Object* = dynamic> extends self::A<((self::A<self::Icfa::T*>*) →* dynamic) →* dynamic> {
-  synthetic constructor •() → self::Icfa<self::Icfa::T*>*
+class Icfa<T extends core::Object? = dynamic> extends self::A<((self::A<self::Icfa::T%>) → dynamic) → dynamic> {
+  synthetic constructor •() → self::Icfa<self::Icfa::T%>
     : super self::A::•()
     ;
 }
-class Jfff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfff<self::Jfff::T*>*
+class Jfff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfff<self::Jfff::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 Jffc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jffc<self::Jffc::T*>*
+class Jffc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jffc<self::Jffc::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 Jfcf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcf<self::Jfcf::T*>*
+class Jfcf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcf<self::Jfcf::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 Jfcc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jfcc<self::Jfcc::T*>*
+class Jfcc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jfcc<self::Jfcc::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 Jcff<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcff<self::Jcff::T*>*
+class Jcff<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcff<self::Jcff::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 Jcfc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jcfc<self::Jcfc::T*>*
+class Jcfc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jcfc<self::Jcfc::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 Jccf<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccf<self::Jccf::T*>*
+class Jccf<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccf<self::Jccf::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 Jccc<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Jccc<self::Jccc::T*>*
+class Jccc<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Jccc<self::Jccc::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/bounds_check_depends_on_inference.dart b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart
index 4d668a5..be77632 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart
@@ -1,17 +1,17 @@
 // 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 testcase checks an implementation detail in the bounds checking
 // mechanism.  Here String passed into bar should be checked against the bound
 // that depends on the result of type inference for expression `B.foo()`.
 
 class A<X> {
-  bar<Y extends X>() => null;
+  bar<Y extends X>() => throw '';
 }
 
 class B {
-  static A<Y> foo<Y extends Object>() => null;
+  static A<Y> foo<Y extends Object>() => throw '';
 }
 
 baz() {
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline.expect
index bfd899b..ecfb359 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A<X> {
-  bar<Y extends X>() => null;
+  bar<Y extends X>() => throw '';
 }
 
 class B {
-  static A<Y> foo<Y extends Object>() => null;
+  static A<Y> foo<Y extends Object>() => throw '';
 }
 
 baz() {}
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline_modelled.expect
index 2568052..21e8979 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.textual_outline_modelled.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 baz() {}
 
 class A<X> {
-  bar<Y extends X>() => null;
+  bar<Y extends X>() => throw '';
 }
 
 class B {
-  static A<Y> foo<Y extends Object>() => null;
+  static A<Y> foo<Y extends Object>() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
index 228018a..719bc6c7 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
@@ -1,42 +1,22 @@
-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 bar<covariant-by-class Y extends self::A::X*>() → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method bar<covariant-by-class Y extends self::A::X%>() → dynamic
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  static method foo<Y extends core::Object*>() → self::A<self::B::foo::Y*>*
-    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 foo<Y extends core::Object>() → self::A<self::B::foo::Y>
+    return throw "";
 }
 static method baz() → dynamic {
-  self::B::foo<core::Object*>().{self::A::bar}<core::String*>(){() →* dynamic};
+  self::B::foo<core::Object>().{self::A::bar}<core::String>(){() → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect
index 228018a..719bc6c7 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-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 bar<covariant-by-class Y extends self::A::X*>() → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method bar<covariant-by-class Y extends self::A::X%>() → dynamic
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  static method foo<Y extends core::Object*>() → self::A<self::B::foo::Y*>*
-    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 foo<Y extends core::Object>() → self::A<self::B::foo::Y>
+    return throw "";
 }
 static method baz() → dynamic {
-  self::B::foo<core::Object*>().{self::A::bar}<core::String*>(){() →* dynamic};
+  self::B::foo<core::Object>().{self::A::bar}<core::String>(){() → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect
index 12e78d8..9c24993 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-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 bar<covariant-by-class Y extends self::A::X*>() → dynamic
+  method bar<covariant-by-class Y extends self::A::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 B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  static method foo<Y extends core::Object*>() → self::A<self::B::foo::Y*>*
+  static method foo<Y extends core::Object>() → self::A<self::B::foo::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 baz() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
index 228018a..719bc6c7 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-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 bar<covariant-by-class Y extends self::A::X*>() → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method bar<covariant-by-class Y extends self::A::X%>() → dynamic
+    return throw "";
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  static method foo<Y extends core::Object*>() → self::A<self::B::foo::Y*>*
-    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 foo<Y extends core::Object>() → self::A<self::B::foo::Y>
+    return throw "";
 }
 static method baz() → dynamic {
-  self::B::foo<core::Object*>().{self::A::bar}<core::String*>(){() →* dynamic};
+  self::B::foo<core::Object>().{self::A::bar}<core::String>(){() → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart
index a0d29c8..955eb3d 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.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
+
 class A<X extends String> {}
 
 typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline.expect
index 5b7ac34a..0005089 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends String> {}
 
 typedef F = Function<Z extends A<Y>>() Function<Y extends num>();
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline_modelled.expect
index 14c6c33..66a369f 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X extends String> {}
 
 main() {}
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect
index 01f1570..3cebc8b 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,21 +21,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = <Y extends core::num* = dynamic>() →* <Z extends self::A<Y*>* = dynamic>() →* dynamic;
-typedef G = <Y extends core::num* = dynamic>(<Z extends self::A<Y*>* = dynamic>() →* dynamic) →* void;
-class A<X extends core::String*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+typedef F = <Y extends core::num = dynamic>() → <Z extends self::A<Y> = dynamic>() → dynamic;
+typedef G = <Y extends core::num = dynamic>(<Z extends self::A<Y> = dynamic>() → dynamic) → void;
+class A<X extends core::String> 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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
index 01f1570..3cebc8b 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,21 +21,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = <Y extends core::num* = dynamic>() →* <Z extends self::A<Y*>* = dynamic>() →* dynamic;
-typedef G = <Y extends core::num* = dynamic>(<Z extends self::A<Y*>* = dynamic>() →* dynamic) →* void;
-class A<X extends core::String*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+typedef F = <Y extends core::num = dynamic>() → <Z extends self::A<Y> = dynamic>() → dynamic;
+typedef G = <Y extends core::num = dynamic>(<Z extends self::A<Y> = dynamic>() → dynamic) → void;
+class A<X extends core::String> 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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect
index ffcf750..d778825 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,21 +21,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = <Y extends core::num* = dynamic>() →* <Z extends self::A<Y*>* = dynamic>() →* dynamic;
-typedef G = <Y extends core::num* = dynamic>(<Z extends self::A<Y*>* = dynamic>() →* dynamic) →* void;
-class A<X extends core::String*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+typedef F = <Y extends core::num = dynamic>() → <Z extends self::A<Y> = dynamic>() → dynamic;
+typedef G = <Y extends core::num = dynamic>(<Z extends self::A<Y> = dynamic>() → dynamic) → void;
+class A<X extends core::String> 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 main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect
index 01f1570..3cebc8b 100644
--- a/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_check_in_typedef.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,21 +21,11 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = <Y extends core::num* = dynamic>() →* <Z extends self::A<Y*>* = dynamic>() →* dynamic;
-typedef G = <Y extends core::num* = dynamic>(<Z extends self::A<Y*>* = dynamic>() →* dynamic) →* void;
-class A<X extends core::String*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::X*>*
+typedef F = <Y extends core::num = dynamic>() → <Z extends self::A<Y> = dynamic>() → dynamic;
+typedef G = <Y extends core::num = dynamic>(<Z extends self::A<Y> = dynamic>() → dynamic) → void;
+class A<X extends core::String> 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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug21938.dart b/pkg/front_end/testcases/general/bug21938.dart
index 9783d24..1b68c6d6 100644
--- a/pkg/front_end/testcases/general/bug21938.dart
+++ b/pkg/front_end/testcases/general/bug21938.dart
@@ -1,10 +1,8 @@
 // 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
-test() {
-  Object x;
-  Function f;
+
+test(Object x, Function f) {
   x();
   x(3);
   f(5, 2);
diff --git a/pkg/front_end/testcases/general/bug21938.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug21938.dart.textual_outline.expect
index 001308b..b2e6e6d 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
-test() {}
+test(Object x, Function f) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/bug21938.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug21938.dart.textual_outline_modelled.expect
index 38df08d..f7e381f 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
-test() {}
+test(Object x, Function f) {}
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.expect
index d46ee72..f5c0832 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:6:4: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x();
 //    ^
 //
-// pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:7:4: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x(3);
 //    ^
 //
-// pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:9:5: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x.call();
@@ -23,21 +23,19 @@
 import self as self;
 import "dart:core" as core;
 
-static method test() → dynamic {
-  core::Object* x;
-  core::Function* f;
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+static method test(core::Object x, core::Function f) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:6:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x();
    ^" in x{<unresolved>}.call();
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:7:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
    ^" in x{<unresolved>}.call(3);
   f(5, 2);
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect
index d46ee72..f5c0832 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.modular.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:6:4: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x();
 //    ^
 //
-// pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:7:4: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x(3);
 //    ^
 //
-// pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:9:5: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x.call();
@@ -23,21 +23,19 @@
 import self as self;
 import "dart:core" as core;
 
-static method test() → dynamic {
-  core::Object* x;
-  core::Function* f;
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+static method test(core::Object x, core::Function f) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:6:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x();
    ^" in x{<unresolved>}.call();
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:7:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
    ^" in x{<unresolved>}.call(3);
   f(5, 2);
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.outline.expect
index a29647d..47da295 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.outline.expect
@@ -1,7 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
+import "dart:core" as core;
 
-static method test() → dynamic
+static method test(core::Object x, core::Function f) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
index d46ee72..f5c0832 100644
--- a/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug21938.dart.weak.transformed.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:6:4: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x();
 //    ^
 //
-// pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:7:4: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x(3);
 //    ^
 //
-// pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+// pkg/front_end/testcases/general/bug21938.dart:9:5: Error: The method 'call' isn't defined for the class 'Object'.
 //  - 'Object' is from 'dart:core'.
 // Try correcting the name to the name of an existing method, or defining a method named 'call'.
 //   x.call();
@@ -23,21 +23,19 @@
 import self as self;
 import "dart:core" as core;
 
-static method test() → dynamic {
-  core::Object* x;
-  core::Function* f;
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:8:4: Error: The method 'call' isn't defined for the class 'Object'.
+static method test(core::Object x, core::Function f) → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:6:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x();
    ^" in x{<unresolved>}.call();
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:4: Error: The method 'call' isn't defined for the class 'Object'.
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:7:4: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x(3);
    ^" in x{<unresolved>}.call(3);
   f(5, 2);
-  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:11:5: Error: The method 'call' isn't defined for the class 'Object'.
+  invalid-expression "pkg/front_end/testcases/general/bug21938.dart:9:5: Error: The method 'call' isn't defined for the class 'Object'.
  - 'Object' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   x.call();
diff --git a/pkg/front_end/testcases/general/bug30695.dart b/pkg/front_end/testcases/general/bug30695.dart
index 278372a..078fdb1 100644
--- a/pkg/front_end/testcases/general/bug30695.dart
+++ b/pkg/front_end/testcases/general/bug30695.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {
   var foo = 42;
 }
diff --git a/pkg/front_end/testcases/general/bug30695.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug30695.dart.textual_outline.expect
index 06d774d..8f35078 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var foo = 42;
 }
diff --git a/pkg/front_end/testcases/general/bug30695.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug30695.dart.textual_outline_modelled.expect
index 06d774d..8f35078 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var foo = 42;
 }
diff --git a/pkg/front_end/testcases/general/bug30695.dart.weak.expect b/pkg/front_end/testcases/general/bug30695.dart.weak.expect
index 87f32bd..c0a0d0b 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,23 +13,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* foo = 42;
-  synthetic constructor •() → self::A*
+  field core::int foo = 42;
+  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::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect
index 87f32bd..c0a0d0b 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,23 +13,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* foo = 42;
-  synthetic constructor •() → self::A*
+  field core::int foo = 42;
+  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::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/general/bug30695.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug30695.dart.weak.outline.expect
index bd5f95d..356a0af 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,22 +13,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* foo;
-  synthetic constructor •() → self::A*
+  field core::int foo;
+  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
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/bug31124.dart b/pkg/front_end/testcases/general/bug31124.dart
index be63d7d..6920fe1 100644
--- a/pkg/front_end/testcases/general/bug31124.dart
+++ b/pkg/front_end/testcases/general/bug31124.dart
@@ -1,2 +1 @@
-// @dart=2.9
 var a = () => 'b';a();
diff --git a/pkg/front_end/testcases/general/bug31124.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug31124.dart.textual_outline.expect
index 0a7830f..331dc8b 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 var a = () => 'b';
 a();
diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.expect
index 05d5b71..ffdb401 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.weak.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:22: Error: Expected a function body or '=>'.
+// pkg/front_end/testcases/general/bug31124.dart:1:22: Error: Expected a function body or '=>'.
 // Try adding {}.
 // var a = () => 'b';a();
 //                      ^
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:19: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
 // var a = () => 'b';a();
 //                   ^
-// pkg/front_end/testcases/general/bug31124.dart:2:5: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/bug31124.dart:1:5: Context: Previous declaration of 'a'.
 // var a = () => 'b';a();
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* a;
+static field () → core::String a;
diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect
index 05d5b71..ffdb401 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.weak.modular.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:22: Error: Expected a function body or '=>'.
+// pkg/front_end/testcases/general/bug31124.dart:1:22: Error: Expected a function body or '=>'.
 // Try adding {}.
 // var a = () => 'b';a();
 //                      ^
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:19: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
 // var a = () => 'b';a();
 //                   ^
-// pkg/front_end/testcases/general/bug31124.dart:2:5: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/bug31124.dart:1:5: Context: Previous declaration of 'a'.
 // var a = () => 'b';a();
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* a;
+static field () → core::String a;
diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.outline.expect
index 05d5b71..ffdb401 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.weak.outline.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:22: Error: Expected a function body or '=>'.
+// pkg/front_end/testcases/general/bug31124.dart:1:22: Error: Expected a function body or '=>'.
 // Try adding {}.
 // var a = () => 'b';a();
 //                      ^
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:19: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
 // var a = () => 'b';a();
 //                   ^
-// pkg/front_end/testcases/general/bug31124.dart:2:5: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/bug31124.dart:1:5: Context: Previous declaration of 'a'.
 // var a = () => 'b';a();
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* a;
+static field () → core::String a;
diff --git a/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect
index 05d5b71..ffdb401 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.weak.transformed.expect
@@ -1,20 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:22: Error: Expected a function body or '=>'.
+// pkg/front_end/testcases/general/bug31124.dart:1:22: Error: Expected a function body or '=>'.
 // Try adding {}.
 // var a = () => 'b';a();
 //                      ^
 //
-// pkg/front_end/testcases/general/bug31124.dart:2:19: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/bug31124.dart:1:19: Error: 'a' is already declared in this scope.
 // var a = () => 'b';a();
 //                   ^
-// pkg/front_end/testcases/general/bug31124.dart:2:5: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/bug31124.dart:1:5: Context: Previous declaration of 'a'.
 // var a = () => 'b';a();
 //     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::String* a;
+static field () → core::String a;
diff --git a/pkg/front_end/testcases/general/bug32414a.dart b/pkg/front_end/testcases/general/bug32414a.dart
index 5f453b0..88a9e4b 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart
+++ b/pkg/front_end/testcases/general/bug32414a.dart
@@ -1,12 +1,12 @@
 // 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
+
 /*@testedFeatures=inference*/
 
 void test() {
   dynamic a = 5;
-  var /*@ type=String* */ b = a. /*@target=Object.toString*/ toString();
+  var /*@type=String*/ b = a. /*@target=Object.toString*/ toString();
   b = 42;
 }
 
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug32414a.dart.textual_outline.expect
index c5aabb4..41786bb 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 void test() {}
 void main() {}
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug32414a.dart.textual_outline_modelled.expect
index d4e1593..0e0980f 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 void main() {}
 void test() {}
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
index 8f4896c..74de6ae 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,9 +11,9 @@
 
 static method test() → void {
   dynamic a = 5;
-  core::String* b = a.{core::Object::toString}(){() →* core::String*};
+  core::String b = a.{core::Object::toString}(){() → core::String};
   b = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
-      ^" in 42 as{TypeError} core::String*;
+      ^" in 42 as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect
index 8f4896c..74de6ae 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,9 +11,9 @@
 
 static method test() → void {
   dynamic a = 5;
-  core::String* b = a.{core::Object::toString}(){() →* core::String*};
+  core::String b = a.{core::Object::toString}(){() → core::String};
   b = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
-      ^" in 42 as{TypeError} core::String*;
+      ^" in 42 as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.outline.expect
index a440da0..b6809aa 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
index 8f4896c..74de6ae 100644
--- a/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32414a.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,9 +11,9 @@
 
 static method test() → void {
   dynamic a = 5;
-  core::String* b = a.{core::Object::toString}(){() →* core::String*};
+  core::String b = a.{core::Object::toString}(){() → core::String};
   b = invalid-expression "pkg/front_end/testcases/general/bug32414a.dart:10:7: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   b = 42;
-      ^" in 42 as{TypeError} core::String*;
+      ^" in 42 as{TypeError,ForNonNullableByDefault} core::String;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart b/pkg/front_end/testcases/general/bug32414b.dart
index e1be246..81325e2 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart
+++ b/pkg/front_end/testcases/general/bug32414b.dart
@@ -1,14 +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.
-// @dart=2.9
+
 /*@testedFeatures=inference*/
 
 void test() {
   List<dynamic> l = /*@ typeArgs=dynamic */ [1, "hello"];
   List<String> l2 = l
-      . /*@target=Iterable.map*/ /*@ typeArgs=String* */ map(
-          /*@ returnType=String* */ (dynamic element) =>
+      . /*@target=Iterable.map*/ /*@typeArgs=String*/ map(
+          /*@returnType=String*/ (dynamic element) =>
               element. /*@target=Object.toString*/ toString())
       . /*@target=Iterable.toList*/ toList();
 }
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug32414b.dart.textual_outline.expect
index c5aabb4..41786bb 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 void test() {}
 void main() {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug32414b.dart.textual_outline_modelled.expect
index d4e1593..0e0980f 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 void main() {}
 void test() {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.expect
index f09b3fe..bf03166 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::List<dynamic>* l = <dynamic>[1, "hello"];
-  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}(){() →* core::String*}){((dynamic) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<dynamic> l = <dynamic>[1, "hello"];
+  core::List<core::String> l2 = l.{core::Iterable::map}<core::String>((dynamic element) → core::String => element.{core::Object::toString}(){() → core::String}){((dynamic) → core::String) → core::Iterable<core::String>}.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::String>};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect
index f09b3fe..bf03166 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::List<dynamic>* l = <dynamic>[1, "hello"];
-  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}(){() →* core::String*}){((dynamic) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<dynamic> l = <dynamic>[1, "hello"];
+  core::List<core::String> l2 = l.{core::Iterable::map}<core::String>((dynamic element) → core::String => element.{core::Object::toString}(){() → core::String}){((dynamic) → core::String) → core::Iterable<core::String>}.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::String>};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.outline.expect
index a440da0..b6809aa 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method test() → void
diff --git a/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect
index 474232b..8e60b39 100644
--- a/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32414b.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method test() → void {
-  core::List<dynamic>* l = core::_GrowableList::_literal2<dynamic>(1, "hello");
-  core::List<core::String*>* l2 = l.{core::Iterable::map}<core::String*>((dynamic element) → core::String* => element.{core::Object::toString}(){() →* core::String*}){((dynamic) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
+  core::List<dynamic> l = core::_GrowableList::_literal2<dynamic>(1, "hello");
+  core::List<core::String> l2 = l.{core::Iterable::map}<core::String>((dynamic element) → core::String => element.{core::Object::toString}(){() → core::String}){((dynamic) → core::String) → core::Iterable<core::String>}.{core::Iterable::toList}(){({growable: core::bool}) → core::List<core::String>};
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/bug32426.dart b/pkg/front_end/testcases/general/bug32426.dart
index 8a5658a..5947c3a 100644
--- a/pkg/front_end/testcases/general/bug32426.dart
+++ b/pkg/front_end/testcases/general/bug32426.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
+
 abstract class I {
   void call();
 }
diff --git a/pkg/front_end/testcases/general/bug32629.dart b/pkg/front_end/testcases/general/bug32629.dart
index fc54cf1..95bb9e2 100644
--- a/pkg/front_end/testcases/general/bug32629.dart
+++ b/pkg/front_end/testcases/general/bug32629.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 A {
   dynamic call(dynamic a, dynamic b) {
     return a;
diff --git a/pkg/front_end/testcases/general/bug32629.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug32629.dart.textual_outline.expect
index a3c767a..79a8b78 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   dynamic call(dynamic a, dynamic b) {}
 }
diff --git a/pkg/front_end/testcases/general/bug32629.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug32629.dart.textual_outline_modelled.expect
index 1a9eaba..499e1c6 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   dynamic call(dynamic a, dynamic b) {}
 }
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.expect
index 48c5ec01a..8049563 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,29 +9,19 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<invariant S extends core::Object* = dynamic> = (S*, dynamic) →* S*;
+typedef Reducer<invariant S extends core::Object? = dynamic> = (S%, dynamic) → S%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method call(dynamic a, dynamic b) → dynamic {
     return 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 foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void {}
+static method foo<S extends core::Object? = dynamic>((self::foo::S%, dynamic) → self::foo::S% v) → void {}
 static method test() → void {
-  self::foo<core::String*>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+  self::foo<core::String>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) →* dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) → dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) → dynamic}) as{TypeError,ForNonNullableByDefault} (core::String, dynamic) → core::String);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect
index 48c5ec01a..8049563 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,29 +9,19 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<invariant S extends core::Object* = dynamic> = (S*, dynamic) →* S*;
+typedef Reducer<invariant S extends core::Object? = dynamic> = (S%, dynamic) → S%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method call(dynamic a, dynamic b) → dynamic {
     return 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 foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void {}
+static method foo<S extends core::Object? = dynamic>((self::foo::S%, dynamic) → self::foo::S% v) → void {}
 static method test() → void {
-  self::foo<core::String*>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+  self::foo<core::String>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) →* dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) → dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) → dynamic}) as{TypeError,ForNonNullableByDefault} (core::String, dynamic) → core::String);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.outline.expect
index c0d8165..8738dda 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<invariant S extends core::Object* = dynamic> = (S*, dynamic) →* S*;
+typedef Reducer<invariant S extends core::Object? = dynamic> = (S%, dynamic) → S%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
   method call(dynamic a, dynamic 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
 }
-static method foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void
+static method foo<S extends core::Object? = dynamic>((self::foo::S%, dynamic) → self::foo::S% v) → void
   ;
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
index 48c5ec01a..8049563 100644
--- a/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32629.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,29 +9,19 @@
 import self as self;
 import "dart:core" as core;
 
-typedef Reducer<invariant S extends core::Object* = dynamic> = (S*, dynamic) →* S*;
+typedef Reducer<invariant S extends core::Object? = dynamic> = (S%, dynamic) → S%;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
   method call(dynamic a, dynamic b) → dynamic {
     return 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 foo<S extends core::Object* = dynamic>((self::foo::S*, dynamic) →* self::foo::S* v) → void {}
+static method foo<S extends core::Object? = dynamic>((self::foo::S%, dynamic) → self::foo::S% v) → void {}
 static method test() → void {
-  self::foo<core::String*>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
+  self::foo<core::String>(invalid-expression "pkg/front_end/testcases/general/bug32629.dart:16:19: Error: The argument type 'dynamic Function(dynamic, dynamic)' can't be assigned to the parameter type 'String Function(String, dynamic)'.
   foo<String>(new A());
-                  ^" in (let final self::A* #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) →* dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) →* dynamic}) as{TypeError} (core::String*, dynamic) →* core::String*);
+                  ^" in (let final self::A #t1 = new self::A::•() in #t1 == null ?{(dynamic, dynamic) → dynamic} null : #t1.{self::A::call}{(dynamic, dynamic) → dynamic}) as{TypeError,ForNonNullableByDefault} (core::String, dynamic) → core::String);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug32866.dart b/pkg/front_end/testcases/general/bug32866.dart
index 8c1bb4c..4c97c86 100644
--- a/pkg/front_end/testcases/general/bug32866.dart
+++ b/pkg/front_end/testcases/general/bug32866.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
+
 // Regression test that top-level inference correctly handles dependencies from
 // top-level field -> initializing formal -> field that overrides a getter.
 
diff --git a/pkg/front_end/testcases/general/bug32866.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug32866.dart.textual_outline.expect
index 7d02dab..8207658 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B {
   String get f;
 }
diff --git a/pkg/front_end/testcases/general/bug32866.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug32866.dart.textual_outline_modelled.expect
index 165ed26..9acbfae 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B {
   String get f;
 }
diff --git a/pkg/front_end/testcases/general/bug32866.dart.weak.expect b/pkg/front_end/testcases/general/bug32866.dart.weak.expect
index 25924d8..f40e346 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.weak.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get f() → 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 f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field core::String* f;
-  constructor •(core::String* f) → self::A*
+  final field core::String f;
+  constructor •(core::String f) → self::A
     : self::A::f = 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
 }
-static field self::A* a = new self::A::•("foo");
+static field self::A a = new self::A::•("foo");
 static method main() → dynamic
   return core::print(self::a);
diff --git a/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect
index 25924d8..f40e346 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get f() → 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 f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field core::String* f;
-  constructor •(core::String* f) → self::A*
+  final field core::String f;
+  constructor •(core::String f) → self::A
     : self::A::f = 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
 }
-static field self::A* a = new self::A::•("foo");
+static field self::A a = new self::A::•("foo");
 static method main() → dynamic
   return core::print(self::a);
diff --git a/pkg/front_end/testcases/general/bug32866.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug32866.dart.weak.outline.expect
index 83f4eb2..11eb6d7 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.weak.outline.expect
@@ -1,37 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get f() → 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 f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field core::String* f;
-  constructor •(core::String* f) → self::A*
+  final field core::String f;
+  constructor •(core::String f) → 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 field self::A* a;
+static field self::A a;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bug32866.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug32866.dart.weak.transformed.expect
index 25924d8..f40e346 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get f() → 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 f() → core::String;
 }
 class A extends core::Object implements self::B {
-  final field core::String* f;
-  constructor •(core::String* f) → self::A*
+  final field core::String f;
+  constructor •(core::String f) → self::A
     : self::A::f = 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
 }
-static field self::A* a = new self::A::•("foo");
+static field self::A a = new self::A::•("foo");
 static method main() → dynamic
   return core::print(self::a);
diff --git a/pkg/front_end/testcases/general/bug33099.dart b/pkg/front_end/testcases/general/bug33099.dart
index a93ee35..25fd24e 100644
--- a/pkg/front_end/testcases/general/bug33099.dart
+++ b/pkg/front_end/testcases/general/bug33099.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 'dart:mirrors';
 
 const _FailingTest failingTest = const _FailingTest();
diff --git a/pkg/front_end/testcases/general/bug33099.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug33099.dart.textual_outline.expect
index cb1228a..dfdc73b 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:mirrors';
 
 const _FailingTest failingTest = const _FailingTest();
diff --git a/pkg/front_end/testcases/general/bug33099.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug33099.dart.textual_outline_modelled.expect
index ebfba93..4aa3b4d 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:mirrors';
 
 bool _hasAnnotationInstance(DeclarationMirror declaration, instance) =>
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.expect
index 68aa1c4..8f57112 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:mirrors" as mir;
@@ -6,79 +6,49 @@
 import "dart:mirrors";
 
 class _FailingTest extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_FailingTest*
+  const constructor •() → self::_FailingTest
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MyTest extends core::Object {
-  synthetic constructor •() → self::MyTest*
+  synthetic constructor •() → self::MyTest
     : super core::Object::•()
     ;
   @#C1
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _MyTest2&Object&MyTest = core::Object with self::MyTest /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_MyTest2&Object&MyTest*
+  const synthetic constructor •() → self::_MyTest2&Object&MyTest
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → void
     return super.{self::MyTest::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 MyTest2 extends self::_MyTest2&Object&MyTest {
-  synthetic constructor •() → self::MyTest2*
+  synthetic constructor •() → self::MyTest2
     : super self::_MyTest2&Object&MyTest::•()
     ;
 }
-static const field self::_FailingTest* failingTest = #C1;
+static const field self::_FailingTest failingTest = #C1;
 static method main() → dynamic {
-  mir::ClassMirror* classMirror = mir::reflectClass(#C2);
-  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol*, mir::MethodMirror*>*}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
-    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} #C3) {
+  mir::ClassMirror classMirror = mir::reflectClass(#C2);
+  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol, mir::MethodMirror>}.{core::Map::forEach}((core::Symbol symbol, mir::MethodMirror memberMirror) → void {
+    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol} =={core::Symbol::==}{(core::Object) → core::bool} #C3) {
       core::print(memberMirror);
       core::print(self::_hasFailingTestAnnotation(memberMirror));
     }
-  }){((core::Symbol*, mir::MethodMirror*) →* void) →* void};
+  }){((core::Symbol, mir::MethodMirror) → void) → void};
 }
-static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool* {
-  core::bool* r = self::_hasAnnotationInstance(method, #C1);
+static method _hasFailingTestAnnotation(mir::MethodMirror method) → core::bool {
+  core::bool r = self::_hasAnnotationInstance(method, #C1);
   core::print("[_hasFailingTestAnnotation] ${method} ${r}");
   return r;
 }
-static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
-  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror*>*}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
+static method _hasAnnotationInstance(mir::DeclarationMirror declaration, dynamic instance) → core::bool
+  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror>}.{core::Iterable::any}((mir::InstanceMirror annotation) → core::bool {
     core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}{dynamic}}");
     return core::identical(annotation.{mir::InstanceMirror::reflectee}{dynamic}, instance);
-  }){((mir::InstanceMirror*) →* core::bool*) →* core::bool*};
+  }){((mir::InstanceMirror) → core::bool) → core::bool};
 
 constants  {
   #C1 = self::_FailingTest {}
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect
index 68aa1c4..8f57112 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:mirrors" as mir;
@@ -6,79 +6,49 @@
 import "dart:mirrors";
 
 class _FailingTest extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_FailingTest*
+  const constructor •() → self::_FailingTest
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MyTest extends core::Object {
-  synthetic constructor •() → self::MyTest*
+  synthetic constructor •() → self::MyTest
     : super core::Object::•()
     ;
   @#C1
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _MyTest2&Object&MyTest = core::Object with self::MyTest /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_MyTest2&Object&MyTest*
+  const synthetic constructor •() → self::_MyTest2&Object&MyTest
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → void
     return super.{self::MyTest::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 MyTest2 extends self::_MyTest2&Object&MyTest {
-  synthetic constructor •() → self::MyTest2*
+  synthetic constructor •() → self::MyTest2
     : super self::_MyTest2&Object&MyTest::•()
     ;
 }
-static const field self::_FailingTest* failingTest = #C1;
+static const field self::_FailingTest failingTest = #C1;
 static method main() → dynamic {
-  mir::ClassMirror* classMirror = mir::reflectClass(#C2);
-  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol*, mir::MethodMirror*>*}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
-    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} #C3) {
+  mir::ClassMirror classMirror = mir::reflectClass(#C2);
+  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol, mir::MethodMirror>}.{core::Map::forEach}((core::Symbol symbol, mir::MethodMirror memberMirror) → void {
+    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol} =={core::Symbol::==}{(core::Object) → core::bool} #C3) {
       core::print(memberMirror);
       core::print(self::_hasFailingTestAnnotation(memberMirror));
     }
-  }){((core::Symbol*, mir::MethodMirror*) →* void) →* void};
+  }){((core::Symbol, mir::MethodMirror) → void) → void};
 }
-static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool* {
-  core::bool* r = self::_hasAnnotationInstance(method, #C1);
+static method _hasFailingTestAnnotation(mir::MethodMirror method) → core::bool {
+  core::bool r = self::_hasAnnotationInstance(method, #C1);
   core::print("[_hasFailingTestAnnotation] ${method} ${r}");
   return r;
 }
-static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
-  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror*>*}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
+static method _hasAnnotationInstance(mir::DeclarationMirror declaration, dynamic instance) → core::bool
+  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror>}.{core::Iterable::any}((mir::InstanceMirror annotation) → core::bool {
     core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}{dynamic}}");
     return core::identical(annotation.{mir::InstanceMirror::reflectee}{dynamic}, instance);
-  }){((mir::InstanceMirror*) →* core::bool*) →* core::bool*};
+  }){((mir::InstanceMirror) → core::bool) → core::bool};
 
 constants  {
   #C1 = self::_FailingTest {}
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.outline.expect
index 1b77963..af6b3f6 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:mirrors" as mir;
@@ -6,64 +6,34 @@
 import "dart:mirrors";
 
 class _FailingTest extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_FailingTest*
+  const constructor •() → self::_FailingTest
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MyTest extends core::Object {
-  synthetic constructor •() → self::MyTest*
+  synthetic constructor •() → self::MyTest
     ;
   @self::failingTest
   method foo() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _MyTest2&Object&MyTest = core::Object with self::MyTest /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_MyTest2&Object&MyTest*
+  const synthetic constructor •() → self::_MyTest2&Object&MyTest
     : super core::Object::•()
     ;
   mixin-super-stub method foo() → void
     return super.{self::MyTest::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 MyTest2 extends self::_MyTest2&Object&MyTest {
-  synthetic constructor •() → self::MyTest2*
+  synthetic constructor •() → self::MyTest2
     ;
 }
-static const field self::_FailingTest* failingTest = const self::_FailingTest::•();
+static const field self::_FailingTest failingTest = const self::_FailingTest::•();
 static method main() → dynamic
   ;
-static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool*
+static method _hasFailingTestAnnotation(mir::MethodMirror method) → core::bool
   ;
-static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
+static method _hasAnnotationInstance(mir::DeclarationMirror declaration, dynamic instance) → core::bool
   ;
 
 
diff --git a/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect
index 183cc55..854eca8 100644
--- a/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33099.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:mirrors" as mir;
@@ -6,79 +6,49 @@
 import "dart:mirrors";
 
 class _FailingTest extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_FailingTest*
+  const constructor •() → self::_FailingTest
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MyTest extends core::Object {
-  synthetic constructor •() → self::MyTest*
+  synthetic constructor •() → self::MyTest
     : super core::Object::•()
     ;
   @#C1
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _MyTest2&Object&MyTest extends core::Object implements self::MyTest /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_MyTest2&Object&MyTest*
+  const synthetic constructor •() → self::_MyTest2&Object&MyTest
     : super core::Object::•()
     ;
   @#C1
   method foo() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class MyTest2 extends self::_MyTest2&Object&MyTest {
-  synthetic constructor •() → self::MyTest2*
+  synthetic constructor •() → self::MyTest2
     : super self::_MyTest2&Object&MyTest::•()
     ;
 }
-static const field self::_FailingTest* failingTest = #C1;
+static const field self::_FailingTest failingTest = #C1;
 static method main() → dynamic {
-  mir::ClassMirror* classMirror = mir::reflectClass(#C2);
-  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol*, mir::MethodMirror*>*}.{core::Map::forEach}((core::Symbol* symbol, mir::MethodMirror* memberMirror) → Null {
-    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol*} =={core::Symbol::==}{(core::Object*) →* core::bool*} #C3) {
+  mir::ClassMirror classMirror = mir::reflectClass(#C2);
+  classMirror.{mir::ClassMirror::instanceMembers}{core::Map<core::Symbol, mir::MethodMirror>}.{core::Map::forEach}((core::Symbol symbol, mir::MethodMirror memberMirror) → void {
+    if(memberMirror.{mir::DeclarationMirror::simpleName}{core::Symbol} =={core::Symbol::==}{(core::Object) → core::bool} #C3) {
       core::print(memberMirror);
       core::print(self::_hasFailingTestAnnotation(memberMirror));
     }
-  }){((core::Symbol*, mir::MethodMirror*) →* void) →* void};
+  }){((core::Symbol, mir::MethodMirror) → void) → void};
 }
-static method _hasFailingTestAnnotation(mir::MethodMirror* method) → core::bool* {
-  core::bool* r = self::_hasAnnotationInstance(method, #C1);
+static method _hasFailingTestAnnotation(mir::MethodMirror method) → core::bool {
+  core::bool r = self::_hasAnnotationInstance(method, #C1);
   core::print("[_hasFailingTestAnnotation] ${method} ${r}");
   return r;
 }
-static method _hasAnnotationInstance(mir::DeclarationMirror* declaration, dynamic instance) → core::bool*
-  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror*>*}.{core::Iterable::any}((mir::InstanceMirror* annotation) → core::bool* {
+static method _hasAnnotationInstance(mir::DeclarationMirror declaration, dynamic instance) → core::bool
+  return declaration.{mir::DeclarationMirror::metadata}{core::List<mir::InstanceMirror>}.{core::Iterable::any}((mir::InstanceMirror annotation) → core::bool {
     core::print("annotation: ${annotation.{mir::InstanceMirror::reflectee}{dynamic}}");
     return core::identical(annotation.{mir::InstanceMirror::reflectee}{dynamic}, instance);
-  }){((mir::InstanceMirror*) →* core::bool*) →* core::bool*};
+  }){((mir::InstanceMirror) → core::bool) → core::bool};
 
 constants  {
   #C1 = self::_FailingTest {}
diff --git a/pkg/front_end/testcases/general/bug33196.dart b/pkg/front_end/testcases/general/bug33196.dart
index bdd0891..e2f01f1 100644
--- a/pkg/front_end/testcases/general/bug33196.dart
+++ b/pkg/front_end/testcases/general/bug33196.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 'dart:async';
 
 main() {
diff --git a/pkg/front_end/testcases/general/bug33196.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug33196.dart.textual_outline.expect
index 971ae6d..527244a 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/bug33196.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug33196.dart.textual_outline_modelled.expect
index 19764fd..66d5579 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 FutureOr<String> returnsString() async {}
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.expect
index 306df2a..d94db31 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 static method main() → dynamic {
-  FutureOr<core::String*>* result = self::returnsString();
-  core::print(result.{core::Object::runtimeType}{core::Type*});
+  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 {
   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 306df2a..d94db31 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "dart:async";
 
 static method main() → dynamic {
-  FutureOr<core::String*>* result = self::returnsString();
-  core::print(result.{core::Object::runtimeType}{core::Type*});
+  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 {
   return "oh no";
 }
diff --git a/pkg/front_end/testcases/general/bug33196.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug33196.dart.weak.outline.expect
index b187102..c3476e0 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug33196.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,5 +6,5 @@
 
 static method main() → dynamic
   ;
-static method returnsString() → FutureOr<core::String*>* async 
+static method returnsString() → FutureOr<core::String> async 
   ;
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 3d71e92..b7ed807 100644
--- a/pkg/front_end/testcases/general/bug33196.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33196.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;
@@ -6,33 +6,33 @@
 import "dart:async";
 
 static method main() → dynamic {
-  FutureOr<core::String*>* result = self::returnsString();
-  core::print(result.{core::Object::runtimeType}{core::Type*});
+  FutureOr<core::String>result = self::returnsString();
+  core::print(result.{core::Object::runtimeType}{core::Type});
 }
-static method returnsString() → FutureOr<core::String*>* /* originally async */ {
-  final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
+static method returnsString() → FutureOr<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  core::String? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = "oh no";
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/bug33206.dart b/pkg/front_end/testcases/general/bug33206.dart
index d5ca7d7..79892c5 100644
--- a/pkg/front_end/testcases/general/bug33206.dart
+++ b/pkg/front_end/testcases/general/bug33206.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 'dart:async';
 
 class X {
diff --git a/pkg/front_end/testcases/general/bug33206.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug33206.dart.textual_outline.expect
index 26f532e..1d7feb68 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 class X {
diff --git a/pkg/front_end/testcases/general/bug33206.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug33206.dart.textual_outline_modelled.expect
index f3605aa..d229418 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 Future<List<Object>> f1() async {}
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.expect
index b73a7ce..3ea6567 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33206.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
@@ -8,51 +8,32 @@
 class X extends core::Object {
   final field dynamic x;
   final field dynamic y;
-  constructor •(dynamic x, dynamic y) → self::X*
+  constructor •(dynamic x, dynamic y) → self::X
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::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 noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends core::Object {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super core::Object::•()
     ;
   method f(dynamic _) → 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 f1() → asy::Future<core::List<core::Object*>*>* async {
-  return <core::Object*>[1];
+static method f1() → asy::Future<core::List<core::Object>> async {
+  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 f2() → core::List<core::Object>
+  return <core::Object>[2];
+static method f3() → asy::Future<core::Object> async {
   return 3;
 }
-static method foo() → asy::Future<self::X*>* async {
-  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};
+static method foo() → asy::Future<self::X> async {
+  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 {
   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 b73a7ce..3ea6567 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug33206.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;
@@ -8,51 +8,32 @@
 class X extends core::Object {
   final field dynamic x;
   final field dynamic y;
-  constructor •(dynamic x, dynamic y) → self::X*
+  constructor •(dynamic x, dynamic y) → self::X
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::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 noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends core::Object {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super core::Object::•()
     ;
   method f(dynamic _) → 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 f1() → asy::Future<core::List<core::Object*>*>* async {
-  return <core::Object*>[1];
+static method f1() → asy::Future<core::List<core::Object>> async {
+  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 f2() → core::List<core::Object>
+  return <core::Object>[2];
+static method f3() → asy::Future<core::Object> async {
   return 3;
 }
-static method foo() → asy::Future<self::X*>* async {
-  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};
+static method foo() → asy::Future<self::X> async {
+  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 {
   core::print(await self::foo());
 }
diff --git a/pkg/front_end/testcases/general/bug33206.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug33206.dart.weak.outline.expect
index 12a29c0..a405942 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug33206.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;
@@ -8,43 +8,24 @@
 class X extends core::Object {
   final field dynamic x;
   final field dynamic y;
-  constructor •(dynamic x, dynamic y) → self::X*
+  constructor •(dynamic x, dynamic y) → self::X
     ;
-  method toString() → core::String*
+  method toString() → 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 noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends core::Object {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     ;
   method f(dynamic _) → 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 f1() → asy::Future<core::List<core::Object*>*>* async 
+static method f1() → asy::Future<core::List<core::Object>> async 
   ;
-static method f2() → core::List<core::Object*>*
+static method f2() → core::List<core::Object>
   ;
-static method f3() → asy::Future<core::Object*>* async 
+static method f3() → asy::Future<core::Object> async 
   ;
-static method foo() → asy::Future<self::X*>* async 
+static method foo() → asy::Future<self::X> async 
   ;
-static method main() → asy::Future<void>* async 
+static method main() → asy::Future<void> async 
   ;
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 85541c5..ee3e7d7 100644
--- a/pkg/front_end/testcases/general/bug33206.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33206.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;
@@ -9,154 +9,135 @@
 class X extends core::Object {
   final field dynamic x;
   final field dynamic y;
-  constructor •(dynamic x, dynamic y) → self::X*
+  constructor •(dynamic x, dynamic y) → self::X
     : self::X::x = x, self::X::y = y, super core::Object::•()
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::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 noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Y extends core::Object {
-  synthetic constructor •() → self::Y*
+  synthetic constructor •() → self::Y
     : super core::Object::•()
     ;
   method f(dynamic _) → 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 f1() → asy::Future<core::List<core::Object*>*>* /* originally async */ {
-  final asy::_Future<core::List<core::Object*>*>* :async_future = new asy::_Future::•<core::List<core::Object*>*>();
+static method f1() → asy::Future<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;
-  FutureOr<core::List<core::Object*>*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  core::List<core::Object>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        :return_value = core::_GrowableList::_literal1<core::Object*>(1);
+        :return_value = core::_GrowableList::_literal1<core::Object>(1);
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method f2() → core::List<core::Object*>*
-  return core::_GrowableList::_literal1<core::Object*>(2);
-static method f3() → asy::Future<core::Object*>* /* originally async */ {
-  final asy::_Future<core::Object*>* :async_future = new asy::_Future::•<core::Object*>();
+static method f2() → core::List<core::Object>
+  return core::_GrowableList::_literal1<core::Object>(2);
+static method f3() → asy::Future<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  core::Object? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = 3;
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method foo() → asy::Future<self::X*>* /* originally async */ {
-  final asy::_Future<self::X*>* :async_future = new asy::_Future::•<self::X*>();
+static method foo() → asy::Future<self::X> /* originally async */ {
+  final asy::_Future<self::X> :async_future = new asy::_Future::•<self::X>();
   core::bool* :is_sync = false;
-  FutureOr<self::X*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  self::X? :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;
   dynamic :saved_try_context_var0;
-  self::Y* :async_temporary_0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  self::Y :async_temporary_0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        final self::Y* #t1 = new self::Y::•();
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::f1(), :async_op_then, :async_op_error, :async_op) in null;
-        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object*>*>(:result)){(dynamic) →* dynamic};
+        final self::Y #t1 = new self::Y::•();
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::f1(), :async_op_then, :async_op_error) in null;
+        #t1.{self::Y::f}(_in::unsafeCast<core::List<core::Object>>(:result_or_exception)){(dynamic) → dynamic};
         :async_temporary_0 = block {
-          #t1.{self::Y::f}(self::f2()){(dynamic) →* dynamic};
+          #t1.{self::Y::f}(self::f2()){(dynamic) → dynamic};
         } =>#t1;
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = new self::X::•(_in::unsafeCast<self::Y*>(:async_temporary_0), _in::unsafeCast<core::Object*>(:result));
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error) in null;
+        :return_value = new self::X::•(_in::unsafeCast<self::Y>(:async_temporary_0), _in::unsafeCast<core::Object>(:result_or_exception));
         break #L3;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method main() → asy::Future<void>* /* originally async */ {
-  final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
+static method main() → asy::Future<void> /* originally async */ {
+  final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<self::X*>(:result));
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<self::X>(:result_or_exception));
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/bug33298.dart b/pkg/front_end/testcases/general/bug33298.dart
index 971339f..7230db9 100644
--- a/pkg/front_end/testcases/general/bug33298.dart
+++ b/pkg/front_end/testcases/general/bug33298.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
+
 class A {
   String call(String s) => '$s$s';
 }
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
index d656910..8dcbcd1 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+// pkg/front_end/testcases/general/bug33298.dart:30:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
 //   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
 //                                            ^
 //
@@ -69,7 +69,7 @@
   core::List<core::String*>* list4 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
   core::List<core::String*>* list5 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
-  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:30:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
                                            ^" in (let final self::C* #t3 = c in #t3 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t3.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect
index d656910..8dcbcd1 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+// pkg/front_end/testcases/general/bug33298.dart:30:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
 //   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
 //                                            ^
 //
@@ -69,7 +69,7 @@
   core::List<core::String*>* list4 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
   core::List<core::String*>* list5 = <core::String*>["a", "b", "c"].{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
-  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+  core::List<core::String*>* list6 = <core::String*>["a", "b", "c"].{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:30:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
                                            ^" in (let final self::C* #t3 = c in #t3 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t3.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
index 476cd01..ec86ff0 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+// pkg/front_end/testcases/general/bug33298.dart:30:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
 //   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
 //                                            ^
 //
@@ -69,7 +69,7 @@
   core::List<core::String*>* list4 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(let final self::B<core::String*>* #t2 = b in #t2 == null ?{(core::String*) →* core::String*} null : #t2.{self::B::call}{(core::String*) →* core::String*}){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
   self::C* c = new self::C::•();
   core::List<core::String*>* list5 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<core::String*>(c.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}<core::String*>){((core::String*) →* core::String*) →* core::Iterable<core::String*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<core::String*>*};
-  core::List<core::String*>* list6 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:28:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
+  core::List<core::String*>* list6 = core::_GrowableList::_literal3<core::String*>("a", "b", "c").{core::Iterable::map}<dynamic>(invalid-expression "pkg/front_end/testcases/general/bug33298.dart:30:44: Error: The argument type 'T Function<T>(T)' can't be assigned to the parameter type 'dynamic Function(String)'.
   List<String> list6 = ['a', 'b', 'c'].map(c).toList();
                                            ^" in (let final self::C* #t3 = c in #t3 == null ?{<T extends core::Object* = dynamic>(T*) →* T*} null : #t3.{self::C::call}{<T extends core::Object* = dynamic>(T*) →* T*}) as{TypeError} (core::String*) →* dynamic){((core::String*) →* dynamic) →* core::Iterable<dynamic>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<dynamic>*} as{TypeError} core::List<core::String*>*;
 }
diff --git a/pkg/front_end/testcases/general/bug34511.dart b/pkg/front_end/testcases/general/bug34511.dart
index c231ec0..d8ad848 100644
--- a/pkg/front_end/testcases/general/bug34511.dart
+++ b/pkg/front_end/testcases/general/bug34511.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
+
 // See http://dartbug.com/34511 for details.
 
 class A<X> {}
diff --git a/pkg/front_end/testcases/general/bug34511.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug34511.dart.textual_outline.expect
index b65d36d..d85c73d 100644
--- a/pkg/front_end/testcases/general/bug34511.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug34511.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class B<Z> extends Object with A<Z Function()> {}
diff --git a/pkg/front_end/testcases/general/bug34511.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug34511.dart.textual_outline_modelled.expect
index b65d36d..d85c73d 100644
--- a/pkg/front_end/testcases/general/bug34511.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug34511.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {}
 
 class B<Z> extends Object with A<Z Function()> {}
diff --git a/pkg/front_end/testcases/general/bug34511.dart.weak.expect b/pkg/front_end/testcases/general/bug34511.dart.weak.expect
index 5cda82c..9df9f29 100644
--- a/pkg/front_end/testcases/general/bug34511.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug34511.dart.weak.expect
@@ -1,39 +1,19 @@
-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::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> = core::Object with self::A<() →* self::_B&Object&A::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z*>*
+abstract class _B&Object&A<Z extends core::Object? = dynamic> = core::Object with self::A<() → self::_B&Object&A::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> extends self::_B&Object&A<self::B::Z*> {
-  synthetic constructor •() → self::B<self::B::Z*>*
+class B<Z extends core::Object? = dynamic> extends self::_B&Object&A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
     : super self::_B&Object&A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect
index 5cda82c..9df9f29 100644
--- a/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug34511.dart.weak.modular.expect
@@ -1,39 +1,19 @@
-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::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> = core::Object with self::A<() →* self::_B&Object&A::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z*>*
+abstract class _B&Object&A<Z extends core::Object? = dynamic> = core::Object with self::A<() → self::_B&Object&A::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> extends self::_B&Object&A<self::B::Z*> {
-  synthetic constructor •() → self::B<self::B::Z*>*
+class B<Z extends core::Object? = dynamic> extends self::_B&Object&A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
     : super self::_B&Object&A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/bug34511.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug34511.dart.weak.outline.expect
index 315401d..82c2289 100644
--- a/pkg/front_end/testcases/general/bug34511.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug34511.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-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%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> = core::Object with self::A<() →* self::_B&Object&A::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z*>*
+abstract class _B&Object&A<Z extends core::Object? = dynamic> = core::Object with self::A<() → self::_B&Object&A::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> extends self::_B&Object&A<self::B::Z*> {
-  synthetic constructor •() → self::B<self::B::Z*>*
+class B<Z extends core::Object? = dynamic> extends self::_B&Object&A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/bug34511.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug34511.dart.weak.transformed.expect
index 16931e7..69cfc2a 100644
--- a/pkg/front_end/testcases/general/bug34511.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug34511.dart.weak.transformed.expect
@@ -1,39 +1,19 @@
-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::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> extends core::Object implements self::A<() →* self::_B&Object&A::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z*>*
+abstract class _B&Object&A<Z extends core::Object? = dynamic> extends core::Object implements self::A<() → self::_B&Object&A::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_B&Object&A<self::_B&Object&A::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<Z extends core::Object* = dynamic> extends self::_B&Object&A<self::B::Z*> {
-  synthetic constructor •() → self::B<self::B::Z*>*
+class B<Z extends core::Object? = dynamic> extends self::_B&Object&A<self::B::Z%> {
+  synthetic constructor •() → self::B<self::B::Z%>
     : super self::_B&Object&A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/bug35470.dart b/pkg/front_end/testcases/general/bug35470.dart
index ac370a6..9d8d9d9 100644
--- a/pkg/front_end/testcases/general/bug35470.dart
+++ b/pkg/front_end/testcases/general/bug35470.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 A<X> {
   foo<Y extends X>() {}
 }
diff --git a/pkg/front_end/testcases/general/bug35470.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug35470.dart.textual_outline.expect
index 199687c..880e7ff 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<X> {
   foo<Y extends X>() {}
 }
diff --git a/pkg/front_end/testcases/general/bug35470.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug35470.dart.textual_outline_modelled.expect
index 41faf2e..ee614fb 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bar(B b) {}
 
 class A<X> {
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.expect
index bc15f31..c8d7257 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.expect
@@ -1,29 +1,19 @@
-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 foo<covariant-by-class Y extends self::A::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
+  method foo<covariant-by-class Y extends self::A::X%>() → dynamic {}
 }
 class B extends self::A<dynamic> {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-static method bar(self::B* b) → dynamic {
-  b.{self::A::foo}<dynamic>(){() →* dynamic};
+static method bar(self::B b) → dynamic {
+  b.{self::A::foo}<dynamic>(){() → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect
index bc15f31..c8d7257 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.modular.expect
@@ -1,29 +1,19 @@
-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 foo<covariant-by-class Y extends self::A::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
+  method foo<covariant-by-class Y extends self::A::X%>() → dynamic {}
 }
 class B extends self::A<dynamic> {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-static method bar(self::B* b) → dynamic {
-  b.{self::A::foo}<dynamic>(){() →* dynamic};
+static method bar(self::B b) → dynamic {
+  b.{self::A::foo}<dynamic>(){() → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect
index 1169300..05347c3 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-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 foo<covariant-by-class Y extends self::A::X*>() → dynamic
+  method foo<covariant-by-class Y extends self::A::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 B extends self::A<dynamic> {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
-static method bar(self::B* b) → dynamic
+static method bar(self::B b) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
index bc15f31..c8d7257 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
@@ -1,29 +1,19 @@
-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 foo<covariant-by-class Y extends self::A::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
+  method foo<covariant-by-class Y extends self::A::X%>() → dynamic {}
 }
 class B extends self::A<dynamic> {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-static method bar(self::B* b) → dynamic {
-  b.{self::A::foo}<dynamic>(){() →* dynamic};
+static method bar(self::B b) → dynamic {
+  b.{self::A::foo}<dynamic>(){() → dynamic};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/bug37476.dart b/pkg/front_end/testcases/general/bug37476.dart
index 76686a5..0fcd45f 100644
--- a/pkg/front_end/testcases/general/bug37476.dart
+++ b/pkg/front_end/testcases/general/bug37476.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 A<T extends num> {
@@ -23,13 +23,13 @@
 
 main() {
   try {
-    a.foo /*@ checkReturn=<S extends num* = dynamic>(S*) ->* void */ ();
+    a.foo /*@checkReturn=<S extends num = dynamic>(S) -> void*/ ();
     throw 'Expected TypeError';
   } on TypeError catch (e) {
     print(e);
   }
   try {
-    b.foo /*@ checkReturn=(num*) ->* void */ ();
+    b.foo /*@checkReturn=(num) -> void*/ ();
     throw 'Expected TypeError';
   } on TypeError catch (e) {
     print(e);
diff --git a/pkg/front_end/testcases/general/bug37476.dart.textual_outline.expect b/pkg/front_end/testcases/general/bug37476.dart.textual_outline.expect
index d50f30c..5f90d7d 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T extends num> {
   void Function<S extends T>(S x) foo() {}
 }
diff --git a/pkg/front_end/testcases/general/bug37476.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/bug37476.dart.textual_outline_modelled.expect
index 5503dfb..8cbb59f 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 A<num> a = new A<int>();
 B<num> b = new B<int>();
 
diff --git a/pkg/front_end/testcases/general/bug37476.dart.weak.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.expect
index 6cc98ca..1cf0adf 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.expect
@@ -1,60 +1,40 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  method foo() → <S extends self::A::T* = dynamic>(S*) →* void {
-    core::print("foo: T = ${self::A::T*}");
-    return <S extends self::A::T*>(S* a) → Null {};
+  method foo() → <S extends self::A::T = dynamic>(S) → void {
+    core::print("foo: T = ${self::A::T}");
+    return <S extends self::A::T>(S a) → void {};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::num*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  method foo() → (self::B::T*) →* void {
-    core::print("foo: T = ${self::B::T*}");
-    return (self::B::T* a) → Null {};
+  method foo() → (self::B::T) → void {
+    core::print("foo: T = ${self::B::T}");
+    return (self::B::T a) → void {};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::A<core::num*>* a = new self::A::•<core::int*>();
-static field self::B<core::num*>* b = new self::B::•<core::int*>();
+static field self::A<core::num> a = new self::A::•<core::int>();
+static field self::B<core::num> b = new self::B::•<core::int>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}(){() →* <S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}(){() → <S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "Expected TypeError";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    self::b.{self::B::foo}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "Expected TypeError";
   }
-  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/bug37476.dart.weak.modular.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.modular.expect
index 6cc98ca..1cf0adf 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.modular.expect
@@ -1,60 +1,40 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  method foo() → <S extends self::A::T* = dynamic>(S*) →* void {
-    core::print("foo: T = ${self::A::T*}");
-    return <S extends self::A::T*>(S* a) → Null {};
+  method foo() → <S extends self::A::T = dynamic>(S) → void {
+    core::print("foo: T = ${self::A::T}");
+    return <S extends self::A::T>(S a) → void {};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::num*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  method foo() → (self::B::T*) →* void {
-    core::print("foo: T = ${self::B::T*}");
-    return (self::B::T* a) → Null {};
+  method foo() → (self::B::T) → void {
+    core::print("foo: T = ${self::B::T}");
+    return (self::B::T a) → void {};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::A<core::num*>* a = new self::A::•<core::int*>();
-static field self::B<core::num*>* b = new self::B::•<core::int*>();
+static field self::A<core::num> a = new self::A::•<core::int>();
+static field self::B<core::num> b = new self::B::•<core::int>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}(){() →* <S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}(){() → <S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "Expected TypeError";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    self::b.{self::B::foo}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "Expected TypeError";
   }
-  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/bug37476.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.outline.expect
index 112f56d..2537282 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     ;
-  method foo() → <S extends self::A::T* = dynamic>(S*) →* void
+  method foo() → <S extends self::A::T = dynamic>(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
 }
-class B<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     ;
-  method foo() → (self::B::T*) →* void
+  method foo() → (self::B::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 self::A<core::num*>* a;
-static field self::B<core::num*>* b;
+static field self::A<core::num> a;
+static field self::B<core::num> b;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect
index 6cc98ca..1cf0adf 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.weak.transformed.expect
@@ -1,60 +1,40 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::num*> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T>
     : super core::Object::•()
     ;
-  method foo() → <S extends self::A::T* = dynamic>(S*) →* void {
-    core::print("foo: T = ${self::A::T*}");
-    return <S extends self::A::T*>(S* a) → Null {};
+  method foo() → <S extends self::A::T = dynamic>(S) → void {
+    core::print("foo: T = ${self::A::T}");
+    return <S extends self::A::T>(S a) → void {};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::num*> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::num> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T>
     : super core::Object::•()
     ;
-  method foo() → (self::B::T*) →* void {
-    core::print("foo: T = ${self::B::T*}");
-    return (self::B::T* a) → Null {};
+  method foo() → (self::B::T) → void {
+    core::print("foo: T = ${self::B::T}");
+    return (self::B::T a) → void {};
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::A<core::num*>* a = new self::A::•<core::int*>();
-static field self::B<core::num*>* b = new self::B::•<core::int*>();
+static field self::A<core::num> a = new self::A::•<core::int>();
+static field self::B<core::num> b = new self::B::•<core::int>();
 static method main() → dynamic {
   try {
-    self::a.{self::A::foo}(){() →* <S extends core::num* = dynamic>(S*) →* void} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
+    self::a.{self::A::foo}(){() → <S extends core::num = dynamic>(S) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <S extends core::num = dynamic>(S) → void;
     throw "Expected TypeError";
   }
-  on core::TypeError* catch(final core::TypeError* e) {
+  on core::TypeError catch(final core::TypeError e) {
     core::print(e);
   }
   try {
-    self::b.{self::B::foo}(){() →* (core::num*) →* void} as{TypeError,CovarianceCheck} (core::num*) →* void;
+    self::b.{self::B::foo}(){() → (core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void;
     throw "Expected TypeError";
   }
-  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/build_issue_2688.dart b/pkg/front_end/testcases/general/build_issue_2688.dart
index 45272cb..016f457 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart
+++ b/pkg/front_end/testcases/general/build_issue_2688.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 https://github.com/dart-lang/build/issues/2688
 
 mixin M0 {
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline.expect
index e5d14fd..ed52349 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 mixin M0 {
   int get property;
 }
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline_modelled.expect
index b6bd96c..d2ec562 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Super {
   int get property;
 }
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.expect
index 226f3df..2ae4ce3 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.expect
@@ -1,560 +1,270 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M0 extends core::Object /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M1 extends core::Object implements self::M0 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M2 extends core::Object implements self::M1 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M3 extends core::Object implements self::M2 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M4 extends core::Object implements self::M3 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M5 extends core::Object implements self::M4 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M6 extends core::Object implements self::M5 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M7 extends core::Object implements self::M6 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M8 extends core::Object implements self::M7 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M9 extends core::Object implements self::M8 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M10 extends core::Object implements self::M9 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M11 extends core::Object implements self::M10 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M12 extends core::Object implements self::M11 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M13 extends core::Object implements self::M12 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M14 extends core::Object implements self::M13 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M15 extends core::Object implements self::M14 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M16 extends core::Object implements self::M15 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M17 extends core::Object implements self::M16 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M18 extends core::Object implements self::M17 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M19 extends core::Object implements self::M18 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M20 extends core::Object implements self::M19 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M21 extends core::Object implements self::M20 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M22 extends core::Object implements self::M21 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M23 extends core::Object implements self::M22 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M24 extends core::Object implements self::M23 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M25 extends core::Object implements self::M24 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M26 extends core::Object implements self::M25 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M27 extends core::Object implements self::M26 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0 = self::Super with self::M0 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0*
+  synthetic constructor •() → self::_Class&Super&M0
     : super self::Super::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M0::property
+  abstract mixin-stub get property() → core::int; -> self::M0::property
 }
 abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1*
+  synthetic constructor •() → self::_Class&Super&M0&M1
     : super self::_Class&Super&M0::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M1::property
+  abstract mixin-stub get property() → core::int; -> self::M1::property
 }
 abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2
     : super self::_Class&Super&M0&M1::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M2::property
+  abstract mixin-stub get property() → core::int; -> self::M2::property
 }
 abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
     : super self::_Class&Super&M0&M1&M2::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M3::property
+  abstract mixin-stub get property() → core::int; -> self::M3::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
     : super self::_Class&Super&M0&M1&M2&M3::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M4::property
+  abstract mixin-stub get property() → core::int; -> self::M4::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
     : super self::_Class&Super&M0&M1&M2&M3&M4::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M5::property
+  abstract mixin-stub get property() → core::int; -> self::M5::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M6::property
+  abstract mixin-stub get property() → core::int; -> self::M6::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M7::property
+  abstract mixin-stub get property() → core::int; -> self::M7::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M8::property
+  abstract mixin-stub get property() → core::int; -> self::M8::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M9::property
+  abstract mixin-stub get property() → core::int; -> self::M9::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M10::property
+  abstract mixin-stub get property() → core::int; -> self::M10::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M11::property
+  abstract mixin-stub get property() → core::int; -> self::M11::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M12::property
+  abstract mixin-stub get property() → core::int; -> self::M12::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M13::property
+  abstract mixin-stub get property() → core::int; -> self::M13::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M14::property
+  abstract mixin-stub get property() → core::int; -> self::M14::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M15::property
+  abstract mixin-stub get property() → core::int; -> self::M15::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M16::property
+  abstract mixin-stub get property() → core::int; -> self::M16::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M17::property
+  abstract mixin-stub get property() → core::int; -> self::M17::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M18::property
+  abstract mixin-stub get property() → core::int; -> self::M18::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M19::property
+  abstract mixin-stub get property() → core::int; -> self::M19::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M20::property
+  abstract mixin-stub get property() → core::int; -> self::M20::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M21::property
+  abstract mixin-stub get property() → core::int; -> self::M21::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M22::property
+  abstract mixin-stub get property() → core::int; -> self::M22::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M23::property
+  abstract mixin-stub get property() → core::int; -> self::M23::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M24::property
+  abstract mixin-stub get property() → core::int; -> self::M24::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M25::property
+  abstract mixin-stub get property() → core::int; -> self::M25::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M26::property
+  abstract mixin-stub get property() → core::int; -> self::M26::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M27::property
+  abstract mixin-stub get property() → core::int; -> self::M27::property
 }
 class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27::•()
     ;
-  get property() → core::int*
+  get property() → core::int
     return 0;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect
index 226f3df..2ae4ce3 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.modular.expect
@@ -1,560 +1,270 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M0 extends core::Object /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M1 extends core::Object implements self::M0 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M2 extends core::Object implements self::M1 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M3 extends core::Object implements self::M2 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M4 extends core::Object implements self::M3 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M5 extends core::Object implements self::M4 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M6 extends core::Object implements self::M5 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M7 extends core::Object implements self::M6 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M8 extends core::Object implements self::M7 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M9 extends core::Object implements self::M8 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M10 extends core::Object implements self::M9 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M11 extends core::Object implements self::M10 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M12 extends core::Object implements self::M11 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M13 extends core::Object implements self::M12 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M14 extends core::Object implements self::M13 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M15 extends core::Object implements self::M14 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M16 extends core::Object implements self::M15 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M17 extends core::Object implements self::M16 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M18 extends core::Object implements self::M17 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M19 extends core::Object implements self::M18 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M20 extends core::Object implements self::M19 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M21 extends core::Object implements self::M20 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M22 extends core::Object implements self::M21 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M23 extends core::Object implements self::M22 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M24 extends core::Object implements self::M23 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M25 extends core::Object implements self::M24 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M26 extends core::Object implements self::M25 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M27 extends core::Object implements self::M26 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0 = self::Super with self::M0 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0*
+  synthetic constructor •() → self::_Class&Super&M0
     : super self::Super::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M0::property
+  abstract mixin-stub get property() → core::int; -> self::M0::property
 }
 abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1*
+  synthetic constructor •() → self::_Class&Super&M0&M1
     : super self::_Class&Super&M0::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M1::property
+  abstract mixin-stub get property() → core::int; -> self::M1::property
 }
 abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2
     : super self::_Class&Super&M0&M1::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M2::property
+  abstract mixin-stub get property() → core::int; -> self::M2::property
 }
 abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
     : super self::_Class&Super&M0&M1&M2::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M3::property
+  abstract mixin-stub get property() → core::int; -> self::M3::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
     : super self::_Class&Super&M0&M1&M2&M3::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M4::property
+  abstract mixin-stub get property() → core::int; -> self::M4::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
     : super self::_Class&Super&M0&M1&M2&M3&M4::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M5::property
+  abstract mixin-stub get property() → core::int; -> self::M5::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M6::property
+  abstract mixin-stub get property() → core::int; -> self::M6::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M7::property
+  abstract mixin-stub get property() → core::int; -> self::M7::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M8::property
+  abstract mixin-stub get property() → core::int; -> self::M8::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M9::property
+  abstract mixin-stub get property() → core::int; -> self::M9::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M10::property
+  abstract mixin-stub get property() → core::int; -> self::M10::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M11::property
+  abstract mixin-stub get property() → core::int; -> self::M11::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M12::property
+  abstract mixin-stub get property() → core::int; -> self::M12::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M13::property
+  abstract mixin-stub get property() → core::int; -> self::M13::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M14::property
+  abstract mixin-stub get property() → core::int; -> self::M14::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M15::property
+  abstract mixin-stub get property() → core::int; -> self::M15::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M16::property
+  abstract mixin-stub get property() → core::int; -> self::M16::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M17::property
+  abstract mixin-stub get property() → core::int; -> self::M17::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M18::property
+  abstract mixin-stub get property() → core::int; -> self::M18::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M19::property
+  abstract mixin-stub get property() → core::int; -> self::M19::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M20::property
+  abstract mixin-stub get property() → core::int; -> self::M20::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M21::property
+  abstract mixin-stub get property() → core::int; -> self::M21::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M22::property
+  abstract mixin-stub get property() → core::int; -> self::M22::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M23::property
+  abstract mixin-stub get property() → core::int; -> self::M23::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M24::property
+  abstract mixin-stub get property() → core::int; -> self::M24::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M25::property
+  abstract mixin-stub get property() → core::int; -> self::M25::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M26::property
+  abstract mixin-stub get property() → core::int; -> self::M26::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M27::property
+  abstract mixin-stub get property() → core::int; -> self::M27::property
 }
 class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27::•()
     ;
-  get property() → core::int*
+  get property() → core::int
     return 0;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.outline.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.outline.expect
index 63c6cb2..f0666bf 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.outline.expect
@@ -1,558 +1,268 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M0 extends core::Object /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M1 extends core::Object implements self::M0 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M2 extends core::Object implements self::M1 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M3 extends core::Object implements self::M2 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M4 extends core::Object implements self::M3 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M5 extends core::Object implements self::M4 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M6 extends core::Object implements self::M5 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M7 extends core::Object implements self::M6 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M8 extends core::Object implements self::M7 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M9 extends core::Object implements self::M8 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M10 extends core::Object implements self::M9 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M11 extends core::Object implements self::M10 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M12 extends core::Object implements self::M11 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M13 extends core::Object implements self::M12 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M14 extends core::Object implements self::M13 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M15 extends core::Object implements self::M14 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M16 extends core::Object implements self::M15 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M17 extends core::Object implements self::M16 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M18 extends core::Object implements self::M17 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M19 extends core::Object implements self::M18 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M20 extends core::Object implements self::M19 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M21 extends core::Object implements self::M20 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M22 extends core::Object implements self::M21 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M23 extends core::Object implements self::M22 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M24 extends core::Object implements self::M23 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M25 extends core::Object implements self::M24 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M26 extends core::Object implements self::M25 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M27 extends core::Object implements self::M26 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     ;
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0 = self::Super with self::M0 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0*
+  synthetic constructor •() → self::_Class&Super&M0
     : super self::Super::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M0::property
+  abstract mixin-stub get property() → core::int; -> self::M0::property
 }
 abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1*
+  synthetic constructor •() → self::_Class&Super&M0&M1
     : super self::_Class&Super&M0::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M1::property
+  abstract mixin-stub get property() → core::int; -> self::M1::property
 }
 abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2
     : super self::_Class&Super&M0&M1::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M2::property
+  abstract mixin-stub get property() → core::int; -> self::M2::property
 }
 abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
     : super self::_Class&Super&M0&M1&M2::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M3::property
+  abstract mixin-stub get property() → core::int; -> self::M3::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
     : super self::_Class&Super&M0&M1&M2&M3::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M4::property
+  abstract mixin-stub get property() → core::int; -> self::M4::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
     : super self::_Class&Super&M0&M1&M2&M3&M4::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M5::property
+  abstract mixin-stub get property() → core::int; -> self::M5::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M6::property
+  abstract mixin-stub get property() → core::int; -> self::M6::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M7::property
+  abstract mixin-stub get property() → core::int; -> self::M7::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M8::property
+  abstract mixin-stub get property() → core::int; -> self::M8::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M9::property
+  abstract mixin-stub get property() → core::int; -> self::M9::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M10::property
+  abstract mixin-stub get property() → core::int; -> self::M10::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M11::property
+  abstract mixin-stub get property() → core::int; -> self::M11::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M12::property
+  abstract mixin-stub get property() → core::int; -> self::M12::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M13::property
+  abstract mixin-stub get property() → core::int; -> self::M13::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M14::property
+  abstract mixin-stub get property() → core::int; -> self::M14::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M15::property
+  abstract mixin-stub get property() → core::int; -> self::M15::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M16::property
+  abstract mixin-stub get property() → core::int; -> self::M16::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M17::property
+  abstract mixin-stub get property() → core::int; -> self::M17::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M18::property
+  abstract mixin-stub get property() → core::int; -> self::M18::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M19::property
+  abstract mixin-stub get property() → core::int; -> self::M19::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M20::property
+  abstract mixin-stub get property() → core::int; -> self::M20::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M21::property
+  abstract mixin-stub get property() → core::int; -> self::M21::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M22::property
+  abstract mixin-stub get property() → core::int; -> self::M22::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M23::property
+  abstract mixin-stub get property() → core::int; -> self::M23::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M24::property
+  abstract mixin-stub get property() → core::int; -> self::M24::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M25::property
+  abstract mixin-stub get property() → core::int; -> self::M25::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M26::property
+  abstract mixin-stub get property() → core::int; -> self::M26::property
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
     ;
-  abstract mixin-stub get property() → core::int*; -> self::M27::property
+  abstract mixin-stub get property() → core::int; -> self::M27::property
 }
 class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  get property() → core::int*
+  get property() → core::int
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.transformed.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.transformed.expect
index 6093f3e..a9961fa 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.weak.transformed.expect
@@ -1,560 +1,270 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class M0 extends core::Object /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M1 extends core::Object implements self::M0 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M2 extends core::Object implements self::M1 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M3 extends core::Object implements self::M2 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M4 extends core::Object implements self::M3 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M5 extends core::Object implements self::M4 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M6 extends core::Object implements self::M5 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M7 extends core::Object implements self::M6 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M8 extends core::Object implements self::M7 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M9 extends core::Object implements self::M8 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M10 extends core::Object implements self::M9 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M11 extends core::Object implements self::M10 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M12 extends core::Object implements self::M11 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M13 extends core::Object implements self::M12 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M14 extends core::Object implements self::M13 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M15 extends core::Object implements self::M14 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M16 extends core::Object implements self::M15 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M17 extends core::Object implements self::M16 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M18 extends core::Object implements self::M17 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M19 extends core::Object implements self::M18 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M20 extends core::Object implements self::M19 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M21 extends core::Object implements self::M20 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M22 extends core::Object implements self::M21 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M23 extends core::Object implements self::M22 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M24 extends core::Object implements self::M23 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M25 extends core::Object implements self::M24 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M26 extends core::Object implements self::M25 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class M27 extends core::Object implements self::M26 /*isMixinDeclaration*/  {
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class Super extends core::Object {
-  synthetic constructor •() → self::Super*
+  synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  abstract get property() → 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
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0 extends self::Super implements self::M0 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0*
+  synthetic constructor •() → self::_Class&Super&M0
     : super self::Super::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1 extends self::_Class&Super&M0 implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1*
+  synthetic constructor •() → self::_Class&Super&M0&M1
     : super self::_Class&Super&M0::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2 extends self::_Class&Super&M0&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2
     : super self::_Class&Super&M0&M1::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3 extends self::_Class&Super&M0&M1&M2 implements self::M3 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
     : super self::_Class&Super&M0&M1&M2::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4 extends self::_Class&Super&M0&M1&M2&M3 implements self::M4 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
     : super self::_Class&Super&M0&M1&M2&M3::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5 extends self::_Class&Super&M0&M1&M2&M3&M4 implements self::M5 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
     : super self::_Class&Super&M0&M1&M2&M3&M4::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 extends self::_Class&Super&M0&M1&M2&M3&M4&M5 implements self::M6 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 implements self::M7 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 implements self::M8 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 implements self::M9 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 implements self::M10 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 implements self::M11 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 implements self::M12 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 implements self::M13 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 implements self::M14 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 implements self::M15 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 implements self::M16 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 implements self::M17 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 implements self::M18 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 implements self::M19 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 implements self::M20 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 implements self::M21 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 implements self::M22 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 implements self::M23 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 implements self::M24 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 implements self::M25 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 implements self::M26 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 implements self::M27 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
+  synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
     ;
-  abstract get property() → core::int*;
+  abstract get property() → core::int;
 }
 class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27::•()
     ;
-  get property() → core::int*
+  get property() → core::int
     return 0;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/call.dart b/pkg/front_end/testcases/general/call.dart
index 57128a3..4152cd8 100644
--- a/pkg/front_end/testcases/general/call.dart
+++ b/pkg/front_end/testcases/general/call.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 Callable {
   call(x) {
     return "string";
diff --git a/pkg/front_end/testcases/general/call.dart.textual_outline.expect b/pkg/front_end/testcases/general/call.dart.textual_outline.expect
index 04861fa..f9a3aa0 100644
--- a/pkg/front_end/testcases/general/call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Callable {
   call(x) {}
 }
diff --git a/pkg/front_end/testcases/general/call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/call.dart.textual_outline_modelled.expect
index ae92de7..2eca437 100644
--- a/pkg/front_end/testcases/general/call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Callable {
   call(x) {}
 }
diff --git a/pkg/front_end/testcases/general/call.dart.weak.expect b/pkg/front_end/testcases/general/call.dart.weak.expect
index f9559169..c860d67 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -94,57 +94,37 @@
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  synthetic constructor •() → self::Callable*
+  synthetic constructor •() → self::Callable
     : super core::Object::•()
     ;
   method call(dynamic x) → 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
 }
 class CallableGetter extends core::Object {
-  synthetic constructor •() → self::CallableGetter*
+  synthetic constructor •() → self::CallableGetter
     : super core::Object::•()
     ;
   get call() → dynamic
     return new self::Callable::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-static field dynamic int1 = self::closure(1){(dynamic) →* dynamic};
-static field dynamic int2 = self::closure(1){(dynamic) →* dynamic};
-static field dynamic int3 = self::closure.call(1){(dynamic) →* dynamic};
-static field dynamic int4 = self::closure.call.call(1){(dynamic) →* dynamic};
-static field self::Callable* callable = new self::Callable::•();
-static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
-static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
-static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
+static field (dynamic) → dynamic closure = (dynamic x) → dynamic => x;
+static field dynamic int1 = self::closure(1){(dynamic) → dynamic};
+static field dynamic int2 = self::closure(1){(dynamic) → dynamic};
+static field dynamic int3 = self::closure.call(1){(dynamic) → dynamic};
+static field dynamic int4 = self::closure.call.call(1){(dynamic) → dynamic};
+static field self::Callable callable = new self::Callable::•();
+static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) → dynamic};
+static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) → dynamic};
+static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) → dynamic}(1){(dynamic) → dynamic};
+static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) → dynamic}.call(1){(dynamic) → dynamic};
+static field self::CallableGetter callableGetter = new self::CallableGetter::•();
 static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var string5 = callableGetter(1);
                             ^";
-static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
+static field dynamic string6 = let final self::CallableGetter #t1 = self::callableGetter in let final core::int #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
 static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
 static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
 static field dynamic nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
@@ -161,16 +141,16 @@
                                      ^" in self::closure.call.call{<inapplicable>}.();
 static field dynamic nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
 var nothing5 = callable();
-                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
 static field dynamic nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
 var nothing6 = callable.call();
-                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
 static field dynamic nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
 var nothing7 = callable.call.call();
-                                 ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+                                 ^" in self::callable.{self::Callable::call}{(dynamic) → dynamic}{<inapplicable>}.();
 static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
-                                      ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+                                      ^" in self::callable.{self::Callable::call}{(dynamic) → dynamic}.call{<inapplicable>}.();
 static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
@@ -180,23 +160,23 @@
 static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
 static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
 static method main() → dynamic {
-  (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-  dynamic int1 = closure(1){(dynamic) →* dynamic};
-  dynamic int2 = closure(1){(dynamic) →* dynamic};
-  dynamic int3 = closure.call(1){(dynamic) →* dynamic};
-  dynamic int4 = closure.call.call(1){(dynamic) →* dynamic};
-  self::Callable* callable = new self::Callable::•();
-  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-  dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
-  dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
-  self::CallableGetter* callableGetter = new self::CallableGetter::•();
+  (dynamic) → dynamic closure = (dynamic x) → dynamic => x;
+  dynamic int1 = closure(1){(dynamic) → dynamic};
+  dynamic int2 = closure(1){(dynamic) → dynamic};
+  dynamic int3 = closure.call(1){(dynamic) → dynamic};
+  dynamic int4 = closure.call.call(1){(dynamic) → dynamic};
+  self::Callable callable = new self::Callable::•();
+  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) → dynamic};
+  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) → dynamic};
+  dynamic string3 = callable.{self::Callable::call}{(dynamic) → dynamic}(1){(dynamic) → dynamic};
+  dynamic string4 = callable.{self::Callable::call}{(dynamic) → dynamic}.call(1){(dynamic) → dynamic};
+  self::CallableGetter callableGetter = new self::CallableGetter::•();
   invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
                               ^";
-  dynamic string6 = let final self::CallableGetter* #t3 = callableGetter in let final core::int* #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
+  dynamic string6 = let final self::CallableGetter #t3 = callableGetter in let final core::int #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
   dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
   dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
   invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
@@ -213,16 +193,16 @@
                                        ^" in closure.call.call{<inapplicable>}.();
   invalid-type nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
   var nothing5 = callable();
-                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
   var nothing6 = callable.call();
-                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
   var nothing7 = callable.call.call();
-                                   ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+                                   ^" in callable.{self::Callable::call}{(dynamic) → dynamic}{<inapplicable>}.();
   invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
-                                        ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+                                        ^" in callable.{self::Callable::call}{(dynamic) → dynamic}.call{<inapplicable>}.();
   invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
diff --git a/pkg/front_end/testcases/general/call.dart.weak.modular.expect b/pkg/front_end/testcases/general/call.dart.weak.modular.expect
index f9559169..c860d67 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -94,57 +94,37 @@
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  synthetic constructor •() → self::Callable*
+  synthetic constructor •() → self::Callable
     : super core::Object::•()
     ;
   method call(dynamic x) → 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
 }
 class CallableGetter extends core::Object {
-  synthetic constructor •() → self::CallableGetter*
+  synthetic constructor •() → self::CallableGetter
     : super core::Object::•()
     ;
   get call() → dynamic
     return new self::Callable::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-static field dynamic int1 = self::closure(1){(dynamic) →* dynamic};
-static field dynamic int2 = self::closure(1){(dynamic) →* dynamic};
-static field dynamic int3 = self::closure.call(1){(dynamic) →* dynamic};
-static field dynamic int4 = self::closure.call.call(1){(dynamic) →* dynamic};
-static field self::Callable* callable = new self::Callable::•();
-static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
-static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
-static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
+static field (dynamic) → dynamic closure = (dynamic x) → dynamic => x;
+static field dynamic int1 = self::closure(1){(dynamic) → dynamic};
+static field dynamic int2 = self::closure(1){(dynamic) → dynamic};
+static field dynamic int3 = self::closure.call(1){(dynamic) → dynamic};
+static field dynamic int4 = self::closure.call.call(1){(dynamic) → dynamic};
+static field self::Callable callable = new self::Callable::•();
+static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) → dynamic};
+static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) → dynamic};
+static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) → dynamic}(1){(dynamic) → dynamic};
+static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) → dynamic}.call(1){(dynamic) → dynamic};
+static field self::CallableGetter callableGetter = new self::CallableGetter::•();
 static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var string5 = callableGetter(1);
                             ^";
-static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
+static field dynamic string6 = let final self::CallableGetter #t1 = self::callableGetter in let final core::int #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
 static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
 static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
 static field dynamic nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
@@ -161,16 +141,16 @@
                                      ^" in self::closure.call.call{<inapplicable>}.();
 static field dynamic nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
 var nothing5 = callable();
-                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
 static field dynamic nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
 var nothing6 = callable.call();
-                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
 static field dynamic nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
 var nothing7 = callable.call.call();
-                                 ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+                                 ^" in self::callable.{self::Callable::call}{(dynamic) → dynamic}{<inapplicable>}.();
 static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
-                                      ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+                                      ^" in self::callable.{self::Callable::call}{(dynamic) → dynamic}.call{<inapplicable>}.();
 static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
@@ -180,23 +160,23 @@
 static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
 static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
 static method main() → dynamic {
-  (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-  dynamic int1 = closure(1){(dynamic) →* dynamic};
-  dynamic int2 = closure(1){(dynamic) →* dynamic};
-  dynamic int3 = closure.call(1){(dynamic) →* dynamic};
-  dynamic int4 = closure.call.call(1){(dynamic) →* dynamic};
-  self::Callable* callable = new self::Callable::•();
-  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-  dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
-  dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
-  self::CallableGetter* callableGetter = new self::CallableGetter::•();
+  (dynamic) → dynamic closure = (dynamic x) → dynamic => x;
+  dynamic int1 = closure(1){(dynamic) → dynamic};
+  dynamic int2 = closure(1){(dynamic) → dynamic};
+  dynamic int3 = closure.call(1){(dynamic) → dynamic};
+  dynamic int4 = closure.call.call(1){(dynamic) → dynamic};
+  self::Callable callable = new self::Callable::•();
+  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) → dynamic};
+  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) → dynamic};
+  dynamic string3 = callable.{self::Callable::call}{(dynamic) → dynamic}(1){(dynamic) → dynamic};
+  dynamic string4 = callable.{self::Callable::call}{(dynamic) → dynamic}.call(1){(dynamic) → dynamic};
+  self::CallableGetter callableGetter = new self::CallableGetter::•();
   invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
                               ^";
-  dynamic string6 = let final self::CallableGetter* #t3 = callableGetter in let final core::int* #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
+  dynamic string6 = let final self::CallableGetter #t3 = callableGetter in let final core::int #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
   dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
   dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
   invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
@@ -213,16 +193,16 @@
                                        ^" in closure.call.call{<inapplicable>}.();
   invalid-type nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
   var nothing5 = callable();
-                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
   var nothing6 = callable.call();
-                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
   var nothing7 = callable.call.call();
-                                   ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+                                   ^" in callable.{self::Callable::call}{(dynamic) → dynamic}{<inapplicable>}.();
   invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
-                                        ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+                                        ^" in callable.{self::Callable::call}{(dynamic) → dynamic}.call{<inapplicable>}.();
   invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
diff --git a/pkg/front_end/testcases/general/call.dart.weak.outline.expect b/pkg/front_end/testcases/general/call.dart.weak.outline.expect
index 9d8c931..e8dafdc 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.outline.expect
@@ -1,50 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  synthetic constructor •() → self::Callable*
+  synthetic constructor •() → self::Callable
     ;
   method call(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 CallableGetter extends core::Object {
-  synthetic constructor •() → self::CallableGetter*
+  synthetic constructor •() → self::CallableGetter
     ;
   get call() → 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 field (dynamic) →* dynamic closure;
+static field (dynamic) → dynamic closure;
 static field dynamic int1;
 static field dynamic int2;
 static field dynamic int3;
 static field dynamic int4;
-static field self::Callable* callable;
+static field self::Callable callable;
 static field dynamic string1;
 static field dynamic string2;
 static field dynamic string3;
 static field dynamic string4;
-static field self::CallableGetter* callableGetter;
+static field self::CallableGetter callableGetter;
 static field invalid-type string5;
 static field dynamic string6;
 static field dynamic string7;
diff --git a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
index ccac183..9ffb62f 100644
--- a/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/call.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -94,57 +94,37 @@
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  synthetic constructor •() → self::Callable*
+  synthetic constructor •() → self::Callable
     : super core::Object::•()
     ;
   method call(dynamic x) → 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
 }
 class CallableGetter extends core::Object {
-  synthetic constructor •() → self::CallableGetter*
+  synthetic constructor •() → self::CallableGetter
     : super core::Object::•()
     ;
   get call() → dynamic
     return new self::Callable::•();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-static field dynamic int1 = self::closure(1){(dynamic) →* dynamic};
-static field dynamic int2 = self::closure(1){(dynamic) →* dynamic};
-static field dynamic int3 = self::closure.call(1){(dynamic) →* dynamic};
-static field dynamic int4 = self::closure.call.call(1){(dynamic) →* dynamic};
-static field self::Callable* callable = new self::Callable::•();
-static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
-static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
-static field self::CallableGetter* callableGetter = new self::CallableGetter::•();
+static field (dynamic) → dynamic closure = (dynamic x) → dynamic => x;
+static field dynamic int1 = self::closure(1){(dynamic) → dynamic};
+static field dynamic int2 = self::closure(1){(dynamic) → dynamic};
+static field dynamic int3 = self::closure.call(1){(dynamic) → dynamic};
+static field dynamic int4 = self::closure.call.call(1){(dynamic) → dynamic};
+static field self::Callable callable = new self::Callable::•();
+static field dynamic string1 = self::callable.{self::Callable::call}(1){(dynamic) → dynamic};
+static field dynamic string2 = self::callable.{self::Callable::call}(1){(dynamic) → dynamic};
+static field dynamic string3 = self::callable.{self::Callable::call}{(dynamic) → dynamic}(1){(dynamic) → dynamic};
+static field dynamic string4 = self::callable.{self::Callable::call}{(dynamic) → dynamic}.call(1){(dynamic) → dynamic};
+static field self::CallableGetter callableGetter = new self::CallableGetter::•();
 static field invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:63:29: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var string5 = callableGetter(1);
                             ^";
-static field dynamic string6 = let final self::CallableGetter* #t1 = self::callableGetter in let final core::int* #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
+static field dynamic string6 = let final self::CallableGetter #t1 = self::callableGetter in let final core::int #t2 = 1 in #t1.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t2);
 static field dynamic string7 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
 static field dynamic string8 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
 static field dynamic nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:68:23: Error: Too few positional arguments: 1 required, 0 given.
@@ -161,16 +141,16 @@
                                      ^" in self::closure.call.call{<inapplicable>}.();
 static field dynamic nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:73:24: Error: Too few positional arguments: 1 required, 0 given.
 var nothing5 = callable();
-                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                       ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
 static field dynamic nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:74:29: Error: Too few positional arguments: 1 required, 0 given.
 var nothing6 = callable.call();
-                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                            ^" in self::callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
 static field dynamic nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:75:34: Error: Too few positional arguments: 1 required, 0 given.
 var nothing7 = callable.call.call();
-                                 ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+                                 ^" in self::callable.{self::Callable::call}{(dynamic) → dynamic}{<inapplicable>}.();
 static field dynamic nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:76:39: Error: Too few positional arguments: 1 required, 0 given.
 var nothing8 = callable.call.call.call();
-                                      ^" in self::callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+                                      ^" in self::callable.{self::Callable::call}{(dynamic) → dynamic}.call{<inapplicable>}.();
 static field invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:78:30: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
@@ -180,23 +160,23 @@
 static field dynamic nothing11 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call();
 static field dynamic nothing12 = self::callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call();
 static method main() → dynamic {
-  (dynamic) →* dynamic closure = (dynamic x) → dynamic => x;
-  dynamic int1 = closure(1){(dynamic) →* dynamic};
-  dynamic int2 = closure(1){(dynamic) →* dynamic};
-  dynamic int3 = closure.call(1){(dynamic) →* dynamic};
-  dynamic int4 = closure.call.call(1){(dynamic) →* dynamic};
-  self::Callable* callable = new self::Callable::•();
-  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) →* dynamic};
-  dynamic string3 = callable.{self::Callable::call}{(dynamic) →* dynamic}(1){(dynamic) →* dynamic};
-  dynamic string4 = callable.{self::Callable::call}{(dynamic) →* dynamic}.call(1){(dynamic) →* dynamic};
-  self::CallableGetter* callableGetter = new self::CallableGetter::•();
+  (dynamic) → dynamic closure = (dynamic x) → dynamic => x;
+  dynamic int1 = closure(1){(dynamic) → dynamic};
+  dynamic int2 = closure(1){(dynamic) → dynamic};
+  dynamic int3 = closure.call(1){(dynamic) → dynamic};
+  dynamic int4 = closure.call.call(1){(dynamic) → dynamic};
+  self::Callable callable = new self::Callable::•();
+  dynamic string1 = callable.{self::Callable::call}(1){(dynamic) → dynamic};
+  dynamic string2 = callable.{self::Callable::call}(1){(dynamic) → dynamic};
+  dynamic string3 = callable.{self::Callable::call}{(dynamic) → dynamic}(1){(dynamic) → dynamic};
+  dynamic string4 = callable.{self::Callable::call}{(dynamic) → dynamic}.call(1){(dynamic) → dynamic};
+  self::CallableGetter callableGetter = new self::CallableGetter::•();
   invalid-type string5 = invalid-expression "pkg/front_end/testcases/general/call.dart:29:31: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
   var string5 = callableGetter(1);
                               ^";
-  dynamic string6 = let final self::CallableGetter* #t3 = callableGetter in let final core::int* #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
+  dynamic string6 = let final self::CallableGetter #t3 = callableGetter in let final core::int #t4 = 1 in #t3.{self::CallableGetter::call}{dynamic}{dynamic}.call(#t4);
   dynamic string7 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call(1);
   dynamic string8 = callableGetter.{self::CallableGetter::call}{dynamic}{dynamic}.call{dynamic}.call(1);
   invalid-type nothing1 = invalid-expression "pkg/front_end/testcases/general/call.dart:34:25: Error: Too few positional arguments: 1 required, 0 given.
@@ -213,16 +193,16 @@
                                        ^" in closure.call.call{<inapplicable>}.();
   invalid-type nothing5 = invalid-expression "pkg/front_end/testcases/general/call.dart:39:26: Error: Too few positional arguments: 1 required, 0 given.
   var nothing5 = callable();
-                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                         ^" in callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing6 = invalid-expression "pkg/front_end/testcases/general/call.dart:40:31: Error: Too few positional arguments: 1 required, 0 given.
   var nothing6 = callable.call();
-                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() →* invalid-type};
+                              ^" in callable.{self::Callable::call}{<inapplicable>}.(){() → invalid-type};
   invalid-type nothing7 = invalid-expression "pkg/front_end/testcases/general/call.dart:41:36: Error: Too few positional arguments: 1 required, 0 given.
   var nothing7 = callable.call.call();
-                                   ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}{<inapplicable>}.();
+                                   ^" in callable.{self::Callable::call}{(dynamic) → dynamic}{<inapplicable>}.();
   invalid-type nothing8 = invalid-expression "pkg/front_end/testcases/general/call.dart:42:41: Error: Too few positional arguments: 1 required, 0 given.
   var nothing8 = callable.call.call.call();
-                                        ^" in callable.{self::Callable::call}{(dynamic) →* dynamic}.call{<inapplicable>}.();
+                                        ^" in callable.{self::Callable::call}{(dynamic) → dynamic}.call{<inapplicable>}.();
   invalid-type nothing9 = invalid-expression "pkg/front_end/testcases/general/call.dart:44:32: Error: Cannot invoke an instance of 'CallableGetter' because it declares 'call' to be something other than a method.
  - 'CallableGetter' is from 'pkg/front_end/testcases/general/call.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart b/pkg/front_end/testcases/general/callable_type_variable.dart
index 85ef462..3fda2e4 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart
+++ b/pkg/front_end/testcases/general/callable_type_variable.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 Class1<T extends Function> {
   T field;
 
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline.expect
index 774edf2..d54964e 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1<T extends Function> {
   T field;
   Class1(this.field);
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline_modelled.expect
index a8cdd5e..8eb5879 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1<T extends Function> {
   Class1(this.field);
   T field;
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
index 82b2ca3..1eff7da 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,54 +13,34 @@
 import self as self;
 import "dart:core" as core;
 
-class Class1<T extends core::Function*> extends core::Object {
-  covariant-by-class field self::Class1::T* field;
-  constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
+class Class1<T extends core::Function> extends core::Object {
+  covariant-by-class field self::Class1::T field;
+  constructor •(self::Class1::T field) → self::Class1<self::Class1::T>
     : self::Class1::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    dynamic v1 = this.{self::Class1::field}{self::Class1::T*}();
-    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}{self::Class1::T*}(#t1);
-    self::Class1::T* v3 = this.{self::Class1::field}{self::Class1::T*}.call;
-    dynamic v4 = this.{self::Class1::field}{self::Class1::T*}();
-    dynamic v5 = this.{self::Class1::field}{self::Class1::T*}(0);
+    dynamic v1 = this.{self::Class1::field}{self::Class1::T}();
+    dynamic v2 = let final core::int #t1 = 0 in this.{self::Class1::field}{self::Class1::T}(#t1);
+    self::Class1::T v3 = this.{self::Class1::field}{self::Class1::T}.call;
+    dynamic v4 = this.{self::Class1::field}{self::Class1::T}();
+    dynamic v5 = this.{self::Class1::field}{self::Class1::T}(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
 }
-class Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  covariant-by-class field self::Class2::T* field;
-  constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
+class Class2<T extends (core::int) → core::String> extends core::Object {
+  covariant-by-class field self::Class2::T field;
+  constructor •(self::Class2::T field) → self::Class2<self::Class2::T>
     : self::Class2::field = field, super core::Object::•()
     ;
   method method() → dynamic {
     invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
-                  ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v2 = let final core::int* #t2 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t2){(core::int*) →* core::String*};
-    self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
+                  ^" in this.{self::Class2::field}{self::Class2::T}{<inapplicable>}.();
+    core::String v2 = let final core::int #t2 = 0 in this.{self::Class2::field}{self::Class2::T}(#t2){(core::int) → core::String};
+    self::Class2::T v3 = this.{self::Class2::field}{self::Class2::T}.call;
     invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
-                       ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
+                       ^" in this.{self::Class2::field}{self::Class2::T}{<inapplicable>}.();
+    core::String v5 = this.{self::Class2::field}{self::Class2::T}(0){(core::int) → 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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect
index 82b2ca3..1eff7da 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,54 +13,34 @@
 import self as self;
 import "dart:core" as core;
 
-class Class1<T extends core::Function*> extends core::Object {
-  covariant-by-class field self::Class1::T* field;
-  constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
+class Class1<T extends core::Function> extends core::Object {
+  covariant-by-class field self::Class1::T field;
+  constructor •(self::Class1::T field) → self::Class1<self::Class1::T>
     : self::Class1::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    dynamic v1 = this.{self::Class1::field}{self::Class1::T*}();
-    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}{self::Class1::T*}(#t1);
-    self::Class1::T* v3 = this.{self::Class1::field}{self::Class1::T*}.call;
-    dynamic v4 = this.{self::Class1::field}{self::Class1::T*}();
-    dynamic v5 = this.{self::Class1::field}{self::Class1::T*}(0);
+    dynamic v1 = this.{self::Class1::field}{self::Class1::T}();
+    dynamic v2 = let final core::int #t1 = 0 in this.{self::Class1::field}{self::Class1::T}(#t1);
+    self::Class1::T v3 = this.{self::Class1::field}{self::Class1::T}.call;
+    dynamic v4 = this.{self::Class1::field}{self::Class1::T}();
+    dynamic v5 = this.{self::Class1::field}{self::Class1::T}(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
 }
-class Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  covariant-by-class field self::Class2::T* field;
-  constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
+class Class2<T extends (core::int) → core::String> extends core::Object {
+  covariant-by-class field self::Class2::T field;
+  constructor •(self::Class2::T field) → self::Class2<self::Class2::T>
     : self::Class2::field = field, super core::Object::•()
     ;
   method method() → dynamic {
     invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
-                  ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v2 = let final core::int* #t2 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t2){(core::int*) →* core::String*};
-    self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
+                  ^" in this.{self::Class2::field}{self::Class2::T}{<inapplicable>}.();
+    core::String v2 = let final core::int #t2 = 0 in this.{self::Class2::field}{self::Class2::T}(#t2){(core::int) → core::String};
+    self::Class2::T v3 = this.{self::Class2::field}{self::Class2::T}.call;
     invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
-                       ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
+                       ^" in this.{self::Class2::field}{self::Class2::T}{<inapplicable>}.();
+    core::String v5 = this.{self::Class2::field}{self::Class2::T}(0){(core::int) → 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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect
index cc8857f2..33b4a76 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class1<T extends core::Function*> extends core::Object {
-  covariant-by-class field self::Class1::T* field;
-  constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
+class Class1<T extends core::Function> extends core::Object {
+  covariant-by-class field self::Class1::T field;
+  constructor •(self::Class1::T field) → self::Class1<self::Class1::T>
     ;
   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 Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  covariant-by-class field self::Class2::T* field;
-  constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
+class Class2<T extends (core::int) → core::String> extends core::Object {
+  covariant-by-class field self::Class2::T field;
+  constructor •(self::Class2::T field) → self::Class2<self::Class2::T>
     ;
   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/callable_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
index 38bd48c..3357392 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,55 +13,35 @@
 import self as self;
 import "dart:core" as core;
 
-class Class1<T extends core::Function*> extends core::Object {
-  covariant-by-class field self::Class1::T* field;
-  constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
+class Class1<T extends core::Function> extends core::Object {
+  covariant-by-class field self::Class1::T field;
+  constructor •(self::Class1::T field) → self::Class1<self::Class1::T>
     : self::Class1::field = field, super core::Object::•()
     ;
   method method() → dynamic {
-    dynamic v1 = this.{self::Class1::field}{self::Class1::T*}();
-    dynamic v2 = let final core::int* #t1 = 0 in this.{self::Class1::field}{self::Class1::T*}(#t1);
-    self::Class1::T* v3 = this.{self::Class1::field}{self::Class1::T*}.call;
-    dynamic v4 = this.{self::Class1::field}{self::Class1::T*}();
-    dynamic v5 = this.{self::Class1::field}{self::Class1::T*}(0);
+    dynamic v1 = this.{self::Class1::field}{self::Class1::T}();
+    dynamic v2 = let final core::int #t1 = 0 in this.{self::Class1::field}{self::Class1::T}(#t1);
+    self::Class1::T v3 = this.{self::Class1::field}{self::Class1::T}.call;
+    dynamic v4 = this.{self::Class1::field}{self::Class1::T}();
+    dynamic v5 = this.{self::Class1::field}{self::Class1::T}(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
 }
-class Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  covariant-by-class field self::Class2::T* field;
-  constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
+class Class2<T extends (core::int) → core::String> extends core::Object {
+  covariant-by-class field self::Class2::T field;
+  constructor •(self::Class2::T field) → self::Class2<self::Class2::T>
     : self::Class2::field = field, super core::Object::•()
     ;
   method method() → dynamic {
     invalid-type v1 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:25:19: Error: Too few positional arguments: 1 required, 0 given.
     var v1 = field(); // error
-                  ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v2 = let final core::int* #t2 = 0 in this.{self::Class2::field}{self::Class2::T*}(#t2){(core::int*) →* core::String*};
-    self::Class2::T* v3 = this.{self::Class2::field}{self::Class2::T*}.call;
+                  ^" in this.{self::Class2::field}{self::Class2::T}{<inapplicable>}.();
+    core::String v2 = let final core::int #t2 = 0 in this.{self::Class2::field}{self::Class2::T}(#t2){(core::int) → core::String};
+    self::Class2::T v3 = this.{self::Class2::field}{self::Class2::T}.call;
     invalid-type v4 = invalid-expression "pkg/front_end/testcases/general/callable_type_variable.dart:28:24: Error: Too few positional arguments: 1 required, 0 given.
     var v4 = field.call(); // error
-                       ^" in this.{self::Class2::field}{self::Class2::T*}{<inapplicable>}.();
-    core::String* v5 = this.{self::Class2::field}{self::Class2::T*}(0){(core::int*) →* core::String*};
+                       ^" in this.{self::Class2::field}{self::Class2::T}{<inapplicable>}.();
+    core::String v5 = this.{self::Class2::field}{self::Class2::T}(0){(core::int) → 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
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/candidate_found.dart b/pkg/front_end/testcases/general/candidate_found.dart
index 8c5531f..6b4c624 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart
+++ b/pkg/front_end/testcases/general/candidate_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 Fisk {
   Fisk(int x) {}
 
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.textual_outline.expect b/pkg/front_end/testcases/general/candidate_found.dart.textual_outline.expect
index 3878c51..59e6dfd 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk {
   Fisk(int x) {}
   Fisk.named(int x) {}
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/candidate_found.dart.textual_outline_modelled.expect
index 0ef7f2c8..49525b6 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Fisk {
   Fisk(int x) {}
   Fisk.named(int x) {}
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
index a8817a7..d14cba6 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -45,22 +45,12 @@
 import "dart:core" as core;
 
 class Fisk extends core::Object {
-  constructor •(core::int* x) → self::Fisk*
+  constructor •(core::int x) → self::Fisk
     : super core::Object::•() {}
-  constructor named(core::int* x) → self::Fisk*
+  constructor named(core::int x) → self::Fisk
     : super core::Object::•() {}
-  method method(core::int* x) → void {}
-  static method staticMethod(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 method(core::int x) → void {}
+  static method staticMethod(core::int x) → void {}
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
@@ -80,6 +70,6 @@
                    ^";
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
   (null as Fisk).method();
-                       ^" in (null as self::Fisk*).{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
+                       ^" in (null as{ForNonNullableByDefault} self::Fisk).{self::Fisk::method}{<inapplicable>}.(){() → invalid-type};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect
index a8817a7..d14cba6 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -45,22 +45,12 @@
 import "dart:core" as core;
 
 class Fisk extends core::Object {
-  constructor •(core::int* x) → self::Fisk*
+  constructor •(core::int x) → self::Fisk
     : super core::Object::•() {}
-  constructor named(core::int* x) → self::Fisk*
+  constructor named(core::int x) → self::Fisk
     : super core::Object::•() {}
-  method method(core::int* x) → void {}
-  static method staticMethod(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 method(core::int x) → void {}
+  static method staticMethod(core::int x) → void {}
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
@@ -80,6 +70,6 @@
                    ^";
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
   (null as Fisk).method();
-                       ^" in (null as self::Fisk*).{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
+                       ^" in (null as{ForNonNullableByDefault} self::Fisk).{self::Fisk::method}{<inapplicable>}.(){() → invalid-type};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.outline.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.outline.expect
index 643d69c..fb27332 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Fisk extends core::Object {
-  constructor •(core::int* x) → self::Fisk*
+  constructor •(core::int x) → self::Fisk
     ;
-  constructor named(core::int* x) → self::Fisk*
+  constructor named(core::int x) → self::Fisk
     ;
-  method method(core::int* x) → void
+  method method(core::int x) → void
     ;
-  static method staticMethod(core::int* x) → void
+  static method staticMethod(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
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect b/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect
index 66c13e5..0297ea7 100644
--- a/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/candidate_found.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -45,22 +45,12 @@
 import "dart:core" as core;
 
 class Fisk extends core::Object {
-  constructor •(core::int* x) → self::Fisk*
+  constructor •(core::int x) → self::Fisk
     : super core::Object::•() {}
-  constructor named(core::int* x) → self::Fisk*
+  constructor named(core::int x) → self::Fisk
     : super core::Object::•() {}
-  method method(core::int* x) → void {}
-  static method staticMethod(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 method(core::int x) → void {}
+  static method staticMethod(core::int x) → void {}
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:16:11: Error: Too few positional arguments: 1 required, 0 given.
@@ -80,6 +70,6 @@
                    ^";
   invalid-expression "pkg/front_end/testcases/general/candidate_found.dart:21:24: Error: Too few positional arguments: 1 required, 0 given.
   (null as Fisk).method();
-                       ^" in null.{self::Fisk::method}{<inapplicable>}.(){() →* invalid-type};
+                       ^" in null.{self::Fisk::method}{<inapplicable>}.(){() → invalid-type};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade.dart b/pkg/front_end/testcases/general/cascade.dart
index ca4653a..97a3402 100644
--- a/pkg/front_end/testcases/general/cascade.dart
+++ b/pkg/front_end/testcases/general/cascade.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
+
 main() {
   var list = [1]
     ..add(2)
diff --git a/pkg/front_end/testcases/general/cascade.dart.textual_outline.expect b/pkg/front_end/testcases/general/cascade.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/cascade.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/cascade.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/cascade.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/cascade.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.expect b/pkg/front_end/testcases/general/cascade.dart.weak.expect
index 3d4d8ca..4637d59 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,40 +26,40 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* list = let final core::List<core::int*>* #t1 = <core::int*>[1] in block {
-    #t1.{core::List::add}(2){(core::int*) →* void};
-    #t1.{core::List::add}(3){(core::int*) →* void};
-    #t1.{core::List::addAll}(<core::int*>[4, 5]){(core::Iterable<core::int*>*) →* void};
+  core::List<core::int> list = let final core::List<core::int> #t1 = <core::int>[1] in block {
+    #t1.{core::List::add}(2){(core::int) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
+    #t1.{core::List::addAll}(<core::int>[4, 5]){(core::Iterable<core::int>) → void};
   } =>#t1;
   core::print(list);
-  let final core::List<core::int*>* #t2 = list in block {
-    #t2.{core::List::add}(2){(core::int*) →* void};
-    #t2.{core::List::length}{core::int*};
+  let final core::List<core::int> #t2 = list in block {
+    #t2.{core::List::add}(2){(core::int) → void};
+    #t2.{core::List::length}{core::int};
     #t2.{core::List::length} = 0;
   } =>#t2;
   core::print(list);
-  let final core::List<core::int*>* #t3 = list in block {
-    #t3.{core::List::add}(2){(core::int*) →* void};
-    #t3.{core::List::[]}(0){(core::int*) →* core::int*};
-    #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
+  let final core::List<core::int> #t3 = list in block {
+    #t3.{core::List::add}(2){(core::int) → void};
+    #t3.{core::List::[]}(0){(core::int) → core::int};
+    #t3.{core::List::[]=}(0, 87){(core::int, core::int) → void};
   } =>#t3;
   core::print(list);
-  list = let final core::List<core::int*>* #t4 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  list = let final core::List<core::int> #t4 = <core::int>[invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
     [1]
-    ^" in <core::int*>[1] as{TypeError} core::int*] in block {
+    ^" in <core::int>[1] as{TypeError,ForNonNullableByDefault} core::int] in block {
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+            ^^^^" in #t4.{core::Iterable::first}{core::int}{<unresolved>}.last.{core::Object::toString}(){() → core::String};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.[](0).{core::Object::toString}(){() →* core::String*};
+           ^" in #t4.{core::Iterable::first}{core::int}{<unresolved>}.[](0).{core::Object::toString}(){() → core::String};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^" in #t4.{core::List::[]}(0){(core::int*) →* core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+          ^^^^" in #t4.{core::List::[]}(0){(core::int) → core::int}{<unresolved>}.last.{core::Object::toString}(){() → core::String};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect
index 3d4d8ca..4637d59 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,40 +26,40 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* list = let final core::List<core::int*>* #t1 = <core::int*>[1] in block {
-    #t1.{core::List::add}(2){(core::int*) →* void};
-    #t1.{core::List::add}(3){(core::int*) →* void};
-    #t1.{core::List::addAll}(<core::int*>[4, 5]){(core::Iterable<core::int*>*) →* void};
+  core::List<core::int> list = let final core::List<core::int> #t1 = <core::int>[1] in block {
+    #t1.{core::List::add}(2){(core::int) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
+    #t1.{core::List::addAll}(<core::int>[4, 5]){(core::Iterable<core::int>) → void};
   } =>#t1;
   core::print(list);
-  let final core::List<core::int*>* #t2 = list in block {
-    #t2.{core::List::add}(2){(core::int*) →* void};
-    #t2.{core::List::length}{core::int*};
+  let final core::List<core::int> #t2 = list in block {
+    #t2.{core::List::add}(2){(core::int) → void};
+    #t2.{core::List::length}{core::int};
     #t2.{core::List::length} = 0;
   } =>#t2;
   core::print(list);
-  let final core::List<core::int*>* #t3 = list in block {
-    #t3.{core::List::add}(2){(core::int*) →* void};
-    #t3.{core::List::[]}(0){(core::int*) →* core::int*};
-    #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
+  let final core::List<core::int> #t3 = list in block {
+    #t3.{core::List::add}(2){(core::int) → void};
+    #t3.{core::List::[]}(0){(core::int) → core::int};
+    #t3.{core::List::[]=}(0, 87){(core::int, core::int) → void};
   } =>#t3;
   core::print(list);
-  list = let final core::List<core::int*>* #t4 = <core::int*>[invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  list = let final core::List<core::int> #t4 = <core::int>[invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
     [1]
-    ^" in <core::int*>[1] as{TypeError} core::int*] in block {
+    ^" in <core::int>[1] as{TypeError,ForNonNullableByDefault} core::int] in block {
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+            ^^^^" in #t4.{core::Iterable::first}{core::int}{<unresolved>}.last.{core::Object::toString}(){() → core::String};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.[](0).{core::Object::toString}(){() →* core::String*};
+           ^" in #t4.{core::Iterable::first}{core::int}{<unresolved>}.[](0).{core::Object::toString}(){() → core::String};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^" in #t4.{core::List::[]}(0){(core::int*) →* core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+          ^^^^" in #t4.{core::List::[]}(0){(core::int) → core::int}{<unresolved>}.last.{core::Object::toString}(){() → core::String};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/cascade.dart.weak.outline.expect b/pkg/front_end/testcases/general/cascade.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/cascade.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/cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
index b2dbc37..8199e40 100644
--- a/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,40 +26,40 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::List<core::int*>* list = let final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(1) in block {
-    #t1.{core::List::add}(2){(core::int*) →* void};
-    #t1.{core::List::add}(3){(core::int*) →* void};
-    #t1.{core::List::addAll}(core::_GrowableList::_literal2<core::int*>(4, 5)){(core::Iterable<core::int*>*) →* void};
+  core::List<core::int> list = let final core::List<core::int> #t1 = core::_GrowableList::_literal1<core::int>(1) in block {
+    #t1.{core::List::add}(2){(core::int) → void};
+    #t1.{core::List::add}(3){(core::int) → void};
+    #t1.{core::List::addAll}(core::_GrowableList::_literal2<core::int>(4, 5)){(core::Iterable<core::int>) → void};
   } =>#t1;
   core::print(list);
-  let final core::List<core::int*>* #t2 = list in block {
-    #t2.{core::List::add}(2){(core::int*) →* void};
-    #t2.{core::List::length}{core::int*};
+  let final core::List<core::int> #t2 = list in block {
+    #t2.{core::List::add}(2){(core::int) → void};
+    #t2.{core::List::length}{core::int};
     #t2.{core::List::length} = 0;
   } =>#t2;
   core::print(list);
-  let final core::List<core::int*>* #t3 = list in block {
-    #t3.{core::List::add}(2){(core::int*) →* void};
-    #t3.{core::List::[]}(0){(core::int*) →* core::int*};
-    #t3.{core::List::[]=}(0, 87){(core::int*, core::int*) →* void};
+  let final core::List<core::int> #t3 = list in block {
+    #t3.{core::List::add}(2){(core::int) → void};
+    #t3.{core::List::[]}(0){(core::int) → core::int};
+    #t3.{core::List::[]=}(0, 87){(core::int, core::int) → void};
   } =>#t3;
   core::print(list);
-  list = let final core::List<core::int*>* #t4 = core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
+  list = let final core::List<core::int> #t4 = core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/cascade.dart:26:5: Error: A value of type 'List<int>' can't be assigned to a variable of type 'int'.
  - 'List' is from 'dart:core'.
     [1]
-    ^" in core::_GrowableList::_literal1<core::int*>(1) as{TypeError} core::int*) in block {
+    ^" in core::_GrowableList::_literal1<core::int>(1) as{TypeError,ForNonNullableByDefault} core::int) in block {
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+            ^^^^" in #t4.{core::Iterable::first}{core::int}{<unresolved>}.last.{core::Object::toString}(){() → core::String};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
 Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
-           ^" in #t4.{core::Iterable::first}{core::int*}{<unresolved>}.[](0).{core::Object::toString}(){() →* core::String*};
+           ^" in #t4.{core::Iterable::first}{core::int}{<unresolved>}.[](0).{core::Object::toString}(){() → core::String};
     invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..[0].last.toString();
-          ^^^^" in #t4.{core::List::[]}(0){(core::int*) →* core::int*}{<unresolved>}.last.{core::Object::toString}(){() →* core::String*};
+          ^^^^" in #t4.{core::List::[]}(0){(core::int) → core::int}{<unresolved>}.last.{core::Object::toString}(){() → core::String};
   } =>#t4;
   core::print(list);
 }
diff --git a/pkg/front_end/testcases/general/cascade_context.dart b/pkg/front_end/testcases/general/cascade_context.dart
index 01cb795..936ffa1 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart
+++ b/pkg/front_end/testcases/general/cascade_context.dart
@@ -1,8 +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
-T f<T>() => null;
+
+T f<T>() => throw '';
 
 test() {
   int v1 = f();
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.textual_outline.expect b/pkg/front_end/testcases/general/cascade_context.dart.textual_outline.expect
index d47fc4f..0bb878f 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
-T f<T>() => null;
+T f<T>() => throw '';
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/cascade_context.dart.textual_outline_modelled.expect
index fd47409..85cb1f6 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
-T f<T>() => null;
+T f<T>() => throw '';
 main() {}
 test() {}
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.expect
index 11f2c0b..601c843 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → dynamic {
-  core::int* v1 = self::f<core::int*>();
-  core::int* v2 = let final core::int* #t1 = self::f<core::int*>() in block {
-    #t1.{core::int::isEven}{core::bool*};
+  core::int v1 = self::f<core::int>();
+  core::int v2 = let final core::int #t1 = self::f<core::int>() in block {
+    #t1.{core::int::isEven}{core::bool};
   } =>#t1;
-  core::int* v3 = let final core::int* #t2 = self::f<core::int*>() in block {
-    #t2.{core::int::isEven}{core::bool*};
-    #t2.{core::int::isEven}{core::bool*};
+  core::int v3 = let final core::int #t2 = self::f<core::int>() in block {
+    #t2.{core::int::isEven}{core::bool};
+    #t2.{core::int::isEven}{core::bool};
   } =>#t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect
index 11f2c0b..601c843 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.modular.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → dynamic {
-  core::int* v1 = self::f<core::int*>();
-  core::int* v2 = let final core::int* #t1 = self::f<core::int*>() in block {
-    #t1.{core::int::isEven}{core::bool*};
+  core::int v1 = self::f<core::int>();
+  core::int v2 = let final core::int #t1 = self::f<core::int>() in block {
+    #t1.{core::int::isEven}{core::bool};
   } =>#t1;
-  core::int* v3 = let final core::int* #t2 = self::f<core::int*>() in block {
-    #t2.{core::int::isEven}{core::bool*};
-    #t2.{core::int::isEven}{core::bool*};
+  core::int v3 = let final core::int #t2 = self::f<core::int>() in block {
+    #t2.{core::int::isEven}{core::bool};
+    #t2.{core::int::isEven}{core::bool};
   } =>#t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.outline.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.outline.expect
index 10a6773..353d0d8 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
+static method f<T extends core::Object? = dynamic>() → self::f::T%
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect
index 11f2c0b..601c843 100644
--- a/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/cascade_context.dart.weak.transformed.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method f<T extends core::Object* = dynamic>() → self::f::T*
-  return null;
+static method f<T extends core::Object? = dynamic>() → self::f::T%
+  return throw "";
 static method test() → dynamic {
-  core::int* v1 = self::f<core::int*>();
-  core::int* v2 = let final core::int* #t1 = self::f<core::int*>() in block {
-    #t1.{core::int::isEven}{core::bool*};
+  core::int v1 = self::f<core::int>();
+  core::int v2 = let final core::int #t1 = self::f<core::int>() in block {
+    #t1.{core::int::isEven}{core::bool};
   } =>#t1;
-  core::int* v3 = let final core::int* #t2 = self::f<core::int*>() in block {
-    #t2.{core::int::isEven}{core::bool*};
-    #t2.{core::int::isEven}{core::bool*};
+  core::int v3 = let final core::int #t2 = self::f<core::int>() in block {
+    #t2.{core::int::isEven}{core::bool};
+    #t2.{core::int::isEven}{core::bool};
   } =>#t2;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/casts.dart b/pkg/front_end/testcases/general/casts.dart
index 0c375c4..2c7a621 100644
--- a/pkg/front_end/testcases/general/casts.dart
+++ b/pkg/front_end/testcases/general/casts.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
+
 main() {
   print("" as String);
   print(1 as int);
diff --git a/pkg/front_end/testcases/general/casts.dart.textual_outline.expect b/pkg/front_end/testcases/general/casts.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/casts.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/casts.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/casts.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/casts.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/casts.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/casts.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/casts.dart.weak.expect b/pkg/front_end/testcases/general/casts.dart.weak.expect
index bfac5fe..19a0291 100644
--- a/pkg/front_end/testcases/general/casts.dart.weak.expect
+++ b/pkg/front_end/testcases/general/casts.dart.weak.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print("" as core::String*);
-  core::print(1 as core::int*);
-  core::print(1.0 as core::double*);
-  core::print("" is core::String*);
-  core::print("" is core::int*);
-  core::print("" is core::double*);
-  core::print(1 is core::String*);
-  core::print(1 is core::int*);
-  core::print(1 is core::double*);
-  core::print(1.0 is core::String*);
-  core::print(1.0 is core::int*);
-  core::print(1.0 is core::double*);
+  core::print("" as{ForNonNullableByDefault} core::String);
+  core::print(1 as{ForNonNullableByDefault} core::int);
+  core::print(1.0 as{ForNonNullableByDefault} core::double);
+  core::print("" is{ForNonNullableByDefault} core::String);
+  core::print("" is{ForNonNullableByDefault} core::int);
+  core::print("" is{ForNonNullableByDefault} core::double);
+  core::print(1 is{ForNonNullableByDefault} core::String);
+  core::print(1 is{ForNonNullableByDefault} core::int);
+  core::print(1 is{ForNonNullableByDefault} core::double);
+  core::print(1.0 is{ForNonNullableByDefault} core::String);
+  core::print(1.0 is{ForNonNullableByDefault} core::int);
+  core::print(1.0 is{ForNonNullableByDefault} core::double);
 }
diff --git a/pkg/front_end/testcases/general/casts.dart.weak.modular.expect b/pkg/front_end/testcases/general/casts.dart.weak.modular.expect
index bfac5fe..19a0291 100644
--- a/pkg/front_end/testcases/general/casts.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/casts.dart.weak.modular.expect
@@ -1,18 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::print("" as core::String*);
-  core::print(1 as core::int*);
-  core::print(1.0 as core::double*);
-  core::print("" is core::String*);
-  core::print("" is core::int*);
-  core::print("" is core::double*);
-  core::print(1 is core::String*);
-  core::print(1 is core::int*);
-  core::print(1 is core::double*);
-  core::print(1.0 is core::String*);
-  core::print(1.0 is core::int*);
-  core::print(1.0 is core::double*);
+  core::print("" as{ForNonNullableByDefault} core::String);
+  core::print(1 as{ForNonNullableByDefault} core::int);
+  core::print(1.0 as{ForNonNullableByDefault} core::double);
+  core::print("" is{ForNonNullableByDefault} core::String);
+  core::print("" is{ForNonNullableByDefault} core::int);
+  core::print("" is{ForNonNullableByDefault} core::double);
+  core::print(1 is{ForNonNullableByDefault} core::String);
+  core::print(1 is{ForNonNullableByDefault} core::int);
+  core::print(1 is{ForNonNullableByDefault} core::double);
+  core::print(1.0 is{ForNonNullableByDefault} core::String);
+  core::print(1.0 is{ForNonNullableByDefault} core::int);
+  core::print(1.0 is{ForNonNullableByDefault} core::double);
 }
diff --git a/pkg/front_end/testcases/general/casts.dart.weak.outline.expect b/pkg/front_end/testcases/general/casts.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/casts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/casts.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/casts.dart.weak.transformed.expect b/pkg/front_end/testcases/general/casts.dart.weak.transformed.expect
index 59f300e..a8b1c78 100644
--- a/pkg/front_end/testcases/general/casts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/casts.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -6,15 +6,15 @@
   core::print("");
   core::print(1);
   core::print(1.0);
-  core::print("" is core::String*);
-  core::print("" is core::int*);
-  core::print("" is core::double*);
-  core::print(1 is core::String*);
-  core::print(1 is core::int*);
-  core::print(1 is core::double*);
-  core::print(1.0 is core::String*);
-  core::print(1.0 is core::int*);
-  core::print(1.0 is core::double*);
+  core::print("" is{ForNonNullableByDefault} core::String);
+  core::print("" is{ForNonNullableByDefault} core::int);
+  core::print("" is{ForNonNullableByDefault} core::double);
+  core::print(1 is{ForNonNullableByDefault} core::String);
+  core::print(1 is{ForNonNullableByDefault} core::int);
+  core::print(1 is{ForNonNullableByDefault} core::double);
+  core::print(1.0 is{ForNonNullableByDefault} core::String);
+  core::print(1.0 is{ForNonNullableByDefault} core::int);
+  core::print(1.0 is{ForNonNullableByDefault} core::double);
 }
 
 
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart b/pkg/front_end/testcases/general/check_deferred_allocation.dart
index 696e392..3bf29bf 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.expect
index ee44558..ef6c90a 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in new def::C::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect
index ee44558..ef6c90a 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in new def::C::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.transformed.expect
index 57b9c6d..1cc3bca 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in new def::C::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart b/pkg/front_end/testcases/general/check_deferred_as_check.dart
index 07e9aa0..e9d17ff 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline.expect
index 0ef0840..9a994a0 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline_modelled.expect
index 0ef0840..9a994a0 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.expect
index 3ed13e8..a56fed60 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
-  x as invalid-type;
+  x as{ForNonNullableByDefault} invalid-type;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect
index 3ed13e8..a56fed60 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
-  x as invalid-type;
+  x as{ForNonNullableByDefault} invalid-type;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.outline.expect
index 2235d55..8aef89e 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test(dynamic x) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.transformed.expect
index 3ed13e8..a56fed60 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
-  x as invalid-type;
+  x as{ForNonNullableByDefault} invalid-type;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart b/pkg/front_end/testcases/general/check_deferred_before_args.dart
index e09f45f..cd12c6d 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline.expect
index 2a96740..4ddbfed 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline_modelled.expect
index 3e448d7..2e73aad 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 m2() => 1;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.expect
index a15d266..1151c13 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 import "dart:core" as core;
@@ -7,34 +7,24 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
   return 1;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect
index a15d266..1151c13 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 import "dart:core" as core;
@@ -7,34 +7,24 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
+  let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   let final dynamic #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
   return 1;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.outline.expect
index fcde1e9..3ec4fce 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -10,27 +10,17 @@
 static method m2() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.transformed.expect
index 4226f91..723aa95 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -7,34 +7,24 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic} core::int*;
+  let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = self::m2() as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
   let final core::Object* #t2 = CheckLibraryIsLoaded(lib) in def::m(self::m2());
 }
 static method m2() → dynamic
   return 1;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart b/pkg/front_end/testcases/general/check_deferred_before_args2.dart
index 0792650..ddfdf12 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline.expect
index 97359bb..72746c9 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline_modelled.expect
index 97359bb..72746c9 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
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 12e71e3..562a536 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,28 +9,18 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(await LoadLibrary(lib));
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
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 12e71e3..562a536 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,28 +9,18 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(await LoadLibrary(lib));
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.outline.expect
index 21267fc..d43e0b7 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic async 
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
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 0a550d4..55724af 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -8,57 +8,47 @@
 
 static method main() → dynamic {}
 static method test() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         final core::Object* #t1 = CheckLibraryIsLoaded(lib);
-        [yield] let dynamic #t2 = asy::_awaitHelper(LoadLibrary(lib), :async_op_then, :async_op_error, :async_op) in null;
-        def::m(:result);
+        [yield] let dynamic #t2 = asy::_awaitHelper(LoadLibrary(lib), :async_op_then, :async_op_error) in null;
+        def::m(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart b/pkg/front_end/testcases/general/check_deferred_before_call.dart
index 2b7aeea..aa6ad85 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.expect
index 1d2d900..5922200 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,28 +9,18 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(3);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect
index 1d2d900..5922200 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,28 +9,18 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::m(3);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.transformed.expect
index 5786537..b826654 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::m(3);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart b/pkg/front_end/testcases/general/check_deferred_before_write.dart
index 4d57d7a..5a8f96c 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.expect
index 549e5e0..3586395 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,28 +9,18 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = 2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect
index 549e5e0..3586395 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_lib.dart" as def;
 
@@ -9,28 +9,18 @@
   let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x = 2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.transformed.expect
index 9426037..99632dd 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x = 2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart b/pkg/front_end/testcases/general/check_deferred_is_check.dart
index f433222..7069d9a 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline.expect
index 0ef0840..9a994a0 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline_modelled.expect
index 0ef0840..9a994a0 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.expect
index 08b44c2..4fdb6a6 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,31 +15,21 @@
 
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
-  core::print(x is invalid-type);
+  core::print(x is{ForNonNullableByDefault} invalid-type);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect
index 08b44c2..4fdb6a6 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,31 +15,21 @@
 
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
-  core::print(x is invalid-type);
+  core::print(x is{ForNonNullableByDefault} invalid-type);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.outline.expect
index 2235d55..8aef89e 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test(dynamic x) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.transformed.expect
index 08b44c2..4fdb6a6 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,31 +15,21 @@
 
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
-  core::print(x is invalid-type);
+  core::print(x is{ForNonNullableByDefault} invalid-type);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart b/pkg/front_end/testcases/general/check_deferred_read.dart
index bcecacf..0cebef0 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart
+++ b/pkg/front_end/testcases/general/check_deferred_read.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect
index d298cb9..5aaa126 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -7,31 +7,21 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num*) →* core::int*});
+  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num) → core::int});
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect
index d298cb9..5aaa126 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -7,31 +7,21 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num*) →* core::int*});
+  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num) → core::int});
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect
index 6962eb7..c05e5ef 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -7,31 +7,21 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  core::print((let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num*) →* core::int*});
+  core::print((let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1){(core::num) → core::int});
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart
index 47ba0f5..0a446f7 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.expect
index 7ebd7ea..0ee8d1d 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::C::y);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect
index 7ebd7ea..0ee8d1d 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::C::y);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.transformed.expect
index a347b0a..b9fcf29 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::C::y);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart b/pkg/front_end/testcases/general/check_deferred_read_type.dart
index 52b7600..be64b65 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.expect
index efb9d56..f7ddaf5 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -9,29 +9,19 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in #C1);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
 
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect
index efb9d56..f7ddaf5 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -9,29 +9,19 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in #C1);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
 
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.transformed.expect
index 2813c9c5..38b8100 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
@@ -9,29 +9,19 @@
   core::print(let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in #C1);
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
 
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart
index 195df66..63008c6 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline_modelled.expect
index 87d2faf..05d29b6 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.expect
index 2fb6711..65b5df4 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::C::m());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect
index 2fb6711..65b5df4 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::C::m());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.transformed.expect
index 5674209..f3932c8 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "deferred_lib.dart" as def;
@@ -10,28 +10,18 @@
   core::print(let final core::Object* #t1 = CheckLibraryIsLoaded(lib) in def::C::m());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart
index 8844264..f3cc305 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.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
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() => test();
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline.expect
index 2e15ba2..b8fbde2 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() => test();
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline_modelled.expect
index 2e15ba2..b8fbde2 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_lib.dart' deferred as lib;
 
 main() => test();
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect
index 1189c30..a82addd 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,28 +18,18 @@
   invalid-type x = null;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
index 1189c30..a82addd 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,28 +18,18 @@
   invalid-type x = null;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.outline.expect
index 5a345b6..f6365f4 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_lib.dart" deferred as lib;
@@ -8,27 +8,17 @@
 static method test() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → self2::C*
+  static field core::int y;
+  synthetic constructor •() → self2::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect
index 1189c30..a82addd 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,28 +18,18 @@
   invalid-type x = null;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → self2::C*
+  static field core::int y = 1;
+  synthetic constructor •() → self2::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart
index 0c607b4..a5d3a57 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.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
+
 // This test is intended to trigger a circular top-level type-inference
 // dependency involving an initializing formal where the circularity is detected
 // when inferring the type of the constructor.
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.expect
index 80172a1..5c0080d 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.expect
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:17:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
 // Specify the type explicitly.
 //   C._circular(this.f);
 //   ^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect
index 80172a1..5c0080d 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.modular.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:17:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
 // Specify the type explicitly.
 //   C._circular(this.f);
 //   ^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.outline.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.outline.expect
index 676b3ff..3d18a5c 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.outline.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:17:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
 // Specify the type explicitly.
 //   C._circular(this.f);
 //   ^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.transformed.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.transformed.expect
index 80172a1..5c0080d 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:17:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
 // Specify the type explicitly.
 //   C._circular(this.f);
 //   ^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart
new file mode 100644
index 0000000..abd1615
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.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.
+
+// This test is intended to trigger a circular top-level type-inference
+// dependency involving an initializing formal where the circularity is detected
+// when inferring the type of the constructor.
+//
+// The compiler should generate an error message and it should be properly
+// formatted including offset and length of the constructor.
+var x = new C._circular(null);
+
+class C {
+  var f = new C._circular(null);
+  C._circular(this.f);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.textual_outline.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.textual_outline.expect
new file mode 100644
index 0000000..9252577
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+var x = new C._circular(null);
+
+class C {
+  var f = new C._circular(null);
+  C._circular(this.f);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9e8e7de
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class C {
+  C._circular(this.f);
+  var f = new C._circular(null);
+}
+
+main() {}
+var x = new C._circular(null);
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.expect
new file mode 100644
index 0000000..05caab1
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:11:25: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+//  - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+// var x = new C._circular(null);
+//                         ^
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:14:27: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+//  - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+//   var f = new C._circular(null);
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field self::C f = new self::C::_circular(invalid-expression "pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:14:27: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+ - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+  var f = new C._circular(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} self::C);
+  constructor _circular(self::C f) → self::C
+    : self::C::f = f, super core::Object::•()
+    ;
+}
+static field self::C x = new self::C::_circular(invalid-expression "pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:11:25: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+ - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+var x = new C._circular(null);
+                        ^" in null as{TypeError,ForNonNullableByDefault} self::C);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.modular.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.modular.expect
new file mode 100644
index 0000000..05caab1
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.modular.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:11:25: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+//  - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+// var x = new C._circular(null);
+//                         ^
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:14:27: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+//  - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+//   var f = new C._circular(null);
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field self::C f = new self::C::_circular(invalid-expression "pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:14:27: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+ - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+  var f = new C._circular(null);
+                          ^" in null as{TypeError,ForNonNullableByDefault} self::C);
+  constructor _circular(self::C f) → self::C
+    : self::C::f = f, super core::Object::•()
+    ;
+}
+static field self::C x = new self::C::_circular(invalid-expression "pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:11:25: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+ - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+var x = new C._circular(null);
+                        ^" in null as{TypeError,ForNonNullableByDefault} self::C);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.outline.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.outline.expect
new file mode 100644
index 0000000..987eea8
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.outline.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field self::C f;
+  constructor _circular(self::C f) → self::C
+    ;
+}
+static field self::C x;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.transformed.expect
new file mode 100644
index 0000000..dbb419c
--- /dev/null
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart.weak.transformed.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+//   C._circular(this.f);
+//   ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:11:25: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+//  - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+// var x = new C._circular(null);
+//                         ^
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:14:27: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+//  - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+//   var f = new C._circular(null);
+//                           ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field self::C f = new self::C::_circular(invalid-expression "pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:14:27: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+ - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+  var f = new C._circular(null);
+                          ^" in null);
+  constructor _circular(self::C f) → self::C
+    : self::C::f = f, super core::Object::•()
+    ;
+}
+static field self::C x = new self::C::_circular(invalid-expression "pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart:11:25: Error: The value 'null' can't be assigned to the parameter type 'C' because 'C' is not nullable.
+ - 'C' is from 'pkg/front_end/testcases/general/circularity-via-initializing-formal2.dart'.
+var x = new C._circular(null);
+                        ^" in null);
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/classes.dart b/pkg/front_end/testcases/general/classes.dart
index a313cd6..1536904 100644
--- a/pkg/front_end/testcases/general/classes.dart
+++ b/pkg/front_end/testcases/general/classes.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 A {
   final int x;
   final int y;
diff --git a/pkg/front_end/testcases/general/classes.dart.textual_outline.expect b/pkg/front_end/testcases/general/classes.dart.textual_outline.expect
index ab6ce24..db9b2ee 100644
--- a/pkg/front_end/testcases/general/classes.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/classes.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   final int x;
   final int y;
diff --git a/pkg/front_end/testcases/general/classes.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/classes.dart.textual_outline_modelled.expect
index 385bce7..6b4696f 100644
--- a/pkg/front_end/testcases/general/classes.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/classes.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(this.y) : x = 42;
   final int x;
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.expect b/pkg/front_end/testcases/general/classes.dart.weak.expect
index 288e237..1ce50ca 100644
--- a/pkg/front_end/testcases/general/classes.dart.weak.expect
+++ b/pkg/front_end/testcases/general/classes.dart.weak.expect
@@ -1,41 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •(core::int* y) → self::A*
+  final field core::int x;
+  final field core::int y;
+  constructor •(core::int y) → self::A
     : self::A::y = y, self::A::x = 42, super core::Object::•()
     ;
   method method() → dynamic {
-    core::print("A.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print("A.method x: ${this.{self::A::x}{core::int}} y: ${this.{self::A::y}{core::int}}");
     core::print(this);
-    core::print(this.{self::A::runtimeType}{core::Type*});
+    core::print(this.{core::Object::runtimeType}{core::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
 }
 class B extends self::A {
-  constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
+  constructor •(dynamic x) → self::B
+    : super self::A::•(x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
     ;
   method method() → dynamic {
-    core::print("B.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print("B.method x: ${this.{self::A::x}{core::int}} y: ${this.{self::A::y}{core::int}}");
     super.{self::A::method}();
   }
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•(87);
-  self::B* b = new self::B::•(117);
-  a.{self::A::method}(){() →* dynamic};
-  b.{self::B::method}(){() →* dynamic};
+  self::A a = new self::A::•(87);
+  self::B b = new self::B::•(117);
+  a.{self::A::method}(){() → dynamic};
+  b.{self::B::method}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.modular.expect b/pkg/front_end/testcases/general/classes.dart.weak.modular.expect
index 288e237..1ce50ca 100644
--- a/pkg/front_end/testcases/general/classes.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/classes.dart.weak.modular.expect
@@ -1,41 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •(core::int* y) → self::A*
+  final field core::int x;
+  final field core::int y;
+  constructor •(core::int y) → self::A
     : self::A::y = y, self::A::x = 42, super core::Object::•()
     ;
   method method() → dynamic {
-    core::print("A.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print("A.method x: ${this.{self::A::x}{core::int}} y: ${this.{self::A::y}{core::int}}");
     core::print(this);
-    core::print(this.{self::A::runtimeType}{core::Type*});
+    core::print(this.{core::Object::runtimeType}{core::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
 }
 class B extends self::A {
-  constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
+  constructor •(dynamic x) → self::B
+    : super self::A::•(x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
     ;
   method method() → dynamic {
-    core::print("B.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print("B.method x: ${this.{self::A::x}{core::int}} y: ${this.{self::A::y}{core::int}}");
     super.{self::A::method}();
   }
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•(87);
-  self::B* b = new self::B::•(117);
-  a.{self::A::method}(){() →* dynamic};
-  b.{self::B::method}(){() →* dynamic};
+  self::A a = new self::A::•(87);
+  self::B b = new self::B::•(117);
+  a.{self::A::method}(){() → dynamic};
+  b.{self::B::method}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.outline.expect b/pkg/front_end/testcases/general/classes.dart.weak.outline.expect
index 6973fa9..c431efd 100644
--- a/pkg/front_end/testcases/general/classes.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/classes.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •(core::int* y) → self::A*
+  final field core::int x;
+  final field core::int y;
+  constructor •(core::int y) → self::A
     ;
   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 B extends self::A {
-  constructor •(dynamic x) → self::B*
+  constructor •(dynamic x) → self::B
     ;
   method method() → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect b/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect
index 288e237..1ce50ca 100644
--- a/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/classes.dart.weak.transformed.expect
@@ -1,41 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •(core::int* y) → self::A*
+  final field core::int x;
+  final field core::int y;
+  constructor •(core::int y) → self::A
     : self::A::y = y, self::A::x = 42, super core::Object::•()
     ;
   method method() → dynamic {
-    core::print("A.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print("A.method x: ${this.{self::A::x}{core::int}} y: ${this.{self::A::y}{core::int}}");
     core::print(this);
-    core::print(this.{self::A::runtimeType}{core::Type*});
+    core::print(this.{core::Object::runtimeType}{core::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
 }
 class B extends self::A {
-  constructor •(dynamic x) → self::B*
-    : super self::A::•(x as{TypeError,ForDynamic} core::int*)
+  constructor •(dynamic x) → self::B
+    : super self::A::•(x as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
     ;
   method method() → dynamic {
-    core::print("B.method x: ${this.{self::A::x}{core::int*}} y: ${this.{self::A::y}{core::int*}}");
+    core::print("B.method x: ${this.{self::A::x}{core::int}} y: ${this.{self::A::y}{core::int}}");
     super.{self::A::method}();
   }
 }
 static method main() → dynamic {
-  self::A* a = new self::A::•(87);
-  self::B* b = new self::B::•(117);
-  a.{self::A::method}(){() →* dynamic};
-  b.{self::B::method}(){() →* dynamic};
+  self::A a = new self::A::•(87);
+  self::B b = new self::B::•(117);
+  a.{self::A::method}(){() → dynamic};
+  b.{self::B::method}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart b/pkg/front_end/testcases/general/clone_function_type.dart
index e8b603f..e96b111 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart
+++ b/pkg/front_end/testcases/general/clone_function_type.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
+
 // In the classes below the function type is cloned when the anonymous mixin
 // application is desugared into a named mixin application, in order to re-bind
 // the type builders for its subterms.
@@ -171,88 +171,88 @@
 // its factories, including the bounds that are type builders.
 
 class Af1<X extends Function(int)> {
-  factory Af1.foo() => null;
+  factory Af1.foo() => throw '';
 }
 
 class Bf1<X extends Function(int x)> {
-  factory Bf1.foo() => null;
+  factory Bf1.foo() => throw '';
 }
 
 class Cf1<X extends int Function()> {
-  factory Cf1.foo() => null;
+  factory Cf1.foo() => throw '';
 }
 
 class Df1<X extends Function()> {
-  factory Df1.foo() => null;
+  factory Df1.foo() => throw '';
 }
 
 // Compile-time error: Named parameters should have names.
 class Ef1<X extends Function({int})> {
-  factory Ef1.foo() => null;
+  factory Ef1.foo() => throw '';
 }
 
 class Ff1<X extends Function({int x})> {
-  factory Ff1.foo() => null;
+  factory Ff1.foo() => throw '';
 }
 
 class Gf1<X extends Function([int])> {
-  factory Gf1.foo() => null;
+  factory Gf1.foo() => throw '';
 }
 
 class Hf1<X extends Function([int x])> {
-  factory Hf1.foo() => null;
+  factory Hf1.foo() => throw '';
 }
 
 class If1<X extends Function> {
-  factory If1.foo() => null;
+  factory If1.foo() => throw '';
 }
 
 class Jf1<X extends Function(Function Function)> {
-  factory Jf1.foo() => null;
+  factory Jf1.foo() => throw '';
 }
 
 class Kf1<X extends Function(Function Function() Function) Function()> {
-  factory Kf1.foo() => null;
+  factory Kf1.foo() => throw '';
 }
 
 class Bf2<X extends TdB> {
-  factory Bf2.foo() => null;
+  factory Bf2.foo() => throw '';
 }
 
 class Cf2<X extends TdC> {
-  factory Cf2.foo() => null;
+  factory Cf2.foo() => throw '';
 }
 
 class Df2<X extends TdD> {
-  factory Df2.foo() => null;
+  factory Df2.foo() => throw '';
 }
 
 class Ef2<X extends TdE> {
-  factory Ef2.foo() => null;
+  factory Ef2.foo() => throw '';
 }
 
 class Ff2<X extends TdF> {
-  factory Ff2.foo() => null;
+  factory Ff2.foo() => throw '';
 }
 
 class Gf2<X extends TdG> {
-  factory Gf2.foo() => null;
+  factory Gf2.foo() => throw '';
 }
 
 class Hf2<X extends TdH> {
-  factory Hf2.foo() => null;
+  factory Hf2.foo() => throw '';
 }
 
 class If2<X extends TdI> {
-  factory If2.foo() => null;
+  factory If2.foo() => throw '';
 }
 
 class Jf2<X extends TdJ> {
-  factory Jf2.foo() => null;
+  factory Jf2.foo() => throw '';
 }
 
 class Kf2<X extends TdK> {
-  factory Kf2.foo() => null;
+  factory Kf2.foo() => throw '';
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/clone_function_type.dart.textual_outline.expect
index 84a2a60..dd4222c 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Am1<X, Y> {}
 class Bm1<Z> extends Object with Am1<Function(int), Z> {}
 class Cm1<Z> extends Object with Am1<Function(int x), Z> {}
@@ -67,66 +66,66 @@
 class Jm3<Z> extends Object with Am3<TdJ, Z> {}
 class Km3<Z> extends Object with Am3<TdK, Z> {}
 class Af1<X extends Function(int)> {
-  factory Af1.foo() => null;
+  factory Af1.foo() => throw '';
 }
 class Bf1<X extends Function(int x)> {
-  factory Bf1.foo() => null;
+  factory Bf1.foo() => throw '';
 }
 class Cf1<X extends int Function()> {
-  factory Cf1.foo() => null;
+  factory Cf1.foo() => throw '';
 }
 class Df1<X extends Function()> {
-  factory Df1.foo() => null;
+  factory Df1.foo() => throw '';
 }
 class Ef1<X extends Function({int})> {
-  factory Ef1.foo() => null;
+  factory Ef1.foo() => throw '';
 }
 class Ff1<X extends Function({int x})> {
-  factory Ff1.foo() => null;
+  factory Ff1.foo() => throw '';
 }
 class Gf1<X extends Function([int])> {
-  factory Gf1.foo() => null;
+  factory Gf1.foo() => throw '';
 }
 class Hf1<X extends Function([int x])> {
-  factory Hf1.foo() => null;
+  factory Hf1.foo() => throw '';
 }
 class If1<X extends Function> {
-  factory If1.foo() => null;
+  factory If1.foo() => throw '';
 }
 class Jf1<X extends Function(Function Function)> {
-  factory Jf1.foo() => null;
+  factory Jf1.foo() => throw '';
 }
 class Kf1<X extends Function(Function Function() Function) Function()> {
-  factory Kf1.foo() => null;
+  factory Kf1.foo() => throw '';
 }
 class Bf2<X extends TdB> {
-  factory Bf2.foo() => null;
+  factory Bf2.foo() => throw '';
 }
 class Cf2<X extends TdC> {
-  factory Cf2.foo() => null;
+  factory Cf2.foo() => throw '';
 }
 class Df2<X extends TdD> {
-  factory Df2.foo() => null;
+  factory Df2.foo() => throw '';
 }
 class Ef2<X extends TdE> {
-  factory Ef2.foo() => null;
+  factory Ef2.foo() => throw '';
 }
 class Ff2<X extends TdF> {
-  factory Ff2.foo() => null;
+  factory Ff2.foo() => throw '';
 }
 class Gf2<X extends TdG> {
-  factory Gf2.foo() => null;
+  factory Gf2.foo() => throw '';
 }
 class Hf2<X extends TdH> {
-  factory Hf2.foo() => null;
+  factory Hf2.foo() => throw '';
 }
 class If2<X extends TdI> {
-  factory If2.foo() => null;
+  factory If2.foo() => throw '';
 }
 class Jf2<X extends TdJ> {
-  factory Jf2.foo() => null;
+  factory Jf2.foo() => throw '';
 }
 class Kf2<X extends TdK> {
-  factory Kf2.foo() => null;
+  factory Kf2.foo() => throw '';
 }
 main() {}
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect
index 7453dc4..17fbc7c 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,1323 +103,543 @@
 import self as self;
 import "dart:core" as core;
 
-typedef TdB = (core::int*) →* dynamic;
-typedef TdC = (core::int*) →* dynamic;
-typedef TdD = () →* core::int*;
-typedef TdE = () →* dynamic;
-typedef TdF = () →* dynamic;
-typedef TdG = ({x: core::int*}) →* dynamic;
-typedef TdH = ([core::int*]) →* dynamic;
-typedef TdI = ([core::int*]) →* dynamic;
-typedef TdJ = (core::Function*) →* dynamic;
-typedef TdK = () →* (() →* core::Function*) →* dynamic;
-class Am1<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am1<self::Am1::X*, self::Am1::Y*>*
+typedef TdB = (core::int) → dynamic;
+typedef TdC = (core::int) → dynamic;
+typedef TdD = () → core::int;
+typedef TdE = () → dynamic;
+typedef TdF = () → dynamic;
+typedef TdG = ({x: core::int}) → dynamic;
+typedef TdH = ([core::int]) → dynamic;
+typedef TdI = ([core::int]) → dynamic;
+typedef TdJ = (core::Function) → dynamic;
+typedef TdK = () → (() → core::Function) → dynamic;
+class Am1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am1<self::Am1::X%, self::Am1::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
 }
-abstract class _Bm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Bm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z*>*
+abstract class _Bm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Bm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm1<Z extends core::Object* = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z*> {
-  synthetic constructor •() → self::Bm1<self::Bm1::Z*>*
+class Bm1<Z extends core::Object? = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z%> {
+  synthetic constructor •() → self::Bm1<self::Bm1::Z%>
     : super self::_Bm1&Object&Am1::•()
     ;
 }
-abstract class _Cm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Cm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z*>*
+abstract class _Cm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Cm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm1<Z extends core::Object* = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z*> {
-  synthetic constructor •() → self::Cm1<self::Cm1::Z*>*
+class Cm1<Z extends core::Object? = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z%> {
+  synthetic constructor •() → self::Cm1<self::Cm1::Z%>
     : super self::_Cm1&Object&Am1::•()
     ;
 }
-abstract class _Dm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::_Dm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z*>*
+abstract class _Dm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::_Dm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm1<Z extends core::Object* = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z*> {
-  synthetic constructor •() → self::Dm1<self::Dm1::Z*>*
+class Dm1<Z extends core::Object? = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z%> {
+  synthetic constructor •() → self::Dm1<self::Dm1::Z%>
     : super self::_Dm1&Object&Am1::•()
     ;
 }
-abstract class _Em1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Em1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z*>*
+abstract class _Em1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Em1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em1<Z extends core::Object* = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z*> {
-  synthetic constructor •() → self::Em1<self::Em1::Z*>*
+class Em1<Z extends core::Object? = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z%> {
+  synthetic constructor •() → self::Em1<self::Em1::Z%>
     : super self::_Em1&Object&Am1::•()
     ;
 }
-abstract class _Fm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Fm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z*>*
+abstract class _Fm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Fm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm1<Z extends core::Object* = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z*> {
-  synthetic constructor •() → self::Fm1<self::Fm1::Z*>*
+class Fm1<Z extends core::Object? = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z%> {
+  synthetic constructor •() → self::Fm1<self::Fm1::Z%>
     : super self::_Fm1&Object&Am1::•()
     ;
 }
-abstract class _Gm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::_Gm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z*>*
+abstract class _Gm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::_Gm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm1<Z extends core::Object* = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z*> {
-  synthetic constructor •() → self::Gm1<self::Gm1::Z*>*
+class Gm1<Z extends core::Object? = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z%> {
+  synthetic constructor •() → self::Gm1<self::Gm1::Z%>
     : super self::_Gm1&Object&Am1::•()
     ;
 }
-abstract class _Hm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Hm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z*>*
+abstract class _Hm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Hm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm1<Z extends core::Object* = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z*> {
-  synthetic constructor •() → self::Hm1<self::Hm1::Z*>*
+class Hm1<Z extends core::Object? = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z%> {
+  synthetic constructor •() → self::Hm1<self::Hm1::Z%>
     : super self::_Hm1&Object&Am1::•()
     ;
 }
-abstract class _Im1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Im1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z*>*
+abstract class _Im1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Im1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im1<Z extends core::Object* = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z*> {
-  synthetic constructor •() → self::Im1<self::Im1::Z*>*
+class Im1<Z extends core::Object? = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z%> {
+  synthetic constructor •() → self::Im1<self::Im1::Z%>
     : super self::_Im1&Object&Am1::•()
     ;
 }
-abstract class _Jm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::_Jm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z*>*
+abstract class _Jm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::_Jm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm1<Z extends core::Object* = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z*> {
-  synthetic constructor •() → self::Jm1<self::Jm1::Z*>*
+class Jm1<Z extends core::Object? = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z%> {
+  synthetic constructor •() → self::Jm1<self::Jm1::Z%>
     : super self::_Jm1&Object&Am1::•()
     ;
 }
-abstract class _Km1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::_Km1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z*>*
+abstract class _Km1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::_Km1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km1<Z extends core::Object* = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z*> {
-  synthetic constructor •() → self::Km1<self::Km1::Z*>*
+class Km1<Z extends core::Object? = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z%> {
+  synthetic constructor •() → self::Km1<self::Km1::Z%>
     : super self::_Km1&Object&Am1::•()
     ;
 }
-abstract class _Lm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::_Lm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z*>*
+abstract class _Lm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::_Lm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm1<Z extends core::Object* = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z*> {
-  synthetic constructor •() → self::Lm1<self::Lm1::Z*>*
+class Lm1<Z extends core::Object? = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z%> {
+  synthetic constructor •() → self::Lm1<self::Lm1::Z%>
     : super self::_Lm1&Object&Am1::•()
     ;
 }
-class Mm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Mm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm1<self::Mm1::Z*>*
+class Mm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Mm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm1<self::Mm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Nm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm1<self::Nm1::Z*>*
+class Nm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Nm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm1<self::Nm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::Om1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om1<self::Om1::Z*>*
+class Om1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::Om1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om1<self::Om1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Pm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm1<self::Pm1::Z*>*
+class Pm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Pm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm1<self::Pm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Qm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm1<self::Qm1::Z*>*
+class Qm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Qm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm1<self::Qm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::Rm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm1<self::Rm1::Z*>*
+class Rm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::Rm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm1<self::Rm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Sm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm1<self::Sm1::Z*>*
+class Sm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Sm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm1<self::Sm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Tm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm1<self::Tm1::Z*>*
+class Tm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Tm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm1<self::Tm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::Um1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um1<self::Um1::Z*>*
+class Um1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::Um1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um1<self::Um1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::Vm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm1<self::Vm1::Z*>*
+class Vm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::Vm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm1<self::Vm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::Wm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm1<self::Wm1::Z*>*
+class Wm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::Wm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm1<self::Wm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am2<X extends () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
+class Am2<X extends () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am2<self::Am2::X, self::Am2::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
 }
-abstract class _Bm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Bm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z*>*
+abstract class _Bm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Bm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm2<Z extends core::Object* = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z*> {
-  synthetic constructor •() → self::Bm2<self::Bm2::Z*>*
+class Bm2<Z extends core::Object? = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z%> {
+  synthetic constructor •() → self::Bm2<self::Bm2::Z%>
     : super self::_Bm2&Object&Am2::•()
     ;
 }
-abstract class _Cm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Cm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z*>*
+abstract class _Cm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Cm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm2<Z extends core::Object* = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z*> {
-  synthetic constructor •() → self::Cm2<self::Cm2::Z*>*
+class Cm2<Z extends core::Object? = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z%> {
+  synthetic constructor •() → self::Cm2<self::Cm2::Z%>
     : super self::_Cm2&Object&Am2::•()
     ;
 }
-abstract class _Dm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::_Dm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z*>*
+abstract class _Dm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::_Dm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm2<Z extends core::Object* = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z*> {
-  synthetic constructor •() → self::Dm2<self::Dm2::Z*>*
+class Dm2<Z extends core::Object? = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z%> {
+  synthetic constructor •() → self::Dm2<self::Dm2::Z%>
     : super self::_Dm2&Object&Am2::•()
     ;
 }
-abstract class _Em2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Em2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z*>*
+abstract class _Em2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Em2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em2<Z extends core::Object* = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z*> {
-  synthetic constructor •() → self::Em2<self::Em2::Z*>*
+class Em2<Z extends core::Object? = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z%> {
+  synthetic constructor •() → self::Em2<self::Em2::Z%>
     : super self::_Em2&Object&Am2::•()
     ;
 }
-abstract class _Fm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Fm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z*>*
+abstract class _Fm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Fm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm2<Z extends core::Object* = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z*> {
-  synthetic constructor •() → self::Fm2<self::Fm2::Z*>*
+class Fm2<Z extends core::Object? = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z%> {
+  synthetic constructor •() → self::Fm2<self::Fm2::Z%>
     : super self::_Fm2&Object&Am2::•()
     ;
 }
-abstract class _Gm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::_Gm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z*>*
+abstract class _Gm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::_Gm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm2<Z extends core::Object* = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z*> {
-  synthetic constructor •() → self::Gm2<self::Gm2::Z*>*
+class Gm2<Z extends core::Object? = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z%> {
+  synthetic constructor •() → self::Gm2<self::Gm2::Z%>
     : super self::_Gm2&Object&Am2::•()
     ;
 }
-abstract class _Hm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Hm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z*>*
+abstract class _Hm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Hm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm2<Z extends core::Object* = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z*> {
-  synthetic constructor •() → self::Hm2<self::Hm2::Z*>*
+class Hm2<Z extends core::Object? = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z%> {
+  synthetic constructor •() → self::Hm2<self::Hm2::Z%>
     : super self::_Hm2&Object&Am2::•()
     ;
 }
-abstract class _Im2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Im2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z*>*
+abstract class _Im2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Im2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im2<Z extends core::Object* = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z*> {
-  synthetic constructor •() → self::Im2<self::Im2::Z*>*
+class Im2<Z extends core::Object? = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z%> {
+  synthetic constructor •() → self::Im2<self::Im2::Z%>
     : super self::_Im2&Object&Am2::•()
     ;
 }
-abstract class _Jm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::_Jm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z*>*
+abstract class _Jm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::_Jm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm2<Z extends core::Object* = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z*> {
-  synthetic constructor •() → self::Jm2<self::Jm2::Z*>*
+class Jm2<Z extends core::Object? = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z%> {
+  synthetic constructor •() → self::Jm2<self::Jm2::Z%>
     : super self::_Jm2&Object&Am2::•()
     ;
 }
-abstract class _Km2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::_Km2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z*>*
+abstract class _Km2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::_Km2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km2<Z extends core::Object* = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z*> {
-  synthetic constructor •() → self::Km2<self::Km2::Z*>*
+class Km2<Z extends core::Object? = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z%> {
+  synthetic constructor •() → self::Km2<self::Km2::Z%>
     : super self::_Km2&Object&Am2::•()
     ;
 }
-abstract class _Lm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::_Lm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z*>*
+abstract class _Lm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::_Lm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm2<Z extends core::Object* = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z*> {
-  synthetic constructor •() → self::Lm2<self::Lm2::Z*>*
+class Lm2<Z extends core::Object? = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z%> {
+  synthetic constructor •() → self::Lm2<self::Lm2::Z%>
     : super self::_Lm2&Object&Am2::•()
     ;
 }
-class Mm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Mm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm2<self::Mm2::Z*>*
+class Mm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Mm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm2<self::Mm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Nm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm2<self::Nm2::Z*>*
+class Nm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Nm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm2<self::Nm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::Om2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om2<self::Om2::Z*>*
+class Om2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::Om2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om2<self::Om2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Pm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm2<self::Pm2::Z*>*
+class Pm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Pm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm2<self::Pm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Qm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm2<self::Qm2::Z*>*
+class Qm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Qm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm2<self::Qm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::Rm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm2<self::Rm2::Z*>*
+class Rm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::Rm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm2<self::Rm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Sm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm2<self::Sm2::Z*>*
+class Sm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Sm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm2<self::Sm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Tm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm2<self::Tm2::Z*>*
+class Tm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Tm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm2<self::Tm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::Um2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um2<self::Um2::Z*>*
+class Um2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::Um2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um2<self::Um2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::Vm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm2<self::Vm2::Z*>*
+class Vm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::Vm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm2<self::Vm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::Wm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm2<self::Wm2::Z*>*
+class Wm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::Wm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm2<self::Wm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am3<L extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am3<self::Am3::L*, self::Am3::Y*>*
+class Am3<L extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am3<self::Am3::L%, self::Am3::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
 }
-abstract class _Bm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Bm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z*>*
+abstract class _Bm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Bm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm3<Z extends core::Object* = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z*> {
-  synthetic constructor •() → self::Bm3<self::Bm3::Z*>*
+class Bm3<Z extends core::Object? = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z%> {
+  synthetic constructor •() → self::Bm3<self::Bm3::Z%>
     : super self::_Bm3&Object&Am3::•()
     ;
 }
-abstract class _Cm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Cm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z*>*
+abstract class _Cm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Cm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm3<Z extends core::Object* = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z*> {
-  synthetic constructor •() → self::Cm3<self::Cm3::Z*>*
+class Cm3<Z extends core::Object? = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z%> {
+  synthetic constructor •() → self::Cm3<self::Cm3::Z%>
     : super self::_Cm3&Object&Am3::•()
     ;
 }
-abstract class _Dm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* core::int*, self::_Dm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z*>*
+abstract class _Dm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → core::int, self::_Dm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm3<Z extends core::Object* = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z*> {
-  synthetic constructor •() → self::Dm3<self::Dm3::Z*>*
+class Dm3<Z extends core::Object? = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z%> {
+  synthetic constructor •() → self::Dm3<self::Dm3::Z%>
     : super self::_Dm3&Object&Am3::•()
     ;
 }
-abstract class _Em3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Em3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z*>*
+abstract class _Em3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Em3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em3<Z extends core::Object* = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z*> {
-  synthetic constructor •() → self::Em3<self::Em3::Z*>*
+class Em3<Z extends core::Object? = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z%> {
+  synthetic constructor •() → self::Em3<self::Em3::Z%>
     : super self::_Em3&Object&Am3::•()
     ;
 }
-abstract class _Fm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Fm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z*>*
+abstract class _Fm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Fm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm3<Z extends core::Object* = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z*> {
-  synthetic constructor •() → self::Fm3<self::Fm3::Z*>*
+class Fm3<Z extends core::Object? = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z%> {
+  synthetic constructor •() → self::Fm3<self::Fm3::Z%>
     : super self::_Fm3&Object&Am3::•()
     ;
 }
-abstract class _Gm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<({x: core::int*}) →* dynamic, self::_Gm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z*>*
+abstract class _Gm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<({x: core::int}) → dynamic, self::_Gm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm3<Z extends core::Object* = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z*> {
-  synthetic constructor •() → self::Gm3<self::Gm3::Z*>*
+class Gm3<Z extends core::Object? = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z%> {
+  synthetic constructor •() → self::Gm3<self::Gm3::Z%>
     : super self::_Gm3&Object&Am3::•()
     ;
 }
-abstract class _Hm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Hm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z*>*
+abstract class _Hm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Hm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm3<Z extends core::Object* = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z*> {
-  synthetic constructor •() → self::Hm3<self::Hm3::Z*>*
+class Hm3<Z extends core::Object? = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z%> {
+  synthetic constructor •() → self::Hm3<self::Hm3::Z%>
     : super self::_Hm3&Object&Am3::•()
     ;
 }
-abstract class _Im3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Im3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z*>*
+abstract class _Im3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Im3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im3<Z extends core::Object* = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z*> {
-  synthetic constructor •() → self::Im3<self::Im3::Z*>*
+class Im3<Z extends core::Object? = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z%> {
+  synthetic constructor •() → self::Im3<self::Im3::Z%>
     : super self::_Im3&Object&Am3::•()
     ;
 }
-abstract class _Jm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::Function*) →* dynamic, self::_Jm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z*>*
+abstract class _Jm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::Function) → dynamic, self::_Jm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm3<Z extends core::Object* = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z*> {
-  synthetic constructor •() → self::Jm3<self::Jm3::Z*>*
+class Jm3<Z extends core::Object? = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z%> {
+  synthetic constructor •() → self::Jm3<self::Jm3::Z%>
     : super self::_Jm3&Object&Am3::•()
     ;
 }
-abstract class _Km3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* (() →* core::Function*) →* dynamic, self::_Km3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z*>*
+abstract class _Km3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → (() → core::Function) → dynamic, self::_Km3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km3<Z extends core::Object* = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z*> {
-  synthetic constructor •() → self::Km3<self::Km3::Z*>*
+class Km3<Z extends core::Object? = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z%> {
+  synthetic constructor •() → self::Km3<self::Km3::Z%>
     : super self::_Km3&Object&Am3::•()
     ;
 }
-class Af1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Af1<self::Af1::foo::X*>*
-    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
+class Af1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Af1<self::Af1::foo::X>
+    return throw "";
 }
-class Bf1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf1<self::Bf1::foo::X*>*
-    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
+class Bf1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf1<self::Bf1::foo::X>
+    return throw "";
 }
-class Cf1<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Cf1<self::Cf1::foo::X*>*
-    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
+class Cf1<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Cf1<self::Cf1::foo::X>
+    return throw "";
 }
-class Df1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Df1<self::Df1::foo::X*>*
-    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
+class Df1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Df1<self::Df1::foo::X>
+    return throw "";
 }
-class Ef1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef1<self::Ef1::foo::X*>*
-    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
+class Ef1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef1<self::Ef1::foo::X>
+    return throw "";
 }
-class Ff1<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Ff1<self::Ff1::foo::X*>*
-    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
+class Ff1<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Ff1<self::Ff1::foo::X>
+    return throw "";
 }
-class Gf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Gf1<self::Gf1::foo::X*>*
-    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
+class Gf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Gf1<self::Gf1::foo::X>
+    return throw "";
 }
-class Hf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf1<self::Hf1::foo::X*>*
-    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
+class Hf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf1<self::Hf1::foo::X>
+    return throw "";
 }
-class If1<X extends core::Function*> extends core::Object {
-  static factory foo<X extends core::Function*>() → self::If1<self::If1::foo::X*>*
-    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
+class If1<X extends core::Function> extends core::Object {
+  static factory foo<X extends core::Function>() → self::If1<self::If1::foo::X>
+    return throw "";
 }
-class Jf1<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf1<self::Jf1::foo::X*>*
-    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
+class Jf1<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf1<self::Jf1::foo::X>
+    return throw "";
 }
-class Kf1<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf1<self::Kf1::foo::X*>*
-    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
+class Kf1<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf1<self::Kf1::foo::X>
+    return throw "";
 }
-class Bf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf2<self::Bf2::foo::X*>*
-    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
+class Bf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf2<self::Bf2::foo::X>
+    return throw "";
 }
-class Cf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Cf2<self::Cf2::foo::X*>*
-    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
+class Cf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Cf2<self::Cf2::foo::X>
+    return throw "";
 }
-class Df2<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Df2<self::Df2::foo::X*>*
-    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
+class Df2<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Df2<self::Df2::foo::X>
+    return throw "";
 }
-class Ef2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef2<self::Ef2::foo::X*>*
-    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
+class Ef2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef2<self::Ef2::foo::X>
+    return throw "";
 }
-class Ff2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ff2<self::Ff2::foo::X*>*
-    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
+class Ff2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ff2<self::Ff2::foo::X>
+    return throw "";
 }
-class Gf2<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Gf2<self::Gf2::foo::X*>*
-    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
+class Gf2<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Gf2<self::Gf2::foo::X>
+    return throw "";
 }
-class Hf2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf2<self::Hf2::foo::X*>*
-    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
+class Hf2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf2<self::Hf2::foo::X>
+    return throw "";
 }
-class If2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::If2<self::If2::foo::X*>*
-    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
+class If2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::If2<self::If2::foo::X>
+    return throw "";
 }
-class Jf2<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf2<self::Jf2::foo::X*>*
-    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
+class Jf2<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf2<self::Jf2::foo::X>
+    return throw "";
 }
-class Kf2<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf2<self::Kf2::foo::X*>*
-    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
+class Kf2<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf2<self::Kf2::foo::X>
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
index 7453dc4..17fbc7c 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,1323 +103,543 @@
 import self as self;
 import "dart:core" as core;
 
-typedef TdB = (core::int*) →* dynamic;
-typedef TdC = (core::int*) →* dynamic;
-typedef TdD = () →* core::int*;
-typedef TdE = () →* dynamic;
-typedef TdF = () →* dynamic;
-typedef TdG = ({x: core::int*}) →* dynamic;
-typedef TdH = ([core::int*]) →* dynamic;
-typedef TdI = ([core::int*]) →* dynamic;
-typedef TdJ = (core::Function*) →* dynamic;
-typedef TdK = () →* (() →* core::Function*) →* dynamic;
-class Am1<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am1<self::Am1::X*, self::Am1::Y*>*
+typedef TdB = (core::int) → dynamic;
+typedef TdC = (core::int) → dynamic;
+typedef TdD = () → core::int;
+typedef TdE = () → dynamic;
+typedef TdF = () → dynamic;
+typedef TdG = ({x: core::int}) → dynamic;
+typedef TdH = ([core::int]) → dynamic;
+typedef TdI = ([core::int]) → dynamic;
+typedef TdJ = (core::Function) → dynamic;
+typedef TdK = () → (() → core::Function) → dynamic;
+class Am1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am1<self::Am1::X%, self::Am1::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
 }
-abstract class _Bm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Bm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z*>*
+abstract class _Bm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Bm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm1<Z extends core::Object* = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z*> {
-  synthetic constructor •() → self::Bm1<self::Bm1::Z*>*
+class Bm1<Z extends core::Object? = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z%> {
+  synthetic constructor •() → self::Bm1<self::Bm1::Z%>
     : super self::_Bm1&Object&Am1::•()
     ;
 }
-abstract class _Cm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Cm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z*>*
+abstract class _Cm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Cm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm1<Z extends core::Object* = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z*> {
-  synthetic constructor •() → self::Cm1<self::Cm1::Z*>*
+class Cm1<Z extends core::Object? = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z%> {
+  synthetic constructor •() → self::Cm1<self::Cm1::Z%>
     : super self::_Cm1&Object&Am1::•()
     ;
 }
-abstract class _Dm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::_Dm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z*>*
+abstract class _Dm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::_Dm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm1<Z extends core::Object* = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z*> {
-  synthetic constructor •() → self::Dm1<self::Dm1::Z*>*
+class Dm1<Z extends core::Object? = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z%> {
+  synthetic constructor •() → self::Dm1<self::Dm1::Z%>
     : super self::_Dm1&Object&Am1::•()
     ;
 }
-abstract class _Em1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Em1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z*>*
+abstract class _Em1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Em1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em1<Z extends core::Object* = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z*> {
-  synthetic constructor •() → self::Em1<self::Em1::Z*>*
+class Em1<Z extends core::Object? = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z%> {
+  synthetic constructor •() → self::Em1<self::Em1::Z%>
     : super self::_Em1&Object&Am1::•()
     ;
 }
-abstract class _Fm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Fm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z*>*
+abstract class _Fm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Fm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm1<Z extends core::Object* = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z*> {
-  synthetic constructor •() → self::Fm1<self::Fm1::Z*>*
+class Fm1<Z extends core::Object? = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z%> {
+  synthetic constructor •() → self::Fm1<self::Fm1::Z%>
     : super self::_Fm1&Object&Am1::•()
     ;
 }
-abstract class _Gm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::_Gm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z*>*
+abstract class _Gm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::_Gm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm1<Z extends core::Object* = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z*> {
-  synthetic constructor •() → self::Gm1<self::Gm1::Z*>*
+class Gm1<Z extends core::Object? = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z%> {
+  synthetic constructor •() → self::Gm1<self::Gm1::Z%>
     : super self::_Gm1&Object&Am1::•()
     ;
 }
-abstract class _Hm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Hm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z*>*
+abstract class _Hm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Hm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm1<Z extends core::Object* = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z*> {
-  synthetic constructor •() → self::Hm1<self::Hm1::Z*>*
+class Hm1<Z extends core::Object? = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z%> {
+  synthetic constructor •() → self::Hm1<self::Hm1::Z%>
     : super self::_Hm1&Object&Am1::•()
     ;
 }
-abstract class _Im1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Im1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z*>*
+abstract class _Im1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Im1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im1<Z extends core::Object* = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z*> {
-  synthetic constructor •() → self::Im1<self::Im1::Z*>*
+class Im1<Z extends core::Object? = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z%> {
+  synthetic constructor •() → self::Im1<self::Im1::Z%>
     : super self::_Im1&Object&Am1::•()
     ;
 }
-abstract class _Jm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::_Jm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z*>*
+abstract class _Jm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::_Jm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm1<Z extends core::Object* = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z*> {
-  synthetic constructor •() → self::Jm1<self::Jm1::Z*>*
+class Jm1<Z extends core::Object? = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z%> {
+  synthetic constructor •() → self::Jm1<self::Jm1::Z%>
     : super self::_Jm1&Object&Am1::•()
     ;
 }
-abstract class _Km1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::_Km1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z*>*
+abstract class _Km1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::_Km1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km1<Z extends core::Object* = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z*> {
-  synthetic constructor •() → self::Km1<self::Km1::Z*>*
+class Km1<Z extends core::Object? = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z%> {
+  synthetic constructor •() → self::Km1<self::Km1::Z%>
     : super self::_Km1&Object&Am1::•()
     ;
 }
-abstract class _Lm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::_Lm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z*>*
+abstract class _Lm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::_Lm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm1<Z extends core::Object* = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z*> {
-  synthetic constructor •() → self::Lm1<self::Lm1::Z*>*
+class Lm1<Z extends core::Object? = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z%> {
+  synthetic constructor •() → self::Lm1<self::Lm1::Z%>
     : super self::_Lm1&Object&Am1::•()
     ;
 }
-class Mm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Mm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm1<self::Mm1::Z*>*
+class Mm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Mm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm1<self::Mm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Nm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm1<self::Nm1::Z*>*
+class Nm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Nm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm1<self::Nm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::Om1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om1<self::Om1::Z*>*
+class Om1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::Om1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om1<self::Om1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Pm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm1<self::Pm1::Z*>*
+class Pm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Pm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm1<self::Pm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Qm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm1<self::Qm1::Z*>*
+class Qm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Qm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm1<self::Qm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::Rm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm1<self::Rm1::Z*>*
+class Rm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::Rm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm1<self::Rm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Sm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm1<self::Sm1::Z*>*
+class Sm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Sm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm1<self::Sm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Tm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm1<self::Tm1::Z*>*
+class Tm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Tm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm1<self::Tm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::Um1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um1<self::Um1::Z*>*
+class Um1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::Um1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um1<self::Um1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::Vm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm1<self::Vm1::Z*>*
+class Vm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::Vm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm1<self::Vm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::Wm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm1<self::Wm1::Z*>*
+class Wm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::Wm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm1<self::Wm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am2<X extends () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
+class Am2<X extends () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am2<self::Am2::X, self::Am2::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
 }
-abstract class _Bm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Bm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z*>*
+abstract class _Bm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Bm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm2<Z extends core::Object* = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z*> {
-  synthetic constructor •() → self::Bm2<self::Bm2::Z*>*
+class Bm2<Z extends core::Object? = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z%> {
+  synthetic constructor •() → self::Bm2<self::Bm2::Z%>
     : super self::_Bm2&Object&Am2::•()
     ;
 }
-abstract class _Cm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Cm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z*>*
+abstract class _Cm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Cm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm2<Z extends core::Object* = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z*> {
-  synthetic constructor •() → self::Cm2<self::Cm2::Z*>*
+class Cm2<Z extends core::Object? = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z%> {
+  synthetic constructor •() → self::Cm2<self::Cm2::Z%>
     : super self::_Cm2&Object&Am2::•()
     ;
 }
-abstract class _Dm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::_Dm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z*>*
+abstract class _Dm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::_Dm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm2<Z extends core::Object* = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z*> {
-  synthetic constructor •() → self::Dm2<self::Dm2::Z*>*
+class Dm2<Z extends core::Object? = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z%> {
+  synthetic constructor •() → self::Dm2<self::Dm2::Z%>
     : super self::_Dm2&Object&Am2::•()
     ;
 }
-abstract class _Em2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Em2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z*>*
+abstract class _Em2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Em2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em2<Z extends core::Object* = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z*> {
-  synthetic constructor •() → self::Em2<self::Em2::Z*>*
+class Em2<Z extends core::Object? = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z%> {
+  synthetic constructor •() → self::Em2<self::Em2::Z%>
     : super self::_Em2&Object&Am2::•()
     ;
 }
-abstract class _Fm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Fm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z*>*
+abstract class _Fm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Fm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm2<Z extends core::Object* = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z*> {
-  synthetic constructor •() → self::Fm2<self::Fm2::Z*>*
+class Fm2<Z extends core::Object? = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z%> {
+  synthetic constructor •() → self::Fm2<self::Fm2::Z%>
     : super self::_Fm2&Object&Am2::•()
     ;
 }
-abstract class _Gm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::_Gm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z*>*
+abstract class _Gm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::_Gm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm2<Z extends core::Object* = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z*> {
-  synthetic constructor •() → self::Gm2<self::Gm2::Z*>*
+class Gm2<Z extends core::Object? = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z%> {
+  synthetic constructor •() → self::Gm2<self::Gm2::Z%>
     : super self::_Gm2&Object&Am2::•()
     ;
 }
-abstract class _Hm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Hm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z*>*
+abstract class _Hm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Hm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm2<Z extends core::Object* = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z*> {
-  synthetic constructor •() → self::Hm2<self::Hm2::Z*>*
+class Hm2<Z extends core::Object? = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z%> {
+  synthetic constructor •() → self::Hm2<self::Hm2::Z%>
     : super self::_Hm2&Object&Am2::•()
     ;
 }
-abstract class _Im2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Im2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z*>*
+abstract class _Im2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Im2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im2<Z extends core::Object* = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z*> {
-  synthetic constructor •() → self::Im2<self::Im2::Z*>*
+class Im2<Z extends core::Object? = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z%> {
+  synthetic constructor •() → self::Im2<self::Im2::Z%>
     : super self::_Im2&Object&Am2::•()
     ;
 }
-abstract class _Jm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::_Jm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z*>*
+abstract class _Jm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::_Jm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm2<Z extends core::Object* = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z*> {
-  synthetic constructor •() → self::Jm2<self::Jm2::Z*>*
+class Jm2<Z extends core::Object? = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z%> {
+  synthetic constructor •() → self::Jm2<self::Jm2::Z%>
     : super self::_Jm2&Object&Am2::•()
     ;
 }
-abstract class _Km2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::_Km2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z*>*
+abstract class _Km2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::_Km2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km2<Z extends core::Object* = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z*> {
-  synthetic constructor •() → self::Km2<self::Km2::Z*>*
+class Km2<Z extends core::Object? = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z%> {
+  synthetic constructor •() → self::Km2<self::Km2::Z%>
     : super self::_Km2&Object&Am2::•()
     ;
 }
-abstract class _Lm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::_Lm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z*>*
+abstract class _Lm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::_Lm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm2<Z extends core::Object* = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z*> {
-  synthetic constructor •() → self::Lm2<self::Lm2::Z*>*
+class Lm2<Z extends core::Object? = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z%> {
+  synthetic constructor •() → self::Lm2<self::Lm2::Z%>
     : super self::_Lm2&Object&Am2::•()
     ;
 }
-class Mm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Mm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm2<self::Mm2::Z*>*
+class Mm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Mm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm2<self::Mm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Nm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm2<self::Nm2::Z*>*
+class Nm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Nm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm2<self::Nm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::Om2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om2<self::Om2::Z*>*
+class Om2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::Om2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om2<self::Om2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Pm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm2<self::Pm2::Z*>*
+class Pm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Pm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm2<self::Pm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Qm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm2<self::Qm2::Z*>*
+class Qm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Qm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm2<self::Qm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::Rm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm2<self::Rm2::Z*>*
+class Rm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::Rm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm2<self::Rm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Sm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm2<self::Sm2::Z*>*
+class Sm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Sm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm2<self::Sm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Tm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm2<self::Tm2::Z*>*
+class Tm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Tm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm2<self::Tm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::Um2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um2<self::Um2::Z*>*
+class Um2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::Um2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um2<self::Um2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::Vm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm2<self::Vm2::Z*>*
+class Vm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::Vm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm2<self::Vm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::Wm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm2<self::Wm2::Z*>*
+class Wm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::Wm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm2<self::Wm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am3<L extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am3<self::Am3::L*, self::Am3::Y*>*
+class Am3<L extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am3<self::Am3::L%, self::Am3::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
 }
-abstract class _Bm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Bm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z*>*
+abstract class _Bm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Bm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm3<Z extends core::Object* = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z*> {
-  synthetic constructor •() → self::Bm3<self::Bm3::Z*>*
+class Bm3<Z extends core::Object? = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z%> {
+  synthetic constructor •() → self::Bm3<self::Bm3::Z%>
     : super self::_Bm3&Object&Am3::•()
     ;
 }
-abstract class _Cm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Cm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z*>*
+abstract class _Cm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Cm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm3<Z extends core::Object* = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z*> {
-  synthetic constructor •() → self::Cm3<self::Cm3::Z*>*
+class Cm3<Z extends core::Object? = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z%> {
+  synthetic constructor •() → self::Cm3<self::Cm3::Z%>
     : super self::_Cm3&Object&Am3::•()
     ;
 }
-abstract class _Dm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* core::int*, self::_Dm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z*>*
+abstract class _Dm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → core::int, self::_Dm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm3<Z extends core::Object* = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z*> {
-  synthetic constructor •() → self::Dm3<self::Dm3::Z*>*
+class Dm3<Z extends core::Object? = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z%> {
+  synthetic constructor •() → self::Dm3<self::Dm3::Z%>
     : super self::_Dm3&Object&Am3::•()
     ;
 }
-abstract class _Em3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Em3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z*>*
+abstract class _Em3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Em3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em3<Z extends core::Object* = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z*> {
-  synthetic constructor •() → self::Em3<self::Em3::Z*>*
+class Em3<Z extends core::Object? = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z%> {
+  synthetic constructor •() → self::Em3<self::Em3::Z%>
     : super self::_Em3&Object&Am3::•()
     ;
 }
-abstract class _Fm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Fm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z*>*
+abstract class _Fm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Fm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm3<Z extends core::Object* = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z*> {
-  synthetic constructor •() → self::Fm3<self::Fm3::Z*>*
+class Fm3<Z extends core::Object? = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z%> {
+  synthetic constructor •() → self::Fm3<self::Fm3::Z%>
     : super self::_Fm3&Object&Am3::•()
     ;
 }
-abstract class _Gm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<({x: core::int*}) →* dynamic, self::_Gm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z*>*
+abstract class _Gm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<({x: core::int}) → dynamic, self::_Gm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm3<Z extends core::Object* = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z*> {
-  synthetic constructor •() → self::Gm3<self::Gm3::Z*>*
+class Gm3<Z extends core::Object? = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z%> {
+  synthetic constructor •() → self::Gm3<self::Gm3::Z%>
     : super self::_Gm3&Object&Am3::•()
     ;
 }
-abstract class _Hm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Hm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z*>*
+abstract class _Hm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Hm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm3<Z extends core::Object* = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z*> {
-  synthetic constructor •() → self::Hm3<self::Hm3::Z*>*
+class Hm3<Z extends core::Object? = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z%> {
+  synthetic constructor •() → self::Hm3<self::Hm3::Z%>
     : super self::_Hm3&Object&Am3::•()
     ;
 }
-abstract class _Im3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Im3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z*>*
+abstract class _Im3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Im3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im3<Z extends core::Object* = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z*> {
-  synthetic constructor •() → self::Im3<self::Im3::Z*>*
+class Im3<Z extends core::Object? = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z%> {
+  synthetic constructor •() → self::Im3<self::Im3::Z%>
     : super self::_Im3&Object&Am3::•()
     ;
 }
-abstract class _Jm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::Function*) →* dynamic, self::_Jm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z*>*
+abstract class _Jm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::Function) → dynamic, self::_Jm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm3<Z extends core::Object* = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z*> {
-  synthetic constructor •() → self::Jm3<self::Jm3::Z*>*
+class Jm3<Z extends core::Object? = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z%> {
+  synthetic constructor •() → self::Jm3<self::Jm3::Z%>
     : super self::_Jm3&Object&Am3::•()
     ;
 }
-abstract class _Km3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* (() →* core::Function*) →* dynamic, self::_Km3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z*>*
+abstract class _Km3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → (() → core::Function) → dynamic, self::_Km3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km3<Z extends core::Object* = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z*> {
-  synthetic constructor •() → self::Km3<self::Km3::Z*>*
+class Km3<Z extends core::Object? = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z%> {
+  synthetic constructor •() → self::Km3<self::Km3::Z%>
     : super self::_Km3&Object&Am3::•()
     ;
 }
-class Af1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Af1<self::Af1::foo::X*>*
-    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
+class Af1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Af1<self::Af1::foo::X>
+    return throw "";
 }
-class Bf1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf1<self::Bf1::foo::X*>*
-    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
+class Bf1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf1<self::Bf1::foo::X>
+    return throw "";
 }
-class Cf1<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Cf1<self::Cf1::foo::X*>*
-    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
+class Cf1<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Cf1<self::Cf1::foo::X>
+    return throw "";
 }
-class Df1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Df1<self::Df1::foo::X*>*
-    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
+class Df1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Df1<self::Df1::foo::X>
+    return throw "";
 }
-class Ef1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef1<self::Ef1::foo::X*>*
-    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
+class Ef1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef1<self::Ef1::foo::X>
+    return throw "";
 }
-class Ff1<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Ff1<self::Ff1::foo::X*>*
-    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
+class Ff1<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Ff1<self::Ff1::foo::X>
+    return throw "";
 }
-class Gf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Gf1<self::Gf1::foo::X*>*
-    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
+class Gf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Gf1<self::Gf1::foo::X>
+    return throw "";
 }
-class Hf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf1<self::Hf1::foo::X*>*
-    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
+class Hf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf1<self::Hf1::foo::X>
+    return throw "";
 }
-class If1<X extends core::Function*> extends core::Object {
-  static factory foo<X extends core::Function*>() → self::If1<self::If1::foo::X*>*
-    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
+class If1<X extends core::Function> extends core::Object {
+  static factory foo<X extends core::Function>() → self::If1<self::If1::foo::X>
+    return throw "";
 }
-class Jf1<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf1<self::Jf1::foo::X*>*
-    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
+class Jf1<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf1<self::Jf1::foo::X>
+    return throw "";
 }
-class Kf1<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf1<self::Kf1::foo::X*>*
-    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
+class Kf1<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf1<self::Kf1::foo::X>
+    return throw "";
 }
-class Bf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf2<self::Bf2::foo::X*>*
-    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
+class Bf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf2<self::Bf2::foo::X>
+    return throw "";
 }
-class Cf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Cf2<self::Cf2::foo::X*>*
-    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
+class Cf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Cf2<self::Cf2::foo::X>
+    return throw "";
 }
-class Df2<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Df2<self::Df2::foo::X*>*
-    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
+class Df2<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Df2<self::Df2::foo::X>
+    return throw "";
 }
-class Ef2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef2<self::Ef2::foo::X*>*
-    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
+class Ef2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef2<self::Ef2::foo::X>
+    return throw "";
 }
-class Ff2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ff2<self::Ff2::foo::X*>*
-    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
+class Ff2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ff2<self::Ff2::foo::X>
+    return throw "";
 }
-class Gf2<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Gf2<self::Gf2::foo::X*>*
-    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
+class Gf2<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Gf2<self::Gf2::foo::X>
+    return throw "";
 }
-class Hf2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf2<self::Hf2::foo::X*>*
-    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
+class Hf2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf2<self::Hf2::foo::X>
+    return throw "";
 }
-class If2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::If2<self::If2::foo::X*>*
-    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
+class If2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::If2<self::If2::foo::X>
+    return throw "";
 }
-class Jf2<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf2<self::Jf2::foo::X*>*
-    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
+class Jf2<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf2<self::Jf2::foo::X>
+    return throw "";
 }
-class Kf2<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf2<self::Kf2::foo::X*>*
-    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
+class Kf2<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf2<self::Kf2::foo::X>
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect
index cf63a80..118b670 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,1289 +103,509 @@
 import self as self;
 import "dart:core" as core;
 
-typedef TdB = (core::int*) →* dynamic;
-typedef TdC = (core::int*) →* dynamic;
-typedef TdD = () →* core::int*;
-typedef TdE = () →* dynamic;
-typedef TdF = () →* dynamic;
-typedef TdG = ({x: core::int*}) →* dynamic;
-typedef TdH = ([core::int*]) →* dynamic;
-typedef TdI = ([core::int*]) →* dynamic;
-typedef TdJ = (core::Function*) →* dynamic;
-typedef TdK = () →* (() →* core::Function*) →* dynamic;
-class Am1<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am1<self::Am1::X*, self::Am1::Y*>*
+typedef TdB = (core::int) → dynamic;
+typedef TdC = (core::int) → dynamic;
+typedef TdD = () → core::int;
+typedef TdE = () → dynamic;
+typedef TdF = () → dynamic;
+typedef TdG = ({x: core::int}) → dynamic;
+typedef TdH = ([core::int]) → dynamic;
+typedef TdI = ([core::int]) → dynamic;
+typedef TdJ = (core::Function) → dynamic;
+typedef TdK = () → (() → core::Function) → dynamic;
+class Am1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am1<self::Am1::X%, self::Am1::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
 }
-abstract class _Bm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Bm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z*>*
+abstract class _Bm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Bm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm1<Z extends core::Object* = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z*> {
-  synthetic constructor •() → self::Bm1<self::Bm1::Z*>*
+class Bm1<Z extends core::Object? = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z%> {
+  synthetic constructor •() → self::Bm1<self::Bm1::Z%>
     ;
 }
-abstract class _Cm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::_Cm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z*>*
+abstract class _Cm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::_Cm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm1<Z extends core::Object* = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z*> {
-  synthetic constructor •() → self::Cm1<self::Cm1::Z*>*
+class Cm1<Z extends core::Object? = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z%> {
+  synthetic constructor •() → self::Cm1<self::Cm1::Z%>
     ;
 }
-abstract class _Dm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::_Dm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z*>*
+abstract class _Dm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::_Dm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm1<Z extends core::Object* = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z*> {
-  synthetic constructor •() → self::Dm1<self::Dm1::Z*>*
+class Dm1<Z extends core::Object? = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z%> {
+  synthetic constructor •() → self::Dm1<self::Dm1::Z%>
     ;
 }
-abstract class _Em1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Em1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z*>*
+abstract class _Em1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Em1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em1<Z extends core::Object* = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z*> {
-  synthetic constructor •() → self::Em1<self::Em1::Z*>*
+class Em1<Z extends core::Object? = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z%> {
+  synthetic constructor •() → self::Em1<self::Em1::Z%>
     ;
 }
-abstract class _Fm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::_Fm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z*>*
+abstract class _Fm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::_Fm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm1<Z extends core::Object* = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z*> {
-  synthetic constructor •() → self::Fm1<self::Fm1::Z*>*
+class Fm1<Z extends core::Object? = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z%> {
+  synthetic constructor •() → self::Fm1<self::Fm1::Z%>
     ;
 }
-abstract class _Gm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::_Gm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z*>*
+abstract class _Gm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::_Gm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm1<Z extends core::Object* = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z*> {
-  synthetic constructor •() → self::Gm1<self::Gm1::Z*>*
+class Gm1<Z extends core::Object? = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z%> {
+  synthetic constructor •() → self::Gm1<self::Gm1::Z%>
     ;
 }
-abstract class _Hm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Hm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z*>*
+abstract class _Hm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Hm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm1<Z extends core::Object* = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z*> {
-  synthetic constructor •() → self::Hm1<self::Hm1::Z*>*
+class Hm1<Z extends core::Object? = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z%> {
+  synthetic constructor •() → self::Hm1<self::Hm1::Z%>
     ;
 }
-abstract class _Im1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::_Im1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z*>*
+abstract class _Im1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::_Im1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im1<Z extends core::Object* = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z*> {
-  synthetic constructor •() → self::Im1<self::Im1::Z*>*
+class Im1<Z extends core::Object? = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z%> {
+  synthetic constructor •() → self::Im1<self::Im1::Z%>
     ;
 }
-abstract class _Jm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::_Jm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z*>*
+abstract class _Jm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::_Jm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm1<Z extends core::Object* = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z*> {
-  synthetic constructor •() → self::Jm1<self::Jm1::Z*>*
+class Jm1<Z extends core::Object? = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z%> {
+  synthetic constructor •() → self::Jm1<self::Jm1::Z%>
     ;
 }
-abstract class _Km1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::_Km1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z*>*
+abstract class _Km1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::_Km1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km1<Z extends core::Object* = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z*> {
-  synthetic constructor •() → self::Km1<self::Km1::Z*>*
+class Km1<Z extends core::Object? = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z%> {
+  synthetic constructor •() → self::Km1<self::Km1::Z%>
     ;
 }
-abstract class _Lm1&Object&Am1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::_Lm1&Object&Am1::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z*>*
+abstract class _Lm1&Object&Am1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::_Lm1&Object&Am1::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm1<Z extends core::Object* = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z*> {
-  synthetic constructor •() → self::Lm1<self::Lm1::Z*>*
+class Lm1<Z extends core::Object? = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z%> {
+  synthetic constructor •() → self::Lm1<self::Lm1::Z%>
     ;
 }
-class Mm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Mm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm1<self::Mm1::Z*>*
+class Mm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Mm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm1<self::Mm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::int*) →* dynamic, self::Nm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm1<self::Nm1::Z*>*
+class Nm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::int) → dynamic, self::Nm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm1<self::Nm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* core::int*, self::Om1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om1<self::Om1::Z*>*
+class Om1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → core::int, self::Om1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om1<self::Om1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Pm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm1<self::Pm1::Z*>*
+class Pm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Pm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm1<self::Pm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* dynamic, self::Qm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm1<self::Qm1::Z*>*
+class Qm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → dynamic, self::Qm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm1<self::Qm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<({x: core::int*}) →* dynamic, self::Rm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm1<self::Rm1::Z*>*
+class Rm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<({x: core::int}) → dynamic, self::Rm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm1<self::Rm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Sm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm1<self::Sm1::Z*>*
+class Sm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Sm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm1<self::Sm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<([core::int*]) →* dynamic, self::Tm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm1<self::Tm1::Z*>*
+class Tm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<([core::int]) → dynamic, self::Tm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm1<self::Tm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um1<Z extends core::Object* = dynamic> = core::Object with self::Am1<core::Function*, self::Um1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um1<self::Um1::Z*>*
+class Um1<Z extends core::Object? = dynamic> = core::Object with self::Am1<core::Function, self::Um1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um1<self::Um1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<(core::Function*) →* dynamic, self::Vm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm1<self::Vm1::Z*>*
+class Vm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<(core::Function) → dynamic, self::Vm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm1<self::Vm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm1<Z extends core::Object* = dynamic> = core::Object with self::Am1<() →* (() →* core::Function*) →* dynamic, self::Wm1::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm1<self::Wm1::Z*>*
+class Wm1<Z extends core::Object? = dynamic> = core::Object with self::Am1<() → (() → core::Function) → dynamic, self::Wm1::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm1<self::Wm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am2<X extends () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
+class Am2<X extends () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am2<self::Am2::X, self::Am2::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
 }
-abstract class _Bm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Bm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z*>*
+abstract class _Bm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Bm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm2<Z extends core::Object* = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z*> {
-  synthetic constructor •() → self::Bm2<self::Bm2::Z*>*
+class Bm2<Z extends core::Object? = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z%> {
+  synthetic constructor •() → self::Bm2<self::Bm2::Z%>
     ;
 }
-abstract class _Cm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::_Cm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z*>*
+abstract class _Cm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::_Cm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm2<Z extends core::Object* = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z*> {
-  synthetic constructor •() → self::Cm2<self::Cm2::Z*>*
+class Cm2<Z extends core::Object? = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z%> {
+  synthetic constructor •() → self::Cm2<self::Cm2::Z%>
     ;
 }
-abstract class _Dm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::_Dm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z*>*
+abstract class _Dm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::_Dm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm2<Z extends core::Object* = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z*> {
-  synthetic constructor •() → self::Dm2<self::Dm2::Z*>*
+class Dm2<Z extends core::Object? = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z%> {
+  synthetic constructor •() → self::Dm2<self::Dm2::Z%>
     ;
 }
-abstract class _Em2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Em2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z*>*
+abstract class _Em2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Em2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em2<Z extends core::Object* = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z*> {
-  synthetic constructor •() → self::Em2<self::Em2::Z*>*
+class Em2<Z extends core::Object? = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z%> {
+  synthetic constructor •() → self::Em2<self::Em2::Z%>
     ;
 }
-abstract class _Fm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::_Fm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z*>*
+abstract class _Fm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::_Fm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm2<Z extends core::Object* = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z*> {
-  synthetic constructor •() → self::Fm2<self::Fm2::Z*>*
+class Fm2<Z extends core::Object? = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z%> {
+  synthetic constructor •() → self::Fm2<self::Fm2::Z%>
     ;
 }
-abstract class _Gm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::_Gm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z*>*
+abstract class _Gm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::_Gm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm2<Z extends core::Object* = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z*> {
-  synthetic constructor •() → self::Gm2<self::Gm2::Z*>*
+class Gm2<Z extends core::Object? = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z%> {
+  synthetic constructor •() → self::Gm2<self::Gm2::Z%>
     ;
 }
-abstract class _Hm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Hm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z*>*
+abstract class _Hm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Hm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm2<Z extends core::Object* = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z*> {
-  synthetic constructor •() → self::Hm2<self::Hm2::Z*>*
+class Hm2<Z extends core::Object? = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z%> {
+  synthetic constructor •() → self::Hm2<self::Hm2::Z%>
     ;
 }
-abstract class _Im2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::_Im2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z*>*
+abstract class _Im2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::_Im2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im2<Z extends core::Object* = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z*> {
-  synthetic constructor •() → self::Im2<self::Im2::Z*>*
+class Im2<Z extends core::Object? = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z%> {
+  synthetic constructor •() → self::Im2<self::Im2::Z%>
     ;
 }
-abstract class _Jm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::_Jm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z*>*
+abstract class _Jm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::_Jm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm2<Z extends core::Object* = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z*> {
-  synthetic constructor •() → self::Jm2<self::Jm2::Z*>*
+class Jm2<Z extends core::Object? = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z%> {
+  synthetic constructor •() → self::Jm2<self::Jm2::Z%>
     ;
 }
-abstract class _Km2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::_Km2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z*>*
+abstract class _Km2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::_Km2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km2<Z extends core::Object* = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z*> {
-  synthetic constructor •() → self::Km2<self::Km2::Z*>*
+class Km2<Z extends core::Object? = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z%> {
+  synthetic constructor •() → self::Km2<self::Km2::Z%>
     ;
 }
-abstract class _Lm2&Object&Am2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::_Lm2&Object&Am2::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z*>*
+abstract class _Lm2&Object&Am2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::_Lm2&Object&Am2::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm2<Z extends core::Object* = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z*> {
-  synthetic constructor •() → self::Lm2<self::Lm2::Z*>*
+class Lm2<Z extends core::Object? = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z%> {
+  synthetic constructor •() → self::Lm2<self::Lm2::Z%>
     ;
 }
-class Mm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Mm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm2<self::Mm2::Z*>*
+class Mm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Mm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm2<self::Mm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::int*) →* dynamic, self::Nm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm2<self::Nm2::Z*>*
+class Nm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::int) → dynamic, self::Nm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm2<self::Nm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* core::int*, self::Om2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om2<self::Om2::Z*>*
+class Om2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → core::int, self::Om2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om2<self::Om2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Pm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm2<self::Pm2::Z*>*
+class Pm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Pm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm2<self::Pm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* dynamic, self::Qm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm2<self::Qm2::Z*>*
+class Qm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → dynamic, self::Qm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm2<self::Qm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<({x: core::int*}) →* dynamic, self::Rm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm2<self::Rm2::Z*>*
+class Rm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<({x: core::int}) → dynamic, self::Rm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm2<self::Rm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Sm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm2<self::Sm2::Z*>*
+class Sm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Sm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm2<self::Sm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<([core::int*]) →* dynamic, self::Tm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm2<self::Tm2::Z*>*
+class Tm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<([core::int]) → dynamic, self::Tm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm2<self::Tm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um2<Z extends core::Object* = dynamic> = core::Object with self::Am2<core::Function*, self::Um2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um2<self::Um2::Z*>*
+class Um2<Z extends core::Object? = dynamic> = core::Object with self::Am2<core::Function, self::Um2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um2<self::Um2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<(core::Function*) →* dynamic, self::Vm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm2<self::Vm2::Z*>*
+class Vm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<(core::Function) → dynamic, self::Vm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm2<self::Vm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm2<Z extends core::Object* = dynamic> = core::Object with self::Am2<() →* (() →* core::Function*) →* dynamic, self::Wm2::Z*> /*hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm2<self::Wm2::Z*>*
+class Wm2<Z extends core::Object? = dynamic> = core::Object with self::Am2<() → (() → core::Function) → dynamic, self::Wm2::Z%> /*hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm2<self::Wm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am3<L extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am3<self::Am3::L*, self::Am3::Y*>*
+class Am3<L extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am3<self::Am3::L%, self::Am3::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
 }
-abstract class _Bm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Bm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z*>*
+abstract class _Bm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Bm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm3<Z extends core::Object* = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z*> {
-  synthetic constructor •() → self::Bm3<self::Bm3::Z*>*
+class Bm3<Z extends core::Object? = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z%> {
+  synthetic constructor •() → self::Bm3<self::Bm3::Z%>
     ;
 }
-abstract class _Cm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::int*) →* dynamic, self::_Cm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z*>*
+abstract class _Cm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::int) → dynamic, self::_Cm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm3<Z extends core::Object* = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z*> {
-  synthetic constructor •() → self::Cm3<self::Cm3::Z*>*
+class Cm3<Z extends core::Object? = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z%> {
+  synthetic constructor •() → self::Cm3<self::Cm3::Z%>
     ;
 }
-abstract class _Dm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* core::int*, self::_Dm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z*>*
+abstract class _Dm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → core::int, self::_Dm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm3<Z extends core::Object* = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z*> {
-  synthetic constructor •() → self::Dm3<self::Dm3::Z*>*
+class Dm3<Z extends core::Object? = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z%> {
+  synthetic constructor •() → self::Dm3<self::Dm3::Z%>
     ;
 }
-abstract class _Em3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Em3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z*>*
+abstract class _Em3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Em3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em3<Z extends core::Object* = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z*> {
-  synthetic constructor •() → self::Em3<self::Em3::Z*>*
+class Em3<Z extends core::Object? = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z%> {
+  synthetic constructor •() → self::Em3<self::Em3::Z%>
     ;
 }
-abstract class _Fm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* dynamic, self::_Fm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z*>*
+abstract class _Fm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → dynamic, self::_Fm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm3<Z extends core::Object* = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z*> {
-  synthetic constructor •() → self::Fm3<self::Fm3::Z*>*
+class Fm3<Z extends core::Object? = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z%> {
+  synthetic constructor •() → self::Fm3<self::Fm3::Z%>
     ;
 }
-abstract class _Gm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<({x: core::int*}) →* dynamic, self::_Gm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z*>*
+abstract class _Gm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<({x: core::int}) → dynamic, self::_Gm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm3<Z extends core::Object* = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z*> {
-  synthetic constructor •() → self::Gm3<self::Gm3::Z*>*
+class Gm3<Z extends core::Object? = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z%> {
+  synthetic constructor •() → self::Gm3<self::Gm3::Z%>
     ;
 }
-abstract class _Hm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Hm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z*>*
+abstract class _Hm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Hm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm3<Z extends core::Object* = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z*> {
-  synthetic constructor •() → self::Hm3<self::Hm3::Z*>*
+class Hm3<Z extends core::Object? = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z%> {
+  synthetic constructor •() → self::Hm3<self::Hm3::Z%>
     ;
 }
-abstract class _Im3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<([core::int*]) →* dynamic, self::_Im3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z*>*
+abstract class _Im3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<([core::int]) → dynamic, self::_Im3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im3<Z extends core::Object* = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z*> {
-  synthetic constructor •() → self::Im3<self::Im3::Z*>*
+class Im3<Z extends core::Object? = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z%> {
+  synthetic constructor •() → self::Im3<self::Im3::Z%>
     ;
 }
-abstract class _Jm3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<(core::Function*) →* dynamic, self::_Jm3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z*>*
+abstract class _Jm3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<(core::Function) → dynamic, self::_Jm3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm3<Z extends core::Object* = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z*> {
-  synthetic constructor •() → self::Jm3<self::Jm3::Z*>*
+class Jm3<Z extends core::Object? = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z%> {
+  synthetic constructor •() → self::Jm3<self::Jm3::Z%>
     ;
 }
-abstract class _Km3&Object&Am3<Z extends core::Object* = dynamic> = core::Object with self::Am3<() →* (() →* core::Function*) →* dynamic, self::_Km3&Object&Am3::Z*> /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z*>*
+abstract class _Km3&Object&Am3<Z extends core::Object? = dynamic> = core::Object with self::Am3<() → (() → core::Function) → dynamic, self::_Km3&Object&Am3::Z%> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km3<Z extends core::Object* = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z*> {
-  synthetic constructor •() → self::Km3<self::Km3::Z*>*
+class Km3<Z extends core::Object? = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z%> {
+  synthetic constructor •() → self::Km3<self::Km3::Z%>
     ;
 }
-class Af1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Af1<self::Af1::foo::X*>*
+class Af1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Af1<self::Af1::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
 }
-class Bf1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf1<self::Bf1::foo::X*>*
+class Bf1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf1<self::Bf1::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
 }
-class Cf1<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Cf1<self::Cf1::foo::X*>*
+class Cf1<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Cf1<self::Cf1::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
 }
-class Df1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Df1<self::Df1::foo::X*>*
+class Df1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Df1<self::Df1::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
 }
-class Ef1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef1<self::Ef1::foo::X*>*
+class Ef1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef1<self::Ef1::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
 }
-class Ff1<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Ff1<self::Ff1::foo::X*>*
+class Ff1<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Ff1<self::Ff1::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
 }
-class Gf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Gf1<self::Gf1::foo::X*>*
+class Gf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Gf1<self::Gf1::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
 }
-class Hf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf1<self::Hf1::foo::X*>*
+class Hf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf1<self::Hf1::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
 }
-class If1<X extends core::Function*> extends core::Object {
-  static factory foo<X extends core::Function*>() → self::If1<self::If1::foo::X*>*
+class If1<X extends core::Function> extends core::Object {
+  static factory foo<X extends core::Function>() → self::If1<self::If1::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
 }
-class Jf1<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf1<self::Jf1::foo::X*>*
+class Jf1<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf1<self::Jf1::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
 }
-class Kf1<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf1<self::Kf1::foo::X*>*
+class Kf1<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf1<self::Kf1::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
 }
-class Bf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf2<self::Bf2::foo::X*>*
+class Bf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf2<self::Bf2::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
 }
-class Cf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Cf2<self::Cf2::foo::X*>*
+class Cf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Cf2<self::Cf2::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
 }
-class Df2<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Df2<self::Df2::foo::X*>*
+class Df2<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Df2<self::Df2::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
 }
-class Ef2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef2<self::Ef2::foo::X*>*
+class Ef2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef2<self::Ef2::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
 }
-class Ff2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ff2<self::Ff2::foo::X*>*
+class Ff2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ff2<self::Ff2::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
 }
-class Gf2<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Gf2<self::Gf2::foo::X*>*
+class Gf2<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Gf2<self::Gf2::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
 }
-class Hf2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf2<self::Hf2::foo::X*>*
+class Hf2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf2<self::Hf2::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
 }
-class If2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::If2<self::If2::foo::X*>*
+class If2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::If2<self::If2::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
 }
-class Jf2<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf2<self::Jf2::foo::X*>*
+class Jf2<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf2<self::Jf2::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
 }
-class Kf2<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf2<self::Kf2::foo::X*>*
+class Kf2<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf2<self::Kf2::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/clone_function_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect
index 93e0a13..44336bf 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,1323 +103,543 @@
 import self as self;
 import "dart:core" as core;
 
-typedef TdB = (core::int*) →* dynamic;
-typedef TdC = (core::int*) →* dynamic;
-typedef TdD = () →* core::int*;
-typedef TdE = () →* dynamic;
-typedef TdF = () →* dynamic;
-typedef TdG = ({x: core::int*}) →* dynamic;
-typedef TdH = ([core::int*]) →* dynamic;
-typedef TdI = ([core::int*]) →* dynamic;
-typedef TdJ = (core::Function*) →* dynamic;
-typedef TdK = () →* (() →* core::Function*) →* dynamic;
-class Am1<X extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am1<self::Am1::X*, self::Am1::Y*>*
+typedef TdB = (core::int) → dynamic;
+typedef TdC = (core::int) → dynamic;
+typedef TdD = () → core::int;
+typedef TdE = () → dynamic;
+typedef TdF = () → dynamic;
+typedef TdG = ({x: core::int}) → dynamic;
+typedef TdH = ([core::int]) → dynamic;
+typedef TdI = ([core::int]) → dynamic;
+typedef TdJ = (core::Function) → dynamic;
+typedef TdK = () → (() → core::Function) → dynamic;
+class Am1<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am1<self::Am1::X%, self::Am1::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
 }
-abstract class _Bm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::_Bm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z*>*
+abstract class _Bm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<(core::int) → dynamic, self::_Bm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm1&Object&Am1<self::_Bm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm1<Z extends core::Object* = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z*> {
-  synthetic constructor •() → self::Bm1<self::Bm1::Z*>*
+class Bm1<Z extends core::Object? = dynamic> extends self::_Bm1&Object&Am1<self::Bm1::Z%> {
+  synthetic constructor •() → self::Bm1<self::Bm1::Z%>
     : super self::_Bm1&Object&Am1::•()
     ;
 }
-abstract class _Cm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::_Cm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z*>*
+abstract class _Cm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<(core::int) → dynamic, self::_Cm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm1&Object&Am1<self::_Cm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm1<Z extends core::Object* = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z*> {
-  synthetic constructor •() → self::Cm1<self::Cm1::Z*>*
+class Cm1<Z extends core::Object? = dynamic> extends self::_Cm1&Object&Am1<self::Cm1::Z%> {
+  synthetic constructor •() → self::Cm1<self::Cm1::Z%>
     : super self::_Cm1&Object&Am1::•()
     ;
 }
-abstract class _Dm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* core::int*, self::_Dm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z*>*
+abstract class _Dm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → core::int, self::_Dm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm1&Object&Am1<self::_Dm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm1<Z extends core::Object* = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z*> {
-  synthetic constructor •() → self::Dm1<self::Dm1::Z*>*
+class Dm1<Z extends core::Object? = dynamic> extends self::_Dm1&Object&Am1<self::Dm1::Z%> {
+  synthetic constructor •() → self::Dm1<self::Dm1::Z%>
     : super self::_Dm1&Object&Am1::•()
     ;
 }
-abstract class _Em1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::_Em1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z*>*
+abstract class _Em1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → dynamic, self::_Em1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em1&Object&Am1<self::_Em1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em1<Z extends core::Object* = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z*> {
-  synthetic constructor •() → self::Em1<self::Em1::Z*>*
+class Em1<Z extends core::Object? = dynamic> extends self::_Em1&Object&Am1<self::Em1::Z%> {
+  synthetic constructor •() → self::Em1<self::Em1::Z%>
     : super self::_Em1&Object&Am1::•()
     ;
 }
-abstract class _Fm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::_Fm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z*>*
+abstract class _Fm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → dynamic, self::_Fm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm1&Object&Am1<self::_Fm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm1<Z extends core::Object* = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z*> {
-  synthetic constructor •() → self::Fm1<self::Fm1::Z*>*
+class Fm1<Z extends core::Object? = dynamic> extends self::_Fm1&Object&Am1<self::Fm1::Z%> {
+  synthetic constructor •() → self::Fm1<self::Fm1::Z%>
     : super self::_Fm1&Object&Am1::•()
     ;
 }
-abstract class _Gm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<({x: core::int*}) →* dynamic, self::_Gm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z*>*
+abstract class _Gm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<({x: core::int}) → dynamic, self::_Gm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm1&Object&Am1<self::_Gm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm1<Z extends core::Object* = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z*> {
-  synthetic constructor •() → self::Gm1<self::Gm1::Z*>*
+class Gm1<Z extends core::Object? = dynamic> extends self::_Gm1&Object&Am1<self::Gm1::Z%> {
+  synthetic constructor •() → self::Gm1<self::Gm1::Z%>
     : super self::_Gm1&Object&Am1::•()
     ;
 }
-abstract class _Hm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::_Hm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z*>*
+abstract class _Hm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<([core::int]) → dynamic, self::_Hm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm1&Object&Am1<self::_Hm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm1<Z extends core::Object* = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z*> {
-  synthetic constructor •() → self::Hm1<self::Hm1::Z*>*
+class Hm1<Z extends core::Object? = dynamic> extends self::_Hm1&Object&Am1<self::Hm1::Z%> {
+  synthetic constructor •() → self::Hm1<self::Hm1::Z%>
     : super self::_Hm1&Object&Am1::•()
     ;
 }
-abstract class _Im1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::_Im1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z*>*
+abstract class _Im1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<([core::int]) → dynamic, self::_Im1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im1&Object&Am1<self::_Im1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im1<Z extends core::Object* = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z*> {
-  synthetic constructor •() → self::Im1<self::Im1::Z*>*
+class Im1<Z extends core::Object? = dynamic> extends self::_Im1&Object&Am1<self::Im1::Z%> {
+  synthetic constructor •() → self::Im1<self::Im1::Z%>
     : super self::_Im1&Object&Am1::•()
     ;
 }
-abstract class _Jm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<core::Function*, self::_Jm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z*>*
+abstract class _Jm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<core::Function, self::_Jm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm1&Object&Am1<self::_Jm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm1<Z extends core::Object* = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z*> {
-  synthetic constructor •() → self::Jm1<self::Jm1::Z*>*
+class Jm1<Z extends core::Object? = dynamic> extends self::_Jm1&Object&Am1<self::Jm1::Z%> {
+  synthetic constructor •() → self::Jm1<self::Jm1::Z%>
     : super self::_Jm1&Object&Am1::•()
     ;
 }
-abstract class _Km1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::Function*) →* dynamic, self::_Km1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z*>*
+abstract class _Km1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<(core::Function) → dynamic, self::_Km1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km1&Object&Am1<self::_Km1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km1<Z extends core::Object* = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z*> {
-  synthetic constructor •() → self::Km1<self::Km1::Z*>*
+class Km1<Z extends core::Object? = dynamic> extends self::_Km1&Object&Am1<self::Km1::Z%> {
+  synthetic constructor •() → self::Km1<self::Km1::Z%>
     : super self::_Km1&Object&Am1::•()
     ;
 }
-abstract class _Lm1&Object&Am1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* (() →* core::Function*) →* dynamic, self::_Lm1&Object&Am1::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z*>*
+abstract class _Lm1&Object&Am1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → (() → core::Function) → dynamic, self::_Lm1&Object&Am1::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm1&Object&Am1<self::_Lm1&Object&Am1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm1<Z extends core::Object* = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z*> {
-  synthetic constructor •() → self::Lm1<self::Lm1::Z*>*
+class Lm1<Z extends core::Object? = dynamic> extends self::_Lm1&Object&Am1<self::Lm1::Z%> {
+  synthetic constructor •() → self::Lm1<self::Lm1::Z%>
     : super self::_Lm1&Object&Am1::•()
     ;
 }
-class Mm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::Mm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm1<self::Mm1::Z*>*
+class Mm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<(core::int) → dynamic, self::Mm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm1<self::Mm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::int*) →* dynamic, self::Nm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm1<self::Nm1::Z*>*
+class Nm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<(core::int) → dynamic, self::Nm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm1<self::Nm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* core::int*, self::Om1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om1<self::Om1::Z*>*
+class Om1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → core::int, self::Om1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om1<self::Om1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::Pm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm1<self::Pm1::Z*>*
+class Pm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → dynamic, self::Pm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm1<self::Pm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* dynamic, self::Qm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm1<self::Qm1::Z*>*
+class Qm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → dynamic, self::Qm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm1<self::Qm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<({x: core::int*}) →* dynamic, self::Rm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm1<self::Rm1::Z*>*
+class Rm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<({x: core::int}) → dynamic, self::Rm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm1<self::Rm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::Sm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm1<self::Sm1::Z*>*
+class Sm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<([core::int]) → dynamic, self::Sm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm1<self::Sm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<([core::int*]) →* dynamic, self::Tm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm1<self::Tm1::Z*>*
+class Tm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<([core::int]) → dynamic, self::Tm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm1<self::Tm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<core::Function*, self::Um1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um1<self::Um1::Z*>*
+class Um1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<core::Function, self::Um1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um1<self::Um1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<(core::Function*) →* dynamic, self::Vm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm1<self::Vm1::Z*>*
+class Vm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<(core::Function) → dynamic, self::Vm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm1<self::Vm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm1<Z extends core::Object* = dynamic> extends core::Object implements self::Am1<() →* (() →* core::Function*) →* dynamic, self::Wm1::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm1<self::Wm1::Z*>*
+class Wm1<Z extends core::Object? = dynamic> extends core::Object implements self::Am1<() → (() → core::Function) → dynamic, self::Wm1::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm1<self::Wm1::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am2<X extends () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
+class Am2<X extends () → dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am2<self::Am2::X, self::Am2::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
 }
-abstract class _Bm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::_Bm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z*>*
+abstract class _Bm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<(core::int) → dynamic, self::_Bm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm2&Object&Am2<self::_Bm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm2<Z extends core::Object* = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z*> {
-  synthetic constructor •() → self::Bm2<self::Bm2::Z*>*
+class Bm2<Z extends core::Object? = dynamic> extends self::_Bm2&Object&Am2<self::Bm2::Z%> {
+  synthetic constructor •() → self::Bm2<self::Bm2::Z%>
     : super self::_Bm2&Object&Am2::•()
     ;
 }
-abstract class _Cm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::_Cm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z*>*
+abstract class _Cm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<(core::int) → dynamic, self::_Cm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm2&Object&Am2<self::_Cm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm2<Z extends core::Object* = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z*> {
-  synthetic constructor •() → self::Cm2<self::Cm2::Z*>*
+class Cm2<Z extends core::Object? = dynamic> extends self::_Cm2&Object&Am2<self::Cm2::Z%> {
+  synthetic constructor •() → self::Cm2<self::Cm2::Z%>
     : super self::_Cm2&Object&Am2::•()
     ;
 }
-abstract class _Dm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* core::int*, self::_Dm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z*>*
+abstract class _Dm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → core::int, self::_Dm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm2&Object&Am2<self::_Dm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm2<Z extends core::Object* = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z*> {
-  synthetic constructor •() → self::Dm2<self::Dm2::Z*>*
+class Dm2<Z extends core::Object? = dynamic> extends self::_Dm2&Object&Am2<self::Dm2::Z%> {
+  synthetic constructor •() → self::Dm2<self::Dm2::Z%>
     : super self::_Dm2&Object&Am2::•()
     ;
 }
-abstract class _Em2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::_Em2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z*>*
+abstract class _Em2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → dynamic, self::_Em2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em2&Object&Am2<self::_Em2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em2<Z extends core::Object* = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z*> {
-  synthetic constructor •() → self::Em2<self::Em2::Z*>*
+class Em2<Z extends core::Object? = dynamic> extends self::_Em2&Object&Am2<self::Em2::Z%> {
+  synthetic constructor •() → self::Em2<self::Em2::Z%>
     : super self::_Em2&Object&Am2::•()
     ;
 }
-abstract class _Fm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::_Fm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z*>*
+abstract class _Fm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → dynamic, self::_Fm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm2&Object&Am2<self::_Fm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm2<Z extends core::Object* = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z*> {
-  synthetic constructor •() → self::Fm2<self::Fm2::Z*>*
+class Fm2<Z extends core::Object? = dynamic> extends self::_Fm2&Object&Am2<self::Fm2::Z%> {
+  synthetic constructor •() → self::Fm2<self::Fm2::Z%>
     : super self::_Fm2&Object&Am2::•()
     ;
 }
-abstract class _Gm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<({x: core::int*}) →* dynamic, self::_Gm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z*>*
+abstract class _Gm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<({x: core::int}) → dynamic, self::_Gm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm2&Object&Am2<self::_Gm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm2<Z extends core::Object* = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z*> {
-  synthetic constructor •() → self::Gm2<self::Gm2::Z*>*
+class Gm2<Z extends core::Object? = dynamic> extends self::_Gm2&Object&Am2<self::Gm2::Z%> {
+  synthetic constructor •() → self::Gm2<self::Gm2::Z%>
     : super self::_Gm2&Object&Am2::•()
     ;
 }
-abstract class _Hm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::_Hm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z*>*
+abstract class _Hm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<([core::int]) → dynamic, self::_Hm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm2&Object&Am2<self::_Hm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm2<Z extends core::Object* = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z*> {
-  synthetic constructor •() → self::Hm2<self::Hm2::Z*>*
+class Hm2<Z extends core::Object? = dynamic> extends self::_Hm2&Object&Am2<self::Hm2::Z%> {
+  synthetic constructor •() → self::Hm2<self::Hm2::Z%>
     : super self::_Hm2&Object&Am2::•()
     ;
 }
-abstract class _Im2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::_Im2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z*>*
+abstract class _Im2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<([core::int]) → dynamic, self::_Im2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im2&Object&Am2<self::_Im2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im2<Z extends core::Object* = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z*> {
-  synthetic constructor •() → self::Im2<self::Im2::Z*>*
+class Im2<Z extends core::Object? = dynamic> extends self::_Im2&Object&Am2<self::Im2::Z%> {
+  synthetic constructor •() → self::Im2<self::Im2::Z%>
     : super self::_Im2&Object&Am2::•()
     ;
 }
-abstract class _Jm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<core::Function*, self::_Jm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z*>*
+abstract class _Jm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<core::Function, self::_Jm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm2&Object&Am2<self::_Jm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm2<Z extends core::Object* = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z*> {
-  synthetic constructor •() → self::Jm2<self::Jm2::Z*>*
+class Jm2<Z extends core::Object? = dynamic> extends self::_Jm2&Object&Am2<self::Jm2::Z%> {
+  synthetic constructor •() → self::Jm2<self::Jm2::Z%>
     : super self::_Jm2&Object&Am2::•()
     ;
 }
-abstract class _Km2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::Function*) →* dynamic, self::_Km2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z*>*
+abstract class _Km2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<(core::Function) → dynamic, self::_Km2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km2&Object&Am2<self::_Km2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km2<Z extends core::Object* = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z*> {
-  synthetic constructor •() → self::Km2<self::Km2::Z*>*
+class Km2<Z extends core::Object? = dynamic> extends self::_Km2&Object&Am2<self::Km2::Z%> {
+  synthetic constructor •() → self::Km2<self::Km2::Z%>
     : super self::_Km2&Object&Am2::•()
     ;
 }
-abstract class _Lm2&Object&Am2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* (() →* core::Function*) →* dynamic, self::_Lm2&Object&Am2::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z*>*
+abstract class _Lm2&Object&Am2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → (() → core::Function) → dynamic, self::_Lm2&Object&Am2::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Lm2&Object&Am2<self::_Lm2&Object&Am2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Lm2<Z extends core::Object* = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z*> {
-  synthetic constructor •() → self::Lm2<self::Lm2::Z*>*
+class Lm2<Z extends core::Object? = dynamic> extends self::_Lm2&Object&Am2<self::Lm2::Z%> {
+  synthetic constructor •() → self::Lm2<self::Lm2::Z%>
     : super self::_Lm2&Object&Am2::•()
     ;
 }
-class Mm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::Mm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Mm2<self::Mm2::Z*>*
+class Mm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<(core::int) → dynamic, self::Mm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Mm2<self::Mm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Nm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::int*) →* dynamic, self::Nm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Nm2<self::Nm2::Z*>*
+class Nm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<(core::int) → dynamic, self::Nm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Nm2<self::Nm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Om2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* core::int*, self::Om2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Om2<self::Om2::Z*>*
+class Om2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → core::int, self::Om2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Om2<self::Om2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Pm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::Pm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Pm2<self::Pm2::Z*>*
+class Pm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → dynamic, self::Pm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Pm2<self::Pm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Qm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* dynamic, self::Qm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Qm2<self::Qm2::Z*>*
+class Qm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → dynamic, self::Qm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Qm2<self::Qm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Rm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<({x: core::int*}) →* dynamic, self::Rm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Rm2<self::Rm2::Z*>*
+class Rm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<({x: core::int}) → dynamic, self::Rm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Rm2<self::Rm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Sm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::Sm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Sm2<self::Sm2::Z*>*
+class Sm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<([core::int]) → dynamic, self::Sm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Sm2<self::Sm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Tm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<([core::int*]) →* dynamic, self::Tm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Tm2<self::Tm2::Z*>*
+class Tm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<([core::int]) → dynamic, self::Tm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Tm2<self::Tm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Um2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<core::Function*, self::Um2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Um2<self::Um2::Z*>*
+class Um2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<core::Function, self::Um2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Um2<self::Um2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Vm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<(core::Function*) →* dynamic, self::Vm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Vm2<self::Vm2::Z*>*
+class Vm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<(core::Function) → dynamic, self::Vm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Vm2<self::Vm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Wm2<Z extends core::Object* = dynamic> extends core::Object implements self::Am2<() →* (() →* core::Function*) →* dynamic, self::Wm2::Z*> /*isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::Wm2<self::Wm2::Z*>*
+class Wm2<Z extends core::Object? = dynamic> extends core::Object implements self::Am2<() → (() → core::Function) → dynamic, self::Wm2::Z%> /*isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::Wm2<self::Wm2::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Am3<L extends core::Object* = dynamic, Y extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Am3<self::Am3::L*, self::Am3::Y*>*
+class Am3<L extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Am3<self::Am3::L%, self::Am3::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
 }
-abstract class _Bm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<(core::int*) →* dynamic, self::_Bm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z*>*
+abstract class _Bm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<(core::int) → dynamic, self::_Bm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Bm3&Object&Am3<self::_Bm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Bm3<Z extends core::Object* = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z*> {
-  synthetic constructor •() → self::Bm3<self::Bm3::Z*>*
+class Bm3<Z extends core::Object? = dynamic> extends self::_Bm3&Object&Am3<self::Bm3::Z%> {
+  synthetic constructor •() → self::Bm3<self::Bm3::Z%>
     : super self::_Bm3&Object&Am3::•()
     ;
 }
-abstract class _Cm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<(core::int*) →* dynamic, self::_Cm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z*>*
+abstract class _Cm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<(core::int) → dynamic, self::_Cm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Cm3&Object&Am3<self::_Cm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Cm3<Z extends core::Object* = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z*> {
-  synthetic constructor •() → self::Cm3<self::Cm3::Z*>*
+class Cm3<Z extends core::Object? = dynamic> extends self::_Cm3&Object&Am3<self::Cm3::Z%> {
+  synthetic constructor •() → self::Cm3<self::Cm3::Z%>
     : super self::_Cm3&Object&Am3::•()
     ;
 }
-abstract class _Dm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* core::int*, self::_Dm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z*>*
+abstract class _Dm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<() → core::int, self::_Dm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Dm3&Object&Am3<self::_Dm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Dm3<Z extends core::Object* = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z*> {
-  synthetic constructor •() → self::Dm3<self::Dm3::Z*>*
+class Dm3<Z extends core::Object? = dynamic> extends self::_Dm3&Object&Am3<self::Dm3::Z%> {
+  synthetic constructor •() → self::Dm3<self::Dm3::Z%>
     : super self::_Dm3&Object&Am3::•()
     ;
 }
-abstract class _Em3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* dynamic, self::_Em3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z*>*
+abstract class _Em3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<() → dynamic, self::_Em3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Em3&Object&Am3<self::_Em3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Em3<Z extends core::Object* = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z*> {
-  synthetic constructor •() → self::Em3<self::Em3::Z*>*
+class Em3<Z extends core::Object? = dynamic> extends self::_Em3&Object&Am3<self::Em3::Z%> {
+  synthetic constructor •() → self::Em3<self::Em3::Z%>
     : super self::_Em3&Object&Am3::•()
     ;
 }
-abstract class _Fm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* dynamic, self::_Fm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z*>*
+abstract class _Fm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<() → dynamic, self::_Fm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Fm3&Object&Am3<self::_Fm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Fm3<Z extends core::Object* = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z*> {
-  synthetic constructor •() → self::Fm3<self::Fm3::Z*>*
+class Fm3<Z extends core::Object? = dynamic> extends self::_Fm3&Object&Am3<self::Fm3::Z%> {
+  synthetic constructor •() → self::Fm3<self::Fm3::Z%>
     : super self::_Fm3&Object&Am3::•()
     ;
 }
-abstract class _Gm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<({x: core::int*}) →* dynamic, self::_Gm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z*>*
+abstract class _Gm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<({x: core::int}) → dynamic, self::_Gm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Gm3&Object&Am3<self::_Gm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Gm3<Z extends core::Object* = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z*> {
-  synthetic constructor •() → self::Gm3<self::Gm3::Z*>*
+class Gm3<Z extends core::Object? = dynamic> extends self::_Gm3&Object&Am3<self::Gm3::Z%> {
+  synthetic constructor •() → self::Gm3<self::Gm3::Z%>
     : super self::_Gm3&Object&Am3::•()
     ;
 }
-abstract class _Hm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<([core::int*]) →* dynamic, self::_Hm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z*>*
+abstract class _Hm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<([core::int]) → dynamic, self::_Hm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Hm3&Object&Am3<self::_Hm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Hm3<Z extends core::Object* = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z*> {
-  synthetic constructor •() → self::Hm3<self::Hm3::Z*>*
+class Hm3<Z extends core::Object? = dynamic> extends self::_Hm3&Object&Am3<self::Hm3::Z%> {
+  synthetic constructor •() → self::Hm3<self::Hm3::Z%>
     : super self::_Hm3&Object&Am3::•()
     ;
 }
-abstract class _Im3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<([core::int*]) →* dynamic, self::_Im3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z*>*
+abstract class _Im3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<([core::int]) → dynamic, self::_Im3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Im3&Object&Am3<self::_Im3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Im3<Z extends core::Object* = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z*> {
-  synthetic constructor •() → self::Im3<self::Im3::Z*>*
+class Im3<Z extends core::Object? = dynamic> extends self::_Im3&Object&Am3<self::Im3::Z%> {
+  synthetic constructor •() → self::Im3<self::Im3::Z%>
     : super self::_Im3&Object&Am3::•()
     ;
 }
-abstract class _Jm3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<(core::Function*) →* dynamic, self::_Jm3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z*>*
+abstract class _Jm3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<(core::Function) → dynamic, self::_Jm3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Jm3&Object&Am3<self::_Jm3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Jm3<Z extends core::Object* = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z*> {
-  synthetic constructor •() → self::Jm3<self::Jm3::Z*>*
+class Jm3<Z extends core::Object? = dynamic> extends self::_Jm3&Object&Am3<self::Jm3::Z%> {
+  synthetic constructor •() → self::Jm3<self::Jm3::Z%>
     : super self::_Jm3&Object&Am3::•()
     ;
 }
-abstract class _Km3&Object&Am3<Z extends core::Object* = dynamic> extends core::Object implements self::Am3<() →* (() →* core::Function*) →* dynamic, self::_Km3&Object&Am3::Z*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z*>*
+abstract class _Km3&Object&Am3<Z extends core::Object? = dynamic> extends core::Object implements self::Am3<() → (() → core::Function) → dynamic, self::_Km3&Object&Am3::Z%> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Km3&Object&Am3<self::_Km3&Object&Am3::Z%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Km3<Z extends core::Object* = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z*> {
-  synthetic constructor •() → self::Km3<self::Km3::Z*>*
+class Km3<Z extends core::Object? = dynamic> extends self::_Km3&Object&Am3<self::Km3::Z%> {
+  synthetic constructor •() → self::Km3<self::Km3::Z%>
     : super self::_Km3&Object&Am3::•()
     ;
 }
-class Af1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Af1<self::Af1::foo::X*>*
-    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
+class Af1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Af1<self::Af1::foo::X>
+    return throw "";
 }
-class Bf1<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf1<self::Bf1::foo::X*>*
-    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
+class Bf1<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf1<self::Bf1::foo::X>
+    return throw "";
 }
-class Cf1<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Cf1<self::Cf1::foo::X*>*
-    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
+class Cf1<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Cf1<self::Cf1::foo::X>
+    return throw "";
 }
-class Df1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Df1<self::Df1::foo::X*>*
-    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
+class Df1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Df1<self::Df1::foo::X>
+    return throw "";
 }
-class Ef1<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef1<self::Ef1::foo::X*>*
-    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
+class Ef1<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef1<self::Ef1::foo::X>
+    return throw "";
 }
-class Ff1<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Ff1<self::Ff1::foo::X*>*
-    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
+class Ff1<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Ff1<self::Ff1::foo::X>
+    return throw "";
 }
-class Gf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Gf1<self::Gf1::foo::X*>*
-    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
+class Gf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Gf1<self::Gf1::foo::X>
+    return throw "";
 }
-class Hf1<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf1<self::Hf1::foo::X*>*
-    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
+class Hf1<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf1<self::Hf1::foo::X>
+    return throw "";
 }
-class If1<X extends core::Function*> extends core::Object {
-  static factory foo<X extends core::Function*>() → self::If1<self::If1::foo::X*>*
-    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
+class If1<X extends core::Function> extends core::Object {
+  static factory foo<X extends core::Function>() → self::If1<self::If1::foo::X>
+    return throw "";
 }
-class Jf1<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf1<self::Jf1::foo::X*>*
-    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
+class Jf1<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf1<self::Jf1::foo::X>
+    return throw "";
 }
-class Kf1<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf1<self::Kf1::foo::X*>*
-    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
+class Kf1<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf1<self::Kf1::foo::X>
+    return throw "";
 }
-class Bf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Bf2<self::Bf2::foo::X*>*
-    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
+class Bf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Bf2<self::Bf2::foo::X>
+    return throw "";
 }
-class Cf2<X extends (core::int*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::int*) →* dynamic>() → self::Cf2<self::Cf2::foo::X*>*
-    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
+class Cf2<X extends (core::int) → dynamic> extends core::Object {
+  static factory foo<X extends (core::int) → dynamic>() → self::Cf2<self::Cf2::foo::X>
+    return throw "";
 }
-class Df2<X extends () →* core::int*> extends core::Object {
-  static factory foo<X extends () →* core::int*>() → self::Df2<self::Df2::foo::X*>*
-    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
+class Df2<X extends () → core::int> extends core::Object {
+  static factory foo<X extends () → core::int>() → self::Df2<self::Df2::foo::X>
+    return throw "";
 }
-class Ef2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ef2<self::Ef2::foo::X*>*
-    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
+class Ef2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ef2<self::Ef2::foo::X>
+    return throw "";
 }
-class Ff2<X extends () →* dynamic> extends core::Object {
-  static factory foo<X extends () →* dynamic>() → self::Ff2<self::Ff2::foo::X*>*
-    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
+class Ff2<X extends () → dynamic> extends core::Object {
+  static factory foo<X extends () → dynamic>() → self::Ff2<self::Ff2::foo::X>
+    return throw "";
 }
-class Gf2<X extends ({x: core::int*}) →* dynamic> extends core::Object {
-  static factory foo<X extends ({x: core::int*}) →* dynamic>() → self::Gf2<self::Gf2::foo::X*>*
-    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
+class Gf2<X extends ({x: core::int}) → dynamic> extends core::Object {
+  static factory foo<X extends ({x: core::int}) → dynamic>() → self::Gf2<self::Gf2::foo::X>
+    return throw "";
 }
-class Hf2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::Hf2<self::Hf2::foo::X*>*
-    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
+class Hf2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::Hf2<self::Hf2::foo::X>
+    return throw "";
 }
-class If2<X extends ([core::int*]) →* dynamic> extends core::Object {
-  static factory foo<X extends ([core::int*]) →* dynamic>() → self::If2<self::If2::foo::X*>*
-    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
+class If2<X extends ([core::int]) → dynamic> extends core::Object {
+  static factory foo<X extends ([core::int]) → dynamic>() → self::If2<self::If2::foo::X>
+    return throw "";
 }
-class Jf2<X extends (core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends (core::Function*) →* dynamic>() → self::Jf2<self::Jf2::foo::X*>*
-    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
+class Jf2<X extends (core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends (core::Function) → dynamic>() → self::Jf2<self::Jf2::foo::X>
+    return throw "";
 }
-class Kf2<X extends () →* (() →* core::Function*) →* dynamic> extends core::Object {
-  static factory foo<X extends () →* (() →* core::Function*) →* dynamic>() → self::Kf2<self::Kf2::foo::X*>*
-    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
+class Kf2<X extends () → (() → core::Function) → dynamic> extends core::Object {
+  static factory foo<X extends () → (() → core::Function) → dynamic>() → self::Kf2<self::Kf2::foo::X>
+    return throw "";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/closure.dart b/pkg/front_end/testcases/general/closure.dart
index 59364ef..664a4fa 100644
--- a/pkg/front_end/testcases/general/closure.dart
+++ b/pkg/front_end/testcases/general/closure.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 {
   var _field = new Bar();
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.textual_outline.expect b/pkg/front_end/testcases/general/closure.dart.textual_outline.expect
index a71d508..544a9e7 100644
--- a/pkg/front_end/testcases/general/closure.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/closure.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Foo {
   var _field = new Bar();
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/closure.dart.textual_outline_modelled.expect
index 707cfa0..2f6023d 100644
--- a/pkg/front_end/testcases/general/closure.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/closure.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Bar {}
 
 class Foo {
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.expect b/pkg/front_end/testcases/general/closure.dart.weak.expect
index 2d530e8..b9e4e43 100644
--- a/pkg/front_end/testcases/general/closure.dart.weak.expect
+++ b/pkg/front_end/testcases/general/closure.dart.weak.expect
@@ -1,47 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field self::Bar* _field = new self::Bar::•();
-  synthetic constructor •() → self::Foo*
+  field self::Bar _field = new self::Bar::•();
+  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 core::Object {
-  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
 }
 static method useCallback(dynamic callback) → dynamic {
   dynamic _ = callback{dynamic}.call();
 }
 static method main() → dynamic {
   dynamic x;
-  function inner() → self::Foo* {
+  function inner() → self::Foo {
     x = new self::Foo::•();
     return new self::Foo::•();
   }
   self::useCallback(inner);
-  self::Bar* _ = inner(){() →* self::Foo*}.{self::Foo::_field}{self::Bar*};
+  self::Bar _ = inner(){() → self::Foo}.{self::Foo::_field}{self::Bar};
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.modular.expect b/pkg/front_end/testcases/general/closure.dart.weak.modular.expect
index 2d530e8..b9e4e43 100644
--- a/pkg/front_end/testcases/general/closure.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/closure.dart.weak.modular.expect
@@ -1,47 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field self::Bar* _field = new self::Bar::•();
-  synthetic constructor •() → self::Foo*
+  field self::Bar _field = new self::Bar::•();
+  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 core::Object {
-  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
 }
 static method useCallback(dynamic callback) → dynamic {
   dynamic _ = callback{dynamic}.call();
 }
 static method main() → dynamic {
   dynamic x;
-  function inner() → self::Foo* {
+  function inner() → self::Foo {
     x = new self::Foo::•();
     return new self::Foo::•();
   }
   self::useCallback(inner);
-  self::Bar* _ = inner(){() →* self::Foo*}.{self::Foo::_field}{self::Bar*};
+  self::Bar _ = inner(){() → self::Foo}.{self::Foo::_field}{self::Bar};
 }
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.outline.expect b/pkg/front_end/testcases/general/closure.dart.weak.outline.expect
index cc26bdb..a3a843e 100644
--- a/pkg/front_end/testcases/general/closure.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/closure.dart.weak.outline.expect
@@ -1,35 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field self::Bar* _field;
-  synthetic constructor •() → self::Foo*
+  field self::Bar _field;
+  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 core::Object {
-  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
 }
 static method useCallback(dynamic callback) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect
index 2d530e8..b9e4e43 100644
--- a/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/closure.dart.weak.transformed.expect
@@ -1,47 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  field self::Bar* _field = new self::Bar::•();
-  synthetic constructor •() → self::Foo*
+  field self::Bar _field = new self::Bar::•();
+  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 core::Object {
-  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
 }
 static method useCallback(dynamic callback) → dynamic {
   dynamic _ = callback{dynamic}.call();
 }
 static method main() → dynamic {
   dynamic x;
-  function inner() → self::Foo* {
+  function inner() → self::Foo {
     x = new self::Foo::•();
     return new self::Foo::•();
   }
   self::useCallback(inner);
-  self::Bar* _ = inner(){() →* self::Foo*}.{self::Foo::_field}{self::Bar*};
+  self::Bar _ = inner(){() → self::Foo}.{self::Foo::_field}{self::Bar};
 }
diff --git a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart
index 0d9a8f1..3385d23 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart
@@ -12,7 +12,7 @@
  * @compile-error
  * @author a.semenov@unipro.ru
  */
-// @dart=2.9
+
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline.expect
index 795ce34..896c9f0 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   const A();
 }
diff --git a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline_modelled.expect
index 99630e1..c112c59 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 A() {}
 
 class A {
diff --git a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.expect
index 58cf612..8b7c94f 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.expect
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,33 +17,13 @@
 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
 }
 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/co19_language_metadata_syntax_t04.dart.weak.modular.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.modular.expect
index 58cf612..8b7c94f 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,33 +17,13 @@
 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
 }
 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/co19_language_metadata_syntax_t04.dart.weak.outline.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.outline.expect
index e39a0bb..18e6424 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,33 +17,13 @@
 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
 }
 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/co19_language_metadata_syntax_t04.dart.weak.transformed.expect b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.transformed.expect
index 58cf612..8b7c94f 100644
--- a/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/co19_language_metadata_syntax_t04.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,33 +17,13 @@
 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
 }
 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/complex_class_hierarchy.dart b/pkg/front_end/testcases/general/complex_class_hierarchy.dart
index c851026..3363794 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.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
+
 main() {}
 
 class A {}
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline.expect
index f56bf39..adeaf17 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 
 class A {}
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline_modelled.expect
index 99b7569..ca66b2f 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class ARN extends ARQ<A> {}
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.expect
index 79836e1..effbb96 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.expect
@@ -1,209 +1,109 @@
-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 self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-class G<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::G<self::G::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 GB extends self::G<self::B*> {
-  synthetic constructor •() → self::GB*
+class GB extends self::G<self::B> {
+  synthetic constructor •() → self::GB
     : super self::G::•()
     ;
 }
-class GC extends self::G<self::C*> {
-  synthetic constructor •() → self::GC*
+class GC extends self::G<self::C> {
+  synthetic constructor •() → self::GC
     : super self::G::•()
     ;
 }
-class GD extends self::G<self::D*> {
-  synthetic constructor •() → self::GD*
+class GD extends self::G<self::D> {
+  synthetic constructor •() → self::GD
     : super self::G::•()
     ;
 }
 class X extends core::Object implements self::A {
-  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 Z extends core::Object implements self::Y {
-  synthetic constructor •() → self::Z*
+  synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class W extends core::Object implements self::Z {
-  synthetic constructor •() → self::W*
+  synthetic constructor •() → self::W
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GX extends core::Object implements self::G<self::A*> {
-  synthetic constructor •() → self::GX*
+class GX extends core::Object implements self::G<self::A> {
+  synthetic constructor •() → self::GX
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GY extends self::X implements self::GB {
-  synthetic constructor •() → self::GY*
+  synthetic constructor •() → self::GY
     : super self::X::•()
     ;
 }
 class GZ extends core::Object implements self::Y, self::GC {
-  synthetic constructor •() → self::GZ*
+  synthetic constructor •() → self::GZ
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GW extends core::Object implements self::Z, self::GD {
-  synthetic constructor •() → self::GW*
+  synthetic constructor •() → self::GW
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GU extends self::GW {
-  synthetic constructor •() → self::GU*
+  synthetic constructor •() → self::GU
     : super self::GW::•()
     ;
 }
 class GV extends self::GU implements self::GW {
-  synthetic constructor •() → self::GV*
+  synthetic constructor •() → self::GV
     : super self::GU::•()
     ;
 }
-class ARO<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ARO<self::ARO::S*>*
+class ARO<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ARO<self::ARO::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 ARQ<T extends core::Object* = dynamic> extends core::Object implements self::ARO<self::ARQ::T*> {
-  synthetic constructor •() → self::ARQ<self::ARQ::T*>*
+class ARQ<T extends core::Object? = dynamic> extends core::Object implements self::ARO<self::ARQ::T%> {
+  synthetic constructor •() → self::ARQ<self::ARQ::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 ARN extends self::ARQ<self::A*> {
-  synthetic constructor •() → self::ARN*
+class ARN extends self::ARQ<self::A> {
+  synthetic constructor •() → self::ARN
     : super self::ARQ::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect
index 79836e1..effbb96 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.modular.expect
@@ -1,209 +1,109 @@
-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 self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-class G<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::G<self::G::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 GB extends self::G<self::B*> {
-  synthetic constructor •() → self::GB*
+class GB extends self::G<self::B> {
+  synthetic constructor •() → self::GB
     : super self::G::•()
     ;
 }
-class GC extends self::G<self::C*> {
-  synthetic constructor •() → self::GC*
+class GC extends self::G<self::C> {
+  synthetic constructor •() → self::GC
     : super self::G::•()
     ;
 }
-class GD extends self::G<self::D*> {
-  synthetic constructor •() → self::GD*
+class GD extends self::G<self::D> {
+  synthetic constructor •() → self::GD
     : super self::G::•()
     ;
 }
 class X extends core::Object implements self::A {
-  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 Z extends core::Object implements self::Y {
-  synthetic constructor •() → self::Z*
+  synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class W extends core::Object implements self::Z {
-  synthetic constructor •() → self::W*
+  synthetic constructor •() → self::W
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GX extends core::Object implements self::G<self::A*> {
-  synthetic constructor •() → self::GX*
+class GX extends core::Object implements self::G<self::A> {
+  synthetic constructor •() → self::GX
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GY extends self::X implements self::GB {
-  synthetic constructor •() → self::GY*
+  synthetic constructor •() → self::GY
     : super self::X::•()
     ;
 }
 class GZ extends core::Object implements self::Y, self::GC {
-  synthetic constructor •() → self::GZ*
+  synthetic constructor •() → self::GZ
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GW extends core::Object implements self::Z, self::GD {
-  synthetic constructor •() → self::GW*
+  synthetic constructor •() → self::GW
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GU extends self::GW {
-  synthetic constructor •() → self::GU*
+  synthetic constructor •() → self::GU
     : super self::GW::•()
     ;
 }
 class GV extends self::GU implements self::GW {
-  synthetic constructor •() → self::GV*
+  synthetic constructor •() → self::GV
     : super self::GU::•()
     ;
 }
-class ARO<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ARO<self::ARO::S*>*
+class ARO<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ARO<self::ARO::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 ARQ<T extends core::Object* = dynamic> extends core::Object implements self::ARO<self::ARQ::T*> {
-  synthetic constructor •() → self::ARQ<self::ARQ::T*>*
+class ARQ<T extends core::Object? = dynamic> extends core::Object implements self::ARO<self::ARQ::T%> {
+  synthetic constructor •() → self::ARQ<self::ARQ::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 ARN extends self::ARQ<self::A*> {
-  synthetic constructor •() → self::ARN*
+class ARN extends self::ARQ<self::A> {
+  synthetic constructor •() → self::ARN
     : super self::ARQ::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.outline.expect
index ec0b3ec..be59749 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.outline.expect
@@ -1,189 +1,89 @@
-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 C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
 }
-class G<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::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 GB extends self::G<self::B*> {
-  synthetic constructor •() → self::GB*
+class G<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::G<self::G::T>
     ;
 }
-class GC extends self::G<self::C*> {
-  synthetic constructor •() → self::GC*
+class GB extends self::G<self::B> {
+  synthetic constructor •() → self::GB
     ;
 }
-class GD extends self::G<self::D*> {
-  synthetic constructor •() → self::GD*
+class GC extends self::G<self::C> {
+  synthetic constructor •() → self::GC
+    ;
+}
+class GD extends self::G<self::D> {
+  synthetic constructor •() → self::GD
     ;
 }
 class X extends core::Object implements self::A {
-  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 Z extends core::Object implements self::Y {
-  synthetic constructor •() → self::Z*
+  synthetic constructor •() → self::Z
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class W extends core::Object implements self::Z {
-  synthetic constructor •() → self::W*
+  synthetic 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 GX extends core::Object implements self::G<self::A*> {
-  synthetic constructor •() → self::GX*
+class GX extends core::Object implements self::G<self::A> {
+  synthetic constructor •() → self::GX
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GY extends self::X implements self::GB {
-  synthetic constructor •() → self::GY*
+  synthetic constructor •() → self::GY
     ;
 }
 class GZ extends core::Object implements self::Y, self::GC {
-  synthetic constructor •() → self::GZ*
+  synthetic constructor •() → self::GZ
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GW extends core::Object implements self::Z, self::GD {
-  synthetic constructor •() → self::GW*
+  synthetic constructor •() → self::GW
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GU extends self::GW {
-  synthetic constructor •() → self::GU*
+  synthetic constructor •() → self::GU
     ;
 }
 class GV extends self::GU implements self::GW {
-  synthetic constructor •() → self::GV*
+  synthetic constructor •() → self::GV
     ;
 }
-class ARO<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ARO<self::ARO::S*>*
+class ARO<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ARO<self::ARO::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 ARQ<T extends core::Object* = dynamic> extends core::Object implements self::ARO<self::ARQ::T*> {
-  synthetic constructor •() → self::ARQ<self::ARQ::T*>*
+class ARQ<T extends core::Object? = dynamic> extends core::Object implements self::ARO<self::ARQ::T%> {
+  synthetic constructor •() → self::ARQ<self::ARQ::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 ARN extends self::ARQ<self::A*> {
-  synthetic constructor •() → self::ARN*
+class ARN extends self::ARQ<self::A> {
+  synthetic constructor •() → self::ARN
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.transformed.expect
index 79836e1..effbb96 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.weak.transformed.expect
@@ -1,209 +1,109 @@
-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 self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
-class G<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::G<self::G::T*>*
+class G<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::G<self::G::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 GB extends self::G<self::B*> {
-  synthetic constructor •() → self::GB*
+class GB extends self::G<self::B> {
+  synthetic constructor •() → self::GB
     : super self::G::•()
     ;
 }
-class GC extends self::G<self::C*> {
-  synthetic constructor •() → self::GC*
+class GC extends self::G<self::C> {
+  synthetic constructor •() → self::GC
     : super self::G::•()
     ;
 }
-class GD extends self::G<self::D*> {
-  synthetic constructor •() → self::GD*
+class GD extends self::G<self::D> {
+  synthetic constructor •() → self::GD
     : super self::G::•()
     ;
 }
 class X extends core::Object implements self::A {
-  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 Z extends core::Object implements self::Y {
-  synthetic constructor •() → self::Z*
+  synthetic constructor •() → self::Z
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class W extends core::Object implements self::Z {
-  synthetic constructor •() → self::W*
+  synthetic constructor •() → self::W
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GX extends core::Object implements self::G<self::A*> {
-  synthetic constructor •() → self::GX*
+class GX extends core::Object implements self::G<self::A> {
+  synthetic constructor •() → self::GX
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GY extends self::X implements self::GB {
-  synthetic constructor •() → self::GY*
+  synthetic constructor •() → self::GY
     : super self::X::•()
     ;
 }
 class GZ extends core::Object implements self::Y, self::GC {
-  synthetic constructor •() → self::GZ*
+  synthetic constructor •() → self::GZ
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GW extends core::Object implements self::Z, self::GD {
-  synthetic constructor •() → self::GW*
+  synthetic constructor •() → self::GW
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GU extends self::GW {
-  synthetic constructor •() → self::GU*
+  synthetic constructor •() → self::GU
     : super self::GW::•()
     ;
 }
 class GV extends self::GU implements self::GW {
-  synthetic constructor •() → self::GV*
+  synthetic constructor •() → self::GV
     : super self::GU::•()
     ;
 }
-class ARO<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::ARO<self::ARO::S*>*
+class ARO<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::ARO<self::ARO::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 ARQ<T extends core::Object* = dynamic> extends core::Object implements self::ARO<self::ARQ::T*> {
-  synthetic constructor •() → self::ARQ<self::ARQ::T*>*
+class ARQ<T extends core::Object? = dynamic> extends core::Object implements self::ARO<self::ARQ::T%> {
+  synthetic constructor •() → self::ARQ<self::ARQ::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 ARN extends self::ARQ<self::A*> {
-  synthetic constructor •() → self::ARN*
+class ARN extends self::ARQ<self::A> {
+  synthetic constructor •() → self::ARN
     : super self::ARQ::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart
index 1db3cbe..a1d1af7 100644
--- a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart
+++ b/pkg/front_end/testcases/general/compound_binary_implicit_as.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 extends A {
diff --git a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect
index f8d6d80..2cb045b 100644
--- a/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/compound_binary_implicit_as.dart.weak.transformed.expect
@@ -41,6 +41,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///compound_binary_implicit_as.dart:16:9 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///compound_binary_implicit_as.dart:16:9 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///compound_binary_implicit_as.dart:18:9 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///compound_binary_implicit_as.dart:18:9 -> IntConstant(0)
 Extra constant evaluation: evaluated: 16, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart b/pkg/front_end/testcases/general/constant_truncate.dart
index 2d09173..2f2e792 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart
+++ b/pkg/front_end/testcases/general/constant_truncate.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 a0 = 0 ~/ 0; // error
 const a1 = 0.0 ~/ 0; // error
 const a2 = -0.0 ~/ 0; // error
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline.expect b/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline.expect
index cc9734c..44d49e8 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const a0 = 0 ~/ 0;
 const a1 = 0.0 ~/ 0;
 const a2 = -0.0 ~/ 0;
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline_modelled.expect
index 84e1f84..4eeedfa 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const a0 = 0 ~/ 0;
 const a1 = 0.0 ~/ 0;
 const a2 = -0.0 ~/ 0;
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect
index f87f7ba..e3e759a 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -305,103 +305,103 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
-static const field core::int* e0 = #C1;
-static const field core::int* e1 = #C1;
-static const field core::int* e2 = #C1;
-static const field core::int* e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* f0 = #C1;
-static const field core::int* f1 = #C1;
-static const field core::int* f2 = #C1;
-static const field core::int* f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
-static const field core::int* f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
-static const field core::int* f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
+static const field core::int d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int e0 = #C1;
+static const field core::int e1 = #C1;
+static const field core::int e2 = #C1;
+static const field core::int e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
+static const field core::int e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int f0 = #C1;
+static const field core::int f1 = #C1;
+static const field core::int f2 = #C1;
+static const field core::int f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
 static method main() → dynamic {
-  self::test(0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, #C2, () → core::int* => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0, #C2, () → core::int* => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(#C2, #C2, () → core::int* => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
-  self::test(#C3, #C2, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
-  self::test(#C4, #C2, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
-  self::test(0, #C3, () → core::int* => #C1);
-  self::test(0.0, #C3, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C3, () → core::int* => #C1);
-  self::test(#C2, #C3, () → core::int* => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
-  self::test(#C3, #C3, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
-  self::test(#C4, #C3, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
-  self::test(0, #C4, () → core::int* => #C1);
-  self::test(0.0, #C4, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C4, () → core::int* => #C1);
-  self::test(#C2, #C4, () → core::int* => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
-  self::test(#C3, #C4, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
-  self::test(#C4, #C4, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(0, 0, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, #C2, () → core::int => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0, #C2, () → core::int => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C2, () → core::int => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(#C2, #C2, () → core::int => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
+  self::test(#C3, #C2, () → core::int => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(#C4, #C2, () → core::int => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(0, #C3, () → core::int => #C1);
+  self::test(0.0, #C3, () → core::int => #C1);
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C3, () → core::int => #C1);
+  self::test(#C2, #C3, () → core::int => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C3, () → core::int => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C3, () → core::int => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(0, #C4, () → core::int => #C1);
+  self::test(0.0, #C4, () → core::int => #C1);
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C4, () → core::int => #C1);
+  self::test(#C2, #C4, () → core::int => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C4, () → core::int => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C4, () → core::int => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
 }
-static method test(core::num* a, core::num* b, () →* core::num* f) → void {
-  core::num* result;
+static method test(core::num a, core::num b, () → core::num f) → void {
+  core::num result;
   try {
-    result = a.{core::num::~/}(b){(core::num*) →* core::int*};
+    result = a.{core::num::~/}(b){(core::num) → core::int};
     core::print("${a} ~/ ${b} = ${result}");
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print("${a} ~/ ${b} throws ${e}");
     self::throws(f);
     return;
   }
-  self::expect(f(){() →* core::num*}, result);
+  self::expect(f(){() → core::num}, result);
 }
 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(() →* core::num* f) → void {
+static method throws(() → core::num f) → void {
   try {
-    f(){() →* core::num*};
+    f(){() → core::num};
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect
index f87f7ba..e3e759a 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -305,103 +305,103 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
-static const field core::int* e0 = #C1;
-static const field core::int* e1 = #C1;
-static const field core::int* e2 = #C1;
-static const field core::int* e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* f0 = #C1;
-static const field core::int* f1 = #C1;
-static const field core::int* f2 = #C1;
-static const field core::int* f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
-static const field core::int* f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
-static const field core::int* f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
+static const field core::int d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int e0 = #C1;
+static const field core::int e1 = #C1;
+static const field core::int e2 = #C1;
+static const field core::int e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
+static const field core::int e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int f0 = #C1;
+static const field core::int f1 = #C1;
+static const field core::int f2 = #C1;
+static const field core::int f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
 static method main() → dynamic {
-  self::test(0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, #C2, () → core::int* => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0, #C2, () → core::int* => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(#C2, #C2, () → core::int* => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
-  self::test(#C3, #C2, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
-  self::test(#C4, #C2, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
-  self::test(0, #C3, () → core::int* => #C1);
-  self::test(0.0, #C3, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C3, () → core::int* => #C1);
-  self::test(#C2, #C3, () → core::int* => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
-  self::test(#C3, #C3, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
-  self::test(#C4, #C3, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
-  self::test(0, #C4, () → core::int* => #C1);
-  self::test(0.0, #C4, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C4, () → core::int* => #C1);
-  self::test(#C2, #C4, () → core::int* => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
-  self::test(#C3, #C4, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
-  self::test(#C4, #C4, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(0, 0, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, #C2, () → core::int => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0, #C2, () → core::int => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C2, () → core::int => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(#C2, #C2, () → core::int => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
+  self::test(#C3, #C2, () → core::int => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(#C4, #C2, () → core::int => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(0, #C3, () → core::int => #C1);
+  self::test(0.0, #C3, () → core::int => #C1);
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C3, () → core::int => #C1);
+  self::test(#C2, #C3, () → core::int => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C3, () → core::int => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C3, () → core::int => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(0, #C4, () → core::int => #C1);
+  self::test(0.0, #C4, () → core::int => #C1);
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C4, () → core::int => #C1);
+  self::test(#C2, #C4, () → core::int => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C4, () → core::int => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C4, () → core::int => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
 }
-static method test(core::num* a, core::num* b, () →* core::num* f) → void {
-  core::num* result;
+static method test(core::num a, core::num b, () → core::num f) → void {
+  core::num result;
   try {
-    result = a.{core::num::~/}(b){(core::num*) →* core::int*};
+    result = a.{core::num::~/}(b){(core::num) → core::int};
     core::print("${a} ~/ ${b} = ${result}");
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print("${a} ~/ ${b} throws ${e}");
     self::throws(f);
     return;
   }
-  self::expect(f(){() →* core::num*}, result);
+  self::expect(f(){() → core::num}, result);
 }
 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(() →* core::num* f) → void {
+static method throws(() → core::num f) → void {
   try {
-    f(){() →* core::num*};
+    f(){() → core::num};
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect
index ddc3a1d..2686aea 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.outline.expect
@@ -1,50 +1,50 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* a0 = 0.{core::num::~/}(0){(core::num*) →* core::int*};
-static const field core::int* a1 = 0.0.{core::double::~/}(0){(core::num*) →* core::int*};
-static const field core::int* a2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(0){(core::num*) →* core::int*};
-static const field core::int* a3 = core::double::nan.{core::double::~/}(0){(core::num*) →* core::int*};
-static const field core::int* a4 = core::double::infinity.{core::double::~/}(0){(core::num*) →* core::int*};
-static const field core::int* a5 = core::double::negativeInfinity.{core::double::~/}(0){(core::num*) →* core::int*};
-static const field core::int* b0 = 0.{core::num::~/}(0.0){(core::num*) →* core::int*};
-static const field core::int* b1 = 0.0.{core::double::~/}(0.0){(core::num*) →* core::int*};
-static const field core::int* b2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(0.0){(core::num*) →* core::int*};
-static const field core::int* b3 = core::double::nan.{core::double::~/}(0.0){(core::num*) →* core::int*};
-static const field core::int* b4 = core::double::infinity.{core::double::~/}(0.0){(core::num*) →* core::int*};
-static const field core::int* b5 = core::double::negativeInfinity.{core::double::~/}(0.0){(core::num*) →* core::int*};
-static const field core::int* c0 = 0.{core::num::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
-static const field core::int* c1 = 0.0.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
-static const field core::int* c2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
-static const field core::int* c3 = core::double::nan.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
-static const field core::int* c4 = core::double::infinity.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
-static const field core::int* c5 = core::double::negativeInfinity.{core::double::~/}(0.0.{core::double::unary-}(){() →* core::double*}){(core::num*) →* core::int*};
-static const field core::int* d0 = 0.{core::num::~/}(core::double::nan){(core::num*) →* core::int*};
-static const field core::int* d1 = 0.0.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
-static const field core::int* d2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
-static const field core::int* d3 = core::double::nan.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
-static const field core::int* d4 = core::double::infinity.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
-static const field core::int* d5 = core::double::negativeInfinity.{core::double::~/}(core::double::nan){(core::num*) →* core::int*};
-static const field core::int* e0 = 0.{core::num::~/}(core::double::infinity){(core::num*) →* core::int*};
-static const field core::int* e1 = 0.0.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
-static const field core::int* e2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
-static const field core::int* e3 = core::double::nan.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
-static const field core::int* e4 = core::double::infinity.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
-static const field core::int* e5 = core::double::negativeInfinity.{core::double::~/}(core::double::infinity){(core::num*) →* core::int*};
-static const field core::int* f0 = 0.{core::num::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
-static const field core::int* f1 = 0.0.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
-static const field core::int* f2 = 0.0.{core::double::unary-}(){() →* core::double*}.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
-static const field core::int* f3 = core::double::nan.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
-static const field core::int* f4 = core::double::infinity.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
-static const field core::int* f5 = core::double::negativeInfinity.{core::double::~/}(core::double::negativeInfinity){(core::num*) →* core::int*};
+static const field core::int a0 = 0.{core::num::~/}(0){(core::num) → core::int};
+static const field core::int a1 = 0.0.{core::double::~/}(0){(core::num) → core::int};
+static const field core::int a2 = 0.0.{core::double::unary-}(){() → core::double}.{core::double::~/}(0){(core::num) → core::int};
+static const field core::int a3 = core::double::nan.{core::double::~/}(0){(core::num) → core::int};
+static const field core::int a4 = core::double::infinity.{core::double::~/}(0){(core::num) → core::int};
+static const field core::int a5 = core::double::negativeInfinity.{core::double::~/}(0){(core::num) → core::int};
+static const field core::int b0 = 0.{core::num::~/}(0.0){(core::num) → core::int};
+static const field core::int b1 = 0.0.{core::double::~/}(0.0){(core::num) → core::int};
+static const field core::int b2 = 0.0.{core::double::unary-}(){() → core::double}.{core::double::~/}(0.0){(core::num) → core::int};
+static const field core::int b3 = core::double::nan.{core::double::~/}(0.0){(core::num) → core::int};
+static const field core::int b4 = core::double::infinity.{core::double::~/}(0.0){(core::num) → core::int};
+static const field core::int b5 = core::double::negativeInfinity.{core::double::~/}(0.0){(core::num) → core::int};
+static const field core::int c0 = 0.{core::num::~/}(0.0.{core::double::unary-}(){() → core::double}){(core::num) → core::int};
+static const field core::int c1 = 0.0.{core::double::~/}(0.0.{core::double::unary-}(){() → core::double}){(core::num) → core::int};
+static const field core::int c2 = 0.0.{core::double::unary-}(){() → core::double}.{core::double::~/}(0.0.{core::double::unary-}(){() → core::double}){(core::num) → core::int};
+static const field core::int c3 = core::double::nan.{core::double::~/}(0.0.{core::double::unary-}(){() → core::double}){(core::num) → core::int};
+static const field core::int c4 = core::double::infinity.{core::double::~/}(0.0.{core::double::unary-}(){() → core::double}){(core::num) → core::int};
+static const field core::int c5 = core::double::negativeInfinity.{core::double::~/}(0.0.{core::double::unary-}(){() → core::double}){(core::num) → core::int};
+static const field core::int d0 = 0.{core::num::~/}(core::double::nan){(core::num) → core::int};
+static const field core::int d1 = 0.0.{core::double::~/}(core::double::nan){(core::num) → core::int};
+static const field core::int d2 = 0.0.{core::double::unary-}(){() → core::double}.{core::double::~/}(core::double::nan){(core::num) → core::int};
+static const field core::int d3 = core::double::nan.{core::double::~/}(core::double::nan){(core::num) → core::int};
+static const field core::int d4 = core::double::infinity.{core::double::~/}(core::double::nan){(core::num) → core::int};
+static const field core::int d5 = core::double::negativeInfinity.{core::double::~/}(core::double::nan){(core::num) → core::int};
+static const field core::int e0 = 0.{core::num::~/}(core::double::infinity){(core::num) → core::int};
+static const field core::int e1 = 0.0.{core::double::~/}(core::double::infinity){(core::num) → core::int};
+static const field core::int e2 = 0.0.{core::double::unary-}(){() → core::double}.{core::double::~/}(core::double::infinity){(core::num) → core::int};
+static const field core::int e3 = core::double::nan.{core::double::~/}(core::double::infinity){(core::num) → core::int};
+static const field core::int e4 = core::double::infinity.{core::double::~/}(core::double::infinity){(core::num) → core::int};
+static const field core::int e5 = core::double::negativeInfinity.{core::double::~/}(core::double::infinity){(core::num) → core::int};
+static const field core::int f0 = 0.{core::num::~/}(core::double::negativeInfinity){(core::num) → core::int};
+static const field core::int f1 = 0.0.{core::double::~/}(core::double::negativeInfinity){(core::num) → core::int};
+static const field core::int f2 = 0.0.{core::double::unary-}(){() → core::double}.{core::double::~/}(core::double::negativeInfinity){(core::num) → core::int};
+static const field core::int f3 = core::double::nan.{core::double::~/}(core::double::negativeInfinity){(core::num) → core::int};
+static const field core::int f4 = core::double::infinity.{core::double::~/}(core::double::negativeInfinity){(core::num) → core::int};
+static const field core::int f5 = core::double::negativeInfinity.{core::double::~/}(core::double::negativeInfinity){(core::num) → core::int};
 static method main() → dynamic
   ;
-static method test(core::num* a, core::num* b, () →* core::num* f) → void
+static method test(core::num a, core::num b, () → core::num f) → void
   ;
 static method expect(dynamic expected, dynamic actual) → void
   ;
-static method throws(() →* core::num* f) → void
+static method throws(() → core::num f) → void
   ;
 
 
diff --git a/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect
index 5bb1e01..375b557 100644
--- a/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constant_truncate.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -305,103 +305,103 @@
 import self as self;
 import "dart:core" as core;
 
-static const field core::int* a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
-static const field core::int* d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
-static const field core::int* d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
-static const field core::int* e0 = #C1;
-static const field core::int* e1 = #C1;
-static const field core::int* e2 = #C1;
-static const field core::int* e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
-static const field core::int* f0 = #C1;
-static const field core::int* f1 = #C1;
-static const field core::int* f2 = #C1;
-static const field core::int* f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
-static const field core::int* f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
-static const field core::int* f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int a0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int a5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int b5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c0 = invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c1 = invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c2 = invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c3 = invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c4 = invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int c5 = invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.";
+static const field core::int d0 = invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d1 = invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d2 = invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.";
+static const field core::int d3 = invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.";
+static const field core::int d4 = invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int d5 = invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.";
+static const field core::int e0 = #C1;
+static const field core::int e1 = #C1;
+static const field core::int e2 = #C1;
+static const field core::int e3 = invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.";
+static const field core::int e4 = invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int e5 = invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.";
+static const field core::int f0 = #C1;
+static const field core::int f1 = #C1;
+static const field core::int f2 = #C1;
+static const field core::int f3 = invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int f4 = invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.";
+static const field core::int f5 = invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.";
 static method main() → dynamic {
-  self::test(0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C2, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C3, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(#C4, 0.0.{core::double::unary-}(){() →* core::double*}, () → core::int* => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
-  self::test(0, #C2, () → core::int* => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0, #C2, () → core::int* => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C2, () → core::int* => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
-  self::test(#C2, #C2, () → core::int* => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
-  self::test(#C3, #C2, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
-  self::test(#C4, #C2, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
-  self::test(0, #C3, () → core::int* => #C1);
-  self::test(0.0, #C3, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C3, () → core::int* => #C1);
-  self::test(#C2, #C3, () → core::int* => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
-  self::test(#C3, #C3, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
-  self::test(#C4, #C3, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
-  self::test(0, #C4, () → core::int* => #C1);
-  self::test(0.0, #C4, () → core::int* => #C1);
-  self::test(0.0.{core::double::unary-}(){() →* core::double*}, #C4, () → core::int* => #C1);
-  self::test(#C2, #C4, () → core::int* => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
-  self::test(#C3, #C4, () → core::int* => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
-  self::test(#C4, #C4, () → core::int* => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(0, 0, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '-0.0' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C2, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on 'NaN' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C3, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on 'Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(#C4, 0.0.{core::double::unary-}(){() → core::double}, () → core::int => invalid-expression "Binary operator '~/' on '-Infinity' requires non-zero divisor, but divisor was '0'.");
+  self::test(0, #C2, () → core::int => invalid-expression "Binary operator '0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0, #C2, () → core::int => invalid-expression "Binary operator '0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C2, () → core::int => invalid-expression "Binary operator '-0.0 ~/ NaN' results is Infinity or NaN.");
+  self::test(#C2, #C2, () → core::int => invalid-expression "Binary operator 'NaN ~/ NaN' results is Infinity or NaN.");
+  self::test(#C3, #C2, () → core::int => invalid-expression "Binary operator 'Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(#C4, #C2, () → core::int => invalid-expression "Binary operator '-Infinity ~/ NaN' results is Infinity or NaN.");
+  self::test(0, #C3, () → core::int => #C1);
+  self::test(0.0, #C3, () → core::int => #C1);
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C3, () → core::int => #C1);
+  self::test(#C2, #C3, () → core::int => invalid-expression "Binary operator 'NaN ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C3, () → core::int => invalid-expression "Binary operator 'Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C3, () → core::int => invalid-expression "Binary operator '-Infinity ~/ Infinity' results is Infinity or NaN.");
+  self::test(0, #C4, () → core::int => #C1);
+  self::test(0.0, #C4, () → core::int => #C1);
+  self::test(0.0.{core::double::unary-}(){() → core::double}, #C4, () → core::int => #C1);
+  self::test(#C2, #C4, () → core::int => invalid-expression "Binary operator 'NaN ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C3, #C4, () → core::int => invalid-expression "Binary operator 'Infinity ~/ -Infinity' results is Infinity or NaN.");
+  self::test(#C4, #C4, () → core::int => invalid-expression "Binary operator '-Infinity ~/ -Infinity' results is Infinity or NaN.");
 }
-static method test(core::num* a, core::num* b, () →* core::num* f) → void {
-  core::num* result;
+static method test(core::num a, core::num b, () → core::num f) → void {
+  core::num result;
   try {
-    result = a.{core::num::~/}(b){(core::num*) →* core::int*};
+    result = a.{core::num::~/}(b){(core::num) → core::int};
     core::print("${a} ~/ ${b} = ${result}");
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     core::print("${a} ~/ ${b} throws ${e}");
     self::throws(f);
     return;
   }
-  self::expect(f(){() →* core::num*}, result);
+  self::expect(f(){() → core::num}, result);
 }
 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(() →* core::num* f) → void {
+static method throws(() → core::num f) → void {
   try {
-    f(){() →* core::num*};
+    f(){() → core::num};
   }
-  on dynamic catch(final dynamic e) {
+  on core::Object catch(final core::Object e) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart b/pkg/front_end/testcases/general/constructor_const_inference.dart
index e883d4f..824e517 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart
+++ b/pkg/front_end/testcases/general/constructor_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' constructors
 // in case there are type variables in them.
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline.expect
index e300475..f6ab576 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class _Y<T> {
   const _Y();
 }
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline_modelled.expect
index 46d2c92..6b4aec7 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {
   A(this.x);
   _Y<T> x;
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
index 2c1402b..21168f4 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
@@ -1,52 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _Y<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object /*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::_Y<self::A::T*>* x;
-  constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_Y<self::A::T%> x;
+  constructor •(self::_Y<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::•(#C1)
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_Y<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::_Y<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 = self::_Y<Null> {}
+  #C1 = self::_Y<Never*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect
index 2c1402b..21168f4 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.modular.expect
@@ -1,52 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _Y<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object /*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::_Y<self::A::T*>* x;
-  constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_Y<self::A::T%> x;
+  constructor •(self::_Y<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::•(#C1)
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_Y<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::_Y<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 = self::_Y<Null> {}
+  #C1 = self::_Y<Never*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect
index f0f7deb..86ab71d 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect
@@ -1,39 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _Y<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object /*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::_Y<self::A::T*>* x;
-  constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_Y<self::A::T%> x;
+  constructor •(self::_Y<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/constructor_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
index 2c1402b..21168f4 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
@@ -1,52 +1,32 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class _Y<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::_Y<self::_Y::T*>*
+class _Y<T extends core::Object? = dynamic> extends core::Object /*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::_Y<self::A::T*>* x;
-  constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::_Y<self::A::T%> x;
+  constructor •(self::_Y<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::•(#C1)
     ;
 }
 static method main() → dynamic {
-  dynamic x = new self::B::•<dynamic>().{self::A::x}{self::_Y<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::_Y<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 = self::_Y<Null> {}
+  #C1 = self::_Y<Never*> {}
 }
 
 
diff --git a/pkg/front_end/testcases/general/constructor_cycle.dart b/pkg/front_end/testcases/general/constructor_cycle.dart
index 42f7fd7..85f38e4 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart
+++ b/pkg/front_end/testcases/general/constructor_cycle.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 A {
   A.foo() : this.bar();
   A.bar() : this.foo();
diff --git a/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline.expect
index 1fa7cfe..4471e83 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A.foo() : this.bar();
   A.bar() : this.foo();
diff --git a/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline_modelled.expect
index c42a433..051f9f7 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constructor_cycle.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A() : this();
   A.bar() : this.foo();
diff --git a/pkg/front_end/testcases/general/constructor_cycle.dart.weak.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.expect
index 7510955..e65ccdb 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,27 +16,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor foo() → self::A*
+  constructor foo() → self::A
     : this self::A::bar()
     ;
-  constructor bar() → self::A*
+  constructor bar() → self::A
     : this self::A::foo()
     ;
-  constructor baz() → self::A*
+  constructor baz() → self::A
     : this self::A::foo()
     ;
-  constructor •() → self::A*
+  constructor •() → self::A
     : this 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/constructor_cycle.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.modular.expect
index 7510955..e65ccdb 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,27 +16,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor foo() → self::A*
+  constructor foo() → self::A
     : this self::A::bar()
     ;
-  constructor bar() → self::A*
+  constructor bar() → self::A
     : this self::A::foo()
     ;
-  constructor baz() → self::A*
+  constructor baz() → self::A
     : this self::A::foo()
     ;
-  constructor •() → self::A*
+  constructor •() → self::A
     : this 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/constructor_cycle.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.outline.expect
index a3bff12..0be8c19 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_cycle.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 {
-  constructor foo() → self::A*
+  constructor foo() → self::A
     ;
-  constructor bar() → self::A*
+  constructor bar() → self::A
     ;
-  constructor baz() → self::A*
+  constructor baz() → self::A
     ;
-  constructor •() → self::A*
+  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/constructor_cycle.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.transformed.expect
index 7510955..e65ccdb 100644
--- a/pkg/front_end/testcases/general/constructor_cycle.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_cycle.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,27 +16,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor foo() → self::A*
+  constructor foo() → self::A
     : this self::A::bar()
     ;
-  constructor bar() → self::A*
+  constructor bar() → self::A
     : this self::A::foo()
     ;
-  constructor baz() → self::A*
+  constructor baz() → self::A
     : this self::A::foo()
     ;
-  constructor •() → self::A*
+  constructor •() → self::A
     : this 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/constructor_function_types.dart b/pkg/front_end/testcases/general/constructor_function_types.dart
index 35037a9..d2c70d6 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart
+++ b/pkg/front_end/testcases/general/constructor_function_types.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 A {
   A();
 }
@@ -22,5 +22,5 @@
   new A();
   new B(0, 3.14, "foo");
   new C();
-  new D<Object, int>(null, 3);
+  new D<Object, int>(new Object(), 3);
 }
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline.expect
index 6990c7d..52ecd80 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A();
 }
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline_modelled.expect
index 6990c7d..52ecd80 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A();
 }
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.expect
index 3e5a359..9b1c710 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.expect
@@ -1,70 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  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 {
-  constructor •(core::int* x, core::double* y, core::String* s) → self::B*
+  constructor •(core::int x, core::double y, core::String s) → 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 C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  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
 }
-class D<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::D::T* x, self::D::S* y) → self::D<self::D::T*, self::D::S*>*
+class D<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% x, self::D::S% y) → self::D<self::D::T%, self::D::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
 }
 static method main() → void {
   new self::A::•();
   new self::B::•(0, 3.14, "foo");
   new self::C::•<dynamic>();
-  new self::D::•<core::Object*, core::int*>(null, 3);
+  new self::D::•<core::Object, core::int>(new core::Object::•(), 3);
 }
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect
index 3e5a359..9b1c710 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.modular.expect
@@ -1,70 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  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 {
-  constructor •(core::int* x, core::double* y, core::String* s) → self::B*
+  constructor •(core::int x, core::double y, core::String s) → 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 C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  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
 }
-class D<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::D::T* x, self::D::S* y) → self::D<self::D::T*, self::D::S*>*
+class D<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% x, self::D::S% y) → self::D<self::D::T%, self::D::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
 }
 static method main() → void {
   new self::A::•();
   new self::B::•(0, 3.14, "foo");
   new self::C::•<dynamic>();
-  new self::D::•<core::Object*, core::int*>(null, 3);
+  new self::D::•<core::Object, core::int>(new core::Object::•(), 3);
 }
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.outline.expect
index 77d1f0c..bd1b261 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.outline.expect
@@ -1,62 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  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 {
-  constructor •(core::int* x, core::double* y, core::String* s) → self::B*
+  constructor •(core::int x, core::double y, core::String s) → 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 C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  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
 }
-class D<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::D::T* x, self::D::S* y) → self::D<self::D::T*, self::D::S*>*
+class D<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% x, self::D::S% y) → self::D<self::D::T%, self::D::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() → void
   ;
diff --git a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.transformed.expect
index 3e5a359..9b1c710 100644
--- a/pkg/front_end/testcases/general/constructor_function_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_function_types.dart.weak.transformed.expect
@@ -1,70 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  constructor •() → self::A*
+  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 {
-  constructor •(core::int* x, core::double* y, core::String* s) → self::B*
+  constructor •(core::int x, core::double y, core::String s) → 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 C<T extends core::Object* = dynamic> extends core::Object {
-  constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  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
 }
-class D<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
-  constructor •(self::D::T* x, self::D::S* y) → self::D<self::D::T*, self::D::S*>*
+class D<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  constructor •(self::D::T% x, self::D::S% y) → self::D<self::D::T%, self::D::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
 }
 static method main() → void {
   new self::A::•();
   new self::B::•(0, 3.14, "foo");
   new self::C::•<dynamic>();
-  new self::D::•<core::Object*, core::int*>(null, 3);
+  new self::D::•<core::Object, core::int>(new core::Object::•(), 3);
 }
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart
index 6ff4140..8d30fe5 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart
@@ -1,10 +1,10 @@
 // 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 C1 { int f; C1() : ; }
-class C2 { int f; C2() : f; }
-class C3 { int f; C3() : f++; }
+
+class C1 { var f; C1() : ; }
+class C2 { var f; C2() : f; }
+class C3 { var f; C3() : f++; }
 
 main() {
   var c1 = new C1();
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.textual_outline.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.textual_outline.expect
index e6ef74a..6244877 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.textual_outline.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 class C1 {
-  int f;
+  var f;
   C1() : =;
 }
 class C2 {
-  int f;
+  var f;
   C2() : f=;
 }
 class C3 {
-  int f;
+  var f;
   C3() : =f++;
 }
 main() {}
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
index 69f8ec9..ceee6e9 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.expect
@@ -1,87 +1,57 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:24: Error: Expected an initializer.
-// class C1 { int f; C1() : ; }
+// class C1 { var f; C1() : ; }
 //                        ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C2 { int f; C2() : f; }
+// class C2 { var f; C2() : f; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Can't access 'this' in a field initializer to read 'f'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 import self as self;
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  field core::int* f = null;
-  constructor •() → self::C1*
+  field dynamic f = null;
+  constructor •() → self::C1
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
-class C1 { int f; C1() : ; }
+class C1 { var f; 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
 }
 class C2 extends core::Object {
-  field core::int* f;
-  constructor •() → self::C2*
+  field dynamic f;
+  constructor •() → self::C2
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
-class C2 { int f; C2() : f; }
+class C2 { var f; C2() : 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
 }
 class C3 extends core::Object {
-  field core::int* f = null;
-  constructor •() → self::C3*
+  field dynamic f = null;
+  constructor •() → self::C3
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
-class C3 { int f; C3() : f++; }
+class C3 { var f; C3() : 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
 }
 static method main() → dynamic {
-  self::C1* c1 = new self::C1::•();
-  c1.{self::C1::toString}(){() →* core::String*};
-  self::C2* c2 = new self::C2::•();
-  c2.{self::C2::toString}(){() →* core::String*};
-  self::C3* c3 = new self::C3::•();
-  c3.{self::C3::toString}(){() →* core::String*};
+  self::C1 c1 = new self::C1::•();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C2 c2 = new self::C2::•();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C3 c3 = new self::C3::•();
+  c3.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect
index 69f8ec9..ceee6e9 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.modular.expect
@@ -1,87 +1,57 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:24: Error: Expected an initializer.
-// class C1 { int f; C1() : ; }
+// class C1 { var f; C1() : ; }
 //                        ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C2 { int f; C2() : f; }
+// class C2 { var f; C2() : f; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Can't access 'this' in a field initializer to read 'f'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 import self as self;
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  field core::int* f = null;
-  constructor •() → self::C1*
+  field dynamic f = null;
+  constructor •() → self::C1
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
-class C1 { int f; C1() : ; }
+class C1 { var f; 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
 }
 class C2 extends core::Object {
-  field core::int* f;
-  constructor •() → self::C2*
+  field dynamic f;
+  constructor •() → self::C2
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
-class C2 { int f; C2() : f; }
+class C2 { var f; C2() : 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
 }
 class C3 extends core::Object {
-  field core::int* f = null;
-  constructor •() → self::C3*
+  field dynamic f = null;
+  constructor •() → self::C3
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
-class C3 { int f; C3() : f++; }
+class C3 { var f; C3() : 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
 }
 static method main() → dynamic {
-  self::C1* c1 = new self::C1::•();
-  c1.{self::C1::toString}(){() →* core::String*};
-  self::C2* c2 = new self::C2::•();
-  c2.{self::C2::toString}(){() →* core::String*};
-  self::C3* c3 = new self::C3::•();
-  c3.{self::C3::toString}(){() →* core::String*};
+  self::C1 c1 = new self::C1::•();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C2 c2 = new self::C2::•();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C3 c3 = new self::C3::•();
+  c3.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.outline.expect
index 702dc5a..3aeaef6 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.outline.expect
@@ -1,68 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:24: Error: Expected an initializer.
-// class C1 { int f; C1() : ; }
+// class C1 { var f; C1() : ; }
 //                        ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C2 { int f; C2() : f; }
+// class C2 { var f; C2() : f; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 import self as self;
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  field core::int* f;
-  constructor •() → self::C1*
+  field dynamic f;
+  constructor •() → self::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
 }
 class C2 extends core::Object {
-  field core::int* f;
-  constructor •() → self::C2*
+  field dynamic f;
+  constructor •() → self::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
 }
 class C3 extends core::Object {
-  field core::int* f;
-  constructor •() → self::C3*
+  field dynamic f;
+  constructor •() → self::C3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/constructor_initializer_invalid.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect
index 69f8ec9..ceee6e9 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.weak.transformed.expect
@@ -1,87 +1,57 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:24: Error: Expected an initializer.
-// class C1 { int f; C1() : ; }
+// class C1 { var f; C1() : ; }
 //                        ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C2 { int f; C2() : f; }
+// class C2 { var f; C2() : f; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Expected an assignment after the field name.
 // To initialize a field, use the syntax 'name = value'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 // pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: Can't access 'this' in a field initializer to read 'f'.
-// class C3 { int f; C3() : f++; }
+// class C3 { var f; C3() : f++; }
 //                          ^
 //
 import self as self;
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  field core::int* f = null;
-  constructor •() → self::C1*
+  field dynamic f = null;
+  constructor •() → self::C1
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
-class C1 { int f; C1() : ; }
+class C1 { var f; 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
 }
 class C2 extends core::Object {
-  field core::int* f;
-  constructor •() → self::C2*
+  field dynamic f;
+  constructor •() → self::C2
     : self::C2::f = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
-class C2 { int f; C2() : f; }
+class C2 { var f; C2() : 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
 }
 class C3 extends core::Object {
-  field core::int* f = null;
-  constructor •() → self::C3*
+  field dynamic f = null;
+  constructor •() → self::C3
     : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
-class C3 { int f; C3() : f++; }
+class C3 { var f; C3() : 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
 }
 static method main() → dynamic {
-  self::C1* c1 = new self::C1::•();
-  c1.{self::C1::toString}(){() →* core::String*};
-  self::C2* c2 = new self::C2::•();
-  c2.{self::C2::toString}(){() →* core::String*};
-  self::C3* c3 = new self::C3::•();
-  c3.{self::C3::toString}(){() →* core::String*};
+  self::C1 c1 = new self::C1::•();
+  c1.{core::Object::toString}(){() → core::String};
+  self::C2 c2 = new self::C2::•();
+  c2.{core::Object::toString}(){() → core::String};
+  self::C3 c3 = new self::C3::•();
+  c3.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart b/pkg/front_end/testcases/general/continue_inference_after_error.dart
index 8e3d5d3..edcb626 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.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 "continue_inference_after_error_lib.dart" as lib;
 
 class C {}
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline.expect
index 5dd4bfd..419aa23 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "continue_inference_after_error_lib.dart" as lib;
 
 class C {}
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline_modelled.expect
index af026a2..2384d20 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "continue_inference_after_error_lib.dart" as lib;
 
 class C {}
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect
index cbaacd1..3fe7f57 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,24 +18,14 @@
 import "org-dartlang-testcase:///continue_inference_after_error_lib.dart" as lib;
 
 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
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
   lib(new C().missing());
-  ^^^" in let final core::Object* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+  ^^^" in let final core::Object? #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missing'.
   lib(new C().missing());
@@ -43,5 +33,5 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect
index cbaacd1..3fe7f57 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,24 +18,14 @@
 import "org-dartlang-testcase:///continue_inference_after_error_lib.dart" as lib;
 
 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
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
   lib(new C().missing());
-  ^^^" in let final core::Object* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+  ^^^" in let final core::Object? #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missing'.
   lib(new C().missing());
@@ -43,5 +33,5 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.outline.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.outline.expect
index 78e1d62..28c727e 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///continue_inference_after_error_lib.dart" as lib;
 
 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
 }
 static method test() → dynamic
   ;
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect
index cbaacd1..3fe7f57 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/continue_inference_after_error.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,24 +18,14 @@
 import "org-dartlang-testcase:///continue_inference_after_error_lib.dart" as lib;
 
 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
 }
 static method test() → dynamic {
   invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:3: Error: A prefix can't be used as an expression.
   lib(new C().missing());
-  ^^^" in let final core::Object* #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
+  ^^^" in let final core::Object? #t1 = invalid-expression "pkg/front_end/testcases/general/continue_inference_after_error.dart:10:15: Error: The method 'missing' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/general/continue_inference_after_error.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'missing'.
   lib(new C().missing());
@@ -43,5 +33,5 @@
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
diff --git a/pkg/front_end/testcases/general/continue_inference_after_error_lib.dart b/pkg/front_end/testcases/general/continue_inference_after_error_lib.dart
index e343683..87869b0 100644
--- a/pkg/front_end/testcases/general/continue_inference_after_error_lib.dart
+++ b/pkg/front_end/testcases/general/continue_inference_after_error_lib.dart
@@ -1,4 +1,3 @@
-// @dart=2.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.
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart b/pkg/front_end/testcases/general/control_flow_collection.dart
index ca2a8e0..63e2664 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart
+++ b/pkg/front_end/testcases/general/control_flow_collection.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
+
 main() {
   final aList = <int>[
     1,
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline.expect
index e8735f6..f4795c0 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 oracle() => true;
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline_modelled.expect
index e8735f6..f4795c0 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 oracle() => true;
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect
index ca02ce0..ad04066 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.expect
@@ -1,67 +1,67 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  final core::List<core::int*>* aList = block {
-    final core::List<core::int*>* #t1 = <core::int*>[1];
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(2){(core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(3){(core::int*) →* void};
+  final core::List<core::int> aList = block {
+    final core::List<core::int> #t1 = <core::int>[1];
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(2){(core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(3){(core::int) → void};
     else
-      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(4){(core::int*) →* void};
-    for (core::int* i in <core::int*>[5, 6, 7])
-      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
-    for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() → core::int}){(core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t1.{core::List::add}{Invariant}(4){(core::int) → void};
+    for (core::int i in <core::int>[5, 6, 7])
+      #t1.{core::List::add}{Invariant}(i){(core::int) → void};
+    for (core::int i in <core::int>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t1.{core::List::add}{Invariant}(i){(core::int) → void};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
-  final core::Set<core::int*>* aSet = block {
-    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+  final core::Set<core::int> aSet = block {
+    final core::Set<core::int> #t2 = col::LinkedHashSet::•<core::int>();
+    #t2.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
     else
-      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
-    for (core::int* i in <core::int*>[5, 6, 7])
-      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t2.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    for (core::int i in <core::int>[5, 6, 7])
+      #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+    for (core::int i in <core::int>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
   } =>#t2;
-  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};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int*, core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(3, 3){(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};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
     else
-      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() →* core::int*}, 1.{core::int::unary-}(){() →* core::int*}){(core::int*, core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int*, core::int*) →* void};
-    for (core::int* i in <core::int*>[5, 6, 7])
-      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
-    for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() → core::int}, 1.{core::int::unary-}(){() → core::int}){(core::int, core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int, core::int) → void};
+    for (core::int i in <core::int>[5, 6, 7])
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
+    for (core::int i in <core::int>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t3;
   core::print(aList);
   core::print(aSet);
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect
index ca02ce0..ad04066 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.modular.expect
@@ -1,67 +1,67 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  final core::List<core::int*>* aList = block {
-    final core::List<core::int*>* #t1 = <core::int*>[1];
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(2){(core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(3){(core::int*) →* void};
+  final core::List<core::int> aList = block {
+    final core::List<core::int> #t1 = <core::int>[1];
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(2){(core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(3){(core::int) → void};
     else
-      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(4){(core::int*) →* void};
-    for (core::int* i in <core::int*>[5, 6, 7])
-      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
-    for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() → core::int}){(core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t1.{core::List::add}{Invariant}(4){(core::int) → void};
+    for (core::int i in <core::int>[5, 6, 7])
+      #t1.{core::List::add}{Invariant}(i){(core::int) → void};
+    for (core::int i in <core::int>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t1.{core::List::add}{Invariant}(i){(core::int) → void};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
-  final core::Set<core::int*>* aSet = block {
-    final core::Set<core::int*>* #t2 = col::LinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+  final core::Set<core::int> aSet = block {
+    final core::Set<core::int> #t2 = col::LinkedHashSet::•<core::int>();
+    #t2.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
     else
-      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
-    for (core::int* i in <core::int*>[5, 6, 7])
-      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t2.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
+    for (core::int i in <core::int>[5, 6, 7])
+      #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+    for (core::int i in <core::int>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
   } =>#t2;
-  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};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int*, core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(3, 3){(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};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
     else
-      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() →* core::int*}, 1.{core::int::unary-}(){() →* core::int*}){(core::int*, core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int*, core::int*) →* void};
-    for (core::int* i in <core::int*>[5, 6, 7])
-      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
-    for (core::int* i in <core::int*>[8, 9, 10])
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() → core::int}, 1.{core::int::unary-}(){() → core::int}){(core::int, core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int, core::int) → void};
+    for (core::int i in <core::int>[5, 6, 7])
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
+    for (core::int i in <core::int>[8, 9, 10])
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t3;
   core::print(aList);
   core::print(aSet);
diff --git a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.outline.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.outline.expect
index b0c1797..735ded1 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.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/control_flow_collection.dart.weak.transformed.expect b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect
index a7fe03f..a903507 100644
--- a/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/control_flow_collection.dart.weak.transformed.expect
@@ -1,97 +1,97 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  final core::List<core::int*>* aList = block {
-    final core::List<core::int*>* #t1 = core::_GrowableList::_literal1<core::int*>(1);
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(2){(core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t1.{core::List::add}{Invariant}(3){(core::int*) →* void};
+  final core::List<core::int> aList = block {
+    final core::List<core::int> #t1 = core::_GrowableList::_literal1<core::int>(1);
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(2){(core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(3){(core::int) → void};
     else
-      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t1.{core::List::add}{Invariant}(4){(core::int*) →* void};
+      #t1.{core::List::add}{Invariant}(1.{core::int::unary-}(){() → core::int}){(core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t1.{core::List::add}{Invariant}(4){(core::int) → void};
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(5, 6, 7).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(5, 6, 7).{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*};
-        #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        #t1.{core::List::add}{Invariant}(i){(core::int) → void};
       }
     }
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(8, 9, 10).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(8, 9, 10).{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*};
-        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-          #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+          #t1.{core::List::add}{Invariant}(i){(core::int) → void};
       }
     }
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t1.{core::List::add}{Invariant}(i){(core::int*) →* void};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t1.{core::List::add}{Invariant}(i){(core::int) → void};
   } =>#t1;
-  final core::Set<core::int*>* aSet = block {
-    final core::Set<core::int*>* #t2 = new col::_CompactLinkedHashSet::•<core::int*>();
-    #t2.{core::Set::add}{Invariant}(1){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(2){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t2.{core::Set::add}{Invariant}(3){(core::int*) →* core::bool*};
+  final core::Set<core::int> aSet = block {
+    final core::Set<core::int> #t2 = new col::_CompactLinkedHashSet::•<core::int>();
+    #t2.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
     else
-      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() →* core::int*}){(core::int*) →* core::bool*};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t2.{core::Set::add}{Invariant}(4){(core::int*) →* core::bool*};
+      #t2.{core::Set::add}{Invariant}(1.{core::int::unary-}(){() → core::int}){(core::int) → core::bool};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t2.{core::Set::add}{Invariant}(4){(core::int) → core::bool};
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(5, 6, 7).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(5, 6, 7).{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*};
-        #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
       }
     }
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(8, 9, 10).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(8, 9, 10).{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*};
-        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-          #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+          #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
       }
     }
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t2.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t2.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
   } =>#t2;
-  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};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int*, core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      #t3.{core::Map::[]=}{Invariant}(3, 3){(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};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
     else
-      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() →* core::int*}, 1.{core::int::unary-}(){() →* core::int*}){(core::int*, core::int*) →* void};
-    if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-      if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int*, core::int*) →* void};
+      #t3.{core::Map::[]=}{Invariant}(1.{core::int::unary-}(){() → core::int}, 1.{core::int::unary-}(){() → core::int}){(core::int, core::int) → void};
+    if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t3.{core::Map::[]=}{Invariant}(4, 4){(core::int, core::int) → void};
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(5, 6, 7).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(5, 6, 7).{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*};
-        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
       }
     }
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal3<core::int*>(8, 9, 10).{core::Iterable::iterator}{core::Iterator<core::int*>*};
+      core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal3<core::int>(8, 9, 10).{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*};
-        if(self::oracle() as{TypeError,ForDynamic} core::bool*)
-          #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+        core::int i = :sync-for-iterator.{core::Iterator::current}{core::int};
+        if(self::oracle() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+          #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
       }
     }
-    for (core::int* i = 11; i.{core::num::<=}(14){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int*, core::int*) →* void};
+    for (core::int i = 11; i.{core::num::<=}(14){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t3.{core::Map::[]=}{Invariant}(i, i){(core::int, core::int) → void};
   } =>#t3;
   core::print(aList);
   core::print(aSet);
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference.dart b/pkg/front_end/testcases/general/control_flow_collection_inference.dart
index 0c5923d..961e48e 100644
--- a/pkg/front_end/testcases/general/control_flow_collection_inference.dart
+++ b/pkg/front_end/testcases/general/control_flow_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
+
 // Oracle is generic to test the inference in conditions of if-elements.
 oracle<T>([T t]) => true;
 
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 2ebf6f7..d4a4508 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
@@ -2,421 +2,421 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:41:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Map<String, List<int>> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
 //                                  ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:44: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:44: Error: Expected ':' after this.
 //   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:53: Error: Expected ':' after this.
 //   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:61: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:61: Error: Expected ':' after this.
 //   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:70: Error: Expected ':' after this.
 //   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:35: Error: Expected ':' after this.
 //   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:52: Error: Expected ':' after this.
 //   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[if (oracle("foo")) "bar"];
 //                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{if (oracle("foo")) "bar", null};
 //                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <String, int>{if (oracle("foo")) "bar": "bar", "baz": null};
 //                                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[if (oracle("foo")) ...["bar"]];
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{if (oracle("foo")) ...["bar"], null};
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <String, int>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
 //                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) ...map];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) ...["bar"], "baz": null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>[if (oracle("foo")) 42 else 3.14];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>[if (oracle("foo")) 42 else 3.14];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>{if (oracle("foo")) 42 else 3.14, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>{if (oracle("foo")) 42 else 3.14, null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
 //                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) ...map else 42];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map else 42, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) 42 else ...map];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map else 42, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
 //                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   List<int> list20 = [if (42) 42];
 //                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   Set<int> set20 = {if (42) 42};
 //                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   Map<int, int> map30 = {if (42) 42: 42};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   List<String> list40 = <String>[if (oracle("foo")) true else 42];
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   List<String> list40 = <String>[if (oracle("foo")) true else 42];
 //                                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
 //                                                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
 //                                                                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
 //                                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
 //                                                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
 //   <int>[for (i in <int>[1]) i];
 //              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
 //   <int>{for (i in <int>[1]) i, null};
 //              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 // 	<String, int>{for (i in <int>[1]) "bar": i, "baz": null};
 // 	                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var list50 = [await for (;;) 42];
 //                 ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var set50 = {await for (;;) 42, null};
 //                ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var map50 = {await for (;;) "bar": 42, "baz": null};
 //                ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
 //                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{for (int i = 0; oracle("foo"); i++) "bar", null};
 //                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                  ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
 //                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
 //                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) ...map];
 //                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) ...map, null};
 //                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
 //                                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
 //                                                                                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
 //                                                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var list10 = [for (var i in "not iterable") i];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var set10 = {for (var i in "not iterable") i, null};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list20 = [for (int i in ["not", "int"]) i];
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list20 = [for (int i in ["not", "int"]) i];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set20 = {for (int i in ["not", "int"]) i, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set20 = {for (int i in ["not", "int"]) i, null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var list30 = [await for (var i in "not stream") i];
 //                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var set30 = {await for (var i in "not stream") i, null};
 //                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
 //                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
 //                                                          ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
 //                                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var list60 = [for (; "not bool";) 42];
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var set60 = {for (; "not bool";) 42, null};
 //                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
 //                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <int>[await for (int i in stream) i];
 //                          ^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:258:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <int>{await for (int i in stream) i};
 //                          ^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:259:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <String, int>{await for (int i in stream) "bar": i};
 //                                  ^^
@@ -630,7 +630,7 @@
       #t35.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
     #t35.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t35;
-  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:41:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Map<String, List<int>> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
@@ -854,7 +854,7 @@
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t78 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^"){(dynamic) →* core::bool*};
@@ -950,14 +950,14 @@
   block {
     final core::List<core::int*>* #t99 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
     final core::Set<core::int*>* #t100 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
     #t100.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -965,7 +965,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t101 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
     #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
@@ -973,14 +973,14 @@
   block {
     final core::List<core::int*>* #t102 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t102.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t102.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
   } =>#t102;
   block {
     final core::Set<core::int*>* #t103 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
     #t103.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -988,7 +988,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
@@ -997,7 +997,7 @@
   block {
     final core::List<core::int*>* #t106 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
                               ^"){(core::int*) →* void};
@@ -1005,38 +1005,38 @@
   block {
     final core::Set<core::int*>* #t107 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
                               ^"){(core::int*) →* core::bool*};
     #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t107;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
-                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null};
   block {
     final core::List<core::String*>* #t108 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t108;
   block {
     final core::Set<core::String*>* #t109 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
     #t109.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
@@ -1044,11 +1044,11 @@
   block {
     final core::Map<core::String*, core::String*>* #t110 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                                             ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
@@ -1056,7 +1056,7 @@
   block {
     final core::List<core::int*>* #t111 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
                               ^"){(core::int*) →* void};
@@ -1066,7 +1066,7 @@
   block {
     final core::Set<core::int*>* #t112 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
@@ -1074,10 +1074,10 @@
       #t112.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t112.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t112;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
-                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null};
@@ -1086,7 +1086,7 @@
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t113.{core::List::add}{Invariant}(42){(core::int*) →* void};
     else
-      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
                                       ^"){(core::int*) →* void};
@@ -1094,7 +1094,7 @@
   block {
     final core::Set<core::int*>* #t114 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
@@ -1102,48 +1102,48 @@
       #t114.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t114.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t114;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
-                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
                                                      ^": null};
-  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                        ^";
-  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:53: Error: Expected ':' after this.
   Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                                     ^": null};
-  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                        ^";
-  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:70: Error: Expected ':' after this.
   Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                      ^": null};
-  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:35: Error: Expected ':' after this.
   var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                   ^": null};
-  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:52: Error: Expected ':' after this.
   var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                    ^": null};
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t115 = <core::int*>[];
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
       #t115.{core::List::add}{Invariant}(42){(core::int*) →* void};
   } =>#t115;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t116 = col::LinkedHashSet::•<core::int*>();
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
       #t116.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
   } =>#t116;
   core::Map<core::int*, core::int*>* map30 = block {
     final core::Map<core::int*, core::int*>* #t117 = <core::int*, core::int*>{};
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
       #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
@@ -1151,44 +1151,44 @@
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t118 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t118;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t119 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
   } =>#t119;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t120 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                                           ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
   } =>#t120;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t121 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                               ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   } =>#t121;
@@ -1762,14 +1762,14 @@
   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*})
-      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t236;
   block {
     final core::Set<core::int*>* #t237 = col::LinkedHashSet::•<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*})
-      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
     #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1777,26 +1777,26 @@
   block {
     final core::Map<core::int*, core::int*>* #t238 = <core::int*, 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*})
-      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
-    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
   } =>#t238;
   block {
     final core::List<core::int*>* #t239 = <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*})
-      #t239.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t239.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
   } =>#t239;
   block {
     final core::Set<core::int*>* #t240 = col::LinkedHashSet::•<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*})
-      #t240.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t240.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
     #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1804,20 +1804,20 @@
   block {
     final core::Map<core::int*, core::int*>* #t241 = <core::int*, 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*})
-      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
         #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
-    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
   } =>#t241;
   block {
     final core::List<core::int*>* #t243 = <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*})
-      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int*) →* void};
@@ -1825,16 +1825,16 @@
   block {
     final core::Set<core::int*>* #t244 = col::LinkedHashSet::•<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*})
-      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int*) →* core::bool*};
     #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t244;
-  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
-                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
@@ -1842,11 +1842,11 @@
     final core::List<core::String*>* #t245 = <core::String*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
       else
-        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t245;
@@ -1854,11 +1854,11 @@
     final core::Set<core::String*>* #t246 = col::LinkedHashSet::•<core::String*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
       else
-        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
     #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
@@ -1867,11 +1867,11 @@
     final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
       else
-        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
@@ -1880,7 +1880,7 @@
     final core::List<core::int*>* #t248 = <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*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int*) →* void};
@@ -1891,7 +1891,7 @@
     final core::Set<core::int*>* #t249 = col::LinkedHashSet::•<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*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int*) →* core::bool*};
@@ -1899,10 +1899,10 @@
         #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t249;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
-                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
@@ -1912,7 +1912,7 @@
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
       else
-        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int*) →* void};
@@ -1923,16 +1923,16 @@
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
       else
-        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int*) →* core::bool*};
     #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t251;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
-                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null};
@@ -1940,7 +1940,7 @@
   block {
     final core::List<core::int*>* #t252 = <core::int*>[];
     for (final core::int* #t253 in <core::int*>[1]) {
-      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
       #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
@@ -1949,7 +1949,7 @@
   block {
     final core::Set<core::int*>* #t254 = col::LinkedHashSet::•<core::int*>();
     for (final core::int* #t255 in <core::int*>[1]) {
-      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
       #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -1959,7 +1959,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
     for (final core::int* #t257 in <core::int*>[1]) {
-      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
       #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -1968,7 +1968,7 @@
   } =>#t256;
   core::List<dynamic>* list10 = block {
     final core::List<dynamic>* #t258 = <dynamic>[];
-    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
@@ -1976,7 +1976,7 @@
   } =>#t258;
   core::Set<dynamic>* set10 = block {
     final core::Set<dynamic>* #t259 = col::LinkedHashSet::•<dynamic>();
-    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
@@ -1985,7 +1985,7 @@
   } =>#t259;
   core::Map<core::String*, dynamic>* map10 = block {
     final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
-    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
@@ -1994,18 +1994,18 @@
   } =>#t260;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t261 = <core::int*>[];
-    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
-                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*])
       #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
   } =>#t261;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
-                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*])
       #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -2013,9 +2013,9 @@
   } =>#t262;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
-    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
-                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*])
       #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -2023,7 +2023,7 @@
   } =>#t263;
   core::List<dynamic>* list30 = block {
     final core::List<dynamic>* #t264 = <dynamic>[];
-    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
@@ -2031,7 +2031,7 @@
   } =>#t264;
   core::Set<dynamic>* set30 = block {
     final core::Set<dynamic>* #t265 = col::LinkedHashSet::•<dynamic>();
-    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
@@ -2040,7 +2040,7 @@
   } =>#t265;
   core::Map<core::String*, dynamic>* map30 = block {
     final core::Map<core::String*, dynamic>* #t266 = <core::String*, dynamic>{};
-    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
@@ -2049,18 +2049,18 @@
   } =>#t266;
   core::List<core::int*>* list40 = block {
     final core::List<core::int*>* #t267 = <core::int*>[];
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
-                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*]))
       #t267.{core::List::add}{Invariant}(i){(core::int*) →* void};
   } =>#t267;
   core::Set<core::int*>* set40 = block {
     final core::Set<core::int*>* #t268 = col::LinkedHashSet::•<core::int*>();
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
-                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*]))
       #t268.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -2068,9 +2068,9 @@
   } =>#t268;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t269 = <core::String*, core::int*>{};
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
-                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*]))
       #t269.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -2095,14 +2095,14 @@
   } =>#t272;
   core::List<core::int*>* list60 = block {
     final core::List<core::int*>* #t273 = <core::int*>[];
-    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
       #t273.{core::List::add}{Invariant}(42){(core::int*) →* void};
   } =>#t273;
   core::Set<core::int*>* set60 = block {
     final core::Set<core::int*>* #t274 = col::LinkedHashSet::•<core::int*>();
-    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
       #t274.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
@@ -2110,7 +2110,7 @@
   } =>#t274;
   core::Map<core::String*, core::int*>* map60 = block {
     final core::Map<core::String*, core::int*>* #t275 = <core::String*, core::int*>{};
-    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
       #t275.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
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 2ebf6f7..d4a4508 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
@@ -2,421 +2,421 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:41:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Map<String, List<int>> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
 //                                  ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:44: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:44: Error: Expected ':' after this.
 //   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:53: Error: Expected ':' after this.
 //   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:61: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:61: Error: Expected ':' after this.
 //   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:70: Error: Expected ':' after this.
 //   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:35: Error: Expected ':' after this.
 //   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:52: Error: Expected ':' after this.
 //   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[if (oracle("foo")) "bar"];
 //                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{if (oracle("foo")) "bar", null};
 //                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <String, int>{if (oracle("foo")) "bar": "bar", "baz": null};
 //                                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[if (oracle("foo")) ...["bar"]];
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{if (oracle("foo")) ...["bar"], null};
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <String, int>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
 //                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) ...map];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) ...["bar"], "baz": null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>[if (oracle("foo")) 42 else 3.14];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>[if (oracle("foo")) 42 else 3.14];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>{if (oracle("foo")) 42 else 3.14, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>{if (oracle("foo")) 42 else 3.14, null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
 //                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) ...map else 42];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map else 42, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) 42 else ...map];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map else 42, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
 //                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   List<int> list20 = [if (42) 42];
 //                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   Set<int> set20 = {if (42) 42};
 //                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   Map<int, int> map30 = {if (42) 42: 42};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   List<String> list40 = <String>[if (oracle("foo")) true else 42];
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   List<String> list40 = <String>[if (oracle("foo")) true else 42];
 //                                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
 //                                                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
 //                                                                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
 //                                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
 //                                                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
 //   <int>[for (i in <int>[1]) i];
 //              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
 //   <int>{for (i in <int>[1]) i, null};
 //              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 // 	<String, int>{for (i in <int>[1]) "bar": i, "baz": null};
 // 	                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var list50 = [await for (;;) 42];
 //                 ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var set50 = {await for (;;) 42, null};
 //                ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var map50 = {await for (;;) "bar": 42, "baz": null};
 //                ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
 //                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{for (int i = 0; oracle("foo"); i++) "bar", null};
 //                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                  ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
 //                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
 //                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) ...map];
 //                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) ...map, null};
 //                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
 //                                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
 //                                                                                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
 //                                                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var list10 = [for (var i in "not iterable") i];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var set10 = {for (var i in "not iterable") i, null};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list20 = [for (int i in ["not", "int"]) i];
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list20 = [for (int i in ["not", "int"]) i];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set20 = {for (int i in ["not", "int"]) i, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set20 = {for (int i in ["not", "int"]) i, null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var list30 = [await for (var i in "not stream") i];
 //                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var set30 = {await for (var i in "not stream") i, null};
 //                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
 //                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
 //                                                          ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
 //                                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var list60 = [for (; "not bool";) 42];
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var set60 = {for (; "not bool";) 42, null};
 //                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
 //                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <int>[await for (int i in stream) i];
 //                          ^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:258:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <int>{await for (int i in stream) i};
 //                          ^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:259:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <String, int>{await for (int i in stream) "bar": i};
 //                                  ^^
@@ -630,7 +630,7 @@
       #t35.{core::Set::addAll}{Invariant}(<core::List<core::int*>*>[<core::int*>[]]){(core::Iterable<core::List<core::int*>*>*) →* void};
     #t35.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t35;
-  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:41:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Map<String, List<int>> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
@@ -854,7 +854,7 @@
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t78 = col::LinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^"){(dynamic) →* core::bool*};
@@ -950,14 +950,14 @@
   block {
     final core::List<core::int*>* #t99 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
     final core::Set<core::int*>* #t100 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
     #t100.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -965,7 +965,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t101 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
     #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
@@ -973,14 +973,14 @@
   block {
     final core::List<core::int*>* #t102 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t102.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t102.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
   } =>#t102;
   block {
     final core::Set<core::int*>* #t103 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
     #t103.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -988,7 +988,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final core::MapEntry<core::String*, core::int*>* #t105 in <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String*, core::int*>>})
         #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String*}, #t105.{core::MapEntry::value}{core::int*}){(core::String*, core::int*) →* void};
@@ -997,7 +997,7 @@
   block {
     final core::List<core::int*>* #t106 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
                               ^"){(core::int*) →* void};
@@ -1005,38 +1005,38 @@
   block {
     final core::Set<core::int*>* #t107 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
                               ^"){(core::int*) →* core::bool*};
     #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t107;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
-                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null};
   block {
     final core::List<core::String*>* #t108 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t108;
   block {
     final core::Set<core::String*>* #t109 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
     #t109.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
@@ -1044,11 +1044,11 @@
   block {
     final core::Map<core::String*, core::String*>* #t110 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                                             ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
@@ -1056,7 +1056,7 @@
   block {
     final core::List<core::int*>* #t111 = <core::int*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
                               ^"){(core::int*) →* void};
@@ -1066,7 +1066,7 @@
   block {
     final core::Set<core::int*>* #t112 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
@@ -1074,10 +1074,10 @@
       #t112.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t112.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t112;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
-                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null};
@@ -1086,7 +1086,7 @@
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t113.{core::List::add}{Invariant}(42){(core::int*) →* void};
     else
-      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
                                       ^"){(core::int*) →* void};
@@ -1094,7 +1094,7 @@
   block {
     final core::Set<core::int*>* #t114 = col::LinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
@@ -1102,48 +1102,48 @@
       #t114.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t114.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t114;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
-                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
                                                      ^": null};
-  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                        ^";
-  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:53: Error: Expected ':' after this.
   Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                                     ^": null};
-  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                        ^";
-  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:70: Error: Expected ':' after this.
   Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                      ^": null};
-  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:35: Error: Expected ':' after this.
   var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                   ^": null};
-  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:52: Error: Expected ':' after this.
   var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                    ^": null};
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t115 = <core::int*>[];
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
       #t115.{core::List::add}{Invariant}(42){(core::int*) →* void};
   } =>#t115;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t116 = col::LinkedHashSet::•<core::int*>();
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
       #t116.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
   } =>#t116;
   core::Map<core::int*, core::int*>* map30 = block {
     final core::Map<core::int*, core::int*>* #t117 = <core::int*, core::int*>{};
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
       #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
@@ -1151,44 +1151,44 @@
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t118 = <core::String*>[];
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t118;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t119 = col::LinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
   } =>#t119;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t120 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                                           ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
   } =>#t120;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t121 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                               ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   } =>#t121;
@@ -1762,14 +1762,14 @@
   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*})
-      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t236;
   block {
     final core::Set<core::int*>* #t237 = col::LinkedHashSet::•<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*})
-      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
     #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1777,26 +1777,26 @@
   block {
     final core::Map<core::int*, core::int*>* #t238 = <core::int*, 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*})
-      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
-    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
   } =>#t238;
   block {
     final core::List<core::int*>* #t239 = <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*})
-      #t239.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t239.{core::List::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
   } =>#t239;
   block {
     final core::Set<core::int*>* #t240 = col::LinkedHashSet::•<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*})
-      #t240.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t240.{core::Set::addAll}{Invariant}(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*]){(core::Iterable<core::int*>*) →* void};
     #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1804,20 +1804,20 @@
   block {
     final core::Map<core::int*, core::int*>* #t241 = <core::int*, 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*})
-      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      for (final core::MapEntry<core::int*, core::int*>* #t242 in <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError} core::int*}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::int*>>})
         #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
-    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
   } =>#t241;
   block {
     final core::List<core::int*>* #t243 = <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*})
-      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int*) →* void};
@@ -1825,16 +1825,16 @@
   block {
     final core::Set<core::int*>* #t244 = col::LinkedHashSet::•<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*})
-      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int*) →* core::bool*};
     #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t244;
-  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
-                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
@@ -1842,11 +1842,11 @@
     final core::List<core::String*>* #t245 = <core::String*>[];
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
       else
-        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t245;
@@ -1854,11 +1854,11 @@
     final core::Set<core::String*>* #t246 = col::LinkedHashSet::•<core::String*>();
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
       else
-        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
     #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
@@ -1867,11 +1867,11 @@
     final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
     for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
       else
-        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
@@ -1880,7 +1880,7 @@
     final core::List<core::int*>* #t248 = <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*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int*) →* void};
@@ -1891,7 +1891,7 @@
     final core::Set<core::int*>* #t249 = col::LinkedHashSet::•<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*})
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int*) →* core::bool*};
@@ -1899,10 +1899,10 @@
         #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t249;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
-                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
@@ -1912,7 +1912,7 @@
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
       else
-        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int*) →* void};
@@ -1923,16 +1923,16 @@
       if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
         #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
       else
-        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int*) →* core::bool*};
     #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t251;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
-                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null};
@@ -1940,7 +1940,7 @@
   block {
     final core::List<core::int*>* #t252 = <core::int*>[];
     for (final core::int* #t253 in <core::int*>[1]) {
-      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
       #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
@@ -1949,7 +1949,7 @@
   block {
     final core::Set<core::int*>* #t254 = col::LinkedHashSet::•<core::int*>();
     for (final core::int* #t255 in <core::int*>[1]) {
-      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
       #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -1959,7 +1959,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t256 = <core::String*, core::int*>{};
     for (final core::int* #t257 in <core::int*>[1]) {
-      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
       #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -1968,7 +1968,7 @@
   } =>#t256;
   core::List<dynamic>* list10 = block {
     final core::List<dynamic>* #t258 = <dynamic>[];
-    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
@@ -1976,7 +1976,7 @@
   } =>#t258;
   core::Set<dynamic>* set10 = block {
     final core::Set<dynamic>* #t259 = col::LinkedHashSet::•<dynamic>();
-    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
@@ -1985,7 +1985,7 @@
   } =>#t259;
   core::Map<core::String*, dynamic>* map10 = block {
     final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
-    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*)
@@ -1994,18 +1994,18 @@
   } =>#t260;
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t261 = <core::int*>[];
-    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
-                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*])
       #t261.{core::List::add}{Invariant}(i){(core::int*) →* void};
   } =>#t261;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t262 = col::LinkedHashSet::•<core::int*>();
-    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
-                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*])
       #t262.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -2013,9 +2013,9 @@
   } =>#t262;
   core::Map<core::String*, core::int*>* map20 = block {
     final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
-    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    for (core::int* i in <core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
-                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*])
       #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -2023,7 +2023,7 @@
   } =>#t263;
   core::List<dynamic>* list30 = block {
     final core::List<dynamic>* #t264 = <dynamic>[];
-    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
@@ -2031,7 +2031,7 @@
   } =>#t264;
   core::Set<dynamic>* set30 = block {
     final core::Set<dynamic>* #t265 = col::LinkedHashSet::•<dynamic>();
-    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
@@ -2040,7 +2040,7 @@
   } =>#t265;
   core::Map<core::String*, dynamic>* map30 = block {
     final core::Map<core::String*, dynamic>* #t266 = <core::String*, dynamic>{};
-    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*)
@@ -2049,18 +2049,18 @@
   } =>#t266;
   core::List<core::int*>* list40 = block {
     final core::List<core::int*>* #t267 = <core::int*>[];
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
-                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*]))
       #t267.{core::List::add}{Invariant}(i){(core::int*) →* void};
   } =>#t267;
   core::Set<core::int*>* set40 = block {
     final core::Set<core::int*>* #t268 = col::LinkedHashSet::•<core::int*>();
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
-                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*]))
       #t268.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -2068,9 +2068,9 @@
   } =>#t268;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t269 = <core::String*, core::int*>{};
-    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+    await for (core::int* i in asy::Stream::fromIterable<core::int*>(<core::int*>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
-                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*]))
       #t269.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -2095,14 +2095,14 @@
   } =>#t272;
   core::List<core::int*>* list60 = block {
     final core::List<core::int*>* #t273 = <core::int*>[];
-    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
       #t273.{core::List::add}{Invariant}(42){(core::int*) →* void};
   } =>#t273;
   core::Set<core::int*>* set60 = block {
     final core::Set<core::int*>* #t274 = col::LinkedHashSet::•<core::int*>();
-    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
       #t274.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
@@ -2110,7 +2110,7 @@
   } =>#t274;
   core::Map<core::String*, core::int*>* map60 = block {
     final core::Map<core::String*, core::int*>* #t275 = <core::String*, core::int*>{};
-    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
       #t275.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
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 59854bd..dad114d 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
@@ -2,421 +2,421 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:41:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Map<String, List<int>> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
 //                                  ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:44: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:44: Error: Expected ':' after this.
 //   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:53: Error: Expected ':' after this.
 //   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:61: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:61: Error: Expected ':' after this.
 //   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:70: Error: Expected ':' after this.
 //   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:35: Error: Expected ':' after this.
 //   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:52: Error: Expected ':' after this.
 //   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[if (oracle("foo")) "bar"];
 //                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{if (oracle("foo")) "bar", null};
 //                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <String, int>{if (oracle("foo")) "bar": "bar", "baz": null};
 //                                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[if (oracle("foo")) ...["bar"]];
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{if (oracle("foo")) ...["bar"], null};
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <String, int>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
 //                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) ...map];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) ...["bar"], "baz": null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>[if (oracle("foo")) 42 else 3.14];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>[if (oracle("foo")) 42 else 3.14];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>{if (oracle("foo")) 42 else 3.14, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>{if (oracle("foo")) 42 else 3.14, null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
 //                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String, String>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) ...map else 42];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map else 42, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[if (oracle("foo")) 42 else ...map];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{if (oracle("foo")) ...map else 42, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
 //                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
 //   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   List<int> list20 = [if (42) 42];
 //                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   Set<int> set20 = {if (42) 42};
 //                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
 //   Map<int, int> map30 = {if (42) 42: 42};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   List<String> list40 = <String>[if (oracle("foo")) true else 42];
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   List<String> list40 = <String>[if (oracle("foo")) true else 42];
 //                                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
 //                                                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
 //                                                                           ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
 //   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
 //                                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
 //                                                                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
 //   <int>[for (i in <int>[1]) i];
 //              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
 //   <int>{for (i in <int>[1]) i, null};
 //              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 // 	<String, int>{for (i in <int>[1]) "bar": i, "baz": null};
 // 	                   ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var list50 = [await for (;;) 42];
 //                 ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var set50 = {await for (;;) 42, null};
 //                ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
 // Try removing the keyword, or use a for-each statement.
 //   var map50 = {await for (;;) "bar": 42, "baz": null};
 //                ^^^^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
 //                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{for (int i = 0; oracle("foo"); i++) "bar", null};
 //                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                  ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
 //                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
 //                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
 //                                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) ...map];
 //                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) ...map, null};
 //                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <int, int>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
 //                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
 //   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
 //                                                                             ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
 //   <String, String>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
 //                                                                                            ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
 //                                                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
 //  - 'Map' is from 'dart:core'.
 //   <int>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
 //                                                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
 //  - 'List' is from 'dart:core'.
 //   <String, int>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
 //                                                                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var list10 = [for (var i in "not iterable") i];
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var set10 = {for (var i in "not iterable") i, null};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
 //                              ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list20 = [for (int i in ["not", "int"]) i];
 //                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list20 = [for (int i in ["not", "int"]) i];
 //                                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set20 = {for (int i in ["not", "int"]) i, null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set20 = {for (int i in ["not", "int"]) i, null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
 //                               ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
 //                                      ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var list30 = [await for (var i in "not stream") i];
 //                                     ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var set30 = {await for (var i in "not stream") i, null};
 //                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
 //  - 'Stream' is from 'dart:async'.
 //   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
 //                                    ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
 //                                                          ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
 //                                                                 ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
 //                                                         ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
 //   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
 //                                                                ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var list60 = [for (; "not bool";) 42];
 //                        ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var set60 = {for (; "not bool";) 42, null};
 //                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
 //   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
 //                       ^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <int>[await for (int i in stream) i];
 //                          ^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:258:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <int>{await for (int i in stream) i};
 //                          ^^
 //
-// pkg/front_end/testcases/general/control_flow_collection_inference.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// pkg/front_end/testcases/general/control_flow_collection_inference.dart:259:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
 // Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
 //   <String, int>{await for (int i in stream) "bar": i};
 //                                  ^^
@@ -655,7 +655,7 @@
       #t35.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int*>*>(core::_GrowableList::•<core::int*>(0))){(core::Iterable<core::List<core::int*>*>*) →* void};
     #t35.{core::Set::add}{Invariant}(null){(core::List<core::int*>*) →* core::bool*};
   } =>#t35;
-  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:39:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Map<core::String*, core::List<core::int*>*>* map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:41:34: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Map<String, List<int>> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
                                  ^";
   core::List<core::List<core::int*>*>* list41 = block {
@@ -907,7 +907,7 @@
   core::Set<dynamic>* map82 = block {
     final core::Set<dynamic>* #t78 = new col::_CompactLinkedHashSet::•<dynamic>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:73:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
                                      ^"){(dynamic) →* core::bool*};
@@ -1022,14 +1022,14 @@
   block {
     final core::List<core::int*>* #t99 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) \"bar\"];
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
   } =>#t99;
   block {
     final core::Set<core::int*>* #t100 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:88:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) \"bar\", null};
                            ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
     #t100.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1037,7 +1037,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t101 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:89:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:43: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
                                           ^" in "bar" as{TypeError} core::int*){(core::String*, core::int*) →* void};
     #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
@@ -1045,14 +1045,14 @@
   block {
     final core::List<core::int*>* #t102 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t102.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t102.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[if (oracle(\"foo\")) ...[\"bar\"]];
                                ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
   } =>#t102;
   block {
     final core::Set<core::int*>* #t103 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t103.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:91:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      #t103.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{if (oracle(\"foo\")) ...[\"bar\"], null};
                                ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
     #t103.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1060,7 +1060,7 @@
   block {
     final core::Map<core::String*, core::int*>* #t104 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*) {
-      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:92:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      core::Iterator<core::MapEntry<core::String*, core::int*>>* :sync-for-iterator = <core::String*, core::int*>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:47: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <String, int>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
                                               ^" in "bar" as{TypeError} 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}; ) {
@@ -1073,7 +1073,7 @@
   block {
     final core::List<core::int*>* #t106 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map];
                               ^"){(core::int*) →* void};
@@ -1081,38 +1081,38 @@
   block {
     final core::Set<core::int*>* #t107 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:94:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map, null};
                               ^"){(core::int*) →* core::bool*};
     #t107.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t107;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
-                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:95:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
                                       ^": null};
   block {
     final core::List<core::String*>* #t108 = core::_GrowableList::•<core::String*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[if (oracle(\"foo\")) 42 else 3.14];
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t108;
   block {
     final core::Set<core::String*>* #t109 = new col::_CompactLinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                               ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:97:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{if (oracle(\"foo\")) 42 else 3.14, null};
                                       ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
     #t109.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
@@ -1120,11 +1120,11 @@
   block {
     final core::Map<core::String*, core::String*>* #t110 = <core::String*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:46: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                              ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     else
-      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:98:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:61: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
                                                             ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
     #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
@@ -1132,7 +1132,7 @@
   block {
     final core::List<core::int*>* #t111 = core::_GrowableList::•<core::int*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) ...map else 42];
                               ^"){(core::int*) →* void};
@@ -1142,7 +1142,7 @@
   block {
     final core::Set<core::int*>* #t112 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:100:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
@@ -1150,10 +1150,10 @@
       #t112.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t112.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t112;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
-                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:101:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:39: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
                                       ^": null};
@@ -1162,7 +1162,7 @@
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
       #t113.{core::List::add}{Invariant}(42){(core::int*) →* void};
     else
-      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[if (oracle(\"foo\")) 42 else ...map];
                                       ^"){(core::int*) →* void};
@@ -1170,7 +1170,7 @@
   block {
     final core::Set<core::int*>* #t114 = new col::_CompactLinkedHashSet::•<core::int*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:103:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:105:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{if (oracle(\"foo\")) ...map else 42, null};
                               ^"){(core::int*) →* core::bool*};
@@ -1178,48 +1178,48 @@
       #t114.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
     #t114.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
   } =>#t114;
-  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+  <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
-                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:104:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
                                                      ^": null};
-  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Set<dynamic>* set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                        ^";
-  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:107:53: Error: Expected ':' after this.
+  core::Map<dynamic, dynamic>* map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:53: Error: Expected ':' after this.
   Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                                     ^": null};
-  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  core::Set<dynamic>* set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
   Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                        ^";
-  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:109:70: Error: Expected ':' after this.
+  core::Map<dynamic, dynamic>* map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:70: Error: Expected ':' after this.
   Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                                      ^": null};
-  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:110:35: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map12 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:35: Error: Expected ':' after this.
   var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
                                   ^": null};
-  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:111:52: Error: Expected ':' after this.
+  core::Map<invalid-type, Null>* map13 = <invalid-type, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:52: Error: Expected ':' after this.
   var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
                                                    ^": null};
   core::List<core::int*>* list20 = block {
     final core::List<core::int*>* #t115 = core::_GrowableList::•<core::int*>(0);
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   List<int> list20 = [if (42) 42];
                           ^" in 42 as{TypeError} core::bool*)
       #t115.{core::List::add}{Invariant}(42){(core::int*) →* void};
   } =>#t115;
   core::Set<core::int*>* set20 = block {
     final core::Set<core::int*>* #t116 = new col::_CompactLinkedHashSet::•<core::int*>();
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Set<int> set20 = {if (42) 42};
                         ^" in 42 as{TypeError} core::bool*)
       #t116.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
   } =>#t116;
   core::Map<core::int*, core::int*>* map30 = block {
     final core::Map<core::int*, core::int*>* #t117 = <core::int*, core::int*>{};
-    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
   Map<int, int> map30 = {if (42) 42: 42};
                              ^" in 42 as{TypeError} core::bool*)
       #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int*, core::int*) →* void};
@@ -1227,44 +1227,44 @@
   core::List<core::String*>* list40 = block {
     final core::List<core::String*>* #t118 = core::_GrowableList::•<core::String*>(0);
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                     ^" in true as{TypeError} core::String*){(core::String*) →* void};
     else
-      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
                                                               ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
   } =>#t118;
   core::Set<core::String*>* set40 = block {
     final core::Set<core::String*>* #t119 = new col::_CompactLinkedHashSet::•<core::String*>();
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                   ^" in true as{TypeError} core::String*){(core::String*) →* core::bool*};
     else
-      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
                                                             ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
   } =>#t119;
   core::Map<core::String*, core::int*>* map40 = block {
     final core::Map<core::String*, core::int*>* #t120 = <core::String*, core::int*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                             ^" in true as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
     else
-      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:119:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
                                                                           ^" in 42 as{TypeError} core::String*, 42){(core::String*, core::int*) →* void};
   } =>#t120;
   core::Map<core::int*, core::String*>* map41 = block {
     final core::Map<core::int*, core::String*>* #t121 = <core::int*, core::String*>{};
     if(self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*)
-      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                 ^" in true as{TypeError} core::String*){(core::int*, core::String*) →* void};
     else
-      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:120:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
                                                                               ^" in 42 as{TypeError} core::String*){(core::int*, core::String*) →* void};
   } =>#t121;
@@ -1946,7 +1946,7 @@
 static method testForElementErrors(core::Map<core::int*, core::int*>* map, core::List<core::int*>* list) → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -1955,21 +1955,21 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         block {
           final core::List<core::int*>* #t236 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* void};
         } =>#t236;
         block {
           final core::Set<core::int*>* #t237 = new col::_CompactLinkedHashSet::•<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*})
-            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:211:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
                                             ^" in "bar" as{TypeError} core::int*){(core::int*) →* core::bool*};
           #t237.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -1977,26 +1977,26 @@
         block {
           final core::Map<core::int*, core::int*>* #t238 = <core::int*, 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*})
-            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
-                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                 ^" in "bar" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                         ^" in "bar" as{TypeError} core::int*){(core::int*, core::int*) →* void};
-          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:212:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
                                                                ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
         } =>#t238;
         block {
           final core::List<core::int*>* #t239 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
                                                 ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
         } =>#t239;
         block {
           final core::Set<core::int*>* #t240 = new col::_CompactLinkedHashSet::•<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*})
-            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:214:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
                                                 ^" in "bar" as{TypeError} core::int*)){(core::Iterable<core::int*>*) →* void};
           #t240.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
@@ -2004,9 +2004,9 @@
         block {
           final core::Map<core::int*, core::int*>* #t241 = <core::int*, 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*}) {
-            core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::MapEntry<core::int*, core::int*>>* :sync-for-iterator = <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:54: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
-                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                     ^" in "bar" as{TypeError} core::int*: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:61: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                             ^" in "bar" as{TypeError} 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}; ) {
@@ -2014,14 +2014,14 @@
               #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int*}, #t242.{core::MapEntry::value}{core::int*}){(core::int*, core::int*) →* void};
             }
           }
-          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:215:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:69: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
                                                                     ^" in "baz" as{TypeError} core::int*, null){(core::int*, core::int*) →* void};
         } =>#t241;
         block {
           final core::List<core::int*>* #t243 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
-            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
                                                ^"){(core::int*) →* void};
@@ -2029,16 +2029,16 @@
         block {
           final core::Set<core::int*>* #t244 = new col::_CompactLinkedHashSet::•<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*})
-            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:217:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
                                                ^"){(core::int*) →* core::bool*};
           #t244.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
         } =>#t244;
-        <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+        <core::int*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
-                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:218:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:53: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <int, int>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
                                                     ^": null};
@@ -2046,11 +2046,11 @@
           final core::List<core::String*>* #t245 = core::_GrowableList::•<core::String*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* void};
             else
-              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* void};
         } =>#t245;
@@ -2058,11 +2058,11 @@
           final core::Set<core::String*>* #t246 = new col::_CompactLinkedHashSet::•<core::String*>();
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                              ^" in 42 as{TypeError} core::String*){(core::String*) →* core::bool*};
             else
-              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:220:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
                                                                      ^" in 3.14 as{TypeError} core::String*){(core::String*) →* core::bool*};
           #t246.{core::Set::add}{Invariant}(null){(core::String*) →* core::bool*};
@@ -2071,11 +2071,11 @@
           final core::Map<core::String*, core::String*>* #t247 = <core::String*, core::String*>{};
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:77: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                             ^" in 42 as{TypeError} core::String*){(core::String*, core::String*) →* void};
             else
-              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:221:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:92: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
   <String, String>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
                                                                                            ^" in 3.14 as{TypeError} core::String*){(core::String*, core::String*) →* void};
           #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::String*) →* void};
@@ -2084,7 +2084,7 @@
           final core::List<core::int*>* #t248 = core::_GrowableList::•<core::int*>(0);
           for (core::int* i = 0; self::oracle<core::String*>("foo") as{TypeError,ForDynamic} core::bool*; i = i.{core::num::+}(1){(core::num*) →* core::int*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
                                                              ^"){(core::int*) →* void};
@@ -2095,7 +2095,7 @@
           final core::Set<core::int*>* #t249 = new col::_CompactLinkedHashSet::•<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*})
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
-              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:223:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
                                                              ^"){(core::int*) →* core::bool*};
@@ -2103,10 +2103,10 @@
               #t249.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
           #t249.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
         } =>#t249;
-        <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+        <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
-                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:224:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
                                                                      ^": null};
@@ -2116,7 +2116,7 @@
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t250.{core::List::add}{Invariant}(42){(core::int*) →* void};
             else
-              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
                                                                      ^"){(core::int*) →* void};
@@ -2127,16 +2127,16 @@
             if(self::oracle<dynamic>() as{TypeError,ForDynamic} core::bool*)
               #t251.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
             else
-              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:226:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:228:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
  - 'Map' is from 'dart:core'.
   <int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
                                                                      ^"){(core::int*) →* core::bool*};
           #t251.{core::Set::add}{Invariant}(null){(core::int*) →* core::bool*};
         } =>#t251;
-        <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+        <core::String*, core::int*>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
-                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:227:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+                                                                                    ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:229:85: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
  - 'List' is from 'dart:core'.
   <String, int>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
                                                                                     ^": null};
@@ -2148,7 +2148,7 @@
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
               final core::int* #t253 = :sync-for-iterator.{core::Iterator::current}{core::int*};
               {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:230:14: Error: Can't assign to the final variable 'i'.
+                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:14: Error: Can't assign to the final variable 'i'.
   <int>[for (i in <int>[1]) i];
              ^";
                 #t252.{core::List::add}{Invariant}(i){(core::int*) →* void};
@@ -2163,7 +2163,7 @@
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
               final core::int* #t255 = :sync-for-iterator.{core::Iterator::current}{core::int*};
               {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:231:14: Error: Can't assign to the final variable 'i'.
+                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:233:14: Error: Can't assign to the final variable 'i'.
   <int>{for (i in <int>[1]) i, null};
              ^";
                 #t254.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
@@ -2179,7 +2179,7 @@
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
               final core::int* #t257 = :sync-for-iterator.{core::Iterator::current}{core::int*};
               {
-                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:232:21: Error: Can't assign to the final variable 'i'.
+                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:21: Error: Can't assign to the final variable 'i'.
 \t<String, int>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
 \t                   ^";
                 #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
@@ -2191,7 +2191,7 @@
         core::List<dynamic>* list10 = block {
           final core::List<dynamic>* #t258 = core::_GrowableList::•<dynamic>(0);
           {
-            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var list10 = [for (var i in \"not iterable\") i];
                               ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
@@ -2204,7 +2204,7 @@
         core::Set<dynamic>* set10 = block {
           final core::Set<dynamic>* #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
           {
-            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var set10 = {for (var i in \"not iterable\") i, null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
@@ -2218,7 +2218,7 @@
         core::Map<core::String*, dynamic>* map10 = block {
           final core::Map<core::String*, dynamic>* #t260 = <core::String*, dynamic>{};
           {
-            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+            core::Iterator<Never>* :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  - 'Iterable' is from 'dart:core'.
   var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
                              ^" in "not iterable" as{TypeError} core::Iterable<dynamic>*.{core::Iterable::iterator}{core::Iterator<Never>*};
@@ -2232,9 +2232,9 @@
         core::List<core::int*>* list20 = block {
           final core::List<core::int*>* #t261 = core::_GrowableList::•<core::int*>(0);
           {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
-                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                               ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list20 = [for (int i in [\"not\", \"int\"]) i];
                                       ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -2246,9 +2246,9 @@
         core::Set<core::int*>* set20 = block {
           final core::Set<core::int*>* #t262 = new col::_CompactLinkedHashSet::•<core::int*>();
           {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
-                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set20 = {for (int i in [\"not\", \"int\"]) i, null};
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -2261,9 +2261,9 @@
         core::Map<core::String*, core::int*>* map20 = block {
           final core::Map<core::String*, core::int*>* #t263 = <core::String*, core::int*>{};
           {
-            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+            core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
-                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                              ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
                                      ^" in "int" as{TypeError} core::int*).{core::Iterable::iterator}{core::Iterator<core::int*>*};
             for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -2275,7 +2275,7 @@
         } =>#t263;
         final core::List<dynamic>* #t264 = core::_GrowableList::•<dynamic>(0);
         {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var list30 = [await for (var i in \"not stream\") i];
                                     ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
@@ -2284,8 +2284,8 @@
             #L2:
             while (true) {
               dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t266 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t266 = 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)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 #t264.{core::List::add}{Invariant}(i){(dynamic) →* void};
               }
@@ -2294,14 +2294,14 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::List<dynamic>* list30 = block {} =>#t264;
         final core::Set<dynamic>* #t268 = new col::_CompactLinkedHashSet::•<dynamic>();
         {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var set30 = {await for (var i in \"not stream\") i, null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
@@ -2310,8 +2310,8 @@
             #L3:
             while (true) {
               dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t270 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t270 = 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)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 #t268.{core::Set::add}{Invariant}(i){(dynamic) →* core::bool*};
               }
@@ -2320,8 +2320,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Set<dynamic>* set30 = block {
@@ -2329,7 +2329,7 @@
         } =>#t268;
         final core::Map<core::String*, dynamic>* #t272 = <core::String*, dynamic>{};
         {
-          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
  - 'Stream' is from 'dart:async'.
   var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
                                    ^" in "not stream" as{TypeError} asy::Stream<dynamic>*;
@@ -2338,8 +2338,8 @@
             #L4:
             while (true) {
               dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t274 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t274 = 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)) {
                 dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String*, dynamic) →* void};
               }
@@ -2348,8 +2348,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Map<core::String*, dynamic>* map30 = block {
@@ -2357,9 +2357,9 @@
         } =>#t272;
         final core::List<core::int*>* #t276 = core::_GrowableList::•<core::int*>(0);
         {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
-                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                         ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
                                                                 ^" in "int" as{TypeError} core::int*));
           asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
@@ -2367,8 +2367,8 @@
             #L5:
             while (true) {
               dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t278 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t278 = 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)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 #t276.{core::List::add}{Invariant}(i){(core::int*) →* void};
               }
@@ -2377,16 +2377,16 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::List<core::int*>* list40 = block {} =>#t276;
         final core::Set<core::int*>* #t280 = new col::_CompactLinkedHashSet::•<core::int*>();
         {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
-                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:246:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
                                                                ^" in "int" as{TypeError} core::int*));
           asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
@@ -2394,8 +2394,8 @@
             #L6:
             while (true) {
               dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t282 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t282 = 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)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 #t280.{core::Set::add}{Invariant}(i){(core::int*) →* core::bool*};
               }
@@ -2404,8 +2404,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Set<core::int*>* set40 = block {
@@ -2413,9 +2413,9 @@
         } =>#t280;
         final core::Map<core::String*, core::int*>* #t284 = <core::String*, core::int*>{};
         {
-          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+          asy::Stream<core::int*> :stream = asy::Stream::fromIterable<core::int*>(core::_GrowableList::_literal2<core::int*>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
-                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+                                                        ^" in "not" as{TypeError} core::int*, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:247:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
   var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
                                                                ^" in "int" as{TypeError} core::int*));
           asy::_StreamIterator<core::int*>* :for-iterator = new asy::_StreamIterator::•<core::int*>(:stream);
@@ -2423,8 +2423,8 @@
             #L7:
             while (true) {
               dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t286 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t286 = 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)) {
                 core::int* i = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String*, core::int*) →* void};
               }
@@ -2433,8 +2433,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Map<core::String*, core::int*>* map40 = block {
@@ -2459,14 +2459,14 @@
         } =>#t290;
         core::List<core::int*>* list60 = block {
           final core::List<core::int*>* #t291 = core::_GrowableList::•<core::int*>(0);
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var list60 = [for (; \"not bool\";) 42];
                        ^" in "not bool" as{TypeError} core::bool*; )
             #t291.{core::List::add}{Invariant}(42){(core::int*) →* void};
         } =>#t291;
         core::Set<core::int*>* set60 = block {
           final core::Set<core::int*>* #t292 = new col::_CompactLinkedHashSet::•<core::int*>();
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:252:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var set60 = {for (; \"not bool\";) 42, null};
                       ^" in "not bool" as{TypeError} core::bool*; )
             #t292.{core::Set::add}{Invariant}(42){(core::int*) →* core::bool*};
@@ -2474,14 +2474,14 @@
         } =>#t292;
         core::Map<core::String*, core::int*>* map60 = block {
           final core::Map<core::String*, core::int*>* #t293 = <core::String*, core::int*>{};
-          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference.dart:253:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
   var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
                       ^" in "not bool" as{TypeError} core::bool*; )
             #t293.{core::Map::[]=}{Invariant}("bar", 42){(core::String*, core::int*) →* void};
           #t293.{core::Map::[]=}{Invariant}("baz", null){(core::String*, core::int*) →* void};
         } =>#t293;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -2489,7 +2489,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart
new file mode 100644
index 0000000..26a9e38
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart
@@ -0,0 +1,272 @@
+// 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.
+
+// Oracle is generic to test the inference in conditions of if-elements.
+oracle<T>([T? t]) => true;
+
+testIfElement(dynamic dynVar, List<int> listInt, List<double> listDouble,
+    Map<String, int> mapToInt, Map<String, double> mapToDouble) {
+  var list10 = [if (oracle("foo")) 42];
+  var set10 = {if (oracle("foo")) 42, null};
+  var map10 = {if (oracle("foo")) "bar": 42, "baz": null};
+  var list11 = [if (oracle("foo")) dynVar];
+  var set11 = {if (oracle("foo")) dynVar, null};
+  var map11 = {if (oracle("foo")) "bar": dynVar, "baz": null};
+  var list12 = [if (oracle("foo")) [42]];
+  var set12 = {if (oracle("foo")) [42], null};
+  var map12 = {if (oracle("foo")) "bar": [42], "baz": null};
+  var list20 = [if (oracle("foo")) ...[42]];
+  var set20 = {if (oracle("foo")) ...[42], null};
+  var map20 = {if (oracle("foo")) ...{"bar": 42}, "baz": null};
+  var list21 = [if (oracle("foo")) ...[dynVar]];
+  var set21 = {if (oracle("foo")) ...[dynVar], null};
+  var map21 = {if (oracle("foo")) ...{"bar": dynVar}, "baz": null};
+  var list22 = [if (oracle("foo")) ...[[42]]];
+  var set22 = {if (oracle("foo")) ...[[42]], null};
+  var map22 = {if (oracle("foo")) ...{"bar": [42]}, "baz": null};
+  var list30 = [if (oracle("foo")) if (oracle()) ...[42]];
+  var set30 = {if (oracle("foo")) if (oracle()) ...[42], null};
+  var map30 = {if (oracle("foo")) if (oracle()) ...{"bar": 42}, "baz": null};
+  var list31 = [if (oracle("foo")) if (oracle()) ...[dynVar]];
+  var set31 = {if (oracle("foo")) if (oracle()) ...[dynVar], null};
+  var map31 = {if (oracle("foo")) if (oracle()) ...{"bar": dynVar}, "baz": null};
+  var list33 = [if (oracle("foo")) if (oracle()) ...[[42]]];
+  var set33 = {if (oracle("foo")) if (oracle()) ...[[42]], null};
+  var map33 = {if (oracle("foo")) if (oracle()) ...{"bar": [42]}, "baz": null};
+  List<List<int>> list40 = [if (oracle("foo")) ...[[]]];
+  Set<List<int>?> set40 = {if (oracle("foo")) ...[[]], null};
+  Map<String, List<int>?> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
+  List<List<int>> list41 = [if (oracle("foo")) ...{[]}];
+  Set<List<int>?> set41 = {if (oracle("foo")) ...{[]}, null};
+  List<List<int>> list42 = [if (oracle("foo")) if (oracle()) ...[[]]];
+  Set<List<int>?> set42 = {if (oracle("foo")) if (oracle()) ...[[]], null};
+  Map<String, List<int>?> map42 = {if (oracle("foo")) if (oracle()) ...{"bar": []}, "baz": null};
+  List<int> list50 = [if (oracle("foo")) ...[]];
+  Set<int?> set50 = {if (oracle("foo")) ...[], null};
+  Map<String, int?> map50 = {if (oracle("foo")) ...{}, "baz": null};
+  List<int> list51 = [if (oracle("foo")) ...{}];
+  Set<int?> set51 = {if (oracle("foo")) ...{}, null};
+  List<int> list52 = [if (oracle("foo")) if (oracle()) ...[]];
+  Set<int?> set52 = {if (oracle("foo")) if (oracle()) ...[], null};
+  Map<String, int?> map52 = {if (oracle("foo")) if (oracle()) ...{}, "baz": null};
+  List<List<int>> list60 = [if (oracle("foo")) ...[[]]];
+  Set<List<int>?> set60 = {if (oracle("foo")) ...[[]], null};
+  Map<String, List<int>?> map60 = {if (oracle("foo")) ...{"bar": []}, "baz": null};
+  List<List<int>> list61 = [if (oracle("foo")) if (oracle()) ...[[]]];
+  Set<List<int>?> set61 = {if (oracle("foo")) if (oracle()) ...[[]], null};
+  Map<String, List<int>?> map61 = {if (oracle("foo")) if (oracle()) ...{"bar": []}, "baz": null};
+  List<List<int>> list70 = [if (oracle("foo")) []];
+  Set<List<int>?> set70 = {if (oracle("foo")) [], null};
+  List<List<int>> list71 = [if (oracle("foo")) if (oracle()) []];
+  Set<List<int>?> set71 = {if (oracle("foo")) if (oracle()) [], null};
+  var list80 = [if (oracle("foo")) 42 else 3.14];
+  var set80 = {if (oracle("foo")) 42 else 3.14, null};
+  var map80 = {if (oracle("foo")) "bar": 42 else "bar": 3.14, "baz": null};
+  var list81 = [if (oracle("foo")) ...listInt else ...listDouble];
+  var set81 = {if (oracle("foo")) ...listInt else ...listDouble, null};
+  var map81 = {if (oracle("foo")) ...mapToInt else ...mapToDouble, "baz": null};
+  var list82 = [if (oracle("foo")) ...listInt else ...dynVar];
+  var set82 = {if (oracle("foo")) ...listInt else ...dynVar, null};
+  var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
+  var list83 = [if (oracle("foo")) 42 else ...listDouble];
+  var set83 = {if (oracle("foo")) ...listInt else 3.14, null};
+  var map83 = {if (oracle("foo")) ...mapToInt else "bar": 3.14, "baz": null};
+  List<int> list90 = [if (oracle("foo")) dynVar];
+  Set<int?> set90 = {if (oracle("foo")) dynVar, null};
+  Map<String, int?> map90 = {if (oracle("foo")) "bar": dynVar, "baz": null};
+  List<int> list91 = [if (oracle("foo")) ...dynVar];
+  Set<int?> set91 = {if (oracle("foo")) ...dynVar, null};
+  Map<String, int?> map91 = {if (oracle("foo")) ...dynVar, "baz": null};
+  List<int> list100 = [if (dynVar) 42];
+  Set<int> set100 = {if (dynVar) 42};
+  Map<int, int> map100 = {if (dynVar) 42: 42};
+}
+
+testIfElementErrors(Map<int, int> map) {
+  <int>[if (oracle("foo")) "bar"];
+  <int?>{if (oracle("foo")) "bar", null};
+  <String, int?>{if (oracle("foo")) "bar": "bar", "baz": null};
+  <int>[if (oracle("foo")) ...["bar"]];
+  <int?>{if (oracle("foo")) ...["bar"], null};
+  <String, int?>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
+  <int>[if (oracle("foo")) ...map];
+  <int?>{if (oracle("foo")) ...map, null};
+  <String, int?>{if (oracle("foo")) ...["bar"], "baz": null};
+  <String>[if (oracle("foo")) 42 else 3.14];
+  <String?>{if (oracle("foo")) 42 else 3.14, null};
+  <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+  <int>[if (oracle("foo")) ...map else 42];
+  <int?>{if (oracle("foo")) ...map else 42, null};
+  <String, int?>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
+  <int>[if (oracle("foo")) 42 else ...map];
+  <int?>{if (oracle("foo")) ...map else 42, null};
+  <String, int?>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
+
+  Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+  Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
+  Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+  Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
+  var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
+  var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
+  List<int> list20 = [if (42) 42];
+  Set<int> set20 = {if (42) 42};
+  Map<int, int> map30 = {if (42) 42: 42};
+  List<String> list40 = <String>[if (oracle("foo")) true else 42];
+  Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+  Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+  Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+}
+
+testForElement(dynamic dynVar, List<int> listInt, List<double> listDouble, int
+index, Map<String, int> mapStringInt, Map<String, double> mapStringDouble) {
+  var list10 = [for (int i = 0; oracle("foo"); i++) 42];
+  var set10 = {for (int i = 0; oracle("foo"); i++) 42, null};
+  var map10 = {for (int i = 0; oracle("foo"); i++) "bar": 42, "baz": null};
+  var list11 = [for (int i = 0; oracle("foo"); i++) dynVar];
+  var set11 = {for (int i = 0; oracle("foo"); i++) dynVar, null};
+  var map11 = {for (int i = 0; oracle("foo"); i++) "bar": dynVar, "baz": null};
+  var list12 = [for (int i = 0; oracle("foo"); i++) [42]];
+  var set12 = {for (int i = 0; oracle("foo"); i++) [42], null};
+  var map12 = {for (int i = 0; oracle("foo"); i++) "bar": [42], "baz": null};
+  var list20 = [for (int i = 0; oracle("foo"); i++) ...[42]];
+  var set20 = {for (int i = 0; oracle("foo"); i++) ...[42], null};
+  var map20 = {for (int i = 0; oracle("foo"); i++) ...{"bar": 42}, "baz": null};
+  var list21 = [for (int i = 0; oracle("foo"); i++) ...[dynVar]];
+  var set21 = {for (int i = 0; oracle("foo"); i++) ...[dynVar], null};
+  var map21 = {for (int i = 0; oracle("foo"); i++) ...{"bar": dynVar}, "baz": null};
+  var list22 = [for (int i = 0; oracle("foo"); i++) ...[[42]]];
+  var set22 = {for (int i = 0; oracle("foo"); i++) ...[[42]], null};
+  var map22 = {for (int i = 0; oracle("foo"); i++) ...{"bar": [42]}, "baz": null};
+  var list30 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[42]];
+  var set30 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[42], null};
+  var map30 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": 42}, "baz": null};
+  var list31 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[dynVar]];
+  var set31 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[dynVar], null};
+  var map31 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": dynVar}, "baz": null};
+  var list33 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[42]]];
+  var set33 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[42]], null};
+  var map33 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": [42]}, "baz": null};
+  List<List<int>> list40 = [for (int i = 0; oracle("foo"); i++) ...[[]]];
+  Set<List<int>?> set40 = {for (int i = 0; oracle("foo"); i++) ...[[]], null};
+  Map<String, List<int>?> map40 = {for (int i = 0; oracle("foo"); i++) ...{"bar": []}, "baz": null};
+  List<List<int>> list41 = [for (int i = 0; oracle("foo"); i++) ...{[]}];
+  Set<List<int>?> set41 = {for (int i = 0; oracle("foo"); i++) ...{[]}, null};
+  List<List<int>> list42 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]]];
+  Set<List<int>?> set42 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]], null};
+  Map<String, List<int>?> map42 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": []}, "baz": null};
+  List<int> list50 = [for (int i = 0; oracle("foo"); i++) ...[]];
+  Set<int?> set50 = {for (int i = 0; oracle("foo"); i++) ...[], null};
+  Map<String, int?> map50 = {for (int i = 0; oracle("foo"); i++) ...{}, "baz": null};
+  List<int> list51 = [for (int i = 0; oracle("foo"); i++) ...{}];
+  Set<int?> set51 = {for (int i = 0; oracle("foo"); i++) ...{}, null};
+  List<int> list52 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[]];
+  Set<int?> set52 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[], null};
+  List<List<int>> list60 = [for (int i = 0; oracle("foo"); i++) ...[[]]];
+  Set<List<int>?> set60 = {for (int i = 0; oracle("foo"); i++) ...[[]], null};
+  Map<String, List<int>?> map60 = {for (int i = 0; oracle("foo"); i++) ...{"bar": []}, "baz": null};
+  List<List<int>> list61 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]]];
+  Set<List<int>?> set61 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...[[]], null};
+  Map<String, List<int>?> map61 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...{"bar": []}, "baz": null};
+  List<List<int>> list70 = [for (int i = 0; oracle("foo"); i++) []];
+  Set<List<int>?> set70 = {for (int i = 0; oracle("foo"); i++) [], null};
+  Map<String, List<int>?> map70 = {for (int i = 0; oracle("foo"); i++) "bar": [], "baz": null};
+  List<List<int>> list71 = [for (int i = 0; oracle("foo"); i++) if (oracle()) []];
+  Set<List<int>?> set71 = {for (int i = 0; oracle("foo"); i++) if (oracle()) [], null};
+  Map<String, List<int>?> map71 = {for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": [], "baz": null};
+  var list80 = [for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+  var set80 = {for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+  var map80 = {for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+  var list81 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...listDouble];
+  var set81 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...listDouble, null};
+  var map81 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else ...mapStringDouble, "baz": null};
+  var list82 = [for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...dynVar];
+  var set82 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else ...dynVar, null};
+  var map82 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else ...dynVar, "baz": null};
+  var list83 = [for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...listDouble];
+  var set83 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...listInt else 3.14, null};
+  var map83 = {for (int i = 0; oracle("foo"); i++) if (oracle()) ...mapStringInt else "bar": 3.14, "baz": null};
+  List<int> list90 = [for (int i = 0; oracle("foo"); i++) dynVar];
+  Set<int?> set90 = {for (int i = 0; oracle("foo"); i++) dynVar, null};
+  Map<String, int?> map90 = {for (int i = 0; oracle("foo"); i++) "bar": dynVar, "baz": null};
+  List<int> list91 = [for (int i = 0; oracle("foo"); i++) ...dynVar];
+  Set<int?> set91 = {for (int i = 0; oracle("foo"); i++) ...dynVar, null};
+  Map<String, int?> map91 = {for (int i = 0; oracle("foo"); i++) ...dynVar, "baz": null};
+  List<int> list100 = <int>[for (index = 0; oracle("foo"); index++) 42];
+  Set<int> set100 = <int>{for (index = 0; oracle("foo"); index++) 42};
+  Map<String, int> map100 = <String, int>{for (index = 0; oracle("foo"); index++) "bar": 42};
+  var list110 = [for (var i in [1, 2, 3]) i];
+  var set110 = {for (var i in [1, 2, 3]) i, null};
+  var map110 = {for (var i in [1, 2, 3]) "bar": i, "baz": null};
+  List<int> list120 = [for (var i in dynVar) i];
+  Set<int?> set120 = {for (var i in dynVar) i, null};
+  Map<String, int?> map120 = {for (var i in dynVar) "bar": i, "baz": null};
+  List<int> list130 = [for (var i = 1; i < 2; i++) i];
+  Set<int> set130 = {for (var i = 1; i < 2; i++) i};
+  Map<int, int> map130 = {for (var i = 1; i < 2; i++) i: i};
+}
+
+testForElementErrors(Map<int, int> map, List<int> list) async {
+  <int>[for (int i = 0; oracle("foo"); i++) "bar"];
+  <int?>{for (int i = 0; oracle("foo"); i++) "bar", null};
+  <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+  <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
+  <int?>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
+  <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+  <int>[for (int i = 0; oracle("foo"); i++) ...map];
+  <int?>{for (int i = 0; oracle("foo"); i++) ...map, null};
+  <int, int?>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
+  <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+  <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+  <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+  <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
+  <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
+  <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
+  <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
+  <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
+  <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
+
+  final i = 0;
+  <int>[for (i in <int>[1]) i];
+  <int?>{for (i in <int>[1]) i, null};
+  <String, int?>{for (i in <int>[1]) "bar": i, "baz": null};
+
+  var list10 = [for (var i in "not iterable") i];
+  var set10 = {for (var i in "not iterable") i, null};
+  var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
+  var list20 = [for (int i in ["not", "int"]) i];
+  var set20 = {for (int i in ["not", "int"]) i, null};
+  var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+  var list30 = [await for (var i in "not stream") i];
+  var set30 = {await for (var i in "not stream") i, null};
+  var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
+  var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+  var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+  var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+  var list50 = [await for (;;) 42];
+  var set50 = {await for (;;) 42, null};
+  var map50 = {await for (;;) "bar": 42, "baz": null};
+  var list60 = [for (; "not bool";) 42];
+  var set60 = {for (; "not bool";) 42, null};
+  var map60 = {for (; "not bool";) "bar": 42, "baz": null};
+}
+
+testForElementErrorsNotAsync(Stream<int> stream) {
+  <int>[await for (int i in stream) i];
+  <int>{await for (int i in stream) i};
+  <String, int>{await for (int i in stream) "bar": i};
+}
+
+class A {}
+
+class B extends A {
+  int get foo => 42;
+}
+
+testPromotion(A a) {
+  List<int> list10 = [if (a is B) a.foo];
+  Set<int> set10 = {if (a is B) a.foo};
+  Map<int, int> map10 = {if (a is B) a.foo: a.foo};
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.textual_outline.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.textual_outline.expect
new file mode 100644
index 0000000..21c73bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+oracle<T>([T? t]) => true;
+testIfElement(dynamic dynVar, List<int> listInt, List<double> listDouble,
+    Map<String, int> mapToInt, Map<String, double> mapToDouble) {}
+testIfElementErrors(Map<int, int> map) {}
+testForElement(
+    dynamic dynVar,
+    List<int> listInt,
+    List<double> listDouble,
+    int index,
+    Map<String, int> mapStringInt,
+    Map<String, double> mapStringDouble) {}
+testForElementErrors(Map<int, int> map, List<int> list) async {}
+testForElementErrorsNotAsync(Stream<int> stream) {}
+
+class A {}
+
+class B extends A {
+  int get foo => 42;
+}
+
+testPromotion(A a) {}
+main() {}
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..582976e
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+class A {}
+
+class B extends A {
+  int get foo => 42;
+}
+
+main() {}
+oracle<T>([T? t]) => true;
+testForElement(
+    dynamic dynVar,
+    List<int> listInt,
+    List<double> listDouble,
+    int index,
+    Map<String, int> mapStringInt,
+    Map<String, double> mapStringDouble) {}
+testForElementErrors(Map<int, int> map, List<int> list) async {}
+testForElementErrorsNotAsync(Stream<int> stream) {}
+testIfElement(dynamic dynVar, List<int> listInt, List<double> listDouble,
+    Map<String, int> mapToInt, Map<String, double> mapToDouble) {}
+testIfElementErrors(Map<int, int> map) {}
+testPromotion(A a) {}
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
new file mode 100644
index 0000000..746e6cf
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.expect
@@ -0,0 +1,2148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Map<String, List<int>?> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:44: Error: Expected ':' after this.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:61: Error: Expected ':' after this.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
+//   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
+//   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) "bar"];
+//                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{if (oracle("foo")) "bar", null};
+//                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <String, int?>{if (oracle("foo")) "bar": "bar", "baz": null};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) ...["bar"]];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{if (oracle("foo")) ...["bar"], null};
+//                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <String, int?>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) ...["bar"], "baz": null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String?>{if (oracle("foo")) 42 else 3.14, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String?>{if (oracle("foo")) 42 else 3.14, null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map else 42];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map else 42, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) 42 else ...map];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map else 42, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   List<int> list20 = [if (42) 42];
+//                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Set<int> set20 = {if (42) 42};
+//                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Map<int, int> map30 = {if (42) 42: 42};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+//   <int>[for (i in <int>[1]) i];
+//              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+//   <int?>{for (i in <int>[1]) i, null};
+//               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+//   <String, int?>{for (i in <int>[1]) "bar": i, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var list50 = [await for (;;) 42];
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var set50 = {await for (;;) 42, null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var map50 = {await for (;;) "bar": 42, "baz": null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
+//                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) "bar", null};
+//                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
+//                                                  ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...map];
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) ...map, null};
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
+//                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
+//                                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var list10 = [for (var i in "not iterable") i];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var set10 = {for (var i in "not iterable") i, null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var list30 = [await for (var i in "not stream") i];
+//                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var set30 = {await for (var i in "not stream") i, null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var list60 = [for (; "not bool";) 42];
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var set60 = {for (; "not bool";) 42, null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>[await for (int i in stream) i];
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>{await for (int i in stream) i};
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <String, int>{await for (int i in stream) "bar": i};
+//                                  ^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  get foo() → core::int
+    return 42;
+}
+static method oracle<T extends core::Object? = dynamic>([self::oracle::T? t = #C1]) → dynamic
+  return true;
+static method testIfElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::Map<core::String, core::int> mapToInt, core::Map<core::String, core::double> mapToDouble) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t1 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t1;
+  core::Set<core::int?> set10 = block {
+    final core::Set<core::int?> #t2 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t2;
+  core::Map<core::String, core::int?> map10 = block {
+    final core::Map<core::String, core::int?> #t3 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t3.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t3;
+  core::List<dynamic> list11 = block {
+    final core::List<dynamic> #t4 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t4.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
+  } =>#t4;
+  core::Set<dynamic> set11 = block {
+    final core::Set<dynamic> #t5 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t5.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
+    #t5.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t5;
+  core::Map<core::String, dynamic> map11 = block {
+    final core::Map<core::String, dynamic> #t6 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t6.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
+    #t6.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t6;
+  core::List<core::List<core::int>> list12 = block {
+    final core::List<core::List<core::int>> #t7 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t7.{core::List::add}{Invariant}(<core::int>[42]){(core::List<core::int>) → void};
+  } =>#t7;
+  core::Set<core::List<core::int>?> set12 = block {
+    final core::Set<core::List<core::int>?> #t8 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t8.{core::Set::add}{Invariant}(<core::int>[42]){(core::List<core::int>?) → core::bool};
+    #t8.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t8;
+  core::Map<core::String, core::List<core::int>?> map12 = block {
+    final core::Map<core::String, core::List<core::int>?> #t9 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t9.{core::Map::[]=}{Invariant}("bar", <core::int>[42]){(core::String, core::List<core::int>?) → void};
+    #t9.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t9;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t10 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t10.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t10;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t11 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t11.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t11.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t11;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t12 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::int?> #t13 in <core::String, core::int>{"bar": 42}.{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", null){(core::String, core::int?) → void};
+  } =>#t12;
+  core::List<dynamic> list21 = block {
+    final core::List<dynamic> #t14 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t14.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t14;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t15 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t15.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t15.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t15;
+  core::Map<core::String, dynamic> map21 = block {
+    final core::Map<core::String, dynamic> #t16 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, dynamic> #t17 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String}, #t17.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t16;
+  core::List<core::List<core::int>> list22 = block {
+    final core::List<core::List<core::int>> #t18 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t18.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t18;
+  core::Set<core::List<core::int>?> set22 = block {
+    final core::Set<core::List<core::int>?> #t19 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t19.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t19.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t19;
+  core::Map<core::String, core::List<core::int>?> map22 = block {
+    final core::Map<core::String, core::List<core::int>?> #t20 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t21 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String}, #t21.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t20;
+  core::List<core::int> list30 = block {
+    final core::List<core::int> #t22 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t22.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t22;
+  core::Set<core::int?> set30 = block {
+    final core::Set<core::int?> #t23 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t23.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t23.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t23;
+  core::Map<core::String, core::int?> map30 = block {
+    final core::Map<core::String, core::int?> #t24 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::int?> #t25 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String}, #t25.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t24;
+  core::List<dynamic> list31 = block {
+    final core::List<dynamic> #t26 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t26.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t26;
+  core::Set<dynamic> set31 = block {
+    final core::Set<dynamic> #t27 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t27.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t27.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t27;
+  core::Map<core::String, dynamic> map31 = block {
+    final core::Map<core::String, dynamic> #t28 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, dynamic> #t29 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String}, #t29.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t28;
+  core::List<core::List<core::int>> list33 = block {
+    final core::List<core::List<core::int>> #t30 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t30.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t30;
+  core::Set<core::List<core::int>?> set33 = block {
+    final core::Set<core::List<core::int>?> #t31 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t31.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t31.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t31;
+  core::Map<core::String, core::List<core::int>?> map33 = block {
+    final core::Map<core::String, core::List<core::int>?> #t32 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t33 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{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.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t32;
+  core::List<core::List<core::int>> list40 = block {
+    final core::List<core::List<core::int>> #t34 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t34.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t34;
+  core::Set<core::List<core::int>?> set40 = block {
+    final core::Set<core::List<core::int>?> #t35 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t35.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t35.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t35;
+  core::Map<core::String, core::List<core::int>?> map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Map<String, List<int>?> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
+                                  ^";
+  core::List<core::List<core::int>> list41 = block {
+    final core::List<core::List<core::int>> #t36 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t36.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>> #t37 = col::LinkedHashSet::•<core::List<core::int>>();
+        #t37.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>) → core::bool};
+      } =>#t37){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t36;
+  core::Set<core::List<core::int>?> set41 = block {
+    final core::Set<core::List<core::int>?> #t38 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t38.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>?> #t39 = col::LinkedHashSet::•<core::List<core::int>?>();
+        #t39.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+      } =>#t39){(core::Iterable<core::List<core::int>?>) → void};
+    #t38.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t38;
+  core::List<core::List<core::int>> list42 = block {
+    final core::List<core::List<core::int>> #t40 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t40.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t40;
+  core::Set<core::List<core::int>?> set42 = block {
+    final core::Set<core::List<core::int>?> #t41 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t41.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t41.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t41;
+  core::Map<core::String, core::List<core::int>?> map42 = block {
+    final core::Map<core::String, core::List<core::int>?> #t42 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t43 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String}, #t43.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t42;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t44 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t44.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t44;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t45 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t45.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t45.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t45;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t46 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::int?> #t47 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String}, #t47.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t46;
+  core::List<core::int> list51 = block {
+    final core::List<core::int> #t48 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t48.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
+      } =>#t49){(core::Iterable<core::int>) → void};
+  } =>#t48;
+  core::Set<core::int?> set51 = block {
+    final core::Set<core::int?> #t50 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t50.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int?> #t51 = col::LinkedHashSet::•<core::int?>();
+      } =>#t51){(core::Iterable<core::int?>) → void};
+    #t50.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t50;
+  core::List<core::int> list52 = block {
+    final core::List<core::int> #t52 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t52.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t52;
+  core::Set<core::int?> set52 = block {
+    final core::Set<core::int?> #t53 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t53.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t53.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t53;
+  core::Map<core::String, core::int?> map52 = block {
+    final core::Map<core::String, core::int?> #t54 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::int?> #t55 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String}, #t55.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t54;
+  core::List<core::List<core::int>> list60 = block {
+    final core::List<core::List<core::int>> #t56 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t56.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t56;
+  core::Set<core::List<core::int>?> set60 = block {
+    final core::Set<core::List<core::int>?> #t57 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t57.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t57.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t57;
+  core::Map<core::String, core::List<core::int>?> map60 = block {
+    final core::Map<core::String, core::List<core::int>?> #t58 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t59 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String}, #t59.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t58;
+  core::List<core::List<core::int>> list61 = block {
+    final core::List<core::List<core::int>> #t60 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t60.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t60;
+  core::Set<core::List<core::int>?> set61 = block {
+    final core::Set<core::List<core::int>?> #t61 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t61.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t61.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t61;
+  core::Map<core::String, core::List<core::int>?> map61 = block {
+    final core::Map<core::String, core::List<core::int>?> #t62 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t63 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String}, #t63.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t62;
+  core::List<core::List<core::int>> list70 = block {
+    final core::List<core::List<core::int>> #t64 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t64.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t64;
+  core::Set<core::List<core::int>?> set70 = block {
+    final core::Set<core::List<core::int>?> #t65 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t65.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t65.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t65;
+  core::List<core::List<core::int>> list71 = block {
+    final core::List<core::List<core::int>> #t66 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t66.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t66;
+  core::Set<core::List<core::int>?> set71 = block {
+    final core::Set<core::List<core::int>?> #t67 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t67.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t67.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t67;
+  core::List<core::num> list80 = block {
+    final core::List<core::num> #t68 = <core::num>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t68.{core::List::add}{Invariant}(42){(core::num) → void};
+    else
+      #t68.{core::List::add}{Invariant}(3.14){(core::num) → void};
+  } =>#t68;
+  core::Set<core::num?> set80 = block {
+    final core::Set<core::num?> #t69 = col::LinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t69.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
+    else
+      #t69.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t69.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t69;
+  core::Map<core::String, core::num?> map80 = block {
+    final core::Map<core::String, core::num?> #t70 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t70.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
+    else
+      #t70.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t70.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t70;
+  core::List<core::num> list81 = block {
+    final core::List<core::num> #t71 = <core::num>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t71.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
+    else
+      #t71.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t71;
+  core::Set<core::num?> set81 = block {
+    final core::Set<core::num?> #t72 = col::LinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t72.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+    else
+      #t72.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
+    #t72.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t72;
+  core::Map<core::String, core::num?> map81 = block {
+    final core::Map<core::String, core::num?> #t73 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::num?> #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String}, #t74.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    else
+      for (final core::MapEntry<core::String, core::num?> #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String}, #t75.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t73;
+  core::List<dynamic> list82 = block {
+    final core::List<dynamic> #t76 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t76.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+    else
+      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  } =>#t76;
+  core::Set<dynamic> set82 = block {
+    final core::Set<dynamic> #t77 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t77.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+    else
+      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t77.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t77;
+  core::Set<dynamic> map82 = block {
+    final core::Set<dynamic> #t78 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
+                                     ^"){(dynamic) → core::bool};
+    else
+      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t78.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t78;
+  core::List<core::num> list83 = block {
+    final core::List<core::num> #t79 = <core::num>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t79.{core::List::add}{Invariant}(42){(core::num) → void};
+    else
+      #t79.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t79;
+  core::Set<core::num?> set83 = block {
+    final core::Set<core::num?> #t80 = col::LinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t80.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+    else
+      #t80.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t80.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t80;
+  core::Map<core::String, core::num?> map83 = block {
+    final core::Map<core::String, core::num?> #t81 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::num?> #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String}, #t82.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    else
+      #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t81.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t81;
+  core::List<core::int> list90 = block {
+    final core::List<core::int> #t83 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t83;
+  core::Set<core::int?> set90 = block {
+    final core::Set<core::int?> #t84 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t84.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t84;
+  core::Map<core::String, core::int?> map90 = block {
+    final core::Map<core::String, core::int?> #t85 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t85.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t85;
+  core::List<core::int> list91 = block {
+    final core::List<core::int> #t86 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int #t88 = #t87 as{TypeError,ForNonNullableByDefault} core::int;
+        #t86.{core::List::add}{Invariant}(#t88){(core::int) → void};
+      }
+  } =>#t86;
+  core::Set<core::int?> set91 = block {
+    final core::Set<core::int?> #t89 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int? #t91 = #t90 as{TypeError,ForNonNullableByDefault} core::int?;
+        #t89.{core::Set::add}{Invariant}(#t91){(core::int?) → core::bool};
+      }
+    #t89.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t89;
+  core::Map<core::String, core::int?> map91 = block {
+    final core::Map<core::String, core::int?> #t92 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<dynamic, dynamic> #t93 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+        final core::String #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
+        final core::int? #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+        #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String, core::int?) → void};
+      }
+    #t92.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t92;
+  core::List<core::int> list100 = block {
+    final core::List<core::int> #t96 = <core::int>[];
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t96.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t96;
+  core::Set<core::int> set100 = block {
+    final core::Set<core::int> #t97 = col::LinkedHashSet::•<core::int>();
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t97.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t97;
+  core::Map<core::int, core::int> map100 = block {
+    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t98.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
+  } =>#t98;
+}
+static method testIfElementErrors(core::Map<core::int, core::int> map) → dynamic {
+  block {
+    final core::List<core::int> #t99 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) \"bar\"];
+                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t99;
+  block {
+    final core::Set<core::int?> #t100 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{if (oracle(\"foo\")) \"bar\", null};
+                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t100.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t100;
+  block {
+    final core::Map<core::String, core::int?> #t101 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
+                                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t101;
+  block {
+    final core::List<core::int> #t102 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t102.{core::List::addAll}{Invariant}(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) ...[\"bar\"]];
+                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int]){(core::Iterable<core::int>) → void};
+  } =>#t102;
+  block {
+    final core::Set<core::int?> #t103 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t103.{core::Set::addAll}{Invariant}(<core::int?>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{if (oracle(\"foo\")) ...[\"bar\"], null};
+                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?]){(core::Iterable<core::int?>) → void};
+    #t103.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t103;
+  block {
+    final core::Map<core::String, core::int?> #t104 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::int?> #t105 in <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <String, int?>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String}, #t105.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t104;
+  block {
+    final core::List<core::int> #t106 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map];
+                              ^"){(core::int) → void};
+  } =>#t106;
+  block {
+    final core::Set<core::int?> #t107 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map, null};
+                               ^"){(core::int?) → core::bool};
+    #t107.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t107;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                       ^": null};
+  block {
+    final core::List<core::String> #t108 = <core::String>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+    else
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t108;
+  block {
+    final core::Set<core::String?> #t109 = col::LinkedHashSet::•<core::String?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
+                               ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    else
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
+                                       ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    #t109.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+  } =>#t109;
+  block {
+    final core::Map<core::String, core::String?> #t110 = <core::String, core::String?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    else
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                                             ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+  } =>#t110;
+  block {
+    final core::List<core::int> #t111 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map else 42];
+                              ^"){(core::int) → void};
+    else
+      #t111.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t111;
+  block {
+    final core::Set<core::int?> #t112 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map else 42, null};
+                               ^"){(core::int?) → core::bool};
+    else
+      #t112.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t112.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t112;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                       ^": null};
+  block {
+    final core::List<core::int> #t113 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t113.{core::List::add}{Invariant}(42){(core::int) → void};
+    else
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) 42 else ...map];
+                                      ^"){(core::int) → void};
+  } =>#t113;
+  block {
+    final core::Set<core::int?> #t114 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map else 42, null};
+                               ^"){(core::int?) → core::bool};
+    else
+      #t114.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t114.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t114;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                      ^": null};
+  core::Set<dynamic> set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                       ^";
+  core::Map<dynamic, dynamic> map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                                    ^": null};
+  core::Set<dynamic> set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                       ^";
+  core::Map<dynamic, dynamic> map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                                     ^": null};
+  core::Map<dynamic, Null> map12 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
+  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                  ^": null};
+  core::Map<dynamic, Null> map13 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
+  var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                   ^": null};
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t115 = <core::int>[];
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  List<int> list20 = [if (42) 42];
+                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t115.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t115;
+  core::Set<core::int> set20 = block {
+    final core::Set<core::int> #t116 = col::LinkedHashSet::•<core::int>();
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Set<int> set20 = {if (42) 42};
+                        ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t116.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t116;
+  core::Map<core::int, core::int> map30 = block {
+    final core::Map<core::int, core::int> #t117 = <core::int, core::int>{};
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Map<int, int> map30 = {if (42) 42: 42};
+                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
+  } =>#t117;
+  core::List<core::String> list40 = block {
+    final core::List<core::String> #t118 = <core::String>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                    ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+    else
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t118;
+  core::Set<core::String> set40 = block {
+    final core::Set<core::String> #t119 = col::LinkedHashSet::•<core::String>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                  ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
+    else
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
+  } =>#t119;
+  core::Map<core::String, core::int> map40 = block {
+    final core::Map<core::String, core::int> #t120 = <core::String, core::int>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                            ^" in true as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
+    else
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
+  } =>#t120;
+  core::Map<core::int, core::String> map41 = block {
+    final core::Map<core::int, core::String> #t121 = <core::int, core::String>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+    else
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  } =>#t121;
+}
+static method testForElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::int index, core::Map<core::String, core::int> mapStringInt, core::Map<core::String, core::double> mapStringDouble) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t122 = <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})
+      #t122.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t122;
+  core::Set<core::int?> set10 = block {
+    final core::Set<core::int?> #t123 = col::LinkedHashSet::•<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})
+      #t123.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t123.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t123;
+  core::Map<core::String, core::int?> map10 = block {
+    final core::Map<core::String, core::int?> #t124 = <core::String, 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})
+      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t124;
+  core::List<dynamic> list11 = block {
+    final core::List<dynamic> #t125 = <dynamic>[];
+    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})
+      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
+  } =>#t125;
+  core::Set<dynamic> set11 = block {
+    final core::Set<dynamic> #t126 = col::LinkedHashSet::•<dynamic>();
+    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})
+      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
+    #t126.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t126;
+  core::Map<core::String, dynamic> map11 = block {
+    final core::Map<core::String, dynamic> #t127 = <core::String, dynamic>{};
+    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})
+      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
+    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t127;
+  core::List<core::List<core::int>> list12 = block {
+    final core::List<core::List<core::int>> #t128 = <core::List<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})
+      #t128.{core::List::add}{Invariant}(<core::int>[42]){(core::List<core::int>) → void};
+  } =>#t128;
+  core::Set<core::List<core::int>?> set12 = block {
+    final core::Set<core::List<core::int>?> #t129 = col::LinkedHashSet::•<core::List<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})
+      #t129.{core::Set::add}{Invariant}(<core::int>[42]){(core::List<core::int>?) → core::bool};
+    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t129;
+  core::Map<core::String, core::List<core::int>?> map12 = block {
+    final core::Map<core::String, core::List<core::int>?> #t130 = <core::String, core::List<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})
+      #t130.{core::Map::[]=}{Invariant}("bar", <core::int>[42]){(core::String, core::List<core::int>?) → void};
+    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t130;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t131 = <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})
+      #t131.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t131;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t132 = col::LinkedHashSet::•<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})
+      #t132.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t132.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t132;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t133 = <core::String, 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})
+      for (final core::MapEntry<core::String, core::int?> #t134 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String}, #t134.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t133;
+  core::List<dynamic> list21 = block {
+    final core::List<dynamic> #t135 = <dynamic>[];
+    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})
+      #t135.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t135;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t136 = col::LinkedHashSet::•<dynamic>();
+    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})
+      #t136.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t136.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t136;
+  core::Map<core::String, dynamic> map21 = block {
+    final core::Map<core::String, dynamic> #t137 = <core::String, dynamic>{};
+    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})
+      for (final core::MapEntry<core::String, dynamic> #t138 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String}, #t138.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t137;
+  core::List<core::List<core::int>> list22 = block {
+    final core::List<core::List<core::int>> #t139 = <core::List<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})
+      #t139.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t139;
+  core::Set<core::List<core::int>?> set22 = block {
+    final core::Set<core::List<core::int>?> #t140 = col::LinkedHashSet::•<core::List<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})
+      #t140.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t140;
+  core::Map<core::String, core::List<core::int>?> map22 = block {
+    final core::Map<core::String, core::List<core::int>?> #t141 = <core::String, core::List<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})
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t142 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String}, #t142.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t141;
+  core::List<core::int> list30 = block {
+    final core::List<core::int> #t143 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t143.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t143;
+  core::Set<core::int?> set30 = block {
+    final core::Set<core::int?> #t144 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t144.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t144.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t144;
+  core::Map<core::String, core::int?> map30 = block {
+    final core::Map<core::String, core::int?> #t145 = <core::String, 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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::int?> #t146 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String}, #t146.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t145;
+  core::List<dynamic> list31 = block {
+    final core::List<dynamic> #t147 = <dynamic>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t147.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t147;
+  core::Set<dynamic> set31 = block {
+    final core::Set<dynamic> #t148 = col::LinkedHashSet::•<dynamic>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t148.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t148.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t148;
+  core::Map<core::String, dynamic> map31 = block {
+    final core::Map<core::String, dynamic> #t149 = <core::String, dynamic>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, dynamic> #t150 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String}, #t150.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t149;
+  core::List<core::List<core::int>> list33 = block {
+    final core::List<core::List<core::int>> #t151 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t151.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t151;
+  core::Set<core::List<core::int>?> set33 = block {
+    final core::Set<core::List<core::int>?> #t152 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t152.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t152;
+  core::Map<core::String, core::List<core::int>?> map33 = block {
+    final core::Map<core::String, core::List<core::int>?> #t153 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t154 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String}, #t154.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t153;
+  core::List<core::List<core::int>> list40 = block {
+    final core::List<core::List<core::int>> #t155 = <core::List<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})
+      #t155.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t155;
+  core::Set<core::List<core::int>?> set40 = block {
+    final core::Set<core::List<core::int>?> #t156 = col::LinkedHashSet::•<core::List<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})
+      #t156.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t156;
+  core::Map<core::String, core::List<core::int>?> map40 = block {
+    final core::Map<core::String, core::List<core::int>?> #t157 = <core::String, core::List<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})
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t158 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String}, #t158.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t157;
+  core::List<core::List<core::int>> list41 = block {
+    final core::List<core::List<core::int>> #t159 = <core::List<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})
+      #t159.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>> #t160 = col::LinkedHashSet::•<core::List<core::int>>();
+        #t160.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>) → core::bool};
+      } =>#t160){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t159;
+  core::Set<core::List<core::int>?> set41 = block {
+    final core::Set<core::List<core::int>?> #t161 = col::LinkedHashSet::•<core::List<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})
+      #t161.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>?> #t162 = col::LinkedHashSet::•<core::List<core::int>?>();
+        #t162.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+      } =>#t162){(core::Iterable<core::List<core::int>?>) → void};
+    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t161;
+  core::List<core::List<core::int>> list42 = block {
+    final core::List<core::List<core::int>> #t163 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t163.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t163;
+  core::Set<core::List<core::int>?> set42 = block {
+    final core::Set<core::List<core::int>?> #t164 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t164.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t164;
+  core::Map<core::String, core::List<core::int>?> map42 = block {
+    final core::Map<core::String, core::List<core::int>?> #t165 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t166 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String}, #t166.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t165;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t167 = <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})
+      #t167.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t167;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t168 = col::LinkedHashSet::•<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})
+      #t168.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t168.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t168;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t169 = <core::String, 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})
+      for (final core::MapEntry<core::String, core::int?> #t170 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String}, #t170.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t169;
+  core::List<core::int> list51 = block {
+    final core::List<core::int> #t171 = <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})
+      #t171.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int> #t172 = col::LinkedHashSet::•<core::int>();
+      } =>#t172){(core::Iterable<core::int>) → void};
+  } =>#t171;
+  core::Set<core::int?> set51 = block {
+    final core::Set<core::int?> #t173 = col::LinkedHashSet::•<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})
+      #t173.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int?> #t174 = col::LinkedHashSet::•<core::int?>();
+      } =>#t174){(core::Iterable<core::int?>) → void};
+    #t173.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t173;
+  core::List<core::int> list52 = block {
+    final core::List<core::int> #t175 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t175.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t175;
+  core::Set<core::int?> set52 = block {
+    final core::Set<core::int?> #t176 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t176.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t176.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t176;
+  core::List<core::List<core::int>> list60 = block {
+    final core::List<core::List<core::int>> #t177 = <core::List<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})
+      #t177.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t177;
+  core::Set<core::List<core::int>?> set60 = block {
+    final core::Set<core::List<core::int>?> #t178 = col::LinkedHashSet::•<core::List<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})
+      #t178.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t178;
+  core::Map<core::String, core::List<core::int>?> map60 = block {
+    final core::Map<core::String, core::List<core::int>?> #t179 = <core::String, core::List<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})
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t180 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String}, #t180.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t179;
+  core::List<core::List<core::int>> list61 = block {
+    final core::List<core::List<core::int>> #t181 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t181.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t181;
+  core::Set<core::List<core::int>?> set61 = block {
+    final core::Set<core::List<core::int>?> #t182 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t182.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t182;
+  core::Map<core::String, core::List<core::int>?> map61 = block {
+    final core::Map<core::String, core::List<core::int>?> #t183 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t184 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String}, #t184.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t183;
+  core::List<core::List<core::int>> list70 = block {
+    final core::List<core::List<core::int>> #t185 = <core::List<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})
+      #t185.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t185;
+  core::Set<core::List<core::int>?> set70 = block {
+    final core::Set<core::List<core::int>?> #t186 = col::LinkedHashSet::•<core::List<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})
+      #t186.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t186;
+  core::Map<core::String, core::List<core::int>?> map70 = block {
+    final core::Map<core::String, core::List<core::int>?> #t187 = <core::String, core::List<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})
+      #t187.{core::Map::[]=}{Invariant}("bar", <core::int>[]){(core::String, core::List<core::int>?) → void};
+    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t187;
+  core::List<core::List<core::int>> list71 = block {
+    final core::List<core::List<core::int>> #t188 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t188.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t188;
+  core::Set<core::List<core::int>?> set71 = block {
+    final core::Set<core::List<core::int>?> #t189 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t189.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t189;
+  core::Map<core::String, core::List<core::int>?> map71 = block {
+    final core::Map<core::String, core::List<core::int>?> #t190 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t190.{core::Map::[]=}{Invariant}("bar", <core::int>[]){(core::String, core::List<core::int>?) → void};
+    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t190;
+  core::List<core::num> list80 = block {
+    final core::List<core::num> #t191 = <core::num>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t191.{core::List::add}{Invariant}(42){(core::num) → void};
+      else
+        #t191.{core::List::add}{Invariant}(3.14){(core::num) → void};
+  } =>#t191;
+  core::Set<core::num?> set80 = block {
+    final core::Set<core::num?> #t192 = col::LinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t192.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
+      else
+        #t192.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t192.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t192;
+  core::Map<core::String, core::num?> map80 = block {
+    final core::Map<core::String, core::num?> #t193 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
+      else
+        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t193;
+  core::List<core::num> list81 = block {
+    final core::List<core::num> #t194 = <core::num>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
+      else
+        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t194;
+  core::Set<core::num?> set81 = block {
+    final core::Set<core::num?> #t195 = col::LinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+      else
+        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
+    #t195.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t195;
+  core::Map<core::String, core::num?> map81 = block {
+    final core::Map<core::String, core::num?> #t196 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::num?> #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String}, #t197.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      else
+        for (final core::MapEntry<core::String, core::num?> #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String}, #t198.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t196;
+  core::List<dynamic> list82 = block {
+    final core::List<dynamic> #t199 = <dynamic>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+      else
+        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  } =>#t199;
+  core::Set<dynamic> set82 = block {
+    final core::Set<dynamic> #t200 = col::LinkedHashSet::•<dynamic>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+      else
+        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t200.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t200;
+  core::Map<dynamic, dynamic> map82 = block {
+    final core::Map<dynamic, dynamic> #t201 = <dynamic, dynamic>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<dynamic, dynamic> #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+      else
+        for (final core::MapEntry<dynamic, dynamic> #t203 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) → void};
+  } =>#t201;
+  core::List<core::num> list83 = block {
+    final core::List<core::num> #t204 = <core::num>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t204.{core::List::add}{Invariant}(42){(core::num) → void};
+      else
+        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t204;
+  core::Set<core::num?> set83 = block {
+    final core::Set<core::num?> #t205 = col::LinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+      else
+        #t205.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t205.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t205;
+  core::Map<core::String, core::num?> map83 = block {
+    final core::Map<core::String, core::num?> #t206 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::num?> #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String}, #t207.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      else
+        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t206;
+  core::List<core::int> list90 = block {
+    final core::List<core::int> #t208 = <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})
+      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t208;
+  core::Set<core::int?> set90 = block {
+    final core::Set<core::int?> #t209 = col::LinkedHashSet::•<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})
+      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t209.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t209;
+  core::Map<core::String, core::int?> map90 = block {
+    final core::Map<core::String, core::int?> #t210 = <core::String, 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})
+      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t210;
+  core::List<core::int> list91 = block {
+    final core::List<core::int> #t211 = <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})
+      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int #t213 = #t212 as{TypeError,ForNonNullableByDefault} core::int;
+        #t211.{core::List::add}{Invariant}(#t213){(core::int) → void};
+      }
+  } =>#t211;
+  core::Set<core::int?> set91 = block {
+    final core::Set<core::int?> #t214 = col::LinkedHashSet::•<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})
+      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int? #t216 = #t215 as{TypeError,ForNonNullableByDefault} core::int?;
+        #t214.{core::Set::add}{Invariant}(#t216){(core::int?) → core::bool};
+      }
+    #t214.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t214;
+  core::Map<core::String, core::int?> map91 = block {
+    final core::Map<core::String, core::int?> #t217 = <core::String, 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})
+      for (final core::MapEntry<dynamic, dynamic> #t218 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+        final core::String #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
+        final core::int? #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+        #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String, core::int?) → void};
+      }
+    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t217;
+  core::List<core::int> list100 = block {
+    final core::List<core::int> #t221 = <core::int>[];
+    for (final core::int #t222 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t221.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t221;
+  core::Set<core::int> set100 = block {
+    final core::Set<core::int> #t223 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t224 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t223.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t223;
+  core::Map<core::String, core::int> map100 = block {
+    final core::Map<core::String, core::int> #t225 = <core::String, core::int>{};
+    for (final core::int #t226 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int) → void};
+  } =>#t225;
+  core::List<core::int> list110 = block {
+    final core::List<core::int> #t227 = <core::int>[];
+    for (core::int i in <core::int>[1, 2, 3])
+      #t227.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t227;
+  core::Set<core::int?> set110 = block {
+    final core::Set<core::int?> #t228 = col::LinkedHashSet::•<core::int?>();
+    for (core::int i in <core::int>[1, 2, 3])
+      #t228.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    #t228.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t228;
+  core::Map<core::String, core::int?> map110 = block {
+    final core::Map<core::String, core::int?> #t229 = <core::String, core::int?>{};
+    for (core::int i in <core::int>[1, 2, 3])
+      #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t229;
+  core::List<core::int> list120 = block {
+    final core::List<core::int> #t230 = <core::int>[];
+    for (dynamic i in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t230;
+  core::Set<core::int?> set120 = block {
+    final core::Set<core::int?> #t231 = col::LinkedHashSet::•<core::int?>();
+    for (dynamic i in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t231.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t231;
+  core::Map<core::String, core::int?> map120 = block {
+    final core::Map<core::String, core::int?> #t232 = <core::String, core::int?>{};
+    for (dynamic i in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t232;
+  core::List<core::int> list130 = block {
+    final core::List<core::int> #t233 = <core::int>[];
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t233.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t233;
+  core::Set<core::int> set130 = block {
+    final core::Set<core::int> #t234 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t234.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t234;
+  core::Map<core::int, core::int> map130 = block {
+    final core::Map<core::int, core::int> #t235 = <core::int, core::int>{};
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #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 {
+  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})
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
+                                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t236;
+  block {
+    final core::Set<core::int?> #t237 = col::LinkedHashSet::•<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})
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
+                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t237.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t237;
+  block {
+    final core::Map<core::int, core::int?> #t238 = <core::int, 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})
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                  ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                         ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int, core::int?) → void};
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                                ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
+  } =>#t238;
+  block {
+    final core::List<core::int> #t239 = <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})
+      #t239.{core::List::addAll}{Invariant}(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
+                                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int]){(core::Iterable<core::int>) → void};
+  } =>#t239;
+  block {
+    final core::Set<core::int?> #t240 = col::LinkedHashSet::•<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})
+      #t240.{core::Set::addAll}{Invariant}(<core::int?>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
+                                                 ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?]){(core::Iterable<core::int?>) → void};
+    #t240.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t240;
+  block {
+    final core::Map<core::int, core::int?> #t241 = <core::int, 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})
+      for (final core::MapEntry<core::int, core::int?> #t242 in <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                      ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int?>>})
+        #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int}, #t242.{core::MapEntry::value}{core::int?}){(core::int, core::int?) → void};
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                                     ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
+  } =>#t241;
+  block {
+    final core::List<core::int> #t243 = <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})
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
+                                               ^"){(core::int) → void};
+  } =>#t243;
+  block {
+    final core::Set<core::int?> #t244 = col::LinkedHashSet::•<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})
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
+                                                ^"){(core::int?) → core::bool};
+    #t244.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t244;
+  <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                     ^": null};
+  block {
+    final core::List<core::String> #t245 = <core::String>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+      else
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                                     ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t245;
+  block {
+    final core::Set<core::String?> #t246 = col::LinkedHashSet::•<core::String?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+      else
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    #t246.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+  } =>#t246;
+  block {
+    final core::Map<core::String, core::String?> #t247 = <core::String, core::String?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+      else
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                                            ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+  } =>#t247;
+  block {
+    final core::List<core::int> #t248 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
+                                                             ^"){(core::int) → void};
+      else
+        #t248.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t248;
+  block {
+    final core::Set<core::int?> #t249 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
+                                                              ^"){(core::int?) → core::bool};
+      else
+        #t249.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t249.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t249;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                      ^": null};
+  block {
+    final core::List<core::int> #t250 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t250.{core::List::add}{Invariant}(42){(core::int) → void};
+      else
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
+                                                                     ^"){(core::int) → void};
+  } =>#t250;
+  block {
+    final core::Set<core::int?> #t251 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t251.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+      else
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
+                                                                      ^"){(core::int?) → core::bool};
+    #t251.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t251;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                     ^": null};
+  final core::int i = 0;
+  block {
+    final core::List<core::int> #t252 = <core::int>[];
+    for (final core::int #t253 in <core::int>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+  <int>[for (i in <int>[1]) i];
+             ^";
+      #t252.{core::List::add}{Invariant}(i){(core::int) → void};
+    }
+  } =>#t252;
+  block {
+    final core::Set<core::int?> #t254 = col::LinkedHashSet::•<core::int?>();
+    for (final core::int #t255 in <core::int>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+  <int?>{for (i in <int>[1]) i, null};
+              ^";
+      #t254.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    }
+    #t254.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t254;
+  block {
+    final core::Map<core::String, core::int?> #t256 = <core::String, core::int?>{};
+    for (final core::int #t257 in <core::int>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+  <String, int?>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
+                      ^";
+      #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    }
+    #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t256;
+  core::List<dynamic> list10 = block {
+    final core::List<dynamic> #t258 = <dynamic>[];
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var list10 = [for (var i in \"not iterable\") i];
+                              ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t258.{core::List::add}{Invariant}(i){(dynamic) → void};
+  } =>#t258;
+  core::Set<dynamic> set10 = block {
+    final core::Set<dynamic> #t259 = col::LinkedHashSet::•<dynamic>();
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var set10 = {for (var i in \"not iterable\") i, null};
+                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t259.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+    #t259.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t259;
+  core::Map<core::String, dynamic> map10 = block {
+    final core::Map<core::String, dynamic> #t260 = <core::String, dynamic>{};
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
+                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+    #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t260;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t261 = <core::int>[];
+    for (core::int i in <core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                               ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                                      ^" in "int" as{TypeError,ForNonNullableByDefault} core::int])
+      #t261.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t261;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t262 = col::LinkedHashSet::•<core::int?>();
+    for (core::int i in <core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int])
+      #t262.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    #t262.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t262;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t263 = <core::String, core::int?>{};
+    for (core::int i in <core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int])
+      #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t263;
+  core::List<dynamic> list30 = block {
+    final core::List<dynamic> #t264 = <dynamic>[];
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var list30 = [await for (var i in \"not stream\") i];
+                                    ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>)
+      #t264.{core::List::add}{Invariant}(i){(dynamic) → void};
+  } =>#t264;
+  core::Set<dynamic> set30 = block {
+    final core::Set<dynamic> #t265 = col::LinkedHashSet::•<dynamic>();
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var set30 = {await for (var i in \"not stream\") i, null};
+                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>)
+      #t265.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+    #t265.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t265;
+  core::Map<core::String, dynamic> map30 = block {
+    final core::Map<core::String, dynamic> #t266 = <core::String, dynamic>{};
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
+                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>)
+      #t266.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+    #t266.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t266;
+  core::List<core::int> list40 = block {
+    final core::List<core::int> #t267 = <core::int>[];
+    await for (core::int i in asy::Stream::fromIterable<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                         ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                                ^" in "int" as{TypeError,ForNonNullableByDefault} core::int]))
+      #t267.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t267;
+  core::Set<core::int?> set40 = block {
+    final core::Set<core::int?> #t268 = col::LinkedHashSet::•<core::int?>();
+    await for (core::int i in asy::Stream::fromIterable<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int]))
+      #t268.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    #t268.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t268;
+  core::Map<core::String, core::int?> map40 = block {
+    final core::Map<core::String, core::int?> #t269 = <core::String, core::int?>{};
+    await for (core::int i in asy::Stream::fromIterable<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int]))
+      #t269.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    #t269.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t269;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t270 = <core::int>[];
+    for (; ; )
+      #t270.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t270;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t271 = col::LinkedHashSet::•<core::int?>();
+    for (; ; )
+      #t271.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t271.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t271;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t272 = <core::String, core::int?>{};
+    for (; ; )
+      #t272.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t272;
+  core::List<core::int> list60 = block {
+    final core::List<core::int> #t273 = <core::int>[];
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var list60 = [for (; \"not bool\";) 42];
+                       ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+      #t273.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t273;
+  core::Set<core::int?> set60 = block {
+    final core::Set<core::int?> #t274 = col::LinkedHashSet::•<core::int?>();
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var set60 = {for (; \"not bool\";) 42, null};
+                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+      #t274.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t274.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t274;
+  core::Map<core::String, core::int?> map60 = block {
+    final core::Map<core::String, core::int?> #t275 = <core::String, core::int?>{};
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
+                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+      #t275.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t275.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t275;
+}
+static method testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic {
+  block {
+    final core::List<core::int> #t276 = <core::int>[];
+    await for (core::int i in stream)
+      #t276.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t276;
+  block {
+    final core::Set<core::int> #t277 = col::LinkedHashSet::•<core::int>();
+    await for (core::int i in stream)
+      #t277.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t277;
+  block {
+    final core::Map<core::String, core::int> #t278 = <core::String, core::int>{};
+    await for (core::int i in stream)
+      #t278.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int) → void};
+  } =>#t278;
+}
+static method testPromotion(self::A a) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t279 = <core::int>[];
+    if(a is{ForNonNullableByDefault} self::B)
+      #t279.{core::List::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → void};
+  } =>#t279;
+  core::Set<core::int> set10 = block {
+    final core::Set<core::int> #t280 = col::LinkedHashSet::•<core::int>();
+    if(a is{ForNonNullableByDefault} self::B)
+      #t280.{core::Set::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → core::bool};
+  } =>#t280;
+  core::Map<core::int, core::int> map10 = block {
+    final core::Map<core::int, core::int> #t281 = <core::int, core::int>{};
+    if(a is{ForNonNullableByDefault} self::B)
+      #t281.{core::Map::[]=}{Invariant}(a{self::B}.{self::B::foo}{core::int}, a{self::B}.{self::B::foo}{core::int}){(core::int, core::int) → void};
+  } =>#t281;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
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
new file mode 100644
index 0000000..746e6cf
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.modular.expect
@@ -0,0 +1,2148 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Map<String, List<int>?> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:44: Error: Expected ':' after this.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:61: Error: Expected ':' after this.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
+//   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
+//   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) "bar"];
+//                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{if (oracle("foo")) "bar", null};
+//                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <String, int?>{if (oracle("foo")) "bar": "bar", "baz": null};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) ...["bar"]];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{if (oracle("foo")) ...["bar"], null};
+//                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <String, int?>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) ...["bar"], "baz": null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String?>{if (oracle("foo")) 42 else 3.14, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String?>{if (oracle("foo")) 42 else 3.14, null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map else 42];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map else 42, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) 42 else ...map];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map else 42, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   List<int> list20 = [if (42) 42];
+//                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Set<int> set20 = {if (42) 42};
+//                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Map<int, int> map30 = {if (42) 42: 42};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+//   <int>[for (i in <int>[1]) i];
+//              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+//   <int?>{for (i in <int>[1]) i, null};
+//               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+//   <String, int?>{for (i in <int>[1]) "bar": i, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var list50 = [await for (;;) 42];
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var set50 = {await for (;;) 42, null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var map50 = {await for (;;) "bar": 42, "baz": null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
+//                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) "bar", null};
+//                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
+//                                                  ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...map];
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) ...map, null};
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
+//                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
+//                                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var list10 = [for (var i in "not iterable") i];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var set10 = {for (var i in "not iterable") i, null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var list30 = [await for (var i in "not stream") i];
+//                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var set30 = {await for (var i in "not stream") i, null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var list60 = [for (; "not bool";) 42];
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var set60 = {for (; "not bool";) 42, null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>[await for (int i in stream) i];
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>{await for (int i in stream) i};
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <String, int>{await for (int i in stream) "bar": i};
+//                                  ^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  get foo() → core::int
+    return 42;
+}
+static method oracle<T extends core::Object? = dynamic>([self::oracle::T? t = #C1]) → dynamic
+  return true;
+static method testIfElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::Map<core::String, core::int> mapToInt, core::Map<core::String, core::double> mapToDouble) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t1 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t1;
+  core::Set<core::int?> set10 = block {
+    final core::Set<core::int?> #t2 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t2;
+  core::Map<core::String, core::int?> map10 = block {
+    final core::Map<core::String, core::int?> #t3 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t3.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t3;
+  core::List<dynamic> list11 = block {
+    final core::List<dynamic> #t4 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t4.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
+  } =>#t4;
+  core::Set<dynamic> set11 = block {
+    final core::Set<dynamic> #t5 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t5.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
+    #t5.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t5;
+  core::Map<core::String, dynamic> map11 = block {
+    final core::Map<core::String, dynamic> #t6 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t6.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
+    #t6.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t6;
+  core::List<core::List<core::int>> list12 = block {
+    final core::List<core::List<core::int>> #t7 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t7.{core::List::add}{Invariant}(<core::int>[42]){(core::List<core::int>) → void};
+  } =>#t7;
+  core::Set<core::List<core::int>?> set12 = block {
+    final core::Set<core::List<core::int>?> #t8 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t8.{core::Set::add}{Invariant}(<core::int>[42]){(core::List<core::int>?) → core::bool};
+    #t8.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t8;
+  core::Map<core::String, core::List<core::int>?> map12 = block {
+    final core::Map<core::String, core::List<core::int>?> #t9 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t9.{core::Map::[]=}{Invariant}("bar", <core::int>[42]){(core::String, core::List<core::int>?) → void};
+    #t9.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t9;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t10 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t10.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t10;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t11 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t11.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t11.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t11;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t12 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::int?> #t13 in <core::String, core::int>{"bar": 42}.{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", null){(core::String, core::int?) → void};
+  } =>#t12;
+  core::List<dynamic> list21 = block {
+    final core::List<dynamic> #t14 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t14.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t14;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t15 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t15.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t15.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t15;
+  core::Map<core::String, dynamic> map21 = block {
+    final core::Map<core::String, dynamic> #t16 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, dynamic> #t17 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String}, #t17.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t16;
+  core::List<core::List<core::int>> list22 = block {
+    final core::List<core::List<core::int>> #t18 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t18.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t18;
+  core::Set<core::List<core::int>?> set22 = block {
+    final core::Set<core::List<core::int>?> #t19 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t19.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t19.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t19;
+  core::Map<core::String, core::List<core::int>?> map22 = block {
+    final core::Map<core::String, core::List<core::int>?> #t20 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t21 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String}, #t21.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t20;
+  core::List<core::int> list30 = block {
+    final core::List<core::int> #t22 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t22.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t22;
+  core::Set<core::int?> set30 = block {
+    final core::Set<core::int?> #t23 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t23.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t23.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t23;
+  core::Map<core::String, core::int?> map30 = block {
+    final core::Map<core::String, core::int?> #t24 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::int?> #t25 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String}, #t25.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t24;
+  core::List<dynamic> list31 = block {
+    final core::List<dynamic> #t26 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t26.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t26;
+  core::Set<dynamic> set31 = block {
+    final core::Set<dynamic> #t27 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t27.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t27.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t27;
+  core::Map<core::String, dynamic> map31 = block {
+    final core::Map<core::String, dynamic> #t28 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, dynamic> #t29 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String}, #t29.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t28;
+  core::List<core::List<core::int>> list33 = block {
+    final core::List<core::List<core::int>> #t30 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t30.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t30;
+  core::Set<core::List<core::int>?> set33 = block {
+    final core::Set<core::List<core::int>?> #t31 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t31.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t31.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t31;
+  core::Map<core::String, core::List<core::int>?> map33 = block {
+    final core::Map<core::String, core::List<core::int>?> #t32 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t33 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{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.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t32;
+  core::List<core::List<core::int>> list40 = block {
+    final core::List<core::List<core::int>> #t34 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t34.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t34;
+  core::Set<core::List<core::int>?> set40 = block {
+    final core::Set<core::List<core::int>?> #t35 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t35.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t35.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t35;
+  core::Map<core::String, core::List<core::int>?> map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Map<String, List<int>?> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
+                                  ^";
+  core::List<core::List<core::int>> list41 = block {
+    final core::List<core::List<core::int>> #t36 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t36.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>> #t37 = col::LinkedHashSet::•<core::List<core::int>>();
+        #t37.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>) → core::bool};
+      } =>#t37){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t36;
+  core::Set<core::List<core::int>?> set41 = block {
+    final core::Set<core::List<core::int>?> #t38 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t38.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>?> #t39 = col::LinkedHashSet::•<core::List<core::int>?>();
+        #t39.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+      } =>#t39){(core::Iterable<core::List<core::int>?>) → void};
+    #t38.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t38;
+  core::List<core::List<core::int>> list42 = block {
+    final core::List<core::List<core::int>> #t40 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t40.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t40;
+  core::Set<core::List<core::int>?> set42 = block {
+    final core::Set<core::List<core::int>?> #t41 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t41.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t41.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t41;
+  core::Map<core::String, core::List<core::int>?> map42 = block {
+    final core::Map<core::String, core::List<core::int>?> #t42 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t43 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String}, #t43.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t42;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t44 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t44.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t44;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t45 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t45.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t45.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t45;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t46 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::int?> #t47 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String}, #t47.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t46;
+  core::List<core::int> list51 = block {
+    final core::List<core::int> #t48 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t48.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int> #t49 = col::LinkedHashSet::•<core::int>();
+      } =>#t49){(core::Iterable<core::int>) → void};
+  } =>#t48;
+  core::Set<core::int?> set51 = block {
+    final core::Set<core::int?> #t50 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t50.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int?> #t51 = col::LinkedHashSet::•<core::int?>();
+      } =>#t51){(core::Iterable<core::int?>) → void};
+    #t50.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t50;
+  core::List<core::int> list52 = block {
+    final core::List<core::int> #t52 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t52.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t52;
+  core::Set<core::int?> set52 = block {
+    final core::Set<core::int?> #t53 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t53.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t53.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t53;
+  core::Map<core::String, core::int?> map52 = block {
+    final core::Map<core::String, core::int?> #t54 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::int?> #t55 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String}, #t55.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t54;
+  core::List<core::List<core::int>> list60 = block {
+    final core::List<core::List<core::int>> #t56 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t56.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t56;
+  core::Set<core::List<core::int>?> set60 = block {
+    final core::Set<core::List<core::int>?> #t57 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t57.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t57.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t57;
+  core::Map<core::String, core::List<core::int>?> map60 = block {
+    final core::Map<core::String, core::List<core::int>?> #t58 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t59 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String}, #t59.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t58;
+  core::List<core::List<core::int>> list61 = block {
+    final core::List<core::List<core::int>> #t60 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t60.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t60;
+  core::Set<core::List<core::int>?> set61 = block {
+    final core::Set<core::List<core::int>?> #t61 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t61.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t61.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t61;
+  core::Map<core::String, core::List<core::int>?> map61 = block {
+    final core::Map<core::String, core::List<core::int>?> #t62 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t63 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String}, #t63.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t62;
+  core::List<core::List<core::int>> list70 = block {
+    final core::List<core::List<core::int>> #t64 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t64.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t64;
+  core::Set<core::List<core::int>?> set70 = block {
+    final core::Set<core::List<core::int>?> #t65 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t65.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t65.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t65;
+  core::List<core::List<core::int>> list71 = block {
+    final core::List<core::List<core::int>> #t66 = <core::List<core::int>>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t66.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t66;
+  core::Set<core::List<core::int>?> set71 = block {
+    final core::Set<core::List<core::int>?> #t67 = col::LinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t67.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t67.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t67;
+  core::List<core::num> list80 = block {
+    final core::List<core::num> #t68 = <core::num>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t68.{core::List::add}{Invariant}(42){(core::num) → void};
+    else
+      #t68.{core::List::add}{Invariant}(3.14){(core::num) → void};
+  } =>#t68;
+  core::Set<core::num?> set80 = block {
+    final core::Set<core::num?> #t69 = col::LinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t69.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
+    else
+      #t69.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t69.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t69;
+  core::Map<core::String, core::num?> map80 = block {
+    final core::Map<core::String, core::num?> #t70 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t70.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
+    else
+      #t70.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t70.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t70;
+  core::List<core::num> list81 = block {
+    final core::List<core::num> #t71 = <core::num>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t71.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
+    else
+      #t71.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t71;
+  core::Set<core::num?> set81 = block {
+    final core::Set<core::num?> #t72 = col::LinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t72.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+    else
+      #t72.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
+    #t72.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t72;
+  core::Map<core::String, core::num?> map81 = block {
+    final core::Map<core::String, core::num?> #t73 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::num?> #t74 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String}, #t74.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    else
+      for (final core::MapEntry<core::String, core::num?> #t75 in mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String}, #t75.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t73;
+  core::List<dynamic> list82 = block {
+    final core::List<dynamic> #t76 = <dynamic>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t76.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+    else
+      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  } =>#t76;
+  core::Set<dynamic> set82 = block {
+    final core::Set<dynamic> #t77 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t77.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+    else
+      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t77.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t77;
+  core::Set<dynamic> map82 = block {
+    final core::Set<dynamic> #t78 = col::LinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
+                                     ^"){(dynamic) → core::bool};
+    else
+      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t78.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t78;
+  core::List<core::num> list83 = block {
+    final core::List<core::num> #t79 = <core::num>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t79.{core::List::add}{Invariant}(42){(core::num) → void};
+    else
+      #t79.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t79;
+  core::Set<core::num?> set83 = block {
+    final core::Set<core::num?> #t80 = col::LinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t80.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+    else
+      #t80.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t80.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t80;
+  core::Map<core::String, core::num?> map83 = block {
+    final core::Map<core::String, core::num?> #t81 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::num?> #t82 in mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String}, #t82.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    else
+      #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t81.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t81;
+  core::List<core::int> list90 = block {
+    final core::List<core::int> #t83 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t83;
+  core::Set<core::int?> set90 = block {
+    final core::Set<core::int?> #t84 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t84.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t84;
+  core::Map<core::String, core::int?> map90 = block {
+    final core::Map<core::String, core::int?> #t85 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t85.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t85;
+  core::List<core::int> list91 = block {
+    final core::List<core::int> #t86 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final dynamic #t87 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int #t88 = #t87 as{TypeError,ForNonNullableByDefault} core::int;
+        #t86.{core::List::add}{Invariant}(#t88){(core::int) → void};
+      }
+  } =>#t86;
+  core::Set<core::int?> set91 = block {
+    final core::Set<core::int?> #t89 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final dynamic #t90 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int? #t91 = #t90 as{TypeError,ForNonNullableByDefault} core::int?;
+        #t89.{core::Set::add}{Invariant}(#t91){(core::int?) → core::bool};
+      }
+    #t89.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t89;
+  core::Map<core::String, core::int?> map91 = block {
+    final core::Map<core::String, core::int?> #t92 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<dynamic, dynamic> #t93 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+        final core::String #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
+        final core::int? #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+        #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String, core::int?) → void};
+      }
+    #t92.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t92;
+  core::List<core::int> list100 = block {
+    final core::List<core::int> #t96 = <core::int>[];
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t96.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t96;
+  core::Set<core::int> set100 = block {
+    final core::Set<core::int> #t97 = col::LinkedHashSet::•<core::int>();
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t97.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t97;
+  core::Map<core::int, core::int> map100 = block {
+    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t98.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
+  } =>#t98;
+}
+static method testIfElementErrors(core::Map<core::int, core::int> map) → dynamic {
+  block {
+    final core::List<core::int> #t99 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) \"bar\"];
+                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t99;
+  block {
+    final core::Set<core::int?> #t100 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{if (oracle(\"foo\")) \"bar\", null};
+                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t100.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t100;
+  block {
+    final core::Map<core::String, core::int?> #t101 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
+                                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t101;
+  block {
+    final core::List<core::int> #t102 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t102.{core::List::addAll}{Invariant}(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) ...[\"bar\"]];
+                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int]){(core::Iterable<core::int>) → void};
+  } =>#t102;
+  block {
+    final core::Set<core::int?> #t103 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t103.{core::Set::addAll}{Invariant}(<core::int?>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{if (oracle(\"foo\")) ...[\"bar\"], null};
+                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?]){(core::Iterable<core::int?>) → void};
+    #t103.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t103;
+  block {
+    final core::Map<core::String, core::int?> #t104 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      for (final core::MapEntry<core::String, core::int?> #t105 in <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <String, int?>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String}, #t105.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t104;
+  block {
+    final core::List<core::int> #t106 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map];
+                              ^"){(core::int) → void};
+  } =>#t106;
+  block {
+    final core::Set<core::int?> #t107 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map, null};
+                               ^"){(core::int?) → core::bool};
+    #t107.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t107;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                       ^": null};
+  block {
+    final core::List<core::String> #t108 = <core::String>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+    else
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t108;
+  block {
+    final core::Set<core::String?> #t109 = col::LinkedHashSet::•<core::String?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
+                               ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    else
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
+                                       ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    #t109.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+  } =>#t109;
+  block {
+    final core::Map<core::String, core::String?> #t110 = <core::String, core::String?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    else
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                                             ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+  } =>#t110;
+  block {
+    final core::List<core::int> #t111 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map else 42];
+                              ^"){(core::int) → void};
+    else
+      #t111.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t111;
+  block {
+    final core::Set<core::int?> #t112 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map else 42, null};
+                               ^"){(core::int?) → core::bool};
+    else
+      #t112.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t112.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t112;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                       ^": null};
+  block {
+    final core::List<core::int> #t113 = <core::int>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t113.{core::List::add}{Invariant}(42){(core::int) → void};
+    else
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) 42 else ...map];
+                                      ^"){(core::int) → void};
+  } =>#t113;
+  block {
+    final core::Set<core::int?> #t114 = col::LinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map else 42, null};
+                               ^"){(core::int?) → core::bool};
+    else
+      #t114.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t114.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t114;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                      ^": null};
+  core::Set<dynamic> set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                       ^";
+  core::Map<dynamic, dynamic> map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                                    ^": null};
+  core::Set<dynamic> set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                       ^";
+  core::Map<dynamic, dynamic> map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                                     ^": null};
+  core::Map<dynamic, Null> map12 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
+  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                  ^": null};
+  core::Map<dynamic, Null> map13 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
+  var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                   ^": null};
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t115 = <core::int>[];
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  List<int> list20 = [if (42) 42];
+                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t115.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t115;
+  core::Set<core::int> set20 = block {
+    final core::Set<core::int> #t116 = col::LinkedHashSet::•<core::int>();
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Set<int> set20 = {if (42) 42};
+                        ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t116.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t116;
+  core::Map<core::int, core::int> map30 = block {
+    final core::Map<core::int, core::int> #t117 = <core::int, core::int>{};
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Map<int, int> map30 = {if (42) 42: 42};
+                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
+  } =>#t117;
+  core::List<core::String> list40 = block {
+    final core::List<core::String> #t118 = <core::String>[];
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                    ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+    else
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t118;
+  core::Set<core::String> set40 = block {
+    final core::Set<core::String> #t119 = col::LinkedHashSet::•<core::String>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                  ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
+    else
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
+  } =>#t119;
+  core::Map<core::String, core::int> map40 = block {
+    final core::Map<core::String, core::int> #t120 = <core::String, core::int>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                            ^" in true as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
+    else
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
+  } =>#t120;
+  core::Map<core::int, core::String> map41 = block {
+    final core::Map<core::int, core::String> #t121 = <core::int, core::String>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+    else
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  } =>#t121;
+}
+static method testForElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::int index, core::Map<core::String, core::int> mapStringInt, core::Map<core::String, core::double> mapStringDouble) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t122 = <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})
+      #t122.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t122;
+  core::Set<core::int?> set10 = block {
+    final core::Set<core::int?> #t123 = col::LinkedHashSet::•<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})
+      #t123.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t123.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t123;
+  core::Map<core::String, core::int?> map10 = block {
+    final core::Map<core::String, core::int?> #t124 = <core::String, 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})
+      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t124;
+  core::List<dynamic> list11 = block {
+    final core::List<dynamic> #t125 = <dynamic>[];
+    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})
+      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
+  } =>#t125;
+  core::Set<dynamic> set11 = block {
+    final core::Set<dynamic> #t126 = col::LinkedHashSet::•<dynamic>();
+    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})
+      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
+    #t126.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t126;
+  core::Map<core::String, dynamic> map11 = block {
+    final core::Map<core::String, dynamic> #t127 = <core::String, dynamic>{};
+    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})
+      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
+    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t127;
+  core::List<core::List<core::int>> list12 = block {
+    final core::List<core::List<core::int>> #t128 = <core::List<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})
+      #t128.{core::List::add}{Invariant}(<core::int>[42]){(core::List<core::int>) → void};
+  } =>#t128;
+  core::Set<core::List<core::int>?> set12 = block {
+    final core::Set<core::List<core::int>?> #t129 = col::LinkedHashSet::•<core::List<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})
+      #t129.{core::Set::add}{Invariant}(<core::int>[42]){(core::List<core::int>?) → core::bool};
+    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t129;
+  core::Map<core::String, core::List<core::int>?> map12 = block {
+    final core::Map<core::String, core::List<core::int>?> #t130 = <core::String, core::List<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})
+      #t130.{core::Map::[]=}{Invariant}("bar", <core::int>[42]){(core::String, core::List<core::int>?) → void};
+    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t130;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t131 = <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})
+      #t131.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t131;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t132 = col::LinkedHashSet::•<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})
+      #t132.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t132.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t132;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t133 = <core::String, 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})
+      for (final core::MapEntry<core::String, core::int?> #t134 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String}, #t134.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t133;
+  core::List<dynamic> list21 = block {
+    final core::List<dynamic> #t135 = <dynamic>[];
+    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})
+      #t135.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t135;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t136 = col::LinkedHashSet::•<dynamic>();
+    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})
+      #t136.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t136.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t136;
+  core::Map<core::String, dynamic> map21 = block {
+    final core::Map<core::String, dynamic> #t137 = <core::String, dynamic>{};
+    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})
+      for (final core::MapEntry<core::String, dynamic> #t138 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String}, #t138.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t137;
+  core::List<core::List<core::int>> list22 = block {
+    final core::List<core::List<core::int>> #t139 = <core::List<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})
+      #t139.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t139;
+  core::Set<core::List<core::int>?> set22 = block {
+    final core::Set<core::List<core::int>?> #t140 = col::LinkedHashSet::•<core::List<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})
+      #t140.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t140;
+  core::Map<core::String, core::List<core::int>?> map22 = block {
+    final core::Map<core::String, core::List<core::int>?> #t141 = <core::String, core::List<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})
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t142 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String}, #t142.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t141;
+  core::List<core::int> list30 = block {
+    final core::List<core::int> #t143 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t143.{core::List::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int>) → void};
+  } =>#t143;
+  core::Set<core::int?> set30 = block {
+    final core::Set<core::int?> #t144 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t144.{core::Set::addAll}{Invariant}(<core::int>[42]){(core::Iterable<core::int?>) → void};
+    #t144.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t144;
+  core::Map<core::String, core::int?> map30 = block {
+    final core::Map<core::String, core::int?> #t145 = <core::String, 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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::int?> #t146 in <core::String, core::int>{"bar": 42}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String}, #t146.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t145;
+  core::List<dynamic> list31 = block {
+    final core::List<dynamic> #t147 = <dynamic>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t147.{core::List::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+  } =>#t147;
+  core::Set<dynamic> set31 = block {
+    final core::Set<dynamic> #t148 = col::LinkedHashSet::•<dynamic>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t148.{core::Set::addAll}{Invariant}(<dynamic>[dynVar]){(core::Iterable<dynamic>) → void};
+    #t148.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t148;
+  core::Map<core::String, dynamic> map31 = block {
+    final core::Map<core::String, dynamic> #t149 = <core::String, dynamic>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, dynamic> #t150 in <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>})
+          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String}, #t150.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t149;
+  core::List<core::List<core::int>> list33 = block {
+    final core::List<core::List<core::int>> #t151 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t151.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t151;
+  core::Set<core::List<core::int>?> set33 = block {
+    final core::Set<core::List<core::int>?> #t152 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t152.{core::Set::addAll}{Invariant}(<core::List<core::int>>[<core::int>[42]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t152;
+  core::Map<core::String, core::List<core::int>?> map33 = block {
+    final core::Map<core::String, core::List<core::int>?> #t153 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t154 in <core::String, core::List<core::int>>{"bar": <core::int>[42]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String}, #t154.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t153;
+  core::List<core::List<core::int>> list40 = block {
+    final core::List<core::List<core::int>> #t155 = <core::List<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})
+      #t155.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t155;
+  core::Set<core::List<core::int>?> set40 = block {
+    final core::Set<core::List<core::int>?> #t156 = col::LinkedHashSet::•<core::List<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})
+      #t156.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t156;
+  core::Map<core::String, core::List<core::int>?> map40 = block {
+    final core::Map<core::String, core::List<core::int>?> #t157 = <core::String, core::List<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})
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t158 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String}, #t158.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t157;
+  core::List<core::List<core::int>> list41 = block {
+    final core::List<core::List<core::int>> #t159 = <core::List<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})
+      #t159.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>> #t160 = col::LinkedHashSet::•<core::List<core::int>>();
+        #t160.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>) → core::bool};
+      } =>#t160){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t159;
+  core::Set<core::List<core::int>?> set41 = block {
+    final core::Set<core::List<core::int>?> #t161 = col::LinkedHashSet::•<core::List<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})
+      #t161.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>?> #t162 = col::LinkedHashSet::•<core::List<core::int>?>();
+        #t162.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+      } =>#t162){(core::Iterable<core::List<core::int>?>) → void};
+    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t161;
+  core::List<core::List<core::int>> list42 = block {
+    final core::List<core::List<core::int>> #t163 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t163.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t163;
+  core::Set<core::List<core::int>?> set42 = block {
+    final core::Set<core::List<core::int>?> #t164 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t164.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t164;
+  core::Map<core::String, core::List<core::int>?> map42 = block {
+    final core::Map<core::String, core::List<core::int>?> #t165 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t166 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String}, #t166.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t165;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t167 = <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})
+      #t167.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t167;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t168 = col::LinkedHashSet::•<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})
+      #t168.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t168.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t168;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t169 = <core::String, 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})
+      for (final core::MapEntry<core::String, core::int?> #t170 in <core::String, core::int?>{}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>})
+        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String}, #t170.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t169;
+  core::List<core::int> list51 = block {
+    final core::List<core::int> #t171 = <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})
+      #t171.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int> #t172 = col::LinkedHashSet::•<core::int>();
+      } =>#t172){(core::Iterable<core::int>) → void};
+  } =>#t171;
+  core::Set<core::int?> set51 = block {
+    final core::Set<core::int?> #t173 = col::LinkedHashSet::•<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})
+      #t173.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int?> #t174 = col::LinkedHashSet::•<core::int?>();
+      } =>#t174){(core::Iterable<core::int?>) → void};
+    #t173.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t173;
+  core::List<core::int> list52 = block {
+    final core::List<core::int> #t175 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t175.{core::List::addAll}{Invariant}(<core::int>[]){(core::Iterable<core::int>) → void};
+  } =>#t175;
+  core::Set<core::int?> set52 = block {
+    final core::Set<core::int?> #t176 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t176.{core::Set::addAll}{Invariant}(<core::int?>[]){(core::Iterable<core::int?>) → void};
+    #t176.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t176;
+  core::List<core::List<core::int>> list60 = block {
+    final core::List<core::List<core::int>> #t177 = <core::List<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})
+      #t177.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t177;
+  core::Set<core::List<core::int>?> set60 = block {
+    final core::Set<core::List<core::int>?> #t178 = col::LinkedHashSet::•<core::List<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})
+      #t178.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t178;
+  core::Map<core::String, core::List<core::int>?> map60 = block {
+    final core::Map<core::String, core::List<core::int>?> #t179 = <core::String, core::List<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})
+      for (final core::MapEntry<core::String, core::List<core::int>?> #t180 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String}, #t180.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t179;
+  core::List<core::List<core::int>> list61 = block {
+    final core::List<core::List<core::int>> #t181 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t181.{core::List::addAll}{Invariant}(<core::List<core::int>>[<core::int>[]]){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t181;
+  core::Set<core::List<core::int>?> set61 = block {
+    final core::Set<core::List<core::int>?> #t182 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t182.{core::Set::addAll}{Invariant}(<core::List<core::int>?>[<core::int>[]]){(core::Iterable<core::List<core::int>?>) → void};
+    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t182;
+  core::Map<core::String, core::List<core::int>?> map61 = block {
+    final core::Map<core::String, core::List<core::int>?> #t183 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::List<core::int>?> #t184 in <core::String, core::List<core::int>?>{"bar": <core::int>[]}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::List<core::int>?>>})
+          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String}, #t184.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t183;
+  core::List<core::List<core::int>> list70 = block {
+    final core::List<core::List<core::int>> #t185 = <core::List<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})
+      #t185.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t185;
+  core::Set<core::List<core::int>?> set70 = block {
+    final core::Set<core::List<core::int>?> #t186 = col::LinkedHashSet::•<core::List<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})
+      #t186.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t186;
+  core::Map<core::String, core::List<core::int>?> map70 = block {
+    final core::Map<core::String, core::List<core::int>?> #t187 = <core::String, core::List<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})
+      #t187.{core::Map::[]=}{Invariant}("bar", <core::int>[]){(core::String, core::List<core::int>?) → void};
+    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t187;
+  core::List<core::List<core::int>> list71 = block {
+    final core::List<core::List<core::int>> #t188 = <core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t188.{core::List::add}{Invariant}(<core::int>[]){(core::List<core::int>) → void};
+  } =>#t188;
+  core::Set<core::List<core::int>?> set71 = block {
+    final core::Set<core::List<core::int>?> #t189 = col::LinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t189.{core::Set::add}{Invariant}(<core::int>[]){(core::List<core::int>?) → core::bool};
+    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t189;
+  core::Map<core::String, core::List<core::int>?> map71 = block {
+    final core::Map<core::String, core::List<core::int>?> #t190 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t190.{core::Map::[]=}{Invariant}("bar", <core::int>[]){(core::String, core::List<core::int>?) → void};
+    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t190;
+  core::List<core::num> list80 = block {
+    final core::List<core::num> #t191 = <core::num>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t191.{core::List::add}{Invariant}(42){(core::num) → void};
+      else
+        #t191.{core::List::add}{Invariant}(3.14){(core::num) → void};
+  } =>#t191;
+  core::Set<core::num?> set80 = block {
+    final core::Set<core::num?> #t192 = col::LinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t192.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
+      else
+        #t192.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t192.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t192;
+  core::Map<core::String, core::num?> map80 = block {
+    final core::Map<core::String, core::num?> #t193 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
+      else
+        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t193;
+  core::List<core::num> list81 = block {
+    final core::List<core::num> #t194 = <core::num>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
+      else
+        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t194;
+  core::Set<core::num?> set81 = block {
+    final core::Set<core::num?> #t195 = col::LinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+      else
+        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
+    #t195.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t195;
+  core::Map<core::String, core::num?> map81 = block {
+    final core::Map<core::String, core::num?> #t196 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::num?> #t197 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String}, #t197.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      else
+        for (final core::MapEntry<core::String, core::num?> #t198 in mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String}, #t198.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t196;
+  core::List<dynamic> list82 = block {
+    final core::List<dynamic> #t199 = <dynamic>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+      else
+        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  } =>#t199;
+  core::Set<dynamic> set82 = block {
+    final core::Set<dynamic> #t200 = col::LinkedHashSet::•<dynamic>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+      else
+        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t200.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t200;
+  core::Map<dynamic, dynamic> map82 = block {
+    final core::Map<dynamic, dynamic> #t201 = <dynamic, dynamic>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<dynamic, dynamic> #t202 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+      else
+        for (final core::MapEntry<dynamic, dynamic> #t203 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<dynamic, dynamic>>})
+          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) → void};
+  } =>#t201;
+  core::List<core::num> list83 = block {
+    final core::List<core::num> #t204 = <core::num>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t204.{core::List::add}{Invariant}(42){(core::num) → void};
+      else
+        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t204;
+  core::Set<core::num?> set83 = block {
+    final core::Set<core::num?> #t205 = col::LinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+      else
+        #t205.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t205.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t205;
+  core::Map<core::String, core::num?> map83 = block {
+    final core::Map<core::String, core::num?> #t206 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        for (final core::MapEntry<core::String, core::num?> #t207 in mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>})
+          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String}, #t207.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      else
+        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t206;
+  core::List<core::int> list90 = block {
+    final core::List<core::int> #t208 = <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})
+      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t208;
+  core::Set<core::int?> set90 = block {
+    final core::Set<core::int?> #t209 = col::LinkedHashSet::•<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})
+      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t209.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t209;
+  core::Map<core::String, core::int?> map90 = block {
+    final core::Map<core::String, core::int?> #t210 = <core::String, 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})
+      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t210;
+  core::List<core::int> list91 = block {
+    final core::List<core::int> #t211 = <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})
+      for (final dynamic #t212 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int #t213 = #t212 as{TypeError,ForNonNullableByDefault} core::int;
+        #t211.{core::List::add}{Invariant}(#t213){(core::int) → void};
+      }
+  } =>#t211;
+  core::Set<core::int?> set91 = block {
+    final core::Set<core::int?> #t214 = col::LinkedHashSet::•<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})
+      for (final dynamic #t215 in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+        final core::int? #t216 = #t215 as{TypeError,ForNonNullableByDefault} core::int?;
+        #t214.{core::Set::add}{Invariant}(#t216){(core::int?) → core::bool};
+      }
+    #t214.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t214;
+  core::Map<core::String, core::int?> map91 = block {
+    final core::Map<core::String, core::int?> #t217 = <core::String, 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})
+      for (final core::MapEntry<dynamic, dynamic> #t218 in (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::int?>>}) {
+        final core::String #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
+        final core::int? #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+        #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String, core::int?) → void};
+      }
+    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t217;
+  core::List<core::int> list100 = block {
+    final core::List<core::int> #t221 = <core::int>[];
+    for (final core::int #t222 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t221.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t221;
+  core::Set<core::int> set100 = block {
+    final core::Set<core::int> #t223 = col::LinkedHashSet::•<core::int>();
+    for (final core::int #t224 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t223.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t223;
+  core::Map<core::String, core::int> map100 = block {
+    final core::Map<core::String, core::int> #t225 = <core::String, core::int>{};
+    for (final core::int #t226 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int) → void};
+  } =>#t225;
+  core::List<core::int> list110 = block {
+    final core::List<core::int> #t227 = <core::int>[];
+    for (core::int i in <core::int>[1, 2, 3])
+      #t227.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t227;
+  core::Set<core::int?> set110 = block {
+    final core::Set<core::int?> #t228 = col::LinkedHashSet::•<core::int?>();
+    for (core::int i in <core::int>[1, 2, 3])
+      #t228.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    #t228.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t228;
+  core::Map<core::String, core::int?> map110 = block {
+    final core::Map<core::String, core::int?> #t229 = <core::String, core::int?>{};
+    for (core::int i in <core::int>[1, 2, 3])
+      #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t229;
+  core::List<core::int> list120 = block {
+    final core::List<core::int> #t230 = <core::int>[];
+    for (dynamic i in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t230;
+  core::Set<core::int?> set120 = block {
+    final core::Set<core::int?> #t231 = col::LinkedHashSet::•<core::int?>();
+    for (dynamic i in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t231.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t231;
+  core::Map<core::String, core::int?> map120 = block {
+    final core::Map<core::String, core::int?> #t232 = <core::String, core::int?>{};
+    for (dynamic i in dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t232;
+  core::List<core::int> list130 = block {
+    final core::List<core::int> #t233 = <core::int>[];
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t233.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t233;
+  core::Set<core::int> set130 = block {
+    final core::Set<core::int> #t234 = col::LinkedHashSet::•<core::int>();
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t234.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t234;
+  core::Map<core::int, core::int> map130 = block {
+    final core::Map<core::int, core::int> #t235 = <core::int, core::int>{};
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #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 {
+  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})
+      #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
+                                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t236;
+  block {
+    final core::Set<core::int?> #t237 = col::LinkedHashSet::•<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})
+      #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
+                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t237.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t237;
+  block {
+    final core::Map<core::int, core::int?> #t238 = <core::int, 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})
+      #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                  ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                         ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int, core::int?) → void};
+    #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                                ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
+  } =>#t238;
+  block {
+    final core::List<core::int> #t239 = <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})
+      #t239.{core::List::addAll}{Invariant}(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
+                                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int]){(core::Iterable<core::int>) → void};
+  } =>#t239;
+  block {
+    final core::Set<core::int?> #t240 = col::LinkedHashSet::•<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})
+      #t240.{core::Set::addAll}{Invariant}(<core::int?>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
+                                                 ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?]){(core::Iterable<core::int?>) → void};
+    #t240.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t240;
+  block {
+    final core::Map<core::int, core::int?> #t241 = <core::int, 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})
+      for (final core::MapEntry<core::int, core::int?> #t242 in <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                      ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int?>>})
+        #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int}, #t242.{core::MapEntry::value}{core::int?}){(core::int, core::int?) → void};
+    #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                                     ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
+  } =>#t241;
+  block {
+    final core::List<core::int> #t243 = <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})
+      #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
+                                               ^"){(core::int) → void};
+  } =>#t243;
+  block {
+    final core::Set<core::int?> #t244 = col::LinkedHashSet::•<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})
+      #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
+                                                ^"){(core::int?) → core::bool};
+    #t244.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t244;
+  <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                     ^": null};
+  block {
+    final core::List<core::String> #t245 = <core::String>[];
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+      else
+        #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                                     ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t245;
+  block {
+    final core::Set<core::String?> #t246 = col::LinkedHashSet::•<core::String?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+      else
+        #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    #t246.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+  } =>#t246;
+  block {
+    final core::Map<core::String, core::String?> #t247 = <core::String, core::String?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+      else
+        #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                                            ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+  } =>#t247;
+  block {
+    final core::List<core::int> #t248 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
+                                                             ^"){(core::int) → void};
+      else
+        #t248.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t248;
+  block {
+    final core::Set<core::int?> #t249 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
+                                                              ^"){(core::int?) → core::bool};
+      else
+        #t249.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t249.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t249;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                      ^": null};
+  block {
+    final core::List<core::int> #t250 = <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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t250.{core::List::add}{Invariant}(42){(core::int) → void};
+      else
+        #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
+                                                                     ^"){(core::int) → void};
+  } =>#t250;
+  block {
+    final core::Set<core::int?> #t251 = col::LinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t251.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+      else
+        #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
+                                                                      ^"){(core::int?) → core::bool};
+    #t251.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t251;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                     ^": null};
+  final core::int i = 0;
+  block {
+    final core::List<core::int> #t252 = <core::int>[];
+    for (final core::int #t253 in <core::int>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+  <int>[for (i in <int>[1]) i];
+             ^";
+      #t252.{core::List::add}{Invariant}(i){(core::int) → void};
+    }
+  } =>#t252;
+  block {
+    final core::Set<core::int?> #t254 = col::LinkedHashSet::•<core::int?>();
+    for (final core::int #t255 in <core::int>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+  <int?>{for (i in <int>[1]) i, null};
+              ^";
+      #t254.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    }
+    #t254.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t254;
+  block {
+    final core::Map<core::String, core::int?> #t256 = <core::String, core::int?>{};
+    for (final core::int #t257 in <core::int>[1]) {
+      invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+  <String, int?>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
+                      ^";
+      #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    }
+    #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t256;
+  core::List<dynamic> list10 = block {
+    final core::List<dynamic> #t258 = <dynamic>[];
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var list10 = [for (var i in \"not iterable\") i];
+                              ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t258.{core::List::add}{Invariant}(i){(dynamic) → void};
+  } =>#t258;
+  core::Set<dynamic> set10 = block {
+    final core::Set<dynamic> #t259 = col::LinkedHashSet::•<dynamic>();
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var set10 = {for (var i in \"not iterable\") i, null};
+                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t259.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+    #t259.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t259;
+  core::Map<core::String, dynamic> map10 = block {
+    final core::Map<core::String, dynamic> #t260 = <core::String, dynamic>{};
+    for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
+                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+    #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t260;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t261 = <core::int>[];
+    for (core::int i in <core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                               ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                                      ^" in "int" as{TypeError,ForNonNullableByDefault} core::int])
+      #t261.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t261;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t262 = col::LinkedHashSet::•<core::int?>();
+    for (core::int i in <core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int])
+      #t262.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    #t262.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t262;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t263 = <core::String, core::int?>{};
+    for (core::int i in <core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int])
+      #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t263;
+  core::List<dynamic> list30 = block {
+    final core::List<dynamic> #t264 = <dynamic>[];
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var list30 = [await for (var i in \"not stream\") i];
+                                    ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>)
+      #t264.{core::List::add}{Invariant}(i){(dynamic) → void};
+  } =>#t264;
+  core::Set<dynamic> set30 = block {
+    final core::Set<dynamic> #t265 = col::LinkedHashSet::•<dynamic>();
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var set30 = {await for (var i in \"not stream\") i, null};
+                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>)
+      #t265.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+    #t265.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t265;
+  core::Map<core::String, dynamic> map30 = block {
+    final core::Map<core::String, dynamic> #t266 = <core::String, dynamic>{};
+    await for (dynamic i in invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
+                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>)
+      #t266.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+    #t266.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t266;
+  core::List<core::int> list40 = block {
+    final core::List<core::int> #t267 = <core::int>[];
+    await for (core::int i in asy::Stream::fromIterable<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                         ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                                ^" in "int" as{TypeError,ForNonNullableByDefault} core::int]))
+      #t267.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t267;
+  core::Set<core::int?> set40 = block {
+    final core::Set<core::int?> #t268 = col::LinkedHashSet::•<core::int?>();
+    await for (core::int i in asy::Stream::fromIterable<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int]))
+      #t268.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+    #t268.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t268;
+  core::Map<core::String, core::int?> map40 = block {
+    final core::Map<core::String, core::int?> #t269 = <core::String, core::int?>{};
+    await for (core::int i in asy::Stream::fromIterable<core::int>(<core::int>[invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int]))
+      #t269.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+    #t269.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t269;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t270 = <core::int>[];
+    for (; ; )
+      #t270.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t270;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t271 = col::LinkedHashSet::•<core::int?>();
+    for (; ; )
+      #t271.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t271.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t271;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t272 = <core::String, core::int?>{};
+    for (; ; )
+      #t272.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t272;
+  core::List<core::int> list60 = block {
+    final core::List<core::int> #t273 = <core::int>[];
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var list60 = [for (; \"not bool\";) 42];
+                       ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+      #t273.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t273;
+  core::Set<core::int?> set60 = block {
+    final core::Set<core::int?> #t274 = col::LinkedHashSet::•<core::int?>();
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var set60 = {for (; \"not bool\";) 42, null};
+                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+      #t274.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t274.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t274;
+  core::Map<core::String, core::int?> map60 = block {
+    final core::Map<core::String, core::int?> #t275 = <core::String, core::int?>{};
+    for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
+                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+      #t275.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t275.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t275;
+}
+static method testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic {
+  block {
+    final core::List<core::int> #t276 = <core::int>[];
+    await for (core::int i in stream)
+      #t276.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t276;
+  block {
+    final core::Set<core::int> #t277 = col::LinkedHashSet::•<core::int>();
+    await for (core::int i in stream)
+      #t277.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t277;
+  block {
+    final core::Map<core::String, core::int> #t278 = <core::String, core::int>{};
+    await for (core::int i in stream)
+      #t278.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int) → void};
+  } =>#t278;
+}
+static method testPromotion(self::A a) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t279 = <core::int>[];
+    if(a is{ForNonNullableByDefault} self::B)
+      #t279.{core::List::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → void};
+  } =>#t279;
+  core::Set<core::int> set10 = block {
+    final core::Set<core::int> #t280 = col::LinkedHashSet::•<core::int>();
+    if(a is{ForNonNullableByDefault} self::B)
+      #t280.{core::Set::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → core::bool};
+  } =>#t280;
+  core::Map<core::int, core::int> map10 = block {
+    final core::Map<core::int, core::int> #t281 = <core::int, core::int>{};
+    if(a is{ForNonNullableByDefault} self::B)
+      #t281.{core::Map::[]=}{Invariant}(a{self::B}.{self::B::foo}{core::int}, a{self::B}.{self::B::foo}{core::int}){(core::int, core::int) → void};
+  } =>#t281;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.outline.expect b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.outline.expect
new file mode 100644
index 0000000..8c92e9b
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.outline.expect
@@ -0,0 +1,31 @@
+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
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  get foo() → core::int
+    ;
+}
+static method oracle<T extends core::Object? = dynamic>([self::oracle::T? t]) → dynamic
+  ;
+static method testIfElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::Map<core::String, core::int> mapToInt, core::Map<core::String, core::double> mapToDouble) → dynamic
+  ;
+static method testIfElementErrors(core::Map<core::int, core::int> map) → dynamic
+  ;
+static method testForElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::int index, core::Map<core::String, core::int> mapStringInt, core::Map<core::String, core::double> mapStringDouble) → dynamic
+  ;
+static method testForElementErrors(core::Map<core::int, core::int> map, core::List<core::int> list) → dynamic async 
+  ;
+static method testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic
+  ;
+static method testPromotion(self::A a) → dynamic
+  ;
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..c300adc
--- /dev/null
+++ b/pkg/front_end/testcases/general/control_flow_collection_inference2.dart.weak.transformed.expect
@@ -0,0 +1,2524 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Map<String, List<int>?> map40 = {if (oracle("foo")) ...{"bar", []}, "baz": null};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   var map82 = {if (oracle("foo")) ...mapToInt else ...dynVar, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:44: Error: Expected ':' after this.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:61: Error: Expected ':' after this.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
+//   Map<dynamic, dynamic> map11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
+//   var map12 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
+//   var map13 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) "bar"];
+//                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{if (oracle("foo")) "bar", null};
+//                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <String, int?>{if (oracle("foo")) "bar": "bar", "baz": null};
+//                                            ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[if (oracle("foo")) ...["bar"]];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{if (oracle("foo")) ...["bar"], null};
+//                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <String, int?>{if (oracle("foo")) ...{"bar": "bar"}, "baz": null};
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) ...["bar"], "baz": null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[if (oracle("foo")) 42 else 3.14];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String?>{if (oracle("foo")) 42 else 3.14, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String?>{if (oracle("foo")) 42 else 3.14, null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{if (oracle("foo")) "bar": 42 else "baz": 3.14, "baz": null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) ...map else 42];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map else 42, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) ...[42] else "bar": 42, "baz": null};
+//                                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[if (oracle("foo")) 42 else ...map];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{if (oracle("foo")) ...map else 42, null};
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{if (oracle("foo")) "bar": 42 else ...[42], "baz": null};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set10 = {if (oracle("foo")) 42 else "bar": 3.14};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+//   Set<dynamic> set11 = {if (oracle("foo")) "bar": 3.14 else 42};
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   List<int> list20 = [if (42) 42];
+//                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Set<int> set20 = {if (42) 42};
+//                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+//   Map<int, int> map30 = {if (42) 42: 42};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   List<String> list40 = <String>[if (oracle("foo")) true else 42];
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Set<String> set40 = <String>{if (oracle("foo")) true else 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<String, int> map40 = <String, int>{if (oracle("foo")) true: 42 else 42: 42};
+//                                                                           ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   Map<int, String> map41 = <int, String>{if (oracle("foo")) 42: true else 42: 42};
+//                                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+//   <int>[for (i in <int>[1]) i];
+//              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+//   <int?>{for (i in <int>[1]) i, null};
+//               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+//   <String, int?>{for (i in <int>[1]) "bar": i, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:246:17: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var list50 = [await for (;;) 42];
+//                 ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:247:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var set50 = {await for (;;) 42, null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:248:16: Error: The keyword 'await' isn't allowed for a normal 'for' statement.
+// Try removing the keyword, or use a for-each statement.
+//   var map50 = {await for (;;) "bar": 42, "baz": null};
+//                ^^^^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) "bar"];
+//                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) "bar", null};
+//                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                   ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) "bar": "bar", "baz": null};
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...["bar"]];
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) ...["bar"], null};
+//                                                  ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...{"bar": "bar"}, "baz": null};
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) ...map];
+//                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) ...map, null};
+//                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <int, int?>{for (int i = 0; oracle("foo"); i++) ...list, 42: null};
+//                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+//   <String>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else 3.14, null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+//   <String, String?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else "bar": 3.14, "baz": null};
+//                                                                                             ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42];
+//                                                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...map else 42, null};
+//                                                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) ...list else "bar": 42, "baz": null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int>[for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map];
+//                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+//  - 'Map' is from 'dart:core'.
+//   <int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) 42 else ...map, null};
+//                                                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+//  - 'List' is from 'dart:core'.
+//   <String, int?>{for (int i = 0; oracle("foo"); i++) if (oracle()) "bar": 42 else ...list, "baz": null};
+//                                                                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var list10 = [for (var i in "not iterable") i];
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var set10 = {for (var i in "not iterable") i, null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   var map10 = {for (var i in "not iterable") "bar": i, "baz": null};
+//                              ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list20 = [for (int i in ["not", "int"]) i];
+//                                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set20 = {for (int i in ["not", "int"]) i, null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                               ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map20 = {for (int i in ["not", "int"]) "bar": i, "baz": null};
+//                                      ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var list30 = [await for (var i in "not stream") i];
+//                                     ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var set30 = {await for (var i in "not stream") i, null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+//  - 'Stream' is from 'dart:async'.
+//   var map30 = {await for (var i in "not stream") "bar": i, "baz": null};
+//                                    ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                          ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var list40 = [await for (int i in Stream.fromIterable(["not", "int"])) i];
+//                                                                 ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var set40 = {await for (int i in Stream.fromIterable(["not", "int"])) i, null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                         ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+//   var map40 = {await for (int i in Stream.fromIterable(["not", "int"])) "bar": i, "baz": null};
+//                                                                ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var list60 = [for (; "not bool";) 42];
+//                        ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var set60 = {for (; "not bool";) 42, null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+//   var map60 = {for (; "not bool";) "bar": 42, "baz": null};
+//                       ^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:255:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>[await for (int i in stream) i];
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:256:26: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <int>{await for (int i in stream) i};
+//                          ^^
+//
+// pkg/front_end/testcases/general/control_flow_collection_inference2.dart:257:34: Error: The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.
+// Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop.
+//   <String, int>{await for (int i in stream) "bar": i};
+//                                  ^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  get foo() → core::int
+    return 42;
+}
+static method oracle<T extends core::Object? = dynamic>([self::oracle::T? t = #C1]) → dynamic
+  return true;
+static method testIfElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::Map<core::String, core::int> mapToInt, core::Map<core::String, core::double> mapToDouble) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t1.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t1;
+  core::Set<core::int?> set10 = block {
+    final core::Set<core::int?> #t2 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t2.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t2.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t2;
+  core::Map<core::String, core::int?> map10 = block {
+    final core::Map<core::String, core::int?> #t3 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t3.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t3.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t3;
+  core::List<dynamic> list11 = block {
+    final core::List<dynamic> #t4 = core::_GrowableList::•<dynamic>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t4.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
+  } =>#t4;
+  core::Set<dynamic> set11 = block {
+    final core::Set<dynamic> #t5 = new col::_CompactLinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t5.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
+    #t5.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t5;
+  core::Map<core::String, dynamic> map11 = block {
+    final core::Map<core::String, dynamic> #t6 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t6.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
+    #t6.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t6;
+  core::List<core::List<core::int>> list12 = block {
+    final core::List<core::List<core::int>> #t7 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t7.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>) → void};
+  } =>#t7;
+  core::Set<core::List<core::int>?> set12 = block {
+    final core::Set<core::List<core::int>?> #t8 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t8.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>?) → core::bool};
+    #t8.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t8;
+  core::Map<core::String, core::List<core::int>?> map12 = block {
+    final core::Map<core::String, core::List<core::int>?> #t9 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t9.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int>(42)){(core::String, core::List<core::int>?) → void};
+    #t9.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t9;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t10 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t10.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
+  } =>#t10;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t11 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t11.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
+    #t11.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t11;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t12 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{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", null){(core::String, core::int?) → void};
+  } =>#t12;
+  core::List<dynamic> list21 = block {
+    final core::List<dynamic> #t14 = core::_GrowableList::•<dynamic>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t14.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+  } =>#t14;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t15 = new col::_CompactLinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t15.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+    #t15.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t15;
+  core::Map<core::String, dynamic> map21 = block {
+    final core::Map<core::String, dynamic> #t16 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, dynamic> #t17 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
+        #t16.{core::Map::[]=}{Invariant}(#t17.{core::MapEntry::key}{core::String}, #t17.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+      }
+    }
+    #t16.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t16;
+  core::List<core::List<core::int>> list22 = block {
+    final core::List<core::List<core::int>> #t18 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t18.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t18;
+  core::Set<core::List<core::int>?> set22 = block {
+    final core::Set<core::List<core::int>?> #t19 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t19.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
+    #t19.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t19;
+  core::Map<core::String, core::List<core::int>?> map22 = block {
+    final core::Map<core::String, core::List<core::int>?> #t20 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{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>?> #t21 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+        #t20.{core::Map::[]=}{Invariant}(#t21.{core::MapEntry::key}{core::String}, #t21.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+      }
+    }
+    #t20.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t20;
+  core::List<core::int> list30 = block {
+    final core::List<core::int> #t22 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t22.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
+  } =>#t22;
+  core::Set<core::int?> set30 = block {
+    final core::Set<core::int?> #t23 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t23.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
+    #t23.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t23;
+  core::Map<core::String, core::int?> map30 = block {
+    final core::Map<core::String, core::int?> #t24 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{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?> #t25 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+          #t24.{core::Map::[]=}{Invariant}(#t25.{core::MapEntry::key}{core::String}, #t25.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+        }
+      }
+    #t24.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t24;
+  core::List<dynamic> list31 = block {
+    final core::List<dynamic> #t26 = core::_GrowableList::•<dynamic>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t26.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+  } =>#t26;
+  core::Set<dynamic> set31 = block {
+    final core::Set<dynamic> #t27 = new col::_CompactLinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t27.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+    #t27.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t27;
+  core::Map<core::String, dynamic> map31 = block {
+    final core::Map<core::String, dynamic> #t28 = <core::String, dynamic>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
+        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+          final core::MapEntry<core::String, dynamic> #t29 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
+          #t28.{core::Map::[]=}{Invariant}(#t29.{core::MapEntry::key}{core::String}, #t29.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+        }
+      }
+    #t28.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t28;
+  core::List<core::List<core::int>> list33 = block {
+    final core::List<core::List<core::int>> #t30 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t30.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t30;
+  core::Set<core::List<core::int>?> set33 = block {
+    final core::Set<core::List<core::int>?> #t31 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t31.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
+    #t31.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t31;
+  core::Map<core::String, core::List<core::int>?> map33 = block {
+    final core::Map<core::String, core::List<core::int>?> #t32 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{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.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t32;
+  core::List<core::List<core::int>> list40 = block {
+    final core::List<core::List<core::int>> #t34 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t34.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t34;
+  core::Set<core::List<core::int>?> set40 = block {
+    final core::Set<core::List<core::int>?> #t35 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t35.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t35.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t35;
+  core::Map<core::String, core::List<core::int>?> map40 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:39:35: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Map<String, List<int>?> map40 = {if (oracle(\"foo\")) ...{\"bar\", []}, \"baz\": null};
+                                  ^";
+  core::List<core::List<core::int>> list41 = block {
+    final core::List<core::List<core::int>> #t36 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t36.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>> #t37 = new col::_CompactLinkedHashSet::•<core::List<core::int>>();
+        #t37.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → core::bool};
+      } =>#t37){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t36;
+  core::Set<core::List<core::int>?> set41 = block {
+    final core::Set<core::List<core::int>?> #t38 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t38.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>?> #t39 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+        #t39.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
+      } =>#t39){(core::Iterable<core::List<core::int>?>) → void};
+    #t38.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t38;
+  core::List<core::List<core::int>> list42 = block {
+    final core::List<core::List<core::int>> #t40 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t40.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t40;
+  core::Set<core::List<core::int>?> set42 = block {
+    final core::Set<core::List<core::int>?> #t41 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t41.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t41.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t41;
+  core::Map<core::String, core::List<core::int>?> map42 = block {
+    final core::Map<core::String, core::List<core::int>?> #t42 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t43 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+          #t42.{core::Map::[]=}{Invariant}(#t43.{core::MapEntry::key}{core::String}, #t43.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+        }
+      }
+    #t42.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t42;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t44 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t44.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
+  } =>#t44;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t45 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t45.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
+    #t45.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t45;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t46 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      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?> #t47 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+        #t46.{core::Map::[]=}{Invariant}(#t47.{core::MapEntry::key}{core::String}, #t47.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+      }
+    }
+    #t46.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t46;
+  core::List<core::int> list51 = block {
+    final core::List<core::int> #t48 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t48.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int> #t49 = new col::_CompactLinkedHashSet::•<core::int>();
+      } =>#t49){(core::Iterable<core::int>) → void};
+  } =>#t48;
+  core::Set<core::int?> set51 = block {
+    final core::Set<core::int?> #t50 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t50.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int?> #t51 = new col::_CompactLinkedHashSet::•<core::int?>();
+      } =>#t51){(core::Iterable<core::int?>) → void};
+    #t50.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t50;
+  core::List<core::int> list52 = block {
+    final core::List<core::int> #t52 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t52.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
+  } =>#t52;
+  core::Set<core::int?> set52 = block {
+    final core::Set<core::int?> #t53 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t53.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
+    #t53.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t53;
+  core::Map<core::String, core::int?> map52 = block {
+    final core::Map<core::String, core::int?> #t54 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        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?> #t55 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+          #t54.{core::Map::[]=}{Invariant}(#t55.{core::MapEntry::key}{core::String}, #t55.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+        }
+      }
+    #t54.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t54;
+  core::List<core::List<core::int>> list60 = block {
+    final core::List<core::List<core::int>> #t56 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t56.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t56;
+  core::Set<core::List<core::int>?> set60 = block {
+    final core::Set<core::List<core::int>?> #t57 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t57.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t57.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t57;
+  core::Map<core::String, core::List<core::int>?> map60 = block {
+    final core::Map<core::String, core::List<core::int>?> #t58 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t59 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+        #t58.{core::Map::[]=}{Invariant}(#t59.{core::MapEntry::key}{core::String}, #t59.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+      }
+    }
+    #t58.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t58;
+  core::List<core::List<core::int>> list61 = block {
+    final core::List<core::List<core::int>> #t60 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t60.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t60;
+  core::Set<core::List<core::int>?> set61 = block {
+    final core::Set<core::List<core::int>?> #t61 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t61.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t61.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t61;
+  core::Map<core::String, core::List<core::int>?> map61 = block {
+    final core::Map<core::String, core::List<core::int>?> #t62 = <core::String, core::List<core::int>?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t63 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+          #t62.{core::Map::[]=}{Invariant}(#t63.{core::MapEntry::key}{core::String}, #t63.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+        }
+      }
+    #t62.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t62;
+  core::List<core::List<core::int>> list70 = block {
+    final core::List<core::List<core::int>> #t64 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t64.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
+  } =>#t64;
+  core::Set<core::List<core::int>?> set70 = block {
+    final core::Set<core::List<core::int>?> #t65 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t65.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
+    #t65.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t65;
+  core::List<core::List<core::int>> list71 = block {
+    final core::List<core::List<core::int>> #t66 = core::_GrowableList::•<core::List<core::int>>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t66.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
+  } =>#t66;
+  core::Set<core::List<core::int>?> set71 = block {
+    final core::Set<core::List<core::int>?> #t67 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t67.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
+    #t67.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t67;
+  core::List<core::num> list80 = block {
+    final core::List<core::num> #t68 = core::_GrowableList::•<core::num>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t68.{core::List::add}{Invariant}(42){(core::num) → void};
+    else
+      #t68.{core::List::add}{Invariant}(3.14){(core::num) → void};
+  } =>#t68;
+  core::Set<core::num?> set80 = block {
+    final core::Set<core::num?> #t69 = new col::_CompactLinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t69.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
+    else
+      #t69.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t69.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t69;
+  core::Map<core::String, core::num?> map80 = block {
+    final core::Map<core::String, core::num?> #t70 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t70.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
+    else
+      #t70.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t70.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t70;
+  core::List<core::num> list81 = block {
+    final core::List<core::num> #t71 = core::_GrowableList::•<core::num>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t71.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
+    else
+      #t71.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t71;
+  core::Set<core::num?> set81 = block {
+    final core::Set<core::num?> #t72 = new col::_CompactLinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t72.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+    else
+      #t72.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
+    #t72.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t72;
+  core::Map<core::String, core::num?> map81 = block {
+    final core::Map<core::String, core::num?> #t73 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::num?> #t74 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
+        #t73.{core::Map::[]=}{Invariant}(#t74.{core::MapEntry::key}{core::String}, #t74.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      }
+    }
+    else {
+      core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapToDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::num?> #t75 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
+        #t73.{core::Map::[]=}{Invariant}(#t75.{core::MapEntry::key}{core::String}, #t75.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      }
+    }
+    #t73.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t73;
+  core::List<dynamic> list82 = block {
+    final core::List<dynamic> #t76 = core::_GrowableList::•<dynamic>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t76.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+    else
+      #t76.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  } =>#t76;
+  core::Set<dynamic> set82 = block {
+    final core::Set<dynamic> #t77 = new col::_CompactLinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t77.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+    else
+      #t77.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t77.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t77;
+  core::Set<dynamic> map82 = block {
+    final core::Set<dynamic> #t78 = new col::_CompactLinkedHashSet::•<dynamic>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t78.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:71:38: Error: Unexpected type 'Map<String, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  var map82 = {if (oracle(\"foo\")) ...mapToInt else ...dynVar, null};
+                                     ^"){(dynamic) → core::bool};
+    else
+      #t78.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t78.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t78;
+  core::List<core::num> list83 = block {
+    final core::List<core::num> #t79 = core::_GrowableList::•<core::num>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t79.{core::List::add}{Invariant}(42){(core::num) → void};
+    else
+      #t79.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t79;
+  core::Set<core::num?> set83 = block {
+    final core::Set<core::num?> #t80 = new col::_CompactLinkedHashSet::•<core::num?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t80.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+    else
+      #t80.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t80.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t80;
+  core::Map<core::String, core::num?> map83 = block {
+    final core::Map<core::String, core::num?> #t81 = <core::String, core::num?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapToInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, core::num?> #t82 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
+        #t81.{core::Map::[]=}{Invariant}(#t82.{core::MapEntry::key}{core::String}, #t82.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+      }
+    }
+    else
+      #t81.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t81.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t81;
+  core::List<core::int> list90 = block {
+    final core::List<core::int> #t83 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t83.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t83;
+  core::Set<core::int?> set90 = block {
+    final core::Set<core::int?> #t84 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t84.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t84.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t84;
+  core::Map<core::String, core::int?> map90 = block {
+    final core::Map<core::String, core::int?> #t85 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t85.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t85.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t85;
+  core::List<core::int> list91 = block {
+    final core::List<core::int> #t86 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      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 #t87 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t88 = #t87 as{TypeError,ForNonNullableByDefault} core::int;
+          #t86.{core::List::add}{Invariant}(#t88){(core::int) → void};
+        }
+      }
+    }
+  } =>#t86;
+  core::Set<core::int?> set91 = block {
+    final core::Set<core::int?> #t89 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      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 #t90 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int? #t91 = #t90 as{TypeError,ForNonNullableByDefault} core::int?;
+          #t89.{core::Set::add}{Invariant}(#t91){(core::int?) → core::bool};
+        }
+      }
+    }
+    #t89.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t89;
+  core::Map<core::String, core::int?> map91 = block {
+    final core::Map<core::String, core::int?> #t92 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{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<dynamic, dynamic> #t93 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+        {
+          final core::String #t94 = #t93.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
+          final core::int? #t95 = #t93.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+          #t92.{core::Map::[]=}{Invariant}(#t94, #t95){(core::String, core::int?) → void};
+        }
+      }
+    }
+    #t92.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t92;
+  core::List<core::int> list100 = block {
+    final core::List<core::int> #t96 = core::_GrowableList::•<core::int>(0);
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t96.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t96;
+  core::Set<core::int> set100 = block {
+    final core::Set<core::int> #t97 = new col::_CompactLinkedHashSet::•<core::int>();
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t97.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t97;
+  core::Map<core::int, core::int> map100 = block {
+    final core::Map<core::int, core::int> #t98 = <core::int, core::int>{};
+    if(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t98.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
+  } =>#t98;
+}
+static method testIfElementErrors(core::Map<core::int, core::int> map) → dynamic {
+  block {
+    final core::List<core::int> #t99 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t99.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:87:28: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) \"bar\"];
+                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t99;
+  block {
+    final core::Set<core::int?> #t100 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t100.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:88:29: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{if (oracle(\"foo\")) \"bar\", null};
+                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t100.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t100;
+  block {
+    final core::Map<core::String, core::int?> #t101 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t101.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:89:44: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": \"bar\", \"baz\": null};
+                                           ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t101.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t101;
+  block {
+    final core::List<core::int> #t102 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t102.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:90:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[if (oracle(\"foo\")) ...[\"bar\"]];
+                               ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int)){(core::Iterable<core::int>) → void};
+  } =>#t102;
+  block {
+    final core::Set<core::int?> #t103 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t103.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int?>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:91:33: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{if (oracle(\"foo\")) ...[\"bar\"], null};
+                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?)){(core::Iterable<core::int?>) → void};
+    #t103.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t103;
+  block {
+    final core::Map<core::String, core::int?> #t104 = <core::String, core::int?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int?>{"bar": invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:92:48: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <String, int?>{if (oracle(\"foo\")) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                               ^" in "bar" as{TypeError,ForNonNullableByDefault} 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?> #t105 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+        #t104.{core::Map::[]=}{Invariant}(#t105.{core::MapEntry::key}{core::String}, #t105.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+      }
+    }
+    #t104.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t104;
+  block {
+    final core::List<core::int> #t106 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t106.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:93:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map];
+                              ^"){(core::int) → void};
+  } =>#t106;
+  block {
+    final core::Set<core::int?> #t107 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t107.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:94:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map, null};
+                               ^"){(core::int?) → core::bool};
+    #t107.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t107;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:95:40: Error: Unexpected type 'List<String>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[\"bar\"], \"baz\": null};
+                                       ^": null};
+  block {
+    final core::List<core::String> #t108 = core::_GrowableList::•<core::String>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:31: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+    else
+      #t108.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:96:39: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[if (oracle(\"foo\")) 42 else 3.14];
+                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t108;
+  block {
+    final core::Set<core::String?> #t109 = new col::_CompactLinkedHashSet::•<core::String?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:32: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
+                               ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    else
+      #t109.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:97:40: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String?>{if (oracle(\"foo\")) 42 else 3.14, null};
+                                       ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+    #t109.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+  } =>#t109;
+  block {
+    final core::Map<core::String, core::String?> #t110 = <core::String, core::String?>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t110.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:47: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    else
+      #t110.{core::Map::[]=}{Invariant}("baz", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:98:62: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String, String?>{if (oracle(\"foo\")) \"bar\": 42 else \"baz\": 3.14, \"baz\": null};
+                                                             ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+    #t110.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+  } =>#t110;
+  block {
+    final core::List<core::int> #t111 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t111.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:99:31: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) ...map else 42];
+                              ^"){(core::int) → void};
+    else
+      #t111.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t111;
+  block {
+    final core::Set<core::int?> #t112 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t112.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:100:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map else 42, null};
+                               ^"){(core::int?) → core::bool};
+    else
+      #t112.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t112.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t112;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                       ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:101:40: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) ...[42] else \"bar\": 42, \"baz\": null};
+                                       ^": null};
+  block {
+    final core::List<core::int> #t113 = core::_GrowableList::•<core::int>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t113.{core::List::add}{Invariant}(42){(core::int) → void};
+    else
+      #t113.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:102:39: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[if (oracle(\"foo\")) 42 else ...map];
+                                      ^"){(core::int) → void};
+  } =>#t113;
+  block {
+    final core::Set<core::int?> #t114 = new col::_CompactLinkedHashSet::•<core::int?>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t114.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:103:32: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{if (oracle(\"foo\")) ...map else 42, null};
+                               ^"){(core::int?) → core::bool};
+    else
+      #t114.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t114.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t114;
+  <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:104:55: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{if (oracle(\"foo\")) \"bar\": 42 else ...[42], \"baz\": null};
+                                                      ^": null};
+  core::Set<dynamic> set10 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:106:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                       ^";
+  core::Map<dynamic, dynamic> map10 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:107:53: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map10 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                                    ^": null};
+  core::Set<dynamic> set11 = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:108:24: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
+  Set<dynamic> set11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                       ^";
+  core::Map<dynamic, dynamic> map11 = <dynamic, dynamic>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:109:70: Error: Expected ':' after this.
+  Map<dynamic, dynamic> map11 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                                     ^": null};
+  core::Map<dynamic, Null> map12 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:110:35: Error: Expected ':' after this.
+  var map12 = {if (oracle(\"foo\")) 42 else \"bar\": 3.14};
+                                  ^": null};
+  core::Map<dynamic, Null> map13 = <dynamic, Null>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:111:52: Error: Expected ':' after this.
+  var map13 = {if (oracle(\"foo\")) \"bar\": 3.14 else 42};
+                                                   ^": null};
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t115 = core::_GrowableList::•<core::int>(0);
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:112:27: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  List<int> list20 = [if (42) 42];
+                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t115.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t115;
+  core::Set<core::int> set20 = block {
+    final core::Set<core::int> #t116 = new col::_CompactLinkedHashSet::•<core::int>();
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:113:25: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Set<int> set20 = {if (42) 42};
+                        ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t116.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t116;
+  core::Map<core::int, core::int> map30 = block {
+    final core::Map<core::int, core::int> #t117 = <core::int, core::int>{};
+    if(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:114:30: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
+  Map<int, int> map30 = {if (42) 42: 42};
+                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::bool)
+      #t117.{core::Map::[]=}{Invariant}(42, 42){(core::int, core::int) → void};
+  } =>#t117;
+  core::List<core::String> list40 = block {
+    final core::List<core::String> #t118 = core::_GrowableList::•<core::String>(0);
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:53: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                    ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+    else
+      #t118.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:115:63: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  List<String> list40 = <String>[if (oracle(\"foo\")) true else 42];
+                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+  } =>#t118;
+  core::Set<core::String> set40 = block {
+    final core::Set<core::String> #t119 = new col::_CompactLinkedHashSet::•<core::String>();
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:51: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                  ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
+    else
+      #t119.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:116:61: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Set<String> set40 = <String>{if (oracle(\"foo\")) true else 42};
+                                                            ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → core::bool};
+  } =>#t119;
+  core::Map<core::String, core::int> map40 = block {
+    final core::Map<core::String, core::int> #t120 = <core::String, core::int>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:61: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                            ^" in true as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
+    else
+      #t120.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:117:75: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<String, int> map40 = <String, int>{if (oracle(\"foo\")) true: 42 else 42: 42};
+                                                                          ^" in 42 as{TypeError,ForNonNullableByDefault} core::String, 42){(core::String, core::int) → void};
+  } =>#t120;
+  core::Map<core::int, core::String> map41 = block {
+    final core::Map<core::int, core::String> #t121 = <core::int, core::String>{};
+    if(self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:65: Error: A value of type 'bool' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                ^" in true as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+    else
+      #t121.{core::Map::[]=}{Invariant}(42, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:118:79: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  Map<int, String> map41 = <int, String>{if (oracle(\"foo\")) 42: true else 42: 42};
+                                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::int, core::String) → void};
+  } =>#t121;
+}
+static method testForElement(dynamic dynVar, core::List<core::int> listInt, core::List<core::double> listDouble, core::int index, core::Map<core::String, core::int> mapStringInt, core::Map<core::String, core::double> mapStringDouble) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t122 = core::_GrowableList::•<core::int>(0);
+    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})
+      #t122.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t122;
+  core::Set<core::int?> set10 = block {
+    final core::Set<core::int?> #t123 = new col::_CompactLinkedHashSet::•<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})
+      #t123.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+    #t123.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t123;
+  core::Map<core::String, core::int?> map10 = block {
+    final core::Map<core::String, core::int?> #t124 = <core::String, 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})
+      #t124.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+    #t124.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t124;
+  core::List<dynamic> list11 = block {
+    final core::List<dynamic> #t125 = core::_GrowableList::•<dynamic>(0);
+    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})
+      #t125.{core::List::add}{Invariant}(dynVar){(dynamic) → void};
+  } =>#t125;
+  core::Set<dynamic> set11 = block {
+    final core::Set<dynamic> #t126 = new col::_CompactLinkedHashSet::•<dynamic>();
+    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})
+      #t126.{core::Set::add}{Invariant}(dynVar){(dynamic) → core::bool};
+    #t126.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t126;
+  core::Map<core::String, dynamic> map11 = block {
+    final core::Map<core::String, dynamic> #t127 = <core::String, dynamic>{};
+    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})
+      #t127.{core::Map::[]=}{Invariant}("bar", dynVar){(core::String, dynamic) → void};
+    #t127.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t127;
+  core::List<core::List<core::int>> list12 = block {
+    final core::List<core::List<core::int>> #t128 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      #t128.{core::List::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>) → void};
+  } =>#t128;
+  core::Set<core::List<core::int>?> set12 = block {
+    final core::Set<core::List<core::int>?> #t129 = new col::_CompactLinkedHashSet::•<core::List<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})
+      #t129.{core::Set::add}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::List<core::int>?) → core::bool};
+    #t129.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t129;
+  core::Map<core::String, core::List<core::int>?> map12 = block {
+    final core::Map<core::String, core::List<core::int>?> #t130 = <core::String, core::List<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})
+      #t130.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::_literal1<core::int>(42)){(core::String, core::List<core::int>?) → void};
+    #t130.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t130;
+  core::List<core::int> list20 = block {
+    final core::List<core::int> #t131 = core::_GrowableList::•<core::int>(0);
+    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})
+      #t131.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
+  } =>#t131;
+  core::Set<core::int?> set20 = block {
+    final core::Set<core::int?> #t132 = new col::_CompactLinkedHashSet::•<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})
+      #t132.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
+    #t132.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t132;
+  core::Map<core::String, core::int?> map20 = block {
+    final core::Map<core::String, core::int?> #t133 = <core::String, 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}) {
+      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{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?> #t134 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+        #t133.{core::Map::[]=}{Invariant}(#t134.{core::MapEntry::key}{core::String}, #t134.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+      }
+    }
+    #t133.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t133;
+  core::List<dynamic> list21 = block {
+    final core::List<dynamic> #t135 = core::_GrowableList::•<dynamic>(0);
+    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})
+      #t135.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+  } =>#t135;
+  core::Set<dynamic> set21 = block {
+    final core::Set<dynamic> #t136 = new col::_CompactLinkedHashSet::•<dynamic>();
+    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})
+      #t136.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+    #t136.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t136;
+  core::Map<core::String, dynamic> map21 = block {
+    final core::Map<core::String, dynamic> #t137 = <core::String, dynamic>{};
+    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}) {
+      core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        final core::MapEntry<core::String, dynamic> #t138 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
+        #t137.{core::Map::[]=}{Invariant}(#t138.{core::MapEntry::key}{core::String}, #t138.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+      }
+    }
+    #t137.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t137;
+  core::List<core::List<core::int>> list22 = block {
+    final core::List<core::List<core::int>> #t139 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      #t139.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t139;
+  core::Set<core::List<core::int>?> set22 = block {
+    final core::Set<core::List<core::int>?> #t140 = new col::_CompactLinkedHashSet::•<core::List<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})
+      #t140.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
+    #t140.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t140;
+  core::Map<core::String, core::List<core::int>?> map22 = block {
+    final core::Map<core::String, core::List<core::int>?> #t141 = <core::String, core::List<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}) {
+      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{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>?> #t142 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+        #t141.{core::Map::[]=}{Invariant}(#t142.{core::MapEntry::key}{core::String}, #t142.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+      }
+    }
+    #t141.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t141;
+  core::List<core::int> list30 = block {
+    final core::List<core::int> #t143 = core::_GrowableList::•<core::int>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t143.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int>) → void};
+  } =>#t143;
+  core::Set<core::int?> set30 = block {
+    final core::Set<core::int?> #t144 = new col::_CompactLinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t144.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(42)){(core::Iterable<core::int?>) → void};
+    #t144.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t144;
+  core::Map<core::String, core::int?> map30 = block {
+    final core::Map<core::String, core::int?> #t145 = <core::String, 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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = <core::String, core::int>{"bar": 42}.{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?> #t146 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+          #t145.{core::Map::[]=}{Invariant}(#t146.{core::MapEntry::key}{core::String}, #t146.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+        }
+      }
+    #t145.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t145;
+  core::List<dynamic> list31 = block {
+    final core::List<dynamic> #t147 = core::_GrowableList::•<dynamic>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t147.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+  } =>#t147;
+  core::Set<dynamic> set31 = block {
+    final core::Set<dynamic> #t148 = new col::_CompactLinkedHashSet::•<dynamic>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t148.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<dynamic>(dynVar)){(core::Iterable<dynamic>) → void};
+    #t148.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t148;
+  core::Map<core::String, dynamic> map31 = block {
+    final core::Map<core::String, dynamic> #t149 = <core::String, dynamic>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, dynamic>> :sync-for-iterator = <core::String, dynamic>{"bar": dynVar}.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, dynamic>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, dynamic>>};
+        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+          final core::MapEntry<core::String, dynamic> #t150 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, dynamic>};
+          #t149.{core::Map::[]=}{Invariant}(#t150.{core::MapEntry::key}{core::String}, #t150.{core::MapEntry::value}{dynamic}){(core::String, dynamic) → void};
+        }
+      }
+    #t149.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+  } =>#t149;
+  core::List<core::List<core::int>> list33 = block {
+    final core::List<core::List<core::int>> #t151 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t151.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t151;
+  core::Set<core::List<core::int>?> set33 = block {
+    final core::Set<core::List<core::int>?> #t152 = new col::_CompactLinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t152.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::_literal1<core::int>(42))){(core::Iterable<core::List<core::int>?>) → void};
+    #t152.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t152;
+  core::Map<core::String, core::List<core::int>?> map33 = block {
+    final core::Map<core::String, core::List<core::int>?> #t153 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>>{"bar": core::_GrowableList::_literal1<core::int>(42)}.{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>?> #t154 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+          #t153.{core::Map::[]=}{Invariant}(#t154.{core::MapEntry::key}{core::String}, #t154.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+        }
+      }
+    #t153.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t153;
+  core::List<core::List<core::int>> list40 = block {
+    final core::List<core::List<core::int>> #t155 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      #t155.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t155;
+  core::Set<core::List<core::int>?> set40 = block {
+    final core::Set<core::List<core::int>?> #t156 = new col::_CompactLinkedHashSet::•<core::List<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})
+      #t156.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t156.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t156;
+  core::Map<core::String, core::List<core::int>?> map40 = block {
+    final core::Map<core::String, core::List<core::int>?> #t157 = <core::String, core::List<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}) {
+      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t158 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+        #t157.{core::Map::[]=}{Invariant}(#t158.{core::MapEntry::key}{core::String}, #t158.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+      }
+    }
+    #t157.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t157;
+  core::List<core::List<core::int>> list41 = block {
+    final core::List<core::List<core::int>> #t159 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      #t159.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>> #t160 = new col::_CompactLinkedHashSet::•<core::List<core::int>>();
+        #t160.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → core::bool};
+      } =>#t160){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t159;
+  core::Set<core::List<core::int>?> set41 = block {
+    final core::Set<core::List<core::int>?> #t161 = new col::_CompactLinkedHashSet::•<core::List<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})
+      #t161.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::List<core::int>?> #t162 = new col::_CompactLinkedHashSet::•<core::List<core::int>?>();
+        #t162.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
+      } =>#t162){(core::Iterable<core::List<core::int>?>) → void};
+    #t161.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t161;
+  core::List<core::List<core::int>> list42 = block {
+    final core::List<core::List<core::int>> #t163 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t163.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t163;
+  core::Set<core::List<core::int>?> set42 = block {
+    final core::Set<core::List<core::int>?> #t164 = new col::_CompactLinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t164.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t164.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t164;
+  core::Map<core::String, core::List<core::int>?> map42 = block {
+    final core::Map<core::String, core::List<core::int>?> #t165 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t166 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+          #t165.{core::Map::[]=}{Invariant}(#t166.{core::MapEntry::key}{core::String}, #t166.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+        }
+      }
+    #t165.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t165;
+  core::List<core::int> list50 = block {
+    final core::List<core::int> #t167 = core::_GrowableList::•<core::int>(0);
+    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})
+      #t167.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
+  } =>#t167;
+  core::Set<core::int?> set50 = block {
+    final core::Set<core::int?> #t168 = new col::_CompactLinkedHashSet::•<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})
+      #t168.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
+    #t168.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t168;
+  core::Map<core::String, core::int?> map50 = block {
+    final core::Map<core::String, core::int?> #t169 = <core::String, 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}) {
+      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?> #t170 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+        #t169.{core::Map::[]=}{Invariant}(#t170.{core::MapEntry::key}{core::String}, #t170.{core::MapEntry::value}{core::int?}){(core::String, core::int?) → void};
+      }
+    }
+    #t169.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t169;
+  core::List<core::int> list51 = block {
+    final core::List<core::int> #t171 = core::_GrowableList::•<core::int>(0);
+    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})
+      #t171.{core::List::addAll}{Invariant}( block {
+        final core::Set<core::int> #t172 = new col::_CompactLinkedHashSet::•<core::int>();
+      } =>#t172){(core::Iterable<core::int>) → void};
+  } =>#t171;
+  core::Set<core::int?> set51 = block {
+    final core::Set<core::int?> #t173 = new col::_CompactLinkedHashSet::•<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})
+      #t173.{core::Set::addAll}{Invariant}( block {
+        final core::Set<core::int?> #t174 = new col::_CompactLinkedHashSet::•<core::int?>();
+      } =>#t174){(core::Iterable<core::int?>) → void};
+    #t173.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t173;
+  core::List<core::int> list52 = block {
+    final core::List<core::int> #t175 = core::_GrowableList::•<core::int>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t175.{core::List::addAll}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::Iterable<core::int>) → void};
+  } =>#t175;
+  core::Set<core::int?> set52 = block {
+    final core::Set<core::int?> #t176 = new col::_CompactLinkedHashSet::•<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t176.{core::Set::addAll}{Invariant}(core::_GrowableList::•<core::int?>(0)){(core::Iterable<core::int?>) → void};
+    #t176.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t176;
+  core::List<core::List<core::int>> list60 = block {
+    final core::List<core::List<core::int>> #t177 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      #t177.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t177;
+  core::Set<core::List<core::int>?> set60 = block {
+    final core::Set<core::List<core::int>?> #t178 = new col::_CompactLinkedHashSet::•<core::List<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})
+      #t178.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t178.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t178;
+  core::Map<core::String, core::List<core::int>?> map60 = block {
+    final core::Map<core::String, core::List<core::int>?> #t179 = <core::String, core::List<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}) {
+      core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t180 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+        #t179.{core::Map::[]=}{Invariant}(#t180.{core::MapEntry::key}{core::String}, #t180.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+      }
+    }
+    #t179.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t179;
+  core::List<core::List<core::int>> list61 = block {
+    final core::List<core::List<core::int>> #t181 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t181.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>>) → void};
+  } =>#t181;
+  core::Set<core::List<core::int>?> set61 = block {
+    final core::Set<core::List<core::int>?> #t182 = new col::_CompactLinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t182.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::List<core::int>?>(core::_GrowableList::•<core::int>(0))){(core::Iterable<core::List<core::int>?>) → void};
+    #t182.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t182;
+  core::Map<core::String, core::List<core::int>?> map61 = block {
+    final core::Map<core::String, core::List<core::int>?> #t183 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::List<core::int>?>> :sync-for-iterator = <core::String, core::List<core::int>?>{"bar": 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>?> #t184 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::List<core::int>?>};
+          #t183.{core::Map::[]=}{Invariant}(#t184.{core::MapEntry::key}{core::String}, #t184.{core::MapEntry::value}{core::List<core::int>?}){(core::String, core::List<core::int>?) → void};
+        }
+      }
+    #t183.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t183;
+  core::List<core::List<core::int>> list70 = block {
+    final core::List<core::List<core::int>> #t185 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      #t185.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
+  } =>#t185;
+  core::Set<core::List<core::int>?> set70 = block {
+    final core::Set<core::List<core::int>?> #t186 = new col::_CompactLinkedHashSet::•<core::List<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})
+      #t186.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
+    #t186.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t186;
+  core::Map<core::String, core::List<core::int>?> map70 = block {
+    final core::Map<core::String, core::List<core::int>?> #t187 = <core::String, core::List<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})
+      #t187.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int>(0)){(core::String, core::List<core::int>?) → void};
+    #t187.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t187;
+  core::List<core::List<core::int>> list71 = block {
+    final core::List<core::List<core::int>> #t188 = core::_GrowableList::•<core::List<core::int>>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t188.{core::List::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>) → void};
+  } =>#t188;
+  core::Set<core::List<core::int>?> set71 = block {
+    final core::Set<core::List<core::int>?> #t189 = new col::_CompactLinkedHashSet::•<core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t189.{core::Set::add}{Invariant}(core::_GrowableList::•<core::int>(0)){(core::List<core::int>?) → core::bool};
+    #t189.{core::Set::add}{Invariant}(null){(core::List<core::int>?) → core::bool};
+  } =>#t189;
+  core::Map<core::String, core::List<core::int>?> map71 = block {
+    final core::Map<core::String, core::List<core::int>?> #t190 = <core::String, core::List<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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t190.{core::Map::[]=}{Invariant}("bar", core::_GrowableList::•<core::int>(0)){(core::String, core::List<core::int>?) → void};
+    #t190.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::List<core::int>?) → void};
+  } =>#t190;
+  core::List<core::num> list80 = block {
+    final core::List<core::num> #t191 = core::_GrowableList::•<core::num>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t191.{core::List::add}{Invariant}(42){(core::num) → void};
+      else
+        #t191.{core::List::add}{Invariant}(3.14){(core::num) → void};
+  } =>#t191;
+  core::Set<core::num?> set80 = block {
+    final core::Set<core::num?> #t192 = new col::_CompactLinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t192.{core::Set::add}{Invariant}(42){(core::num?) → core::bool};
+      else
+        #t192.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t192.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t192;
+  core::Map<core::String, core::num?> map80 = block {
+    final core::Map<core::String, core::num?> #t193 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t193.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::num?) → void};
+      else
+        #t193.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t193.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t193;
+  core::List<core::num> list81 = block {
+    final core::List<core::num> #t194 = core::_GrowableList::•<core::num>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t194.{core::List::addAll}{Invariant}(listInt){(core::Iterable<core::num>) → void};
+      else
+        #t194.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t194;
+  core::Set<core::num?> set81 = block {
+    final core::Set<core::num?> #t195 = new col::_CompactLinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t195.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+      else
+        #t195.{core::Set::addAll}{Invariant}(listDouble){(core::Iterable<core::num?>) → void};
+    #t195.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t195;
+  core::Map<core::String, core::num?> map81 = block {
+    final core::Map<core::String, core::num?> #t196 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
+        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+          final core::MapEntry<core::String, core::num?> #t197 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
+          #t196.{core::Map::[]=}{Invariant}(#t197.{core::MapEntry::key}{core::String}, #t197.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+        }
+      }
+      else {
+        core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapStringDouble.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
+        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+          final core::MapEntry<core::String, core::num?> #t198 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
+          #t196.{core::Map::[]=}{Invariant}(#t198.{core::MapEntry::key}{core::String}, #t198.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+        }
+      }
+    #t196.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t196;
+  core::List<dynamic> list82 = block {
+    final core::List<dynamic> #t199 = core::_GrowableList::•<dynamic>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t199.{core::List::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+      else
+        #t199.{core::List::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+  } =>#t199;
+  core::Set<dynamic> set82 = block {
+    final core::Set<dynamic> #t200 = new col::_CompactLinkedHashSet::•<dynamic>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t200.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<dynamic>) → void};
+      else
+        #t200.{core::Set::addAll}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>){(core::Iterable<dynamic>) → void};
+    #t200.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+  } =>#t200;
+  core::Map<dynamic, dynamic> map82 = block {
+    final core::Map<dynamic, dynamic> #t201 = <dynamic, dynamic>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = mapStringInt.{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> #t202 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+          #t201.{core::Map::[]=}{Invariant}(#t202.{core::MapEntry::key}{dynamic}, #t202.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+        }
+      }
+      else {
+        core::Iterator<core::MapEntry<dynamic, dynamic>> :sync-for-iterator = (dynVar 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> #t203 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<dynamic, dynamic>};
+          #t201.{core::Map::[]=}{Invariant}(#t203.{core::MapEntry::key}{dynamic}, #t203.{core::MapEntry::value}{dynamic}){(dynamic, dynamic) → void};
+        }
+      }
+    #t201.{core::Map::[]=}{Invariant}("baz", null){(dynamic, dynamic) → void};
+  } =>#t201;
+  core::List<core::num> list83 = block {
+    final core::List<core::num> #t204 = core::_GrowableList::•<core::num>(0);
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t204.{core::List::add}{Invariant}(42){(core::num) → void};
+      else
+        #t204.{core::List::addAll}{Invariant}(listDouble){(core::Iterable<core::num>) → void};
+  } =>#t204;
+  core::Set<core::num?> set83 = block {
+    final core::Set<core::num?> #t205 = new col::_CompactLinkedHashSet::•<core::num?>();
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+        #t205.{core::Set::addAll}{Invariant}(listInt){(core::Iterable<core::num?>) → void};
+      else
+        #t205.{core::Set::add}{Invariant}(3.14){(core::num?) → core::bool};
+    #t205.{core::Set::add}{Invariant}(null){(core::num?) → core::bool};
+  } =>#t205;
+  core::Map<core::String, core::num?> map83 = block {
+    final core::Map<core::String, core::num?> #t206 = <core::String, core::num?>{};
+    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})
+      if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+        core::Iterator<core::MapEntry<core::String, core::num?>> :sync-for-iterator = mapStringInt.{core::Map::entries}{core::Iterable<core::MapEntry<core::String, core::num?>>}.{core::Iterable::iterator}{core::Iterator<core::MapEntry<core::String, core::num?>>};
+        for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+          final core::MapEntry<core::String, core::num?> #t207 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::num?>};
+          #t206.{core::Map::[]=}{Invariant}(#t207.{core::MapEntry::key}{core::String}, #t207.{core::MapEntry::value}{core::num?}){(core::String, core::num?) → void};
+        }
+      }
+      else
+        #t206.{core::Map::[]=}{Invariant}("bar", 3.14){(core::String, core::num?) → void};
+    #t206.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::num?) → void};
+  } =>#t206;
+  core::List<core::int> list90 = block {
+    final core::List<core::int> #t208 = core::_GrowableList::•<core::int>(0);
+    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})
+      #t208.{core::List::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+  } =>#t208;
+  core::Set<core::int?> set90 = block {
+    final core::Set<core::int?> #t209 = new col::_CompactLinkedHashSet::•<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})
+      #t209.{core::Set::add}{Invariant}(dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+    #t209.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t209;
+  core::Map<core::String, core::int?> map90 = block {
+    final core::Map<core::String, core::int?> #t210 = <core::String, 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})
+      #t210.{core::Map::[]=}{Invariant}("bar", dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+    #t210.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t210;
+  core::List<core::int> list91 = block {
+    final core::List<core::int> #t211 = core::_GrowableList::•<core::int>(0);
+    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}) {
+      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 #t212 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int #t213 = #t212 as{TypeError,ForNonNullableByDefault} core::int;
+          #t211.{core::List::add}{Invariant}(#t213){(core::int) → void};
+        }
+      }
+    }
+  } =>#t211;
+  core::Set<core::int?> set91 = block {
+    final core::Set<core::int?> #t214 = new col::_CompactLinkedHashSet::•<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}) {
+      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 #t215 = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final core::int? #t216 = #t215 as{TypeError,ForNonNullableByDefault} core::int?;
+          #t214.{core::Set::add}{Invariant}(#t216){(core::int?) → core::bool};
+        }
+      }
+    }
+    #t214.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t214;
+  core::Map<core::String, core::int?> map91 = block {
+    final core::Map<core::String, core::int?> #t217 = <core::String, 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}) {
+      core::Iterator<core::MapEntry<core::String, core::int?>> :sync-for-iterator = (dynVar as{TypeError,ForDynamic,ForNonNullableByDefault} core::Map<dynamic, dynamic>).{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<dynamic, dynamic> #t218 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::String, core::int?>};
+        {
+          final core::String #t219 = #t218.{core::MapEntry::key}{dynamic} as{TypeError,ForNonNullableByDefault} core::String;
+          final core::int? #t220 = #t218.{core::MapEntry::value}{dynamic} as{TypeError,ForNonNullableByDefault} core::int?;
+          #t217.{core::Map::[]=}{Invariant}(#t219, #t220){(core::String, core::int?) → void};
+        }
+      }
+    }
+    #t217.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t217;
+  core::List<core::int> list100 = block {
+    final core::List<core::int> #t221 = core::_GrowableList::•<core::int>(0);
+    for (final core::int #t222 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t221.{core::List::add}{Invariant}(42){(core::int) → void};
+  } =>#t221;
+  core::Set<core::int> set100 = block {
+    final core::Set<core::int> #t223 = new col::_CompactLinkedHashSet::•<core::int>();
+    for (final core::int #t224 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t223.{core::Set::add}{Invariant}(42){(core::int) → core::bool};
+  } =>#t223;
+  core::Map<core::String, core::int> map100 = block {
+    final core::Map<core::String, core::int> #t225 = <core::String, core::int>{};
+    for (final core::int #t226 = index = 0; self::oracle<core::String>("foo") as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool; index = index.{core::num::+}(1){(core::num) → core::int})
+      #t225.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int) → void};
+  } =>#t225;
+  core::List<core::int> list110 = block {
+    final core::List<core::int> #t227 = core::_GrowableList::•<core::int>(0);
+    {
+      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};
+        #t227.{core::List::add}{Invariant}(i){(core::int) → void};
+      }
+    }
+  } =>#t227;
+  core::Set<core::int?> set110 = block {
+    final core::Set<core::int?> #t228 = new col::_CompactLinkedHashSet::•<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};
+        #t228.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+      }
+    }
+    #t228.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t228;
+  core::Map<core::String, core::int?> map110 = block {
+    final core::Map<core::String, core::int?> #t229 = <core::String, 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};
+        #t229.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+      }
+    }
+    #t229.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t229;
+  core::List<core::int> list120 = block {
+    final core::List<core::int> #t230 = 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}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        #t230.{core::List::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int){(core::int) → void};
+      }
+    }
+  } =>#t230;
+  core::Set<core::int?> set120 = block {
+    final core::Set<core::int?> #t231 = new col::_CompactLinkedHashSet::•<core::int?>();
+    {
+      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}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        #t231.{core::Set::add}{Invariant}(i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+      }
+    }
+    #t231.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+  } =>#t231;
+  core::Map<core::String, core::int?> map120 = block {
+    final core::Map<core::String, core::int?> #t232 = <core::String, core::int?>{};
+    {
+      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}; ) {
+        dynamic i = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        #t232.{core::Map::[]=}{Invariant}("bar", i as{TypeError,ForDynamic,ForNonNullableByDefault} core::int?){(core::String, core::int?) → void};
+      }
+    }
+    #t232.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+  } =>#t232;
+  core::List<core::int> list130 = block {
+    final core::List<core::int> #t233 = core::_GrowableList::•<core::int>(0);
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t233.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t233;
+  core::Set<core::int> set130 = block {
+    final core::Set<core::int> #t234 = new col::_CompactLinkedHashSet::•<core::int>();
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #t234.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t234;
+  core::Map<core::int, core::int> map130 = block {
+    final core::Map<core::int, core::int> #t235 = <core::int, core::int>{};
+    for (core::int i = 1; i.{core::num::<}(2){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+      #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 */ {
+  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 :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  dynamic :exception0;
+  dynamic :stack_trace0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L1:
+      {
+        block {
+          final core::List<core::int> #t236 = core::_GrowableList::•<core::int>(0);
+          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})
+            #t236.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:210:45: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) \"bar\"];
+                                            ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → void};
+        } =>#t236;
+        block {
+          final core::Set<core::int?> #t237 = new col::_CompactLinkedHashSet::•<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})
+            #t237.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:211:46: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\", null};
+                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int?) → core::bool};
+          #t237.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t237;
+        block {
+          final core::Map<core::int, core::int?> #t238 = <core::int, 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})
+            #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:51: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                  ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:58: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                         ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?){(core::int, core::int?) → void};
+          #t238.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:212:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) \"bar\": \"bar\", \"baz\": null};
+                                                                ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
+        } =>#t238;
+        block {
+          final core::List<core::int> #t239 = core::_GrowableList::•<core::int>(0);
+          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})
+            #t239.{core::List::addAll}{Invariant}(core::_GrowableList::_literal1<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:213:49: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"]];
+                                                ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int)){(core::Iterable<core::int>) → void};
+        } =>#t239;
+        block {
+          final core::Set<core::int?> #t240 = new col::_CompactLinkedHashSet::•<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})
+            #t240.{core::Set::addAll}{Invariant}(core::_GrowableList::_literal1<core::int?>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:214:50: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...[\"bar\"], null};
+                                                 ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int?)){(core::Iterable<core::int?>) → void};
+          #t240.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t240;
+        block {
+          final core::Map<core::int, core::int?> #t241 = <core::int, 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}) {
+            core::Iterator<core::MapEntry<core::int, core::int?>> :sync-for-iterator = <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:55: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                      ^" in "bar" as{TypeError,ForNonNullableByDefault} core::int: invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:62: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                             ^" in "bar" as{TypeError,ForNonNullableByDefault} 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?> #t242 = :sync-for-iterator.{core::Iterator::current}{core::MapEntry<core::int, core::int?>};
+              #t241.{core::Map::[]=}{Invariant}(#t242.{core::MapEntry::key}{core::int}, #t242.{core::MapEntry::value}{core::int?}){(core::int, core::int?) → void};
+            }
+          }
+          #t241.{core::Map::[]=}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:215:70: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...{\"bar\": \"bar\"}, \"baz\": null};
+                                                                     ^" in "baz" as{TypeError,ForNonNullableByDefault} core::int, null){(core::int, core::int?) → void};
+        } =>#t241;
+        block {
+          final core::List<core::int> #t243 = core::_GrowableList::•<core::int>(0);
+          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})
+            #t243.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:216:48: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) ...map];
+                                               ^"){(core::int) → void};
+        } =>#t243;
+        block {
+          final core::Set<core::int?> #t244 = new col::_CompactLinkedHashSet::•<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})
+            #t244.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:217:49: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) ...map, null};
+                                                ^"){(core::int?) → core::bool};
+          #t244.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t244;
+        <core::int, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:218:54: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <int, int?>{for (int i = 0; oracle(\"foo\"); i++) ...list, 42: null};
+                                                     ^": null};
+        block {
+          final core::List<core::String> #t245 = core::_GrowableList::•<core::String>(0);
+          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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:62: Error: A value of type 'int' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+            else
+              #t245.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:219:70: Error: A value of type 'double' can't be assigned to a variable of type 'String'.
+  <String>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14];
+                                                                     ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String){(core::String) → void};
+        } =>#t245;
+        block {
+          final core::Set<core::String?> #t246 = new col::_CompactLinkedHashSet::•<core::String?>();
+          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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:63: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                              ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+            else
+              #t246.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:220:71: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else 3.14, null};
+                                                                      ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String?) → core::bool};
+          #t246.{core::Set::add}{Invariant}(null){(core::String?) → core::bool};
+        } =>#t246;
+        block {
+          final core::Map<core::String, core::String?> #t247 = <core::String, core::String?>{};
+          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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:78: Error: A value of type 'int' can't be assigned to a variable of type 'String?'.
+  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                             ^" in 42 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+            else
+              #t247.{core::Map::[]=}{Invariant}("bar", invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:221:93: Error: A value of type 'double' can't be assigned to a variable of type 'String?'.
+  <String, String?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else \"bar\": 3.14, \"baz\": null};
+                                                                                            ^" in 3.14 as{TypeError,ForNonNullableByDefault} core::String?){(core::String, core::String?) → void};
+          #t247.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::String?) → void};
+        } =>#t247;
+        block {
+          final core::List<core::int> #t248 = core::_GrowableList::•<core::int>(0);
+          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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t248.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:222:62: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42];
+                                                             ^"){(core::int) → void};
+            else
+              #t248.{core::List::add}{Invariant}(42){(core::int) → void};
+        } =>#t248;
+        block {
+          final core::Set<core::int?> #t249 = new col::_CompactLinkedHashSet::•<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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t249.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:223:63: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...map else 42, null};
+                                                              ^"){(core::int?) → core::bool};
+            else
+              #t249.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+          #t249.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t249;
+        <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                      ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:224:71: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) ...list else \"bar\": 42, \"baz\": null};
+                                                                      ^": null};
+        block {
+          final core::List<core::int> #t250 = core::_GrowableList::•<core::int>(0);
+          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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t250.{core::List::add}{Invariant}(42){(core::int) → void};
+            else
+              #t250.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:225:70: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int>[for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map];
+                                                                     ^"){(core::int) → void};
+        } =>#t250;
+        block {
+          final core::Set<core::int?> #t251 = new col::_CompactLinkedHashSet::•<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})
+            if(self::oracle<dynamic>() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool)
+              #t251.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+            else
+              #t251.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:226:71: Error: Unexpected type 'Map<int, int>' of a spread.  Expected 'dynamic' or an Iterable.
+ - 'Map' is from 'dart:core'.
+  <int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) 42 else ...map, null};
+                                                                      ^"){(core::int?) → core::bool};
+          #t251.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t251;
+        <core::String, core::int?>{invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                     ^": null, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:227:86: Error: Unexpected type 'List<int>' of a map spread entry.  Expected 'dynamic' or a Map.
+ - 'List' is from 'dart:core'.
+  <String, int?>{for (int i = 0; oracle(\"foo\"); i++) if (oracle()) \"bar\": 42 else ...list, \"baz\": null};
+                                                                                     ^": null};
+        final core::int i = 0;
+        block {
+          final core::List<core::int> #t252 = core::_GrowableList::•<core::int>(0);
+          {
+            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
+            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+              final core::int #t253 = :sync-for-iterator.{core::Iterator::current}{core::int};
+              {
+                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:230:14: Error: Can't assign to the final variable 'i'.
+  <int>[for (i in <int>[1]) i];
+             ^";
+                #t252.{core::List::add}{Invariant}(i){(core::int) → void};
+              }
+            }
+          }
+        } =>#t252;
+        block {
+          final core::Set<core::int?> #t254 = new col::_CompactLinkedHashSet::•<core::int?>();
+          {
+            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
+            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+              final core::int #t255 = :sync-for-iterator.{core::Iterator::current}{core::int};
+              {
+                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:231:15: Error: Can't assign to the final variable 'i'.
+  <int?>{for (i in <int>[1]) i, null};
+              ^";
+                #t254.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+              }
+            }
+          }
+          #t254.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t254;
+        block {
+          final core::Map<core::String, core::int?> #t256 = <core::String, core::int?>{};
+          {
+            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal1<core::int>(1).{core::Iterable::iterator}{core::Iterator<core::int>};
+            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+              final core::int #t257 = :sync-for-iterator.{core::Iterator::current}{core::int};
+              {
+                invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:232:23: Error: Can't assign to the final variable 'i'.
+  <String, int?>{for (i in <int>[1]) \"bar\": i, \"baz\": null};
+                      ^";
+                #t256.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+              }
+            }
+          }
+          #t256.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+        } =>#t256;
+        core::List<dynamic> list10 = block {
+          final core::List<dynamic> #t258 = core::_GrowableList::•<dynamic>(0);
+          {
+            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:234:31: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var list10 = [for (var i in \"not iterable\") i];
+                              ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
+            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+              #t258.{core::List::add}{Invariant}(i){(dynamic) → void};
+            }
+          }
+        } =>#t258;
+        core::Set<dynamic> set10 = block {
+          final core::Set<dynamic> #t259 = new col::_CompactLinkedHashSet::•<dynamic>();
+          {
+            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:235:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var set10 = {for (var i in \"not iterable\") i, null};
+                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
+            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+              #t259.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+            }
+          }
+          #t259.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+        } =>#t259;
+        core::Map<core::String, dynamic> map10 = block {
+          final core::Map<core::String, dynamic> #t260 = <core::String, dynamic>{};
+          {
+            core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:236:30: Error: The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  var map10 = {for (var i in \"not iterable\") \"bar\": i, \"baz\": null};
+                             ^" in "not iterable" as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
+            for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+              dynamic i = :sync-for-iterator.{core::Iterator::current}{Never};
+              #t260.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+            }
+          }
+          #t260.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+        } =>#t260;
+        core::List<core::int> list20 = block {
+          final core::List<core::int> #t261 = core::_GrowableList::•<core::int>(0);
+          {
+            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:32: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                               ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:237:39: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list20 = [for (int i in [\"not\", \"int\"]) i];
+                                      ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{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};
+              #t261.{core::List::add}{Invariant}(i){(core::int) → void};
+            }
+          }
+        } =>#t261;
+        core::Set<core::int?> set20 = block {
+          final core::Set<core::int?> #t262 = new col::_CompactLinkedHashSet::•<core::int?>();
+          {
+            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:238:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set20 = {for (int i in [\"not\", \"int\"]) i, null};
+                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{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};
+              #t262.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+            }
+          }
+          #t262.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t262;
+        core::Map<core::String, core::int?> map20 = block {
+          final core::Map<core::String, core::int?> #t263 = <core::String, core::int?>{};
+          {
+            core::Iterator<core::int> :sync-for-iterator = core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:31: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                              ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:239:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map20 = {for (int i in [\"not\", \"int\"]) \"bar\": i, \"baz\": null};
+                                     ^" in "int" as{TypeError,ForNonNullableByDefault} core::int).{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};
+              #t263.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+            }
+          }
+          #t263.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+        } =>#t263;
+        final core::List<dynamic> #t264 = core::_GrowableList::•<dynamic>(0);
+        {
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:240:37: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var list30 = [await for (var i in \"not stream\") i];
+                                    ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
+          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+          try
+            #L2:
+            while (true) {
+              dynamic #t265 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t266 = 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)) {
+                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+                #t264.{core::List::add}{Invariant}(i){(dynamic) → void};
+              }
+              else
+                break #L2;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
+              [yield] let dynamic #t267 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::List<dynamic> list30 = block {} =>#t264;
+        final core::Set<dynamic> #t268 = new col::_CompactLinkedHashSet::•<dynamic>();
+        {
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:241:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var set30 = {await for (var i in \"not stream\") i, null};
+                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
+          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+          try
+            #L3:
+            while (true) {
+              dynamic #t269 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t270 = 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)) {
+                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+                #t268.{core::Set::add}{Invariant}(i){(dynamic) → core::bool};
+              }
+              else
+                break #L3;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
+              [yield] let dynamic #t271 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::Set<dynamic> set30 = block {
+          #t268.{core::Set::add}{Invariant}(null){(dynamic) → core::bool};
+        } =>#t268;
+        final core::Map<core::String, dynamic> #t272 = <core::String, dynamic>{};
+        {
+          Never :stream = invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:242:36: Error: The type 'String' used in the 'for' loop must implement 'Stream<dynamic>'.
+ - 'Stream' is from 'dart:async'.
+  var map30 = {await for (var i in \"not stream\") \"bar\": i, \"baz\": null};
+                                   ^" in "not stream" as{TypeError,ForNonNullableByDefault} asy::Stream<dynamic>;
+          asy::_StreamIterator<dynamic>? :for-iterator = new asy::_StreamIterator::•<dynamic>(:stream);
+          try
+            #L4:
+            while (true) {
+              dynamic #t273 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t274 = 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)) {
+                dynamic i = :for-iterator.{asy::_StreamIterator::current}{dynamic};
+                #t272.{core::Map::[]=}{Invariant}("bar", i){(core::String, dynamic) → void};
+              }
+              else
+                break #L4;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
+              [yield] let dynamic #t275 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::Map<core::String, dynamic> map30 = block {
+          #t272.{core::Map::[]=}{Invariant}("baz", null){(core::String, dynamic) → void};
+        } =>#t272;
+        final core::List<core::int> #t276 = core::_GrowableList::•<core::int>(0);
+        {
+          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:58: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                         ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:243:65: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var list40 = [await for (int i in Stream.fromIterable([\"not\", \"int\"])) i];
+                                                                ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
+          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+          try
+            #L5:
+            while (true) {
+              dynamic #t277 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t278 = 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)) {
+                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
+                #t276.{core::List::add}{Invariant}(i){(core::int) → void};
+              }
+              else
+                break #L5;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
+              [yield] let dynamic #t279 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::List<core::int> list40 = block {} =>#t276;
+        final core::Set<core::int?> #t280 = new col::_CompactLinkedHashSet::•<core::int?>();
+        {
+          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:244:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var set40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) i, null};
+                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
+          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+          try
+            #L6:
+            while (true) {
+              dynamic #t281 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t282 = 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)) {
+                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
+                #t280.{core::Set::add}{Invariant}(i){(core::int?) → core::bool};
+              }
+              else
+                break #L6;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
+              [yield] let dynamic #t283 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::Set<core::int?> set40 = block {
+          #t280.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t280;
+        final core::Map<core::String, core::int?> #t284 = <core::String, core::int?>{};
+        {
+          asy::Stream<core::int> :stream = asy::Stream::fromIterable<core::int>(core::_GrowableList::_literal2<core::int>(invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:57: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                        ^" in "not" as{TypeError,ForNonNullableByDefault} core::int, invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:245:64: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  var map40 = {await for (int i in Stream.fromIterable([\"not\", \"int\"])) \"bar\": i, \"baz\": null};
+                                                               ^" in "int" as{TypeError,ForNonNullableByDefault} core::int));
+          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+          try
+            #L7:
+            while (true) {
+              dynamic #t285 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t286 = 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)) {
+                core::int i = :for-iterator.{asy::_StreamIterator::current}{core::int};
+                #t284.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int?) → void};
+              }
+              else
+                break #L7;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
+              [yield] let dynamic #t287 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::Map<core::String, core::int?> map40 = block {
+          #t284.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+        } =>#t284;
+        core::List<core::int> list50 = block {
+          final core::List<core::int> #t288 = core::_GrowableList::•<core::int>(0);
+          for (; ; )
+            #t288.{core::List::add}{Invariant}(42){(core::int) → void};
+        } =>#t288;
+        core::Set<core::int?> set50 = block {
+          final core::Set<core::int?> #t289 = new col::_CompactLinkedHashSet::•<core::int?>();
+          for (; ; )
+            #t289.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+          #t289.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t289;
+        core::Map<core::String, core::int?> map50 = block {
+          final core::Map<core::String, core::int?> #t290 = <core::String, core::int?>{};
+          for (; ; )
+            #t290.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+          #t290.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+        } =>#t290;
+        core::List<core::int> list60 = block {
+          final core::List<core::int> #t291 = core::_GrowableList::•<core::int>(0);
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:249:24: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var list60 = [for (; \"not bool\";) 42];
+                       ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+            #t291.{core::List::add}{Invariant}(42){(core::int) → void};
+        } =>#t291;
+        core::Set<core::int?> set60 = block {
+          final core::Set<core::int?> #t292 = new col::_CompactLinkedHashSet::•<core::int?>();
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:250:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var set60 = {for (; \"not bool\";) 42, null};
+                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+            #t292.{core::Set::add}{Invariant}(42){(core::int?) → core::bool};
+          #t292.{core::Set::add}{Invariant}(null){(core::int?) → core::bool};
+        } =>#t292;
+        core::Map<core::String, core::int?> map60 = block {
+          final core::Map<core::String, core::int?> #t293 = <core::String, core::int?>{};
+          for (; invalid-expression "pkg/front_end/testcases/general/control_flow_collection_inference2.dart:251:23: Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
+  var map60 = {for (; \"not bool\";) \"bar\": 42, \"baz\": null};
+                      ^" in "not bool" as{TypeError,ForNonNullableByDefault} core::bool; )
+            #t293.{core::Map::[]=}{Invariant}("bar", 42){(core::String, core::int?) → void};
+          #t293.{core::Map::[]=}{Invariant}("baz", null){(core::String, core::int?) → void};
+        } =>#t293;
+      }
+      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 testForElementErrorsNotAsync(asy::Stream<core::int> stream) → dynamic {
+  block {
+    final core::List<core::int> #t294 = core::_GrowableList::•<core::int>(0);
+    await for (core::int i in stream)
+      #t294.{core::List::add}{Invariant}(i){(core::int) → void};
+  } =>#t294;
+  block {
+    final core::Set<core::int> #t295 = new col::_CompactLinkedHashSet::•<core::int>();
+    await for (core::int i in stream)
+      #t295.{core::Set::add}{Invariant}(i){(core::int) → core::bool};
+  } =>#t295;
+  block {
+    final core::Map<core::String, core::int> #t296 = <core::String, core::int>{};
+    await for (core::int i in stream)
+      #t296.{core::Map::[]=}{Invariant}("bar", i){(core::String, core::int) → void};
+  } =>#t296;
+}
+static method testPromotion(self::A a) → dynamic {
+  core::List<core::int> list10 = block {
+    final core::List<core::int> #t297 = core::_GrowableList::•<core::int>(0);
+    if(a is{ForNonNullableByDefault} self::B)
+      #t297.{core::List::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → void};
+  } =>#t297;
+  core::Set<core::int> set10 = block {
+    final core::Set<core::int> #t298 = new col::_CompactLinkedHashSet::•<core::int>();
+    if(a is{ForNonNullableByDefault} self::B)
+      #t298.{core::Set::add}{Invariant}(a{self::B}.{self::B::foo}{core::int}){(core::int) → core::bool};
+  } =>#t298;
+  core::Map<core::int, core::int> map10 = block {
+    final core::Map<core::int, core::int> #t299 = <core::int, core::int>{};
+    if(a is{ForNonNullableByDefault} self::B)
+      #t299.{core::Map::[]=}{Invariant}(a{self::B}.{self::B::foo}{core::int}, a{self::B}.{self::B::foo}{core::int}){(core::int, core::int) → void};
+  } =>#t299;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart b/pkg/front_end/testcases/general/covariant_equals.dart
index cb74c87..474dfbd 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart
+++ b/pkg/front_end/testcases/general/covariant_equals.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 {
   bool operator ==(covariant A other) => true;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline.expect
index 4f87fb0..cfe571a 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   bool operator ==(covariant A other) => true;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline_modelled.expect
index 4f87fb0..cfe571a 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   bool operator ==(covariant A other) => true;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
index 3f1296f..71a06c5 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
@@ -1,120 +1,135 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_dynamic; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_int; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_string; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == d; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_dynamic; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_int; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_string; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == d; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_dynamic == a; // error
 //                ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_dynamic == b; // error
 //                ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == a; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == b; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_int == c_dynamic; // ok
+//            ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == c_string; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == a; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == b; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == c_dynamic; // ok
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == c_int; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == d; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == a; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == b; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   d == c_dynamic; // ok
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == c_string; // error
 //        ^
@@ -123,162 +138,153 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::•()
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
-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::•()
     ;
-  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 static method main() → dynamic {}
-static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
-  a =={self::A::==}{(self::A*) →* core::bool*} a;
-  a =={self::A::==}{(self::A*) →* core::bool*} b;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+static method test(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} a;
-  b =={self::B::==}{(self::A*) →* core::bool*} b;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError} self::A*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError} self::C<dynamic>*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError} self::C<dynamic>*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_int == c_dynamic; // ok
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == c_dynamic; // ok
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError} self::C<core::String*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  d == c_dynamic; // ok
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect
index 3f1296f..71a06c5 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.modular.expect
@@ -1,120 +1,135 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_dynamic; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_int; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_string; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == d; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_dynamic; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_int; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_string; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == d; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_dynamic == a; // error
 //                ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_dynamic == b; // error
 //                ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == a; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == b; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_int == c_dynamic; // ok
+//            ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == c_string; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == a; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == b; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == c_dynamic; // ok
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == c_int; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == d; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == a; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == b; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   d == c_dynamic; // ok
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == c_string; // error
 //        ^
@@ -123,162 +138,153 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::•()
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
-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::•()
     ;
-  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 static method main() → dynamic {}
-static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
-  a =={self::A::==}{(self::A*) →* core::bool*} a;
-  a =={self::A::==}{(self::A*) →* core::bool*} b;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+static method test(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} a;
-  b =={self::B::==}{(self::A*) →* core::bool*} b;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError} self::A*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError} self::C<dynamic>*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError} self::C<dynamic>*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_int == c_dynamic; // ok
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == c_dynamic; // ok
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError} self::C<core::String*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  d == c_dynamic; // ok
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect
index a4cf466..f80fd45 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect
@@ -1,48 +1,30 @@
-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
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → 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 B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → core::bool
     ;
 }
-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%>
     ;
-  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → 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 D extends self::C<core::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     ;
 }
 static method main() → dynamic
   ;
-static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic
+static method test(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
index 3f1296f..71a06c5 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
@@ -1,120 +1,135 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_dynamic; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_int; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == c_string; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   a == d; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_dynamic; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_int; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == c_string; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   b == d; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_dynamic == a; // error
 //                ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_dynamic == b; // error
 //                ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == a; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == b; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_int == c_dynamic; // ok
+//            ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_int == c_string; // error
 //            ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == a; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == b; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   c_string == c_dynamic; // ok
+//               ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == c_int; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
 //  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   c_string == d; // error
 //               ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 //  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == a; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 //  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == b; // error
 //        ^
 //
-// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+// pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+//   d == c_dynamic; // ok
+//        ^
+//
+// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 //  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 //   d == c_string; // error
 //        ^
@@ -123,162 +138,153 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::•()
     ;
-  operator ==(covariant-by-declaration self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
-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::•()
     ;
-  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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::int*> {
-  synthetic constructor •() → self::D*
+class D extends self::C<core::int> {
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
 }
 static method main() → dynamic {}
-static method test(self::A* a, self::B* b, self::C<dynamic>* c_dynamic, self::C<core::int*>* c_int, self::C<core::String*>* c_string, self::D* d) → dynamic {
-  a =={self::A::==}{(self::A*) →* core::bool*} a;
-  a =={self::A::==}{(self::A*) →* core::bool*} b;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+static method test(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
+  a =={self::A::==}{(self::A) → core::bool} a;
+  a =={self::A::==}{(self::A) → core::bool} b;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_int; // error
-       ^" in c_int as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == c_string; // error
-       ^" in c_string as{TypeError} self::A*;
-  a =={self::A::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   a == d; // error
-       ^" in d as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} a;
-  b =={self::B::==}{(self::A*) →* core::bool*} b;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} a;
+  b =={self::B::==}{(self::A) → core::bool} b;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_dynamic; // error
-       ^" in c_dynamic as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A'.
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_int; // error
-       ^" in c_int as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A'.
+       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == c_string; // error
-       ^" in c_string as{TypeError} self::A*;
-  b =={self::B::==}{(self::A*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A'.
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
+  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   b == d; // error
-       ^" in d as{TypeError} self::A*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>'.
+       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == a; // error
-               ^" in a as{TypeError} self::C<dynamic>*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>'.
+               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_dynamic == b; // error
-               ^" in b as{TypeError} self::C<dynamic>*;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_dynamic;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_int;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} c_string;
-  c_dynamic =={self::C::==}{(self::C<dynamic>*) →* core::bool*} d;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
+  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == a; // error
-           ^" in a as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == b; // error
-           ^" in b as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_int == c_dynamic; // ok
+           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_int == c_string; // error
-           ^" in c_string as{TypeError} self::C<core::int*>*;
-  c_int =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>'.
+           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == a; // error
-              ^" in a as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>'.
+              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == b; // error
-              ^" in b as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>'.
+              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  c_string == c_dynamic; // ok
+              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == c_int; // error
-              ^" in c_int as{TypeError} self::C<core::String*>*;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} c_string;
-  c_string =={self::C::==}{(self::C<core::String*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>'.
+              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
+  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   c_string == d; // error
-              ^" in d as{TypeError} self::C<core::String*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>'.
+              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == a; // error
-       ^" in a as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>'.
+       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == b; // error
-       ^" in b as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_dynamic as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} c_int;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>'.
+       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
+ - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
+  d == c_dynamic; // ok
+       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
   d == c_string; // error
-       ^" in c_string as{TypeError} self::C<core::int*>*;
-  d =={self::C::==}{(self::C<core::int*>*) →* core::bool*} d;
+       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
+  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
 }
diff --git a/pkg/front_end/testcases/general/covariant_field.dart b/pkg/front_end/testcases/general/covariant_field.dart
index 422bd27..7b9b542 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart
+++ b/pkg/front_end/testcases/general/covariant_field.dart
@@ -1,10 +1,10 @@
 // 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 {
-  num invariantField;
-  covariant num covariantField;
+  num invariantField = 0;
+  covariant num covariantField = 0;
 }
 
 abstract class B implements A {
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_field.dart.textual_outline.expect
index 782278d..7e583b6 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
-  num invariantField;
-  covariant num covariantField;
+  num invariantField = 0;
+  covariant num covariantField = 0;
 }
 
 abstract class B implements A {
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_field.dart.textual_outline_modelled.expect
index 8731c4a..6df5c85 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class B implements A {
   get covariantField;
   get invariantField;
@@ -21,8 +20,8 @@
 }
 
 class A {
-  covariant num covariantField;
-  num invariantField;
+  covariant num covariantField = 0;
+  num invariantField = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.weak.expect b/pkg/front_end/testcases/general/covariant_field.dart.weak.expect
index 6453946..bc955de 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,84 +7,44 @@
 //   void set invariantField(int value) {} // error
 //                               ^
 // pkg/front_end/testcases/general/covariant_field.dart:6:7: Context: This is the overridden method ('invariantField').
-//   num invariantField;
+//   num invariantField = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* invariantField = null;
-  covariant-by-declaration field core::num* covariantField = null;
-  synthetic constructor •() → self::A*
+  field core::num invariantField = 0;
+  covariant-by-declaration field core::num covariantField = 0;
+  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 implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get invariantField() → core::num*;
-  abstract set invariantField(core::num* value) → void;
-  abstract get covariantField() → core::num*;
-  abstract set covariantField(covariant-by-declaration core::num* 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 invariantField() → core::num;
+  abstract set invariantField(core::num value) → void;
+  abstract get covariantField() → core::num;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get invariantField() → core::int*;
-  set invariantField(core::int* value) → void {}
-  abstract get covariantField() → core::int*;
-  set covariantField(covariant-by-declaration 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 invariantField() → core::int;
+  set invariantField(core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 abstract class D extends core::Object implements self::A {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract get invariantField() → core::int*;
-  set invariantField(covariant-by-declaration core::int* value) → void {}
-  abstract get covariantField() → core::int*;
-  set covariantField(covariant-by-declaration 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 invariantField() → core::int;
+  set invariantField(covariant-by-declaration core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect
index 6453946..bc955de 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,84 +7,44 @@
 //   void set invariantField(int value) {} // error
 //                               ^
 // pkg/front_end/testcases/general/covariant_field.dart:6:7: Context: This is the overridden method ('invariantField').
-//   num invariantField;
+//   num invariantField = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* invariantField = null;
-  covariant-by-declaration field core::num* covariantField = null;
-  synthetic constructor •() → self::A*
+  field core::num invariantField = 0;
+  covariant-by-declaration field core::num covariantField = 0;
+  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 implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract get invariantField() → core::num*;
-  abstract set invariantField(core::num* value) → void;
-  abstract get covariantField() → core::num*;
-  abstract set covariantField(covariant-by-declaration core::num* 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 invariantField() → core::num;
+  abstract set invariantField(core::num value) → void;
+  abstract get covariantField() → core::num;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract get invariantField() → core::int*;
-  set invariantField(core::int* value) → void {}
-  abstract get covariantField() → core::int*;
-  set covariantField(covariant-by-declaration 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 invariantField() → core::int;
+  set invariantField(core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 abstract class D extends core::Object implements self::A {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract get invariantField() → core::int*;
-  set invariantField(covariant-by-declaration core::int* value) → void {}
-  abstract get covariantField() → core::int*;
-  set covariantField(covariant-by-declaration 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 invariantField() → core::int;
+  set invariantField(covariant-by-declaration core::int value) → void {}
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect
index 734e3a9..42a7140 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,85 +7,45 @@
 //   void set invariantField(int value) {} // error
 //                               ^
 // pkg/front_end/testcases/general/covariant_field.dart:6:7: Context: This is the overridden method ('invariantField').
-//   num invariantField;
+//   num invariantField = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* invariantField;
-  covariant-by-declaration field core::num* covariantField;
-  synthetic constructor •() → self::A*
+  field core::num invariantField;
+  covariant-by-declaration field core::num covariantField;
+  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 implements self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract get invariantField() → core::num*;
-  abstract set invariantField(core::num* value) → void;
-  abstract get covariantField() → core::num*;
-  abstract set covariantField(covariant-by-declaration core::num* 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 invariantField() → core::num;
+  abstract set invariantField(core::num value) → void;
+  abstract get covariantField() → core::num;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract get invariantField() → core::int*;
-  set invariantField(core::int* value) → void
+  abstract get invariantField() → core::int;
+  set invariantField(core::int value) → void
     ;
-  abstract get covariantField() → core::int*;
-  set covariantField(covariant-by-declaration core::int* value) → void
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration 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 class D extends core::Object implements self::A {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  abstract get invariantField() → core::int*;
-  set invariantField(covariant-by-declaration core::int* value) → void
+  abstract get invariantField() → core::int;
+  set invariantField(covariant-by-declaration core::int value) → void
     ;
-  abstract get covariantField() → core::int*;
-  set covariantField(covariant-by-declaration core::int* value) → void
+  abstract get covariantField() → core::int;
+  set covariantField(covariant-by-declaration 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/covariant_field_override.dart b/pkg/front_end/testcases/general/covariant_field_override.dart
index 8df030b..c5c9396 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart
@@ -1,17 +1,17 @@
 // 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 {
-  num field;
+  num field = 0;
 }
 
 class B {
-  covariant num field;
+  covariant num field = 0;
 }
 
 class C extends A implements B {
-  num field;
+  num field = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect
index ef1710d..d219f4b 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 class A {
-  num field;
+  num field = 0;
 }
 
 class B {
-  covariant num field;
+  covariant num field = 0;
 }
 
 class C extends A implements B {
-  num field;
+  num field = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect
index ef1710d..d219f4b 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.textual_outline_modelled.expect
@@ -1,14 +1,13 @@
-// @dart = 2.9
 class A {
-  num field;
+  num field = 0;
 }
 
 class B {
-  covariant num field;
+  covariant num field = 0;
 }
 
 class C extends A implements B {
-  num field;
+  num field = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect
index fb69f60..98c482b 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* field = null;
-  synthetic constructor •() → self::A*
+  field core::num field = 0;
+  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 {
-  covariant-by-declaration field core::num* field = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num field = 0;
+  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 C extends self::A implements self::B {
-  covariant-by-declaration field core::num* field = null;
-  synthetic constructor •() → self::C*
+  covariant-by-declaration field core::num field = 0;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect
index fb69f60..98c482b 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.modular.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* field = null;
-  synthetic constructor •() → self::A*
+  field core::num field = 0;
+  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 {
-  covariant-by-declaration field core::num* field = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num field = 0;
+  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 C extends self::A implements self::B {
-  covariant-by-declaration field core::num* field = null;
-  synthetic constructor •() → self::C*
+  covariant-by-declaration field core::num field = 0;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect
index a7dd616..d6e65f7 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* field;
-  synthetic constructor •() → self::A*
+  field core::num field;
+  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 {
-  covariant-by-declaration field core::num* field;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num field;
+  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 C extends self::A implements self::B {
-  covariant-by-declaration field core::num* field;
-  synthetic constructor •() → self::C*
+  covariant-by-declaration field core::num field;
+  synthetic constructor •() → self::C
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect
index fb69f60..98c482b 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::num* field = null;
-  synthetic constructor •() → self::A*
+  field core::num field = 0;
+  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 {
-  covariant-by-declaration field core::num* field = null;
-  synthetic constructor •() → self::B*
+  covariant-by-declaration field core::num field = 0;
+  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 C extends self::A implements self::B {
-  covariant-by-declaration field core::num* field = null;
-  synthetic constructor •() → self::C*
+  covariant-by-declaration field core::num field = 0;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart b/pkg/front_end/testcases/general/covariant_generic2.dart
new file mode 100644
index 0000000..b4a43c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.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.
+
+typedef void Callback<T>(T x);
+
+class Foo<T> {
+  final T finalField;
+  final Callback<T> callbackField;
+
+  late T mutableField;
+  late Callback<T> mutableCallbackField;
+
+  Foo(this.finalField, this.callbackField);
+
+  void method(T x) {}
+
+  set setter(T x) {}
+
+  void withCallback(Callback<T> callback) {
+    callback(finalField);
+  }
+}
+
+main() {
+  Foo<int> fooInt = new Foo<int>(1, (int x) {});
+
+  fooInt.method(3);
+  fooInt.setter = 3;
+  fooInt.withCallback((int x) {});
+  fooInt.withCallback((num x) {});
+  fooInt.mutableField = 3;
+  fooInt.mutableCallbackField = (int x) {};
+
+  Foo<num> fooNum = fooInt;
+  fooNum.method(3);
+  fooNum.method(2.5);
+  fooNum.setter = 3;
+  fooNum.setter = 2.5;
+  fooNum.withCallback((num x) {});
+  fooNum.mutableField = 3;
+  fooNum.mutableField = 2.5;
+  fooNum.mutableCallbackField(3);
+  fooNum.mutableCallbackField(2.5);
+  fooNum.mutableCallbackField = (num x) {};
+}
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_generic2.dart.textual_outline.expect
new file mode 100644
index 0000000..514ad98
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+typedef void Callback<T>(T x);
+
+class Foo<T> {
+  final T finalField;
+  final Callback<T> callbackField;
+  late T mutableField;
+  late Callback<T> mutableCallbackField;
+  Foo(this.finalField, this.callbackField);
+  void method(T x) {}
+  set setter(T x) {}
+  void withCallback(Callback<T> callback) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_generic2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c27fead
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class Foo<T> {
+  final Callback<T> callbackField;
+  final T finalField;
+  ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+  T mutableField;
+  ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+  Callback<T> mutableCallbackField;
+  Foo(this.finalField, this.callbackField);
+  set setter(T x) {}
+  void method(T x) {}
+  void withCallback(Callback<T> callback) {}
+}
+main() {}
+typedef void Callback<T>(T x);
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart.weak.expect b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.expect
new file mode 100644
index 0000000..3f7bc7e
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Callback<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field self::Foo::T% finalField;
+  final field (self::Foo::T%) → void callbackField;
+  late covariant-by-class field self::Foo::T% mutableField;
+  late field (self::Foo::T%) → void mutableCallbackField;
+  constructor •(self::Foo::T% finalField, (self::Foo::T%) → void callbackField) → self::Foo<self::Foo::T%>
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(covariant-by-class self::Foo::T% x) → void {}
+  set setter(covariant-by-class self::Foo::T% x) → void {}
+  method withCallback((self::Foo::T%) → void callback) → void {
+    callback(this.{self::Foo::finalField}{self::Foo::T%}){(self::Foo::T%) → void};
+  }
+}
+static method main() → dynamic {
+  self::Foo<core::int> fooInt = new self::Foo::•<core::int>(1, (core::int x) → void {});
+  fooInt.{self::Foo::method}(3){(core::int) → void};
+  fooInt.{self::Foo::setter} = 3;
+  fooInt.{self::Foo::withCallback}((core::int x) → void {}){((core::int) → void) → void};
+  fooInt.{self::Foo::withCallback}((core::num x) → void {}){((core::int) → void) → void};
+  fooInt.{self::Foo::mutableField} = 3;
+  fooInt.{self::Foo::mutableCallbackField} = (core::int x) → void {};
+  self::Foo<core::num> fooNum = fooInt;
+  fooNum.{self::Foo::method}(3){(core::num) → void};
+  fooNum.{self::Foo::method}(2.5){(core::num) → void};
+  fooNum.{self::Foo::setter} = 3;
+  fooNum.{self::Foo::setter} = 2.5;
+  fooNum.{self::Foo::withCallback}((core::num x) → void {}){((core::num) → void) → void};
+  fooNum.{self::Foo::mutableField} = 3;
+  fooNum.{self::Foo::mutableField} = 2.5;
+  let final self::Foo<core::num> #t1 = fooNum in let final core::int #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t2){(core::num) → void};
+  let final self::Foo<core::num> #t3 = fooNum in let final core::double #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t4){(core::num) → void};
+  fooNum.{self::Foo::mutableCallbackField} = (core::num x) → void {};
+}
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.modular.expect
new file mode 100644
index 0000000..3f7bc7e
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Callback<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field self::Foo::T% finalField;
+  final field (self::Foo::T%) → void callbackField;
+  late covariant-by-class field self::Foo::T% mutableField;
+  late field (self::Foo::T%) → void mutableCallbackField;
+  constructor •(self::Foo::T% finalField, (self::Foo::T%) → void callbackField) → self::Foo<self::Foo::T%>
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(covariant-by-class self::Foo::T% x) → void {}
+  set setter(covariant-by-class self::Foo::T% x) → void {}
+  method withCallback((self::Foo::T%) → void callback) → void {
+    callback(this.{self::Foo::finalField}{self::Foo::T%}){(self::Foo::T%) → void};
+  }
+}
+static method main() → dynamic {
+  self::Foo<core::int> fooInt = new self::Foo::•<core::int>(1, (core::int x) → void {});
+  fooInt.{self::Foo::method}(3){(core::int) → void};
+  fooInt.{self::Foo::setter} = 3;
+  fooInt.{self::Foo::withCallback}((core::int x) → void {}){((core::int) → void) → void};
+  fooInt.{self::Foo::withCallback}((core::num x) → void {}){((core::int) → void) → void};
+  fooInt.{self::Foo::mutableField} = 3;
+  fooInt.{self::Foo::mutableCallbackField} = (core::int x) → void {};
+  self::Foo<core::num> fooNum = fooInt;
+  fooNum.{self::Foo::method}(3){(core::num) → void};
+  fooNum.{self::Foo::method}(2.5){(core::num) → void};
+  fooNum.{self::Foo::setter} = 3;
+  fooNum.{self::Foo::setter} = 2.5;
+  fooNum.{self::Foo::withCallback}((core::num x) → void {}){((core::num) → void) → void};
+  fooNum.{self::Foo::mutableField} = 3;
+  fooNum.{self::Foo::mutableField} = 2.5;
+  let final self::Foo<core::num> #t1 = fooNum in let final core::int #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t2){(core::num) → void};
+  let final self::Foo<core::num> #t3 = fooNum in let final core::double #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t4){(core::num) → void};
+  fooNum.{self::Foo::mutableCallbackField} = (core::num x) → void {};
+}
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.outline.expect
new file mode 100644
index 0000000..c5ac5cb
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Callback<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field self::Foo::T% finalField;
+  final field (self::Foo::T%) → void callbackField;
+  late covariant-by-class field self::Foo::T% mutableField;
+  late field (self::Foo::T%) → void mutableCallbackField;
+  constructor •(self::Foo::T% finalField, (self::Foo::T%) → void callbackField) → self::Foo<self::Foo::T%>
+    ;
+  method method(covariant-by-class self::Foo::T% x) → void
+    ;
+  set setter(covariant-by-class self::Foo::T% x) → void
+    ;
+  method withCallback((self::Foo::T%) → void callback) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/covariant_generic2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.transformed.expect
new file mode 100644
index 0000000..e41b041
--- /dev/null
+++ b/pkg/front_end/testcases/general/covariant_generic2.dart.weak.transformed.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef Callback<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class Foo<T extends core::Object? = dynamic> extends core::Object {
+  final field self::Foo::T% finalField;
+  final field (self::Foo::T%) → void callbackField;
+  late covariant-by-class field self::Foo::T% mutableField;
+  late field (self::Foo::T%) → void mutableCallbackField;
+  constructor •(self::Foo::T% finalField, (self::Foo::T%) → void callbackField) → self::Foo<self::Foo::T%>
+    : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
+    ;
+  method method(covariant-by-class self::Foo::T% x) → void {}
+  set setter(covariant-by-class self::Foo::T% x) → void {}
+  method withCallback((self::Foo::T%) → void callback) → void {
+    callback(this.{self::Foo::finalField}{self::Foo::T%}){(self::Foo::T%) → void};
+  }
+}
+static method main() → dynamic {
+  self::Foo<core::int> fooInt = new self::Foo::•<core::int>(1, (core::int x) → void {});
+  fooInt.{self::Foo::method}(3){(core::int) → void};
+  fooInt.{self::Foo::setter} = 3;
+  fooInt.{self::Foo::withCallback}((core::int x) → void {}){((core::int) → void) → void};
+  fooInt.{self::Foo::withCallback}((core::num x) → void {}){((core::int) → void) → void};
+  fooInt.{self::Foo::mutableField} = 3;
+  fooInt.{self::Foo::mutableCallbackField} = (core::int x) → void {};
+  self::Foo<core::num> fooNum = fooInt;
+  fooNum.{self::Foo::method}(3){(core::num) → void};
+  fooNum.{self::Foo::method}(2.5){(core::num) → void};
+  fooNum.{self::Foo::setter} = 3;
+  fooNum.{self::Foo::setter} = 2.5;
+  fooNum.{self::Foo::withCallback}((core::num x) → void {}){((core::num) → void) → void};
+  fooNum.{self::Foo::mutableField} = 3;
+  fooNum.{self::Foo::mutableField} = 2.5;
+  let final self::Foo<core::num> #t1 = fooNum in let final core::int #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t2){(core::num) → void};
+  let final self::Foo<core::num> #t3 = fooNum in let final core::double #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::num) → void)(#t4){(core::num) → void};
+  fooNum.{self::Foo::mutableCallbackField} = (core::num x) → void {};
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///covariant_generic2.dart:43:31 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///covariant_generic2.dart:44:31 -> DoubleConstant(2.5)
+Extra constant evaluation: evaluated: 58, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart
index 434cf46..d9a1e90 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.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 checks that 'covariant' bit is propagated from the superclass of the
 // mixin application to the mixin application and its subclasses.
 
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline.expect
index f22f366..914deb7 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   void foo(covariant num x) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline_modelled.expect
index f22f366..914deb7 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   void foo(covariant num x) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
index 0390bb6..fb300f7 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
@@ -1,66 +1,36 @@
-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(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
+  method foo(covariant-by-declaration core::num x) → void {}
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  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
+  method foo(core::num x) → void {}
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  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
+  method foo(core::num x) → void {}
 }
 abstract class _D&A&B = self::A with self::B /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&A&B*
+  synthetic constructor •() → self::_D&A&B
     : super self::A::•()
     ;
-  forwarding-stub method foo(covariant-by-declaration core::num* x) → void
+  forwarding-stub method foo(covariant-by-declaration core::num x) → void
     return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::_D&A&B::•()
     ;
-  method foo(covariant-by-declaration core::int* x) → void {}
+  method foo(covariant-by-declaration core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect
index 0390bb6..fb300f7 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.modular.expect
@@ -1,66 +1,36 @@
-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(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
+  method foo(covariant-by-declaration core::num x) → void {}
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  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
+  method foo(core::num x) → void {}
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  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
+  method foo(core::num x) → void {}
 }
 abstract class _D&A&B = self::A with self::B /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&A&B*
+  synthetic constructor •() → self::_D&A&B
     : super self::A::•()
     ;
-  forwarding-stub method foo(covariant-by-declaration core::num* x) → void
+  forwarding-stub method foo(covariant-by-declaration core::num x) → void
     return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::_D&A&B::•()
     ;
-  method foo(covariant-by-declaration core::int* x) → void {}
+  method foo(covariant-by-declaration core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect
index 6da60de..5030d86 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect
@@ -1,66 +1,36 @@
-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(covariant-by-declaration core::num* x) → void
+  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
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  method foo(core::num* x) → void
+  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
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method foo(core::num* x) → void
+  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 class _D&A&B = self::A with self::B /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&A&B*
+  synthetic constructor •() → self::_D&A&B
     : super self::A::•()
     ;
-  forwarding-stub method foo(covariant-by-declaration core::num* x) → void
+  forwarding-stub method foo(covariant-by-declaration core::num x) → void
     return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
-  method foo(covariant-by-declaration core::int* x) → void
+  method foo(covariant-by-declaration core::int x) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect
index 502b6f3..d5fabc8 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect
@@ -1,65 +1,35 @@
-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(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
+  method foo(covariant-by-declaration core::num x) → void {}
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  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
+  method foo(core::num x) → void {}
 }
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  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
+  method foo(core::num x) → void {}
 }
 abstract class _D&A&B extends self::A implements self::B /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_D&A&B*
+  synthetic constructor •() → self::_D&A&B
     : super self::A::•()
     ;
-  method foo(covariant-by-declaration core::num* x) → void {}
+  method foo(covariant-by-declaration core::num x) → void {}
 }
 class D extends self::_D&A&B implements self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::_D&A&B::•()
     ;
-  method foo(covariant-by-declaration core::int* x) → void {}
+  method foo(covariant-by-declaration core::int x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart b/pkg/front_end/testcases/general/covariant_super_check.dart
index 21afce8..1d8e5cc 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart
+++ b/pkg/front_end/testcases/general/covariant_super_check.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 {
   method(num a) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline.expect
index b9ba2ce..a1ec327 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   method(num a) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline_modelled.expect
index b9ba2ce..a1ec327 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   method(num a) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect
index 044d867..bffb67c 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method method(core::num* 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 method(core::num a) → dynamic {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method method(dynamic a) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method method(covariant-by-declaration core::String* a) → dynamic {}
+  method method(covariant-by-declaration core::String a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect
index 044d867..bffb67c 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method method(core::num* 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 method(core::num a) → dynamic {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method method(dynamic a) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method method(covariant-by-declaration core::String* a) → dynamic {}
+  method method(covariant-by-declaration core::String a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect
index e98cc10..f51caa3 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  method method(core::num* a) → dynamic
+  method method(core::num 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 method(dynamic a) → dynamic
     ;
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method method(covariant-by-declaration core::String* a) → dynamic
+  method method(covariant-by-declaration core::String a) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect
index 044d867..bffb67c 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,31 +14,21 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method method(core::num* 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 method(core::num a) → dynamic {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
   method method(dynamic a) → dynamic {}
 }
 class C extends self::B {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method method(covariant-by-declaration core::String* a) → dynamic {}
+  method method(covariant-by-declaration core::String a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart b/pkg/front_end/testcases/general/covariant_type_parameter.dart
index 3bcfd4c..07f2186 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.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<S> {
   void method<T extends S>(S s) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect
index 5822ef6..c11d77c 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<S> {
   void method<T extends S>(S s) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect
index 5822ef6..c11d77c 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<S> {
   void method<T extends S>(S s) {}
 }
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect
index d28fb6f..a65190f 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::S*>*
+class A<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::S%>
     : super core::Object::•()
     ;
-  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* 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
+  method method<covariant-by-class T extends self::A::S%>(covariant-by-class self::A::S% s) → void {}
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* 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
+  method method<covariant-by-class T extends self::B::S%>(covariant-by-declaration covariant-by-class self::B::S% s) → void {}
 }
-class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
-  synthetic constructor •() → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::A<self::C::S%> implements self::B<self::C::S%> {
+  synthetic constructor •() → self::C<self::C::S%>
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
-    return super.{self::A::method}<self::C::method::T*>(s);
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S%>(covariant-by-declaration covariant-by-class self::C::S% s) → void
+    return super.{self::A::method}<self::C::method::T%>(s);
 }
-class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::A<self::D::S%> implements self::B<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     : super self::A::•()
     ;
-  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
-    return super.{self::A::method}<self::D::method::T*>(s);
+  forwarding-stub method method<covariant-by-class T extends self::D::S%>(covariant-by-declaration covariant-by-class self::D::S% s) → void
+    return super.{self::A::method}<self::D::method::T%>(s);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect
index d28fb6f..a65190f 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.modular.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::S*>*
+class A<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::S%>
     : super core::Object::•()
     ;
-  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* 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
+  method method<covariant-by-class T extends self::A::S%>(covariant-by-class self::A::S% s) → void {}
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* 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
+  method method<covariant-by-class T extends self::B::S%>(covariant-by-declaration covariant-by-class self::B::S% s) → void {}
 }
-class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
-  synthetic constructor •() → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::A<self::C::S%> implements self::B<self::C::S%> {
+  synthetic constructor •() → self::C<self::C::S%>
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
-    return super.{self::A::method}<self::C::method::T*>(s);
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S%>(covariant-by-declaration covariant-by-class self::C::S% s) → void
+    return super.{self::A::method}<self::C::method::T%>(s);
 }
-class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::A<self::D::S%> implements self::B<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     : super self::A::•()
     ;
-  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
-    return super.{self::A::method}<self::D::method::T*>(s);
+  forwarding-stub method method<covariant-by-class T extends self::D::S%>(covariant-by-declaration covariant-by-class self::D::S% s) → void
+    return super.{self::A::method}<self::D::method::T%>(s);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect
index c24dcc9..bc048ae 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect
@@ -1,50 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::S*>*
+class A<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::S%>
     ;
-  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* s) → void
+  method method<covariant-by-class T extends self::A::S%>(covariant-by-class self::A::S% 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
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::S%>
     ;
-  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* s) → void
+  method method<covariant-by-class T extends self::B::S%>(covariant-by-declaration covariant-by-class self::B::S% 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
 }
-class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
-  synthetic constructor •() → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::A<self::C::S%> implements self::B<self::C::S%> {
+  synthetic constructor •() → self::C<self::C::S%>
     ;
-  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
-    return super.{self::A::method}<self::C::method::T*>(s);
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S%>(covariant-by-declaration covariant-by-class self::C::S% s) → void
+    return super.{self::A::method}<self::C::method::T%>(s);
 }
-class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::A<self::D::S%> implements self::B<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     ;
-  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
-    return super.{self::A::method}<self::D::method::T*>(s);
+  forwarding-stub method method<covariant-by-class T extends self::D::S%>(covariant-by-declaration covariant-by-class self::D::S% s) → void
+    return super.{self::A::method}<self::D::method::T%>(s);
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect
index d28fb6f..a65190f 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect
@@ -1,51 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::S*>*
+class A<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::S%>
     : super core::Object::•()
     ;
-  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* 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
+  method method<covariant-by-class T extends self::A::S%>(covariant-by-class self::A::S% s) → void {}
 }
-class B<S extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::S*>*
+class B<S extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::S%>
     : super core::Object::•()
     ;
-  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* 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
+  method method<covariant-by-class T extends self::B::S%>(covariant-by-declaration covariant-by-class self::B::S% s) → void {}
 }
-class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
-  synthetic constructor •() → self::C<self::C::S*>*
+class C<S extends core::Object? = dynamic> extends self::A<self::C::S%> implements self::B<self::C::S%> {
+  synthetic constructor •() → self::C<self::C::S%>
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
-    return super.{self::A::method}<self::C::method::T*>(s);
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S%>(covariant-by-declaration covariant-by-class self::C::S% s) → void
+    return super.{self::A::method}<self::C::method::T%>(s);
 }
-class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
-  synthetic constructor •() → self::D<self::D::S*>*
+class D<S extends core::Object? = dynamic> extends self::A<self::D::S%> implements self::B<self::D::S%> {
+  synthetic constructor •() → self::D<self::D::S%>
     : super self::A::•()
     ;
-  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
-    return super.{self::A::method}<self::D::method::T*>(s);
+  forwarding-stub method method<covariant-by-class T extends self::D::S%>(covariant-by-declaration covariant-by-class self::D::S% s) → void
+    return super.{self::A::method}<self::D::method::T%>(s);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/cycles.dart b/pkg/front_end/testcases/general/cycles.dart
index 190b4c0..4c953b1 100644
--- a/pkg/front_end/testcases/general/cycles.dart
+++ b/pkg/front_end/testcases/general/cycles.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 A implements C {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/cycles.dart.textual_outline.expect b/pkg/front_end/testcases/general/cycles.dart.textual_outline.expect
index 5a17b07..362437f 100644
--- a/pkg/front_end/testcases/general/cycles.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/cycles.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A implements C {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/cycles.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/cycles.dart.textual_outline_modelled.expect
index 5a17b07..362437f 100644
--- a/pkg/front_end/testcases/general/cycles.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/cycles.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A implements C {}
 
 class B extends A {}
diff --git a/pkg/front_end/testcases/general/cycles.dart.weak.expect b/pkg/front_end/testcases/general/cycles.dart.weak.expect
index ec6f025..6c9d20a 100644
--- a/pkg/front_end/testcases/general/cycles.dart.weak.expect
+++ b/pkg/front_end/testcases/general/cycles.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,64 +18,24 @@
 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 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
 }
 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
 }
 static method main() → dynamic {
   core::print(new self::A::•());
diff --git a/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect b/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect
index ec6f025..6c9d20a 100644
--- a/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/cycles.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,64 +18,24 @@
 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 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
 }
 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
 }
 static method main() → dynamic {
   core::print(new self::A::•());
diff --git a/pkg/front_end/testcases/general/cycles.dart.weak.outline.expect b/pkg/front_end/testcases/general/cycles.dart.weak.outline.expect
index 7e01e5c..c1ee73b 100644
--- a/pkg/front_end/testcases/general/cycles.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/cycles.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,60 +18,20 @@
 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 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
 }
 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
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/cycles.dart.weak.transformed.expect b/pkg/front_end/testcases/general/cycles.dart.weak.transformed.expect
index ec6f025..6c9d20a 100644
--- a/pkg/front_end/testcases/general/cycles.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/cycles.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,64 +18,24 @@
 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 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
 }
 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
 }
 static method main() → dynamic {
   core::print(new self::A::•());
diff --git a/pkg/front_end/testcases/general/default_values.dart b/pkg/front_end/testcases/general/default_values.dart
index 83c6ef3..de8ccc5 100644
--- a/pkg/front_end/testcases/general/default_values.dart
+++ b/pkg/front_end/testcases/general/default_values.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
+
 topLevel([a = 42]) => a;
 
 main() {
diff --git a/pkg/front_end/testcases/general/default_values.dart.textual_outline.expect b/pkg/front_end/testcases/general/default_values.dart.textual_outline.expect
index 82f6437..c04eb61 100644
--- a/pkg/front_end/testcases/general/default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/default_values.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 topLevel([a = 42]) => a;
 main() {}
diff --git a/pkg/front_end/testcases/general/default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/default_values.dart.textual_outline_modelled.expect
index 4c2cad0..c95e3f3 100644
--- a/pkg/front_end/testcases/general/default_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/default_values.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 topLevel([a = 42]) => a;
diff --git a/pkg/front_end/testcases/general/default_values.dart.weak.expect b/pkg/front_end/testcases/general/default_values.dart.weak.expect
index 7b8886e..a576ab0 100644
--- a/pkg/front_end/testcases/general/default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/default_values.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/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/default_values.dart.weak.modular.expect
index 7b8886e..a576ab0 100644
--- a/pkg/front_end/testcases/general/default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/default_values.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/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect
index 88ff556..1ac5c52 100644
--- a/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/default_values.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method topLevel([dynamic a]) → dynamic
diff --git a/pkg/front_end/testcases/general/default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/default_values.dart.weak.transformed.expect
index 7b8886e..a576ab0 100644
--- a/pkg/front_end/testcases/general/default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/default_values.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/deferred_lib.dart b/pkg/front_end/testcases/general/deferred_lib.dart
index 55588e5..94f5f06 100644
--- a/pkg/front_end/testcases/general/deferred_lib.dart
+++ b/pkg/front_end/testcases/general/deferred_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.md file.
-// @dart=2.9
+
 dynamic m(x) => null;
 
 var x = 0;
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.expect
index bdaedd7..4d3a661 100644
--- a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.expect
@@ -16,28 +16,18 @@
 static method bad(def::C* x) → dynamic {}
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect
index bdaedd7..4d3a661 100644
--- a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.modular.expect
@@ -16,28 +16,18 @@
 static method bad(def::C* x) → dynamic {}
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.outline.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.outline.expect
index 440a121..ce2ba9d 100644
--- a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.outline.expect
@@ -9,27 +9,17 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y;
-  synthetic constructor •() → def::C*
+  static field core::int y;
+  synthetic constructor •() → def::C
     ;
-  static method m() → core::int*
+  static method m() → 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 core::int* x;
+static field core::int x;
 static method m(dynamic x) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.transformed.expect
index bdaedd7..4d3a661 100644
--- a/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.weak.transformed.expect
@@ -16,28 +16,18 @@
 static method bad(def::C* x) → dynamic {}
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
 class C extends core::Object {
-  static field core::int* y = 1;
-  synthetic constructor •() → def::C*
+  static field core::int y = 1;
+  synthetic constructor •() → def::C
     : super core::Object::•()
     ;
-  static method m() → core::int*
+  static method m() → core::int
     return 2;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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* x = 0;
+static field core::int x = 0;
 static method m(dynamic x) → dynamic
   return null;
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart b/pkg/front_end/testcases/general/demote_closure_types.dart
index b999b64..d472317 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart
+++ b/pkg/front_end/testcases/general/demote_closure_types.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
+
 method<T>(T a, T b) {
   if (a is String) {
     var f = () => a;
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline.expect
index a5f2d23..fee39b9 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 method<T>(T a, T b) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline_modelled.expect
index 4ba4585..caff637 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 method<T>(T a, T b) {}
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
index f789104..70c0b87 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,12 +9,12 @@
 import self as self;
 import "dart:core" as core;
 
-static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic {
-  if(a is core::String*) {
-    () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
-    core::String* s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
+  if(a is{ForNonNullableByDefault} core::String) {
+    () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
+    core::String s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect
index f789104..70c0b87 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,12 +9,12 @@
 import self as self;
 import "dart:core" as core;
 
-static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic {
-  if(a is core::String*) {
-    () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
-    core::String* s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
+  if(a is{ForNonNullableByDefault} core::String) {
+    () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
+    core::String s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.outline.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.outline.expect
index 3854c37..bffcb5f 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic
+static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
index f789104..70c0b87 100644
--- a/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/demote_closure_types.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,12 +9,12 @@
 import self as self;
 import "dart:core" as core;
 
-static method method<T extends core::Object* = dynamic>(self::method::T* a, self::method::T* b) → dynamic {
-  if(a is core::String*) {
-    () →* self::method::T* f = () → self::method::T* => a{self::method::T* & core::String* /* '*' & '*' = '*' */};
-    core::String* s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
+static method method<T extends core::Object? = dynamic>(self::method::T% a, self::method::T% b) → dynamic {
+  if(a is{ForNonNullableByDefault} core::String) {
+    () → self::method::T% f = () → self::method::T% => a{self::method::T% & core::String /* '%' & '!' = '!' */};
+    core::String s = invalid-expression "pkg/front_end/testcases/general/demote_closure_types.dart:8:17: Error: A value of type 'T' can't be assigned to a variable of type 'String'.
     String s = f();
-                ^" in f(){() →* self::method::T*} as{TypeError} core::String*;
+                ^" in f(){() → self::method::T%} as{TypeError,ForNonNullableByDefault} core::String;
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart
index 06ff79b..ad31de6 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart
+++ b/pkg/front_end/testcases/general/duplicated_bad_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 'duplicated_bad_prefix_lib1.dart' as dupe;
 import 'duplicated_bad_prefix_lib2.dart' as dupe;
 
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline.expect
index 925be87..17b7541 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'duplicated_bad_prefix_lib1.dart' as dupe;
 import 'duplicated_bad_prefix_lib2.dart' as dupe;
 
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline_modelled.expect
index 0d9e3fc..8169867 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'duplicated_bad_prefix_lib1.dart' as dupe;
 import 'duplicated_bad_prefix_lib2.dart' as dupe;
 
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect
index c5b39f8..6ec750c 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect
@@ -1,23 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: 'Dupe.a' isn't a type.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: 'Dupe.a' isn't a type.
 //   Dupe.a b;
 //   ^^^^^^
 //
@@ -28,90 +28,40 @@
 import "org-dartlang-testcase:///duplicated_bad_prefix_lib2.dart" as dupe;
 
 class Dupe#1 extends core::Object {
-  synthetic constructor •() → self::Dupe#1*
+  synthetic constructor •() → self::Dupe#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 Dupe extends core::Object {
-  synthetic constructor •() → self::Dupe*
+  synthetic constructor •() → self::Dupe
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
   field invalid-type b = null;
   field invalid-type d = 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
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self3::C*
+  synthetic constructor •() → self3::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/duplicated_bad_prefix.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.modular.expect
index c5b39f8..6ec750c 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.modular.expect
@@ -1,23 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: 'Dupe.a' isn't a type.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: 'Dupe.a' isn't a type.
 //   Dupe.a b;
 //   ^^^^^^
 //
@@ -28,90 +28,40 @@
 import "org-dartlang-testcase:///duplicated_bad_prefix_lib2.dart" as dupe;
 
 class Dupe#1 extends core::Object {
-  synthetic constructor •() → self::Dupe#1*
+  synthetic constructor •() → self::Dupe#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 Dupe extends core::Object {
-  synthetic constructor •() → self::Dupe*
+  synthetic constructor •() → self::Dupe
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
   field invalid-type b = null;
   field invalid-type d = 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
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self3::C*
+  synthetic constructor •() → self3::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/duplicated_bad_prefix.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect
index 5531431..86c7446 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect
@@ -1,19 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
@@ -24,86 +24,36 @@
 import "org-dartlang-testcase:///duplicated_bad_prefix_lib2.dart" as dupe;
 
 class Dupe#1 extends core::Object {
-  synthetic constructor •() → self::Dupe#1*
+  synthetic constructor •() → self::Dupe#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 Dupe extends core::Object {
-  synthetic constructor •() → self::Dupe*
+  synthetic constructor •() → self::Dupe
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
   field invalid-type b;
   field invalid-type d;
-  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
 }
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self3::C*
+  synthetic constructor •() → self3::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/duplicated_bad_prefix.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect
index c5b39f8..6ec750c 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect
@@ -1,23 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: 'Dupe.a' isn't a type.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: 'Dupe.a' isn't a type.
 //   Dupe.a b;
 //   ^^^^^^
 //
@@ -28,90 +28,40 @@
 import "org-dartlang-testcase:///duplicated_bad_prefix_lib2.dart" as dupe;
 
 class Dupe#1 extends core::Object {
-  synthetic constructor •() → self::Dupe#1*
+  synthetic constructor •() → self::Dupe#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 Dupe extends core::Object {
-  synthetic constructor •() → self::Dupe*
+  synthetic constructor •() → self::Dupe
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
   field invalid-type b = null;
   field invalid-type d = 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
 }
 static method main() → dynamic {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self3::C*
+  synthetic constructor •() → self3::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/duplicated_bad_prefix_lib1.dart b/pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart
index f098d3d..14a6172 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.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
+
 class C {}
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart b/pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart
index f098d3d..14a6172 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.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
+
 class C {}
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart b/pkg/front_end/testcases/general/duplicated_declarations.dart
index 9862e6f..1f60cf5 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart
+++ b/pkg/front_end/testcases/general/duplicated_declarations.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.16
+
 part "duplicated_declarations_part.dart";
 
 import 'duplicated_declarations_lib.dart' as Typedef;
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.textual_outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.textual_outline.expect
index 5f3dc6d..0af83b1 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.textual_outline.expect
@@ -1,4 +1,4 @@
-// @dart = 2.9
+// @dart = 2.16
 part "duplicated_declarations_part.dart";
 import 'duplicated_declarations_lib.dart' as Typedef;
 import 'duplicated_declarations_lib.dart' as Typedef;
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index 183d7ef..a81678e 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -1,352 +1,352 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:7:1: Error: Import directives must precede part directives.
-// Try moving the import directives before the part directives.
-// import 'duplicated_declarations_lib.dart' as Typedef;
-// ^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:9:1: Error: Import directives must precede part directives.
 // Try moving the import directives before the part directives.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:11:1: Error: Import directives must precede part directives.
+// Try moving the import directives before the part directives.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Error: 'Typedef' is already declared in this scope.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:11:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = void Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:15:1: Error: Directives must appear before any declarations.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:17:1: Error: Directives must appear before any declarations.
 // Try moving the directive before any declarations.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:19:14: Context: Previous declaration of 'OldTypedef'.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Error: 'field' is already declared in this scope.
 // var field = "2nd";
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:21:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
 // var field = "1st";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:25:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:27:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:45:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:54:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:62:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:81:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:80:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:97:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'toString' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:98:3: Error: 'values' is already declared in this scope.
 //   values,
 //   ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'values' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
 // typedef Typedef = void Function();
 //         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Error: 'OldTypedef' is already declared in this scope.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Context: Previous declaration of 'OldTypedef'.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
 // var field = "3rd";
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Context: Previous declaration of 'field'.
 // var field = "2nd";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:7:1: Error: The part-of directive must be the only directive in a part.
-// Try removing the other directives, or moving them to the library for which this is a part.
-// import 'duplicated_declarations_lib.dart' as Typedef;
-// ^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:9:1: Error: The part-of directive must be the only directive in a part.
 // Try removing the other directives, or moving them to the library for which this is a part.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
-// typedef Typedef = Object Function();
-//         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Context: Previous declaration of 'Typedef'.
-// typedef Typedef = void Function();
-//         ^^^^^^^
-//
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:1: Error: The part-of directive must be the only directive in a part.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:1: Error: The part-of directive must be the only directive in a part.
 // Try removing the other directives, or moving them to the library for which this is a part.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:1: Error: The part-of directive must be the only directive in a part.
+// Try removing the other directives, or moving them to the library for which this is a part.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Context: Previous declaration of 'OldTypedef'.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
 // var field = 4;
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
 // var field = "3rd";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:5: Error: 'field' is already declared in this scope.
 // var field = 5.0;
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Context: Previous declaration of 'field'.
 // var field = 4;
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:35:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:37:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:43:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:52:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:48:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:60:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:56:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:69:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:71:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:74:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:78:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:77:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:86:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:88:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:7:46: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:9:46: Error: 'Typedef' is already declared in this scope.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 //                                              ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Error: 'C' isn't a type.
 // class Sub extends C {
 //                   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Context: This isn't a type.
 // class Sub extends C {
 //                   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: Can't declare a member that conflicts with an inherited one.
 //   index,
 //   ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
 //   final int index;
 //             ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'main' because it is declared more than once.
 //   main();
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:37:9: Error: Can't use 'field' because it is declared more than once.
 //   print(field);
 //         ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:3: Error: Can't use 'C' because it is declared more than once.
 //   C.s();
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:39:5: Error: Expected identifier, but got 'this'.
 //   C.this();
 //     ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:38:6: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:40:6: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   C.();
 //      ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:40:5: Error: Expected an identifier, but got '('.
 // Try inserting an identifier before '('.
 //   C.();
 //     ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:66:17: Error: Can't use 's' because it is declared more than once.
 //   static f() => s;
 //                 ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:70:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   Sub() : super(null);
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:69:16: Error: Superclass has no method named 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:71:16: Error: Superclass has no method named 'm'.
 //   m() => super.m();
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:108:41: Error: Can't use 'toString' because it is declared more than once.
 //     "AnotherEnum.toString": AnotherEnum.toString,
 //                                         ^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:109:39: Error: Can't use 'values' because it is declared more than once.
 //     "AnotherEnum.values": AnotherEnum.values,
 //                                       ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:62:17: Error: Can't use 's' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:64:17: Error: Can't use 's' because it is declared more than once.
 //   static f() => s;
 //                 ^
 //
@@ -361,41 +361,21 @@
 import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
 
 part duplicated_declarations_part.dart;
-typedef Typedef = () →* void;
-typedef OldTypedef = () →* void;
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
 class C#4 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  constructor _() → self::C#4*
+  constructor _() → self::C#4
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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#3 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  constructor _() → self::C#3*
+  constructor _() → self::C#3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  field core::String* field = null;
-  constructor •(dynamic a) → self::C#2*
+  field core::String field = null;
+  constructor •(dynamic a) → self::C#2
     : super core::Object::•()
     ;
   method m() → dynamic {
@@ -405,38 +385,18 @@
     "1st";
   }
   static method f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations_part.dart:62:17: Error: Can't use 's' because it is declared more than once.
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations_part.dart:64:17: Error: Can't use 's' because it is declared more than once.
   static 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
 }
 class C#1 extends core::Object {
-  constructor _() → self::C#1*
+  constructor _() → self::C#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 C extends core::Object {
-  field core::String* field = null;
-  constructor •(dynamic a) → self::C*
+  field core::String field = null;
+  constructor •(dynamic a) → self::C
     : super core::Object::•()
     ;
   method m() → dynamic {
@@ -446,202 +406,117 @@
     "1st";
   }
   static method f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:66:17: Error: Can't use 's' because it is declared more than once.
   static 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
 }
 class Sub extends core::Object {
-  constructor •() → self::Sub*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:70:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   Sub() : super(null);
                ^"
     ;
   method m() → dynamic
     return super.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 Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#4*>* values = #C4;
-  static const field self::Enum#4* a = #C3;
-  const constructor •(core::int* index, core::String* name) → self::Enum#4*
+  static const field core::List<self::Enum#4> values = #C4;
+  static const field self::Enum#4 a = #C3;
+  const constructor •(core::int index, core::String name) → self::Enum#4
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#4.${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
 }
 class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#3*>* values = #C12;
-  static const field self::Enum#3* a = #C5;
-  static const field self::Enum#3* b = #C8;
-  static const field self::Enum#3* c = #C11;
-  const constructor •(core::int* index, core::String* name) → self::Enum#3*
+  static const field core::List<self::Enum#3> values = #C12;
+  static const field self::Enum#3 a = #C5;
+  static const field self::Enum#3 b = #C8;
+  static const field self::Enum#3 c = #C11;
+  const constructor •(core::int index, core::String name) → self::Enum#3
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#3.${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
 }
 class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#2*>* values = #C17;
-  static const field self::Enum#2* Enum = #C14;
-  static const field self::Enum#2* a = #C15;
-  static const field self::Enum#2* b = #C16;
-  const constructor •(core::int* index, core::String* name) → self::Enum#2*
+  static const field core::List<self::Enum#2> values = #C17;
+  static const field self::Enum#2 Enum = #C14;
+  static const field self::Enum#2 a = #C15;
+  static const field self::Enum#2 b = #C16;
+  const constructor •(core::int index, core::String name) → self::Enum#2
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#2.${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
 }
 class Enum#1 extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Enum#1*>* values = #C21;
-  static const field self::Enum#1* a = #C18;
-  static const field self::Enum#1* b = #C19;
-  static const field self::Enum#1* c = #C20;
-  const constructor •(core::int* index, core::String* name) → self::Enum#1*
+  static const field core::List<self::Enum#1> values = #C21;
+  static const field self::Enum#1 a = #C18;
+  static const field self::Enum#1 b = #C19;
+  static const field self::Enum#1 c = #C20;
+  const constructor •(core::int index, core::String name) → self::Enum#1
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#1.${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
 }
 class Enum extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Enum*>* values = #C25;
-  static const field self::Enum* Enum = #C22;
-  static const field self::Enum* a = #C23;
-  static const field self::Enum* b = #C24;
-  const constructor •(core::int* index, core::String* name) → self::Enum*
+  static const field core::List<self::Enum> values = #C25;
+  static const field self::Enum Enum = #C22;
+  static const field self::Enum a = #C23;
+  static const field self::Enum b = #C24;
+  const constructor •(core::int index, core::String name) → self::Enum
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum.${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
 }
 class AnotherEnum extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::AnotherEnum*>* values = #C35;
-  static const field self::AnotherEnum* a = #C26;
-  static const field self::AnotherEnum* b = #C27;
-  static const field self::AnotherEnum* c = #C28;
-  static const field self::AnotherEnum* _name = #C31;
-  static const field self::AnotherEnum* index = #C34;
-  const constructor •(core::int* index, core::String* name) → self::AnotherEnum*
+  static const field core::List<self::AnotherEnum> values = #C35;
+  static const field self::AnotherEnum a = #C26;
+  static const field self::AnotherEnum b = #C27;
+  static const field self::AnotherEnum c = #C28;
+  static const field self::AnotherEnum _name = #C31;
+  static const field self::AnotherEnum index = #C34;
+  const constructor •(core::int index, core::String name) → self::AnotherEnum
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
-  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 field core::String* field;
+static field core::String field;
 static method main() → dynamic {
   "1st";
 }
 static method foo() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'main' because it is declared more than once.
   main();
   ^"{dynamic}.call();
-  core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
+  core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:9: Error: Can't use 'field' because it is declared more than once.
   print(field);
         ^");
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:3: Error: Can't use 'C' because it is declared more than once.
   C.s();
   ^"{dynamic}.s();
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:39:5: Error: Expected identifier, but got 'this'.
   C.this();
     ^^^^";
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:40:5: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   C.();
     ^";
 }
 static method useAnotherEnum() → dynamic {
-  <core::String*, core::Object*>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+  <core::String, core::Object>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:108:41: Error: Can't use 'toString' because it is declared more than once.
     \"AnotherEnum.toString\": AnotherEnum.toString,
-                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:109:39: Error: Can't use 'values' because it is declared more than once.
     \"AnotherEnum.values\": AnotherEnum.values,
                                       ^^^^^^"};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 
@@ -686,8 +561,8 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///duplicated_declarations.dart:
-- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:85: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)
-- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
-- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
+- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:78:6)
+- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:91:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
index 183d7ef..a81678e 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
@@ -1,352 +1,352 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:7:1: Error: Import directives must precede part directives.
-// Try moving the import directives before the part directives.
-// import 'duplicated_declarations_lib.dart' as Typedef;
-// ^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:9:1: Error: Import directives must precede part directives.
 // Try moving the import directives before the part directives.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:11:1: Error: Import directives must precede part directives.
+// Try moving the import directives before the part directives.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Error: 'Typedef' is already declared in this scope.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:11:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = void Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:15:1: Error: Directives must appear before any declarations.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:17:1: Error: Directives must appear before any declarations.
 // Try moving the directive before any declarations.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:19:14: Context: Previous declaration of 'OldTypedef'.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Error: 'field' is already declared in this scope.
 // var field = "2nd";
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:21:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
 // var field = "1st";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:25:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:27:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:45:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:54:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:62:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:81:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:80:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:97:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'toString' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:98:3: Error: 'values' is already declared in this scope.
 //   values,
 //   ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'values' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
 // typedef Typedef = void Function();
 //         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Error: 'OldTypedef' is already declared in this scope.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Context: Previous declaration of 'OldTypedef'.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
 // var field = "3rd";
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Context: Previous declaration of 'field'.
 // var field = "2nd";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:7:1: Error: The part-of directive must be the only directive in a part.
-// Try removing the other directives, or moving them to the library for which this is a part.
-// import 'duplicated_declarations_lib.dart' as Typedef;
-// ^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:9:1: Error: The part-of directive must be the only directive in a part.
 // Try removing the other directives, or moving them to the library for which this is a part.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
-// typedef Typedef = Object Function();
-//         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Context: Previous declaration of 'Typedef'.
-// typedef Typedef = void Function();
-//         ^^^^^^^
-//
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:1: Error: The part-of directive must be the only directive in a part.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:1: Error: The part-of directive must be the only directive in a part.
 // Try removing the other directives, or moving them to the library for which this is a part.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:1: Error: The part-of directive must be the only directive in a part.
+// Try removing the other directives, or moving them to the library for which this is a part.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Context: Previous declaration of 'OldTypedef'.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
 // var field = 4;
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
 // var field = "3rd";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:5: Error: 'field' is already declared in this scope.
 // var field = 5.0;
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Context: Previous declaration of 'field'.
 // var field = 4;
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:35:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:37:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:43:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:52:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:48:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:60:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:56:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:69:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:71:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:74:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:78:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:77:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:86:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:88:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:7:46: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:9:46: Error: 'Typedef' is already declared in this scope.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 //                                              ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Error: 'C' isn't a type.
 // class Sub extends C {
 //                   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Context: This isn't a type.
 // class Sub extends C {
 //                   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: Can't declare a member that conflicts with an inherited one.
 //   index,
 //   ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
 //   final int index;
 //             ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'main' because it is declared more than once.
 //   main();
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:37:9: Error: Can't use 'field' because it is declared more than once.
 //   print(field);
 //         ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:38:3: Error: Can't use 'C' because it is declared more than once.
 //   C.s();
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:39:5: Error: Expected identifier, but got 'this'.
 //   C.this();
 //     ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:38:6: Error: Expected an identifier, but got ')'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:40:6: Error: Expected an identifier, but got ')'.
 // Try inserting an identifier before ')'.
 //   C.();
 //      ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:40:5: Error: Expected an identifier, but got '('.
 // Try inserting an identifier before '('.
 //   C.();
 //     ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:66:17: Error: Can't use 's' because it is declared more than once.
 //   static f() => s;
 //                 ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:70:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //   Sub() : super(null);
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:69:16: Error: Superclass has no method named 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:71:16: Error: Superclass has no method named 'm'.
 //   m() => super.m();
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:108:41: Error: Can't use 'toString' because it is declared more than once.
 //     "AnotherEnum.toString": AnotherEnum.toString,
 //                                         ^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:109:39: Error: Can't use 'values' because it is declared more than once.
 //     "AnotherEnum.values": AnotherEnum.values,
 //                                       ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:62:17: Error: Can't use 's' because it is declared more than once.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:64:17: Error: Can't use 's' because it is declared more than once.
 //   static f() => s;
 //                 ^
 //
@@ -361,41 +361,21 @@
 import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
 
 part duplicated_declarations_part.dart;
-typedef Typedef = () →* void;
-typedef OldTypedef = () →* void;
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
 class C#4 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  constructor _() → self::C#4*
+  constructor _() → self::C#4
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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#3 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  constructor _() → self::C#3*
+  constructor _() → self::C#3
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  field core::String* field = null;
-  constructor •(dynamic a) → self::C#2*
+  field core::String field = null;
+  constructor •(dynamic a) → self::C#2
     : super core::Object::•()
     ;
   method m() → dynamic {
@@ -405,38 +385,18 @@
     "1st";
   }
   static method f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations_part.dart:62:17: Error: Can't use 's' because it is declared more than once.
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations_part.dart:64:17: Error: Can't use 's' because it is declared more than once.
   static 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
 }
 class C#1 extends core::Object {
-  constructor _() → self::C#1*
+  constructor _() → self::C#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 C extends core::Object {
-  field core::String* field = null;
-  constructor •(dynamic a) → self::C*
+  field core::String field = null;
+  constructor •(dynamic a) → self::C
     : super core::Object::•()
     ;
   method m() → dynamic {
@@ -446,202 +406,117 @@
     "1st";
   }
   static method f() → dynamic
-    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:64:17: Error: Can't use 's' because it is declared more than once.
+    return invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:66:17: Error: Can't use 's' because it is declared more than once.
   static 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
 }
 class Sub extends core::Object {
-  constructor •() → self::Sub*
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:68:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:70:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
   Sub() : super(null);
                ^"
     ;
   method m() → dynamic
     return super.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 Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#4*>* values = #C4;
-  static const field self::Enum#4* a = #C3;
-  const constructor •(core::int* index, core::String* name) → self::Enum#4*
+  static const field core::List<self::Enum#4> values = #C4;
+  static const field self::Enum#4 a = #C3;
+  const constructor •(core::int index, core::String name) → self::Enum#4
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#4.${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
 }
 class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#3*>* values = #C12;
-  static const field self::Enum#3* a = #C5;
-  static const field self::Enum#3* b = #C8;
-  static const field self::Enum#3* c = #C11;
-  const constructor •(core::int* index, core::String* name) → self::Enum#3*
+  static const field core::List<self::Enum#3> values = #C12;
+  static const field self::Enum#3 a = #C5;
+  static const field self::Enum#3 b = #C8;
+  static const field self::Enum#3 c = #C11;
+  const constructor •(core::int index, core::String name) → self::Enum#3
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#3.${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
 }
 class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#2*>* values = #C17;
-  static const field self::Enum#2* Enum = #C14;
-  static const field self::Enum#2* a = #C15;
-  static const field self::Enum#2* b = #C16;
-  const constructor •(core::int* index, core::String* name) → self::Enum#2*
+  static const field core::List<self::Enum#2> values = #C17;
+  static const field self::Enum#2 Enum = #C14;
+  static const field self::Enum#2 a = #C15;
+  static const field self::Enum#2 b = #C16;
+  const constructor •(core::int index, core::String name) → self::Enum#2
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#2.${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
 }
 class Enum#1 extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Enum#1*>* values = #C21;
-  static const field self::Enum#1* a = #C18;
-  static const field self::Enum#1* b = #C19;
-  static const field self::Enum#1* c = #C20;
-  const constructor •(core::int* index, core::String* name) → self::Enum#1*
+  static const field core::List<self::Enum#1> values = #C21;
+  static const field self::Enum#1 a = #C18;
+  static const field self::Enum#1 b = #C19;
+  static const field self::Enum#1 c = #C20;
+  const constructor •(core::int index, core::String name) → self::Enum#1
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#1.${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
 }
 class Enum extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Enum*>* values = #C25;
-  static const field self::Enum* Enum = #C22;
-  static const field self::Enum* a = #C23;
-  static const field self::Enum* b = #C24;
-  const constructor •(core::int* index, core::String* name) → self::Enum*
+  static const field core::List<self::Enum> values = #C25;
+  static const field self::Enum Enum = #C22;
+  static const field self::Enum a = #C23;
+  static const field self::Enum b = #C24;
+  const constructor •(core::int index, core::String name) → self::Enum
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum.${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
 }
 class AnotherEnum extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::AnotherEnum*>* values = #C35;
-  static const field self::AnotherEnum* a = #C26;
-  static const field self::AnotherEnum* b = #C27;
-  static const field self::AnotherEnum* c = #C28;
-  static const field self::AnotherEnum* _name = #C31;
-  static const field self::AnotherEnum* index = #C34;
-  const constructor •(core::int* index, core::String* name) → self::AnotherEnum*
+  static const field core::List<self::AnotherEnum> values = #C35;
+  static const field self::AnotherEnum a = #C26;
+  static const field self::AnotherEnum b = #C27;
+  static const field self::AnotherEnum c = #C28;
+  static const field self::AnotherEnum _name = #C31;
+  static const field self::AnotherEnum index = #C34;
+  const constructor •(core::int index, core::String name) → self::AnotherEnum
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
-  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 field core::String* field;
+static field core::String field;
 static method main() → dynamic {
   "1st";
 }
 static method foo() → dynamic {
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'main' because it is declared more than once.
   main();
   ^"{dynamic}.call();
-  core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:35:9: Error: Can't use 'field' because it is declared more than once.
+  core::print(invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:9: Error: Can't use 'field' because it is declared more than once.
   print(field);
         ^");
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:36:3: Error: Can't use 'C' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:3: Error: Can't use 'C' because it is declared more than once.
   C.s();
   ^"{dynamic}.s();
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:37:5: Error: Expected identifier, but got 'this'.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:39:5: Error: Expected identifier, but got 'this'.
   C.this();
     ^^^^";
-  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:38:5: Error: Expected an identifier, but got '('.
+  invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:40:5: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   C.();
     ^";
 }
 static method useAnotherEnum() → dynamic {
-  <core::String*, core::Object*>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+  <core::String, core::Object>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:108:41: Error: Can't use 'toString' because it is declared more than once.
     \"AnotherEnum.toString\": AnotherEnum.toString,
-                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
+                                        ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:109:39: Error: Can't use 'values' because it is declared more than once.
     \"AnotherEnum.values\": AnotherEnum.values,
                                       ^^^^^^"};
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 
@@ -686,8 +561,8 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///duplicated_declarations.dart:
-- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:85: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)
-- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
-- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
+- Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:78:6)
+- AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:91:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index aaa7492..7746abc 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -1,301 +1,301 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:7:1: Error: Import directives must precede part directives.
-// Try moving the import directives before the part directives.
-// import 'duplicated_declarations_lib.dart' as Typedef;
-// ^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:9:1: Error: Import directives must precede part directives.
 // Try moving the import directives before the part directives.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:11:1: Error: Import directives must precede part directives.
+// Try moving the import directives before the part directives.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Error: 'Typedef' is already declared in this scope.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:11:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = void Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:15:1: Error: Directives must appear before any declarations.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:17:1: Error: Directives must appear before any declarations.
 // Try moving the directive before any declarations.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:19:14: Context: Previous declaration of 'OldTypedef'.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Error: 'field' is already declared in this scope.
 // var field = "2nd";
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:21:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
 // var field = "1st";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:25:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:27:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:43:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:45:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:42:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:44:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:48:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:44:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:46:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:52:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:54:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:48:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:50:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:60:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:62:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:56:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:58:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:41:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:43:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:77:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:79:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:81:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:78:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:80:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:76:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:78:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:97:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'toString' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'toString' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: 'values' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:98:3: Error: 'values' is already declared in this scope.
 //   values,
 //   ^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'values' is implied by this definition.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:91:6: Context: Previous declaration of 'values' is implied by this definition.
 // enum AnotherEnum {
 //      ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
 // typedef Typedef = void Function();
 //         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:13:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:15:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Error: 'OldTypedef' is already declared in this scope.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:19:16: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:21:16: Context: Previous declaration of 'OldTypedef'.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
 // var field = "3rd";
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:23:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:25:5: Context: Previous declaration of 'field'.
 // var field = "2nd";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:29:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:31:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:72:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:74:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:83:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:85:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:7:1: Error: The part-of directive must be the only directive in a part.
-// Try removing the other directives, or moving them to the library for which this is a part.
-// import 'duplicated_declarations_lib.dart' as Typedef;
-// ^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations_part.dart:9:1: Error: The part-of directive must be the only directive in a part.
 // Try removing the other directives, or moving them to the library for which this is a part.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Error: 'Typedef' is already declared in this scope.
-// typedef Typedef = Object Function();
-//         ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:9: Context: Previous declaration of 'Typedef'.
-// typedef Typedef = void Function();
-//         ^^^^^^^
-//
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:1: Error: The part-of directive must be the only directive in a part.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:11:1: Error: The part-of directive must be the only directive in a part.
 // Try removing the other directives, or moving them to the library for which this is a part.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 // ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:16: Error: 'OldTypedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Error: 'Typedef' is already declared in this scope.
+// typedef Typedef = Object Function();
+//         ^^^^^^^
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// typedef Typedef = void Function();
+//         ^^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:1: Error: The part-of directive must be the only directive in a part.
+// Try removing the other directives, or moving them to the library for which this is a part.
+// import 'duplicated_declarations_lib.dart' as Typedef;
+// ^^^^^^
+//
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:16: Error: 'OldTypedef' is already declared in this scope.
 // typedef Object OldTypedef();
 //                ^^^^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:17:14: Context: Previous declaration of 'OldTypedef'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:19:14: Context: Previous declaration of 'OldTypedef'.
 // typedef void OldTypedef();
 //              ^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
 // var field = 4;
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:21:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
 // var field = "3rd";
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:5: Error: 'field' is already declared in this scope.
 // var field = 5.0;
 //     ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:23:5: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:25:5: Context: Previous declaration of 'field'.
 // var field = 4;
 //     ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:27:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:29:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:35:1: Error: 'main' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:37:1: Error: 'main' is already declared in this scope.
 // main() {
 // ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:31:1: Context: Previous declaration of 'main'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:33:1: Context: Previous declaration of 'main'.
 // main() {
 // ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:3: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:43:3: Error: 'C' is already declared in this scope.
 //   C(a, b);
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:40:3: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:3: Context: Previous declaration of 'C'.
 //   C(a);
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Error: 'field' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:7: Error: 'field' is already declared in this scope.
 //   var field = "2nd";
 //       ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:42:7: Context: Previous declaration of 'field'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:44:7: Context: Previous declaration of 'field'.
 //   var field = "1st";
 //       ^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:50:3: Error: 'm' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:52:3: Error: 'm' is already declared in this scope.
 //   m() {
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:46:3: Context: Previous declaration of 'm'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:48:3: Context: Previous declaration of 'm'.
 //   m() {
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:58:10: Error: 's' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:60:10: Error: 's' is already declared in this scope.
 //   static s() {
 //          ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:54:10: Context: Previous declaration of 's'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:56:10: Context: Previous declaration of 's'.
 //   static s() {
 //          ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:39:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:41:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:69:7: Error: 'C' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:71:7: Error: 'C' is already declared in this scope.
 // class C {
 //       ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:65:7: Context: Previous declaration of 'C'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:67:7: Context: Previous declaration of 'C'.
 // class C {
 //       ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:74:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: Name of enum constant 'Enum' can't be the same as the enum's own name.
 //   Enum,
 //   ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:76:3: Error: 'a' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:78:3: Error: 'a' is already declared in this scope.
 //   a,
 //   ^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:3: Context: Previous declaration of 'a'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:77:3: Context: Previous declaration of 'a'.
 //   a,
 //   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:73:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:75:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:86:6: Error: 'Enum' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:88:6: Error: 'Enum' is already declared in this scope.
 // enum Enum {
 //      ^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:80:6: Context: Previous declaration of 'Enum'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:82:6: Context: Previous declaration of 'Enum'.
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:7:46: Error: 'Typedef' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:9:46: Error: 'Typedef' is already declared in this scope.
 // import 'duplicated_declarations_lib.dart' as Typedef;
 //                                              ^^^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations_part.dart:13:9: Context: Previous declaration of 'Typedef'.
+// pkg/front_end/testcases/general/duplicated_declarations_part.dart:15:9: Context: Previous declaration of 'Typedef'.
 // typedef Typedef = Object Function();
 //         ^^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Error: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Error: 'C' isn't a type.
 // class Sub extends C {
 //                   ^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:67:19: Context: This isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:69:19: Context: This isn't a type.
 // class Sub extends C {
 //                   ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:96:3: Error: Can't declare a member that conflicts with an inherited one.
 //   index,
 //   ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
 //   final int index;
 //             ^^^^^
 //
@@ -310,39 +310,19 @@
 import "org-dartlang-testcase:///duplicated_declarations_lib.dart" as Typedef;
 
 part duplicated_declarations_part.dart;
-typedef Typedef = () →* void;
-typedef OldTypedef = () →* void;
+typedef Typedef = () → void;
+typedef OldTypedef = () → void;
 class C#4 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  constructor _() → self::C#4*
+  constructor _() → self::C#4
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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#3 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  constructor _() → self::C#3*
+  constructor _() → self::C#3
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  field core::String* field;
-  constructor •(dynamic a) → self::C#2*
+  field core::String field;
+  constructor •(dynamic a) → self::C#2
     ;
   method m() → dynamic
     ;
@@ -350,34 +330,14 @@
     ;
   static method f() → 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#1 extends core::Object {
-  constructor _() → self::C#1*
+  constructor _() → self::C#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 {
-  field core::String* field;
-  constructor •(dynamic a) → self::C*
+  field core::String field;
+  constructor •(dynamic a) → self::C
     ;
   method m() → dynamic
     ;
@@ -385,165 +345,80 @@
     ;
   static method f() → 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 Sub extends core::Object {
-  constructor •() → self::Sub*
+  constructor •() → self::Sub
     ;
   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
 }
 class Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#4*>* values = const <self::Enum#4*>[self::Enum#4::a];
-  static const field self::Enum#4* a = const self::Enum#4::•(0, "a");
-  const constructor •(core::int* index, core::String* name) → self::Enum#4*
+  static const field core::List<self::Enum#4> values = const <self::Enum#4>[self::Enum#4::a];
+  static const field self::Enum#4 a = const self::Enum#4::•(0, "a");
+  const constructor •(core::int index, core::String name) → self::Enum#4
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#4.${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
 }
 class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#3*>* values = const <self::Enum#3*>[self::Enum#3::a, self::Enum#3::b, self::Enum#3::c];
-  static const field self::Enum#3* a = const self::Enum#3::•(0, "a");
-  static const field self::Enum#3* b = const self::Enum#3::•(1, "b");
-  static const field self::Enum#3* c = const self::Enum#3::•(2, "c");
-  const constructor •(core::int* index, core::String* name) → self::Enum#3*
+  static const field core::List<self::Enum#3> values = const <self::Enum#3>[self::Enum#3::a, self::Enum#3::b, self::Enum#3::c];
+  static const field self::Enum#3 a = const self::Enum#3::•(0, "a");
+  static const field self::Enum#3 b = const self::Enum#3::•(1, "b");
+  static const field self::Enum#3 c = const self::Enum#3::•(2, "c");
+  const constructor •(core::int index, core::String name) → self::Enum#3
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#3.${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
 }
 class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  static const field core::List<self::Enum#2*>* values = const <self::Enum#2*>[self::Enum#2::Enum, self::Enum#2::a, self::Enum#2::b];
-  static const field self::Enum#2* Enum = const self::Enum#2::•(0, "Enum");
-  static const field self::Enum#2* a = const self::Enum#2::•(1, "a");
-  static const field self::Enum#2* b = const self::Enum#2::•(2, "b");
-  const constructor •(core::int* index, core::String* name) → self::Enum#2*
+  static const field core::List<self::Enum#2> values = const <self::Enum#2>[self::Enum#2::Enum, self::Enum#2::a, self::Enum#2::b];
+  static const field self::Enum#2 Enum = const self::Enum#2::•(0, "Enum");
+  static const field self::Enum#2 a = const self::Enum#2::•(1, "a");
+  static const field self::Enum#2 b = const self::Enum#2::•(2, "b");
+  const constructor •(core::int index, core::String name) → self::Enum#2
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#2.${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
 }
 class Enum#1 extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Enum#1*>* values = const <self::Enum#1*>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
-  static const field self::Enum#1* a = const self::Enum#1::•(0, "a");
-  static const field self::Enum#1* b = const self::Enum#1::•(1, "b");
-  static const field self::Enum#1* c = const self::Enum#1::•(2, "c");
-  const constructor •(core::int* index, core::String* name) → self::Enum#1*
+  static const field core::List<self::Enum#1> values = const <self::Enum#1>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
+  static const field self::Enum#1 a = const self::Enum#1::•(0, "a");
+  static const field self::Enum#1 b = const self::Enum#1::•(1, "b");
+  static const field self::Enum#1 c = const self::Enum#1::•(2, "c");
+  const constructor •(core::int index, core::String name) → self::Enum#1
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum#1.${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
 }
 class Enum extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::Enum*>* values = const <self::Enum*>[self::Enum::Enum, self::Enum::a, self::Enum::b];
-  static const field self::Enum* Enum = const self::Enum::•(0, "Enum");
-  static const field self::Enum* a = const self::Enum::•(1, "a");
-  static const field self::Enum* b = const self::Enum::•(2, "b");
-  const constructor •(core::int* index, core::String* name) → self::Enum*
+  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::Enum, self::Enum::a, self::Enum::b];
+  static const field self::Enum Enum = const self::Enum::•(0, "Enum");
+  static const field self::Enum a = const self::Enum::•(1, "a");
+  static const field self::Enum b = const self::Enum::•(2, "b");
+  const constructor •(core::int index, core::String name) → self::Enum
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "Enum.${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
 }
 class AnotherEnum extends core::_Enum /*isEnum*/  {
-  static const field core::List<self::AnotherEnum*>* values = const <self::AnotherEnum*>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c, self::AnotherEnum::_name, self::AnotherEnum::index];
-  static const field self::AnotherEnum* a = const self::AnotherEnum::•(0, "a");
-  static const field self::AnotherEnum* b = const self::AnotherEnum::•(1, "b");
-  static const field self::AnotherEnum* c = const self::AnotherEnum::•(2, "c");
-  static const field self::AnotherEnum* _name = const self::AnotherEnum::•(3, "_name");
-  static const field self::AnotherEnum* index = const self::AnotherEnum::•(4, "index");
-  const constructor •(core::int* index, core::String* name) → self::AnotherEnum*
+  static const field core::List<self::AnotherEnum> values = const <self::AnotherEnum>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c, self::AnotherEnum::_name, self::AnotherEnum::index];
+  static const field self::AnotherEnum a = const self::AnotherEnum::•(0, "a");
+  static const field self::AnotherEnum b = const self::AnotherEnum::•(1, "b");
+  static const field self::AnotherEnum c = const self::AnotherEnum::•(2, "c");
+  static const field self::AnotherEnum _name = const self::AnotherEnum::•(3, "_name");
+  static const field self::AnotherEnum index = const self::AnotherEnum::•(4, "index");
+  const constructor •(core::int index, core::String name) → self::AnotherEnum
     : super core::_Enum::•(index, name)
     ;
-  method toString() → core::String*
+  method toString() → core::String
     return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
-  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 field core::String* field;
+static field core::String field;
 static method main() → dynamic
   ;
 static method foo() → dynamic
@@ -551,34 +426,34 @@
 static method useAnotherEnum() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:86:6 -> ListConstant(const <Enum#4*>[const Enum#4{_Enum.index: 0, _Enum._name: "a"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:87:3 -> InstanceConstant(const Enum#4{_Enum.index: 0, _Enum._name: "a"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:80:6 -> ListConstant(const <Enum#3*>[const Enum#3{_Enum.index: 0, _Enum._name: "a"}, const Enum#3{_Enum.index: 1, _Enum._name: "b"}, const Enum#3{_Enum.index: 2, _Enum._name: "c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:81:3 -> InstanceConstant(const Enum#3{_Enum.index: 0, _Enum._name: "a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:82:3 -> InstanceConstant(const Enum#3{_Enum.index: 1, _Enum._name: "b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:83:3 -> InstanceConstant(const Enum#3{_Enum.index: 2, _Enum._name: "c"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:73:6 -> ListConstant(const <Enum#2*>[const Enum#2{_Enum.index: 0, _Enum._name: "Enum"}, const Enum#2{_Enum.index: 1, _Enum._name: "a"}, const Enum#2{_Enum.index: 2, _Enum._name: "b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:74:3 -> InstanceConstant(const Enum#2{_Enum.index: 0, _Enum._name: "Enum"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:75:3 -> InstanceConstant(const Enum#2{_Enum.index: 1, _Enum._name: "a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:77:3 -> InstanceConstant(const Enum#2{_Enum.index: 2, _Enum._name: "b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:83:6 -> ListConstant(const <Enum#1*>[const Enum#1{_Enum.index: 0, _Enum._name: "a"}, const Enum#1{_Enum.index: 1, _Enum._name: "b"}, const Enum#1{_Enum.index: 2, _Enum._name: "c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{_Enum.index: 0, _Enum._name: "a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:85:3 -> InstanceConstant(const Enum#1{_Enum.index: 1, _Enum._name: "b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:86:3 -> InstanceConstant(const Enum#1{_Enum.index: 2, _Enum._name: "c"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:76:6 -> ListConstant(const <Enum*>[const Enum{_Enum.index: 0, _Enum._name: "Enum"}, const Enum{_Enum.index: 1, _Enum._name: "a"}, const Enum{_Enum.index: 2, _Enum._name: "b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:77:3 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "Enum"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:80:3 -> InstanceConstant(const Enum{_Enum.index: 2, _Enum._name: "b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:89:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{_Enum.index: 0, _Enum._name: "a"}, const AnotherEnum{_Enum.index: 1, _Enum._name: "b"}, const AnotherEnum{_Enum.index: 2, _Enum._name: "c"}, const AnotherEnum{_Enum.index: 3, _Enum._name: "_name"}, const AnotherEnum{_Enum.index: 4, _Enum._name: "index"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 0, _Enum._name: "a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:91:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 1, _Enum._name: "b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:92:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 2, _Enum._name: "c"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:93:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 3, _Enum._name: "_name"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:94:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 4, _Enum._name: "index"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:88:6 -> ListConstant(const <Enum#4*>[const Enum#4{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:89:3 -> InstanceConstant(const Enum#4{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:82:6 -> ListConstant(const <Enum#3*>[const Enum#3{_Enum.index: 0, _Enum._name: "a"}, const Enum#3{_Enum.index: 1, _Enum._name: "b"}, const Enum#3{_Enum.index: 2, _Enum._name: "c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:83:3 -> InstanceConstant(const Enum#3{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:84:3 -> InstanceConstant(const Enum#3{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:85:3 -> InstanceConstant(const Enum#3{_Enum.index: 2, _Enum._name: "c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:75:6 -> ListConstant(const <Enum#2*>[const Enum#2{_Enum.index: 0, _Enum._name: "Enum"}, const Enum#2{_Enum.index: 1, _Enum._name: "a"}, const Enum#2{_Enum.index: 2, _Enum._name: "b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:76:3 -> InstanceConstant(const Enum#2{_Enum.index: 0, _Enum._name: "Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:77:3 -> InstanceConstant(const Enum#2{_Enum.index: 1, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:79:3 -> InstanceConstant(const Enum#2{_Enum.index: 2, _Enum._name: "b"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:85:6 -> ListConstant(const <Enum#1*>[const Enum#1{_Enum.index: 0, _Enum._name: "a"}, const Enum#1{_Enum.index: 1, _Enum._name: "b"}, const Enum#1{_Enum.index: 2, _Enum._name: "c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:86:3 -> InstanceConstant(const Enum#1{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:87:3 -> InstanceConstant(const Enum#1{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:88:3 -> InstanceConstant(const Enum#1{_Enum.index: 2, _Enum._name: "c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:78:6 -> ListConstant(const <Enum*>[const Enum{_Enum.index: 0, _Enum._name: "Enum"}, const Enum{_Enum.index: 1, _Enum._name: "a"}, const Enum{_Enum.index: 2, _Enum._name: "b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:79:3 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:80:3 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:82:3 -> InstanceConstant(const Enum{_Enum.index: 2, _Enum._name: "b"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:91:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{_Enum.index: 0, _Enum._name: "a"}, const AnotherEnum{_Enum.index: 1, _Enum._name: "b"}, const AnotherEnum{_Enum.index: 2, _Enum._name: "c"}, const AnotherEnum{_Enum.index: 3, _Enum._name: "_name"}, const AnotherEnum{_Enum.index: 4, _Enum._name: "index"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:92:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:93:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:94:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 2, _Enum._name: "c"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:95:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 3, _Enum._name: "_name"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:96:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 4, _Enum._name: "index"})
 Extra constant evaluation: evaluated: 54, effectively constant: 24
diff --git a/pkg/front_end/testcases/general/duplicated_declarations_lib.dart b/pkg/front_end/testcases/general/duplicated_declarations_lib.dart
index e343683..87869b0 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations_lib.dart
+++ b/pkg/front_end/testcases/general/duplicated_declarations_lib.dart
@@ -1,4 +1,3 @@
-// @dart=2.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.
diff --git a/pkg/front_end/testcases/general/duplicated_declarations_part.dart b/pkg/front_end/testcases/general/duplicated_declarations_part.dart
index e99201d..b4f05c3 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations_part.dart
+++ b/pkg/front_end/testcases/general/duplicated_declarations_part.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.16
+
 part of "duplicated_declarations.dart";
 
 import 'duplicated_declarations_lib.dart' as Typedef;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart b/pkg/front_end/testcases/general/duplicated_field_initializer.dart
index 87c4882..fac68e9 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.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 A {
   int a;
   int a;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline.expect
index b4f91b8..541f502 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   int a;
   int a;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline_modelled.expect
index c10a08f..1261a73 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(this.a);
   int a;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
index 92572f2..eea284f 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,26 +13,20 @@
 //   A(this.a);
 //          ^
 //
+// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
+//   int a;
+//       ^
+//
 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
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.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() → void {
   new self::A::•(1);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
index 92572f2..eea284f 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,26 +13,20 @@
 //   A(this.a);
 //          ^
 //
+// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
+//   int a;
+//       ^
+//
 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
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.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() → void {
   new self::A::•(1);
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.outline.expect
index d561debe..422aafc 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,19 +13,9 @@
 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() → void
   ;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
index 92572f2..eea284f 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,26 +13,20 @@
 //   A(this.a);
 //          ^
 //
+// pkg/front_end/testcases/general/duplicated_field_initializer.dart:6:7: Error: Field 'a' should be initialized because its type 'int' doesn't allow null.
+//   int a;
+//       ^
+//
 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
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_field_initializer.dart:8:10: Error: Can't use 'a' because it is declared more than once.
   A(this.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() → void {
   new self::A::•(1);
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart b/pkg/front_end/testcases/general/duplicated_named_args_3.dart
index 81adc42..a33c6e1 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.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
+
 /*@testedFeatures=checks*/
 library test;
 
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline.expect
index ce3c7ec..0b2371b 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline_modelled.expect
index 320c589..461825b 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 class C {
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect
index d6d8288..84ed84d 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,20 +14,10 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method m({core::int* a = #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
+  static method m({core::int a = #C1}) → dynamic {}
 }
 static method test() → void {
   self::C::m(a: invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect
index d6d8288..84ed84d 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,20 +14,10 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method m({core::int* a = #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
+  static method m({core::int a = #C1}) → dynamic {}
 }
 static method test() → void {
   self::C::m(a: invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect
index 95272ae..85267ee 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library test;
+library test /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  static method m({core::int* a}) → dynamic
+  static method m({core::int 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
 }
 static method test() → void
   ;
diff --git a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect
index d6d8288..84ed84d 100644
--- a/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_named_args_3.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,20 +14,10 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  static method m({core::int* a = #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
+  static method m({core::int a = #C1}) → dynamic {}
 }
 static method test() → void {
   self::C::m(a: invalid-expression "pkg/front_end/testcases/general/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart b/pkg/front_end/testcases/general/dynamic_and_void.dart
index f41261e..225849b 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart
+++ b/pkg/front_end/testcases/general/dynamic_and_void.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
+
 // dynamic is treated as a name exported by dart:core.  void is not treated as a
 // name exported by dart:core.
 
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline.expect
index 6705caf..64c5d3e 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:core' show int;
 
 dynamic testDynamic() => 0;
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline_modelled.expect
index 5fcd961..fd30a61 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:core' show int;
 
 dynamic testDynamic() => 0;
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.expect
index c400faa..a2f7276 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect
index c400faa..a2f7276 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.outline.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.outline.expect
index 81787a7..450067b 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.transformed.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.transformed.expect
index c400faa..a2f7276 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
index ba503dc..8ced954 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline.expect
@@ -15,4 +15,5 @@
   _Enum,
   List,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
index 361bcb3..63ae580 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.textual_outline_modelled.expect
@@ -15,4 +15,5 @@
   _Enum,
   List,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum_names_from_core.dart:
 - E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/general/enum_names_from_core.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum_names_from_core.dart:
 - E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/general/enum_names_from_core.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum_names_from_core.dart:
 - E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/general/enum_super_constructor.dart b/pkg/front_end/testcases/general/enum_super_constructor.dart
new file mode 100644
index 0000000..6cab395
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.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.16
+
+enum A {
+  a;
+  A() : super();
+}
+
+enum B {
+  b;
+  const B() : super();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..5f6cef5
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.16
+enum A { a; A() : super(); }
+enum B { b; const B() : super(); }
+main() {}
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
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   A() : super();
+//   ^
+//
+// 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
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
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   A() : super();
+//   ^
+//
+// 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
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
new file mode 100644
index 0000000..ce1a0f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   A() : super();
+//   ^
+//
+// 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = const <self::A>[self::A::a];
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = const <self::B>[self::B::b];
+  static const field self::B b = const self::B::•(0, "b");
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   A() : super();
+//   ^
+//
+// 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'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
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 d223493..e4e75cc 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
@@ -19,7 +19,7 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -28,7 +28,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -41,8 +41,8 @@
             #L2:
             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, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [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)) {
                 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.
@@ -55,12 +55,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -68,7 +68,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect
index 75defa5..1a48ce6 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.expect
@@ -38,9 +38,9 @@
 // f() { m(T<R(<Z
 //       ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:15: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:14: Error: Expected ';' after this.
 // f() { m(T<R(<Z
-//               ^...
+//              ^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect
index 75defa5..1a48ce6 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.modular.expect
@@ -38,9 +38,9 @@
 // f() { m(T<R(<Z
 //       ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:15: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:14: Error: Expected ';' after this.
 // f() { m(T<R(<Z
-//               ^...
+//              ^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect
index 75defa5..1a48ce6 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart.weak.transformed.expect
@@ -38,9 +38,9 @@
 // f() { m(T<R(<Z
 //       ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:15: Error: Expected ';' after this.
+// pkg/front_end/testcases/general/error_recovery/issue_38415.crash_dart:1:14: Error: Expected ';' after this.
 // f() { m(T<R(<Z
-//               ^...
+//              ^
 //
 import self as self;
 
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 a49ea7c..2504ef6 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
@@ -22,9 +22,9 @@
 // }
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:9: Error: Expected ';' after this.
+//   {s A<}>
+//         ^
 //
 import self as self;
 
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 a49ea7c..2504ef6 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
@@ -22,9 +22,9 @@
 // }
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:9: Error: Expected ';' after this.
+//   {s A<}>
+//         ^
 //
 import self as self;
 
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 f0e2ebd..3684ba3 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
@@ -22,9 +22,9 @@
 // }
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:4:1: Error: Expected ';' after this.
-// }
-// ^
+// pkg/front_end/testcases/general/error_recovery/issue_39060.dart:3:9: Error: Expected ';' after this.
+//   {s A<}>
+//         ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/escape.dart b/pkg/front_end/testcases/general/escape.dart
index 711ee61..2b7ac32 100644
--- a/pkg/front_end/testcases/general/escape.dart
+++ b/pkg/front_end/testcases/general/escape.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 {
   var field;
 }
diff --git a/pkg/front_end/testcases/general/escape.dart.textual_outline.expect b/pkg/front_end/testcases/general/escape.dart.textual_outline.expect
index 8dfa85d..55378bb 100644
--- a/pkg/front_end/testcases/general/escape.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/escape.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var field;
 }
diff --git a/pkg/front_end/testcases/general/escape.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/escape.dart.textual_outline_modelled.expect
index 4e93520..d8cd132 100644
--- a/pkg/front_end/testcases/general/escape.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/escape.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   var field;
 }
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.expect b/pkg/front_end/testcases/general/escape.dart.weak.expect
index e9c05d7..a0ca3e3 100644
--- a/pkg/front_end/testcases/general/escape.dart.weak.expect
+++ b/pkg/front_end/testcases/general/escape.dart.weak.expect
@@ -1,87 +1,48 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field = null;
-  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 {
   field dynamic field = null;
-  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 C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic x) → core::bool*
+  operator ==(core::Object x) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 X extends core::Object implements self::A, self::B {
   field dynamic field = null;
-  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
 }
-static method useAsA(self::A* object) → void {
+static method useAsA(self::A object) → void {
   dynamic _ = object.{self::A::field}{dynamic};
 }
-static method useAsB(self::B* object) → void {
+static method useAsB(self::B object) → void {
   dynamic _ = object.{self::B::field}{dynamic};
   self::escape(object);
 }
 static method escape(dynamic x) → void {
   x == null ?{dynamic} x = "" : null;
   x == null ?{dynamic} x = 45 : null;
-  if(!(x is core::int*) && !(x is core::String*)) {
+  if(!(x is{ForNonNullableByDefault} core::int) && !(x is{ForNonNullableByDefault} core::String)) {
     x{dynamic}.field = 45;
   }
 }
 static method main() → dynamic {
-  self::X* object = new self::X::•();
+  self::X object = new self::X::•();
   self::useAsA(new self::A::•());
   self::useAsA(object);
   self::useAsB(new self::B::•());
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.modular.expect b/pkg/front_end/testcases/general/escape.dart.weak.modular.expect
index e9c05d7..a0ca3e3 100644
--- a/pkg/front_end/testcases/general/escape.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/escape.dart.weak.modular.expect
@@ -1,87 +1,48 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field = null;
-  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 {
   field dynamic field = null;
-  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 C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic x) → core::bool*
+  operator ==(core::Object x) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 X extends core::Object implements self::A, self::B {
   field dynamic field = null;
-  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
 }
-static method useAsA(self::A* object) → void {
+static method useAsA(self::A object) → void {
   dynamic _ = object.{self::A::field}{dynamic};
 }
-static method useAsB(self::B* object) → void {
+static method useAsB(self::B object) → void {
   dynamic _ = object.{self::B::field}{dynamic};
   self::escape(object);
 }
 static method escape(dynamic x) → void {
   x == null ?{dynamic} x = "" : null;
   x == null ?{dynamic} x = 45 : null;
-  if(!(x is core::int*) && !(x is core::String*)) {
+  if(!(x is{ForNonNullableByDefault} core::int) && !(x is{ForNonNullableByDefault} core::String)) {
     x{dynamic}.field = 45;
   }
 }
 static method main() → dynamic {
-  self::X* object = new self::X::•();
+  self::X object = new self::X::•();
   self::useAsA(new self::A::•());
   self::useAsA(object);
   self::useAsB(new self::B::•());
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.outline.expect b/pkg/front_end/testcases/general/escape.dart.weak.outline.expect
index 9efa03e..72ade55 100644
--- a/pkg/front_end/testcases/general/escape.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/escape.dart.weak.outline.expect
@@ -1,70 +1,31 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field;
-  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 {
   field dynamic field;
-  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 C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator ==(dynamic x) → core::bool*
+  operator ==(core::Object x) → 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 X extends core::Object implements self::A, self::B {
   field dynamic field;
-  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
 }
-static method useAsA(self::A* object) → void
+static method useAsA(self::A object) → void
   ;
-static method useAsB(self::B* object) → void
+static method useAsB(self::B object) → void
   ;
 static method escape(dynamic x) → void
   ;
diff --git a/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect b/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect
index e9c05d7..a0ca3e3 100644
--- a/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/escape.dart.weak.transformed.expect
@@ -1,87 +1,48 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
   field dynamic field = null;
-  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 {
   field dynamic field = null;
-  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 C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  operator ==(dynamic x) → core::bool*
+  operator ==(core::Object x) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 X extends core::Object implements self::A, self::B {
   field dynamic field = null;
-  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
 }
-static method useAsA(self::A* object) → void {
+static method useAsA(self::A object) → void {
   dynamic _ = object.{self::A::field}{dynamic};
 }
-static method useAsB(self::B* object) → void {
+static method useAsB(self::B object) → void {
   dynamic _ = object.{self::B::field}{dynamic};
   self::escape(object);
 }
 static method escape(dynamic x) → void {
   x == null ?{dynamic} x = "" : null;
   x == null ?{dynamic} x = 45 : null;
-  if(!(x is core::int*) && !(x is core::String*)) {
+  if(!(x is{ForNonNullableByDefault} core::int) && !(x is{ForNonNullableByDefault} core::String)) {
     x{dynamic}.field = 45;
   }
 }
 static method main() → dynamic {
-  self::X* object = new self::X::•();
+  self::X object = new self::X::•();
   self::useAsA(new self::A::•());
   self::useAsA(object);
   self::useAsB(new self::B::•());
diff --git a/pkg/front_end/testcases/general/export_main.dart b/pkg/front_end/testcases/general/export_main.dart
index da68add..9471d95 100644
--- a/pkg/front_end/testcases/general/export_main.dart
+++ b/pkg/front_end/testcases/general/export_main.dart
@@ -1,5 +1,5 @@
 // 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
+
 export 'hello.dart' show main;
diff --git a/pkg/front_end/testcases/general/export_main.dart.textual_outline.expect b/pkg/front_end/testcases/general/export_main.dart.textual_outline.expect
index b75de28..8692093 100644
--- a/pkg/front_end/testcases/general/export_main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/export_main.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 export 'hello.dart' show main;
diff --git a/pkg/front_end/testcases/general/export_main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/export_main.dart.textual_outline_modelled.expect
index b75de28..8692093 100644
--- a/pkg/front_end/testcases/general/export_main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/export_main.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 export 'hello.dart' show main;
diff --git a/pkg/front_end/testcases/general/export_main.dart.weak.expect b/pkg/front_end/testcases/general/export_main.dart.weak.expect
index 94479f0..00de15c 100644
--- a/pkg/front_end/testcases/general/export_main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/export_main.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "hello.dart" as hel;
 additionalExports = (hel::main)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as hel;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect b/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect
index 94479f0..00de15c 100644
--- a/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/export_main.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "hello.dart" as hel;
 additionalExports = (hel::main)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as hel;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/export_main.dart.weak.outline.expect b/pkg/front_end/testcases/general/export_main.dart.weak.outline.expect
index a6d3627..59dd42b 100644
--- a/pkg/front_end/testcases/general/export_main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/export_main.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "hello.dart" as hel;
 additionalExports = (hel::main)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as hel;
 
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/export_main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/export_main.dart.weak.transformed.expect
index 94479f0..00de15c 100644
--- a/pkg/front_end/testcases/general/export_main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/export_main.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "hello.dart" as hel;
 additionalExports = (hel::main)
@@ -6,7 +6,7 @@
 export "org-dartlang-testcase:///hello.dart" show main;
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as hel;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/export_test.dart b/pkg/front_end/testcases/general/export_test.dart
index 3d91807..13646cf 100644
--- a/pkg/front_end/testcases/general/export_test.dart
+++ b/pkg/front_end/testcases/general/export_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
+
 /// Test that exports are serialized in platform.dill.
 
 // This is somewhat brittle and we should extend this test framework to be
diff --git a/pkg/front_end/testcases/general/export_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/export_test.dart.textual_outline.expect
index 5ff65fc..069d6b3 100644
--- a/pkg/front_end/testcases/general/export_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/export_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:developer' show UserTag;
 export 'dart:core' show print;
 
diff --git a/pkg/front_end/testcases/general/export_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/export_test.dart.textual_outline_modelled.expect
index e0ddda5..c19fa80 100644
--- a/pkg/front_end/testcases/general/export_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/export_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 export 'dart:core' show print;
 import 'dart:developer' show UserTag;
 
diff --git a/pkg/front_end/testcases/general/export_test.dart.weak.expect b/pkg/front_end/testcases/general/export_test.dart.weak.expect
index 497ce03..ccdc983 100644
--- a/pkg/front_end/testcases/general/export_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/export_test.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 additionalExports = (core::print)
diff --git a/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect
index 497ce03..ccdc983 100644
--- a/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/export_test.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 additionalExports = (core::print)
diff --git a/pkg/front_end/testcases/general/export_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/export_test.dart.weak.outline.expect
index 464a785..30aa6fa 100644
--- a/pkg/front_end/testcases/general/export_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/export_test.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 additionalExports = (core::print)
diff --git a/pkg/front_end/testcases/general/export_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/export_test.dart.weak.transformed.expect
index 497ce03..ccdc983 100644
--- a/pkg/front_end/testcases/general/export_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/export_test.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 additionalExports = (core::print)
diff --git a/pkg/front_end/testcases/general/expressions.dart b/pkg/front_end/testcases/general/expressions.dart
index 28f3268..6102941 100644
--- a/pkg/front_end/testcases/general/expressions.dart
+++ b/pkg/front_end/testcases/general/expressions.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({fisk}) {
   print(fisk);
 }
@@ -41,7 +41,7 @@
   print(i++);
   print(new Object());
   print(const Object());
-  print((new List<String>.filled(2, null)).runtimeType);
+  print((new List<String>.filled(2, '')).runtimeType);
   foo(fisk: "Blorp gulp");
   f() {
     print("f was called");
diff --git a/pkg/front_end/testcases/general/expressions.dart.textual_outline.expect b/pkg/front_end/testcases/general/expressions.dart.textual_outline.expect
index 296cc43..bfda72e 100644
--- a/pkg/front_end/testcases/general/expressions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 foo({fisk}) {}
 caller(f) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/expressions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/expressions.dart.textual_outline_modelled.expect
index a6dae72..a1c989b 100644
--- a/pkg/front_end/testcases/general/expressions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 caller(f) {}
 foo({fisk}) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.expect b/pkg/front_end/testcases/general/expressions.dart.weak.expect
index 20f5b17..68b889a 100644
--- a/pkg/front_end/testcases/general/expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,8 +16,8 @@
   f{dynamic}.call();
 }
 static method main() → dynamic {
-  core::int* i = 0;
-  core::print(i =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::String*} "bad" : "good");
+  core::int i = 0;
+  core::print(i =={core::num::==}{(core::Object) → core::bool} 1 ?{core::String} "bad" : "good");
   core::print("${i}");
   core::print("'${i}'");
   core::print(" '${i}' ");
@@ -28,28 +28,28 @@
   try {
     throw "fisk";
   }
-  on core::String* catch(final core::String* e, final core::StackTrace* s) {
+  on core::String catch(final core::String e, final core::StackTrace s) {
     core::print(e);
     if(!(s == null))
       core::print(s);
   }
   for (; false; ) {
   }
-  core::List<core::String*>* list = <core::String*>["Hello, World!"];
-  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
-  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int*, core::String*) →* void};
-  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  core::List<core::String> list = <core::String>["Hello, World!"];
+  core::print(list.{core::List::[]}(i){(core::int) → core::String});
+  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int, core::String) → void};
+  core::print(list.{core::List::[]}(i){(core::int) → core::String});
   i = 87;
-  core::print(i.{core::int::unary-}(){() →* core::int*});
-  core::print(i.{core::int::~}(){() →* core::int*});
-  core::print(!(i =={core::num::==}{(core::Object*) →* core::bool*} 42));
-  core::print(i = i.{core::num::-}(1){(core::num*) →* core::int*});
-  core::print(i = i.{core::num::+}(1){(core::num*) →* core::int*});
-  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1){(core::num*) →* core::int*} in #t1);
-  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+  core::print(i.{core::int::unary-}(){() → core::int});
+  core::print(i.{core::int::~}(){() → core::int});
+  core::print(!(i =={core::num::==}{(core::Object) → core::bool} 42));
+  core::print(i = i.{core::num::-}(1){(core::num) → core::int});
+  core::print(i = i.{core::num::+}(1){(core::num) → core::int});
+  core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::-}(1){(core::num) → core::int} in #t1);
+  core::print(let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
   core::print(new core::Object::•());
   core::print(#C2);
-  core::print(core::List::filled<core::String*>(2, null).{core::Object::runtimeType}{core::Type*});
+  core::print(core::List::filled<core::String>(2, "").{core::Object::runtimeType}{core::Type});
   self::foo(fisk: "Blorp gulp");
   function f() → Null {
     core::print("f was called");
@@ -61,21 +61,21 @@
   function g([dynamic message = #C1]) → Null {
     core::print(message);
   }
-  g("Hello, World"){([dynamic]) →* Null};
+  g("Hello, World"){([dynamic]) → Null};
   self::caller(([dynamic x = #C1]) → Null {
     core::print("<anon> was called with ${x}");
   });
   function h({dynamic message = #C1}) → Null {
     core::print(message);
   }
-  h(message: "Hello, World"){({message: dynamic}) →* Null};
+  h(message: "Hello, World"){({message: dynamic}) → Null};
   self::caller(({dynamic x = #C1}) → Null {
     core::print("<anon> was called with ${x}");
   });
-  core::print(#C3.{core::Type::toString}(){() →* core::String*});
+  core::print(#C3.{core::Type::toString}(){() → core::String});
   core::print(#C3);
-  core::print(let final core::Type* #t5 = #C3 in block {
-    #t5.{core::Type::toString}(){() →* core::String*};
+  core::print(let final core::Type #t5 = #C3 in block {
+    #t5.{core::Type::toString}(){() → core::String};
   } =>#t5);
   try {
     core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
@@ -83,7 +83,7 @@
                ^^^^^^^^");
     throw "Shouldn't work";
   }
-  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
     core::print("As expected: ${e}");
   }
   core::print(core::int::parse("42"));
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect b/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect
index 20f5b17..68b889a 100644
--- a/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,8 +16,8 @@
   f{dynamic}.call();
 }
 static method main() → dynamic {
-  core::int* i = 0;
-  core::print(i =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::String*} "bad" : "good");
+  core::int i = 0;
+  core::print(i =={core::num::==}{(core::Object) → core::bool} 1 ?{core::String} "bad" : "good");
   core::print("${i}");
   core::print("'${i}'");
   core::print(" '${i}' ");
@@ -28,28 +28,28 @@
   try {
     throw "fisk";
   }
-  on core::String* catch(final core::String* e, final core::StackTrace* s) {
+  on core::String catch(final core::String e, final core::StackTrace s) {
     core::print(e);
     if(!(s == null))
       core::print(s);
   }
   for (; false; ) {
   }
-  core::List<core::String*>* list = <core::String*>["Hello, World!"];
-  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
-  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int*, core::String*) →* void};
-  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  core::List<core::String> list = <core::String>["Hello, World!"];
+  core::print(list.{core::List::[]}(i){(core::int) → core::String});
+  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int, core::String) → void};
+  core::print(list.{core::List::[]}(i){(core::int) → core::String});
   i = 87;
-  core::print(i.{core::int::unary-}(){() →* core::int*});
-  core::print(i.{core::int::~}(){() →* core::int*});
-  core::print(!(i =={core::num::==}{(core::Object*) →* core::bool*} 42));
-  core::print(i = i.{core::num::-}(1){(core::num*) →* core::int*});
-  core::print(i = i.{core::num::+}(1){(core::num*) →* core::int*});
-  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1){(core::num*) →* core::int*} in #t1);
-  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+  core::print(i.{core::int::unary-}(){() → core::int});
+  core::print(i.{core::int::~}(){() → core::int});
+  core::print(!(i =={core::num::==}{(core::Object) → core::bool} 42));
+  core::print(i = i.{core::num::-}(1){(core::num) → core::int});
+  core::print(i = i.{core::num::+}(1){(core::num) → core::int});
+  core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::-}(1){(core::num) → core::int} in #t1);
+  core::print(let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
   core::print(new core::Object::•());
   core::print(#C2);
-  core::print(core::List::filled<core::String*>(2, null).{core::Object::runtimeType}{core::Type*});
+  core::print(core::List::filled<core::String>(2, "").{core::Object::runtimeType}{core::Type});
   self::foo(fisk: "Blorp gulp");
   function f() → Null {
     core::print("f was called");
@@ -61,21 +61,21 @@
   function g([dynamic message = #C1]) → Null {
     core::print(message);
   }
-  g("Hello, World"){([dynamic]) →* Null};
+  g("Hello, World"){([dynamic]) → Null};
   self::caller(([dynamic x = #C1]) → Null {
     core::print("<anon> was called with ${x}");
   });
   function h({dynamic message = #C1}) → Null {
     core::print(message);
   }
-  h(message: "Hello, World"){({message: dynamic}) →* Null};
+  h(message: "Hello, World"){({message: dynamic}) → Null};
   self::caller(({dynamic x = #C1}) → Null {
     core::print("<anon> was called with ${x}");
   });
-  core::print(#C3.{core::Type::toString}(){() →* core::String*});
+  core::print(#C3.{core::Type::toString}(){() → core::String});
   core::print(#C3);
-  core::print(let final core::Type* #t5 = #C3 in block {
-    #t5.{core::Type::toString}(){() →* core::String*};
+  core::print(let final core::Type #t5 = #C3 in block {
+    #t5.{core::Type::toString}(){() → core::String};
   } =>#t5);
   try {
     core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
@@ -83,7 +83,7 @@
                ^^^^^^^^");
     throw "Shouldn't work";
   }
-  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
     core::print("As expected: ${e}");
   }
   core::print(core::int::parse("42"));
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.outline.expect b/pkg/front_end/testcases/general/expressions.dart.weak.outline.expect
index 721ce9d..05986f3 100644
--- a/pkg/front_end/testcases/general/expressions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 static method foo({dynamic fisk}) → dynamic
diff --git a/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect
index 3569966..83bc1a9 100644
--- a/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/expressions.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,8 +16,8 @@
   f{dynamic}.call();
 }
 static method main() → dynamic {
-  core::int* i = 0;
-  core::print(i =={core::num::==}{(core::Object*) →* core::bool*} 1 ?{core::String*} "bad" : "good");
+  core::int i = 0;
+  core::print(i =={core::num::==}{(core::Object) → core::bool} 1 ?{core::String} "bad" : "good");
   core::print("${i}");
   core::print("'${i}'");
   core::print(" '${i}' ");
@@ -28,28 +28,28 @@
   try {
     throw "fisk";
   }
-  on core::String* catch(final core::String* e, final core::StackTrace* s) {
+  on core::String catch(final core::String e, final core::StackTrace s) {
     core::print(e);
     if(!(s == null))
       core::print(s);
   }
   for (; false; ) {
   }
-  core::List<core::String*>* list = core::_GrowableList::_literal1<core::String*>("Hello, World!");
-  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
-  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int*, core::String*) →* void};
-  core::print(list.{core::List::[]}(i){(core::int*) →* core::String*});
+  core::List<core::String> list = core::_GrowableList::_literal1<core::String>("Hello, World!");
+  core::print(list.{core::List::[]}(i){(core::int) → core::String});
+  list.{core::List::[]=}(i, "Hello, Brave New World!"){(core::int, core::String) → void};
+  core::print(list.{core::List::[]}(i){(core::int) → core::String});
   i = 87;
-  core::print(i.{core::int::unary-}(){() →* core::int*});
-  core::print(i.{core::int::~}(){() →* core::int*});
-  core::print(!(i =={core::num::==}{(core::Object*) →* core::bool*} 42));
-  core::print(i = i.{core::num::-}(1){(core::num*) →* core::int*});
-  core::print(i = i.{core::num::+}(1){(core::num*) →* core::int*});
-  core::print(let final core::int* #t1 = i in let final core::int* #t2 = i = #t1.{core::num::-}(1){(core::num*) →* core::int*} in #t1);
-  core::print(let final core::int* #t3 = i in let final core::int* #t4 = i = #t3.{core::num::+}(1){(core::num*) →* core::int*} in #t3);
+  core::print(i.{core::int::unary-}(){() → core::int});
+  core::print(i.{core::int::~}(){() → core::int});
+  core::print(!(i =={core::num::==}{(core::Object) → core::bool} 42));
+  core::print(i = i.{core::num::-}(1){(core::num) → core::int});
+  core::print(i = i.{core::num::+}(1){(core::num) → core::int});
+  core::print(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::-}(1){(core::num) → core::int} in #t1);
+  core::print(let final core::int #t3 = i in let final core::int #t4 = i = #t3.{core::num::+}(1){(core::num) → core::int} in #t3);
   core::print(new core::Object::•());
   core::print(#C2);
-  core::print(core::_List::•<core::String*>(2).{core::Object::runtimeType}{core::Type*});
+  core::print(core::_List::filled<core::String>(2, "").{core::Object::runtimeType}{core::Type});
   self::foo(fisk: "Blorp gulp");
   function f() → Null {
     core::print("f was called");
@@ -61,21 +61,21 @@
   function g([dynamic message = #C1]) → Null {
     core::print(message);
   }
-  g("Hello, World"){([dynamic]) →* Null};
+  g("Hello, World"){([dynamic]) → Null};
   self::caller(([dynamic x = #C1]) → Null {
     core::print("<anon> was called with ${x}");
   });
   function h({dynamic message = #C1}) → Null {
     core::print(message);
   }
-  h(message: "Hello, World"){({message: dynamic}) →* Null};
+  h(message: "Hello, World"){({message: dynamic}) → Null};
   self::caller(({dynamic x = #C1}) → Null {
     core::print("<anon> was called with ${x}");
   });
-  core::print(#C3.{core::Type::toString}(){() →* core::String*});
+  core::print(#C3.{core::Type::toString}(){() → core::String});
   core::print(#C3);
-  core::print(let final core::Type* #t5 = #C3 in block {
-    #t5.{core::Type::toString}(){() →* core::String*};
+  core::print(let final core::Type #t5 = #C3 in block {
+    #t5.{core::Type::toString}(){() → core::String};
   } =>#t5);
   try {
     core::print(invalid-expression "pkg/front_end/testcases/general/expressions.dart:74:16: Error: Method not found: 'int.toString'.
@@ -83,7 +83,7 @@
                ^^^^^^^^");
     throw "Shouldn't work";
   }
-  on core::NoSuchMethodError* catch(final core::NoSuchMethodError* e) {
+  on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
     core::print("As expected: ${e}");
   }
   core::print(core::int::parse("42"));
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart b/pkg/front_end/testcases/general/extend_with_type_variable.dart
index 04949c2..e763f69 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.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
+
 // Regression test for issue #39774.
 
 class SuperClass {}
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline.expect
index d9154a0..0ff9f7d 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class SuperClass {}
 
 mixin Mixin<T> {}
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline_modelled.expect
index 074e1c4..975364e 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
 
 class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
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 8ead278..932b16b 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,59 +18,29 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<T extends core::Object* = dynamic> 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 Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
-abstract class _Class1&S&Mixin<T extends core::Object* = dynamic, S extends self::SuperClass*> = core::Object with self::Mixin<self::_Class1&S&Mixin::T*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T*, self::_Class1&S&Mixin::S*>*
+abstract class _Class1&S&Mixin<T extends core::Object? = dynamic, S extends self::SuperClass> = core::Object with self::Mixin<self::_Class1&S&Mixin::T%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T%, self::_Class1&S&Mixin::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 Class1<T extends core::Object* = dynamic, S extends self::SuperClass*> extends self::_Class1&S&Mixin<self::Class1::T*, self::Class1::S*> {
-  synthetic constructor •() → self::Class1<self::Class1::T*, self::Class1::S*>*
+class Class1<T extends core::Object? = dynamic, S extends self::SuperClass> extends self::_Class1&S&Mixin<self::Class1::T%, self::Class1::S> {
+  synthetic constructor •() → self::Class1<self::Class1::T%, self::Class1::S>
     : super self::_Class1&S&Mixin::•()
     ;
 }
-abstract class _Class2&SuperClass&M<T extends core::Object* = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T*>* = self::Mixin<dynamic>*> extends self::SuperClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T*, self::_Class2&SuperClass&M::M*>*
+abstract class _Class2&SuperClass&M<T extends core::Object? = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T%> = self::Mixin<dynamic>> extends self::SuperClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T%, self::_Class2&SuperClass&M::M>
     : super self::SuperClass::•()
     ;
 }
-class Class2<T extends core::Object* = dynamic, M extends self::Mixin<self::Class2::T*>* = self::Mixin<dynamic>*> extends self::_Class2&SuperClass&M<self::Class2::T*, self::Class2::M*> {
-  synthetic constructor •() → self::Class2<self::Class2::T*, self::Class2::M*>*
+class Class2<T extends core::Object? = dynamic, M extends self::Mixin<self::Class2::T%> = self::Mixin<dynamic>> extends self::_Class2&SuperClass&M<self::Class2::T%, self::Class2::M> {
+  synthetic constructor •() → self::Class2<self::Class2::T%, self::Class2::M>
     : super self::_Class2&SuperClass&M::•()
     ;
 }
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 8ead278..932b16b 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,59 +18,29 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<T extends core::Object* = dynamic> 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 Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
-abstract class _Class1&S&Mixin<T extends core::Object* = dynamic, S extends self::SuperClass*> = core::Object with self::Mixin<self::_Class1&S&Mixin::T*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T*, self::_Class1&S&Mixin::S*>*
+abstract class _Class1&S&Mixin<T extends core::Object? = dynamic, S extends self::SuperClass> = core::Object with self::Mixin<self::_Class1&S&Mixin::T%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T%, self::_Class1&S&Mixin::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 Class1<T extends core::Object* = dynamic, S extends self::SuperClass*> extends self::_Class1&S&Mixin<self::Class1::T*, self::Class1::S*> {
-  synthetic constructor •() → self::Class1<self::Class1::T*, self::Class1::S*>*
+class Class1<T extends core::Object? = dynamic, S extends self::SuperClass> extends self::_Class1&S&Mixin<self::Class1::T%, self::Class1::S> {
+  synthetic constructor •() → self::Class1<self::Class1::T%, self::Class1::S>
     : super self::_Class1&S&Mixin::•()
     ;
 }
-abstract class _Class2&SuperClass&M<T extends core::Object* = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T*>* = self::Mixin<dynamic>*> extends self::SuperClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T*, self::_Class2&SuperClass&M::M*>*
+abstract class _Class2&SuperClass&M<T extends core::Object? = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T%> = self::Mixin<dynamic>> extends self::SuperClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T%, self::_Class2&SuperClass&M::M>
     : super self::SuperClass::•()
     ;
 }
-class Class2<T extends core::Object* = dynamic, M extends self::Mixin<self::Class2::T*>* = self::Mixin<dynamic>*> extends self::_Class2&SuperClass&M<self::Class2::T*, self::Class2::M*> {
-  synthetic constructor •() → self::Class2<self::Class2::T*, self::Class2::M*>*
+class Class2<T extends core::Object? = dynamic, M extends self::Mixin<self::Class2::T%> = self::Mixin<dynamic>> extends self::_Class2&SuperClass&M<self::Class2::T%, self::Class2::M> {
+  synthetic constructor •() → self::Class2<self::Class2::T%, self::Class2::M>
     : super self::_Class2&SuperClass&M::•()
     ;
 }
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 c6193d3..c883ec7 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,56 +18,26 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::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
-}
-abstract class Mixin<T extends core::Object* = dynamic> 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 _Class1&S&Mixin<T extends core::Object* = dynamic, S extends self::SuperClass*> = core::Object with self::Mixin<self::_Class1&S&Mixin::T*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T*, self::_Class1&S&Mixin::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 Class1<T extends core::Object* = dynamic, S extends self::SuperClass*> extends self::_Class1&S&Mixin<self::Class1::T*, self::Class1::S*> {
-  synthetic constructor •() → self::Class1<self::Class1::T*, self::Class1::S*>*
+  synthetic constructor •() → self::SuperClass
     ;
 }
-abstract class _Class2&SuperClass&M<T extends core::Object* = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T*>* = self::Mixin<dynamic>*> extends self::SuperClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T*, self::_Class2&SuperClass&M::M*>*
+abstract class Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+}
+abstract class _Class1&S&Mixin<T extends core::Object? = dynamic, S extends self::SuperClass> = core::Object with self::Mixin<self::_Class1&S&Mixin::T%> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T%, self::_Class1&S&Mixin::S>
+    ;
+}
+class Class1<T extends core::Object? = dynamic, S extends self::SuperClass> extends self::_Class1&S&Mixin<self::Class1::T%, self::Class1::S> {
+  synthetic constructor •() → self::Class1<self::Class1::T%, self::Class1::S>
+    ;
+}
+abstract class _Class2&SuperClass&M<T extends core::Object? = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T%> = self::Mixin<dynamic>> extends self::SuperClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T%, self::_Class2&SuperClass&M::M>
     : super self::SuperClass::•()
     ;
 }
-class Class2<T extends core::Object* = dynamic, M extends self::Mixin<self::Class2::T*>* = self::Mixin<dynamic>*> extends self::_Class2&SuperClass&M<self::Class2::T*, self::Class2::M*> {
-  synthetic constructor •() → self::Class2<self::Class2::T*, self::Class2::M*>*
+class Class2<T extends core::Object? = dynamic, M extends self::Mixin<self::Class2::T%> = self::Mixin<dynamic>> extends self::_Class2&SuperClass&M<self::Class2::T%, self::Class2::M> {
+  synthetic constructor •() → self::Class2<self::Class2::T%, self::Class2::M>
     ;
 }
 static method main() → dynamic
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 3c6fc51..b205d46 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,59 +18,29 @@
 import "dart:core" as core;
 
 class SuperClass extends core::Object {
-  synthetic constructor •() → self::SuperClass*
+  synthetic constructor •() → self::SuperClass
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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<T extends core::Object* = dynamic> 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 Mixin<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
-abstract class _Class1&S&Mixin<T extends core::Object* = dynamic, S extends self::SuperClass*> extends core::Object implements self::Mixin<self::_Class1&S&Mixin::T*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T*, self::_Class1&S&Mixin::S*>*
+abstract class _Class1&S&Mixin<T extends core::Object? = dynamic, S extends self::SuperClass> extends core::Object implements self::Mixin<self::_Class1&S&Mixin::T%> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T%, self::_Class1&S&Mixin::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 Class1<T extends core::Object* = dynamic, S extends self::SuperClass*> extends self::_Class1&S&Mixin<self::Class1::T*, self::Class1::S*> {
-  synthetic constructor •() → self::Class1<self::Class1::T*, self::Class1::S*>*
+class Class1<T extends core::Object? = dynamic, S extends self::SuperClass> extends self::_Class1&S&Mixin<self::Class1::T%, self::Class1::S> {
+  synthetic constructor •() → self::Class1<self::Class1::T%, self::Class1::S>
     : super self::_Class1&S&Mixin::•()
     ;
 }
-abstract class _Class2&SuperClass&M<T extends core::Object* = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T*>* = self::Mixin<dynamic>*> extends self::SuperClass /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T*, self::_Class2&SuperClass&M::M*>*
+abstract class _Class2&SuperClass&M<T extends core::Object? = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T%> = self::Mixin<dynamic>> extends self::SuperClass /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T%, self::_Class2&SuperClass&M::M>
     : super self::SuperClass::•()
     ;
 }
-class Class2<T extends core::Object* = dynamic, M extends self::Mixin<self::Class2::T*>* = self::Mixin<dynamic>*> extends self::_Class2&SuperClass&M<self::Class2::T*, self::Class2::M*> {
-  synthetic constructor •() → self::Class2<self::Class2::T*, self::Class2::M*>*
+class Class2<T extends core::Object? = dynamic, M extends self::Mixin<self::Class2::T%> = self::Mixin<dynamic>> extends self::_Class2&SuperClass&M<self::Class2::T%, self::Class2::M> {
+  synthetic constructor •() → self::Class2<self::Class2::T%, self::Class2::M>
     : super self::_Class2&SuperClass&M::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/external.dart b/pkg/front_end/testcases/general/external.dart
index 5fb2c9b..fb7358b 100644
--- a/pkg/front_end/testcases/general/external.dart
+++ b/pkg/front_end/testcases/general/external.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:isolate';
 
 var subscription;
diff --git a/pkg/front_end/testcases/general/external.dart.textual_outline.expect b/pkg/front_end/testcases/general/external.dart.textual_outline.expect
index b2341af..fbcbaee 100644
--- a/pkg/front_end/testcases/general/external.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/external.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:isolate';
 
 var subscription;
diff --git a/pkg/front_end/testcases/general/external.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/external.dart.textual_outline_modelled.expect
index e4915bb..1db5cd5 100644
--- a/pkg/front_end/testcases/general/external.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/external.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:isolate';
 
 main() {}
diff --git a/pkg/front_end/testcases/general/external.dart.weak.expect b/pkg/front_end/testcases/general/external.dart.weak.expect
index 5e9b241..6586104 100644
--- a/pkg/front_end/testcases/general/external.dart.weak.expect
+++ b/pkg/front_end/testcases/general/external.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:isolate" as iso;
@@ -12,10 +12,10 @@
   self::subscription{dynamic}.cancel();
 }
 static method main() → dynamic {
-  core::String* string = core::String::fromCharCode(65);
-  iso::ReceivePort* port = iso::ReceivePort::•();
-  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<dynamic>*};
-  port.{iso::ReceivePort::sendPort}{iso::SendPort*}.{iso::SendPort::send}(string){(core::Object*) →* void};
+  core::String string = core::String::fromCharCode(65);
+  iso::ReceivePort port = iso::ReceivePort::•();
+  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<dynamic>};
+  port.{iso::ReceivePort::sendPort}{iso::SendPort}.{iso::SendPort::send}(string){(core::Object?) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/external.dart.weak.modular.expect b/pkg/front_end/testcases/general/external.dart.weak.modular.expect
index 5e9b241..6586104 100644
--- a/pkg/front_end/testcases/general/external.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/external.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:isolate" as iso;
@@ -12,10 +12,10 @@
   self::subscription{dynamic}.cancel();
 }
 static method main() → dynamic {
-  core::String* string = core::String::fromCharCode(65);
-  iso::ReceivePort* port = iso::ReceivePort::•();
-  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<dynamic>*};
-  port.{iso::ReceivePort::sendPort}{iso::SendPort*}.{iso::SendPort::send}(string){(core::Object*) →* void};
+  core::String string = core::String::fromCharCode(65);
+  iso::ReceivePort port = iso::ReceivePort::•();
+  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<dynamic>};
+  port.{iso::ReceivePort::sendPort}{iso::SendPort}.{iso::SendPort::send}(string){(core::Object?) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/external.dart.weak.outline.expect b/pkg/front_end/testcases/general/external.dart.weak.outline.expect
index 1c44d50..2b7b111 100644
--- a/pkg/front_end/testcases/general/external.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/external.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "dart:isolate";
diff --git a/pkg/front_end/testcases/general/external.dart.weak.transformed.expect b/pkg/front_end/testcases/general/external.dart.weak.transformed.expect
index 5e9b241..6586104 100644
--- a/pkg/front_end/testcases/general/external.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/external.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:isolate" as iso;
@@ -12,10 +12,10 @@
   self::subscription{dynamic}.cancel();
 }
 static method main() → dynamic {
-  core::String* string = core::String::fromCharCode(65);
-  iso::ReceivePort* port = iso::ReceivePort::•();
-  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<dynamic>*};
-  port.{iso::ReceivePort::sendPort}{iso::SendPort*}.{iso::SendPort::send}(string){(core::Object*) →* void};
+  core::String string = core::String::fromCharCode(65);
+  iso::ReceivePort port = iso::ReceivePort::•();
+  self::subscription = port.{iso::ReceivePort::listen}(#C1){((dynamic) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<dynamic>};
+  port.{iso::ReceivePort::sendPort}{iso::SendPort}.{iso::SendPort::send}(string){(core::Object?) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/external_import.dart b/pkg/front_end/testcases/general/external_import.dart
index d37c860..962f6de 100644
--- a/pkg/front_end/testcases/general/external_import.dart
+++ b/pkg/front_end/testcases/general/external_import.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-ext:here';
 import 'dart-ext:foo/../there';
 import 'dart-ext:/usr/local/somewhere';
diff --git a/pkg/front_end/testcases/general/external_import.dart.textual_outline.expect b/pkg/front_end/testcases/general/external_import.dart.textual_outline.expect
index 312d71b..e1f051e 100644
--- a/pkg/front_end/testcases/general/external_import.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart-ext:here';
 import 'dart-ext:foo/../there';
 import 'dart-ext:/usr/local/somewhere';
diff --git a/pkg/front_end/testcases/general/external_import.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/external_import.dart.textual_outline_modelled.expect
index 6ce2c47..29aa279 100644
--- a/pkg/front_end/testcases/general/external_import.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart-ext:/usr/local/somewhere';
 import 'dart-ext:foo/../there';
 import 'dart-ext:here';
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.expect b/pkg/front_end/testcases/general/external_import.dart.weak.expect
index 0d7662f..1b3d235 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.expect
@@ -1,21 +1,21 @@
 @#C2
 @#C4
 @#C6
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:5:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:6:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
@@ -37,5 +37,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///external_import.dart:
-- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:109:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect b/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect
index 0d7662f..1b3d235 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.modular.expect
@@ -1,21 +1,21 @@
 @#C2
 @#C4
 @#C6
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:5:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:6:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
@@ -37,5 +37,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///external_import.dart:
-- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:109:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect b/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
index 2556da5..6770a82 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.outline.expect
@@ -1,21 +1,21 @@
 @dart._internal::ExternalName::•("dart-ext:here")
 @dart._internal::ExternalName::•("dart-ext:foo/../there")
 @dart._internal::ExternalName::•("dart-ext:/usr/local/somewhere")
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:5:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:6:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
diff --git a/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect b/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
index 0d7662f..1b3d235 100644
--- a/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/external_import.dart.weak.transformed.expect
@@ -1,21 +1,21 @@
 @#C2
 @#C4
 @#C6
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:5:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:here';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:8:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:6:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:foo/../there';
 // ^
 //
-// pkg/front_end/testcases/general/external_import.dart:9:1: Error: Dart native extensions are no longer supported.
+// pkg/front_end/testcases/general/external_import.dart:7:1: Error: Dart native extensions are no longer supported.
 // Migrate to using FFI instead (https://dart.dev/guides/libraries/c-interop)
 // import 'dart-ext:/usr/local/somewhere';
 // ^
@@ -37,5 +37,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///external_import.dart:
-- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:109:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/external_method.dart b/pkg/front_end/testcases/general/external_method.dart
index 05f0de4..976d23b 100644
--- a/pkg/front_end/testcases/general/external_method.dart
+++ b/pkg/front_end/testcases/general/external_method.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
+
 external void externalMethod();
 
 class Class {
diff --git a/pkg/front_end/testcases/general/external_method.dart.textual_outline.expect b/pkg/front_end/testcases/general/external_method.dart.textual_outline.expect
index c32b52a..a36e380 100644
--- a/pkg/front_end/testcases/general/external_method.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/external_method.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 external void externalMethod();
 
 class Class {
diff --git a/pkg/front_end/testcases/general/external_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/external_method.dart.textual_outline_modelled.expect
index be73ec2..b902ad8 100644
--- a/pkg/front_end/testcases/general/external_method.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/external_method.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   external void externalMethod();
 }
diff --git a/pkg/front_end/testcases/general/external_method.dart.weak.expect b/pkg/front_end/testcases/general/external_method.dart.weak.expect
index 323ca66..e22e596 100644
--- a/pkg/front_end/testcases/general/external_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general/external_method.dart.weak.expect
@@ -1,22 +1,12 @@
-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::•()
     ;
   external method externalMethod() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 externalMethod() → void;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect b/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect
index 323ca66..e22e596 100644
--- a/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/external_method.dart.weak.modular.expect
@@ -1,22 +1,12 @@
-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::•()
     ;
   external method externalMethod() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 externalMethod() → void;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/external_method.dart.weak.outline.expect b/pkg/front_end/testcases/general/external_method.dart.weak.outline.expect
index fe16ab0..baf6bae 100644
--- a/pkg/front_end/testcases/general/external_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/external_method.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-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
     ;
   external method externalMethod() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 externalMethod() → void;
 static method main() → void
diff --git a/pkg/front_end/testcases/general/external_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general/external_method.dart.weak.transformed.expect
index 323ca66..e22e596 100644
--- a/pkg/front_end/testcases/general/external_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/external_method.dart.weak.transformed.expect
@@ -1,22 +1,12 @@
-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::•()
     ;
   external method externalMethod() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 externalMethod() → void;
 static method main() → void {}
diff --git a/pkg/front_end/testcases/general/fallthrough.dart b/pkg/front_end/testcases/general/fallthrough.dart
index 44d38e8..141c751 100644
--- a/pkg/front_end/testcases/general/fallthrough.dart
+++ b/pkg/front_end/testcases/general/fallthrough.dart
@@ -1,7 +1,9 @@
 // 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
+
 void main(List<String> args) {
   var x = args.length;
   switch (x) {
diff --git a/pkg/front_end/testcases/general/fallthrough.dart.weak.expect b/pkg/front_end/testcases/general/fallthrough.dart.weak.expect
index 4348081..8e005ce 100644
--- a/pkg/front_end/testcases/general/fallthrough.dart.weak.expect
+++ b/pkg/front_end/testcases/general/fallthrough.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/fallthrough.dart:8:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/general/fallthrough.dart:10:5: Error: Switch case may fall through to the next case.
 //     case 3:
 //     ^
 //
-// pkg/front_end/testcases/general/fallthrough.dart:12:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/general/fallthrough.dart:14:5: Error: Switch case may fall through to the next case.
 //     case 6:
 //     ^
 //
@@ -21,7 +21,7 @@
     case #C1:
       {
         x = 4;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 8);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 10);
       }
     #L3:
     case #C2:
@@ -38,7 +38,7 @@
         else {
           return;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 12);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 14);
       }
     #L5:
     case #C5:
diff --git a/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect b/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect
index 4348081..8e005ce 100644
--- a/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/fallthrough.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/fallthrough.dart:8:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/general/fallthrough.dart:10:5: Error: Switch case may fall through to the next case.
 //     case 3:
 //     ^
 //
-// pkg/front_end/testcases/general/fallthrough.dart:12:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/general/fallthrough.dart:14:5: Error: Switch case may fall through to the next case.
 //     case 6:
 //     ^
 //
@@ -21,7 +21,7 @@
     case #C1:
       {
         x = 4;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 8);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 10);
       }
     #L3:
     case #C2:
@@ -38,7 +38,7 @@
         else {
           return;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 12);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 14);
       }
     #L5:
     case #C5:
diff --git a/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect b/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect
index 4348081..8e005ce 100644
--- a/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/fallthrough.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/fallthrough.dart:8:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/general/fallthrough.dart:10:5: Error: Switch case may fall through to the next case.
 //     case 3:
 //     ^
 //
-// pkg/front_end/testcases/general/fallthrough.dart:12:5: Error: Switch case may fall through to the next case.
+// pkg/front_end/testcases/general/fallthrough.dart:14:5: Error: Switch case may fall through to the next case.
 //     case 6:
 //     ^
 //
@@ -21,7 +21,7 @@
     case #C1:
       {
         x = 4;
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 8);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 10);
       }
     #L3:
     case #C2:
@@ -38,7 +38,7 @@
         else {
           return;
         }
-        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 12);
+        throw new core::FallThroughError::_create("org-dartlang-testcase:///fallthrough.dart", 14);
       }
     #L5:
     case #C5:
diff --git a/pkg/front_end/testcases/general/fibonacci.dart b/pkg/front_end/testcases/general/fibonacci.dart
index 8f48278..e1ab1d5 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart
+++ b/pkg/front_end/testcases/general/fibonacci.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
+
 int fibonacci(int n) {
   if (n < 2) return n;
   return fibonacci(n - 1) + fibonacci(n - 2);
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.textual_outline.expect b/pkg/front_end/testcases/general/fibonacci.dart.textual_outline.expect
index 5084461..178655b 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 int fibonacci(int n) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/fibonacci.dart.textual_outline_modelled.expect
index 5084461..178655b 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 int fibonacci(int n) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.expect
index df2b7da..9efbdbe 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.weak.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method fibonacci(core::int* n) → core::int* {
-  if(n.{core::num::<}(2){(core::num*) →* core::bool*})
+static method fibonacci(core::int n) → core::int {
+  if(n.{core::num::<}(2){(core::num) → core::bool})
     return n;
-  return self::fibonacci(n.{core::num::-}(1){(core::num*) →* core::int*}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num*) →* core::int*})){(core::num*) →* core::int*};
+  return self::fibonacci(n.{core::num::-}(1){(core::num) → core::int}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num) → core::int})){(core::num) → core::int};
 }
 static method main() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(20){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (core::int i = 0; i.{core::num::<}(20){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(self::fibonacci(i));
   }
 }
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect
index df2b7da..9efbdbe 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.modular.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method fibonacci(core::int* n) → core::int* {
-  if(n.{core::num::<}(2){(core::num*) →* core::bool*})
+static method fibonacci(core::int n) → core::int {
+  if(n.{core::num::<}(2){(core::num) → core::bool})
     return n;
-  return self::fibonacci(n.{core::num::-}(1){(core::num*) →* core::int*}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num*) →* core::int*})){(core::num*) →* core::int*};
+  return self::fibonacci(n.{core::num::-}(1){(core::num) → core::int}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num) → core::int})){(core::num) → core::int};
 }
 static method main() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(20){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (core::int i = 0; i.{core::num::<}(20){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(self::fibonacci(i));
   }
 }
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.outline.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.outline.expect
index 4bb744f..b3c88d3 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method fibonacci(core::int* n) → core::int*
+static method fibonacci(core::int n) → core::int
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect b/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect
index df2b7da..9efbdbe 100644
--- a/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/fibonacci.dart.weak.transformed.expect
@@ -1,14 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method fibonacci(core::int* n) → core::int* {
-  if(n.{core::num::<}(2){(core::num*) →* core::bool*})
+static method fibonacci(core::int n) → core::int {
+  if(n.{core::num::<}(2){(core::num) → core::bool})
     return n;
-  return self::fibonacci(n.{core::num::-}(1){(core::num*) →* core::int*}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num*) →* core::int*})){(core::num*) →* core::int*};
+  return self::fibonacci(n.{core::num::-}(1){(core::num) → core::int}).{core::num::+}(self::fibonacci(n.{core::num::-}(2){(core::num) → core::int})){(core::num) → core::int};
 }
 static method main() → dynamic {
-  for (core::int* i = 0; i.{core::num::<}(20){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
+  for (core::int i = 0; i.{core::num::<}(20){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
     core::print(self::fibonacci(i));
   }
 }
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart b/pkg/front_end/testcases/general/field_initializer_capture_this.dart
index 67f0935..80fe36c 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.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 {
   var f = () => x; // error
   var x;
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline.expect
index 4767f78..a0d1d0e 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   var f = () => x;
   var x;
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline_modelled.expect
index 4767f78..a0d1d0e 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   var f = () => x;
   var x;
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect
index 6307537..fffc2d4 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,22 +10,12 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+  field () → invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
   var f = () => x; // error
                 ^";
   field dynamic x = null;
-  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 {}
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect
index 6307537..fffc2d4 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,22 +10,12 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+  field () → invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
   var f = () => x; // error
                 ^";
   field dynamic x = null;
-  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 {}
diff --git a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect
index 94b2880..e3635ba 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,20 +10,10 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* invalid-type f;
+  field () → invalid-type f;
   field dynamic x;
-  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/field_initializer_capture_this.dart.weak.transformed.expect b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect
index 6307537..fffc2d4 100644
--- a/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/field_initializer_capture_this.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,22 +10,12 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field () →* invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
+  field () → invalid-type f = () → invalid-type => invalid-expression "pkg/front_end/testcases/general/field_initializer_capture_this.dart:6:17: Error: Can't access 'this' in a field initializer to read 'x'.
   var f = () => x; // error
                 ^";
   field dynamic x = null;
-  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 {}
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart b/pkg/front_end/testcases/general/final_field_setter.dart
index 67bf016..9dcaad1 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart
+++ b/pkg/front_end/testcases/general/final_field_setter.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
+
 final int field = 42;
 void set field(int value) {}
 
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline.expect b/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline.expect
index 52f2149..08e9a6b 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 final int field = 42;
 void set field(int value) {}
 
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline_modelled.expect
index cb8e1ee..41e7dd1 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   final int field = 42;
   void set field(int value) {}
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.weak.expect b/pkg/front_end/testcases/general/final_field_setter.dart.weak.expect
index b2023bc..42ae9ff 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.weak.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  final field core::int* field = 42;
-  synthetic constructor •() → self::Class*
+  final field core::int field = 42;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  set field(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 field(core::int value) → void {}
 }
-static final field core::int* field = 42;
-static set field(core::int* value) → void {}
+static final field core::int field = 42;
+static set field(core::int value) → void {}
 static method main() → dynamic {
   self::field = self::field;
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   c.{self::Class::field} = self::field;
 }
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect b/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect
index b2023bc..42ae9ff 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.weak.modular.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  final field core::int* field = 42;
-  synthetic constructor •() → self::Class*
+  final field core::int field = 42;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  set field(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 field(core::int value) → void {}
 }
-static final field core::int* field = 42;
-static set field(core::int* value) → void {}
+static final field core::int field = 42;
+static set field(core::int value) → void {}
 static method main() → dynamic {
   self::field = self::field;
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   c.{self::Class::field} = self::field;
 }
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.weak.outline.expect b/pkg/front_end/testcases/general/final_field_setter.dart.weak.outline.expect
index e26476e..801d8e0 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  final field core::int* field;
-  synthetic constructor •() → self::Class*
+  final field core::int field;
+  synthetic constructor •() → self::Class
     ;
-  set field(core::int* value) → void
+  set field(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 final field core::int* field;
-static set field(core::int* value) → void
+static final field core::int field;
+static set field(core::int value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/final_field_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/final_field_setter.dart.weak.transformed.expect
index b2023bc..42ae9ff 100644
--- a/pkg/front_end/testcases/general/final_field_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/final_field_setter.dart.weak.transformed.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  final field core::int* field = 42;
-  synthetic constructor •() → self::Class*
+  final field core::int field = 42;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  set field(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 field(core::int value) → void {}
 }
-static final field core::int* field = 42;
-static set field(core::int* value) → void {}
+static final field core::int field = 42;
+static set field(core::int value) → void {}
 static method main() → dynamic {
   self::field = self::field;
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   c.{self::Class::field} = self::field;
 }
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart b/pkg/front_end/testcases/general/flutter_issue64155.dart
index 4fddf45..e1c1251 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart
+++ b/pkg/front_end/testcases/general/flutter_issue64155.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
+
 mixin TestMixin<R, T> {
   Future<T> test(Future<R> fetch) async {
     final response = await fetch;
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 cae05ae..0dcf16e 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
@@ -14,12 +14,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::TestMixin::R* response = _in::unsafeCast<self::TestMixin::R*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::TestMixin::R* response = _in::unsafeCast<self::TestMixin::R*>(:result_or_exception);
           self::TestMixin::T* result;
           if(response is self::Response<dynamic>*) {
             result = response{self::TestMixin::R* & self::Response<dynamic>* /* '*' & '*' = '*' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} self::TestMixin::T*;
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -116,18 +116,18 @@
   method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<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;
+    core::String? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::Response<core::String*>* response = _in::unsafeCast<self::Response<core::String*>*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::Response<core::String*>* response = _in::unsafeCast<self::Response<core::String*>*>(:result_or_exception);
           core::String* result;
           if(response is self::Response<dynamic>*) {
             result = response{self::Response<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
@@ -146,7 +146,7 @@
           :return_value = result;
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -154,7 +154,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -185,18 +185,18 @@
   method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<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;
+    core::String? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::PagingResponse<core::String*>* response = _in::unsafeCast<self::PagingResponse<core::String*>*>(:result);
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::PagingResponse<core::String*>* response = _in::unsafeCast<self::PagingResponse<core::String*>*>(:result_or_exception);
           core::String* result;
           if(response is self::Response<dynamic>*) {
             result = response{self::PagingResponse<core::String*>*}.{self::Response::data}{dynamic} as{TypeError,ForDynamic} core::String*;
@@ -215,7 +215,7 @@
           :return_value = result;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -223,7 +223,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart b/pkg/front_end/testcases/general/for_in_scope.dart
index 7a453a7..86fb4cf 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart
+++ b/pkg/front_end/testcases/general/for_in_scope.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(List<String> arguments) {
   for (String arguments in arguments) {
     print(arguments);
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline.expect b/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline.expect
index a3d2c6a..24765f4 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main(List<String> arguments) {}
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline_modelled.expect
index a3d2c6a..24765f4 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main(List<String> arguments) {}
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.weak.expect b/pkg/front_end/testcases/general/for_in_scope.dart.weak.expect
index 78f359e..2fbcf78 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main(core::List<core::String*>* arguments) → dynamic {
-  for (core::String* arguments in arguments) {
+static method main(core::List<core::String> arguments) → dynamic {
+  for (core::String arguments in arguments) {
     core::print(arguments);
   }
 }
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect
index 78f359e..2fbcf78 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main(core::List<core::String*>* arguments) → dynamic {
-  for (core::String* arguments in arguments) {
+static method main(core::List<core::String> arguments) → dynamic {
+  for (core::String arguments in arguments) {
     core::print(arguments);
   }
 }
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.weak.outline.expect b/pkg/front_end/testcases/general/for_in_scope.dart.weak.outline.expect
index d20fd29e..fcfe35c 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.weak.outline.expect
@@ -1,6 +1,6 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main(core::List<core::String*>* arguments) → dynamic
+static method main(core::List<core::String> arguments) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/for_in_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/for_in_scope.dart.weak.transformed.expect
index 9107472..bdfa0e5 100644
--- a/pkg/front_end/testcases/general/for_in_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/for_in_scope.dart.weak.transformed.expect
@@ -1,12 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method main(core::List<core::String*>* arguments) → dynamic {
+static method main(core::List<core::String> arguments) → dynamic {
   {
-    core::Iterator<core::String*>* :sync-for-iterator = arguments.{core::Iterable::iterator}{core::Iterator<core::String*>*};
+    core::Iterator<core::String> :sync-for-iterator = arguments.{core::Iterable::iterator}{core::Iterator<core::String>};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-      core::String* arguments = :sync-for-iterator.{core::Iterator::current}{core::String*};
+      core::String arguments = :sync-for-iterator.{core::Iterator::current}{core::String};
       {
         core::print(arguments);
       }
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart b/pkg/front_end/testcases/general/for_in_without_declaration.dart
index 4810092..e6c2f23 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart
@@ -1,20 +1,20 @@
 // 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
-bool topLevelField;
+
+bool topLevelField = true;
 var untypedTopLevelField;
 
 class Super {
-  int superInstanceField;
+  int superInstanceField = 0;
   var untypedSuperInstanceField;
 }
 
 class C extends Super {
-  int instanceField;
+  int instanceField = 0;
   var untypedInstanceField;
 
-  static double staticField;
+  static double staticField = 0.0;
 
   static var untypedStaticField;
 
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline.expect
index a983431..05606c6 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
-bool topLevelField;
+bool topLevelField = true;
 var untypedTopLevelField;
 
 class Super {
-  int superInstanceField;
+  int superInstanceField = 0;
   var untypedSuperInstanceField;
 }
 
 class C extends Super {
-  int instanceField;
+  int instanceField = 0;
   var untypedInstanceField;
-  static double staticField;
+  static double staticField = 0.0;
   static var untypedStaticField;
   m() {}
 }
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline_modelled.expect
index 8a3599a..5b1b926 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.textual_outline_modelled.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
-bool topLevelField;
+bool topLevelField = true;
 
 class C extends Super {
-  int instanceField;
+  int instanceField = 0;
   m() {}
-  static double staticField;
+  static double staticField = 0.0;
   static var untypedStaticField;
   var untypedInstanceField;
 }
 
 class Super {
-  int superInstanceField;
+  int superInstanceField = 0;
   var untypedSuperInstanceField;
 }
 
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
index ba021d0..f71d985 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -70,65 +70,55 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  field core::int* superInstanceField = null;
+  field core::int superInstanceField = 0;
   field dynamic untypedSuperInstanceField = null;
-  synthetic constructor •() → self::Super*
+  synthetic 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 C extends self::Super {
-  field core::int* instanceField = null;
+  field core::int instanceField = 0;
   field dynamic untypedInstanceField = null;
-  static field core::double* staticField = null;
+  static field core::double staticField = 0.0;
   static field dynamic untypedStaticField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::Super::•()
     ;
   method m() → dynamic {
-    core::String* local;
+    core::String local;
     dynamic untypedLocal;
-    for (final core::String* #t1 in <core::String*>[]) {
+    for (final core::String #t1 in <core::String>[]) {
       local = #t1;
     }
     for (final dynamic #t2 in <dynamic>[]) {
       untypedLocal = #t2;
     }
-    for (final core::int* #t3 in <core::int*>[]) {
+    for (final core::int #t3 in <core::int>[]) {
       this.{self::C::instanceField} = #t3;
     }
     for (final dynamic #t4 in <dynamic>[]) {
       this.{self::C::untypedInstanceField} = #t4;
     }
-    for (final core::double* #t5 in <core::double*>[]) {
+    for (final core::double #t5 in <core::double>[]) {
       self::C::staticField = #t5;
     }
     for (final dynamic #t6 in <dynamic>[]) {
       self::C::untypedStaticField = #t6;
     }
-    for (final core::bool* #t7 in <core::bool*>[]) {
+    for (final core::bool #t7 in <core::bool>[]) {
       self::topLevelField = #t7;
     }
     for (final dynamic #t8 in <dynamic>[]) {
       self::untypedTopLevelField = #t8;
     }
-    for (final core::int* #t9 in <core::int*>[]) {
+    for (final core::int #t9 in <core::int>[]) {
       super.{self::Super::superInstanceField} = #t9;
     }
     for (final dynamic #t10 in <dynamic>[]) {
       super.{self::Super::untypedSuperInstanceField} = #t10;
     }
-    self::C* c = new self::C::•();
-    for (final core::int* #t11 in <core::int*>[]) {
+    self::C c = new self::C::•();
+    for (final core::int #t11 in <core::int>[]) {
       c.{self::C::instanceField} = #t11;
     }
     for (final dynamic #t12 in <dynamic>[]) {
@@ -178,7 +168,7 @@
       invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
     for (var x, y in <int>[]) {
          ^^^";
-      for (final core::int* #t17 in <core::int*>[]) {
+      for (final core::int #t17 in <core::int>[]) {
         invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
     for (var x, y in <int>[]) {
          ^^^";
@@ -195,6 +185,6 @@
     }
   }
 }
-static field core::bool* topLevelField;
+static field core::bool topLevelField = true;
 static field dynamic untypedTopLevelField;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect
index ba021d0..f71d985 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -70,65 +70,55 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  field core::int* superInstanceField = null;
+  field core::int superInstanceField = 0;
   field dynamic untypedSuperInstanceField = null;
-  synthetic constructor •() → self::Super*
+  synthetic 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 C extends self::Super {
-  field core::int* instanceField = null;
+  field core::int instanceField = 0;
   field dynamic untypedInstanceField = null;
-  static field core::double* staticField = null;
+  static field core::double staticField = 0.0;
   static field dynamic untypedStaticField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::Super::•()
     ;
   method m() → dynamic {
-    core::String* local;
+    core::String local;
     dynamic untypedLocal;
-    for (final core::String* #t1 in <core::String*>[]) {
+    for (final core::String #t1 in <core::String>[]) {
       local = #t1;
     }
     for (final dynamic #t2 in <dynamic>[]) {
       untypedLocal = #t2;
     }
-    for (final core::int* #t3 in <core::int*>[]) {
+    for (final core::int #t3 in <core::int>[]) {
       this.{self::C::instanceField} = #t3;
     }
     for (final dynamic #t4 in <dynamic>[]) {
       this.{self::C::untypedInstanceField} = #t4;
     }
-    for (final core::double* #t5 in <core::double*>[]) {
+    for (final core::double #t5 in <core::double>[]) {
       self::C::staticField = #t5;
     }
     for (final dynamic #t6 in <dynamic>[]) {
       self::C::untypedStaticField = #t6;
     }
-    for (final core::bool* #t7 in <core::bool*>[]) {
+    for (final core::bool #t7 in <core::bool>[]) {
       self::topLevelField = #t7;
     }
     for (final dynamic #t8 in <dynamic>[]) {
       self::untypedTopLevelField = #t8;
     }
-    for (final core::int* #t9 in <core::int*>[]) {
+    for (final core::int #t9 in <core::int>[]) {
       super.{self::Super::superInstanceField} = #t9;
     }
     for (final dynamic #t10 in <dynamic>[]) {
       super.{self::Super::untypedSuperInstanceField} = #t10;
     }
-    self::C* c = new self::C::•();
-    for (final core::int* #t11 in <core::int*>[]) {
+    self::C c = new self::C::•();
+    for (final core::int #t11 in <core::int>[]) {
       c.{self::C::instanceField} = #t11;
     }
     for (final dynamic #t12 in <dynamic>[]) {
@@ -178,7 +168,7 @@
       invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
     for (var x, y in <int>[]) {
          ^^^";
-      for (final core::int* #t17 in <core::int*>[]) {
+      for (final core::int #t17 in <core::int>[]) {
         invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
     for (var x, y in <int>[]) {
          ^^^";
@@ -195,6 +185,6 @@
     }
   }
 }
-static field core::bool* topLevelField;
+static field core::bool topLevelField = true;
 static field dynamic untypedTopLevelField;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.outline.expect
index 549cac9..0936083 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Super extends core::Object {
-  field core::int* superInstanceField;
+  field core::int superInstanceField;
   field dynamic untypedSuperInstanceField;
-  synthetic constructor •() → self::Super*
+  synthetic 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 C extends self::Super {
-  field core::int* instanceField;
+  field core::int instanceField;
   field dynamic untypedInstanceField;
-  static field core::double* staticField;
+  static field core::double staticField;
   static field dynamic untypedStaticField;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
   method m() → dynamic
     ;
 }
-static field core::bool* topLevelField;
+static field core::bool topLevelField;
 static field dynamic untypedTopLevelField;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
index 88f02cf..191d1dc 100644
--- a/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/for_in_without_declaration.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -70,44 +70,34 @@
 import "dart:core" as core;
 
 class Super extends core::Object {
-  field core::int* superInstanceField = null;
+  field core::int superInstanceField = 0;
   field dynamic untypedSuperInstanceField = null;
-  synthetic constructor •() → self::Super*
+  synthetic 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 C extends self::Super {
-  field core::int* instanceField = null;
+  field core::int instanceField = 0;
   field dynamic untypedInstanceField = null;
-  static field core::double* staticField = null;
+  static field core::double staticField = 0.0;
   static field dynamic untypedStaticField = null;
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::Super::•()
     ;
   method m() → dynamic {
-    core::String* local;
+    core::String local;
     dynamic untypedLocal;
     {
-      core::Iterator<core::String*>* :sync-for-iterator = core::_GrowableList::•<core::String*>(0).{core::Iterable::iterator}{core::Iterator<core::String*>*};
+      core::Iterator<core::String> :sync-for-iterator = core::_GrowableList::•<core::String>(0).{core::Iterable::iterator}{core::Iterator<core::String>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::String* #t1 = :sync-for-iterator.{core::Iterator::current}{core::String*};
+        final core::String #t1 = :sync-for-iterator.{core::Iterator::current}{core::String};
         {
           local = #t1;
         }
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t2 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -116,16 +106,16 @@
       }
     }
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<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 core::int* #t3 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        final core::int #t3 = :sync-for-iterator.{core::Iterator::current}{core::int};
         {
           this.{self::C::instanceField} = #t3;
         }
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t4 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -134,16 +124,16 @@
       }
     }
     {
-      core::Iterator<core::double*>* :sync-for-iterator = core::_GrowableList::•<core::double*>(0).{core::Iterable::iterator}{core::Iterator<core::double*>*};
+      core::Iterator<core::double> :sync-for-iterator = core::_GrowableList::•<core::double>(0).{core::Iterable::iterator}{core::Iterator<core::double>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::double* #t5 = :sync-for-iterator.{core::Iterator::current}{core::double*};
+        final core::double #t5 = :sync-for-iterator.{core::Iterator::current}{core::double};
         {
           self::C::staticField = #t5;
         }
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t6 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -152,16 +142,16 @@
       }
     }
     {
-      core::Iterator<core::bool*>* :sync-for-iterator = core::_GrowableList::•<core::bool*>(0).{core::Iterable::iterator}{core::Iterator<core::bool*>*};
+      core::Iterator<core::bool> :sync-for-iterator = core::_GrowableList::•<core::bool>(0).{core::Iterable::iterator}{core::Iterator<core::bool>};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
-        final core::bool* #t7 = :sync-for-iterator.{core::Iterator::current}{core::bool*};
+        final core::bool #t7 = :sync-for-iterator.{core::Iterator::current}{core::bool};
         {
           self::topLevelField = #t7;
         }
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t8 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -170,16 +160,16 @@
       }
     }
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<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 core::int* #t9 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        final core::int #t9 = :sync-for-iterator.{core::Iterator::current}{core::int};
         {
           super.{self::Super::superInstanceField} = #t9;
         }
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t10 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -187,18 +177,18 @@
         }
       }
     }
-    self::C* c = new self::C::•();
+    self::C c = new self::C::•();
     {
-      core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<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 core::int* #t11 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+        final core::int #t11 = :sync-for-iterator.{core::Iterator::current}{core::int};
         {
           c.{self::C::instanceField} = #t11;
         }
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t12 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -207,7 +197,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t13 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -224,7 +214,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t14 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -237,7 +227,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t15 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -258,7 +248,7 @@
     for (main() in []) {}
          ^^^^";
       {
-        core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+        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 #t16 = :sync-for-iterator.{core::Iterator::current}{dynamic};
           {
@@ -275,9 +265,9 @@
     for (var x, y in <int>[]) {
          ^^^";
       {
-        core::Iterator<core::int*>* :sync-for-iterator = core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<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 core::int* #t17 = :sync-for-iterator.{core::Iterator::current}{core::int*};
+          final core::int #t17 = :sync-for-iterator.{core::Iterator::current}{core::int};
           {
             invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
     for (var x, y in <int>[]) {
@@ -291,7 +281,7 @@
       }
     }
     {
-      core::Iterator<dynamic>* :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>*};
+      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 #t18 = :sync-for-iterator.{core::Iterator::current}{dynamic};
         {
@@ -303,6 +293,6 @@
     }
   }
 }
-static field core::bool* topLevelField;
+static field core::bool topLevelField = true;
 static field dynamic untypedTopLevelField;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart
index c3dcc28..0245c54 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.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 {
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline.expect
index 9b2316f..c81b41e 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   dynamic operator +(covariant int a) => null;
 }
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline_modelled.expect
index a93a92a..e1eb7ad 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class C implements A, B {}
 
 class A {
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
index 6b4bf1c..43fade2 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
@@ -1,79 +1,39 @@
-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::•()
     ;
-  operator +(covariant-by-declaration core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int a) → 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 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::•()
     ;
   operator +(dynamic b) → 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 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 implements self::A, self::B {
-  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
   abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   operator +(dynamic d) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int) → dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect
index 6b4bf1c..43fade2 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.modular.expect
@@ -1,79 +1,39 @@
-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::•()
     ;
-  operator +(covariant-by-declaration core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int a) → 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 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::•()
     ;
   operator +(dynamic b) → 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 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 implements self::A, self::B {
-  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
   abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   operator +(dynamic d) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int) → dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
index 15ab476..e7de2ac 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
@@ -1,74 +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
     ;
-  operator +(covariant-by-declaration core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int 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 core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
   operator +(dynamic 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 extends core::Object implements self::A, self::B {
-  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
   abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   operator +(dynamic d) → 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 E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     ;
-  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int) → dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
index 6b4bf1c..43fade2 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
@@ -1,79 +1,39 @@
-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::•()
     ;
-  operator +(covariant-by-declaration core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int a) → 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 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::•()
     ;
   operator +(dynamic b) → 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 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 implements self::A, self::B {
-  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
   abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   operator +(dynamic d) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends self::D {
-  synthetic constructor •() → self::E*
+  synthetic constructor •() → self::E
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int*) →* dynamic */ +(covariant-by-declaration dynamic e) → dynamic
+  forwarding-stub forwarding-semi-stub operator /* signature-type: (core::int) → dynamic */ +(covariant-by-declaration dynamic e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_in_field.dart b/pkg/front_end/testcases/general/function_in_field.dart
index ccfa71b..e159579 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart
+++ b/pkg/front_end/testcases/general/function_in_field.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
-
 var x = () {
   var y = 42;
   return y;
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_in_field.dart.textual_outline.expect
index 3c1e191..48b83ef 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 var x = () {
   var y = 42;
   return y;
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_in_field.dart.textual_outline_modelled.expect
index 729f8ce..dde78ba 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 var x = () {
   var y = 42;
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.expect
index a2c6a44..3b09e8e 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::int* x = () → core::int* {
-  core::int* y = 42;
+static field () → core::int x = () → core::int {
+  core::int y = 42;
   return y;
 };
 static method main() → dynamic {
-  core::print(self::x(){() →* core::int*});
+  core::print(self::x(){() → core::int});
 }
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect
index a2c6a44..3b09e8e 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.modular.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::int* x = () → core::int* {
-  core::int* y = 42;
+static field () → core::int x = () → core::int {
+  core::int y = 42;
   return y;
 };
 static method main() → dynamic {
-  core::print(self::x(){() →* core::int*});
+  core::print(self::x(){() → core::int});
 }
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.outline.expect
index 9f1148b..78e40bc 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.outline.expect
@@ -1,7 +1,7 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::int* x;
+static field () → core::int x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect
index a2c6a44..3b09e8e 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.weak.transformed.expect
@@ -1,11 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field () →* core::int* x = () → core::int* {
-  core::int* y = 42;
+static field () → core::int x = () → core::int {
+  core::int y = 42;
   return y;
 };
 static method main() → dynamic {
-  core::print(self::x(){() →* core::int*});
+  core::print(self::x(){() → core::int});
 }
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart b/pkg/front_end/testcases/general/function_type_assignments.dart
index 366b37a..f6249ea 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart
+++ b/pkg/front_end/testcases/general/function_type_assignments.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
+
 T identity<T>(T t) => t;
 T identityObject<T extends Object>(T t) => t;
 T identityList<T extends List<T>>(T t) => t;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline.expect
index d549dfc..4e7d345 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 T identity<T>(T t) => t;
 T identityObject<T extends Object>(T t) => t;
 T identityList<T extends List<T>>(T t) => t;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline_modelled.expect
index 98ee311..260816e 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 String x = identity;
 String y = identityObject;
 String z = identityList;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect
index 0333159..da885e4 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,22 +19,22 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::String* x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+static field core::String x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
 String x = identity; // No bound
-           ^" in #C1 as{TypeError} core::String*;
-static field core::String* y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+           ^" in #C1 as{TypeError,ForNonNullableByDefault} core::String;
+static field core::String y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
  - 'Object' is from 'dart:core'.
 String y = identityObject; // Object bound
-           ^" in #C2 as{TypeError} core::String*;
-static field core::String* z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+           ^" in #C2 as{TypeError,ForNonNullableByDefault} core::String;
+static field core::String z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
  - 'List' is from 'dart:core'.
 String z = identityList; // List<T> bound
-           ^" in #C3 as{TypeError} core::String*;
-static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
+           ^" in #C3 as{TypeError,ForNonNullableByDefault} core::String;
+static method identity<T extends core::Object? = dynamic>(self::identity::T% t) → self::identity::T%
   return t;
-static method identityObject<T extends core::Object*>(self::identityObject::T* t) → self::identityObject::T*
+static method identityObject<T extends core::Object>(self::identityObject::T t) → self::identityObject::T
   return t;
-static method identityList<T extends core::List<self::identityList::T*>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
+static method identityList<T extends core::List<self::identityList::T> = core::List<dynamic>>(self::identityList::T t) → self::identityList::T
   return t;
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect
index 0333159..da885e4 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,22 +19,22 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::String* x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+static field core::String x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
 String x = identity; // No bound
-           ^" in #C1 as{TypeError} core::String*;
-static field core::String* y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+           ^" in #C1 as{TypeError,ForNonNullableByDefault} core::String;
+static field core::String y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
  - 'Object' is from 'dart:core'.
 String y = identityObject; // Object bound
-           ^" in #C2 as{TypeError} core::String*;
-static field core::String* z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+           ^" in #C2 as{TypeError,ForNonNullableByDefault} core::String;
+static field core::String z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
  - 'List' is from 'dart:core'.
 String z = identityList; // List<T> bound
-           ^" in #C3 as{TypeError} core::String*;
-static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
+           ^" in #C3 as{TypeError,ForNonNullableByDefault} core::String;
+static method identity<T extends core::Object? = dynamic>(self::identity::T% t) → self::identity::T%
   return t;
-static method identityObject<T extends core::Object*>(self::identityObject::T* t) → self::identityObject::T*
+static method identityObject<T extends core::Object>(self::identityObject::T t) → self::identityObject::T
   return t;
-static method identityList<T extends core::List<self::identityList::T*>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
+static method identityList<T extends core::List<self::identityList::T> = core::List<dynamic>>(self::identityList::T t) → self::identityList::T
   return t;
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.outline.expect
index 3d00d77..65fa998 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.outline.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static field core::String* x;
-static field core::String* y;
-static field core::String* z;
-static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
+static field core::String x;
+static field core::String y;
+static field core::String z;
+static method identity<T extends core::Object? = dynamic>(self::identity::T% t) → self::identity::T%
   ;
-static method identityObject<T extends core::Object*>(self::identityObject::T* t) → self::identityObject::T*
+static method identityObject<T extends core::Object>(self::identityObject::T t) → self::identityObject::T
   ;
-static method identityList<T extends core::List<self::identityList::T*>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
+static method identityList<T extends core::List<self::identityList::T> = core::List<dynamic>>(self::identityList::T t) → self::identityList::T
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect
index 0333159..da885e4 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,22 +19,22 @@
 import self as self;
 import "dart:core" as core;
 
-static field core::String* x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
+static field core::String x = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:11:12: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'String'.
 String x = identity; // No bound
-           ^" in #C1 as{TypeError} core::String*;
-static field core::String* y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
+           ^" in #C1 as{TypeError,ForNonNullableByDefault} core::String;
+static field core::String y = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:12:12: Error: A value of type 'T Function<T extends Object>(T)' can't be assigned to a variable of type 'String'.
  - 'Object' is from 'dart:core'.
 String y = identityObject; // Object bound
-           ^" in #C2 as{TypeError} core::String*;
-static field core::String* z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
+           ^" in #C2 as{TypeError,ForNonNullableByDefault} core::String;
+static field core::String z = invalid-expression "pkg/front_end/testcases/general/function_type_assignments.dart:13:12: Error: A value of type 'T Function<T extends List<T>>(T)' can't be assigned to a variable of type 'String'.
  - 'List' is from 'dart:core'.
 String z = identityList; // List<T> bound
-           ^" in #C3 as{TypeError} core::String*;
-static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
+           ^" in #C3 as{TypeError,ForNonNullableByDefault} core::String;
+static method identity<T extends core::Object? = dynamic>(self::identity::T% t) → self::identity::T%
   return t;
-static method identityObject<T extends core::Object*>(self::identityObject::T* t) → self::identityObject::T*
+static method identityObject<T extends core::Object>(self::identityObject::T t) → self::identityObject::T
   return t;
-static method identityList<T extends core::List<self::identityList::T*>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
+static method identityList<T extends core::List<self::identityList::T> = core::List<dynamic>>(self::identityList::T t) → self::identityList::T
   return t;
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart b/pkg/front_end/testcases/general/function_type_default_value.dart
index 9b99d51..c109f8c 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart
+++ b/pkg/front_end/testcases/general/function_type_default_value.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
-void Function({obj: Object}) x;
+
+void Function({obj: Object})? x;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.textual_outline.expect
index 58d7573..8468740 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
-void Function({obj: Object}) x;
+void Function({obj: Object})? x;
 main() {}
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.expect
index 37aef15..a1b8413 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.expect
@@ -1,25 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Expected an identifier, but got ':'.
 // Try inserting an identifier before ':'.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Can't have a default value in a function type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: 'obj' isn't a type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 import self as self;
 
-static field () →* void x;
+static field () →? void x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect
index 37aef15..a1b8413 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.modular.expect
@@ -1,25 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Expected an identifier, but got ':'.
 // Try inserting an identifier before ':'.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Can't have a default value in a function type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: 'obj' isn't a type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 import self as self;
 
-static field () →* void x;
+static field () →? void x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.outline.expect
index a4845bb..73e732a 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.outline.expect
@@ -1,22 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Expected an identifier, but got ':'.
 // Try inserting an identifier before ':'.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Can't have a default value in a function type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 import self as self;
 
-static field () →* void x;
+static field () →? void x;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.transformed.expect
index 37aef15..a1b8413 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.weak.transformed.expect
@@ -1,25 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Expected an identifier, but got ':'.
 // Try inserting an identifier before ':'.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:19: Error: Can't have a default value in a function type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                   ^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 // pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: 'obj' isn't a type.
-// void Function({obj: Object}) x;
+// void Function({obj: Object})? x;
 //                ^^^
 //
 import self as self;
 
-static field () →* void x;
+static field () →? void x;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart b/pkg/front_end/testcases/general/function_type_is_check.dart
index 57ec0ca..706ac9e 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart
+++ b/pkg/front_end/testcases/general/function_type_is_check.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
+
 import "package:expect/expect.dart" show Expect;
 
 test(f) {
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline.expect
index f102516..0f294ea 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart" show Expect;
 
 test(f) {}
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline_modelled.expect
index 123cad0..22e03b0 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart" show Expect;
 
 main() {}
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect
index 3994837..3afdee8 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.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,13 +6,13 @@
 import "package:expect/expect.dart" show Expect;
 
 static method test(dynamic f) → dynamic {
-  if(f is (core::Object*, core::StackTrace*) →* void)
+  if(f is{ForNonNullableByDefault} (core::Object, core::StackTrace) → void)
     return 1;
-  if(f is (core::Object*) →* void)
+  if(f is{ForNonNullableByDefault} (core::Object) → void)
     return 10;
-  if(f is () →* void)
+  if(f is{ForNonNullableByDefault} () → void)
     return 100;
 }
 static method main() → dynamic {
-  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object* o) → Null => null)){dynamic}.+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
+  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object o) → Null => null)){dynamic}.+(self::test((core::Object o, core::StackTrace t) → Null => null)));
 }
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.modular.expect
index 3994837..3afdee8 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.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,13 +6,13 @@
 import "package:expect/expect.dart" show Expect;
 
 static method test(dynamic f) → dynamic {
-  if(f is (core::Object*, core::StackTrace*) →* void)
+  if(f is{ForNonNullableByDefault} (core::Object, core::StackTrace) → void)
     return 1;
-  if(f is (core::Object*) →* void)
+  if(f is{ForNonNullableByDefault} (core::Object) → void)
     return 10;
-  if(f is () →* void)
+  if(f is{ForNonNullableByDefault} () → void)
     return 100;
 }
 static method main() → dynamic {
-  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object* o) → Null => null)){dynamic}.+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
+  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object o) → Null => null)){dynamic}.+(self::test((core::Object o, core::StackTrace t) → Null => null)));
 }
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.outline.expect
index f49d6de..f5858b2 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "package:expect/expect.dart" show Expect;
diff --git a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect
index 3994837..3afdee8 100644
--- a/pkg/front_end/testcases/general/function_type_is_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_is_check.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,13 +6,13 @@
 import "package:expect/expect.dart" show Expect;
 
 static method test(dynamic f) → dynamic {
-  if(f is (core::Object*, core::StackTrace*) →* void)
+  if(f is{ForNonNullableByDefault} (core::Object, core::StackTrace) → void)
     return 1;
-  if(f is (core::Object*) →* void)
+  if(f is{ForNonNullableByDefault} (core::Object) → void)
     return 10;
-  if(f is () →* void)
+  if(f is{ForNonNullableByDefault} () → void)
     return 100;
 }
 static method main() → dynamic {
-  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object* o) → Null => null)){dynamic}.+(self::test((core::Object* o, core::StackTrace* t) → Null => null)));
+  exp::Expect::equals(111, self::test(() → Null => null){dynamic}.+(self::test((core::Object o) → Null => null)){dynamic}.+(self::test((core::Object o, core::StackTrace t) → Null => null)));
 }
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart b/pkg/front_end/testcases/general/function_type_recovery.dart
index 38637d5..a0c0c45 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart
@@ -1,13 +1,13 @@
 // 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
+
 // Tests that an inline function type inside a `Function` type isn't a
 // parser error.
 
 typedef F = int Function(int f(String x));
 
 main() {
-  F f = null;
-  String Function(String g(int y)) g = null;
+  F? f = null;
+  String Function(String g(int y))? g = null;
 }
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline.expect
index 9e05a8d..2efaae2 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 typedef F = int Function(int f(String x));
 main() {}
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline_modelled.expect
index cc18173..a2bb0c0 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.textual_outline_modelled.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 main() {}
 typedef F = int Function(int f(String x));
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect
index b221bcb..7f6fc7d 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,14 +9,14 @@
 //
 // pkg/front_end/testcases/general/function_type_recovery.dart:12:27: Error: Inline function types cannot be used for parameters in a generic function type.
 // Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').
-//   String Function(String g(int y)) g = null;
+//   String Function(String g(int y))? g = null;
 //                           ^
 //
 import self as self;
 import "dart:core" as core;
 
-typedef F = ((core::String*) →* core::int*) →* core::int*;
+typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic {
-  ((core::String*) →* core::int*) →* core::int* f = null;
-  ((core::int*) →* core::String*) →* core::String* g = null;
+  ((core::String) → core::int) →? core::int f = null;
+  ((core::int) → core::String) →? core::String g = null;
 }
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
index b221bcb..7f6fc7d 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,14 +9,14 @@
 //
 // pkg/front_end/testcases/general/function_type_recovery.dart:12:27: Error: Inline function types cannot be used for parameters in a generic function type.
 // Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').
-//   String Function(String g(int y)) g = null;
+//   String Function(String g(int y))? g = null;
 //                           ^
 //
 import self as self;
 import "dart:core" as core;
 
-typedef F = ((core::String*) →* core::int*) →* core::int*;
+typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic {
-  ((core::String*) →* core::int*) →* core::int* f = null;
-  ((core::int*) →* core::String*) →* core::String* g = null;
+  ((core::String) → core::int) →? core::int f = null;
+  ((core::int) → core::String) →? core::String g = null;
 }
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.outline.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.outline.expect
index 56adbb4..3cbaee2 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -10,6 +10,6 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F = ((core::String*) →* core::int*) →* core::int*;
+typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect
index b221bcb..7f6fc7d 100644
--- a/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/function_type_recovery.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,14 +9,14 @@
 //
 // pkg/front_end/testcases/general/function_type_recovery.dart:12:27: Error: Inline function types cannot be used for parameters in a generic function type.
 // Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').
-//   String Function(String g(int y)) g = null;
+//   String Function(String g(int y))? g = null;
 //                           ^
 //
 import self as self;
 import "dart:core" as core;
 
-typedef F = ((core::String*) →* core::int*) →* core::int*;
+typedef F = ((core::String) → core::int) → core::int;
 static method main() → dynamic {
-  ((core::String*) →* core::int*) →* core::int* f = null;
-  ((core::int*) →* core::String*) →* core::String* g = null;
+  ((core::String) → core::int) →? core::int f = null;
+  ((core::int) → core::String) →? core::String g = null;
 }
diff --git a/pkg/front_end/testcases/general/functions.dart b/pkg/front_end/testcases/general/functions.dart
index 5b3f621..c6d90d6 100644
--- a/pkg/front_end/testcases/general/functions.dart
+++ b/pkg/front_end/testcases/general/functions.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
+
 main() {
   void local(void f({a})) {
     f(a: "Hello, World");
diff --git a/pkg/front_end/testcases/general/functions.dart.textual_outline.expect b/pkg/front_end/testcases/general/functions.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/functions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/functions.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/functions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/functions.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/functions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/functions.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/functions.dart.weak.expect b/pkg/front_end/testcases/general/functions.dart.weak.expect
index a0fd727..71cf09f 100644
--- a/pkg/front_end/testcases/general/functions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/functions.dart.weak.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function local(({a: dynamic}) →* void f) → void {
-    f(a: "Hello, World"){({a: dynamic}) →* void};
-    f(){({a: dynamic}) →* void};
+  function local(({a: dynamic}) → void f) → void {
+    f(a: "Hello, World"){({a: dynamic}) → void};
+    f(){({a: dynamic}) → void};
   }
-  local(({dynamic a = #C1}) → Null {
+  local(({dynamic a = #C1}) → void {
     core::print(a);
-  }){(({a: dynamic}) →* void) →* void};
+  }){(({a: dynamic}) → void) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/functions.dart.weak.modular.expect b/pkg/front_end/testcases/general/functions.dart.weak.modular.expect
index a0fd727..71cf09f 100644
--- a/pkg/front_end/testcases/general/functions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/functions.dart.weak.modular.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function local(({a: dynamic}) →* void f) → void {
-    f(a: "Hello, World"){({a: dynamic}) →* void};
-    f(){({a: dynamic}) →* void};
+  function local(({a: dynamic}) → void f) → void {
+    f(a: "Hello, World"){({a: dynamic}) → void};
+    f(){({a: dynamic}) → void};
   }
-  local(({dynamic a = #C1}) → Null {
+  local(({dynamic a = #C1}) → void {
     core::print(a);
-  }){(({a: dynamic}) →* void) →* void};
+  }){(({a: dynamic}) → void) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/functions.dart.weak.outline.expect b/pkg/front_end/testcases/general/functions.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/functions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/functions.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/functions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect
index a0fd727..71cf09f 100644
--- a/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/functions.dart.weak.transformed.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  function local(({a: dynamic}) →* void f) → void {
-    f(a: "Hello, World"){({a: dynamic}) →* void};
-    f(){({a: dynamic}) →* void};
+  function local(({a: dynamic}) → void f) → void {
+    f(a: "Hello, World"){({a: dynamic}) → void};
+    f(){({a: dynamic}) → void};
   }
-  local(({dynamic a = #C1}) → Null {
+  local(({dynamic a = #C1}) → void {
     core::print(a);
-  }){(({a: dynamic}) →* void) →* void};
+  }){(({a: dynamic}) → void) → void};
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/future_or_test.dart b/pkg/front_end/testcases/general/future_or_test.dart
index 3d23e6d..5e60845 100644
--- a/pkg/front_end/testcases/general/future_or_test.dart
+++ b/pkg/front_end/testcases/general/future_or_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 an expression with static type Future<dynamic> is
 // accepted as a return expression of a method with an async body and the
 // declared return type Future<int>.
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 e61e567..f83341f 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
@@ -35,7 +35,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -50,7 +50,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -78,7 +78,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -93,7 +93,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/front_end/testcases/general/future_return.dart b/pkg/front_end/testcases/general/future_return.dart
index 142d441..aae7105 100644
--- a/pkg/front_end/testcases/general/future_return.dart
+++ b/pkg/front_end/testcases/general/future_return.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/future_return.dart.textual_outline.expect b/pkg/front_end/testcases/general/future_return.dart.textual_outline.expect
index fa953ed..75767f5 100644
--- a/pkg/front_end/testcases/general/future_return.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 class Class {}
diff --git a/pkg/front_end/testcases/general/future_return.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/future_return.dart.textual_outline_modelled.expect
index b89de64..0e7261f 100644
--- a/pkg/front_end/testcases/general/future_return.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 Class returnClass() async => new Class();
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 3514a60..9ec0f18 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.expect
+++ b/pkg/front_end/testcases/general/future_return.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,45 +25,35 @@
 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* async 
+static method returnClass() → self::Class async 
   return new self::Class::•();
-static method returnFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClass() → asy::Future<self::Class> async 
   return new self::Class::•();
-static method returnFutureOrClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClass() → FutureOr<self::Class> async 
   return new self::Class::•();
-static method returnClassFromDynamic() → self::Class* async 
-  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
-static method returnFutureClassDynamic() → asy::Future<self::Class*>* async 
-  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
-static method returnFutureOrClassDynamic() → FutureOr<self::Class*>* async 
-  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
-static method returnClassFromFutureClass() → self::Class* async 
+static method returnClassFromDynamic() → self::Class async 
+  return self::returnDynamic();
+static method returnFutureClassDynamic() → asy::Future<self::Class> async 
+  return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> async 
+  return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+static method returnClassFromFutureClass() → self::Class async 
   return self::returnFutureClass();
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async 
   return self::returnFutureClass();
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async 
   return self::returnFutureClass();
-static method returnClassFromFutureOrClass() → self::Class* async 
+static method returnClassFromFutureOrClass() → self::Class async 
   return self::returnFutureOrClass();
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class*>* async 
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async 
   return self::returnFutureOrClass();
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async 
   return self::returnFutureOrClass();
 static method main() → dynamic async {
   await self::returnClass();
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 3514a60..9ec0f18 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -25,45 +25,35 @@
 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* async 
+static method returnClass() → self::Class async 
   return new self::Class::•();
-static method returnFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClass() → asy::Future<self::Class> async 
   return new self::Class::•();
-static method returnFutureOrClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClass() → FutureOr<self::Class> async 
   return new self::Class::•();
-static method returnClassFromDynamic() → self::Class* async 
-  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
-static method returnFutureClassDynamic() → asy::Future<self::Class*>* async 
-  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
-static method returnFutureOrClassDynamic() → FutureOr<self::Class*>* async 
-  return self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
-static method returnClassFromFutureClass() → self::Class* async 
+static method returnClassFromDynamic() → self::Class async 
+  return self::returnDynamic();
+static method returnFutureClassDynamic() → asy::Future<self::Class> async 
+  return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> async 
+  return self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
+static method returnClassFromFutureClass() → self::Class async 
   return self::returnFutureClass();
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async 
   return self::returnFutureClass();
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async 
   return self::returnFutureClass();
-static method returnClassFromFutureOrClass() → self::Class* async 
+static method returnClassFromFutureOrClass() → self::Class async 
   return self::returnFutureOrClass();
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class*>* async 
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async 
   return self::returnFutureOrClass();
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async 
   return self::returnFutureOrClass();
 static method main() → dynamic async {
   await self::returnClass();
diff --git a/pkg/front_end/testcases/general/future_return.dart.weak.outline.expect b/pkg/front_end/testcases/general/future_return.dart.weak.outline.expect
index 14b9059..4a9a8c1 100644
--- a/pkg/front_end/testcases/general/future_return.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/future_return.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,44 +6,34 @@
 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* async 
+static method returnClass() → self::Class async 
   ;
-static method returnFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClass() → asy::Future<self::Class> async 
   ;
-static method returnFutureOrClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClass() → FutureOr<self::Class> async 
   ;
-static method returnClassFromDynamic() → self::Class* async 
+static method returnClassFromDynamic() → self::Class async 
   ;
-static method returnFutureClassDynamic() → asy::Future<self::Class*>* async 
+static method returnFutureClassDynamic() → asy::Future<self::Class> async 
   ;
-static method returnFutureOrClassDynamic() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassDynamic() → FutureOr<self::Class> async 
   ;
-static method returnClassFromFutureClass() → self::Class* async 
+static method returnClassFromFutureClass() → self::Class async 
   ;
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class*>* async 
+static method returnFutureClassFromFutureClass() → asy::Future<self::Class> async 
   ;
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class> async 
   ;
-static method returnClassFromFutureOrClass() → self::Class* async 
+static method returnClassFromFutureOrClass() → self::Class async 
   ;
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class*>* async 
+static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class> async 
   ;
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class*>* async 
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class> async 
   ;
 static method main() → dynamic async 
   ;
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 d6d5aa0..4e5fa39 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
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,193 +26,183 @@
 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* /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method returnClass() → self::Class /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = new self::Class::•();
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* 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> /* originally async */ {
+  final asy::_Future<self::Class> :async_future = new asy::_Future::•<self::Class>();
   core::bool* :is_sync = false;
-  FutureOr<self::Class*>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  self::Class? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = new self::Class::•();
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClass() → FutureOr<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureOrClass() → FutureOr<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  self::Class? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         :return_value = new self::Class::•();
         break #L3;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnClassFromDynamic() → self::Class* /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method returnClassFromDynamic() → self::Class /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<dynamic>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        :return_value = self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
+        :return_value = self::returnDynamic();
         break #L4;
       }
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClassDynamic() → asy::Future<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureClassDynamic() → asy::Future<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::Class>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
-        :return_value = self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
+        :return_value = self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
         break #L5;
       }
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClassDynamic() → FutureOr<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureOrClassDynamic() → FutureOr<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::Class>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
-        :return_value = self::returnDynamic() as{TypeError} FutureOr<self::Class*>*;
+        :return_value = self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<self::Class>;
         break #L6;
       }
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnClassFromFutureClass() → self::Class* /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method returnClassFromFutureClass() → self::Class /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<dynamic>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -222,24 +212,24 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClassFromFutureClass() → asy::Future<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureClassFromFutureClass() → asy::Future<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::Class>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L8:
       {
@@ -249,24 +239,24 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClassFromFutureClass() → FutureOr<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureOrClassFromFutureClass() → FutureOr<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::Class>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L9:
       {
@@ -276,24 +266,24 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnClassFromFutureOrClass() → self::Class* /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method returnClassFromFutureOrClass() → self::Class /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<dynamic>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L10:
       {
@@ -303,24 +293,24 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureClassFromFutureOrClass() → asy::Future<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureClassFromFutureOrClass() → asy::Future<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::Class>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L11:
       {
@@ -330,24 +320,24 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method returnFutureOrClassFromFutureOrClass() → FutureOr<self::Class*>* /* originally async */ {
-  final asy::_Future<self::Class*>* :async_future = new asy::_Future::•<self::Class*>();
+static method returnFutureOrClassFromFutureOrClass() → FutureOr<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;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  FutureOr<self::Class>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L12:
       {
@@ -357,62 +347,62 @@
       asy::_completeOnAsyncReturn(: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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L13:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnClassFromDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnFutureClassDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnFutureOrClassDynamic(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnClassFromFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnFutureClassFromFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnFutureOrClassFromFutureClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnClassFromFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::returnFutureClassFromFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::returnFutureOrClassFromFutureOrClass(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<self::Class*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::returnClassFromDynamic(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::returnFutureClassDynamic(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::returnFutureOrClassDynamic(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::returnClassFromFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::returnFutureClassFromFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::returnFutureOrClassFromFutureClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::returnClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::returnFutureClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::returnFutureOrClassFromFutureOrClass(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<self::Class>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      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(){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart b/pkg/front_end/testcases/general/generic_function_type_in_message.dart
index 95d6bd6..e4eaf36 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.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
+
 num add<A extends num, B extends num>(A a, B b) => a + b;
 
 test() {
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline.expect
index 894e08c..8711ddc 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 num add<A extends num, B extends num>(A a, B b) => a + b;
 test() {}
 main() {}
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline_modelled.expect
index 744249d..3eb959f 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 main() {}
 num add<A extends num, B extends num>(A a, B b) => a + b;
 test() {}
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
index 20b824e..bc6078e 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,15 +9,15 @@
 import self as self;
 import "dart:core" as core;
 
-static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
-  return a.{core::num::+}(b){(core::num*) →* core::num*};
+static method add<A extends core::num, B extends core::num>(self::add::A a, self::add::B b) → core::num
+  return a.{core::num::+}(b){(core::num) → core::num};
 static method test() → dynamic {
-  core::int* x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+  core::int x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
-          ^" in #C1 as{TypeError} core::int*;
+          ^" in #C1 as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
-  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3){(core::num*) →* core::bool*})
+  if(self::add<core::int, core::int>(1, 2).{core::num::<}(3){(core::num) → core::bool})
     self::test();
 }
 
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect
index 20b824e..bc6078e 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,15 +9,15 @@
 import self as self;
 import "dart:core" as core;
 
-static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
-  return a.{core::num::+}(b){(core::num*) →* core::num*};
+static method add<A extends core::num, B extends core::num>(self::add::A a, self::add::B b) → core::num
+  return a.{core::num::+}(b){(core::num) → core::num};
 static method test() → dynamic {
-  core::int* x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+  core::int x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
-          ^" in #C1 as{TypeError} core::int*;
+          ^" in #C1 as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
-  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3){(core::num*) →* core::bool*})
+  if(self::add<core::int, core::int>(1, 2).{core::num::<}(3){(core::num) → core::bool})
     self::test();
 }
 
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.outline.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.outline.expect
index 36becbd..10808eb 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
+static method add<A extends core::num, B extends core::num>(self::add::A a, self::add::B b) → core::num
   ;
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
index 20b824e..bc6078e 100644
--- a/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/generic_function_type_in_message.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -9,15 +9,15 @@
 import self as self;
 import "dart:core" as core;
 
-static method add<A extends core::num*, B extends core::num*>(self::add::A* a, self::add::B* b) → core::num*
-  return a.{core::num::+}(b){(core::num*) →* core::num*};
+static method add<A extends core::num, B extends core::num>(self::add::A a, self::add::B b) → core::num
+  return a.{core::num::+}(b){(core::num) → core::num};
 static method test() → dynamic {
-  core::int* x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
+  core::int x = invalid-expression "pkg/front_end/testcases/general/generic_function_type_in_message.dart:8:11: Error: A value of type 'num Function<A extends num, B extends num>(A, B)' can't be assigned to a variable of type 'int'.
   int x = add;
-          ^" in #C1 as{TypeError} core::int*;
+          ^" in #C1 as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method main() → dynamic {
-  if(self::add<core::int*, core::int*>(1, 2).{core::num::<}(3){(core::num*) →* core::bool*})
+  if(self::add<core::int, core::int>(1, 2).{core::num::<}(3){(core::num) → core::bool})
     self::test();
 }
 
diff --git a/pkg/front_end/testcases/general/generic_function_typedef.dart b/pkg/front_end/testcases/general/generic_function_typedef.dart
index 88babaf..526c45b 100644
--- a/pkg/front_end/testcases/general/generic_function_typedef.dart
+++ b/pkg/front_end/testcases/general/generic_function_typedef.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
+
 typedef E1<T> = void Function();
 typedef E2<T extends num> = void Function();
 typedef E3<T, S> = void Function();
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart b/pkg/front_end/testcases/general/generic_function_typedef2.dart
new file mode 100644
index 0000000..f8d0d8d
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.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.
+
+typedef E1<T> = void Function();
+typedef E2<T extends num> = void Function();
+typedef E3<T, S> = void Function();
+typedef E4<T extends num, S extends num> = void Function();
+typedef E5<T extends S, S extends num> = void Function();
+typedef E6<T extends num, S extends T> = void Function();
+
+typedef F1 = void Function<T>();
+typedef F2 = void Function<T extends num>();
+typedef F3 = void Function<T, S>();
+typedef F4 = void Function<T extends num, S extends num>();
+typedef F5 = void Function<T extends S, S extends num>();
+typedef F6 = void Function<T extends num, S extends T>();
+
+typedef G1<X> = void Function<T extends X>();
+typedef G2<X extends num> = void Function<T extends X>();
+typedef G3<X, Y> = void Function<T extends X, S extends Y>();
+typedef G4<X extends num, Y extends num> = void
+    Function<T extends X, S extends Y>();
+typedef G5<X extends num> = void Function<T extends S, S extends X>();
+typedef G6<X extends num> = void Function<T extends X, S extends T>();
+
+typedef H1 = void Function(void Function<T>());
+typedef H2 = void Function(void Function<T extends num>());
+typedef H3 = void Function(void Function<T, S>());
+typedef H4 = void Function(void Function<T extends num, S extends num>());
+typedef H5 = void Function(void Function<T extends S, S extends num>());
+typedef H6 = void Function(void Function<T extends num, S extends T>());
+
+void Function<T>()? f1;
+void Function<T extends num>()? f2;
+void Function<T, S>()? f3;
+void Function<T extends num, S extends num>()? f4;
+void Function<T extends S, S extends num>()? f5;
+void Function<T extends num, S extends T>()? f6;
+
+main() {}
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart.textual_outline.expect b/pkg/front_end/testcases/general/generic_function_typedef2.dart.textual_outline.expect
new file mode 100644
index 0000000..4204509
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.dart.textual_outline.expect
@@ -0,0 +1,32 @@
+typedef E1<T> = void Function();
+typedef E2<T extends num> = void Function();
+typedef E3<T, S> = void Function();
+typedef E4<T extends num, S extends num> = void Function();
+typedef E5<T extends S, S extends num> = void Function();
+typedef E6<T extends num, S extends T> = void Function();
+typedef F1 = void Function<T>();
+typedef F2 = void Function<T extends num>();
+typedef F3 = void Function<T, S>();
+typedef F4 = void Function<T extends num, S extends num>();
+typedef F5 = void Function<T extends S, S extends num>();
+typedef F6 = void Function<T extends num, S extends T>();
+typedef G1<X> = void Function<T extends X>();
+typedef G2<X extends num> = void Function<T extends X>();
+typedef G3<X, Y> = void Function<T extends X, S extends Y>();
+typedef G4<X extends num, Y extends num> = void
+    Function<T extends X, S extends Y>();
+typedef G5<X extends num> = void Function<T extends S, S extends X>();
+typedef G6<X extends num> = void Function<T extends X, S extends T>();
+typedef H1 = void Function(void Function<T>());
+typedef H2 = void Function(void Function<T extends num>());
+typedef H3 = void Function(void Function<T, S>());
+typedef H4 = void Function(void Function<T extends num, S extends num>());
+typedef H5 = void Function(void Function<T extends S, S extends num>());
+typedef H6 = void Function(void Function<T extends num, S extends T>());
+void Function<T>()? f1;
+void Function<T extends num>()? f2;
+void Function<T, S>()? f3;
+void Function<T extends num, S extends num>()? f4;
+void Function<T extends S, S extends num>()? f5;
+void Function<T extends num, S extends T>()? f6;
+main() {}
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/generic_function_typedef2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fccfe82
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.dart.textual_outline_modelled.expect
@@ -0,0 +1,32 @@
+main() {}
+typedef E1<T> = void Function();
+typedef E2<T extends num> = void Function();
+typedef E3<T, S> = void Function();
+typedef E4<T extends num, S extends num> = void Function();
+typedef E5<T extends S, S extends num> = void Function();
+typedef E6<T extends num, S extends T> = void Function();
+typedef F1 = void Function<T>();
+typedef F2 = void Function<T extends num>();
+typedef F3 = void Function<T, S>();
+typedef F4 = void Function<T extends num, S extends num>();
+typedef F5 = void Function<T extends S, S extends num>();
+typedef F6 = void Function<T extends num, S extends T>();
+typedef G1<X> = void Function<T extends X>();
+typedef G2<X extends num> = void Function<T extends X>();
+typedef G3<X, Y> = void Function<T extends X, S extends Y>();
+typedef G4<X extends num, Y extends num> = void
+    Function<T extends X, S extends Y>();
+typedef G5<X extends num> = void Function<T extends S, S extends X>();
+typedef G6<X extends num> = void Function<T extends X, S extends T>();
+typedef H1 = void Function(void Function<T>());
+typedef H2 = void Function(void Function<T extends num>());
+typedef H3 = void Function(void Function<T, S>());
+typedef H4 = void Function(void Function<T extends num, S extends num>());
+typedef H5 = void Function(void Function<T extends S, S extends num>());
+typedef H6 = void Function(void Function<T extends num, S extends T>());
+void Function<T, S>()? f3;
+void Function<T>()? f1;
+void Function<T extends S, S extends num>()? f5;
+void Function<T extends num, S extends T>()? f6;
+void Function<T extends num, S extends num>()? f4;
+void Function<T extends num>()? f2;
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.expect b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.expect
new file mode 100644
index 0000000..ff1449c
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef E1<unrelated T extends core::Object? = dynamic> = () → void;
+typedef E2<unrelated T extends core::num> = () → void;
+typedef E3<unrelated T extends core::Object? = dynamic, unrelated S extends core::Object? = dynamic> = () → void;
+typedef E4<unrelated T extends core::num, unrelated S extends core::num> = () → void;
+typedef E5<unrelated T extends S = core::num, unrelated S extends core::num> = () → void;
+typedef E6<unrelated T extends core::num, unrelated S extends T = core::num> = () → void;
+typedef F1 = <T extends core::Object? = dynamic>() → void;
+typedef F2 = <T extends core::num = dynamic>() → void;
+typedef F3 = <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void;
+typedef F4 = <T extends core::num = dynamic, S extends core::num = dynamic>() → void;
+typedef F5 = <T extends S = dynamic, S extends core::num = dynamic>() → void;
+typedef F6 = <T extends core::num = dynamic, S extends T = dynamic>() → void;
+typedef G1<invariant X extends core::Object? = dynamic> = <T extends X% = dynamic>() → void;
+typedef G2<invariant X extends core::num> = <T extends X = dynamic>() → void;
+typedef G3<invariant X extends core::Object? = dynamic, invariant Y extends core::Object? = dynamic> = <T extends X% = dynamic, S extends Y% = dynamic>() → void;
+typedef G4<invariant X extends core::num, invariant Y extends core::num> = <T extends X = dynamic, S extends Y = dynamic>() → void;
+typedef G5<invariant X extends core::num> = <T extends S = dynamic, S extends X = dynamic>() → void;
+typedef G6<invariant X extends core::num> = <T extends X = dynamic, S extends T = dynamic>() → void;
+typedef H1 = (<T extends core::Object? = dynamic>() → void) → void;
+typedef H2 = (<T extends core::num = dynamic>() → void) → void;
+typedef H3 = (<T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void) → void;
+typedef H4 = (<T extends core::num = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H5 = (<T extends S = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H6 = (<T extends core::num = dynamic, S extends T = dynamic>() → void) → void;
+static field <T extends core::Object? = dynamic>() →? void f1;
+static field <T extends core::num = dynamic>() →? void f2;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() →? void f3;
+static field <T extends core::num = dynamic, S extends core::num = dynamic>() →? void f4;
+static field <T extends S = dynamic, S extends core::num = dynamic>() →? void f5;
+static field <T extends core::num = dynamic, S extends T = dynamic>() →? void f6;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.modular.expect b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.modular.expect
new file mode 100644
index 0000000..ff1449c
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.modular.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef E1<unrelated T extends core::Object? = dynamic> = () → void;
+typedef E2<unrelated T extends core::num> = () → void;
+typedef E3<unrelated T extends core::Object? = dynamic, unrelated S extends core::Object? = dynamic> = () → void;
+typedef E4<unrelated T extends core::num, unrelated S extends core::num> = () → void;
+typedef E5<unrelated T extends S = core::num, unrelated S extends core::num> = () → void;
+typedef E6<unrelated T extends core::num, unrelated S extends T = core::num> = () → void;
+typedef F1 = <T extends core::Object? = dynamic>() → void;
+typedef F2 = <T extends core::num = dynamic>() → void;
+typedef F3 = <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void;
+typedef F4 = <T extends core::num = dynamic, S extends core::num = dynamic>() → void;
+typedef F5 = <T extends S = dynamic, S extends core::num = dynamic>() → void;
+typedef F6 = <T extends core::num = dynamic, S extends T = dynamic>() → void;
+typedef G1<invariant X extends core::Object? = dynamic> = <T extends X% = dynamic>() → void;
+typedef G2<invariant X extends core::num> = <T extends X = dynamic>() → void;
+typedef G3<invariant X extends core::Object? = dynamic, invariant Y extends core::Object? = dynamic> = <T extends X% = dynamic, S extends Y% = dynamic>() → void;
+typedef G4<invariant X extends core::num, invariant Y extends core::num> = <T extends X = dynamic, S extends Y = dynamic>() → void;
+typedef G5<invariant X extends core::num> = <T extends S = dynamic, S extends X = dynamic>() → void;
+typedef G6<invariant X extends core::num> = <T extends X = dynamic, S extends T = dynamic>() → void;
+typedef H1 = (<T extends core::Object? = dynamic>() → void) → void;
+typedef H2 = (<T extends core::num = dynamic>() → void) → void;
+typedef H3 = (<T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void) → void;
+typedef H4 = (<T extends core::num = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H5 = (<T extends S = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H6 = (<T extends core::num = dynamic, S extends T = dynamic>() → void) → void;
+static field <T extends core::Object? = dynamic>() →? void f1;
+static field <T extends core::num = dynamic>() →? void f2;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() →? void f3;
+static field <T extends core::num = dynamic, S extends core::num = dynamic>() →? void f4;
+static field <T extends S = dynamic, S extends core::num = dynamic>() →? void f5;
+static field <T extends core::num = dynamic, S extends T = dynamic>() →? void f6;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.outline.expect b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.outline.expect
new file mode 100644
index 0000000..f392fe8
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef E1<unrelated T extends core::Object? = dynamic> = () → void;
+typedef E2<unrelated T extends core::num> = () → void;
+typedef E3<unrelated T extends core::Object? = dynamic, unrelated S extends core::Object? = dynamic> = () → void;
+typedef E4<unrelated T extends core::num, unrelated S extends core::num> = () → void;
+typedef E5<unrelated T extends S = core::num, unrelated S extends core::num> = () → void;
+typedef E6<unrelated T extends core::num, unrelated S extends T = core::num> = () → void;
+typedef F1 = <T extends core::Object? = dynamic>() → void;
+typedef F2 = <T extends core::num = dynamic>() → void;
+typedef F3 = <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void;
+typedef F4 = <T extends core::num = dynamic, S extends core::num = dynamic>() → void;
+typedef F5 = <T extends S = dynamic, S extends core::num = dynamic>() → void;
+typedef F6 = <T extends core::num = dynamic, S extends T = dynamic>() → void;
+typedef G1<invariant X extends core::Object? = dynamic> = <T extends X% = dynamic>() → void;
+typedef G2<invariant X extends core::num> = <T extends X = dynamic>() → void;
+typedef G3<invariant X extends core::Object? = dynamic, invariant Y extends core::Object? = dynamic> = <T extends X% = dynamic, S extends Y% = dynamic>() → void;
+typedef G4<invariant X extends core::num, invariant Y extends core::num> = <T extends X = dynamic, S extends Y = dynamic>() → void;
+typedef G5<invariant X extends core::num> = <T extends S = dynamic, S extends X = dynamic>() → void;
+typedef G6<invariant X extends core::num> = <T extends X = dynamic, S extends T = dynamic>() → void;
+typedef H1 = (<T extends core::Object? = dynamic>() → void) → void;
+typedef H2 = (<T extends core::num = dynamic>() → void) → void;
+typedef H3 = (<T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void) → void;
+typedef H4 = (<T extends core::num = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H5 = (<T extends S = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H6 = (<T extends core::num = dynamic, S extends T = dynamic>() → void) → void;
+static field <T extends core::Object? = dynamic>() →? void f1;
+static field <T extends core::num = dynamic>() →? void f2;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() →? void f3;
+static field <T extends core::num = dynamic, S extends core::num = dynamic>() →? void f4;
+static field <T extends S = dynamic, S extends core::num = dynamic>() →? void f5;
+static field <T extends core::num = dynamic, S extends T = dynamic>() →? void f6;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.transformed.expect
new file mode 100644
index 0000000..ff1449c
--- /dev/null
+++ b/pkg/front_end/testcases/general/generic_function_typedef2.dart.weak.transformed.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+typedef E1<unrelated T extends core::Object? = dynamic> = () → void;
+typedef E2<unrelated T extends core::num> = () → void;
+typedef E3<unrelated T extends core::Object? = dynamic, unrelated S extends core::Object? = dynamic> = () → void;
+typedef E4<unrelated T extends core::num, unrelated S extends core::num> = () → void;
+typedef E5<unrelated T extends S = core::num, unrelated S extends core::num> = () → void;
+typedef E6<unrelated T extends core::num, unrelated S extends T = core::num> = () → void;
+typedef F1 = <T extends core::Object? = dynamic>() → void;
+typedef F2 = <T extends core::num = dynamic>() → void;
+typedef F3 = <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void;
+typedef F4 = <T extends core::num = dynamic, S extends core::num = dynamic>() → void;
+typedef F5 = <T extends S = dynamic, S extends core::num = dynamic>() → void;
+typedef F6 = <T extends core::num = dynamic, S extends T = dynamic>() → void;
+typedef G1<invariant X extends core::Object? = dynamic> = <T extends X% = dynamic>() → void;
+typedef G2<invariant X extends core::num> = <T extends X = dynamic>() → void;
+typedef G3<invariant X extends core::Object? = dynamic, invariant Y extends core::Object? = dynamic> = <T extends X% = dynamic, S extends Y% = dynamic>() → void;
+typedef G4<invariant X extends core::num, invariant Y extends core::num> = <T extends X = dynamic, S extends Y = dynamic>() → void;
+typedef G5<invariant X extends core::num> = <T extends S = dynamic, S extends X = dynamic>() → void;
+typedef G6<invariant X extends core::num> = <T extends X = dynamic, S extends T = dynamic>() → void;
+typedef H1 = (<T extends core::Object? = dynamic>() → void) → void;
+typedef H2 = (<T extends core::num = dynamic>() → void) → void;
+typedef H3 = (<T extends core::Object? = dynamic, S extends core::Object? = dynamic>() → void) → void;
+typedef H4 = (<T extends core::num = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H5 = (<T extends S = dynamic, S extends core::num = dynamic>() → void) → void;
+typedef H6 = (<T extends core::num = dynamic, S extends T = dynamic>() → void) → void;
+static field <T extends core::Object? = dynamic>() →? void f1;
+static field <T extends core::num = dynamic>() →? void f2;
+static field <T extends core::Object? = dynamic, S extends core::Object? = dynamic>() →? void f3;
+static field <T extends core::num = dynamic, S extends core::num = dynamic>() →? void f4;
+static field <T extends S = dynamic, S extends core::num = dynamic>() →? void f5;
+static field <T extends core::num = dynamic, S extends T = dynamic>() →? void f6;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/getter_call.dart b/pkg/front_end/testcases/general/getter_call.dart
index f9ddb1b..e7aa041 100644
--- a/pkg/front_end/testcases/general/getter_call.dart
+++ b/pkg/front_end/testcases/general/getter_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
+
 bool enableRead = true;
 
 int read(int value) => enableRead ? value : -1;
diff --git a/pkg/front_end/testcases/general/getter_call.dart.textual_outline.expect b/pkg/front_end/testcases/general/getter_call.dart.textual_outline.expect
index 52eeaa7..d9d43c9 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bool enableRead = true;
 int read(int value) => enableRead ? value : -1;
 int method1() => 0;
diff --git a/pkg/front_end/testcases/general/getter_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/getter_call.dart.textual_outline_modelled.expect
index 7b9b8af..fafec6e 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 bool enableRead = true;
 callField(Class c) {}
 callGetter(Class c) {}
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.expect
index bcf489c..89099d1 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.expect
@@ -1,177 +1,167 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a = #C1;
-  field () →* core::int* field1b = #C1;
-  field (core::int*) →* core::int* field2 = #C2;
-  field (core::int*, core::int*) →* core::int* field3 = #C3;
-  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
-  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
-  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a = #C1;
+  field () → core::int field1b = #C1;
+  field (core::int) → core::int field2 = #C2;
+  field (core::int, core::int) → core::int field3 = #C3;
+  field (core::int, [core::int]) → core::int field4 = #C4;
+  field ([core::int, core::int]) → core::int field5 = #C5;
+  field (core::int, {b: core::int}) → core::int field6 = #C6;
+  field ({a: core::int, b: core::int}) → core::int field7 = #C7;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     return #C1;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     return #C1;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     return #C2;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     return #C3;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     return #C4;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     return #C5;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     return #C6;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     return #C7;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
-  get field1a() → core::Function* {
+  get field1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get field1b() → () →* core::int* {
+  get field1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get field2() → (core::int*) →* core::int* {
+  get field2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get field3() → (core::int*, core::int*) →* core::int* {
+  get field3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get field4() → (core::int*, [core::int*]) →* core::int* {
+  get field4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get field5() → ([core::int*, core::int*]) →* core::int* {
+  get field5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+  get field6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get field7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
-  get getter1a() → core::Function* {
+  get getter1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get getter1b() → () →* core::int* {
+  get getter1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get getter2() → (core::int*) →* core::int* {
+  get getter2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get getter3() → (core::int*, core::int*) →* core::int* {
+  get getter3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get getter4() → (core::int*, [core::int*]) →* core::int* {
+  get getter4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get getter5() → ([core::int*, core::int*]) →* core::int* {
+  get getter5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+  get getter6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get getter7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
 }
-static field core::bool* enableRead = true;
-static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
-static method method1() → core::int*
+static field core::bool enableRead = true;
+static method read(core::int value) → core::int
+  return self::enableRead ?{core::int} value : 1.{core::int::unary-}(){() → core::int};
+static method method1() → core::int
   return 0;
-static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}(){() →* core::int*};
-static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method2(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method method3(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method4(core::int a, [core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method5([core::int a = #C8, core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method6(core::int a, {core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method7({core::int a = #C8, core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
   self::callField(new self::Subclass::•());
   self::callGetter(new self::Subclass::•());
 }
-static method callField(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::field1a}{core::Function*}());
-  self::expect(0, c.{self::Class::field1b}{() →* core::int*}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int*) →* core::int*}(#t2){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int*, core::int*) →* core::int*}(#t4, #t5){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t7){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t12){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t17){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+static method callField(self::Class c) → dynamic {
+  self::expect(0, c.{self::Class::field1a}{core::Function}());
+  self::expect(0, c.{self::Class::field1b}{() → core::int}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t1 = c in let final core::int #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int) → core::int}(#t2){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t3 = c in let final core::int #t4 = self::read(12) in let final core::int #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int, core::int) → core::int}(#t4, #t5){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t7){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t8 = c in let final core::int #t9 = self::read(12) in let final core::int #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t9, #t10){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::field5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int, core::int]) → core::int}(#t12){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t13 = c in let final core::int #t14 = self::read(12) in let final core::int #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int, core::int]) → core::int}(#t14, #t15){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t17){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t18 = c in let final core::int #t19 = self::read(12) in let final core::int #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t22){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t23 = c in let final core::int #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(b: #t24){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t25 = c in let final core::int #t26 = self::read(12) in let final core::int #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t28 = c in let final core::int #t29 = self::read(23) in let final core::int #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
 }
-static method callGetter(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::getter1a}{core::Function*}());
-  self::expect(0, c.{self::Class::getter1b}{() →* core::int*}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int*) →* core::int*}(#t32){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int*, core::int*) →* core::int*}(#t34, #t35){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t37){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t42){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t47){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+static method callGetter(self::Class c) → dynamic {
+  self::expect(0, c.{self::Class::getter1a}{core::Function}());
+  self::expect(0, c.{self::Class::getter1b}{() → core::int}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t31 = c in let final core::int #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int) → core::int}(#t32){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t33 = c in let final core::int #t34 = self::read(12) in let final core::int #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int, core::int) → core::int}(#t34, #t35){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t36 = c in let final core::int #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int, [core::int]) → core::int}(#t37){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t38 = c in let final core::int #t39 = self::read(12) in let final core::int #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int, [core::int]) → core::int}(#t39, #t40){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::getter5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t41 = c in let final core::int #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int, core::int]) → core::int}(#t42){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t43 = c in let final core::int #t44 = self::read(12) in let final core::int #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int, core::int]) → core::int}(#t44, #t45){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t46 = c in let final core::int #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int, {b: core::int}) → core::int}(#t47){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t48 = c in let final core::int #t49 = self::read(12) in let final core::int #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int, {b: core::int}) → core::int}(#t49, b: #t50){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t51 = c in let final core::int #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(a: #t52){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t53 = c in let final core::int #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(b: #t54){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t55 = c in let final core::int #t56 = self::read(12) in let final core::int #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(a: #t56, b: #t57){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t58 = c in let final core::int #t59 = self::read(23) in let final core::int #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(b: #t59, a: #t60){({a: core::int, b: core::int}) → core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect
index bcf489c..89099d1 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.modular.expect
@@ -1,177 +1,167 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a = #C1;
-  field () →* core::int* field1b = #C1;
-  field (core::int*) →* core::int* field2 = #C2;
-  field (core::int*, core::int*) →* core::int* field3 = #C3;
-  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
-  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
-  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a = #C1;
+  field () → core::int field1b = #C1;
+  field (core::int) → core::int field2 = #C2;
+  field (core::int, core::int) → core::int field3 = #C3;
+  field (core::int, [core::int]) → core::int field4 = #C4;
+  field ([core::int, core::int]) → core::int field5 = #C5;
+  field (core::int, {b: core::int}) → core::int field6 = #C6;
+  field ({a: core::int, b: core::int}) → core::int field7 = #C7;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     return #C1;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     return #C1;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     return #C2;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     return #C3;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     return #C4;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     return #C5;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     return #C6;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     return #C7;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
-  get field1a() → core::Function* {
+  get field1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get field1b() → () →* core::int* {
+  get field1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get field2() → (core::int*) →* core::int* {
+  get field2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get field3() → (core::int*, core::int*) →* core::int* {
+  get field3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get field4() → (core::int*, [core::int*]) →* core::int* {
+  get field4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get field5() → ([core::int*, core::int*]) →* core::int* {
+  get field5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+  get field6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get field7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
-  get getter1a() → core::Function* {
+  get getter1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get getter1b() → () →* core::int* {
+  get getter1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get getter2() → (core::int*) →* core::int* {
+  get getter2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get getter3() → (core::int*, core::int*) →* core::int* {
+  get getter3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get getter4() → (core::int*, [core::int*]) →* core::int* {
+  get getter4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get getter5() → ([core::int*, core::int*]) →* core::int* {
+  get getter5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+  get getter6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get getter7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
 }
-static field core::bool* enableRead = true;
-static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
-static method method1() → core::int*
+static field core::bool enableRead = true;
+static method read(core::int value) → core::int
+  return self::enableRead ?{core::int} value : 1.{core::int::unary-}(){() → core::int};
+static method method1() → core::int
   return 0;
-static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}(){() →* core::int*};
-static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method2(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method method3(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method4(core::int a, [core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method5([core::int a = #C8, core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method6(core::int a, {core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method7({core::int a = #C8, core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
   self::callField(new self::Subclass::•());
   self::callGetter(new self::Subclass::•());
 }
-static method callField(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::field1a}{core::Function*}());
-  self::expect(0, c.{self::Class::field1b}{() →* core::int*}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int*) →* core::int*}(#t2){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int*, core::int*) →* core::int*}(#t4, #t5){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t7){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t12){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t17){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+static method callField(self::Class c) → dynamic {
+  self::expect(0, c.{self::Class::field1a}{core::Function}());
+  self::expect(0, c.{self::Class::field1b}{() → core::int}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t1 = c in let final core::int #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int) → core::int}(#t2){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t3 = c in let final core::int #t4 = self::read(12) in let final core::int #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int, core::int) → core::int}(#t4, #t5){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t7){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t8 = c in let final core::int #t9 = self::read(12) in let final core::int #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t9, #t10){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::field5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int, core::int]) → core::int}(#t12){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t13 = c in let final core::int #t14 = self::read(12) in let final core::int #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int, core::int]) → core::int}(#t14, #t15){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t17){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t18 = c in let final core::int #t19 = self::read(12) in let final core::int #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t22){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t23 = c in let final core::int #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(b: #t24){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t25 = c in let final core::int #t26 = self::read(12) in let final core::int #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t28 = c in let final core::int #t29 = self::read(23) in let final core::int #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
 }
-static method callGetter(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::getter1a}{core::Function*}());
-  self::expect(0, c.{self::Class::getter1b}{() →* core::int*}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int*) →* core::int*}(#t32){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int*, core::int*) →* core::int*}(#t34, #t35){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t37){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t42){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t47){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+static method callGetter(self::Class c) → dynamic {
+  self::expect(0, c.{self::Class::getter1a}{core::Function}());
+  self::expect(0, c.{self::Class::getter1b}{() → core::int}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t31 = c in let final core::int #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int) → core::int}(#t32){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t33 = c in let final core::int #t34 = self::read(12) in let final core::int #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int, core::int) → core::int}(#t34, #t35){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t36 = c in let final core::int #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int, [core::int]) → core::int}(#t37){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t38 = c in let final core::int #t39 = self::read(12) in let final core::int #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int, [core::int]) → core::int}(#t39, #t40){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::getter5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t41 = c in let final core::int #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int, core::int]) → core::int}(#t42){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t43 = c in let final core::int #t44 = self::read(12) in let final core::int #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int, core::int]) → core::int}(#t44, #t45){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t46 = c in let final core::int #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int, {b: core::int}) → core::int}(#t47){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t48 = c in let final core::int #t49 = self::read(12) in let final core::int #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int, {b: core::int}) → core::int}(#t49, b: #t50){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t51 = c in let final core::int #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(a: #t52){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t53 = c in let final core::int #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(b: #t54){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t55 = c in let final core::int #t56 = self::read(12) in let final core::int #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(a: #t56, b: #t57){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t58 = c in let final core::int #t59 = self::read(23) in let final core::int #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(b: #t59, a: #t60){({a: core::int, b: core::int}) → core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect
index f25cc63..9152257 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.outline.expect
@@ -1,103 +1,93 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a;
-  field () →* core::int* field1b;
-  field (core::int*) →* core::int* field2;
-  field (core::int*, core::int*) →* core::int* field3;
-  field (core::int*, [core::int*]) →* core::int* field4;
-  field ([core::int*, core::int*]) →* core::int* field5;
-  field (core::int*, {b: core::int*}) →* core::int* field6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a;
+  field () → core::int field1b;
+  field (core::int) → core::int field2;
+  field (core::int, core::int) → core::int field3;
+  field (core::int, [core::int]) → core::int field4;
+  field ([core::int, core::int]) → core::int field5;
+  field (core::int, {b: core::int}) → core::int field6;
+  field ({a: core::int, b: core::int}) → core::int field7;
+  synthetic constructor •() → self::Class
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     ;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     ;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     ;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     ;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     ;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     ;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     ;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → 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 Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     ;
-  get field1a() → core::Function*
+  get field1a() → core::Function
     ;
-  get field1b() → () →* core::int*
+  get field1b() → () → core::int
     ;
-  get field2() → (core::int*) →* core::int*
+  get field2() → (core::int) → core::int
     ;
-  get field3() → (core::int*, core::int*) →* core::int*
+  get field3() → (core::int, core::int) → core::int
     ;
-  get field4() → (core::int*, [core::int*]) →* core::int*
+  get field4() → (core::int, [core::int]) → core::int
     ;
-  get field5() → ([core::int*, core::int*]) →* core::int*
+  get field5() → ([core::int, core::int]) → core::int
     ;
-  get field6() → (core::int*, {b: core::int*}) →* core::int*
+  get field6() → (core::int, {b: core::int}) → core::int
     ;
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get field7() → ({a: core::int, b: core::int}) → core::int
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     ;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     ;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     ;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     ;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     ;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     ;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     ;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     ;
 }
-static field core::bool* enableRead;
-static method read(core::int* value) → core::int*
+static field core::bool enableRead;
+static method read(core::int value) → core::int
   ;
-static method method1() → core::int*
+static method method1() → core::int
   ;
-static method method2(core::int* a) → core::int*
+static method method2(core::int a) → core::int
   ;
-static method method3(core::int* a, core::int* b) → core::int*
+static method method3(core::int a, core::int b) → core::int
   ;
-static method method4(core::int* a, [core::int* b]) → core::int*
+static method method4(core::int a, [core::int b]) → core::int
   ;
-static method method5([core::int* a, core::int* b]) → core::int*
+static method method5([core::int a, core::int b]) → core::int
   ;
-static method method6(core::int* a, {core::int* b}) → core::int*
+static method method6(core::int a, {core::int b}) → core::int
   ;
-static method method7({core::int* a, core::int* b}) → core::int*
+static method method7({core::int a, core::int b}) → core::int
   ;
 static method main() → dynamic
   ;
-static method callField(self::Class* c) → dynamic
+static method callField(self::Class c) → dynamic
   ;
-static method callGetter(self::Class* c) → dynamic
+static method callGetter(self::Class c) → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect
index 1ff1cbc..5739678 100644
--- a/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/getter_call.dart.weak.transformed.expect
@@ -1,177 +1,167 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Function* field1a = #C1;
-  field () →* core::int* field1b = #C1;
-  field (core::int*) →* core::int* field2 = #C2;
-  field (core::int*, core::int*) →* core::int* field3 = #C3;
-  field (core::int*, [core::int*]) →* core::int* field4 = #C4;
-  field ([core::int*, core::int*]) →* core::int* field5 = #C5;
-  field (core::int*, {b: core::int*}) →* core::int* field6 = #C6;
-  field ({a: core::int*, b: core::int*}) →* core::int* field7 = #C7;
-  synthetic constructor •() → self::Class*
+  field core::Function field1a = #C1;
+  field () → core::int field1b = #C1;
+  field (core::int) → core::int field2 = #C2;
+  field (core::int, core::int) → core::int field3 = #C3;
+  field (core::int, [core::int]) → core::int field4 = #C4;
+  field ([core::int, core::int]) → core::int field5 = #C5;
+  field (core::int, {b: core::int}) → core::int field6 = #C6;
+  field ({a: core::int, b: core::int}) → core::int field7 = #C7;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get getter1a() → core::Function*
+  get getter1a() → core::Function
     return #C1;
-  get getter1b() → () →* core::int*
+  get getter1b() → () → core::int
     return #C1;
-  get getter2() → (core::int*) →* core::int*
+  get getter2() → (core::int) → core::int
     return #C2;
-  get getter3() → (core::int*, core::int*) →* core::int*
+  get getter3() → (core::int, core::int) → core::int
     return #C3;
-  get getter4() → (core::int*, [core::int*]) →* core::int*
+  get getter4() → (core::int, [core::int]) → core::int
     return #C4;
-  get getter5() → ([core::int*, core::int*]) →* core::int*
+  get getter5() → ([core::int, core::int]) → core::int
     return #C5;
-  get getter6() → (core::int*, {b: core::int*}) →* core::int*
+  get getter6() → (core::int, {b: core::int}) → core::int
     return #C6;
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int*
+  get getter7() → ({a: core::int, b: core::int}) → core::int
     return #C7;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Subclass extends self::Class {
-  synthetic constructor •() → self::Subclass*
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
-  get field1a() → core::Function* {
+  get field1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get field1b() → () →* core::int* {
+  get field1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get field2() → (core::int*) →* core::int* {
+  get field2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get field3() → (core::int*, core::int*) →* core::int* {
+  get field3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get field4() → (core::int*, [core::int*]) →* core::int* {
+  get field4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get field5() → ([core::int*, core::int*]) →* core::int* {
+  get field5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get field6() → (core::int*, {b: core::int*}) →* core::int* {
+  get field6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get field7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get field7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
-  get getter1a() → core::Function* {
+  get getter1a() → core::Function {
     self::enableRead = false;
     return #C1;
   }
-  get getter1b() → () →* core::int* {
+  get getter1b() → () → core::int {
     self::enableRead = false;
     return #C1;
   }
-  get getter2() → (core::int*) →* core::int* {
+  get getter2() → (core::int) → core::int {
     self::enableRead = false;
     return #C2;
   }
-  get getter3() → (core::int*, core::int*) →* core::int* {
+  get getter3() → (core::int, core::int) → core::int {
     self::enableRead = false;
     return #C3;
   }
-  get getter4() → (core::int*, [core::int*]) →* core::int* {
+  get getter4() → (core::int, [core::int]) → core::int {
     self::enableRead = false;
     return #C4;
   }
-  get getter5() → ([core::int*, core::int*]) →* core::int* {
+  get getter5() → ([core::int, core::int]) → core::int {
     self::enableRead = false;
     return #C5;
   }
-  get getter6() → (core::int*, {b: core::int*}) →* core::int* {
+  get getter6() → (core::int, {b: core::int}) → core::int {
     self::enableRead = false;
     return #C6;
   }
-  get getter7() → ({a: core::int*, b: core::int*}) →* core::int* {
+  get getter7() → ({a: core::int, b: core::int}) → core::int {
     self::enableRead = false;
     return #C7;
   }
 }
-static field core::bool* enableRead = true;
-static method read(core::int* value) → core::int*
-  return self::enableRead ?{core::int*} value : 1.{core::int::unary-}(){() →* core::int*};
-static method method1() → core::int*
+static field core::bool enableRead = true;
+static method read(core::int value) → core::int
+  return self::enableRead ?{core::int} value : 1.{core::int::unary-}(){() → core::int};
+static method method1() → core::int
   return 0;
-static method method2(core::int* a) → core::int*
-  return a.{core::int::unary-}(){() →* core::int*};
-static method method3(core::int* a, core::int* b) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method4(core::int* a, [core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method5([core::int* a = #C8, core::int* b = #C8]) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method6(core::int* a, {core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
-static method method7({core::int* a = #C8, core::int* b = #C8}) → core::int*
-  return a.{core::num::-}(b){(core::num*) →* core::int*};
+static method method2(core::int a) → core::int
+  return a.{core::int::unary-}(){() → core::int};
+static method method3(core::int a, core::int b) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method4(core::int a, [core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method5([core::int a = #C8, core::int b = #C8]) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method6(core::int a, {core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
+static method method7({core::int a = #C8, core::int b = #C8}) → core::int
+  return a.{core::num::-}(b){(core::num) → core::int};
 static method main() → dynamic {
   self::callField(new self::Class::•());
   self::callGetter(new self::Class::•());
   self::callField(new self::Subclass::•());
   self::callGetter(new self::Subclass::•());
 }
-static method callField(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::field1a}{core::Function*}());
-  self::expect(0, c.{self::Class::field1b}{() →* core::int*}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t1 = c in let final core::int* #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int*) →* core::int*}(#t2){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t3 = c in let final core::int* #t4 = self::read(12) in let final core::int* #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int*, core::int*) →* core::int*}(#t4, #t5){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t6 = c in let final core::int* #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t7){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t8 = c in let final core::int* #t9 = self::read(12) in let final core::int* #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int*, [core::int*]) →* core::int*}(#t9, #t10){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t11 = c in let final core::int* #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t12){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t13 = c in let final core::int* #t14 = self::read(12) in let final core::int* #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int*, core::int*]) →* core::int*}(#t14, #t15){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t16 = c in let final core::int* #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t17){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t18 = c in let final core::int* #t19 = self::read(12) in let final core::int* #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int*, {b: core::int*}) →* core::int*}(#t19, b: #t20){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t21 = c in let final core::int* #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t22){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t23 = c in let final core::int* #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t24){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t25 = c in let final core::int* #t26 = self::read(12) in let final core::int* #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t26, b: #t27){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t28 = c in let final core::int* #t29 = self::read(23) in let final core::int* #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t29, a: #t30){({a: core::int*, b: core::int*}) →* core::int*});
+static method callField(self::Class c) → dynamic {
+  self::expect(0, c.{self::Class::field1a}{core::Function}());
+  self::expect(0, c.{self::Class::field1b}{() → core::int}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t1 = c in let final core::int #t2 = self::read(42) in #t1.{self::Class::field2}{(core::int) → core::int}(#t2){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t3 = c in let final core::int #t4 = self::read(12) in let final core::int #t5 = self::read(23) in #t3.{self::Class::field3}{(core::int, core::int) → core::int}(#t4, #t5){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t6 = c in let final core::int #t7 = self::read(12) in #t6.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t7){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t8 = c in let final core::int #t9 = self::read(12) in let final core::int #t10 = self::read(23) in #t8.{self::Class::field4}{(core::int, [core::int]) → core::int}(#t9, #t10){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::field5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t11 = c in let final core::int #t12 = self::read(12) in #t11.{self::Class::field5}{([core::int, core::int]) → core::int}(#t12){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t13 = c in let final core::int #t14 = self::read(12) in let final core::int #t15 = self::read(23) in #t13.{self::Class::field5}{([core::int, core::int]) → core::int}(#t14, #t15){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t16 = c in let final core::int #t17 = self::read(12) in #t16.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t17){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t18 = c in let final core::int #t19 = self::read(12) in let final core::int #t20 = self::read(23) in #t18.{self::Class::field6}{(core::int, {b: core::int}) → core::int}(#t19, b: #t20){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t21 = c in let final core::int #t22 = self::read(12) in #t21.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t22){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t23 = c in let final core::int #t24 = self::read(23) in #t23.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(b: #t24){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t25 = c in let final core::int #t26 = self::read(12) in let final core::int #t27 = self::read(23) in #t25.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(a: #t26, b: #t27){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t28 = c in let final core::int #t29 = self::read(23) in let final core::int #t30 = self::read(12) in #t28.{self::Class::field7}{({a: core::int, b: core::int}) → core::int}(b: #t29, a: #t30){({a: core::int, b: core::int}) → core::int});
 }
-static method callGetter(self::Class* c) → dynamic {
-  self::expect(0, c.{self::Class::getter1a}{core::Function*}());
-  self::expect(0, c.{self::Class::getter1b}{() →* core::int*}(){() →* core::int*});
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int*) →* core::int*}(#t32){(core::int*) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int*, core::int*) →* core::int*}(#t34, #t35){(core::int*, core::int*) →* core::int*});
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t37){(core::int*, [core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int*, [core::int*]) →* core::int*}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
-  self::expect(0, c.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t42){([core::int*, core::int*]) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int*, core::int*]) →* core::int*}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t47){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int*, {b: core::int*}) →* core::int*}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
-  self::expect(0, c.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int*, b: core::int*}) →* core::int*}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
+static method callGetter(self::Class c) → dynamic {
+  self::expect(0, c.{self::Class::getter1a}{core::Function}());
+  self::expect(0, c.{self::Class::getter1b}{() → core::int}(){() → core::int});
+  self::expect(42.{core::int::unary-}(){() → core::int}, let final self::Class #t31 = c in let final core::int #t32 = self::read(42) in #t31.{self::Class::getter2}{(core::int) → core::int}(#t32){(core::int) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t33 = c in let final core::int #t34 = self::read(12) in let final core::int #t35 = self::read(23) in #t33.{self::Class::getter3}{(core::int, core::int) → core::int}(#t34, #t35){(core::int, core::int) → core::int});
+  self::expect(12, let final self::Class #t36 = c in let final core::int #t37 = self::read(12) in #t36.{self::Class::getter4}{(core::int, [core::int]) → core::int}(#t37){(core::int, [core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t38 = c in let final core::int #t39 = self::read(12) in let final core::int #t40 = self::read(23) in #t38.{self::Class::getter4}{(core::int, [core::int]) → core::int}(#t39, #t40){(core::int, [core::int]) → core::int});
+  self::expect(0, c.{self::Class::getter5}{([core::int, core::int]) → core::int}(){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t41 = c in let final core::int #t42 = self::read(12) in #t41.{self::Class::getter5}{([core::int, core::int]) → core::int}(#t42){([core::int, core::int]) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t43 = c in let final core::int #t44 = self::read(12) in let final core::int #t45 = self::read(23) in #t43.{self::Class::getter5}{([core::int, core::int]) → core::int}(#t44, #t45){([core::int, core::int]) → core::int});
+  self::expect(12, let final self::Class #t46 = c in let final core::int #t47 = self::read(12) in #t46.{self::Class::getter6}{(core::int, {b: core::int}) → core::int}(#t47){(core::int, {b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t48 = c in let final core::int #t49 = self::read(12) in let final core::int #t50 = self::read(23) in #t48.{self::Class::getter6}{(core::int, {b: core::int}) → core::int}(#t49, b: #t50){(core::int, {b: core::int}) → core::int});
+  self::expect(0, c.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(){({a: core::int, b: core::int}) → core::int});
+  self::expect(12, let final self::Class #t51 = c in let final core::int #t52 = self::read(12) in #t51.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(a: #t52){({a: core::int, b: core::int}) → core::int});
+  self::expect(23.{core::int::unary-}(){() → core::int}, let final self::Class #t53 = c in let final core::int #t54 = self::read(23) in #t53.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(b: #t54){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t55 = c in let final core::int #t56 = self::read(12) in let final core::int #t57 = self::read(23) in #t55.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(a: #t56, b: #t57){({a: core::int, b: core::int}) → core::int});
+  self::expect(11.{core::int::unary-}(){() → core::int}, let final self::Class #t58 = c in let final core::int #t59 = self::read(23) in let final core::int #t60 = self::read(12) in #t58.{self::Class::getter7}{({a: core::int, b: core::int}) → core::int}(b: #t59, a: #t60){({a: core::int, b: core::int}) → core::int});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, ${actual}";
 }
 
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart b/pkg/front_end/testcases/general/getter_vs_setter_type.dart
index 42b228d..49c2cf5 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.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
+
 abstract class A {
   int get property1; // ok
   void set property1(int i);
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
index e38d7f0..49bf798 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
@@ -2,162 +2,162 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:15:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:17:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
 //   String get property3; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:16:12: Context: This is the declaration of the setter 'A.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:18:12: Context: This is the declaration of the setter 'A.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:33:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:35:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
 //   static num get property9 => 0; // error
 //                  ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:34:19: Context: This is the declaration of the setter 'A.property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:36:19: Context: This is the declaration of the setter 'A.property9'.
 //   static void set property9(String value) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:56:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
 //   void set property2(String i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:40:11: Context: This is the declaration of the getter 'B1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:11: Context: This is the declaration of the getter 'B1.property2'.
 //   int get property2;
 //           ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:60:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
 //   void set property3(int i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:14: Context: This is the declaration of the getter 'B1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:44:14: Context: This is the declaration of the getter 'B1.property3'.
 //   String get property3;
 //              ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:62:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
 //   void set property5(String i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:46:13: Context: This is the declaration of the field 'B1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:13: Context: This is the declaration of the field 'B1.property5'.
 //   final int property5;
 //             ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:66:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
 //   void set property6(int i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:16: Context: This is the declaration of the field 'B1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:50:16: Context: This is the declaration of the field 'B1.property6'.
 //   final String property6;
 //                ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:84:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
 //   int get property2; // error
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:70:12: Context: This is the declaration of the setter 'C1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property2'.
 //   void set property2(String i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:88:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
 //   String get property3; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:74:12: Context: This is the declaration of the setter 'C1.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:94:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
 //   int get property5; // error
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:10: Context: This is the declaration of the setter 'C1.property5'.
 //   String property5;
 //          ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:98:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
 //   String get property6; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:80:7: Context: This is the declaration of the setter 'C1.property6'.
 //   int property6;
 //       ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:94:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
 // Change to a subtype of 'String'.
 //   int get property5; // error
 //           ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the overridden method ('property5').
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:10: Context: This is the overridden method ('property5').
 //   String property5;
 //          ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:98:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
 // Change to a subtype of 'int'.
 //   String get property6; // error
 //              ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the overridden method ('property6').
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:80:7: Context: This is the overridden method ('property6').
 //   int property6;
 //       ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
-// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
-//                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
-//   int get property2;
-//           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
-//   void set property2(String i);
-//            ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
-// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
-//                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
-//   String get property3;
-//              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
-//   void set property3(int i);
-//            ^^^^^^^^^
-//
 // pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
-// abstract class D4
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
 //                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:11: Context: This is the declaration of the getter 'D1.property2'.
 //   int get property2;
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property2'.
 //   void set property2(String i);
 //            ^^^^^^^^^
 //
 // pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
-// abstract class D4
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
 //                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:106:14: Context: This is the declaration of the getter 'D1.property3'.
 //   String get property3;
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:114:12: Context: This is the declaration of the setter 'D2.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:130:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:119:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:11: Context: This is the declaration of the getter 'D1.property2'.
+//   int get property2;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property2'.
+//   void set property2(String i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:119:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:106:14: Context: This is the declaration of the getter 'D1.property3'.
+//   String get property3;
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:114:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:132:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
 //   String get property3 => ''; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:131:12: Context: This is the declaration of the setter 'property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:12: Context: This is the declaration of the setter 'property3'.
 //   void set property3(int i) {}
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:142:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:144:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
 //   String get property6 => ''; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:143:12: Context: This is the declaration of the setter 'property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:145:12: Context: This is the declaration of the setter 'property6'.
 //   void set property6(S i) {}
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:154:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:156:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
 //   static num get property9 => 0; // error
 //                  ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:155:19: Context: This is the declaration of the setter 'property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:157:19: Context: This is the declaration of the setter 'property9'.
 //   static void set property9(String value) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:135:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
 //   S get property4 => 0; // ok
 //                      ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:138:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
 //   S get property5a => 0; // ok
 //                       ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:141:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
 //   T get property5b => 0; // ok
 //                       ^
 //
@@ -391,17 +391,17 @@
   return "";
 static method Extension|set#property3<T extends core::num*, S extends self::Extension|set#property3::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
 static method Extension|get#property4<T extends core::num*, S extends self::Extension|get#property4::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property4::S*
-  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:135:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError} Never;
 static method Extension|set#property4<T extends core::num*, S extends self::Extension|set#property4::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property4::S* i) → void {}
 static method Extension|get#property5a<T extends core::num*, S extends self::Extension|get#property5a::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5a::S*
-  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:138:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property5a => 0; // ok
                       ^" in 0 as{TypeError} Never;
 static method Extension|set#property5a<T extends core::num*, S extends self::Extension|set#property5a::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5a::T* i) → void {}
 static method Extension|get#property5b<T extends core::num*, S extends self::Extension|get#property5b::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5b::T*
-  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:141:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
   T get property5b => 0; // ok
                       ^" in 0 as{TypeError} Never;
 static method Extension|set#property5b<T extends core::num*, S extends self::Extension|set#property5b::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5b::S* i) → void {}
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect
index e38d7f0..49bf798 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.modular.expect
@@ -2,162 +2,162 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:15:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:17:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
 //   String get property3; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:16:12: Context: This is the declaration of the setter 'A.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:18:12: Context: This is the declaration of the setter 'A.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:33:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:35:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
 //   static num get property9 => 0; // error
 //                  ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:34:19: Context: This is the declaration of the setter 'A.property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:36:19: Context: This is the declaration of the setter 'A.property9'.
 //   static void set property9(String value) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:56:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
 //   void set property2(String i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:40:11: Context: This is the declaration of the getter 'B1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:11: Context: This is the declaration of the getter 'B1.property2'.
 //   int get property2;
 //           ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:60:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
 //   void set property3(int i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:14: Context: This is the declaration of the getter 'B1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:44:14: Context: This is the declaration of the getter 'B1.property3'.
 //   String get property3;
 //              ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:62:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
 //   void set property5(String i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:46:13: Context: This is the declaration of the field 'B1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:13: Context: This is the declaration of the field 'B1.property5'.
 //   final int property5;
 //             ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:66:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
 //   void set property6(int i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:16: Context: This is the declaration of the field 'B1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:50:16: Context: This is the declaration of the field 'B1.property6'.
 //   final String property6;
 //                ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:84:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
 //   int get property2; // error
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:70:12: Context: This is the declaration of the setter 'C1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property2'.
 //   void set property2(String i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:88:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
 //   String get property3; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:74:12: Context: This is the declaration of the setter 'C1.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:94:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
 //   int get property5; // error
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:10: Context: This is the declaration of the setter 'C1.property5'.
 //   String property5;
 //          ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:98:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
 //   String get property6; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:80:7: Context: This is the declaration of the setter 'C1.property6'.
 //   int property6;
 //       ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:94:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
 // Change to a subtype of 'String'.
 //   int get property5; // error
 //           ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the overridden method ('property5').
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:10: Context: This is the overridden method ('property5').
 //   String property5;
 //          ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:98:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
 // Change to a subtype of 'int'.
 //   String get property6; // error
 //              ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the overridden method ('property6').
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:80:7: Context: This is the overridden method ('property6').
 //   int property6;
 //       ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
-// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
-//                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
-//   int get property2;
-//           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
-//   void set property2(String i);
-//            ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
-// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
-//                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
-//   String get property3;
-//              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
-//   void set property3(int i);
-//            ^^^^^^^^^
-//
 // pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
-// abstract class D4
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
 //                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:11: Context: This is the declaration of the getter 'D1.property2'.
 //   int get property2;
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property2'.
 //   void set property2(String i);
 //            ^^^^^^^^^
 //
 // pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
-// abstract class D4
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
 //                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:106:14: Context: This is the declaration of the getter 'D1.property3'.
 //   String get property3;
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:114:12: Context: This is the declaration of the setter 'D2.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:130:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:119:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:11: Context: This is the declaration of the getter 'D1.property2'.
+//   int get property2;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property2'.
+//   void set property2(String i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:119:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:106:14: Context: This is the declaration of the getter 'D1.property3'.
+//   String get property3;
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:114:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:132:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
 //   String get property3 => ''; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:131:12: Context: This is the declaration of the setter 'property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:12: Context: This is the declaration of the setter 'property3'.
 //   void set property3(int i) {}
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:142:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:144:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
 //   String get property6 => ''; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:143:12: Context: This is the declaration of the setter 'property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:145:12: Context: This is the declaration of the setter 'property6'.
 //   void set property6(S i) {}
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:154:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:156:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
 //   static num get property9 => 0; // error
 //                  ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:155:19: Context: This is the declaration of the setter 'property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:157:19: Context: This is the declaration of the setter 'property9'.
 //   static void set property9(String value) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:135:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
 //   S get property4 => 0; // ok
 //                      ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:138:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
 //   S get property5a => 0; // ok
 //                       ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:141:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
 //   T get property5b => 0; // ok
 //                       ^
 //
@@ -391,17 +391,17 @@
   return "";
 static method Extension|set#property3<T extends core::num*, S extends self::Extension|set#property3::T* = core::num*>(lowered final core::int* #this, core::int* i) → void {}
 static method Extension|get#property4<T extends core::num*, S extends self::Extension|get#property4::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property4::S*
-  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:135:22: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property4 => 0; // ok
                      ^" in 0 as{TypeError} Never;
 static method Extension|set#property4<T extends core::num*, S extends self::Extension|set#property4::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property4::S* i) → void {}
 static method Extension|get#property5a<T extends core::num*, S extends self::Extension|get#property5a::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5a::S*
-  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:136:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:138:23: Error: A value of type 'int' can't be assigned to a variable of type 'S'.
   S get property5a => 0; // ok
                       ^" in 0 as{TypeError} Never;
 static method Extension|set#property5a<T extends core::num*, S extends self::Extension|set#property5a::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5a::T* i) → void {}
 static method Extension|get#property5b<T extends core::num*, S extends self::Extension|get#property5b::T* = core::num*>(lowered final core::int* #this) → self::Extension|get#property5b::T*
-  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:139:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
+  return invalid-expression "pkg/front_end/testcases/general/getter_vs_setter_type.dart:141:23: Error: A value of type 'int' can't be assigned to a variable of type 'T'.
   T get property5b => 0; // ok
                       ^" in 0 as{TypeError} Never;
 static method Extension|set#property5b<T extends core::num*, S extends self::Extension|set#property5b::T* = core::num*>(lowered final core::int* #this, self::Extension|set#property5b::S* i) → void {}
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect
index 360523b..df2714e 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect
@@ -2,150 +2,150 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:15:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:17:14: Error: The type 'String' of the getter 'A.property3' is not assignable to the type 'int' of the setter 'A.property3'.
 //   String get property3; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:16:12: Context: This is the declaration of the setter 'A.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:18:12: Context: This is the declaration of the setter 'A.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:33:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:35:18: Error: The type 'num' of the getter 'A.property9' is not assignable to the type 'String' of the setter 'A.property9'.
 //   static num get property9 => 0; // error
 //                  ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:34:19: Context: This is the declaration of the setter 'A.property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:36:19: Context: This is the declaration of the setter 'A.property9'.
 //   static void set property9(String value) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:56:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'int' of the inherited getter 'B1.property2' is not assignable to the type 'String' of the setter 'B2.property2'.
 //   void set property2(String i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:40:11: Context: This is the declaration of the getter 'B1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:11: Context: This is the declaration of the getter 'B1.property2'.
 //   int get property2;
 //           ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:58:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:60:12: Error: The type 'String' of the inherited getter 'B1.property3' is not assignable to the type 'int' of the setter 'B2.property3'.
 //   void set property3(int i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:42:14: Context: This is the declaration of the getter 'B1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:44:14: Context: This is the declaration of the getter 'B1.property3'.
 //   String get property3;
 //              ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:62:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'int' of the inherited field 'B1.property5' is not assignable to the type 'String' of the setter 'B2.property5'.
 //   void set property5(String i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:46:13: Context: This is the declaration of the field 'B1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:13: Context: This is the declaration of the field 'B1.property5'.
 //   final int property5;
 //             ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:64:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:66:12: Error: The type 'String' of the inherited field 'B1.property6' is not assignable to the type 'int' of the setter 'B2.property6'.
 //   void set property6(int i); // error
 //            ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:48:16: Context: This is the declaration of the field 'B1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:50:16: Context: This is the declaration of the field 'B1.property6'.
 //   final String property6;
 //                ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:84:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:11: Error: The type 'int' of the getter 'C2.property2' is not assignable to the type 'String' of the inherited setter 'C1.property2'.
 //   int get property2; // error
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:70:12: Context: This is the declaration of the setter 'C1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property2'.
 //   void set property2(String i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:86:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:88:14: Error: The type 'String' of the getter 'C2.property3' is not assignable to the type 'int' of the inherited setter 'C1.property3'.
 //   String get property3; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:72:12: Context: This is the declaration of the setter 'C1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:74:12: Context: This is the declaration of the setter 'C1.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:94:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
 //   int get property5; // error
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:10: Context: This is the declaration of the setter 'C1.property5'.
 //   String property5;
 //          ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:98:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
 //   String get property6; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:80:7: Context: This is the declaration of the setter 'C1.property6'.
 //   int property6;
 //       ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:94:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
 // Change to a subtype of 'String'.
 //   int get property5; // error
 //           ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the overridden method ('property5').
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:10: Context: This is the overridden method ('property5').
 //   String property5;
 //          ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:98:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
 // Change to a subtype of 'int'.
 //   String get property6; // error
 //              ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the overridden method ('property6').
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:80:7: Context: This is the overridden method ('property6').
 //   int property6;
 //       ^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
-// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
-//                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
-//   int get property2;
-//           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
-//   void set property2(String i);
-//            ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
-// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
-//                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
-//   String get property3;
-//              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
-//   void set property3(int i);
-//            ^^^^^^^^^
-//
 // pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
-// abstract class D4
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
 //                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:102:11: Context: This is the declaration of the getter 'D1.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:11: Context: This is the declaration of the getter 'D1.property2'.
 //   int get property2;
 //           ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:110:12: Context: This is the declaration of the setter 'D2.property2'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property2'.
 //   void set property2(String i);
 //            ^^^^^^^^^
 //
 // pkg/front_end/testcases/general/getter_vs_setter_type.dart:117:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
-// abstract class D4
+// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
 //                ^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:14: Context: This is the declaration of the getter 'D1.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:106:14: Context: This is the declaration of the getter 'D1.property3'.
 //   String get property3;
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:114:12: Context: This is the declaration of the setter 'D2.property3'.
 //   void set property3(int i);
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:130:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:119:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:104:11: Context: This is the declaration of the getter 'D1.property2'.
+//   int get property2;
+//           ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:112:12: Context: This is the declaration of the setter 'D2.property2'.
+//   void set property2(String i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:119:16: Error: The type 'String' of the inherited getter 'D1.property3' is not assignable to the type 'int' of the inherited setter 'D2.property3'.
+// abstract class D4
+//                ^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:106:14: Context: This is the declaration of the getter 'D1.property3'.
+//   String get property3;
+//              ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:114:12: Context: This is the declaration of the setter 'D2.property3'.
+//   void set property3(int i);
+//            ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:132:14: Error: The type 'String' of the getter 'property3' is not assignable to the type 'int' of the setter 'property3'.
 //   String get property3 => ''; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:131:12: Context: This is the declaration of the setter 'property3'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:133:12: Context: This is the declaration of the setter 'property3'.
 //   void set property3(int i) {}
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:142:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:144:14: Error: The type 'String' of the getter 'property6' is not assignable to the type 'S' of the setter 'property6'.
 //   String get property6 => ''; // error
 //              ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:143:12: Context: This is the declaration of the setter 'property6'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:145:12: Context: This is the declaration of the setter 'property6'.
 //   void set property6(S i) {}
 //            ^^^^^^^^^
 //
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:154:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:156:18: Error: The type 'num' of the getter 'property9' is not assignable to the type 'String' of the setter 'property9'.
 //   static num get property9 => 0; // error
 //                  ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:155:19: Context: This is the declaration of the setter 'property9'.
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:157:19: Context: This is the declaration of the setter 'property9'.
 //   static void set property9(String value) {}
 //                   ^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart
index 1d6250a..ef30a9b 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.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
-
 @Foo
 part 'having_part_with_part_and_annotation_lib1.dart';
 
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline.expect
index b4e21de..b2d893c 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @Foo
 part 'having_part_with_part_and_annotation_lib1.dart';
 
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline_modelled.expect
index 2f0c5fc..4ce86ce 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @Foo
 part 'having_part_with_part_and_annotation_lib1.dart';
 
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.expect
index 5744ee3..2d68fe5 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:10:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:8:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_part_and_annotation_lib2.dart';
 //      ^
@@ -13,8 +13,8 @@
 
 @#C1
 part having_part_with_part_and_annotation_lib1.dart;
-static const field core::int* Foo = #C1;
-static const field core::int* Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
+static const field core::int Foo = #C1;
+static const field core::int Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
 static method fromMain() → void {}
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */ fromLib1() → void {}
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect
index 5744ee3..2d68fe5 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:10:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:8:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_part_and_annotation_lib2.dart';
 //      ^
@@ -13,8 +13,8 @@
 
 @#C1
 part having_part_with_part_and_annotation_lib1.dart;
-static const field core::int* Foo = #C1;
-static const field core::int* Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
+static const field core::int Foo = #C1;
+static const field core::int Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
 static method fromMain() → void {}
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */ fromLib1() → void {}
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.outline.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.outline.expect
index e2f8b6b..8a27d8f 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:10:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:8:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_part_and_annotation_lib2.dart';
 //      ^
@@ -12,8 +12,8 @@
 import "dart:core" as core;
 
 part having_part_with_part_and_annotation_lib1.dart;
-static const field core::int* Foo = 42;
-static const field core::int* Bar = 43 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
+static const field core::int Foo = 42;
+static const field core::int Bar = 43 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
 static method fromMain() → void
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.transformed.expect
index 5744ee3..2d68fe5 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:10:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart:8:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_part_and_annotation_lib2.dart';
 //      ^
@@ -13,8 +13,8 @@
 
 @#C1
 part having_part_with_part_and_annotation_lib1.dart;
-static const field core::int* Foo = #C1;
-static const field core::int* Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
+static const field core::int Foo = #C1;
+static const field core::int Bar = #C2 /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */;
 static method fromMain() → void {}
 static method main() → dynamic {}
 static method /* from org-dartlang-testcase:///having_part_with_part_and_annotation_lib1.dart */ fromLib1() → void {}
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart b/pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart
index c7d4d5d..4aff0bb 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib1.dart
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation_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
-
 part of 'having_part_with_part_and_annotation.dart';
 
 @Bar
diff --git a/pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib2.dart b/pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib2.dart
index e92c214..b61dce8 100644
--- a/pkg/front_end/testcases/general/having_part_with_part_and_annotation_lib2.dart
+++ b/pkg/front_end/testcases/general/having_part_with_part_and_annotation_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
-
 part of 'having_part_with_part_and_annotation_lib1.dart';
 
 void fromLib2() {}
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart
index a0ea7f5..4db6727 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.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
+
 @Foo
 part 'having_part_with_parts_and_annotation_lib1.dart';
 
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline.expect
index 0395dc8..24ca63b 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @Foo
 part 'having_part_with_parts_and_annotation_lib1.dart';
 
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline_modelled.expect
index 54885d0..754ba3f 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 @Foo
 part 'having_part_with_parts_and_annotation_lib1.dart';
 
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.expect
index 9054021..ee96063 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.expect
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.expect
@@ -1,21 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:6:6: Error: The language version override has to be the same in the library and its part(s).
-// part 'having_part_with_parts_and_annotation_lib1.dart';
-//      ^
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:4:1: Context: This is language version annotation in the library.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:4:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:3:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
 // pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart: Context: This is the containing library.
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:6:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:5:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
@@ -26,12 +19,12 @@
 
 @#C1
 part having_part_with_parts_and_annotation_lib1.dart;
-static const field core::int* Foo = #C1;
-static const field core::int* Bar = #C2 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
-static const field core::int* Baz = #C3 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Foo = #C1;
+static const field core::int Bar = #C2 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Baz = #C3 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
 static method fromMain() → void {}
 static method main() → dynamic {}
-static method /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
+static method /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
 
 constants  {
   #C1 = 42
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect
index 9054021..ee96063 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.modular.expect
@@ -1,21 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:6:6: Error: The language version override has to be the same in the library and its part(s).
-// part 'having_part_with_parts_and_annotation_lib1.dart';
-//      ^
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:4:1: Context: This is language version annotation in the library.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:4:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:3:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
 // pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart: Context: This is the containing library.
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:6:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:5:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
@@ -26,12 +19,12 @@
 
 @#C1
 part having_part_with_parts_and_annotation_lib1.dart;
-static const field core::int* Foo = #C1;
-static const field core::int* Bar = #C2 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
-static const field core::int* Baz = #C3 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Foo = #C1;
+static const field core::int Bar = #C2 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Baz = #C3 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
 static method fromMain() → void {}
 static method main() → dynamic {}
-static method /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
+static method /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
 
 constants  {
   #C1 = 42
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.outline.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.outline.expect
index 7d7ae36..f33c792 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.outline.expect
@@ -1,21 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:6:6: Error: The language version override has to be the same in the library and its part(s).
-// part 'having_part_with_parts_and_annotation_lib1.dart';
-//      ^
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:4:1: Context: This is language version annotation in the library.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:4:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:3:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
 // pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart: Context: This is the containing library.
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:6:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:5:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
@@ -25,12 +18,12 @@
 import "dart:core" as core;
 
 part having_part_with_parts_and_annotation_lib1.dart;
-static const field core::int* Foo = 42;
-static const field core::int* Bar = 43 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
-static const field core::int* Baz = 44 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Foo = 42;
+static const field core::int Bar = 43 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Baz = 44 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
 static method fromMain() → void
   ;
 static method main() → dynamic
   ;
-static method /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void
+static method /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void
   ;
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.transformed.expect b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.transformed.expect
index 9054021..ee96063 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart.weak.transformed.expect
@@ -1,21 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:6:6: Error: The language version override has to be the same in the library and its part(s).
-// part 'having_part_with_parts_and_annotation_lib1.dart';
-//      ^
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart:4:1: Context: This is language version annotation in the library.
-// // @dart=2.9
-// ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:4:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:3:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
 // pkg/front_end/testcases/general/having_part_with_parts_and_annotation.dart: Context: This is the containing library.
 //
-// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:6:6: Error: A file that's a part of a library can't have parts itself.
+// pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart:5:6: Error: A file that's a part of a library can't have parts itself.
 // Try moving the 'part' declaration to the containing library.
 // part 'having_part_with_parts_and_annotation_lib2.dart';
 //      ^
@@ -26,12 +19,12 @@
 
 @#C1
 part having_part_with_parts_and_annotation_lib1.dart;
-static const field core::int* Foo = #C1;
-static const field core::int* Bar = #C2 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
-static const field core::int* Baz = #C3 /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Foo = #C1;
+static const field core::int Bar = #C2 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
+static const field core::int Baz = #C3 /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */;
 static method fromMain() → void {}
 static method main() → dynamic {}
-static method /*isNonNullableByDefault, from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
+static method /* from org-dartlang-testcase:///having_part_with_parts_and_annotation_lib1.dart */ fromLib1() → void {}
 
 constants  {
   #C1 = 42
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart
index b80296e..e640da4 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib1.dart
@@ -1,5 +1,4 @@
 part of 'having_part_with_parts_and_annotation.dart';
-// @dart=2.9
 @Bar
 part 'having_part_with_parts_and_annotation_lib2.dart';
 @Baz
diff --git a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib2.dart b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib2.dart
index cc6767a..f5c6150 100644
--- a/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib2.dart
+++ b/pkg/front_end/testcases/general/having_part_with_parts_and_annotation_lib2.dart
@@ -1,4 +1,3 @@
 part of 'having_part_with_parts_and_annotation_lib1.dart';
 
-// @dart=2.9
 void fromLib2() {}
diff --git a/pkg/front_end/testcases/general/hello.dart b/pkg/front_end/testcases/general/hello.dart
index 47d3fa4..bcb7f2e 100644
--- a/pkg/front_end/testcases/general/hello.dart
+++ b/pkg/front_end/testcases/general/hello.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
+
 main() {
   print("Hello, World!");
 }
diff --git a/pkg/front_end/testcases/general/hello.dart.textual_outline.expect b/pkg/front_end/testcases/general/hello.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/hello.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/hello.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/hello.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/hello.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/hello.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/hello.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/hello.dart.weak.expect b/pkg/front_end/testcases/general/hello.dart.weak.expect
index fea7b39..ab5dd90 100644
--- a/pkg/front_end/testcases/general/hello.dart.weak.expect
+++ b/pkg/front_end/testcases/general/hello.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/hello.dart.weak.modular.expect b/pkg/front_end/testcases/general/hello.dart.weak.modular.expect
index fea7b39..ab5dd90 100644
--- a/pkg/front_end/testcases/general/hello.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/hello.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/hello.dart.weak.outline.expect b/pkg/front_end/testcases/general/hello.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/hello.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/hello.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/hello.dart.weak.transformed.expect b/pkg/front_end/testcases/general/hello.dart.weak.transformed.expect
index fea7b39..ab5dd90 100644
--- a/pkg/front_end/testcases/general/hello.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/hello.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/hierarchy.dart b/pkg/front_end/testcases/general/hierarchy.dart
index 241e463..8c4f658 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart
+++ b/pkg/front_end/testcases/general/hierarchy.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 A1 {
   void extendedClassMember() {}
   void extendedInterfaceMember();
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect
index 7e60bdc..15a7cc5 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A1 {
   void extendedClassMember() {}
   void extendedInterfaceMember();
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect
index 0a7db26..916bcc2 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A1 {
   void extendedClassMember() {}
   void extendedInterfaceMember();
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.expect
index 42fb0ba..6b21ed8 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -97,41 +97,21 @@
 import "dart:core" as core;
 
 abstract class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method extendedClassMember() → void {}
   abstract method extendedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 A2 extends core::Object {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     : super core::Object::•()
     ;
   method mixedInClassMember() → void {}
   abstract method mixedInInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A3&A1&A2*
+  synthetic constructor •() → self::_A3&A1&A2
     : super self::A1::•()
     ;
   mixin-super-stub method mixedInClassMember() → void
@@ -139,14 +119,14 @@
   abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
 }
 abstract class A3 extends self::_A3&A1&A2 {
-  synthetic constructor •() → self::A3*
+  synthetic constructor •() → self::A3
     : super self::_A3&A1&A2::•()
     ;
   method declaredClassMember() → void {}
   abstract method declaredInterfaceMember() → void;
 }
 abstract class A4 = self::A1 with self::A2 {
-  synthetic constructor •() → self::A4*
+  synthetic constructor •() → self::A4
     : super self::A1::•()
     ;
   mixin-super-stub method mixedInClassMember() → void
@@ -154,171 +134,91 @@
   abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
 }
 abstract class A5 extends core::Object implements self::A1 {
-  synthetic constructor •() → self::A5*
+  synthetic constructor •() → self::A5
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A6 extends self::A1 implements self::A1 {
-  synthetic constructor •() → self::A6*
+  synthetic constructor •() → self::A6
     : super self::A1::•()
     ;
 }
 abstract class B1 extends core::Object {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super core::Object::•()
     ;
   method twiceInterfaceMember() → void {}
   method extendedAndImplementedMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B2 extends core::Object {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     : super core::Object::•()
     ;
   method twiceInterfaceMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B3 extends core::Object {
-  synthetic constructor •() → self::B3*
+  synthetic constructor •() → self::B3
     : super core::Object::•()
     ;
   method extendedAndImplementedMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B4 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B4*
+  synthetic constructor •() → self::B4
     : super self::B3::•()
     ;
 }
 class B5 extends self::B4 {
-  synthetic constructor •() → self::B5*
+  synthetic constructor •() → self::B5
     : super self::B4::•()
     ;
 }
 class B6 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B6*
+  synthetic constructor •() → self::B6
     : super self::B3::•()
     ;
 }
 abstract class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
   abstract method mixedInAndImplementedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
   method mixedInAndImplementedInterfaceMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&C1*
+  const synthetic constructor •() → self::_C3&Object&C1
     : super core::Object::•()
     ;
   mixin-super-stub method mixedInAndImplementedClassMember() → void
     return super.{self::C1::mixedInAndImplementedClassMember}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
 }
 abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super self::_C3&Object&C1::•()
     ;
 }
 class C4 extends self::C3 {
-  synthetic constructor •() → self::C4*
+  synthetic constructor •() → self::C4
     : super self::C3::•()
     ;
 }
 abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C5&Object&C1*
+  const synthetic constructor •() → self::_C5&Object&C1
     : super core::Object::•()
     ;
   mixin-super-stub method mixedInAndImplementedClassMember() → void
     return super.{self::C1::mixedInAndImplementedClassMember}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
 }
 class C5 extends self::_C5&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C5*
+  synthetic constructor •() → self::C5
     : super self::_C5&Object&C1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
index 42fb0ba..6b21ed8 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -97,41 +97,21 @@
 import "dart:core" as core;
 
 abstract class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method extendedClassMember() → void {}
   abstract method extendedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 A2 extends core::Object {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     : super core::Object::•()
     ;
   method mixedInClassMember() → void {}
   abstract method mixedInInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A3&A1&A2*
+  synthetic constructor •() → self::_A3&A1&A2
     : super self::A1::•()
     ;
   mixin-super-stub method mixedInClassMember() → void
@@ -139,14 +119,14 @@
   abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
 }
 abstract class A3 extends self::_A3&A1&A2 {
-  synthetic constructor •() → self::A3*
+  synthetic constructor •() → self::A3
     : super self::_A3&A1&A2::•()
     ;
   method declaredClassMember() → void {}
   abstract method declaredInterfaceMember() → void;
 }
 abstract class A4 = self::A1 with self::A2 {
-  synthetic constructor •() → self::A4*
+  synthetic constructor •() → self::A4
     : super self::A1::•()
     ;
   mixin-super-stub method mixedInClassMember() → void
@@ -154,171 +134,91 @@
   abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
 }
 abstract class A5 extends core::Object implements self::A1 {
-  synthetic constructor •() → self::A5*
+  synthetic constructor •() → self::A5
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A6 extends self::A1 implements self::A1 {
-  synthetic constructor •() → self::A6*
+  synthetic constructor •() → self::A6
     : super self::A1::•()
     ;
 }
 abstract class B1 extends core::Object {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super core::Object::•()
     ;
   method twiceInterfaceMember() → void {}
   method extendedAndImplementedMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B2 extends core::Object {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     : super core::Object::•()
     ;
   method twiceInterfaceMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B3 extends core::Object {
-  synthetic constructor •() → self::B3*
+  synthetic constructor •() → self::B3
     : super core::Object::•()
     ;
   method extendedAndImplementedMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B4 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B4*
+  synthetic constructor •() → self::B4
     : super self::B3::•()
     ;
 }
 class B5 extends self::B4 {
-  synthetic constructor •() → self::B5*
+  synthetic constructor •() → self::B5
     : super self::B4::•()
     ;
 }
 class B6 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B6*
+  synthetic constructor •() → self::B6
     : super self::B3::•()
     ;
 }
 abstract class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
   abstract method mixedInAndImplementedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
   method mixedInAndImplementedInterfaceMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&C1*
+  const synthetic constructor •() → self::_C3&Object&C1
     : super core::Object::•()
     ;
   mixin-super-stub method mixedInAndImplementedClassMember() → void
     return super.{self::C1::mixedInAndImplementedClassMember}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
 }
 abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super self::_C3&Object&C1::•()
     ;
 }
 class C4 extends self::C3 {
-  synthetic constructor •() → self::C4*
+  synthetic constructor •() → self::C4
     : super self::C3::•()
     ;
 }
 abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C5&Object&C1*
+  const synthetic constructor •() → self::_C5&Object&C1
     : super core::Object::•()
     ;
   mixin-super-stub method mixedInAndImplementedClassMember() → void
     return super.{self::C1::mixedInAndImplementedClassMember}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
 }
 class C5 extends self::_C5&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C5*
+  synthetic constructor •() → self::C5
     : super self::_C5&Object&C1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect
index f96deda..7b80967 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -97,41 +97,21 @@
 import "dart:core" as core;
 
 abstract class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     ;
   method extendedClassMember() → void
     ;
   abstract method extendedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 A2 extends core::Object {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     ;
   method mixedInClassMember() → void
     ;
   abstract method mixedInInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_A3&A1&A2*
+  synthetic constructor •() → self::_A3&A1&A2
     : super self::A1::•()
     ;
   mixin-super-stub method mixedInClassMember() → void
@@ -139,14 +119,14 @@
   abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
 }
 abstract class A3 extends self::_A3&A1&A2 {
-  synthetic constructor •() → self::A3*
+  synthetic constructor •() → self::A3
     ;
   method declaredClassMember() → void
     ;
   abstract method declaredInterfaceMember() → void;
 }
 abstract class A4 = self::A1 with self::A2 {
-  synthetic constructor •() → self::A4*
+  synthetic constructor •() → self::A4
     : super self::A1::•()
     ;
   mixin-super-stub method mixedInClassMember() → void
@@ -154,166 +134,86 @@
   abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
 }
 abstract class A5 extends core::Object implements self::A1 {
-  synthetic constructor •() → self::A5*
+  synthetic constructor •() → self::A5
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A6 extends self::A1 implements self::A1 {
-  synthetic constructor •() → self::A6*
+  synthetic constructor •() → self::A6
     ;
 }
 abstract class B1 extends core::Object {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     ;
   method twiceInterfaceMember() → void
     ;
   method extendedAndImplementedMember() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B2 extends core::Object {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     ;
   method twiceInterfaceMember() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B3 extends core::Object {
-  synthetic constructor •() → self::B3*
+  synthetic constructor •() → self::B3
     ;
   method extendedAndImplementedMember() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B4 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B4*
+  synthetic constructor •() → self::B4
     ;
 }
 class B5 extends self::B4 {
-  synthetic constructor •() → self::B5*
+  synthetic constructor •() → self::B5
     ;
 }
 class B6 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B6*
+  synthetic constructor •() → self::B6
     ;
 }
 abstract class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     ;
   method mixedInAndImplementedClassMember() → void
     ;
   abstract method mixedInAndImplementedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     ;
   method mixedInAndImplementedClassMember() → void
     ;
   method mixedInAndImplementedInterfaceMember() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&C1*
+  const synthetic constructor •() → self::_C3&Object&C1
     : super core::Object::•()
     ;
   mixin-super-stub method mixedInAndImplementedClassMember() → void
     return super.{self::C1::mixedInAndImplementedClassMember}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
 }
 abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     ;
 }
 class C4 extends self::C3 {
-  synthetic constructor •() → self::C4*
+  synthetic constructor •() → self::C4
     ;
 }
 abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C5&Object&C1*
+  const synthetic constructor •() → self::_C5&Object&C1
     : super core::Object::•()
     ;
   mixin-super-stub method mixedInAndImplementedClassMember() → void
     return super.{self::C1::mixedInAndImplementedClassMember}();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
 }
 class C5 extends self::_C5&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C5*
+  synthetic constructor •() → self::C5
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect b/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect
index 1b21721..42bebee 100644
--- a/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/hierarchy.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -97,224 +97,124 @@
 import "dart:core" as core;
 
 abstract class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method extendedClassMember() → void {}
   abstract method extendedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 A2 extends core::Object {
-  synthetic constructor •() → self::A2*
+  synthetic constructor •() → self::A2
     : super core::Object::•()
     ;
   method mixedInClassMember() → void {}
   abstract method mixedInInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 _A3&A1&A2 extends self::A1 implements self::A2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_A3&A1&A2*
+  synthetic constructor •() → self::_A3&A1&A2
     : super self::A1::•()
     ;
   method mixedInClassMember() → void {}
   abstract method mixedInInterfaceMember() → void;
 }
 abstract class A3 extends self::_A3&A1&A2 {
-  synthetic constructor •() → self::A3*
+  synthetic constructor •() → self::A3
     : super self::_A3&A1&A2::•()
     ;
   method declaredClassMember() → void {}
   abstract method declaredInterfaceMember() → void;
 }
 abstract class A4 extends self::A1 implements self::A2 /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::A4*
+  synthetic constructor •() → self::A4
     : super self::A1::•()
     ;
   method mixedInClassMember() → void {}
   abstract method mixedInInterfaceMember() → void;
 }
 abstract class A5 extends core::Object implements self::A1 {
-  synthetic constructor •() → self::A5*
+  synthetic constructor •() → self::A5
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A6 extends self::A1 implements self::A1 {
-  synthetic constructor •() → self::A6*
+  synthetic constructor •() → self::A6
     : super self::A1::•()
     ;
 }
 abstract class B1 extends core::Object {
-  synthetic constructor •() → self::B1*
+  synthetic constructor •() → self::B1
     : super core::Object::•()
     ;
   method twiceInterfaceMember() → void {}
   method extendedAndImplementedMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B2 extends core::Object {
-  synthetic constructor •() → self::B2*
+  synthetic constructor •() → self::B2
     : super core::Object::•()
     ;
   method twiceInterfaceMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B3 extends core::Object {
-  synthetic constructor •() → self::B3*
+  synthetic constructor •() → self::B3
     : super core::Object::•()
     ;
   method extendedAndImplementedMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 B4 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B4*
+  synthetic constructor •() → self::B4
     : super self::B3::•()
     ;
 }
 class B5 extends self::B4 {
-  synthetic constructor •() → self::B5*
+  synthetic constructor •() → self::B5
     : super self::B4::•()
     ;
 }
 class B6 extends self::B3 implements self::B1, self::B2 {
-  synthetic constructor •() → self::B6*
+  synthetic constructor •() → self::B6
     : super self::B3::•()
     ;
 }
 abstract class C1 extends core::Object {
-  synthetic constructor •() → self::C1*
+  synthetic constructor •() → self::C1
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
   abstract method mixedInAndImplementedInterfaceMember() → void;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  synthetic constructor •() → self::C2*
+  synthetic constructor •() → self::C2
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
   method mixedInAndImplementedInterfaceMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Object&C1 extends core::Object implements self::C1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C3&Object&C1*
+  const synthetic constructor •() → self::_C3&Object&C1
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 mixedInAndImplementedInterfaceMember() → void;
 }
 abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C3*
+  synthetic constructor •() → self::C3
     : super self::_C3&Object&C1::•()
     ;
 }
 class C4 extends self::C3 {
-  synthetic constructor •() → self::C4*
+  synthetic constructor •() → self::C4
     : super self::C3::•()
     ;
 }
 abstract class _C5&Object&C1 extends core::Object implements self::C1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
-  const synthetic constructor •() → self::_C5&Object&C1*
+  const synthetic constructor •() → self::_C5&Object&C1
     : super core::Object::•()
     ;
   method mixedInAndImplementedClassMember() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 mixedInAndImplementedInterfaceMember() → void;
 }
 class C5 extends self::_C5&Object&C1 implements self::C2 {
-  synthetic constructor •() → self::C5*
+  synthetic constructor •() → self::C5
     : super self::_C5&Object&C1::•()
     ;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart b/pkg/front_end/testcases/general/if_null_in_cascade.dart
index 28ade66..00b1c61 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.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 Class {
   method() {}
 }
 
 main() {
-  Class a;
+  Class? a;
   Class b = new Class();
   a ?? b
     ..method();
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline.expect
index a758356..c83fa07 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   method() {}
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline_modelled.expect
index a758356..c83fa07 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   method() {}
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect
index 9873ac0..2ff4b75 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.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::•()
     ;
   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 {
-  self::Class* a;
-  self::Class* b = new self::Class::•();
-  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2 == null ?{self::Class*} b : #t2 in block {
-    #t1.{self::Class::method}(){() →* dynamic};
+  self::Class? a;
+  self::Class b = new self::Class::•();
+  let final self::Class #t1 = let final self::Class? #t2 = a in #t2 == null ?{self::Class} b : #t2{self::Class} in block {
+    #t1.{self::Class::method}(){() → dynamic};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.modular.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.modular.expect
index 9873ac0..2ff4b75 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.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::•()
     ;
   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 {
-  self::Class* a;
-  self::Class* b = new self::Class::•();
-  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2 == null ?{self::Class*} b : #t2 in block {
-    #t1.{self::Class::method}(){() →* dynamic};
+  self::Class? a;
+  self::Class b = new self::Class::•();
+  let final self::Class #t1 = let final self::Class? #t2 = a in #t2 == null ?{self::Class} b : #t2{self::Class} in block {
+    #t1.{self::Class::method}(){() → dynamic};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.outline.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.outline.expect
index aec3c89..4bd6c21 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-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
     ;
   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/if_null_in_cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.expect
index 9873ac0..2ff4b75 100644
--- a/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/if_null_in_cascade.dart.weak.transformed.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::•()
     ;
   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 {
-  self::Class* a;
-  self::Class* b = new self::Class::•();
-  let final self::Class* #t1 = let final self::Class* #t2 = a in #t2 == null ?{self::Class*} b : #t2 in block {
-    #t1.{self::Class::method}(){() →* dynamic};
+  self::Class? a;
+  self::Class b = new self::Class::•();
+  let final self::Class #t1 = let final self::Class? #t2 = a in #t2 == null ?{self::Class} b : #t2{self::Class} in block {
+    #t1.{self::Class::method}(){() → dynamic};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart b/pkg/front_end/testcases/general/if_null_in_list_literal.dart
index 2e5832b..b8c9e92 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart
@@ -1,8 +1,8 @@
 // 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() {
-  Object a, b;
+  Object? a, b;
   return [a ?? b];
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect
index e781dcd..5f6dd7b 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Object* a;
-  core::Object* b;
-  return <core::Object*>[let final core::Object* #t1 = a in #t1 == null ?{core::Object*} b : #t1];
+  core::Object? a;
+  core::Object? b;
+  return <core::Object?>[let final core::Object? #t1 = a in #t1 == null ?{core::Object?} b : #t1{core::Object}];
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect
index e781dcd..5f6dd7b 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.modular.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Object* a;
-  core::Object* b;
-  return <core::Object*>[let final core::Object* #t1 = a in #t1 == null ?{core::Object*} b : #t1];
+  core::Object? a;
+  core::Object? b;
+  return <core::Object?>[let final core::Object? #t1 = a in #t1 == null ?{core::Object?} b : #t1{core::Object}];
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.outline.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.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/if_null_in_list_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect
index 607d0f5..ca46a17 100644
--- a/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/if_null_in_list_literal.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 static method main() → dynamic {
-  core::Object* a;
-  core::Object* b;
-  return core::_GrowableList::_literal1<core::Object*>(let final core::Object* #t1 = a in #t1 == null ?{core::Object*} b : #t1);
+  core::Object? a;
+  core::Object? b;
+  return core::_GrowableList::_literal1<core::Object?>(let final core::Object? #t1 = a in #t1 == null ?{core::Object?} b : #t1{core::Object});
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart b/pkg/front_end/testcases/general/if_null_in_set_literal.dart
index 3fd7cbe..39688a3 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart
@@ -1,8 +1,8 @@
 // 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() {
-  Object a, b;
+  Object? a, b;
   return {a ?? b};
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect
index cc17e25..cb700ae 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::Object* a;
-  core::Object* b;
+  core::Object? a;
+  core::Object? b;
   return block {
-    final core::Set<core::Object*>* #t1 = col::LinkedHashSet::•<core::Object*>();
-    #t1.{core::Set::add}{Invariant}(let final core::Object* #t2 = a in #t2 == null ?{core::Object*} b : #t2){(core::Object*) →* core::bool*};
+    final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
+    #t1.{core::Set::add}{Invariant}(let final core::Object? #t2 = a in #t2 == null ?{core::Object?} b : #t2{core::Object}){(core::Object?) → core::bool};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect
index cc17e25..cb700ae 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.modular.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::Object* a;
-  core::Object* b;
+  core::Object? a;
+  core::Object? b;
   return block {
-    final core::Set<core::Object*>* #t1 = col::LinkedHashSet::•<core::Object*>();
-    #t1.{core::Set::add}{Invariant}(let final core::Object* #t2 = a in #t2 == null ?{core::Object*} b : #t2){(core::Object*) →* core::bool*};
+    final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
+    #t1.{core::Set::add}{Invariant}(let final core::Object? #t2 = a in #t2 == null ?{core::Object?} b : #t2{core::Object}){(core::Object?) → core::bool};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.outline.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.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/if_null_in_set_literal.dart.weak.transformed.expect b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect
index f6734712..ba90659 100644
--- a/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/if_null_in_set_literal.dart.weak.transformed.expect
@@ -1,13 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
 
 static method main() → dynamic {
-  core::Object* a;
-  core::Object* b;
+  core::Object? a;
+  core::Object? b;
   return block {
-    final core::Set<core::Object*>* #t1 = new col::_CompactLinkedHashSet::•<core::Object*>();
-    #t1.{core::Set::add}{Invariant}(let final core::Object* #t2 = a in #t2 == null ?{core::Object*} b : #t2){(core::Object*) →* core::bool*};
+    final core::Set<core::Object?> #t1 = new col::_CompactLinkedHashSet::•<core::Object?>();
+    #t1.{core::Set::add}{Invariant}(let final core::Object? #t2 = a in #t2 == null ?{core::Object?} b : #t2{core::Object}){(core::Object?) → core::bool};
   } =>#t1;
 }
diff --git a/pkg/front_end/testcases/general/ignore_function.dart b/pkg/front_end/testcases/general/ignore_function.dart
index 2e61179..b06cf23 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart
+++ b/pkg/front_end/testcases/general/ignore_function.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 "dart:core" as core;
 
 class A implements core.Function {
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.textual_outline.expect b/pkg/front_end/testcases/general/ignore_function.dart.textual_outline.expect
index 74f997b..81dde83 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "dart:core" as core;
 
 class A implements core.Function {
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/ignore_function.dart.textual_outline_modelled.expect
index 74f997b..81dde83 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "dart:core" as core;
 
 class A implements core.Function {
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.weak.expect b/pkg/front_end/testcases/general/ignore_function.dart.weak.expect
index 004e6cc..4524d99 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,51 +12,24 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 B extends core::Object implements self::Function {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 Function extends core::Object {
-  synthetic constructor •() → self::Function*
+  synthetic constructor •() → self::Function
     : super core::Object::•()
     ;
-  operator ==(core::Object* other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 {}
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect
index 004e6cc..4524d99 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,51 +12,24 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 B extends core::Object implements self::Function {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 Function extends core::Object {
-  synthetic constructor •() → self::Function*
+  synthetic constructor •() → self::Function
     : super core::Object::•()
     ;
-  operator ==(core::Object* other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 {}
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.weak.outline.expect b/pkg/front_end/testcases/general/ignore_function.dart.weak.outline.expect
index 7b3df99..d0e86be 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,49 +12,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → 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 B extends core::Object implements self::Function {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → 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 Function extends core::Object {
-  synthetic constructor •() → self::Function*
+  synthetic constructor •() → self::Function
     ;
-  operator ==(core::Object* other) → core::bool*
+  operator ==(core::Object other) → 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
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/ignore_function.dart.weak.transformed.expect
index 004e6cc..4524d99 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,51 +12,24 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 B extends core::Object implements self::Function {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  operator ==(dynamic other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 Function extends core::Object {
-  synthetic constructor •() → self::Function*
+  synthetic constructor •() → self::Function
     : super core::Object::•()
     ;
-  operator ==(core::Object* other) → core::bool*
+  operator ==(core::Object other) → core::bool
     return false;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature 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 {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart b/pkg/front_end/testcases/general/illegal_named_function_expression.dart
index 2571785..ac09db3 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.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() {
   var x = void f<T>(T t) {};
   print(x.runtimeType);
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
index 96419b3..812ba6f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  <T extends core::Object* = dynamic>(T*) →* Null x = let final <T extends core::Object* = dynamic>(T*) →* Null f = <T extends core::Object* = dynamic>(T* t) → Null {} in f;
-  core::print(x.{core::Object::runtimeType}{core::Type*});
-  core::print(let final <T extends core::Object* = dynamic>(T*) →* Null g = <T extends core::Object* = dynamic>(T* t) → Null {} in g);
+  <T extends core::Object? = dynamic>(T%) → Null x = let final <T extends core::Object? = dynamic>(T%) → Null f = <T extends core::Object? = dynamic>(T% t) → Null {} in f;
+  core::print(x.{core::Object::runtimeType}{core::Type});
+  core::print(let final <T extends core::Object? = dynamic>(T%) → Null g = <T extends core::Object? = dynamic>(T% t) → Null {} in g);
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
index 96419b3..812ba6f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  <T extends core::Object* = dynamic>(T*) →* Null x = let final <T extends core::Object* = dynamic>(T*) →* Null f = <T extends core::Object* = dynamic>(T* t) → Null {} in f;
-  core::print(x.{core::Object::runtimeType}{core::Type*});
-  core::print(let final <T extends core::Object* = dynamic>(T*) →* Null g = <T extends core::Object* = dynamic>(T* t) → Null {} in g);
+  <T extends core::Object? = dynamic>(T%) → Null x = let final <T extends core::Object? = dynamic>(T%) → Null f = <T extends core::Object? = dynamic>(T% t) → Null {} in f;
+  core::print(x.{core::Object::runtimeType}{core::Type});
+  core::print(let final <T extends core::Object? = dynamic>(T%) → Null g = <T extends core::Object? = dynamic>(T% t) → Null {} in g);
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.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/illegal_named_function_expression.dart.weak.transformed.expect b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
index 96419b3..812ba6f 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  <T extends core::Object* = dynamic>(T*) →* Null x = let final <T extends core::Object* = dynamic>(T*) →* Null f = <T extends core::Object* = dynamic>(T* t) → Null {} in f;
-  core::print(x.{core::Object::runtimeType}{core::Type*});
-  core::print(let final <T extends core::Object* = dynamic>(T*) →* Null g = <T extends core::Object* = dynamic>(T* t) → Null {} in g);
+  <T extends core::Object? = dynamic>(T%) → Null x = let final <T extends core::Object? = dynamic>(T%) → Null f = <T extends core::Object? = dynamic>(T% t) → Null {} in f;
+  core::print(x.{core::Object::runtimeType}{core::Type});
+  core::print(let final <T extends core::Object? = dynamic>(T%) → Null g = <T extends core::Object? = dynamic>(T% t) → Null {} in g);
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart
index 1b0e211..2b3df38 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.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() {
   void f() {}
   print(void f() {});
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect
index 63bcf5a..470f8b7 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 
 static method main() → dynamic {
   function f() → void {}
-  core::print(let final () →* Null f = () → Null {} in f);
+  core::print(let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
index 63bcf5a..470f8b7 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 
 static method main() → dynamic {
   function f() → void {}
-  core::print(let final () →* Null f = () → Null {} in f);
+  core::print(let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.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/illegal_named_function_expression_scope.dart.weak.transformed.expect b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect
index 63bcf5a..470f8b7 100644
--- a/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/illegal_named_function_expression_scope.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,5 +11,5 @@
 
 static method main() → dynamic {
   function f() → void {}
-  core::print(let final () →* Null f = () → Null {} in f);
+  core::print(let final () → Null f = () → Null {} in f);
 }
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart
index 87a1c6c..f5a8e03 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.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 constTopLevelField = 42;
 
 class C {
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline.expect
index 0d643b9..31deaf6 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 const constTopLevelField = 42;
 
 class C {
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline_modelled.expect
index fb623f8..7a87544 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   const C(x);
   static const constField = 87;
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.expect
index 93d939a..9577415 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static const field core::int* constField = #C1;
-  const constructor •(dynamic x) → self::C*
+  static const field core::int constField = #C1;
+  const constructor •(dynamic x) → 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
 }
-static const field core::int* constTopLevelField = #C2;
+static const field core::int constTopLevelField = #C2;
 static method main() → dynamic {
   new self::C::•(#C1);
   new self::C::•(#C2);
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect
index 93d939a..9577415 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static const field core::int* constField = #C1;
-  const constructor •(dynamic x) → self::C*
+  static const field core::int constField = #C1;
+  const constructor •(dynamic x) → 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
 }
-static const field core::int* constTopLevelField = #C2;
+static const field core::int constTopLevelField = #C2;
 static method main() → dynamic {
   new self::C::•(#C1);
   new self::C::•(#C2);
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.outline.expect
index d89b87a..cacf45f 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static const field core::int* constField = 87;
-  const constructor •(dynamic x) → self::C*
+  static const field core::int constField = 87;
+  const constructor •(dynamic x) → 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
 }
-static const field core::int* constTopLevelField = 42;
+static const field core::int constTopLevelField = 42;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.transformed.expect
index 93d939a..9577415 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object /*hasConstConstructor*/  {
-  static const field core::int* constField = #C1;
-  const constructor •(dynamic x) → self::C*
+  static const field core::int constField = #C1;
+  const constructor •(dynamic x) → 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
 }
-static const field core::int* constTopLevelField = #C2;
+static const field core::int constTopLevelField = #C2;
 static method main() → dynamic {
   new self::C::•(#C1);
   new self::C::•(#C2);
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart b/pkg/front_end/testcases/general/implicit_constructor_02.dart
index 6e6421f..818c138 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.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
+
 // Derived from co19/Language/Mixins/Mixin_Application/implicit_constructor_t02
 
 class A {
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect
index 2b9d581..9b741d7 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   bool v1;
   num v2;
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect
index 73848df..fca520a 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A(bool this.v1, num this.v2);
   bool v1;
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect
index febd66a..d6dff2e 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.expect
@@ -1,55 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
-  synthetic constructor •() → self::M1*
+  field core::num v2 = 1.{core::int::unary-}(){() → core::int};
+  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 C = self::A with self::M1 {
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
-  mixin-super-stub get v2() → core::num*
+  mixin-super-stub get v2() → core::num
     return super.{self::M1::v2};
-  mixin-super-stub set v2(core::num* value) → void
+  mixin-super-stub set v2(core::num value) → void
     return super.{self::M1::v2} = value;
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(true, 2);
-  self::expect(true, c.{self::A::v1}{core::bool*});
-  self::expect(1.{core::int::unary-}(){() →* core::int*}, c.{self::C::v2}{core::num*});
+  self::C c = new self::C::•(true, 2);
+  self::expect(true, c.{self::A::v1}{core::bool});
+  self::expect(1.{core::int::unary-}(){() → core::int}, c.{self::C::v2}{core::num});
 }
 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/implicit_constructor_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.modular.expect
index febd66a..d6dff2e 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.modular.expect
@@ -1,55 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
-  synthetic constructor •() → self::M1*
+  field core::num v2 = 1.{core::int::unary-}(){() → core::int};
+  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 C = self::A with self::M1 {
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
-  mixin-super-stub get v2() → core::num*
+  mixin-super-stub get v2() → core::num
     return super.{self::M1::v2};
-  mixin-super-stub set v2(core::num* value) → void
+  mixin-super-stub set v2(core::num value) → void
     return super.{self::M1::v2} = value;
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(true, 2);
-  self::expect(true, c.{self::A::v1}{core::bool*});
-  self::expect(1.{core::int::unary-}(){() →* core::int*}, c.{self::C::v2}{core::num*});
+  self::C c = new self::C::•(true, 2);
+  self::expect(true, c.{self::A::v1}{core::bool});
+  self::expect(1.{core::int::unary-}(){() → core::int}, c.{self::C::v2}{core::num});
 }
 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/implicit_constructor_02.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.outline.expect
index eee145b..e5fe3d6 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.outline.expect
@@ -1,45 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → 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 M1 extends core::Object {
-  field core::num* v2;
-  synthetic constructor •() → self::M1*
+  field core::num v2;
+  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 C = self::A with self::M1 {
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
-  mixin-super-stub get v2() → core::num*
+  mixin-super-stub get v2() → core::num
     return super.{self::M1::v2};
-  mixin-super-stub set v2(core::num* value) → void
+  mixin-super-stub set v2(core::num value) → void
     return super.{self::M1::v2} = value;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect
index 2bee5f5..e48e2b7 100644
--- a/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_constructor_02.dart.weak.transformed.expect
@@ -1,53 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::bool* v1;
-  field core::num* v2;
-  constructor •(core::bool* v1, core::num* v2) → self::A*
+  field core::bool v1;
+  field core::num v2;
+  constructor •(core::bool v1, core::num v2) → self::A
     : self::A::v1 = v1, self::A::v2 = v2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
-  synthetic constructor •() → self::M1*
+  field core::num v2 = 1.{core::int::unary-}(){() → core::int};
+  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 C extends self::A implements self::M1 /*isEliminatedMixin*/  {
-  field core::num* v2 = 1.{core::int::unary-}(){() →* core::int*};
-  synthetic constructor •(core::bool* v1, core::num* v2) → self::C*
+  field core::num v2 = 1.{core::int::unary-}(){() → core::int};
+  synthetic constructor •(core::bool v1, core::num v2) → self::C
     : super self::A::•(v1, v2)
     ;
 }
 static method main() → dynamic {
-  self::C* c = new self::C::•(true, 2);
-  self::expect(true, c.{self::A::v1}{core::bool*});
-  self::expect(1.{core::int::unary-}(){() →* core::int*}, c.{self::C::v2}{core::num*});
+  self::C c = new self::C::•(true, 2);
+  self::expect(true, c.{self::A::v1}{core::bool});
+  self::expect(1.{core::int::unary-}(){() → core::int}, c.{self::C::v2}{core::num});
 }
 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/implicit_covariance.dart b/pkg/front_end/testcases/general/implicit_covariance.dart
index 09d9876..90b9dfc 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart
+++ b/pkg/front_end/testcases/general/implicit_covariance.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> {
   foo(T x);
 }
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline.expect
index bf4edd7..764181a 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A<T> {
   foo(T x);
 }
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline_modelled.expect
index bf4edd7..764181a 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class A<T> {
   foo(T x);
 }
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect
index 3fd3297..771e48d 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect
@@ -1,71 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 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 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
+  abstract method foo(covariant-by-class self::A::T% x) → dynamic;
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  synthetic 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 extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo(core::num* 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
+  method foo(core::num x) → dynamic {}
 }
-abstract class _D&C&B<T extends core::num*> = self::C with self::B<self::_D&C&B::T*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
+abstract class _D&C&B<T extends core::num> = self::C with self::B<self::_D&C&B::T> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
-class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends self::_D&C&B<self::D::T> {
+  synthetic constructor •() → self::D<self::D::T>
     : super self::_D&C&B::•()
     ;
 }
-class E<T extends core::num*> = self::C with self::B<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::num> = self::C with self::B<self::E::T> {
+  synthetic constructor •() → self::E<self::E::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect
index 3fd3297..771e48d 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.modular.expect
@@ -1,71 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 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 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
+  abstract method foo(covariant-by-class self::A::T% x) → dynamic;
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  synthetic 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 extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo(core::num* 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
+  method foo(core::num x) → dynamic {}
 }
-abstract class _D&C&B<T extends core::num*> = self::C with self::B<self::_D&C&B::T*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
+abstract class _D&C&B<T extends core::num> = self::C with self::B<self::_D&C&B::T> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
-class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends self::_D&C&B<self::D::T> {
+  synthetic constructor •() → self::D<self::D::T>
     : super self::_D&C&B::•()
     ;
 }
-class E<T extends core::num*> = self::C with self::B<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::num> = self::C with self::B<self::E::T> {
+  synthetic constructor •() → self::E<self::E::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect
index 19af3b7..5a74619 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect
@@ -1,68 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 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 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
+  abstract method foo(covariant-by-class self::A::T% x) → dynamic;
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  synthetic 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 extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  method foo(core::num* x) → dynamic
+  method foo(core::num 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
 }
-abstract class _D&C&B<T extends core::num*> = self::C with self::B<self::_D&C&B::T*> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
+abstract class _D&C&B<T extends core::num> = self::C with self::B<self::_D&C&B::T> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
-class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends self::_D&C&B<self::D::T> {
+  synthetic constructor •() → self::D<self::D::T>
     ;
 }
-class E<T extends core::num*> = self::C with self::B<self::E::T*> {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::num> = self::C with self::B<self::E::T> {
+  synthetic constructor •() → self::E<self::E::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect
index 0d94a2c..e51ef1e 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect
@@ -1,71 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 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 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
+  abstract method foo(covariant-by-class self::A::T% x) → dynamic;
 }
-abstract class B<T extends core::Object* = dynamic> extends core::Object implements self::A<self::B::T*> {
-  synthetic constructor •() → self::B<self::B::T*>*
+abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
+  synthetic 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 extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  method foo(core::num* 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
+  method foo(core::num x) → dynamic {}
 }
-abstract class _D&C&B<T extends core::num*> extends self::C implements self::B<self::_D&C&B::T*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
+abstract class _D&C&B<T extends core::num> extends self::C implements self::B<self::_D&C&B::T> /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
-class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
-  synthetic constructor •() → self::D<self::D::T*>*
+class D<T extends core::num> extends self::_D&C&B<self::D::T> {
+  synthetic constructor •() → self::D<self::D::T>
     : super self::_D&C&B::•()
     ;
 }
-class E<T extends core::num*> extends self::C implements self::B<self::E::T*> /*isEliminatedMixin*/  {
-  synthetic constructor •() → self::E<self::E::T*>*
+class E<T extends core::num> extends self::C implements self::B<self::E::T> /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::E<self::E::T>
     : super self::C::•()
     ;
-  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/implicit_new.dart b/pkg/front_end/testcases/general/implicit_new.dart
index f39dba1..d10629f 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart
+++ b/pkg/front_end/testcases/general/implicit_new.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 "implicit_new.dart" as prefix;
 
 class Foo {
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_new.dart.textual_outline.expect
index 5b045ab..c3f5004 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "implicit_new.dart" as prefix;
 
 class Foo {
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_new.dart.textual_outline_modelled.expect
index f68c2a5..72ae030 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "implicit_new.dart" as prefix;
 
 class Bar {
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
index 908fc59..d5d53c8 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,56 +16,26 @@
 import "org-dartlang-testcase:///implicit_new.dart" as prefix;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   operator +(dynamic other) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
-  constructor named() → self::Bar*
+  constructor named() → self::Bar
     : super core::Object::•()
     ;
   operator +(dynamic other) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IndexTester extends core::Object {
-  synthetic constructor •() → self::IndexTester*
+  synthetic constructor •() → self::IndexTester
     : super core::Object::•()
     ;
   operator [](dynamic _) → dynamic
     return null;
   operator []=(dynamic _a, dynamic _b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 testNSM() → dynamic {
   invalid-type y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
@@ -78,29 +48,29 @@
 static method f(dynamic x) → dynamic
   return x;
 static method main() → dynamic {
-  self::Foo* x = new self::Foo::•();
+  self::Foo x = new self::Foo::•();
   x = new self::Foo::•();
-  self::Bar* z = new self::Bar::named();
+  self::Bar z = new self::Bar::named();
   z = new self::Bar::named();
   self::f(new self::Foo::•());
   self::f(new self::Foo::•());
   self::f(new self::Bar::named());
   self::f(new self::Bar::named());
-  core::List<core::Object*>* l = <core::Object*>[new self::Foo::•(), new self::Bar::named()];
-  l = <core::Object*>[new self::Foo::•(), new self::Bar::named()];
-  core::Map<core::String*, core::Object*>* m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
-  m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
-  self::IndexTester* i = new self::IndexTester::•();
-  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+  core::List<core::Object> l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
+  l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
+  core::Map<core::String, core::Object> m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  self::IndexTester i = new self::IndexTester::•();
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) → void};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) → dynamic};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) → dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) → dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect
index 908fc59..d5d53c8 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,56 +16,26 @@
 import "org-dartlang-testcase:///implicit_new.dart" as prefix;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   operator +(dynamic other) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
-  constructor named() → self::Bar*
+  constructor named() → self::Bar
     : super core::Object::•()
     ;
   operator +(dynamic other) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IndexTester extends core::Object {
-  synthetic constructor •() → self::IndexTester*
+  synthetic constructor •() → self::IndexTester
     : super core::Object::•()
     ;
   operator [](dynamic _) → dynamic
     return null;
   operator []=(dynamic _a, dynamic _b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 testNSM() → dynamic {
   invalid-type y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
@@ -78,29 +48,29 @@
 static method f(dynamic x) → dynamic
   return x;
 static method main() → dynamic {
-  self::Foo* x = new self::Foo::•();
+  self::Foo x = new self::Foo::•();
   x = new self::Foo::•();
-  self::Bar* z = new self::Bar::named();
+  self::Bar z = new self::Bar::named();
   z = new self::Bar::named();
   self::f(new self::Foo::•());
   self::f(new self::Foo::•());
   self::f(new self::Bar::named());
   self::f(new self::Bar::named());
-  core::List<core::Object*>* l = <core::Object*>[new self::Foo::•(), new self::Bar::named()];
-  l = <core::Object*>[new self::Foo::•(), new self::Bar::named()];
-  core::Map<core::String*, core::Object*>* m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
-  m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
-  self::IndexTester* i = new self::IndexTester::•();
-  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+  core::List<core::Object> l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
+  l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
+  core::Map<core::String, core::Object> m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  self::IndexTester i = new self::IndexTester::•();
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) → void};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) → dynamic};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) → dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) → dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.outline.expect
index 9eab8b7..f9e081a 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.outline.expect
@@ -1,58 +1,28 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///implicit_new.dart" as prefix;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     ;
   operator +(dynamic other) → 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 Bar extends core::Object {
-  constructor named() → self::Bar*
+  constructor named() → self::Bar
     ;
   operator +(dynamic other) → 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 IndexTester extends core::Object {
-  synthetic constructor •() → self::IndexTester*
+  synthetic constructor •() → self::IndexTester
     ;
   operator [](dynamic _) → dynamic
     ;
   operator []=(dynamic _a, dynamic _b) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 testNSM() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
index 3e77916..a0e4d0a 100644
--- a/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_new.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,56 +16,26 @@
 import "org-dartlang-testcase:///implicit_new.dart" as prefix;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self::Foo*
+  synthetic constructor •() → self::Foo
     : super core::Object::•()
     ;
   operator +(dynamic other) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Bar extends core::Object {
-  constructor named() → self::Bar*
+  constructor named() → self::Bar
     : super core::Object::•()
     ;
   operator +(dynamic other) → 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 method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IndexTester extends core::Object {
-  synthetic constructor •() → self::IndexTester*
+  synthetic constructor •() → self::IndexTester
     : super core::Object::•()
     ;
   operator [](dynamic _) → dynamic
     return null;
   operator []=(dynamic _a, dynamic _b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 testNSM() → dynamic {
   invalid-type y = invalid-expression "pkg/front_end/testcases/general/implicit_new.dart:18:18: Error: Couldn't find constructor 'Bar'.
@@ -78,29 +48,29 @@
 static method f(dynamic x) → dynamic
   return x;
 static method main() → dynamic {
-  self::Foo* x = new self::Foo::•();
+  self::Foo x = new self::Foo::•();
   x = new self::Foo::•();
-  self::Bar* z = new self::Bar::named();
+  self::Bar z = new self::Bar::named();
   z = new self::Bar::named();
   self::f(new self::Foo::•());
   self::f(new self::Foo::•());
   self::f(new self::Bar::named());
   self::f(new self::Bar::named());
-  core::List<core::Object*>* l = core::_GrowableList::_literal2<core::Object*>(new self::Foo::•(), new self::Bar::named());
-  l = core::_GrowableList::_literal2<core::Object*>(new self::Foo::•(), new self::Bar::named());
-  core::Map<core::String*, core::Object*>* m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
-  m = <core::String*, core::Object*>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
-  self::IndexTester* i = new self::IndexTester::•();
-  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) →* dynamic};
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
-  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) →* void};
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
-  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) →* dynamic};
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
-  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) →* dynamic};
+  core::List<core::Object> l = core::_GrowableList::_literal2<core::Object>(new self::Foo::•(), new self::Bar::named());
+  l = core::_GrowableList::_literal2<core::Object>(new self::Foo::•(), new self::Bar::named());
+  core::Map<core::String, core::Object> m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  self::IndexTester i = new self::IndexTester::•();
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Foo::•()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]}(new self::Bar::named()){(dynamic) → dynamic};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) → void};
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null){(dynamic, dynamic) → void};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) → dynamic};
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named()){(dynamic) → dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) → dynamic};
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•()){(dynamic) → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart b/pkg/front_end/testcases/general/implicit_scope_test.dart
index 3da69fc..f612532 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart
@@ -1,9 +1,10 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for 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 that if, while etc create an implicit scope if the body
 // is not a compound statement.
-// @dart=2.9
+
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest {
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline.expect
index 3ac254a..ea2f363 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest {
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline_modelled.expect
index 3ac254a..ea2f363 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest {
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect
index ef54b52..6bbb002 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.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,53 +6,43 @@
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest extends core::Object {
-  synthetic constructor •() → self::ImplicitScopeTest*
+  synthetic constructor •() → self::ImplicitScopeTest
     : super core::Object::•()
     ;
-  static method alwaysTrue() → core::bool* {
-    return 1.{core::num::+}(1){(core::num*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2;
+  static method alwaysTrue() → core::bool {
+    return 1.{core::num::+}(1){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 2;
   }
   static method testMain() → dynamic {
-    core::String* a = "foo";
+    core::String a = "foo";
     dynamic b;
     if(self::ImplicitScopeTest::alwaysTrue()) {
-      core::String* a = "bar";
+      core::String a = "bar";
     }
     else {
-      core::String* b = a;
+      core::String b = a;
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
     while (!self::ImplicitScopeTest::alwaysTrue()) {
-      core::String* a = "bar";
-      core::String* b = "baz";
+      core::String a = "bar";
+      core::String b = "baz";
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
-    for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      core::String* a = "bar";
-      core::String* b = "baz";
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      core::String a = "bar";
+      core::String b = "baz";
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
     do {
-      core::String* a = "bar";
-      core::String* b = "baz";
+      core::String a = "bar";
+      core::String b = "baz";
     }
-    while ("black" =={core::String::==}{(core::Object*) →* core::bool*} "white")
+    while ("black" =={core::String::==}{(core::Object) → core::bool} "white")
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, 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 {
   self::ImplicitScopeTest::testMain();
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.modular.expect
index ef54b52..6bbb002 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.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,53 +6,43 @@
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest extends core::Object {
-  synthetic constructor •() → self::ImplicitScopeTest*
+  synthetic constructor •() → self::ImplicitScopeTest
     : super core::Object::•()
     ;
-  static method alwaysTrue() → core::bool* {
-    return 1.{core::num::+}(1){(core::num*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2;
+  static method alwaysTrue() → core::bool {
+    return 1.{core::num::+}(1){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 2;
   }
   static method testMain() → dynamic {
-    core::String* a = "foo";
+    core::String a = "foo";
     dynamic b;
     if(self::ImplicitScopeTest::alwaysTrue()) {
-      core::String* a = "bar";
+      core::String a = "bar";
     }
     else {
-      core::String* b = a;
+      core::String b = a;
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
     while (!self::ImplicitScopeTest::alwaysTrue()) {
-      core::String* a = "bar";
-      core::String* b = "baz";
+      core::String a = "bar";
+      core::String b = "baz";
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
-    for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      core::String* a = "bar";
-      core::String* b = "baz";
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      core::String a = "bar";
+      core::String b = "baz";
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
     do {
-      core::String* a = "bar";
-      core::String* b = "baz";
+      core::String a = "bar";
+      core::String b = "baz";
     }
-    while ("black" =={core::String::==}{(core::Object*) →* core::bool*} "white")
+    while ("black" =={core::String::==}{(core::Object) → core::bool} "white")
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, 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 {
   self::ImplicitScopeTest::testMain();
diff --git a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.outline.expect
index a3bc6ba..f42d113 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.outline.expect
@@ -1,26 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest extends core::Object {
-  synthetic constructor •() → self::ImplicitScopeTest*
+  synthetic constructor •() → self::ImplicitScopeTest
     ;
-  static method alwaysTrue() → core::bool*
+  static method alwaysTrue() → core::bool
     ;
   static method testMain() → 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/implicit_scope_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.transformed.expect
index 444893e..0c189c3 100644
--- a/pkg/front_end/testcases/general/implicit_scope_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_scope_test.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,53 +6,43 @@
 import "package:expect/expect.dart";
 
 class ImplicitScopeTest extends core::Object {
-  synthetic constructor •() → self::ImplicitScopeTest*
+  synthetic constructor •() → self::ImplicitScopeTest
     : super core::Object::•()
     ;
-  static method alwaysTrue() → core::bool* {
-    return 1.{core::num::+}(1){(core::num*) →* core::int*} =={core::num::==}{(core::Object*) →* core::bool*} 2;
+  static method alwaysTrue() → core::bool {
+    return 1.{core::num::+}(1){(core::num) → core::int} =={core::num::==}{(core::Object) → core::bool} 2;
   }
   static method testMain() → dynamic {
-    core::String* a = "foo";
+    core::String a = "foo";
     dynamic b;
     if(self::ImplicitScopeTest::alwaysTrue()) {
-      core::String* a = "bar";
+      core::String a = "bar";
     }
     else {
-      core::String* b = a;
+      core::String b = a;
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
     while (!self::ImplicitScopeTest::alwaysTrue()) {
-      core::String* a = "bar";
-      core::String* b = "baz";
+      core::String a = "bar";
+      core::String b = "baz";
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
-    for (core::int* i = 0; i.{core::num::<}(10){(core::num*) →* core::bool*}; i = i.{core::num::+}(1){(core::num*) →* core::int*}) {
-      core::String* a = "bar";
-      core::String* b = "baz";
+    for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+      core::String a = "bar";
+      core::String b = "baz";
     }
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, b);
     do {
-      core::String* a = "bar";
-      core::String* b = "baz";
+      core::String a = "bar";
+      core::String b = "baz";
     }
-    while ("black" =={core::String::==}{(core::Object*) →* core::bool*} "white")
+    while ("black" =={core::String::==}{(core::Object) → core::bool} "white")
     exp::Expect::equals("foo", a);
     exp::Expect::equals(null, 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 {
   self::ImplicitScopeTest::testMain();
@@ -60,6 +50,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: EqualsCall @ org-dartlang-testcase:///implicit_scope_test.dart:11:18 -> BoolConstant(true)
-Evaluated: EqualsCall @ org-dartlang-testcase:///implicit_scope_test.dart:32:49 -> BoolConstant(false)
+Evaluated: EqualsCall @ org-dartlang-testcase:///implicit_scope_test.dart:12:18 -> BoolConstant(true)
+Evaluated: EqualsCall @ org-dartlang-testcase:///implicit_scope_test.dart:33:49 -> BoolConstant(false)
 Extra constant evaluation: evaluated: 28, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/implicit_this.dart b/pkg/front_end/testcases/general/implicit_this.dart
index 289b962..ed2a435 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart
+++ b/pkg/front_end/testcases/general/implicit_this.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 C {
   m() {
     print("Called m");
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.textual_outline.expect b/pkg/front_end/testcases/general/implicit_this.dart.textual_outline.expect
index a3fe55a..663566a 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   m() {}
   testC() {}
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/implicit_this.dart.textual_outline_modelled.expect
index a3fe55a..663566a 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   m() {}
   testC() {}
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.expect
index 23d7a44..28fdb2a 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.expect
@@ -1,37 +1,27 @@
-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
     : super core::Object::•()
     ;
   method m() → dynamic {
     core::print("Called m");
   }
   method testC() → dynamic {
-    this.{self::C::m}(){() →* dynamic};
+    this.{self::C::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
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method testD() → dynamic {
-    this.{self::C::m}(){() →* dynamic};
+    this.{self::C::m}(){() → dynamic};
   }
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::testC}(){() →* dynamic};
-  new self::D::•().{self::D::testD}(){() →* dynamic};
+  new self::C::•().{self::C::testC}(){() → dynamic};
+  new self::D::•().{self::D::testD}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect
index 23d7a44..28fdb2a 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.modular.expect
@@ -1,37 +1,27 @@
-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
     : super core::Object::•()
     ;
   method m() → dynamic {
     core::print("Called m");
   }
   method testC() → dynamic {
-    this.{self::C::m}(){() →* dynamic};
+    this.{self::C::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
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method testD() → dynamic {
-    this.{self::C::m}(){() →* dynamic};
+    this.{self::C::m}(){() → dynamic};
   }
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::testC}(){() →* dynamic};
-  new self::D::•().{self::D::testD}(){() →* dynamic};
+  new self::C::•().{self::C::testC}(){() → dynamic};
+  new self::D::•().{self::D::testD}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.outline.expect
index 1a47f4d..485c6e9 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-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
     ;
   method m() → dynamic
     ;
   method testC() → 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 D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     ;
   method testD() → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect
index 23d7a44..28fdb2a 100644
--- a/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_this.dart.weak.transformed.expect
@@ -1,37 +1,27 @@
-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
     : super core::Object::•()
     ;
   method m() → dynamic {
     core::print("Called m");
   }
   method testC() → dynamic {
-    this.{self::C::m}(){() →* dynamic};
+    this.{self::C::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
 }
 class D extends self::C {
-  synthetic constructor •() → self::D*
+  synthetic constructor •() → self::D
     : super self::C::•()
     ;
   method testD() → dynamic {
-    this.{self::C::m}(){() →* dynamic};
+    this.{self::C::m}(){() → dynamic};
   }
 }
 static method main() → dynamic {
-  new self::C::•().{self::C::testC}(){() →* dynamic};
-  new self::D::•().{self::D::testD}(){() →* dynamic};
+  new self::C::•().{self::C::testC}(){() → dynamic};
+  new self::D::•().{self::D::testD}(){() → dynamic};
 }
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart b/pkg/front_end/testcases/general/import_conflicting_getters.dart
index 3d6400b..cc3bc26 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.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 'import_conflicting_getters_lib1.dart';
 import 'import_conflicting_getters_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline.expect
index a48d255..4e8aa56 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_getters_lib1.dart';
 import 'import_conflicting_getters_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline_modelled.expect
index 7294c5c..2c010bc 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_getters_lib1.dart';
 import 'import_conflicting_getters_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.expect
index 14ee367..3c3aadf 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,16 +19,16 @@
         ^^^");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   return 42;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   return 87;
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect
index 14ee367..3c3aadf 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,16 +19,16 @@
         ^^^");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   return 42;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   return 87;
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.outline.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.outline.expect
index a6a70a1..17bf3fb 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///import_conflicting_getters_lib1.dart";
@@ -9,16 +9,16 @@
 static method errors() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   ;
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.transformed.expect
index 14ee367..3c3aadf 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_getters.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,16 +19,16 @@
         ^^^");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   return 42;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static get foo() → core::int*
+static get foo() → core::int
   return 87;
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters_lib1.dart b/pkg/front_end/testcases/general/import_conflicting_getters_lib1.dart
index 9dc57c0..1891fee 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters_lib1.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_getters_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
+
 int get foo => 42;
diff --git a/pkg/front_end/testcases/general/import_conflicting_getters_lib2.dart b/pkg/front_end/testcases/general/import_conflicting_getters_lib2.dart
index c8a21ba..906c788 100644
--- a/pkg/front_end/testcases/general/import_conflicting_getters_lib2.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_getters_lib2.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
+
 int get foo => 87;
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart b/pkg/front_end/testcases/general/import_conflicting_setters.dart
index 4fb3d63..e9e730c 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.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 'import_conflicting_setters_lib1.dart';
 import 'import_conflicting_setters_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline.expect
index de6e574..9f1f251 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_setters_lib1.dart';
 import 'import_conflicting_setters_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline_modelled.expect
index 9c670c0..4bc9bf2 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_setters_lib1.dart';
 import 'import_conflicting_setters_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.expect
index 26d7537..807305c 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,14 +18,14 @@
   ^^^";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void {}
+static set foo(core::int value) → void {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void {}
+static set foo(core::int value) → void {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect
index 26d7537..807305c 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,14 +18,14 @@
   ^^^";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void {}
+static set foo(core::int value) → void {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void {}
+static set foo(core::int value) → void {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.outline.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.outline.expect
index 11fc2b6..312f068 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///import_conflicting_setters_lib1.dart";
@@ -9,16 +9,16 @@
 static method errors() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void
+static set foo(core::int value) → void
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void
+static set foo(core::int value) → void
   ;
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.transformed.expect b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.transformed.expect
index 26d7537..807305c 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_setters.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,14 +18,14 @@
   ^^^";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void {}
+static set foo(core::int value) → void {}
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
-static set foo(core::int* value) → void {}
+static set foo(core::int value) → void {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters_lib1.dart b/pkg/front_end/testcases/general/import_conflicting_setters_lib1.dart
index b292152..ddcf836 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters_lib1.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_setters_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
+
 void set foo(int value) {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_setters_lib2.dart b/pkg/front_end/testcases/general/import_conflicting_setters_lib2.dart
index b292152..ddcf836 100644
--- a/pkg/front_end/testcases/general/import_conflicting_setters_lib2.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_setters_lib2.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
+
 void set foo(int value) {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart b/pkg/front_end/testcases/general/import_conflicting_type_member.dart
index 7d9525b..9173fee 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.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 'import_conflicting_type_member_lib1.dart';
 import 'import_conflicting_type_member_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline.expect
index 1b63cbc..5f91bbc 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_type_member_lib1.dart';
 import 'import_conflicting_type_member_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline_modelled.expect
index 2b4d5e8..4574f84 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_type_member_lib1.dart';
 import 'import_conflicting_type_member_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.expect
index d883515..d605b20 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,27 +23,17 @@
   ^^^";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 static method Foo() → dynamic {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect
index d883515..d605b20 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,27 +23,17 @@
   ^^^";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 static method Foo() → dynamic {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.outline.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.outline.expect
index d2b0c91..be34d94 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///import_conflicting_type_member_lib1.dart";
@@ -9,26 +9,16 @@
 static method errors() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 static method Foo() → dynamic
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.transformed.expect b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.transformed.expect
index d883515..d605b20 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -23,27 +23,17 @@
   ^^^";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 static method Foo() → dynamic {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member_lib1.dart b/pkg/front_end/testcases/general/import_conflicting_type_member_lib1.dart
index fdcef7f..cbb7d07 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member_lib1.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member_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
+
 class Foo {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_type_member_lib2.dart b/pkg/front_end/testcases/general/import_conflicting_type_member_lib2.dart
index 1a4623e..ccaec3c 100644
--- a/pkg/front_end/testcases/general/import_conflicting_type_member_lib2.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_type_member_lib2.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
+
 Foo() {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_types.dart b/pkg/front_end/testcases/general/import_conflicting_types.dart
index 8a8869d..1f34f02 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_types.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 'import_conflicting_types_lib1.dart';
 import 'import_conflicting_types_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline.expect
index 612856d..1d6b54a 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_types_lib1.dart';
 import 'import_conflicting_types_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline_modelled.expect
index 662cbba..8b0c6e4 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_conflicting_types_lib1.dart';
 import 'import_conflicting_types_lib2.dart';
 
diff --git a/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.expect
index 6154f37..3e5af7b 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,42 +16,22 @@
   invalid-type foo;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self3::Foo*
+  synthetic constructor •() → self3::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/import_conflicting_types.dart.weak.modular.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.modular.expect
index 6154f37..3e5af7b 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,42 +16,22 @@
   invalid-type foo;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self3::Foo*
+  synthetic constructor •() → self3::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/import_conflicting_types.dart.weak.outline.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.outline.expect
index 5963c0d..36b00c4 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///import_conflicting_types_lib1.dart";
@@ -9,40 +9,20 @@
 static method errors() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self3::Foo*
+  synthetic constructor •() → self3::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/import_conflicting_types.dart.weak.transformed.expect b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.transformed.expect
index 6154f37..3e5af7b 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/import_conflicting_types.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,42 +16,22 @@
   invalid-type foo;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self2::Foo*
+  synthetic constructor •() → self2::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
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  synthetic constructor •() → self3::Foo*
+  synthetic constructor •() → self3::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/import_conflicting_types_lib1.dart b/pkg/front_end/testcases/general/import_conflicting_types_lib1.dart
index fdcef7f..cbb7d07 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types_lib1.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_types_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
+
 class Foo {}
diff --git a/pkg/front_end/testcases/general/import_conflicting_types_lib2.dart b/pkg/front_end/testcases/general/import_conflicting_types_lib2.dart
index fdcef7f..cbb7d07 100644
--- a/pkg/front_end/testcases/general/import_conflicting_types_lib2.dart
+++ b/pkg/front_end/testcases/general/import_conflicting_types_lib2.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
+
 class Foo {}
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart
index 2be1450..e174922 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.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 {
   C.a(this);
   C.b(this.);
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect
index 2795d4c..09932c3 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C.a(this);
   C.b(this.);
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect
index 2967d68..4929abf 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,26 +26,16 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a(dynamic this) → self::C*
+  constructor a(dynamic this) → self::C
     : super core::Object::•()
     ;
-  constructor b() → self::C*
+  constructor b() → self::C
     : super core::Object::•()
     ;
-  constructor c(dynamic this, dynamic p) → self::C*
+  constructor c(dynamic this, dynamic p) → self::C
     : super core::Object::•()
     ;
-  constructor d() → self::C*
+  constructor d() → 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/incomplete_field_formal_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.modular.expect
index 2967d68..4929abf 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,26 +26,16 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a(dynamic this) → self::C*
+  constructor a(dynamic this) → self::C
     : super core::Object::•()
     ;
-  constructor b() → self::C*
+  constructor b() → self::C
     : super core::Object::•()
     ;
-  constructor c(dynamic this, dynamic p) → self::C*
+  constructor c(dynamic this, dynamic p) → self::C
     : super core::Object::•()
     ;
-  constructor d() → self::C*
+  constructor d() → 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/incomplete_field_formal_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect
index c23e2de..6fb2920 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,22 +26,12 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a(dynamic this) → self::C*
+  constructor a(dynamic this) → self::C
     ;
-  constructor b() → self::C*
+  constructor b() → self::C
     ;
-  constructor c(dynamic this, dynamic p) → self::C*
+  constructor c(dynamic this, dynamic p) → self::C
     ;
-  constructor d() → self::C*
+  constructor d() → 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/incomplete_field_formal_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect
index 2967d68..4929abf 100644
--- a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,26 +26,16 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  constructor a(dynamic this) → self::C*
+  constructor a(dynamic this) → self::C
     : super core::Object::•()
     ;
-  constructor b() → self::C*
+  constructor b() → self::C
     : super core::Object::•()
     ;
-  constructor c(dynamic this, dynamic p) → self::C*
+  constructor c(dynamic this, dynamic p) → self::C
     : super core::Object::•()
     ;
-  constructor d() → self::C*
+  constructor d() → 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/infer_equals.dart b/pkg/front_end/testcases/general/infer_equals.dart
index 12aa6e7..cbf2c19 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart
+++ b/pkg/front_end/testcases/general/infer_equals.dart
@@ -1,8 +1,6 @@
 // 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.6
 
 class Class {
   var field;
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.textual_outline.expect b/pkg/front_end/testcases/general/infer_equals.dart.textual_outline.expect
index ad1ebf1..d24ff23 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.textual_outline.expect
@@ -1,5 +1,3 @@
-// @dart = 2.9
-// @dart = 2.6
 class Class {
   var field;
   operator ==(o) {}
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/infer_equals.dart.textual_outline_modelled.expect
index 7cc0fedd..4e10c6f 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.textual_outline_modelled.expect
@@ -1,5 +1,3 @@
-// @dart = 2.9
-// @dart = 2.6
 class Class {
   operator ==(o) {}
   var field;
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.expect
index 4b8aa53e..d1873a6 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.expect
@@ -1,25 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  operator ==(dynamic o) → core::bool* {
-    if(!(o is self::Class*))
+  operator ==(core::Object o) → core::bool {
+    if(!(o is{ForNonNullableByDefault} self::Class))
       return false;
-    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} o{dynamic}.field;
+    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object) → core::bool} o{self::Class}.{self::Class::field}{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 {}
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect
index 4b8aa53e..d1873a6 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.modular.expect
@@ -1,25 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  operator ==(dynamic o) → core::bool* {
-    if(!(o is self::Class*))
+  operator ==(core::Object o) → core::bool {
+    if(!(o is{ForNonNullableByDefault} self::Class))
       return false;
-    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} o{dynamic}.field;
+    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object) → core::bool} o{self::Class}.{self::Class::field}{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 {}
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.outline.expect
index 1e4df77..5b69de1 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.outline.expect
@@ -1,22 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  operator ==(dynamic 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
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect
index 4b8aa53e..d1873a6 100644
--- a/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_equals.dart.weak.transformed.expect
@@ -1,25 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  operator ==(dynamic o) → core::bool* {
-    if(!(o is self::Class*))
+  operator ==(core::Object o) → core::bool {
+    if(!(o is{ForNonNullableByDefault} self::Class))
       return false;
-    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object*) →* core::bool*} o{dynamic}.field;
+    return this.{self::Class::field}{dynamic} =={core::Object::==}{(core::Object) → core::bool} o{self::Class}.{self::Class::field}{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 {}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart b/pkg/front_end/testcases/general/infer_field_from_multiple.dart
index dd2a974..be05cdc 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.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<T> {
   var field1 = 0;
   var field2 = 0;
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect
index 4796a9b..31fa66b 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect
@@ -2,161 +2,161 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:57:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:15:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:36:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:60:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:18:5: Context: This is one of the overridden members.
 //   T field11;
 //     ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:39:5: Context: This is one of the overridden members.
 //   S field11;
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:66:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:24:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:45:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:67:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:25:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:46:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:98:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:15:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:36:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:107:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:24:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:45:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:108:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:25:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:46:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:63:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
 // Change to a subtype of 'String'.
 //   int field14; // error
 //       ^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:42:5: Context: This is the overridden method ('field14').
 //   S field14;
 //     ^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:63:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
 //   int field14; // error
 //       ^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:42:5: Context: This is the overridden method ('field14').
 //   S field14;
 //     ^
 //
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect
index 4796a9b..31fa66b 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.modular.expect
@@ -2,161 +2,161 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:57:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:15:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:36:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:60:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:18:5: Context: This is one of the overridden members.
 //   T field11;
 //     ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:39:5: Context: This is one of the overridden members.
 //   S field11;
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:66:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:24:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:45:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:67:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:25:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:46:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:98:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:15:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:36:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:107:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:24:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:45:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:108:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:25:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:46:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:63:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
 // Change to a subtype of 'String'.
 //   int field14; // error
 //       ^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:42:5: Context: This is the overridden method ('field14').
 //   S field14;
 //     ^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:63:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
 //   int field14; // error
 //       ^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:42:5: Context: This is the overridden method ('field14').
 //   S field14;
 //     ^
 //
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect
index e59bd1f..01365f2 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect
@@ -2,161 +2,161 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:49:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:57:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:15:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:36:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:60:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:18:5: Context: This is one of the overridden members.
 //   T field11;
 //     ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:39:5: Context: This is one of the overridden members.
 //   S field11;
 //     ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:66:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:24:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:45:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:67:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:25:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:46:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
 //   var field2 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
 //   var field2 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
 //   var field4 = 0;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:7: Context: This is one of the overridden members.
 //   var field4 = '';
 //       ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
 //   int field6;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
 //   String field6;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:98:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:15:7: Context: This is one of the overridden members.
 //   int field8;
 //       ^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:36:10: Context: This is one of the overridden members.
 //   String field8;
 //          ^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:107:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:24:7: Context: This is one of the overridden members.
 //   var field17 = 0;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:45:10: Context: This is one of the overridden members.
 //   String field17;
 //          ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:108:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:25:7: Context: This is one of the overridden members.
 //   int field18;
 //       ^^^^^^^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the overridden members.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:46:7: Context: This is one of the overridden members.
 //   var field18 = '';
 //       ^^^^^^^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:63:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
 // Change to a subtype of 'String'.
 //   int field14; // error
 //       ^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:42:5: Context: This is the overridden method ('field14').
 //   S field14;
 //     ^
 //
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:63:7: Error: The field 'C.field14' has type 'int', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
 //   int field14; // error
 //       ^
-// pkg/front_end/testcases/general/infer_field_from_multiple.dart:40:5: Context: This is the overridden method ('field14').
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:42:5: Context: This is the overridden method ('field14').
 //   S field14;
 //     ^
 //
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple2.dart b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart
new file mode 100644
index 0000000..58f6b9fd
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart
@@ -0,0 +1,131 @@
+// 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<T> {
+  var field1 = 0;
+  var field2 = 0;
+  var field3 = 0;
+  var field4 = 0;
+  int? field5;
+  int? field6;
+  int? field7;
+  int? field8;
+  var field9;
+  T field10;
+  T field11;
+  T field12;
+  T field13;
+  T field14;
+  var field15 = 0;
+  int? field16;
+  var field17 = 0;
+  int? field18;
+
+  A(this.field10, this.field11, this.field12, this.field13, this.field14);
+}
+
+class B<T, S> {
+  var field1 = 1;
+  var field2 = '';
+  var field3 = 1;
+  var field4 = '';
+  int? field5;
+  String? field6;
+  int? field7;
+  String? field8;
+  var field9;
+  T field10;
+  S field11;
+  T field12;
+  T field13;
+  S field14;
+  int? field15;
+  var field16 = 0;
+  String? field17;
+  var field18 = '';
+
+  B(this.field10, this.field11, this.field12, this.field13, this.field14);
+}
+
+class C implements A<int>, B<int, String> {
+  var field1;
+  var field2; // error
+  var field3 = 0;
+  var field4 = 0; // error
+  var field5;
+  var field6; // error
+  var field7 = 0;
+  var field8 = 0; // error
+  var field9;
+  var field10;
+  var field11; // error
+  int? field12;
+  var field13 = 0;
+  int? field14; // error
+  var field15;
+  var field16;
+  var field17; // error
+  var field18; // error
+
+  C(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18);
+}
+
+class D<T> implements A<T>, B<T, T> {
+  var field1;
+  var field2; // error
+  var field3 = 0;
+  var field4 = 0; // error
+  var field5;
+  var field6; // error
+  var field7 = 0;
+  var field8 = 0; // error
+  var field9;
+  var field10;
+  var field11;
+  T field12;
+  var field13 = null; // error
+  T field14;
+  var field15;
+  var field16;
+  var field17; // error
+  var field18; // error
+
+  D(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18);
+}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.textual_outline.expect b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.textual_outline.expect
new file mode 100644
index 0000000..d64f84c
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.textual_outline.expect
@@ -0,0 +1,123 @@
+class A<T> {
+  var field1 = 0;
+  var field2 = 0;
+  var field3 = 0;
+  var field4 = 0;
+  int? field5;
+  int? field6;
+  int? field7;
+  int? field8;
+  var field9;
+  T field10;
+  T field11;
+  T field12;
+  T field13;
+  T field14;
+  var field15 = 0;
+  int? field16;
+  var field17 = 0;
+  int? field18;
+  A(this.field10, this.field11, this.field12, this.field13, this.field14);
+}
+
+class B<T, S> {
+  var field1 = 1;
+  var field2 = '';
+  var field3 = 1;
+  var field4 = '';
+  int? field5;
+  String? field6;
+  int? field7;
+  String? field8;
+  var field9;
+  T field10;
+  S field11;
+  T field12;
+  T field13;
+  S field14;
+  int? field15;
+  var field16 = 0;
+  String? field17;
+  var field18 = '';
+  B(this.field10, this.field11, this.field12, this.field13, this.field14);
+}
+
+class C implements A<int>, B<int, String> {
+  var field1;
+  var field2;
+  var field3 = 0;
+  var field4 = 0;
+  var field5;
+  var field6;
+  var field7 = 0;
+  var field8 = 0;
+  var field9;
+  var field10;
+  var field11;
+  int? field12;
+  var field13 = 0;
+  int? field14;
+  var field15;
+  var field16;
+  var field17;
+  var field18;
+  C(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18);
+}
+
+class D<T> implements A<T>, B<T, T> {
+  var field1;
+  var field2;
+  var field3 = 0;
+  var field4 = 0;
+  var field5;
+  var field6;
+  var field7 = 0;
+  var field8 = 0;
+  var field9;
+  var field10;
+  var field11;
+  T field12;
+  var field13 = null;
+  T field14;
+  var field15;
+  var field16;
+  var field17;
+  var field18;
+  D(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18);
+}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4e0b59f
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.textual_outline_modelled.expect
@@ -0,0 +1,123 @@
+class A<T> {
+  A(this.field10, this.field11, this.field12, this.field13, this.field14);
+  T field10;
+  T field11;
+  T field12;
+  T field13;
+  T field14;
+  int? field16;
+  int? field18;
+  int? field5;
+  int? field6;
+  int? field7;
+  int? field8;
+  var field1 = 0;
+  var field15 = 0;
+  var field17 = 0;
+  var field2 = 0;
+  var field3 = 0;
+  var field4 = 0;
+  var field9;
+}
+
+class B<T, S> {
+  B(this.field10, this.field11, this.field12, this.field13, this.field14);
+  S field11;
+  S field14;
+  String? field17;
+  String? field6;
+  String? field8;
+  T field10;
+  T field12;
+  T field13;
+  int? field15;
+  int? field5;
+  int? field7;
+  var field1 = 1;
+  var field16 = 0;
+  var field18 = '';
+  var field2 = '';
+  var field3 = 1;
+  var field4 = '';
+  var field9;
+}
+
+class C implements A<int>, B<int, String> {
+  C(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18);
+  int? field12;
+  int? field14;
+  var field1;
+  var field10;
+  var field11;
+  var field13 = 0;
+  var field15;
+  var field16;
+  var field17;
+  var field18;
+  var field2;
+  var field3 = 0;
+  var field4 = 0;
+  var field5;
+  var field6;
+  var field7 = 0;
+  var field8 = 0;
+  var field9;
+}
+
+class D<T> implements A<T>, B<T, T> {
+  D(
+      this.field1,
+      this.field2,
+      this.field3,
+      this.field4,
+      this.field5,
+      this.field6,
+      this.field7,
+      this.field8,
+      this.field9,
+      this.field10,
+      this.field11,
+      this.field12,
+      this.field13,
+      this.field14,
+      this.field15,
+      this.field16,
+      this.field17,
+      this.field18);
+  T field12;
+  T field14;
+  var field1;
+  var field10;
+  var field11;
+  var field13 = null;
+  var field15;
+  var field16;
+  var field17;
+  var field18;
+  var field2;
+  var field3 = 0;
+  var field4 = 0;
+  var field5;
+  var field6;
+  var field7 = 0;
+  var field8 = 0;
+  var field9;
+}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.expect b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.expect
new file mode 100644
index 0000000..8a56297
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.expect
@@ -0,0 +1,331 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:53:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:30:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:55:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:32:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:57:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:11:8: Context: This is one of the overridden members.
+//   int? field6;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:34:11: Context: This is one of the overridden members.
+//   String? field6;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:59:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:13:8: Context: This is one of the overridden members.
+//   int? field8;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:36:11: Context: This is one of the overridden members.
+//   String? field8;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:62:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field11; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:16:5: Context: This is one of the overridden members.
+//   T field11;
+//     ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:39:5: Context: This is one of the overridden members.
+//   S field11;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:66:7: Error: Can't infer a type for 'field15' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field15;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:20:7: Context: This is one of the overridden members.
+//   var field15 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:43:8: Context: This is one of the overridden members.
+//   int? field15;
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:67:7: Error: Can't infer a type for 'field16' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field16;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:21:8: Context: This is one of the overridden members.
+//   int? field16;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:44:7: Context: This is one of the overridden members.
+//   var field16 = 0;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:68:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:45:11: Context: This is one of the overridden members.
+//   String? field17;
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:69:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:23:8: Context: This is one of the overridden members.
+//   int? field18;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:46:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:94:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:30:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:96:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:32:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:98:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:11:8: Context: This is one of the overridden members.
+//   int? field6;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:34:11: Context: This is one of the overridden members.
+//   String? field6;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:100:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:13:8: Context: This is one of the overridden members.
+//   int? field8;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:36:11: Context: This is one of the overridden members.
+//   String? field8;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:107:7: Error: Can't infer a type for 'field15' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field15;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:20:7: Context: This is one of the overridden members.
+//   var field15 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:43:8: Context: This is one of the overridden members.
+//   int? field15;
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:108:7: Error: Can't infer a type for 'field16' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field16;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:21:8: Context: This is one of the overridden members.
+//   int? field16;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:44:7: Context: This is one of the overridden members.
+//   var field16 = 0;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:109:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:45:11: Context: This is one of the overridden members.
+//   String? field17;
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:110:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:23:8: Context: This is one of the overridden members.
+//   int? field18;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:46:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:63:8: Error: The return type of the method 'C.field12' is 'int?', which does not match the return type, 'int', of the overridden method, 'A.field12'.
+// Change to a subtype of 'int'.
+//   int? field12;
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:17:5: Context: This is the overridden method ('field12').
+//   T field12;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:63:8: Error: The return type of the method 'C.field12' is 'int?', which does not match the return type, 'int', of the overridden method, 'B.field12'.
+// Change to a subtype of 'int'.
+//   int? field12;
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:40:5: Context: This is the overridden method ('field12').
+//   T field12;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The return type of the method 'C.field14' is 'int?', which does not match the return type, 'int', of the overridden method, 'A.field14'.
+// Change to a subtype of 'int'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:19:5: Context: This is the overridden method ('field14').
+//   T field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The return type of the method 'C.field14' is 'int?', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// Change to a subtype of 'String'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:42:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The field 'C.field14' has type 'int?', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:42:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:105:17: Error: The value 'null' can't be assigned to a variable of type 'T' because 'T' is not nullable.
+//   var field13 = null; // error
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field core::int field1 = 0;
+  field core::int field2 = 0;
+  field core::int field3 = 0;
+  field core::int field4 = 0;
+  field core::int? field5 = null;
+  field core::int? field6 = null;
+  field core::int? field7 = null;
+  field core::int? field8 = null;
+  field dynamic field9 = null;
+  covariant-by-class field self::A::T% field10;
+  covariant-by-class field self::A::T% field11;
+  covariant-by-class field self::A::T% field12;
+  covariant-by-class field self::A::T% field13;
+  covariant-by-class field self::A::T% field14;
+  field core::int field15 = 0;
+  field core::int? field16 = null;
+  field core::int field17 = 0;
+  field core::int? field18 = null;
+  constructor •(self::A::T% field10, self::A::T% field11, self::A::T% field12, self::A::T% field13, self::A::T% field14) → self::A<self::A::T%>
+    : self::A::field10 = field10, self::A::field11 = field11, self::A::field12 = field12, self::A::field13 = field13, self::A::field14 = field14, super core::Object::•()
+    ;
+}
+class B<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  field core::int field1 = 1;
+  field core::String field2 = "";
+  field core::int field3 = 1;
+  field core::String field4 = "";
+  field core::int? field5 = null;
+  field core::String? field6 = null;
+  field core::int? field7 = null;
+  field core::String? field8 = null;
+  field dynamic field9 = null;
+  covariant-by-class field self::B::T% field10;
+  covariant-by-class field self::B::S% field11;
+  covariant-by-class field self::B::T% field12;
+  covariant-by-class field self::B::T% field13;
+  covariant-by-class field self::B::S% field14;
+  field core::int? field15 = null;
+  field core::int field16 = 0;
+  field core::String? field17 = null;
+  field core::String field18 = "";
+  constructor •(self::B::T% field10, self::B::S% field11, self::B::T% field12, self::B::T% field13, self::B::S% field14) → self::B<self::B::T%, self::B::S%>
+    : self::B::field10 = field10, self::B::field11 = field11, self::B::field12 = field12, self::B::field13 = field13, self::B::field14 = field14, super core::Object::•()
+    ;
+}
+class C extends core::Object implements self::A<core::int>, self::B<core::int, core::String> {
+  field core::int field1;
+  field invalid-type field2;
+  field core::int field3 = 0;
+  field invalid-type field4 = 0;
+  field core::int? field5;
+  field invalid-type field6;
+  field core::int? field7 = 0;
+  field invalid-type field8 = 0;
+  field dynamic field9;
+  covariant-by-class field core::int field10;
+  covariant-by-class field invalid-type field11;
+  covariant-by-class field core::int? field12;
+  covariant-by-class field core::int field13 = 0;
+  covariant-by-class field core::int? field14;
+  field invalid-type field15;
+  field invalid-type field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int field1, invalid-type field2, core::int field3, invalid-type field4, core::int? field5, invalid-type field6, core::int? field7, invalid-type field8, dynamic field9, core::int field10, invalid-type field11, core::int? field12, core::int field13, core::int? field14, invalid-type field15, invalid-type field16, invalid-type field17, invalid-type field18) → self::C
+    : self::C::field1 = field1, self::C::field2 = field2, self::C::field3 = field3, self::C::field4 = field4, self::C::field5 = field5, self::C::field6 = field6, self::C::field7 = field7, self::C::field8 = field8, self::C::field9 = field9, self::C::field10 = field10, self::C::field11 = field11, self::C::field12 = field12, self::C::field13 = field13, self::C::field14 = field14, self::C::field15 = field15, self::C::field16 = field16, self::C::field17 = field17, self::C::field18 = field18, super core::Object::•()
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object implements self::A<self::D::T%>, self::B<self::D::T%, self::D::T%> {
+  field core::int field1;
+  field invalid-type field2;
+  field core::int field3 = 0;
+  field invalid-type field4 = 0;
+  field core::int? field5;
+  field invalid-type field6;
+  field core::int? field7 = 0;
+  field invalid-type field8 = 0;
+  field dynamic field9;
+  covariant-by-class field self::D::T% field10;
+  covariant-by-class field self::D::T% field11;
+  covariant-by-class field self::D::T% field12;
+  covariant-by-class field self::D::T% field13 = invalid-expression "pkg/front_end/testcases/general/infer_field_from_multiple2.dart:105:17: Error: The value 'null' can't be assigned to a variable of type 'T' because 'T' is not nullable.
+  var field13 = null; // error
+                ^" in null as{TypeError,ForNonNullableByDefault} Never;
+  covariant-by-class field self::D::T% field14;
+  field invalid-type field15;
+  field invalid-type field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int field1, invalid-type field2, core::int field3, invalid-type field4, core::int? field5, invalid-type field6, core::int? field7, invalid-type field8, dynamic field9, self::D::T% field10, self::D::T% field11, self::D::T% field12, self::D::T% field13, self::D::T% field14, invalid-type field15, invalid-type field16, invalid-type field17, invalid-type field18) → self::D<self::D::T%>
+    : self::D::field1 = field1, self::D::field2 = field2, self::D::field3 = field3, self::D::field4 = field4, self::D::field5 = field5, self::D::field6 = field6, self::D::field7 = field7, self::D::field8 = field8, self::D::field9 = field9, self::D::field10 = field10, self::D::field11 = field11, self::D::field12 = field12, self::D::field13 = field13, self::D::field14 = field14, self::D::field15 = field15, self::D::field16 = field16, self::D::field17 = field17, self::D::field18 = field18, super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.modular.expect
new file mode 100644
index 0000000..8a56297
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.modular.expect
@@ -0,0 +1,331 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:53:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:30:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:55:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:32:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:57:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:11:8: Context: This is one of the overridden members.
+//   int? field6;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:34:11: Context: This is one of the overridden members.
+//   String? field6;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:59:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:13:8: Context: This is one of the overridden members.
+//   int? field8;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:36:11: Context: This is one of the overridden members.
+//   String? field8;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:62:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field11; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:16:5: Context: This is one of the overridden members.
+//   T field11;
+//     ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:39:5: Context: This is one of the overridden members.
+//   S field11;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:66:7: Error: Can't infer a type for 'field15' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field15;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:20:7: Context: This is one of the overridden members.
+//   var field15 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:43:8: Context: This is one of the overridden members.
+//   int? field15;
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:67:7: Error: Can't infer a type for 'field16' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field16;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:21:8: Context: This is one of the overridden members.
+//   int? field16;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:44:7: Context: This is one of the overridden members.
+//   var field16 = 0;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:68:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:45:11: Context: This is one of the overridden members.
+//   String? field17;
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:69:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:23:8: Context: This is one of the overridden members.
+//   int? field18;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:46:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:94:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:30:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:96:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:32:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:98:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:11:8: Context: This is one of the overridden members.
+//   int? field6;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:34:11: Context: This is one of the overridden members.
+//   String? field6;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:100:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:13:8: Context: This is one of the overridden members.
+//   int? field8;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:36:11: Context: This is one of the overridden members.
+//   String? field8;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:107:7: Error: Can't infer a type for 'field15' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field15;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:20:7: Context: This is one of the overridden members.
+//   var field15 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:43:8: Context: This is one of the overridden members.
+//   int? field15;
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:108:7: Error: Can't infer a type for 'field16' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field16;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:21:8: Context: This is one of the overridden members.
+//   int? field16;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:44:7: Context: This is one of the overridden members.
+//   var field16 = 0;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:109:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:45:11: Context: This is one of the overridden members.
+//   String? field17;
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:110:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:23:8: Context: This is one of the overridden members.
+//   int? field18;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:46:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:63:8: Error: The return type of the method 'C.field12' is 'int?', which does not match the return type, 'int', of the overridden method, 'A.field12'.
+// Change to a subtype of 'int'.
+//   int? field12;
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:17:5: Context: This is the overridden method ('field12').
+//   T field12;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:63:8: Error: The return type of the method 'C.field12' is 'int?', which does not match the return type, 'int', of the overridden method, 'B.field12'.
+// Change to a subtype of 'int'.
+//   int? field12;
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:40:5: Context: This is the overridden method ('field12').
+//   T field12;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The return type of the method 'C.field14' is 'int?', which does not match the return type, 'int', of the overridden method, 'A.field14'.
+// Change to a subtype of 'int'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:19:5: Context: This is the overridden method ('field14').
+//   T field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The return type of the method 'C.field14' is 'int?', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// Change to a subtype of 'String'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:42:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The field 'C.field14' has type 'int?', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:42:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:105:17: Error: The value 'null' can't be assigned to a variable of type 'T' because 'T' is not nullable.
+//   var field13 = null; // error
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field core::int field1 = 0;
+  field core::int field2 = 0;
+  field core::int field3 = 0;
+  field core::int field4 = 0;
+  field core::int? field5 = null;
+  field core::int? field6 = null;
+  field core::int? field7 = null;
+  field core::int? field8 = null;
+  field dynamic field9 = null;
+  covariant-by-class field self::A::T% field10;
+  covariant-by-class field self::A::T% field11;
+  covariant-by-class field self::A::T% field12;
+  covariant-by-class field self::A::T% field13;
+  covariant-by-class field self::A::T% field14;
+  field core::int field15 = 0;
+  field core::int? field16 = null;
+  field core::int field17 = 0;
+  field core::int? field18 = null;
+  constructor •(self::A::T% field10, self::A::T% field11, self::A::T% field12, self::A::T% field13, self::A::T% field14) → self::A<self::A::T%>
+    : self::A::field10 = field10, self::A::field11 = field11, self::A::field12 = field12, self::A::field13 = field13, self::A::field14 = field14, super core::Object::•()
+    ;
+}
+class B<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  field core::int field1 = 1;
+  field core::String field2 = "";
+  field core::int field3 = 1;
+  field core::String field4 = "";
+  field core::int? field5 = null;
+  field core::String? field6 = null;
+  field core::int? field7 = null;
+  field core::String? field8 = null;
+  field dynamic field9 = null;
+  covariant-by-class field self::B::T% field10;
+  covariant-by-class field self::B::S% field11;
+  covariant-by-class field self::B::T% field12;
+  covariant-by-class field self::B::T% field13;
+  covariant-by-class field self::B::S% field14;
+  field core::int? field15 = null;
+  field core::int field16 = 0;
+  field core::String? field17 = null;
+  field core::String field18 = "";
+  constructor •(self::B::T% field10, self::B::S% field11, self::B::T% field12, self::B::T% field13, self::B::S% field14) → self::B<self::B::T%, self::B::S%>
+    : self::B::field10 = field10, self::B::field11 = field11, self::B::field12 = field12, self::B::field13 = field13, self::B::field14 = field14, super core::Object::•()
+    ;
+}
+class C extends core::Object implements self::A<core::int>, self::B<core::int, core::String> {
+  field core::int field1;
+  field invalid-type field2;
+  field core::int field3 = 0;
+  field invalid-type field4 = 0;
+  field core::int? field5;
+  field invalid-type field6;
+  field core::int? field7 = 0;
+  field invalid-type field8 = 0;
+  field dynamic field9;
+  covariant-by-class field core::int field10;
+  covariant-by-class field invalid-type field11;
+  covariant-by-class field core::int? field12;
+  covariant-by-class field core::int field13 = 0;
+  covariant-by-class field core::int? field14;
+  field invalid-type field15;
+  field invalid-type field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int field1, invalid-type field2, core::int field3, invalid-type field4, core::int? field5, invalid-type field6, core::int? field7, invalid-type field8, dynamic field9, core::int field10, invalid-type field11, core::int? field12, core::int field13, core::int? field14, invalid-type field15, invalid-type field16, invalid-type field17, invalid-type field18) → self::C
+    : self::C::field1 = field1, self::C::field2 = field2, self::C::field3 = field3, self::C::field4 = field4, self::C::field5 = field5, self::C::field6 = field6, self::C::field7 = field7, self::C::field8 = field8, self::C::field9 = field9, self::C::field10 = field10, self::C::field11 = field11, self::C::field12 = field12, self::C::field13 = field13, self::C::field14 = field14, self::C::field15 = field15, self::C::field16 = field16, self::C::field17 = field17, self::C::field18 = field18, super core::Object::•()
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object implements self::A<self::D::T%>, self::B<self::D::T%, self::D::T%> {
+  field core::int field1;
+  field invalid-type field2;
+  field core::int field3 = 0;
+  field invalid-type field4 = 0;
+  field core::int? field5;
+  field invalid-type field6;
+  field core::int? field7 = 0;
+  field invalid-type field8 = 0;
+  field dynamic field9;
+  covariant-by-class field self::D::T% field10;
+  covariant-by-class field self::D::T% field11;
+  covariant-by-class field self::D::T% field12;
+  covariant-by-class field self::D::T% field13 = invalid-expression "pkg/front_end/testcases/general/infer_field_from_multiple2.dart:105:17: Error: The value 'null' can't be assigned to a variable of type 'T' because 'T' is not nullable.
+  var field13 = null; // error
+                ^" in null as{TypeError,ForNonNullableByDefault} Never;
+  covariant-by-class field self::D::T% field14;
+  field invalid-type field15;
+  field invalid-type field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int field1, invalid-type field2, core::int field3, invalid-type field4, core::int? field5, invalid-type field6, core::int? field7, invalid-type field8, dynamic field9, self::D::T% field10, self::D::T% field11, self::D::T% field12, self::D::T% field13, self::D::T% field14, invalid-type field15, invalid-type field16, invalid-type field17, invalid-type field18) → self::D<self::D::T%>
+    : self::D::field1 = field1, self::D::field2 = field2, self::D::field3 = field3, self::D::field4 = field4, self::D::field5 = field5, self::D::field6 = field6, self::D::field7 = field7, self::D::field8 = field8, self::D::field9 = field9, self::D::field10 = field10, self::D::field11 = field11, self::D::field12 = field12, self::D::field13 = field13, self::D::field14 = field14, self::D::field15 = field15, self::D::field16 = field16, self::D::field17 = field17, self::D::field18 = field18, super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.outline.expect
new file mode 100644
index 0000000..1c79589
--- /dev/null
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple2.dart.weak.outline.expect
@@ -0,0 +1,321 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:53:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:30:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:55:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:32:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:57:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:11:8: Context: This is one of the overridden members.
+//   int? field6;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:34:11: Context: This is one of the overridden members.
+//   String? field6;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:59:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:13:8: Context: This is one of the overridden members.
+//   int? field8;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:36:11: Context: This is one of the overridden members.
+//   String? field8;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:62:7: Error: Can't infer a type for 'field11' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field11; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:16:5: Context: This is one of the overridden members.
+//   T field11;
+//     ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:39:5: Context: This is one of the overridden members.
+//   S field11;
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:66:7: Error: Can't infer a type for 'field15' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field15;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:20:7: Context: This is one of the overridden members.
+//   var field15 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:43:8: Context: This is one of the overridden members.
+//   int? field15;
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:67:7: Error: Can't infer a type for 'field16' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field16;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:21:8: Context: This is one of the overridden members.
+//   int? field16;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:44:7: Context: This is one of the overridden members.
+//   var field16 = 0;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:68:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:45:11: Context: This is one of the overridden members.
+//   String? field17;
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:69:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:23:8: Context: This is one of the overridden members.
+//   int? field18;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:46:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:94:7: Error: Can't infer a type for 'field2' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field2; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:7:7: Context: This is one of the overridden members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:30:7: Context: This is one of the overridden members.
+//   var field2 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:96:7: Error: Can't infer a type for 'field4' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field4 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:9:7: Context: This is one of the overridden members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:32:7: Context: This is one of the overridden members.
+//   var field4 = '';
+//       ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:98:7: Error: Can't infer a type for 'field6' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field6; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:11:8: Context: This is one of the overridden members.
+//   int? field6;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:34:11: Context: This is one of the overridden members.
+//   String? field6;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:100:7: Error: Can't infer a type for 'field8' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field8 = 0; // error
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:13:8: Context: This is one of the overridden members.
+//   int? field8;
+//        ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:36:11: Context: This is one of the overridden members.
+//   String? field8;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:107:7: Error: Can't infer a type for 'field15' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field15;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:20:7: Context: This is one of the overridden members.
+//   var field15 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:43:8: Context: This is one of the overridden members.
+//   int? field15;
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:108:7: Error: Can't infer a type for 'field16' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field16;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:21:8: Context: This is one of the overridden members.
+//   int? field16;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:44:7: Context: This is one of the overridden members.
+//   var field16 = 0;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:109:7: Error: Can't infer a type for 'field17' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field17; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:22:7: Context: This is one of the overridden members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:45:11: Context: This is one of the overridden members.
+//   String? field17;
+//           ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:110:7: Error: Can't infer a type for 'field18' as the overridden members don't have a combined signature.
+// Try adding an explicit type.
+//   var field18; // error
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:23:8: Context: This is one of the overridden members.
+//   int? field18;
+//        ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:46:7: Context: This is one of the overridden members.
+//   var field18 = '';
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:63:8: Error: The return type of the method 'C.field12' is 'int?', which does not match the return type, 'int', of the overridden method, 'A.field12'.
+// Change to a subtype of 'int'.
+//   int? field12;
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:17:5: Context: This is the overridden method ('field12').
+//   T field12;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:63:8: Error: The return type of the method 'C.field12' is 'int?', which does not match the return type, 'int', of the overridden method, 'B.field12'.
+// Change to a subtype of 'int'.
+//   int? field12;
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:40:5: Context: This is the overridden method ('field12').
+//   T field12;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The return type of the method 'C.field14' is 'int?', which does not match the return type, 'int', of the overridden method, 'A.field14'.
+// Change to a subtype of 'int'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:19:5: Context: This is the overridden method ('field14').
+//   T field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The return type of the method 'C.field14' is 'int?', which does not match the return type, 'String', of the overridden method, 'B.field14'.
+// Change to a subtype of 'String'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:42:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:65:8: Error: The field 'C.field14' has type 'int?', which does not match the corresponding type, 'String', in the overridden setter, 'B.field14'.
+//   int? field14; // error
+//        ^
+// pkg/front_end/testcases/general/infer_field_from_multiple2.dart:42:5: Context: This is the overridden method ('field14').
+//   S field14;
+//     ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object? = dynamic> extends core::Object {
+  field core::int field1;
+  field core::int field2;
+  field core::int field3;
+  field core::int field4;
+  field core::int? field5;
+  field core::int? field6;
+  field core::int? field7;
+  field core::int? field8;
+  field dynamic field9;
+  covariant-by-class field self::A::T% field10;
+  covariant-by-class field self::A::T% field11;
+  covariant-by-class field self::A::T% field12;
+  covariant-by-class field self::A::T% field13;
+  covariant-by-class field self::A::T% field14;
+  field core::int field15;
+  field core::int? field16;
+  field core::int field17;
+  field core::int? field18;
+  constructor •(self::A::T% field10, self::A::T% field11, self::A::T% field12, self::A::T% field13, self::A::T% field14) → self::A<self::A::T%>
+    ;
+}
+class B<T extends core::Object? = dynamic, S extends core::Object? = dynamic> extends core::Object {
+  field core::int field1;
+  field core::String field2;
+  field core::int field3;
+  field core::String field4;
+  field core::int? field5;
+  field core::String? field6;
+  field core::int? field7;
+  field core::String? field8;
+  field dynamic field9;
+  covariant-by-class field self::B::T% field10;
+  covariant-by-class field self::B::S% field11;
+  covariant-by-class field self::B::T% field12;
+  covariant-by-class field self::B::T% field13;
+  covariant-by-class field self::B::S% field14;
+  field core::int? field15;
+  field core::int field16;
+  field core::String? field17;
+  field core::String field18;
+  constructor •(self::B::T% field10, self::B::S% field11, self::B::T% field12, self::B::T% field13, self::B::S% field14) → self::B<self::B::T%, self::B::S%>
+    ;
+}
+class C extends core::Object implements self::A<core::int>, self::B<core::int, core::String> {
+  field core::int field1;
+  field invalid-type field2;
+  field core::int field3;
+  field invalid-type field4;
+  field core::int? field5;
+  field invalid-type field6;
+  field core::int? field7;
+  field invalid-type field8;
+  field dynamic field9;
+  covariant-by-class field core::int field10;
+  covariant-by-class field invalid-type field11;
+  covariant-by-class field core::int? field12;
+  covariant-by-class field core::int field13;
+  covariant-by-class field core::int? field14;
+  field invalid-type field15;
+  field invalid-type field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int field1, invalid-type field2, core::int field3, invalid-type field4, core::int? field5, invalid-type field6, core::int? field7, invalid-type field8, dynamic field9, core::int field10, invalid-type field11, core::int? field12, core::int field13, core::int? field14, invalid-type field15, invalid-type field16, invalid-type field17, invalid-type field18) → self::C
+    ;
+}
+class D<T extends core::Object? = dynamic> extends core::Object implements self::A<self::D::T%>, self::B<self::D::T%, self::D::T%> {
+  field core::int field1;
+  field invalid-type field2;
+  field core::int field3;
+  field invalid-type field4;
+  field core::int? field5;
+  field invalid-type field6;
+  field core::int? field7;
+  field invalid-type field8;
+  field dynamic field9;
+  covariant-by-class field self::D::T% field10;
+  covariant-by-class field self::D::T% field11;
+  covariant-by-class field self::D::T% field12;
+  covariant-by-class field self::D::T% field13;
+  covariant-by-class field self::D::T% field14;
+  field invalid-type field15;
+  field invalid-type field16;
+  field invalid-type field17;
+  field invalid-type field18;
+  constructor •(core::int field1, invalid-type field2, core::int field3, invalid-type field4, core::int? field5, invalid-type field6, core::int? field7, invalid-type field8, dynamic field9, self::D::T% field10, self::D::T% field11, self::D::T% field12, self::D::T% field13, self::D::T% field14, invalid-type field15, invalid-type field16, invalid-type field17, invalid-type field18) → self::D<self::D::T%>
+    ;
+}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart b/pkg/front_end/testcases/general/infer_field_type.dart
index 0a8bda7..9e95479 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart
+++ b/pkg/front_end/testcases/general/infer_field_type.dart
@@ -1,22 +1,24 @@
 // 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 extends B {
   var field;
 }
 
 class B extends A {
-  get field => null;
+  get field => throw '';
   set field(value) {}
 }
 
 class A {
-  var field = 0;
+  var field = method();
 }
 
 var topLevelFieldFromA = new A().field;
 var topLevelFieldFromB = new B().field;
 var topLevelFieldFromC = new C().field;
 
+int? method() => 0;
+
 main() {}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline.expect
index 8861596..9c4bee6 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline.expect
@@ -1,18 +1,18 @@
-// @dart = 2.9
 class C extends B {
   var field;
 }
 
 class B extends A {
-  get field => null;
+  get field => throw '';
   set field(value) {}
 }
 
 class A {
-  var field = 0;
+  var field = method();
 }
 
 var topLevelFieldFromA = new A().field;
 var topLevelFieldFromB = new B().field;
 var topLevelFieldFromC = new C().field;
+int? method() => 0;
 main() {}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline_modelled.expect
index 4255787..7186771 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A {
-  var field = 0;
+  var field = method();
 }
 
 class B extends A {
-  get field => null;
+  get field => throw '';
   set field(value) {}
 }
 
@@ -12,6 +11,7 @@
   var field;
 }
 
+int? method() => 0;
 main() {}
 var topLevelFieldFromA = new A().field;
 var topLevelFieldFromB = new B().field;
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect
index aa6a7e49..b597464 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.expect
@@ -1,38 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  field core::int* field = null;
-  synthetic constructor •() → self::C*
+  field core::int? field = null;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field() → core::int*
-    return null;
-  set field(core::int* value) → void {}
+  get field() → core::int?
+    return throw "";
+  set field(core::int? value) → void {}
 }
 class A extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::A*
+  field core::int? field = self::method();
+  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 field core::int* topLevelFieldFromA = new self::A::•().{self::A::field}{core::int*};
-static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field}{core::int*};
-static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field}{core::int*};
+static field core::int? topLevelFieldFromA = new self::A::•().{self::A::field}{core::int?};
+static field core::int? topLevelFieldFromB = new self::B::•().{self::B::field}{core::int?};
+static field core::int? topLevelFieldFromC = new self::C::•().{self::C::field}{core::int?};
+static method method() → core::int?
+  return 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect
index aa6a7e49..b597464 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.modular.expect
@@ -1,38 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  field core::int* field = null;
-  synthetic constructor •() → self::C*
+  field core::int? field = null;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field() → core::int*
-    return null;
-  set field(core::int* value) → void {}
+  get field() → core::int?
+    return throw "";
+  set field(core::int? value) → void {}
 }
 class A extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::A*
+  field core::int? field = self::method();
+  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 field core::int* topLevelFieldFromA = new self::A::•().{self::A::field}{core::int*};
-static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field}{core::int*};
-static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field}{core::int*};
+static field core::int? topLevelFieldFromA = new self::A::•().{self::A::field}{core::int?};
+static field core::int? topLevelFieldFromB = new self::B::•().{self::B::field}{core::int?};
+static field core::int? topLevelFieldFromC = new self::C::•().{self::C::field}{core::int?};
+static method method() → core::int?
+  return 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.outline.expect
index ce88df0..a28fe22 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.outline.expect
@@ -1,37 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  field core::int* field;
-  synthetic constructor •() → self::C*
+  field core::int? field;
+  synthetic constructor •() → self::C
     ;
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get field() → core::int*
+  get field() → core::int?
     ;
-  set field(core::int* value) → void
+  set field(core::int? value) → void
     ;
 }
 class A extends core::Object {
-  field core::int* field;
-  synthetic constructor •() → self::A*
+  field core::int? field;
+  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 field core::int* topLevelFieldFromA;
-static field core::int* topLevelFieldFromB;
-static field core::int* topLevelFieldFromC;
+static field core::int? topLevelFieldFromA;
+static field core::int? topLevelFieldFromB;
+static field core::int? topLevelFieldFromC;
+static method method() → core::int?
+  ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect
index aa6a7e49..b597464 100644
--- a/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_field_type.dart.weak.transformed.expect
@@ -1,38 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends self::B {
-  field core::int* field = null;
-  synthetic constructor •() → self::C*
+  field core::int? field = null;
+  synthetic constructor •() → self::C
     : super self::B::•()
     ;
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  get field() → core::int*
-    return null;
-  set field(core::int* value) → void {}
+  get field() → core::int?
+    return throw "";
+  set field(core::int? value) → void {}
 }
 class A extends core::Object {
-  field core::int* field = 0;
-  synthetic constructor •() → self::A*
+  field core::int? field = self::method();
+  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 field core::int* topLevelFieldFromA = new self::A::•().{self::A::field}{core::int*};
-static field core::int* topLevelFieldFromB = new self::B::•().{self::B::field}{core::int*};
-static field core::int* topLevelFieldFromC = new self::C::•().{self::C::field}{core::int*};
+static field core::int? topLevelFieldFromA = new self::A::•().{self::A::field}{core::int?};
+static field core::int? topLevelFieldFromB = new self::B::•().{self::B::field}{core::int?};
+static field core::int? topLevelFieldFromC = new self::C::•().{self::C::field}{core::int?};
+static method method() → core::int?
+  return 0;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart
index cb84d8e..d10fb48 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.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 Base {}
 
 abstract class MixinA<T> {
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline.expect
index e83d7c9..b5af5e7 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Base {}
 
 abstract class MixinA<T> {
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline_modelled.expect
index bf1ed7b..e13a164 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class Base {}
 
 abstract class Class extends Base with MixinA {
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.expect
index bf294a6..931f844 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.expect
@@ -1,127 +1,67 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 MixinA<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
+abstract class MixinA<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::MixinA<self::MixinA::T%>
     : super core::Object::•()
     ;
-  abstract method method(core::Object* t) → self::MixinA::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 method method(core::Object t) → self::MixinA::T%;
 }
 abstract class _Class&Base&MixinA = self::Base with self::MixinA<dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Base&MixinA*
+  synthetic constructor •() → self::_Class&Base&MixinA
     : super self::Base::•()
     ;
-  abstract mixin-stub method method(core::Object* t) → dynamic; -> self::MixinA::method
+  abstract mixin-stub method method(core::Object t) → dynamic; -> self::MixinA::method
 }
 abstract class Class extends self::_Class&Base&MixinA {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Base&MixinA::•()
     ;
-  method method(core::Object* t) → dynamic {}
+  method method(core::Object t) → dynamic {}
 }
 abstract class YamlNode extends core::Object {
-  synthetic constructor •() → self::YamlNode*
+  synthetic constructor •() → self::YamlNode
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Map<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Map<self::Map::K*, self::Map::V*>*
+abstract class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](core::Object* key) → self::Map::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
+  abstract operator [](core::Object key) → self::Map::V%;
 }
-abstract class MapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::MapMixin::K*, self::MapMixin::V*> {
-  synthetic constructor •() → self::MapMixin<self::MapMixin::K*, self::MapMixin::V*>*
+abstract class MapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::MapMixin::K%, self::MapMixin::V%> {
+  synthetic constructor •() → self::MapMixin<self::MapMixin::K%, self::MapMixin::V%>
     : super core::Object::•()
     ;
-  abstract operator [](core::Object* key) → self::MapMixin::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
+  abstract operator [](core::Object key) → self::MapMixin::V%;
 }
-abstract class UnmodifiableMapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*> {
-  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*>*
+abstract class UnmodifiableMapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::V%> {
+  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::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
 }
 abstract class _YamlMap&YamlNode&MapMixin = self::YamlNode with self::MapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin
     : super self::YamlNode::•()
     ;
-  abstract mixin-stub operator [](core::Object* key) → dynamic; -> self::MapMixin::[]
+  abstract mixin-stub operator [](core::Object key) → dynamic; -> self::MapMixin::[]
 }
 abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin
     : super self::_YamlMap&YamlNode&MapMixin::•()
     ;
 }
 class YamlMap extends self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin {
-  synthetic constructor •() → self::YamlMap*
+  synthetic constructor •() → self::YamlMap
     : super self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin::•()
     ;
-  operator [](core::Object* key) → dynamic {}
+  operator [](core::Object key) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect
index bf294a6..931f844 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.modular.expect
@@ -1,127 +1,67 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 MixinA<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
+abstract class MixinA<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::MixinA<self::MixinA::T%>
     : super core::Object::•()
     ;
-  abstract method method(core::Object* t) → self::MixinA::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 method method(core::Object t) → self::MixinA::T%;
 }
 abstract class _Class&Base&MixinA = self::Base with self::MixinA<dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Base&MixinA*
+  synthetic constructor •() → self::_Class&Base&MixinA
     : super self::Base::•()
     ;
-  abstract mixin-stub method method(core::Object* t) → dynamic; -> self::MixinA::method
+  abstract mixin-stub method method(core::Object t) → dynamic; -> self::MixinA::method
 }
 abstract class Class extends self::_Class&Base&MixinA {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Base&MixinA::•()
     ;
-  method method(core::Object* t) → dynamic {}
+  method method(core::Object t) → dynamic {}
 }
 abstract class YamlNode extends core::Object {
-  synthetic constructor •() → self::YamlNode*
+  synthetic constructor •() → self::YamlNode
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Map<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Map<self::Map::K*, self::Map::V*>*
+abstract class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](core::Object* key) → self::Map::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
+  abstract operator [](core::Object key) → self::Map::V%;
 }
-abstract class MapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::MapMixin::K*, self::MapMixin::V*> {
-  synthetic constructor •() → self::MapMixin<self::MapMixin::K*, self::MapMixin::V*>*
+abstract class MapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::MapMixin::K%, self::MapMixin::V%> {
+  synthetic constructor •() → self::MapMixin<self::MapMixin::K%, self::MapMixin::V%>
     : super core::Object::•()
     ;
-  abstract operator [](core::Object* key) → self::MapMixin::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
+  abstract operator [](core::Object key) → self::MapMixin::V%;
 }
-abstract class UnmodifiableMapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*> {
-  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*>*
+abstract class UnmodifiableMapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::V%> {
+  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::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
 }
 abstract class _YamlMap&YamlNode&MapMixin = self::YamlNode with self::MapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin
     : super self::YamlNode::•()
     ;
-  abstract mixin-stub operator [](core::Object* key) → dynamic; -> self::MapMixin::[]
+  abstract mixin-stub operator [](core::Object key) → dynamic; -> self::MapMixin::[]
 }
 abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin
     : super self::_YamlMap&YamlNode&MapMixin::•()
     ;
 }
 class YamlMap extends self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin {
-  synthetic constructor •() → self::YamlMap*
+  synthetic constructor •() → self::YamlMap
     : super self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin::•()
     ;
-  operator [](core::Object* key) → dynamic {}
+  operator [](core::Object key) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.outline.expect
index 2bf067c..141c5ec 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.outline.expect
@@ -1,121 +1,61 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 MixinA<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
+abstract class MixinA<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::MixinA<self::MixinA::T%>
     ;
-  abstract method method(core::Object* t) → self::MixinA::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 method method(core::Object t) → self::MixinA::T%;
 }
 abstract class _Class&Base&MixinA = self::Base with self::MixinA<dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_Class&Base&MixinA*
+  synthetic constructor •() → self::_Class&Base&MixinA
     : super self::Base::•()
     ;
-  abstract mixin-stub method method(core::Object* t) → dynamic; -> self::MixinA::method
+  abstract mixin-stub method method(core::Object t) → dynamic; -> self::MixinA::method
 }
 abstract class Class extends self::_Class&Base&MixinA {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  method method(core::Object* t) → dynamic
+  method method(core::Object t) → dynamic
     ;
 }
 abstract class YamlNode extends core::Object {
-  synthetic constructor •() → self::YamlNode*
+  synthetic constructor •() → self::YamlNode
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Map<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Map<self::Map::K*, self::Map::V*>*
+abstract class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     ;
-  abstract operator [](core::Object* key) → self::Map::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
+  abstract operator [](core::Object key) → self::Map::V%;
 }
-abstract class MapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::MapMixin::K*, self::MapMixin::V*> {
-  synthetic constructor •() → self::MapMixin<self::MapMixin::K*, self::MapMixin::V*>*
+abstract class MapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::MapMixin::K%, self::MapMixin::V%> {
+  synthetic constructor •() → self::MapMixin<self::MapMixin::K%, self::MapMixin::V%>
     ;
-  abstract operator [](core::Object* key) → self::MapMixin::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
+  abstract operator [](core::Object key) → self::MapMixin::V%;
 }
-abstract class UnmodifiableMapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*> {
-  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*>*
+abstract class UnmodifiableMapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::V%> {
+  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::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
 }
 abstract class _YamlMap&YamlNode&MapMixin = self::YamlNode with self::MapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin
     : super self::YamlNode::•()
     ;
-  abstract mixin-stub operator [](core::Object* key) → dynamic; -> self::MapMixin::[]
+  abstract mixin-stub operator [](core::Object key) → dynamic; -> self::MapMixin::[]
 }
 abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin
     : super self::_YamlMap&YamlNode&MapMixin::•()
     ;
 }
 class YamlMap extends self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin {
-  synthetic constructor •() → self::YamlMap*
+  synthetic constructor •() → self::YamlMap
     ;
-  operator [](core::Object* key) → dynamic
+  operator [](core::Object key) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.transformed.expect
index 1dcdd07..608c41a 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.weak.transformed.expect
@@ -1,127 +1,67 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  synthetic constructor •() → self::Base*
+  synthetic constructor •() → self::Base
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 MixinA<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
+abstract class MixinA<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::MixinA<self::MixinA::T%>
     : super core::Object::•()
     ;
-  abstract method method(core::Object* t) → self::MixinA::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 method method(core::Object t) → self::MixinA::T%;
 }
 abstract class _Class&Base&MixinA extends self::Base implements self::MixinA<dynamic> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_Class&Base&MixinA*
+  synthetic constructor •() → self::_Class&Base&MixinA
     : super self::Base::•()
     ;
-  abstract method method(core::Object* t) → dynamic;
+  abstract method method(core::Object t) → dynamic;
 }
 abstract class Class extends self::_Class&Base&MixinA {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super self::_Class&Base&MixinA::•()
     ;
-  method method(core::Object* t) → dynamic {}
+  method method(core::Object t) → dynamic {}
 }
 abstract class YamlNode extends core::Object {
-  synthetic constructor •() → self::YamlNode*
+  synthetic constructor •() → self::YamlNode
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 Map<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Map<self::Map::K*, self::Map::V*>*
+abstract class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](core::Object* key) → self::Map::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
+  abstract operator [](core::Object key) → self::Map::V%;
 }
-abstract class MapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::MapMixin::K*, self::MapMixin::V*> {
-  synthetic constructor •() → self::MapMixin<self::MapMixin::K*, self::MapMixin::V*>*
+abstract class MapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::MapMixin::K%, self::MapMixin::V%> {
+  synthetic constructor •() → self::MapMixin<self::MapMixin::K%, self::MapMixin::V%>
     : super core::Object::•()
     ;
-  abstract operator [](core::Object* key) → self::MapMixin::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
+  abstract operator [](core::Object key) → self::MapMixin::V%;
 }
-abstract class UnmodifiableMapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*> {
-  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*>*
+abstract class UnmodifiableMapMixin<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::V%> {
+  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K%, self::UnmodifiableMapMixin::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
 }
 abstract class _YamlMap&YamlNode&MapMixin extends self::YamlNode implements self::MapMixin<dynamic, dynamic> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin
     : super self::YamlNode::•()
     ;
-  abstract operator [](core::Object* key) → dynamic;
+  abstract operator [](core::Object key) → dynamic;
 }
 abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin extends self::_YamlMap&YamlNode&MapMixin implements self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
+  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin
     : super self::_YamlMap&YamlNode&MapMixin::•()
     ;
 }
 class YamlMap extends self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin {
-  synthetic constructor •() → self::YamlMap*
+  synthetic constructor •() → self::YamlMap
     : super self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin::•()
     ;
-  operator [](core::Object* key) → dynamic {}
+  operator [](core::Object key) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart
index 4b4e481..813754f 100644
--- a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.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
+
 typedef F<T> = T Function(T, T);
 
 test1() {
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect
index 4574621..1371ebe 100644
--- a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.expect
@@ -2,39 +2,39 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:11:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(S a, S b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:17:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = f;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:22:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, S b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:27:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, S b) => b;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:32:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:37:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = (a, b, c) => a;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:42:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = (a) => a;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:47:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, b, c) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:52:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a) => a;
 //          ^
 //
@@ -44,56 +44,56 @@
 typedef F<invariant T extends core::Object* = dynamic> = (T*, T*) →* T*;
 static method test1() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:11:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(S a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(S* a, S* b) → S* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test2() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
   <S extends core::Object* = dynamic>(S*, S*) →* S* f = <S extends core::Object* = dynamic>(S* a, S* b) → S* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:17:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = f;
       ^" in f as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3a() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:22:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3b() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:27:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => b;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → S* => b) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test4() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:32:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test5() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:37:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a, b, c) => a;
       ^" in ((core::int* a, core::int* b, dynamic c) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test6() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:42:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a) => a;
       ^" in ((core::int* a) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test7() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:47:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b, c) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b, dynamic c) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test8() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:52:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect
index 4574621..1371ebe 100644
--- a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.modular.expect
@@ -2,39 +2,39 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:11:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(S a, S b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:17:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = f;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:22:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, S b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:27:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, S b) => b;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:32:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:37:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = (a, b, c) => a;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:42:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = (a) => a;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:47:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, b, c) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:52:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a) => a;
 //          ^
 //
@@ -44,56 +44,56 @@
 typedef F<invariant T extends core::Object* = dynamic> = (T*, T*) →* T*;
 static method test1() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:11:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(S a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(S* a, S* b) → S* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test2() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
   <S extends core::Object* = dynamic>(S*, S*) →* S* f = <S extends core::Object* = dynamic>(S* a, S* b) → S* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:17:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = f;
       ^" in f as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3a() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:22:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3b() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:27:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => b;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → S* => b) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test4() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:32:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test5() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:37:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a, b, c) => a;
       ^" in ((core::int* a, core::int* b, dynamic c) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test6() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:42:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a) => a;
       ^" in ((core::int* a) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test7() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:47:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b, c) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b, dynamic c) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test8() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:52:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect
index 4574621..1371ebe 100644
--- a/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart.weak.transformed.expect
@@ -2,39 +2,39 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:11:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(S a, S b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:17:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = f;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:22:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, S b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:27:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, S b) => b;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:32:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, b) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:37:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = (a, b, c) => a;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:42:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = (a) => a;
 //       ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:47:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a, b, c) => a;
 //          ^
 //
-// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+// pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:52:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
 //   d = <S>(a) => a;
 //          ^
 //
@@ -44,56 +44,56 @@
 typedef F<invariant T extends core::Object* = dynamic> = (T*, T*) →* T*;
 static method test1() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:9:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:11:10: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(S a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(S* a, S* b) → S* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test2() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
   <S extends core::Object* = dynamic>(S*, S*) →* S* f = <S extends core::Object* = dynamic>(S* a, S* b) → S* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:15:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:17:7: Error: A value of type 'S Function<S>(S, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = f;
       ^" in f as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3a() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:20:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:22:10: Error: A value of type 'dynamic Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test3b() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:25:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:27:10: Error: A value of type 'S Function<S>(dynamic, S)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, S b) => b;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, S* b) → S* => b) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test4() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:30:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:32:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test5() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:35:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:37:7: Error: A value of type 'int Function(int, int, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a, b, c) => a;
       ^" in ((core::int* a, core::int* b, dynamic c) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test6() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:40:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:42:7: Error: A value of type 'int Function(int)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = (a) => a;
       ^" in ((core::int* a) → core::int* => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test7() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:45:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:47:10: Error: A value of type 'dynamic Function<S>(dynamic, dynamic, dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a, b, c) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a, dynamic b, dynamic c) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
 static method test8() → dynamic {
   (core::int*, core::int*) →* core::int* d = (core::int* a, core::int* b) → core::int* => a;
-  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:50:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
+  d = invalid-expression "pkg/front_end/testcases/general/infer_generic_type_parameter_mismatch.dart:52:10: Error: A value of type 'dynamic Function<S>(dynamic)' can't be assigned to a variable of type 'int Function(int, int)'.
   d = <S>(a) => a;
          ^" in (<S extends core::Object* = dynamic>(dynamic a) → dynamic => a) as{TypeError} (core::int*, core::int*) →* core::int*;
 }
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart
index 74cb869..180da08 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.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 {
   var map = {
     'foo': (String a) {
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline.expect
index 80f7146..e1d5d9a 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   var map = {
     'foo': (String a) {
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline_modelled.expect
index 80f7146..e1d5d9a 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   var map = {
     'foo': (String a) {
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect
index 4e6b1e4..8b46298 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Map<core::String*, (core::String*) →* Null>* map = <core::String*, (core::String*) →* Null>{"foo": (core::String* a) → Null {
-    core::int* c = a.{core::String::length}{core::int*};
+  field core::Map<core::String, (core::String) → Null> map = <core::String, (core::String) → Null>{"foo": (core::String a) → Null {
+    core::int c = a.{core::String::length}{core::int};
   }};
-  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 {}
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect
index 4e6b1e4..8b46298 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Map<core::String*, (core::String*) →* Null>* map = <core::String*, (core::String*) →* Null>{"foo": (core::String* a) → Null {
-    core::int* c = a.{core::String::length}{core::int*};
+  field core::Map<core::String, (core::String) → Null> map = <core::String, (core::String) → Null>{"foo": (core::String a) → Null {
+    core::int c = a.{core::String::length}{core::int};
   }};
-  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 {}
diff --git a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.outline.expect
index 5e88de7..aef3cdf 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.outline.expect
@@ -1,21 +1,11 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Map<core::String*, (core::String*) →* Null>* map;
-  synthetic constructor •() → self::Class*
+  field core::Map<core::String, (core::String) → Null> map;
+  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/infer_map_literal_with_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect
index 4e6b1e4..8b46298 100644
--- a/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/infer_map_literal_with_closure.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::Map<core::String*, (core::String*) →* Null>* map = <core::String*, (core::String*) →* Null>{"foo": (core::String* a) → Null {
-    core::int* c = a.{core::String::length}{core::int*};
+  field core::Map<core::String, (core::String) → Null> map = <core::String, (core::String) → Null>{"foo": (core::String a) → Null {
+    core::int c = a.{core::String::length}{core::int};
   }};
-  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 {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart b/pkg/front_end/testcases/general/inferred_void.dart
new file mode 100644
index 0000000..5a39d07
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.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.
+
+void method() {}
+
+void v1 = method();
+var v2 = method();
+List<void> l1 = [method()];
+var l2 = [method()];
+
+test(Iterable<void> iterable, Stream<void> stream) async {
+  void v1 = method();
+  var v2 = method();
+  for (var v3 in iterable) {}
+  for (void v4 in iterable) {}
+  await for (var v5 in stream) {}
+  await for (void v6 in stream) {}
+  List<void> l1 = [method()];
+  var l2 = [method()];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.textual_outline.expect b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline.expect
new file mode 100644
index 0000000..258ee94
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+void method() {}
+void v1 = method();
+var v2 = method();
+List<void> l1 = [method()];
+var l2 = [method()];
+test(Iterable<void> iterable, Stream<void> stream) async {}
+main() {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f8f634b
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+List<void> l1 = [method()];
+main() {}
+test(Iterable<void> iterable, Stream<void> stream) async {}
+var l2 = [method()];
+var v2 = method();
+void method() {}
+void v1 = method();
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
new file mode 100644
index 0000000..c8d8b7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field void v1 = self::method();
+static field void v2 = self::method();
+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 {
+  void v1 = self::method();
+  void v2 = self::method();
+  for (void v3 in iterable) {
+  }
+  for (void v4 in iterable) {
+  }
+  await for (void v5 in stream) {
+  }
+  await for (void v6 in stream) {
+  }
+  core::List<void> l1 = <void>[self::method()];
+  core::List<void> l2 = <void>[self::method()];
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..c8d8b7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field void v1 = self::method();
+static field void v2 = self::method();
+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 {
+  void v1 = self::method();
+  void v2 = self::method();
+  for (void v3 in iterable) {
+  }
+  for (void v4 in iterable) {
+  }
+  await for (void v5 in stream) {
+  }
+  await for (void v6 in stream) {
+  }
+  core::List<void> l1 = <void>[self::method()];
+  core::List<void> l2 = <void>[self::method()];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.outline.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.outline.expect
new file mode 100644
index 0000000..c0d467d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field void v1;
+static field void v2;
+static field core::List<void> l1;
+static field core::List<void> l2;
+static method method() → void
+  ;
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async 
+  ;
+static method main() → dynamic
+  ;
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
new file mode 100644
index 0000000..dc58e3d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
@@ -0,0 +1,101 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+static field void v1 = self::method();
+static field void v2 = self::method();
+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 */ {
+  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 :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  dynamic :exception0;
+  dynamic :stack_trace0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L1:
+      {
+        void v1 = self::method();
+        void v2 = self::method();
+        {
+          core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
+          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+            void v3 = :sync-for-iterator.{core::Iterator::current}{void};
+            {}
+          }
+        }
+        {
+          core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
+          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+            void v4 = :sync-for-iterator.{core::Iterator::current}{void};
+            {}
+          }
+        }
+        {
+          asy::Stream<void> :stream = stream;
+          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+          try
+            #L2:
+            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)) {
+                void v5 = :for-iterator.{asy::_StreamIterator::current}{void};
+                {}
+              }
+              else
+                break #L2;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == 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;
+            }
+        }
+        {
+          asy::Stream<void> :stream = stream;
+          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+          try
+            #L3:
+            while (true) {
+              dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t5 = 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)) {
+                void v6 = :for-iterator.{asy::_StreamIterator::current}{void};
+                {}
+              }
+              else
+                break #L3;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
+              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
+        core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
+      }
+      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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart b/pkg/front_end/testcases/general/inherit_function.dart
index 304fef7..c670d37 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart
+++ b/pkg/front_end/testcases/general/inherit_function.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 implements Function {}
 
 class B extends Function {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.textual_outline.expect b/pkg/front_end/testcases/general/inherit_function.dart.textual_outline.expect
index a8cacf7..a94f799 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/inherit_function.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A implements Function {}
 
 class B extends Function {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/inherit_function.dart.textual_outline_modelled.expect
index a8cacf7..a94f799 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/inherit_function.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A implements Function {}
 
 class B extends Function {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.weak.expect b/pkg/front_end/testcases/general/inherit_function.dart.weak.expect
index 8b7e846..78da835 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general/inherit_function.dart.weak.expect
@@ -1,70 +1,30 @@
-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
 }
 abstract class _C&Object&Function extends core::Object {
-  synthetic constructor •() → self::_C&Object&Function*
+  synthetic constructor •() → self::_C&Object&Function
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Function {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&Function::•()
     ;
 }
 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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect b/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect
index 8b7e846..78da835 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/inherit_function.dart.weak.modular.expect
@@ -1,70 +1,30 @@
-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
 }
 abstract class _C&Object&Function extends core::Object {
-  synthetic constructor •() → self::_C&Object&Function*
+  synthetic constructor •() → self::_C&Object&Function
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Function {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&Function::•()
     ;
 }
 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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.weak.outline.expect b/pkg/front_end/testcases/general/inherit_function.dart.weak.outline.expect
index c72958b..9c3ae75 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/inherit_function.dart.weak.outline.expect
@@ -1,66 +1,26 @@
-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
 }
 abstract class _C&Object&Function extends core::Object {
-  synthetic constructor •() → self::_C&Object&Function*
+  synthetic constructor •() → self::_C&Object&Function
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Function {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
 }
 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
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general/inherit_function.dart.weak.transformed.expect
index 8b7e846..78da835 100644
--- a/pkg/front_end/testcases/general/inherit_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/inherit_function.dart.weak.transformed.expect
@@ -1,70 +1,30 @@
-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
 }
 abstract class _C&Object&Function extends core::Object {
-  synthetic constructor •() → self::_C&Object&Function*
+  synthetic constructor •() → self::_C&Object&Function
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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&Function {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::_C&Object&Function::•()
     ;
 }
 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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/initialzation_errors.dart b/pkg/front_end/testcases/general/initialzation_errors.dart
index bce2468..0b399c2 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart
+++ b/pkg/front_end/testcases/general/initialzation_errors.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 {
   int x;
   A()
diff --git a/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline.expect
index c2ae57e..f1eb7f2 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   int x;
   A()
diff --git a/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline_modelled.expect
index 6db4109..f09d803 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A()
       : this.x = 41,
diff --git a/pkg/front_end/testcases/general/initialzation_errors.dart.weak.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.expect
index fc29ac4..f69f20c 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -101,97 +101,57 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  constructor •() → self::A*
+  field core::int x;
+  constructor •() → self::A
     : self::A::x = 41, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  final field core::int* x;
-  constructor •() → self::B*
+  final field core::int x;
+  constructor •() → self::B
     : self::B::x = 41, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  final field core::int* x = 2;
-  constructor •() → self::C*
+  final field core::int x = 2;
+  constructor •() → self::C
     : final dynamic #t3 = throw new core::_DuplicatedFieldInitializerError::•("x"), final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •() → self::D*
+  final field core::int x;
+  final field core::int y;
+  constructor •() → self::D
     : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 41,
                ^", final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
         this.y = 42 {}
                ^", this self::D::named() {}
-  constructor named() → self::D*
+  constructor named() → self::D
     : self::D::x = 41, self::D::y = 42, super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  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
     : final dynamic #t7 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1,
                ^", final dynamic #t8 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2 {}
                ^", this self::E::named() {}
-  constructor named() → self::E*
+  constructor named() → self::E
     : self::E::x = 41, self::E::y = 42, super core::Object::•() {}
-  constructor named2() → self::E*
+  constructor named2() → self::E
     : final dynamic #t9 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 1,
                ^", final dynamic #t10 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2;
                ^", this self::E::named()
     ;
-  constructor named3() → self::E*
+  constructor named3() → self::E
     : final dynamic #t11 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
       : super(),
         ^^^^^", final dynamic #t12 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
@@ -200,122 +160,62 @@
         this.y = 2;
                ^", super core::Object::•()
     ;
-  constructor named4() → self::E*
+  constructor named4() → self::E
     : final dynamic #t14 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 1,
                ^", final dynamic #t15 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2,
                ^", this self::E::named()
     ;
-  constructor named5() → self::E*
+  constructor named5() → self::E
     : final dynamic #t16 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
       : assert(true),
         ^^^^^^", this self::E::named()
     ;
-  constructor named6() → self::E*
+  constructor named6() → self::E
     : final dynamic #t17 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
         assert(true);
         ^^^^^^", this self::E::named()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  constructor •() → self::F*
+  constructor •() → self::F
     : final dynamic #t18 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
         super() {}
         ^^^^^", this self::F::named() {}
-  constructor named() → self::F*
+  constructor named() → 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
 }
 class G extends core::Object {
-  constructor •() → self::G*
+  constructor •() → self::G
     : final dynamic #t19 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
       : super(),
         ^^^^^", final dynamic #t20 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
         super() {}
         ^^^^^", super core::Object::•() {}
-  constructor named() → self::G*
+  constructor named() → self::G
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 extends core::Object {
-  constructor •() → self::H*
+  constructor •() → self::H
     : final dynamic #t21 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
         this.named();
              ^", this self::H::named()
     ;
-  constructor named() → self::H*
+  constructor named() → self::H
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  constructor •() → self::I*
+  constructor •() → self::I
     : final dynamic #t22 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
         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 J extends core::Object {
-  field core::int* x;
-  constructor •() → self::J*
+  field core::int x;
+  constructor •() → self::J
     : final dynamic #t23 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/initialzation_errors.dart.weak.modular.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.modular.expect
index fc29ac4..f69f20c 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -101,97 +101,57 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  constructor •() → self::A*
+  field core::int x;
+  constructor •() → self::A
     : self::A::x = 41, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  final field core::int* x;
-  constructor •() → self::B*
+  final field core::int x;
+  constructor •() → self::B
     : self::B::x = 41, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  final field core::int* x = 2;
-  constructor •() → self::C*
+  final field core::int x = 2;
+  constructor •() → self::C
     : final dynamic #t3 = throw new core::_DuplicatedFieldInitializerError::•("x"), final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •() → self::D*
+  final field core::int x;
+  final field core::int y;
+  constructor •() → self::D
     : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 41,
                ^", final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
         this.y = 42 {}
                ^", this self::D::named() {}
-  constructor named() → self::D*
+  constructor named() → self::D
     : self::D::x = 41, self::D::y = 42, super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  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
     : final dynamic #t7 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1,
                ^", final dynamic #t8 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2 {}
                ^", this self::E::named() {}
-  constructor named() → self::E*
+  constructor named() → self::E
     : self::E::x = 41, self::E::y = 42, super core::Object::•() {}
-  constructor named2() → self::E*
+  constructor named2() → self::E
     : final dynamic #t9 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 1,
                ^", final dynamic #t10 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2;
                ^", this self::E::named()
     ;
-  constructor named3() → self::E*
+  constructor named3() → self::E
     : final dynamic #t11 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
       : super(),
         ^^^^^", final dynamic #t12 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
@@ -200,122 +160,62 @@
         this.y = 2;
                ^", super core::Object::•()
     ;
-  constructor named4() → self::E*
+  constructor named4() → self::E
     : final dynamic #t14 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 1,
                ^", final dynamic #t15 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2,
                ^", this self::E::named()
     ;
-  constructor named5() → self::E*
+  constructor named5() → self::E
     : final dynamic #t16 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
       : assert(true),
         ^^^^^^", this self::E::named()
     ;
-  constructor named6() → self::E*
+  constructor named6() → self::E
     : final dynamic #t17 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
         assert(true);
         ^^^^^^", this self::E::named()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  constructor •() → self::F*
+  constructor •() → self::F
     : final dynamic #t18 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
         super() {}
         ^^^^^", this self::F::named() {}
-  constructor named() → self::F*
+  constructor named() → 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
 }
 class G extends core::Object {
-  constructor •() → self::G*
+  constructor •() → self::G
     : final dynamic #t19 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
       : super(),
         ^^^^^", final dynamic #t20 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
         super() {}
         ^^^^^", super core::Object::•() {}
-  constructor named() → self::G*
+  constructor named() → self::G
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 extends core::Object {
-  constructor •() → self::H*
+  constructor •() → self::H
     : final dynamic #t21 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
         this.named();
              ^", this self::H::named()
     ;
-  constructor named() → self::H*
+  constructor named() → self::H
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  constructor •() → self::I*
+  constructor •() → self::I
     : final dynamic #t22 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
         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 J extends core::Object {
-  field core::int* x;
-  constructor •() → self::J*
+  field core::int x;
+  constructor •() → self::J
     : final dynamic #t23 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/initialzation_errors.dart.weak.outline.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.outline.expect
index df79178..abcfcc2 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.outline.expect
@@ -1,174 +1,74 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  constructor •() → self::A*
+  field core::int x;
+  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 {
-  final field core::int* x;
-  constructor •() → self::B*
+  final field core::int x;
+  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 C extends core::Object {
-  final field core::int* x;
-  constructor •() → self::C*
+  final field core::int x;
+  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
 }
 class D extends core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •() → self::D*
+  final field core::int x;
+  final field core::int y;
+  constructor •() → self::D
     ;
-  constructor named() → self::D*
+  constructor named() → 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 {
-  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
     ;
-  constructor named2() → self::E*
+  constructor named2() → self::E
     ;
-  constructor named3() → self::E*
+  constructor named3() → self::E
     ;
-  constructor named4() → self::E*
+  constructor named4() → self::E
     ;
-  constructor named5() → self::E*
+  constructor named5() → self::E
     ;
-  constructor named6() → self::E*
+  constructor named6() → 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
 }
 class F extends core::Object {
-  constructor •() → self::F*
+  constructor •() → self::F
     ;
-  constructor named() → self::F*
+  constructor named() → 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
 }
 class G extends core::Object {
-  constructor •() → self::G*
+  constructor •() → self::G
     ;
-  constructor named() → self::G*
+  constructor named() → self::G
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 extends core::Object {
-  constructor •() → self::H*
+  constructor •() → self::H
     ;
-  constructor named() → self::H*
+  constructor named() → self::H
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  constructor •() → self::I*
+  constructor •() → self::I
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class J extends core::Object {
-  field core::int* x;
-  constructor •() → self::J*
+  field core::int x;
+  constructor •() → self::J
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/initialzation_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.transformed.expect
index fc29ac4..f69f20c 100644
--- a/pkg/front_end/testcases/general/initialzation_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/initialzation_errors.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -101,97 +101,57 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* x;
-  constructor •() → self::A*
+  field core::int x;
+  constructor •() → self::A
     : self::A::x = 41, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:9:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  final field core::int* x;
-  constructor •() → self::B*
+  final field core::int x;
+  constructor •() → self::B
     : self::B::x = 41, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:16:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  final field core::int* x = 2;
-  constructor •() → self::C*
+  final field core::int x = 2;
+  constructor •() → self::C
     : final dynamic #t3 = throw new core::_DuplicatedFieldInitializerError::•("x"), final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:23:16: Error: 'x' was already initialized by this constructor.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 core::Object {
-  final field core::int* x;
-  final field core::int* y;
-  constructor •() → self::D*
+  final field core::int x;
+  final field core::int y;
+  constructor •() → self::D
     : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:30:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 41,
                ^", final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:32:16: Error: A redirecting constructor can't have other initializers.
         this.y = 42 {}
                ^", this self::D::named() {}
-  constructor named() → self::D*
+  constructor named() → self::D
     : self::D::x = 41, self::D::y = 42, super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  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
     : final dynamic #t7 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:43:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1,
                ^", final dynamic #t8 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:44:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2 {}
                ^", this self::E::named() {}
-  constructor named() → self::E*
+  constructor named() → self::E
     : self::E::x = 41, self::E::y = 42, super core::Object::•() {}
-  constructor named2() → self::E*
+  constructor named2() → self::E
     : final dynamic #t9 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:49:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 1,
                ^", final dynamic #t10 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:51:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2;
                ^", this self::E::named()
     ;
-  constructor named3() → self::E*
+  constructor named3() → self::E
     : final dynamic #t11 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:53:9: Error: A redirecting constructor can't have a 'super' initializer.
       : super(),
         ^^^^^", final dynamic #t12 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:55:16: Error: Can't have initializers after 'super'.
@@ -200,122 +160,62 @@
         this.y = 2;
                ^", super core::Object::•()
     ;
-  constructor named4() → self::E*
+  constructor named4() → self::E
     : final dynamic #t14 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:58:16: Error: A redirecting constructor can't have other initializers.
       : this.x = 1,
                ^", final dynamic #t15 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:59:16: Error: A redirecting constructor can't have other initializers.
         this.y = 2,
                ^", this self::E::named()
     ;
-  constructor named5() → self::E*
+  constructor named5() → self::E
     : final dynamic #t16 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:62:9: Error: A redirecting constructor can't have other initializers.
       : assert(true),
         ^^^^^^", this self::E::named()
     ;
-  constructor named6() → self::E*
+  constructor named6() → self::E
     : final dynamic #t17 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:66:9: Error: A redirecting constructor can't have other initializers.
         assert(true);
         ^^^^^^", this self::E::named()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class F extends core::Object {
-  constructor •() → self::F*
+  constructor •() → self::F
     : final dynamic #t18 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:72:9: Error: A redirecting constructor can't have a 'super' initializer.
         super() {}
         ^^^^^", this self::F::named() {}
-  constructor named() → self::F*
+  constructor named() → 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
 }
 class G extends core::Object {
-  constructor •() → self::G*
+  constructor •() → self::G
     : final dynamic #t19 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:78:9: Error: A redirecting constructor can't have a 'super' initializer.
       : super(),
         ^^^^^", final dynamic #t20 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:80:9: Error: Can't have more than one 'super' initializer.
         super() {}
         ^^^^^", super core::Object::•() {}
-  constructor named() → self::G*
+  constructor named() → self::G
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 extends core::Object {
-  constructor •() → self::H*
+  constructor •() → self::H
     : final dynamic #t21 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:87:14: Error: A redirecting constructor can't have more than one redirection.
         this.named();
              ^", this self::H::named()
     ;
-  constructor named() → self::H*
+  constructor named() → self::H
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class I extends core::Object {
-  constructor •() → self::I*
+  constructor •() → self::I
     : final dynamic #t22 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:94:9: Error: Can't have more than one 'super' initializer.
         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 J extends core::Object {
-  field core::int* x;
-  constructor •() → self::J*
+  field core::int x;
+  constructor •() → self::J
     : final dynamic #t23 = invalid-expression "pkg/front_end/testcases/general/initialzation_errors.dart:101:16: Error: Can't have initializers after 'super'.
         this.x = 42 {}
                ^", super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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/instance_setter_conflict.dart b/pkg/front_end/testcases/general/instance_setter_conflict.dart
index 6f8c3b7..3e73f8c 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart
@@ -1,13 +1,13 @@
 // 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 {
-  int v;
+  int v = 0;
 }
 
 class C extends A {
-  static int n;
+  static int n = 0;
   static get v {
     return n;
   }
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline.expect
index fc33054..0e5727f 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class A {
-  int v;
+  int v = 0;
 }
 
 class C extends A {
-  static int n;
+  static int n = 0;
   static get v {}
 }
 
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline_modelled.expect
index c636e4b..751cedf 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.textual_outline_modelled.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 class A {
-  int v;
+  int v = 0;
 }
 
 class C extends A {
   static get v {}
-  static int n;
+  static int n = 0;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.expect
index 22c9052..a4756f2 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,31 +6,21 @@
 //   static get v {
 //              ^
 // pkg/front_end/testcases/general/instance_setter_conflict.dart:6:7: Context: This is the inherited member.
-//   int v;
+//   int v = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v = null;
-  synthetic constructor •() → self::A*
+  field core::int v = 0;
+  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 C extends self::A {
-  static field core::int* n = null;
-  synthetic constructor •() → self::C*
+  static field core::int n = 0;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
   static get v() → dynamic {
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect
index 22c9052..a4756f2 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,31 +6,21 @@
 //   static get v {
 //              ^
 // pkg/front_end/testcases/general/instance_setter_conflict.dart:6:7: Context: This is the inherited member.
-//   int v;
+//   int v = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v = null;
-  synthetic constructor •() → self::A*
+  field core::int v = 0;
+  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 C extends self::A {
-  static field core::int* n = null;
-  synthetic constructor •() → self::C*
+  static field core::int n = 0;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
   static get v() → dynamic {
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.outline.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.outline.expect
index 2af2802..a54d191 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,30 +6,20 @@
 //   static get v {
 //              ^
 // pkg/front_end/testcases/general/instance_setter_conflict.dart:6:7: Context: This is the inherited member.
-//   int v;
+//   int v = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v;
-  synthetic constructor •() → self::A*
+  field core::int v;
+  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 C extends self::A {
-  static field core::int* n;
-  synthetic constructor •() → self::C*
+  static field core::int n;
+  synthetic constructor •() → self::C
     ;
   static get v() → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.transformed.expect
index 22c9052..a4756f2 100644
--- a/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/instance_setter_conflict.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -6,31 +6,21 @@
 //   static get v {
 //              ^
 // pkg/front_end/testcases/general/instance_setter_conflict.dart:6:7: Context: This is the inherited member.
-//   int v;
+//   int v = 0;
 //       ^
 //
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  field core::int* v = null;
-  synthetic constructor •() → self::A*
+  field core::int v = 0;
+  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 C extends self::A {
-  static field core::int* n = null;
-  synthetic constructor •() → self::C*
+  static field core::int n = 0;
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
   static get v() → dynamic {
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart b/pkg/front_end/testcases/general/instantiate_enum/main.dart
new file mode 100644
index 0000000..85515b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.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 'main_lib.dart';
+
+enum Enum1 { a, b, c }
+
+typedef Alias1 = Enum1;
+
+test() {
+  Enum1(123, 'foo');
+  Enum2(123, 'foo');
+  Alias1(123, 'foo');
+  Alias2(123, 'foo');
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
new file mode 100644
index 0000000..f5cfa60
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+enum Enum1 { a, b, c }
+
+typedef Alias1 = Enum1;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5082198
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+enum Enum1 { a, b, c }
+
+main() {}
+test() {}
+typedef Alias1 = Enum1;
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.expect
new file mode 100644
index 0000000..2976547
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+//   Enum1(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+//   Enum2(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+//   Alias1(123, 'foo');
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+//   Alias2(123, 'foo');
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = #C10;
+  static const field self::Enum1 a = #C3;
+  static const field self::Enum1 b = #C6;
+  static const field self::Enum1 c = #C9;
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+  Enum1(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+  Enum2(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+  Alias1(123, 'foo');
+  ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+  Alias2(123, 'foo');
+  ^^^^^^";
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef Alias2 = self2::Enum2;
+class Enum2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self2::Enum2> values = #C14;
+  static const field self2::Enum2 a = #C11;
+  static const field self2::Enum2 b = #C12;
+  static const field self2::Enum2 c = #C13;
+  const constructor •(core::int index, core::String name) → self2::Enum2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum1 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self::Enum1 {index:#C7, _name:#C8}
+  #C10 = <self::Enum1*>[#C3, #C6, #C9]
+  #C11 = self2::Enum2 {index:#C1, _name:#C2}
+  #C12 = self2::Enum2 {index:#C4, _name:#C5}
+  #C13 = self2::Enum2 {index:#C7, _name:#C8}
+  #C14 = <self2::Enum2*>[#C11, #C12, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main_lib.dart:
+- Enum2. (from org-dartlang-testcase:///main_lib.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)
+
+org-dartlang-testcase:///main.dart:
+- Enum1. (from org-dartlang-testcase:///main.dart:7: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/general/instantiate_enum/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.modular.expect
new file mode 100644
index 0000000..8b09079
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+//   Enum1(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+//   Enum2(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+//   Alias1(123, 'foo');
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+//   Alias2(123, 'foo');
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = #C10;
+  static const field self::Enum1 a = #C3;
+  static const field self::Enum1 b = #C6;
+  static const field self::Enum1 c = #C9;
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+  Enum1(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+  Enum2(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+  Alias1(123, 'foo');
+  ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+  Alias2(123, 'foo');
+  ^^^^^^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum1 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self::Enum1 {index:#C7, _name:#C8}
+  #C10 = <self::Enum1*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Enum1. (from org-dartlang-testcase:///main.dart:7: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/general/instantiate_enum/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.outline.expect
new file mode 100644
index 0000000..cc966f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.outline.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = const <self::Enum1>[self::Enum1::a, self::Enum1::b, self::Enum1::c];
+  static const field self::Enum1 a = const self::Enum1::•(0, "a");
+  static const field self::Enum1 b = const self::Enum1::•(1, "b");
+  static const field self::Enum1 c = const self::Enum1::•(2, "c");
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef Alias2 = self2::Enum2;
+class Enum2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self2::Enum2> values = #C10;
+  static const field self2::Enum2 a = #C3;
+  static const field self2::Enum2 b = #C6;
+  static const field self2::Enum2 c = #C9;
+  const constructor •(core::int index, core::String name) → self2::Enum2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self2::Enum2 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self2::Enum2 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self2::Enum2 {index:#C7, _name:#C8}
+  #C10 = <self2::Enum2*>[#C3, #C6, #C9]
+}
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:7:6 -> ListConstant(const <Enum1*>[const Enum1{_Enum.index: 0, _Enum._name: "a"}, const Enum1{_Enum.index: 1, _Enum._name: "b"}, const Enum1{_Enum.index: 2, _Enum._name: "c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:14 -> InstanceConstant(const Enum1{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:17 -> InstanceConstant(const Enum1{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:20 -> InstanceConstant(const Enum1{_Enum.index: 2, _Enum._name: "c"})
+Extra constant evaluation: evaluated: 14, effectively constant: 4
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main_lib.dart:
+- Enum2. (from org-dartlang-testcase:///main_lib.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/general/instantiate_enum/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..2976547
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.transformed.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+//   Enum1(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+//   Enum2(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+//   Alias1(123, 'foo');
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+//   Alias2(123, 'foo');
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = #C10;
+  static const field self::Enum1 a = #C3;
+  static const field self::Enum1 b = #C6;
+  static const field self::Enum1 c = #C9;
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+  Enum1(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+  Enum2(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+  Alias1(123, 'foo');
+  ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+  Alias2(123, 'foo');
+  ^^^^^^";
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef Alias2 = self2::Enum2;
+class Enum2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self2::Enum2> values = #C14;
+  static const field self2::Enum2 a = #C11;
+  static const field self2::Enum2 b = #C12;
+  static const field self2::Enum2 c = #C13;
+  const constructor •(core::int index, core::String name) → self2::Enum2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum1 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self::Enum1 {index:#C7, _name:#C8}
+  #C10 = <self::Enum1*>[#C3, #C6, #C9]
+  #C11 = self2::Enum2 {index:#C1, _name:#C2}
+  #C12 = self2::Enum2 {index:#C4, _name:#C5}
+  #C13 = self2::Enum2 {index:#C7, _name:#C8}
+  #C14 = <self2::Enum2*>[#C11, #C12, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main_lib.dart:
+- Enum2. (from org-dartlang-testcase:///main_lib.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)
+
+org-dartlang-testcase:///main.dart:
+- Enum1. (from org-dartlang-testcase:///main.dart:7: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/general/instantiate_enum/main_lib.dart b/pkg/front_end/testcases/general/instantiate_enum/main_lib.dart
new file mode 100644
index 0000000..f59f17d
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main_lib.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.
+
+enum Enum2 { a, b, c }
+
+typedef Alias2 = Enum2;
diff --git a/pkg/front_end/testcases/general/instantiate_enum/test.options b/pkg/front_end/testcases/general/instantiate_enum/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart b/pkg/front_end/testcases/general/interface_conflict.dart
index 293f540..d7ea60a 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart
+++ b/pkg/front_end/testcases/general/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 A {
   int get n => 1;
 }
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline.expect b/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline.expect
index 0bbb31c..669b460 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   int get n => 1;
 }
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline_modelled.expect
index 692b067..d216e6b 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 abstract class C implements A, B {}
 
 abstract class D implements C {}
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.weak.expect b/pkg/front_end/testcases/general/interface_conflict.dart.weak.expect
index 35d40fb..974f286 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,67 +17,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : 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 B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : 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 C extends core::Object implements self::A, self::B {
-  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
 }
 abstract class D extends core::Object implements self::C {
-  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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect
index 35d40fb..974f286 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,67 +17,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : 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 B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : 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 C extends core::Object implements self::A, self::B {
-  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
 }
 abstract class D extends core::Object implements self::C {
-  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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.weak.outline.expect b/pkg/front_end/testcases/general/interface_conflict.dart.weak.outline.expect
index ec8f574..897f364 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,64 +17,24 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  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 B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  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 C extends core::Object implements self::A, self::B {
-  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
 }
 abstract class D extends core::Object implements self::C {
-  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
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/general/interface_conflict.dart.weak.transformed.expect
index 35d40fb..974f286 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,67 +17,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : 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 B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : 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 C extends core::Object implements self::A, self::B {
-  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
 }
 abstract class D extends core::Object implements self::C {
-  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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart
index bade1db..0b56d76 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart
@@ -1,13 +1,13 @@
 // 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;
 
 typedef void F<T>(T t);
 
 class B<T> {
-  T f(int x) {}
+  T f(int x) => throw '';
 }
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline.expect
index fbefbcd..78d981f 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T t);
 
 class B<T> {
-  T f(int x) {}
+  T f(int x) => throw '';
 }
 
 abstract class I<T> {
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline_modelled.expect
index 2f50692..c4e80fb 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> extends B<F<T>> implements I<F<T>> {}
@@ -8,7 +7,7 @@
 }
 
 class B<T> {
-  T f(int x) {}
+  T f(int x) => throw '';
 }
 
 typedef void F<T>(T t);
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.expect
index a99ce5f..d29405a 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,52 +13,23 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(core::int* x) → 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
+  method f(core::int x) → self::B::T%
+    return throw "";
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(core::Object* x) → self::I::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 method f(core::Object x) → self::I::T%;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect
index a99ce5f..d29405a 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,52 +13,23 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(core::int* x) → 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
+  method f(core::int x) → self::B::T%
+    return throw "";
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(core::Object* x) → self::I::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 method f(core::Object x) → self::I::T%;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.outline.expect
index 515609c..c2c5263 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,51 +13,21 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  method f(core::int* x) → self::B::T*
+  method f(core::int x) → 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
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f(core::Object* x) → self::I::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 method f(core::Object x) → self::I::T%;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void
   ;
diff --git a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.transformed.expect
index a99ce5f..d29405a 100644
--- a/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_contravariant_from_class.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,52 +13,23 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f(core::int* x) → 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
+  method f(core::int x) → self::B::T%
+    return throw "";
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f(core::Object* x) → self::I::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 method f(core::Object x) → self::I::T%;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart
index 6dab5b4..a06fc2d 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.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;
 
 typedef void F<T>(T t);
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline.expect
index 1ca533d..aec0365 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T t);
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline_modelled.expect
index 50b8be8..033ea81 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class C<T> extends B<F<T>> implements I<F<T>> {}
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.expect
index 5ba8fab..f3f69c6 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,52 +13,22 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f((self::B::T*) →* void 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
+  method f((self::B::T%) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect
index 5ba8fab..f3f69c6 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,52 +13,22 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f((self::B::T*) →* void 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
+  method f((self::B::T%) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.outline.expect
index ede6a1c..4a01bdf 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,51 +13,21 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  method f((self::B::T*) →* void x, core::int* y) → void
+  method f((self::B::T%) → void 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 class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void
   ;
diff --git a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.transformed.expect
index 5ba8fab..f3f69c6 100644
--- a/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_covariantImpl_from_class.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -13,52 +13,22 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f((self::B::T*) →* void 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
+  method f((self::B::T%) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart
index 683cfe7..010f354 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.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;
 
 typedef void F<T>(T t);
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline.expect
index e744f1a..203e8cd 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 typedef void F<T>(T t);
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline_modelled.expect
index 6b99ccf..4615ebb 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 library test;
 
 abstract class A<T> {
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect
index 68f6ac0..df45e52 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,68 +21,28 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::A::T* 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 f(covariant-by-class self::A::T% x, core::int y) → void;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f((self::B::T*) →* void 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
+  method f((self::B::T%) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect
index 68f6ac0..df45e52 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,68 +21,28 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::A::T* 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 f(covariant-by-class self::A::T% x, core::int y) → void;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f((self::B::T*) →* void 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
+  method f((self::B::T%) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect
index 014249d..fd83756 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,66 +21,26 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract method f(covariant-by-class self::A::T* 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 f(covariant-by-class self::A::T% x, core::int y) → void;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     ;
-  method f((self::B::T*) →* void x, core::int* y) → void
+  method f((self::B::T%) → void 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 class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void
   ;
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect
index 68f6ac0..df45e52 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library test;
+library test /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -21,68 +21,28 @@
 import self as self;
 import "dart:core" as core;
 
-typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
-abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+typedef F<contravariant T extends core::Object? = dynamic> = (T%) → void;
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract method f(covariant-by-class self::A::T* 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 f(covariant-by-class self::A::T% x, core::int y) → void;
 }
-class B<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B<self::B::T*>*
+class B<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
-  method f((self::B::T*) →* void 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
+  method f((self::B::T%) → void x, core::int y) → void {}
 }
-abstract class I<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::I<self::I::T*>*
+abstract class I<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::I<self::I::T%>
     : super core::Object::•()
     ;
-  abstract method f((self::I::T*) →* void 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 method f((self::I::T%) → void x, core::Object y) → void;
 }
-abstract class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+abstract 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() → void {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart b/pkg/front_end/testcases/general/invalid_assignment.dart
index 99e06a4..bc1c1de 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart
@@ -1,15 +1,17 @@
 // 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 {
   String operator +(int i) => '';
 }
 
-test(int i, String s, A a) {
+test(int? i, String s, A a) {
   i = 1;
   i = s;
+  i = null;
   i ??= 1;
+  i = null;
   i ??= s;
   a = new A();
   a += 1;
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline.expect
index 43c04b7..25b126d 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
   String operator +(int i) => '';
 }
 
-test(int i, String s, A a) {}
+test(int? i, String s, A a) {}
 main() {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline_modelled.expect
index 65777c9..bbdbbc1 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.textual_outline_modelled.expect
@@ -1,7 +1,6 @@
-// @dart = 2.9
 class A {
   String operator +(int i) => '';
 }
 
 main() {}
-test(int i, String s, A a) {}
+test(int? i, String s, A a) {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
index a16acb5..6ab192e 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.expect
@@ -1,16 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
 //   i = s;
 //       ^
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
 //   i ??= s;
 //         ^
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:17:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
 //   a += 1;
 //     ^
@@ -19,35 +19,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* i) → core::String*
+  operator +(core::int i) → core::String
     return "";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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(core::int* i, core::String* s, self::A* a) → dynamic {
+static method test(core::int? i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   i = s;
-      ^" in s as{TypeError} core::int*;
-  i == null ?{core::int*} i = 1 : null;
-  i == null ?{core::Object*} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      ^" in s as{TypeError,ForNonNullableByDefault} core::int?;
+  i = null;
+  i == null ?{core::int} i = 1 : null;
+  i = null;
+  i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   i ??= s;
-        ^" in s as{TypeError} core::int* : null;
+        ^" in s as{TypeError,ForNonNullableByDefault} core::int? : null;
   a = new self::A::•();
-  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:17:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
-    ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
+    ^" in a.{self::A::+}(1){(core::int) → core::String} as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect
index a16acb5..6ab192e 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.modular.expect
@@ -1,16 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
 //   i = s;
 //       ^
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
 //   i ??= s;
 //         ^
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:17:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
 //   a += 1;
 //     ^
@@ -19,35 +19,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* i) → core::String*
+  operator +(core::int i) → core::String
     return "";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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(core::int* i, core::String* s, self::A* a) → dynamic {
+static method test(core::int? i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   i = s;
-      ^" in s as{TypeError} core::int*;
-  i == null ?{core::int*} i = 1 : null;
-  i == null ?{core::Object*} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      ^" in s as{TypeError,ForNonNullableByDefault} core::int?;
+  i = null;
+  i == null ?{core::int} i = 1 : null;
+  i = null;
+  i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   i ??= s;
-        ^" in s as{TypeError} core::int* : null;
+        ^" in s as{TypeError,ForNonNullableByDefault} core::int? : null;
   a = new self::A::•();
-  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:17:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
-    ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
+    ^" in a.{self::A::+}(1){(core::int) → core::String} as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.outline.expect
index ed1296c..2eee9d0 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-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
     ;
-  operator +(core::int* i) → core::String*
+  operator +(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
 }
-static method test(core::int* i, core::String* s, self::A* a) → dynamic
+static method test(core::int? i, core::String s, self::A a) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
index a16acb5..6ab192e 100644
--- a/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_assignment.dart.weak.transformed.expect
@@ -1,16 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
 //   i = s;
 //       ^
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
 //   i ??= s;
 //         ^
 //
-// pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+// pkg/front_end/testcases/general/invalid_assignment.dart:17:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
 //   a += 1;
 //     ^
@@ -19,35 +19,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(core::int* i) → core::String*
+  operator +(core::int i) → core::String
     return "";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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(core::int* i, core::String* s, self::A* a) → dynamic {
+static method test(core::int? i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+  i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:11:7: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   i = s;
-      ^" in s as{TypeError} core::int*;
-  i == null ?{core::int*} i = 1 : null;
-  i == null ?{core::Object*} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:13:9: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
+      ^" in s as{TypeError,ForNonNullableByDefault} core::int?;
+  i = null;
+  i == null ?{core::int} i = 1 : null;
+  i = null;
+  i == null ?{core::Object} i = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:9: Error: A value of type 'String' can't be assigned to a variable of type 'int?'.
   i ??= s;
-        ^" in s as{TypeError} core::int* : null;
+        ^" in s as{TypeError,ForNonNullableByDefault} core::int? : null;
   a = new self::A::•();
-  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:15:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
+  a = invalid-expression "pkg/front_end/testcases/general/invalid_assignment.dart:17:5: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
  - 'A' is from 'pkg/front_end/testcases/general/invalid_assignment.dart'.
   a += 1;
-    ^" in a.{self::A::+}(1){(core::int*) →* core::String*} as{TypeError} self::A*;
+    ^" in a.{self::A::+}(1){(core::int) → core::String} as{TypeError,ForNonNullableByDefault} self::A;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart
new file mode 100644
index 0000000..ee67a15
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.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.
+
+Iterable takesNoArg() => throw '';
+void returnVoid() {}
+int returnInt() => 42;
+dynamic returnDynamic() => [];
+Object returnObject() => 0;
+
+test() {
+  for (var v in takesNoArg(0)) {}
+  for (var v in returnVoid()) {}
+  for (var v in returnInt()) {}
+  for (var v in returnDynamic()) {}
+  for (var v in returnObject()) {}
+  for (var v in throw '') {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.textual_outline.expect
new file mode 100644
index 0000000..5b4b96b
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+Iterable takesNoArg() => throw '';
+void returnVoid() {}
+int returnInt() => 42;
+dynamic returnDynamic() => [];
+Object returnObject() => 0;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4c81ae7
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+Iterable takesNoArg() => throw '';
+Object returnObject() => 0;
+dynamic returnDynamic() => [];
+int returnInt() => 42;
+main() {}
+test() {}
+void returnVoid() {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.expect
new file mode 100644
index 0000000..b7e3784
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:12:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   for (var v in takesNoArg(0)) {}
+//                           ^
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:5:10: Context: Found this candidate, but the arguments don't match.
+// Iterable takesNoArg() => throw '';
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:13:17: Error: This expression has type 'void' and can't be used.
+//   for (var v in returnVoid()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:14:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnInt()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:16:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnObject()) {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>
+  return throw "";
+static method returnVoid() → void {}
+static method returnInt() → core::int
+  return 42;
+static method returnDynamic() → dynamic
+  return <dynamic>[];
+static method returnObject() → core::Object
+  return 0;
+static method test() → dynamic {
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:12:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  for (var v in takesNoArg(0)) {}
+                          ^") {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:13:17: Error: This expression has type 'void' and can't be used.
+  for (var v in returnVoid()) {}
+                ^" in self::returnVoid()) {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:14:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnInt()) {}
+                ^" in self::returnInt() as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  for (dynamic v in self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:16:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnObject()) {}
+                ^" in self::returnObject() as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  for (dynamic v in throw "") {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.modular.expect
new file mode 100644
index 0000000..b7e3784
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:12:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   for (var v in takesNoArg(0)) {}
+//                           ^
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:5:10: Context: Found this candidate, but the arguments don't match.
+// Iterable takesNoArg() => throw '';
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:13:17: Error: This expression has type 'void' and can't be used.
+//   for (var v in returnVoid()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:14:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnInt()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:16:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnObject()) {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>
+  return throw "";
+static method returnVoid() → void {}
+static method returnInt() → core::int
+  return 42;
+static method returnDynamic() → dynamic
+  return <dynamic>[];
+static method returnObject() → core::Object
+  return 0;
+static method test() → dynamic {
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:12:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  for (var v in takesNoArg(0)) {}
+                          ^") {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:13:17: Error: This expression has type 'void' and can't be used.
+  for (var v in returnVoid()) {}
+                ^" in self::returnVoid()) {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:14:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnInt()) {}
+                ^" in self::returnInt() as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  for (dynamic v in self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  for (dynamic v in invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:16:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnObject()) {}
+                ^" in self::returnObject() as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+  }
+  for (dynamic v in throw "") {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.outline.expect
new file mode 100644
index 0000000..59e62c6
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>
+  ;
+static method returnVoid() → void
+  ;
+static method returnInt() → core::int
+  ;
+static method returnDynamic() → dynamic
+  ;
+static method returnObject() → core::Object
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.transformed.expect
new file mode 100644
index 0000000..500d59e
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_for_in_iterable2.dart.weak.transformed.expect
@@ -0,0 +1,96 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:12:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//   for (var v in takesNoArg(0)) {}
+//                           ^
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:5:10: Context: Found this candidate, but the arguments don't match.
+// Iterable takesNoArg() => throw '';
+//          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:13:17: Error: This expression has type 'void' and can't be used.
+//   for (var v in returnVoid()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:14:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnInt()) {}
+//                 ^
+//
+// pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:16:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+//  - 'Object' is from 'dart:core'.
+//  - 'Iterable' is from 'dart:core'.
+//   for (var v in returnObject()) {}
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+static method takesNoArg() → core::Iterable<dynamic>
+  return throw "";
+static method returnVoid() → void {}
+static method returnInt() → core::int
+  return 42;
+static method returnDynamic() → dynamic
+  return core::_GrowableList::•<dynamic>(0);
+static method returnObject() → core::Object
+  return 0;
+static method test() → dynamic {
+  {
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:12:27: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+  for (var v in takesNoArg(0)) {}
+                          ^".{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
+      {}
+    }
+  }
+  {
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:13:17: Error: This expression has type 'void' and can't be used.
+  for (var v in returnVoid()) {}
+                ^" in self::returnVoid().{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
+      {}
+    }
+  }
+  {
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:14:17: Error: The type 'int' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnInt()) {}
+                ^" in self::returnInt() as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
+      {}
+    }
+  }
+  {
+    core::Iterator<dynamic> :sync-for-iterator = (self::returnDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator}{core::Iterator<dynamic>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{dynamic};
+      {}
+    }
+  }
+  {
+    core::Iterator<Never> :sync-for-iterator = invalid-expression "pkg/front_end/testcases/general/invalid_for_in_iterable2.dart:16:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (var v in returnObject()) {}
+                ^" in self::returnObject() as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>.{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
+      {}
+    }
+  }
+  {
+    core::Iterator<Never> :sync-for-iterator = (throw "").{core::Iterable::iterator}{core::Iterator<Never>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      dynamic v = :sync-for-iterator.{core::Iterator::current}{Never};
+      {}
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart b/pkg/front_end/testcases/general/invalid_operator.dart
index 9a45ff1..0320b28 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart
+++ b/pkg/front_end/testcases/general/invalid_operator.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 Operators1 {
   operator ==() => true;
   operator <() => true;
@@ -46,7 +46,7 @@
 }
 
 class Operators3 {
-  operator ==([a]) => true;
+  operator ==([a = 0]) => true;
   operator <([a]) => true;
   operator >([a]) => true;
   operator <=([a]) => true;
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.textual_outline.expect
index 6ad61eb..8ab8ff73 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Operators1 {
   operator ==() => true;
   operator <() => true;
@@ -41,7 +40,7 @@
   operator ~(a, b) => true;
 }
 class Operators3 {
-  operator ==([a]) => true;
+  operator ==([a = 0]) => true;
   operator <([a]) => true;
   operator >([a]) => true;
   operator <=([a]) => true;
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.weak.expect b/pkg/front_end/testcases/general/invalid_operator.dart.weak.expect
index 1bababf..7efd9db 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -152,7 +152,7 @@
 //            ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:49:16: Error: An operator can't have optional parameters.
-//   operator ==([a]) => true;
+//   operator ==([a = 0]) => true;
 //                ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:50:15: Error: An operator can't have optional parameters.
@@ -600,10 +600,10 @@
 import "dart:core" as core;
 
 class Operators1 extends core::Object {
-  synthetic constructor •() → self::Operators1*
+  synthetic constructor •() → self::Operators1
     : super core::Object::•()
     ;
-  operator ==() → core::bool*
+  operator ==() → core::bool
     return true;
   operator <() → dynamic
     return true;
@@ -639,21 +639,12 @@
     return true;
   operator ~(dynamic a) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators2 extends core::Object {
-  synthetic constructor •() → self::Operators2*
+  synthetic constructor •() → self::Operators2
     : super core::Object::•()
     ;
-  operator ==(dynamic a, dynamic b) → core::bool*
+  operator ==(core::Object a, dynamic b) → core::bool
     return true;
   operator <(dynamic a, dynamic b) → dynamic
     return true;
@@ -691,278 +682,225 @@
     return true;
   operator ~(dynamic a, dynamic b) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators3 extends core::Object {
-  synthetic constructor •() → self::Operators3*
+  synthetic constructor •() → self::Operators3
     : super core::Object::•()
     ;
-  operator ==([dynamic a = #C1]) → core::bool*
+  operator ==([core::Object a = #C1]) → core::bool
     return true;
-  operator <([dynamic a = #C1]) → dynamic
+  operator <([dynamic a = #C2]) → dynamic
     return true;
-  operator >([dynamic a = #C1]) → dynamic
+  operator >([dynamic a = #C2]) → dynamic
     return true;
-  operator <=([dynamic a = #C1]) → dynamic
+  operator <=([dynamic a = #C2]) → dynamic
     return true;
-  operator >=([dynamic a = #C1]) → dynamic
+  operator >=([dynamic a = #C2]) → dynamic
     return true;
-  operator -([dynamic a = #C1]) → dynamic
+  operator -([dynamic a = #C2]) → dynamic
     return true;
-  operator +([dynamic a = #C1]) → dynamic
+  operator +([dynamic a = #C2]) → dynamic
     return true;
-  operator /([dynamic a = #C1]) → dynamic
+  operator /([dynamic a = #C2]) → dynamic
     return true;
-  operator ~/([dynamic a = #C1]) → dynamic
+  operator ~/([dynamic a = #C2]) → dynamic
     return true;
-  operator *([dynamic a = #C1]) → dynamic
+  operator *([dynamic a = #C2]) → dynamic
     return true;
-  operator %([dynamic a = #C1]) → dynamic
+  operator %([dynamic a = #C2]) → dynamic
     return true;
-  operator |([dynamic a = #C1]) → dynamic
+  operator |([dynamic a = #C2]) → dynamic
     return true;
-  operator ^([dynamic a = #C1]) → dynamic
+  operator ^([dynamic a = #C2]) → dynamic
     return true;
-  operator &([dynamic a = #C1]) → dynamic
+  operator &([dynamic a = #C2]) → dynamic
     return true;
-  operator <<([dynamic a = #C1]) → dynamic
+  operator <<([dynamic a = #C2]) → dynamic
     return true;
-  operator >>([dynamic a = #C1]) → dynamic
+  operator >>([dynamic a = #C2]) → dynamic
     return true;
-  operator []=([dynamic a = #C1, dynamic b = #C1]) → void
+  operator []=([dynamic a = #C2, dynamic b = #C2]) → void
     return true;
-  operator []([dynamic a = #C1]) → dynamic
+  operator []([dynamic a = #C2]) → dynamic
     return true;
-  operator ~([dynamic a = #C1]) → dynamic
+  operator ~([dynamic a = #C2]) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators4 extends core::Object {
-  synthetic constructor •() → self::Operators4*
+  synthetic constructor •() → self::Operators4
     : super core::Object::•()
     ;
-  operator ==({dynamic a = #C1}) → core::bool*
+  operator ==({dynamic a = #C2}) → core::bool
     return true;
-  operator <({dynamic a = #C1}) → dynamic
+  operator <({dynamic a = #C2}) → dynamic
     return true;
-  operator >({dynamic a = #C1}) → dynamic
+  operator >({dynamic a = #C2}) → dynamic
     return true;
-  operator <=({dynamic a = #C1}) → dynamic
+  operator <=({dynamic a = #C2}) → dynamic
     return true;
-  operator >=({dynamic a = #C1}) → dynamic
+  operator >=({dynamic a = #C2}) → dynamic
     return true;
-  operator -({dynamic a = #C1}) → dynamic
+  operator -({dynamic a = #C2}) → dynamic
     return true;
-  operator +({dynamic a = #C1}) → dynamic
+  operator +({dynamic a = #C2}) → dynamic
     return true;
-  operator /({dynamic a = #C1}) → dynamic
+  operator /({dynamic a = #C2}) → dynamic
     return true;
-  operator ~/({dynamic a = #C1}) → dynamic
+  operator ~/({dynamic a = #C2}) → dynamic
     return true;
-  operator *({dynamic a = #C1}) → dynamic
+  operator *({dynamic a = #C2}) → dynamic
     return true;
-  operator %({dynamic a = #C1}) → dynamic
+  operator %({dynamic a = #C2}) → dynamic
     return true;
-  operator |({dynamic a = #C1}) → dynamic
+  operator |({dynamic a = #C2}) → dynamic
     return true;
-  operator ^({dynamic a = #C1}) → dynamic
+  operator ^({dynamic a = #C2}) → dynamic
     return true;
-  operator &({dynamic a = #C1}) → dynamic
+  operator &({dynamic a = #C2}) → dynamic
     return true;
-  operator <<({dynamic a = #C1}) → dynamic
+  operator <<({dynamic a = #C2}) → dynamic
     return true;
-  operator >>({dynamic a = #C1}) → dynamic
+  operator >>({dynamic a = #C2}) → dynamic
     return true;
-  operator []=({dynamic a = #C1, dynamic b = #C1}) → void
+  operator []=({dynamic a = #C2, dynamic b = #C2}) → void
     return true;
-  operator []({dynamic a = #C1}) → dynamic
+  operator []({dynamic a = #C2}) → dynamic
     return true;
-  operator ~({dynamic a = #C1}) → dynamic
+  operator ~({dynamic a = #C2}) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators5 extends core::Object {
-  synthetic constructor •() → self::Operators5*
+  synthetic constructor •() → self::Operators5
     : super core::Object::•()
     ;
-  operator ==(dynamic a, [dynamic b = #C1]) → core::bool*
+  operator ==(core::Object a, [dynamic b = #C2]) → core::bool
     return true;
-  operator <(dynamic a, [dynamic b = #C1]) → dynamic
+  operator <(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator >(dynamic a, [dynamic b = #C1]) → dynamic
+  operator >(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator <=(dynamic a, [dynamic b = #C1]) → dynamic
+  operator <=(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator >=(dynamic a, [dynamic b = #C1]) → dynamic
+  operator >=(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator -(dynamic a, [dynamic b = #C1]) → dynamic
+  operator -(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator +(dynamic a, [dynamic b = #C1]) → dynamic
+  operator +(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator /(dynamic a, [dynamic b = #C1]) → dynamic
+  operator /(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator ~/(dynamic a, [dynamic b = #C1]) → dynamic
+  operator ~/(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator *(dynamic a, [dynamic b = #C1]) → dynamic
+  operator *(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator %(dynamic a, [dynamic b = #C1]) → dynamic
+  operator %(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator |(dynamic a, [dynamic b = #C1]) → dynamic
+  operator |(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator ^(dynamic a, [dynamic b = #C1]) → dynamic
+  operator ^(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator &(dynamic a, [dynamic b = #C1]) → dynamic
+  operator &(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator <<(dynamic a, [dynamic b = #C1]) → dynamic
+  operator <<(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator >>(dynamic a, [dynamic b = #C1]) → dynamic
+  operator >>(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator []=(dynamic a, dynamic b, [dynamic c = #C1]) → void
+  operator []=(dynamic a, dynamic b, [dynamic c = #C2]) → void
     return true;
-  operator [](dynamic a, [dynamic b = #C1]) → dynamic
+  operator [](dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator ~(dynamic a, [dynamic b = #C1]) → dynamic
+  operator ~(dynamic a, [dynamic b = #C2]) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators6 extends core::Object {
-  synthetic constructor •() → self::Operators6*
+  synthetic constructor •() → self::Operators6
     : super core::Object::•()
     ;
-  operator ==(dynamic a, {dynamic b = #C1}) → core::bool*
+  operator ==(core::Object a, {dynamic b = #C2}) → core::bool
     return true;
-  operator <(dynamic a, {dynamic b = #C1}) → dynamic
+  operator <(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator >(dynamic a, {dynamic b = #C1}) → dynamic
+  operator >(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator <=(dynamic a, {dynamic b = #C1}) → dynamic
+  operator <=(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator >=(dynamic a, {dynamic b = #C1}) → dynamic
+  operator >=(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator -(dynamic a, {dynamic b = #C1}) → dynamic
+  operator -(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator +(dynamic a, {dynamic b = #C1}) → dynamic
+  operator +(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator /(dynamic a, {dynamic b = #C1}) → dynamic
+  operator /(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator ~/(dynamic a, {dynamic b = #C1}) → dynamic
+  operator ~/(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator *(dynamic a, {dynamic b = #C1}) → dynamic
+  operator *(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator %(dynamic a, {dynamic b = #C1}) → dynamic
+  operator %(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator |(dynamic a, {dynamic b = #C1}) → dynamic
+  operator |(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator ^(dynamic a, {dynamic b = #C1}) → dynamic
+  operator ^(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator &(dynamic a, {dynamic b = #C1}) → dynamic
+  operator &(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator <<(dynamic a, {dynamic b = #C1}) → dynamic
+  operator <<(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator >>(dynamic a, {dynamic b = #C1}) → dynamic
+  operator >>(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator []=(dynamic a, dynamic b, {dynamic c = #C1}) → void
+  operator []=(dynamic a, dynamic b, {dynamic c = #C2}) → void
     return true;
-  operator [](dynamic a, {dynamic b = #C1}) → dynamic
+  operator [](dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator ~(dynamic a, {dynamic b = #C1}) → dynamic
+  operator ~(dynamic a, {dynamic b = #C2}) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     : super core::Object::•()
     ;
-  operator ==<T extends core::Object* = dynamic>(invalid-type a) → invalid-type
+  operator ==<T extends core::Object? = dynamic>(invalid-type a) → invalid-type
     return true;
-  operator ><T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ><T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator <=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator <=<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator >=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator >=<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator unary-<T extends core::Object* = dynamic>() → dynamic
+  operator unary-<T extends core::Object? = dynamic>() → dynamic
     return true;
-  operator -<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator -<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator +<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator +<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator /<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator /<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator ~/<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ~/<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator *<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator *<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator %<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator %<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator |<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator |<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator ^<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ^<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator &<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator &<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator <<<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator <<<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator >><T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator >><T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator []=<T extends core::Object* = dynamic>(dynamic a, dynamic b) → void
+  operator []=<T extends core::Object? = dynamic>(dynamic a, dynamic b) → void
     return true;
-  operator []<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator []<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator ~<T extends core::Object* = dynamic>() → dynamic
+  operator ~<T extends core::Object? = dynamic>() → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect
index 1bababf..7efd9db 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -152,7 +152,7 @@
 //            ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:49:16: Error: An operator can't have optional parameters.
-//   operator ==([a]) => true;
+//   operator ==([a = 0]) => true;
 //                ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:50:15: Error: An operator can't have optional parameters.
@@ -600,10 +600,10 @@
 import "dart:core" as core;
 
 class Operators1 extends core::Object {
-  synthetic constructor •() → self::Operators1*
+  synthetic constructor •() → self::Operators1
     : super core::Object::•()
     ;
-  operator ==() → core::bool*
+  operator ==() → core::bool
     return true;
   operator <() → dynamic
     return true;
@@ -639,21 +639,12 @@
     return true;
   operator ~(dynamic a) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators2 extends core::Object {
-  synthetic constructor •() → self::Operators2*
+  synthetic constructor •() → self::Operators2
     : super core::Object::•()
     ;
-  operator ==(dynamic a, dynamic b) → core::bool*
+  operator ==(core::Object a, dynamic b) → core::bool
     return true;
   operator <(dynamic a, dynamic b) → dynamic
     return true;
@@ -691,278 +682,225 @@
     return true;
   operator ~(dynamic a, dynamic b) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators3 extends core::Object {
-  synthetic constructor •() → self::Operators3*
+  synthetic constructor •() → self::Operators3
     : super core::Object::•()
     ;
-  operator ==([dynamic a = #C1]) → core::bool*
+  operator ==([core::Object a = #C1]) → core::bool
     return true;
-  operator <([dynamic a = #C1]) → dynamic
+  operator <([dynamic a = #C2]) → dynamic
     return true;
-  operator >([dynamic a = #C1]) → dynamic
+  operator >([dynamic a = #C2]) → dynamic
     return true;
-  operator <=([dynamic a = #C1]) → dynamic
+  operator <=([dynamic a = #C2]) → dynamic
     return true;
-  operator >=([dynamic a = #C1]) → dynamic
+  operator >=([dynamic a = #C2]) → dynamic
     return true;
-  operator -([dynamic a = #C1]) → dynamic
+  operator -([dynamic a = #C2]) → dynamic
     return true;
-  operator +([dynamic a = #C1]) → dynamic
+  operator +([dynamic a = #C2]) → dynamic
     return true;
-  operator /([dynamic a = #C1]) → dynamic
+  operator /([dynamic a = #C2]) → dynamic
     return true;
-  operator ~/([dynamic a = #C1]) → dynamic
+  operator ~/([dynamic a = #C2]) → dynamic
     return true;
-  operator *([dynamic a = #C1]) → dynamic
+  operator *([dynamic a = #C2]) → dynamic
     return true;
-  operator %([dynamic a = #C1]) → dynamic
+  operator %([dynamic a = #C2]) → dynamic
     return true;
-  operator |([dynamic a = #C1]) → dynamic
+  operator |([dynamic a = #C2]) → dynamic
     return true;
-  operator ^([dynamic a = #C1]) → dynamic
+  operator ^([dynamic a = #C2]) → dynamic
     return true;
-  operator &([dynamic a = #C1]) → dynamic
+  operator &([dynamic a = #C2]) → dynamic
     return true;
-  operator <<([dynamic a = #C1]) → dynamic
+  operator <<([dynamic a = #C2]) → dynamic
     return true;
-  operator >>([dynamic a = #C1]) → dynamic
+  operator >>([dynamic a = #C2]) → dynamic
     return true;
-  operator []=([dynamic a = #C1, dynamic b = #C1]) → void
+  operator []=([dynamic a = #C2, dynamic b = #C2]) → void
     return true;
-  operator []([dynamic a = #C1]) → dynamic
+  operator []([dynamic a = #C2]) → dynamic
     return true;
-  operator ~([dynamic a = #C1]) → dynamic
+  operator ~([dynamic a = #C2]) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators4 extends core::Object {
-  synthetic constructor •() → self::Operators4*
+  synthetic constructor •() → self::Operators4
     : super core::Object::•()
     ;
-  operator ==({dynamic a = #C1}) → core::bool*
+  operator ==({dynamic a = #C2}) → core::bool
     return true;
-  operator <({dynamic a = #C1}) → dynamic
+  operator <({dynamic a = #C2}) → dynamic
     return true;
-  operator >({dynamic a = #C1}) → dynamic
+  operator >({dynamic a = #C2}) → dynamic
     return true;
-  operator <=({dynamic a = #C1}) → dynamic
+  operator <=({dynamic a = #C2}) → dynamic
     return true;
-  operator >=({dynamic a = #C1}) → dynamic
+  operator >=({dynamic a = #C2}) → dynamic
     return true;
-  operator -({dynamic a = #C1}) → dynamic
+  operator -({dynamic a = #C2}) → dynamic
     return true;
-  operator +({dynamic a = #C1}) → dynamic
+  operator +({dynamic a = #C2}) → dynamic
     return true;
-  operator /({dynamic a = #C1}) → dynamic
+  operator /({dynamic a = #C2}) → dynamic
     return true;
-  operator ~/({dynamic a = #C1}) → dynamic
+  operator ~/({dynamic a = #C2}) → dynamic
     return true;
-  operator *({dynamic a = #C1}) → dynamic
+  operator *({dynamic a = #C2}) → dynamic
     return true;
-  operator %({dynamic a = #C1}) → dynamic
+  operator %({dynamic a = #C2}) → dynamic
     return true;
-  operator |({dynamic a = #C1}) → dynamic
+  operator |({dynamic a = #C2}) → dynamic
     return true;
-  operator ^({dynamic a = #C1}) → dynamic
+  operator ^({dynamic a = #C2}) → dynamic
     return true;
-  operator &({dynamic a = #C1}) → dynamic
+  operator &({dynamic a = #C2}) → dynamic
     return true;
-  operator <<({dynamic a = #C1}) → dynamic
+  operator <<({dynamic a = #C2}) → dynamic
     return true;
-  operator >>({dynamic a = #C1}) → dynamic
+  operator >>({dynamic a = #C2}) → dynamic
     return true;
-  operator []=({dynamic a = #C1, dynamic b = #C1}) → void
+  operator []=({dynamic a = #C2, dynamic b = #C2}) → void
     return true;
-  operator []({dynamic a = #C1}) → dynamic
+  operator []({dynamic a = #C2}) → dynamic
     return true;
-  operator ~({dynamic a = #C1}) → dynamic
+  operator ~({dynamic a = #C2}) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators5 extends core::Object {
-  synthetic constructor •() → self::Operators5*
+  synthetic constructor •() → self::Operators5
     : super core::Object::•()
     ;
-  operator ==(dynamic a, [dynamic b = #C1]) → core::bool*
+  operator ==(core::Object a, [dynamic b = #C2]) → core::bool
     return true;
-  operator <(dynamic a, [dynamic b = #C1]) → dynamic
+  operator <(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator >(dynamic a, [dynamic b = #C1]) → dynamic
+  operator >(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator <=(dynamic a, [dynamic b = #C1]) → dynamic
+  operator <=(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator >=(dynamic a, [dynamic b = #C1]) → dynamic
+  operator >=(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator -(dynamic a, [dynamic b = #C1]) → dynamic
+  operator -(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator +(dynamic a, [dynamic b = #C1]) → dynamic
+  operator +(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator /(dynamic a, [dynamic b = #C1]) → dynamic
+  operator /(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator ~/(dynamic a, [dynamic b = #C1]) → dynamic
+  operator ~/(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator *(dynamic a, [dynamic b = #C1]) → dynamic
+  operator *(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator %(dynamic a, [dynamic b = #C1]) → dynamic
+  operator %(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator |(dynamic a, [dynamic b = #C1]) → dynamic
+  operator |(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator ^(dynamic a, [dynamic b = #C1]) → dynamic
+  operator ^(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator &(dynamic a, [dynamic b = #C1]) → dynamic
+  operator &(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator <<(dynamic a, [dynamic b = #C1]) → dynamic
+  operator <<(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator >>(dynamic a, [dynamic b = #C1]) → dynamic
+  operator >>(dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator []=(dynamic a, dynamic b, [dynamic c = #C1]) → void
+  operator []=(dynamic a, dynamic b, [dynamic c = #C2]) → void
     return true;
-  operator [](dynamic a, [dynamic b = #C1]) → dynamic
+  operator [](dynamic a, [dynamic b = #C2]) → dynamic
     return true;
-  operator ~(dynamic a, [dynamic b = #C1]) → dynamic
+  operator ~(dynamic a, [dynamic b = #C2]) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators6 extends core::Object {
-  synthetic constructor •() → self::Operators6*
+  synthetic constructor •() → self::Operators6
     : super core::Object::•()
     ;
-  operator ==(dynamic a, {dynamic b = #C1}) → core::bool*
+  operator ==(core::Object a, {dynamic b = #C2}) → core::bool
     return true;
-  operator <(dynamic a, {dynamic b = #C1}) → dynamic
+  operator <(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator >(dynamic a, {dynamic b = #C1}) → dynamic
+  operator >(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator <=(dynamic a, {dynamic b = #C1}) → dynamic
+  operator <=(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator >=(dynamic a, {dynamic b = #C1}) → dynamic
+  operator >=(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator -(dynamic a, {dynamic b = #C1}) → dynamic
+  operator -(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator +(dynamic a, {dynamic b = #C1}) → dynamic
+  operator +(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator /(dynamic a, {dynamic b = #C1}) → dynamic
+  operator /(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator ~/(dynamic a, {dynamic b = #C1}) → dynamic
+  operator ~/(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator *(dynamic a, {dynamic b = #C1}) → dynamic
+  operator *(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator %(dynamic a, {dynamic b = #C1}) → dynamic
+  operator %(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator |(dynamic a, {dynamic b = #C1}) → dynamic
+  operator |(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator ^(dynamic a, {dynamic b = #C1}) → dynamic
+  operator ^(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator &(dynamic a, {dynamic b = #C1}) → dynamic
+  operator &(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator <<(dynamic a, {dynamic b = #C1}) → dynamic
+  operator <<(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator >>(dynamic a, {dynamic b = #C1}) → dynamic
+  operator >>(dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator []=(dynamic a, dynamic b, {dynamic c = #C1}) → void
+  operator []=(dynamic a, dynamic b, {dynamic c = #C2}) → void
     return true;
-  operator [](dynamic a, {dynamic b = #C1}) → dynamic
+  operator [](dynamic a, {dynamic b = #C2}) → dynamic
     return true;
-  operator ~(dynamic a, {dynamic b = #C1}) → dynamic
+  operator ~(dynamic a, {dynamic b = #C2}) → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     : super core::Object::•()
     ;
-  operator ==<T extends core::Object* = dynamic>(invalid-type a) → invalid-type
+  operator ==<T extends core::Object? = dynamic>(invalid-type a) → invalid-type
     return true;
-  operator ><T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ><T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator <=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator <=<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator >=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator >=<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator unary-<T extends core::Object* = dynamic>() → dynamic
+  operator unary-<T extends core::Object? = dynamic>() → dynamic
     return true;
-  operator -<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator -<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator +<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator +<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator /<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator /<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator ~/<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ~/<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator *<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator *<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator %<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator %<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator |<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator |<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator ^<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ^<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator &<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator &<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator <<<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator <<<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator >><T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator >><T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator []=<T extends core::Object* = dynamic>(dynamic a, dynamic b) → void
+  operator []=<T extends core::Object? = dynamic>(dynamic a, dynamic b) → void
     return true;
-  operator []<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator []<T extends core::Object? = dynamic>(dynamic a) → dynamic
     return true;
-  operator ~<T extends core::Object* = dynamic>() → dynamic
+  operator ~<T extends core::Object? = dynamic>() → dynamic
     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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
+  #C2 = null
 }
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
index c9f7e40..839e7f4 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -152,7 +152,7 @@
 //            ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:49:16: Error: An operator can't have optional parameters.
-//   operator ==([a]) => true;
+//   operator ==([a = 0]) => true;
 //                ^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:50:15: Error: An operator can't have optional parameters.
@@ -600,9 +600,9 @@
 import "dart:core" as core;
 
 class Operators1 extends core::Object {
-  synthetic constructor •() → self::Operators1*
+  synthetic constructor •() → self::Operators1
     ;
-  operator ==() → core::bool*
+  operator ==() → core::bool
     ;
   operator <() → dynamic
     ;
@@ -638,20 +638,11 @@
     ;
   operator ~(dynamic 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators2 extends core::Object {
-  synthetic constructor •() → self::Operators2*
+  synthetic constructor •() → self::Operators2
     ;
-  operator ==(dynamic a, dynamic b) → core::bool*
+  operator ==(core::Object a, dynamic b) → core::bool
     ;
   operator <(dynamic a, dynamic b) → dynamic
     ;
@@ -689,20 +680,11 @@
     ;
   operator ~(dynamic a, dynamic 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators3 extends core::Object {
-  synthetic constructor •() → self::Operators3*
+  synthetic constructor •() → self::Operators3
     ;
-  operator ==([dynamic a]) → core::bool*
+  operator ==([core::Object a = 0]) → core::bool
     ;
   operator <([dynamic a]) → dynamic
     ;
@@ -740,20 +722,11 @@
     ;
   operator ~([dynamic 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators4 extends core::Object {
-  synthetic constructor •() → self::Operators4*
+  synthetic constructor •() → self::Operators4
     ;
-  operator ==({dynamic a}) → core::bool*
+  operator ==({dynamic a}) → core::bool
     ;
   operator <({dynamic a}) → dynamic
     ;
@@ -791,20 +764,11 @@
     ;
   operator ~({dynamic 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators5 extends core::Object {
-  synthetic constructor •() → self::Operators5*
+  synthetic constructor •() → self::Operators5
     ;
-  operator ==(dynamic a, [dynamic b]) → core::bool*
+  operator ==(core::Object a, [dynamic b]) → core::bool
     ;
   operator <(dynamic a, [dynamic b]) → dynamic
     ;
@@ -842,20 +806,11 @@
     ;
   operator ~(dynamic a, [dynamic 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators6 extends core::Object {
-  synthetic constructor •() → self::Operators6*
+  synthetic constructor •() → self::Operators6
     ;
-  operator ==(dynamic a, {dynamic b}) → core::bool*
+  operator ==(core::Object a, {dynamic b}) → core::bool
     ;
   operator <(dynamic a, {dynamic b}) → dynamic
     ;
@@ -893,66 +848,48 @@
     ;
   operator ~(dynamic a, {dynamic 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 get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     ;
-  operator ==<T extends core::Object* = dynamic>(invalid-type a) → invalid-type
+  operator ==<T extends core::Object? = dynamic>(invalid-type a) → invalid-type
     ;
-  operator ><T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ><T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator <=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator <=<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator >=<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator >=<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator unary-<T extends core::Object* = dynamic>() → dynamic
+  operator unary-<T extends core::Object? = dynamic>() → dynamic
     ;
-  operator -<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator -<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator +<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator +<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator /<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator /<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator ~/<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ~/<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator *<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator *<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator %<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator %<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator |<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator |<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator ^<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator ^<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator &<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator &<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator <<<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator <<<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator >><T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator >><T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator []=<T extends core::Object* = dynamic>(dynamic a, dynamic b) → void
+  operator []=<T extends core::Object? = dynamic>(dynamic a, dynamic b) → void
     ;
-  operator []<T extends core::Object* = dynamic>(dynamic a) → dynamic
+  operator []<T extends core::Object? = dynamic>(dynamic a) → dynamic
     ;
-  operator ~<T extends core::Object* = dynamic>() → dynamic
+  operator ~<T extends core::Object? = dynamic>() → 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
   ;
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart b/pkg/front_end/testcases/general/invalid_operator2.dart
index 3b629d5..8c6f693 100644
--- a/pkg/front_end/testcases/general/invalid_operator2.dart
+++ b/pkg/front_end/testcases/general/invalid_operator2.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 Operators7 {
   operator <<T>(a) => true;
 }
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.textual_outline.expect
index fc030ef..bc10ea0 100644
--- a/pkg/front_end/testcases/general/invalid_operator2.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Operators7 {
   operator <<(){}
   Toperator>(a) => true;
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.expect
index 7ad624a..7bf6313 100644
--- a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,21 +28,11 @@
 import "dart:core" as core;
 
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     : super core::Object::•()
     ;
   operator <<() → dynamic {}
   operator >(dynamic a) → invalid-type
     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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect
index 7ad624a..7bf6313 100644
--- a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,21 +28,11 @@
 import "dart:core" as core;
 
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     : super core::Object::•()
     ;
   operator <<() → dynamic {}
   operator >(dynamic a) → invalid-type
     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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.outline.expect
index 67d0ed8..fd3aa32 100644
--- a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,22 +28,12 @@
 import "dart:core" as core;
 
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     ;
   operator <<() → dynamic
     ;
   operator >(dynamic a) → 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/invalid_operator2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.transformed.expect
index 7ad624a..7bf6313 100644
--- a/pkg/front_end/testcases/general/invalid_operator2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_operator2.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,21 +28,11 @@
 import "dart:core" as core;
 
 class Operators7 extends core::Object {
-  synthetic constructor •() → self::Operators7*
+  synthetic constructor •() → self::Operators7
     : super core::Object::•()
     ;
   operator <<() → dynamic {}
   operator >(dynamic a) → invalid-type
     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
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart b/pkg/front_end/testcases/general/invalid_operator_override.dart
index b96cf5b..9767d57 100644
--- a/pkg/front_end/testcases/general/invalid_operator_override.dart
+++ b/pkg/front_end/testcases/general/invalid_operator_override.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 {
   A operator +(A a) => a;
   B operator -() => new B();
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline.expect
index fe67f0b..f4a5167 100644
--- a/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A operator +(A a) => a;
   B operator -() => new B();
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline_modelled.expect
index fe67f0b..f4a5167 100644
--- a/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/invalid_operator_override.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   A operator +(A a) => a;
   B operator -() => new B();
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.expect b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.expect
index aad884f..e21a3e1 100644
--- a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,45 +76,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::A* a) → self::A*
+  operator +(self::A a) → self::A
     return a;
-  operator unary-() → self::B*
+  operator unary-() → self::B
     return new self::B::•();
-  operator [](self::A* a) → self::B*
+  operator [](self::A a) → self::B
     return new self::B::•();
-  operator []=(self::A* a1, self::A* a2) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 []=(self::A a1, self::A a2) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     return b;
-  operator unary-() → self::A*
+  operator unary-() → self::A
     return this;
-  operator [](self::B* b) → self::B*
+  operator [](self::B b) → self::B
     return b;
-  operator []=(self::B* b, self::A* a) → void {}
+  operator []=(self::B b, self::A a) → void {}
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     return b;
-  operator []=(self::A* a, self::B* b) → void {}
+  operator []=(self::A a, self::B b) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect
index aad884f..e21a3e1 100644
--- a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,45 +76,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator +(self::A* a) → self::A*
+  operator +(self::A a) → self::A
     return a;
-  operator unary-() → self::B*
+  operator unary-() → self::B
     return new self::B::•();
-  operator [](self::A* a) → self::B*
+  operator [](self::A a) → self::B
     return new self::B::•();
-  operator []=(self::A* a1, self::A* a2) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::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 []=(self::A a1, self::A a2) → void {}
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     return b;
-  operator unary-() → self::A*
+  operator unary-() → self::A
     return this;
-  operator [](self::B* b) → self::B*
+  operator [](self::B b) → self::B
     return b;
-  operator []=(self::B* b, self::A* a) → void {}
+  operator []=(self::B b, self::A a) → void {}
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     return b;
-  operator []=(self::A* a, self::B* b) → void {}
+  operator []=(self::A a, self::B b) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.outline.expect
index 64aaa48..75e9755 100644
--- a/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator_override.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,45 +76,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  operator +(self::A* a) → self::A*
+  operator +(self::A a) → self::A
     ;
-  operator unary-() → self::B*
+  operator unary-() → self::B
     ;
-  operator [](self::A* a) → self::B*
+  operator [](self::A a) → self::B
     ;
-  operator []=(self::A* a1, self::A* a2) → void
+  operator []=(self::A a1, self::A a2) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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
     ;
-  operator +(self::B* b) → self::A*
+  operator +(self::B b) → self::A
     ;
-  operator unary-() → self::A*
+  operator unary-() → self::A
     ;
-  operator [](self::B* b) → self::B*
+  operator [](self::B b) → self::B
     ;
-  operator []=(self::B* b, self::A* a) → void
+  operator []=(self::B b, self::A a) → void
     ;
 }
 class C extends self::A {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  operator [](self::B* b) → self::A*
+  operator [](self::B b) → self::A
     ;
-  operator []=(self::A* a, self::B* b) → void
+  operator []=(self::A a, self::B b) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart b/pkg/front_end/testcases/general/invalid_setter_return_type.dart
index 4d813d2..7bf0d86 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.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
+
 int set setter1(_) {} // error
 dynamic set setter2(_) {} // error
 void set setter3(_) {} // ok
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline.expect
index a43e4f8..5009b26 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 int set setter1(_) {}
 dynamic set setter2(_) {}
 void set setter3(_) {}
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline_modelled.expect
index da95c96..721e925 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   int operator []=(a, b) {}
   int set setter1(_) {}
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.expect
index 096efed..76330df 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,72 +36,32 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
   set setter1(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     : super core::Object::•()
     ;
   set setter2(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class3*
+  synthetic constructor •() → self::Class3
     : super core::Object::•()
     ;
   set setter3(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class4*
+  synthetic constructor •() → self::Class4
     : super core::Object::•()
     ;
   set setter4(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 setter1(dynamic _) → void {}
 static set setter2(dynamic _) → void {}
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect
index 096efed..76330df 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,72 +36,32 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
   set setter1(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     : super core::Object::•()
     ;
   set setter2(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class3*
+  synthetic constructor •() → self::Class3
     : super core::Object::•()
     ;
   set setter3(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class4*
+  synthetic constructor •() → self::Class4
     : super core::Object::•()
     ;
   set setter4(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 setter1(dynamic _) → void {}
 static set setter2(dynamic _) → void {}
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.outline.expect
index fa52301..9593b2e 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,76 +36,36 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     ;
   set setter1(dynamic _) → void
     ;
   operator []=(dynamic a, dynamic b) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     ;
   set setter2(dynamic _) → void
     ;
   operator []=(dynamic a, dynamic b) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class3*
+  synthetic constructor •() → self::Class3
     ;
   set setter3(dynamic _) → void
     ;
   operator []=(dynamic a, dynamic b) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class4*
+  synthetic constructor •() → self::Class4
     ;
   set setter4(dynamic _) → void
     ;
   operator []=(dynamic a, dynamic b) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 setter1(dynamic _) → void
   ;
diff --git a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.transformed.expect
index 096efed..76330df 100644
--- a/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_setter_return_type.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -36,72 +36,32 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
   set setter1(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     : super core::Object::•()
     ;
   set setter2(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class3*
+  synthetic constructor •() → self::Class3
     : super core::Object::•()
     ;
   set setter3(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 {
-  synthetic constructor •() → self::Class4*
+  synthetic constructor •() → self::Class4
     : super core::Object::•()
     ;
   set setter4(dynamic _) → void {}
   operator []=(dynamic a, dynamic b) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::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 setter1(dynamic _) → void {}
 static set setter2(dynamic _) → void {}
diff --git a/pkg/front_end/testcases/general/invalid_type.dart b/pkg/front_end/testcases/general/invalid_type.dart
index 49b3b24..f155286 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart
+++ b/pkg/front_end/testcases/general/invalid_type.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 {
   static foo() {
     this.bar();
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_type.dart.textual_outline.expect
index 7660aef..6cef1e5 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   static foo() {}
 }
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_type.dart.textual_outline_modelled.expect
index fdf8e91..a02ed16 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   static foo() {}
 }
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
index 5bf84b6..c99d4c1 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,7 +19,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static method foo() → dynamic {
@@ -27,19 +27,9 @@
     this.bar();
     ^^^^"{dynamic}.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 test() → dynamic {
-  (null as invalid-type){dynamic}.bar();
+  (null as{ForNonNullableByDefault} invalid-type){dynamic}.bar();
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect
index 5bf84b6..c99d4c1 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,7 +19,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static method foo() → dynamic {
@@ -27,19 +27,9 @@
     this.bar();
     ^^^^"{dynamic}.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 test() → dynamic {
-  (null as invalid-type){dynamic}.bar();
+  (null as{ForNonNullableByDefault} invalid-type){dynamic}.bar();
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.outline.expect
index 41d0f67..93690a3 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-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
     ;
   static 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
 }
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
index a120ded..22a8b97 100644
--- a/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_type.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -19,7 +19,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
   static method foo() → dynamic {
@@ -27,19 +27,9 @@
     this.bar();
     ^^^^"{dynamic}.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 test() → dynamic {
-  (null as invalid-type){dynamic}.bar();
+  (null as{ForNonNullableByDefault} invalid-type){dynamic}.bar();
   invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
 Try correcting the name to the name of an existing method, or defining a method named 'bar'.
   null.bar();
diff --git a/pkg/front_end/testcases/general/invocations.dart b/pkg/front_end/testcases/general/invocations.dart
index dcba30d..3166901 100644
--- a/pkg/front_end/testcases/general/invocations.dart
+++ b/pkg/front_end/testcases/general/invocations.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
+
 main() {
   print("Hello, World!");
   z("Hello, World!");
diff --git a/pkg/front_end/testcases/general/invocations.dart.textual_outline.expect b/pkg/front_end/testcases/general/invocations.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/invocations.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/invocations.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invocations.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/invocations.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.expect b/pkg/front_end/testcases/general/invocations.dart.weak.expect
index 64be843..79eb25a 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -57,13 +57,13 @@
   ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!");
   1.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
       print(\"Hello, World!\") +
-      ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
+      ^" in core::print("Hello, World!")){(core::num) → core::num}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
+      ^"){(core::num) → core::double}.{core::double::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
       z.print(\"Hello, World!\") +
-      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double}.{core::double::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
       y.z.print(\"Hello, World!\") +
-      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
+      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double}.{core::double::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double};
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect b/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect
index 64be843..79eb25a 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/invocations.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -57,13 +57,13 @@
   ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!");
   1.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:13:7: Error: This expression has type 'void' and can't be used.
       print(\"Hello, World!\") +
-      ^" in core::print("Hello, World!")){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
+      ^" in core::print("Hello, World!")){(core::num) → core::num}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:14:7: Error: Method not found: 'z'.
       z(\"Hello, World!\") +
-      ^"){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
+      ^"){(core::num) → core::double}.{core::double::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:15:7: Error: Undefined name 'z'.
       z.print(\"Hello, World!\") +
-      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
+      ^"{dynamic}.print("Hello, World!") as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double}.{core::double::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:16:7: Error: Undefined name 'y'.
       y.z.print(\"Hello, World!\") +
-      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
+      ^"{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double}.{core::double::+}(invalid-expression "pkg/front_end/testcases/general/invocations.dart:17:7: Error: Undefined name 'x'.
       x.y.z.print(\"Hello, World!\");
-      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic} core::num*){(core::num*) →* core::num*};
+      ^"{<invalid>}.y{<invalid>}.z{dynamic}.print("Hello, World!") as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::double};
 }
diff --git a/pkg/front_end/testcases/general/invocations.dart.weak.outline.expect b/pkg/front_end/testcases/general/invocations.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/invocations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/invocations.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/issue38253b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
index 9bfa6ab6..5073c13 100644
--- a/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253b.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,7 +53,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
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 b9327a2..d67c665 100644
--- a/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38253c.dart.weak.transformed.expect
@@ -27,16 +27,16 @@
   function f2() → invalid-type /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
+    dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -44,7 +44,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -61,7 +61,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
@@ -78,7 +78,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -92,12 +92,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(f, :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(f, :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -108,7 +108,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 };
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 90be483..4fef8f9 100644
--- a/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue40662.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   core::int* :async_temporary_1;
   core::List<core::int*>* :async_temporary_2;
   core::int* :async_temporary_3;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -29,8 +29,8 @@
         if(!(x == null)) {
           :async_temporary_1 = x.{core::num::+}(1){(core::num*) →* core::int*};
           :async_temporary_0 = x.{core::num::+}(2){(core::num*) →* core::int*};
-          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          :async_temporary_2 = core::_GrowableList::_literal3<core::int*>(_in::unsafeCast<core::int*>(:async_temporary_1), _in::unsafeCast<core::int*>(:async_temporary_0), _in::unsafeCast<Null>(:result));
+          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          :async_temporary_2 = core::_GrowableList::_literal3<core::int*>(_in::unsafeCast<core::int*>(:async_temporary_1), _in::unsafeCast<core::int*>(:async_temporary_0), _in::unsafeCast<Null>(:result_or_exception));
         }
         else {
           :async_temporary_2 = null;
@@ -46,7 +46,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -59,12 +59,12 @@
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::foo(0), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::foo(0), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception;
         break #L2;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -75,7 +75,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -88,4 +88,4 @@
 Extra constant evaluation status:
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:10:10 -> IntConstant(-1)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue40662.dart:11:10 -> IntConstant(-1)
-Extra constant evaluation: evaluated: 94, effectively constant: 2
+Extra constant evaluation: evaluated: 92, effectively constant: 2
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 b0ac024..3d98e0c 100644
--- a/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42615.dart.weak.transformed.expect
@@ -31,7 +31,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   });
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 ba98fca..184f658 100644
--- a/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46956.dart.weak.transformed.expect
@@ -17,13 +17,13 @@
 static method test(self::A<core::String> a) → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -35,7 +35,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -50,14 +50,14 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
-        })(){() → asy::Future<core::String?>}, :async_op_then, :async_op_error, :async_op) in null;
-        final core::String? x = _in::unsafeCast<core::String?>(:result);
+        })(){() → asy::Future<core::String?>}, :async_op_then, :async_op_error) in null;
+        final core::String? x = _in::unsafeCast<core::String?>(:result_or_exception);
         self::bar(x);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -77,7 +77,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -92,7 +92,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 e2413bc..1e3ff27 100644
--- a/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47057.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -33,7 +33,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/issue47922.dart b/pkg/front_end/testcases/general/issue47922.dart
new file mode 100644
index 0000000..0a10f57
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47922.dart
@@ -0,0 +1,11 @@
+// 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.
+
+class A {
+  final String foo;
+
+  A(const this.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47922.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue47922.dart.textual_outline.expect
new file mode 100644
index 0000000..365be6a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47922.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+class A {
+  final String foo;
+  A(const this.foo);
+}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue47922.dart.weak.expect b/pkg/front_end/testcases/general/issue47922.dart.weak.expect
new file mode 100644
index 0000000..600e747
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47922.dart.weak.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47922.dart:8:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   A(const this.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47922.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47922.dart.weak.modular.expect
new file mode 100644
index 0000000..600e747
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47922.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47922.dart:8:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   A(const this.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue47922.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47922.dart.weak.outline.expect
new file mode 100644
index 0000000..ab96c23f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47922.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47922.dart:8:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   A(const this.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue47922.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47922.dart.weak.transformed.expect
new file mode 100644
index 0000000..600e747
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue47922.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue47922.dart:8:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   A(const this.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48242.dart b/pkg/front_end/testcases/general/issue48242.dart
new file mode 100644
index 0000000..31998b5
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.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.
+
+mixin Base {
+  Object? methodWithDefaultImpl() {}
+}
+
+mixin TestFailure<A> on Base {
+  @override
+  methodWithDefaultImpl({A? nameParam});
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48242.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48242.dart.textual_outline.expect
new file mode 100644
index 0000000..c106a99
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+mixin Base {
+  Object? methodWithDefaultImpl() {}
+}
+mixin TestFailure<A> on Base {
+  @override
+  methodWithDefaultImpl({A? nameParam});
+}
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48242.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48242.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c106a99
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+mixin Base {
+  Object? methodWithDefaultImpl() {}
+}
+mixin TestFailure<A> on Base {
+  @override
+  methodWithDefaultImpl({A? nameParam});
+}
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48242.dart.weak.expect b/pkg/front_end/testcases/general/issue48242.dart.weak.expect
new file mode 100644
index 0000000..679b8d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.dart.weak.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base extends core::Object /*isMixinDeclaration*/  {
+  method methodWithDefaultImpl() → core::Object? {}
+}
+abstract class TestFailure<A extends core::Object? = dynamic> extends self::Base /*isMixinDeclaration*/  {
+  @#C1
+  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam = #C2}) → core::Object?;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/general/issue48242.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48242.dart.weak.modular.expect
new file mode 100644
index 0000000..679b8d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base extends core::Object /*isMixinDeclaration*/  {
+  method methodWithDefaultImpl() → core::Object? {}
+}
+abstract class TestFailure<A extends core::Object? = dynamic> extends self::Base /*isMixinDeclaration*/  {
+  @#C1
+  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam = #C2}) → core::Object?;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
new file mode 100644
index 0000000..fe420e8
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base extends core::Object /*isMixinDeclaration*/  {
+  method methodWithDefaultImpl() → core::Object?
+    ;
+}
+abstract class TestFailure<A extends core::Object? = dynamic> extends self::Base /*isMixinDeclaration*/  {
+  @core::override
+  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam}) → core::Object?;
+}
+static method main() → void
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///issue48242.dart:10:4 -> InstanceConstant(const _Override{})
+Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue48242.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48242.dart.weak.transformed.expect
new file mode 100644
index 0000000..679b8d1
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48242.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Base extends core::Object /*isMixinDeclaration*/  {
+  method methodWithDefaultImpl() → core::Object? {}
+}
+abstract class TestFailure<A extends core::Object? = dynamic> extends self::Base /*isMixinDeclaration*/  {
+  @#C1
+  abstract method methodWithDefaultImpl({covariant-by-class self::TestFailure::A? nameParam = #C2}) → core::Object?;
+}
+static method main() → void {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = null
+}
diff --git a/pkg/front_end/testcases/general/issue48347.dart b/pkg/front_end/testcases/general/issue48347.dart
new file mode 100644
index 0000000..8b9e1ab
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.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 'dart:async';
+
+test(StreamController<void> _eventStreamController) async {
+  await for (final _ in _eventStreamController.stream) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48347.dart.textual_outline.expect
new file mode 100644
index 0000000..0278a37
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import 'dart:async';
+
+test(StreamController<void> _eventStreamController) async {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48347.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..50c55af
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import 'dart:async';
+
+main() {}
+test(StreamController<void> _eventStreamController) async {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.expect
new file mode 100644
index 0000000..555e190
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async {
+  await for (final void _ in _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>}) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
new file mode 100644
index 0000000..555e190
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async {
+  await for (final void _ in _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>}) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.outline.expect
new file mode 100644
index 0000000..3f670be
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async 
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
new file mode 100644
index 0000000..80b72a9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → 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 :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  dynamic :exception0;
+  dynamic :stack_trace0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L1:
+      {
+        {
+          asy::Stream<void> :stream = _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>};
+          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+          try
+            #L2:
+            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)) {
+                final void _ = :for-iterator.{asy::_StreamIterator::current}{void};
+                {}
+              }
+              else
+                break #L2;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == 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;
+            }
+        }
+      }
+      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 main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart b/pkg/front_end/testcases/general/issue48402.dart
new file mode 100644
index 0000000..d336e24
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.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.
+
+abstract class I {
+  String get member1;
+  String get procedure;
+  void set setter(String value);
+  void set fieldSetter(String value);
+  void set setterVsGetter(num value);
+  double get getterVsSetter;
+}
+
+class A implements I {
+  // Check for unsorted names of members.
+  static String member5 = "member5";
+  static String member4 = "member4";
+  static String member3 = "member3";
+  static String member1 = "member1"; // Error.
+  static String member2 = "member2";
+
+  static void procedure() {} // Error.
+  
+  static void set setter(String value) {} // Error.
+  
+  static String fieldSetter = "fieldSetter"; // Error.
+
+  static num get setterVsGetter => 0; // Error.
+
+  static void set getterVsSetter(double value) {} // Error.
+
+  dynamic noSuchMethod(Invocation i) => "foo";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48402.dart.textual_outline.expect
new file mode 100644
index 0000000..5a8834c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.textual_outline.expect
@@ -0,0 +1,24 @@
+abstract class I {
+  String get member1;
+  String get procedure;
+  void set setter(String value);
+  void set fieldSetter(String value);
+  void set setterVsGetter(num value);
+  double get getterVsSetter;
+}
+
+class A implements I {
+  static String member5 = "member5";
+  static String member4 = "member4";
+  static String member3 = "member3";
+  static String member1 = "member1";
+  static String member2 = "member2";
+  static void procedure() {}
+  static void set setter(String value) {}
+  static String fieldSetter = "fieldSetter";
+  static num get setterVsGetter => 0;
+  static void set getterVsSetter(double value) {}
+  dynamic noSuchMethod(Invocation i) => "foo";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48402.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9ae4cda
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+abstract class I {
+  String get member1;
+  String get procedure;
+  double get getterVsSetter;
+  void set fieldSetter(String value);
+  void set setter(String value);
+  void set setterVsGetter(num value);
+}
+
+class A implements I {
+  dynamic noSuchMethod(Invocation i) => "foo";
+  static String fieldSetter = "fieldSetter";
+  static String member1 = "member1";
+  static String member2 = "member2";
+  static String member3 = "member3";
+  static String member4 = "member4";
+  static String member5 = "member5";
+  static num get setterVsGetter => 0;
+  static void procedure() {}
+  static void set getterVsSetter(double value) {}
+  static void set setter(String value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.expect
new file mode 100644
index 0000000..c9cdfb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5 = "member5";
+  static field core::String member4 = "member4";
+  static field core::String member3 = "member3";
+  static field core::String member1 = "member1";
+  static field core::String member2 = "member2";
+  static field core::String fieldSetter = "fieldSetter";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method procedure() → void {}
+  static set setter(core::String value) → void {}
+  static get setterVsGetter() → core::num
+    return 0;
+  static set getterVsSetter(core::double value) → void {}
+  method noSuchMethod(core::Invocation i) → dynamic
+    return "foo";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.modular.expect
new file mode 100644
index 0000000..c9cdfb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5 = "member5";
+  static field core::String member4 = "member4";
+  static field core::String member3 = "member3";
+  static field core::String member1 = "member1";
+  static field core::String member2 = "member2";
+  static field core::String fieldSetter = "fieldSetter";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method procedure() → void {}
+  static set setter(core::String value) → void {}
+  static get setterVsGetter() → core::num
+    return 0;
+  static set getterVsSetter(core::double value) → void {}
+  method noSuchMethod(core::Invocation i) → dynamic
+    return "foo";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.outline.expect
new file mode 100644
index 0000000..a9e90d2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.outline.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5;
+  static field core::String member4;
+  static field core::String member3;
+  static field core::String member1;
+  static field core::String member2;
+  static field core::String fieldSetter;
+  synthetic constructor •() → self::A
+    ;
+  static method procedure() → void
+    ;
+  static set setter(core::String value) → void
+    ;
+  static get setterVsGetter() → core::num
+    ;
+  static set getterVsSetter(core::double value) → void
+    ;
+  method noSuchMethod(core::Invocation i) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.transformed.expect
new file mode 100644
index 0000000..c9cdfb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.transformed.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5 = "member5";
+  static field core::String member4 = "member4";
+  static field core::String member3 = "member3";
+  static field core::String member1 = "member1";
+  static field core::String member2 = "member2";
+  static field core::String fieldSetter = "fieldSetter";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method procedure() → void {}
+  static set setter(core::String value) → void {}
+  static get setterVsGetter() → core::num
+    return 0;
+  static set getterVsSetter(core::double value) → void {}
+  method noSuchMethod(core::Invocation i) → dynamic
+    return "foo";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48444.dart b/pkg/front_end/testcases/general/issue48444.dart
new file mode 100644
index 0000000..bd33840
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart
@@ -0,0 +1,15 @@
+// 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 {
+  void foo() {}
+}
+
+class B extends A {
+  void bar(bool t) {
+    t ? this.foo() : this.foo();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48444.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48444.dart.textual_outline.expect
new file mode 100644
index 0000000..c396c92
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+abstract class A {
+  void foo() {}
+}
+
+class B extends A {
+  void bar(bool t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48444.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48444.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c396c92
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+abstract class A {
+  void foo() {}
+}
+
+class B extends A {
+  void bar(bool t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48444.dart.weak.expect b/pkg/front_end/testcases/general/issue48444.dart.weak.expect
new file mode 100644
index 0000000..c1743d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart.weak.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} this.{self::A::foo}(){() → void} : this.{self::A::foo}(){() → void};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48444.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48444.dart.weak.modular.expect
new file mode 100644
index 0000000..c1743d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} this.{self::A::foo}(){() → void} : this.{self::A::foo}(){() → void};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48444.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48444.dart.weak.outline.expect
new file mode 100644
index 0000000..9bde383
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  method foo() → void
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  method bar(core::bool t) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue48444.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48444.dart.weak.transformed.expect
new file mode 100644
index 0000000..c1743d7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48444.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} this.{self::A::foo}(){() → void} : this.{self::A::foo}(){() → void};
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48487.dart b/pkg/front_end/testcases/general/issue48487.dart
new file mode 100644
index 0000000..7dd577f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487.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.
+
+// @dart=2.16
+
+enum T {
+  t();
+  void test() {
+    print("Success");
+  }
+}
+
+void main() {
+  T.t.test();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue48487.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48487.dart.textual_outline.expect
new file mode 100644
index 0000000..d952795
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+// @dart = 2.16
+enum T { t(); void test() { print("Success"); } }
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48487.dart.weak.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.expect
new file mode 100644
index 0000000..565652d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   void test() {
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = #C4;
+  static const field self::T t = #C3;
+  const constructor •(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+  method test() → void {
+    core::print("Success");
+  }
+}
+static method main() → void {
+  #C3.{self::T::test}(){() → void};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "t"
+  #C3 = self::T {index:#C1, _name:#C2}
+  #C4 = <self::T*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48487.dart:
+- T. (from org-dartlang-testcase:///issue48487.dart:7: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/general/issue48487.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.modular.expect
new file mode 100644
index 0000000..565652d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   void test() {
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = #C4;
+  static const field self::T t = #C3;
+  const constructor •(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+  method test() → void {
+    core::print("Success");
+  }
+}
+static method main() → void {
+  #C3.{self::T::test}(){() → void};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "t"
+  #C3 = self::T {index:#C1, _name:#C2}
+  #C4 = <self::T*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48487.dart:
+- T. (from org-dartlang-testcase:///issue48487.dart:7: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/general/issue48487.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.outline.expect
new file mode 100644
index 0000000..cbcf888
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.outline.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   void test() {
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = const <self::T>[self::T::t];
+  static const field self::T t = const self::T::•(0, "t");
+  const constructor •(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+  method test() → void
+    ;
+}
+static method main() → void
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48487.dart:7:6 -> ListConstant(const <T*>[const T{_Enum.index: 0, _Enum._name: "t"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48487.dart:8:3 -> InstanceConstant(const T{_Enum.index: 0, _Enum._name: "t"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect
new file mode 100644
index 0000000..565652d
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487.dart.weak.transformed.expect
@@ -0,0 +1,41 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   void test() {
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = #C4;
+  static const field self::T t = #C3;
+  const constructor •(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+  method test() → void {
+    core::print("Success");
+  }
+}
+static method main() → void {
+  #C3.{self::T::test}(){() → void};
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "t"
+  #C3 = self::T {index:#C1, _name:#C2}
+  #C4 = <self::T*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48487.dart:
+- T. (from org-dartlang-testcase:///issue48487.dart:7: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/general/issue48487b.dart b/pkg/front_end/testcases/general/issue48487b.dart
new file mode 100644
index 0000000..9085df7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487b.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.
+
+// @dart=2.16
+
+enum T {
+  t;
+  const T.named();
+}
+
+void main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48487b.dart.textual_outline.expect
new file mode 100644
index 0000000..138cecb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487b.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+// @dart = 2.16
+enum T { t; const T.named(); }
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.expect
new file mode 100644
index 0000000..050d4dd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   const T.named();
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect
new file mode 100644
index 0000000..050d4dd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   const T.named();
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect
new file mode 100644
index 0000000..ef043fd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.outline.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   const T.named();
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = const <self::T>[self::T::t];
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect
new file mode 100644
index 0000000..050d4dd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48487b.dart.weak.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+//
+// 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'.
+//   const T.named();
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class T extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::T> values = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  static const field self::T t = invalid-expression "pkg/front_end/testcases/general/issue48487b.dart:8:3: Error: Couldn't find constructor 'T'.
+  t;
+  ^";
+  const constructor named(core::int index, core::String name) → self::T
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "T.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → void {}
diff --git a/pkg/front_end/testcases/general/issue_47541.dart b/pkg/front_end/testcases/general/issue_47541.dart
new file mode 100644
index 0000000..23b18a7
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart
@@ -0,0 +1,59 @@
+void main() {
+  a();
+  b();
+  c(42);
+  d(42);
+}
+
+void a() {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+
+  on();
+}
+
+void b() {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+
+  onX(e) {
+    ;
+  }
+  onX("");
+}
+
+void c(int on) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  on = 42;
+}
+
+void d(int on) {
+  try {
+    ;
+  } catch (e) {
+    ;
+  } on Foo {
+    ;
+  }
+  on.toString();
+}
+
+void on() {}
+
+class Foo {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue_47541.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_47541.dart.textual_outline.expect
new file mode 100644
index 0000000..ef29dd0
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+void main() {}
+void a() {}
+void b() {}
+void c(int on) {}
+void d(int on) {}
+void on() {}
+
+class Foo {}
diff --git a/pkg/front_end/testcases/general/issue_47541.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_47541.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1dc83da
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+class Foo {}
+
+void a() {}
+void b() {}
+void c(int on) {}
+void d(int on) {}
+void main() {}
+void on() {}
diff --git a/pkg/front_end/testcases/general/issue_47541.dart.weak.expect b/pkg/front_end/testcases/general/issue_47541.dart.weak.expect
new file mode 100644
index 0000000..f57dd6f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart.weak.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+static method main() → void {
+  self::a();
+  self::b();
+  self::c(42);
+  self::d(42);
+}
+static method a() → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  self::on();
+}
+static method b() → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  function onX(dynamic e) → Null {
+    ;
+  }
+  onX(""){(dynamic) → Null};
+}
+static method c(core::int on) → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  on = 42;
+}
+static method d(core::int on) → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  on.{core::int::toString}(){() → core::String};
+}
+static method on() → void {}
diff --git a/pkg/front_end/testcases/general/issue_47541.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_47541.dart.weak.modular.expect
new file mode 100644
index 0000000..f57dd6f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+static method main() → void {
+  self::a();
+  self::b();
+  self::c(42);
+  self::d(42);
+}
+static method a() → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  self::on();
+}
+static method b() → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  function onX(dynamic e) → Null {
+    ;
+  }
+  onX(""){(dynamic) → Null};
+}
+static method c(core::int on) → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  on = 42;
+}
+static method d(core::int on) → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  on.{core::int::toString}(){() → core::String};
+}
+static method on() → void {}
diff --git a/pkg/front_end/testcases/general/issue_47541.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_47541.dart.weak.outline.expect
new file mode 100644
index 0000000..8eaa23a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart.weak.outline.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    ;
+}
+static method main() → void
+  ;
+static method a() → void
+  ;
+static method b() → void
+  ;
+static method c(core::int on) → void
+  ;
+static method d(core::int on) → void
+  ;
+static method on() → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue_47541.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_47541.dart.weak.transformed.expect
new file mode 100644
index 0000000..f57dd6f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47541.dart.weak.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+static method main() → void {
+  self::a();
+  self::b();
+  self::c(42);
+  self::d(42);
+}
+static method a() → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  self::on();
+}
+static method b() → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  function onX(dynamic e) → Null {
+    ;
+  }
+  onX(""){(dynamic) → Null};
+}
+static method c(core::int on) → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  on = 42;
+}
+static method d(core::int on) → void {
+  try {
+    ;
+  }
+  on core::Object catch(final core::Object e) {
+    ;
+  }
+  on self::Foo catch(no-exception-var) {
+    ;
+  }
+  on.{core::int::toString}(){() → core::String};
+}
+static method on() → void {}
diff --git a/pkg/front_end/testcases/general/map.dart b/pkg/front_end/testcases/general/map.dart
index 1ced1ab..b2e55ab 100644
--- a/pkg/front_end/testcases/general/map.dart
+++ b/pkg/front_end/testcases/general/map.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
+
 main() {
   print(new Map());
 }
diff --git a/pkg/front_end/testcases/general/map.dart.textual_outline.expect b/pkg/front_end/testcases/general/map.dart.textual_outline.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/map.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/map.dart.textual_outline.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/map.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/map.dart.textual_outline_modelled.expect
index 7c126a2..bae895a 100644
--- a/pkg/front_end/testcases/general/map.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/map.dart.textual_outline_modelled.expect
@@ -1,2 +1 @@
-// @dart = 2.9
 main() {}
diff --git a/pkg/front_end/testcases/general/map.dart.weak.expect b/pkg/front_end/testcases/general/map.dart.weak.expect
index c82d4a6..bdcc550 100644
--- a/pkg/front_end/testcases/general/map.dart.weak.expect
+++ b/pkg/front_end/testcases/general/map.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/map.dart.weak.modular.expect b/pkg/front_end/testcases/general/map.dart.weak.modular.expect
index c82d4a6..bdcc550 100644
--- a/pkg/front_end/testcases/general/map.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/map.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/map.dart.weak.outline.expect b/pkg/front_end/testcases/general/map.dart.weak.outline.expect
index 6a28c0d..e2cba6b 100644
--- a/pkg/front_end/testcases/general/map.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/map.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/map.dart.weak.transformed.expect b/pkg/front_end/testcases/general/map.dart.weak.transformed.expect
index c82d4a6..bdcc550 100644
--- a/pkg/front_end/testcases/general/map.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/map.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/metadata_enum.dart.textual_outline.expect b/pkg/front_end/testcases/general/metadata_enum.dart.textual_outline.expect
index 4e0154a..fcf0e3c 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,5 +1,7 @@
 // @dart = 2.9
 const a = null;
+
 @a
 enum E { E1, E2, E3 }
+
 main() {}
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 4e0154a..fcf0e3c 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,5 +1,7 @@
 // @dart = 2.9
 const a = null;
+
 @a
 enum E { E1, E2, E3 }
+
 main() {}
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 a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
@@ -46,5 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/general/metadata_enum.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
index a1967bf..cb38609 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
@@ -46,5 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/general/metadata_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
index a1967bf..cb38609 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
@@ -46,5 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/general/no_such_method_forwarder.dart.weak.transformed.expect b/pkg/front_end/testcases/general/no_such_method_forwarder.dart.weak.transformed.expect
index e545ab0..ad020a3 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
@@ -11,21 +11,21 @@
   method _foo() → void /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>* :return_value;
+    dynamic :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          _in::unsafeCast<Null>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          _in::unsafeCast<Null>(:result_or_exception);
           core::print("hello");
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -33,7 +33,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
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 3d879b8..a6a1585 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
@@ -11,16 +11,16 @@
   method foo(dynamic x) → asy::Future<void>* /* originally async */ {
     final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
     core::bool* :is_sync = false;
-    FutureOr<void>* :return_value;
+    void :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -28,7 +28,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -50,16 +50,16 @@
   method bar(dynamic x) → asy::Future<void>* /* originally async */ {
     final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
     core::bool* :is_sync = false;
-    FutureOr<void>* :return_value;
+    void :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -85,7 +85,7 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -93,19 +93,19 @@
   dynamic :saved_try_context_var0;
   self::B* :async_temporary_0;
   dynamic :async_temporary_1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         :async_temporary_1 = new self::A::•();
-        [yield] let dynamic #t1 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-        :async_temporary_1 = _in::unsafeCast<self::A*>(:async_temporary_1).{self::A::foo}(_in::unsafeCast<Null>(:result)){(dynamic) →* asy::Future<void>*};
+        [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_0 = new self::B::•();
-        [yield] let dynamic #t2 = asy::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) 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)){(dynamic) →* asy::Future<void>*});
+        [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>*});
         break #L3;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -113,7 +113,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 df43e6d..522ac94 100644
--- a/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/statements.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
   dynamic :saved_try_context_var2;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -36,8 +36,8 @@
               #L2:
               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, :async_op) in null;
-                if(_in::unsafeCast<core::bool>(:result)) {
+                [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)) {
                   dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                   {
                     if(:controller.{asy::_AsyncStarStreamController::add}(x){(dynamic) → core::bool})
@@ -55,8 +55,8 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-                :result;
+                [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;
               }
           }
         }
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 f6ea477..7730f84 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
@@ -37,19 +37,19 @@
 static method returnFutureDynamic() → asy::Future<dynamic>* /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = new self::Class::•();
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -57,26 +57,26 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* 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*>();
   core::bool* :is_sync = false;
-  FutureOr<self::Class*>* :return_value;
+  self::Class? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = new self::Class::•();
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -84,7 +84,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -97,7 +97,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -134,7 +134,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -169,7 +169,7 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -178,7 +178,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -189,8 +189,8 @@
             #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, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [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*>*};
                 {
                   core::print(cls);
@@ -201,12 +201,12 @@
             }
           finally
             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, :async_op) in null;
-              :result;
+              [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;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -214,7 +214,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart b/pkg/front_end/testcases/general/trailing_comma1.dart
new file mode 100644
index 0000000..ff2aae4
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.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.
+
+// @dart=2.16
+
+var c = new C();
+var z = 42;
+
+class C {
+  void instance1({z}) {}
+  void instance2(a, {z}) {}
+}
+
+main() {}
+
+class Bad {
+  method() {
+    c.instance1(z:z,,);
+    c.instance2(z:z,,);
+  }
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.textual_outline.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.textual_outline.expect
new file mode 100644
index 0000000..3e50c35
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+// @dart = 2.16
+var c = new C();
+var z = 42;
+
+class C {
+  void instance1({z}) {}
+  void instance2(a, {z}) {}
+}
+
+main() {}
+
+class Bad {
+  method() {}
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2eba650
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+// @dart = 2.16
+class Bad {
+  method() {}
+}
+
+class C {
+  void instance1({z}) {}
+  void instance2(a, {z}) {}
+}
+
+main() {}
+var c = new C();
+var z = 42;
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.expect
new file mode 100644
index 0000000..2749c0a
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected named argument.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected named argument.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:16: Error: No named parameter with the name '#1'.
+//     c.instance1(z:z,,);
+//                ^^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:16: Error: Too few positional arguments: 1 required, 0 given.
+//     c.instance2(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:19:16: Error: No named parameter with the name '#1'.
+    c.instance1(z:z,,);
+               ^^" in self::c.{self::C::instance1}{<inapplicable>}.(z: self::z, #1: invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected named argument.
+    c.instance1(z:z,,);
+                    ^"){({z: invalid-type, #1: invalid-type}) → invalid-type};
+    invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:20:16: Error: Too few positional arguments: 1 required, 0 given.
+    c.instance2(z:z,,);
+               ^" in self::c.{self::C::instance2}{<inapplicable>}.(z: self::z, #1: invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected named argument.
+    c.instance2(z:z,,);
+                    ^"){({z: invalid-type, #1: invalid-type}) → invalid-type};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.modular.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.modular.expect
new file mode 100644
index 0000000..2749c0a
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected named argument.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected named argument.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:16: Error: No named parameter with the name '#1'.
+//     c.instance1(z:z,,);
+//                ^^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:16: Error: Too few positional arguments: 1 required, 0 given.
+//     c.instance2(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:19:16: Error: No named parameter with the name '#1'.
+    c.instance1(z:z,,);
+               ^^" in self::c.{self::C::instance1}{<inapplicable>}.(z: self::z, #1: invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected named argument.
+    c.instance1(z:z,,);
+                    ^"){({z: invalid-type, #1: invalid-type}) → invalid-type};
+    invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:20:16: Error: Too few positional arguments: 1 required, 0 given.
+    c.instance2(z:z,,);
+               ^" in self::c.{self::C::instance2}{<inapplicable>}.(z: self::z, #1: invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected named argument.
+    c.instance2(z:z,,);
+                    ^"){({z: invalid-type, #1: invalid-type}) → invalid-type};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
new file mode 100644
index 0000000..5048b8e
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  method instance1({dynamic z}) → void
+    ;
+  method instance2(dynamic a, {dynamic z}) → void
+    ;
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    ;
+  method method() → dynamic
+    ;
+}
+static field self::C c;
+static field core::int z;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/trailing_comma1.dart.weak.transformed.expect b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.transformed.expect
new file mode 100644
index 0000000..2749c0a
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma1.dart.weak.transformed.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected named argument.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected named argument.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:19:16: Error: No named parameter with the name '#1'.
+//     c.instance1(z:z,,);
+//                ^^
+//
+// pkg/front_end/testcases/general/trailing_comma1.dart:20:16: Error: Too few positional arguments: 1 required, 0 given.
+//     c.instance2(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:19:16: Error: No named parameter with the name '#1'.
+    c.instance1(z:z,,);
+               ^^" in self::c.{self::C::instance1}{<inapplicable>}.(z: self::z, #1: invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:19:21: Error: Expected named argument.
+    c.instance1(z:z,,);
+                    ^"){({z: invalid-type, #1: invalid-type}) → invalid-type};
+    invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:20:16: Error: Too few positional arguments: 1 required, 0 given.
+    c.instance2(z:z,,);
+               ^" in self::c.{self::C::instance2}{<inapplicable>}.(z: self::z, #1: invalid-expression "pkg/front_end/testcases/general/trailing_comma1.dart:20:21: Error: Expected named argument.
+    c.instance2(z:z,,);
+                    ^"){({z: invalid-type, #1: invalid-type}) → invalid-type};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart b/pkg/front_end/testcases/general/trailing_comma2.dart
new file mode 100644
index 0000000..526fb97
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.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.
+
+var c = new C();
+var x = 42;
+var y = 42;
+
+class C {
+  operator []=(x, y, ) {}
+}
+
+main() {}
+
+class Bad {
+  method() {
+    c[x,] = y;
+  }
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart.textual_outline.expect b/pkg/front_end/testcases/general/trailing_comma2.dart.textual_outline.expect
new file mode 100644
index 0000000..d41b333
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+var c = new C();
+var x = 42;
+var y = 42;
+
+class C {
+  operator []=(
+    x,
+    y,
+  ) {}
+}
+
+main() {}
+
+class Bad {
+  method() {}
+}
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/trailing_comma2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..851e8ff
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class Bad {
+  method() {}
+}
+
+class C {
+  operator []=(
+    x,
+    y,
+  ) {}
+}
+
+main() {}
+var c = new C();
+var x = 42;
+var y = 42;
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart.weak.expect b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.expect
new file mode 100644
index 0000000..4c6695c
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart.weak.modular.expect b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.modular.expect
new file mode 100644
index 0000000..4c6695c
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart.weak.outline.expect b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.outline.expect
new file mode 100644
index 0000000..f35fcdc
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  operator []=(dynamic x, dynamic y) → void
+    ;
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    ;
+  method method() → dynamic
+    ;
+}
+static field self::C c;
+static field core::int x;
+static field core::int y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/trailing_comma2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4c6695c
--- /dev/null
+++ b/pkg/front_end/testcases/general/trailing_comma2.dart.weak.transformed.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
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 e955e1e..8967db1 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
@@ -4,22 +4,22 @@
   static method whatever() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello";
           break #L1;
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -27,7 +27,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -56,21 +56,21 @@
   static method main() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -78,7 +78,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
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 4f65073..0cfec60 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
@@ -4,22 +4,22 @@
   static method whatever() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello";
           break #L1;
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -27,7 +27,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -56,22 +56,22 @@
   static method main() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(libA::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
           dart.core::print("Done");
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -79,7 +79,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
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 5d54f1b..da879b3 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
@@ -22,21 +22,21 @@
   static method main() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -44,29 +44,29 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
   static method /* from org-dartlang-test:///myPart.dart */ whatever() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello";
           break #L2;
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -74,7 +74,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
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 d857553..44e9e46 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
@@ -22,21 +22,21 @@
   static method main() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -44,29 +44,29 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
   static method /* from org-dartlang-test:///myPart.dart */ whatever() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello!!!";
           break #L2;
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -74,7 +74,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
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 8da36e7..ca8efcb 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
@@ -22,22 +22,22 @@
   static method main() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(main::whatever(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           dart.core::print(#C2);
           dart.core::print("Done!");
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -45,29 +45,29 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
   static method /* from org-dartlang-test:///myPart.dart */ whatever() → 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;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (dart.core::Object*, dart.core::StackTrace*) →* dynamic :async_op_error;
     dart.core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error, :async_op) in null;
-          dart._internal::unsafeCast<Null>(:result);
+          [yield] let dynamic #t2 = dart.async::_awaitHelper(null, :async_op_then, :async_op_error) in null;
+          dart._internal::unsafeCast<Null>(:result_or_exception);
           :return_value = "hello!!!";
           break #L2;
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace* stack_trace) {
@@ -75,7 +75,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
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 cf7f401..8c98fe7 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
@@ -59,6 +59,7 @@
   ffi::DynamicLibrary,
   ffi::DynamicLibraryExtension,
   ffi::FfiNative,
+  ffi::Finalizable,
   ffi::Float,
   ffi::FloatArray,
   ffi::FloatPointer,
@@ -148,6 +149,7 @@
   ffi::DynamicLibrary,
   ffi::DynamicLibraryExtension,
   ffi::FfiNative,
+  ffi::Finalizable,
   ffi::Float,
   ffi::FloatArray,
   ffi::FloatPointer,
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 cb6c619..820c44b 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
@@ -59,6 +59,7 @@
   ffi::DynamicLibrary,
   ffi::DynamicLibraryExtension,
   ffi::FfiNative,
+  ffi::Finalizable,
   ffi::Float,
   ffi::FloatArray,
   ffi::FloatPointer,
@@ -148,6 +149,7 @@
   ffi::DynamicLibrary,
   ffi::DynamicLibraryExtension,
   ffi::FfiNative,
+  ffi::Finalizable,
   ffi::Float,
   ffi::FloatArray,
   ffi::FloatPointer,
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 919ede4..1e14f9c 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
@@ -29,13 +29,13 @@
 static method test() → void /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -52,19 +52,19 @@
         function test0() → asy::Future<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;
+          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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
                 :return_value = x0;
                 break #L2;
               }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
             on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -72,7 +72,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -84,7 +84,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L3:
               {
@@ -99,7 +99,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -111,7 +111,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L4:
               {
@@ -126,7 +126,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -138,7 +138,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L5:
               {
@@ -153,7 +153,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -165,7 +165,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L6:
               {
@@ -180,7 +180,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -192,7 +192,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L7:
               {
@@ -207,7 +207,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -219,7 +219,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
@@ -234,7 +234,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -246,7 +246,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -261,7 +261,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -273,7 +273,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
@@ -288,7 +288,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -300,7 +300,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
@@ -315,32 +315,32 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
-        [yield] let dynamic #t1 = asy::_awaitHelper(x0, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y0 = _in::unsafeCast<core::int*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(x1, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y1 = _in::unsafeCast<core::int*>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(x2, :async_op_then, :async_op_error, :async_op) in null;
-        asy::Future<core::int*>* y2 = _in::unsafeCast<asy::Future<core::int*>*>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(x3, :async_op_then, :async_op_error, :async_op) in null;
-        FutureOr<core::int*>* y3 = _in::unsafeCast<FutureOr<core::int*>*>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(x4, :async_op_then, :async_op_error, :async_op) in null;
-        self::MyFuture* y4 = _in::unsafeCast<self::MyFuture*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(x5, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y5 = _in::unsafeCast<core::int*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(x6, :async_op_then, :async_op_error, :async_op) in null;
-        asy::Future<core::int*>* y6 = _in::unsafeCast<asy::Future<core::int*>*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(x7, :async_op_then, :async_op_error, :async_op) in null;
-        FutureOr<core::int*>* y7 = _in::unsafeCast<FutureOr<core::int*>*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(x8, :async_op_then, :async_op_error, :async_op) in null;
-        self::MyFuture* y8 = _in::unsafeCast<self::MyFuture*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(x9, :async_op_then, :async_op_error, :async_op) in null;
-        core::int* y9 = _in::unsafeCast<core::int*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(x0, :async_op_then, :async_op_error) in null;
+        core::int* y0 = _in::unsafeCast<core::int*>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(x1, :async_op_then, :async_op_error) in null;
+        core::int* y1 = _in::unsafeCast<core::int*>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(x2, :async_op_then, :async_op_error) in null;
+        asy::Future<core::int*>* y2 = _in::unsafeCast<asy::Future<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(x3, :async_op_then, :async_op_error) in null;
+        FutureOr<core::int*>* y3 = _in::unsafeCast<FutureOr<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(x4, :async_op_then, :async_op_error) in null;
+        self::MyFuture* y4 = _in::unsafeCast<self::MyFuture*>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(x5, :async_op_then, :async_op_error) in null;
+        core::int* y5 = _in::unsafeCast<core::int*>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(x6, :async_op_then, :async_op_error) in null;
+        asy::Future<core::int*>* y6 = _in::unsafeCast<asy::Future<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(x7, :async_op_then, :async_op_error) in null;
+        FutureOr<core::int*>* y7 = _in::unsafeCast<FutureOr<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(x8, :async_op_then, :async_op_error) in null;
+        self::MyFuture* y8 = _in::unsafeCast<self::MyFuture*>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(x9, :async_op_then, :async_op_error) in null;
+        core::int* y9 = _in::unsafeCast<core::int*>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -348,7 +348,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 faa27c6..15fb18d 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
@@ -15,7 +15,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -30,7 +30,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 };
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 02f5546..7e432e9 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
@@ -6,19 +6,19 @@
 static field () →* asy::Future<core::int*>* f = () → asy::Future<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;
+  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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = 0;
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -26,7 +26,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 };
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 516b135..de99cb2 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
@@ -15,7 +15,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -30,7 +30,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 };
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 ab84cab..c321e3e 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
@@ -16,7 +16,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
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 946c0ba..81cc3b1 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
@@ -11,12 +11,12 @@
   () →* asy::Future<core::num*>* f = () → asy::Future<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;
+    core::num? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -29,7 +29,7 @@
             break #L1;
           }
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
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 35febb4..e5f6a32 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
@@ -16,7 +16,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -37,7 +37,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
index 6e67dc6..2e127fbc 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.weak.transformed.expect
@@ -15,7 +15,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L1:
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 2f681c5..2f60494 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
@@ -9,13 +9,13 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -27,7 +27,7 @@
           (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
           core::int* :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -42,16 +42,16 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         };
         asy::Future<dynamic>* y = f(){() →* asy::Future<Null>*};
         asy::Future<core::String*>* z = f(){() →* asy::Future<Null>*};
-        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Future<Null>*}, :async_op_then, :async_op_error, :async_op) in null;
-        core::String* s = _in::unsafeCast<Null>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Future<Null>*}, :async_op_then, :async_op_error) in null;
+        core::String* s = _in::unsafeCast<Null>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -59,7 +59,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 fbf4bc7..6f20ea7 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
@@ -9,13 +9,13 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -28,7 +28,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L2:
@@ -54,10 +54,10 @@
         };
         asy::Stream<dynamic>* y = f(){() →* asy::Stream<Null>*};
         asy::Stream<core::String*>* z = f(){() →* asy::Stream<Null>*};
-        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*}, :async_op_then, :async_op_error, :async_op) in null;
-        core::String* s = _in::unsafeCast<Null>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(f(){() →* asy::Stream<Null>*}.{asy::Stream::first}{asy::Future<Null>*}, :async_op_then, :async_op_error) in null;
+        core::String* s = _in::unsafeCast<Null>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -65,7 +65,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 0b4c6aa..9b64f1c 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
@@ -9,23 +9,23 @@
 static method main() → asy::Future<dynamic>* /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         dynamic d;
-        [yield] let dynamic #t1 = asy::_awaitHelper(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*)), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*), :async_op_then, :async_op_error) in null;
+        core::List<core::int*>* l0 = _in::unsafeCast<core::List<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::List<core::int*>*>(core::_GrowableList::_literal1<core::int*>(d as{TypeError,ForDynamic} core::int*)), :async_op_then, :async_op_error) in null;
+        core::List<core::int*>* l1 = _in::unsafeCast<core::List<core::int*>*>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -33,7 +33,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 acaf1c5..70f5a69 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
@@ -62,7 +62,7 @@
 static method f() → asy::Future<dynamic>* /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -71,7 +71,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -123,8 +123,8 @@
             #L2:
             while (true) {
               dynamic #t3 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t4 = 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)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {}
               }
@@ -133,8 +133,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -144,8 +144,8 @@
             #L3:
             while (true) {
               dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t7 = 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)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {}
               }
@@ -154,8 +154,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -165,8 +165,8 @@
             #L4:
             while (true) {
               dynamic #t9 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t10 = 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)) {
                 core::Object* x = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
                 {}
               }
@@ -175,8 +175,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null)) {
-              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -186,8 +186,8 @@
             #L5:
             while (true) {
               dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t13 = 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)) {
                 final dynamic #t14 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   d = #t14;
@@ -198,8 +198,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -209,8 +209,8 @@
             #L6:
             while (true) {
               dynamic #t16 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t17 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t17 = 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)) {
                 final core::Object* #t18 = :for-iterator.{asy::_StreamIterator::current}{core::Object*};
                 {
                   o = #t18;
@@ -221,12 +221,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::Object*>?} == null)) {
-              [yield] let dynamic #t19 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t19 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -234,14 +234,14 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → asy::Future<dynamic>* /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -250,7 +250,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -282,8 +282,8 @@
             #L8:
             while (true) {
               dynamic #t20 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t21 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t21 = 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)) {
                 core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 {}
               }
@@ -292,8 +292,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -303,8 +303,8 @@
             #L9:
             while (true) {
               dynamic #t23 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t24 = 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)) {
                 core::int* x = :for-iterator.{asy::_StreamIterator::current}{core::int*};
                 {}
               }
@@ -313,12 +313,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int*>?} == null)) {
-              [yield] let dynamic #t25 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t25 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -326,7 +326,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
index 2c8befb..7f9840f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
@@ -92,7 +92,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
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 e4fd3e1..d8e4b15 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
@@ -7,7 +7,7 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -16,7 +16,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -35,8 +35,8 @@
             #L2:
             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, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [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)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {}
               }
@@ -45,8 +45,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [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;
             }
         }
         core::int* y;
@@ -66,8 +66,8 @@
             #L3:
             while (true) {
               dynamic #t5 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t6 = 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)) {
                 final dynamic #t7 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   y = #t7 as{TypeError,ForDynamic} core::int*;
@@ -78,12 +78,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -91,7 +91,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 ab96b76..1b0b3a6 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
@@ -38,21 +38,21 @@
   asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -60,28 +60,28 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -89,26 +89,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           :return_value = 3;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           :return_value = 3;
           break #L4;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 bffba5ef..2945796 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
@@ -38,21 +38,21 @@
   asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -60,28 +60,28 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -89,26 +89,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           :return_value = 3;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           :return_value = 3;
           break #L4;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 37463d1..d075aa1 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
@@ -38,21 +38,21 @@
   self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -60,28 +60,28 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -89,26 +89,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           :return_value = 3;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           :return_value = 3;
           break #L4;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 90f1db4..ecea355 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
@@ -38,21 +38,21 @@
   self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((dynamic _) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -60,28 +60,28 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -89,26 +89,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           :return_value = 3;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           :return_value = 3;
           break #L4;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<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 39baeba..4c59d38 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
@@ -38,21 +38,21 @@
   asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -60,28 +60,28 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -89,26 +89,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           :return_value = 3;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           :return_value = 3;
           break #L4;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 6a2855eb..fdde079 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
@@ -38,21 +38,21 @@
   asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((dynamic _) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -60,28 +60,28 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::int*>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::int*>(:result_or_exception);
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -89,26 +89,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           :return_value = 3;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :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 */ {
     final asy::_Future<core::int*>* :async_future = new asy::_Future::•<core::int*>();
     core::bool* :is_sync = false;
-    FutureOr<core::int*>* :return_value;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           :return_value = 3;
           break #L4;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,7 +143,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -159,7 +159,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -174,7 +174,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -186,7 +186,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -201,7 +201,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((dynamic) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<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 204dbee..ca269fc 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
@@ -38,14 +38,14 @@
   asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,13 +53,13 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 608046f..d41c46d 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
@@ -38,14 +38,14 @@
   asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,13 +53,13 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 e32c9fb..353cbcc 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
@@ -38,14 +38,14 @@
   self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,13 +53,13 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 02b3b6b..fa9b07f 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
@@ -38,14 +38,14 @@
   self::MyFuture<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::bool* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,13 +53,13 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<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 e0176fc..862a146 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
@@ -38,14 +38,14 @@
   asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,13 +53,13 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(new self::MyFuture::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : new self::MyFuture::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((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 9fb5822..51cd23d 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
@@ -38,14 +38,14 @@
   asy::Future<core::int*>* t1 = f.{asy::Future::then}<core::int*>((core::bool* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -53,13 +53,13 @@
             :async_temporary_0 = 2;
           }
           else {
-            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<core::int*>*};
@@ -80,12 +80,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (_in::unsafeCast<core::bool*>(:result) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t2 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (_in::unsafeCast<core::bool*>(:result_or_exception) ?{core::Object*} 2 : asy::Future::value<core::int*>(3)) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -96,7 +96,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::bool*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* asy::Future<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 bf8be62..59febc8 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
@@ -38,21 +38,21 @@
   asy::Future<core::int*>* t1 = f.{self::MyFuture::then}<core::int*>((core::int* x) → asy::Future<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;
+    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;
     dynamic :saved_try_context_var0;
     core::int* :async_temporary_0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
           final core::int* #t1 = x;
           if(#t1 == null) {
-            [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error, :async_op) in null;
-            :async_temporary_0 = _in::unsafeCast<core::int*>(:result);
+            [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::value<core::int*>(3), :async_op_then, :async_op_error) in null;
+            :async_temporary_0 = _in::unsafeCast<core::int*>(:result_or_exception);
           }
           else {
             :async_temporary_0 = #t1;
@@ -60,7 +60,7 @@
           :return_value = _in::unsafeCast<core::int*>(:async_temporary_0);
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -68,7 +68,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<core::int*>*};
@@ -81,12 +81,12 @@
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result) in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
+          [yield] let dynamic #t3 = asy::_awaitHelper(x, :async_op_then, :async_op_error) in null;
+          :return_value = (let final core::int* #t4 = _in::unsafeCast<core::int*>(:result_or_exception) in #t4 == null ?{core::Object*} asy::Future::value<core::int*>(3) : #t4) as{TypeError} FutureOr<core::int*>*;
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -97,7 +97,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }){((core::int*) →* FutureOr<core::int*>*, {onError: core::Function*}) →* self::MyFuture<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 2dc93c6..ea1b07f 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
@@ -40,7 +40,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -55,7 +55,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -67,7 +67,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -82,7 +82,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -94,7 +94,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -110,7 +110,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 e56689e..110e697 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
@@ -40,7 +40,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -55,7 +55,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -67,7 +67,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -82,7 +82,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -94,7 +94,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -110,7 +110,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 3145f91..8d75a91 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
@@ -47,19 +47,19 @@
 static method g2() → asy::Future<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;
+  core::List<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = core::_GrowableList::_literal1<core::int*>(3);
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -79,7 +79,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 0bdd40c..c18f5d9 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
@@ -38,19 +38,19 @@
 static method g2() → asy::Future<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;
+  core::List<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = core::_GrowableList::_literal1<core::int*>(3);
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -70,7 +70,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -85,7 +85,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 925b980..e17a236 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
@@ -47,19 +47,19 @@
 static method g2() → asy::Future<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;
+  core::List<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = core::_GrowableList::_literal1<core::int*>(3);
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -67,7 +67,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -79,7 +79,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 e0915b4..87fe01a 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
@@ -38,19 +38,19 @@
 static method g2() → asy::Future<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;
+  core::List<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         :return_value = core::_GrowableList::_literal1<core::int*>(3);
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -70,7 +70,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -85,7 +85,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 ced25c9..719fe87 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
@@ -24,22 +24,22 @@
 static method foo() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         asy::Future<core::List<self::A*>*>* f1 = null;
         asy::Future<core::List<self::A*>*>* f2 = null;
-        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2)), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<core::List<self::A*>*>* merged = _in::unsafeCast<core::List<core::List<self::A*>*>>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<core::List<self::A*>*>(core::_GrowableList::_literal2<asy::Future<core::List<self::A*>*>*>(f1, f2)), :async_op_then, :async_op_error) in null;
+        core::List<core::List<self::A*>*>* merged = _in::unsafeCast<core::List<core::List<self::A*>*>>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -47,7 +47,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 ebe5e12..289f3bf 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
@@ -11,21 +11,21 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         asy::Future<core::String*>* f;
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::id<FutureOr<core::String*>*>(f), :async_op_then, :async_op_error, :async_op) in null;
-        core::String* s = _in::unsafeCast<core::String*>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::id<FutureOr<core::String*>*>(f), :async_op_then, :async_op_error) in null;
+        core::String* s = _in::unsafeCast<core::String*>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -33,7 +33,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 edb2427..0045a57 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
@@ -34,27 +34,27 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         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 = core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c);
-        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<self::A*>(lll), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<self::A*>* result = _in::unsafeCast<core::List<self::A*>>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c)), :async_op_then, :async_op_error, :async_op) in null;
-        core::List<self::A*>* result2 = _in::unsafeCast<core::List<self::A*>>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(asy::Future::wait<self::A*>(lll), :async_op_then, :async_op_error) in null;
+        core::List<self::A*>* result = _in::unsafeCast<core::List<self::A*>>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(asy::Future::wait<self::A*>(core::_GrowableList::_literal2<asy::Future<self::A*>*>(b, c)), :async_op_then, :async_op_error) in null;
+        core::List<self::A*>* result2 = _in::unsafeCast<core::List<self::A*>>(:result_or_exception);
         core::List<self::A*>* list = result;
         list = result2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -62,7 +62,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
index 304c78c..add860f 100644
--- a/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generator_closure.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L1:
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 3715d17..afb8f44 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
@@ -9,19 +9,19 @@
   function f1() → asy::Future<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;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
           :return_value = 42;
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -29,7 +29,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -39,19 +39,19 @@
   function f3() → asy::Future<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;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
           :return_value = 42;
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -59,7 +59,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -89,7 +89,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L3:
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 fef5b28..f060c75 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
@@ -58,7 +58,7 @@
   method foo(covariant-by-class self::Bar::T* t) → dynamic /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>* :return_value;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
@@ -67,7 +67,7 @@
     dynamic :saved_try_context_var1;
     dynamic :exception0;
     dynamic :stack_trace0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -78,8 +78,8 @@
               #L2:
               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, :async_op) in null;
-                if(_in::unsafeCast<core::bool>(:result)) {
+                [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)) {
                   core::String* i = :for-iterator.{asy::_StreamIterator::current}{core::String*};
                   {
                     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'.
@@ -92,12 +92,12 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String*>?} == null)) {
-                [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-                :result;
+                [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;
               }
           }
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -105,7 +105,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -127,7 +127,7 @@
   method foo(covariant-by-class self::Baz::S* t) → dynamic /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>* :return_value;
+    dynamic :return_value;
     (dynamic) →* dynamic :async_op_then;
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
@@ -136,7 +136,7 @@
     dynamic :saved_try_context_var1;
     dynamic :exception0;
     dynamic :stack_trace0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -147,8 +147,8 @@
               #L4:
               while (true) {
                 dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
-                [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-                if(_in::unsafeCast<core::bool>(:result)) {
+                [yield] let dynamic #t5 = 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)) {
                   self::Baz::T* i = :for-iterator.{asy::_StreamIterator::current}{self::Baz::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'.
@@ -162,12 +162,12 @@
               }
             finally
               if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Baz::T*>?} == null)) {
-                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-                :result;
+                [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+                :result_or_exception;
               }
           }
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -175,7 +175,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -244,7 +244,7 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -253,7 +253,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -265,8 +265,8 @@
             #L6:
             while (true) {
               dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t8 = 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)) {
                 self::Foo* x = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
                   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'.
@@ -280,8 +280,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t9 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -291,8 +291,8 @@
             #L7:
             while (true) {
               dynamic #t10 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t11 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t11 = 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)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::String* y = x as{TypeError,ForDynamic} core::String*;
@@ -303,8 +303,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t12 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -314,8 +314,8 @@
             #L8:
             while (true) {
               dynamic #t13 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t14 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t14 = 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)) {
                 final self::Foo* #t15 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
                   core::String* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'Foo' can't be assigned to a variable of type 'String'.
@@ -331,8 +331,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t16 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         dynamic z;
@@ -343,8 +343,8 @@
             #L9:
             while (true) {
               dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t18 = 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)) {
                 final self::Foo* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::Foo*};
                 {
                   z = #t19;
@@ -356,8 +356,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::Foo*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         asy::Stream<dynamic>* stream = myStream;
@@ -368,8 +368,8 @@
             #L10:
             while (true) {
               dynamic #t21 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t22 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t22 = 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)) {
                 final dynamic #t23 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   self::Foo* x = #t23 as{TypeError,ForDynamic} self::Foo*;
@@ -381,8 +381,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t24 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         dynamic stream2 = myStream;
@@ -393,8 +393,8 @@
             #L11:
             while (true) {
               dynamic #t25 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t26 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t26 = 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)) {
                 final dynamic #t27 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   self::Foo* x = #t27 as{TypeError,ForDynamic} self::Foo*;
@@ -406,8 +406,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t28 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::Map<core::String*, self::Foo*>* map = <core::String*, self::Foo*>{};
@@ -423,8 +423,8 @@
             #L12:
             while (true) {
               dynamic #t29 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t30 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t30 = 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)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::String* y = x as{TypeError,ForDynamic} core::String*;
@@ -435,12 +435,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t31 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t31 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -448,7 +448,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
index 7e8eab6..d228da5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline.expect
@@ -2,5 +2,6 @@
 library test;
 
 enum E { v1 }
+
 final x = E.v1;
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
index 7e8eab6..d228da5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.textual_outline_modelled.expect
@@ -2,5 +2,6 @@
 library test;
 
 enum E { v1 }
+
 final x = E.v1;
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/inference/inferred_type_is_enum.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/inference/inferred_type_is_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/inference/inferred_type_is_enum_values.dart.textual_outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
index 429c184..f7c5643 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline.expect
@@ -2,5 +2,6 @@
 library test;
 
 enum E { v1 }
+
 final x = E.values;
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
index 429c184..f7c5643 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.textual_outline_modelled.expect
@@ -2,5 +2,6 @@
 library test;
 
 enum E { v1 }
+
 final x = E.values;
 main() {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/inference/inferred_type_is_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/inference/inferred_type_is_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/inference/local_return_and_yield.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.weak.transformed.expect
index 1b77665..285cb47 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
@@ -26,7 +26,7 @@
     (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
     core::int* :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -44,7 +44,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -91,7 +91,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L2:
@@ -124,7 +124,7 @@
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
     dynamic :saved_try_context_var1;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L3:
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 9f7346a..d7f66be 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
@@ -25,7 +25,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -43,7 +43,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -90,7 +90,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
@@ -123,7 +123,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
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 aa020dd..2eaaf2a 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
@@ -30,7 +30,7 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -39,7 +39,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -66,8 +66,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = 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)) {
                 final dynamic #t4 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::int* x = #t4 as{TypeError,ForDynamic} core::int*;
@@ -78,8 +78,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         core::int* y;
@@ -105,8 +105,8 @@
             #L3:
             while (true) {
               dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t8 = 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)) {
                 final dynamic #t9 = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   y = #t9 as{TypeError,ForDynamic} core::int*;
@@ -117,12 +117,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -130,7 +130,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 2ad99fc..703f7d8 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
@@ -46,7 +46,7 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -55,7 +55,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -80,8 +80,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = 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)) {
                 final self::A* #t4 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   a = #t4;
@@ -92,8 +92,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -112,8 +112,8 @@
             #L3:
             while (true) {
               dynamic #t7 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t8 = 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)) {
                 final self::A* #t9 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   b = #t9 as{TypeError} self::B*;
@@ -124,8 +124,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t10 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -148,8 +148,8 @@
             #L4:
             while (true) {
               dynamic #t12 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t13 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t13 = 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)) {
                 final self::A* #t14 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   i = invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:16: Error: A value of type 'A' can't be assigned to a variable of type 'int'.
@@ -164,8 +164,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t15 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         {
@@ -184,8 +184,8 @@
             #L5:
             while (true) {
               dynamic #t17 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t18 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t18 = 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)) {
                 final self::A* #t19 = :for-iterator.{asy::_StreamIterator::current}{self::A*};
                 {
                   a = #t19;
@@ -196,12 +196,12 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<self::A*>?} == null)) {
-              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t20 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -209,7 +209,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 079f495..5595103 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
@@ -139,7 +139,7 @@
 static method hest() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :return_value;
   (dynamic) → dynamic :async_op_then;
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
@@ -148,7 +148,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -159,8 +159,8 @@
             #L2:
             while (true) {
               dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t7 = 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)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -171,14 +171,14 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -186,19 +186,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method fisk() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -227,12 +227,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t12 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  :return_value = :result;
+                  [yield] let dynamic #t12 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                  :return_value = :result_or_exception;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -243,14 +243,14 @@
               }
             :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
             :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(){() → dynamic};
+            :async_op(null, null){() → dynamic};
             :is_sync = true;
             return :async_future;
           } : #t11{core::Function};
         function #f#set(core::Function f#param) → dynamic
           return #f = f#param;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -258,7 +258,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -270,4 +270,4 @@
 
 Extra constant evaluation status:
 Evaluated: VariableGet @ org-dartlang-testcase:///later.dart:46:18 -> IntConstant(42)
-Extra constant evaluation: evaluated: 204, effectively constant: 1
+Extra constant evaluation: evaluated: 201, effectively constant: 1
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 c43553e..7d0a057 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
@@ -159,7 +159,7 @@
 static method hest() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :return_value;
   (dynamic) → dynamic :async_op_then;
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
@@ -168,7 +168,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -179,8 +179,8 @@
             #L2:
             while (true) {
               dynamic #t6 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t7 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t7 = 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)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -191,14 +191,14 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t8 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -206,19 +206,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method fisk() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -265,12 +265,12 @@
               core::int :await_jump_var = 0;
               dynamic :await_ctx_var;
               dynamic :saved_try_context_var0;
-              function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+              function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
                 try {
                   #L4:
                   {
-                    [yield] let dynamic #t9 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                    :return_value = :result;
+                    [yield] let dynamic #t9 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                    :return_value = :result_or_exception;
                     break #L4;
                   }
                   asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -281,7 +281,7 @@
                 }
               :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
               :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-              :async_op(){() → dynamic};
+              :async_op(null, null){() → dynamic};
               :is_sync = true;
               return :async_future;
             };
@@ -294,7 +294,7 @@
           return #f = f#param;
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -302,7 +302,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/macros/augment_class.dart b/pkg/front_end/testcases/macros/augment_class.dart
new file mode 100644
index 0000000..f347f88
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart
@@ -0,0 +1,13 @@
+// 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.
+
+class Super {}
+mixin Mixin {}
+
+augment class Class1 {}
+abstract augment class Class2 {}
+augment class Class3 = Super with Mixin;
+abstract augment class Class4 = Super with Mixin;
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.strong.expect b/pkg/front_end/testcases/macros/augment_class.dart.strong.expect
new file mode 100644
index 0000000..668cf12
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.strong.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: 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'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Error: Expected ';' after this.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class2 {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9: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'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: Expected ';' after this.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Context: Previous declaration of 'augment'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: 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'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: Expected ';' after this.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: 'augment' is already declared in this scope.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Context: Previous declaration of 'augment'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class4 = Super with Mixin;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11: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'.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: Expected ';' after this.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Context: Previous declaration of 'augment'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static field dynamic augment;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/augment_class.dart.strong.transformed.expect
new file mode 100644
index 0000000..3a1d218
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.strong.transformed.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: 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'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Error: Expected ';' after this.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class2 {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9: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'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: Expected ';' after this.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Context: Previous declaration of 'augment'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: 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'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: Expected ';' after this.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: 'augment' is already declared in this scope.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Context: Previous declaration of 'augment'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class4 = Super with Mixin;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11: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'.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: Expected ';' after this.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Context: Previous declaration of 'augment'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static field dynamic augment;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.textual_outline.expect b/pkg/front_end/testcases/macros/augment_class.dart.textual_outline.expect
new file mode 100644
index 0000000..20a8a72
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+class Super {}
+mixin Mixin {}
+augment ;
+class Class1 {}
+abstract augment ;
+class Class2 {}
+augment ;
+class Class3 = Super with Mixin;
+abstract augment ;
+class Class4 = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.expect
new file mode 100644
index 0000000..668cf12
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: 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'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Error: Expected ';' after this.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class2 {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9: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'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: Expected ';' after this.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Context: Previous declaration of 'augment'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: 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'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: Expected ';' after this.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: 'augment' is already declared in this scope.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Context: Previous declaration of 'augment'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class4 = Super with Mixin;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11: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'.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: Expected ';' after this.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Context: Previous declaration of 'augment'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static field dynamic augment;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.modular.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.modular.expect
new file mode 100644
index 0000000..668cf12
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: 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'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Error: Expected ';' after this.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class2 {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9: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'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: Expected ';' after this.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Context: Previous declaration of 'augment'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: 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'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: Expected ';' after this.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: 'augment' is already declared in this scope.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Context: Previous declaration of 'augment'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class4 = Super with Mixin;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11: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'.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: Expected ';' after this.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Context: Previous declaration of 'augment'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static field dynamic augment;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.outline.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.outline.expect
new file mode 100644
index 0000000..63bb31a
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.outline.expect
@@ -0,0 +1,101 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: 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'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Error: Expected ';' after this.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class2 {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9: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'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: Expected ';' after this.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Context: Previous declaration of 'augment'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: 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'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: Expected ';' after this.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: 'augment' is already declared in this scope.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Context: Previous declaration of 'augment'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class4 = Super with Mixin;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11: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'.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: Expected ';' after this.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Context: Previous declaration of 'augment'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    ;
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    ;
+}
+class Class3 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+class Class4 = self::Super with self::Mixin {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static field dynamic augment;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/macros/augment_class.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/augment_class.dart.weak.transformed.expect
new file mode 100644
index 0000000..3a1d218
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_class.dart.weak.transformed.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: 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'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Error: Expected ';' after this.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class2 {}
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9: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'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: Expected ';' after this.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:8:1: Context: Previous declaration of 'augment'.
+// augment class Class1 {}
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: 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'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: Expected ';' after this.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Error: 'augment' is already declared in this scope.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:9:10: Context: Previous declaration of 'augment'.
+// abstract augment class Class2 {}
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:1: Error: Can't have modifier 'abstract' here.
+// Try removing 'abstract'.
+// abstract augment class Class4 = Super with Mixin;
+// ^^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11: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'.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: Expected ';' after this.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+//
+// pkg/front_end/testcases/macros/augment_class.dart:11:10: Error: 'augment' is already declared in this scope.
+// abstract augment class Class4 = Super with Mixin;
+//          ^^^^^^^
+// pkg/front_end/testcases/macros/augment_class.dart:10:1: Context: Previous declaration of 'augment'.
+// augment class Class3 = Super with Mixin;
+// ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+class Class1 extends core::Object {
+  synthetic constructor •() → self::Class1
+    : super core::Object::•()
+    ;
+}
+class Class2 extends core::Object {
+  synthetic constructor •() → self::Class2
+    : super core::Object::•()
+    ;
+}
+class Class3 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class3
+    : super self::Super::•()
+    ;
+}
+class Class4 extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class4
+    : super self::Super::•()
+    ;
+}
+static field dynamic augment;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/macros/class_members.dart b/pkg/front_end/testcases/macros/class_members.dart
new file mode 100644
index 0000000..12aa818
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart
@@ -0,0 +1,37 @@
+// 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 augment 'class_members_lib.dart';
+
+class Class {
+  void existingMethod() {
+    print('existingMethod-origin');
+  }
+
+  external void augmentedMethod();
+
+  void set existingSetter(_) {
+    print('existingSetter-origin');
+  }
+
+  external void set augmentedSetter(_);
+}
+
+test(Class c) {
+  c.orphanedMethod();
+  c.orphanedSetter = 0;
+}
+
+main() {
+  Class c = new Class();
+  c.augmentedMethod();
+  c.injectedMethod();
+  c.existingMethod();
+
+  c.augmentedSetter = 0;
+  c.injectedSetter = 0;
+  c.existingSetter = 0;
+
+  injectedMethod(c);
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/class_members.dart.strong.expect b/pkg/front_end/testcases/macros/class_members.dart.strong.expect
new file mode 100644
index 0000000..52ceeba
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.strong.expect
@@ -0,0 +1,111 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:9:8: Error: Member 'existingMethod' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:8:8: Context: This is the existing member.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:15:16: Error: Augmentation member 'orphanedMethod' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void orphanedMethod() {
+//                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:21:12: Error: Member 'existingSetter' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:14:12: Context: This is the existing member.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:27:20: Error: Augmentation member 'orphanedSetter' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void set orphanedSetter(_) {
+//                    ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+//   c.orphanedMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+//   c.orphanedSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///class_members.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method existingMethod() → void {
+    core::print("existingMethod-origin");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedMethod() → void {
+    core::print("augmentedMethod");
+  }
+  set existingSetter(dynamic _) → void {
+    core::print("existingSetter-origin");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedSetter(dynamic _) → void {
+    core::print("augmentedSetter");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod() → void {
+    core::print("injectedMethod");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedMethod() → void {
+    core::print("orphanedMethod");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ injectedSetter(dynamic _) → void {
+    core::print("injectedSetter");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedSetter(dynamic _) → void {
+    core::print("orphanedSetter");
+  }
+}
+static method test(self::Class c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+  c.orphanedMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedMethod();
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+  c.orphanedSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedSetter = 0;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+  self::injectedMethod(c);
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentTest(self::Class c) → void {
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedSetter} = 0;
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod(self::Class c) → void {
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+}
diff --git a/pkg/front_end/testcases/macros/class_members.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/class_members.dart.strong.transformed.expect
new file mode 100644
index 0000000..52ceeba
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.strong.transformed.expect
@@ -0,0 +1,111 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:9:8: Error: Member 'existingMethod' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:8:8: Context: This is the existing member.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:15:16: Error: Augmentation member 'orphanedMethod' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void orphanedMethod() {
+//                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:21:12: Error: Member 'existingSetter' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:14:12: Context: This is the existing member.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:27:20: Error: Augmentation member 'orphanedSetter' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void set orphanedSetter(_) {
+//                    ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+//   c.orphanedMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+//   c.orphanedSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///class_members.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method existingMethod() → void {
+    core::print("existingMethod-origin");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedMethod() → void {
+    core::print("augmentedMethod");
+  }
+  set existingSetter(dynamic _) → void {
+    core::print("existingSetter-origin");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedSetter(dynamic _) → void {
+    core::print("augmentedSetter");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod() → void {
+    core::print("injectedMethod");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedMethod() → void {
+    core::print("orphanedMethod");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ injectedSetter(dynamic _) → void {
+    core::print("injectedSetter");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedSetter(dynamic _) → void {
+    core::print("orphanedSetter");
+  }
+}
+static method test(self::Class c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+  c.orphanedMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedMethod();
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+  c.orphanedSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedSetter = 0;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+  self::injectedMethod(c);
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentTest(self::Class c) → void {
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedSetter} = 0;
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod(self::Class c) → void {
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+}
diff --git a/pkg/front_end/testcases/macros/class_members.dart.textual_outline.expect b/pkg/front_end/testcases/macros/class_members.dart.textual_outline.expect
new file mode 100644
index 0000000..c5c8d44
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+import augment 'class_members_lib.dart';
+class Class {
+  void existingMethod() {}
+  external void augmentedMethod();
+  void set existingSetter(_) {}
+  external void set augmentedSetter(_);
+}
+test(Class c) {}
+main() {}
diff --git a/pkg/front_end/testcases/macros/class_members.dart.weak.expect b/pkg/front_end/testcases/macros/class_members.dart.weak.expect
new file mode 100644
index 0000000..52ceeba
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.weak.expect
@@ -0,0 +1,111 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:9:8: Error: Member 'existingMethod' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:8:8: Context: This is the existing member.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:15:16: Error: Augmentation member 'orphanedMethod' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void orphanedMethod() {
+//                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:21:12: Error: Member 'existingSetter' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:14:12: Context: This is the existing member.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:27:20: Error: Augmentation member 'orphanedSetter' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void set orphanedSetter(_) {
+//                    ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+//   c.orphanedMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+//   c.orphanedSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///class_members.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method existingMethod() → void {
+    core::print("existingMethod-origin");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedMethod() → void {
+    core::print("augmentedMethod");
+  }
+  set existingSetter(dynamic _) → void {
+    core::print("existingSetter-origin");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedSetter(dynamic _) → void {
+    core::print("augmentedSetter");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod() → void {
+    core::print("injectedMethod");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedMethod() → void {
+    core::print("orphanedMethod");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ injectedSetter(dynamic _) → void {
+    core::print("injectedSetter");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedSetter(dynamic _) → void {
+    core::print("orphanedSetter");
+  }
+}
+static method test(self::Class c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+  c.orphanedMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedMethod();
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+  c.orphanedSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedSetter = 0;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+  self::injectedMethod(c);
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentTest(self::Class c) → void {
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedSetter} = 0;
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod(self::Class c) → void {
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+}
diff --git a/pkg/front_end/testcases/macros/class_members.dart.weak.modular.expect b/pkg/front_end/testcases/macros/class_members.dart.weak.modular.expect
new file mode 100644
index 0000000..52ceeba
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.weak.modular.expect
@@ -0,0 +1,111 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:9:8: Error: Member 'existingMethod' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:8:8: Context: This is the existing member.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:15:16: Error: Augmentation member 'orphanedMethod' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void orphanedMethod() {
+//                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:21:12: Error: Member 'existingSetter' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:14:12: Context: This is the existing member.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:27:20: Error: Augmentation member 'orphanedSetter' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void set orphanedSetter(_) {
+//                    ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+//   c.orphanedMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+//   c.orphanedSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///class_members.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method existingMethod() → void {
+    core::print("existingMethod-origin");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedMethod() → void {
+    core::print("augmentedMethod");
+  }
+  set existingSetter(dynamic _) → void {
+    core::print("existingSetter-origin");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedSetter(dynamic _) → void {
+    core::print("augmentedSetter");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod() → void {
+    core::print("injectedMethod");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedMethod() → void {
+    core::print("orphanedMethod");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ injectedSetter(dynamic _) → void {
+    core::print("injectedSetter");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedSetter(dynamic _) → void {
+    core::print("orphanedSetter");
+  }
+}
+static method test(self::Class c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+  c.orphanedMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedMethod();
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+  c.orphanedSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedSetter = 0;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+  self::injectedMethod(c);
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentTest(self::Class c) → void {
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedSetter} = 0;
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod(self::Class c) → void {
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+}
diff --git a/pkg/front_end/testcases/macros/class_members.dart.weak.outline.expect b/pkg/front_end/testcases/macros/class_members.dart.weak.outline.expect
new file mode 100644
index 0000000..49e7b51
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.weak.outline.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:9:8: Error: Member 'existingMethod' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:8:8: Context: This is the existing member.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:15:16: Error: Augmentation member 'orphanedMethod' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void orphanedMethod() {
+//                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:21:12: Error: Member 'existingSetter' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:14:12: Context: This is the existing member.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:27:20: Error: Augmentation member 'orphanedSetter' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void set orphanedSetter(_) {
+//                    ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///class_members.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  method existingMethod() → void
+    ;
+  external method augmentedMethod() → void;
+  set existingSetter(dynamic _) → void
+    ;
+  external set augmentedSetter(dynamic _) → void;
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod() → void
+    ;
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedMethod() → void
+    ;
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ injectedSetter(dynamic _) → void
+    ;
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedSetter(dynamic _) → void
+    ;
+}
+static method test(self::Class c) → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentTest(self::Class c) → void
+  ;
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod(self::Class c) → void
+  ;
diff --git a/pkg/front_end/testcases/macros/class_members.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/class_members.dart.weak.transformed.expect
new file mode 100644
index 0000000..52ceeba
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members.dart.weak.transformed.expect
@@ -0,0 +1,111 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:9:8: Error: Member 'existingMethod' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:8:8: Context: This is the existing member.
+//   void existingMethod() {
+//        ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:15:16: Error: Augmentation member 'orphanedMethod' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void orphanedMethod() {
+//                ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:21:12: Error: Member 'existingSetter' conflicts with an existing member of the same name in the augmented class.
+// Try changing the name to an existing member or adding an 'augment' modifier.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/macros/class_members.dart:14:12: Context: This is the existing member.
+//   void set existingSetter(_) {
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members_lib.dart:27:20: Error: Augmentation member 'orphanedSetter' doesn't match a member in the augmented class.
+// Try changing the name to an existing member or removing the 'augment' modifier.
+//   augment void set orphanedSetter(_) {
+//                    ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+//   c.orphanedMethod();
+//     ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+//  - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+//   c.orphanedSetter = 0;
+//     ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///class_members.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method existingMethod() → void {
+    core::print("existingMethod-origin");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedMethod() → void {
+    core::print("augmentedMethod");
+  }
+  set existingSetter(dynamic _) → void {
+    core::print("existingSetter-origin");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ augmentedSetter(dynamic _) → void {
+    core::print("augmentedSetter");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod() → void {
+    core::print("injectedMethod");
+  }
+  method /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedMethod() → void {
+    core::print("orphanedMethod");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ injectedSetter(dynamic _) → void {
+    core::print("injectedSetter");
+  }
+  set /* from org-dartlang-testcase:///class_members_lib.dart */ orphanedSetter(dynamic _) → void {
+    core::print("orphanedSetter");
+  }
+}
+static method test(self::Class c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:22:5: Error: The method 'orphanedMethod' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'orphanedMethod'.
+  c.orphanedMethod();
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedMethod();
+  invalid-expression "pkg/front_end/testcases/macros/class_members.dart:23:5: Error: The setter 'orphanedSetter' isn't defined for the class 'Class'.
+ - 'Class' is from 'pkg/front_end/testcases/macros/class_members.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'orphanedSetter'.
+  c.orphanedSetter = 0;
+    ^^^^^^^^^^^^^^" in c{<unresolved>}.orphanedSetter = 0;
+}
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+  self::injectedMethod(c);
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ augmentTest(self::Class c) → void {
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedMethod}(){() → void};
+  c.{self::Class::orphanedSetter} = 0;
+}
+static method /* from org-dartlang-testcase:///class_members_lib.dart */ injectedMethod(self::Class c) → void {
+  c.{self::Class::augmentedMethod}(){() → void};
+  c.{self::Class::injectedMethod}(){() → void};
+  c.{self::Class::existingMethod}(){() → void};
+  c.{self::Class::augmentedSetter} = 0;
+  c.{self::Class::injectedSetter} = 0;
+  c.{self::Class::existingSetter} = 0;
+}
diff --git a/pkg/front_end/testcases/macros/class_members_lib.dart b/pkg/front_end/testcases/macros/class_members_lib.dart
new file mode 100644
index 0000000..a5952d5
--- /dev/null
+++ b/pkg/front_end/testcases/macros/class_members_lib.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.
+
+augment class Class {
+  augment void augmentedMethod() {
+    print('augmentedMethod');
+  }
+  void existingMethod() {
+    print('existingMethod-duplicate');
+  }
+  void injectedMethod() {
+    print('injectedMethod');
+  }
+  augment void orphanedMethod() {
+    print('orphanedMethod');
+  }
+  augment void set augmentedSetter(_) {
+    print('augmentedSetter');
+  }
+  void set existingSetter(_) {
+    print('existingSetter-duplicate');
+  }
+  void set injectedSetter(_) {
+    print('injectedSetter');
+  }
+  augment void set orphanedSetter(_) {
+    print('orphanedSetter');
+  }
+}
+
+void augmentTest(Class c) {
+  c.orphanedMethod();
+  c.orphanedMethod();
+  c.orphanedSetter = 0;
+}
+
+void injectedMethod(Class c) {
+  c.augmentedMethod();
+  c.injectedMethod();
+  c.existingMethod();
+
+  c.augmentedSetter = 0;
+  c.injectedSetter = 0;
+  c.existingSetter = 0;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart b/pkg/front_end/testcases/macros/inject_constructor.dart
new file mode 100644
index 0000000..afcc246
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.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 augment 'inject_constructor_lib.dart';
+
+class Class {}
+
+main() {
+  new Class();
+  new Class.named();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.strong.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.strong.expect
new file mode 100644
index 0000000..d9deb42
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.strong.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inject_constructor.dart";
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•() {
+    core::print("injected");
+  }
+  constructor named() → self::Class
+    : super core::Object::•() {
+    core::print("named-injected");
+  }
+}
+static method main() → dynamic {
+  new self::Class::•();
+  new self::Class::named();
+}
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..d9deb42
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.strong.transformed.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inject_constructor.dart";
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•() {
+    core::print("injected");
+  }
+  constructor named() → self::Class
+    : super core::Object::•() {
+    core::print("named-injected");
+  }
+}
+static method main() → dynamic {
+  new self::Class::•();
+  new self::Class::named();
+}
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..5acdeb8
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import augment 'inject_constructor_lib.dart';
+class Class {}
+main() {}
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.weak.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.expect
new file mode 100644
index 0000000..d9deb42
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inject_constructor.dart";
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•() {
+    core::print("injected");
+  }
+  constructor named() → self::Class
+    : super core::Object::•() {
+    core::print("named-injected");
+  }
+}
+static method main() → dynamic {
+  new self::Class::•();
+  new self::Class::named();
+}
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..d9deb42
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.modular.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inject_constructor.dart";
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•() {
+    core::print("injected");
+  }
+  constructor named() → self::Class
+    : super core::Object::•() {
+    core::print("named-injected");
+  }
+}
+static method main() → dynamic {
+  new self::Class::•();
+  new self::Class::named();
+}
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..254320af
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.outline.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inject_constructor.dart";
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    ;
+  constructor named() → self::Class
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/macros/inject_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..d9deb42
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor.dart.weak.transformed.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///inject_constructor.dart";
+
+class Class extends core::Object {
+  constructor •() → self::Class
+    : super core::Object::•() {
+    core::print("injected");
+  }
+  constructor named() → self::Class
+    : super core::Object::•() {
+    core::print("named-injected");
+  }
+}
+static method main() → dynamic {
+  new self::Class::•();
+  new self::Class::named();
+}
diff --git a/pkg/front_end/testcases/macros/inject_constructor_lib.dart b/pkg/front_end/testcases/macros/inject_constructor_lib.dart
new file mode 100644
index 0000000..8087132
--- /dev/null
+++ b/pkg/front_end/testcases/macros/inject_constructor_lib.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.
+
+augment class Class {
+  Class() {
+    print('injected');
+  }
+  Class.named() {
+    print('named-injected');
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index 3d6a84f..b40f872 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -30,8 +30,10 @@
 general/implement_semi_stub: TypeCheckError
 general/implicit_super_call: TypeCheckError
 general/infer_field_from_multiple: TypeCheckError
+general/infer_field_from_multiple2: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
+general/invocations: TypeCheckError
 general/issue41210a: TypeCheckError
 general/issue41210b/issue41210.no_link: TypeCheckError
 general/issue41210b/issue41210: TypeCheckError
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart
new file mode 100644
index 0000000..ef112c2
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.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.
+
+var c = new C();
+var z = 42;
+
+class C {
+  void instance1({z}) {}
+  void instance2(a, {z}) {}
+}
+
+main() {}
+
+class Bad {
+  method() {
+    c.instance1(z:z,,);
+    c.instance2(z:z,,);
+  }
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.strong.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.strong.expect
new file mode 100644
index 0000000..d746f85
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.strong.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     c.instance1(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    let final core::int #t1 = self::z in invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    c.instance1(z:z,,);
+               ^" in self::c.{self::C::instance1}{<inapplicable>}.(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: This couldn't be parsed.
+    c.instance1(z:z,,);
+                    ^", z: #t1){(invalid-type, {z: invalid-type}) → invalid-type};
+    let final self::C #t2 = self::c in let final core::int #t3 = self::z in #t2.{self::C::instance2}(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: This couldn't be parsed.
+    c.instance2(z:z,,);
+                    ^", z: #t3){(dynamic, {z: dynamic}) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.strong.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.strong.transformed.expect
new file mode 100644
index 0000000..d746f85
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.strong.transformed.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     c.instance1(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    let final core::int #t1 = self::z in invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    c.instance1(z:z,,);
+               ^" in self::c.{self::C::instance1}{<inapplicable>}.(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: This couldn't be parsed.
+    c.instance1(z:z,,);
+                    ^", z: #t1){(invalid-type, {z: invalid-type}) → invalid-type};
+    let final self::C #t2 = self::c in let final core::int #t3 = self::z in #t2.{self::C::instance2}(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: This couldn't be parsed.
+    c.instance2(z:z,,);
+                    ^", z: #t3){(dynamic, {z: dynamic}) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.textual_outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.textual_outline.expect
new file mode 100644
index 0000000..7fd0fbc
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+var c = new C();
+var z = 42;
+
+class C {
+  void instance1({z}) {}
+  void instance2(a, {z}) {}
+}
+
+main() {}
+
+class Bad {
+  method() {}
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..05f37b7
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class Bad {
+  method() {}
+}
+
+class C {
+  void instance1({z}) {}
+  void instance2(a, {z}) {}
+}
+
+main() {}
+var c = new C();
+var z = 42;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.expect
new file mode 100644
index 0000000..d746f85
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     c.instance1(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    let final core::int #t1 = self::z in invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    c.instance1(z:z,,);
+               ^" in self::c.{self::C::instance1}{<inapplicable>}.(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: This couldn't be parsed.
+    c.instance1(z:z,,);
+                    ^", z: #t1){(invalid-type, {z: invalid-type}) → invalid-type};
+    let final self::C #t2 = self::c in let final core::int #t3 = self::z in #t2.{self::C::instance2}(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: This couldn't be parsed.
+    c.instance2(z:z,,);
+                    ^", z: #t3){(dynamic, {z: dynamic}) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.modular.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.modular.expect
new file mode 100644
index 0000000..d746f85
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.modular.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     c.instance1(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    let final core::int #t1 = self::z in invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    c.instance1(z:z,,);
+               ^" in self::c.{self::C::instance1}{<inapplicable>}.(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: This couldn't be parsed.
+    c.instance1(z:z,,);
+                    ^", z: #t1){(invalid-type, {z: invalid-type}) → invalid-type};
+    let final self::C #t2 = self::c in let final core::int #t3 = self::z in #t2.{self::C::instance2}(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: This couldn't be parsed.
+    c.instance2(z:z,,);
+                    ^", z: #t3){(dynamic, {z: dynamic}) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
new file mode 100644
index 0000000..5048b8e
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  method instance1({dynamic z}) → void
+    ;
+  method instance2(dynamic a, {dynamic z}) → void
+    ;
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    ;
+  method method() → dynamic
+    ;
+}
+static field self::C c;
+static field core::int z;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.transformed.expect
new file mode 100644
index 0000000..d746f85
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart.weak.transformed.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance1(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: Expected an identifier, but got ','.
+// Try inserting an identifier before ','.
+//     c.instance2(z:z,,);
+//                     ^
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+// Try removing the extra positional arguments.
+//     c.instance1(z:z,,);
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  method instance1({dynamic z = #C1}) → void {}
+  method instance2(dynamic a, {dynamic z = #C1}) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    let final core::int #t1 = self::z in invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:16: Error: Too many positional arguments: 0 allowed, but 1 found.
+Try removing the extra positional arguments.
+    c.instance1(z:z,,);
+               ^" in self::c.{self::C::instance1}{<inapplicable>}.(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:17:21: Error: This couldn't be parsed.
+    c.instance1(z:z,,);
+                    ^", z: #t1){(invalid-type, {z: invalid-type}) → invalid-type};
+    let final self::C #t2 = self::c in let final core::int #t3 = self::z in #t2.{self::C::instance2}(invalid-expression "pkg/front_end/testcases/named_arguments_anywhere/trailing_comma1.dart:18:21: Error: This couldn't be parsed.
+    c.instance2(z:z,,);
+                    ^", z: #t3){(dynamic, {z: dynamic}) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int z = 42;
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart
new file mode 100644
index 0000000..526fb97
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.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.
+
+var c = new C();
+var x = 42;
+var y = 42;
+
+class C {
+  operator []=(x, y, ) {}
+}
+
+main() {}
+
+class Bad {
+  method() {
+    c[x,] = y;
+  }
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.strong.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.strong.expect
new file mode 100644
index 0000000..2dc8be9
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.strong.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.strong.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.strong.transformed.expect
new file mode 100644
index 0000000..2dc8be9
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.strong.transformed.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.textual_outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.textual_outline.expect
new file mode 100644
index 0000000..d41b333
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+var c = new C();
+var x = 42;
+var y = 42;
+
+class C {
+  operator []=(
+    x,
+    y,
+  ) {}
+}
+
+main() {}
+
+class Bad {
+  method() {}
+}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..851e8ff
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class Bad {
+  method() {}
+}
+
+class C {
+  operator []=(
+    x,
+    y,
+  ) {}
+}
+
+main() {}
+var c = new C();
+var x = 42;
+var y = 42;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.expect
new file mode 100644
index 0000000..2dc8be9
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.modular.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.modular.expect
new file mode 100644
index 0000000..2dc8be9
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.modular.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.outline.expect
new file mode 100644
index 0000000..f35fcdc
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  operator []=(dynamic x, dynamic y) → void
+    ;
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    ;
+  method method() → dynamic
+    ;
+}
+static field self::C c;
+static field core::int x;
+static field core::int y;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.transformed.expect
new file mode 100644
index 0000000..2dc8be9
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart.weak.transformed.expect
@@ -0,0 +1,29 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/named_arguments_anywhere/trailing_comma2.dart:17:8: Error: Expected ']' before this.
+//     c[x,] = y;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  operator []=(dynamic x, dynamic y) → void {}
+}
+class Bad extends core::Object {
+  synthetic constructor •() → self::Bad
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    self::c.{self::C::[]=}(self::x, self::y){(dynamic, dynamic) → void};
+  }
+}
+static field self::C c = new self::C::•();
+static field core::int x = 42;
+static field core::int y = 42;
+static method main() → dynamic {}
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 663f7f7..2b23c4c 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
@@ -280,7 +280,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -310,7 +310,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -414,7 +414,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -442,7 +442,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
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 374fc977..90f48aa 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
@@ -280,7 +280,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -310,7 +310,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -414,7 +414,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
@@ -442,7 +442,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
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 4d771b3..e5c093e 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 f3903c0..de205ad 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 e179ab5..ec86fcc 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 e179ab5..ec86fcc 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 24cfa96..77e3dbf 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 dd7fa30..f82c29d 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 a16945b..d5ddd95 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 be09548..d33f1a0 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 be09548..d33f1a0 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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 a83a86b..6a4db26 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:139:9)
+- _ArraySize. (from org-dartlang-sdk:///sdk/lib/ffi/ffi.dart:140: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.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index 4d55755..2c07b45 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
@@ -14,12 +14,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result_or_exception);
           self::TestMixin::T% result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -76,18 +76,18 @@
   method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<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;
+    core::String? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -106,7 +106,7 @@
           :return_value = result;
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -114,7 +114,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -135,18 +135,18 @@
   method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<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;
+    core::String? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -165,7 +165,7 @@
           :return_value = result;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -173,7 +173,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
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 4d55755..2c07b45 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
@@ -14,12 +14,12 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result);
+          [yield] let dynamic #t1 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::TestMixin::R% response = _in::unsafeCast<self::TestMixin::R%>(:result_or_exception);
           self::TestMixin::T% result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::TestMixin::R% & self::Response<dynamic> /* '%' & '!' = '!' */}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} self::TestMixin::T%;
@@ -46,7 +46,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -76,18 +76,18 @@
   method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<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;
+    core::String? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
+          [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::Response<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -106,7 +106,7 @@
           :return_value = result;
           break #L2;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -114,7 +114,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -135,18 +135,18 @@
   method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<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;
+    core::String? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
-          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
-          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
+          [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error) in null;
+          final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result_or_exception);
           core::String result;
           if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
             result = response{self::PagingResponse<core::String>}.{self::Response::data}{dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::String;
@@ -165,7 +165,7 @@
           :return_value = result;
           break #L3;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -173,7 +173,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
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 3864109..3911f56 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.strong.transformed.expect
@@ -15,23 +15,23 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error) in null;
         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?
-           ^" in let core::List<dynamic>? #t2 = _in::unsafeCast<core::List<dynamic>?>(:result) in #t2 == null ?{core::List<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t2{core::List<dynamic>};
+           ^" in let core::List<dynamic>? #t2 = _in::unsafeCast<core::List<dynamic>?>(:result_or_exception) in #t2 == null ?{core::List<dynamic>} #t2 as{TypeError,ForNonNullableByDefault} core::List<dynamic> : #t2{core::List<dynamic>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -39,7 +39,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 18ac50d..c8d68d4 100644
--- a/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41108.dart.weak.transformed.expect
@@ -15,23 +15,23 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error, :async_op) in null;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::l(), :async_op_then, :async_op_error) in null;
         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?
-           ^" in _in::unsafeCast<core::List<dynamic>?>(:result);
+           ^" in _in::unsafeCast<core::List<dynamic>?>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -39,7 +39,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 9eb092b..5a8290a 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.strong.transformed.expect
@@ -6,12 +6,12 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -20,7 +20,7 @@
         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>};
         core::print(i);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -28,7 +28,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 9eb092b..5a8290a 100644
--- a/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41114.dart.weak.transformed.expect
@@ -6,12 +6,12 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -20,7 +20,7 @@
         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>};
         core::print(i);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -28,7 +28,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 e3bb148..8190be5 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -63,7 +63,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -78,25 +78,25 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
   (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
+    Never? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
           throw v;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -104,7 +104,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -116,7 +116,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -131,7 +131,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -143,7 +143,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -158,25 +158,25 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
   (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
+    Never? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
           self::throwing();
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -184,7 +184,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -196,7 +196,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -211,7 +211,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -219,12 +219,12 @@
 static method errors() → void /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -276,7 +276,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
@@ -298,7 +298,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -310,7 +310,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -333,7 +333,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -345,7 +345,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
@@ -367,7 +367,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -379,7 +379,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
@@ -402,12 +402,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -415,7 +415,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 dbb0ff6..69eb4d9 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -64,7 +64,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -79,25 +79,25 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
   (core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
+    Never? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
           throw v;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -105,7 +105,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -117,7 +117,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
@@ -132,7 +132,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -144,7 +144,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
@@ -159,25 +159,25 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
   (core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> /* originally async */ {
     final asy::_Future<Never> :async_future = new asy::_Future::•<Never>();
     core::bool* :is_sync = false;
-    FutureOr<Never>? :return_value;
+    Never? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
           let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -185,7 +185,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -197,7 +197,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
@@ -212,7 +212,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -220,12 +220,12 @@
 static method errors() → void /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {
@@ -277,7 +277,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
@@ -299,7 +299,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -311,7 +311,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -334,7 +334,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -346,7 +346,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
@@ -368,7 +368,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
@@ -380,7 +380,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
@@ -403,12 +403,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -416,7 +416,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 a53d4d3..6e2c362 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -41,7 +41,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -56,26 +56,26 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method getFutureBool() → asy::Future<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;
+  core::bool? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = true;
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -83,7 +83,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -96,12 +96,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -112,7 +112,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -129,12 +129,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -145,7 +145,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -164,7 +164,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -179,19 +179,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -204,12 +204,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L7:
               {
-                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -220,7 +220,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -237,12 +237,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,7 +253,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -272,7 +272,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -287,7 +287,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -303,12 +303,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L10;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -319,7 +319,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -337,12 +337,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L11;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -353,7 +353,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -370,7 +370,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L12:
               {
@@ -385,12 +385,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<core::bool>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -398,7 +398,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 a53d4d3..6e2c362 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -56,26 +56,26 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method getFutureBool() → asy::Future<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;
+  core::bool? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = true;
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -83,7 +83,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -96,12 +96,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L3;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -112,7 +112,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -129,12 +129,12 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
         break #L4;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -145,7 +145,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -164,7 +164,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -179,19 +179,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -204,12 +204,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L7:
               {
-                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L7;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -220,7 +220,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -237,12 +237,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L8:
               {
-                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
+                [yield] let dynamic #t4 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
                 break #L8;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,7 +253,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -272,7 +272,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L9:
               {
@@ -287,7 +287,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }
@@ -303,12 +303,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L10:
               {
-                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L10;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -319,7 +319,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -337,12 +337,12 @@
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L11:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
-                :return_value = :result;
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error) in null;
+                :return_value = :result_or_exception;
                 break #L11;
               }
               asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -353,7 +353,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<dynamic>} as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -370,7 +370,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L12:
               {
@@ -385,12 +385,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<core::bool>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -398,7 +398,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 f1dad02..06df3f0 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.strong.transformed.expect
@@ -145,12 +145,12 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -284,7 +284,7 @@
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         })(){() → core::Iterable<core::bool>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -292,7 +292,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 f1dad02..06df3f0 100644
--- a/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437b.dart.weak.transformed.expect
@@ -145,12 +145,12 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -284,7 +284,7 @@
           return new core::_SyncIterable::•<core::bool>(:sync_op_gen);
         })(){() → core::Iterable<core::bool>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -292,7 +292,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 afdc269..ce8b32e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -85,7 +85,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
@@ -118,7 +118,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -155,7 +155,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -198,7 +198,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L5:
@@ -225,12 +225,12 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -243,7 +243,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L7:
@@ -280,7 +280,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L8:
@@ -323,7 +323,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L9:
@@ -359,7 +359,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L10:
@@ -397,7 +397,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L11:
@@ -435,7 +435,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L12:
@@ -460,7 +460,7 @@
           return :controller_stream;
         })(){() → asy::Stream<core::bool>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -468,7 +468,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 afdc269..ce8b32e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437c.dart.weak.transformed.expect
@@ -52,7 +52,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L1:
@@ -85,7 +85,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L2:
@@ -118,7 +118,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L3:
@@ -155,7 +155,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L4:
@@ -198,7 +198,7 @@
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   dynamic :saved_try_context_var1;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L5:
@@ -225,12 +225,12 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -243,7 +243,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L7:
@@ -280,7 +280,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L8:
@@ -323,7 +323,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L9:
@@ -359,7 +359,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L10:
@@ -397,7 +397,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L11:
@@ -435,7 +435,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L12:
@@ -460,7 +460,7 @@
           return :controller_stream;
         })(){() → asy::Stream<core::bool>};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -468,7 +468,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 50a282e..675b14d 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.strong.transformed.expect
@@ -18,16 +18,16 @@
 static method returnFutureOfVoid() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -35,7 +35,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -43,16 +43,16 @@
 static method returnVoidAsync() → void /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -60,29 +60,29 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -90,27 +90,27 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -118,7 +118,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 50a282e..675b14d 100644
--- a/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41602.dart.weak.transformed.expect
@@ -18,16 +18,16 @@
 static method returnFutureOfVoid() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -35,7 +35,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -43,16 +43,16 @@
 static method returnVoidAsync() → void /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -60,29 +60,29 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -90,27 +90,27 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -118,7 +118,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 5a264b1..1c73ad9 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -37,21 +37,21 @@
   <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 */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
     core::bool* :is_sync = false;
-    FutureOr<core::num>? :return_value;
+    core::num? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1){(core::num) → core::num};
+          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::num>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -59,7 +59,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -79,14 +79,14 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
           :return_value = 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 _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
+                     ^" in _in::unsafeCast<core::num?>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -97,7 +97,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
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 5a264b1..1c73ad9 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -37,21 +37,21 @@
   <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 */ {
     final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
     core::bool* :is_sync = false;
-    FutureOr<core::num>? :return_value;
+    core::num? :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;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
-          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
-          :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1){(core::num) → core::num};
+          [yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
+          :return_value = _in::unsafeCast<core::num>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -59,7 +59,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
@@ -79,14 +79,14 @@
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
-          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+          [yield] let dynamic #t2 = asy::_awaitHelper(t, :async_op_then, :async_op_error) in null;
           :return_value = 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 _in::unsafeCast<core::num?>(:result).{core::num::+}(1){(core::num) → core::num};
+                     ^" in _in::unsafeCast<core::num?>(:result_or_exception).{core::num::+}(1){(core::num) → core::num};
           break #L2;
         }
         asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -97,7 +97,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   };
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 2bb4719..2b136de 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
@@ -14,14 +14,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Object o = let dynamic #t2 = :result in #t2 == null ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = let dynamic #t4 = :result in #t4 == null ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        core::Object o = let dynamic #t2 = :result_or_exception in #t2 == null ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = let dynamic #t4 = :result_or_exception in #t4 == null ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 4d5ecd6..74c0365 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
@@ -14,14 +14,14 @@
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Object o = :result;
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
-        :return_value = :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        core::Object o = :result_or_exception;
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error) in null;
+        :return_value = :result_or_exception;
         break #L1;
       }
       asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -32,7 +32,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 b810299..e5489e1 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -40,12 +40,12 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -61,7 +61,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -80,12 +80,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -93,7 +93,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
index d87cbdc..0e8e42a 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
@@ -28,19 +28,19 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:717:13 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:717:13 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:717:13 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:753:13 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:753:13 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:753:13 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:776:13 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:776:13 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:776:13 -> SymbolConstant(#onTimeout)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:680:13 -> SymbolConstant(#then)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:680:13 -> SymbolConstant(#onError)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:762:13 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:762:13 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:762:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:762:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:820:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:820:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:820:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:871:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:871:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:871:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:915:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:915:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:915:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:769:13 -> SymbolConstant(#then)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:769:13 -> SymbolConstant(#onError)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:880:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:880:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:880:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:880:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 61, effectively constant: 15
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 b810299..e5489e1 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -40,12 +40,12 @@
 static method test() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -61,7 +61,7 @@
           (core::Object, core::StackTrace) → dynamic :async_op_error;
           core::int :await_jump_var = 0;
           dynamic :await_ctx_var;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -80,12 +80,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         })(){() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>} as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -93,7 +93,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 22760fa..199ae9b 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -6,12 +6,12 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -23,12 +23,12 @@
         (dynamic _) → asy::Future<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;
+          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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -37,7 +37,7 @@
                   break #L2;
                 }
               }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
             on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -45,12 +45,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 22760fa..199ae9b 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -6,12 +6,12 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -23,12 +23,12 @@
         (dynamic _) → asy::Future<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;
+          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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
@@ -37,7 +37,7 @@
                   break #L2;
                 }
               }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
             on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -45,12 +45,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         };
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -58,7 +58,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 122e031..0bf212b 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.strong.transformed.expect
@@ -15,12 +15,12 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -32,7 +32,7 @@
           self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
         } =>#t2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -40,7 +40,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 122e031..0bf212b 100644
--- a/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue44595.dart.weak.transformed.expect
@@ -15,12 +15,12 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -32,7 +32,7 @@
           self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
         } =>#t2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -40,7 +40,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 2885cb8..c26058b 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -126,7 +126,7 @@
 static method hest() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :return_value;
   (dynamic) → dynamic :async_op_then;
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
@@ -135,7 +135,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -146,8 +146,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = 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)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -158,14 +158,14 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -173,19 +173,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method fisk() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -209,12 +209,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  :return_value = :result;
+                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                  :return_value = :result_or_exception;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -225,13 +225,13 @@
               }
             :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
             :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(){() → dynamic};
+            :async_op(null, null){() → dynamic};
             :is_sync = true;
             return :async_future;
           };
         late core::Function f = #f#initializer(){() → core::Function};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -239,7 +239,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 2885cb8..c26058b 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -126,7 +126,7 @@
 static method hest() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :return_value;
   (dynamic) → dynamic :async_op_then;
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
@@ -135,7 +135,7 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -146,8 +146,8 @@
             #L2:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = 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)) {
                 core::String s = :for-iterator.{asy::_StreamIterator::current}{core::String};
                 {
                   core::print(s);
@@ -158,14 +158,14 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::String>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         :return_value = "hest";
         break #L1;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -173,19 +173,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method fisk() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -209,12 +209,12 @@
             core::int :await_jump_var = 0;
             dynamic :await_ctx_var;
             dynamic :saved_try_context_var0;
-            function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+            function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
               try {
                 #L4:
                 {
-                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
-                  :return_value = :result;
+                  [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error) in null;
+                  :return_value = :result_or_exception;
                   break #L4;
                 }
                 asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -225,13 +225,13 @@
               }
             :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
             :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-            :async_op(){() → dynamic};
+            :async_op(null, null){() → dynamic};
             :is_sync = true;
             return :async_future;
           };
         late core::Function f = #f#initializer(){() → core::Function};
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -239,7 +239,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.strong.transformed.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.modular.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
index 49eec30..1a1e26d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.outline.expect
@@ -10,6 +10,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -30,11 +35,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
index 2d71c44..9aa345d 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
@@ -12,6 +12,11 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
+// Try adding either an explicit non-'null' default value or the 'required' modifier.
+//   void method([int i]) {}
+//                    ^
+//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 //   void patchedMethod([int i]) {}
@@ -32,11 +37,6 @@
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
-//   void method([int i]) {}
-//                    ^
-//
 // pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: The parameter 'i' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
 // Try adding either an explicit non-'null' default value or the 'required' modifier.
 // void method([int i]) {}
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 2a9f5d7..8e3b2c1 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
@@ -12,22 +12,22 @@
 static method allYield() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -35,29 +35,29 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method allYield2() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -65,28 +65,28 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method allYield3() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         self::throwSync();
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -106,7 +106,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -114,21 +114,21 @@
         asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* originally async */ {
           final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
           core::bool* :is_sync = false;
-          FutureOr<Null>? :return_value;
+          Null :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;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L5:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error, :async_op) in null;
-                _in::unsafeCast<void>(:result);
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error) in null;
+                _in::unsafeCast<void>(:result_or_exception);
                 completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
               }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
             on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -136,7 +136,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }, (core::Object e, core::StackTrace s) → void {
@@ -153,7 +153,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 2a9f5d7..8e3b2c1 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
@@ -12,22 +12,22 @@
 static method allYield() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::allYield2(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -35,29 +35,29 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method allYield2() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
-        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t3 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::allYield3(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -65,28 +65,28 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method allYield3() → asy::Future<void> /* originally async */ {
   final asy::_Future<void> :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>? :return_value;
+  void :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<core::int>(:result);
+        [yield] let dynamic #t5 = asy::_awaitHelper(0, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
         self::throwSync();
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -94,7 +94,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -106,7 +106,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -114,21 +114,21 @@
         asy::runZonedGuarded<asy::Future<Null>>(() → asy::Future<Null> /* originally async */ {
           final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
           core::bool* :is_sync = false;
-          FutureOr<Null>? :return_value;
+          Null :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;
           dynamic :saved_try_context_var0;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L5:
               {
-                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error, :async_op) in null;
-                _in::unsafeCast<void>(:result);
+                [yield] let dynamic #t6 = asy::_awaitHelper(self::allYield(), :async_op_then, :async_op_error) in null;
+                _in::unsafeCast<void>(:result_or_exception);
                 completer.{asy::Completer::complete}(null){([FutureOr<void>?]) → void};
               }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
             on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -136,7 +136,7 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() → dynamic};
+          :async_op(null, null){() → dynamic};
           :is_sync = true;
           return :async_future;
         }, (core::Object e, core::StackTrace s) → void {
@@ -153,7 +153,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
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 79d95f1..918c16c 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -233,5 +233,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index d7034897..f464a2f 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
@@ -94,16 +94,16 @@
 static method returnAsync1() → asy::Future<dynamic> /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -111,23 +111,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync2() → FutureOr<dynamic> /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -135,7 +135,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -147,7 +147,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -164,23 +164,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync4() → FutureOr<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;
+  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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -188,23 +188,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync5() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -212,7 +212,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -224,7 +224,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -239,23 +239,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync7() → asy::Future<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;
+  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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -263,7 +263,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -286,7 +286,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L8:
@@ -362,16 +362,16 @@
   function returnAsync1() → asy::Future<dynamic> /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
+    dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L13:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -379,23 +379,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync2() → FutureOr<dynamic> /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
+    dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L14:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -403,7 +403,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -415,7 +415,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L15:
         {
@@ -432,23 +432,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync4() → FutureOr<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;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L16:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -456,23 +456,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync5() → asy::Future<Null> /* originally async */ {
     final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
     core::bool* :is_sync = false;
-    FutureOr<Null>? :return_value;
+    Null :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L17:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -480,7 +480,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -492,7 +492,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L18:
         {
@@ -507,23 +507,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync7() → asy::Future<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;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L19:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -531,7 +531,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -554,7 +554,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L20:
@@ -631,5 +631,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/return_null.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect
index 0823c8f..9ff88d2 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline.expect
@@ -12,7 +12,9 @@
 Future<int?> returnAsync7() async {}
 Iterable yieldSync() sync* {}
 Stream yieldAsync() async* {}
+
 enum Enum { a, b }
+
 Enum caseReturn1(Enum e) {}
 Enum caseReturn2(Enum e) {}
 localFunctions() {}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect
index cc610a6..becfa0f 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.textual_outline_modelled.expect
@@ -13,7 +13,9 @@
 String returnExplicit() {}
 String returnImplicit() {}
 String returnMixed(bool b) {}
+
 enum Enum { a, b }
+
 localFunctions() {}
 main() {}
 returnAsync5() async {}
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 8c3d6c3..60fc699 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -240,5 +240,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/return_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
index 8c3d6c3..60fc699 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
@@ -240,5 +240,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 7f20e82..09a90f2 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
@@ -95,16 +95,16 @@
 static method returnAsync1() → asy::Future<dynamic> /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -112,23 +112,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync2() → FutureOr<dynamic> /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -136,7 +136,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -148,7 +148,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -165,23 +165,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync4() → FutureOr<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;
+  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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -189,23 +189,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync5() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -213,7 +213,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -225,7 +225,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -240,23 +240,23 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method returnAsync7() → asy::Future<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;
+  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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L7:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -264,7 +264,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -287,7 +287,7 @@
   (core::Object, core::StackTrace) → dynamic :async_op_error;
   core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
       try {
         #L8:
@@ -366,16 +366,16 @@
   function returnAsync1() → asy::Future<dynamic> /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
+    dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L14:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -383,23 +383,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync2() → FutureOr<dynamic> /* originally async */ {
     final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
-    FutureOr<dynamic>? :return_value;
+    dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L15:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -407,7 +407,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -419,7 +419,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L16:
         {
@@ -436,23 +436,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync4() → FutureOr<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;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L17:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -460,23 +460,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync5() → asy::Future<Null> /* originally async */ {
     final asy::_Future<Null> :async_future = new asy::_Future::•<Null>();
     core::bool* :is_sync = false;
-    FutureOr<Null>? :return_value;
+    Null :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L18:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -484,7 +484,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -496,7 +496,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L19:
         {
@@ -511,23 +511,23 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
   function returnAsync7() → asy::Future<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;
+    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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L20:
         {}
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -535,7 +535,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -558,7 +558,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try
         try {
           #L21:
@@ -638,5 +638,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/switch_nullable_enum.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
index c152a0b..ba9e958 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
@@ -113,5 +113,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/switch_nullable_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
index c152a0b..ba9e958 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
@@ -113,5 +113,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/switch_nullable_enum.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect
index acc9973..6644830 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline.expect
@@ -1,4 +1,5 @@
 enum Enum { e1, e2 }
+
 int method1(Enum? e) {}
 int method2(Enum? e) {}
 int method3(Enum? e) {}
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect
index a18d6e9..78ea1cb 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.textual_outline_modelled.expect
@@ -1,4 +1,5 @@
 enum Enum { e1, e2 }
+
 expect(expected, actual) {}
 int method1(Enum? e) {}
 int method2(Enum? e) {}
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
@@ -117,5 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/switch_nullable_enum.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
@@ -117,5 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd/switch_nullable_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
@@ -117,5 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd_mixed/issue41602.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41602.dart.weak.transformed.expect
index 96460c4..19c9552 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
@@ -7,16 +7,16 @@
 static method returnFutureOfVoid() → asy::Future<void>* /* originally async */ {
   final asy::_Future<void>* :async_future = new asy::_Future::•<void>();
   core::bool* :is_sync = false;
-  FutureOr<void>* :return_value;
+  void :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -24,7 +24,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -32,16 +32,16 @@
 static method returnVoidAsync() → void /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {}
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -49,31 +49,31 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
-        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error, :async_op) in null;
-        _in::unsafeCast<void>(:result);
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::returnVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::returnFutureOfVoid(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
+        [yield] let dynamic #t3 = asy::_awaitHelper(self::returnVoidAsync(), :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<void>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -81,7 +81,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 dcba0f6..055f5af 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
@@ -10,19 +10,19 @@
   return (typ::Request* r) → asy::Future<typ::Response*>* /* originally async */ {
     final asy::_Future<typ::Response*>* :async_future = new asy::_Future::•<typ::Response*>();
     core::bool* :is_sync = false;
-    FutureOr<typ::Response*>* :return_value;
+    typ::Response? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
           :return_value = new typ::Response::•();
           break #L1;
         }
-        asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -30,7 +30,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() →* dynamic};
+    :async_op(null, null){() →* dynamic};
     :is_sync = true;
     return :async_future;
   };
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
index 5076108..2f07c05 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
@@ -622,5 +622,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd_mixed/unsound_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
index 5076108..2f07c05 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
@@ -622,5 +622,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/nnbd_mixed/unsound_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
index e968e87e..53688d7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
@@ -643,5 +643,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/outline.status b/pkg/front_end/testcases/outline.status
index d03d29f..3e52ebe 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -23,6 +23,7 @@
 general/getter_vs_setter_type: TypeCheckError
 general/implement_semi_stub: TypeCheckError
 general/infer_field_from_multiple: TypeCheckError
+general/infer_field_from_multiple2: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
 general/issue41210a: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect
index f42bd18..930818a 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:15: Error: A constant constructor can't call a non-constant super constructor.
+//   const B() : super();
+//               ^
+//
 // pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
 //   const B() : super();
 //                    ^
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
index f42bd18..930818a 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.modular.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:15: Error: A constant constructor can't call a non-constant super constructor.
+//   const B() : super();
+//               ^
+//
 // pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
 //   const B() : super();
 //                    ^
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect
index 8ebaafe..2bbebbe 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.outline.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:15: Error: A constant constructor can't call a non-constant super constructor.
+//   const B() : super();
+//               ^
+//
 // pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
 //   const B() : super();
 //                    ^
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect
index f42bd18..930818a 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.weak.transformed.expect
@@ -2,6 +2,10 @@
 //
 // Problems in library:
 //
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:15: Error: A constant constructor can't call a non-constant super constructor.
+//   const B() : super();
+//               ^
+//
 // pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
 //   const B() : super();
 //                    ^
diff --git a/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect b/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
index c10a31d..08d5765 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.textual_outline.expect
@@ -3,4 +3,5 @@
   ec1,
   ec2,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
index c10a31d..08d5765 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.textual_outline_modelled.expect
@@ -3,4 +3,5 @@
   ec1,
   ec2,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
@@ -39,5 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/rasta/enum.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
@@ -39,5 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/rasta/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
@@ -39,5 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/rasta/issue_000046.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
index 4625b85..77f4768 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.expect
@@ -6,9 +6,9 @@
 //   C c = new Object)();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected ';' after this.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: Expected ';' after this.
 //   C c = new Object)();
-//                   ^
+//             ^^^^^^
 //
 // pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected a class member, but got ')'.
 //   C c = new Object)();
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
index 4625b85..77f4768 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.modular.expect
@@ -6,9 +6,9 @@
 //   C c = new Object)();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected ';' after this.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: Expected ';' after this.
 //   C c = new Object)();
-//                   ^
+//             ^^^^^^
 //
 // pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected a class member, but got ')'.
 //   C c = new Object)();
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect
index 204c7a9..ef6529e 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.outline.expect
@@ -6,9 +6,9 @@
 //   C c = new Object)();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected ';' after this.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: Expected ';' after this.
 //   C c = new Object)();
-//                   ^
+//             ^^^^^^
 //
 // pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected a class member, but got ')'.
 //   C c = new Object)();
diff --git a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
index 4625b85..77f4768 100644
--- a/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000046.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
 //   C c = new Object)();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected ';' after this.
+// pkg/front_end/testcases/rasta/issue_000046.dart:6:13: Error: Expected ';' after this.
 //   C c = new Object)();
-//                   ^
+//             ^^^^^^
 //
 // pkg/front_end/testcases/rasta/issue_000046.dart:6:19: Error: Expected a class member, but got ')'.
 //   C c = new Object)();
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect
index 7670aed..b24cb95 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.expect
@@ -42,5 +42,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///native_is_illegal.dart:
-- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:109:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
index 7670aed..b24cb95 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.modular.expect
@@ -42,5 +42,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///native_is_illegal.dart:
-- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:109:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect
index 7670aed..b24cb95 100644
--- a/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/native_is_illegal.dart.weak.transformed.expect
@@ -42,5 +42,5 @@
 
 Constructor coverage from constants:
 org-dartlang-testcase:///native_is_illegal.dart:
-- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:92:9)
+- ExternalName. (from org-dartlang-sdk:///sdk/lib/internal/internal.dart:109:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
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 d3211c4..4463725 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
@@ -67,7 +67,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -82,7 +82,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -94,7 +94,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
@@ -109,30 +109,30 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         core::print(self::f1());
-        [yield] let dynamic #t1 = asy::_awaitHelper(self::f2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::print(:result);
-        [yield] let dynamic #t2 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<invalid-type>(:result));
+        [yield] let dynamic #t1 = asy::_awaitHelper(self::f2(), :async_op_then, :async_op_error) in null;
+        core::print(:result_or_exception);
+        [yield] let dynamic #t2 = asy::_awaitHelper(self::f3(), :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<invalid-type>(:result_or_exception));
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -140,7 +140,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 8e89457..2048398 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
@@ -22,7 +22,7 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :return_value;
   (dynamic) →* dynamic :async_op_then;
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
@@ -31,26 +31,26 @@
   dynamic :saved_try_context_var1;
   dynamic :exception0;
   dynamic :stack_trace0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
         function f_async() → core::int* /* originally async */ {
           final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
           core::bool* :is_sync = false;
-          FutureOr<dynamic>* :return_value;
+          dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try {
               #L2:
               {
                 :return_value = 42;
                 break #L2;
               }
-              asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+              asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
               return;
             }
             on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -58,12 +58,12 @@
             }
           :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
           :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-          :async_op(){() →* dynamic};
+          :async_op(null, null){() →* dynamic};
           :is_sync = true;
           return :async_future;
         }
-        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() →* core::int*}, :async_op_then, :async_op_error, :async_op) in null;
-        core::print(_in::unsafeCast<core::int*>(:result));
+        [yield] let dynamic #t1 = asy::_awaitHelper(f_async(){() →* core::int*}, :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::int*>(:result_or_exception));
         function f_async_star() → core::int* /* originally async* */ {
           asy::_AsyncStarStreamController<dynamic>* :controller;
           dynamic :controller_stream;
@@ -73,7 +73,7 @@
           dynamic :await_ctx_var;
           dynamic :saved_try_context_var0;
           dynamic :saved_try_context_var1;
-          function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+          function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
             try
               try {
                 #L3:
@@ -104,8 +104,8 @@
             #L4:
             while (true) {
               dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
-              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
-              if(_in::unsafeCast<core::bool>(:result)) {
+              [yield] let dynamic #t3 = 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)) {
                 dynamic x = :for-iterator.{asy::_StreamIterator::current}{dynamic};
                 {
                   core::print(x);
@@ -116,8 +116,8 @@
             }
           finally
             if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<dynamic>?} == null)) {
-              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
-              :result;
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
             }
         }
         function f_sync_star() → core::int* /* originally sync* */ {
@@ -147,7 +147,7 @@
           }
         }
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -155,7 +155,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
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 ee407a3..1578723 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
@@ -56,13 +56,13 @@
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>* :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L1:
       {
@@ -87,28 +87,28 @@
 Change the type of the map literal or the context in which it is used.
   LinkedHashMap<int, bool> lhm = {};
                                  ^" in <dynamic, dynamic>{};
-        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Map<core::int*, core::bool*>* fm = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Set<core::int*>* fs = _in::unsafeCast<core::Set<core::int*>*>(:result);
-        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Iterable<core::int*>* fi = _in::unsafeCast<core::Iterable<core::int*>*>(:result);
-        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashSet<core::int*>* flhs = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result);
-        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashMap<core::int*, core::bool*>* flhm = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Map<core::int*, core::bool*>* fm2 = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result);
-        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Set<core::int*>* fs2 = _in::unsafeCast<core::Set<core::int*>*>(:result);
-        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error, :async_op) in null;
-        core::Iterable<core::int*>* fi2 = _in::unsafeCast<core::Iterable<core::int*>*>(:result);
-        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashSet<core::int*>* flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result);
-        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error, :async_op) in null;
-        col::LinkedHashMap<core::int*, core::bool*>* flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result);
+        [yield] let dynamic #t4 = asy::_awaitHelper(self::mapfun(), :async_op_then, :async_op_error) in null;
+        core::Map<core::int*, core::bool*>* fm = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result_or_exception);
+        [yield] let dynamic #t5 = asy::_awaitHelper(self::setfun(), :async_op_then, :async_op_error) in null;
+        core::Set<core::int*>* fs = _in::unsafeCast<core::Set<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t6 = asy::_awaitHelper(self::iterablefun(), :async_op_then, :async_op_error) in null;
+        core::Iterable<core::int*>* fi = _in::unsafeCast<core::Iterable<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t7 = asy::_awaitHelper(self::lhsfun(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashSet<core::int*>* flhs = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t8 = asy::_awaitHelper(self::lhmfun(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashMap<core::int*, core::bool*>* flhm = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result_or_exception);
+        [yield] let dynamic #t9 = asy::_awaitHelper(self::mapfun2(), :async_op_then, :async_op_error) in null;
+        core::Map<core::int*, core::bool*>* fm2 = _in::unsafeCast<core::Map<core::int*, core::bool*>*>(:result_or_exception);
+        [yield] let dynamic #t10 = asy::_awaitHelper(self::setfun2(), :async_op_then, :async_op_error) in null;
+        core::Set<core::int*>* fs2 = _in::unsafeCast<core::Set<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t11 = asy::_awaitHelper(self::iterablefun2(), :async_op_then, :async_op_error) in null;
+        core::Iterable<core::int*>* fi2 = _in::unsafeCast<core::Iterable<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t12 = asy::_awaitHelper(self::lhsfun2(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashSet<core::int*>* flhs2 = _in::unsafeCast<col::LinkedHashSet<core::int*>*>(:result_or_exception);
+        [yield] let dynamic #t13 = asy::_awaitHelper(self::lhmfun2(), :async_op_then, :async_op_error) in null;
+        col::LinkedHashMap<core::int*, core::bool*>* flhm2 = _in::unsafeCast<col::LinkedHashMap<core::int*, core::bool*>*>(:result_or_exception);
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -116,26 +116,26 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method mapfun() → asy::Future<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;
-  FutureOr<core::Map<core::int*, core::bool*>*>* :return_value;
+  core::Map<core::int*, core::bool*>? :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = <core::int*, core::bool*>{};
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -143,19 +143,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method setfun() → asy::Future<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;
-  FutureOr<core::Set<core::int*>*>* :return_value;
+  core::Set<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
@@ -164,7 +164,7 @@
         } =>#t14;
         break #L3;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -172,19 +172,19 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method iterablefun() → asy::Future<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;
-  FutureOr<core::Iterable<core::int*>*>* :return_value;
+  core::Iterable<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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L4:
       {
@@ -193,7 +193,7 @@
         } =>#t15;
         break #L4;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
@@ -201,7 +201,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -213,7 +213,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L5:
       {
@@ -236,7 +236,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
@@ -248,7 +248,7 @@
   (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
   core::int* :await_jump_var = 0;
   dynamic :await_ctx_var;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L6:
       {
@@ -269,7 +269,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() →* dynamic};
+  :async_op(null, null){() →* dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
index 0a517eb..c15892f 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/static_field_lowering/enum.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
index 0a517eb..c15892f 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/static_field_lowering/enum.dart.textual_outline.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
index b42a46f..2af2679 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline.expect
@@ -2,4 +2,5 @@
   a,
   b,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
index b42a46f..2af2679 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.textual_outline_modelled.expect
@@ -2,4 +2,5 @@
   a,
   b,
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/static_field_lowering/enum.dart.weak.modular.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/static_field_lowering/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _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/super_parameters/circular_dependency_inference.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
index 94dbab2..51a454d 100644
--- a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline.expect
@@ -1,28 +1,36 @@
 B1 f1() => throw 42;
+
 class A1 {
   var foo = f1();
   A1(this.foo);
 }
+
 class B1 extends A1 {
   B1(super.foo) : super();
 }
+
 class A2 {
   var foo = B2.new;
   A2(this.foo);
 }
+
 class B2 extends A2 {
   B2(super.foo) : super();
 }
+
 class A3 {
   var foo = C3.new;
   A3();
   A3.initializeFoo(this.foo);
 }
+
 class B3 extends A3 {
   var bar = A3.initializeFoo;
   B3(this.bar) : super();
 }
+
 class C3 extends B3 {
   C3(super.bar) : super();
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..310cf19
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/circular_dependency_inference.dart.textual_outline_modelled.expect
@@ -0,0 +1,36 @@
+B1 f1() => throw 42;
+
+class A1 {
+  A1(this.foo);
+  var foo = f1();
+}
+
+class A2 {
+  A2(this.foo);
+  var foo = B2.new;
+}
+
+class A3 {
+  A3();
+  A3.initializeFoo(this.foo);
+  var foo = C3.new;
+}
+
+class B1 extends A1 {
+  B1(super.foo) : super();
+}
+
+class B2 extends A2 {
+  B2(super.foo) : super();
+}
+
+class B3 extends A3 {
+  B3(this.bar) : super();
+  var bar = A3.initializeFoo;
+}
+
+class C3 extends B3 {
+  C3(super.bar) : super();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart b/pkg/front_end/testcases/super_parameters/default_values.dart
index 515a046..f62c550 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart
@@ -106,4 +106,22 @@
   S9([int x = 0]) : s = x - 1;
 }
 
+class Ap {
+  Ap([num x = 3.14]);
+}
+
+class Bp extends Ap {
+  Bp([int super.x]); // Error.
+  Bp.req(int super.x); // Ok.
+}
+
+class An {
+  An({num x = 3.14});
+}
+
+class Bn extends An {
+  Bn({int super.x}); // Error.
+  Bn.req({required int super.x}); // Ok.
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
index 29ffdbc..53f4848 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.expect
@@ -2,11 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
 //   C5([int super.x]); // Error.
 //                 ^
 //
+// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bp([int super.x]); // Error.
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bn({int super.x}); // Error.
+//                 ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -135,6 +142,32 @@
     : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
     ;
 }
+class Ap extends core::Object {
+  constructor •([core::num x = #C3]) → self::Ap
+    : super core::Object::•()
+    ;
+}
+class Bp extends self::Ap {
+  constructor •([core::int x = #C4]) → self::Bp
+    : super self::Ap::•(x)
+    ;
+  constructor req(core::int x) → self::Bp
+    : super self::Ap::•(x)
+    ;
+}
+class An extends core::Object {
+  constructor •({core::num x = #C3}) → self::An
+    : super core::Object::•()
+    ;
+}
+class Bn extends self::An {
+  constructor •({core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+  constructor req({required core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
index 29ffdbc..53f4848 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.strong.transformed.expect
@@ -2,11 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
 //   C5([int super.x]); // Error.
 //                 ^
 //
+// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bp([int super.x]); // Error.
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bn({int super.x}); // Error.
+//                 ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -135,6 +142,32 @@
     : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
     ;
 }
+class Ap extends core::Object {
+  constructor •([core::num x = #C3]) → self::Ap
+    : super core::Object::•()
+    ;
+}
+class Bp extends self::Ap {
+  constructor •([core::int x = #C4]) → self::Bp
+    : super self::Ap::•(x)
+    ;
+  constructor req(core::int x) → self::Bp
+    : super self::Ap::•(x)
+    ;
+}
+class An extends core::Object {
+  constructor •({core::num x = #C3}) → self::An
+    : super core::Object::•()
+    ;
+}
+class Bn extends self::An {
+  constructor •({core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+  constructor req({required core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
index 1cb3689..9766c4d 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline.expect
@@ -2,83 +2,122 @@
   int s;
   S1([int x = 0]) : s = x - 1;
 }
+
 class C1 extends S1 {
   int c;
   C1([super.x]) : c = x + 1;
 }
+
 class S2 {
   int s;
   S2({int x = 0}) : s = x - 1;
 }
+
 class C2 extends S2 {
   int c;
   C2({super.x}) : c = x + 1;
 }
+
 class S3 {
   int s;
   S3([int x = 0]) : s = x - 1;
 }
+
 class C3 extends S3 {
   int c;
   C3([super.x = 42]) : c = x + 1;
 }
+
 class S4 {
   int s;
   S4({int x = 0}) : s = x - 1;
 }
+
 class C4 extends S4 {
   int c;
   C4({super.x = 42}) : c = x + 1;
 }
+
 class S5 {
   num a;
   S5([num x = 3.14]) : a = x - 1;
 }
+
 class C5 extends S5 {
   C5([int super.x]);
 }
+
 class S6 {
   num? a;
   S6([num? x = 3.14]) : a = x;
 }
+
 class C6 extends S6 {
   int? b;
   C6([int? super.x]);
 }
+
 class S7 {
   int s;
   S7([int x = 0]) : s = x - 1;
 }
+
 class C7 extends S7 {
   int c;
   C7([super.x]) : c = x + 1;
 }
+
 class CC7 extends C7 {
   int cc;
   CC7([super.x]) : cc = x * 1;
 }
+
 class S8 {
   int s;
   S8([int x = 0]) : s = x - 1;
 }
+
 class CC8 extends C8 {
   int cc;
   CC8([super.x]) : cc = x * 1;
 }
+
 class C8 extends S8 {
   int c;
   C8([super.x]) : c = x + 1;
 }
+
 class CC9 extends C9 {
   int cc;
   CC9([super.x]) : cc = x * 1;
 }
+
 class C9 extends S9 {
   int c;
   C9([super.x]) : c = x + 1;
 }
+
 class S9 {
   int s;
   S9([int x = 0]) : s = x - 1;
 }
+
+class Ap {
+  Ap([num x = 3.14]);
+}
+
+class Bp extends Ap {
+  Bp([int super.x]);
+  Bp.req(int super.x);
+}
+
+class An {
+  An({num x = 3.14});
+}
+
+class Bn extends An {
+  Bn({int super.x});
+  Bn.req({required int super.x});
+}
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6b17d46
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,123 @@
+class An {
+  An({num x = 3.14});
+}
+
+class Ap {
+  Ap([num x = 3.14]);
+}
+
+class Bn extends An {
+  Bn({int super.x});
+  Bn.req({required int super.x});
+}
+
+class Bp extends Ap {
+  Bp([int super.x]);
+  Bp.req(int super.x);
+}
+
+class C1 extends S1 {
+  C1([super.x]) : c = x + 1;
+  int c;
+}
+
+class C2 extends S2 {
+  C2({super.x}) : c = x + 1;
+  int c;
+}
+
+class C3 extends S3 {
+  C3([super.x = 42]) : c = x + 1;
+  int c;
+}
+
+class C4 extends S4 {
+  C4({super.x = 42}) : c = x + 1;
+  int c;
+}
+
+class C5 extends S5 {
+  C5([int super.x]);
+}
+
+class C6 extends S6 {
+  C6([int? super.x]);
+  int? b;
+}
+
+class C7 extends S7 {
+  C7([super.x]) : c = x + 1;
+  int c;
+}
+
+class C8 extends S8 {
+  C8([super.x]) : c = x + 1;
+  int c;
+}
+
+class C9 extends S9 {
+  C9([super.x]) : c = x + 1;
+  int c;
+}
+
+class CC7 extends C7 {
+  CC7([super.x]) : cc = x * 1;
+  int cc;
+}
+
+class CC8 extends C8 {
+  CC8([super.x]) : cc = x * 1;
+  int cc;
+}
+
+class CC9 extends C9 {
+  CC9([super.x]) : cc = x * 1;
+  int cc;
+}
+
+class S1 {
+  S1([int x = 0]) : s = x - 1;
+  int s;
+}
+
+class S2 {
+  S2({int x = 0}) : s = x - 1;
+  int s;
+}
+
+class S3 {
+  S3([int x = 0]) : s = x - 1;
+  int s;
+}
+
+class S4 {
+  S4({int x = 0}) : s = x - 1;
+  int s;
+}
+
+class S5 {
+  S5([num x = 3.14]) : a = x - 1;
+  num a;
+}
+
+class S6 {
+  S6([num? x = 3.14]) : a = x;
+  num? a;
+}
+
+class S7 {
+  S7([int x = 0]) : s = x - 1;
+  int s;
+}
+
+class S8 {
+  S8([int x = 0]) : s = x - 1;
+  int s;
+}
+
+class S9 {
+  S9([int x = 0]) : s = x - 1;
+  int s;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
index 29ffdbc..53f4848 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.expect
@@ -2,11 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
 //   C5([int super.x]); // Error.
 //                 ^
 //
+// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bp([int super.x]); // Error.
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bn({int super.x}); // Error.
+//                 ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -135,6 +142,32 @@
     : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
     ;
 }
+class Ap extends core::Object {
+  constructor •([core::num x = #C3]) → self::Ap
+    : super core::Object::•()
+    ;
+}
+class Bp extends self::Ap {
+  constructor •([core::int x = #C4]) → self::Bp
+    : super self::Ap::•(x)
+    ;
+  constructor req(core::int x) → self::Bp
+    : super self::Ap::•(x)
+    ;
+}
+class An extends core::Object {
+  constructor •({core::num x = #C3}) → self::An
+    : super core::Object::•()
+    ;
+}
+class Bn extends self::An {
+  constructor •({core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+  constructor req({required core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
index 29ffdbc..53f4848 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.modular.expect
@@ -2,11 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
 //   C5([int super.x]); // Error.
 //                 ^
 //
+// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bp([int super.x]); // Error.
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bn({int super.x}); // Error.
+//                 ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -135,6 +142,32 @@
     : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
     ;
 }
+class Ap extends core::Object {
+  constructor •([core::num x = #C3]) → self::Ap
+    : super core::Object::•()
+    ;
+}
+class Bp extends self::Ap {
+  constructor •([core::int x = #C4]) → self::Bp
+    : super self::Ap::•(x)
+    ;
+  constructor req(core::int x) → self::Bp
+    : super self::Ap::•(x)
+    ;
+}
+class An extends core::Object {
+  constructor •({core::num x = #C3}) → self::An
+    : super core::Object::•()
+    ;
+}
+class Bn extends self::An {
+  constructor •({core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+  constructor req({required core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
index aca3fd0..e843595 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.outline.expect
@@ -2,11 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
 //   C5([int super.x]); // Error.
 //                 ^
 //
+// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bp([int super.x]); // Error.
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bn({int super.x}); // Error.
+//                 ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -114,5 +121,25 @@
   constructor •([core::int x = 0]) → self::S9
     ;
 }
+class Ap extends core::Object {
+  constructor •([core::num x = 3.14]) → self::Ap
+    ;
+}
+class Bp extends self::Ap {
+  constructor •([core::int x]) → self::Bp
+    ;
+  constructor req(core::int x) → self::Bp
+    ;
+}
+class An extends core::Object {
+  constructor •({core::num x = 3.14}) → self::An
+    ;
+}
+class Bn extends self::An {
+  constructor •({core::int x}) → self::Bn
+    ;
+  constructor req({required core::int x}) → self::Bn
+    ;
+}
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
index 29ffdbc..53f4848 100644
--- a/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/default_values.dart.weak.transformed.expect
@@ -2,11 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: The parameter 'x' can't have a value of 'null' because of its type 'int', but the implicit default value is 'null'.
-// Try adding either an explicit non-'null' default value or the 'required' modifier.
+// pkg/front_end/testcases/super_parameters/default_values.dart:51:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
 //   C5([int super.x]); // Error.
 //                 ^
 //
+// pkg/front_end/testcases/super_parameters/default_values.dart:114:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bp([int super.x]); // Error.
+//                 ^
+//
+// pkg/front_end/testcases/super_parameters/default_values.dart:123:17: Error: Type 'int' of the optional super-initializer parameter 'x' 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.
+//   Bn({int super.x}); // Error.
+//                 ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -135,6 +142,32 @@
     : self::S9::s = x.{core::num::-}(1){(core::num) → core::int}, super core::Object::•()
     ;
 }
+class Ap extends core::Object {
+  constructor •([core::num x = #C3]) → self::Ap
+    : super core::Object::•()
+    ;
+}
+class Bp extends self::Ap {
+  constructor •([core::int x = #C4]) → self::Bp
+    : super self::Ap::•(x)
+    ;
+  constructor req(core::int x) → self::Bp
+    : super self::Ap::•(x)
+    ;
+}
+class An extends core::Object {
+  constructor •({core::num x = #C3}) → self::An
+    : super core::Object::•()
+    ;
+}
+class Bn extends self::An {
+  constructor •({core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+  constructor req({required core::int x = #C4}) → self::Bn
+    : super self::An::•(x: x)
+    ;
+}
 static method main() → dynamic {}
 
 constants  {
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart b/pkg/front_end/testcases/super_parameters/issue47741.dart
new file mode 100644
index 0000000..9ce11a2
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.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.
+
+class A {
+  A(int foo<T>(int a));
+}
+
+class B extends A {
+  B.sub1(double super.bar1<T1>(int a1),);
+  B.sub2(double super.bar2<T2>(int a2),);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.strong.expect
new file mode 100644
index 0000000..0bcb96a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.strong.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub1(double super.bar1<T1>(int a1),);
+//                       ^
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub2(double super.bar2<T2>(int a2),);
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(<T extends core::Object? = dynamic>(core::int) → core::int foo) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(<T1 extends core::Object? = dynamic>(core::int) → core::double bar1) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub1(double super.bar1<T1>(int a1),);
+                      ^" in bar1 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+  constructor sub2(<T2 extends core::Object? = dynamic>(core::int) → core::double bar2) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub2(double super.bar2<T2>(int a2),);
+                      ^" in bar2 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.strong.transformed.expect
new file mode 100644
index 0000000..0bcb96a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.strong.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub1(double super.bar1<T1>(int a1),);
+//                       ^
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub2(double super.bar2<T2>(int a2),);
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(<T extends core::Object? = dynamic>(core::int) → core::int foo) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(<T1 extends core::Object? = dynamic>(core::int) → core::double bar1) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub1(double super.bar1<T1>(int a1),);
+                      ^" in bar1 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+  constructor sub2(<T2 extends core::Object? = dynamic>(core::int) → core::double bar2) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub2(double super.bar2<T2>(int a2),);
+                      ^" in bar2 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.textual_outline.expect
new file mode 100644
index 0000000..d491228
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class A {
+  A(int foo<T>(int a));
+}
+class B extends A {
+  B.sub1(double super.bar1<T1>(int a1),);
+  B.sub2(double super.bar2<T2>(int a2),);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.expect
new file mode 100644
index 0000000..0bcb96a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub1(double super.bar1<T1>(int a1),);
+//                       ^
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub2(double super.bar2<T2>(int a2),);
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(<T extends core::Object? = dynamic>(core::int) → core::int foo) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(<T1 extends core::Object? = dynamic>(core::int) → core::double bar1) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub1(double super.bar1<T1>(int a1),);
+                      ^" in bar1 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+  constructor sub2(<T2 extends core::Object? = dynamic>(core::int) → core::double bar2) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub2(double super.bar2<T2>(int a2),);
+                      ^" in bar2 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.modular.expect
new file mode 100644
index 0000000..0bcb96a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub1(double super.bar1<T1>(int a1),);
+//                       ^
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub2(double super.bar2<T2>(int a2),);
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(<T extends core::Object? = dynamic>(core::int) → core::int foo) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(<T1 extends core::Object? = dynamic>(core::int) → core::double bar1) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub1(double super.bar1<T1>(int a1),);
+                      ^" in bar1 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+  constructor sub2(<T2 extends core::Object? = dynamic>(core::int) → core::double bar2) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub2(double super.bar2<T2>(int a2),);
+                      ^" in bar2 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.outline.expect
new file mode 100644
index 0000000..5898b4e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(<T extends core::Object? = dynamic>(core::int) → core::int foo) → self::A
+    ;
+}
+class B extends self::A {
+  constructor sub1(<T1 extends core::Object? = dynamic>(core::int) → core::double bar1) → self::B
+    ;
+  constructor sub2(<T2 extends core::Object? = dynamic>(core::int) → core::double bar2) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.transformed.expect
new file mode 100644
index 0000000..0bcb96a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47741.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub1(double super.bar1<T1>(int a1),);
+//                       ^
+//
+// pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+//   B.sub2(double super.bar2<T2>(int a2),);
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(<T extends core::Object? = dynamic>(core::int) → core::int foo) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(<T1 extends core::Object? = dynamic>(core::int) → core::double bar1) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:10:23: Error: The argument type 'double Function<T1>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub1(double super.bar1<T1>(int a1),);
+                      ^" in bar1 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+  constructor sub2(<T2 extends core::Object? = dynamic>(core::int) → core::double bar2) → self::B
+    : super self::A::•(invalid-expression "pkg/front_end/testcases/super_parameters/issue47741.dart:11:23: Error: The argument type 'double Function<T2>(int)' can't be assigned to the parameter type 'int Function<T>(int)'.
+  B.sub2(double super.bar2<T2>(int a2),);
+                      ^" in bar2 as{TypeError,ForNonNullableByDefault} <T extends core::Object? = dynamic>(core::int) → core::int)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart b/pkg/front_end/testcases/super_parameters/issue47922.dart
new file mode 100644
index 0000000..04120ca
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart
@@ -0,0 +1,15 @@
+// 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 String foo;
+
+  A(this.foo);
+}
+
+class B extends A {
+  B(const super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.strong.expect
new file mode 100644
index 0000000..29c1272
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.strong.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47922.dart:12:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   B(const super.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String foo) → self::B
+    : super self::A::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.strong.transformed.expect
new file mode 100644
index 0000000..29c1272
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47922.dart:12:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   B(const super.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String foo) → self::B
+    : super self::A::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.textual_outline.expect
new file mode 100644
index 0000000..62a6d84
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+class A {
+  final String foo;
+  A(this.foo);
+}
+class B extends A {
+  B(const super.foo);
+}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.expect
new file mode 100644
index 0000000..29c1272
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47922.dart:12:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   B(const super.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String foo) → self::B
+    : super self::A::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.modular.expect
new file mode 100644
index 0000000..29c1272
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47922.dart:12:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   B(const super.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String foo) → self::B
+    : super self::A::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.outline.expect
new file mode 100644
index 0000000..71a8082
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47922.dart:12:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   B(const super.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::String foo) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.transformed.expect
new file mode 100644
index 0000000..29c1272
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47922.dart.weak.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/issue47922.dart:12:5: Error: Can't have modifier 'const' here.
+// Try removing 'const'.
+//   B(const super.foo);
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  final field core::String foo;
+  constructor •(core::String foo) → self::A
+    : self::A::foo = foo, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::String foo) → self::B
+    : super self::A::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart b/pkg/front_end/testcases/super_parameters/issue47951.dart
new file mode 100644
index 0000000..e269698
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.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.
+
+class A {
+  A(num a);
+}
+
+class B extends A {
+  B.sub1(int super.a1);
+  B.sub2(double super.a2);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.strong.expect
new file mode 100644
index 0000000..fe1ace6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::num a) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(core::int a1) → self::B
+    : super self::A::•(a1)
+    ;
+  constructor sub2(core::double a2) → self::B
+    : super self::A::•(a2)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.strong.transformed.expect
new file mode 100644
index 0000000..fe1ace6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::num a) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(core::int a1) → self::B
+    : super self::A::•(a1)
+    ;
+  constructor sub2(core::double a2) → self::B
+    : super self::A::•(a2)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect
new file mode 100644
index 0000000..0f8b504
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  A(num a);
+}
+
+class B extends A {
+  B.sub1(int super.a1);
+  B.sub2(double super.a2);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0f8b504
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(num a);
+}
+
+class B extends A {
+  B.sub1(int super.a1);
+  B.sub2(double super.a2);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.expect
new file mode 100644
index 0000000..fe1ace6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::num a) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(core::int a1) → self::B
+    : super self::A::•(a1)
+    ;
+  constructor sub2(core::double a2) → self::B
+    : super self::A::•(a2)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.modular.expect
new file mode 100644
index 0000000..fe1ace6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::num a) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(core::int a1) → self::B
+    : super self::A::•(a1)
+    ;
+  constructor sub2(core::double a2) → self::B
+    : super self::A::•(a2)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.outline.expect
new file mode 100644
index 0000000..d6d4b91
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::num a) → self::A
+    ;
+}
+class B extends self::A {
+  constructor sub1(core::int a1) → self::B
+    ;
+  constructor sub2(core::double a2) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.transformed.expect
new file mode 100644
index 0000000..fe1ace6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue47951.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::num a) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor sub1(core::int a1) → self::B
+    : super self::A::•(a1)
+    ;
+  constructor sub2(core::double a2) → self::B
+    : super self::A::•(a2)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
index d25be67..5a6498f 100644
--- a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline.expect
@@ -3,21 +3,52 @@
   int s2;
   S1(this.s1, [this.s2 = 42]);
 }
+
 class C1 extends S1 {
   int i1;
   int i2;
   C1(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
 }
+
 class S2 {
-  S2({String one = "1", bool two = false, int three = 3, double four = 4, num five = 3.14, List<String> six = const ["six"]});
+  S2(
+      {String one = "1",
+      bool two = false,
+      int three = 3,
+      double four = 4,
+      num five = 3.14,
+      List<String> six = const ["six"]});
 }
+
 class C21 extends S2 {
-  C21({dynamic foo, super.one, dynamic bar, dynamic baz, super.three, super.five});
+  C21(
+      {dynamic foo,
+      super.one,
+      dynamic bar,
+      dynamic baz,
+      super.three,
+      super.five});
 }
+
 class C22 extends S2 {
-  C22({dynamic foo, super.six, dynamic bar, dynamic baz, super.four, super.two});
+  C22(
+      {dynamic foo,
+      super.six,
+      dynamic bar,
+      dynamic baz,
+      super.four,
+      super.two});
 }
+
 class C23 extends S2 {
-  C23({super.three, dynamic foo, super.one, super.four, dynamic bar, super.two, dynamic baz});
+  C23(
+      {super.three,
+      dynamic foo,
+      super.one,
+      super.four,
+      dynamic bar,
+      super.two,
+      dynamic baz});
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d4a92de
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48142.dart.textual_outline_modelled.expect
@@ -0,0 +1,54 @@
+class C1 extends S1 {
+  C1(this.i1, super.s1, int x, [super.s2]) : this.i2 = x;
+  int i1;
+  int i2;
+}
+
+class C21 extends S2 {
+  C21(
+      {dynamic foo,
+      super.one,
+      dynamic bar,
+      dynamic baz,
+      super.three,
+      super.five});
+}
+
+class C22 extends S2 {
+  C22(
+      {dynamic foo,
+      super.six,
+      dynamic bar,
+      dynamic baz,
+      super.four,
+      super.two});
+}
+
+class C23 extends S2 {
+  C23(
+      {super.three,
+      dynamic foo,
+      super.one,
+      super.four,
+      dynamic bar,
+      super.two,
+      dynamic baz});
+}
+
+class S1 {
+  S1(this.s1, [this.s2 = 42]);
+  int s1;
+  int s2;
+}
+
+class S2 {
+  S2(
+      {String one = "1",
+      bool two = false,
+      int three = 3,
+      double four = 4,
+      num five = 3.14,
+      List<String> six = const ["six"]});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart b/pkg/front_end/testcases/super_parameters/issue48286.dart
new file mode 100644
index 0000000..042a998
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.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.
+
+class S<T> {
+  num n;
+  T t;
+  S(this.n, this.t);
+  S.named(this.t, this.n);
+}
+
+class C<T> extends S<T> {
+  C.constr1(super.n, String s, super.t);
+  C.constr2(int i, super.n, String s, super.t) : super();
+  C.constr3(int i, super.t, String s, super.n) : super.named();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.transformed.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.strong.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
new file mode 100644
index 0000000..c769e7d
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+class S<T> {
+  num n;
+  T t;
+  S(this.n, this.t);
+  S.named(this.t, this.n);
+}
+
+class C<T> extends S<T> {
+  C.constr1(super.n, String s, super.t);
+  C.constr2(int i, super.n, String s, super.t) : super();
+  C.constr3(int i, super.t, String s, super.n) : super.named();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b593fa1
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+class C<T> extends S<T> {
+  C.constr1(super.n, String s, super.t);
+  C.constr2(int i, super.n, String s, super.t) : super();
+  C.constr3(int i, super.t, String s, super.n) : super.named();
+}
+
+class S<T> {
+  S(this.n, this.t);
+  S.named(this.t, this.n);
+  T t;
+  num n;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.modular.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.modular.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.outline.expect
new file mode 100644
index 0000000..35398a6
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.transformed.expect
new file mode 100644
index 0000000..5409077
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48286.dart.weak.transformed.expect
@@ -0,0 +1,26 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class S<T extends core::Object? = dynamic> extends core::Object {
+  field core::num n;
+  covariant-by-class field self::S::T% t;
+  constructor •(core::num n, self::S::T% t) → self::S<self::S::T%>
+    : self::S::n = n, self::S::t = t, super core::Object::•()
+    ;
+  constructor named(self::S::T% t, core::num n) → self::S<self::S::T%>
+    : self::S::t = t, self::S::n = n, super core::Object::•()
+    ;
+}
+class C<T extends core::Object? = dynamic> extends self::S<self::C::T%> {
+  constructor constr1(core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr2(core::int i, core::num n, core::String s, self::C::T% t) → self::C<self::C::T%>
+    : super self::S::•(n, t)
+    ;
+  constructor constr3(core::int i, self::C::T% t, core::String s, core::num n) → self::C<self::C::T%>
+    : super self::S::named(t, n)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart b/pkg/front_end/testcases/super_parameters/issue48444_2.dart
new file mode 100644
index 0000000..7ad7be8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart
@@ -0,0 +1,15 @@
+// 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 {
+  void foo() {}
+}
+
+class B extends A {
+  void bar(bool t) {
+    t ? super.foo() : super.foo();
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.strong.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.strong.expect
new file mode 100644
index 0000000..56eb224b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.strong.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} super.{self::A::foo}() : super.{self::A::foo}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.strong.transformed.expect
new file mode 100644
index 0000000..56eb224b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} super.{self::A::foo}() : super.{self::A::foo}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.textual_outline.expect
new file mode 100644
index 0000000..c396c92
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+abstract class A {
+  void foo() {}
+}
+
+class B extends A {
+  void bar(bool t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c396c92
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+abstract class A {
+  void foo() {}
+}
+
+class B extends A {
+  void bar(bool t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.expect
new file mode 100644
index 0000000..56eb224b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} super.{self::A::foo}() : super.{self::A::foo}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.modular.expect
new file mode 100644
index 0000000..56eb224b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} super.{self::A::foo}() : super.{self::A::foo}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.outline.expect
new file mode 100644
index 0000000..9bde383
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+  method foo() → void
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+  method bar(core::bool t) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..56eb224b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/issue48444_2.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+  method bar(core::bool t) → void {
+    t ?{void} super.{self::A::foo}() : super.{self::A::foo}();
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect
index f0bc3ea..91dee23 100644
--- a/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline.expect
@@ -2,7 +2,9 @@
   final int foo;
   A(this.foo);
 }
+
 class B extends A {
   B(super.foo);
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ce8d868
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.foo);
+  final int foo;
+}
+
+class B extends A {
+  B(super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.strong.transformed.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
index a194020..ebcc1b5 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline.expect
@@ -5,18 +5,22 @@
   A1.named2(int foo) : foo = foo;
   A1.named3({required int foo}) : foo = foo;
 }
+
 class B1 extends A1 {
   B1(super.foo);
   B1.named(super.foo) : super.named();
   B1.named2(super.foo) : super.named2();
   B1.named3({required super.foo}) : super.named3();
 }
+
 class A2 {
   final int foo;
   final String bar;
   A2({required int this.foo, required String this.bar});
 }
+
 class B2 extends A2 {
   B2({required super.bar, required super.foo});
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7b7faf4
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.textual_outline_modelled.expect
@@ -0,0 +1,26 @@
+class A1 {
+  A1(this.foo);
+  A1.named(this.foo);
+  A1.named2(int foo) : foo = foo;
+  A1.named3({required int foo}) : foo = foo;
+  final int foo;
+}
+
+class A2 {
+  A2({required int this.foo, required String this.bar});
+  final String bar;
+  final int foo;
+}
+
+class B1 extends A1 {
+  B1(super.foo);
+  B1.named(super.foo) : super.named();
+  B1.named2(super.foo) : super.named2();
+  B1.named3({required super.foo}) : super.named3();
+}
+
+class B2 extends A2 {
+  B2({required super.bar, required super.foo});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.modular.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
index c7b816c..3d11aa3 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.outline.expect
@@ -20,7 +20,7 @@
     ;
   constructor named2(core::int foo) → self::B1
     ;
-  constructor named3({required dynamic foo}) → self::B1
+  constructor named3({required core::int foo}) → self::B1
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
index 2422e10..8e3046a 100644
--- a/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_inference.dart.weak.transformed.expect
@@ -27,8 +27,8 @@
   constructor named2(core::int foo) → self::B1
     : super self::A1::named2(foo)
     ;
-  constructor named3({required dynamic foo = #C1}) → self::B1
-    : super self::A1::named3(foo: foo as{TypeError,ForDynamic,ForNonNullableByDefault} core::int)
+  constructor named3({required core::int foo = #C1}) → self::B1
+    : super self::A1::named3(foo: foo)
     ;
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect
index 3c4243b..ff4395b 100644
--- a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline.expect
@@ -2,22 +2,28 @@
   final int foo;
   A1({required this.foo});
 }
+
 class B1 extends A1 {
   B1({required super.foo}) : super();
 }
+
 class C1 extends A1 {
   C1({required super.foo}) : super(foo: foo);
 }
+
 class A2 {
   final int foo;
   final String bar;
   A2({required this.foo, required this.bar});
 }
+
 class B2 extends A2 {
   B2() : super(foo: 42, bar: "bar", baz: false);
 }
+
 class C2 extends A2 {
   C2({required super.foo}) : super();
   C2.other({required super.foo}) : super(bar: 'bar');
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4ce72d0
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_named_super_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,29 @@
+class A1 {
+  A1({required this.foo});
+  final int foo;
+}
+
+class A2 {
+  A2({required this.foo, required this.bar});
+  final String bar;
+  final int foo;
+}
+
+class B1 extends A1 {
+  B1({required super.foo}) : super();
+}
+
+class B2 extends A2 {
+  B2() : super(foo: 42, bar: "bar", baz: false);
+}
+
+class C1 extends A1 {
+  C1({required super.foo}) : super(foo: foo);
+}
+
+class C2 extends A2 {
+  C2({required super.foo}) : super();
+  C2.other({required super.foo}) : super(bar: 'bar');
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
index a6fc5bc..2d8c920 100644
--- a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline.expect
@@ -2,21 +2,27 @@
   final int foo;
   A1(this.foo);
 }
+
 class B1 extends A1 {
   B1(super.foo) : super();
 }
+
 class C1 extends A1 {
   C1(super.foo) : super(42);
 }
+
 class A2 {
   final int foo;
   final String bar;
   A2(this.foo, this.bar);
 }
+
 class B2 extends A2 {
   B2() : super(0, 1, 2);
 }
+
 class C2 extends A2 {
   C2(super.foo) : super();
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0602b3a
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/simple_positional_super_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+class A1 {
+  A1(this.foo);
+  final int foo;
+}
+
+class A2 {
+  A2(this.foo, this.bar);
+  final String bar;
+  final int foo;
+}
+
+class B1 extends A1 {
+  B1(super.foo) : super();
+}
+
+class B2 extends A2 {
+  B2() : super(0, 1, 2);
+}
+
+class C1 extends A1 {
+  C1(super.foo) : super(42);
+}
+
+class C2 extends A2 {
+  C2(super.foo) : super();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.expect
index 3bd8f09..43d6051 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.expect
@@ -11,7 +11,7 @@
 }
 class C extends self::S {
   field core::int c1;
-  constructor •(core::int c1, [dynamic s1 = #C1, core::int x = #C3, dynamic s2 = #C2]) → self::C
+  constructor •(core::int c1, [core::int s1 = #C1, core::int x = #C3, core::int s2 = #C2]) → self::C
     : self::C::c1 = c1, super self::S::•(s1, s2)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.transformed.expect
index 3bd8f09..43d6051 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 }
 class C extends self::S {
   field core::int c1;
-  constructor •(core::int c1, [dynamic s1 = #C1, core::int x = #C3, dynamic s2 = #C2]) → self::C
+  constructor •(core::int c1, [core::int s1 = #C1, core::int x = #C3, core::int s2 = #C2]) → self::C
     : self::C::c1 = c1, super self::S::•(s1, s2)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect
index 7acd1b7..d71530b 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline.expect
@@ -3,8 +3,10 @@
   int s2;
   S([this.s1 = 1, this.s2 = 2]);
 }
+
 class C extends S {
   int c1;
   C(this.c1, [int super.s1, int x = 0, int super.s2]);
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4d4ec1e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class C extends S {
+  C(this.c1, [int super.s1, int x = 0, int super.s2]);
+  int c1;
+}
+
+class S {
+  S([this.s1 = 1, this.s2 = 2]);
+  int s1;
+  int s2;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.expect
index 3bd8f09..43d6051 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.expect
@@ -11,7 +11,7 @@
 }
 class C extends self::S {
   field core::int c1;
-  constructor •(core::int c1, [dynamic s1 = #C1, core::int x = #C3, dynamic s2 = #C2]) → self::C
+  constructor •(core::int c1, [core::int s1 = #C1, core::int x = #C3, core::int s2 = #C2]) → self::C
     : self::C::c1 = c1, super self::S::•(s1, s2)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.modular.expect
index 3bd8f09..43d6051 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.modular.expect
@@ -11,7 +11,7 @@
 }
 class C extends self::S {
   field core::int c1;
-  constructor •(core::int c1, [dynamic s1 = #C1, core::int x = #C3, dynamic s2 = #C2]) → self::C
+  constructor •(core::int c1, [core::int s1 = #C1, core::int x = #C3, core::int s2 = #C2]) → self::C
     : self::C::c1 = c1, super self::S::•(s1, s2)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.outline.expect
index aae570e..6cb35c7 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.outline.expect
@@ -10,7 +10,7 @@
 }
 class C extends self::S {
   field core::int c1;
-  constructor •(core::int c1, [dynamic s1 = 1, core::int x = 0, dynamic s2 = 2]) → self::C
+  constructor •(core::int c1, [core::int s1 = 1, core::int x = 0, core::int s2 = 2]) → self::C
     : self::C::c1 = c1
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.transformed.expect
index 3bd8f09..43d6051 100644
--- a/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_with_types_and_default_values.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
 }
 class C extends self::S {
   field core::int c1;
-  constructor •(core::int c1, [dynamic s1 = #C1, core::int x = #C3, dynamic s2 = #C2]) → self::C
+  constructor •(core::int c1, [core::int s1 = #C1, core::int x = #C3, core::int s2 = #C2]) → self::C
     : self::C::c1 = c1, super self::S::•(s1, s2)
     ;
 }
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
index ed0e4f7..570dcce 100644
--- a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline.expect
@@ -2,53 +2,75 @@
   final int a;
   A1(this.a);
 }
+
 class B1 {}
+
 class C1 = A1 with B1;
+
 class D1 extends C1 {
   D1(super.a);
 }
+
 class A2 {
   final int a;
   A2({this.a = 0});
 }
+
 class B2 {}
+
 class C2 = A2 with B2;
+
 class D2 extends C2 {
   D2({super.a});
 }
+
 class A3 {
   final int a;
   A3([this.a = 0]);
 }
+
 class B3 {}
+
 class C3 = A3 with B3;
+
 class D3 extends C3 {
   D3([super.a]);
 }
+
 class D4 extends C4 {
   D4([super.foo]);
 }
+
 class C4 = A4 with B4;
+
 class B4 {}
+
 class A4 extends AA4 {
   A4([super.foo]);
 }
+
 class AA4 {
   final int foo;
   AA4([this.foo = 42]);
 }
+
 class D5 extends C5c {
   D5([super.foo]);
 }
+
 class C5c = C5b with B5;
 class C5b = C5a with B5;
 class C5a = A5 with B5;
+
 class B5 {}
+
 class A5 extends AA5 {
   A5([super.foo]);
 }
+
 class AA5 {
   final int foo;
   AA5([this.foo = 42]);
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a0dfff2
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/synthesized_super_constructor_with_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,72 @@
+class A1 {
+  A1(this.a);
+  final int a;
+}
+
+class A2 {
+  A2({this.a = 0});
+  final int a;
+}
+
+class A3 {
+  A3([this.a = 0]);
+  final int a;
+}
+
+class A4 extends AA4 {
+  A4([super.foo]);
+}
+
+class A5 extends AA5 {
+  A5([super.foo]);
+}
+
+class AA4 {
+  AA4([this.foo = 42]);
+  final int foo;
+}
+
+class AA5 {
+  AA5([this.foo = 42]);
+  final int foo;
+}
+
+class B1 {}
+
+class B2 {}
+
+class B3 {}
+
+class B4 {}
+
+class B5 {}
+
+class C1 = A1 with B1;
+class C2 = A2 with B2;
+class C3 = A3 with B3;
+class C4 = A4 with B4;
+class C5a = A5 with B5;
+class C5b = C5a with B5;
+class C5c = C5b with B5;
+
+class D1 extends C1 {
+  D1(super.a);
+}
+
+class D2 extends C2 {
+  D2({super.a});
+}
+
+class D3 extends C3 {
+  D3([super.a]);
+}
+
+class D4 extends C4 {
+  D4([super.foo]);
+}
+
+class D5 extends C5c {
+  D5([super.foo]);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
index 1e4deb1..0903aa2 100644
--- a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline.expect
@@ -2,44 +2,56 @@
   final String foo;
   A1(this.foo);
 }
+
 typedef TA1 = A1;
 typedef TTA1 = TA1;
 typedef TTTA1 = TTA1;
 typedef TTTTA1 = TTTA1;
+
 class D1 extends TTTTA1 {
   D1(super.foo);
 }
+
 class A2 {
   final String foo;
   A2({this.foo = "bar"});
 }
+
 typedef TA2 = A2;
 typedef TTA2 = TA2;
 typedef TTTA2 = TTA2;
 typedef TTTTA2 = TTTA2;
+
 class D2 extends TTTTA2 {
   D2({super.foo});
 }
+
 class A3 {
   final String foo;
   A3([this.foo = "bar"]);
 }
+
 typedef TA3 = A3;
 typedef TTA3 = TA3;
 typedef TTTA3 = TTA3;
 typedef TTTTA3 = TTTA3;
+
 class D3 extends TTTTA3 {
   D3([super.foo]);
 }
+
 class D4 extends TTTTA4 {
   D4([super.foo]);
 }
+
 typedef TTTTA4 = TTTA4;
 typedef TTTA4 = TTA4;
 typedef TTA4 = TA4;
 typedef TA4 = A4;
+
 class A4 {
   final String foo;
   A4([this.foo = "bar"]);
 }
+
 main() {}
diff --git a/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..095c390
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/type_alias_in_supertype.dart.textual_outline_modelled.expect
@@ -0,0 +1,53 @@
+class A1 {
+  A1(this.foo);
+  final String foo;
+}
+
+class A2 {
+  A2({this.foo = "bar"});
+  final String foo;
+}
+
+class A3 {
+  A3([this.foo = "bar"]);
+  final String foo;
+}
+
+class A4 {
+  A4([this.foo = "bar"]);
+  final String foo;
+}
+
+class D1 extends TTTTA1 {
+  D1(super.foo);
+}
+
+class D2 extends TTTTA2 {
+  D2({super.foo});
+}
+
+class D3 extends TTTTA3 {
+  D3([super.foo]);
+}
+
+class D4 extends TTTTA4 {
+  D4([super.foo]);
+}
+
+main() {}
+typedef TA1 = A1;
+typedef TA2 = A2;
+typedef TA3 = A3;
+typedef TA4 = A4;
+typedef TTA1 = TA1;
+typedef TTA2 = TA2;
+typedef TTA3 = TA3;
+typedef TTA4 = TA4;
+typedef TTTA1 = TTA1;
+typedef TTTA2 = TTA2;
+typedef TTTA3 = TTA3;
+typedef TTTA4 = TTA4;
+typedef TTTTA1 = TTTA1;
+typedef TTTTA2 = TTTA2;
+typedef TTTTA3 = TTTA3;
+typedef TTTTA4 = TTTA4;
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart
new file mode 100644
index 0000000..45cf2b3
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart
@@ -0,0 +1,50 @@
+// 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.
+
+class A1 {
+  final int foo;
+  A1(int this.foo);
+}
+
+class B1 extends A1 {
+  B1(int super.foo);
+}
+
+class A2 {
+  final int Function(int) foo;
+  A2(int Function(int) this.foo);
+}
+
+class B2 extends A2 {
+  B2(int Function(int) super.foo);
+}
+
+class A3 {
+  final int Function(int) foo;
+  A3(int this.foo(int));
+}
+
+class B3 extends A3 {
+  B3(int super.foo(int));
+}
+
+class A4 {
+  final void Function() Function(void Function()) foo;
+  A4(void Function() this.foo(void Function()));
+}
+
+class B4 extends A4 {
+  B4(void Function() super.foo(void Function()));
+}
+
+class A5 {
+  final void Function() Function(void Function()) foo;
+  A5(void Function() Function(void Function()) this.foo);
+}
+
+class B5 extends A5 {
+  B5(void Function() Function(void Function()) super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.strong.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.strong.expect
new file mode 100644
index 0000000..c0f8611
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.strong.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : super self::A3::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : super self::A4::•(foo)
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : super self::A5::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..c0f8611
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.strong.transformed.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : super self::A3::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : super self::A4::•(foo)
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : super self::A5::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..82f686f
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline.expect
@@ -0,0 +1,46 @@
+class A1 {
+  final int foo;
+  A1(int this.foo);
+}
+
+class B1 extends A1 {
+  B1(int super.foo);
+}
+
+class A2 {
+  final int Function(int) foo;
+  A2(int Function(int) this.foo);
+}
+
+class B2 extends A2 {
+  B2(int Function(int) super.foo);
+}
+
+class A3 {
+  final int Function(int) foo;
+  A3(int this.foo(int));
+}
+
+class B3 extends A3 {
+  B3(int super.foo(int));
+}
+
+class A4 {
+  final void Function() Function(void Function()) foo;
+  A4(void Function() this.foo(void Function()));
+}
+
+class B4 extends A4 {
+  B4(void Function() super.foo(void Function()));
+}
+
+class A5 {
+  final void Function() Function(void Function()) foo;
+  A5(void Function() Function(void Function()) this.foo);
+}
+
+class B5 extends A5 {
+  B5(void Function() Function(void Function()) super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cf41b18
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,46 @@
+class A1 {
+  A1(int this.foo);
+  final int foo;
+}
+
+class A2 {
+  A2(int Function(int) this.foo);
+  final int Function(int) foo;
+}
+
+class A3 {
+  A3(int this.foo(int));
+  final int Function(int) foo;
+}
+
+class A4 {
+  A4(void Function() this.foo(void Function()));
+  final void Function() Function(void Function()) foo;
+}
+
+class A5 {
+  A5(void Function() Function(void Function()) this.foo);
+  final void Function() Function(void Function()) foo;
+}
+
+class B1 extends A1 {
+  B1(int super.foo);
+}
+
+class B2 extends A2 {
+  B2(int Function(int) super.foo);
+}
+
+class B3 extends A3 {
+  B3(int super.foo(int));
+}
+
+class B4 extends A4 {
+  B4(void Function() super.foo(void Function()));
+}
+
+class B5 extends A5 {
+  B5(void Function() Function(void Function()) super.foo);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.expect
new file mode 100644
index 0000000..c0f8611
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : super self::A3::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : super self::A4::•(foo)
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : super self::A5::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..c0f8611
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.modular.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : super self::A3::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : super self::A4::•(foo)
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : super self::A5::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.outline.expect
new file mode 100644
index 0000000..70b9d6e
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.outline.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.transformed.expect
new file mode 100644
index 0000000..c0f8611
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/typed_super_parameters.dart.weak.transformed.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A1 extends core::Object {
+  final field core::int foo;
+  constructor •(core::int foo) → self::A1
+    : self::A1::foo = foo, super core::Object::•()
+    ;
+}
+class B1 extends self::A1 {
+  constructor •(core::int foo) → self::B1
+    : super self::A1::•(foo)
+    ;
+}
+class A2 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((core::int) → core::int foo) → self::A2
+    : self::A2::foo = foo, super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  constructor •((core::int) → core::int foo) → self::B2
+    : super self::A2::•(foo)
+    ;
+}
+class A3 extends core::Object {
+  final field (core::int) → core::int foo;
+  constructor •((dynamic) → core::int foo) → self::A3
+    : self::A3::foo = foo, super core::Object::•()
+    ;
+}
+class B3 extends self::A3 {
+  constructor •((dynamic) → core::int foo) → self::B3
+    : super self::A3::•(foo)
+    ;
+}
+class A4 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A4
+    : self::A4::foo = foo, super core::Object::•()
+    ;
+}
+class B4 extends self::A4 {
+  constructor •((() → void) → () → void foo) → self::B4
+    : super self::A4::•(foo)
+    ;
+}
+class A5 extends core::Object {
+  final field (() → void) → () → void foo;
+  constructor •((() → void) → () → void foo) → self::A5
+    : self::A5::foo = foo, super core::Object::•()
+    ;
+}
+class B5 extends self::A5 {
+  constructor •((() → void) → () → void foo) → self::B5
+    : super self::A5::•(foo)
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 5a838fa..9a22f85 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -9,6 +9,8 @@
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
 enhanced_enums/simple_mixins: RuntimeError
+enhanced_enums/named_arguments_anywhere/issue48276: TextSerializationFailure # Issue 47524.
+enhanced_enums/named_arguments_anywhere/redirecting_constructor: TextSerializationFailure # Issue 47524.
 extension_types/access_setter_as_getter: ExpectationFileMismatchSerialized # Expected.
 extension_types/call_not_get: ExpectationFileMismatchSerialized # Expected.
 extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
@@ -37,6 +39,7 @@
 general/constructor_initializer_invalid: RuntimeError
 general/covariant_field: TypeCheckError
 general/covariant_generic: RuntimeError
+general/covariant_generic2: RuntimeError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/duplicated_declarations: TypeCheckError
@@ -79,9 +82,10 @@
 general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
+general/infer_field_from_multiple2: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
-general/invocations: RuntimeError
+general/invocations: TypeCheckError
 general/issue37776: RuntimeError
 general/issue38938: RuntimeError
 general/issue38944: RuntimeError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index ca04916..6b47db9 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -29,19 +29,7 @@
 dart2js/late_fields: FormatterCrash
 dart2js/late_statics: FormatterCrash
 enhanced_enums/entries_with_type_arguments: FormatterCrash
-enhanced_enums/enum_as_supertype: FormatterCrash
-enhanced_enums/inference_in_constructor_parameters: FormatterCrash
-enhanced_enums/instantiated_generic_enum_types: FormatterCrash
-enhanced_enums/issue48084: FormatterCrash
-enhanced_enums/issue48181: FormatterCrash
-enhanced_enums/members: FormatterCrash
-enhanced_enums/named_arguments: FormatterCrash
-enhanced_enums/qualified_names_with_no_type_arguments: FormatterCrash
-enhanced_enums/redirecting_initializers: FormatterCrash
-enhanced_enums/simple_fields: FormatterCrash
-enhanced_enums/simple_interfaces: FormatterCrash
-enhanced_enums/simple_mixins: FormatterCrash
-enhanced_enums/supertype_resolved_before_checking: FormatterCrash
+enhanced_enums/recovery_in_elements: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/call_not_get: FormatterCrash
 extension_types/keyword_in_show_hide_element: FormatterCrash
@@ -73,7 +61,9 @@
 general/constants/number_folds_opt_out: 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/constructor_recovery_bad_name_general.crash: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_get.crash: FormatterCrash
@@ -104,6 +94,9 @@
 general/issue47495: FormatterCrash
 general/issue47728_2: FormatterCrash
 general/issue47728_3: FormatterCrash
+general/issue47922: FormatterCrash
+general/issue48487: FormatterCrash
+general/issue48487b: FormatterCrash
 general/issue_46886: FormatterCrash
 general/macro_class: FormatterCrash
 general/many_errors: FormatterCrash
@@ -152,6 +145,9 @@
 late_lowering/override_getter_setter: FormatterCrash
 late_lowering/skip_late_final_uninitialized_instance_fields/main: FormatterCrash
 late_lowering/uninitialized_non_nullable_late_fields: FormatterCrash
+macros/augment_class: FormatterCrash
+macros/class_members: FormatterCrash
+macros/inject_constructor: FormatterCrash
 macros/macro_class: FormatterCrash
 nnbd/abstract_field_errors: FormatterCrash
 nnbd/covariant_late_field: FormatterCrash
@@ -213,17 +209,8 @@
 regress/issue_39091_1: FormatterCrash
 regress/issue_41265.crash: Crash
 regress/issue_41265.crash: FormatterCrash
-super_parameters/circular_dependency_inference: FormatterCrash
-super_parameters/default_values: FormatterCrash
-super_parameters/issue48142: FormatterCrash
-super_parameters/simple: FormatterCrash
-super_parameters/simple_inference: FormatterCrash
-super_parameters/simple_named_super_parameters: FormatterCrash
-super_parameters/simple_positional_super_parameters: FormatterCrash
-super_parameters/super_parameters_with_types_and_default_values: FormatterCrash
-super_parameters/synthesized_super_constructor_with_parameters: FormatterCrash
-super_parameters/type_alias_in_supertype: FormatterCrash
-super_parameters/typed_super_parameter: FormatterCrash
+super_parameters/issue47741: FormatterCrash
+super_parameters/issue47922: 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 f75594a..89d1295 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -12,9 +12,10 @@
 dart2js/mixin_from_opt_in/main: SemiFuzzFailure
 dart2js/mixin_from_opt_in/main.no_link: SemiFuzzFailure
 general/error_recovery/issue_39058_prime.crash: SemiFuzzFailure
-general/error_recovery/issue_39202.crash: SemiFuzzCrash
 general/error_recovery/issue_39058.crash: SemiFuzzFailure
+general/error_recovery/issue_39202.crash: SemiFuzzCrash
 general/platform_invalid_uris/main: SemiFuzzFailure
+general/supported_libraries/main: SemiFuzzFailure
 nnbd_mixed/mixin_from_opt_in/main: SemiFuzzFailure
 nnbd_mixed/mixin_from_opt_in/main.no_link: SemiFuzzFailure
 regress/utf_16_le_content.crash: SemiFuzzCrash
@@ -51,6 +52,7 @@
 general/constructor_initializer_invalid: RuntimeError # Fails execution after recovery
 general/covariant_field: TypeCheckError
 general/covariant_generic: RuntimeError
+general/covariant_generic2: RuntimeError
 general/crashes/crash_02/main: Crash
 general/crashes/crash_06/main: Crash
 general/duplicated_declarations: TypeCheckError
@@ -93,9 +95,10 @@
 general/implicit_super_call: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
+general/infer_field_from_multiple2: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invalid_operator_override: TypeCheckError
-general/invocations: RuntimeError
+general/invocations: TypeCheckError
 general/issue37776: RuntimeError
 general/issue38938: RuntimeError # no main and compile time errors.
 general/issue38944: RuntimeError # no main and compile time errors.
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 9b60daf..c25a9d9 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -14,35 +14,6 @@
       "exclude": []
     },
     {
-      "name": "scanner",
-      "kind": "Chain",
-      "source": "test/fasta/scanner/scanner_suite.dart",
-      "path": "../../",
-      "status": "test/fasta/scanner/scanner.status",
-      "pattern": [
-        "\\.dart$"
-      ],
-      "exclude": []
-    },
-    {
-      "name": "parser",
-      "kind": "Chain",
-      "source": "test/fasta/parser/parser_suite.dart",
-      "path": "../../",
-      "status": "test/fasta/parser/parser.status",
-      "pattern": [
-        "\\.dart$"
-      ],
-      "exclude": [
-        "README.dart",
-        "/sdk/xcodebuild/",
-        "/sdk/out/",
-        "/sdk/build/",
-        "/sdk/tools/sdks/",
-        "/sdk/generated/"
-      ]
-    },
-    {
       "name": "textual_outline",
       "kind": "Chain",
       "source": "test/fasta/textual_outline_suite.dart",
@@ -319,7 +290,8 @@
       "pattern": [
         "_fe_analyzer_shared/lib/.*\\.dart$",
         "front_end/lib/.*\\.dart$",
-        "kernel/lib/.*\\.dart$"
+        "kernel/lib/.*\\.dart$",
+        "kernel/bin/.*\\.dart$"
       ],
       "exclude": [
         "kernel/lib/vm/.*\\.dart$",
diff --git a/pkg/front_end/tool/_fasta/bench_maker.dart b/pkg/front_end/tool/_fasta/bench_maker.dart
index 4e95837..58c45c97 100644
--- a/pkg/front_end/tool/_fasta/bench_maker.dart
+++ b/pkg/front_end/tool/_fasta/bench_maker.dart
@@ -270,7 +270,7 @@
     }
     Uri clsImportUri = cls.enclosingLibrary.importUri;
     bool isNull = cls.name == "Null" &&
-        clsImportUri.scheme == "dart" &&
+        clsImportUri.isScheme("dart") &&
         clsImportUri.path == "core";
     if (!isNull) {
       writeNullability(node.nullability, sb);
diff --git a/pkg/front_end/tool/_fasta/benchmark_visualiser.html b/pkg/front_end/tool/_fasta/benchmark_visualiser.html
new file mode 100644
index 0000000..f2e509b
--- /dev/null
+++ b/pkg/front_end/tool/_fasta/benchmark_visualiser.html
@@ -0,0 +1,78 @@
+<html>
+
+<head>
+  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
+  <script type="text/javascript">
+    google.charts.load('current', { 'packages': ['corechart'] });
+    google.charts.setOnLoadCallback(loaded);
+
+    function drawChart() {
+      var useLogarithmic = document.getElementById('chartLog').checked;
+      try {
+        var benchmarkdata = JSON.parse(document.getElementById('jsondata').value);
+      }
+      catch (e) {
+        document.getElementById('chart_div').innerHTML = "BAD JSON #0!" + e.message;
+        return;
+      }
+      var data = new google.visualization.DataTable();
+      data.addColumn('string', 'Phase');
+
+      var countBenchmarks = benchmarkdata.benchmarkers.length;
+      for (var i = 0; i < countBenchmarks; i++) {
+        data.addColumn('number', 'Run #' + (i + 1));
+      }
+
+      var phaseCount = benchmarkdata.benchmarkers[0].phases.length;
+      for (var i = 0; i < countBenchmarks; i++) {
+        if (benchmarkdata.benchmarkers[i].phases.length != phaseCount) {
+          document.getElementById('chart_div').innerHTML = "BAD JSON #1!";
+          return;
+        }
+      }
+
+      for (var j = 0; j < phaseCount; j++) {
+        var rowArray = [];
+        rowArray.push(benchmarkdata.benchmarkers[0].phases[j].phase);
+        for (var i = 0; i < countBenchmarks; i++) {
+          rowArray.push(benchmarkdata.benchmarkers[i].phases[j].runtime);
+          if (benchmarkdata.benchmarkers[i].phases[j].phase != rowArray[0]) {
+            document.getElementById('chart_div').innerHTML = "BAD JSON #2!";
+            return;
+          }
+        }
+        data.addRow(rowArray);
+      }
+
+      if (useLogarithmic) {
+        var options = {
+          vAxis: {
+            scaleType: 'log'
+          }
+        };
+      } else {
+        var options = {};
+      }
+
+      var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
+      chart.draw(data, options);
+    }
+
+    function loaded() {
+      document.getElementById('chartitbutton').disabled = false;
+    }
+  </script>
+</head>
+
+<body>
+  <textarea id="jsondata" rows="20" cols="80"></textarea>
+  <br />
+  <input type="checkbox" id="chartLog">
+  <label for="chartLog"> Use logarithmic scale</label>
+  <br />
+
+  <button id="chartitbutton" onclick="drawChart()" disabled>Chart it!</button>
+  <div id="chart_div" style="width:1200; height:900"></div>
+</body>
+
+</html>
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index 24fad8f..05a3d5d 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -4,18 +4,31 @@
 
 library fasta.tool.entry_points;
 
-import 'dart:convert' show LineSplitter, jsonDecode, jsonEncode, utf8;
+import 'dart:convert' show JsonEncoder, LineSplitter, jsonDecode, utf8;
 
 import 'dart:io' show File, Platform, exitCode, stderr, stdin, stdout;
 
+import 'dart:typed_data' show Uint8List;
+
 import 'package:_fe_analyzer_shared/src/util/relativize.dart'
     show isWindows, relativizeUri;
 
+import 'package:front_end/src/api_prototype/kernel_generator.dart';
+
 import 'package:front_end/src/fasta/fasta_codes.dart'
     show LocatedMessage, codeInternalProblemVerificationError;
 
+import 'package:front_end/src/fasta/kernel/benchmarker.dart'
+    show BenchmarkPhases, Benchmarker;
+
 import 'package:kernel/kernel.dart'
-    show CanonicalName, Library, Component, Source, loadComponentFromBytes;
+    show
+        CanonicalName,
+        Component,
+        Library,
+        RecursiveVisitor,
+        Source,
+        loadComponentFromBytes;
 
 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
 
@@ -55,7 +68,11 @@
 
 import 'command_line.dart' show runProtectedFromAbort, withGlobalOptions;
 
-const bool summary = const bool.fromEnvironment("summary", defaultValue: false);
+const bool benchmark =
+    const bool.fromEnvironment("benchmark", defaultValue: false);
+
+const bool summary =
+    const bool.fromEnvironment("summary", defaultValue: false) || benchmark;
 
 const int iterations = const int.fromEnvironment("iterations", defaultValue: 1);
 
@@ -64,13 +81,20 @@
 
   // Timing results for each iteration
   List<double> elapsedTimes = <double>[];
+  List<Benchmarker> benchmarkers = <Benchmarker>[];
 
   for (int i = 0; i < iterations; i++) {
     if (i > 0) {
       print("\n\n=== Iteration ${i + 1} of $iterations");
     }
-    var stopwatch = new Stopwatch()..start();
-    await compile(arguments);
+    Stopwatch stopwatch = new Stopwatch()..start();
+    Benchmarker? benchmarker;
+    if (benchmark) {
+      benchmarker = new Benchmarker();
+      benchmarkers.add(benchmarker);
+    }
+    await compile(arguments, benchmarker: benchmarker);
+    benchmarker?.stop();
     stopwatch.stop();
 
     elapsedTimes.add(stopwatch.elapsedMilliseconds.toDouble());
@@ -80,20 +104,47 @@
     }
   }
 
-  if (summary) {
-    var json = jsonEncode(<String, dynamic>{'elapsedTimes': elapsedTimes});
-    print('\nSummary: $json');
-  }
+  summarize(elapsedTimes, benchmarkers);
 }
 
 Future<void> outlineEntryPoint(List<String> arguments) async {
   installAdditionalTargets();
 
+  // Timing results for each iteration
+  List<double> elapsedTimes = <double>[];
+  List<Benchmarker> benchmarkers = <Benchmarker>[];
+
   for (int i = 0; i < iterations; i++) {
     if (i > 0) {
-      print("\n");
+      print("\n\n=== Iteration ${i + 1} of $iterations");
     }
-    await outline(arguments);
+    Stopwatch stopwatch = new Stopwatch()..start();
+    Benchmarker? benchmarker;
+    if (benchmark) {
+      benchmarker = new Benchmarker();
+      benchmarkers.add(benchmarker);
+    }
+    await outline(arguments, benchmarker: benchmarker);
+    benchmarker?.stop();
+    stopwatch.stop();
+
+    elapsedTimes.add(stopwatch.elapsedMilliseconds.toDouble());
+  }
+
+  summarize(elapsedTimes, benchmarkers);
+}
+
+void summarize(List<double> elapsedTimes, List<Benchmarker> benchmarkers) {
+  if (summary) {
+    Map<String, dynamic> map = <String, dynamic>{
+      'elapsedTimes': elapsedTimes,
+      if (benchmarkers.isNotEmpty) 'benchmarkers': benchmarkers
+    };
+    JsonEncoder encoder = new JsonEncoder.withIndent("  ");
+    String json = encoder.convert(map);
+    print('\nSummary:\n\n$json\n');
+  } else {
+    assert(benchmarkers.isEmpty);
   }
 }
 
@@ -218,7 +269,8 @@
   });
 }
 
-Future<KernelTarget> outline(List<String> arguments) async {
+Future<KernelTarget> outline(List<String> arguments,
+    {Benchmarker? benchmarker}) async {
   return await runProtectedFromAbort<KernelTarget>(() async {
     return await withGlobalOptions("outline", arguments, true,
         (CompilerContext c, _) async {
@@ -228,12 +280,14 @@
       CompileTask task =
           new CompileTask(c, new Ticker(isVerbose: c.options.verbose));
       return await task.buildOutline(
-          output: c.options.output, omitPlatform: c.options.omitPlatform);
+          output: c.options.output,
+          omitPlatform: c.options.omitPlatform,
+          benchmarker: benchmarker);
     });
   });
 }
 
-Future<Uri> compile(List<String> arguments) async {
+Future<Uri> compile(List<String> arguments, {Benchmarker? benchmarker}) async {
   return await runProtectedFromAbort<Uri>(() async {
     return await withGlobalOptions("compile", arguments, true,
         (CompilerContext c, _) async {
@@ -242,7 +296,8 @@
       }
       CompileTask task =
           new CompileTask(c, new Ticker(isVerbose: c.options.verbose));
-      return await task.compile(omitPlatform: c.options.omitPlatform);
+      return await task.compile(
+          omitPlatform: c.options.omitPlatform, benchmarker: benchmarker);
     });
   });
 }
@@ -267,8 +322,10 @@
 
   CompileTask(this.c, this.ticker);
 
-  DillTarget createDillTarget(UriTranslator uriTranslator) {
-    return new DillTarget(ticker, uriTranslator, c.options.target);
+  DillTarget createDillTarget(UriTranslator uriTranslator,
+      {Benchmarker? benchmarker}) {
+    return new DillTarget(ticker, uriTranslator, c.options.target,
+        benchmarker: benchmarker);
   }
 
   KernelTarget createKernelTarget(
@@ -303,8 +360,10 @@
   Future<KernelTarget> buildOutline(
       {Uri? output,
       bool omitPlatform: false,
-      bool supportAdditionalDills: true}) async {
-    KernelTarget kernelTarget = await _createKernelTarget();
+      bool supportAdditionalDills: true,
+      Benchmarker? benchmarker}) async {
+    KernelTarget kernelTarget =
+        await _createKernelTarget(benchmarker: benchmarker);
     BuildResult buildResult = await _buildOutline(kernelTarget,
         output: output,
         omitPlatform: omitPlatform,
@@ -313,10 +372,11 @@
     return kernelTarget;
   }
 
-  Future<KernelTarget> _createKernelTarget() async {
+  Future<KernelTarget> _createKernelTarget({Benchmarker? benchmarker}) async {
     UriTranslator uriTranslator = await c.options.getUriTranslator();
     ticker.logMs("Read packages file");
-    DillTarget dillTarget = createDillTarget(uriTranslator);
+    DillTarget dillTarget =
+        createDillTarget(uriTranslator, benchmarker: benchmarker);
     return createKernelTarget(dillTarget, uriTranslator);
   }
 
@@ -325,19 +385,23 @@
       bool omitPlatform: false,
       bool supportAdditionalDills: true}) async {
     DillTarget dillTarget = kernelTarget.dillTarget;
+    Benchmarker? benchmarker = dillTarget.benchmarker;
 
     if (supportAdditionalDills) {
+      benchmarker?.enterPhase(BenchmarkPhases.loadSDK);
       Component? sdkSummary = await c.options.loadSdkSummary(null);
       if (sdkSummary != null) {
         dillTarget.loader.appendLibraries(sdkSummary);
       }
 
+      benchmarker?.enterPhase(BenchmarkPhases.loadAdditionalDills);
       CanonicalName nameRoot = sdkSummary?.root ?? new CanonicalName.root();
       for (Component additionalDill
           in await c.options.loadAdditionalDills(nameRoot)) {
         dillTarget.loader.appendLibraries(additionalDill);
       }
     } else {
+      benchmarker?.enterPhase(BenchmarkPhases.loadSDK);
       Component? sdkSummary = await c.options.loadSdkSummary(null);
       if (sdkSummary != null) {
         dillTarget.loader.appendLibraries(sdkSummary);
@@ -349,11 +413,13 @@
     BuildResult buildResult = await kernelTarget.buildOutlines();
     Component? outline = buildResult.component;
     if (c.options.debugDump && output != null) {
+      benchmarker?.enterPhase(BenchmarkPhases.printComponentText);
       printComponentText(outline,
           libraryFilter: kernelTarget.isSourceLibraryForDebugging);
     }
     if (output != null) {
       if (omitPlatform) {
+        benchmarker?.enterPhase(BenchmarkPhases.omitPlatform);
         outline!.computeCanonicalNames();
         Component userCode = new Component(
             nameRoot: outline.root,
@@ -361,23 +427,28 @@
         userCode.setMainMethodAndMode(
             outline.mainMethodName, true, outline.mode);
         for (Library library in outline.libraries) {
-          if (library.importUri.scheme != "dart") {
+          if (!library.importUri.isScheme("dart")) {
             userCode.libraries.add(library);
           }
         }
         outline = userCode;
       }
 
+      benchmarker?.enterPhase(BenchmarkPhases.writeComponent);
       await writeComponentToFile(outline!, output);
       ticker.logMs("Wrote outline to ${output.toFilePath()}");
     }
+    benchmarker?.enterPhase(BenchmarkPhases.unknown);
     return buildResult;
   }
 
   Future<Uri> compile(
-      {bool omitPlatform: false, bool supportAdditionalDills: true}) async {
+      {bool omitPlatform: false,
+      bool supportAdditionalDills: true,
+      Benchmarker? benchmarker}) async {
     c.options.reportNullSafetyCompilationModeInfo();
-    KernelTarget kernelTarget = await _createKernelTarget();
+    KernelTarget kernelTarget =
+        await _createKernelTarget(benchmarker: benchmarker);
     BuildResult buildResult = await _buildOutline(kernelTarget,
         supportAdditionalDills: supportAdditionalDills);
     Uri uri = c.options.output!;
@@ -387,10 +458,12 @@
     buildResult.macroApplications?.close();
     Component component = buildResult.component!;
     if (c.options.debugDump) {
+      benchmarker?.enterPhase(BenchmarkPhases.printComponentText);
       printComponentText(component,
           libraryFilter: kernelTarget.isSourceLibraryForDebugging);
     }
     if (omitPlatform) {
+      benchmarker?.enterPhase(BenchmarkPhases.omitPlatform);
       component.computeCanonicalNames();
       Component userCode = new Component(
           nameRoot: component.root,
@@ -398,25 +471,37 @@
       userCode.setMainMethodAndMode(
           component.mainMethodName, true, component.mode);
       for (Library library in component.libraries) {
-        if (library.importUri.scheme != "dart") {
+        if (!library.importUri.isScheme("dart")) {
           userCode.libraries.add(library);
         }
       }
       component = userCode;
     }
-    if (uri.scheme == "file") {
+    if (uri.isScheme("file")) {
+      benchmarker?.enterPhase(BenchmarkPhases.writeComponent);
       await writeComponentToFile(component, uri);
       ticker.logMs("Wrote component to ${uri.toFilePath()}");
     }
+    if (benchmarker != null) {
+      // When benchmarking also do a recursive visit of the produced component
+      // that does nothing other than visiting everything. Do this to produce
+      // a reference point for comparing inference time and serialization time.
+      benchmarker.enterPhase(BenchmarkPhases.benchmarkAstVisit);
+      Component component = buildResult.component!;
+      component.accept(new EmptyRecursiveVisitorForBenchmarking());
+    }
+    benchmarker?.enterPhase(BenchmarkPhases.unknown);
     return uri;
   }
 }
 
+class EmptyRecursiveVisitorForBenchmarking extends RecursiveVisitor {}
+
 /// Load the [Component] from the given [uri] and append its libraries
 /// to the [dillTarget].
 Component _appendDillForUri(DillTarget dillTarget, Uri uri) {
-  var bytes = new File.fromUri(uri).readAsBytesSync();
-  var platformComponent = loadComponentFromBytes(bytes);
+  Uint8List bytes = new File.fromUri(uri).readAsBytesSync();
+  Component platformComponent = loadComponentFromBytes(bytes);
   dillTarget.loader.appendLibraries(platformComponent, byteCount: bytes.length);
   return platformComponent;
 }
@@ -439,7 +524,7 @@
     print("Compiling ${c.options.sdkRoot} to $fullOutput");
   }
 
-  var result =
+  CompilerResult result =
       await generateKernelInternal(buildSummary: true, buildComponent: true);
   // ignore: unnecessary_null_comparison
   if (result == null) {
diff --git a/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart b/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
index ff1f22e..814c242 100644
--- a/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
+++ b/pkg/front_end/tool/_fasta/parser_ast_helper_creator.dart
@@ -103,8 +103,8 @@
   ParserCreatorListener(this.out);
 
   @override
-  void beginClassDeclaration(
-      Token begin, Token? abstractToken, Token? macroToken, Token name) {
+  void beginClassDeclaration(Token begin, Token? abstractToken,
+      Token? macroToken, Token? augmentToken, Token name) {
     if (name.lexeme == "Listener") insideListenerClass = true;
   }
 
@@ -116,6 +116,7 @@
   @override
   void beginMethod(
       DeclarationKind declarationKind,
+      Token? augmentToken,
       Token? externalToken,
       Token? staticToken,
       Token? covariantToken,
diff --git a/pkg/front_end/tool/dart_doctest_impl.dart b/pkg/front_end/tool/dart_doctest_impl.dart
index 6481a4c..544345d 100644
--- a/pkg/front_end/tool/dart_doctest_impl.dart
+++ b/pkg/front_end/tool/dart_doctest_impl.dart
@@ -834,6 +834,7 @@
       scope: libraryBuilder.scope.createNestedScope("dartdoctest"),
       nameOrigin: libraryBuilder,
       isUnsupported: false,
+      isAugmentation: false,
     );
 
     if (libraryBuilder is DillLibraryBuilder) {
@@ -854,20 +855,32 @@
         }
 
         dartDocTestLibrary.addImport(
-            null,
-            dependency.importedLibraryReference.asLibrary.importUri.toString(),
-            null,
-            dependency.name,
-            combinators,
-            dependency.isDeferred,
-            -1,
-            -1,
-            -1,
-            -1);
+            metadata: null,
+            isAugmentationImport: false,
+            uri: dependency.importedLibraryReference.asLibrary.importUri
+                .toString(),
+            configurations: null,
+            prefix: dependency.name,
+            combinators: combinators,
+            deferred: dependency.isDeferred,
+            charOffset: -1,
+            prefixCharOffset: -1,
+            uriOffset: -1,
+            importIndex: -1);
       }
 
-      dartDocTestLibrary.addImport(null, libraryBuilder.importUri.toString(),
-          null, null, null, false, -1, -1, -1, -1);
+      dartDocTestLibrary.addImport(
+          metadata: null,
+          isAugmentationImport: false,
+          uri: libraryBuilder.importUri.toString(),
+          configurations: null,
+          prefix: null,
+          combinators: null,
+          deferred: false,
+          charOffset: -1,
+          prefixCharOffset: -1,
+          uriOffset: -1,
+          importIndex: -1);
 
       dartDocTestLibrary.addImportsToScope();
     } else {
@@ -905,7 +918,8 @@
       required LanguageVersion packageLanguageVersion,
       SourceLibraryBuilder? origin,
       kernel.Library? referencesFrom,
-      bool? referenceIsPartOwner}) {
+      bool? referenceIsPartOwner,
+      bool isAugmentation: false}) {
     if (importUri == DocTestIncrementalCompiler.dartDocTestUri) {
       HybridFileSystem hfs = target.fileSystem as HybridFileSystem;
       MemoryFileSystem fs = hfs.memory;
@@ -922,6 +936,7 @@
         packageLanguageVersion: packageLanguageVersion,
         origin: origin,
         referencesFrom: referencesFrom,
-        referenceIsPartOwner: referenceIsPartOwner);
+        referenceIsPartOwner: referenceIsPartOwner,
+        isAugmentation: isAugmentation);
   }
 }
diff --git a/pkg/front_end/tool/fasta b/pkg/front_end/tool/fasta
index 29d5544..1a3d971 100755
--- a/pkg/front_end/tool/fasta
+++ b/pkg/front_end/tool/fasta
@@ -46,7 +46,7 @@
       set -- "$@" /dev/fd/1
     fi
     if [ "$#" != "3" ]; then
-      stop "Usage: $1 dillfile [output]"
+      stop "Usage: $1 dillFile [output]"
     fi
     ;;
   testing)
diff --git a/pkg/front_end/tool/fasta.dart b/pkg/front_end/tool/fasta.dart
index 3e02026..14f8503 100644
--- a/pkg/front_end/tool/fasta.dart
+++ b/pkg/front_end/tool/fasta.dart
@@ -63,7 +63,7 @@
     case 'dump-ir':
       script = '${kernelBin}/dump.dart';
       if (remainingArguments.isEmpty || remainingArguments.length > 2) {
-        stop("Usage: $command dillfile [output]");
+        stop("Usage: $command dillFile [output]");
       }
       break;
     case 'testing':
diff --git a/pkg/front_end/tool/fasta_perf.dart b/pkg/front_end/tool/fasta_perf.dart
index b9b02a3..6c5a003 100644
--- a/pkg/front_end/tool/fasta_perf.dart
+++ b/pkg/front_end/tool/fasta_perf.dart
@@ -13,6 +13,7 @@
     show readBytesFromFileSync;
 
 import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/fasta/ast_builder.dart';
 import 'package:args/args.dart';
 
@@ -95,11 +96,11 @@
 }
 
 /// Scan [contents] and return the first token produced by the scanner.
-Token tokenize(List<int> contents) {
+ScannerResult tokenize(List<int> contents) {
   scanTimer.start();
-  var token = scan(contents).tokens;
+  var result = scan(contents);
   scanTimer.stop();
-  return token;
+  return result;
 }
 
 /// Scans every file in [files] and reports the time spent doing so.
@@ -173,7 +174,7 @@
   var listener = new DirectiveListenerWithNative();
   new TopLevelParser(listener,
           useImplicitCreationExpression: useImplicitCreationExpressionInCfe)
-      .parseUnit(tokenize(contents));
+      .parseUnit(tokenize(contents).tokens);
   return new Set<String>()
     ..addAll(listener.imports.map((directive) => directive.uri!))
     ..addAll(listener.exports.map((directive) => directive.uri!))
@@ -203,17 +204,19 @@
 
 /// Parse the full body of [source].
 void parseFull(Uri uri, List<int> source) {
-  var tokens = tokenize(source);
-  Parser parser = new Parser(new _PartialAstBuilder(uri),
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
+  Parser parser = new Parser(new _PartialAstBuilder(uri, lineInfo),
       useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
-  parser.parseUnit(tokens);
+  parser.parseUnit(result.tokens);
 }
 
 // Note: AstBuilder doesn't build compilation-units or classes, only method
 // bodies. So this listener is not feature complete.
 class _PartialAstBuilder extends AstBuilder {
-  _PartialAstBuilder(Uri uri)
-      : super(null, uri, true, FeatureSet.latestLanguageVersion(), uri);
+  _PartialAstBuilder(Uri uri, LineInfo lineInfo)
+      : super(
+            null, uri, true, FeatureSet.latestLanguageVersion(), lineInfo, uri);
 }
 
 // Invoke the fasta kernel generator for the program starting in [entryUri]
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index 6b91a96..0a1186d 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -123,7 +123,7 @@
   final UriTranslator uriTranslator = await processedOptions.getUriTranslator();
 
   collector.start("Initial compilation");
-  var generator = new IncrementalKernelGenerator(compilerOptions, entryUri);
+  var generator = new IncrementalKernelGenerator(compilerOptions, [entryUri]);
 
   var compilerResult = await generator.computeDelta();
   var component = compilerResult.component;
@@ -168,7 +168,7 @@
       print('edit $edit');
     }
     var uri = edit.uri;
-    if (uri.scheme == 'package') uri = uriTranslator.translate(uri)!;
+    if (uri.isScheme('package')) uri = uriTranslator.translate(uri)!;
     generator.invalidate(uri);
     OverlayFileSystemEntity entity =
         fs.entityForUri(uri) as OverlayFileSystemEntity;
@@ -212,9 +212,9 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme == 'org-dartlang-overlay') {
+    if (uri.isScheme('org-dartlang-overlay')) {
       return new OverlayFileSystemEntity(uri, this);
-    } else if (uri.scheme == 'file') {
+    } else if (uri.isScheme('file')) {
       // The IKG compiler reads ".packages" which might contain absolute file
       // URIs (which it will then try to use on the FS).  We therefore replace
       // them with overlay-fs URIs as usual.
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index be32427..f7ebb13 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -96,13 +96,15 @@
 
 /// Uses the diet-parser to parse only directives in [source].
 CompilationUnit parseDirectives(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   var parser = new Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  return parser.parseDirectives(token);
+  return parser.parseDirectives(result.tokens);
 }
 
 /// Parses every file in [files] and reports the time spent doing so.
@@ -119,14 +121,16 @@
 
 /// Parse the full body of [source] and return it's compilation unit.
 CompilationUnit parseFull(Source source) {
-  var token = tokenize(source);
+  var result = tokenize(source);
+  var lineInfo = LineInfo(result.lineStarts);
   parseTimer.start();
   var parser = new Parser(
     source,
     AnalysisErrorListener.NULL_LISTENER,
     featureSet: FeatureSet.latestLanguageVersion(),
+    lineInfo: lineInfo,
   );
-  var unit = parser.parseCompilationUnit(token);
+  var unit = parser.parseCompilationUnit(result.tokens);
   parseTimer.stop();
   return unit;
 }
@@ -218,7 +222,7 @@
 }
 
 /// Scan [source] and return the first token produced by the scanner.
-Token tokenize(Source source) {
+ScannerResult tokenize(Source source) {
   scanTimer.start();
   // TODO(sigmund): is there a way to scan from a random-access-file without
   // first converting to String?
@@ -232,7 +236,7 @@
     }
   }
   scanTimer.stop();
-  return token;
+  return result;
 }
 
 String _findSdkPath() {
diff --git a/pkg/frontend_server/OWNERS b/pkg/frontend_server/OWNERS
new file mode 100644
index 0000000..33947e7
--- /dev/null
+++ b/pkg/frontend_server/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_CFE
diff --git a/pkg/frontend_server/lib/compute_kernel.dart b/pkg/frontend_server/lib/compute_kernel.dart
index 3fd7f05..e9aac60 100644
--- a/pkg/frontend_server/lib/compute_kernel.dart
+++ b/pkg/frontend_server/lib/compute_kernel.dart
@@ -296,7 +296,7 @@
     if (recordUsedInputs) {
       Set<Uri> usedOutlines = {};
       for (Library lib in incrementalCompilerResult.neededDillLibraries) {
-        if (lib.importUri.scheme == "dart") continue;
+        if (lib.importUri.isScheme("dart")) continue;
         Uri uri = state.libraryToInputDill[lib.importUri];
         if (uri == null) {
           throw new StateError("Library ${lib.importUri} was recorded as used, "
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index c1dac11..bcfd799 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -89,6 +89,9 @@
       help: 'Path to output Ninja depfile. Only used in batch mode.')
   ..addOption('packages',
       help: '.packages file to use for compilation', defaultsTo: null)
+  ..addMultiOption('source',
+      help: 'List additional source files to include into compilation.',
+      defaultsTo: const <String>[])
   ..addOption('target',
       help: 'Target model that determines what core libraries are available',
       allowed: <String>[
@@ -285,7 +288,10 @@
   Future<Null> compileExpression(
       String expression,
       List<String> definitions,
+      List<String> definitionTypes,
       List<String> typeDefinitions,
+      List<String> typeBounds,
+      List<String> typeDefaults,
       String libraryUri,
       String klass,
       String method,
@@ -360,6 +366,7 @@
   ProcessedOptions _processedOptions;
   FileSystem _fileSystem;
   Uri _mainSource;
+  List<Uri> _additionalSources;
   ArgResults _options;
 
   IncrementalCompiler _generator;
@@ -419,6 +426,8 @@
         options['filesystem-scheme'], options['filesystem-root'],
         allowHttp: options['enable-http-uris']);
     _mainSource = resolveInputUri(entryPoint);
+    _additionalSources =
+        (options['source'] as List<String>).map(resolveInputUri).toList();
     _kernelBinaryFilenameFull = _options['output-dill'] ?? '$entryPoint.dill';
     _kernelBinaryFilenameIncremental = _options['output-incremental-dill'] ??
         (_options['output-dill'] != null
@@ -572,6 +581,7 @@
       }
       results = await _runWithPrintRedirection(() => compileToKernel(
           _mainSource, compilerOptions,
+          additionalSources: _additionalSources,
           includePlatform: options['link-platform'],
           deleteToStringPackageUris: options['delete-tostring-package-uri'],
           aot: options['aot'],
@@ -620,7 +630,7 @@
     Set<Uri> uris = Set<Uri>();
     for (Uri uri in compiledSources) {
       // Skip empty or corelib dependencies.
-      if (uri == null || uri.scheme == 'org-dartlang-sdk') continue;
+      if (uri == null || uri.isScheme('org-dartlang-sdk')) continue;
       uris.add(uri);
     }
     for (Uri uri in uris) {
@@ -806,8 +816,8 @@
     }
     errors.clear();
 
-    IncrementalCompilerResult deltaProgramResult =
-        await _generator.compile(entryPoint: _mainSource);
+    IncrementalCompilerResult deltaProgramResult = await _generator
+        .compile(entryPoints: [_mainSource, ..._additionalSources]);
     Component deltaProgram = deltaProgramResult.component;
     if (deltaProgram != null && transformer != null) {
       transformer.transform(deltaProgram);
@@ -840,15 +850,27 @@
   Future<Null> compileExpression(
       String expression,
       List<String> definitions,
+      List<String> definitionTypes,
       List<String> typeDefinitions,
+      List<String> typeBounds,
+      List<String> typeDefaults,
       String libraryUri,
       String klass,
       String method,
       bool isStatic) async {
     final String boundaryKey = Uuid().generateV4();
     _outputStream.writeln('result $boundaryKey');
-    Procedure procedure = await _generator.compileExpression(expression,
-        definitions, typeDefinitions, libraryUri, klass, method, isStatic);
+    Procedure procedure = await _generator.compileExpression(
+        expression,
+        definitions,
+        definitionTypes,
+        typeDefinitions,
+        typeBounds,
+        typeDefaults,
+        libraryUri,
+        klass,
+        method,
+        isStatic);
     if (procedure != null) {
       Component component = createExpressionEvaluationComponent(procedure);
       final IOSink sink = File(_kernelBinaryFilename).openWrite();
@@ -964,7 +986,7 @@
 
     for (var lib in deltaProgram.libraries) {
       Uri uri = lib.importUri;
-      if (uri.scheme == "package") {
+      if (uri.isScheme("package")) {
         packageLibraries.add(lib);
       } else {
         libraries.add(lib);
@@ -1018,7 +1040,7 @@
       for (Library lib in libraries) {
         for (LibraryDependency dep in lib.dependencies) {
           Library dependencyLibrary = dep.importedLibraryReference.asLibrary;
-          if (dependencyLibrary.importUri.scheme != "package") continue;
+          if (!dependencyLibrary.importUri.isScheme("package")) continue;
           Uri dependencyLibraryUri =
               dep.importedLibraryReference.asLibrary.fileUri;
           if (libraryUris.contains(dependencyLibraryUri)) continue;
@@ -1063,7 +1085,8 @@
   }
 
   IncrementalCompiler _createGenerator(Uri initializeFromDillUri) {
-    return IncrementalCompiler(_compilerOptions, _mainSource,
+    return IncrementalCompiler(
+        _compilerOptions, [_mainSource, ..._additionalSources],
         initializeFromDillUri: initializeFromDillUri,
         incrementalSerialization: incrementalSerialization);
   }
@@ -1127,7 +1150,10 @@
   // Note that FE will reject a compileExpression command by returning a null
   // procedure when defs or typeDefs include an illegal identifier.
   List<String> defs = <String>[];
+  List<String> defTypes = <String>[];
   List<String> typeDefs = <String>[];
+  List<String> typeBounds = <String>[];
+  List<String> typeDefaults = <String>[];
   String library;
   String klass;
   String method;
@@ -1268,7 +1294,10 @@
           compiler.compileExpression(
               compileExpressionRequest.expression,
               compileExpressionRequest.defs,
+              compileExpressionRequest.defTypes,
               compileExpressionRequest.typeDefs,
+              compileExpressionRequest.typeBounds,
+              compileExpressionRequest.typeDefaults,
               compileExpressionRequest.library,
               compileExpressionRequest.klass,
               compileExpressionRequest.method,
diff --git a/pkg/frontend_server/lib/src/javascript_bundle.dart b/pkg/frontend_server/lib/src/javascript_bundle.dart
index a989fb1..d39ee75 100644
--- a/pkg/frontend_server/lib/src/javascript_bundle.dart
+++ b/pkg/frontend_server/lib/src/javascript_bundle.dart
@@ -110,7 +110,7 @@
 
     for (Library library in _originalComponent.libraries) {
       if (loadedLibraries.contains(library) ||
-          library.importUri.scheme == 'dart') {
+          library.importUri.isScheme('dart')) {
         continue;
       }
       final Uri moduleUri =
@@ -156,7 +156,7 @@
 
       final moduleUrl = urlForComponentUri(moduleUri);
       String sourceMapBase;
-      if (moduleUri.scheme == 'package') {
+      if (moduleUri.isScheme('package')) {
         // Source locations come through as absolute file uris. In order to
         // make relative paths in the source map we get the absolute uri for
         // the module and make them relative to that.
@@ -218,7 +218,7 @@
   }
 }
 
-String urlForComponentUri(Uri componentUri) => componentUri.scheme == 'package'
+String urlForComponentUri(Uri componentUri) => componentUri.isScheme('package')
     ? '/packages/${componentUri.path}'
     : componentUri.path;
 
diff --git a/pkg/frontend_server/lib/src/strong_components.dart b/pkg/frontend_server/lib/src/strong_components.dart
index a631c30..4c010a8 100644
--- a/pkg/frontend_server/lib/src/strong_components.dart
+++ b/pkg/frontend_server/lib/src/strong_components.dart
@@ -103,7 +103,7 @@
     return <Library>[
       for (LibraryDependency dependency in vertex.dependencies)
         if (!loadedLibraries.contains(dependency.targetLibrary) &&
-            dependency.targetLibrary.importUri.scheme != 'dart')
+            !dependency.targetLibrary.importUri.isScheme('dart'))
           dependency.targetLibrary
     ];
   }
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 35f6315..1d7e607 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -424,7 +424,7 @@
       when(generator.compile()).thenAnswer((_) =>
           Future<IncrementalCompilerResult>.value(
               IncrementalCompilerResult(Component())));
-      when(generator.compile(entryPoint: anyNamed("entryPoint"))).thenAnswer(
+      when(generator.compile(entryPoints: anyNamed("entryPoints"))).thenAnswer(
           (_) => Future<IncrementalCompilerResult>.value(
               IncrementalCompilerResult(Component())));
       final _MockedBinaryPrinterFactory printerFactory =
@@ -1653,6 +1653,68 @@
       expect(await starter(args), 0);
     });
 
+    test('compile multiple sources', () async {
+      final src1 = File('${tempDir.path}/src1.dart')
+        ..createSync()
+        ..writeAsStringSync("main() {}\n");
+      final src2 = File('${tempDir.path}/src2.dart')
+        ..createSync()
+        ..writeAsStringSync("entryPoint2() {}\n");
+      final src3 = File('${tempDir.path}/src3.dart')
+        ..createSync()
+        ..writeAsStringSync("entryPoint3() {}\n");
+      final packagesFile = File('${tempDir.path}/.packages')
+        ..createSync()
+        ..writeAsStringSync("\n");
+      final dillFile = File('${tempDir.path}/app.dill');
+      expect(dillFile.existsSync(), equals(false));
+      final List<String> args = <String>[
+        '--sdk-root=${sdkRoot.toFilePath()}',
+        '--incremental',
+        '--packages=${packagesFile.path}',
+        '--source=${src2.path}',
+        '--source=${src3.path}',
+        '--platform=${platformKernel.path}',
+        '--output-dill=${dillFile.path}'
+      ];
+
+      final StreamController<List<int>> inputStreamController =
+          StreamController<List<int>>();
+      final StreamController<List<int>> stdoutStreamController =
+          StreamController<List<int>>();
+      final IOSink ioSink = IOSink(stdoutStreamController.sink);
+      StreamController<Result> receivedResults = StreamController<Result>();
+
+      final outputParser = OutputParser(receivedResults);
+      stdoutStreamController.stream
+          .transform(utf8.decoder)
+          .transform(const LineSplitter())
+          .listen(outputParser.listener);
+
+      Future<int> result =
+          starter(args, input: inputStreamController.stream, output: ioSink);
+      inputStreamController.add('compile ${src1.uri}\n'.codeUnits);
+      receivedResults.stream.listen((Result compiledResult) {
+        CompilationResult result =
+            CompilationResult.parse(compiledResult.status);
+        expect(dillFile.existsSync(), equals(true));
+        expect(result.filename, dillFile.path);
+        expect(result.errorsCount, 0);
+
+        final component = loadComponentFromBinary(dillFile.path);
+        // Contains (at least) the 3 files we want.
+        final srcUris = {src1.uri, src2.uri, src3.uri};
+        expect(
+            component.libraries
+                .where((lib) => srcUris.contains(lib.fileUri))
+                .length,
+            srcUris.length);
+        inputStreamController.add('quit\n'.codeUnits);
+      });
+      expect(await result, 0);
+      inputStreamController.close();
+    });
+
     group('http uris', () {
       var host = 'localhost';
       File dillFile;
diff --git a/pkg/js/OWNERS b/pkg/js/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/js/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/js_ast/OWNERS b/pkg/js_ast/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/js_ast/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/js_runtime/OWNERS b/pkg/js_runtime/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/js_runtime/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/kernel/OWNERS b/pkg/kernel/OWNERS
new file mode 100644
index 0000000..33947e7
--- /dev/null
+++ b/pkg/kernel/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_CFE
diff --git a/pkg/kernel/bin/compare_hierarchies.dart b/pkg/kernel/bin/compare_hierarchies.dart
new file mode 100644
index 0000000..e6e35ca
--- /dev/null
+++ b/pkg/kernel/bin/compare_hierarchies.dart
@@ -0,0 +1,163 @@
+#!/usr/bin/env dart
+// 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:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/src/tool/command_line_util.dart';
+
+void usage() {
+  print("Compares the hierarchies of two dill files.");
+  print("");
+  print("Usage: dart <script> dillFile1.dill dillFile2.dill "
+      "[import:uri#classToIgnore|another:uri#andClassToIgnore]");
+  exit(1);
+}
+
+void main(List<String> args) {
+  CommandLineHelper.requireVariableArgumentCount([2, 3], args, usage);
+  CommandLineHelper.requireFileExists(args[0]);
+  CommandLineHelper.requireFileExists(args[1]);
+  Component binary1 = CommandLineHelper.tryLoadDill(args[0]);
+  Component binary2 = CommandLineHelper.tryLoadDill(args[1]);
+  Map<Uri, Set<String>> ignoresMap = {};
+  if (args.length >= 3) {
+    List<String> ignores = args[2].split("|");
+    for (String ignore in ignores) {
+      List<String> uriClassName = ignore.split("#");
+      if (uriClassName.length != 2) {
+        print("Ignoring '$ignore' as it doesn't conform to "
+            "'importUri#className'");
+        continue;
+      }
+      Uri uri = Uri.parse(uriClassName[0]);
+      String className = uriClassName[1];
+      (ignoresMap[uri] ??= {}).add(className);
+    }
+  }
+
+  print("(1): ${args[0]}");
+  print("(2): ${args[1]}");
+  print("");
+
+  ClosedWorldClassHierarchy ch1 =
+      new ClassHierarchy(binary1, new CoreTypes(binary1))
+          as ClosedWorldClassHierarchy;
+  ClosedWorldClassHierarchy ch2 =
+      new ClassHierarchy(binary2, new CoreTypes(binary2))
+          as ClosedWorldClassHierarchy;
+
+  Map<Uri, Library> libMap1 = createLibMap(binary1);
+  Map<Uri, Library> libMap2 = createLibMap(binary2);
+  Set<Uri> agreeingImportUris = new Set<Uri>.from(libMap1.keys)
+    ..retainAll(libMap2.keys);
+
+  for (Uri uri in agreeingImportUris) {
+    Library lib1 = libMap1[uri]!;
+    Library lib2 = libMap2[uri]!;
+    Map<String, Class> libClass1 =
+        createPublicClassMap(lib1, ignored: ignoresMap[uri]);
+    Map<String, Class> libClass2 =
+        createPublicClassMap(lib2, ignored: ignoresMap[uri]);
+    Set<String> agreeingClasses = new Set<String>.from(libClass1.keys)
+      ..retainAll(libClass2.keys);
+    if (agreeingClasses.length != libClass1.length ||
+        libClass1.length != libClass2.length) {
+      print("Missing classes in lib $uri");
+      Set<String> missing = new Set<String>.from(libClass1.keys)
+        ..removeAll(libClass2.keys);
+      if (missing.isNotEmpty) {
+        print("In (1) but not in (2): ${missing.toList()}");
+      }
+      missing = new Set<String>.from(libClass2.keys)..removeAll(libClass1.keys);
+      if (missing.isNotEmpty) {
+        print("In (2) but not in (1): ${missing.toList()}");
+      }
+      print("");
+    }
+
+    for (String className in agreeingClasses) {
+      Class c1 = libClass1[className]!;
+      Class c2 = libClass2[className]!;
+      Set<ClassReference> c1Supertypes = createClassReferenceSet(
+          ch1.getAllSupertypeClassesForTesting(c1),
+          onlyPublic: true,
+          ignoresMap: ignoresMap);
+      Set<ClassReference> c2Supertypes = createClassReferenceSet(
+          ch2.getAllSupertypeClassesForTesting(c2),
+          onlyPublic: true,
+          ignoresMap: ignoresMap);
+      Set<ClassReference> missing = new Set<ClassReference>.from(c1Supertypes)
+        ..removeAll(c2Supertypes);
+      if (missing.isNotEmpty) {
+        print("$c1 in $lib1 from (1) has these extra supertypes: "
+            "${missing.toList()}");
+      }
+      missing = new Set<ClassReference>.from(c2Supertypes)
+        ..removeAll(c1Supertypes);
+      if (missing.isNotEmpty) {
+        print("$c2 in $lib2 from (2) has these extra supertypes: "
+            "${missing.toList()}");
+      }
+    }
+  }
+}
+
+Map<Uri, Library> createLibMap(Component c) {
+  Map<Uri, Library> map = {};
+  for (Library lib in c.libraries) {
+    map[lib.importUri] = lib;
+  }
+  return map;
+}
+
+Map<String, Class> createPublicClassMap(Library lib,
+    {required Set<String>? ignored}) {
+  Map<String, Class> map = {};
+  for (Class c in lib.classes) {
+    if (c.name.startsWith("_")) continue;
+    if (ignored?.contains(c.name) ?? false) continue;
+    map[c.name] = c;
+  }
+  return map;
+}
+
+Set<ClassReference> createClassReferenceSet(List<Class> classes,
+    {required bool onlyPublic, required Map<Uri, Set<String>> ignoresMap}) {
+  Set<ClassReference> result = {};
+  for (Class c in classes) {
+    if (onlyPublic && c.name.startsWith("_")) continue;
+    Set<String>? ignored = ignoresMap[c.enclosingLibrary.importUri];
+    if (ignored?.contains(c.name) ?? false) continue;
+    result.add(new ClassReference(c.name, c.enclosingLibrary.importUri));
+  }
+  return result;
+}
+
+class ClassReference {
+  final String name;
+  final Uri libImportUri;
+
+  const ClassReference(this.name, this.libImportUri);
+
+  @override
+  int get hashCode => name.hashCode * 13 + libImportUri.hashCode * 17;
+
+  @override
+  bool operator ==(Object other) {
+    if (identical(this, other)) return true;
+    if (other is! ClassReference) return false;
+    if (name != other.name) return false;
+    if (libImportUri != other.libImportUri) return false;
+    return true;
+  }
+
+  @override
+  String toString() {
+    return "$name ($libImportUri)";
+  }
+}
diff --git a/pkg/kernel/bin/dill_forensic.dart b/pkg/kernel/bin/dill_forensic.dart
index c95d02a..b68b32f 100755
--- a/pkg/kernel/bin/dill_forensic.dart
+++ b/pkg/kernel/bin/dill_forensic.dart
@@ -12,16 +12,16 @@
 
 void main(List<String> args) {
   if (args.length != 1) {
-    throw "Usage: dart <script> <dillfile>";
+    throw "Usage: dart <script> <dillFile>";
   }
   File file = new File(args.single);
   if (!file.existsSync()) {
     throw "Given file doesn't exist.\n"
-        "Usage: dart <script> <dillfile>";
+        "Usage: dart <script> <dillFile>";
   }
   Uint8List bytes = file.readAsBytesSync();
   List<Component> components = splitAndRead(bytes);
-  print("Sucessfully read ${components.length} sub-components.");
+  print("Successfully read ${components.length} sub-components.");
 
   for (int i = 0; i < components.length; i++) {
     Component component = components[i];
@@ -77,7 +77,7 @@
   tagOffsets.add(bytes.length);
 
   // Warning: O(n²) algorithm (though, as the tag is assumed to be rather unique
-  // in normal cases it will probably much better in practise
+  // in normal cases it will probably much better in practice
   // (and n will be low)).
   int fromIndex = 0;
   while (fromIndex < tagOffsets.length - 1) {
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index a2fce2f..cbf0d44 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -10071,7 +10071,7 @@
           type.className.node != null &&
           type.classNode.name == 'Object') {
         Uri uri = type.classNode.enclosingLibrary.importUri;
-        return uri.scheme == 'dart' &&
+        return uri.isScheme('dart') &&
             uri.path == 'core' &&
             type.nullability == Nullability.nonNullable;
       }
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index cf9320c..440da58 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -491,6 +491,25 @@
     return result;
   }
 
+  List<Class> getAllSupertypeClassesForTesting(Class class_) {
+    List<Class?> allClassesByIndex =
+        new List<Class?>.filled(_infoMap.length, null);
+    for (MapEntry<Class, _ClassInfo> c in _infoMap.entries) {
+      allClassesByIndex[c.value.topologicalIndex] = c.key;
+    }
+
+    List<Class> result = [];
+    Uint32List list = _infoMap[class_]!.supertypeIntervalList;
+    for (int i = 0; i < list.length; i += 2) {
+      int from = list[i];
+      int to = list[i + 1];
+      for (int j = from; j < to; j++) {
+        result.add(allClassesByIndex[j]!);
+      }
+    }
+    return result;
+  }
+
   _ClassInfo infoFor(Class cls) {
     _ClassInfo? info = _infoMap[cls];
     if (info == null) {
diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index feaa794..4dc523e 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -164,6 +164,9 @@
   late final Procedure completeOnAsyncReturn =
       index.getTopLevelProcedure('dart:async', '_completeOnAsyncReturn');
 
+  late final Procedure completeWithNoFutureOnAsyncReturn = index
+      .getTopLevelProcedure('dart:async', '_completeWithNoFutureOnAsyncReturn');
+
   late final Procedure completeOnAsyncError =
       index.getTopLevelProcedure('dart:async', '_completeOnAsyncError');
 
diff --git a/pkg/kernel/lib/import_table.dart b/pkg/kernel/lib/import_table.dart
index fd5f59f..eea2adb 100644
--- a/pkg/kernel/lib/import_table.dart
+++ b/pkg/kernel/lib/import_table.dart
@@ -89,7 +89,7 @@
     // whether the scheme is 'file:', but instead we check that is not 'dart:'
     // or 'package:'.
     bool isFileOrCustomScheme(Uri uri) =>
-        uri.scheme != '' && uri.scheme != 'package' && uri.scheme != 'dart';
+        uri.hasScheme && !uri.isScheme('package') && !uri.isScheme('dart');
     bool isTargetSchemeFileOrCustom = isFileOrCustomScheme(targetUri);
     bool isReferenceSchemeFileOrCustom = isFileOrCustomScheme(referenceUri);
     if (isTargetSchemeFileOrCustom && isReferenceSchemeFileOrCustom) {
diff --git a/pkg/kernel/lib/kernel.dart b/pkg/kernel/lib/kernel.dart
index 9433890..e5787d9 100644
--- a/pkg/kernel/lib/kernel.dart
+++ b/pkg/kernel/lib/kernel.dart
@@ -13,6 +13,8 @@
 ///
 library kernel;
 
+import 'dart:typed_data';
+
 import 'ast.dart';
 import 'binary/ast_to_binary.dart';
 import 'binary/ast_from_binary.dart';
@@ -61,7 +63,7 @@
   return future;
 }
 
-List<int> writeComponentToBytes(Component component) {
+Uint8List writeComponentToBytes(Component component) {
   BytesSink sink = new BytesSink();
   new BinaryPrinter(sink).writeComponentFile(component);
   return sink.builder.toBytes();
diff --git a/pkg/kernel/lib/library_index.dart b/pkg/kernel/lib/library_index.dart
index e2f89df..da1d0e7 100644
--- a/pkg/kernel/lib/library_index.dart
+++ b/pkg/kernel/lib/library_index.dart
@@ -22,9 +22,14 @@
   final Map<String, _ClassTable> _libraries = <String, _ClassTable>{};
 
   /// Indexes the libraries with the URIs given in [libraryUris].
-  LibraryIndex(Component component, Iterable<String> libraryUris) {
+  LibraryIndex(Component component, Iterable<String> libraryUris)
+      : this.fromLibraries(component.libraries, libraryUris);
+
+  /// Indexes the libraries with the URIs given in [libraryUris].
+  LibraryIndex.fromLibraries(
+      Iterable<Library> libraries, Iterable<String> libraryUris) {
     Set<String> libraryUriSet = libraryUris.toSet();
-    for (Library library in component.libraries) {
+    for (Library library in libraries) {
       String uri = '${library.importUri}';
       if (libraryUriSet.contains(uri)) {
         _libraries[uri] = new _ClassTable(library);
@@ -39,7 +44,7 @@
   /// Indexes `dart:` libraries.
   LibraryIndex.coreLibraries(Component component) {
     for (Library library in component.libraries) {
-      if (library.importUri.scheme == 'dart') {
+      if (library.importUri.isScheme('dart')) {
         _libraries['${library.importUri}'] = new _ClassTable(library);
       }
     }
diff --git a/pkg/kernel/lib/src/printer.dart b/pkg/kernel/lib/src/printer.dart
index 3d28d32..fc81e9c 100644
--- a/pkg/kernel/lib/src/printer.dart
+++ b/pkg/kernel/lib/src/printer.dart
@@ -266,7 +266,7 @@
               type.className.node != null &&
               type.classNode.name == 'Object') {
             Uri uri = type.classNode.enclosingLibrary.importUri;
-            return uri.scheme == 'dart' &&
+            return uri.isScheme('dart') &&
                 uri.path == 'core' &&
                 (type.nullability == Nullability.legacy ||
                     type.nullability == Nullability.nullable);
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index ea7721a..330d683 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -368,8 +368,8 @@
   /// By default only `dart:*` libraries are allowed. May be overridden for
   /// testing purposes.
   bool allowPlatformPrivateLibraryAccess(Uri importer, Uri imported) =>
-      importer.scheme == "dart" ||
-      (importer.scheme == "package" &&
+      importer.isScheme("dart") ||
+      (importer.isScheme("package") &&
           importer.path.startsWith("dart_internal/"));
 
   /// Whether the `native` language extension is supported within [library].
@@ -557,6 +557,9 @@
   /// in JIT.
   DartLibrarySupport get dartLibrarySupport =>
       const DefaultDartLibrarySupport();
+
+  /// Should this target-specific pragma be recognized by annotation parsers?
+  bool isSupportedPragma(String pragmaName) => false;
 }
 
 class NoneConstantsBackend extends ConstantsBackend {
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index 6beaa67..1f9fab5 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -289,7 +289,7 @@
       Nullability nullability =
           interpretParsedNullability(node.parsedNullability);
       if (declaration.name == 'Null' &&
-          declaration.enclosingLibrary.importUri.scheme == 'dart' &&
+          declaration.enclosingLibrary.importUri.isScheme('dart') &&
           declaration.enclosingLibrary.importUri.path == 'core') {
         if (node.parsedNullability != ParsedNullability.omitted) {
           throw "Null type must be written without explicit nullability";
diff --git a/pkg/kernel/lib/transformations/async.dart b/pkg/kernel/lib/transformations/async.dart
deleted file mode 100644
index acca81a..0000000
--- a/pkg/kernel/lib/transformations/async.dart
+++ /dev/null
@@ -1,671 +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.
-
-library kernel.transformations.async;
-
-import '../kernel.dart';
-import '../type_environment.dart';
-import 'continuation.dart';
-
-/// A transformer that introduces temporary variables for all subexpressions
-/// that are alive across yield points (AwaitExpression).
-///
-/// The transformer is invoked by passing [rewrite] a top-level expression.
-///
-/// All intermediate values that are possible live across an await are named in
-/// local variables.
-///
-/// Await expressions are translated into a call to a helper function and a
-/// native yield.
-class ExpressionLifter extends Transformer {
-  final AsyncRewriterBase continuationRewriter;
-
-  /// Have we seen an await to the right in the expression tree.
-  ///
-  /// Subexpressions are visited right-to-left in the reverse of evaluation
-  /// order.
-  ///
-  /// On entry to an expression's visit method, [seenAwait] indicates whether a
-  /// sibling to the right contains an await.  If so the expression will be
-  /// named in a temporary variable because it is potentially live across an
-  /// await.
-  ///
-  /// On exit from an expression's visit method, [seenAwait] indicates whether
-  /// the expression itself or a sibling to the right contains an await.
-  bool seenAwait = false;
-
-  /// The (reverse order) sequence of statements that have been emitted.
-  ///
-  /// Transformation of an expression produces a transformed expression and a
-  /// sequence of statements which are assignments to local variables, calls to
-  /// helper functions, and yield points.  Only the yield points need to be a
-  /// statements, and they are statements so an implementation does not have to
-  /// handle unnamed expression intermediate live across yield points.
-  ///
-  /// The visit methods return the transformed expression and build a sequence
-  /// of statements by emitting statements into this list.  This list is built
-  /// in reverse because children are visited right-to-left.
-  ///
-  /// If an expression should be named it is named before visiting its children
-  /// so the naming assignment appears in the list before all statements
-  /// implementing the translation of the children.
-  ///
-  /// Children that are conditionally evaluated, such as some parts of logical
-  /// and conditional expressions, must be delimited so that they do not emit
-  /// unguarded statements into [statements].  This is implemented by setting
-  /// [statements] to a fresh empty list before transforming those children.
-  List<Statement> statements = <Statement>[];
-
-  /// The number of currently live named intermediate values.
-  ///
-  /// This index is used to allocate names to temporary values.  Because
-  /// children are visited right-to-left, names are assigned in reverse order of
-  /// index.
-  ///
-  /// When an assignment is emitted into [statements] to name an expression
-  /// before visiting its children, the index is not immediately reserved
-  /// because a child can freely use the same name as its parent.  In practice,
-  /// this will be the rightmost named child.
-  ///
-  /// After visiting the children of a named expression, [nameIndex] is set to
-  /// indicate one more live value (the value of the expression) than before
-  /// visiting the expression.
-  ///
-  /// After visiting the children of an expression that is not named,
-  /// [nameIndex] may still account for names of subexpressions.
-  int nameIndex = 0;
-
-  final VariableDeclaration asyncResult = new VariableDeclaration(':result');
-  final List<VariableDeclaration> variables = <VariableDeclaration>[];
-
-  ExpressionLifter(this.continuationRewriter);
-
-  StatefulStaticTypeContext get _staticTypeContext =>
-      continuationRewriter.staticTypeContext;
-
-  Block blockOf(List<Statement> statements) {
-    return new Block(statements.reversed.toList());
-  }
-
-  /// Rewrite a toplevel expression (toplevel wrt. a statement).
-  ///
-  /// Rewriting an expression produces a sequence of statements and an
-  /// expression.  The sequence of statements are added to the given list.  Pass
-  /// an empty list if the rewritten expression should be delimited from the
-  /// surrounding context.
-  Expression rewrite(Expression expression, List<Statement> outer) {
-    assert(statements.isEmpty);
-    var saved = seenAwait;
-    seenAwait = false;
-    Expression result = transform(expression);
-    outer.addAll(statements.reversed);
-    statements.clear();
-    seenAwait = seenAwait || saved;
-    return result;
-  }
-
-  // Perform an action with a given list of statements so that it cannot emit
-  // statements into the 'outer' list.
-  Expression delimit(Expression action(), List<Statement> inner) {
-    var outer = statements;
-    statements = inner;
-    Expression result = action();
-    statements = outer;
-    return result;
-  }
-
-  // Wraps VariableGet in an unsafeCast if `type` isn't dynamic.
-  Expression unsafeCastVariableGet(
-      VariableDeclaration variable, DartType type) {
-    if (type != const DynamicType()) {
-      return StaticInvocation(
-          continuationRewriter.helper.unsafeCast,
-          Arguments(<Expression>[VariableGet(variable)],
-              types: <DartType>[type]));
-    }
-    return VariableGet(variable);
-  }
-
-  // Name an expression by emitting an assignment to a temporary variable.
-  Expression name(Expression expr) {
-    DartType type = expr.getStaticType(_staticTypeContext);
-    VariableDeclaration temp = allocateTemporary(nameIndex, type);
-    statements.add(ExpressionStatement(VariableSet(temp, expr)));
-    // Wrap in unsafeCast to make sure we pass type information even if we later
-    // have to re-type the temporary variable to dynamic.
-    return unsafeCastVariableGet(temp, type);
-  }
-
-  VariableDeclaration allocateTemporary(int index,
-      [DartType type = const DynamicType()]) {
-    if (variables.length > index) {
-      // Re-type temporary to dynamic if we detect reuse with different type.
-      // Note: We should make sure all uses use `unsafeCast(...)` to pass their
-      // type information on, as that is lost otherwise.
-      if (variables[index].type != const DynamicType() &&
-          variables[index].type != type) {
-        variables[index].type = const DynamicType();
-      }
-      return variables[index];
-    }
-    for (var i = variables.length; i <= index; i++) {
-      variables.add(VariableDeclaration(":async_temporary_${i}", type: type));
-    }
-    return variables[index];
-  }
-
-  // Simple literals.  These are pure expressions so they can be evaluated after
-  // an await to their right.
-  @override
-  TreeNode visitSymbolLiteral(SymbolLiteral expr) => expr;
-  @override
-  TreeNode visitTypeLiteral(TypeLiteral expr) => expr;
-  @override
-  TreeNode visitThisExpression(ThisExpression expr) => expr;
-  @override
-  TreeNode visitStringLiteral(StringLiteral expr) => expr;
-  @override
-  TreeNode visitIntLiteral(IntLiteral expr) => expr;
-  @override
-  TreeNode visitDoubleLiteral(DoubleLiteral expr) => expr;
-  @override
-  TreeNode visitBoolLiteral(BoolLiteral expr) => expr;
-  @override
-  TreeNode visitNullLiteral(NullLiteral expr) => expr;
-
-  // Nullary expressions with effects.
-  Expression nullary(Expression expr) {
-    if (seenAwait) {
-      expr = name(expr);
-      ++nameIndex;
-    }
-    return expr;
-  }
-
-  @override
-  TreeNode visitSuperPropertyGet(SuperPropertyGet expr) => nullary(expr);
-  @override
-  TreeNode visitStaticGet(StaticGet expr) => nullary(expr);
-  @override
-  TreeNode visitStaticTearOff(StaticTearOff expr) => nullary(expr);
-  @override
-  TreeNode visitRethrow(Rethrow expr) => nullary(expr);
-
-  // Getting a final or const variable is not an effect so it can be evaluated
-  // after an await to its right.
-  @override
-  TreeNode visitVariableGet(VariableGet expr) {
-    Expression result = expr;
-    if (seenAwait && !expr.variable.isFinal && !expr.variable.isConst) {
-      result = name(expr);
-      ++nameIndex;
-    }
-    return result;
-  }
-
-  // Transform an expression given an action to transform the children.  For
-  // this purposes of the await transformer the children should generally be
-  // translated from right to left, in the reverse of evaluation order.
-  Expression transformTreeNode(Expression expr, void action()) {
-    var shouldName = seenAwait;
-
-    // 1. If there is an await in a sibling to the right, emit an assignment to
-    // a temporary variable before transforming the children.
-    var result = shouldName ? name(expr) : expr;
-
-    // 2. Remember the number of live temporaries before transforming the
-    // children.
-    var index = nameIndex;
-
-    // 3. Transform the children.  Initially they do not have an await in a
-    // sibling to their right.
-    seenAwait = false;
-    action();
-
-    // 4. If the expression was named then the variables used for children are
-    // no longer live but the variable used for the expression is.
-    // On the other hand, a sibling to the left (yet to be processed) cannot
-    // reuse any of the variables used here, as the assignments in the children
-    // (here) would overwrite assignments in the siblings to the left,
-    // possibly before the use of the overwritten values.
-    if (shouldName) {
-      if (index + 1 > nameIndex) nameIndex = index + 1;
-      seenAwait = true;
-    }
-    return result;
-  }
-
-  // Unary expressions.
-  Expression unary(Expression expr) {
-    return transformTreeNode(expr, () {
-      expr.transformChildren(this);
-    });
-  }
-
-  @override
-  TreeNode visitInvalidExpression(InvalidExpression expr) => unary(expr);
-  @override
-  TreeNode visitVariableSet(VariableSet expr) => unary(expr);
-  @override
-  TreeNode visitInstanceGet(InstanceGet expr) => unary(expr);
-  @override
-  TreeNode visitDynamicGet(DynamicGet expr) => unary(expr);
-  @override
-  TreeNode visitInstanceTearOff(InstanceTearOff expr) => unary(expr);
-  @override
-  TreeNode visitFunctionTearOff(FunctionTearOff expr) => unary(expr);
-  @override
-  TreeNode visitSuperPropertySet(SuperPropertySet expr) => unary(expr);
-  @override
-  TreeNode visitStaticSet(StaticSet expr) => unary(expr);
-  @override
-  TreeNode visitNot(Not expr) => unary(expr);
-  @override
-  TreeNode visitIsExpression(IsExpression expr) => unary(expr);
-  @override
-  TreeNode visitAsExpression(AsExpression expr) => unary(expr);
-  @override
-  TreeNode visitThrow(Throw expr) => unary(expr);
-
-  @override
-  TreeNode visitInstanceSet(InstanceSet expr) {
-    return transformTreeNode(expr, () {
-      expr.value = transform(expr.value)..parent = expr;
-      expr.receiver = transform(expr.receiver)..parent = expr;
-    });
-  }
-
-  @override
-  TreeNode visitDynamicSet(DynamicSet expr) {
-    return transformTreeNode(expr, () {
-      expr.value = transform(expr.value)..parent = expr;
-      expr.receiver = transform(expr.receiver)..parent = expr;
-    });
-  }
-
-  @override
-  TreeNode visitArguments(Arguments args) {
-    for (var named in args.named.reversed) {
-      named.value = transform(named.value)..parent = named;
-    }
-    var positional = args.positional;
-    for (var i = positional.length - 1; i >= 0; --i) {
-      positional[i] = transform(positional[i])..parent = args;
-    }
-    // Returns the arguments, which is assumed at the call sites because they do
-    // not replace the arguments or set parent pointers.
-    return args;
-  }
-
-  @override
-  TreeNode visitInstanceInvocation(InstanceInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-      expr.receiver = transform(expr.receiver)..parent = expr;
-    });
-  }
-
-  @override
-  TreeNode visitLocalFunctionInvocation(LocalFunctionInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-    });
-  }
-
-  @override
-  TreeNode visitDynamicInvocation(DynamicInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-      expr.receiver = transform(expr.receiver)..parent = expr;
-    });
-  }
-
-  @override
-  TreeNode visitFunctionInvocation(FunctionInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-      expr.receiver = transform(expr.receiver)..parent = expr;
-    });
-  }
-
-  @override
-  TreeNode visitEqualsNull(EqualsNull expr) => unary(expr);
-
-  @override
-  TreeNode visitEqualsCall(EqualsCall expr) {
-    return transformTreeNode(expr, () {
-      expr.right = transform(expr.right)..parent = expr;
-      expr.left = transform(expr.left)..parent = expr;
-    });
-  }
-
-  @override
-  TreeNode visitSuperMethodInvocation(SuperMethodInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-    });
-  }
-
-  @override
-  TreeNode visitStaticInvocation(StaticInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-    });
-  }
-
-  @override
-  TreeNode visitConstructorInvocation(ConstructorInvocation expr) {
-    return transformTreeNode(expr, () {
-      visitArguments(expr.arguments);
-    });
-  }
-
-  @override
-  TreeNode visitStringConcatenation(StringConcatenation expr) {
-    return transformTreeNode(expr, () {
-      var expressions = expr.expressions;
-      for (var i = expressions.length - 1; i >= 0; --i) {
-        expressions[i] = transform(expressions[i])..parent = expr;
-      }
-    });
-  }
-
-  @override
-  TreeNode visitListLiteral(ListLiteral expr) {
-    return transformTreeNode(expr, () {
-      var expressions = expr.expressions;
-      for (var i = expressions.length - 1; i >= 0; --i) {
-        expressions[i] = transform(expr.expressions[i])..parent = expr;
-      }
-    });
-  }
-
-  @override
-  TreeNode visitMapLiteral(MapLiteral expr) {
-    return transformTreeNode(expr, () {
-      for (var entry in expr.entries.reversed) {
-        entry.value = transform(entry.value)..parent = entry;
-        entry.key = transform(entry.key)..parent = entry;
-      }
-    });
-  }
-
-  // Control flow.
-  @override
-  TreeNode visitLogicalExpression(LogicalExpression expr) {
-    var shouldName = seenAwait;
-
-    // Right is delimited because it is conditionally evaluated.
-    var rightStatements = <Statement>[];
-    seenAwait = false;
-    expr.right = delimit(() => transform(expr.right), rightStatements)
-      ..parent = expr;
-    var rightAwait = seenAwait;
-
-    if (rightStatements.isEmpty) {
-      // Easy case: right did not emit any statements.
-      seenAwait = shouldName;
-      return transformTreeNode(expr, () {
-        expr.left = transform(expr.left)..parent = expr;
-        seenAwait = seenAwait || rightAwait;
-      });
-    }
-
-    // If right has emitted statements we will produce a temporary t and emit
-    // for && (there is an analogous case for ||):
-    //
-    // t = [left] == true;
-    // if (t) {
-    //   t = [right] == true;
-    // }
-
-    // Recall that statements are emitted in reverse order, so first emit the if
-    // statement, then the assignment of [left] == true, and then translate left
-    // so any statements it emits occur after in the accumulated list (that is,
-    // so they occur before in the corresponding block).
-    var rightBody = blockOf(rightStatements);
-    final type = _staticTypeContext.typeEnvironment.coreTypes
-        .boolRawType(_staticTypeContext.nonNullable);
-    final result = allocateTemporary(nameIndex, type);
-    final objectEquals = continuationRewriter.helper.coreTypes.objectEquals;
-    rightBody.addStatement(new ExpressionStatement(new VariableSet(
-        result,
-        new EqualsCall(expr.right, new BoolLiteral(true),
-            interfaceTarget: objectEquals,
-            functionType: objectEquals.getterType as FunctionType))));
-    var then, otherwise;
-    if (expr.operatorEnum == LogicalExpressionOperator.AND) {
-      then = rightBody;
-      otherwise = null;
-    } else {
-      then = new EmptyStatement();
-      otherwise = rightBody;
-    }
-    statements.add(
-        new IfStatement(unsafeCastVariableGet(result, type), then, otherwise));
-
-    final test = new EqualsCall(expr.left, new BoolLiteral(true),
-        interfaceTarget: objectEquals,
-        functionType: objectEquals.getterType as FunctionType);
-    statements.add(new ExpressionStatement(new VariableSet(result, test)));
-
-    seenAwait = false;
-    test.left = transform(test.left)..parent = test;
-
-    ++nameIndex;
-    seenAwait = seenAwait || rightAwait;
-    return unsafeCastVariableGet(result, type);
-  }
-
-  @override
-  TreeNode visitConditionalExpression(ConditionalExpression expr) {
-    // Then and otherwise are delimited because they are conditionally
-    // evaluated.
-    var shouldName = seenAwait;
-
-    final savedNameIndex = nameIndex;
-
-    var thenStatements = <Statement>[];
-    seenAwait = false;
-    expr.then = delimit(() => transform(expr.then), thenStatements)
-      ..parent = expr;
-    var thenAwait = seenAwait;
-
-    final thenNameIndex = nameIndex;
-    nameIndex = savedNameIndex;
-
-    var otherwiseStatements = <Statement>[];
-    seenAwait = false;
-    expr.otherwise =
-        delimit(() => transform(expr.otherwise), otherwiseStatements)
-          ..parent = expr;
-    var otherwiseAwait = seenAwait;
-
-    // Only one side of this branch will get executed at a time, so just make
-    // sure we have enough temps for either, not both at the same time.
-    if (thenNameIndex > nameIndex) {
-      nameIndex = thenNameIndex;
-    }
-
-    if (thenStatements.isEmpty && otherwiseStatements.isEmpty) {
-      // Easy case: neither then nor otherwise emitted any statements.
-      seenAwait = shouldName;
-      return transformTreeNode(expr, () {
-        expr.condition = transform(expr.condition)..parent = expr;
-        seenAwait = seenAwait || thenAwait || otherwiseAwait;
-      });
-    }
-
-    // If `then` or `otherwise` has emitted statements we will produce a
-    // temporary t and emit:
-    //
-    // if ([condition]) {
-    //   t = [left];
-    // } else {
-    //   t = [right];
-    // }
-    final result = allocateTemporary(nameIndex, expr.staticType);
-    var thenBody = blockOf(thenStatements);
-    var otherwiseBody = blockOf(otherwiseStatements);
-    thenBody.addStatement(
-        new ExpressionStatement(new VariableSet(result, expr.then)));
-    otherwiseBody.addStatement(
-        new ExpressionStatement(new VariableSet(result, expr.otherwise)));
-    var branch = new IfStatement(expr.condition, thenBody, otherwiseBody);
-    statements.add(branch);
-
-    seenAwait = false;
-    branch.condition = transform(branch.condition)..parent = branch;
-
-    ++nameIndex;
-    seenAwait = seenAwait || thenAwait || otherwiseAwait;
-    return unsafeCastVariableGet(result, expr.staticType);
-  }
-
-  // Others.
-  @override
-  TreeNode visitAwaitExpression(AwaitExpression expr) {
-    final R = continuationRewriter;
-    var shouldName = seenAwait;
-    var type = expr.getStaticType(_staticTypeContext);
-    Expression result = unsafeCastVariableGet(asyncResult, type);
-
-    // The statements are in reverse order, so name the result first if
-    // necessary and then add the two other statements in reverse.
-    if (shouldName) result = name(result);
-    Arguments arguments = new Arguments(<Expression>[
-      expr.operand,
-      new VariableGet(R.thenContinuationVariable),
-      new VariableGet(R.catchErrorContinuationVariable),
-      new VariableGet(R.nestedClosureVariable),
-    ]);
-
-    // We are building
-    //
-    //     [yield] (let _ = _awaitHelper(...) in null)
-    //
-    // to ensure that :await_jump_var and :await_jump_ctx are updated
-    // before _awaitHelper is invoked (see BuildYieldStatement in
-    // StreamingFlowGraphBuilder for details of how [yield] is translated to
-    // IL). This guarantees that recursive invocation of the current function
-    // would continue from the correct "jump" position. Recursive invocations
-    // arise if future we are awaiting completes synchronously. Builtin Future
-    // implementation don't complete synchronously, but Flutter's
-    // SynchronousFuture do (see bug http://dartbug.com/32098 for more details).
-    statements.add(R.createContinuationPoint(new Let(
-        new VariableDeclaration(null,
-            initializer: new StaticInvocation(R.helper.awaitHelper, arguments)
-              ..fileOffset = expr.fileOffset),
-        new NullLiteral()))
-      ..fileOffset = expr.fileOffset);
-
-    seenAwait = false;
-    var index = nameIndex;
-    arguments.positional[0] = transform(expr.operand)..parent = arguments;
-
-    if (shouldName && index + 1 > nameIndex) nameIndex = index + 1;
-    seenAwait = true;
-    return result;
-  }
-
-  @override
-  TreeNode visitFunctionExpression(FunctionExpression expr) {
-    expr.transformChildren(this);
-    return expr;
-  }
-
-  @override
-  TreeNode visitLet(Let expr) {
-    var body = transform(expr.body);
-
-    VariableDeclaration variable = expr.variable;
-    if (seenAwait) {
-      // There is an await in the body of `let var x = initializer in body` or
-      // to its right.  We will produce the sequence of statements:
-      //
-      // <initializer's statements>
-      // var x = <initializer's value>
-      // <body's statements>
-      //
-      // and return the body's value.
-      //
-      // So x is in scope for all the body's statements and the body's value.
-      // This has the unpleasant consequence that all let-bound variables with
-      // await in the let's body will end up hoisted out of the expression and
-      // allocated to the context in the VM, even if they have no uses
-      // (`let _ = e0 in e1` can be used for sequencing of `e0` and `e1`).
-      statements.add(variable);
-      var index = nameIndex;
-      seenAwait = false;
-      variable.initializer = transform(variable.initializer!)
-        ..parent = variable;
-      // Temporaries used in the initializer or the body are not live but the
-      // temporary used for the body is.
-      if (index + 1 > nameIndex) nameIndex = index + 1;
-      seenAwait = true;
-      return body;
-    } else {
-      // The body in `let x = initializer in body` did not contain an await.  We
-      // can leave a let expression.
-      return transformTreeNode(expr, () {
-        // The body has already been translated.
-        expr.body = body..parent = expr;
-        variable.initializer = transform(variable.initializer!)
-          ..parent = variable;
-      });
-    }
-  }
-
-  @override
-  TreeNode visitFunctionNode(FunctionNode node) {
-    var nestedRewriter = new RecursiveContinuationRewriter(
-        continuationRewriter.helper, _staticTypeContext);
-    return nestedRewriter.transform(node);
-  }
-
-  @override
-  TreeNode visitBlockExpression(BlockExpression expr) {
-    return transformTreeNode(expr, () {
-      expr.value = transform(expr.value)..parent = expr;
-      List<Statement> body = <Statement>[];
-      for (Statement stmt in expr.body.statements.reversed) {
-        Statement? translation = _rewriteStatement(stmt);
-        if (translation != null) body.add(translation);
-      }
-      expr.body = new Block(body.reversed.toList())..parent = expr;
-    });
-  }
-
-  Statement? _rewriteStatement(Statement stmt) {
-    // This method translates a statement nested in an expression (e.g., in a
-    // block expression).  It produces a translated statement, a list of
-    // statements which are side effects necessary for any await, and a flag
-    // indicating whether there was an await in the statement or to its right.
-    // The translated statement can be null in the case where there was already
-    // an await to the right.
-
-    // The translation is accumulating two lists of statements, an inner list
-    // which is a reversed list of effects needed for the current expression and
-    // an outer list which represents the block containing the current
-    // statement.  We need to preserve both of those from side effects.
-    List<Statement> savedInner = statements;
-    List<Statement> savedOuter = continuationRewriter.statements;
-    statements = <Statement>[];
-    continuationRewriter.statements = <Statement>[];
-    continuationRewriter.transform(stmt);
-
-    List<Statement> results = continuationRewriter.statements;
-    statements = savedInner;
-    continuationRewriter.statements = savedOuter;
-    if (!seenAwait && results.length == 1) return results.first;
-    statements.addAll(results.reversed);
-    return null;
-  }
-
-  @override
-  TreeNode defaultStatement(Statement stmt) {
-    throw new UnsupportedError(
-        "Use _rewriteStatement to transform statement: ${stmt}");
-  }
-}
diff --git a/pkg/kernel/lib/transformations/continuation.dart b/pkg/kernel/lib/transformations/continuation.dart
deleted file mode 100644
index ad89d1f..0000000
--- a/pkg/kernel/lib/transformations/continuation.dart
+++ /dev/null
@@ -1,1576 +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.
-
-library kernel.transformations.continuation;
-
-import 'dart:math' as math;
-
-import '../ast.dart';
-import '../core_types.dart';
-import '../type_algebra.dart' show Substitution;
-import '../type_environment.dart';
-
-import 'async.dart';
-
-class ContinuationVariables {
-  static const awaitJumpVar = ':await_jump_var';
-  static const asyncFuture = ':async_future';
-  static const isSync = ":is_sync";
-  static const awaitContextVar = ':await_ctx_var';
-  static const asyncCompleter = ':async_completer';
-  static const asyncOp = ':async_op';
-  static const asyncOpThen = ':async_op_then';
-  static const asyncOpError = ':async_op_error';
-  static const controller = ':controller';
-  static const controllerStreamVar = ':controller_stream';
-  static const forIterator = ':for-iterator';
-  static const returnValue = ':return_value';
-  static const stream = ':stream';
-  static const syncForIterator = ':sync-for-iterator';
-  static const syncOpGen = ':sync_op_gen';
-  static const syncOp = ':sync_op';
-  // sync_op(..) parameter.
-  static const iteratorParam = ':iterator';
-  // (a)sync_op(..) parameters.
-  static const exceptionParam = ':exception';
-  static const stackTraceParam = ':stack_trace';
-
-  static const savedTryContextVarPrefix = ':saved_try_context_var';
-  static const exceptionVarPrefix = ':exception';
-  static const stackTraceVarPrefix = ':stack_trace';
-
-  static String savedTryContextVar(int depth) =>
-      '$savedTryContextVarPrefix$depth';
-  static String exceptionVar(int depth) => '$exceptionVarPrefix$depth';
-  static String stackTraceVar(int depth) => '$stackTraceVarPrefix$depth';
-}
-
-void transformLibraries(
-    TypeEnvironment typeEnvironment, List<Library> libraries,
-    {required bool productMode}) {
-  var helper =
-      new HelperNodes.fromCoreTypes(typeEnvironment.coreTypes, productMode);
-  var rewriter = new RecursiveContinuationRewriter(
-      helper, new StatefulStaticTypeContext.stacked(typeEnvironment));
-  for (var library in libraries) {
-    rewriter.rewriteLibrary(library);
-  }
-}
-
-Component transformComponent(
-    TypeEnvironment typeEnvironment, Component component,
-    {required bool productMode}) {
-  var helper =
-      new HelperNodes.fromCoreTypes(typeEnvironment.coreTypes, productMode);
-  var rewriter = new RecursiveContinuationRewriter(
-      helper, new StatefulStaticTypeContext.stacked(typeEnvironment));
-  return rewriter.rewriteComponent(component);
-}
-
-Procedure transformProcedure(
-    TypeEnvironment typeEnvironment, Procedure procedure,
-    {required bool productMode}) {
-  var helper =
-      new HelperNodes.fromCoreTypes(typeEnvironment.coreTypes, productMode);
-  var rewriter = new RecursiveContinuationRewriter(
-      helper, new StatefulStaticTypeContext.stacked(typeEnvironment));
-  return rewriter.transform(procedure);
-}
-
-class RecursiveContinuationRewriter extends RemovingTransformer {
-  final HelperNodes helper;
-
-  final VariableDeclaration awaitJumpVariable = new VariableDeclaration(
-      ContinuationVariables.awaitJumpVar,
-      initializer: new IntLiteral(0));
-  final VariableDeclaration awaitContextVariable =
-      new VariableDeclaration(ContinuationVariables.awaitContextVar);
-
-  StatefulStaticTypeContext staticTypeContext;
-
-  RecursiveContinuationRewriter(this.helper, this.staticTypeContext);
-
-  Component rewriteComponent(Component node) {
-    return transform(node);
-  }
-
-  Library rewriteLibrary(Library node) {
-    return transform(node);
-  }
-
-  @override
-  TreeNode visitField(Field node, TreeNode? removalSentinel) {
-    staticTypeContext.enterMember(node);
-    final result = super.visitField(node, removalSentinel);
-    staticTypeContext.leaveMember(node);
-    return result;
-  }
-
-  @override
-  TreeNode visitConstructor(Constructor node, TreeNode? removalSentinel) {
-    staticTypeContext.enterMember(node);
-    final result = super.visitConstructor(node, removalSentinel);
-    staticTypeContext.leaveMember(node);
-    return result;
-  }
-
-  @override
-  TreeNode visitProcedure(Procedure node, TreeNode? removalSentinel) {
-    staticTypeContext.enterMember(node);
-    final result =
-        node.isAbstract ? node : super.visitProcedure(node, removalSentinel);
-    staticTypeContext.leaveMember(node);
-    return result;
-  }
-
-  @override
-  TreeNode visitLibrary(Library node, TreeNode? removalSentinel) {
-    staticTypeContext.enterLibrary(node);
-    Library result = super.visitLibrary(node, removalSentinel) as Library;
-    staticTypeContext.leaveLibrary(node);
-    return result;
-  }
-
-  @override
-  TreeNode visitFunctionNode(FunctionNode node, TreeNode? removalSentinel) {
-    switch (node.asyncMarker) {
-      case AsyncMarker.Sync:
-      case AsyncMarker.SyncYielding:
-        node.transformOrRemoveChildren(
-            new RecursiveContinuationRewriter(helper, staticTypeContext));
-        return node;
-      case AsyncMarker.SyncStar:
-        return new SyncStarFunctionRewriter(helper, node, staticTypeContext)
-            .rewrite();
-      case AsyncMarker.Async:
-        return new AsyncFunctionRewriter(helper, node, staticTypeContext)
-            .rewrite();
-      case AsyncMarker.AsyncStar:
-        return new AsyncStarFunctionRewriter(helper, node, staticTypeContext)
-            .rewrite();
-    }
-  }
-
-  @override
-  TreeNode visitForInStatement(ForInStatement stmt, TreeNode? removalSentinel) {
-    if (stmt.isAsync) {
-      return super.visitForInStatement(stmt, removalSentinel);
-    }
-
-    // Transform
-    //
-    //   for ({var/final} T <variable> in <iterable>) { ... }
-    //
-    // Into
-    //
-    //  {
-    //    final Iterator<T> :sync-for-iterator = <iterable>.iterator;
-    //    for (; :sync-for-iterator.moveNext() ;) {
-    //        {var/final} T variable = :sync-for-iterator.current;
-    //        ...
-    //      }
-    //    }
-    //  }
-    final CoreTypes coreTypes = staticTypeContext.typeEnvironment.coreTypes;
-
-    // The CFE might invoke this transformation despite the program having
-    // compile-time errors. So we will not transform this [stmt] if the
-    // `stmt.iterable` is an invalid expression or has an invalid type and
-    // instead eliminate the entire for-in and replace it with a invalid
-    // expression statement.
-    final iterable = stmt.iterable;
-    final iterableType = iterable.getStaticType(staticTypeContext);
-    if (iterableType is InvalidType) {
-      return ExpressionStatement(
-          InvalidExpression('Invalid iterable type in for-in'));
-    }
-
-    // The NNBD sdk declares that Iterable.get:iterator returns a non-nullable
-    // `Iterator<E>`.
-    assert(const [
-      Nullability.nonNullable,
-      Nullability.legacy
-    ].contains(coreTypes.iterableGetIterator.function.returnType.nullability));
-
-    final DartType elementType = stmt.getElementType(staticTypeContext);
-    final iteratorType = InterfaceType(
-        coreTypes.iteratorClass, staticTypeContext.nonNullable, [elementType]);
-
-    final syncForIterator = VariableDeclaration(
-        ContinuationVariables.syncForIterator,
-        initializer: InstanceGet(InstanceAccessKind.Instance, iterable,
-            coreTypes.iterableGetIterator.name,
-            interfaceTarget: coreTypes.iterableGetIterator,
-            resultType: iteratorType)
-          ..fileOffset = iterable.fileOffset,
-        type: iteratorType)
-      ..fileOffset = iterable.fileOffset;
-
-    final condition = InstanceInvocation(
-        InstanceAccessKind.Instance,
-        VariableGet(syncForIterator),
-        coreTypes.iteratorMoveNext.name,
-        Arguments([]),
-        interfaceTarget: coreTypes.iteratorMoveNext,
-        functionType: coreTypes.iteratorMoveNext.getterType as FunctionType)
-      ..fileOffset = iterable.fileOffset;
-
-    final variable = stmt.variable
-      ..initializer = (InstanceGet(InstanceAccessKind.Instance,
-          VariableGet(syncForIterator), coreTypes.iteratorGetCurrent.name,
-          interfaceTarget: coreTypes.iteratorGetCurrent,
-          resultType: elementType)
-        ..fileOffset = stmt.bodyOffset);
-
-    final Block body = Block([variable, stmt.body])
-      ..fileOffset = stmt.bodyOffset;
-
-    return transform(
-        Block([syncForIterator, ForStatement([], condition, [], body)]));
-  }
-}
-
-abstract class ContinuationRewriterBase extends RecursiveContinuationRewriter {
-  final FunctionNode enclosingFunction;
-
-  int currentTryDepth = 0; // Nesting depth for try-blocks.
-  int currentCatchDepth = 0; // Nesting depth for catch-blocks.
-  int capturedTryDepth = 0; // Deepest yield point within a try-block.
-  int capturedCatchDepth = 0; // Deepest yield point within a catch-block.
-
-  ContinuationRewriterBase(HelperNodes helper, this.enclosingFunction,
-      StatefulStaticTypeContext staticTypeContext)
-      : super(helper, staticTypeContext);
-
-  /// Given a container [type], which is an instantiation of the given
-  /// [containerClass] extract its element type.
-  ///
-  /// This is used to extract element type from Future<T>, Iterable<T> and
-  /// Stream<T> instantiations.
-  ///
-  /// If instantiation is not valid (has more than 1 type argument) then
-  /// this function returns [InvalidType].
-  static DartType elementTypeFrom(Class containerClass, DartType type) {
-    if (type is InterfaceType) {
-      if (type.classNode == containerClass) {
-        if (type.typeArguments.length == 0) {
-          return const DynamicType();
-        } else if (type.typeArguments.length == 1) {
-          return type.typeArguments[0];
-        } else {
-          return const InvalidType();
-        }
-      }
-    }
-    return const DynamicType();
-  }
-
-  static DartType elementTypeFromFutureOr(DartType type) {
-    if (type is FutureOrType) {
-      return type.typeArgument;
-    }
-    return const DynamicType();
-  }
-
-  DartType elementTypeFromReturnType(Class expected) =>
-      elementTypeFrom(expected, enclosingFunction.returnType);
-
-  DartType elementTypeFromAsyncReturnType() =>
-      elementTypeFromFutureOr(enclosingFunction.returnType);
-
-  Statement createContinuationPoint([Expression? value]) {
-    if (value == null) value = new NullLiteral();
-    capturedTryDepth = math.max(capturedTryDepth, currentTryDepth);
-    capturedCatchDepth = math.max(capturedCatchDepth, currentCatchDepth);
-    return new YieldStatement(value, isNative: true);
-  }
-
-  @override
-  TreeNode visitTryCatch(TryCatch node, TreeNode? removalSentinel) {
-    // ignore: unnecessary_null_comparison
-    if (node.body != null) {
-      ++currentTryDepth;
-      node.body = transform(node.body);
-      node.body.parent = node;
-      --currentTryDepth;
-    }
-
-    ++currentCatchDepth;
-    transformCatchList(node.catches, node);
-    --currentCatchDepth;
-    return node;
-  }
-
-  @override
-  TreeNode visitTryFinally(TryFinally node, TreeNode? removalSentinel) {
-    // ignore: unnecessary_null_comparison
-    if (node.body != null) {
-      ++currentTryDepth;
-      node.body = transform(node.body);
-      node.body.parent = node;
-      --currentTryDepth;
-    }
-    // ignore: unnecessary_null_comparison
-    if (node.finalizer != null) {
-      ++currentCatchDepth;
-      node.finalizer = transform(node.finalizer);
-      node.finalizer.parent = node;
-      --currentCatchDepth;
-    }
-    return node;
-  }
-
-  Iterable<VariableDeclaration> createCapturedTryVariables() =>
-      new Iterable.generate(
-          capturedTryDepth,
-          (depth) => new VariableDeclaration(
-              ContinuationVariables.savedTryContextVar(depth)));
-
-  Iterable<VariableDeclaration> createCapturedCatchVariables() =>
-      new Iterable.generate(capturedCatchDepth).expand((depth) => [
-            new VariableDeclaration(ContinuationVariables.exceptionVar(depth)),
-            new VariableDeclaration(ContinuationVariables.stackTraceVar(depth)),
-          ]);
-
-  List<VariableDeclaration> variableDeclarations() {
-    awaitJumpVariable.type = staticTypeContext.typeEnvironment.coreTypes
-        .intRawType(staticTypeContext.nonNullable);
-    return [awaitJumpVariable, awaitContextVariable]
-      ..addAll(createCapturedTryVariables())
-      ..addAll(createCapturedCatchVariables());
-  }
-}
-
-// Transformer that rewrites all variable references to a given function's
-// parameters.
-// This allows us to e.g. "shadow" the original parameter variables with copies
-// unique to given sub-closure to prevent shared variables being overwritten.
-class ShadowRewriter extends Transformer {
-  final FunctionNode enclosingFunction;
-  Map<VariableDeclaration, VariableDeclaration?> _shadowedParameters = {};
-
-  ShadowRewriter(this.enclosingFunction) {
-    for (final parameter in enclosingFunction.positionalParameters
-        .followedBy(enclosingFunction.namedParameters)) {
-      // Put in placeholers so we can allocate new variables lazily- i.e. only
-      // if they're later referenced.
-      _shadowedParameters[parameter] = null;
-    }
-  }
-
-  // Return all used parameters.
-  Iterable<VariableDeclaration> get shadowedParameters =>
-      _shadowedParameters.values.whereType<VariableDeclaration>();
-
-  VariableDeclaration _rewrite(VariableDeclaration variable) {
-    if (_shadowedParameters.containsKey(variable)) {
-      // Fill in placeholder.
-      VariableDeclaration? placeholder = _shadowedParameters[variable];
-      if (placeholder == null) {
-        placeholder = _shadowedParameters[variable] = VariableDeclaration(
-          variable.name,
-          type: variable.type,
-          initializer: VariableGet(variable),
-        );
-      }
-      variable = placeholder;
-    }
-    return variable;
-  }
-
-  @override
-  TreeNode visitVariableGet(VariableGet node) {
-    node = super.visitVariableGet(node) as VariableGet;
-    return node..variable = _rewrite(node.variable);
-  }
-
-  @override
-  TreeNode visitVariableSet(VariableSet node) {
-    node = super.visitVariableSet(node) as VariableSet;
-    return node..variable = _rewrite(node.variable);
-  }
-}
-
-class SyncStarFunctionRewriter extends ContinuationRewriterBase {
-  final VariableDeclaration iteratorParameter;
-
-  SyncStarFunctionRewriter(HelperNodes helper, FunctionNode enclosingFunction,
-      StatefulStaticTypeContext staticTypeContext)
-      : iteratorParameter =
-            VariableDeclaration(ContinuationVariables.iteratorParam)
-              ..type = InterfaceType(
-                  helper.syncIteratorClass, staticTypeContext.nullable, [
-                // Note: This is dynamic since nested iterators (of potentially
-                // different type) are handled by shared internal synthetic
-                // code.
-                const DynamicType(),
-              ]),
-        super(helper, enclosingFunction, staticTypeContext);
-
-  FunctionNode rewrite() {
-    // We need to preserve the original parameters passed to the sync* function
-    // because each iteration should start from those parameters. To achieve
-    // this we shadow the original parameters with new variables (which are
-    // initialised to the original parameter values) and rewrite
-    // the body to use these variables instead.
-    final shadowRewriter = ShadowRewriter(enclosingFunction);
-    enclosingFunction.body = shadowRewriter.transform(enclosingFunction.body!)
-      ..parent = enclosingFunction;
-
-    // TODO(cskau): Figure out why inlining this below causes segfaults.
-    // Maybe related to http://dartbug.com/41596 ?
-    final syncOpFN = FunctionNode(buildClosureBody(),
-        positionalParameters: [
-          iteratorParameter,
-          new VariableDeclaration(ContinuationVariables.exceptionParam),
-          new VariableDeclaration(ContinuationVariables.stackTraceParam),
-        ],
-        requiredParameterCount: 3,
-        // Note: SyncYielding functions have no Dart equivalent. Since they are
-        // synchronous, we use Sync. (Note also that the Dart VM backend uses
-        // the Dart async marker to decide if functions are debuggable.)
-        asyncMarker: AsyncMarker.SyncYielding,
-        dartAsyncMarker: AsyncMarker.Sync,
-        returnType: helper.coreTypes.boolLegacyRawType)
-      ..fileOffset = enclosingFunction.fileOffset
-      ..fileEndOffset = enclosingFunction.fileEndOffset;
-    final syncOpType =
-        syncOpFN.computeThisFunctionType(staticTypeContext.nonNullable);
-
-    final syncOpGenVariable = VariableDeclaration(
-        ContinuationVariables.syncOpGen,
-        type: FunctionType([], syncOpType, staticTypeContext.nonNullable));
-
-    final syncOpVariable = VariableDeclaration(ContinuationVariables.syncOp);
-    final syncOpDecl = FunctionDeclaration(syncOpVariable, syncOpFN)
-      ..fileOffset = enclosingFunction.fileOffset;
-
-    enclosingFunction.body = Block([
-      // :sync_op_gen() {
-      //   :await_jump_var;
-      //   :await_ctx_var;
-      //   bool sync_op(:iterator, e, st) yielding {
-      //     modified <node.body> ...
-      //   };
-      //   return sync_op;
-      // }
-      FunctionDeclaration(
-          syncOpGenVariable,
-          FunctionNode(
-              Block([
-                // :await_jump_var, :await_ctx_var.
-                ...variableDeclarations(),
-                // Shadow any used function parameters with local copies.
-                ...shadowRewriter.shadowedParameters,
-                // :sync_op(..) { .. }
-                syncOpDecl,
-                // return sync_op;
-                ReturnStatement(VariableGet(syncOpVariable)),
-              ]),
-              returnType: syncOpType))
-        ..fileOffset = enclosingFunction.fileOffset,
-
-      // return _SyncIterable<T>(:sync_op_gen);
-      ReturnStatement(ConstructorInvocation(
-          helper.syncIterableConstructor,
-          Arguments([
-            VariableGet(syncOpGenVariable)
-          ], types: [
-            ContinuationRewriterBase.elementTypeFrom(
-                helper.iterableClass, enclosingFunction.returnType)
-          ]))),
-    ])
-      ..parent = enclosingFunction;
-    enclosingFunction.asyncMarker = AsyncMarker.Sync;
-
-    return enclosingFunction;
-  }
-
-  Statement buildClosureBody() {
-    // The body will insert calls to
-    //    :iterator.current_=
-    //    :iterator.isYieldEach=
-    // and return `true` as long as it did something and `false` when it's done.
-    return new Block(<Statement>[
-      transform(enclosingFunction.body!),
-      new ReturnStatement(new BoolLiteral(false))
-        ..fileOffset = enclosingFunction.fileEndOffset
-    ]);
-  }
-
-  @override
-  TreeNode visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
-    Expression transformedExpression = transform(node.expression);
-
-    var statements = <Statement>[];
-    if (node.isYieldStar) {
-      statements.add(new ExpressionStatement(new InstanceSet(
-          InstanceAccessKind.Instance,
-          VariableGet(iteratorParameter),
-          helper.syncIteratorYieldEachIterable.name,
-          transformedExpression,
-          interfaceTarget: helper.syncIteratorYieldEachIterable)));
-    } else {
-      statements.add(new ExpressionStatement(new InstanceSet(
-          InstanceAccessKind.Instance,
-          VariableGet(iteratorParameter),
-          helper.syncIteratorCurrent.name,
-          transformedExpression,
-          interfaceTarget: helper.syncIteratorCurrent)));
-    }
-
-    statements.add(createContinuationPoint(new BoolLiteral(true))
-      ..fileOffset = node.fileOffset);
-    return new Block(statements);
-  }
-
-  @override
-  TreeNode visitReturnStatement(
-      ReturnStatement node, TreeNode? removalSentinel) {
-    // sync* functions cannot return a value.
-    assert(node.expression == null || node.expression is NullLiteral);
-    node.expression = new BoolLiteral(false)..parent = node;
-    return node;
-  }
-}
-
-abstract class AsyncRewriterBase extends ContinuationRewriterBase {
-  // :async_op has type ([dynamic result, dynamic e, StackTrace? s]) -> dynamic
-  final VariableDeclaration nestedClosureVariable;
-
-  // :async_op_then has type (dynamic result) -> dynamic
-  final VariableDeclaration thenContinuationVariable;
-
-  // :async_op_error has type (Object e, StackTrace s) -> dynamic
-  final VariableDeclaration catchErrorContinuationVariable;
-
-  LabeledStatement? labeledBody;
-
-  ExpressionLifter? expressionRewriter;
-
-  AsyncRewriterBase(HelperNodes helper, FunctionNode enclosingFunction,
-      StatefulStaticTypeContext staticTypeContext)
-      : nestedClosureVariable = VariableDeclaration(
-            ContinuationVariables.asyncOp,
-            type: FunctionType([
-              const DynamicType(),
-              const DynamicType(),
-              helper.coreTypes.stackTraceRawType(staticTypeContext.nullable),
-            ], const DynamicType(), staticTypeContext.nonNullable,
-                requiredParameterCount: 0)),
-        thenContinuationVariable = VariableDeclaration(
-            ContinuationVariables.asyncOpThen,
-            type: FunctionType(const [const DynamicType()], const DynamicType(),
-                staticTypeContext.nonNullable)),
-        catchErrorContinuationVariable =
-            VariableDeclaration(ContinuationVariables.asyncOpError,
-                type: FunctionType([
-                  helper.coreTypes.objectRawType(staticTypeContext.nonNullable),
-                  helper.coreTypes
-                      .stackTraceRawType(staticTypeContext.nonNullable),
-                ], const DynamicType(), staticTypeContext.nonNullable)),
-        super(helper, enclosingFunction, staticTypeContext) {}
-
-  void setupAsyncContinuations(List<Statement> statements) {
-    expressionRewriter = new ExpressionLifter(this);
-
-    // var :async_op_then;
-    statements.add(thenContinuationVariable);
-
-    // var :async_op_error;
-    statements.add(catchErrorContinuationVariable);
-
-    // :async_op([:result, :exception, :stack_trace]) {
-    //     modified <node.body>;
-    // }
-    final parameters = <VariableDeclaration>[
-      expressionRewriter!.asyncResult,
-      new VariableDeclaration(ContinuationVariables.exceptionParam),
-      new VariableDeclaration(ContinuationVariables.stackTraceParam),
-    ];
-
-    // Note: SyncYielding functions have no Dart equivalent. Since they are
-    // synchronous, we use Sync. (Note also that the Dart VM backend uses the
-    // Dart async marker to decide if functions are debuggable.)
-    final function = new FunctionNode(buildWrappedBody(),
-        positionalParameters: parameters,
-        requiredParameterCount: 0,
-        asyncMarker: AsyncMarker.SyncYielding,
-        dartAsyncMarker: AsyncMarker.Sync)
-      ..fileOffset = enclosingFunction.fileOffset
-      ..fileEndOffset = enclosingFunction.fileEndOffset;
-
-    // The await expression lifter might have created a number of
-    // [VariableDeclarations].
-    // TODO(kustermann): If we didn't need any variables we should not emit
-    // these.
-    statements.addAll(variableDeclarations());
-    statements.addAll(expressionRewriter!.variables);
-
-    // Now add the closure function itself.
-    final closureFunction =
-        new FunctionDeclaration(nestedClosureVariable, function)
-          ..fileOffset = enclosingFunction.parent!.fileOffset;
-    statements.add(closureFunction);
-
-    // :async_op_then = _asyncThenWrapperHelper(asyncBody);
-    final boundThenClosure = new StaticInvocation(helper.asyncThenWrapper,
-        new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]));
-    final thenClosureVariableAssign = new ExpressionStatement(
-        new VariableSet(thenContinuationVariable, boundThenClosure));
-    statements.add(thenClosureVariableAssign);
-
-    // :async_op_error = _asyncErrorWrapperHelper(asyncBody);
-    final boundCatchErrorClosure = new StaticInvocation(
-        helper.asyncErrorWrapper,
-        new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]));
-    final catchErrorClosureVariableAssign = new ExpressionStatement(
-        new VariableSet(
-            catchErrorContinuationVariable, boundCatchErrorClosure));
-    statements.add(catchErrorClosureVariableAssign);
-  }
-
-  Statement buildWrappedBody() {
-    ++currentTryDepth;
-    labeledBody = new LabeledStatement(null);
-    labeledBody!.body = visitDelimited(enclosingFunction.body!)
-      ..parent = labeledBody;
-    --currentTryDepth;
-
-    var exceptionVariable = VariableDeclaration('exception');
-    var stackTraceVariable = VariableDeclaration('stack_trace',
-        type:
-            helper.coreTypes.stackTraceRawType(staticTypeContext.nonNullable));
-
-    return new TryCatch(
-      buildReturn(labeledBody!),
-      <Catch>[
-        new Catch(
-            exceptionVariable,
-            new Block(<Statement>[
-              buildCatchBody(exceptionVariable, stackTraceVariable)
-            ]),
-            stackTrace: stackTraceVariable)
-      ],
-      isSynthetic: true,
-    );
-  }
-
-  Statement buildCatchBody(VariableDeclaration exceptionVariable,
-      VariableDeclaration stackTraceVariable);
-
-  Statement buildReturn(Statement body);
-
-  List<Statement> statements = <Statement>[];
-
-  @override
-  TreeNode visitExpressionStatement(
-      ExpressionStatement stmt, TreeNode? removalSentinel) {
-    stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
-      ..parent = stmt;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitBlock(Block stmt, TreeNode? removalSentinel) {
-    var saved = statements;
-    statements = <Statement>[];
-    for (var statement in stmt.statements) {
-      transform(statement);
-    }
-    saved.add(new Block(statements));
-    statements = saved;
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitEmptyStatement(EmptyStatement stmt, TreeNode? removalSentinel) {
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitAssertBlock(AssertBlock stmt, TreeNode? removalSentinel) {
-    var saved = statements;
-    statements = <Statement>[];
-    for (var statement in stmt.statements) {
-      transform(statement);
-    }
-    saved.add(new Block(statements));
-    statements = saved;
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitAssertStatement(
-      AssertStatement stmt, TreeNode? removalSentinel) {
-    var condEffects = <Statement>[];
-    var cond = expressionRewriter!.rewrite(stmt.condition, condEffects);
-    if (stmt.message == null) {
-      stmt.condition = cond..parent = stmt;
-      // If the translation of the condition produced a non-empty list of
-      // statements, ensure they are guarded by whether asserts are enabled.
-      statements.add(
-          condEffects.isEmpty ? stmt : new AssertBlock(condEffects..add(stmt)));
-      return removalSentinel ?? EmptyStatement();
-    }
-
-    // The translation depends on the translation of the message, by cases.
-    Statement result;
-    var msgEffects = <Statement>[];
-    stmt.message = expressionRewriter!.rewrite(stmt.message!, msgEffects)
-      ..parent = stmt;
-    if (condEffects.isEmpty) {
-      if (msgEffects.isEmpty) {
-        // The condition rewrote to ([], C) and the message rewrote to ([], M).
-        // The result is
-        //
-        // assert(C, M)
-        stmt.condition = cond..parent = stmt;
-        result = stmt;
-      } else {
-        // The condition rewrote to ([], C) and the message rewrote to (S*, M)
-        // where S* is non-empty.  The result is
-        //
-        // assert { if (C) {} else { S*; assert(false, M); }}
-        stmt.condition = new BoolLiteral(false)..parent = stmt;
-        result = new AssertBlock([
-          new IfStatement(
-              cond, new EmptyStatement(), new Block(msgEffects..add(stmt)))
-        ]);
-      }
-    } else {
-      if (msgEffects.isEmpty) {
-        // The condition rewrote to (S*, C) where S* is non-empty and the
-        // message rewrote to ([], M).  The result is
-        //
-        // assert { S*; assert(C, M); }
-        stmt.condition = cond..parent = stmt;
-        condEffects.add(stmt);
-      } else {
-        // The condition rewrote to (S0*, C) and the message rewrote to (S1*, M)
-        // where both S0* and S1* are non-empty.  The result is
-        //
-        // assert { S0*; if (C) {} else { S1*; assert(false, M); }}
-        stmt.condition = new BoolLiteral(false)..parent = stmt;
-        condEffects.add(new IfStatement(
-            cond, new EmptyStatement(), new Block(msgEffects..add(stmt))));
-      }
-      result = new AssertBlock(condEffects);
-    }
-    statements.add(result);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  Statement visitDelimited(Statement stmt) {
-    var saved = statements;
-    statements = <Statement>[];
-    transform(stmt);
-    Statement result =
-        statements.length == 1 ? statements.first : new Block(statements);
-    statements = saved;
-    return result;
-  }
-
-  @override
-  TreeNode visitLabeledStatement(
-      LabeledStatement stmt, TreeNode? removalSentinel) {
-    stmt.body = visitDelimited(stmt.body)..parent = stmt;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitBreakStatement(BreakStatement stmt, TreeNode? removalSentinel) {
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitWhileStatement(WhileStatement stmt, TreeNode? removalSentinel) {
-    Statement body = visitDelimited(stmt.body);
-    List<Statement> effects = <Statement>[];
-    Expression cond = expressionRewriter!.rewrite(stmt.condition, effects);
-    if (effects.isEmpty) {
-      stmt.condition = cond..parent = stmt;
-      stmt.body = body..parent = stmt;
-      statements.add(stmt);
-    } else {
-      // The condition rewrote to a non-empty sequence of statements S* and
-      // value V.  Rewrite the loop to:
-      //
-      // L: while (true) {
-      //   S*
-      //   if (V) {
-      //     [body]
-      //   else {
-      //     break L;
-      //   }
-      // }
-      LabeledStatement labeled = new LabeledStatement(stmt);
-      stmt.condition = new BoolLiteral(true)..parent = stmt;
-      effects.add(new IfStatement(cond, body, new BreakStatement(labeled)));
-      stmt.body = new Block(effects)..parent = stmt;
-      statements.add(labeled);
-    }
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitDoStatement(DoStatement stmt, TreeNode? removalSentinel) {
-    Statement body = visitDelimited(stmt.body);
-    List<Statement> effects = <Statement>[];
-    stmt.condition = expressionRewriter!.rewrite(stmt.condition, effects)
-      ..parent = stmt;
-    if (effects.isNotEmpty) {
-      // The condition rewrote to a non-empty sequence of statements S* and
-      // value V.  Add the statements to the end of the loop body.
-      Block block = body is Block ? body : body = new Block(<Statement>[body]);
-      for (var effect in effects) {
-        block.statements.add(effect);
-        effect.parent = body;
-      }
-    }
-    stmt.body = body..parent = stmt;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitForStatement(ForStatement stmt, TreeNode? removalSentinel) {
-    // Because of for-loop scoping and variable capture, it is tricky to deal
-    // with await in the loop's variable initializers or update expressions.
-    bool isSimple = true;
-    int length = stmt.variables.length;
-    List<List<Statement>> initEffects =
-        new List<List<Statement>>.generate(length, (int i) {
-      VariableDeclaration decl = stmt.variables[i];
-      List<Statement> statements = <Statement>[];
-      if (decl.initializer != null) {
-        decl.initializer = expressionRewriter!
-            .rewrite(decl.initializer!, statements)
-          ..parent = decl;
-      }
-      isSimple = isSimple && statements.isEmpty;
-      return statements;
-    });
-
-    length = stmt.updates.length;
-    List<List<Statement>> updateEffects =
-        new List<List<Statement>>.generate(length, (int i) {
-      List<Statement> statements = <Statement>[];
-      stmt.updates[i] = expressionRewriter!.rewrite(stmt.updates[i], statements)
-        ..parent = stmt;
-      isSimple = isSimple && statements.isEmpty;
-      return statements;
-    });
-
-    Statement body = visitDelimited(stmt.body);
-    Expression? cond = stmt.condition;
-    List<Statement>? condEffects;
-    if (cond != null) {
-      condEffects = <Statement>[];
-      cond = expressionRewriter!.rewrite(stmt.condition!, condEffects);
-    }
-
-    if (isSimple) {
-      // If the condition contains await, we use a translation like the one for
-      // while loops, but leaving the variable declarations and the update
-      // expressions in place.
-      if (condEffects == null || condEffects.isEmpty) {
-        if (cond != null) stmt.condition = cond..parent = stmt;
-        stmt.body = body..parent = stmt;
-        statements.add(stmt);
-      } else {
-        LabeledStatement labeled = new LabeledStatement(stmt);
-        // No condition in a for loop is the same as true.
-        stmt.condition = null;
-        condEffects
-            .add(new IfStatement(cond!, body, new BreakStatement(labeled)));
-        stmt.body = new Block(condEffects)..parent = stmt;
-        statements.add(labeled);
-      }
-      return removalSentinel ?? EmptyStatement();
-    }
-
-    // If the rewrite of the initializer or update expressions produces a
-    // non-empty sequence of statements then the loop is desugared.  If the loop
-    // has the form:
-    //
-    // label: for (Type x = init; cond; update) body
-    //
-    // it is translated as if it were:
-    //
-    // {
-    //   bool first = true;
-    //   Type temp;
-    //   label: while (true) {
-    //     Type x;
-    //     if (first) {
-    //       first = false;
-    //       x = init;
-    //     } else {
-    //       x = temp;
-    //       update;
-    //     }
-    //     if (cond) {
-    //       body;
-    //       temp = x;
-    //     } else {
-    //       break;
-    //     }
-    //   }
-    // }
-
-    // Place the loop variable declarations at the beginning of the body
-    // statements and move their initializers to a guarded list of statements.
-    // Add assignments to the loop variables from the previous iterations temp
-    // variables before the updates.
-    //
-    // temps.first is the flag 'first'.
-    // TODO(kmillikin) bool type for first.
-    List<VariableDeclaration> temps = <VariableDeclaration>[
-      new VariableDeclaration.forValue(new BoolLiteral(true), isFinal: false)
-    ];
-    List<Statement> loopBody = <Statement>[];
-    List<Statement> initializers = <Statement>[
-      new ExpressionStatement(
-          new VariableSet(temps.first, new BoolLiteral(false)))
-    ];
-    List<Statement> updates = <Statement>[];
-    List<Statement> newBody = <Statement>[body];
-    for (int i = 0; i < stmt.variables.length; ++i) {
-      VariableDeclaration decl = stmt.variables[i];
-      temps.add(new VariableDeclaration(null, type: decl.type));
-      loopBody.add(decl);
-      if (decl.initializer != null) {
-        initializers.addAll(initEffects[i]);
-        initializers.add(
-            new ExpressionStatement(new VariableSet(decl, decl.initializer!)));
-        decl.initializer = null;
-      }
-      updates.add(new ExpressionStatement(
-          new VariableSet(decl, new VariableGet(temps.last))));
-      newBody.add(new ExpressionStatement(
-          new VariableSet(temps.last, new VariableGet(decl))));
-    }
-    // Add the updates to their guarded list of statements.
-    for (int i = 0; i < stmt.updates.length; ++i) {
-      updates.addAll(updateEffects[i]);
-      updates.add(new ExpressionStatement(stmt.updates[i]));
-    }
-    // Initializers or updates could be empty.
-    loopBody.add(new IfStatement(new VariableGet(temps.first),
-        new Block(initializers), new Block(updates)));
-
-    LabeledStatement labeled = new LabeledStatement(null);
-    if (cond != null) {
-      loopBody.addAll(condEffects!);
-    } else {
-      cond = new BoolLiteral(true);
-    }
-    loopBody.add(
-        new IfStatement(cond, new Block(newBody), new BreakStatement(labeled)));
-    labeled.body =
-        new WhileStatement(new BoolLiteral(true), new Block(loopBody))
-          ..parent = labeled;
-    statements.add(new Block(<Statement>[]
-      ..addAll(temps)
-      ..add(labeled)));
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitForInStatement(ForInStatement stmt, TreeNode? removalSentinel) {
-    if (stmt.isAsync) {
-      // Transform
-      //
-      //   await for (T variable in <stream-expression>) { ... }
-      //
-      // To (in product mode):
-      //
-      //   {
-      //     :stream = <stream-expression>;
-      //     _StreamIterator<T> :for-iterator = new _StreamIterator<T>(:stream);
-      //     try {
-      //       while (await :for-iterator.moveNext()) {
-      //         T <variable> = :for-iterator.current;
-      //         ...
-      //       }
-      //     } finally {
-      //       if (:for-iterator._subscription != null)
-      //           await :for-iterator.cancel();
-      //     }
-      //   }
-      //
-      // Or (in non-product mode):
-      //
-      //   {
-      //     :stream = <stream-expression>;
-      //     _StreamIterator<T> :for-iterator = new _StreamIterator<T>(:stream);
-      //     try {
-      //       while (let _ = _asyncStarMoveNextHelper(:stream) in
-      //           await :for-iterator.moveNext()) {
-      //         T <variable> = :for-iterator.current;
-      //         ...
-      //       }
-      //     } finally {
-      //       if (:for-iterator._subscription != null)
-      //           await :for-iterator.cancel();
-      //     }
-      //   }
-      var valueVariable = stmt.variable;
-
-      var streamVariable = new VariableDeclaration(ContinuationVariables.stream,
-          initializer: stmt.iterable,
-          type: stmt.iterable.getStaticType(staticTypeContext));
-
-      final streamIteratorType = new InterfaceType(helper.streamIteratorClass,
-          staticTypeContext.nullable, [valueVariable.type]);
-      var forIteratorVariable = VariableDeclaration(
-          ContinuationVariables.forIterator,
-          initializer: new ConstructorInvocation(
-              helper.streamIteratorConstructor,
-              new Arguments(<Expression>[new VariableGet(streamVariable)],
-                  types: [valueVariable.type])),
-          type: streamIteratorType);
-
-      // await :for-iterator.moveNext()
-      var condition = new AwaitExpression(new InstanceInvocation(
-          InstanceAccessKind.Instance,
-          VariableGet(forIteratorVariable),
-          helper.streamIteratorMoveNext.name,
-          new Arguments([]),
-          interfaceTarget: helper.streamIteratorMoveNext,
-          functionType:
-              helper.streamIteratorMoveNext.getterType as FunctionType))
-        ..fileOffset = stmt.fileOffset;
-
-      Expression whileCondition;
-      if (helper.productMode) {
-        whileCondition = condition;
-      } else {
-        // _asyncStarMoveNextHelper(:stream)
-        var asyncStarMoveNextCall = new StaticInvocation(
-            helper.asyncStarMoveNextHelper,
-            new Arguments([new VariableGet(streamVariable)]))
-          ..fileOffset = stmt.fileOffset;
-
-        // let _ = asyncStarMoveNextCall in (condition)
-        whileCondition = new Let(
-            new VariableDeclaration(null, initializer: asyncStarMoveNextCall),
-            condition);
-      }
-
-      // T <variable> = :for-iterator.current;
-      valueVariable.initializer = new InstanceGet(InstanceAccessKind.Instance,
-          VariableGet(forIteratorVariable), helper.streamIteratorCurrent.name,
-          interfaceTarget: helper.streamIteratorCurrent,
-          resultType: valueVariable.type)
-        ..fileOffset = stmt.bodyOffset;
-      valueVariable.initializer!.parent = valueVariable;
-
-      var whileBody = new Block(<Statement>[valueVariable, stmt.body]);
-      var tryBody = new WhileStatement(whileCondition, whileBody);
-
-      // if (:for-iterator._subscription != null) await :for-iterator.cancel();
-      final DartType subscriptionType =
-          Substitution.fromInterfaceType(streamIteratorType).substituteType(
-              helper.coreTypes.streamIteratorSubscription.getterType);
-      var tryFinalizer = new IfStatement(
-          new Not(new EqualsNull(new InstanceGet(
-              InstanceAccessKind.Instance,
-              VariableGet(forIteratorVariable),
-              helper.coreTypes.streamIteratorSubscription.name,
-              interfaceTarget: helper.coreTypes.streamIteratorSubscription,
-              resultType: subscriptionType))),
-          new ExpressionStatement(new AwaitExpression(new InstanceInvocation(
-              InstanceAccessKind.Instance,
-              VariableGet(forIteratorVariable),
-              helper.streamIteratorCancel.name,
-              new Arguments(<Expression>[]),
-              interfaceTarget: helper.streamIteratorCancel,
-              functionType:
-                  helper.streamIteratorCancel.getterType as FunctionType))),
-          null);
-
-      var tryFinally = new TryFinally(tryBody, tryFinalizer);
-
-      var block = new Block(
-          <Statement>[streamVariable, forIteratorVariable, tryFinally]);
-      transform<Statement>(block);
-      return removalSentinel ?? EmptyStatement();
-    } else {
-      super.visitForInStatement(stmt, removalSentinel);
-      return removalSentinel ?? EmptyStatement();
-    }
-  }
-
-  @override
-  TreeNode visitSwitchStatement(
-      SwitchStatement stmt, TreeNode? removalSentinel) {
-    stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
-      ..parent = stmt;
-    for (var switchCase in stmt.cases) {
-      // Expressions in switch cases cannot contain await so they do not need to
-      // be translated.
-      switchCase.body = visitDelimited(switchCase.body)..parent = switchCase;
-    }
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitContinueSwitchStatement(
-      ContinueSwitchStatement stmt, TreeNode? removalSentinel) {
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitIfStatement(IfStatement stmt, TreeNode? removalSentinel) {
-    stmt.condition = expressionRewriter!.rewrite(stmt.condition, statements)
-      ..parent = stmt;
-    stmt.then = visitDelimited(stmt.then)..parent = stmt;
-    if (stmt.otherwise != null) {
-      stmt.otherwise = visitDelimited(stmt.otherwise!)..parent = stmt;
-    }
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitTryCatch(TryCatch stmt, TreeNode? removalSentinel) {
-    ++currentTryDepth;
-    stmt.body = visitDelimited(stmt.body)..parent = stmt;
-    --currentTryDepth;
-
-    ++currentCatchDepth;
-    for (var clause in stmt.catches) {
-      clause.body = visitDelimited(clause.body)..parent = clause;
-    }
-    --currentCatchDepth;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitTryFinally(TryFinally stmt, TreeNode? removalSentinel) {
-    ++currentTryDepth;
-    stmt.body = visitDelimited(stmt.body)..parent = stmt;
-    --currentTryDepth;
-    ++currentCatchDepth;
-    stmt.finalizer = visitDelimited(stmt.finalizer)..parent = stmt;
-    --currentCatchDepth;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
-    stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
-      ..parent = stmt;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitVariableDeclaration(
-      VariableDeclaration stmt, TreeNode? removalSentinel) {
-    if (stmt.initializer != null) {
-      stmt.initializer = expressionRewriter!
-          .rewrite(stmt.initializer!, statements)
-        ..parent = stmt;
-    }
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitFunctionDeclaration(
-      FunctionDeclaration stmt, TreeNode? removalSentinel) {
-    stmt.function = transform(stmt.function)..parent = stmt;
-    statements.add(stmt);
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
-      throw 'unreachable $node';
-}
-
-class AsyncStarFunctionRewriter extends AsyncRewriterBase {
-  VariableDeclaration? controllerVariable;
-
-  AsyncStarFunctionRewriter(HelperNodes helper, FunctionNode enclosingFunction,
-      StatefulStaticTypeContext staticTypeContext)
-      : super(helper, enclosingFunction, staticTypeContext);
-
-  FunctionNode rewrite() {
-    var statements = <Statement>[];
-
-    final elementType = elementTypeFromReturnType(helper.streamClass);
-
-    // _AsyncStarStreamController<T> :controller;
-    controllerVariable = new VariableDeclaration(
-        ContinuationVariables.controller,
-        type: new InterfaceType(helper.asyncStarStreamControllerClass,
-            staticTypeContext.nullable, [elementType]));
-    statements.add(controllerVariable!);
-
-    // dynamic :controller_stream;
-    VariableDeclaration controllerStreamVariable =
-        new VariableDeclaration(ContinuationVariables.controllerStreamVar);
-    statements.add(controllerStreamVariable);
-
-    setupAsyncContinuations(statements);
-
-    // :controller = new _AsyncStarStreamController<T>(:async_op);
-    var arguments = new Arguments(
-        <Expression>[new VariableGet(nestedClosureVariable)],
-        types: [elementType]);
-    var buildController = new ConstructorInvocation(
-        helper.asyncStarStreamControllerConstructor, arguments)
-      ..fileOffset = enclosingFunction.fileOffset;
-    var setController = new ExpressionStatement(
-        new VariableSet(controllerVariable!, buildController));
-    statements.add(setController);
-
-    // :controller_stream = :controller.stream;
-    var completerGet = new VariableGet(controllerVariable!);
-    statements.add(new ExpressionStatement(new VariableSet(
-        controllerStreamVariable,
-        new InstanceGet(InstanceAccessKind.Instance, completerGet,
-            helper.asyncStarStreamControllerStream.name,
-            interfaceTarget: helper.asyncStarStreamControllerStream,
-            resultType: Substitution.fromInterfaceType(
-                    controllerVariable!.type as InterfaceType)
-                .substituteType(
-                    helper.asyncStarStreamControllerStream.getterType)))));
-
-    // return :controller_stream;
-    var returnStatement =
-        new ReturnStatement(new VariableGet(controllerStreamVariable));
-    statements.add(returnStatement);
-
-    enclosingFunction.body = new Block(statements)..parent = enclosingFunction;
-    enclosingFunction.asyncMarker = AsyncMarker.Sync;
-    return enclosingFunction;
-  }
-
-  @override
-  Statement buildWrappedBody() {
-    ++currentTryDepth;
-    Statement body = super.buildWrappedBody();
-    --currentTryDepth;
-
-    var finallyBody = new ExpressionStatement(new InstanceInvocation(
-        InstanceAccessKind.Instance,
-        new VariableGet(controllerVariable!),
-        helper.asyncStarStreamControllerClose.name,
-        new Arguments([]),
-        interfaceTarget: helper.asyncStarStreamControllerClose,
-        functionType:
-            helper.asyncStarStreamControllerClose.getterType as FunctionType));
-
-    var tryFinally = new TryFinally(body, new Block(<Statement>[finallyBody]));
-    return tryFinally;
-  }
-
-  @override
-  Statement buildCatchBody(VariableDeclaration exceptionVariable,
-      VariableDeclaration stackTraceVariable) {
-    return new ExpressionStatement(new InstanceInvocation(
-        InstanceAccessKind.Instance,
-        new VariableGet(controllerVariable!),
-        helper.asyncStarStreamControllerAddError.name,
-        new Arguments(<Expression>[
-          new VariableGet(exceptionVariable),
-          new VariableGet(stackTraceVariable)
-        ]),
-        interfaceTarget: helper.asyncStarStreamControllerAddError,
-        functionType: helper.asyncStarStreamControllerAddError.getterType
-            as FunctionType));
-  }
-
-  @override
-  Statement buildReturn(Statement body) {
-    // Async* functions cannot return a value.  The returns from the function
-    // have been translated into breaks from the labeled body.
-    return new Block(<Statement>[
-      body,
-      new ReturnStatement()..fileOffset = enclosingFunction.fileEndOffset,
-    ]);
-  }
-
-  @override
-  TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
-    Expression expr = expressionRewriter!.rewrite(stmt.expression, statements);
-
-    final Procedure addMethod = stmt.isYieldStar
-        ? helper.asyncStarStreamControllerAddStream
-        : helper.asyncStarStreamControllerAdd;
-    final FunctionType addMethodFunctionType = Substitution.fromInterfaceType(
-            controllerVariable!.type as InterfaceType)
-        .substituteType(addMethod.getterType) as FunctionType;
-    var addExpression = new InstanceInvocation(
-        InstanceAccessKind.Instance,
-        new VariableGet(controllerVariable!),
-        addMethod.name,
-        new Arguments(<Expression>[expr]),
-        interfaceTarget: addMethod,
-        functionType: addMethodFunctionType)
-      ..fileOffset = stmt.fileOffset;
-
-    statements.add(new IfStatement(
-        addExpression,
-        new ReturnStatement(new NullLiteral()),
-        createContinuationPoint()..fileOffset = stmt.fileOffset));
-    return removalSentinel ?? EmptyStatement();
-  }
-
-  @override
-  TreeNode visitReturnStatement(
-      ReturnStatement node, TreeNode? removalSentinel) {
-    // Async* functions cannot return a value.
-    assert(node.expression == null || node.expression is NullLiteral);
-    statements
-        .add(new BreakStatement(labeledBody!)..fileOffset = node.fileOffset);
-    return removalSentinel ?? EmptyStatement();
-  }
-}
-
-class AsyncFunctionRewriter extends AsyncRewriterBase {
-  VariableDeclaration? returnVariable;
-  VariableDeclaration? asyncFutureVariable;
-  VariableDeclaration? isSyncVariable;
-
-  AsyncFunctionRewriter(HelperNodes helper, FunctionNode enclosingFunction,
-      StatefulStaticTypeContext staticTypeContext)
-      : super(helper, enclosingFunction, staticTypeContext);
-
-  FunctionNode rewrite() {
-    var statements = <Statement>[];
-
-    // The original function return type should be Future<T> or FutureOr<T>
-    // because the function is async. If it was, we make a Completer<T>,
-    // otherwise we make a malformed type.  In a "Future<T> foo() async {}"
-    // function the body can either return a "T" or a "Future<T>" => a
-    // "FutureOr<T>".
-    DartType valueType = elementTypeFromReturnType(helper.futureClass);
-    if (valueType == const DynamicType()) {
-      valueType = elementTypeFromAsyncReturnType();
-    }
-    final DartType returnType =
-        FutureOrType(valueType, staticTypeContext.nullable);
-    final futureTypeArguments = <DartType>[valueType];
-
-    final futureType = InterfaceType(helper.futureImplClass,
-        staticTypeContext.nonNullable, futureTypeArguments);
-
-    // final _Future<T> :async_future = _Future<T>();
-    asyncFutureVariable = VariableDeclaration(ContinuationVariables.asyncFuture,
-        initializer: ConstructorInvocation(helper.futureImplConstructor,
-            Arguments([], types: futureTypeArguments))
-          ..fileOffset = enclosingFunction.body?.fileOffset ?? -1,
-        isFinal: true,
-        type: futureType);
-    statements.add(asyncFutureVariable!);
-
-    // bool :is_sync = false;
-    isSyncVariable = VariableDeclaration(ContinuationVariables.isSync,
-        initializer: BoolLiteral(false),
-        type: helper.coreTypes.boolLegacyRawType);
-    statements.add(isSyncVariable!);
-
-    // asy::FutureOr<dynamic>* :return_value;
-    returnVariable = VariableDeclaration(ContinuationVariables.returnValue,
-        type: returnType);
-    statements.add(returnVariable!);
-
-    setupAsyncContinuations(statements);
-
-    // :async_op();
-    final startStatement = ExpressionStatement(LocalFunctionInvocation(
-        nestedClosureVariable, Arguments([]),
-        functionType: FunctionType(
-            [], const DynamicType(), staticTypeContext.nonNullable))
-      ..fileOffset = enclosingFunction.fileOffset);
-    statements.add(startStatement);
-
-    // :is_sync = true;
-    final setIsSync =
-        ExpressionStatement(VariableSet(isSyncVariable!, BoolLiteral(true)));
-    statements.add(setIsSync);
-
-    // return :async_future;
-    statements.add(ReturnStatement(VariableGet(asyncFutureVariable!)));
-
-    enclosingFunction.body = Block(statements)..parent = enclosingFunction;
-    enclosingFunction.asyncMarker = AsyncMarker.Sync;
-    return enclosingFunction;
-  }
-
-  // :async_op's try-catch catch body:
-  @override
-  Statement buildCatchBody(exceptionVariable, stackTraceVariable) {
-    // _completeOnAsyncError(_future, e, st, :is_sync)
-    return ExpressionStatement(StaticInvocation(
-        helper.completeOnAsyncError,
-        Arguments([
-          VariableGet(asyncFutureVariable!),
-          VariableGet(exceptionVariable),
-          VariableGet(stackTraceVariable),
-          VariableGet(isSyncVariable!)
-        ])));
-  }
-
-  // :async_op's try-catch try body:
-  @override
-  Statement buildReturn(Statement body) {
-    // Returns from the body have all been translated into assignments to the
-    // return value variable followed by a break from the labeled body.
-
-    // .. body ..
-    // _completeOnAsyncReturn(_future, returnVariable, :is_sync)
-    // return;
-    return Block(<Statement>[
-      body,
-      ExpressionStatement(StaticInvocation(
-          helper.completeOnAsyncReturn,
-          Arguments([
-            VariableGet(asyncFutureVariable!),
-            VariableGet(returnVariable!),
-            VariableGet(isSyncVariable!)
-          ]))),
-      ReturnStatement()..fileOffset = enclosingFunction.fileEndOffset
-    ]);
-  }
-
-  @override
-  TreeNode visitReturnStatement(
-      ReturnStatement node, TreeNode? removalSentinel) {
-    var expr = node.expression == null
-        ? new NullLiteral()
-        : expressionRewriter!.rewrite(node.expression!, statements);
-    statements.add(new ExpressionStatement(
-        new VariableSet(returnVariable!, expr)..fileOffset = node.fileOffset));
-    statements.add(new BreakStatement(labeledBody!));
-    return removalSentinel ?? EmptyStatement();
-  }
-}
-
-class HelperNodes {
-  final Procedure asyncErrorWrapper;
-  final Library asyncLibrary;
-  final Procedure asyncStarStreamControllerAdd;
-  final Procedure asyncStarStreamControllerAddError;
-  final Procedure asyncStarStreamControllerAddStream;
-  final Class asyncStarStreamControllerClass;
-  final Procedure asyncStarStreamControllerClose;
-  final Constructor asyncStarStreamControllerConstructor;
-  final Member asyncStarStreamControllerStream;
-  final Procedure asyncStarMoveNextHelper;
-  final Procedure asyncThenWrapper;
-  final Procedure awaitHelper;
-  final Procedure completeOnAsyncReturn;
-  final Procedure completeOnAsyncError;
-  final Library coreLibrary;
-  final CoreTypes coreTypes;
-  final Class futureClass;
-  final Class futureOrClass;
-  final Class futureImplClass;
-  final Constructor futureImplConstructor;
-  final Class iterableClass;
-  final Class streamClass;
-  final Procedure streamIteratorCancel;
-  final Class streamIteratorClass;
-  final Constructor streamIteratorConstructor;
-  final Member streamIteratorCurrent;
-  final Procedure streamIteratorMoveNext;
-  final Constructor syncIterableConstructor;
-  final Class syncIteratorClass;
-  final Member syncIteratorCurrent;
-  final Member syncIteratorYieldEachIterable;
-  final Class boolClass;
-  final Procedure unsafeCast;
-
-  bool productMode;
-
-  HelperNodes._(
-      this.asyncErrorWrapper,
-      this.asyncLibrary,
-      this.asyncStarStreamControllerAdd,
-      this.asyncStarStreamControllerAddError,
-      this.asyncStarStreamControllerAddStream,
-      this.asyncStarStreamControllerClass,
-      this.asyncStarStreamControllerClose,
-      this.asyncStarStreamControllerConstructor,
-      this.asyncStarStreamControllerStream,
-      this.asyncStarMoveNextHelper,
-      this.asyncThenWrapper,
-      this.awaitHelper,
-      this.completeOnAsyncReturn,
-      this.completeOnAsyncError,
-      this.coreLibrary,
-      this.coreTypes,
-      this.futureClass,
-      this.futureOrClass,
-      this.futureImplClass,
-      this.futureImplConstructor,
-      this.iterableClass,
-      this.streamClass,
-      this.streamIteratorCancel,
-      this.streamIteratorClass,
-      this.streamIteratorConstructor,
-      this.streamIteratorCurrent,
-      this.streamIteratorMoveNext,
-      this.syncIterableConstructor,
-      this.syncIteratorClass,
-      this.syncIteratorCurrent,
-      this.syncIteratorYieldEachIterable,
-      this.boolClass,
-      this.productMode,
-      this.unsafeCast);
-
-  factory HelperNodes.fromCoreTypes(CoreTypes coreTypes, bool productMode) {
-    return new HelperNodes._(
-        coreTypes.asyncErrorWrapperHelperProcedure,
-        coreTypes.asyncLibrary,
-        coreTypes.asyncStarStreamControllerAdd,
-        coreTypes.asyncStarStreamControllerAddError,
-        coreTypes.asyncStarStreamControllerAddStream,
-        coreTypes.asyncStarStreamControllerClass,
-        coreTypes.asyncStarStreamControllerClose,
-        coreTypes.asyncStarStreamControllerDefaultConstructor,
-        coreTypes.asyncStarStreamControllerStream,
-        coreTypes.asyncStarMoveNextHelper,
-        coreTypes.asyncThenWrapperHelperProcedure,
-        coreTypes.awaitHelperProcedure,
-        coreTypes.completeOnAsyncReturn,
-        coreTypes.completeOnAsyncError,
-        coreTypes.coreLibrary,
-        coreTypes,
-        coreTypes.futureClass,
-        coreTypes.deprecatedFutureOrClass,
-        coreTypes.futureImplClass,
-        coreTypes.futureImplConstructor,
-        coreTypes.iterableClass,
-        coreTypes.streamClass,
-        coreTypes.streamIteratorCancel,
-        coreTypes.streamIteratorClass,
-        coreTypes.streamIteratorDefaultConstructor,
-        coreTypes.streamIteratorCurrent,
-        coreTypes.streamIteratorMoveNext,
-        coreTypes.syncIterableDefaultConstructor,
-        coreTypes.syncIteratorClass,
-        coreTypes.syncIteratorCurrent,
-        coreTypes.syncIteratorYieldEachIterable,
-        coreTypes.boolClass,
-        productMode,
-        coreTypes.index.getTopLevelMember('dart:_internal', 'unsafeCast')
-            as Procedure);
-  }
-}
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
deleted file mode 100644
index fee2089..0000000
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ /dev/null
@@ -1,254 +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.
-
-library kernel.transformations.mixin_full_resolution;
-
-import '../ast.dart';
-import '../class_hierarchy.dart';
-import '../clone.dart';
-import '../core_types.dart';
-import '../reference_from_index.dart';
-import '../target/targets.dart' show Target;
-import '../type_algebra.dart';
-
-/// Transforms the libraries in [libraries].
-/// Note that [referenceFromIndex] can be null, and is generally only needed
-/// when (ultimately) called from the incremental compiler.
-void transformLibraries(
-    Target targetInfo,
-    CoreTypes coreTypes,
-    ClassHierarchy hierarchy,
-    List<Library> libraries,
-    ReferenceFromIndex? referenceFromIndex) {
-  new MixinFullResolution(targetInfo, coreTypes, hierarchy)
-      .transform(libraries, referenceFromIndex);
-}
-
-/// Replaces all mixin applications with regular classes, cloning all fields
-/// and procedures from the mixed-in class, cloning all constructors from the
-/// base class.
-class MixinFullResolution {
-  final Target targetInfo;
-  final CoreTypes coreTypes;
-
-  /// The [ClassHierarchy] that should be used after applying this transformer.
-  /// If any class was updated, in general we need to create a new
-  /// [ClassHierarchy] instance, with new dispatch targets; or at least let
-  /// the existing instance know that some of its dispatch tables are not
-  /// valid anymore.
-  ClassHierarchy hierarchy;
-
-  MixinFullResolution(this.targetInfo, this.coreTypes, this.hierarchy);
-
-  /// Transform the given new [libraries].  It is expected that all other
-  /// libraries have already been transformed.
-  void transform(
-      List<Library> libraries, ReferenceFromIndex? referenceFromIndex) {
-    if (libraries.isEmpty) return;
-
-    var transformedClasses = new Set<Class>();
-
-    // Desugar all mixin application classes by copying in fields/methods from
-    // the mixin and constructors from the base class.
-    var processedClasses = new Set<Class>();
-    for (var library in libraries) {
-      for (var class_ in library.classes) {
-        transformClass(libraries, processedClasses, transformedClasses, class_,
-            referenceFromIndex);
-      }
-    }
-
-    // We might need to update the class hierarchy.
-    hierarchy =
-        hierarchy.applyMemberChanges(transformedClasses, findDescendants: true);
-  }
-
-  void transformClass(
-      List<Library> librariesToBeTransformed,
-      Set<Class> processedClasses,
-      Set<Class> transformedClasses,
-      Class class_,
-      ReferenceFromIndex? referenceFromIndex) {
-    // If this class was already handled then so were all classes up to the
-    // [Object] class.
-    if (!processedClasses.add(class_)) return;
-
-    Library enclosingLibrary = class_.enclosingLibrary;
-
-    if (!librariesToBeTransformed.contains(enclosingLibrary) &&
-        enclosingLibrary.importUri.scheme == "dart") {
-      // If we're not asked to transform the platform libraries then we expect
-      // that they will be already transformed.
-      return;
-    }
-
-    // Ensure super classes have been transformed before this class.
-    if (class_.superclass != null) {
-      transformClass(librariesToBeTransformed, processedClasses,
-          transformedClasses, class_.superclass!, referenceFromIndex);
-    }
-
-    // If this is not a mixin application we don't need to make forwarding
-    // constructors in this class.
-    if (!class_.isMixinApplication) return;
-    assert(librariesToBeTransformed.contains(enclosingLibrary));
-
-    transformedClasses.add(class_);
-
-    // Clone fields and methods from the mixin class.
-    var substitution = getSubstitutionMap(class_.mixedInType!);
-    var cloner = new CloneVisitorWithMembers(typeSubstitution: substitution);
-
-    IndexedLibrary? indexedLibrary =
-        referenceFromIndex?.lookupLibrary(enclosingLibrary);
-    IndexedClass? indexedClass =
-        indexedLibrary?.lookupIndexedClass(class_.name);
-
-    if (class_.mixin.fields.isNotEmpty) {
-      // When we copy a field from the mixed in class, we remove any
-      // forwarding-stub getters/setters from the superclass, but copy their
-      // covariance-bits onto the new field.
-      var nonSetters = <Name, Procedure>{};
-      var setters = <Name, Procedure>{};
-      for (var procedure in class_.procedures) {
-        if (procedure.isSetter) {
-          setters[procedure.name] = procedure;
-        } else {
-          nonSetters[procedure.name] = procedure;
-        }
-      }
-
-      for (var field in class_.mixin.fields) {
-        Reference? fieldReference =
-            indexedClass?.lookupFieldReference(field.name);
-        Reference? getterReference =
-            indexedClass?.lookupGetterReference(field.name);
-        Reference? setterReference =
-            indexedClass?.lookupSetterReference(field.name);
-        if (getterReference == null) {
-          getterReference = nonSetters[field.name]?.reference;
-          getterReference?.canonicalName?.unbind();
-        }
-        if (setterReference == null) {
-          setterReference = setters[field.name]?.reference;
-          setterReference?.canonicalName?.unbind();
-        }
-        Field clone = cloner.cloneField(
-            field, fieldReference, getterReference, setterReference);
-        Procedure? setter = setters[field.name];
-        if (setter != null) {
-          setters.remove(field.name);
-          VariableDeclaration parameter =
-              setter.function.positionalParameters.first;
-          clone.isCovariantByDeclaration = parameter.isCovariantByDeclaration;
-          clone.isCovariantByClass = parameter.isCovariantByClass;
-        }
-        nonSetters.remove(field.name);
-        class_.addField(clone);
-      }
-      class_.procedures.clear();
-      class_.procedures
-        ..addAll(nonSetters.values)
-        ..addAll(setters.values);
-    }
-
-    // Existing procedures in the class should only be forwarding stubs.
-    // Replace them with methods from the mixin class if they have the same
-    // name, but keep their parameter flags.
-    int originalLength = class_.procedures.length;
-    outer:
-    for (var procedure in class_.mixin.procedures) {
-      if (procedure.isSynthetic) continue;
-      // Forwarding stubs in the mixin class are used when calling through the
-      // mixin class's interface, not when calling through the mixin
-      // application.  They should not be copied.
-      if (procedure.isForwardingStub) continue;
-
-      // Factory constructors are not cloned.
-      if (procedure.isFactory) continue;
-
-      // NoSuchMethod forwarders aren't cloned.
-      if (procedure.isNoSuchMethodForwarder) continue;
-
-      Reference? reference;
-      if (procedure.isSetter) {
-        reference = indexedClass?.lookupSetterReference(procedure.name);
-      } else {
-        reference = indexedClass?.lookupGetterReference(procedure.name);
-      }
-
-      // Linear search for a forwarding stub with the same name.
-      int? originalIndex;
-      for (int i = 0; i < originalLength; ++i) {
-        var originalProcedure = class_.procedures[i];
-        if (originalProcedure.name == procedure.name &&
-            originalProcedure.kind == procedure.kind) {
-          FunctionNode src = originalProcedure.function;
-          FunctionNode dst = procedure.function;
-
-          if (src.positionalParameters.length !=
-                  dst.positionalParameters.length ||
-              src.namedParameters.length != dst.namedParameters.length) {
-            // A compile time error has already occurred, but don't crash below,
-            // and don't add several procedures with the same name to the class.
-            continue outer;
-          }
-          if (procedure.isAbstract &&
-              (originalProcedure.stubKind ==
-                      ProcedureStubKind.ConcreteForwardingStub ||
-                  originalProcedure.stubKind ==
-                      ProcedureStubKind.ConcreteMixinStub)) {
-            // Don't replace concrete stubs with abstract methods.
-            originalProcedure.stubKind = ProcedureStubKind.Regular;
-            originalProcedure.stubTarget = null;
-            continue outer;
-          }
-
-          originalIndex = i;
-          break;
-        }
-      }
-      if (originalIndex != null) {
-        reference ??= class_.procedures[originalIndex].reference;
-      }
-      Procedure clone = cloner.cloneProcedure(procedure, reference);
-      if (originalIndex != null) {
-        Procedure originalProcedure = class_.procedures[originalIndex];
-        FunctionNode src = originalProcedure.function;
-        FunctionNode dst = clone.function;
-        assert(src.typeParameters.length == dst.typeParameters.length);
-        for (int j = 0; j < src.typeParameters.length; ++j) {
-          dst.typeParameters[j].flags = src.typeParameters[j].flags;
-        }
-        for (int j = 0; j < src.positionalParameters.length; ++j) {
-          dst.positionalParameters[j].flags = src.positionalParameters[j].flags;
-        }
-        // TODO(kernel team): The named parameters are not sorted,
-        // this might not be correct.
-        for (int j = 0; j < src.namedParameters.length; ++j) {
-          dst.namedParameters[j].isCovariantByDeclaration =
-              src.namedParameters[j].isCovariantByDeclaration;
-          dst.namedParameters[j].isCovariantByClass =
-              src.namedParameters[j].isCovariantByClass;
-        }
-
-        class_.procedures[originalIndex] = clone;
-        clone.parent = class_;
-      } else {
-        class_.addProcedure(clone);
-      }
-    }
-    assert(class_.constructors.isNotEmpty);
-
-    // This class implements the mixin type. Also, backends rely on the fact
-    // that eliminated mixin is appended into the end of interfaces list.
-    class_.implementedTypes.add(class_.mixedInType!);
-
-    // This class is now a normal class.
-    class_.mixedInType = null;
-
-    // Leave breadcrumbs for backends (e.g. for dart:mirrors implementation).
-    class_.isEliminatedMixin = true;
-  }
-}
diff --git a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
index 318b720..cb6601e 100644
--- a/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
+++ b/pkg/kernel/lib/transformations/track_widget_constructor_locations.dart
@@ -298,7 +298,7 @@
     for (Library library in libraries) {
       final Uri importUri = library.importUri;
       // ignore: unnecessary_null_comparison
-      if (importUri != null && importUri.scheme == 'package') {
+      if (importUri != null && importUri.isScheme('package')) {
         if (importUri.path == 'flutter/src/widgets/framework.dart') {
           for (Class class_ in library.classes) {
             if (class_.name == 'Widget') {
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index e575a00..e19ef36 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -27,7 +27,7 @@
 
   void checkComponent(Component component) {
     for (Library library in component.libraries) {
-      if (ignoreSdk && library.importUri.scheme == 'dart') continue;
+      if (ignoreSdk && library.importUri.isScheme('dart')) continue;
       for (Class class_ in library.classes) {
         hierarchy.forEachOverridePair(class_,
             (Member ownMember, Member superMember, bool isSetter) {
@@ -39,7 +39,7 @@
         new TypeCheckingVisitor(this, environment, hierarchy);
     for (Library library in component.libraries) {
       currentLibrary = library;
-      if (ignoreSdk && library.importUri.scheme == 'dart') continue;
+      if (ignoreSdk && library.importUri.isScheme('dart')) continue;
       for (Class class_ in library.classes) {
         currentThisType = coreTypes.thisInterfaceType(
             class_, class_.enclosingLibrary.nonNullable);
diff --git a/pkg/language_versioning_2.7_test/OWNERS b/pkg/language_versioning_2.7_test/OWNERS
new file mode 100644
index 0000000..876a884
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_FOUNDATION
diff --git a/pkg/meta/OWNERS b/pkg/meta/OWNERS
new file mode 100644
index 0000000..80d5ff4
--- /dev/null
+++ b/pkg/meta/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_ANALYZER
+file:/tools/OWNERS_FOUNDATION
diff --git a/pkg/modular_test/OWNERS b/pkg/modular_test/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/modular_test/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/native_stack_traces/OWNERS b/pkg/native_stack_traces/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/native_stack_traces/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/nnbd_migration/OWNERS b/pkg/nnbd_migration/OWNERS
new file mode 100644
index 0000000..80d5ff4
--- /dev/null
+++ b/pkg/nnbd_migration/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_ANALYZER
+file:/tools/OWNERS_FOUNDATION
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index 1038d97..afb9bd9 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -29,16 +29,26 @@
   factory CodeReference.fromAstNode(AstNode node) {
     var compilationUnit = node.thisOrAncestorOfType<CompilationUnit>()!;
     var source = compilationUnit.declaredElement!.source;
-    var location = compilationUnit.lineInfo!.getLocation(node.offset);
+    var location = compilationUnit.lineInfo.getLocation(node.offset);
     return CodeReference(source.fullName, node.offset, location.lineNumber,
         location.columnNumber, _computeEnclosingName(node));
   }
 
-  factory CodeReference.fromElement(
-      Element element, LineInfo Function(String) getLineInfo) {
-    var path = element.source!.fullName;
+  factory CodeReference.fromElement(Element element) {
+    var unitElement = element.thisOrAncestorOfType<CompilationUnitElement>();
+    if (unitElement == null) {
+      var enclosingElement = element.enclosingElement;
+      if (enclosingElement is LibraryElement) {
+        unitElement = enclosingElement.definingCompilationUnit;
+      } else {
+        throw StateError('Unexpected element: $element');
+      }
+    }
+
+    var path = unitElement.source.fullName;
     var offset = element.nameOffset;
-    var location = getLineInfo(path).getLocation(offset);
+
+    var location = unitElement.lineInfo!.getLocation(offset);
     return CodeReference(path, offset, location.lineNumber,
         location.columnNumber, _computeElementFullName(element));
   }
@@ -242,6 +252,7 @@
   alwaysNullableType,
   angularAnnotation,
   argumentErrorCheckNotNull,
+  builtValueNullableAnnotation,
   callTearOff,
   compoundAssignment,
   // See [DummyOrigin].
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index 93691b6..2a30f55 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -546,17 +546,14 @@
               resourceProvider.getFile(s).exists)
           .toSet();
 
-  NonNullableFix createNonNullableFix(
-      DartFixListener listener,
-      ResourceProvider resourceProvider,
-      LineInfo Function(String path) getLineInfo,
-      Object? bindAddress,
+  NonNullableFix createNonNullableFix(DartFixListener listener,
+      ResourceProvider resourceProvider, Object? bindAddress,
       {List<String> included = const <String>[],
       int? preferredPort,
       String? summaryPath,
       required String sdkPath}) {
-    return NonNullableFix(listener, resourceProvider, getLineInfo, bindAddress,
-        logger, (String? path) => shouldBeMigrated(path!),
+    return NonNullableFix(listener, resourceProvider, bindAddress, logger,
+        (String? path) => shouldBeMigrated(path!),
         included: included,
         preferredPort: preferredPort,
         summaryPath: summaryPath,
@@ -661,8 +658,8 @@
     _fixCodeProcessor = _FixCodeProcessor(analysisContext, this);
     _dartFixListener = DartFixListener(
         DriverProviderImpl(resourceProvider, analysisContext), this);
-    nonNullableFix = createNonNullableFix(_dartFixListener!, resourceProvider,
-        _fixCodeProcessor!.getLineInfo, computeBindAddress(),
+    nonNullableFix = createNonNullableFix(
+        _dartFixListener!, resourceProvider, computeBindAddress(),
         included: [options.directory],
         preferredPort: options.previewPort,
         summaryPath: options.summary,
@@ -1000,9 +997,6 @@
 
   bool get isPreviewServerRunning => _task?.isPreviewServerRunning ?? false;
 
-  LineInfo getLineInfo(String path) =>
-      (context.currentSession.getFile(path) as FileResult).lineInfo;
-
   void prepareToRerun() {
     var driver = context.driver;
     pathsToProcess = _migrationCli.computePathsToProcess(context);
diff --git a/pkg/nnbd_migration/lib/nnbd_migration.dart b/pkg/nnbd_migration/lib/nnbd_migration.dart
index a780bfa..c549d2d 100644
--- a/pkg/nnbd_migration/lib/nnbd_migration.dart
+++ b/pkg/nnbd_migration/lib/nnbd_migration.dart
@@ -321,7 +321,6 @@
   /// should be warned about or removed (in the way specified by
   /// [removeViaComments]).
   factory NullabilityMigration(NullabilityMigrationListener? listener,
-      LineInfo Function(String) getLineInfo,
       {bool? permissive,
       NullabilityMigrationInstrumentation? instrumentation,
       bool? removeViaComments,
diff --git a/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart b/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
index ae86a52..8873cd0 100644
--- a/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
+++ b/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/element_type_provider.dart';
 import 'package:nnbd_migration/src/decorated_type.dart';
@@ -22,10 +21,7 @@
 
   final TypeProvider _typeProvider;
 
-  final LineInfo Function(String) _getLineInfo;
-
-  AlreadyMigratedCodeDecorator(
-      this._graph, this._typeProvider, this._getLineInfo);
+  AlreadyMigratedCodeDecorator(this._graph, this._typeProvider);
 
   /// Transforms [type], which should have come from code that has already been
   /// migrated to NNBD, into the corresponding [DecoratedType].
@@ -118,7 +114,7 @@
     }
     return [
       for (var t in allSupertypes)
-        decorate(t, class_, NullabilityNodeTarget.element(class_, _getLineInfo))
+        decorate(t, class_, NullabilityNodeTarget.element(class_))
     ];
   }
 }
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 5ab9d26..5784c34 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -29,11 +29,13 @@
 import 'package:nnbd_migration/src/expression_checks.dart';
 import 'package:nnbd_migration/src/nullability_node.dart';
 import 'package:nnbd_migration/src/nullability_node_target.dart';
+import 'package:nnbd_migration/src/utilities/built_value_transformer.dart';
 import 'package:nnbd_migration/src/utilities/completeness_tracker.dart';
 import 'package:nnbd_migration/src/utilities/hint_utils.dart';
 import 'package:nnbd_migration/src/utilities/permissive_mode.dart';
 import 'package:nnbd_migration/src/utilities/resolution_utils.dart';
 import 'package:nnbd_migration/src/utilities/scoped_set.dart';
+import 'package:nnbd_migration/src/utilities/where_not_null_transformer.dart';
 import 'package:nnbd_migration/src/utilities/where_or_null_transformer.dart';
 import 'package:nnbd_migration/src/variables.dart';
 
@@ -235,6 +237,10 @@
   /// equivalents.
   final WhereOrNullTransformer _whereOrNullTransformer;
 
+  /// Helper that assists us in transforming calls to `Iterable.where` to
+  /// `Iterable.whereNotNull`.
+  final WhereNotNullTransformer _whereNotNullTransformer;
+
   /// Deferred processing that should be performed once we have finished
   /// evaluating the decorated type of a method invocation.
   final Map<MethodInvocation, DecoratedType Function(DecoratedType?)>
@@ -251,7 +257,9 @@
       {this.instrumentation})
       : _inheritanceManager = InheritanceManager3(),
         _whereOrNullTransformer =
-            WhereOrNullTransformer(typeProvider, _typeSystem);
+            WhereOrNullTransformer(typeProvider, _typeSystem),
+        _whereNotNullTransformer =
+            WhereNotNullTransformer(typeProvider, _typeSystem);
 
   /// The synthetic element we use as a stand-in for `this` when analyzing
   /// extension methods.
@@ -392,7 +400,6 @@
           respectImplicitlyTypedVarInitializers: true);
     }
     try {
-      _dispatch(node.name);
       _dispatch(node.constructorName);
       _dispatchList(node.arguments?.arguments);
     } finally {
@@ -688,7 +695,7 @@
 
   @override
   DecoratedType? visitClassTypeAlias(ClassTypeAlias node) {
-    _dispatch(node.superclass2);
+    _dispatch(node.superclass);
     _dispatch(node.implementsClause);
     _dispatch(node.withClause);
     var classElement = node.declaredElement!;
@@ -782,7 +789,7 @@
   DecoratedType? visitConstructorDeclaration(ConstructorDeclaration node) {
     _fieldsNotInitializedByConstructor =
         _fieldsNotInitializedAtDeclaration!.toSet();
-    _dispatch(node.redirectedConstructor?.type2.typeArguments);
+    _dispatch(node.redirectedConstructor?.type.typeArguments);
     _handleExecutableDeclaration(
         node,
         node.declaredElement!,
@@ -1151,6 +1158,18 @@
   }
 
   @override
+  DecoratedType? visitImplicitCallReference(ImplicitCallReference node) {
+    return _handlePropertyAccessGeneralized(
+        node: node,
+        target: node.expression,
+        propertyName: 'call',
+        isNullAware: false,
+        isCascaded: false,
+        inSetterContext: false,
+        callee: node.staticElement);
+  }
+
+  @override
   DecoratedType? visitIndexExpression(IndexExpression node) {
     DecoratedType? targetType;
     var target = node.target;
@@ -1188,7 +1207,7 @@
     var typeParameters = callee.enclosingElement.typeParameters;
     Iterable<DartType?> typeArgumentTypes;
     List<DecoratedType> decoratedTypeArguments;
-    var typeArguments = node.constructorName.type2.typeArguments;
+    var typeArguments = node.constructorName.type.typeArguments;
     late List<EdgeOrigin> parameterEdgeOrigins;
     var target =
         NullabilityNodeTarget.text('constructed type').withCodeRef(node);
@@ -1331,6 +1350,14 @@
 
   @override
   DecoratedType? visitMethodDeclaration(MethodDeclaration node) {
+    if (BuiltValueTransformer.findNullableAnnotation(node) != null) {
+      _graph.makeNullable(
+          _variables!
+              .decoratedElementType(node.declaredElement!.declaration)
+              .returnType!
+              .node!,
+          BuiltValueNullableOrigin(source, node));
+    }
     _handleExecutableDeclaration(node, node.declaredElement!, node.metadata,
         node.returnType, node.parameters, null, node.body, null);
     _dispatch(node.typeParameters);
@@ -2479,32 +2506,16 @@
           sourceType = _makeNullableDynamicType(compoundOperatorInfo);
         }
       } else {
-        var transformationInfo =
-            _whereOrNullTransformer.tryTransformOrElseArgument(expression);
-        if (transformationInfo != null) {
-          // Don't build any edges for this argument; if necessary we'll transform
-          // it rather than make things nullable.  But do save the nullability of
-          // the return value of the `orElse` method, so that we can later connect
-          // it to the nullability of the value returned from the method
-          // invocation.
-          var extraNullability = sourceType.returnType!.node;
-          _deferredMethodInvocationProcessing[
-              transformationInfo.methodInvocation] = (methodInvocationType) {
-            var newNode = NullabilityNode.forInferredType(
-                NullabilityNodeTarget.text(
-                    'return value from ${transformationInfo.originalName}'));
-            var origin = IteratorMethodReturnOrigin(
-                source, transformationInfo.methodInvocation);
-            _graph.connect(methodInvocationType!.node, newNode, origin);
-            _graph.connect(extraNullability, newNode, origin);
-            return methodInvocationType.withNode(newNode);
-          };
+        if (_tryTransformOrElse(expression, sourceType) ||
+            _tryTransformWhere(
+                expression, edgeOrigin, sourceType, destinationType!)) {
+          // Nothing further to do.
         } else {
           var hard = _shouldUseHardEdge(expression!,
               isConditionallyExecuted: questionAssignNode != null);
           _checkAssignment(edgeOrigin, FixReasonTarget.root,
               source: sourceType,
-              destination: destinationType!,
+              destination: destinationType,
               hard: hard,
               sourceIsFunctionLiteral: expression is FunctionExpression);
         }
@@ -2551,7 +2562,7 @@
     var callee = redirectedConstructor.staticElement!.declaration;
     var redirectedClass = callee.enclosingElement;
     var calleeType = _variables!.decoratedElementType(callee);
-    var typeArguments = redirectedConstructor.type2.typeArguments;
+    var typeArguments = redirectedConstructor.type.typeArguments;
     var typeArgumentTypes =
         typeArguments?.arguments.map((t) => t.type).toList();
     _handleInvocationArguments(
@@ -3104,24 +3115,43 @@
 
   DecoratedType? _handlePropertyAccess(Expression node, Expression? target,
       SimpleIdentifier propertyName, bool isNullAware, bool isCascaded) {
-    DecoratedType? targetType;
+    if (!isCascaded && _isPrefix(target)) {
+      return _dispatch(propertyName, skipNullCheckHint: true);
+    }
     var callee = getWriteOrReadElement(propertyName);
+    return _handlePropertyAccessGeneralized(
+        node: node,
+        target: target,
+        propertyName: propertyName.name,
+        isNullAware: isNullAware,
+        isCascaded: isCascaded,
+        inSetterContext: propertyName.inSetterContext(),
+        callee: callee);
+  }
+
+  DecoratedType? _handlePropertyAccessGeneralized(
+      {required Expression node,
+      required Expression? target,
+      required String propertyName,
+      required bool isNullAware,
+      required bool isCascaded,
+      required bool inSetterContext,
+      required Element? callee}) {
+    DecoratedType? targetType;
     bool calleeIsStatic = callee is ExecutableElement && callee.isStatic;
     if (isCascaded) {
       targetType = _currentCascadeTargetType;
-    } else if (_isPrefix(target)) {
-      return _dispatch(propertyName, skipNullCheckHint: true);
     } else if (calleeIsStatic) {
       _dispatch(target);
     } else if (isNullAware) {
       targetType = _dispatch(target);
     } else {
-      targetType = _handleTarget(target, propertyName.name, callee);
+      targetType = _handleTarget(target, propertyName, callee);
     }
     DecoratedType? calleeType;
     if (targetType != null &&
         targetType.type is FunctionType &&
-        propertyName.name == 'call') {
+        propertyName == 'call') {
       // If `X` has a function type, then in the expression `X.call`, the
       // function being torn off is `X` itself, so the callee type is simply the
       // non-nullable counterpart to the type of `X`.
@@ -3140,7 +3170,7 @@
       // Dynamic dispatch.
       return _makeNullableDynamicType(node);
     }
-    if (propertyName.inSetterContext()) {
+    if (inSetterContext) {
       if (isNullAware) {
         _conditionalNodes[node] = targetType!.node;
       }
@@ -3167,7 +3197,7 @@
     var calleeUri = callee?.library?.source.uri;
     var isQuiverCheckNull = callee?.name == 'checkNotNull' &&
         calleeUri != null &&
-        calleeUri.scheme == 'package' &&
+        calleeUri.isScheme('package') &&
         calleeUri.path.startsWith('quiver/');
 
     if (isQuiverCheckNull && node.argumentList.arguments.isNotEmpty) {
@@ -3215,7 +3245,7 @@
         if (enclosingInvocation.name == 'setUp') {
           var uri = enclosingInvocation.staticElement!.library?.source.uri;
           if (uri != null &&
-              uri.scheme == 'package' &&
+              uri.isScheme('package') &&
               uri.path.startsWith('test_core/')) {
             return true;
           }
@@ -3426,6 +3456,57 @@
     }
   }
 
+  /// If [node] is an `orElse` argument to an iterable method that should be
+  /// transformed, performs the necessary assignment checks on the expression
+  /// type and returns `true` (this indicates to the caller that no further
+  /// assignment checks need to be performed); otherwise returns `false`.
+  bool _tryTransformOrElse(Expression? expression, DecoratedType sourceType) {
+    var transformationInfo =
+        _whereOrNullTransformer.tryTransformOrElseArgument(expression);
+    if (transformationInfo != null) {
+      // Don't build any edges for this argument; if necessary we'll transform
+      // it rather than make things nullable.  But do save the nullability of
+      // the return value of the `orElse` method, so that we can later connect
+      // it to the nullability of the value returned from the method
+      // invocation.
+      var extraNullability = sourceType.returnType!.node;
+      _deferredMethodInvocationProcessing[transformationInfo.methodInvocation] =
+          (methodInvocationType) {
+        var newNode = NullabilityNode.forInferredType(
+            NullabilityNodeTarget.text(
+                'return value from ${transformationInfo.originalName}'));
+        var origin = IteratorMethodReturnOrigin(
+            source, transformationInfo.methodInvocation);
+        _graph.connect(methodInvocationType!.node, newNode, origin);
+        _graph.connect(extraNullability, newNode, origin);
+        return methodInvocationType.withNode(newNode);
+      };
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  /// If [node] is a call to `Iterable.where` that should be transformed,
+  /// performs the necessary assignment checks on the expression type and
+  /// returns `true` (this indicates to the caller that no further assignment
+  /// checks need to be performed); otherwise returns `false`.
+  bool _tryTransformWhere(Expression? expression, EdgeOrigin edgeOrigin,
+      DecoratedType sourceType, DecoratedType destinationType) {
+    var transformationInfo =
+        _whereNotNullTransformer.tryTransformMethodInvocation(expression);
+    if (transformationInfo != null) {
+      _checkAssignment(edgeOrigin, FixReasonTarget.root,
+          source: _whereNotNullTransformer.transformDecoratedInvocationType(
+              sourceType, _graph),
+          destination: destinationType,
+          hard: false);
+      return true;
+    } else {
+      return false;
+    }
+  }
+
   Never _unimplemented(AstNode? node, String message) {
     StringBuffer buffer = StringBuffer();
     buffer.write(message);
@@ -3434,7 +3515,7 @@
       buffer.write(' in "');
       buffer.write(node.toSource());
       buffer.write('" on line ');
-      buffer.write(unit.lineInfo!.getLocation(node.offset).lineNumber);
+      buffer.write(unit.lineInfo.getLocation(node.offset).lineNumber);
       buffer.write(' of "');
       buffer.write(unit.declaredElement!.source.fullName);
       buffer.write('"');
diff --git a/pkg/nnbd_migration/lib/src/edge_origin.dart b/pkg/nnbd_migration/lib/src/edge_origin.dart
index 58ffe89..ff7d8ce 100644
--- a/pkg/nnbd_migration/lib/src/edge_origin.dart
+++ b/pkg/nnbd_migration/lib/src/edge_origin.dart
@@ -98,6 +98,17 @@
   EdgeOriginKind get kind => EdgeOriginKind.argumentErrorCheckNotNull;
 }
 
+/// Edge origin resulting from a use of built_value's `@nullable` annotation.
+class BuiltValueNullableOrigin extends EdgeOrigin {
+  BuiltValueNullableOrigin(Source? source, AstNode node) : super(source, node);
+
+  @override
+  String get description => 'method is marked with the `@nullable` annotation';
+
+  @override
+  EdgeOriginKind get kind => EdgeOriginKind.builtValueNullableAnnotation;
+}
+
 /// An edge origin used for edges that originated because of a tear-off of
 /// `call` on a function type.
 class CallTearOffOrigin extends EdgeOrigin {
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index 76d2703..b3757c8 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -1713,6 +1713,26 @@
 /// [AtomicEdit]s.  This data structure is used by [EditPlan]s to accumulate
 /// source file changes.
 extension AtomicEditMap on Map<int?, List<AtomicEdit>>? {
+  /// Destructively combines two change representations.  If one or the other
+  /// input is null, the other input is returned unchanged for efficiency.
+  Map<int?, List<AtomicEdit>>? operator +(
+      Map<int?, List<AtomicEdit>>? newChanges) {
+    if (newChanges == null) return this;
+    if (this == null) {
+      return newChanges;
+    } else {
+      for (var entry in newChanges.entries) {
+        var currentValue = this![entry.key];
+        if (currentValue == null) {
+          this![entry.key] = entry.value;
+        } else {
+          currentValue.addAll(entry.value);
+        }
+      }
+      return this;
+    }
+  }
+
   /// Applies the changes to source file text.
   ///
   /// If [includeInformative] is `true`, informative edits are included;
@@ -1734,26 +1754,6 @@
             .toSourceEdit(offset!, includeInformative: includeInformative)
     ];
   }
-
-  /// Destructively combines two change representations.  If one or the other
-  /// input is null, the other input is returned unchanged for efficiency.
-  Map<int?, List<AtomicEdit>>? operator +(
-      Map<int?, List<AtomicEdit>>? newChanges) {
-    if (newChanges == null) return this;
-    if (this == null) {
-      return newChanges;
-    } else {
-      for (var entry in newChanges.entries) {
-        var currentValue = this![entry.key];
-        if (currentValue == null) {
-          this![entry.key] = entry.value;
-        } else {
-          currentValue.addAll(entry.value);
-        }
-      }
-      return this;
-    }
-  }
 }
 
 /// Extension allowing an AstNode to be queried to see if it ends in a casade
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 8da2940..ed266eb 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -35,8 +35,10 @@
 import 'package:nnbd_migration/src/edit_plan.dart';
 import 'package:nnbd_migration/src/fix_aggregator.dart';
 import 'package:nnbd_migration/src/nullability_node.dart';
+import 'package:nnbd_migration/src/utilities/built_value_transformer.dart';
 import 'package:nnbd_migration/src/utilities/permissive_mode.dart';
 import 'package:nnbd_migration/src/utilities/resolution_utils.dart';
+import 'package:nnbd_migration/src/utilities/where_not_null_transformer.dart';
 import 'package:nnbd_migration/src/utilities/where_or_null_transformer.dart';
 import 'package:nnbd_migration/src/variables.dart';
 import 'package:pub_semver/pub_semver.dart';
@@ -124,10 +126,13 @@
   /// equivalents.
   final WhereOrNullTransformer _whereOrNullTransformer;
 
-  /// Indicates whether an import of package:collection's `IterableExtension`
-  /// will need to be added.
+  /// Helper that assists us in transforming calls to `Iterable.where` to
+  /// `Iterable.whereNotNull`.
+  final WhereNotNullTransformer _whereNotNullTransformer;
+
+  /// The set of extensions that need to be imported from package:collection.
   @visibleForTesting
-  bool needsIterableExtension = false;
+  final Set<String> neededCollectionPackageExtensions = {};
 
   /// Map of additional package dependencies that will be required by the
   /// migrated code.  Keys are package names; values indicate the minimum
@@ -178,7 +183,9 @@
       this._neededPackages)
       : typeProvider = _typeSystem.typeProvider,
         _whereOrNullTransformer =
-            WhereOrNullTransformer(_typeSystem.typeProvider, _typeSystem) {
+            WhereOrNullTransformer(_typeSystem.typeProvider, _typeSystem),
+        _whereNotNullTransformer =
+            WhereNotNullTransformer(_typeSystem.typeProvider, _typeSystem) {
     migrationResolutionHooks._fixBuilder = this;
     assert(_typeSystem.isNonNullableByDefault);
     assert((typeProvider as TypeProviderImpl).isNonNullableByDefault);
@@ -343,7 +350,7 @@
   }
 
   @override
-  List<InterfaceType> getClassInterfaces(ClassElementImpl element) {
+  List<InterfaceType> getClassInterfaces(AbstractClassElementImpl element) {
     return _wrapExceptions(
         _fixBuilder!.unit,
         () => element.interfacesInternal,
@@ -378,17 +385,14 @@
   @override
   List<ParameterElement> getExecutableParameters(
       ExecutableElementImpl element) {
-    if (_fixBuilder!._graph.isBeingMigrated(element.library.source)) {
-      // The element is part of a library that's being migrated, so its
-      // parameters all have been visited (and thus have their own final
-      // types).  So we don't need to do anything.
-      return const ElementTypeProvider().getExecutableParameters(element);
-    } else {
-      // The element is not part of a library that's being migrated, so its
-      // parameters probably haven't been visited; we need to get the parameters
-      // from the final function type.
-      return getExecutableType(element).parameters;
-    }
+    // Note: even if the element is part of a library that's being migrated,
+    // there's no guarantee that the parameter elements have been appropriately
+    // updated by the migration process, because they might be synthetic
+    // parameters.  (This happens when the code being migrated contains a mixin
+    // application and there's a synthetic constructor).  So we can't safely get
+    // the parameters out of the element.  But it is always safe to defer to
+    // `getExecutableType` and get the parameter list from the function type.
+    return getExecutableType(element).parameters;
   }
 
   @override
@@ -605,6 +609,15 @@
     return change.resultType;
   }
 
+  /// Ensures that the migrated file will contain an import of the extension
+  /// called [extensionName] from `package:collection/collection.dart`, and that
+  /// the pubspec will be appropriately updated (if necessary).
+  void _addCollectionPackageExtension(String extensionName) {
+    _fixBuilder!.neededCollectionPackageExtensions.add(extensionName);
+    _fixBuilder!._neededPackages['collection'] =
+        Version.parse('1.15.0-nullsafety.4');
+  }
+
   DartType _addNullCheck(Expression node, DartType type,
       {AtomicEditInfo? info, HintComment? hint}) {
     var change = _createNullCheckChange(node, type, hint: hint);
@@ -732,32 +745,13 @@
     var ancestor = _findNullabilityContextAncestor(node);
     context ??= _contextTypes[ancestor] ?? DynamicTypeImpl.instance;
     if (!_isSubtypeOrCoercible(type, context)) {
-      var transformationInfo =
-          _fixBuilder!._whereOrNullTransformer.tryTransformOrElseArgument(node);
-      if (transformationInfo != null) {
-        // We can fix this by dropping the node and changing the method call.
-        _fixBuilder!.needsIterableExtension = true;
-        _fixBuilder!._neededPackages['collection'] =
-            Version.parse('1.15.0-nullsafety.4');
-        var info = AtomicEditInfo(
-            NullabilityFixDescription.changeMethodName(
-                transformationInfo.originalName,
-                transformationInfo.replacementName),
-            {});
-        (_fixBuilder!._getChange(transformationInfo.methodInvocation.methodName)
-                as NodeChangeForMethodName)
-            .replaceWith(transformationInfo.replacementName, info);
-        (_fixBuilder!._getChange(
-                    transformationInfo.methodInvocation.argumentList)
-                as NodeChangeForArgumentList)
-            .dropArgument(transformationInfo.orElseArgument, info);
-        _deferredMethodInvocationProcessing[
-                transformationInfo.methodInvocation] =
-            (methodInvocationType) => _fixBuilder!._typeSystem
-                .makeNullable(methodInvocationType as TypeImpl);
-        return type;
-      }
-      return _addCastOrNullCheck(node, type, context);
+      return _tryTransformOrElse(node, type) ??
+          _tryTransformWhere(node, type) ??
+          _addCastOrNullCheck(node, type, context);
+    } else {
+      // Even if the type is a subtype of its context, we still want to
+      // transform `.where`.
+      type = _tryTransformWhere(node, type) ?? type;
     }
     if (!_fixBuilder!._typeSystem.isNullable(type)) return type;
     if (_needsNullCheckDueToStructure(ancestor)) {
@@ -849,6 +843,63 @@
         .toList();
   }
 
+  /// If [node] is an `orElse` argument to an iterable method that should be
+  /// transformed, transforms it and returns [type] (this indicates to the
+  /// caller that no further transformations to this expression need to be
+  /// considered); otherwise returns `null`.
+  DartType? _tryTransformOrElse(Expression node, DartType type) {
+    var transformationInfo =
+        _fixBuilder!._whereOrNullTransformer.tryTransformOrElseArgument(node);
+    if (transformationInfo != null) {
+      // We can fix this by dropping the node and changing the method call.
+      _addCollectionPackageExtension('IterableExtension');
+      var info = AtomicEditInfo(
+          NullabilityFixDescription.changeMethodName(
+              transformationInfo.originalName,
+              transformationInfo.replacementName),
+          {});
+      (_fixBuilder!._getChange(transformationInfo.methodInvocation.methodName)
+              as NodeChangeForMethodName)
+          .replaceWith(transformationInfo.replacementName, info);
+      (_fixBuilder!._getChange(transformationInfo.methodInvocation.argumentList)
+              as NodeChangeForArgumentList)
+          .dropArgument(transformationInfo.orElseArgument, info);
+      _deferredMethodInvocationProcessing[transformationInfo.methodInvocation] =
+          (methodInvocationType) => _fixBuilder!._typeSystem
+              .makeNullable(methodInvocationType as TypeImpl);
+      return type;
+    }
+    return null;
+  }
+
+  /// If [node] is a call to `Iterable.where` that should be transformed,
+  /// transforms it and returns the type of the transformed method call (this
+  /// indicates to the caller that no further transformations to this expression
+  /// need to be considered); otherwise returns `null`.
+  DartType? _tryTransformWhere(Expression node, DartType type) {
+    var transformationInfo = _fixBuilder!._whereNotNullTransformer
+        .tryTransformMethodInvocation(node);
+    if (transformationInfo != null) {
+      // We can fix this by dropping the method call's argument and changing the
+      // call.
+      _addCollectionPackageExtension('IterableNullableExtension');
+      var info = AtomicEditInfo(
+          NullabilityFixDescription.changeMethodName(
+              transformationInfo.originalName,
+              transformationInfo.replacementName),
+          {});
+      (_fixBuilder!._getChange(transformationInfo.methodInvocation.methodName)
+              as NodeChangeForMethodName)
+          .replaceWith(transformationInfo.replacementName, info);
+      (_fixBuilder!._getChange(transformationInfo.methodInvocation.argumentList)
+              as NodeChangeForArgumentList)
+          .dropArgument(transformationInfo.argument, info);
+      return _fixBuilder!._whereNotNullTransformer
+          .transformPostMigrationInvocationType(type);
+    }
+    return null;
+  }
+
   /// Runs the computation in [compute].  If an exception occurs and
   /// [_fixBuilder.listener] is non-null, the exception is reported to the
   /// listener and [fallback] is called to produce a result.  Otherwise the
@@ -1014,19 +1065,25 @@
       (_fixBuilder._getChange(node) as NodeChangeForCompilationUnit)
           .removeLanguageVersionComment = true;
     }
-    if (_fixBuilder.needsIterableExtension) {
+    if (_fixBuilder.neededCollectionPackageExtensions.isNotEmpty) {
       var packageCollectionImport =
           _findImportDirective(node, 'package:collection/collection.dart');
       if (packageCollectionImport != null) {
         for (var combinator in packageCollectionImport.combinators) {
           if (combinator is ShowCombinator) {
-            _ensureShows(combinator, 'IterableExtension');
+            for (var extensionName
+                in _fixBuilder.neededCollectionPackageExtensions) {
+              _ensureShows(combinator, extensionName);
+            }
           }
         }
       } else {
-        (_fixBuilder._getChange(node) as NodeChangeForCompilationUnit)
-            .addImport(
-                'package:collection/collection.dart', 'IterableExtension');
+        var change =
+            _fixBuilder._getChange(node) as NodeChangeForCompilationUnit;
+        for (var extensionName
+            in _fixBuilder.neededCollectionPackageExtensions) {
+          change.addImport('package:collection/collection.dart', extensionName);
+        }
       }
     }
     super.visitCompilationUnit(node);
@@ -1248,25 +1305,13 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    if (node.isGetter && node.isAbstract) {
-      for (var annotation in node.metadata) {
-        if (annotation.arguments == null) {
-          var element = annotation.element;
-          if (element is PropertyAccessorElement &&
-              element.name == 'nullable') {
-            if (element.enclosingElement is CompilationUnitElement) {
-              if (element.library.source.uri.toString() ==
-                  'package:built_value/built_value.dart') {
-                var info = AtomicEditInfo(
-                    NullabilityFixDescription.removeNullableAnnotation, {});
-                (_fixBuilder._getChange(node) as NodeChangeForMethodDeclaration)
-                  ..annotationToRemove = annotation
-                  ..removeAnnotationInfo = info;
-              }
-            }
-          }
-        }
-      }
+    var nullableAnnotation = BuiltValueTransformer.findNullableAnnotation(node);
+    if (nullableAnnotation != null) {
+      var info = AtomicEditInfo(
+          NullabilityFixDescription.removeNullableAnnotation, {});
+      (_fixBuilder._getChange(node) as NodeChangeForMethodDeclaration)
+        ..annotationToRemove = nullableAnnotation
+        ..removeAnnotationInfo = info;
     }
     super.visitMethodDeclaration(node);
   }
diff --git a/pkg/nnbd_migration/lib/src/front_end/charcodes.dart b/pkg/nnbd_migration/lib/src/front_end/charcodes.dart
index aba601f..72c75cc 100644
--- a/pkg/nnbd_migration/lib/src/front_end/charcodes.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/charcodes.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.
 
-/// "Line feed" control character.
-const int $lf = 0x0a;
-
 /// "Carriage return" control character.
 const int $cr = 0x0d;
 
+/// "Line feed" control character.
+const int $lf = 0x0a;
+
 /// Space character.
 const int $space = 0x20;
diff --git a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
index c6f4bb7..15b67af 100644
--- a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
@@ -433,7 +433,7 @@
         var edits = info != null
             ? _computeEdits(info, sourceOffset, result)
             : <EditDetail>[];
-        var lineNumber = lineInfo!.getLocation(sourceOffset).lineNumber;
+        var lineNumber = lineInfo.getLocation(sourceOffset).lineNumber;
         var traces = info == null
             ? const <TraceInfo>[]
             : _computeTraces(info.fixReasons);
diff --git a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
index bde8b46..0fec61f 100644
--- a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart
@@ -81,14 +81,14 @@
   String absolutePathFromRoot(String? path) =>
       pathContext.join(includedRoot!, path);
 
-  /// Returns the relative path of [path] from [includedRoot].
-  String relativePathFromRoot(String path) =>
-      pathContext.relative(path, from: includedRoot);
-
   /// Return the path to [unit] from [includedRoot], to be used as a display
   /// name for a library.
   String computeName(UnitInfo unit) => relativePathFromRoot(unit.path!);
 
+  /// Returns the relative path of [path] from [includedRoot].
+  String relativePathFromRoot(String path) =>
+      pathContext.relative(path, from: includedRoot);
+
   List<UnitLink> unitLinks() {
     var links = <UnitLink>[];
     for (var unit in units!) {
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 fea31af..83e0fd0 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
@@ -57,8 +57,6 @@
 
   final ResourceProvider resourceProvider;
 
-  final LineInfo Function(String) _getLineInfo;
-
   /// The HTTP server that serves the preview tool.
   HttpPreviewServer? _server;
 
@@ -85,8 +83,8 @@
   /// Completes when the server has been shutdown.
   late Completer<void> serverIsShutdown;
 
-  NonNullableFix(this.listener, this.resourceProvider, this._getLineInfo,
-      this.bindAddress, this._logger, this.shouldBeMigratedFunction,
+  NonNullableFix(this.listener, this.resourceProvider, this.bindAddress,
+      this._logger, this.shouldBeMigratedFunction,
       {List<String> included = const [],
       this.preferredPort,
       this.summaryPath,
@@ -176,7 +174,7 @@
             ? null
             : MigrationSummary(summaryPath, resourceProvider, includedRoot));
     adapter = NullabilityMigrationAdapter(listener);
-    migration = NullabilityMigration(adapter, _getLineInfo,
+    migration = NullabilityMigration(adapter,
         permissive: true, instrumentation: instrumentationListener);
   }
 
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index 0f1e8f4..e9b8d09 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -42,8 +42,6 @@
   @override
   final Source? source;
 
-  final LineInfo Function(String) _getLineInfo;
-
   /// If the parameters of a function or method are being visited, the
   /// [DecoratedType]s of the function's named parameters that have been seen so
   /// far.  Otherwise `null`.
@@ -72,7 +70,7 @@
   bool _visitingExternalDeclaration = false;
 
   NodeBuilder(this._variables, this.source, this.listener, this._graph,
-      this._typeProvider, this._getLineInfo,
+      this._typeProvider,
       {this.instrumentation});
 
   NullabilityNodeTarget get safeTarget {
@@ -95,7 +93,7 @@
     var exceptionElement = node.exceptionParameter?.staticElement;
     var target = exceptionElement == null
         ? NullabilityNodeTarget.text('exception type')
-        : NullabilityNodeTarget.element(exceptionElement, _getLineInfo);
+        : NullabilityNodeTarget.element(exceptionElement);
     DecoratedType? exceptionType = _pushNullabilityNodeTarget(
         target, () => node.exceptionType?.accept(this));
     if (node.exceptionParameter != null) {
@@ -135,7 +133,7 @@
     node.nativeClause?.accept(this);
     node.members.accept(this);
     var classElement = node.declaredElement!;
-    _handleSupertypeClauses(node, classElement, node.extendsClause?.superclass2,
+    _handleSupertypeClauses(node, classElement, node.extendsClause?.superclass,
         node.withClause, node.implementsClause, null);
     var constructors = classElement.constructors;
     if (constructors.length == 1) {
@@ -161,14 +159,13 @@
     node.name.accept(this);
     node.typeParameters?.accept(this);
     var classElement = node.declaredElement!;
-    _handleSupertypeClauses(node, classElement, node.superclass2,
+    _handleSupertypeClauses(node, classElement, node.superclass,
         node.withClause, node.implementsClause, null);
     for (var constructorElement in classElement.constructors) {
       assert(constructorElement.isSynthetic);
       var decoratedReturnType =
           _createDecoratedTypeForClass(classElement, node);
-      var target =
-          NullabilityNodeTarget.element(constructorElement, _getLineInfo);
+      var target = NullabilityNodeTarget.element(constructorElement);
       var functionType = DecoratedType.forImplicitFunction(
           _typeProvider, constructorElement.type, _graph.never, _graph, target,
           returnType: decoratedReturnType);
@@ -208,7 +205,7 @@
   @override
   DecoratedType? visitConstructorName(ConstructorName node) {
     _pushNullabilityNodeTarget(NullabilityNodeTarget.text('constructed type'),
-        () => node.type2.accept(this));
+        () => node.type.accept(this));
     node.name?.accept(this);
     return null;
   }
@@ -217,7 +214,7 @@
   DecoratedType? visitDeclaredIdentifier(DeclaredIdentifier node) {
     node.metadata.accept(this);
     var declaredElement = node.declaredElement!;
-    var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
+    var target = NullabilityNodeTarget.element(declaredElement);
     DecoratedType? type =
         _pushNullabilityNodeTarget(target, () => node.type?.accept(this));
     if (type == null) {
@@ -267,13 +264,12 @@
 
     for (var item in node.constants) {
       var declaredElement = item.declaredElement!;
-      var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
+      var target = NullabilityNodeTarget.element(declaredElement);
       _variables!.recordDecoratedElementType(declaredElement,
           DecoratedType(classElement.thisType, makeNonNullNode(target, item)));
     }
     final valuesGetter = classElement.getGetter('values')!;
-    var valuesTarget =
-        NullabilityNodeTarget.element(valuesGetter, _getLineInfo);
+    var valuesTarget = NullabilityNodeTarget.element(valuesGetter);
     _variables!.recordDecoratedElementType(
         valuesGetter,
         DecoratedType(valuesGetter.type, makeNonNullNode(valuesTarget),
@@ -283,20 +279,6 @@
                   DecoratedType(classElement.thisType,
                       makeNonNullNode(valuesTarget.typeArgument(0)))
                 ])));
-    final indexGetter = classElement.getGetter('index')!;
-    var indexTarget = NullabilityNodeTarget.element(indexGetter, _getLineInfo);
-    _variables!.recordDecoratedElementType(
-        indexGetter,
-        DecoratedType(indexGetter.type, makeNonNullNode(indexTarget),
-            returnType: DecoratedType(indexGetter.returnType,
-                makeNonNullNode(indexTarget.returnType()))));
-    final toString = classElement.getMethod('toString')!;
-    var toStringTarget = NullabilityNodeTarget.element(toString, _getLineInfo);
-    _variables!.recordDecoratedElementType(
-        toString,
-        DecoratedType(toString.type, makeNonNullNode(toStringTarget),
-            returnType: DecoratedType(toString.returnType,
-                makeNonNullNode(toStringTarget.returnType()))));
     return null;
   }
 
@@ -377,7 +359,7 @@
     var functionType = functionElement.type;
     var returnType = node.returnType;
     DecoratedType? decoratedReturnType;
-    var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
+    var target = NullabilityNodeTarget.element(declaredElement);
     if (returnType != null) {
       _pushNullabilityNodeTarget(target.returnType(), () {
         decoratedReturnType = returnType.accept(this);
@@ -424,8 +406,7 @@
     node.metadata.accept(this);
     DecoratedType? decoratedFunctionType;
     node.typeParameters?.accept(this);
-    var target =
-        NullabilityNodeTarget.element(node.declaredElement!, _getLineInfo);
+    var target = NullabilityNodeTarget.element(node.declaredElement!);
     _pushNullabilityNodeTarget(target, () {
       decoratedFunctionType = node.functionType!.accept(this);
     });
@@ -661,8 +642,7 @@
     node.metadata.accept(this);
     var typeAnnotation = node.type;
     var declaredType = _pushNullabilityNodeTarget(
-        NullabilityNodeTarget.element(
-            node.variables.first.declaredElement!, _getLineInfo),
+        NullabilityNodeTarget.element(node.variables.first.declaredElement!),
         () => typeAnnotation?.accept(this));
     var hint = getPrefixHint(node.firstTokenAfterCommentAndMetadata);
     if (hint != null && hint.kind == HintCommentKind.late_) {
@@ -677,8 +657,7 @@
       var declaredElement = variable.declaredElement;
       var type = declaredType;
       if (type == null) {
-        var target =
-            NullabilityNodeTarget.element(declaredElement!, _getLineInfo);
+        var target = NullabilityNodeTarget.element(declaredElement!);
         type = DecoratedType.forImplicitType(
             _typeProvider, declaredElement.type, _graph, target);
         instrumentation?.implicitType(source, node, type);
@@ -761,7 +740,7 @@
       }
       var functionType = declaredElement.type;
       DecoratedType? decoratedReturnType;
-      var target = NullabilityNodeTarget.element(declaredElement, _getLineInfo);
+      var target = NullabilityNodeTarget.element(declaredElement);
       if (returnType != null) {
         _pushNullabilityNodeTarget(target.returnType(), () {
           decoratedReturnType = returnType.accept(this);
@@ -935,18 +914,17 @@
     var supertypes = <NamedType?>[];
     supertypes.add(superclass);
     if (withClause != null) {
-      supertypes.addAll(withClause.mixinTypes2);
+      supertypes.addAll(withClause.mixinTypes);
     }
     if (implementsClause != null) {
-      supertypes.addAll(implementsClause.interfaces2);
+      supertypes.addAll(implementsClause.interfaces);
     }
     if (onClause != null) {
-      supertypes.addAll(onClause.superclassConstraints2);
+      supertypes.addAll(onClause.superclassConstraints);
     }
     var decoratedSupertypes = <ClassElement, DecoratedType?>{};
     _pushNullabilityNodeTarget(
-        NullabilityNodeTarget.element(declaredElement, _getLineInfo).supertype,
-        () {
+        NullabilityNodeTarget.element(declaredElement).supertype, () {
       for (var supertype in supertypes) {
         DecoratedType? decoratedSupertype;
         if (supertype == null) {
@@ -969,7 +947,7 @@
 
   /// Determines whether the given [uri] comes from the Angular package.
   bool _isAngularUri(Uri uri) {
-    if (uri.scheme != 'package') return false;
+    if (!uri.isScheme('package')) return false;
     var packageName = uri.pathSegments[0];
     if (packageName == 'angular') return true;
     if (packageName == 'third_party.dart_src.angular.angular') {
@@ -998,7 +976,7 @@
     buffer.write(' in "');
     buffer.write(node.toSource());
     buffer.write('" on line ');
-    buffer.write(unit.lineInfo!.getLocation(node.offset).lineNumber);
+    buffer.write(unit.lineInfo.getLocation(node.offset).lineNumber);
     buffer.write(' of "');
     buffer.write(unit.declaredElement!.source.fullName);
     buffer.write('"');
diff --git a/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart b/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
index a9d155e..c0f6603 100644
--- a/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
@@ -49,8 +49,6 @@
 
   final _decoratedTypeParameterBounds = DecoratedTypeParameterBounds();
 
-  final LineInfo Function(String) _getLineInfo;
-
   /// Map from [Source] object to a boolean indicating whether the source is
   /// opted in to null safety.
   final Map<Source, bool> _libraryOptInStatus = {};
@@ -77,28 +75,27 @@
   /// should be warned about or removed (in the way specified by
   /// [removeViaComments]).
   NullabilityMigrationImpl(NullabilityMigrationListener? listener,
-      LineInfo Function(String) getLineInfo,
       {bool? permissive = false,
       NullabilityMigrationInstrumentation? instrumentation,
       bool? removeViaComments = false,
       bool? warnOnWeakCode = true})
       : this._(
-            listener,
-            NullabilityGraph(instrumentation: instrumentation),
-            permissive,
-            instrumentation,
-            removeViaComments,
-            warnOnWeakCode,
-            getLineInfo);
+          listener,
+          NullabilityGraph(instrumentation: instrumentation),
+          permissive,
+          instrumentation,
+          removeViaComments,
+          warnOnWeakCode,
+        );
 
   NullabilityMigrationImpl._(
-      this.listener,
-      this._graph,
-      this._permissive,
-      this._instrumentation,
-      this.removeViaComments,
-      this.warnOnWeakCode,
-      this._getLineInfo) {
+    this.listener,
+    this._graph,
+    this._permissive,
+    this._instrumentation,
+    this.removeViaComments,
+    this.warnOnWeakCode,
+  ) {
     _instrumentation?.immutableNodes(_graph.never, _graph.always);
   }
 
@@ -199,20 +196,15 @@
     _recordTransitiveImportExportOptInStatus(
         result.libraryElement.exportedLibraries);
     if (_variables == null) {
-      _variables = Variables(_graph, result.typeProvider, _getLineInfo,
+      _variables = Variables(_graph, result.typeProvider,
           instrumentation: _instrumentation);
       _decoratedClassHierarchy = DecoratedClassHierarchy(_variables, _graph);
     }
     var unit = result.unit;
     try {
       DecoratedTypeParameterBounds.current = _decoratedTypeParameterBounds;
-      unit.accept(NodeBuilder(
-          _variables,
-          unit.declaredElement!.source,
-          _permissive! ? listener : null,
-          _graph,
-          result.typeProvider,
-          _getLineInfo,
+      unit.accept(NodeBuilder(_variables, unit.declaredElement!.source,
+          _permissive! ? listener : null, _graph, result.typeProvider,
           instrumentation: _instrumentation));
     } finally {
       DecoratedTypeParameterBounds.current = null;
diff --git a/pkg/nnbd_migration/lib/src/nullability_node_target.dart b/pkg/nnbd_migration/lib/src/nullability_node_target.dart
index da43dbd..38833b9 100644
--- a/pkg/nnbd_migration/lib/src/nullability_node_target.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_node_target.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:nnbd_migration/instrumentation.dart';
 
 String _computeElementName(Element? element) {
@@ -29,8 +28,7 @@
 /// code is referenced by a given nullability node.
 abstract class NullabilityNodeTarget {
   /// Creates a [NullabilityNodeTarget] referring to a particular element.
-  factory NullabilityNodeTarget.element(
-          Element element, LineInfo Function(String) getLineInfo) =
+  factory NullabilityNodeTarget.element(Element element) =
       _NullabilityNodeTarget_Element;
 
   /// Creates a [NullabilityNodeTarget] with a simple text description.
@@ -111,10 +109,9 @@
 
   final CodeReference codeReference;
 
-  _NullabilityNodeTarget_Element(
-      Element element, LineInfo Function(String) getLineInfo)
+  _NullabilityNodeTarget_Element(Element element)
       : name = _computeElementName(element),
-        codeReference = CodeReference.fromElement(element, getLineInfo),
+        codeReference = CodeReference.fromElement(element),
         super._();
 
   @override
diff --git a/pkg/nnbd_migration/lib/src/utilities/annotation_tracker.dart b/pkg/nnbd_migration/lib/src/utilities/annotation_tracker.dart
index ab64227..2b7e6d2 100644
--- a/pkg/nnbd_migration/lib/src/utilities/annotation_tracker.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/annotation_tracker.dart
@@ -9,9 +9,8 @@
 class AnnotationTracker extends RecursiveAstVisitor<void> {
   final Set<Annotation> _nodes = {};
 
-  @override
-  void visitAnnotation(Annotation node) {
-    _nodes.add(node);
+  void finalize() {
+    assert(_nodes.isEmpty, 'Annotation nodes not visited: $_nodes');
   }
 
   void nodeVisited(Annotation node) {
@@ -20,7 +19,8 @@
     }
   }
 
-  void finalize() {
-    assert(_nodes.isEmpty, 'Annotation nodes not visited: $_nodes');
+  @override
+  void visitAnnotation(Annotation node) {
+    _nodes.add(node);
   }
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.dart b/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.dart
new file mode 100644
index 0000000..c4ed06f
--- /dev/null
+++ b/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.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 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+
+class BuiltValueTransformer {
+  static Annotation? findNullableAnnotation(MethodDeclaration node) {
+    if (node.isGetter && node.isAbstract) {
+      for (var annotation in node.metadata) {
+        if (annotation.arguments == null) {
+          var element = annotation.element;
+          if (element is PropertyAccessorElement &&
+              element.name == 'nullable') {
+            if (element.enclosingElement is CompilationUnitElement) {
+              if (element.library.source.uri.toString() ==
+                  'package:built_value/built_value.dart') {
+                return annotation;
+              }
+            }
+          }
+        }
+      }
+    }
+    return null;
+  }
+}
diff --git a/pkg/nnbd_migration/lib/src/utilities/multi_future_tracker.dart b/pkg/nnbd_migration/lib/src/utilities/multi_future_tracker.dart
index 94176c2..d40da27 100644
--- a/pkg/nnbd_migration/lib/src/utilities/multi_future_tracker.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/multi_future_tracker.dart
@@ -37,14 +37,6 @@
 
   MultiFutureTracker(this.parallel);
 
-  /// Wait until fewer or equal to this many Futures are outstanding.
-  Future<void> _waitUntil(int max) async {
-    assert(_trackedFutures.length <= parallel);
-    while (_trackedFutures.length > max) {
-      await Future.any(_trackedFutures);
-    }
-  }
-
   /// Generates a [Future] from the given closure and adds it to the queue,
   /// once the queue is sufficiently empty.  The returned future completes
   /// when the generated [Future] has been added to the queue.
@@ -73,4 +65,12 @@
 
   /// Wait until all futures added so far have completed.
   Future<void> wait() => _waitUntil(0);
+
+  /// Wait until fewer or equal to this many Futures are outstanding.
+  Future<void> _waitUntil(int max) async {
+    assert(_trackedFutures.length <= parallel);
+    while (_trackedFutures.length > max) {
+      await Future.any(_trackedFutures);
+    }
+  }
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart b/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
index 5c2e296..8af9550 100644
--- a/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
@@ -31,7 +31,7 @@
     final parent = node.parent;
     if (parent is ConstructorName) {
       // We only need to visit C in `new C()`, just `int` in `new C<int>()`.
-      return parent.type2 != node;
+      return parent.type != node;
     }
 
     return true;
diff --git a/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart b/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
index 672840e..ff6fb77 100644
--- a/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/subprocess_launcher.dart
@@ -9,7 +9,6 @@
 /// This is a modified version of dartdoc's
 /// SubprocessLauncher from test/src/utils.dart, for use with the
 /// nnbd_migration script.
-
 import 'dart:convert';
 import 'dart:io';
 
@@ -34,20 +33,6 @@
   final String context;
   final Map<String, String> environmentDefaults;
 
-  /// From flutter:dev/tools/dartdoc.dart, modified.
-  static Future<void> _printStream(Stream<List<int>> stream, Stdout output,
-      {String prefix = '', Iterable<String> Function(String line)? filter}) {
-    filter ??= (line) => [line];
-    return stream
-        .transform(utf8.decoder)
-        .transform(const LineSplitter())
-        .expand(filter)
-        .listen((String line) {
-      output.write('$prefix$line'.trim());
-      output.write('\n');
-    }).asFuture();
-  }
-
   SubprocessLauncher(this.context, [Map<String, String>? environment])
       : environmentDefaults = environment ?? <String, String>{};
 
@@ -192,4 +177,18 @@
     }
     return jsonObjects;
   }
+
+  /// From flutter:dev/tools/dartdoc.dart, modified.
+  static Future<void> _printStream(Stream<List<int>> stream, Stdout output,
+      {String prefix = '', Iterable<String> Function(String line)? filter}) {
+    filter ??= (line) => [line];
+    return stream
+        .transform(utf8.decoder)
+        .transform(const LineSplitter())
+        .expand(filter)
+        .listen((String line) {
+      output.write('$prefix$line'.trim());
+      output.write('\n');
+    }).asFuture();
+  }
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart b/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
new file mode 100644
index 0000000..cc27031
--- /dev/null
+++ b/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
@@ -0,0 +1,152 @@
+// 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/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/dart/element/type_system.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:nnbd_migration/src/decorated_type.dart';
+import 'package:nnbd_migration/src/nullability_node.dart';
+
+/// Information about a method call that we might want to transform into a call
+/// to `whereNotNull` counterpart.  See [WhereNotNullTransformer] for more
+/// information.
+class WhereNotNullTransformationInfo {
+  /// AST node of the method invocation.
+  final MethodInvocation methodInvocation;
+
+  /// AST node of the argument of the method invocation.
+  final Expression argument;
+
+  /// Original name of the method being called, prior to transformation.
+  final String originalName;
+
+  WhereNotNullTransformationInfo(
+      this.methodInvocation, this.argument, this.originalName);
+
+  /// New method to call, after transformation.
+  String get replacementName => 'whereNotNull';
+}
+
+/// Methods to assist in transforming calls to the `Iterable` method `where`
+/// into calls to the `package:collection` method `whereNotNull`, where
+/// possible.
+///
+/// An example of the kind of code that can be transformed is:
+///
+///     Iterable<int> f(List<int/*?*/> x) => x.where((y) => y != null);
+///
+/// We transform this into:
+///
+///     Iterable<int> f(List<int?> x) => x.whereNotNull();
+///
+/// Without this transformation, the migrated result would have been:
+///
+///     Iterable<int?> f(List<int/*?*/> x) => x.where((y) => y != null);
+///
+/// Which would have placed an otherwise unnecessary requirement on callers to
+/// handle `null` values in the resulting iterable.
+class WhereNotNullTransformer {
+  final TypeProvider _typeProvider;
+
+  final TypeSystem _typeSystem;
+
+  WhereNotNullTransformer(this._typeProvider, this._typeSystem);
+
+  /// Transforms the [DecoratedType] of an invocation of `.where` to the
+  /// [DecoratedType] of the corresponding invocation of `.whereNotNull` that
+  /// will replace it.
+  ///
+  /// The transformation is that the type argument to `Iterable` is made
+  /// non-nullable, so that nullability doesn't unnecessarily propagate to other
+  /// parts of the code.
+  DecoratedType transformDecoratedInvocationType(
+      DecoratedType decoratedType, NullabilityGraph graph) {
+    var type = decoratedType.type;
+    var typeArguments = decoratedType.typeArguments;
+    if (type is InterfaceType &&
+        type.element == _typeProvider.iterableElement &&
+        typeArguments.length == 1) {
+      return DecoratedType(type, decoratedType.node,
+          typeArguments: [typeArguments.single?.withNode(graph.never)]);
+    }
+    return decoratedType;
+  }
+
+  /// Transforms the post-migration type of an invocation of `.where` to the
+  /// type of the corresponding invocation of `.whereNotNull` that will replace
+  /// it.
+  ///
+  /// The transformation is that the type argument to `Iterable` is made
+  /// non-nullable, so that we don't try to introduce any unnecessary null
+  /// checks or type casts in other parts of the code.
+  DartType transformPostMigrationInvocationType(DartType type) {
+    if (type is InterfaceType &&
+        type.element == _typeProvider.iterableElement) {
+      var typeArguments = type.typeArguments;
+      if (typeArguments.length == 1) {
+        return InterfaceTypeImpl(
+            element: type.element,
+            typeArguments: [_typeSystem.promoteToNonNull(typeArguments.single)],
+            nullabilitySuffix: type.nullabilitySuffix);
+      }
+    }
+    return type;
+  }
+
+  /// If [node] is a call that can be transformed, returns information about the
+  /// transformable call; otherwise returns `null`.
+  WhereNotNullTransformationInfo? tryTransformMethodInvocation(AstNode? node) {
+    if (node is MethodInvocation) {
+      if (!_isTransformableMethod(node.methodName.staticElement)) return null;
+      var arguments = node.argumentList.arguments;
+      if (arguments.length != 1) return null;
+      var argument = arguments[0];
+      if (!_isClosureCheckingNotNull(argument)) return null;
+      return WhereNotNullTransformationInfo(
+          node, argument, node.methodName.name);
+    }
+    return null;
+  }
+
+  /// Checks whether [expression] is of the form `(x) => x != null`.
+  bool _isClosureCheckingNotNull(Expression expression) {
+    if (expression is! FunctionExpression) return false;
+    if (expression.typeParameters != null) return false;
+    var parameters = expression.parameters!.parameters;
+    if (parameters.length != 1) return false;
+    var parameter = parameters[0];
+    if (parameter.isNamed) return false;
+    var body = expression.body;
+    if (body is! ExpressionFunctionBody) return false;
+    var returnedExpression = body.expression;
+    if (returnedExpression is! BinaryExpression) return false;
+    if (returnedExpression.operator.type != TokenType.BANG_EQ) return false;
+    var lhs = returnedExpression.leftOperand;
+    if (lhs is! SimpleIdentifier) return false;
+    if (lhs.staticElement != parameter.declaredElement) return false;
+    if (returnedExpression.rightOperand is! NullLiteral) return false;
+    return true;
+  }
+
+  /// Determines if [element] is a declaration of `.where` for which calls can
+  /// be transformed.
+  bool _isTransformableMethod(Element? element) {
+    if (element is MethodElement) {
+      if (element.isStatic) return false;
+      if (element.name != 'where') return false;
+      var enclosingElement = element.declaration.enclosingElement;
+      if (enclosingElement is ClassElement) {
+        // If the class is `Iterable` or a subtype of it, we consider the user
+        // to be calling a transformable method.
+        return _typeSystem.isSubtypeOf(
+            enclosingElement.thisType, _typeProvider.iterableDynamicType);
+      }
+    }
+    return false;
+  }
+}
diff --git a/pkg/nnbd_migration/lib/src/variables.dart b/pkg/nnbd_migration/lib/src/variables.dart
index 7222753..8246f140 100644
--- a/pkg/nnbd_migration/lib/src/variables.dart
+++ b/pkg/nnbd_migration/lib/src/variables.dart
@@ -69,12 +69,9 @@
 
   final NullabilityMigrationInstrumentation? instrumentation;
 
-  final LineInfo Function(String) _getLineInfo;
-
-  Variables(this._graph, this._typeProvider, this._getLineInfo,
-      {this.instrumentation})
+  Variables(this._graph, this._typeProvider, {this.instrumentation})
       : _alreadyMigratedCodeDecorator =
-            AlreadyMigratedCodeDecorator(_graph, _typeProvider, _getLineInfo);
+            AlreadyMigratedCodeDecorator(_graph, _typeProvider);
 
   /// Given a [class_], gets the decorated type information for the superclasses
   /// it directly implements/extends/etc.
@@ -400,7 +397,7 @@
       element = element.aliasedElement!;
     }
 
-    var target = NullabilityNodeTarget.element(element, _getLineInfo);
+    var target = NullabilityNodeTarget.element(element);
     if (element is FunctionTypedElement) {
       decoratedType = _alreadyMigratedCodeDecorator.decorate(
           element.preMigrationType, element, target);
diff --git a/pkg/nnbd_migration/test/abstract_context.dart b/pkg/nnbd_migration/test/abstract_context.dart
index 51c7632..2965a8a 100644
--- a/pkg/nnbd_migration/test/abstract_context.dart
+++ b/pkg/nnbd_migration/test/abstract_context.dart
@@ -5,7 +5,6 @@
 import 'dart:convert';
 
 import 'package:analyzer/dart/analysis/analysis_context.dart';
-import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
@@ -165,9 +164,6 @@
     return _getContext(path).driver;
   }
 
-  LineInfo getLineInfo(String path) =>
-      (session.getFile(path) as FileResult).lineInfo;
-
   void setUp() {
     setupResourceProvider();
     overlayResourceProvider = OverlayResourceProvider(resourceProvider);
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 7eeea96..dcc89c4 100644
--- a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
+++ b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
@@ -10,7 +10,6 @@
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
@@ -353,7 +352,7 @@
     expect(decoratedSupertypes, hasLength(2));
     // TODO(scheglov) Use location matcher.
     withElement.checkObject(decoratedSupertypes[0],
-        withElement.checkExplicitlyNonNullable, 'Future (async.dart:1:79)');
+        withElement.checkExplicitlyNonNullable, 'Future (async.dart:7:16)');
     // Since Future<T> is a subtype of FutureOr<T>, we consider FutureOr<T> to
     // be an immediate supertype, even though the class declaration for Future
     // doesn't mention FutureOr.
@@ -363,7 +362,7 @@
         withElement.checkExplicitlyNonNullable,
         (t, displayName) => withElement.checkTypeParameter(
             t!, withElement.checkExplicitlyNonNullable, typeParam, displayName),
-        'Future (async.dart:1:79)');
+        'Future (async.dart:7:16)');
   }
 
   Future<void> test_getImmediateSupertypes_generic() async {
@@ -492,8 +491,7 @@
   NullabilityNode get always => graph.always;
 
   AlreadyMigratedCodeDecorator get decorator {
-    return AlreadyMigratedCodeDecorator(
-        graph, typeProvider, (_) => LineInfo([0]));
+    return AlreadyMigratedCodeDecorator(graph, typeProvider);
   }
 
   NullabilityNode get never => graph.never;
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 2301e5b..c88be9a 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -60,7 +60,7 @@
       newFile(path, content: input[path]!);
     }
     var listener = TestMigrationListener();
-    var migration = NullabilityMigration(listener, getLineInfo,
+    var migration = NullabilityMigration(listener,
         permissive: _usePermissiveMode,
         removeViaComments: removeViaComments,
         warnOnWeakCode: warnOnWeakCode);
@@ -695,6 +695,30 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_annotation_named_constructor() async {
+    var content = '''
+class C {
+  final List<Object> values;
+  const factory C.ints(List<int> list) = C;
+  const C(this.values);
+}
+
+@C.ints([1, 2, 3])
+class D {}
+''';
+    var expected = '''
+class C {
+  final List<Object> values;
+  const factory C.ints(List<int> list) = C;
+  const C(this.values);
+}
+
+@C.ints([1, 2, 3])
+class D {}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_argumentError_checkNotNull_implies_non_null_intent() async {
     var content = '''
 void f(int i) {
@@ -953,6 +977,26 @@
         {path1: file1, path2: file2}, {path1: expected1, path2: anything});
   }
 
+  Future<void> test_built_value_nullable_getter_interface_only() async {
+    addBuiltValuePackage();
+    var content = '''
+import 'package:built_value/built_value.dart';
+
+abstract class Foo {
+  @nullable
+  int get value;
+}
+''';
+    var expected = '''
+import 'package:built_value/built_value.dart';
+
+abstract class Foo {
+  int? get value;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_call_already_migrated_extension() async {
     var content = '''
 import 'already_migrated.dart';
@@ -1118,7 +1162,6 @@
     });
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47848')
   Future<void> test_call_tearoff_futureOr() async {
     var content = '''
 import 'dart:async';
@@ -1189,7 +1232,6 @@
     await _checkSingleFileChanges(content, expected);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/47848')
   Future<void> test_call_tearoff_raw_function() async {
     var content = '''
 class C {
@@ -9383,6 +9425,58 @@
 ''';
     await _checkSingleFileChanges(content, expected, warnOnWeakCode: true);
   }
+
+  Future<void> test_whereNotNull() async {
+    var content = '''
+Iterable<String> f(Iterable<String/*?*/> it) => it.where((s) => s != null);
+''';
+    var expected = '''
+import 'package:collection/collection.dart' show IterableNullableExtension;
+
+Iterable<String> f(Iterable<String?> it) => it.whereNotNull();
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_whereNotNull_and_firstWhereOrNull() async {
+    var content = '''
+Iterable<String> f(Iterable<String/*?*/> it) => it.where((s) => s != null);
+int g(Iterable<int> it) => it.firstWhere((i) => i != 0, orElse: () => null);
+''';
+    var expected = '''
+import 'package:collection/collection.dart' show IterableExtension, IterableNullableExtension;
+
+Iterable<String> f(Iterable<String?> it) => it.whereNotNull();
+int? g(Iterable<int> it) => it.firstWhereOrNull((i) => i != 0);
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_whereNotNull_complexType() async {
+    var content = '''
+Iterable<Map<String, int>> f(Iterable<Map<String/*?*/, int>/*?*/> it)
+    => it.where((m) => m != null);
+''';
+    var expected = '''
+import 'package:collection/collection.dart' show IterableNullableExtension;
+
+Iterable<Map<String?, int>> f(Iterable<Map<String?, int>?> it)
+    => it.whereNotNull();
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
+  Future<void> test_whereNotNull_noContext() async {
+    var content = '''
+f(Iterable<String/*?*/> it) => it.where((s) => s != null);
+''';
+    var expected = '''
+import 'package:collection/collection.dart' show IterableNullableExtension;
+
+f(Iterable<String?> it) => it.whereNotNull();
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/nnbd_migration/test/decorated_type_test.dart b/pkg/nnbd_migration/test/decorated_type_test.dart
index 3f28996..0ca6fe8 100644
--- a/pkg/nnbd_migration/test/decorated_type_test.dart
+++ b/pkg/nnbd_migration/test/decorated_type_test.dart
@@ -5,7 +5,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/element_type_provider.dart';
 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
@@ -41,7 +40,7 @@
   factory DecoratedTypeTest() {
     var typeProvider = TestTypeProvider();
     var graph = NullabilityGraph();
-    var variables = Variables(graph, typeProvider, _getLineInfo);
+    var variables = Variables(graph, typeProvider);
     return DecoratedTypeTest._(graph, typeProvider, variables);
   }
 
@@ -616,8 +615,6 @@
     var decoratedType = function(dynamic_, positional: [xType], node: always);
     expect(decoratedType.toString(), 'dynamic Function([$xType])?');
   }
-
-  static LineInfo _getLineInfo(String path) => LineInfo([0]);
 }
 
 class _ElementTypeProvider extends ElementTypeProvider {
diff --git a/pkg/nnbd_migration/test/fix_builder_test.dart b/pkg/nnbd_migration/test/fix_builder_test.dart
index 76c2bca..322ab2a 100644
--- a/pkg/nnbd_migration/test/fix_builder_test.dart
+++ b/pkg/nnbd_migration/test/fix_builder_test.dart
@@ -1433,7 +1433,7 @@
       // Behavior of the null literal doesn't matter because it's being dropped.
       findNode.nullLiteral('null'): anything
     });
-    expect(fixBuilder.needsIterableExtension, true);
+    expect(fixBuilder.neededCollectionPackageExtensions, {'IterableExtension'});
   }
 
   Future<void> test_functionExpressionInvocation_dynamic() async {
@@ -3812,13 +3812,29 @@
     });
   }
 
+  Future<void> test_where_transform() async {
+    await analyze('''
+Iterable<int> _f(Iterable<int/*?*/> x) => x.where((e) => e != null);
+''');
+    var methodInvocation = findNode.methodInvocation('where');
+    var functionExpression = findNode.functionExpression('(e) => e != null');
+    var fixBuilder =
+        visitSubexpression(methodInvocation, 'Iterable<int>', changes: {
+      methodInvocation.methodName: isMethodNameChange('whereNotNull'),
+      methodInvocation.argumentList:
+          isDropArgument({functionExpression: anything}),
+    });
+    expect(fixBuilder.neededCollectionPackageExtensions,
+        {'IterableNullableExtension'});
+  }
+
   void visitAll(
       {Map<AstNode, Matcher> changes = const <Expression, Matcher>{},
       Map<AstNode, Set<Problem>> problems = const <AstNode, Set<Problem>>{},
       bool injectNeedsIterableExtension = false}) {
     var fixBuilder = _createFixBuilder(testUnit!);
     if (injectNeedsIterableExtension) {
-      fixBuilder.needsIterableExtension = true;
+      fixBuilder.neededCollectionPackageExtensions.add('IterableExtension');
     }
     fixBuilder.visitAll();
     expect(scopedChanges(fixBuilder, testUnit), changes);
@@ -3930,16 +3946,16 @@
           .having((c) => c.expressionChangeInfos.single,
               'expressionChangeInfos.single', infoMatcher);
 
-  TypeMatcher<T> havingNullCheckWithInfo(dynamic matcher) =>
-      havingExpressionChange(TypeMatcher<NullCheckChange>(), matcher);
-
-  TypeMatcher<T> havingNoValidMigrationWithInfo(dynamic matcher) =>
-      havingExpressionChange(TypeMatcher<NoValidMigrationChange>(), matcher);
-
   TypeMatcher<T> havingIndroduceAsWithInfo(
           dynamic typeStringMatcher, dynamic infoMatcher) =>
       havingExpressionChange(
           TypeMatcher<IntroduceAsChange>().having(
               (c) => c.type.toString(), 'type (string)', typeStringMatcher),
           infoMatcher);
+
+  TypeMatcher<T> havingNoValidMigrationWithInfo(dynamic matcher) =>
+      havingExpressionChange(TypeMatcher<NoValidMigrationChange>(), matcher);
+
+  TypeMatcher<T> havingNullCheckWithInfo(dynamic matcher) =>
+      havingExpressionChange(TypeMatcher<NullCheckChange>(), matcher);
 }
diff --git a/pkg/nnbd_migration/test/front_end/info_builder_test.dart b/pkg/nnbd_migration/test/front_end/info_builder_test.dart
index 23a7900..f434cf2 100644
--- a/pkg/nnbd_migration/test/front_end/info_builder_test.dart
+++ b/pkg/nnbd_migration/test/front_end/info_builder_test.dart
@@ -798,34 +798,6 @@
         edits: isEmpty);
   }
 
-  Future<void> test_insertedRequired_fieldFormal_hint() async {
-    var unit = await buildInfoForSingleTestFile('''
-class C {
-  int level;
-  int level2;
-  C({this.level}) : this.level2 = level + 1;
-}
-''', migratedContent: '''
-class C {
-  int  level;
-  int  level2;
-  C({required this.level}) : this.level2 = level + 1;
-}
-''');
-    var regions = unit.fixRegions;
-    expect(regions, hasLength(1));
-    var region = regions[0];
-    var edits = region.edits;
-    assertRegion(
-        region: region,
-        offset: 44,
-        length: 9,
-        explanation: "Add 'required' keyword to parameter 'level' in 'C.'",
-        kind: NullabilityFixKind.addRequired);
-    assertEdit(
-        edit: edits[0], offset: 42, length: 0, replacement: '/*required*/ ');
-  }
-
   Future<void> test_insertedRequired_fieldFormal() async {
     addMetaPackage();
     var unit = await buildInfoForSingleTestFile('''
@@ -857,6 +829,63 @@
         edit: edits[0], offset: 75, length: 0, replacement: '@required ');
   }
 
+  Future<void> test_insertedRequired_fieldFormal_hint() async {
+    var unit = await buildInfoForSingleTestFile('''
+class C {
+  int level;
+  int level2;
+  C({this.level}) : this.level2 = level + 1;
+}
+''', migratedContent: '''
+class C {
+  int  level;
+  int  level2;
+  C({required this.level}) : this.level2 = level + 1;
+}
+''');
+    var regions = unit.fixRegions;
+    expect(regions, hasLength(1));
+    var region = regions[0];
+    var edits = region.edits;
+    assertRegion(
+        region: region,
+        offset: 44,
+        length: 9,
+        explanation: "Add 'required' keyword to parameter 'level' in 'C.'",
+        kind: NullabilityFixKind.addRequired);
+    assertEdit(
+        edit: edits[0], offset: 42, length: 0, replacement: '/*required*/ ');
+  }
+
+  Future<void> test_insertedRequired_parameter() async {
+    addMetaPackage();
+    var unit = await buildInfoForSingleTestFile('''
+import 'package:meta/meta.dart';
+class C {
+  int level = 0;
+  bool f({int lvl}) => lvl >= level;
+}
+''', migratedContent: '''
+import 'package:meta/meta.dart';
+class C {
+  int  level = 0;
+  bool  f({required int  lvl}) => lvl >= level;
+}
+''');
+    var regions = unit.fixRegions;
+    expect(regions, hasLength(1));
+    var region = regions[0];
+    var edits = region.edits;
+    assertRegion(
+        region: region,
+        offset: 72,
+        length: 9,
+        explanation: "Add 'required' keyword to parameter 'lvl' in 'C.f'",
+        kind: NullabilityFixKind.addRequired);
+    assertEdit(
+        edit: edits[0], offset: 70, length: 0, replacement: '@required ');
+  }
+
   Future<void> test_insertedRequired_parameter_hint() async {
     var unit = await buildInfoForSingleTestFile('''
 class C {
@@ -906,35 +935,6 @@
         edit: edits[0], offset: 78, length: 0, replacement: '@meta.required ');
   }
 
-  Future<void> test_insertedRequired_parameter() async {
-    addMetaPackage();
-    var unit = await buildInfoForSingleTestFile('''
-import 'package:meta/meta.dart';
-class C {
-  int level = 0;
-  bool f({int lvl}) => lvl >= level;
-}
-''', migratedContent: '''
-import 'package:meta/meta.dart';
-class C {
-  int  level = 0;
-  bool  f({required int  lvl}) => lvl >= level;
-}
-''');
-    var regions = unit.fixRegions;
-    expect(regions, hasLength(1));
-    var region = regions[0];
-    var edits = region.edits;
-    assertRegion(
-        region: region,
-        offset: 72,
-        length: 9,
-        explanation: "Add 'required' keyword to parameter 'lvl' in 'C.f'",
-        kind: NullabilityFixKind.addRequired);
-    assertEdit(
-        edit: edits[0], offset: 70, length: 0, replacement: '@required ');
-  }
-
   Future<void> test_insertParens() async {
     var originalContent = '''
 class C {
diff --git a/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart b/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart
index 54a5e39..536560f 100644
--- a/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart
+++ b/pkg/nnbd_migration/test/front_end/navigation_tree_renderer_test.dart
@@ -330,11 +330,11 @@
 }
 
 extension<T extends NavigationTreeNode> on TypeMatcher<T> {
-  TypeMatcher<T> named(dynamic matcher) =>
-      having((node) => node.name, 'name', matcher);
-
   TypeMatcher<T> havingMigrationStatus(dynamic matcher) =>
       having((node) => node.migrationStatus, 'migrationStatus', matcher);
+
+  TypeMatcher<T> named(dynamic matcher) =>
+      having((node) => node.name, 'name', matcher);
 }
 
 extension on TypeMatcher<NavigationTreeDirectoryNode> {
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 451a1d7..047149f 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
@@ -228,7 +228,7 @@
     var listener = DartFixListener(server, ListenerClient());
     var instrumentationListener = InstrumentationListener();
     var adapter = NullabilityMigrationAdapter(listener);
-    var migration = NullabilityMigration(adapter, getLineInfo,
+    var migration = NullabilityMigration(adapter,
         permissive: false,
         instrumentation: instrumentationListener,
         removeViaComments: removeViaComments,
diff --git a/pkg/nnbd_migration/test/instrumentation_test.dart b/pkg/nnbd_migration/test/instrumentation_test.dart
index 821b21c..f9a4131 100644
--- a/pkg/nnbd_migration/test/instrumentation_test.dart
+++ b/pkg/nnbd_migration/test/instrumentation_test.dart
@@ -144,7 +144,7 @@
     var sourcePath = convertPath('$testsPath/lib/test.dart');
     newFile(sourcePath, content: content);
     var listener = TestMigrationListener();
-    var migration = NullabilityMigration(listener, getLineInfo,
+    var migration = NullabilityMigration(listener,
         instrumentation: _InstrumentationClient(this),
         removeViaComments: removeViaComments,
         warnOnWeakCode: warnOnWeakCode);
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index 48c7c49..0d289f8 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/file_system/file_system.dart' show ResourceProvider;
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart' as mock_sdk;
 import 'package:args/args.dart';
@@ -63,17 +62,13 @@
 /// Specialization of [NonNullableFix] that generates artificial exceptions, so
 /// that we can test they are properly propagated to top level.
 class _ExceptionGeneratingNonNullableFix extends NonNullableFix {
-  _ExceptionGeneratingNonNullableFix(
-      DartFixListener listener,
-      ResourceProvider resourceProvider,
-      LineInfo Function(String) getLineInfo,
-      Object? bindAddress,
-      Logger logger,
+  _ExceptionGeneratingNonNullableFix(DartFixListener listener,
+      ResourceProvider resourceProvider, Object? bindAddress, Logger logger,
       {List<String> included = const <String>[],
       int? preferredPort,
       String? summaryPath,
       required String sdkPath})
-      : super(listener, resourceProvider, getLineInfo, bindAddress, logger,
+      : super(listener, resourceProvider, bindAddress, logger,
             (String? path) => true,
             included: included,
             preferredPort: preferredPort,
@@ -141,25 +136,21 @@
       _sortPaths(super.computePathsToProcess(context));
 
   @override
-  NonNullableFix createNonNullableFix(
-      DartFixListener listener,
-      ResourceProvider resourceProvider,
-      LineInfo Function(String path) getLineInfo,
-      Object? bindAddress,
+  NonNullableFix createNonNullableFix(DartFixListener listener,
+      ResourceProvider resourceProvider, Object? bindAddress,
       {List<String> included = const <String>[],
       int? preferredPort,
       String? summaryPath,
       required String sdkPath}) {
     if (cli._test.injectArtificialException) {
       return _ExceptionGeneratingNonNullableFix(
-          listener, resourceProvider, getLineInfo, bindAddress, logger,
+          listener, resourceProvider, bindAddress, logger,
           included: included,
           preferredPort: preferredPort,
           summaryPath: summaryPath,
           sdkPath: sdkPath);
     } else {
-      return super.createNonNullableFix(
-          listener, resourceProvider, getLineInfo, bindAddress,
+      return super.createNonNullableFix(listener, resourceProvider, bindAddress,
           included: included,
           preferredPort: preferredPort,
           summaryPath: summaryPath,
@@ -1661,10 +1652,10 @@
   }
 
   test_option_sdk_default() {
-    var cli = MigrationCli(binaryName: 'nnbd_migration');
+    var cli = _createCli();
     var cliRunner = cli.decodeCommandLineArgs(_parseArgs([]))!;
-    expect(Directory(path.join(cliRunner.options.sdkPath, 'bin')).existsSync(),
-        isTrue);
+    expect(cliRunner.options.sdkPath,
+        cli._test.resourceProvider.convertPath(sdkRootPathPosix));
   }
 
   test_option_sdk_hidden() {
diff --git a/pkg/nnbd_migration/test/migration_visitor_test_base.dart b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
index 85448d0..c60d2f8 100644
--- a/pkg/nnbd_migration/test/migration_visitor_test_base.dart
+++ b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
@@ -304,9 +304,8 @@
 
   final _expressionChecks = <Expression, ExpressionChecksOrigin>{};
 
-  InstrumentedVariables(NullabilityGraph graph, TypeProvider typeProvider,
-      LineInfo Function(String) getLineInfo)
-      : super(graph, typeProvider, getLineInfo);
+  InstrumentedVariables(NullabilityGraph graph, TypeProvider typeProvider)
+      : super(graph, typeProvider);
 
   /// Gets the [ExpressionChecks] associated with the given [expression].
   ExpressionChecksOrigin? checkExpression(Expression expression) =>
@@ -370,9 +369,9 @@
 
   Future<CompilationUnit> analyze(String code) async {
     await resolveTestUnit(code);
-    variables = InstrumentedVariables(graph, typeProvider, getLineInfo);
-    testUnit!.accept(NodeBuilder(
-        variables, testSource, null, graph, typeProvider, getLineInfo));
+    variables = InstrumentedVariables(graph, typeProvider);
+    testUnit!
+        .accept(NodeBuilder(variables, testSource, null, graph, typeProvider));
     return testUnit!;
   }
 
@@ -415,7 +414,7 @@
   /// file [offset], with the given [function] name.
   TypeMatcher<CodeReference> matchCodeRef(
       {required int offset, required String function}) {
-    var location = testUnit!.lineInfo!.getLocation(offset);
+    var location = testUnit!.lineInfo.getLocation(offset);
     return TypeMatcher<CodeReference>()
         .having((cr) => cr.line, 'line', location.lineNumber)
         .having((cr) => cr.column, 'column', location.columnNumber)
diff --git a/pkg/nnbd_migration/test/utilities/multi_future_tracker_test.dart b/pkg/nnbd_migration/test/utilities/multi_future_tracker_test.dart
index 634a347..18d7c67 100644
--- a/pkg/nnbd_migration/test/utilities/multi_future_tracker_test.dart
+++ b/pkg/nnbd_migration/test/utilities/multi_future_tracker_test.dart
@@ -24,6 +24,22 @@
     testTracker = null;
   }
 
+  Future<void> test_doesNotBlockWithoutLimit() async {
+    var completer1 = Completer();
+
+    // Limit is set above the number of futures we are adding.
+    testTracker = MultiFutureTracker(10);
+    await testTracker!.addFutureFromClosure(() => completer1.future);
+    // The second future added should be executing even though the first
+    // future is not complete.  A test failure will time out.
+    await testTracker!.addFutureFromClosure(() async {
+      expect(completer1.isCompleted, isFalse);
+      completer1.complete();
+    });
+
+    return await testTracker!.wait();
+  }
+
   Future<void> test_multiFutureBlocksOnLimit() async {
     var completer1 = Completer();
 
@@ -40,20 +56,12 @@
     return await testTracker!.wait();
   }
 
-  Future<void> test_doesNotBlockWithoutLimit() async {
-    var completer1 = Completer();
-
-    // Limit is set above the number of futures we are adding.
-    testTracker = MultiFutureTracker(10);
-    await testTracker!.addFutureFromClosure(() => completer1.future);
-    // The second future added should be executing even though the first
-    // future is not complete.  A test failure will time out.
-    await testTracker!.addFutureFromClosure(() async {
-      expect(completer1.isCompleted, isFalse);
-      completer1.complete();
-    });
-
-    return await testTracker!.wait();
+  Future<void> test_returnsValueFromRun() async {
+    testTracker = MultiFutureTracker(1);
+    await expectLater(await testTracker!.runFutureFromClosure(() async => true),
+        equals(true));
+    await expectLater(
+        await testTracker!.runFutureFromClosure(() => true), equals(true));
   }
 
   Future<void> test_runsSeriallyAtLowLimit() async {
@@ -76,12 +84,4 @@
     await runFuture1;
     await runFuture2;
   }
-
-  Future<void> test_returnsValueFromRun() async {
-    testTracker = MultiFutureTracker(1);
-    await expectLater(await testTracker!.runFutureFromClosure(() async => true),
-        equals(true));
-    await expectLater(
-        await testTracker!.runFutureFromClosure(() => true), equals(true));
-  }
 }
diff --git a/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart b/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart
index 7b05cfa..5c6babb 100644
--- a/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart
+++ b/pkg/nnbd_migration/test/utilities/subprocess_launcher_test.dart
@@ -31,25 +31,6 @@
     await tempDir.delete(recursive: true);
   }
 
-  Future<void> test_subprocessWorksViaParallelSubprocessLimit() async {
-    SubprocessLauncher launcher =
-        SubprocessLauncher('test_subprocessWorksViaParallelSubprocessLimit');
-
-    await launcher.runStreamed(Platform.resolvedExecutable, ['--version'],
-        perLine: outputCallback);
-    expect(output, anyElement(contains('Dart')));
-  }
-
-  Future<void> test_subprocessRunsValidExecutable() async {
-    SubprocessLauncher launcher =
-        SubprocessLauncher('test_subprocessRunsValidExecutable');
-
-    await launcher.runStreamedImmediate(
-        Platform.resolvedExecutable, ['--version'],
-        perLine: outputCallback);
-    expect(output, anyElement(contains('Dart')));
-  }
-
   Future<void> test_subprocessPassesArgs() async {
     SubprocessLauncher launcher =
         SubprocessLauncher('test_subprocessPassesArgs');
@@ -90,6 +71,16 @@
             '^environment: .*__SUBPROCESS_PASSES_ENVIRONMENT_TEST: yes'))));
   }
 
+  Future<void> test_subprocessRunsValidExecutable() async {
+    SubprocessLauncher launcher =
+        SubprocessLauncher('test_subprocessRunsValidExecutable');
+
+    await launcher.runStreamedImmediate(
+        Platform.resolvedExecutable, ['--version'],
+        perLine: outputCallback);
+    expect(output, anyElement(contains('Dart')));
+  }
+
   Future<void> test_subprocessSetsWorkingDirectory() async {
     SubprocessLauncher launcher =
         SubprocessLauncher('test_subprocessSetsWorkingDirectory');
@@ -128,4 +119,13 @@
             perLine: outputCallback),
         throwsA(TypeMatcher<ProcessException>()));
   }
+
+  Future<void> test_subprocessWorksViaParallelSubprocessLimit() async {
+    SubprocessLauncher launcher =
+        SubprocessLauncher('test_subprocessWorksViaParallelSubprocessLimit');
+
+    await launcher.runStreamed(Platform.resolvedExecutable, ['--version'],
+        perLine: outputCallback);
+    expect(output, anyElement(contains('Dart')));
+  }
 }
diff --git a/pkg/nnbd_migration/test/utilities/test_all.dart b/pkg/nnbd_migration/test/utilities/test_all.dart
index dd93187..9c04ec1e 100644
--- a/pkg/nnbd_migration/test/utilities/test_all.dart
+++ b/pkg/nnbd_migration/test/utilities/test_all.dart
@@ -9,6 +9,8 @@
 import 'source_edit_diff_formatter_test.dart'
     as source_edit_diff_formatter_test;
 import 'subprocess_launcher_test.dart' as subprocess_launcher_test;
+import 'where_not_null_transformer_test.dart'
+    as where_not_null_transformer_test;
 import 'where_or_null_transformer_test.dart' as where_or_null_transformer_test;
 
 main() {
@@ -17,6 +19,7 @@
     scoped_set_test.main();
     source_edit_diff_formatter_test.main();
     subprocess_launcher_test.main();
+    where_not_null_transformer_test.main();
     where_or_null_transformer_test.main();
   });
 }
diff --git a/pkg/nnbd_migration/test/utilities/where_not_null_transformer_test.dart b/pkg/nnbd_migration/test/utilities/where_not_null_transformer_test.dart
new file mode 100644
index 0000000..a4e9f47
--- /dev/null
+++ b/pkg/nnbd_migration/test/utilities/where_not_null_transformer_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:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/dart/element/type_system.dart';
+import 'package:nnbd_migration/src/utilities/where_not_null_transformer.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../abstract_single_unit.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(WhereNotNullTransformerTest);
+  });
+}
+
+@reflectiveTest
+class WhereNotNullTransformerTest extends AbstractSingleUnitTest {
+  late WhereNotNullTransformer transformer;
+
+  TypeProvider get typeProvider => testAnalysisResult.typeProvider;
+
+  TypeSystem get typeSystem => testAnalysisResult.typeSystem;
+
+  Future<void> analyze(String code) async {
+    await resolveTestUnit(code);
+    transformer = WhereNotNullTransformer(typeProvider, typeSystem);
+  }
+
+  Future<void> test_match() async {
+    await analyze('''
+f(List<int> x) => x.where((i) => i != null);
+''');
+    var methodInvocation = findNode.methodInvocation('.where');
+    var transformationInfo =
+        transformer.tryTransformMethodInvocation(methodInvocation)!;
+    expect(transformationInfo, isNotNull);
+    expect(transformationInfo.methodInvocation, same(methodInvocation));
+    expect(transformationInfo.argument,
+        same(findNode.functionExpression('(i) => i != null')));
+    expect(transformationInfo.originalName, 'where');
+    expect(transformationInfo.replacementName, 'whereNotNull');
+  }
+
+  Future<void> test_match_extended() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => i != null);
+''');
+    var methodInvocation = findNode.methodInvocation('.where');
+    var transformationInfo =
+        transformer.tryTransformMethodInvocation(methodInvocation)!;
+    expect(transformationInfo, isNotNull);
+    expect(transformationInfo.methodInvocation, same(methodInvocation));
+    expect(transformationInfo.argument,
+        same(findNode.functionExpression('(i) => i != null')));
+    expect(transformationInfo.originalName, 'where');
+    expect(transformationInfo.replacementName, 'whereNotNull');
+  }
+
+  Future<void> test_match_returns_subtype() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  List<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => i != null);
+''');
+    var methodInvocation = findNode.methodInvocation('.where');
+    var transformationInfo =
+        transformer.tryTransformMethodInvocation(methodInvocation)!;
+    expect(transformationInfo, isNotNull);
+    expect(transformationInfo.methodInvocation, same(methodInvocation));
+    expect(transformationInfo.argument,
+        same(findNode.functionExpression('(i) => i != null')));
+    expect(transformationInfo.originalName, 'where');
+    expect(transformationInfo.replacementName, 'whereNotNull');
+  }
+
+  Future<void> test_mismatch_closure_block_typed() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) { return i != null; });
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_closure_lhs_not_identifier() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => 2*i != null);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_closure_lhs_wrong_element() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => c != null);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_closure_non_binary_expression() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => true);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_closure_wrong_operator() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => i == null);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_extension_method() async {
+    await analyze('''
+extension on String {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(String s) => s.where((i) => i != null);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_misnamed_method() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> fooBar(bool test(int element)) => null;
+}
+f(C c) => c.fooBar((i) => i != null);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.fooBar')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_not_a_subtype_of_iterable() async {
+    await analyze('''
+abstract class C {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => i != null);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_rhs_not_null() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element)) => null;
+}
+f(C c) => c.where((i) => i != 0);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+
+  Future<void> test_mismatch_too_many_arguments() async {
+    await analyze('''
+abstract class C implements Iterable<int> {
+  Iterable<int> where(bool test(int element), {int x}) => null;
+}
+f(C c) => c.where((i) => i != null, x: 0);
+''');
+    expect(
+        transformer
+            .tryTransformMethodInvocation(findNode.methodInvocation('.where')),
+        isNull);
+  }
+}
diff --git a/pkg/nnbd_migration/test/verify_tests_test.dart b/pkg/nnbd_migration/test/verify_tests_test.dart
index 654c634..cd08ec6 100644
--- a/pkg/nnbd_migration/test/verify_tests_test.dart
+++ b/pkg/nnbd_migration/test/verify_tests_test.dart
@@ -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.
 
+import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:analyzer_utilities/verify_tests.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
 
 void main() {
   var provider = PhysicalResourceProvider.INSTANCE;
diff --git a/pkg/nnbd_migration/tool/codegen/generate_resources.dart b/pkg/nnbd_migration/tool/codegen/generate_resources.dart
index 3dab62f..83cfd8c 100644
--- a/pkg/nnbd_migration/tool/codegen/generate_resources.dart
+++ b/pkg/nnbd_migration/tool/codegen/generate_resources.dart
@@ -54,17 +54,6 @@
   }
 }
 
-/// Returns the dart2jsPath, either from [argResults] or the Platform.
-String? dart2jsPath(ArgResults argResults) {
-  if (argResults.wasParsed('dart2js_path')) {
-    return argResults['dart2js_path'] as String?;
-  } else {
-    var sdkBinDir = path.dirname(Platform.resolvedExecutable);
-    var dart2jsBinary = Platform.isWindows ? 'dart2js.bat' : 'dart2js';
-    return path.join(sdkBinDir, dart2jsBinary);
-  }
-}
-
 final File dartSources = File(path.join('pkg', 'nnbd_migration', 'lib', 'src',
     'front_end', 'web', 'migration.dart'));
 
@@ -131,6 +120,17 @@
   resourcesFile.writeAsStringSync(content);
 }
 
+/// Returns the dart2jsPath, either from [argResults] or the Platform.
+String? dart2jsPath(ArgResults argResults) {
+  if (argResults.wasParsed('dart2js_path')) {
+    return argResults['dart2js_path'] as String?;
+  } else {
+    var sdkBinDir = path.dirname(Platform.resolvedExecutable);
+    var dart2jsBinary = Platform.isWindows ? 'dart2js.bat' : 'dart2js';
+    return path.join(sdkBinDir, dart2jsBinary);
+  }
+}
+
 void fail(String message) {
   stderr.writeln(message);
   exit(1);
diff --git a/pkg/nnbd_migration/tool/src/package.dart b/pkg/nnbd_migration/tool/src/package.dart
index a50b8c3..dc4dec4 100644
--- a/pkg/nnbd_migration/tool/src/package.dart
+++ b/pkg/nnbd_migration/tool/src/package.dart
@@ -3,12 +3,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Abstractions for the different sources of truth for different packages.
-
 import 'dart:io';
 
 import 'package:nnbd_migration/src/utilities/subprocess_launcher.dart';
 import 'package:path/path.dart' as path;
 
+final String defaultPlaygroundPath =
+    Platform.environment['TRIAL_MIGRATION_PLAYGROUND'] ??
+        resolveTildePath('~/.nnbd_trial_migration');
+
+/// The pub cache inherited by this process.
+final String defaultPubCache =
+    Platform.environment['PUB_CACHE'] ?? resolveTildePath('~/.pub-cache');
+
+/// Returns the path to the SDK repository this script is a part of.
+final String thisSdkRepo = () {
+  var maybeSdkRepoDir = Platform.script.toFilePath();
+  while (maybeSdkRepoDir != path.dirname(maybeSdkRepoDir)) {
+    maybeSdkRepoDir = path.dirname(maybeSdkRepoDir);
+    if (File(path.join(maybeSdkRepoDir, 'README.dart-sdk')).existsSync()) {
+      return maybeSdkRepoDir;
+    }
+  }
+  throw UnsupportedError(
+      'Script ${Platform.script} using this library must be within the SDK repository');
+}();
+Uri get thisSdkUri => Uri.file(thisSdkRepo);
+
 /// Return a resolved path including the home directory in place of tilde
 /// references.
 String resolveTildePath(String originalPath) {
@@ -27,93 +48,36 @@
   return path.join(homeDir, originalPath.substring(2));
 }
 
-/// The pub cache inherited by this process.
-final String defaultPubCache =
-    Platform.environment['PUB_CACHE'] ?? resolveTildePath('~/.pub-cache');
-final String defaultPlaygroundPath =
-    Platform.environment['TRIAL_MIGRATION_PLAYGROUND'] ??
-        resolveTildePath('~/.nnbd_trial_migration');
-Uri get thisSdkUri => Uri.file(thisSdkRepo);
-
-class Playground {
-  final String playgroundPath;
-
-  /// If [clean] is true, this will delete the playground.  Otherwise,
-  /// if it exists it will assume it is properly constructed.
-  Playground(this.playgroundPath, bool clean) {
-    Directory playground = Directory(playgroundPath);
-    if (clean) {
-      if (playground.existsSync()) {
-        playground.deleteSync(recursive: true);
-      }
-    }
-    if (!playground.existsSync()) playground.createSync();
-  }
-
-  /// Build an environment for subprocesses.
-  Map<String, String> get env => {'PUB_CACHE': pubCachePath};
-
-  String get pubCachePath => path.join(playgroundPath, '.pub-cache');
-}
-
-/// Returns the path to the SDK repository this script is a part of.
-final String thisSdkRepo = () {
-  var maybeSdkRepoDir = Platform.script.toFilePath();
-  while (maybeSdkRepoDir != path.dirname(maybeSdkRepoDir)) {
-    maybeSdkRepoDir = path.dirname(maybeSdkRepoDir);
-    if (File(path.join(maybeSdkRepoDir, 'README.dart-sdk')).existsSync()) {
-      return maybeSdkRepoDir;
-    }
-  }
-  throw UnsupportedError(
-      'Script ${Platform.script} using this library must be within the SDK repository');
-}();
-
-/// Abstraction for an unmanaged package.
-class ManualPackage extends Package {
-  final String _packagePath;
-  ManualPackage(this._packagePath) : super(_packagePath);
-
-  @override
-  List<String> get migrationPaths => [_packagePath];
-}
-
 /// Abstraction for a package fetched via Git.
 class GitPackage extends Package {
+  static final RegExp _pathAndPeriodSplitter = RegExp('[\\/.]');
   final String _clonePath;
   final bool? _keepUpdated;
   final String label;
+
   final Playground _playground;
 
+  SubprocessLauncher? _launcher;
+
+  String? _packagePath;
+
   GitPackage._(this._clonePath, this._playground, this._keepUpdated,
       {String? name, this.label = 'master'})
       : super(name ?? _buildName(_clonePath));
 
-  static Future<GitPackage> gitPackageFactory(
-      String clonePath, Playground playground, bool? keepUpdated,
-      {String? name, String label = 'master'}) async {
-    GitPackage gitPackage = GitPackage._(clonePath, playground, keepUpdated,
-        name: name, label: label);
-    await gitPackage._init();
-    return gitPackage;
-  }
+  SubprocessLauncher get launcher =>
+      _launcher ??= SubprocessLauncher('$name-$label', _playground.env);
 
-  /// Calculate the "humanish" name of the clone (see `git help clone`).
-  static String _buildName(String clonePath) {
-    if (Directory(clonePath).existsSync()) {
-      // assume we are cloning locally
-      return path.basename(clonePath);
-    }
-    List<String> pathParts = clonePath.split(_pathAndPeriodSplitter);
-    int indexOfName = pathParts.lastIndexOf('git') - 1;
-    if (indexOfName < 0) {
-      throw ArgumentError(
-          'GitPackage can not figure out the name for $clonePath, pass it in manually?');
-    }
-    return pathParts[indexOfName];
-  }
+  @override
+  List<String?> get migrationPaths => [_packagePath];
+  String get packagePath =>
+      // TODO(jcollins-g): allow packages from subdirectories of clones
+      _packagePath ??= path.join(_playground.playgroundPath, '$name-$label');
 
-  static final RegExp _pathAndPeriodSplitter = RegExp('[\\/.]');
+  @override
+  String toString() {
+    return '$_clonePath ($label)' + (_keepUpdated! ? ' [synced]' : '');
+  }
 
   /// Initialize the package with a shallow clone.  Run only once per
   /// [GitPackage] instance.
@@ -139,58 +103,38 @@
     }
   }
 
-  SubprocessLauncher? _launcher;
-  SubprocessLauncher get launcher =>
-      _launcher ??= SubprocessLauncher('$name-$label', _playground.env);
-
-  String? _packagePath;
-  String get packagePath =>
-      // TODO(jcollins-g): allow packages from subdirectories of clones
-      _packagePath ??= path.join(_playground.playgroundPath, '$name-$label');
-
-  @override
-  List<String?> get migrationPaths => [_packagePath];
-
-  @override
-  String toString() {
-    return '$_clonePath ($label)' + (_keepUpdated! ? ' [synced]' : '');
-  }
-}
-
-/// Abstraction for a package fetched via pub.
-class PubPackage extends Package {
-  PubPackage(String name, [String? version]) : super(name) {
-    throw UnimplementedError();
+  static Future<GitPackage> gitPackageFactory(
+      String clonePath, Playground playground, bool? keepUpdated,
+      {String? name, String label = 'master'}) async {
+    GitPackage gitPackage = GitPackage._(clonePath, playground, keepUpdated,
+        name: name, label: label);
+    await gitPackage._init();
+    return gitPackage;
   }
 
-  @override
-  // TODO: implement packagePath
-  List<String> get migrationPaths => throw UnimplementedError();
-}
-
-/// Abstraction for a package located within pkg or third_party/pkg.
-class SdkPackage extends Package {
-  /// Where to find packages.  Constructor searches in-order.
-  static final List<String> _searchPaths = [
-    'pkg',
-    path.join('third_party', 'pkg'),
-  ];
-
-  SdkPackage(String name) : super(name) {
-    for (String potentialPath
-        in _searchPaths.map((p) => path.join(thisSdkRepo, p, name))) {
-      if (Directory(potentialPath).existsSync()) {
-        _packagePath = potentialPath;
-      }
+  /// Calculate the "humanish" name of the clone (see `git help clone`).
+  static String _buildName(String clonePath) {
+    if (Directory(clonePath).existsSync()) {
+      // assume we are cloning locally
+      return path.basename(clonePath);
     }
+    List<String> pathParts = clonePath.split(_pathAndPeriodSplitter);
+    int indexOfName = pathParts.lastIndexOf('git') - 1;
+    if (indexOfName < 0) {
+      throw ArgumentError(
+          'GitPackage can not figure out the name for $clonePath, pass it in manually?');
+    }
+    return pathParts[indexOfName];
   }
+}
 
-  late final String _packagePath;
+/// Abstraction for an unmanaged package.
+class ManualPackage extends Package {
+  final String _packagePath;
+  ManualPackage(this._packagePath) : super(_packagePath);
+
   @override
   List<String> get migrationPaths => [_packagePath];
-
-  @override
-  String toString() => path.relative(_packagePath, from: thisSdkRepo);
 }
 
 /// Base class for pub, github, SDK, or possibly other package sources.
@@ -206,6 +150,38 @@
   String toString() => name;
 }
 
+class Playground {
+  final String playgroundPath;
+
+  /// If [clean] is true, this will delete the playground.  Otherwise,
+  /// if it exists it will assume it is properly constructed.
+  Playground(this.playgroundPath, bool clean) {
+    Directory playground = Directory(playgroundPath);
+    if (clean) {
+      if (playground.existsSync()) {
+        playground.deleteSync(recursive: true);
+      }
+    }
+    if (!playground.existsSync()) playground.createSync();
+  }
+
+  /// Build an environment for subprocesses.
+  Map<String, String> get env => {'PUB_CACHE': pubCachePath};
+
+  String get pubCachePath => path.join(playgroundPath, '.pub-cache');
+}
+
+/// Abstraction for a package fetched via pub.
+class PubPackage extends Package {
+  PubPackage(String name, [String? version]) : super(name) {
+    throw UnimplementedError();
+  }
+
+  @override
+  // TODO: implement packagePath
+  List<String> get migrationPaths => throw UnimplementedError();
+}
+
 /// Abstraction for compiled Dart SDKs (not this repository).
 class Sdk {
   /// The root of the compiled SDK.
@@ -215,3 +191,28 @@
     this.sdkPath = path.canonicalize(sdkPath);
   }
 }
+
+/// Abstraction for a package located within pkg or third_party/pkg.
+class SdkPackage extends Package {
+  /// Where to find packages.  Constructor searches in-order.
+  static final List<String> _searchPaths = [
+    'pkg',
+    path.join('third_party', 'pkg'),
+  ];
+
+  late final String _packagePath;
+
+  SdkPackage(String name) : super(name) {
+    for (String potentialPath
+        in _searchPaths.map((p) => path.join(thisSdkRepo, p, name))) {
+      if (Directory(potentialPath).existsSync()) {
+        _packagePath = potentialPath;
+      }
+    }
+  }
+  @override
+  List<String> get migrationPaths => [_packagePath];
+
+  @override
+  String toString() => path.relative(_packagePath, from: thisSdkRepo);
+}
diff --git a/pkg/nnbd_migration/tool/trial_migration.dart b/pkg/nnbd_migration/tool/trial_migration.dart
index 982cbf7..d4f9d61 100644
--- a/pkg/nnbd_migration/tool/trial_migration.dart
+++ b/pkg/nnbd_migration/tool/trial_migration.dart
@@ -66,10 +66,7 @@
           context.contextRoot.analyzedFiles().where((s) => s.endsWith('.dart'));
       files.addAll(localFiles);
       var session = context.currentSession;
-      LineInfo getLineInfo(String path) =>
-          (session.getFile(path) as FileResult).lineInfo;
-      var migration =
-          NullabilityMigration(listener, getLineInfo, permissive: true);
+      var migration = NullabilityMigration(listener, permissive: true);
       for (var file in localFiles) {
         var resolvedUnit =
             await session.getResolvedUnit(file) as ResolvedUnitResult;
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 1e9bf59..2aef55f 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -234,7 +234,7 @@
 
 # Timeout. These tests do not run efficiently on our simulator or low-end
 # devices.
-[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 *: Skip
 
 [ $mode == debug || $runtime != vm || $system == android ]
diff --git a/pkg/scrape/OWNERS b/pkg/scrape/OWNERS
new file mode 100644
index 0000000..876a884
--- /dev/null
+++ b/pkg/scrape/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_FOUNDATION
diff --git a/pkg/scrape/lib/scrape.dart b/pkg/scrape/lib/scrape.dart
index 1665006..f6c9989 100644
--- a/pkg/scrape/lib/scrape.dart
+++ b/pkg/scrape/lib/scrape.dart
@@ -267,9 +267,11 @@
     scanner.configureFeatures(
         featureSet: featureSet, featureSetForOverriding: featureSet);
     var startToken = scanner.tokenize();
+    var lineInfo = LineInfo(scanner.lineStarts);
 
     // Parse it.
-    var parser = Parser(stringSource, errorListener, featureSet: featureSet);
+    var parser = Parser(stringSource, errorListener,
+        featureSet: featureSet, lineInfo: lineInfo);
     parser.enableOptionalNewAndConst = true;
     parser.enableSetLiterals = true;
 
@@ -301,8 +303,6 @@
       return;
     }
 
-    var lineInfo = LineInfo(scanner.lineStarts);
-
     _scrapedFileCount++;
     _scrapedLineCount += lineInfo.lineCount;
 
diff --git a/pkg/smith/OWNERS b/pkg/smith/OWNERS
new file mode 100644
index 0000000..fa96c4a
--- /dev/null
+++ b/pkg/smith/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_INFRA
+rnystrom@google.com
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index bac7ac7..9284ec3 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -624,6 +624,7 @@
   static const none = Compiler._('none');
   static const dart2js = Compiler._('dart2js');
   static const dart2analyzer = Compiler._('dart2analyzer');
+  static const dart2wasm = Compiler._('dart2wasm');
   static const compareAnalyzerCfe = Compiler._('compare_analyzer_cfe');
   static const dartdevc = Compiler._('dartdevc');
   static const dartdevk = Compiler._('dartdevk');
@@ -639,6 +640,7 @@
     none,
     dart2js,
     dart2analyzer,
+    dart2wasm,
     compareAnalyzerCfe,
     dartdevc,
     dartdevk,
@@ -691,6 +693,12 @@
           Runtime.safari,
         ];
 
+      case Compiler.dart2wasm:
+        return const [
+          Runtime.none,
+          Runtime.d8,
+          Runtime.chrome,
+        ];
       case Compiler.dart2analyzer:
       case Compiler.compareAnalyzerCfe:
         return const [Runtime.none];
@@ -716,6 +724,8 @@
     switch (this) {
       case Compiler.dart2js:
         return Runtime.d8;
+      case Compiler.dart2wasm:
+        return Runtime.d8;
       case Compiler.dartdevc:
       case Compiler.dartdevk:
         return Runtime.chrome;
@@ -742,6 +752,7 @@
       case Compiler.dart2analyzer:
       case Compiler.compareAnalyzerCfe:
       case Compiler.dart2js:
+      case Compiler.dart2wasm:
       case Compiler.dartdevc:
       case Compiler.dartdevk:
       case Compiler.fasta:
diff --git a/pkg/sourcemap_testing/OWNERS b/pkg/sourcemap_testing/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/pkg/sourcemap_testing/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/pkg/status_file/OWNERS b/pkg/status_file/OWNERS
new file mode 100644
index 0000000..fa96c4a
--- /dev/null
+++ b/pkg/status_file/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_INFRA
+rnystrom@google.com
diff --git a/pkg/status_file/test/data/vm.status b/pkg/status_file/test/data/vm.status
index d04bfc5..1cd16ea 100644
--- a/pkg/status_file/test/data/vm.status
+++ b/pkg/status_file/test/data/vm.status
@@ -50,7 +50,7 @@
 # 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.
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64]
 cc/Service_Profile: Skip
 cc/Profiler_AllocationSampleTest: Skip
 cc/Profiler_ArrayAllocation: Skip
diff --git a/pkg/telemetry/OWNERS b/pkg/telemetry/OWNERS
new file mode 100644
index 0000000..1592b3e
--- /dev/null
+++ b/pkg/telemetry/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ANALYZER
diff --git a/pkg/test_runner/OWNERS b/pkg/test_runner/OWNERS
new file mode 100644
index 0000000..fa96c4a
--- /dev/null
+++ b/pkg/test_runner/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_INFRA
+rnystrom@google.com
diff --git a/pkg/test_runner/lib/src/command.dart b/pkg/test_runner/lib/src/command.dart
index 45fa5d2..7ba599f 100644
--- a/pkg/test_runner/lib/src/command.dart
+++ b/pkg/test_runner/lib/src/command.dart
@@ -186,6 +186,9 @@
     if (displayName == 'precompiler' || displayName == 'app_jit') {
       return VMCommandOutput(
           this, exitCode, timedOut, stdout, stderr, time, pid);
+    } else if (displayName == 'dart2wasm') {
+      return Dart2WasmCompilerCommandOutput(
+          this, exitCode, timedOut, stdout, stderr, time, compilationSkipped);
     }
 
     return CompilationCommandOutput(
diff --git a/pkg/test_runner/lib/src/command_output.dart b/pkg/test_runner/lib/src/command_output.dart
index cc65097..03db24c 100644
--- a/pkg/test_runner/lib/src/command_output.dart
+++ b/pkg/test_runner/lib/src/command_output.dart
@@ -1060,6 +1060,45 @@
   }
 }
 
+class Dart2WasmCompilerCommandOutput extends CompilationCommandOutput
+    with _StaticErrorOutput {
+  static void parseErrors(String stdout, List<StaticError> errors) {
+    _StaticErrorOutput._parseCfeErrors(
+        ErrorSource.web, _errorRegexp, stdout, errors);
+  }
+
+  /// Matches the location and message of a dart2wasm error message, which looks
+  /// like:
+  ///
+  ///     tests/language_2/some_test.dart:9:3: Error: Some message.
+  ///       BadThing();
+  ///       ^
+  ///
+  /// The test runner only validates the main error message, and not the
+  /// suggested fixes, so we only parse the first line.
+  // TODO(rnystrom): Support validating context messages.
+  static final _errorRegexp =
+      RegExp(r"^([^:]+):(\d+):(\d+): (Error): (.*)$", multiLine: true);
+
+  Dart2WasmCompilerCommandOutput(
+      Command command,
+      int exitCode,
+      bool timedOut,
+      List<int> stdout,
+      List<int> stderr,
+      Duration time,
+      bool compilationSkipped)
+      : super(command, exitCode, timedOut, stdout, stderr, time,
+            compilationSkipped);
+
+  @override
+  void _parseErrors() {
+    var errors = <StaticError>[];
+    parseErrors(decodeUtf8(stdout), errors);
+    errors.forEach(addError);
+  }
+}
+
 class DevCompilerCommandOutput extends CommandOutput with _StaticErrorOutput {
   /// Matches the first line of a DDC error message. DDC prints errors to
   /// stdout that look like:
diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart
index 6d72e22..b287bcc 100644
--- a/pkg/test_runner/lib/src/compiler_configuration.dart
+++ b/pkg/test_runner/lib/src/compiler_configuration.dart
@@ -86,6 +86,9 @@
       case Compiler.dart2js:
         return Dart2jsCompilerConfiguration(configuration);
 
+      case Compiler.dart2wasm:
+        return Dart2WasmCompilerConfiguration(configuration);
+
       case Compiler.dartdevc:
         return DevCompilerConfiguration(configuration);
 
@@ -499,6 +502,83 @@
   }
 }
 
+/// Common configuration for dart2wasm-based tools, such as dart2wasm.
+class Dart2WasmCompilerConfiguration extends CompilerConfiguration {
+  Dart2WasmCompilerConfiguration(TestConfiguration configuration)
+      : super._subclass(configuration);
+
+  String computeCompilerPath() {
+    var prefix = 'sdk/bin';
+    if (_isHostChecked) {
+      if (_useSdk) {
+        throw "--host-checked and --use-sdk cannot be used together";
+      }
+      // The script dart2wasm_developer is not included in the
+      // shipped SDK, that is the script is not installed in
+      // "$buildDir/dart-sdk/bin/"
+      return '$prefix/dart2wasm_developer$shellScriptExtension';
+    }
+    if (_useSdk) {
+      prefix = '${_configuration.buildDirectory}/dart-sdk/bin';
+    }
+    return '$prefix/dart2wasm$shellScriptExtension';
+  }
+
+  List<String> computeCompilerArguments(
+      TestFile testFile, List<String> vmOptions, List<String> args) {
+    return [
+      // The file being compiled is the last argument.
+      args.last
+    ];
+  }
+
+  Command computeCompilationCommand(String outputFileName,
+      List<String> arguments, Map<String, String> environmentOverrides) {
+    arguments = arguments.toList();
+    arguments.add('$outputFileName');
+
+    return CompilationCommand(
+        'dart2wasm',
+        outputFileName,
+        bootstrapDependencies(),
+        computeCompilerPath(),
+        arguments,
+        environmentOverrides,
+        alwaysCompile: !_useSdk);
+  }
+
+  CommandArtifact computeCompilationArtifact(String tempDir,
+      List<String> arguments, Map<String, String> environmentOverrides) {
+    var compilerArguments = [
+      ...arguments,
+    ];
+
+    var inputFile = arguments.last;
+    var inputFilename = Uri.file(inputFile).pathSegments.last;
+    var out = "$tempDir/${inputFilename.replaceAll('.dart', '.wasm')}";
+    var commands = [
+      computeCompilationCommand(out, compilerArguments, environmentOverrides),
+    ];
+
+    return CommandArtifact(commands, out, 'application/wasm');
+  }
+
+  List<String> computeRuntimeArguments(
+      RuntimeConfiguration runtimeConfiguration,
+      TestFile testFile,
+      List<String> vmOptions,
+      List<String> originalArguments,
+      CommandArtifact artifact) {
+    return [
+      '--experimental-wasm-gc',
+      '--wasm-gc-js-interop',
+      'pkg/dart2wasm/bin/run_wasm.js',
+      '--',
+      artifact.filename,
+    ];
+  }
+}
+
 /// Configuration for `dartdevc` and `dartdevk` (DDC with Kernel)
 class DevCompilerConfiguration extends CompilerConfiguration {
   DevCompilerConfiguration(TestConfiguration configuration)
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index 198c01a..d98b8b8 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -203,6 +203,7 @@
       Compiler.dartkp,
       Compiler.fasta,
       Compiler.dart2js,
+      Compiler.dart2wasm,
     ];
     return fastaCompilers.contains(compiler);
   }
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index cd2c23c..db4f022 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -827,7 +827,8 @@
       // Expand architectures.
       var architectures = data["arch"] as String;
       if (architectures == "all") {
-        architectures = "ia32,x64,x64c,simarm,simarm64,simarm64c";
+        architectures =
+            "ia32,x64,x64c,simarm,simarm64,simarm64c,simriscv32,simriscv64";
       }
 
       for (var architectureName in architectures.split(",")) {
diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart
index 2341361..4cba518 100644
--- a/pkg/test_runner/lib/src/runtime_configuration.dart
+++ b/pkg/test_runner/lib/src/runtime_configuration.dart
@@ -168,7 +168,7 @@
 
   void checkArtifact(CommandArtifact artifact) {
     var type = artifact.mimeType;
-    if (type != 'application/javascript') {
+    if (type != 'application/javascript' && type != 'application/wasm') {
       throw "Runtime '$moniker' cannot run files of type '$type'.";
     }
   }
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index 5aeaf54..faf6d57 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -597,6 +597,7 @@
       '$directory/${name}_analyzer.status',
       '$directory/${name}_analyzer2.status',
       '$directory/${name}_dart2js.status',
+      '$directory/${name}_dart2wasm.status',
       '$directory/${name}_dartdevc.status',
       '$directory/${name}_kernel.status',
       '$directory/${name}_precompiled.status',
@@ -956,6 +957,7 @@
     var commands = <Command>[];
     const supportedCompilers = {
       Compiler.dart2js,
+      Compiler.dart2wasm,
       Compiler.dartdevc,
       Compiler.dartdevk
     };
diff --git a/pkg/test_runner/lib/src/utils.dart b/pkg/test_runner/lib/src/utils.dart
index fc27e18..03d3f84 100644
--- a/pkg/test_runner/lib/src/utils.dart
+++ b/pkg/test_runner/lib/src/utils.dart
@@ -306,7 +306,7 @@
   /// In case [uri] is not a local file, this method will always return
   /// the current date.
   DateTime getLastModified(Uri uri) {
-    if (uri.scheme == "file") {
+    if (uri.isScheme("file")) {
       if (_cache.containsKey(uri.path)) {
         return _cache[uri.path];
       }
diff --git a/pkg/testing/OWNERS b/pkg/testing/OWNERS
new file mode 100644
index 0000000..33947e7
--- /dev/null
+++ b/pkg/testing/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_CFE
diff --git a/pkg/vm/OWNERS b/pkg/vm/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/vm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/vm/analysis_options.yaml b/pkg/vm/analysis_options.yaml
index 76886bd..4aaf9c5 100644
--- a/pkg/vm/analysis_options.yaml
+++ b/pkg/vm/analysis_options.yaml
@@ -4,5 +4,4 @@
 
 analyzer:
   exclude:
-    - testcases/**
     - tool/**
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index f18f0d2..a843655 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -324,16 +324,16 @@
     result.generator = new IncrementalCompiler.forExpressionCompilationOnly(
         component,
         result.options,
-        component.mainMethod!.enclosingLibrary.fileUri);
+        [component.mainMethod!.enclosingLibrary.fileUri]);
     return result;
   }
 
   @override
   Future<CompilerResult> compileInternal(Uri script) async {
-    final generator = this.generator ??= IncrementalCompiler(options, script);
+    final generator = this.generator ??= IncrementalCompiler(options, [script]);
     errorsPlain.clear();
     errorsColorized.clear();
-    final compilerResult = await generator.compile(entryPoint: script);
+    final compilerResult = await generator.compile(entryPoints: [script]);
     final component = compilerResult.component;
     return new CompilerResult(component, const {},
         compilerResult.classHierarchy, compilerResult.coreTypes);
@@ -367,7 +367,7 @@
     new BinaryPrinter(sink).writeComponentFile(fullComponent);
     sink.close();
 
-    clone.generator = new IncrementalCompiler(options, generator.entryPoint,
+    clone.generator = new IncrementalCompiler(options, generator.entryPoints,
         initializeFromDillUri: Uri.file(filename));
     return clone;
   }
@@ -500,16 +500,19 @@
   final dynamic dart_platform_kernel = request[3];
   final String expression = request[4];
   final List<String> definitions = request[5].cast<String>();
-  final List<String> typeDefinitions = request[6].cast<String>();
-  final String libraryUri = request[7];
-  final String? klass = request[8];
-  final String? method = request[9];
-  final bool isStatic = request[10];
-  final List<List<int>> dillData = request[11].cast<List<int>>();
-  final int blobLoadCount = request[12];
-  final bool enableAsserts = request[13];
+  final List<String> definitionTypes = request[6].cast<String>();
+  final List<String> typeDefinitions = request[7].cast<String>();
+  final List<String> typeBounds = request[8].cast<String>();
+  final List<String> typeDefaults = request[9].cast<String>();
+  final String libraryUri = request[10];
+  final String? klass = request[11];
+  final String? method = request[12];
+  final bool isStatic = request[13];
+  final List<List<int>> dillData = request[14].cast<List<int>>();
+  final int blobLoadCount = request[15];
+  final bool enableAsserts = request[16];
   final List<String>? experimentalFlags =
-      request[14] != null ? request[14].cast<String>() : null;
+      request[17] != null ? request[17].cast<String>() : null;
 
   IncrementalCompilerWrapper? compiler = isolateCompilers[isolateGroupId];
 
@@ -549,7 +552,7 @@
       // If it does not, try to load from dart_platform_kernel or from file.
       bool foundDartCore = false;
       for (Library library in component.libraries) {
-        if (library.importUri.scheme == "dart" &&
+        if (library.importUri.isScheme("dart") &&
             library.importUri.path == "core" &&
             !library.isSynthetic) {
           foundDartCore = true;
@@ -623,7 +626,10 @@
     Procedure? procedure = await compiler.generator!.compileExpression(
         expression,
         definitions,
+        definitionTypes,
         typeDefinitions,
+        typeBounds,
+        typeDefaults,
         libraryUri,
         klass,
         method,
@@ -659,12 +665,12 @@
 
   if (component != null) {
     for (var lib in component.libraries) {
-      if (lib.importUri.scheme == "dart") continue;
+      if (lib.importUri.isScheme("dart")) continue;
 
       dependencies.add(lib.fileUri);
       for (var part in lib.parts) {
         final fileUri = lib.fileUri.resolve(part.partUri);
-        if (fileUri.scheme != "" && fileUri.scheme != "file") {
+        if (fileUri.hasScheme && !fileUri.isScheme("file")) {
           // E.g. part 'package:foo/foo.dart';
           // Maybe the front end should resolve this?
           continue;
@@ -821,7 +827,7 @@
     if (packageConfigWithDefault != null) {
       packagesUri = Uri.parse(packageConfigWithDefault);
     }
-    if (packagesUri != null && packagesUri.scheme == '') {
+    if (packagesUri != null && !packagesUri.hasScheme) {
       // Script does not have a scheme, assume that it is a path,
       // resolve it against the working directory.
       packagesUri = Uri.directory(workingDirectory!).resolveUri(packagesUri);
diff --git a/pkg/vm/bin/protobuf_aware_treeshaker.dart b/pkg/vm/bin/protobuf_aware_treeshaker.dart
index 3af79b6..bb746af 100644
--- a/pkg/vm/bin/protobuf_aware_treeshaker.dart
+++ b/pkg/vm/bin/protobuf_aware_treeshaker.dart
@@ -185,5 +185,5 @@
 }
 
 bool isCoreLibrary(Library library) {
-  return library.importUri.scheme == 'dart';
+  return library.importUri.isScheme('dart');
 }
diff --git a/pkg/vm/lib/http_filesystem.dart b/pkg/vm/lib/http_filesystem.dart
index 18ee3e1..5966494 100644
--- a/pkg/vm/lib/http_filesystem.dart
+++ b/pkg/vm/lib/http_filesystem.dart
@@ -14,7 +14,7 @@
 
   @override
   FileSystemEntity entityForUri(Uri uri) {
-    if (uri.scheme == 'http' || uri.scheme == 'https') {
+    if (uri.isScheme('http') || uri.isScheme('https')) {
       return new HttpFileSystemEntity(this, uri);
     } else {
       return original.entityForUri(uri);
diff --git a/pkg/vm/lib/incremental_compiler.dart b/pkg/vm/lib/incremental_compiler.dart
index 08b00e7..6f109b3 100644
--- a/pkg/vm/lib/incremental_compiler.dart
+++ b/pkg/vm/lib/incremental_compiler.dart
@@ -29,45 +29,44 @@
   bool initialized = false;
   bool fullComponent = false;
   Uri? initializeFromDillUri;
-  Uri _entryPoint;
+  List<Uri> _entryPoints;
   final bool forExpressionCompilationOnly;
 
-  Uri get entryPoint => _entryPoint;
+  List<Uri> get entryPoints => _entryPoints;
   IncrementalKernelGenerator get generator => _generator;
   IncrementalCompilerResult? get lastKnownGoodResult => _lastKnownGood;
 
-  IncrementalCompiler(this._compilerOptions, this._entryPoint,
+  IncrementalCompiler(this._compilerOptions, this._entryPoints,
       {this.initializeFromDillUri, bool incrementalSerialization: true})
       : forExpressionCompilationOnly = false {
     if (incrementalSerialization) {
       incrementalSerializer = new IncrementalSerializer();
     }
-    _generator = new IncrementalKernelGenerator(_compilerOptions, _entryPoint,
+    _generator = new IncrementalKernelGenerator(_compilerOptions, _entryPoints,
         initializeFromDillUri, false, incrementalSerializer);
     _pendingDeltas = <IncrementalCompilerResult>[];
   }
 
   IncrementalCompiler.forExpressionCompilationOnly(
-      Component component, this._compilerOptions, this._entryPoint)
+      Component component, this._compilerOptions, this._entryPoints)
       : forExpressionCompilationOnly = true {
     _generator = new IncrementalKernelGenerator.forExpressionCompilationOnly(
-        _compilerOptions, _entryPoint, component);
+        _compilerOptions, _entryPoints, component);
     _pendingDeltas = <IncrementalCompilerResult>[];
   }
 
   /// Recompiles invalidated files, produces incremental component.
   ///
-  /// If [entryPoint] is specified, that points to new entry point for the
-  /// compilation. Otherwise, previously set entryPoint is used.
-  Future<IncrementalCompilerResult> compile({Uri? entryPoint}) async {
+  /// If [entryPoints] is specified, that points to the new list of entry
+  /// points for the compilation. Otherwise, previously set entryPoints are
+  /// used.
+  Future<IncrementalCompilerResult> compile({List<Uri>? entryPoints}) async {
     final task = new TimelineTask();
     try {
       task.start("IncrementalCompiler.compile");
-      _entryPoint = entryPoint ?? _entryPoint;
-      List<Uri>? entryPoints;
-      if (entryPoint != null) entryPoints = [entryPoint];
+      _entryPoints = entryPoints ?? _entryPoints;
       IncrementalCompilerResult compilerResult = await _generator.computeDelta(
-          entryPoints: entryPoints, fullComponent: fullComponent);
+          entryPoints: _entryPoints, fullComponent: fullComponent);
       initialized = true;
       fullComponent = false;
       _pendingDeltas.add(compilerResult);
@@ -96,7 +95,7 @@
       uriToSource.addAll(delta.uriToSource);
       for (Library library in delta.libraries) {
         bool isPlatform =
-            library.importUri.scheme == "dart" && !library.isSynthetic;
+            library.importUri.isScheme("dart") && !library.isSynthetic;
         if (!includePlatform && isPlatform) continue;
         combined[library.importUri] = library;
       }
@@ -176,8 +175,8 @@
     _lastKnownGood?.component.relink();
 
     _generator = new IncrementalKernelGenerator.fromComponent(_compilerOptions,
-        _entryPoint, _lastKnownGood?.component, false, incrementalSerializer);
-    await _generator.computeDelta(entryPoints: [_entryPoint]);
+        _entryPoints, _lastKnownGood?.component, false, incrementalSerializer);
+    await _generator.computeDelta(entryPoints: _entryPoints);
   }
 
   /// This tells incremental compiler that it needs rescan [uri] file during
@@ -194,23 +193,43 @@
   Future<Procedure?> compileExpression(
       String expression,
       List<String> definitions,
+      List<String> definitionTypes,
       List<String> typeDefinitions,
+      List<String> typeBounds,
+      List<String> typeDefaults,
       String libraryUri,
       String? klass,
       String? method,
       bool isStatic) {
-    Map<String, DartType> completeDefinitions = {};
-    for (int i = 0; i < definitions.length; i++) {
-      String name = definitions[i];
-      if (isLegalIdentifier(name) || (i == 0 && isExtensionThisName(name))) {
-        completeDefinitions[name] = new DynamicType();
+    ClassHierarchy? classHierarchy =
+        (_lastKnownGood ?? _combinePendingDeltas(false)).classHierarchy;
+    Map<String, DartType>? completeDefinitions = createDefinitionsWithTypes(
+        classHierarchy?.knownLibraries, definitionTypes, definitions);
+    if (completeDefinitions == null) {
+      completeDefinitions = {};
+      // No class hierarchy or wasn't provided correct types.
+      // Revert to old behaviour of setting everything to dynamic.
+      for (int i = 0; i < definitions.length; i++) {
+        String name = definitions[i];
+        if (isLegalIdentifier(name) || (i == 0 && isExtensionThisName(name))) {
+          completeDefinitions[name] = new DynamicType();
+        }
       }
     }
 
-    List<TypeParameter> typeParameters = [];
-    for (String name in typeDefinitions) {
-      if (!isLegalIdentifier(name)) continue;
-      typeParameters.add(new TypeParameter(name, new DynamicType()));
+    List<TypeParameter>? typeParameters = createTypeParametersWithBounds(
+        classHierarchy?.knownLibraries,
+        typeBounds,
+        typeDefaults,
+        typeDefinitions);
+    if (typeParameters == null) {
+      // No class hierarchy or wasn't provided correct types.
+      // Revert to old behaviour of setting everything to dynamic.
+      typeParameters = [];
+      for (String name in typeDefinitions) {
+        if (!isLegalIdentifier(name)) continue;
+        typeParameters.add(new TypeParameter(name, new DynamicType()));
+      }
     }
 
     Uri library = Uri.parse(libraryUri);
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 74c8888..e77ba6b 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -97,6 +97,9 @@
           ' If multi-root file system is used, the input script and .packages file should be specified using URI.');
   args.addOption('filesystem-scheme',
       help: 'The URI scheme for the multi-root virtual filesystem.');
+  args.addMultiOption('source',
+      help: 'List additional source files to include into compilation.',
+      defaultsTo: const <String>[]);
   args.addOption('target',
       help: 'Target model that determines what core libraries are available',
       allowed: <String>['vm', 'flutter', 'flutter_runner', 'dart_runner'],
@@ -203,6 +206,7 @@
   final bool treeShakeWriteOnlyFields = options['tree-shake-write-only-fields'];
   final List<String>? experimentalFlags = options['enable-experiment'];
   final Map<String, String> environmentDefines = {};
+  final List<String> sources = options['source'];
 
   if (!parseCommandLineDefines(options['define'], environmentDefines, usage)) {
     return badUsageExitCode;
@@ -248,6 +252,8 @@
     mainUri = await convertToPackageUri(fileSystem, mainUri, packagesUri);
   }
 
+  final List<Uri> additionalSources = sources.map(resolveInputUri).toList();
+
   final verbosity = Verbosity.parseArgument(options['verbosity']);
   final errorPrinter = new ErrorPrinter(verbosity);
   final errorDetector =
@@ -285,6 +291,7 @@
   }
 
   final results = await compileToKernel(mainUri, compilerOptions,
+      additionalSources: additionalSources,
       includePlatform: additionalDills.isNotEmpty,
       deleteToStringPackageUris: options['delete-tostring-package-uri'],
       aot: aot,
@@ -354,7 +361,8 @@
 ///
 Future<KernelCompilationResults> compileToKernel(
     Uri source, CompilerOptions options,
-    {bool includePlatform: false,
+    {List<Uri> additionalSources: const <Uri>[],
+    bool includePlatform: false,
     List<String> deleteToStringPackageUris: const <String>[],
     bool aot: false,
     bool useGlobalTypeFlowAnalysis: false,
@@ -379,7 +387,8 @@
     compilerResult =
         await loadKernel(options.fileSystem, resolveInputUri(fromDillFile));
   } else {
-    compilerResult = await kernelForProgram(source, options);
+    compilerResult = await kernelForProgram(source, options,
+        additionalSources: additionalSources);
   }
   final Component? component = compilerResult?.component;
   Iterable<Uri>? compiledSources = component?.uriToSource.keys;
@@ -495,7 +504,7 @@
 
   // We don't know yet whether gen_snapshot will want to do obfuscation, but if
   // it does it will need the obfuscation prohibitions.
-  obfuscationProhibitions.transformComponent(component, coreTypes);
+  obfuscationProhibitions.transformComponent(component, coreTypes, target);
 
   deferred_loading.transformComponent(component);
 }
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index b1a60d8..16571c0 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -9,15 +9,15 @@
 import 'package:kernel/reference_from_index.dart';
 import 'package:kernel/target/changed_structure_notifier.dart';
 import 'package:kernel/target/targets.dart';
-import 'package:kernel/transformations/mixin_full_resolution.dart'
-    as transformMixins show transformLibraries;
-import 'package:kernel/transformations/continuation.dart' as transformAsync
-    show transformLibraries, transformProcedure;
 import 'package:kernel/type_environment.dart';
 
 import '../transformations/call_site_annotator.dart' as callSiteAnnotator;
+import '../transformations/continuation.dart' as transformAsync
+    show transformLibraries, transformProcedure;
 import '../transformations/lowering.dart' as lowering
     show transformLibraries, transformProcedure;
+import '../transformations/mixin_full_resolution.dart' as transformMixins
+    show transformLibraries;
 import '../transformations/ffi/common.dart' as ffiHelper
     show calculateTransitiveImportsOfDartFfiIfUsed;
 import '../transformations/ffi/definitions.dart' as transformFfiDefinitions
@@ -508,4 +508,7 @@
   DartLibrarySupport get dartLibrarySupport => flags.supportMirrors
       ? const DefaultDartLibrarySupport()
       : const CustomizedDartLibrarySupport(unsupported: {'mirrors'});
+
+  @override
+  bool isSupportedPragma(String pragmaName) => pragmaName.startsWith("vm:");
 }
diff --git a/pkg/vm/lib/transformations/async.dart b/pkg/vm/lib/transformations/async.dart
new file mode 100644
index 0000000..e117bc6
--- /dev/null
+++ b/pkg/vm/lib/transformations/async.dart
@@ -0,0 +1,669 @@
+// 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:kernel/kernel.dart';
+import 'package:kernel/type_environment.dart';
+import 'continuation.dart';
+
+/// A transformer that introduces temporary variables for all subexpressions
+/// that are alive across yield points (AwaitExpression).
+///
+/// The transformer is invoked by passing [rewrite] a top-level expression.
+///
+/// All intermediate values that are possible live across an await are named in
+/// local variables.
+///
+/// Await expressions are translated into a call to a helper function and a
+/// native yield.
+class ExpressionLifter extends Transformer {
+  final AsyncRewriterBase continuationRewriter;
+
+  /// Have we seen an await to the right in the expression tree.
+  ///
+  /// Subexpressions are visited right-to-left in the reverse of evaluation
+  /// order.
+  ///
+  /// On entry to an expression's visit method, [seenAwait] indicates whether a
+  /// sibling to the right contains an await.  If so the expression will be
+  /// named in a temporary variable because it is potentially live across an
+  /// await.
+  ///
+  /// On exit from an expression's visit method, [seenAwait] indicates whether
+  /// the expression itself or a sibling to the right contains an await.
+  bool seenAwait = false;
+
+  /// The (reverse order) sequence of statements that have been emitted.
+  ///
+  /// Transformation of an expression produces a transformed expression and a
+  /// sequence of statements which are assignments to local variables, calls to
+  /// helper functions, and yield points.  Only the yield points need to be a
+  /// statements, and they are statements so an implementation does not have to
+  /// handle unnamed expression intermediate live across yield points.
+  ///
+  /// The visit methods return the transformed expression and build a sequence
+  /// of statements by emitting statements into this list.  This list is built
+  /// in reverse because children are visited right-to-left.
+  ///
+  /// If an expression should be named it is named before visiting its children
+  /// so the naming assignment appears in the list before all statements
+  /// implementing the translation of the children.
+  ///
+  /// Children that are conditionally evaluated, such as some parts of logical
+  /// and conditional expressions, must be delimited so that they do not emit
+  /// unguarded statements into [statements].  This is implemented by setting
+  /// [statements] to a fresh empty list before transforming those children.
+  List<Statement> statements = <Statement>[];
+
+  /// The number of currently live named intermediate values.
+  ///
+  /// This index is used to allocate names to temporary values.  Because
+  /// children are visited right-to-left, names are assigned in reverse order of
+  /// index.
+  ///
+  /// When an assignment is emitted into [statements] to name an expression
+  /// before visiting its children, the index is not immediately reserved
+  /// because a child can freely use the same name as its parent.  In practice,
+  /// this will be the rightmost named child.
+  ///
+  /// After visiting the children of a named expression, [nameIndex] is set to
+  /// indicate one more live value (the value of the expression) than before
+  /// visiting the expression.
+  ///
+  /// After visiting the children of an expression that is not named,
+  /// [nameIndex] may still account for names of subexpressions.
+  int nameIndex = 0;
+
+  final VariableDeclaration asyncResult =
+      new VariableDeclaration(':result_or_exception');
+  final List<VariableDeclaration> variables = <VariableDeclaration>[];
+
+  ExpressionLifter(this.continuationRewriter);
+
+  StatefulStaticTypeContext get _staticTypeContext =>
+      continuationRewriter.staticTypeContext;
+
+  Block blockOf(List<Statement> statements) {
+    return new Block(statements.reversed.toList());
+  }
+
+  /// Rewrite a toplevel expression (toplevel wrt. a statement).
+  ///
+  /// Rewriting an expression produces a sequence of statements and an
+  /// expression.  The sequence of statements are added to the given list.  Pass
+  /// an empty list if the rewritten expression should be delimited from the
+  /// surrounding context.
+  Expression rewrite(Expression expression, List<Statement> outer) {
+    assert(statements.isEmpty);
+    var saved = seenAwait;
+    seenAwait = false;
+    Expression result = transform(expression);
+    outer.addAll(statements.reversed);
+    statements.clear();
+    seenAwait = seenAwait || saved;
+    return result;
+  }
+
+  // Perform an action with a given list of statements so that it cannot emit
+  // statements into the 'outer' list.
+  Expression delimit(Expression action(), List<Statement> inner) {
+    var outer = statements;
+    statements = inner;
+    Expression result = action();
+    statements = outer;
+    return result;
+  }
+
+  // Wraps VariableGet in an unsafeCast if `type` isn't dynamic.
+  Expression unsafeCastVariableGet(
+      VariableDeclaration variable, DartType type) {
+    if (type != const DynamicType()) {
+      return StaticInvocation(
+          continuationRewriter.helper.unsafeCast,
+          Arguments(<Expression>[VariableGet(variable)],
+              types: <DartType>[type]));
+    }
+    return VariableGet(variable);
+  }
+
+  // Name an expression by emitting an assignment to a temporary variable.
+  Expression name(Expression expr) {
+    DartType type = expr.getStaticType(_staticTypeContext);
+    VariableDeclaration temp = allocateTemporary(nameIndex, type);
+    statements.add(ExpressionStatement(VariableSet(temp, expr)));
+    // Wrap in unsafeCast to make sure we pass type information even if we later
+    // have to re-type the temporary variable to dynamic.
+    return unsafeCastVariableGet(temp, type);
+  }
+
+  VariableDeclaration allocateTemporary(int index,
+      [DartType type = const DynamicType()]) {
+    if (variables.length > index) {
+      // Re-type temporary to dynamic if we detect reuse with different type.
+      // Note: We should make sure all uses use `unsafeCast(...)` to pass their
+      // type information on, as that is lost otherwise.
+      if (variables[index].type != const DynamicType() &&
+          variables[index].type != type) {
+        variables[index].type = const DynamicType();
+      }
+      return variables[index];
+    }
+    for (var i = variables.length; i <= index; i++) {
+      variables.add(VariableDeclaration(":async_temporary_${i}", type: type));
+    }
+    return variables[index];
+  }
+
+  // Simple literals.  These are pure expressions so they can be evaluated after
+  // an await to their right.
+  @override
+  TreeNode visitSymbolLiteral(SymbolLiteral expr) => expr;
+  @override
+  TreeNode visitTypeLiteral(TypeLiteral expr) => expr;
+  @override
+  TreeNode visitThisExpression(ThisExpression expr) => expr;
+  @override
+  TreeNode visitStringLiteral(StringLiteral expr) => expr;
+  @override
+  TreeNode visitIntLiteral(IntLiteral expr) => expr;
+  @override
+  TreeNode visitDoubleLiteral(DoubleLiteral expr) => expr;
+  @override
+  TreeNode visitBoolLiteral(BoolLiteral expr) => expr;
+  @override
+  TreeNode visitNullLiteral(NullLiteral expr) => expr;
+
+  // Nullary expressions with effects.
+  Expression nullary(Expression expr) {
+    if (seenAwait) {
+      expr = name(expr);
+      ++nameIndex;
+    }
+    return expr;
+  }
+
+  @override
+  TreeNode visitSuperPropertyGet(SuperPropertyGet expr) => nullary(expr);
+  @override
+  TreeNode visitStaticGet(StaticGet expr) => nullary(expr);
+  @override
+  TreeNode visitStaticTearOff(StaticTearOff expr) => nullary(expr);
+  @override
+  TreeNode visitRethrow(Rethrow expr) => nullary(expr);
+
+  // Getting a final or const variable is not an effect so it can be evaluated
+  // after an await to its right.
+  @override
+  TreeNode visitVariableGet(VariableGet expr) {
+    Expression result = expr;
+    if (seenAwait && !expr.variable.isFinal && !expr.variable.isConst) {
+      result = name(expr);
+      ++nameIndex;
+    }
+    return result;
+  }
+
+  // Transform an expression given an action to transform the children.  For
+  // this purposes of the await transformer the children should generally be
+  // translated from right to left, in the reverse of evaluation order.
+  Expression transformTreeNode(Expression expr, void action()) {
+    var shouldName = seenAwait;
+
+    // 1. If there is an await in a sibling to the right, emit an assignment to
+    // a temporary variable before transforming the children.
+    var result = shouldName ? name(expr) : expr;
+
+    // 2. Remember the number of live temporaries before transforming the
+    // children.
+    var index = nameIndex;
+
+    // 3. Transform the children.  Initially they do not have an await in a
+    // sibling to their right.
+    seenAwait = false;
+    action();
+
+    // 4. If the expression was named then the variables used for children are
+    // no longer live but the variable used for the expression is.
+    // On the other hand, a sibling to the left (yet to be processed) cannot
+    // reuse any of the variables used here, as the assignments in the children
+    // (here) would overwrite assignments in the siblings to the left,
+    // possibly before the use of the overwritten values.
+    if (shouldName) {
+      if (index + 1 > nameIndex) nameIndex = index + 1;
+      seenAwait = true;
+    }
+    return result;
+  }
+
+  // Unary expressions.
+  Expression unary(Expression expr) {
+    return transformTreeNode(expr, () {
+      expr.transformChildren(this);
+    });
+  }
+
+  @override
+  TreeNode visitInvalidExpression(InvalidExpression expr) => unary(expr);
+  @override
+  TreeNode visitVariableSet(VariableSet expr) => unary(expr);
+  @override
+  TreeNode visitInstanceGet(InstanceGet expr) => unary(expr);
+  @override
+  TreeNode visitDynamicGet(DynamicGet expr) => unary(expr);
+  @override
+  TreeNode visitInstanceTearOff(InstanceTearOff expr) => unary(expr);
+  @override
+  TreeNode visitFunctionTearOff(FunctionTearOff expr) => unary(expr);
+  @override
+  TreeNode visitSuperPropertySet(SuperPropertySet expr) => unary(expr);
+  @override
+  TreeNode visitStaticSet(StaticSet expr) => unary(expr);
+  @override
+  TreeNode visitNot(Not expr) => unary(expr);
+  @override
+  TreeNode visitIsExpression(IsExpression expr) => unary(expr);
+  @override
+  TreeNode visitAsExpression(AsExpression expr) => unary(expr);
+  @override
+  TreeNode visitThrow(Throw expr) => unary(expr);
+
+  @override
+  TreeNode visitInstanceSet(InstanceSet expr) {
+    return transformTreeNode(expr, () {
+      expr.value = transform(expr.value)..parent = expr;
+      expr.receiver = transform(expr.receiver)..parent = expr;
+    });
+  }
+
+  @override
+  TreeNode visitDynamicSet(DynamicSet expr) {
+    return transformTreeNode(expr, () {
+      expr.value = transform(expr.value)..parent = expr;
+      expr.receiver = transform(expr.receiver)..parent = expr;
+    });
+  }
+
+  @override
+  TreeNode visitArguments(Arguments args) {
+    for (var named in args.named.reversed) {
+      named.value = transform(named.value)..parent = named;
+    }
+    var positional = args.positional;
+    for (var i = positional.length - 1; i >= 0; --i) {
+      positional[i] = transform(positional[i])..parent = args;
+    }
+    // Returns the arguments, which is assumed at the call sites because they do
+    // not replace the arguments or set parent pointers.
+    return args;
+  }
+
+  @override
+  TreeNode visitInstanceInvocation(InstanceInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+      expr.receiver = transform(expr.receiver)..parent = expr;
+    });
+  }
+
+  @override
+  TreeNode visitLocalFunctionInvocation(LocalFunctionInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+    });
+  }
+
+  @override
+  TreeNode visitDynamicInvocation(DynamicInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+      expr.receiver = transform(expr.receiver)..parent = expr;
+    });
+  }
+
+  @override
+  TreeNode visitFunctionInvocation(FunctionInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+      expr.receiver = transform(expr.receiver)..parent = expr;
+    });
+  }
+
+  @override
+  TreeNode visitEqualsNull(EqualsNull expr) => unary(expr);
+
+  @override
+  TreeNode visitEqualsCall(EqualsCall expr) {
+    return transformTreeNode(expr, () {
+      expr.right = transform(expr.right)..parent = expr;
+      expr.left = transform(expr.left)..parent = expr;
+    });
+  }
+
+  @override
+  TreeNode visitSuperMethodInvocation(SuperMethodInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+    });
+  }
+
+  @override
+  TreeNode visitStaticInvocation(StaticInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+    });
+  }
+
+  @override
+  TreeNode visitConstructorInvocation(ConstructorInvocation expr) {
+    return transformTreeNode(expr, () {
+      visitArguments(expr.arguments);
+    });
+  }
+
+  @override
+  TreeNode visitStringConcatenation(StringConcatenation expr) {
+    return transformTreeNode(expr, () {
+      var expressions = expr.expressions;
+      for (var i = expressions.length - 1; i >= 0; --i) {
+        expressions[i] = transform(expressions[i])..parent = expr;
+      }
+    });
+  }
+
+  @override
+  TreeNode visitListLiteral(ListLiteral expr) {
+    return transformTreeNode(expr, () {
+      var expressions = expr.expressions;
+      for (var i = expressions.length - 1; i >= 0; --i) {
+        expressions[i] = transform(expr.expressions[i])..parent = expr;
+      }
+    });
+  }
+
+  @override
+  TreeNode visitMapLiteral(MapLiteral expr) {
+    return transformTreeNode(expr, () {
+      for (var entry in expr.entries.reversed) {
+        entry.value = transform(entry.value)..parent = entry;
+        entry.key = transform(entry.key)..parent = entry;
+      }
+    });
+  }
+
+  // Control flow.
+  @override
+  TreeNode visitLogicalExpression(LogicalExpression expr) {
+    var shouldName = seenAwait;
+
+    // Right is delimited because it is conditionally evaluated.
+    var rightStatements = <Statement>[];
+    seenAwait = false;
+    expr.right = delimit(() => transform(expr.right), rightStatements)
+      ..parent = expr;
+    var rightAwait = seenAwait;
+
+    if (rightStatements.isEmpty) {
+      // Easy case: right did not emit any statements.
+      seenAwait = shouldName;
+      return transformTreeNode(expr, () {
+        expr.left = transform(expr.left)..parent = expr;
+        seenAwait = seenAwait || rightAwait;
+      });
+    }
+
+    // If right has emitted statements we will produce a temporary t and emit
+    // for && (there is an analogous case for ||):
+    //
+    // t = [left] == true;
+    // if (t) {
+    //   t = [right] == true;
+    // }
+
+    // Recall that statements are emitted in reverse order, so first emit the if
+    // statement, then the assignment of [left] == true, and then translate left
+    // so any statements it emits occur after in the accumulated list (that is,
+    // so they occur before in the corresponding block).
+    var rightBody = blockOf(rightStatements);
+    final type = _staticTypeContext.typeEnvironment.coreTypes
+        .boolRawType(_staticTypeContext.nonNullable);
+    final result = allocateTemporary(nameIndex, type);
+    final objectEquals = continuationRewriter.helper.coreTypes.objectEquals;
+    rightBody.addStatement(new ExpressionStatement(new VariableSet(
+        result,
+        new EqualsCall(expr.right, new BoolLiteral(true),
+            interfaceTarget: objectEquals,
+            functionType: objectEquals.getterType as FunctionType))));
+    var then, otherwise;
+    if (expr.operatorEnum == LogicalExpressionOperator.AND) {
+      then = rightBody;
+      otherwise = null;
+    } else {
+      then = new EmptyStatement();
+      otherwise = rightBody;
+    }
+    statements.add(
+        new IfStatement(unsafeCastVariableGet(result, type), then, otherwise));
+
+    final test = new EqualsCall(expr.left, new BoolLiteral(true),
+        interfaceTarget: objectEquals,
+        functionType: objectEquals.getterType as FunctionType);
+    statements.add(new ExpressionStatement(new VariableSet(result, test)));
+
+    seenAwait = false;
+    test.left = transform(test.left)..parent = test;
+
+    ++nameIndex;
+    seenAwait = seenAwait || rightAwait;
+    return unsafeCastVariableGet(result, type);
+  }
+
+  @override
+  TreeNode visitConditionalExpression(ConditionalExpression expr) {
+    // Then and otherwise are delimited because they are conditionally
+    // evaluated.
+    var shouldName = seenAwait;
+
+    final savedNameIndex = nameIndex;
+
+    var thenStatements = <Statement>[];
+    seenAwait = false;
+    expr.then = delimit(() => transform(expr.then), thenStatements)
+      ..parent = expr;
+    var thenAwait = seenAwait;
+
+    final thenNameIndex = nameIndex;
+    nameIndex = savedNameIndex;
+
+    var otherwiseStatements = <Statement>[];
+    seenAwait = false;
+    expr.otherwise =
+        delimit(() => transform(expr.otherwise), otherwiseStatements)
+          ..parent = expr;
+    var otherwiseAwait = seenAwait;
+
+    // Only one side of this branch will get executed at a time, so just make
+    // sure we have enough temps for either, not both at the same time.
+    if (thenNameIndex > nameIndex) {
+      nameIndex = thenNameIndex;
+    }
+
+    if (thenStatements.isEmpty && otherwiseStatements.isEmpty) {
+      // Easy case: neither then nor otherwise emitted any statements.
+      seenAwait = shouldName;
+      return transformTreeNode(expr, () {
+        expr.condition = transform(expr.condition)..parent = expr;
+        seenAwait = seenAwait || thenAwait || otherwiseAwait;
+      });
+    }
+
+    // If `then` or `otherwise` has emitted statements we will produce a
+    // temporary t and emit:
+    //
+    // if ([condition]) {
+    //   t = [left];
+    // } else {
+    //   t = [right];
+    // }
+    final result = allocateTemporary(nameIndex, expr.staticType);
+    var thenBody = blockOf(thenStatements);
+    var otherwiseBody = blockOf(otherwiseStatements);
+    thenBody.addStatement(
+        new ExpressionStatement(new VariableSet(result, expr.then)));
+    otherwiseBody.addStatement(
+        new ExpressionStatement(new VariableSet(result, expr.otherwise)));
+    var branch = new IfStatement(expr.condition, thenBody, otherwiseBody);
+    statements.add(branch);
+
+    seenAwait = false;
+    branch.condition = transform(branch.condition)..parent = branch;
+
+    ++nameIndex;
+    seenAwait = seenAwait || thenAwait || otherwiseAwait;
+    return unsafeCastVariableGet(result, expr.staticType);
+  }
+
+  // Others.
+  @override
+  TreeNode visitAwaitExpression(AwaitExpression expr) {
+    final R = continuationRewriter;
+    var shouldName = seenAwait;
+    var type = expr.getStaticType(_staticTypeContext);
+    Expression result = unsafeCastVariableGet(asyncResult, type);
+
+    // The statements are in reverse order, so name the result first if
+    // necessary and then add the two other statements in reverse.
+    if (shouldName) result = name(result);
+    Arguments arguments = new Arguments(<Expression>[
+      expr.operand,
+      new VariableGet(R.thenContinuationVariable),
+      new VariableGet(R.catchErrorContinuationVariable),
+    ]);
+
+    // We are building
+    //
+    //     [yield] (let _ = _awaitHelper(...) in null)
+    //
+    // to ensure that :await_jump_var and :await_jump_ctx are updated
+    // before _awaitHelper is invoked (see BuildYieldStatement in
+    // StreamingFlowGraphBuilder for details of how [yield] is translated to
+    // IL). This guarantees that recursive invocation of the current function
+    // would continue from the correct "jump" position. Recursive invocations
+    // arise if future we are awaiting completes synchronously. Builtin Future
+    // implementation don't complete synchronously, but Flutter's
+    // SynchronousFuture do (see bug http://dartbug.com/32098 for more details).
+    statements.add(R.createContinuationPoint(new Let(
+        new VariableDeclaration(null,
+            initializer: new StaticInvocation(R.helper.awaitHelper, arguments)
+              ..fileOffset = expr.fileOffset),
+        new NullLiteral()))
+      ..fileOffset = expr.fileOffset);
+
+    seenAwait = false;
+    var index = nameIndex;
+    arguments.positional[0] = transform(expr.operand)..parent = arguments;
+
+    if (shouldName && index + 1 > nameIndex) nameIndex = index + 1;
+    seenAwait = true;
+    return result;
+  }
+
+  @override
+  TreeNode visitFunctionExpression(FunctionExpression expr) {
+    expr.transformChildren(this);
+    return expr;
+  }
+
+  @override
+  TreeNode visitLet(Let expr) {
+    var body = transform(expr.body);
+
+    VariableDeclaration variable = expr.variable;
+    if (seenAwait) {
+      // There is an await in the body of `let var x = initializer in body` or
+      // to its right.  We will produce the sequence of statements:
+      //
+      // <initializer's statements>
+      // var x = <initializer's value>
+      // <body's statements>
+      //
+      // and return the body's value.
+      //
+      // So x is in scope for all the body's statements and the body's value.
+      // This has the unpleasant consequence that all let-bound variables with
+      // await in the let's body will end up hoisted out of the expression and
+      // allocated to the context in the VM, even if they have no uses
+      // (`let _ = e0 in e1` can be used for sequencing of `e0` and `e1`).
+      statements.add(variable);
+      var index = nameIndex;
+      seenAwait = false;
+      variable.initializer = transform(variable.initializer!)
+        ..parent = variable;
+      // Temporaries used in the initializer or the body are not live but the
+      // temporary used for the body is.
+      if (index + 1 > nameIndex) nameIndex = index + 1;
+      seenAwait = true;
+      return body;
+    } else {
+      // The body in `let x = initializer in body` did not contain an await.  We
+      // can leave a let expression.
+      return transformTreeNode(expr, () {
+        // The body has already been translated.
+        expr.body = body..parent = expr;
+        variable.initializer = transform(variable.initializer!)
+          ..parent = variable;
+      });
+    }
+  }
+
+  @override
+  TreeNode visitFunctionNode(FunctionNode node) {
+    var nestedRewriter = new RecursiveContinuationRewriter(
+        continuationRewriter.helper, _staticTypeContext);
+    return nestedRewriter.transform(node);
+  }
+
+  @override
+  TreeNode visitBlockExpression(BlockExpression expr) {
+    return transformTreeNode(expr, () {
+      expr.value = transform(expr.value)..parent = expr;
+      List<Statement> body = <Statement>[];
+      for (Statement stmt in expr.body.statements.reversed) {
+        Statement? translation = _rewriteStatement(stmt);
+        if (translation != null) body.add(translation);
+      }
+      expr.body = new Block(body.reversed.toList())..parent = expr;
+    });
+  }
+
+  Statement? _rewriteStatement(Statement stmt) {
+    // This method translates a statement nested in an expression (e.g., in a
+    // block expression).  It produces a translated statement, a list of
+    // statements which are side effects necessary for any await, and a flag
+    // indicating whether there was an await in the statement or to its right.
+    // The translated statement can be null in the case where there was already
+    // an await to the right.
+
+    // The translation is accumulating two lists of statements, an inner list
+    // which is a reversed list of effects needed for the current expression and
+    // an outer list which represents the block containing the current
+    // statement.  We need to preserve both of those from side effects.
+    List<Statement> savedInner = statements;
+    List<Statement> savedOuter = continuationRewriter.statements;
+    statements = <Statement>[];
+    continuationRewriter.statements = <Statement>[];
+    continuationRewriter.transform(stmt);
+
+    List<Statement> results = continuationRewriter.statements;
+    statements = savedInner;
+    continuationRewriter.statements = savedOuter;
+    if (!seenAwait && results.length == 1) return results.first;
+    statements.addAll(results.reversed);
+    return null;
+  }
+
+  @override
+  TreeNode defaultStatement(Statement stmt) {
+    throw new UnsupportedError(
+        "Use _rewriteStatement to transform statement: ${stmt}");
+  }
+}
diff --git a/pkg/vm/lib/transformations/continuation.dart b/pkg/vm/lib/transformations/continuation.dart
new file mode 100644
index 0000000..b5c3949
--- /dev/null
+++ b/pkg/vm/lib/transformations/continuation.dart
@@ -0,0 +1,1633 @@
+// 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 'dart:math' as math;
+
+import 'package:kernel/ast.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/type_algebra.dart' show Substitution;
+import 'package:kernel/type_environment.dart';
+
+import 'async.dart';
+
+class ContinuationVariables {
+  static const awaitJumpVar = ':await_jump_var';
+  static const asyncFuture = ':async_future';
+  static const isSync = ":is_sync";
+  static const awaitContextVar = ':await_ctx_var';
+  static const asyncCompleter = ':async_completer';
+  static const asyncOp = ':async_op';
+  static const asyncOpThen = ':async_op_then';
+  static const asyncOpError = ':async_op_error';
+  static const controller = ':controller';
+  static const controllerStreamVar = ':controller_stream';
+  static const forIterator = ':for-iterator';
+  static const returnValue = ':return_value';
+  static const stream = ':stream';
+  static const syncForIterator = ':sync-for-iterator';
+  static const syncOpGen = ':sync_op_gen';
+  static const syncOp = ':sync_op';
+  // sync_op(..) parameter.
+  static const iteratorParam = ':iterator';
+  // (a)sync_op(..) parameters.
+  static const exceptionParam = ':exception';
+  static const stackTraceParam = ':stack_trace';
+
+  static const savedTryContextVarPrefix = ':saved_try_context_var';
+  static const exceptionVarPrefix = ':exception';
+  static const stackTraceVarPrefix = ':stack_trace';
+
+  static String savedTryContextVar(int depth) =>
+      '$savedTryContextVarPrefix$depth';
+  static String exceptionVar(int depth) => '$exceptionVarPrefix$depth';
+  static String stackTraceVar(int depth) => '$stackTraceVarPrefix$depth';
+}
+
+void transformLibraries(
+    TypeEnvironment typeEnvironment, List<Library> libraries,
+    {required bool productMode}) {
+  var helper =
+      new HelperNodes.fromCoreTypes(typeEnvironment.coreTypes, productMode);
+  var rewriter = new RecursiveContinuationRewriter(
+      helper, new StatefulStaticTypeContext.stacked(typeEnvironment));
+  for (var library in libraries) {
+    rewriter.rewriteLibrary(library);
+  }
+}
+
+Component transformComponent(
+    TypeEnvironment typeEnvironment, Component component,
+    {required bool productMode}) {
+  var helper =
+      new HelperNodes.fromCoreTypes(typeEnvironment.coreTypes, productMode);
+  var rewriter = new RecursiveContinuationRewriter(
+      helper, new StatefulStaticTypeContext.stacked(typeEnvironment));
+  return rewriter.rewriteComponent(component);
+}
+
+Procedure transformProcedure(
+    TypeEnvironment typeEnvironment, Procedure procedure,
+    {required bool productMode}) {
+  var helper =
+      new HelperNodes.fromCoreTypes(typeEnvironment.coreTypes, productMode);
+  var rewriter = new RecursiveContinuationRewriter(
+      helper, new StatefulStaticTypeContext.stacked(typeEnvironment));
+  return rewriter.transform(procedure);
+}
+
+class RecursiveContinuationRewriter extends RemovingTransformer {
+  final HelperNodes helper;
+
+  final VariableDeclaration awaitJumpVariable = new VariableDeclaration(
+      ContinuationVariables.awaitJumpVar,
+      initializer: new IntLiteral(0));
+  final VariableDeclaration awaitContextVariable =
+      new VariableDeclaration(ContinuationVariables.awaitContextVar);
+
+  StatefulStaticTypeContext staticTypeContext;
+
+  RecursiveContinuationRewriter(this.helper, this.staticTypeContext);
+
+  Component rewriteComponent(Component node) {
+    return transform(node);
+  }
+
+  Library rewriteLibrary(Library node) {
+    return transform(node);
+  }
+
+  @override
+  TreeNode visitField(Field node, TreeNode? removalSentinel) {
+    staticTypeContext.enterMember(node);
+    final result = super.visitField(node, removalSentinel);
+    staticTypeContext.leaveMember(node);
+    return result;
+  }
+
+  @override
+  TreeNode visitConstructor(Constructor node, TreeNode? removalSentinel) {
+    staticTypeContext.enterMember(node);
+    final result = super.visitConstructor(node, removalSentinel);
+    staticTypeContext.leaveMember(node);
+    return result;
+  }
+
+  @override
+  TreeNode visitProcedure(Procedure node, TreeNode? removalSentinel) {
+    staticTypeContext.enterMember(node);
+    final result =
+        node.isAbstract ? node : super.visitProcedure(node, removalSentinel);
+    staticTypeContext.leaveMember(node);
+    return result;
+  }
+
+  @override
+  TreeNode visitLibrary(Library node, TreeNode? removalSentinel) {
+    staticTypeContext.enterLibrary(node);
+    Library result = super.visitLibrary(node, removalSentinel) as Library;
+    staticTypeContext.leaveLibrary(node);
+    return result;
+  }
+
+  @override
+  TreeNode visitFunctionNode(FunctionNode node, TreeNode? removalSentinel) {
+    switch (node.asyncMarker) {
+      case AsyncMarker.Sync:
+      case AsyncMarker.SyncYielding:
+        node.transformOrRemoveChildren(
+            new RecursiveContinuationRewriter(helper, staticTypeContext));
+        return node;
+      case AsyncMarker.SyncStar:
+        return new SyncStarFunctionRewriter(helper, node, staticTypeContext)
+            .rewrite();
+      case AsyncMarker.Async:
+        return new AsyncFunctionRewriter(helper, node, staticTypeContext)
+            .rewrite();
+      case AsyncMarker.AsyncStar:
+        return new AsyncStarFunctionRewriter(helper, node, staticTypeContext)
+            .rewrite();
+    }
+  }
+
+  @override
+  TreeNode visitForInStatement(ForInStatement stmt, TreeNode? removalSentinel) {
+    if (stmt.isAsync) {
+      return super.visitForInStatement(stmt, removalSentinel);
+    }
+
+    // Transform
+    //
+    //   for ({var/final} T <variable> in <iterable>) { ... }
+    //
+    // Into
+    //
+    //  {
+    //    final Iterator<T> :sync-for-iterator = <iterable>.iterator;
+    //    for (; :sync-for-iterator.moveNext() ;) {
+    //        {var/final} T variable = :sync-for-iterator.current;
+    //        ...
+    //      }
+    //    }
+    //  }
+    final CoreTypes coreTypes = staticTypeContext.typeEnvironment.coreTypes;
+
+    // The CFE might invoke this transformation despite the program having
+    // compile-time errors. So we will not transform this [stmt] if the
+    // `stmt.iterable` is an invalid expression or has an invalid type and
+    // instead eliminate the entire for-in and replace it with a invalid
+    // expression statement.
+    final iterable = stmt.iterable;
+    final iterableType = iterable.getStaticType(staticTypeContext);
+    if (iterableType is InvalidType) {
+      return ExpressionStatement(
+          InvalidExpression('Invalid iterable type in for-in'));
+    }
+
+    // The NNBD sdk declares that Iterable.get:iterator returns a non-nullable
+    // `Iterator<E>`.
+    assert(const [
+      Nullability.nonNullable,
+      Nullability.legacy
+    ].contains(coreTypes.iterableGetIterator.function.returnType.nullability));
+
+    final DartType elementType = stmt.getElementType(staticTypeContext);
+    final iteratorType = InterfaceType(
+        coreTypes.iteratorClass, staticTypeContext.nonNullable, [elementType]);
+
+    final syncForIterator = VariableDeclaration(
+        ContinuationVariables.syncForIterator,
+        initializer: InstanceGet(InstanceAccessKind.Instance, iterable,
+            coreTypes.iterableGetIterator.name,
+            interfaceTarget: coreTypes.iterableGetIterator,
+            resultType: iteratorType)
+          ..fileOffset = iterable.fileOffset,
+        type: iteratorType)
+      ..fileOffset = iterable.fileOffset;
+
+    final condition = InstanceInvocation(
+        InstanceAccessKind.Instance,
+        VariableGet(syncForIterator),
+        coreTypes.iteratorMoveNext.name,
+        Arguments([]),
+        interfaceTarget: coreTypes.iteratorMoveNext,
+        functionType: coreTypes.iteratorMoveNext.getterType as FunctionType)
+      ..fileOffset = iterable.fileOffset;
+
+    final variable = stmt.variable
+      ..initializer = (InstanceGet(InstanceAccessKind.Instance,
+          VariableGet(syncForIterator), coreTypes.iteratorGetCurrent.name,
+          interfaceTarget: coreTypes.iteratorGetCurrent,
+          resultType: elementType)
+        ..fileOffset = stmt.bodyOffset);
+
+    final Block body = Block([variable, stmt.body])
+      ..fileOffset = stmt.bodyOffset;
+
+    return transform(
+        Block([syncForIterator, ForStatement([], condition, [], body)]));
+  }
+}
+
+abstract class ContinuationRewriterBase extends RecursiveContinuationRewriter {
+  final FunctionNode enclosingFunction;
+
+  int currentTryDepth = 0; // Nesting depth for try-blocks.
+  int currentCatchDepth = 0; // Nesting depth for catch-blocks.
+  int capturedTryDepth = 0; // Deepest yield point within a try-block.
+  int capturedCatchDepth = 0; // Deepest yield point within a catch-block.
+
+  ContinuationRewriterBase(HelperNodes helper, this.enclosingFunction,
+      StatefulStaticTypeContext staticTypeContext)
+      : super(helper, staticTypeContext);
+
+  /// Given a container [type], which is an instantiation of the given
+  /// [containerClass] extract its element type.
+  ///
+  /// This is used to extract element type from Future<T>, Iterable<T> and
+  /// Stream<T> instantiations.
+  ///
+  /// If instantiation is not valid (has more than 1 type argument) then
+  /// this function returns [InvalidType].
+  static DartType elementTypeFrom(Class containerClass, DartType type) {
+    if (type is InterfaceType) {
+      if (type.classNode == containerClass) {
+        if (type.typeArguments.length == 0) {
+          return const DynamicType();
+        } else if (type.typeArguments.length == 1) {
+          return type.typeArguments[0];
+        } else {
+          return const InvalidType();
+        }
+      }
+    }
+    return const DynamicType();
+  }
+
+  static DartType elementTypeFromFutureOr(DartType type) {
+    if (type is FutureOrType) {
+      return type.typeArgument;
+    }
+    return const DynamicType();
+  }
+
+  DartType elementTypeFromReturnType(Class expected) =>
+      elementTypeFrom(expected, enclosingFunction.returnType);
+
+  DartType elementTypeFromAsyncReturnType() =>
+      elementTypeFromFutureOr(enclosingFunction.returnType);
+
+  Statement createContinuationPoint([Expression? value]) {
+    if (value == null) value = new NullLiteral();
+    capturedTryDepth = math.max(capturedTryDepth, currentTryDepth);
+    capturedCatchDepth = math.max(capturedCatchDepth, currentCatchDepth);
+    return new YieldStatement(value, isNative: true);
+  }
+
+  @override
+  TreeNode visitTryCatch(TryCatch node, TreeNode? removalSentinel) {
+    // ignore: unnecessary_null_comparison
+    if (node.body != null) {
+      ++currentTryDepth;
+      node.body = transform(node.body);
+      node.body.parent = node;
+      --currentTryDepth;
+    }
+
+    ++currentCatchDepth;
+    transformCatchList(node.catches, node);
+    --currentCatchDepth;
+    return node;
+  }
+
+  @override
+  TreeNode visitTryFinally(TryFinally node, TreeNode? removalSentinel) {
+    // ignore: unnecessary_null_comparison
+    if (node.body != null) {
+      ++currentTryDepth;
+      node.body = transform(node.body);
+      node.body.parent = node;
+      --currentTryDepth;
+    }
+    // ignore: unnecessary_null_comparison
+    if (node.finalizer != null) {
+      ++currentCatchDepth;
+      node.finalizer = transform(node.finalizer);
+      node.finalizer.parent = node;
+      --currentCatchDepth;
+    }
+    return node;
+  }
+
+  Iterable<VariableDeclaration> createCapturedTryVariables() =>
+      new Iterable.generate(
+          capturedTryDepth,
+          (depth) => new VariableDeclaration(
+              ContinuationVariables.savedTryContextVar(depth)));
+
+  Iterable<VariableDeclaration> createCapturedCatchVariables() =>
+      new Iterable.generate(capturedCatchDepth).expand((depth) => [
+            new VariableDeclaration(ContinuationVariables.exceptionVar(depth)),
+            new VariableDeclaration(ContinuationVariables.stackTraceVar(depth)),
+          ]);
+
+  List<VariableDeclaration> variableDeclarations() {
+    awaitJumpVariable.type = staticTypeContext.typeEnvironment.coreTypes
+        .intRawType(staticTypeContext.nonNullable);
+    return [awaitJumpVariable, awaitContextVariable]
+      ..addAll(createCapturedTryVariables())
+      ..addAll(createCapturedCatchVariables());
+  }
+}
+
+// Transformer that rewrites all variable references to a given function's
+// parameters.
+// This allows us to e.g. "shadow" the original parameter variables with copies
+// unique to given sub-closure to prevent shared variables being overwritten.
+class ShadowRewriter extends Transformer {
+  final FunctionNode enclosingFunction;
+  Map<VariableDeclaration, VariableDeclaration?> _shadowedParameters = {};
+
+  ShadowRewriter(this.enclosingFunction) {
+    for (final parameter in enclosingFunction.positionalParameters
+        .followedBy(enclosingFunction.namedParameters)) {
+      // Put in placeholers so we can allocate new variables lazily- i.e. only
+      // if they're later referenced.
+      _shadowedParameters[parameter] = null;
+    }
+  }
+
+  // Return all used parameters.
+  Iterable<VariableDeclaration> get shadowedParameters =>
+      _shadowedParameters.values.whereType<VariableDeclaration>();
+
+  VariableDeclaration _rewrite(VariableDeclaration variable) {
+    if (_shadowedParameters.containsKey(variable)) {
+      // Fill in placeholder.
+      VariableDeclaration? placeholder = _shadowedParameters[variable];
+      if (placeholder == null) {
+        placeholder = _shadowedParameters[variable] = VariableDeclaration(
+          variable.name,
+          type: variable.type,
+          initializer: VariableGet(variable),
+        );
+      }
+      variable = placeholder;
+    }
+    return variable;
+  }
+
+  @override
+  TreeNode visitVariableGet(VariableGet node) {
+    node = super.visitVariableGet(node) as VariableGet;
+    return node..variable = _rewrite(node.variable);
+  }
+
+  @override
+  TreeNode visitVariableSet(VariableSet node) {
+    node = super.visitVariableSet(node) as VariableSet;
+    return node..variable = _rewrite(node.variable);
+  }
+}
+
+class SyncStarFunctionRewriter extends ContinuationRewriterBase {
+  final VariableDeclaration iteratorParameter;
+
+  SyncStarFunctionRewriter(HelperNodes helper, FunctionNode enclosingFunction,
+      StatefulStaticTypeContext staticTypeContext)
+      : iteratorParameter =
+            VariableDeclaration(ContinuationVariables.iteratorParam)
+              ..type = InterfaceType(
+                  helper.syncIteratorClass, staticTypeContext.nullable, [
+                // Note: This is dynamic since nested iterators (of potentially
+                // different type) are handled by shared internal synthetic
+                // code.
+                const DynamicType(),
+              ]),
+        super(helper, enclosingFunction, staticTypeContext);
+
+  FunctionNode rewrite() {
+    // We need to preserve the original parameters passed to the sync* function
+    // because each iteration should start from those parameters. To achieve
+    // this we shadow the original parameters with new variables (which are
+    // initialised to the original parameter values) and rewrite
+    // the body to use these variables instead.
+    final shadowRewriter = ShadowRewriter(enclosingFunction);
+    enclosingFunction.body = shadowRewriter.transform(enclosingFunction.body!)
+      ..parent = enclosingFunction;
+
+    // TODO(cskau): Figure out why inlining this below causes segfaults.
+    // Maybe related to http://dartbug.com/41596 ?
+    final syncOpFN = FunctionNode(buildClosureBody(),
+        positionalParameters: [
+          iteratorParameter,
+          new VariableDeclaration(ContinuationVariables.exceptionParam),
+          new VariableDeclaration(ContinuationVariables.stackTraceParam),
+        ],
+        requiredParameterCount: 3,
+        // Note: SyncYielding functions have no Dart equivalent. Since they are
+        // synchronous, we use Sync. (Note also that the Dart VM backend uses
+        // the Dart async marker to decide if functions are debuggable.)
+        asyncMarker: AsyncMarker.SyncYielding,
+        dartAsyncMarker: AsyncMarker.Sync,
+        returnType: helper.coreTypes.boolLegacyRawType)
+      ..fileOffset = enclosingFunction.fileOffset
+      ..fileEndOffset = enclosingFunction.fileEndOffset;
+    final syncOpType =
+        syncOpFN.computeThisFunctionType(staticTypeContext.nonNullable);
+
+    final syncOpGenVariable = VariableDeclaration(
+        ContinuationVariables.syncOpGen,
+        type: FunctionType([], syncOpType, staticTypeContext.nonNullable));
+
+    final syncOpVariable = VariableDeclaration(ContinuationVariables.syncOp);
+    final syncOpDecl = FunctionDeclaration(syncOpVariable, syncOpFN)
+      ..fileOffset = enclosingFunction.fileOffset;
+
+    enclosingFunction.body = Block([
+      // :sync_op_gen() {
+      //   :await_jump_var;
+      //   :await_ctx_var;
+      //   bool sync_op(:iterator, e, st) yielding {
+      //     modified <node.body> ...
+      //   };
+      //   return sync_op;
+      // }
+      FunctionDeclaration(
+          syncOpGenVariable,
+          FunctionNode(
+              Block([
+                // :await_jump_var, :await_ctx_var.
+                ...variableDeclarations(),
+                // Shadow any used function parameters with local copies.
+                ...shadowRewriter.shadowedParameters,
+                // :sync_op(..) { .. }
+                syncOpDecl,
+                // return sync_op;
+                ReturnStatement(VariableGet(syncOpVariable)),
+              ]),
+              returnType: syncOpType))
+        ..fileOffset = enclosingFunction.fileOffset,
+
+      // return _SyncIterable<T>(:sync_op_gen);
+      ReturnStatement(ConstructorInvocation(
+          helper.syncIterableConstructor,
+          Arguments([
+            VariableGet(syncOpGenVariable)
+          ], types: [
+            ContinuationRewriterBase.elementTypeFrom(
+                helper.iterableClass, enclosingFunction.returnType)
+          ]))),
+    ])
+      ..parent = enclosingFunction;
+    enclosingFunction.asyncMarker = AsyncMarker.Sync;
+
+    return enclosingFunction;
+  }
+
+  Statement buildClosureBody() {
+    // The body will insert calls to
+    //    :iterator.current_=
+    //    :iterator.isYieldEach=
+    // and return `true` as long as it did something and `false` when it's done.
+    return new Block(<Statement>[
+      transform(enclosingFunction.body!),
+      new ReturnStatement(new BoolLiteral(false))
+        ..fileOffset = enclosingFunction.fileEndOffset
+    ]);
+  }
+
+  @override
+  TreeNode visitYieldStatement(YieldStatement node, TreeNode? removalSentinel) {
+    Expression transformedExpression = transform(node.expression);
+
+    var statements = <Statement>[];
+    if (node.isYieldStar) {
+      statements.add(new ExpressionStatement(new InstanceSet(
+          InstanceAccessKind.Instance,
+          VariableGet(iteratorParameter),
+          helper.syncIteratorYieldEachIterable.name,
+          transformedExpression,
+          interfaceTarget: helper.syncIteratorYieldEachIterable)));
+    } else {
+      statements.add(new ExpressionStatement(new InstanceSet(
+          InstanceAccessKind.Instance,
+          VariableGet(iteratorParameter),
+          helper.syncIteratorCurrent.name,
+          transformedExpression,
+          interfaceTarget: helper.syncIteratorCurrent)));
+    }
+
+    statements.add(createContinuationPoint(new BoolLiteral(true))
+      ..fileOffset = node.fileOffset);
+    return new Block(statements);
+  }
+
+  @override
+  TreeNode visitReturnStatement(
+      ReturnStatement node, TreeNode? removalSentinel) {
+    // sync* functions cannot return a value.
+    assert(node.expression == null || node.expression is NullLiteral);
+    node.expression = new BoolLiteral(false)..parent = node;
+    return node;
+  }
+}
+
+abstract class AsyncRewriterBase extends ContinuationRewriterBase {
+  // :async_op has type (dynamic result_or_exception, StackTrace? s) -> dynamic
+  final VariableDeclaration nestedClosureVariable;
+
+  // :async_op_then has type (dynamic result) -> dynamic
+  final VariableDeclaration thenContinuationVariable;
+
+  // :async_op_error has type (Object e, StackTrace s) -> dynamic
+  final VariableDeclaration catchErrorContinuationVariable;
+
+  LabeledStatement? labeledBody;
+
+  ExpressionLifter? expressionRewriter;
+
+  AsyncRewriterBase(HelperNodes helper, FunctionNode enclosingFunction,
+      StatefulStaticTypeContext staticTypeContext)
+      : nestedClosureVariable =
+            VariableDeclaration(ContinuationVariables.asyncOp,
+                type: FunctionType([
+                  const DynamicType(),
+                  helper.coreTypes
+                      .stackTraceRawType(staticTypeContext.nullable),
+                ], const DynamicType(), staticTypeContext.nonNullable)),
+        thenContinuationVariable = VariableDeclaration(
+            ContinuationVariables.asyncOpThen,
+            type: FunctionType(const [const DynamicType()], const DynamicType(),
+                staticTypeContext.nonNullable)),
+        catchErrorContinuationVariable =
+            VariableDeclaration(ContinuationVariables.asyncOpError,
+                type: FunctionType([
+                  helper.coreTypes.objectRawType(staticTypeContext.nonNullable),
+                  helper.coreTypes
+                      .stackTraceRawType(staticTypeContext.nonNullable),
+                ], const DynamicType(), staticTypeContext.nonNullable)),
+        super(helper, enclosingFunction, staticTypeContext) {}
+
+  void setupAsyncContinuations(List<Statement> statements) {
+    expressionRewriter = new ExpressionLifter(this);
+
+    // var :async_op_then;
+    statements.add(thenContinuationVariable);
+
+    // var :async_op_error;
+    statements.add(catchErrorContinuationVariable);
+
+    // :async_op(:result_or_exception, :stack_trace) {
+    //     modified <node.body>;
+    // }
+    final parameters = <VariableDeclaration>[
+      expressionRewriter!.asyncResult,
+      new VariableDeclaration(ContinuationVariables.stackTraceParam),
+    ];
+
+    // Note: SyncYielding functions have no Dart equivalent. Since they are
+    // synchronous, we use Sync. (Note also that the Dart VM backend uses the
+    // Dart async marker to decide if functions are debuggable.)
+    final function = new FunctionNode(buildWrappedBody(),
+        positionalParameters: parameters,
+        asyncMarker: AsyncMarker.SyncYielding,
+        dartAsyncMarker: AsyncMarker.Sync)
+      ..fileOffset = enclosingFunction.fileOffset
+      ..fileEndOffset = enclosingFunction.fileEndOffset;
+
+    // The await expression lifter might have created a number of
+    // [VariableDeclarations].
+    // TODO(kustermann): If we didn't need any variables we should not emit
+    // these.
+    statements.addAll(variableDeclarations());
+    statements.addAll(expressionRewriter!.variables);
+
+    // Now add the closure function itself.
+    final closureFunction =
+        new FunctionDeclaration(nestedClosureVariable, function)
+          ..fileOffset = enclosingFunction.parent!.fileOffset;
+    statements.add(closureFunction);
+
+    // :async_op_then = _asyncThenWrapperHelper(asyncBody);
+    final boundThenClosure = new StaticInvocation(helper.asyncThenWrapper,
+        new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]));
+    final thenClosureVariableAssign = new ExpressionStatement(
+        new VariableSet(thenContinuationVariable, boundThenClosure));
+    statements.add(thenClosureVariableAssign);
+
+    // :async_op_error = _asyncErrorWrapperHelper(asyncBody);
+    final boundCatchErrorClosure = new StaticInvocation(
+        helper.asyncErrorWrapper,
+        new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]));
+    final catchErrorClosureVariableAssign = new ExpressionStatement(
+        new VariableSet(
+            catchErrorContinuationVariable, boundCatchErrorClosure));
+    statements.add(catchErrorClosureVariableAssign);
+  }
+
+  Statement buildWrappedBody() {
+    ++currentTryDepth;
+    labeledBody = new LabeledStatement(null);
+    labeledBody!.body = visitDelimited(enclosingFunction.body!)
+      ..parent = labeledBody;
+    --currentTryDepth;
+
+    var exceptionVariable = VariableDeclaration('exception');
+    var stackTraceVariable = VariableDeclaration('stack_trace',
+        type:
+            helper.coreTypes.stackTraceRawType(staticTypeContext.nonNullable));
+
+    return new TryCatch(
+      buildReturn(labeledBody!),
+      <Catch>[
+        new Catch(
+            exceptionVariable,
+            new Block(<Statement>[
+              buildCatchBody(exceptionVariable, stackTraceVariable)
+            ]),
+            stackTrace: stackTraceVariable)
+      ],
+      isSynthetic: true,
+    );
+  }
+
+  Statement buildCatchBody(VariableDeclaration exceptionVariable,
+      VariableDeclaration stackTraceVariable);
+
+  Statement buildReturn(Statement body);
+
+  List<Statement> statements = <Statement>[];
+
+  @override
+  TreeNode visitExpressionStatement(
+      ExpressionStatement stmt, TreeNode? removalSentinel) {
+    stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
+      ..parent = stmt;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitBlock(Block stmt, TreeNode? removalSentinel) {
+    var saved = statements;
+    statements = <Statement>[];
+    for (var statement in stmt.statements) {
+      transform(statement);
+    }
+    saved.add(new Block(statements));
+    statements = saved;
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitEmptyStatement(EmptyStatement stmt, TreeNode? removalSentinel) {
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitAssertBlock(AssertBlock stmt, TreeNode? removalSentinel) {
+    var saved = statements;
+    statements = <Statement>[];
+    for (var statement in stmt.statements) {
+      transform(statement);
+    }
+    saved.add(new Block(statements));
+    statements = saved;
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitAssertStatement(
+      AssertStatement stmt, TreeNode? removalSentinel) {
+    var condEffects = <Statement>[];
+    var cond = expressionRewriter!.rewrite(stmt.condition, condEffects);
+    if (stmt.message == null) {
+      stmt.condition = cond..parent = stmt;
+      // If the translation of the condition produced a non-empty list of
+      // statements, ensure they are guarded by whether asserts are enabled.
+      statements.add(
+          condEffects.isEmpty ? stmt : new AssertBlock(condEffects..add(stmt)));
+      return removalSentinel ?? EmptyStatement();
+    }
+
+    // The translation depends on the translation of the message, by cases.
+    Statement result;
+    var msgEffects = <Statement>[];
+    stmt.message = expressionRewriter!.rewrite(stmt.message!, msgEffects)
+      ..parent = stmt;
+    if (condEffects.isEmpty) {
+      if (msgEffects.isEmpty) {
+        // The condition rewrote to ([], C) and the message rewrote to ([], M).
+        // The result is
+        //
+        // assert(C, M)
+        stmt.condition = cond..parent = stmt;
+        result = stmt;
+      } else {
+        // The condition rewrote to ([], C) and the message rewrote to (S*, M)
+        // where S* is non-empty.  The result is
+        //
+        // assert { if (C) {} else { S*; assert(false, M); }}
+        stmt.condition = new BoolLiteral(false)..parent = stmt;
+        result = new AssertBlock([
+          new IfStatement(
+              cond, new EmptyStatement(), new Block(msgEffects..add(stmt)))
+        ]);
+      }
+    } else {
+      if (msgEffects.isEmpty) {
+        // The condition rewrote to (S*, C) where S* is non-empty and the
+        // message rewrote to ([], M).  The result is
+        //
+        // assert { S*; assert(C, M); }
+        stmt.condition = cond..parent = stmt;
+        condEffects.add(stmt);
+      } else {
+        // The condition rewrote to (S0*, C) and the message rewrote to (S1*, M)
+        // where both S0* and S1* are non-empty.  The result is
+        //
+        // assert { S0*; if (C) {} else { S1*; assert(false, M); }}
+        stmt.condition = new BoolLiteral(false)..parent = stmt;
+        condEffects.add(new IfStatement(
+            cond, new EmptyStatement(), new Block(msgEffects..add(stmt))));
+      }
+      result = new AssertBlock(condEffects);
+    }
+    statements.add(result);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  Statement visitDelimited(Statement stmt) {
+    var saved = statements;
+    statements = <Statement>[];
+    transform(stmt);
+    Statement result =
+        statements.length == 1 ? statements.first : new Block(statements);
+    statements = saved;
+    return result;
+  }
+
+  @override
+  TreeNode visitLabeledStatement(
+      LabeledStatement stmt, TreeNode? removalSentinel) {
+    stmt.body = visitDelimited(stmt.body)..parent = stmt;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitBreakStatement(BreakStatement stmt, TreeNode? removalSentinel) {
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitWhileStatement(WhileStatement stmt, TreeNode? removalSentinel) {
+    Statement body = visitDelimited(stmt.body);
+    List<Statement> effects = <Statement>[];
+    Expression cond = expressionRewriter!.rewrite(stmt.condition, effects);
+    if (effects.isEmpty) {
+      stmt.condition = cond..parent = stmt;
+      stmt.body = body..parent = stmt;
+      statements.add(stmt);
+    } else {
+      // The condition rewrote to a non-empty sequence of statements S* and
+      // value V.  Rewrite the loop to:
+      //
+      // L: while (true) {
+      //   S*
+      //   if (V) {
+      //     [body]
+      //   else {
+      //     break L;
+      //   }
+      // }
+      LabeledStatement labeled = new LabeledStatement(stmt);
+      stmt.condition = new BoolLiteral(true)..parent = stmt;
+      effects.add(new IfStatement(cond, body, new BreakStatement(labeled)));
+      stmt.body = new Block(effects)..parent = stmt;
+      statements.add(labeled);
+    }
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitDoStatement(DoStatement stmt, TreeNode? removalSentinel) {
+    Statement body = visitDelimited(stmt.body);
+    List<Statement> effects = <Statement>[];
+    stmt.condition = expressionRewriter!.rewrite(stmt.condition, effects)
+      ..parent = stmt;
+    if (effects.isNotEmpty) {
+      // The condition rewrote to a non-empty sequence of statements S* and
+      // value V.  Add the statements to the end of the loop body.
+      Block block = body is Block ? body : body = new Block(<Statement>[body]);
+      for (var effect in effects) {
+        block.statements.add(effect);
+        effect.parent = body;
+      }
+    }
+    stmt.body = body..parent = stmt;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitForStatement(ForStatement stmt, TreeNode? removalSentinel) {
+    // Because of for-loop scoping and variable capture, it is tricky to deal
+    // with await in the loop's variable initializers or update expressions.
+    bool isSimple = true;
+    int length = stmt.variables.length;
+    List<List<Statement>> initEffects =
+        new List<List<Statement>>.generate(length, (int i) {
+      VariableDeclaration decl = stmt.variables[i];
+      List<Statement> statements = <Statement>[];
+      if (decl.initializer != null) {
+        decl.initializer = expressionRewriter!
+            .rewrite(decl.initializer!, statements)
+          ..parent = decl;
+      }
+      isSimple = isSimple && statements.isEmpty;
+      return statements;
+    });
+
+    length = stmt.updates.length;
+    List<List<Statement>> updateEffects =
+        new List<List<Statement>>.generate(length, (int i) {
+      List<Statement> statements = <Statement>[];
+      stmt.updates[i] = expressionRewriter!.rewrite(stmt.updates[i], statements)
+        ..parent = stmt;
+      isSimple = isSimple && statements.isEmpty;
+      return statements;
+    });
+
+    Statement body = visitDelimited(stmt.body);
+    Expression? cond = stmt.condition;
+    List<Statement>? condEffects;
+    if (cond != null) {
+      condEffects = <Statement>[];
+      cond = expressionRewriter!.rewrite(stmt.condition!, condEffects);
+    }
+
+    if (isSimple) {
+      // If the condition contains await, we use a translation like the one for
+      // while loops, but leaving the variable declarations and the update
+      // expressions in place.
+      if (condEffects == null || condEffects.isEmpty) {
+        if (cond != null) stmt.condition = cond..parent = stmt;
+        stmt.body = body..parent = stmt;
+        statements.add(stmt);
+      } else {
+        LabeledStatement labeled = new LabeledStatement(stmt);
+        // No condition in a for loop is the same as true.
+        stmt.condition = null;
+        condEffects
+            .add(new IfStatement(cond!, body, new BreakStatement(labeled)));
+        stmt.body = new Block(condEffects)..parent = stmt;
+        statements.add(labeled);
+      }
+      return removalSentinel ?? EmptyStatement();
+    }
+
+    // If the rewrite of the initializer or update expressions produces a
+    // non-empty sequence of statements then the loop is desugared.  If the loop
+    // has the form:
+    //
+    // label: for (Type x = init; cond; update) body
+    //
+    // it is translated as if it were:
+    //
+    // {
+    //   bool first = true;
+    //   Type temp;
+    //   label: while (true) {
+    //     Type x;
+    //     if (first) {
+    //       first = false;
+    //       x = init;
+    //     } else {
+    //       x = temp;
+    //       update;
+    //     }
+    //     if (cond) {
+    //       body;
+    //       temp = x;
+    //     } else {
+    //       break;
+    //     }
+    //   }
+    // }
+
+    // Place the loop variable declarations at the beginning of the body
+    // statements and move their initializers to a guarded list of statements.
+    // Add assignments to the loop variables from the previous iterations temp
+    // variables before the updates.
+    //
+    // temps.first is the flag 'first'.
+    // TODO(kmillikin) bool type for first.
+    List<VariableDeclaration> temps = <VariableDeclaration>[
+      new VariableDeclaration.forValue(new BoolLiteral(true), isFinal: false)
+    ];
+    List<Statement> loopBody = <Statement>[];
+    List<Statement> initializers = <Statement>[
+      new ExpressionStatement(
+          new VariableSet(temps.first, new BoolLiteral(false)))
+    ];
+    List<Statement> updates = <Statement>[];
+    List<Statement> newBody = <Statement>[body];
+    for (int i = 0; i < stmt.variables.length; ++i) {
+      VariableDeclaration decl = stmt.variables[i];
+      temps.add(new VariableDeclaration(null, type: decl.type));
+      loopBody.add(decl);
+      if (decl.initializer != null) {
+        initializers.addAll(initEffects[i]);
+        initializers.add(
+            new ExpressionStatement(new VariableSet(decl, decl.initializer!)));
+        decl.initializer = null;
+      }
+      updates.add(new ExpressionStatement(
+          new VariableSet(decl, new VariableGet(temps.last))));
+      newBody.add(new ExpressionStatement(
+          new VariableSet(temps.last, new VariableGet(decl))));
+    }
+    // Add the updates to their guarded list of statements.
+    for (int i = 0; i < stmt.updates.length; ++i) {
+      updates.addAll(updateEffects[i]);
+      updates.add(new ExpressionStatement(stmt.updates[i]));
+    }
+    // Initializers or updates could be empty.
+    loopBody.add(new IfStatement(new VariableGet(temps.first),
+        new Block(initializers), new Block(updates)));
+
+    LabeledStatement labeled = new LabeledStatement(null);
+    if (cond != null) {
+      loopBody.addAll(condEffects!);
+    } else {
+      cond = new BoolLiteral(true);
+    }
+    loopBody.add(
+        new IfStatement(cond, new Block(newBody), new BreakStatement(labeled)));
+    labeled.body =
+        new WhileStatement(new BoolLiteral(true), new Block(loopBody))
+          ..parent = labeled;
+    statements.add(new Block(<Statement>[]
+      ..addAll(temps)
+      ..add(labeled)));
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitForInStatement(ForInStatement stmt, TreeNode? removalSentinel) {
+    if (stmt.isAsync) {
+      // Transform
+      //
+      //   await for (T variable in <stream-expression>) { ... }
+      //
+      // To (in product mode):
+      //
+      //   {
+      //     :stream = <stream-expression>;
+      //     _StreamIterator<T> :for-iterator = new _StreamIterator<T>(:stream);
+      //     try {
+      //       while (await :for-iterator.moveNext()) {
+      //         T <variable> = :for-iterator.current;
+      //         ...
+      //       }
+      //     } finally {
+      //       if (:for-iterator._subscription != null)
+      //           await :for-iterator.cancel();
+      //     }
+      //   }
+      //
+      // Or (in non-product mode):
+      //
+      //   {
+      //     :stream = <stream-expression>;
+      //     _StreamIterator<T> :for-iterator = new _StreamIterator<T>(:stream);
+      //     try {
+      //       while (let _ = _asyncStarMoveNextHelper(:stream) in
+      //           await :for-iterator.moveNext()) {
+      //         T <variable> = :for-iterator.current;
+      //         ...
+      //       }
+      //     } finally {
+      //       if (:for-iterator._subscription != null)
+      //           await :for-iterator.cancel();
+      //     }
+      //   }
+      var valueVariable = stmt.variable;
+
+      var streamVariable = new VariableDeclaration(ContinuationVariables.stream,
+          initializer: stmt.iterable,
+          type: stmt.iterable.getStaticType(staticTypeContext));
+
+      final streamIteratorType = new InterfaceType(helper.streamIteratorClass,
+          staticTypeContext.nullable, [valueVariable.type]);
+      var forIteratorVariable = VariableDeclaration(
+          ContinuationVariables.forIterator,
+          initializer: new ConstructorInvocation(
+              helper.streamIteratorConstructor,
+              new Arguments(<Expression>[new VariableGet(streamVariable)],
+                  types: [valueVariable.type])),
+          type: streamIteratorType);
+
+      // await :for-iterator.moveNext()
+      var condition = new AwaitExpression(new InstanceInvocation(
+          InstanceAccessKind.Instance,
+          VariableGet(forIteratorVariable),
+          helper.streamIteratorMoveNext.name,
+          new Arguments([]),
+          interfaceTarget: helper.streamIteratorMoveNext,
+          functionType:
+              helper.streamIteratorMoveNext.getterType as FunctionType))
+        ..fileOffset = stmt.fileOffset;
+
+      Expression whileCondition;
+      if (helper.productMode) {
+        whileCondition = condition;
+      } else {
+        // _asyncStarMoveNextHelper(:stream)
+        var asyncStarMoveNextCall = new StaticInvocation(
+            helper.asyncStarMoveNextHelper,
+            new Arguments([new VariableGet(streamVariable)]))
+          ..fileOffset = stmt.fileOffset;
+
+        // let _ = asyncStarMoveNextCall in (condition)
+        whileCondition = new Let(
+            new VariableDeclaration(null, initializer: asyncStarMoveNextCall),
+            condition);
+      }
+
+      // T <variable> = :for-iterator.current;
+      valueVariable.initializer = new InstanceGet(InstanceAccessKind.Instance,
+          VariableGet(forIteratorVariable), helper.streamIteratorCurrent.name,
+          interfaceTarget: helper.streamIteratorCurrent,
+          resultType: valueVariable.type)
+        ..fileOffset = stmt.bodyOffset;
+      valueVariable.initializer!.parent = valueVariable;
+
+      var whileBody = new Block(<Statement>[valueVariable, stmt.body]);
+      var tryBody = new WhileStatement(whileCondition, whileBody);
+
+      // if (:for-iterator._subscription != null) await :for-iterator.cancel();
+      final DartType subscriptionType =
+          Substitution.fromInterfaceType(streamIteratorType).substituteType(
+              helper.coreTypes.streamIteratorSubscription.getterType);
+      var tryFinalizer = new IfStatement(
+          new Not(new EqualsNull(new InstanceGet(
+              InstanceAccessKind.Instance,
+              VariableGet(forIteratorVariable),
+              helper.coreTypes.streamIteratorSubscription.name,
+              interfaceTarget: helper.coreTypes.streamIteratorSubscription,
+              resultType: subscriptionType))),
+          new ExpressionStatement(new AwaitExpression(new InstanceInvocation(
+              InstanceAccessKind.Instance,
+              VariableGet(forIteratorVariable),
+              helper.streamIteratorCancel.name,
+              new Arguments(<Expression>[]),
+              interfaceTarget: helper.streamIteratorCancel,
+              functionType:
+                  helper.streamIteratorCancel.getterType as FunctionType))),
+          null);
+
+      var tryFinally = new TryFinally(tryBody, tryFinalizer);
+
+      var block = new Block(
+          <Statement>[streamVariable, forIteratorVariable, tryFinally]);
+      transform<Statement>(block);
+      return removalSentinel ?? EmptyStatement();
+    } else {
+      super.visitForInStatement(stmt, removalSentinel);
+      return removalSentinel ?? EmptyStatement();
+    }
+  }
+
+  @override
+  TreeNode visitSwitchStatement(
+      SwitchStatement stmt, TreeNode? removalSentinel) {
+    stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
+      ..parent = stmt;
+    for (var switchCase in stmt.cases) {
+      // Expressions in switch cases cannot contain await so they do not need to
+      // be translated.
+      switchCase.body = visitDelimited(switchCase.body)..parent = switchCase;
+    }
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitContinueSwitchStatement(
+      ContinueSwitchStatement stmt, TreeNode? removalSentinel) {
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitIfStatement(IfStatement stmt, TreeNode? removalSentinel) {
+    stmt.condition = expressionRewriter!.rewrite(stmt.condition, statements)
+      ..parent = stmt;
+    stmt.then = visitDelimited(stmt.then)..parent = stmt;
+    if (stmt.otherwise != null) {
+      stmt.otherwise = visitDelimited(stmt.otherwise!)..parent = stmt;
+    }
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitTryCatch(TryCatch stmt, TreeNode? removalSentinel) {
+    ++currentTryDepth;
+    stmt.body = visitDelimited(stmt.body)..parent = stmt;
+    --currentTryDepth;
+
+    ++currentCatchDepth;
+    for (var clause in stmt.catches) {
+      clause.body = visitDelimited(clause.body)..parent = clause;
+    }
+    --currentCatchDepth;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitTryFinally(TryFinally stmt, TreeNode? removalSentinel) {
+    ++currentTryDepth;
+    stmt.body = visitDelimited(stmt.body)..parent = stmt;
+    --currentTryDepth;
+    ++currentCatchDepth;
+    stmt.finalizer = visitDelimited(stmt.finalizer)..parent = stmt;
+    --currentCatchDepth;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
+    stmt.expression = expressionRewriter!.rewrite(stmt.expression, statements)
+      ..parent = stmt;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitVariableDeclaration(
+      VariableDeclaration stmt, TreeNode? removalSentinel) {
+    if (stmt.initializer != null) {
+      stmt.initializer = expressionRewriter!
+          .rewrite(stmt.initializer!, statements)
+        ..parent = stmt;
+    }
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitFunctionDeclaration(
+      FunctionDeclaration stmt, TreeNode? removalSentinel) {
+    stmt.function = transform(stmt.function)..parent = stmt;
+    statements.add(stmt);
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode defaultExpression(TreeNode node, TreeNode? removalSentinel) =>
+      throw 'unreachable $node';
+}
+
+class AsyncStarFunctionRewriter extends AsyncRewriterBase {
+  VariableDeclaration? controllerVariable;
+
+  AsyncStarFunctionRewriter(HelperNodes helper, FunctionNode enclosingFunction,
+      StatefulStaticTypeContext staticTypeContext)
+      : super(helper, enclosingFunction, staticTypeContext);
+
+  FunctionNode rewrite() {
+    var statements = <Statement>[];
+
+    final elementType = elementTypeFromReturnType(helper.streamClass);
+
+    // _AsyncStarStreamController<T> :controller;
+    controllerVariable = new VariableDeclaration(
+        ContinuationVariables.controller,
+        type: new InterfaceType(helper.asyncStarStreamControllerClass,
+            staticTypeContext.nullable, [elementType]));
+    statements.add(controllerVariable!);
+
+    // dynamic :controller_stream;
+    VariableDeclaration controllerStreamVariable =
+        new VariableDeclaration(ContinuationVariables.controllerStreamVar);
+    statements.add(controllerStreamVariable);
+
+    setupAsyncContinuations(statements);
+
+    // :controller = new _AsyncStarStreamController<T>(:async_op);
+    var arguments = new Arguments(
+        <Expression>[new VariableGet(nestedClosureVariable)],
+        types: [elementType]);
+    var buildController = new ConstructorInvocation(
+        helper.asyncStarStreamControllerConstructor, arguments)
+      ..fileOffset = enclosingFunction.fileOffset;
+    var setController = new ExpressionStatement(
+        new VariableSet(controllerVariable!, buildController));
+    statements.add(setController);
+
+    // :controller_stream = :controller.stream;
+    var completerGet = new VariableGet(controllerVariable!);
+    statements.add(new ExpressionStatement(new VariableSet(
+        controllerStreamVariable,
+        new InstanceGet(InstanceAccessKind.Instance, completerGet,
+            helper.asyncStarStreamControllerStream.name,
+            interfaceTarget: helper.asyncStarStreamControllerStream,
+            resultType: Substitution.fromInterfaceType(
+                    controllerVariable!.type as InterfaceType)
+                .substituteType(
+                    helper.asyncStarStreamControllerStream.getterType)))));
+
+    // return :controller_stream;
+    var returnStatement =
+        new ReturnStatement(new VariableGet(controllerStreamVariable));
+    statements.add(returnStatement);
+
+    enclosingFunction.body = new Block(statements)..parent = enclosingFunction;
+    enclosingFunction.asyncMarker = AsyncMarker.Sync;
+    return enclosingFunction;
+  }
+
+  @override
+  Statement buildWrappedBody() {
+    ++currentTryDepth;
+    Statement body = super.buildWrappedBody();
+    --currentTryDepth;
+
+    var finallyBody = new ExpressionStatement(new InstanceInvocation(
+        InstanceAccessKind.Instance,
+        new VariableGet(controllerVariable!),
+        helper.asyncStarStreamControllerClose.name,
+        new Arguments([]),
+        interfaceTarget: helper.asyncStarStreamControllerClose,
+        functionType:
+            helper.asyncStarStreamControllerClose.getterType as FunctionType));
+
+    var tryFinally = new TryFinally(body, new Block(<Statement>[finallyBody]));
+    return tryFinally;
+  }
+
+  @override
+  Statement buildCatchBody(VariableDeclaration exceptionVariable,
+      VariableDeclaration stackTraceVariable) {
+    return new ExpressionStatement(new InstanceInvocation(
+        InstanceAccessKind.Instance,
+        new VariableGet(controllerVariable!),
+        helper.asyncStarStreamControllerAddError.name,
+        new Arguments(<Expression>[
+          new VariableGet(exceptionVariable),
+          new VariableGet(stackTraceVariable)
+        ]),
+        interfaceTarget: helper.asyncStarStreamControllerAddError,
+        functionType: helper.asyncStarStreamControllerAddError.getterType
+            as FunctionType));
+  }
+
+  @override
+  Statement buildReturn(Statement body) {
+    // Async* functions cannot return a value.  The returns from the function
+    // have been translated into breaks from the labeled body.
+    return new Block(<Statement>[
+      body,
+      new ReturnStatement()..fileOffset = enclosingFunction.fileEndOffset,
+    ]);
+  }
+
+  @override
+  TreeNode visitYieldStatement(YieldStatement stmt, TreeNode? removalSentinel) {
+    Expression expr = expressionRewriter!.rewrite(stmt.expression, statements);
+
+    final Procedure addMethod = stmt.isYieldStar
+        ? helper.asyncStarStreamControllerAddStream
+        : helper.asyncStarStreamControllerAdd;
+    final FunctionType addMethodFunctionType = Substitution.fromInterfaceType(
+            controllerVariable!.type as InterfaceType)
+        .substituteType(addMethod.getterType) as FunctionType;
+    var addExpression = new InstanceInvocation(
+        InstanceAccessKind.Instance,
+        new VariableGet(controllerVariable!),
+        addMethod.name,
+        new Arguments(<Expression>[expr]),
+        interfaceTarget: addMethod,
+        functionType: addMethodFunctionType)
+      ..fileOffset = stmt.fileOffset;
+
+    statements.add(new IfStatement(
+        addExpression,
+        new ReturnStatement(new NullLiteral()),
+        createContinuationPoint()..fileOffset = stmt.fileOffset));
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  @override
+  TreeNode visitReturnStatement(
+      ReturnStatement node, TreeNode? removalSentinel) {
+    // Async* functions cannot return a value.
+    assert(node.expression == null || node.expression is NullLiteral);
+    statements
+        .add(new BreakStatement(labeledBody!)..fileOffset = node.fileOffset);
+    return removalSentinel ?? EmptyStatement();
+  }
+}
+
+class AsyncFunctionRewriter extends AsyncRewriterBase {
+  VariableDeclaration? returnVariable;
+  VariableDeclaration? asyncFutureVariable;
+  VariableDeclaration? isSyncVariable;
+
+  // In general an async functions such as
+  //
+  //     Future<X> foo() async { return <expr>; }
+  //
+  // can return as `<expr>` either X or Future<X>, i.e. it can return
+  // FutureOr<X>
+  //
+  // If we know it doesn't return any object of type `Future`, we can optimize
+  // the future completion process by avoiding some expensive `is Future<T>`
+  // type checks on the returned value.
+  late bool canReturnFuture;
+
+  AsyncFunctionRewriter(HelperNodes helper, FunctionNode enclosingFunction,
+      StatefulStaticTypeContext staticTypeContext)
+      : super(helper, enclosingFunction, staticTypeContext);
+
+  FunctionNode rewrite() {
+    var statements = <Statement>[];
+
+    // The original function return type should be Future<T> or FutureOr<T>
+    // because the function is async. If it was, we make a Completer<T>,
+    // otherwise we make a malformed type.  In a "Future<T> foo() async {}"
+    // function the body can either return a "T" or a "Future<T>" => a
+    // "FutureOr<T>".
+    DartType valueType = elementTypeFromReturnType(helper.futureClass);
+    if (valueType == const DynamicType()) {
+      valueType = elementTypeFromAsyncReturnType();
+    }
+    final DartType returnType =
+        FutureOrType(valueType, staticTypeContext.nullable);
+    final futureTypeArguments = <DartType>[valueType];
+
+    final futureType = InterfaceType(helper.futureImplClass,
+        staticTypeContext.nonNullable, futureTypeArguments);
+
+    // final _Future<T> :async_future = _Future<T>();
+    asyncFutureVariable = VariableDeclaration(ContinuationVariables.asyncFuture,
+        initializer: ConstructorInvocation(helper.futureImplConstructor,
+            Arguments([], types: futureTypeArguments))
+          ..fileOffset = enclosingFunction.body?.fileOffset ?? -1,
+        isFinal: true,
+        type: futureType);
+    statements.add(asyncFutureVariable!);
+
+    // bool :is_sync = false;
+    isSyncVariable = VariableDeclaration(ContinuationVariables.isSync,
+        initializer: BoolLiteral(false),
+        type: helper.coreTypes.boolLegacyRawType);
+    statements.add(isSyncVariable!);
+
+    // asy::FutureOr<T>* :return_value;
+    returnVariable = VariableDeclaration(ContinuationVariables.returnValue,
+        type: returnType);
+    statements.add(returnVariable!);
+
+    canReturnFuture = false;
+
+    setupAsyncContinuations(statements);
+
+    // If we could prove the function doesn't return a `Future` we change the
+    // type of `:return_value`.
+    if (!canReturnFuture) {
+      returnVariable!.type =
+          valueType.withDeclaredNullability(Nullability.nullable);
+    }
+
+    // :async_op(null, null);
+    final startStatement = ExpressionStatement(LocalFunctionInvocation(
+        nestedClosureVariable, Arguments([NullLiteral(), NullLiteral()]),
+        functionType: FunctionType(
+            [], const DynamicType(), staticTypeContext.nonNullable))
+      ..fileOffset = enclosingFunction.fileOffset);
+    statements.add(startStatement);
+
+    // :is_sync = true;
+    final setIsSync =
+        ExpressionStatement(VariableSet(isSyncVariable!, BoolLiteral(true)));
+    statements.add(setIsSync);
+
+    // return :async_future;
+    statements.add(ReturnStatement(VariableGet(asyncFutureVariable!)));
+
+    enclosingFunction.body = Block(statements)..parent = enclosingFunction;
+    enclosingFunction.asyncMarker = AsyncMarker.Sync;
+    return enclosingFunction;
+  }
+
+  // :async_op's try-catch catch body:
+  @override
+  Statement buildCatchBody(exceptionVariable, stackTraceVariable) {
+    // _completeOnAsyncError(_future, e, st, :is_sync)
+    return ExpressionStatement(StaticInvocation(
+        helper.completeOnAsyncError,
+        Arguments([
+          VariableGet(asyncFutureVariable!),
+          VariableGet(exceptionVariable),
+          VariableGet(stackTraceVariable),
+          VariableGet(isSyncVariable!)
+        ])));
+  }
+
+  // :async_op's try-catch try body:
+  @override
+  Statement buildReturn(Statement body) {
+    // Returns from the body have all been translated into assignments to the
+    // return value variable followed by a break from the labeled body.
+
+    // .. body ..
+    // _completeOnAsyncReturn(_future, returnVariable, :is_sync)
+    // return;
+    return Block(<Statement>[
+      body,
+      ExpressionStatement(StaticInvocation(
+          canReturnFuture
+              ? helper.completeOnAsyncReturn
+              : helper.completeWithNoFutureOnAsyncReturn,
+          Arguments([
+            VariableGet(asyncFutureVariable!),
+            VariableGet(returnVariable!),
+            VariableGet(isSyncVariable!)
+          ]))),
+      ReturnStatement()..fileOffset = enclosingFunction.fileEndOffset
+    ]);
+  }
+
+  @override
+  TreeNode visitReturnStatement(
+      ReturnStatement node, TreeNode? removalSentinel) {
+    final expression = node.expression;
+    if (expression != null && !canReturnFuture) {
+      final returnedType = staticTypeContext.getExpressionType(expression);
+      canReturnFuture = _canHoldFutureObject(returnedType);
+    }
+
+    final transformedExpression = node.expression == null
+        ? NullLiteral()
+        : expressionRewriter!.rewrite(node.expression!, statements);
+    statements.add(ExpressionStatement(
+        VariableSet(returnVariable!, transformedExpression)
+          ..fileOffset = node.fileOffset));
+    statements.add(BreakStatement(labeledBody!));
+    return removalSentinel ?? EmptyStatement();
+  }
+
+  bool _canHoldFutureObject(DartType type) {
+    // Any supertype or subtype of `FutureOr` may hold a `Future` object.
+    final env = staticTypeContext.typeEnvironment;
+
+    if (type is TypeParameterType) {
+      type = type.parameter.defaultType;
+    }
+
+    if (type is FutureOrType) return true;
+
+    // Any supertype of Future (which includes Future/Object/dynamic) can hold
+    // Future objects.
+    if (env.isSubtypeOf(
+        helper.futureType, type, SubtypeCheckMode.ignoringNullabilities)) {
+      return true;
+    }
+
+    // Any subtype of Future (which includes Future/_Future and any user-defined
+    // implementations) can hold Future objects.
+    if (env.isSubtypeOf(
+        type, helper.futureType, SubtypeCheckMode.ignoringNullabilities)) {
+      return true;
+    }
+    return false;
+  }
+}
+
+class HelperNodes {
+  final Procedure asyncErrorWrapper;
+  final Library asyncLibrary;
+  final Procedure asyncStarStreamControllerAdd;
+  final Procedure asyncStarStreamControllerAddError;
+  final Procedure asyncStarStreamControllerAddStream;
+  final Class asyncStarStreamControllerClass;
+  final Procedure asyncStarStreamControllerClose;
+  final Constructor asyncStarStreamControllerConstructor;
+  final Member asyncStarStreamControllerStream;
+  final Procedure asyncStarMoveNextHelper;
+  final Procedure asyncThenWrapper;
+  final Procedure awaitHelper;
+  final Procedure completeOnAsyncReturn;
+  final Procedure completeWithNoFutureOnAsyncReturn;
+  final Procedure completeOnAsyncError;
+  final Library coreLibrary;
+  final CoreTypes coreTypes;
+  final Class futureClass;
+  final Class futureOrClass;
+  final Class futureImplClass;
+  final Constructor futureImplConstructor;
+  final Class iterableClass;
+  final Class streamClass;
+  final Procedure streamIteratorCancel;
+  final Class streamIteratorClass;
+  final Constructor streamIteratorConstructor;
+  final Member streamIteratorCurrent;
+  final Procedure streamIteratorMoveNext;
+  final Constructor syncIterableConstructor;
+  final Class syncIteratorClass;
+  final Member syncIteratorCurrent;
+  final Member syncIteratorYieldEachIterable;
+  final Class boolClass;
+  final Procedure unsafeCast;
+  final DartType futureType;
+
+  bool productMode;
+
+  HelperNodes._(
+      this.asyncErrorWrapper,
+      this.asyncLibrary,
+      this.asyncStarStreamControllerAdd,
+      this.asyncStarStreamControllerAddError,
+      this.asyncStarStreamControllerAddStream,
+      this.asyncStarStreamControllerClass,
+      this.asyncStarStreamControllerClose,
+      this.asyncStarStreamControllerConstructor,
+      this.asyncStarStreamControllerStream,
+      this.asyncStarMoveNextHelper,
+      this.asyncThenWrapper,
+      this.awaitHelper,
+      this.completeOnAsyncReturn,
+      this.completeWithNoFutureOnAsyncReturn,
+      this.completeOnAsyncError,
+      this.coreLibrary,
+      this.coreTypes,
+      this.futureClass,
+      this.futureOrClass,
+      this.futureImplClass,
+      this.futureImplConstructor,
+      this.iterableClass,
+      this.streamClass,
+      this.streamIteratorCancel,
+      this.streamIteratorClass,
+      this.streamIteratorConstructor,
+      this.streamIteratorCurrent,
+      this.streamIteratorMoveNext,
+      this.syncIterableConstructor,
+      this.syncIteratorClass,
+      this.syncIteratorCurrent,
+      this.syncIteratorYieldEachIterable,
+      this.boolClass,
+      this.productMode,
+      this.unsafeCast)
+      : futureType = InterfaceType(
+            futureClass, Nullability.nonNullable, [DynamicType()]);
+
+  factory HelperNodes.fromCoreTypes(CoreTypes coreTypes, bool productMode) {
+    return new HelperNodes._(
+        coreTypes.asyncErrorWrapperHelperProcedure,
+        coreTypes.asyncLibrary,
+        coreTypes.asyncStarStreamControllerAdd,
+        coreTypes.asyncStarStreamControllerAddError,
+        coreTypes.asyncStarStreamControllerAddStream,
+        coreTypes.asyncStarStreamControllerClass,
+        coreTypes.asyncStarStreamControllerClose,
+        coreTypes.asyncStarStreamControllerDefaultConstructor,
+        coreTypes.asyncStarStreamControllerStream,
+        coreTypes.asyncStarMoveNextHelper,
+        coreTypes.asyncThenWrapperHelperProcedure,
+        coreTypes.awaitHelperProcedure,
+        coreTypes.completeOnAsyncReturn,
+        coreTypes.completeWithNoFutureOnAsyncReturn,
+        coreTypes.completeOnAsyncError,
+        coreTypes.coreLibrary,
+        coreTypes,
+        coreTypes.futureClass,
+        coreTypes.deprecatedFutureOrClass,
+        coreTypes.futureImplClass,
+        coreTypes.futureImplConstructor,
+        coreTypes.iterableClass,
+        coreTypes.streamClass,
+        coreTypes.streamIteratorCancel,
+        coreTypes.streamIteratorClass,
+        coreTypes.streamIteratorDefaultConstructor,
+        coreTypes.streamIteratorCurrent,
+        coreTypes.streamIteratorMoveNext,
+        coreTypes.syncIterableDefaultConstructor,
+        coreTypes.syncIteratorClass,
+        coreTypes.syncIteratorCurrent,
+        coreTypes.syncIteratorYieldEachIterable,
+        coreTypes.boolClass,
+        productMode,
+        coreTypes.index.getTopLevelMember('dart:_internal', 'unsafeCast')
+            as Procedure);
+  }
+}
diff --git a/pkg/vm/lib/transformations/deferred_loading.dart b/pkg/vm/lib/transformations/deferred_loading.dart
index b7dd321..91beb11 100644
--- a/pkg/vm/lib/transformations/deferred_loading.dart
+++ b/pkg/vm/lib/transformations/deferred_loading.dart
@@ -54,7 +54,7 @@
   // Fake imports from root library to every core library so they end up in
   // the same loading unit attributed to the user's root library.
   for (final vertex in map.values) {
-    if (vertex.library.importUri.scheme == "dart") {
+    if (vertex.library.importUri.isScheme("dart")) {
       root.successors.add(vertex);
       vertex.isLoadingRoot = false;
     }
diff --git a/pkg/vm/lib/transformations/ffi/common.dart b/pkg/vm/lib/transformations/ffi/common.dart
index c23bddb..22f2195 100644
--- a/pkg/vm/lib/transformations/ffi/common.dart
+++ b/pkg/vm/lib/transformations/ffi/common.dart
@@ -252,6 +252,7 @@
   final Procedure asFunctionTearoff;
   final Procedure lookupFunctionTearoff;
   final Procedure getNativeFieldFunction;
+  final Class finalizableClass;
   final Procedure reachabilityFenceFunction;
   final Procedure checkAbiSpecificIntegerMappingFunction;
 
@@ -479,6 +480,7 @@
             LibraryIndex.tearoffPrefix + 'lookupFunction'),
         getNativeFieldFunction = index.getTopLevelProcedure(
             'dart:nativewrappers', '_getNativeField'),
+        finalizableClass = index.getClass('dart:ffi', 'Finalizable'),
         reachabilityFenceFunction =
             index.getTopLevelProcedure('dart:_internal', 'reachabilityFence'),
         checkAbiSpecificIntegerMappingFunction = index.getTopLevelProcedure(
@@ -990,7 +992,7 @@
   for (Library lib in component.libraries) {
     // Skip real dart: libraries. dart:core imports dart:ffi, but that doesn't
     // mean we have to transform anything.
-    if (lib.importUri.scheme == "dart" && !lib.isSynthetic) continue;
+    if (lib.importUri.isScheme("dart") && !lib.isSynthetic) continue;
     allLibs.add(lib);
   }
   return allLibs;
diff --git a/pkg/vm/lib/transformations/ffi/finalizable.dart b/pkg/vm/lib/transformations/ffi/finalizable.dart
new file mode 100644
index 0000000..758465b
--- /dev/null
+++ b/pkg/vm/lib/transformations/ffi/finalizable.dart
@@ -0,0 +1,894 @@
+// 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';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/type_environment.dart';
+
+/// Implements the `Finalizable` semantics.
+///
+/// Designed to be mixed in. Calls super.visitXXX() to visit all nodes (except
+/// the ones created by this transformation).
+///
+/// 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 }`.
+mixin FinalizableTransformer on Transformer {
+  TypeEnvironment get env;
+  Procedure get reachabilityFenceFunction;
+  Class get finalizableClass;
+
+  StaticTypeContext? staticTypeContext;
+
+  _Scope? _currentScope;
+
+  bool thisIsFinalizable = false;
+
+  /// Traverses [f] in a newly created [_Scope].
+  ///
+  /// Any declarations added to this new scope will be fenced in
+  /// [appendFencesToStatement] and [appendFencesToExpression] if provided.
+  ///
+  /// Captures need to be precomputed (by [FindCaptures]) and can be passed in
+  /// through [precomputedCaptureScope].
+  ///
+  /// [declaresThis] is true if `this` in the scope is `Finalizable` and
+  /// defined.
+  T inScope<T>(
+    TreeNode node,
+    T Function() f, {
+    Statement? appendFencesToStatement,
+    Expression? appendFencesToExpression,
+    bool? declaresThis,
+    _Scope? precomputedCaptureScope,
+  }) {
+    final scope =
+        _Scope(node, parent: _currentScope, declaresThis: declaresThis);
+    if (precomputedCaptureScope != null) {
+      scope._capturesThis = precomputedCaptureScope._capturesThis;
+      scope._captures = precomputedCaptureScope._captures;
+    }
+    _currentScope = scope;
+    final result = f();
+    if (appendFencesToStatement != null) {
+      _appendReachabilityFences(
+          appendFencesToStatement, scope.toFenceThisScope);
+    }
+    if (appendFencesToExpression != null) {
+      appendFencesToExpression.replaceWith(_wrapReachabilityFences(
+          appendFencesToExpression, scope.toFenceThisScope));
+    }
+    assert(_currentScope == scope);
+    _currentScope = _currentScope!.parent;
+    return result;
+  }
+
+  Map<LocalFunction, _Scope> _precomputedCaptures = {};
+
+  _Scope? _precomputeCaptures(LocalFunction node) {
+    if (_currentScope!.allDeclarationsIsEmpty) {
+      // There's nothing we can capture.
+      return null;
+    }
+    final lookup = _precomputedCaptures[node];
+    if (lookup != null) {
+      return lookup;
+    }
+    final visitor =
+        FindCaptures(_currentScope!, thisIsFinalizable, _isFinalizable);
+    visitor.visitLocalFunction(node);
+    _precomputedCaptures = visitor.precomputedScopes;
+    return _precomputedCaptures[node]!;
+  }
+
+  @override
+  visitField(Field node) {
+    assert(staticTypeContext == null);
+    staticTypeContext = StaticTypeContext(node, env);
+    assert(_currentScope == null);
+    assert(thisIsFinalizable == false);
+    thisIsFinalizable = _thisIsFinalizableFromMember(node);
+    final result = inScope(
+      node,
+      () => super.visitField(node),
+      declaresThis: thisIsFinalizable,
+    );
+    thisIsFinalizable = false;
+    staticTypeContext = null;
+    return result;
+  }
+
+  @override
+  visitConstructor(Constructor node) {
+    assert(staticTypeContext == null);
+    staticTypeContext = StaticTypeContext(node, env);
+    assert(_currentScope == null);
+    assert(thisIsFinalizable == false);
+    thisIsFinalizable = _thisIsFinalizableFromMember(node);
+    final result = inScope(
+      node,
+      () => super.visitConstructor(node),
+      appendFencesToStatement: node.function.body,
+      declaresThis: thisIsFinalizable,
+    );
+    thisIsFinalizable = false;
+    staticTypeContext = null;
+    return result;
+  }
+
+  @override
+  visitProcedure(Procedure node) {
+    assert(staticTypeContext == null);
+    staticTypeContext = StaticTypeContext(node, env);
+    assert(_currentScope == null);
+    assert(thisIsFinalizable == false);
+    thisIsFinalizable = _thisIsFinalizableFromMember(node);
+    final result = inScope(
+      node,
+      () => super.visitProcedure(node),
+      appendFencesToStatement: node.function.body,
+      declaresThis: thisIsFinalizable,
+    );
+    thisIsFinalizable = false;
+    staticTypeContext = null;
+    return result;
+  }
+
+  @override
+  TreeNode visitBlock(Block node) {
+    return inScope(
+      node,
+      () => super.visitBlock(node),
+      appendFencesToStatement: node,
+    );
+  }
+
+  @override
+  TreeNode visitForInStatement(ForInStatement node) {
+    return inScope(
+      node,
+      () => super.visitForInStatement(node),
+      appendFencesToStatement: node.body,
+    );
+  }
+
+  @override
+  TreeNode visitForStatement(ForStatement node) {
+    return inScope(
+      node,
+      () => super.visitForStatement(node),
+      appendFencesToStatement: node.body,
+    );
+  }
+
+  @override
+  TreeNode visitLet(Let node) {
+    return inScope(
+      node,
+      () => super.visitLet(node),
+      appendFencesToExpression: node.body,
+    );
+  }
+
+  @override
+  TreeNode visitFunctionDeclaration(FunctionDeclaration node) {
+    return inScope(
+      node,
+      () => super.visitFunctionDeclaration(node),
+      appendFencesToStatement: node.function.body,
+      precomputedCaptureScope: _precomputeCaptures(node),
+    );
+  }
+
+  @override
+  TreeNode visitFunctionExpression(FunctionExpression node) {
+    return inScope(
+      node,
+      () => super.visitFunctionExpression(node),
+      appendFencesToStatement: node.function.body,
+      precomputedCaptureScope: _precomputeCaptures(node),
+    );
+  }
+
+  @override
+  TreeNode visitTryCatch(TryCatch node) {
+    return inScope(
+      node,
+      () => super.visitTryCatch(node),
+    );
+  }
+
+  @override
+  TreeNode visitCatch(Catch node) {
+    return inScope(
+      node,
+      () => super.visitCatch(node),
+    );
+  }
+
+  @override
+  TreeNode visitSwitchStatement(SwitchStatement node) {
+    return inScope(
+      node,
+      () => super.visitSwitchStatement(node),
+    );
+  }
+
+  @override
+  TreeNode visitVariableDeclaration(VariableDeclaration node) {
+    if (_currentScope == null) {
+      // Global variable.
+      return super.visitVariableDeclaration(node);
+    }
+    if (_isFinalizable(node.type)) {
+      _currentScope!.addDeclaration(node);
+    }
+    return super.visitVariableDeclaration(node);
+  }
+
+  @override
+  TreeNode visitVariableSet(VariableSet node) {
+    node = super.visitVariableSet(node) as VariableSet;
+    if (!_isFinalizable(node.variable.type)) {
+      return node;
+    }
+
+    final expression = node.value;
+
+    final newExpression = _wrapReachabilityFences(
+      expression,
+      [VariableGet(node.variable)],
+    );
+
+    node.value = newExpression;
+    newExpression.parent = node;
+
+    return node;
+  }
+
+  @override
+  TreeNode visitReturnStatement(ReturnStatement node) {
+    final declarations = _currentScope!.toFenceReturn;
+    node = super.visitReturnStatement(node) as ReturnStatement;
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    final expression = node.expression;
+    if (expression == null) {
+      final newStatement = Block([
+        ..._reachabilityFences(declarations),
+        node,
+      ]);
+      return newStatement;
+    }
+
+    final newExpression = _wrapReachabilityFences(expression, declarations);
+
+    node.expression = newExpression;
+    newExpression.parent = node;
+
+    return node;
+  }
+
+  /// The async transform runs after this transform. It transforms
+  /// [YieldStatement]s in async* functions into:
+  /// ```
+  /// _AsyncStarStreamController controller;
+  /// if(controller.add(...){
+  ///   return ...
+  /// } else {
+  ///   yield ...
+  /// }
+  /// ```
+  /// We don't want to run this transform after the async transform because that
+  /// introduces new scoping and control flow and it would create another
+  /// traversal over the AST.
+  /// So, we need to insert fences for yields as if they were returns in async*
+  /// functions.
+  ///
+  /// However, there is more. The body of async* and sync* functions is
+  /// transformed into a 'closure', which branches on the yield index and is
+  /// executed multiple times. The context of this closure is restored on
+  /// re-execution. These two things make it a continuation.
+  /// The [YieldStatement]s are compiled into returns from that closure.
+  /// When inlining the iterator machinery and eleminating dead code, the
+  /// compiler can see that we will never execute a re-entry if we just ask for
+  /// only the first value of a stream from a sync* function.
+  /// So, we need to insert fences for yields as if they were returns in sync*
+  /// functions as well.
+  @override
+  TreeNode visitYieldStatement(YieldStatement node) {
+    final declarations = _currentScope!.toFenceReturn;
+    node = super.visitYieldStatement(node) as YieldStatement;
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    final newExpression =
+        _wrapReachabilityFences(node.expression, declarations);
+
+    node.expression = newExpression;
+    newExpression.parent = node;
+
+    return node;
+  }
+
+  /// [AwaitExpression]s are transformed into [YieldStatement]s by the
+  /// async transform. See the comment on [visitYieldStatement].
+  @override
+  TreeNode visitAwaitExpression(AwaitExpression node) {
+    final declarations = _currentScope!.toFenceReturn;
+    node = super.visitAwaitExpression(node) as AwaitExpression;
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    final newExpression = _wrapReachabilityFences(node.operand, declarations);
+
+    node.operand = newExpression;
+    newExpression.parent = node;
+
+    return node;
+  }
+
+  @override
+  TreeNode visitThrow(Throw node) {
+    final declarations = _currentScope!.toFenceThrow(
+        staticTypeContext!.getExpressionType(node.expression), env);
+    node = super.visitThrow(node) as Throw;
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    final newExpression =
+        _wrapReachabilityFences(node.expression, declarations);
+
+    node.expression = newExpression;
+    newExpression.parent = node;
+
+    return node;
+  }
+
+  @override
+  TreeNode visitRethrow(Rethrow node) {
+    final declarations = _currentScope!.toFenceRethrow(
+      _currentScope!.rethrowType,
+      env,
+    );
+    node = super.visitRethrow(node) as Rethrow;
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    return BlockExpression(
+      Block(<Statement>[
+        ..._reachabilityFences(declarations),
+      ]),
+      node,
+    );
+  }
+
+  @override
+  TreeNode visitBreakStatement(BreakStatement node) {
+    final declarations = _currentScope!.toFenceBreak(node.target);
+
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    final newStatement = Block([
+      ..._reachabilityFences(declarations),
+      node,
+    ]);
+    return newStatement;
+  }
+
+  @override
+  TreeNode visitLabeledStatement(LabeledStatement node) {
+    _currentScope!._labels.add(node);
+    return super.visitLabeledStatement(node);
+  }
+
+  @override
+  TreeNode visitContinueSwitchStatement(ContinueSwitchStatement node) {
+    final switchStatement = node.target.parent as SwitchStatement;
+    final declarations = _currentScope!.toFenceSwitchContinue(switchStatement);
+
+    if (declarations.isEmpty) {
+      return node;
+    }
+
+    final newStatement = Block([
+      ..._reachabilityFences(declarations),
+      node,
+    ]);
+    return newStatement;
+  }
+
+  /// Cache for [isFinalizable].
+  ///
+  /// Speeds up the type checks by about a factor of 2 on Flutter Gallery.
+  Map<DartType, bool> _isFinalizableCache = {};
+
+  /// Whether [type] is something that subtypes `FutureOr<Finalizable?>?`.
+  bool _isFinalizable(DartType type) {
+    final cached = _isFinalizableCache[type];
+    if (cached != null) {
+      return cached;
+    }
+
+    final finalizableType = FutureOrType(
+        InterfaceType(finalizableClass, Nullability.nullable),
+        Nullability.nullable);
+    if (!env.isSubtypeOf(
+      type,
+      finalizableType,
+      SubtypeCheckMode.withNullabilities,
+    )) {
+      _isFinalizableCache[type] = false;
+      return false;
+    }
+
+    // Exclude never types.
+    final futureOfNeverType =
+        FutureOrType(NeverType.nullable(), Nullability.nullable);
+    final result = !env.isSubtypeOf(
+      type,
+      futureOfNeverType,
+      SubtypeCheckMode.ignoringNullabilities,
+    );
+    _isFinalizableCache[type] = result;
+    return result;
+  }
+
+  bool _thisIsFinalizableFromMember(Member member) {
+    final enclosingClass_ = member.enclosingClass;
+    if (enclosingClass_ == null) {
+      return false;
+    }
+    if (member.isAbstract) {
+      return false;
+    }
+    if (member.isExternal) {
+      return false;
+    }
+    if (member is Constructor && member.isSynthetic) {
+      return false;
+    }
+    if (member is Procedure && member.isStatic) {
+      return false;
+    }
+    return _isFinalizable(
+        InterfaceType(enclosingClass_, Nullability.nonNullable));
+  }
+
+  List<Statement> _reachabilityFences(List<Expression> declarations) =>
+      <Statement>[
+        for (var declaration in declarations)
+          ExpressionStatement(
+            StaticInvocation(
+              reachabilityFenceFunction,
+              Arguments(<Expression>[declaration]),
+            ),
+          ),
+      ];
+
+  /// Turns an [expression] into a block expression with reachability fences.
+  ///
+  /// ```
+  /// block {
+  /// final <expression type> #t1 = <expression>;
+  /// _in::reachabilityFence(finalizable0);
+  /// _in::reachabilityFence(finalizable1);
+  /// // ..
+  /// } =>#t1
+  /// ```
+  ///
+  /// Note that this modifies the parent of [expression].
+  Expression _wrapReachabilityFences(
+      Expression expression, List<Expression> declarations) {
+    final resultVariable = VariableDeclaration(
+        ':expressionValueWrappedFinalizable',
+        initializer: expression,
+        type: staticTypeContext!.getExpressionType(expression),
+        isFinal: true);
+    return BlockExpression(
+      Block(<Statement>[
+        resultVariable,
+        ..._reachabilityFences(declarations),
+      ]),
+      VariableGet(resultVariable),
+    );
+  }
+
+  Statement _appendReachabilityFences(
+      Statement statement, List<Expression> declarations) {
+    if (declarations.isEmpty) {
+      return statement;
+    }
+    Block block = () {
+      if (statement is Block) {
+        return statement;
+      }
+      final replacement = Block(<Statement>[]);
+      statement.replaceWith(replacement);
+      replacement.statements.add(statement);
+      return replacement;
+    }();
+    if (block.statements.isEmpty ||
+        (!block.statements.last.endsWithAbnormalControlFlow)) {
+      block.statements.addAll(_reachabilityFences(declarations));
+    }
+    return block;
+  }
+}
+
+/// A lightweight version of the above transform that precomputes scopes.
+///
+/// We need to precompute scopes and captures because a variable can be captured
+/// later in a closure than the first return.
+///
+/// We cannot use the precomputed scopes for their declarations, because we
+/// could see returns in a scope before a declaration.
+class FindCaptures extends RecursiveVisitor<void> {
+  final bool Function(DartType) _isFinalizable;
+
+  final bool thisIsFinalizable;
+
+  final Map<LocalFunction, _Scope> precomputedScopes = {};
+
+  _Scope _currentScope;
+
+  FindCaptures(this._currentScope, this.thisIsFinalizable, this._isFinalizable);
+
+  void inScope(LocalFunction node, void Function() f) {
+    final scope = _Scope(node, parent: _currentScope, declaresThis: false);
+    assert(precomputedScopes[node] == null);
+    precomputedScopes[node] = scope;
+    _currentScope = scope;
+    final result = f();
+    assert(_currentScope == scope);
+    _currentScope = _currentScope.parent!;
+    return result;
+  }
+
+  void visitLocalFunction(LocalFunction node) {
+    if (node is FunctionDeclaration) {
+      return visitFunctionDeclaration(node);
+    }
+    if (node is FunctionExpression) {
+      return visitFunctionExpression(node);
+    }
+    assert(false);
+  }
+
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    inScope(
+      node,
+      () => super.visitFunctionDeclaration(node),
+    );
+  }
+
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
+    inScope(
+      node,
+      () => super.visitFunctionExpression(node),
+    );
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    if (_isFinalizable(node.type)) {
+      _currentScope.addDeclaration(node);
+    }
+    super.visitVariableDeclaration(node);
+  }
+
+  @override
+  void visitVariableGet(VariableGet node) {
+    super.visitVariableGet(node);
+    if (_isFinalizable(node.variable.type)) {
+      _currentScope.addCapture(node.variable);
+    }
+  }
+
+  @override
+  void visitVariableSet(VariableSet node) {
+    super.visitVariableSet(node);
+    if (_isFinalizable(node.variable.type)) {
+      _currentScope.addCapture(node.variable);
+    }
+  }
+
+  @override
+  void visitThisExpression(ThisExpression node) {
+    if (thisIsFinalizable) {
+      _currentScope.addCaptureThis();
+    }
+    super.visitThisExpression(node);
+  }
+}
+
+/// A scope contains all `Finalizable` declarations and captures.
+class _Scope {
+  /// Parent scope if any.
+  final _Scope? parent;
+
+  /// The [node] introducing this scope.
+  final TreeNode node;
+
+  /// The declarations in this scope.
+  ///
+  /// The list is mutable, because we populate it during visiting statements.
+  ///
+  /// We use a list rather than a set because declarations are unique and we'd
+  /// like to prevent arbitrary reorderings when generating code from this.
+  final List<VariableDeclaration> _declarations = [];
+
+  /// [ThisExpression] is not a [VariableDeclaration] and needs to be tracked
+  /// separately.
+  final bool declaresThis;
+
+  /// Labels defined in this scope.
+  ///
+  /// Used for seeing which declarations need to be fenced when encountering
+  /// a [BreakStatement];
+  final Set<LabeledStatement> _labels = {};
+
+  _Scope(this.node, {this.parent, bool? declaresThis})
+      : this.declaresThis = declaresThis ?? false,
+        this.allDeclarationsIsEmpty =
+            (parent?.allDeclarationsIsEmpty ?? true) &&
+                !(declaresThis ?? false);
+
+  void addDeclaration(VariableDeclaration declaration) {
+    _declarations.add(declaration);
+    allDeclarationsIsEmpty = false;
+  }
+
+  /// Whether [allDeclarations] is empty.
+  ///
+  /// Manually cached for performance.
+  bool allDeclarationsIsEmpty;
+
+  /// All declarations in this and parent scopes.
+  ///
+  /// Excluding `this`.
+  List<VariableDeclaration> get allDeclarations => [
+        ...?parent?.allDeclarations,
+        ..._declarations,
+      ];
+
+  bool get canCapture => node is LocalFunction;
+
+  /// Which of the ancestor scopes (or this) captures variables.
+  late final _Scope? capturingScope = () {
+    if (canCapture) {
+      return this;
+    }
+    return parent?.capturingScope;
+  }();
+
+  Map<VariableDeclaration, bool>? _captures;
+
+  Map<VariableDeclaration, bool> get captures {
+    if (_captures != null) {
+      return _captures!;
+    }
+
+    assert(canCapture);
+    _captures = {for (var d in parent!.allDeclarations) d: false};
+    return _captures!;
+  }
+
+  bool _capturesThis = false;
+
+  void addCapture(VariableDeclaration declaration) {
+    final capturingScope_ = capturingScope;
+    if (capturingScope_ == null) {
+      // We're not in a nested closure.
+      return;
+    }
+
+    final captures = capturingScope_.captures;
+    if (!captures.containsKey(declaration)) {
+      // This is a local variable, not a captured one.
+      return;
+    }
+    captures[declaration] = true;
+
+    capturingScope_.parent?.addCapture(declaration);
+  }
+
+  void addCaptureThis() {
+    final capturingScope_ = capturingScope;
+    if (capturingScope_ == null) {
+      // We're not in a nested closure.
+      return;
+    }
+
+    capturingScope_._capturesThis = true;
+
+    capturingScope_.parent?.addCaptureThis();
+  }
+
+  /// Get declarations in this scope.
+  List<Expression> get toFenceThisScope {
+    final captures = _captures;
+    return [
+      if (declaresThis || _capturesThis) ThisExpression(),
+      for (var d in _declarations) VariableGet(d),
+      if (captures != null)
+        for (var d in captures.entries.where((e) => e.value).map((e) => e.key))
+          VariableGet(d),
+    ];
+  }
+
+  /// Whether when a return is found, this is the last ancestor of which
+  /// declarations should be considered.
+  bool get scopesReturn {
+    assert(node is Block ||
+        node is Catch ||
+        node is ForInStatement ||
+        node is ForStatement ||
+        node is Let ||
+        node is LocalFunction ||
+        node is Member ||
+        node is SwitchStatement ||
+        node is TryCatch);
+    return node is Member || node is LocalFunction;
+  }
+
+  /// Get all declarations that should stay alive on a return.
+  ///
+  /// This include all declarations in scopes until we see a function scope.
+  List<Expression> get toFenceReturn {
+    return [
+      if (!scopesReturn) ...parent!.toFenceReturn,
+      ...toFenceThisScope,
+    ];
+  }
+
+  List<Expression> toFenceBreak(LabeledStatement label) {
+    if (_labels.contains(label)) {
+      return [];
+    }
+    return [
+      ...parent!.toFenceBreak(label),
+      ...toFenceThisScope,
+    ];
+  }
+
+  List<Expression> toFenceSwitchContinue(SwitchStatement switchStatement) {
+    if (node == switchStatement) {
+      return [];
+    }
+    return [
+      ...parent!.toFenceSwitchContinue(switchStatement),
+      ...toFenceThisScope,
+    ];
+  }
+
+  bool scopesThrow(DartType exceptionType, TypeEnvironment typeEnvironment) {
+    final node_ = node;
+    if (node_ is! TryCatch) {
+      return false;
+    }
+    final catches = node_.catches;
+    for (final catch_ in catches) {
+      if (typeEnvironment.isSubtypeOf(
+          exceptionType, catch_.guard, SubtypeCheckMode.withNullabilities)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  List<Expression> toFenceThrow(
+    DartType exceptionType,
+    TypeEnvironment typeEnvironment,
+  ) =>
+      [
+        if (!scopesThrow(exceptionType, typeEnvironment))
+          ...?parent?.toFenceThrow(exceptionType, typeEnvironment),
+        ...toFenceThisScope,
+      ];
+
+  DartType get rethrowType {
+    final node_ = node;
+    if (node_ is Catch) {
+      return node_.guard;
+    }
+    return parent!.rethrowType;
+  }
+
+  List<Expression> toFenceRethrow(
+      DartType exceptionType, TypeEnvironment typeEnvironment) {
+    return [
+      if (!scopesThrow(exceptionType, typeEnvironment))
+        ...?parent?.toFenceRethrow(exceptionType, typeEnvironment),
+      if (scopesThrow(exceptionType, typeEnvironment))
+        ...?parent?.toFenceThrow(exceptionType, typeEnvironment),
+      ...toFenceThisScope,
+    ];
+  }
+}
+
+extension on Statement {
+  /// Whether this statement ends with abnormal control flow.
+  ///
+  /// Used to avoid inserting definitely dead reachabilityFences.
+  ///
+  /// Recurses into [Block]s to  inspect their last statement.
+  ///
+  /// Examples:
+  ///
+  /// ```dart
+  /// {
+  ///   // ...
+  ///   return 5;
+  /// }
+  /// ```
+  ///
+  /// returns true.
+  ///
+  /// ```dart
+  /// {
+  ///   {
+  ///     break L2;
+  ///   }
+  /// }
+  /// ```
+  ///
+  /// returns true.
+  ///
+  /// ```dart
+  /// print(foo);
+  /// ```
+  ///
+  /// returns false.
+  ///
+  /// Does not take into consideration full control flow, rather this is best
+  /// effort:
+  ///
+  /// ```dart
+  /// {
+  ///   return 42;
+  ///   var unreachable = true;
+  /// }
+  /// ```
+  ///
+  /// returns false, even though inserting fences is superfluous.
+  ///
+  /// These extra fences are not unsound.
+  bool get endsWithAbnormalControlFlow {
+    if (this is ReturnStatement) {
+      return true;
+    }
+    if (this is BreakStatement) {
+      return true;
+    }
+    if (this is ContinueSwitchStatement) {
+      return true;
+    }
+    if (this is Throw) {
+      return true;
+    }
+    if (this is Rethrow) {
+      return true;
+    }
+    final this_ = this;
+    if (this_ is Block) {
+      final statements = this_.statements;
+      if (statements.isEmpty) {
+        return false;
+      }
+      return statements.last.endsWithAbnormalControlFlow;
+    }
+    return false;
+  }
+}
diff --git a/pkg/vm/lib/transformations/ffi/use_sites.dart b/pkg/vm/lib/transformations/ffi/use_sites.dart
index ba1a0b1..0a765e3 100644
--- a/pkg/vm/lib/transformations/ffi/use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi/use_sites.dart
@@ -20,6 +20,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
 import 'package:kernel/library_index.dart' show LibraryIndex;
 import 'package:kernel/reference_from_index.dart';
 import 'package:kernel/target/targets.dart' show DiagnosticReporter;
@@ -30,6 +31,7 @@
 import 'native_type_cfe.dart';
 import 'common.dart'
     show NativeType, FfiTransformer, nativeTypeSizes, WORD_SIZE, UNKNOWN;
+import 'finalizable.dart';
 
 /// Checks and replaces calls to dart:ffi compound fields and methods.
 void transformLibraries(
@@ -51,22 +53,20 @@
     // If dart:ffi is not loaded (for real): do not do the transformation.
     return;
   }
-  final transformer = new _FfiUseSiteTransformer(
+  final transformer = new _FfiUseSiteTransformer2(
       index, coreTypes, hierarchy, diagnosticReporter, referenceFromIndex);
   libraries.forEach(transformer.visitLibrary);
 }
 
-/// Checks and replaces calls to dart:ffi compound fields and methods.
-class _FfiUseSiteTransformer extends FfiTransformer {
-  StaticTypeContext? _staticTypeContext;
-
-  bool get isFfiLibrary => currentLibrary == ffiLibrary;
-
-  // Used to create private top-level fields with unique names for each
-  // callback.
-  int callbackCount = 0;
-
-  _FfiUseSiteTransformer(
+/// Combines [_FfiUseSiteTransformer] and [FinalizableTransformer] into a single
+/// traversal.
+///
+/// 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 }`.
+class _FfiUseSiteTransformer2 extends FfiTransformer
+    with _FfiUseSiteTransformer, FinalizableTransformer {
+  _FfiUseSiteTransformer2(
       LibraryIndex index,
       CoreTypes coreTypes,
       ClassHierarchy hierarchy,
@@ -74,6 +74,26 @@
       ReferenceFromIndex? referenceFromIndex)
       : super(index, coreTypes, hierarchy, diagnosticReporter,
             referenceFromIndex);
+}
+
+/// Checks and replaces calls to dart:ffi compound fields and methods.
+///
+/// Designed to be mixed in. Calls super.visitXXX() to visit all nodes (except
+/// the ones created by this transformation).
+///
+/// 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 }`.
+mixin _FfiUseSiteTransformer on FfiTransformer {
+  StaticTypeContext? get staticTypeContext;
+
+  bool _inFfiTearoff = false;
+
+  bool get isFfiLibrary => currentLibrary == ffiLibrary;
+
+  // Used to create private top-level fields with unique names for each
+  // callback.
+  int callbackCount = 0;
 
   @override
   TreeNode visitLibrary(Library node) {
@@ -95,42 +115,34 @@
   }
 
   @override
-  visitField(Field node) {
-    _staticTypeContext = new StaticTypeContext(node, env);
-    var result = super.visitField(node);
-    _staticTypeContext = null;
-    return result;
-  }
-
-  @override
-  visitConstructor(Constructor node) {
-    _staticTypeContext = new StaticTypeContext(node, env);
-    var result = super.visitConstructor(node);
-    _staticTypeContext = null;
-    return result;
-  }
-
-  @override
   visitProcedure(Procedure node) {
-    if (isFfiLibrary && node.isExtensionMember) {
-      if (node == allocationTearoff ||
-          node == asFunctionTearoff ||
-          node == lookupFunctionTearoff) {
-        // Skip static checks and transformation for the tearoffs.
-        return node;
-      }
-    }
-
-    _staticTypeContext = new StaticTypeContext(node, env);
+    assert(_inFfiTearoff == false);
+    _inFfiTearoff = (isFfiLibrary &&
+        node.isExtensionMember &&
+        (node == allocationTearoff ||
+            node == asFunctionTearoff ||
+            node == lookupFunctionTearoff));
     final result = super.visitProcedure(node);
-    _staticTypeContext = null;
+    _inFfiTearoff = false;
     return result;
   }
 
   @override
-  visitStaticInvocation(StaticInvocation node) {
-    super.visitStaticInvocation(node);
+  TreeNode visitStaticInvocation(StaticInvocation node) {
+    final modifiedExpression = _visitStaticInvocation(node);
+    if (node == modifiedExpression) {
+      return super.visitStaticInvocation(node);
+    }
+    // We've just created this node. We're likely not going to need to transform
+    // this node itself. Visit its sub exprssions.
+    return super.defaultExpression(modifiedExpression);
+  }
 
+  /// Replaces nodes if they match. Does not invoke any super visit.
+  Expression _visitStaticInvocation(StaticInvocation node) {
+    if (_inFfiTearoff) {
+      return node;
+    }
     final Member target = node.target;
     try {
       if (target == abiSpecificIntegerPointerGetValue ||
@@ -141,7 +153,7 @@
           target == abiSpecificIntegerArraySetElemAt) {
         final pointer = node.arguments.positional[0];
         final pointerType =
-            pointer.getStaticType(_staticTypeContext!) as InterfaceType;
+            pointer.getStaticType(staticTypeContext!) as InterfaceType;
         _ensureNativeTypeValid(pointerType, pointer,
             allowCompounds: true, allowInlineArray: true);
 
@@ -279,7 +291,7 @@
         final DartType nativeType = InterfaceType(
             nativeFunctionClass, Nullability.legacy, [node.arguments.types[0]]);
         final Expression func = node.arguments.positional[0];
-        final DartType dartType = func.getStaticType(_staticTypeContext!);
+        final DartType dartType = func.getStaticType(staticTypeContext!);
 
         _ensureIsStaticFunction(func);
 
@@ -345,7 +357,7 @@
           }
 
           final DartType returnType =
-              exceptionalReturn.getStaticType(_staticTypeContext!);
+              exceptionalReturn.getStaticType(staticTypeContext!);
 
           if (!env.isSubtypeOf(returnType, funcType.returnType,
               SubtypeCheckMode.ignoringNullabilities)) {
@@ -746,13 +758,25 @@
 
   @override
   visitInstanceInvocation(InstanceInvocation node) {
-    super.visitInstanceInvocation(node);
+    final modifiedExpression = _visitInstanceInvocation(node);
+    if (node == modifiedExpression) {
+      return super.visitInstanceInvocation(node);
+    }
+    // We've just created this node. We're likely not going to need to transform
+    // this node itself. Visit its sub exprssions.
+    return super.defaultExpression(modifiedExpression);
+  }
 
+  /// Replaces nodes if they match. Does not invoke any super visit.
+  Expression _visitInstanceInvocation(InstanceInvocation node) {
+    if (_inFfiTearoff) {
+      return node;
+    }
     final Member target = node.interfaceTarget;
     try {
       if (target == elementAtMethod) {
         final DartType pointerType =
-            node.receiver.getStaticType(_staticTypeContext!);
+            node.receiver.getStaticType(staticTypeContext!);
         final DartType nativeType = _pointerTypeGetTypeArg(pointerType)!;
 
         _ensureNativeTypeValid(nativeType, node, allowCompounds: true);
diff --git a/pkg/vm/lib/transformations/lowering.dart b/pkg/vm/lib/transformations/lowering.dart
index f9e8fe3..4242ff4 100644
--- a/pkg/vm/lib/transformations/lowering.dart
+++ b/pkg/vm/lib/transformations/lowering.dart
@@ -5,13 +5,15 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/core_types.dart' show CoreTypes;
-import 'package:kernel/transformations/type_casts_optimizer.dart'
-    as typeCastsOptimizer show transformAsExpression;
 import 'package:kernel/type_environment.dart'
     show StaticTypeContext, TypeEnvironment;
+
 import 'package:vm/transformations/specializer/factory_specializer.dart';
+
 import 'late_var_init_transformer.dart' show LateVarInitTransformer;
 import 'list_literals_lowering.dart' show ListLiteralsLowering;
+import 'type_casts_optimizer.dart' as typeCastsOptimizer
+    show transformAsExpression;
 
 /// VM-specific lowering transformations and optimizations combined into a
 /// single transformation pass.
diff --git a/pkg/vm/lib/transformations/mixin_full_resolution.dart b/pkg/vm/lib/transformations/mixin_full_resolution.dart
new file mode 100644
index 0000000..27b156a
--- /dev/null
+++ b/pkg/vm/lib/transformations/mixin_full_resolution.dart
@@ -0,0 +1,252 @@
+// 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:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/clone.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/reference_from_index.dart';
+import 'package:kernel/target/targets.dart' show Target;
+import 'package:kernel/type_algebra.dart';
+
+/// Transforms the libraries in [libraries].
+/// Note that [referenceFromIndex] can be null, and is generally only needed
+/// when (ultimately) called from the incremental compiler.
+void transformLibraries(
+    Target targetInfo,
+    CoreTypes coreTypes,
+    ClassHierarchy hierarchy,
+    List<Library> libraries,
+    ReferenceFromIndex? referenceFromIndex) {
+  new MixinFullResolution(targetInfo, coreTypes, hierarchy)
+      .transform(libraries, referenceFromIndex);
+}
+
+/// Replaces all mixin applications with regular classes, cloning all fields
+/// and procedures from the mixed-in class, cloning all constructors from the
+/// base class.
+class MixinFullResolution {
+  final Target targetInfo;
+  final CoreTypes coreTypes;
+
+  /// The [ClassHierarchy] that should be used after applying this transformer.
+  /// If any class was updated, in general we need to create a new
+  /// [ClassHierarchy] instance, with new dispatch targets; or at least let
+  /// the existing instance know that some of its dispatch tables are not
+  /// valid anymore.
+  ClassHierarchy hierarchy;
+
+  MixinFullResolution(this.targetInfo, this.coreTypes, this.hierarchy);
+
+  /// Transform the given new [libraries].  It is expected that all other
+  /// libraries have already been transformed.
+  void transform(
+      List<Library> libraries, ReferenceFromIndex? referenceFromIndex) {
+    if (libraries.isEmpty) return;
+
+    var transformedClasses = new Set<Class>();
+
+    // Desugar all mixin application classes by copying in fields/methods from
+    // the mixin and constructors from the base class.
+    var processedClasses = new Set<Class>();
+    for (var library in libraries) {
+      for (var class_ in library.classes) {
+        transformClass(libraries, processedClasses, transformedClasses, class_,
+            referenceFromIndex);
+      }
+    }
+
+    // We might need to update the class hierarchy.
+    hierarchy =
+        hierarchy.applyMemberChanges(transformedClasses, findDescendants: true);
+  }
+
+  void transformClass(
+      List<Library> librariesToBeTransformed,
+      Set<Class> processedClasses,
+      Set<Class> transformedClasses,
+      Class class_,
+      ReferenceFromIndex? referenceFromIndex) {
+    // If this class was already handled then so were all classes up to the
+    // [Object] class.
+    if (!processedClasses.add(class_)) return;
+
+    Library enclosingLibrary = class_.enclosingLibrary;
+
+    if (!librariesToBeTransformed.contains(enclosingLibrary) &&
+        enclosingLibrary.importUri.isScheme("dart")) {
+      // If we're not asked to transform the platform libraries then we expect
+      // that they will be already transformed.
+      return;
+    }
+
+    // Ensure super classes have been transformed before this class.
+    if (class_.superclass != null) {
+      transformClass(librariesToBeTransformed, processedClasses,
+          transformedClasses, class_.superclass!, referenceFromIndex);
+    }
+
+    // If this is not a mixin application we don't need to make forwarding
+    // constructors in this class.
+    if (!class_.isMixinApplication) return;
+    assert(librariesToBeTransformed.contains(enclosingLibrary));
+
+    transformedClasses.add(class_);
+
+    // Clone fields and methods from the mixin class.
+    var substitution = getSubstitutionMap(class_.mixedInType!);
+    var cloner = new CloneVisitorWithMembers(typeSubstitution: substitution);
+
+    IndexedLibrary? indexedLibrary =
+        referenceFromIndex?.lookupLibrary(enclosingLibrary);
+    IndexedClass? indexedClass =
+        indexedLibrary?.lookupIndexedClass(class_.name);
+
+    if (class_.mixin.fields.isNotEmpty) {
+      // When we copy a field from the mixed in class, we remove any
+      // forwarding-stub getters/setters from the superclass, but copy their
+      // covariance-bits onto the new field.
+      var nonSetters = <Name, Procedure>{};
+      var setters = <Name, Procedure>{};
+      for (var procedure in class_.procedures) {
+        if (procedure.isSetter) {
+          setters[procedure.name] = procedure;
+        } else {
+          nonSetters[procedure.name] = procedure;
+        }
+      }
+
+      for (var field in class_.mixin.fields) {
+        Reference? fieldReference =
+            indexedClass?.lookupFieldReference(field.name);
+        Reference? getterReference =
+            indexedClass?.lookupGetterReference(field.name);
+        Reference? setterReference =
+            indexedClass?.lookupSetterReference(field.name);
+        if (getterReference == null) {
+          getterReference = nonSetters[field.name]?.reference;
+          getterReference?.canonicalName?.unbind();
+        }
+        if (setterReference == null) {
+          setterReference = setters[field.name]?.reference;
+          setterReference?.canonicalName?.unbind();
+        }
+        Field clone = cloner.cloneField(
+            field, fieldReference, getterReference, setterReference);
+        Procedure? setter = setters[field.name];
+        if (setter != null) {
+          setters.remove(field.name);
+          VariableDeclaration parameter =
+              setter.function.positionalParameters.first;
+          clone.isCovariantByDeclaration = parameter.isCovariantByDeclaration;
+          clone.isCovariantByClass = parameter.isCovariantByClass;
+        }
+        nonSetters.remove(field.name);
+        class_.addField(clone);
+      }
+      class_.procedures.clear();
+      class_.procedures
+        ..addAll(nonSetters.values)
+        ..addAll(setters.values);
+    }
+
+    // Existing procedures in the class should only be forwarding stubs.
+    // Replace them with methods from the mixin class if they have the same
+    // name, but keep their parameter flags.
+    int originalLength = class_.procedures.length;
+    outer:
+    for (var procedure in class_.mixin.procedures) {
+      if (procedure.isSynthetic) continue;
+      // Forwarding stubs in the mixin class are used when calling through the
+      // mixin class's interface, not when calling through the mixin
+      // application.  They should not be copied.
+      if (procedure.isForwardingStub) continue;
+
+      // Factory constructors are not cloned.
+      if (procedure.isFactory) continue;
+
+      // NoSuchMethod forwarders aren't cloned.
+      if (procedure.isNoSuchMethodForwarder) continue;
+
+      Reference? reference;
+      if (procedure.isSetter) {
+        reference = indexedClass?.lookupSetterReference(procedure.name);
+      } else {
+        reference = indexedClass?.lookupGetterReference(procedure.name);
+      }
+
+      // Linear search for a forwarding stub with the same name.
+      int? originalIndex;
+      for (int i = 0; i < originalLength; ++i) {
+        var originalProcedure = class_.procedures[i];
+        if (originalProcedure.name == procedure.name &&
+            originalProcedure.kind == procedure.kind) {
+          FunctionNode src = originalProcedure.function;
+          FunctionNode dst = procedure.function;
+
+          if (src.positionalParameters.length !=
+                  dst.positionalParameters.length ||
+              src.namedParameters.length != dst.namedParameters.length) {
+            // A compile time error has already occurred, but don't crash below,
+            // and don't add several procedures with the same name to the class.
+            continue outer;
+          }
+          if (procedure.isAbstract &&
+              (originalProcedure.stubKind ==
+                      ProcedureStubKind.ConcreteForwardingStub ||
+                  originalProcedure.stubKind ==
+                      ProcedureStubKind.ConcreteMixinStub)) {
+            // Don't replace concrete stubs with abstract methods.
+            originalProcedure.stubKind = ProcedureStubKind.Regular;
+            originalProcedure.stubTarget = null;
+            continue outer;
+          }
+
+          originalIndex = i;
+          break;
+        }
+      }
+      if (originalIndex != null) {
+        reference ??= class_.procedures[originalIndex].reference;
+      }
+      Procedure clone = cloner.cloneProcedure(procedure, reference);
+      if (originalIndex != null) {
+        Procedure originalProcedure = class_.procedures[originalIndex];
+        FunctionNode src = originalProcedure.function;
+        FunctionNode dst = clone.function;
+        assert(src.typeParameters.length == dst.typeParameters.length);
+        for (int j = 0; j < src.typeParameters.length; ++j) {
+          dst.typeParameters[j].flags = src.typeParameters[j].flags;
+        }
+        for (int j = 0; j < src.positionalParameters.length; ++j) {
+          dst.positionalParameters[j].flags = src.positionalParameters[j].flags;
+        }
+        // TODO(kernel team): The named parameters are not sorted,
+        // this might not be correct.
+        for (int j = 0; j < src.namedParameters.length; ++j) {
+          dst.namedParameters[j].isCovariantByDeclaration =
+              src.namedParameters[j].isCovariantByDeclaration;
+          dst.namedParameters[j].isCovariantByClass =
+              src.namedParameters[j].isCovariantByClass;
+        }
+
+        class_.procedures[originalIndex] = clone;
+        clone.parent = class_;
+      } else {
+        class_.addProcedure(clone);
+      }
+    }
+    assert(class_.constructors.isNotEmpty);
+
+    // This class implements the mixin type. Also, backends rely on the fact
+    // that eliminated mixin is appended into the end of interfaces list.
+    class_.implementedTypes.add(class_.mixedInType!);
+
+    // This class is now a normal class.
+    class_.mixedInType = null;
+
+    // Leave breadcrumbs for backends (e.g. for dart:mirrors implementation).
+    class_.isEliminatedMixin = true;
+  }
+}
diff --git a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
index b4eeab7..6b5f9b2 100644
--- a/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
+++ b/pkg/vm/lib/transformations/obfuscation_prohibitions_annotator.dart
@@ -6,15 +6,17 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/target/targets.dart' show Target;
 
 import '../metadata/obfuscation_prohibitions.dart';
 import 'pragma.dart';
 
-void transformComponent(Component component, CoreTypes coreTypes) {
+void transformComponent(
+    Component component, CoreTypes coreTypes, Target target) {
   final repo = new ObfuscationProhibitionsMetadataRepository();
   component.addMetadataRepository(repo);
-  final visitor =
-      ObfuscationProhibitionsVisitor(ConstantPragmaAnnotationParser(coreTypes));
+  final visitor = ObfuscationProhibitionsVisitor(
+      ConstantPragmaAnnotationParser(coreTypes, target));
   visitor.visitComponent(component);
   repo.mapping[component] = visitor.metadata;
 }
diff --git a/pkg/vm/lib/transformations/pragma.dart b/pkg/vm/lib/transformations/pragma.dart
index 2fabcf4..2b127e7 100644
--- a/pkg/vm/lib/transformations/pragma.dart
+++ b/pkg/vm/lib/transformations/pragma.dart
@@ -4,14 +4,20 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/target/targets.dart' show Target;
 
-const kEntryPointPragmaName = "vm:entry-point";
-const kExactResultTypePragmaName = "vm:exact-result-type";
-const kNonNullableResultType = "vm:non-nullable-result-type";
+// Pragmas recognized by the VM
+const kVmEntryPointPragmaName = "vm:entry-point";
+const kVmExactResultTypePragmaName = "vm:exact-result-type";
+const kVmNonNullableResultType = "vm:non-nullable-result-type";
 const kResultTypeUsesPassedTypeArguments =
     "result-type-uses-passed-type-arguments";
-const kRecognizedPragmaName = "vm:recognized";
-const kDisableUnboxedParametetersPragmaName = "vm:disable-unboxed-parameters";
+const kVmRecognizedPragmaName = "vm:recognized";
+const kVmDisableUnboxedParametetersPragmaName = "vm:disable-unboxed-parameters";
+
+// Pragmas recognized by dart2wasm
+const kWasmEntryPointPragmaName = "wasm:entry-point";
+const kWasmExportPragmaName = "wasm:export";
 
 abstract class ParsedPragma {}
 
@@ -57,8 +63,9 @@
 
 class ConstantPragmaAnnotationParser extends PragmaAnnotationParser {
   final CoreTypes coreTypes;
+  final Target target;
 
-  ConstantPragmaAnnotationParser(this.coreTypes);
+  ConstantPragmaAnnotationParser(this.coreTypes, this.target);
 
   ParsedPragma? parsePragma(Expression annotation) {
     InstanceConstant? pragmaConstant;
@@ -85,11 +92,13 @@
       return null;
     }
 
+    if (!target.isSupportedPragma(pragmaName)) return null;
+
     Constant options =
         pragmaConstant.fieldValues[coreTypes.pragmaOptions.fieldReference]!;
 
     switch (pragmaName) {
-      case kEntryPointPragmaName:
+      case kVmEntryPointPragmaName:
         PragmaEntryPointType? type;
         if (options is NullConstant) {
           type = PragmaEntryPointType.Default;
@@ -103,13 +112,14 @@
           } else if (options.value == "call") {
             type = PragmaEntryPointType.CallOnly;
           } else {
-            throw "Error: string directive to @pragma('$kEntryPointPragmaName', ...) "
+            throw "Error: string directive to "
+                "@pragma('$kVmEntryPointPragmaName', ...) "
                 "must be either 'get' or 'set' for fields "
                 "or 'get' or 'call' for procedures.";
           }
         }
         return type != null ? new ParsedEntryPointPragma(type) : null;
-      case kExactResultTypePragmaName:
+      case kVmExactResultTypePragmaName:
         if (options is TypeLiteralConstant) {
           return new ParsedResultTypeByTypePragma(options.type, false);
         } else if (options is StringConstant) {
@@ -123,11 +133,11 @@
           return new ParsedResultTypeByTypePragma(
               (options.entries[0] as TypeLiteralConstant).type, true);
         }
-        throw "ERROR: Unsupported option to '$kExactResultTypePragmaName' "
+        throw "ERROR: Unsupported option to '$kVmExactResultTypePragmaName' "
             "pragma: $options";
-      case kNonNullableResultType:
+      case kVmNonNullableResultType:
         return new ParsedNonNullableResultType();
-      case kRecognizedPragmaName:
+      case kVmRecognizedPragmaName:
         PragmaRecognizedType? type;
         if (options is StringConstant) {
           if (options.value == "asm-intrinsic") {
@@ -139,12 +149,17 @@
           }
         }
         if (type == null) {
-          throw "ERROR: Unsupported option to '$kRecognizedPragmaName' "
+          throw "ERROR: Unsupported option to '$kVmRecognizedPragmaName' "
               "pragma: $options";
         }
         return new ParsedRecognized(type);
-      case kDisableUnboxedParametetersPragmaName:
+      case kVmDisableUnboxedParametetersPragmaName:
         return new ParsedDisableUnboxedParameters();
+      case kWasmEntryPointPragmaName:
+        return ParsedEntryPointPragma(PragmaEntryPointType.Default);
+      case kWasmExportPragmaName:
+        // Exports are treated as called entry points.
+        return ParsedEntryPointPragma(PragmaEntryPointType.CallOnly);
       default:
         return null;
     }
diff --git a/pkg/kernel/lib/transformations/type_casts_optimizer.dart b/pkg/vm/lib/transformations/type_casts_optimizer.dart
similarity index 100%
rename from pkg/kernel/lib/transformations/type_casts_optimizer.dart
rename to pkg/vm/lib/transformations/type_casts_optimizer.dart
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 7cdec21..835dd32 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -1550,7 +1550,7 @@
       this.protobufHandler,
       PragmaAnnotationParser? matcher)
       : annotationMatcher =
-            matcher ?? new ConstantPragmaAnnotationParser(coreTypes) {
+            matcher ?? new ConstantPragmaAnnotationParser(coreTypes, target) {
     nativeCodeOracle = new NativeCodeOracle(libraryIndex, annotationMatcher);
     hierarchyCache = new _ClassHierarchyCache(this, hierarchy,
         _genericInterfacesInfo, environment, target.flags.enableNullSafety);
diff --git a/pkg/vm/lib/transformations/type_flow/native_code.dart b/pkg/vm/lib/transformations/type_flow/native_code.dart
index d41fa98..450233d 100644
--- a/pkg/vm/lib/transformations/type_flow/native_code.dart
+++ b/pkg/vm/lib/transformations/type_flow/native_code.dart
@@ -208,7 +208,7 @@
     for (var annotation in member.annotations) {
       ParsedPragma? pragma = _matcher.parsePragma(annotation);
       if (pragma is ParsedDisableUnboxedParameters) {
-        if (member.enclosingLibrary.importUri.scheme != "dart") {
+        if (!member.enclosingLibrary.importUri.isScheme("dart")) {
           throw "ERROR: Cannot use @pragma(vm:disable-unboxed-parameters) outside core libraries.";
         }
         return true;
@@ -236,8 +236,8 @@
         // We can only use the 'vm:exact-result-type' pragma on methods in core
         // libraries for safety reasons. See 'result_type_pragma.md', detail 1.2
         // for explanation.
-        if (member.enclosingLibrary.importUri.scheme != "dart") {
-          throw "ERROR: Cannot use $kExactResultTypePragmaName "
+        if (!member.enclosingLibrary.importUri.isScheme("dart")) {
+          throw "ERROR: Cannot use $kVmExactResultTypePragmaName "
               "outside core libraries.";
         }
       }
@@ -275,8 +275,9 @@
     }
 
     if (returnType != null && nullable != null) {
-      throw 'ERROR: Cannot have both, @pragma("$kExactResultTypePragmaName") '
-          'and @pragma("$kNonNullableResultType"), annotating the same member.';
+      throw 'ERROR: Cannot have both, @pragma("$kVmExactResultTypePragmaName") '
+          'and @pragma("$kVmNonNullableResultType"), '
+          'annotating the same member.';
     }
 
     if (returnType != null) {
diff --git a/pkg/vm/lib/transformations/type_flow/rta.dart b/pkg/vm/lib/transformations/type_flow/rta.dart
index df987e1..b6adfe4 100644
--- a/pkg/vm/lib/transformations/type_flow/rta.dart
+++ b/pkg/vm/lib/transformations/type_flow/rta.dart
@@ -10,6 +10,7 @@
 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
 import 'package:kernel/library_index.dart' show LibraryIndex;
 import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/target/targets.dart' show Target;
 
 import 'calls.dart' as calls
     show Selector, DirectSelector, InterfaceSelector, VirtualSelector;
@@ -184,13 +185,13 @@
   final Set<Member> visited = {};
   final List<Member> workList = [];
 
-  RapidTypeAnalysis(Component component, this.coreTypes, this.hierarchy,
-      LibraryIndex libraryIndex, this.protobufHandler) {
+  RapidTypeAnalysis(Component component, this.coreTypes, Target target,
+      this.hierarchy, LibraryIndex libraryIndex, this.protobufHandler) {
     Procedure? main = component.mainMethod;
     if (main != null) {
       addMember(main);
     }
-    final annotationMatcher = ConstantPragmaAnnotationParser(coreTypes);
+    final annotationMatcher = ConstantPragmaAnnotationParser(coreTypes, target);
     final nativeCodeOracle = NativeCodeOracle(libraryIndex, annotationMatcher);
     component.accept(PragmaEntryPointsVisitor(
         _EntryPointsListenerImpl(this), nativeCodeOracle, annotationMatcher));
diff --git a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
index 7ec6ff9..b4d7687 100644
--- a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
+++ b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
@@ -4,7 +4,6 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/external_name.dart';
 import 'package:kernel/type_environment.dart';
 
 import 'analysis.dart';
@@ -236,7 +235,7 @@
         shaker.typeFlowAnalysis.nativeCodeOracle
             .isMemberReferencedFromNativeCode(member) ||
         shaker.typeFlowAnalysis.nativeCodeOracle.isRecognized(member) ||
-        getExternalName(coreTypes, member) != null ||
+        member.isExternal ||
         member.name.text == '==') {
       info.eligible = false;
     }
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 6533e54..02cab5e 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -74,8 +74,8 @@
     final protobufHandlerRta = treeShakeProtobufs
         ? ProtobufHandler.forComponent(component, coreTypes)
         : null;
-    rta = RapidTypeAnalysis(
-        component, coreTypes, hierarchy, libraryIndex, protobufHandlerRta);
+    rta = RapidTypeAnalysis(component, coreTypes, target, hierarchy,
+        libraryIndex, protobufHandlerRta);
     rtaStopWatch.stop();
   }
 
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index 056d540..ef627ac 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -65,7 +65,8 @@
     });
 
     test('compile', () async {
-      IncrementalCompiler compiler = new IncrementalCompiler(options, main.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [main.uri]);
       IncrementalCompilerResult compilerResult = await compiler.compile();
       Component component = compilerResult.component;
 
@@ -84,7 +85,7 @@
       CompilerOptions optionsExcludeSources = getFreshOptions()
         ..embedSourceText = false;
       IncrementalCompiler compiler =
-          new IncrementalCompiler(optionsExcludeSources, main.uri);
+          new IncrementalCompiler(optionsExcludeSources, [main.uri]);
       IncrementalCompilerResult compilerResult = await compiler.compile();
       Component component = compilerResult.component;
 
@@ -111,18 +112,36 @@
           message.plainTextFormatted.forEach(print);
         };
       IncrementalCompiler compiler =
-          new IncrementalCompiler(optionsAcceptErrors, main.uri);
+          new IncrementalCompiler(optionsAcceptErrors, [main.uri]);
       await compiler.compile();
       compiler.accept();
       {
-        Procedure? procedure = await compiler.compileExpression('main',
-            <String>[], <String>[], main.uri.toString(), null, null, true);
+        Procedure? procedure = await compiler.compileExpression(
+            'main',
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            main.uri.toString(),
+            null,
+            null,
+            true);
         expect(procedure, isNotNull);
         expect(errorsReported, equals(0));
       }
       {
-        Procedure? procedure = await compiler.compileExpression('main1',
-            <String>[], <String>[], main.uri.toString(), null, null, true);
+        Procedure? procedure = await compiler.compileExpression(
+            'main1',
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            main.uri.toString(),
+            null,
+            null,
+            true);
         expect(procedure, isNotNull);
         expect(errorsReported, equals(1));
         errorsReported = 0;
@@ -344,7 +363,8 @@
       Directory dir = mytest.createTempSync();
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
       File libDill = File(p.join(dir.path, p.basename(lib.path + ".dill")));
-      IncrementalCompiler compiler = new IncrementalCompiler(options, main.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [main.uri]);
       await compileAndSerialize(mainDill, libDill, compiler);
 
       var list = new File(p.join(dir.path, 'myMain.dilllist'))..createSync();
@@ -371,7 +391,8 @@
       Directory dir = mytest.createTempSync();
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
       File libDill = File(p.join(dir.path, p.basename(lib.path + ".dill")));
-      IncrementalCompiler compiler = new IncrementalCompiler(options, lib.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [lib.uri]);
       await compileAndSerialize(mainDill, libDill, compiler);
 
       var list = new File(p.join(dir.path, 'myMain.dilllist'))..createSync();
@@ -435,7 +456,8 @@
       Directory dir = mytest.createTempSync();
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
       File libDill = File(p.join(dir.path, p.basename(lib.path + ".dill")));
-      IncrementalCompiler compiler = new IncrementalCompiler(options, main.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [main.uri]);
       await compileAndSerialize(mainDill, libDill, compiler);
 
       var list = new File(p.join(dir.path, 'myMain.dilllist'))..createSync();
@@ -463,7 +485,8 @@
       Directory dir = mytest.createTempSync();
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
       File libDill = File(p.join(dir.path, p.basename(lib.path + ".dill")));
-      IncrementalCompiler compiler = new IncrementalCompiler(options, main.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [main.uri]);
       await compileAndSerialize(mainDill, libDill, compiler);
 
       var list = new File(p.join(dir.path, 'myMain.dilllist'))..createSync();
@@ -624,7 +647,8 @@
       // Note that it's called 'lib1' to match with expectations from coverage
       // collector helper in this file.
       File libDill = File(p.join(dir.path, p.basename(lib1.path + ".dill")));
-      IncrementalCompiler compiler = new IncrementalCompiler(options, lib1.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [lib1.uri]);
       IncrementalCompilerResult compilerResult = await compiler.compile();
       Component component = compilerResult.component;
       expect(component.libraries.length, equals(1));
@@ -654,7 +678,7 @@
       // Then compile lib, run and verify coverage (un-named constructor
       // covered, and the named constructor coveraged too).
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
-      compilerResult = await compiler.compile(entryPoint: main.uri);
+      compilerResult = await compiler.compile(entryPoints: [main.uri]);
       component = compilerResult.component;
       expect(component.libraries.length, equals(1));
       expect(component.libraries.single.fileUri, equals(main.uri));
@@ -712,7 +736,7 @@
       int newLineForUnnamedConstructor = 8;
       int newLineForNamedConstructor = 9;
       compiler.invalidate(lib1.uri);
-      compilerResult = await compiler.compile(entryPoint: lib1.uri);
+      compilerResult = await compiler.compile(entryPoints: [lib1.uri]);
       component = compilerResult.component;
       expect(component.libraries.length, equals(1));
       expect(component.libraries.single.fileUri, equals(lib1.uri));
@@ -830,7 +854,8 @@
       File mainDill = File(p.join(dir.path, p.basename(main.path + ".dill")));
       File lib1Dill = File(p.join(dir.path, p.basename(lib1.path + ".dill")));
       File lib2Dill = File(p.join(dir.path, p.basename(lib2.path + ".dill")));
-      IncrementalCompiler compiler = new IncrementalCompiler(options, main.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [main.uri]);
       await compileAndSerialize(mainDill, lib1Dill, lib2Dill, compiler);
 
       var list = new File(p.join(dir.path, 'myMain.dilllist'))..createSync();
@@ -908,7 +933,8 @@
       fileBaz.writeAsStringSync("import 'dart:isolate';\n"
           "openReceivePortSoWeWontDie() { new RawReceivePort(); }\n");
 
-      IncrementalCompiler compiler = new IncrementalCompiler(options, file.uri);
+      IncrementalCompiler compiler =
+          new IncrementalCompiler(options, [file.uri]);
       IncrementalCompilerResult compilerResult = await compiler.compile();
       Component component = compilerResult.component;
 
@@ -1028,18 +1054,27 @@
       CompilerOptions optionsModified = getFreshOptions()
         ..packagesFileUri = packageUri;
       IncrementalCompiler compiler =
-          new IncrementalCompiler(optionsModified, packageEntry);
+          new IncrementalCompiler(optionsModified, [packageEntry]);
       {
         IncrementalCompilerResult compilerResult =
-            await compiler.compile(entryPoint: packageEntry);
+            await compiler.compile(entryPoints: [packageEntry]);
         Component component = compilerResult.component;
         File outputFile = new File('${mytest.path}/foo.dart.dill');
         await _writeProgramToFile(component, outputFile);
       }
       compiler.accept();
       {
-        Procedure? procedure = await compiler.compileExpression('a', <String>[],
-            <String>[], 'package:foo/bar.dart', 'A', null, true);
+        Procedure? procedure = await compiler.compileExpression(
+            'a',
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            'package:foo/bar.dart',
+            'A',
+            null,
+            true);
         expect(procedure, isNotNull);
       }
 
@@ -1048,15 +1083,24 @@
       compiler.invalidate(barUri);
       {
         IncrementalCompilerResult compilerResult =
-            await compiler.compile(entryPoint: packageEntry);
+            await compiler.compile(entryPoints: [packageEntry]);
         Component component = compilerResult.component;
         File outputFile = new File('${mytest.path}/foo1.dart.dill');
         await _writeProgramToFile(component, outputFile);
       }
       await compiler.reject();
       {
-        Procedure? procedure = await compiler.compileExpression('a', <String>[],
-            <String>[], 'package:foo/bar.dart', 'A', null, true);
+        Procedure? procedure = await compiler.compileExpression(
+            'a',
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            'package:foo/bar.dart',
+            'A',
+            null,
+            true);
         expect(procedure, isNotNull);
       }
     });
@@ -1088,12 +1132,12 @@
           ExperimentalFlag.alternativeInvalidationStrategy] = true;
 
       final IncrementalCompiler compiler =
-          new IncrementalCompiler(optionsModified, fooUri);
+          new IncrementalCompiler(optionsModified, [fooUri]);
       Library fooLib;
       Library barLib;
       {
         final IncrementalCompilerResult compilerResult =
-            await compiler.compile(entryPoint: fooUri);
+            await compiler.compile(entryPoints: [fooUri]);
         final Component component = compilerResult.component;
         expect(component.libraries.length, equals(2));
         fooLib = component.libraries.firstWhere((lib) => lib.fileUri == fooUri);
@@ -1106,7 +1150,16 @@
       compiler.accept();
       {
         final Procedure procedure = (await compiler.compileExpression(
-            'a', <String>[], <String>[], barUri.toString(), 'A', null, true))!;
+            'a',
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            barUri.toString(),
+            'A',
+            null,
+            true))!;
         // Verify that the expression only has links to the only bar we know
         // about.
         final LibraryReferenceCollector lrc = new LibraryReferenceCollector();
@@ -1123,7 +1176,7 @@
       compiler.invalidate(barUri);
       {
         final IncrementalCompilerResult compilerResult =
-            await compiler.compile(entryPoint: fooUri);
+            await compiler.compile(entryPoints: [fooUri]);
         final Component component = compilerResult.component;
         final Library? fooLib2 = component.libraries
             .firstWhereOrNull((lib) => lib.fileUri == fooUri);
@@ -1153,7 +1206,16 @@
       }
       {
         final Procedure procedure = (await compiler.compileExpression(
-            'a', <String>[], <String>[], barUri.toString(), 'A', null, true))!;
+            'a',
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            <String>[],
+            barUri.toString(),
+            'A',
+            null,
+            true))!;
         // Verify that the expression only has links to the original bar.
         final LibraryReferenceCollector lrc = new LibraryReferenceCollector();
         procedure.accept(lrc);
@@ -1291,7 +1353,7 @@
         int extra() { return 22; }
       """);
       IncrementalCompiler compiler =
-          new IncrementalCompiler(options, mainFile.uri);
+          new IncrementalCompiler(options, [mainFile.uri]);
       IncrementalCompilerResult compilerResult = await compiler.compile();
       Component component = compilerResult.component;
       File mainDill = new File.fromUri(mainFile.uri.resolve("main.dill"));
@@ -1365,7 +1427,7 @@
         }
       """);
       IncrementalCompiler compiler =
-          new IncrementalCompiler(options, mainFile.uri);
+          new IncrementalCompiler(options, [mainFile.uri]);
       IncrementalCompilerResult compilerResult = await compiler.compile();
       Component component = compilerResult.component;
       File mainDill = new File.fromUri(mainFile.uri.resolve("main.dill"));
@@ -1541,7 +1603,7 @@
         CompilerOptions optionsModified = getFreshOptions()
           ..packagesFileUri = packagesFile.uri;
         IncrementalCompiler compiler =
-            new IncrementalCompiler(optionsModified, mainUri);
+            new IncrementalCompiler(optionsModified, [mainUri]);
 
         IncrementalCompilerResult compilerResult = await compiler.compile();
         Component component = compilerResult.component;
@@ -1645,7 +1707,7 @@
 
   void defaultMemberReference(Member node) {
     Library lib = node.enclosingLibrary;
-    if (lib.importUri.scheme != "dart") {
+    if (!lib.importUri.isScheme("dart")) {
       librariesReferenced.add(lib);
     }
     return super.defaultMemberReference(node);
diff --git a/pkg/vm/test/kernel_front_end_test.dart b/pkg/vm/test/kernel_front_end_test.dart
index effa84d..037a610c 100644
--- a/pkg/vm/test/kernel_front_end_test.dart
+++ b/pkg/vm/test/kernel_front_end_test.dart
@@ -6,6 +6,8 @@
 
 import 'package:front_end/src/api_unstable/vm.dart'
     show computePlatformBinariesLocation;
+import 'package:kernel/ast.dart' show Component;
+import 'package:kernel/kernel.dart' show loadComponentFromBinary;
 import 'package:test/test.dart';
 import 'package:vm/kernel_front_end.dart';
 
@@ -26,6 +28,15 @@
   expect(compilerExitCode, successExitCode);
 }
 
+bool containsLibrary(Component component, String name) {
+  for (final lib in component.libraries) {
+    if (lib.importUri.pathSegments.last == name) {
+      return true;
+    }
+  }
+  return false;
+}
+
 main() {
   late Directory tempDir;
   setUp(() {
@@ -128,4 +139,28 @@
       'test-filesystem-scheme:///$mainScript',
     ]);
   }, timeout: Timeout.none);
+
+  test('multiple-sources', () async {
+    final src1 = File('${tempDir.path}/src1.dart');
+    final src2 = File('${tempDir.path}/src2.dart');
+    src1.writeAsStringSync("main() {}");
+    src2.writeAsStringSync("entryPoint() {}");
+    await testCompile([
+      '--platform',
+      platformPath(),
+      '--no-link-platform',
+      // Need to specify --packages as front-end refuses to infer
+      // its location when compiling multiple sources.
+      '--packages',
+      '$sdkDir/$packageConfigFile',
+      '--source',
+      src2.path,
+      '--output',
+      outputDill(),
+      src1.path,
+    ]);
+    final component = loadComponentFromBinary(outputDill());
+    expect(containsLibrary(component, 'src1.dart'), equals(true));
+    expect(containsLibrary(component, 'src2.dart'), equals(true));
+  }, timeout: Timeout.none);
 }
diff --git a/pkg/vm/test/transformations/deferred_loading_test.dart b/pkg/vm/test/transformations/deferred_loading_test.dart
index f36b610..5b7cce8 100644
--- a/pkg/vm/test/transformations/deferred_loading_test.dart
+++ b/pkg/vm/test/transformations/deferred_loading_test.dart
@@ -28,7 +28,7 @@
 
   // Remove core libraries so the expected output isn't enormous and broken by
   // core libraries changes.
-  component.libraries.removeWhere((lib) => lib.importUri.scheme == "dart");
+  component.libraries.removeWhere((lib) => lib.importUri.isScheme("dart"));
 
   String actual = kernelComponentToString(component);
 
diff --git a/pkg/vm/test/transformations/ffi_test.dart b/pkg/vm/test/transformations/ffi_test.dart
index cda6097..8d4f639 100644
--- a/pkg/vm/test/transformations/ffi_test.dart
+++ b/pkg/vm/test/transformations/ffi_test.dart
@@ -48,14 +48,21 @@
   compareResultWithExpectationsFile(source, actual);
 }
 
-main() {
+void main(List<String> args) {
+  assert(args.length == 0 || args.length == 1);
+  String? filter;
+  if (args.length > 0) {
+    filter = args.first;
+  }
+
   group('ffi-transformations', () {
     final testCasesDir = Directory(pkgVmDir + '/testcases/transformations/ffi');
 
     for (var entry in testCasesDir
         .listSync(recursive: true, followLinks: false)
         .reversed) {
-      if (entry.path.endsWith(".dart")) {
+      if (entry.path.endsWith(".dart") &&
+          (filter == null || entry.path.contains(filter))) {
         test(entry.path, () => runTestCase(entry.uri));
       }
     }
diff --git a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
index 09831bd8..7c96cf3 100644
--- a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
+++ b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
@@ -74,8 +74,8 @@
         hierarchy,
         new FakeEntryPointsListener(typesBuilder),
         typesBuilder,
-        new NativeCodeOracle(
-            coreTypes.index, new ConstantPragmaAnnotationParser(coreTypes)),
+        new NativeCodeOracle(coreTypes.index,
+            new ConstantPragmaAnnotationParser(coreTypes, target)),
         new GenericInterfacesInfoImpl(coreTypes, hierarchy),
         /*_protobufHandler=*/ null);
   }
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index f52fb1f..a719a03 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -29,7 +29,7 @@
   final coreTypes = new CoreTypes(component);
 
   component = transformComponent(target, coreTypes, component,
-      matcher: new ConstantPragmaAnnotationParser(coreTypes),
+      matcher: new ConstantPragmaAnnotationParser(coreTypes, target),
       treeShakeProtobufs: true);
 
   String actual = kernelLibraryToString(component.mainMethod!.enclosingLibrary);
diff --git a/pkg/vm/test/unlinked_ast_to_text_test.dart b/pkg/vm/test/unlinked_ast_to_text_test.dart
index 8b03a2c..ecf80d0 100644
--- a/pkg/vm/test/unlinked_ast_to_text_test.dart
+++ b/pkg/vm/test/unlinked_ast_to_text_test.dart
@@ -45,7 +45,7 @@
     final component = loadComponentFromBinary(dillFile);
     final IOSink sink = new File(unlinkedDillFile).openWrite();
     final printer = new BinaryPrinter(sink,
-        libraryFilter: (lib) => lib.importUri.scheme != 'dart');
+        libraryFilter: (lib) => !lib.importUri.isScheme('dart'));
     printer.writeComponentFile(component);
     await sink.close();
 
@@ -54,7 +54,7 @@
     final unlinkedComponent = loadComponentFromBinary(unlinkedDillFile);
     final coreLibraryCount = unlinkedComponent.libraries
         .where(
-            (lib) => lib.importUri.scheme == 'dart' && lib.members.isNotEmpty)
+            (lib) => lib.importUri.isScheme('dart') && lib.members.isNotEmpty)
         .length;
     Expect.equals(0, coreLibraryCount);
 
diff --git a/pkg/vm/testcases/transformations/analysis_options.yaml b/pkg/vm/testcases/transformations/analysis_options.yaml
new file mode 100644
index 0000000..2db5dae
--- /dev/null
+++ b/pkg/vm/testcases/transformations/analysis_options.yaml
@@ -0,0 +1,10 @@
+# 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.
+
+analyzer:
+  exclude:
+    - deferred_loading/**
+    - to_string_transformer/**
+    - type_flow/**
+    - unreachable_code_elimination/**
diff --git a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
index 328e71f..a881185 100644
--- a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
+++ b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
@@ -48,18 +48,18 @@
   static method j() → 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;
+    dynamic :return_value;
     (dynamic) → dynamic :async_op_then;
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
           dart.core::print("J");
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
@@ -67,7 +67,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -79,18 +79,18 @@
   static method h() → 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;
+    dynamic :return_value;
     (dynamic) → dynamic :async_op_then;
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L2:
         {
           dart.core::print("H");
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
@@ -98,7 +98,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -117,13 +117,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L3:
         {
           dart.core::print("I");
-          [yield] let dynamic #t1 = dart.async::_awaitHelper(LoadLibrary(j), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t1 = dart.async::_awaitHelper(LoadLibrary(j), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t2 = CheckLibraryIsLoaded(j) in j::j();
           break #L3;
         }
@@ -135,7 +135,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -147,18 +147,18 @@
   static method g() → 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;
+    dynamic :return_value;
     (dynamic) → dynamic :async_op_then;
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L4:
         {
           dart.core::print("G");
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
@@ -166,7 +166,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -185,17 +185,17 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L5:
         {
           dart.core::print("F");
-          [yield] let dynamic #t3 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t3 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t4 = CheckLibraryIsLoaded(g) in g::g();
           break #L5;
-          [yield] let dynamic #t5 = dart.async::_awaitHelper(LoadLibrary(i), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t5 = dart.async::_awaitHelper(LoadLibrary(i), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t6 = CheckLibraryIsLoaded(i) in i::i();
           break #L5;
         }
@@ -207,7 +207,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -225,13 +225,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L6:
         {
           dart.core::print("E");
-          [yield] let dynamic #t7 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t7 = dart.async::_awaitHelper(LoadLibrary(g), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t8 = CheckLibraryIsLoaded(g) in g::g();
           break #L6;
         }
@@ -243,7 +243,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -262,13 +262,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L7:
         {
           dart.core::print("C");
-          [yield] let dynamic #t9 = dart.async::_awaitHelper(LoadLibrary(f), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t9 = dart.async::_awaitHelper(LoadLibrary(f), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t10 = CheckLibraryIsLoaded(f) in f::f();
           break #L7;
         }
@@ -280,7 +280,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -297,7 +297,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L8:
         {
@@ -313,7 +313,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -330,7 +330,7 @@
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L9:
         {
@@ -346,7 +346,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -364,13 +364,13 @@
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L10:
         {
           dart.core::print("A");
-          [yield] let dynamic #t11 = dart.async::_awaitHelper(LoadLibrary(d), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t11 = dart.async::_awaitHelper(LoadLibrary(d), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
           :return_value = let final dynamic #t12 = CheckLibraryIsLoaded(d) in d::d();
           break #L10;
         }
@@ -382,7 +382,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -395,22 +395,22 @@
   static method main() → 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;
+    dynamic :return_value;
     (dynamic) → dynamic :async_op_then;
     (dart.core::Object, dart.core::StackTrace) → dynamic :async_op_error;
     dart.core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
     dynamic :saved_try_context_var0;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L11:
         {
-          [yield] let dynamic #t13 = dart.async::_awaitHelper(a::a(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
-          [yield] let dynamic #t14 = dart.async::_awaitHelper(b::b(), :async_op_then, :async_op_error, :async_op) in null;
-          :result;
+          [yield] let dynamic #t13 = dart.async::_awaitHelper(a::a(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
+          [yield] let dynamic #t14 = dart.async::_awaitHelper(b::b(), :async_op_then, :async_op_error) in null;
+          :result_or_exception;
         }
-        dart.async::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+        dart.async::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
         return;
       }
       on dynamic catch(dynamic exception, dart.core::StackTrace stack_trace) {
@@ -418,7 +418,7 @@
       }
     :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
     :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
diff --git a/pkg/vm/testcases/transformations/ffi/compound_copies.dart b/pkg/vm/testcases/transformations/ffi/compound_copies.dart
index 4717b9b..534f880 100644
--- a/pkg/vm/testcases/transformations/ffi/compound_copies.dart
+++ b/pkg/vm/testcases/transformations/ffi/compound_copies.dart
@@ -1,7 +1,5 @@
 import 'dart:ffi';
 
-import 'package:ffi/ffi.dart';
-
 class Coordinate extends Struct {
   @Int64()
   external int x;
diff --git a/pkg/vm/testcases/transformations/ffi/compound_copies.dart.expect b/pkg/vm/testcases/transformations/ffi/compound_copies.dart.expect
index b1fe1cf..e7341fe 100644
--- a/pkg/vm/testcases/transformations/ffi/compound_copies.dart.expect
+++ b/pkg/vm/testcases/transformations/ffi/compound_copies.dart.expect
@@ -6,7 +6,6 @@
 import "dart:_internal" as _in;
 
 import "dart:ffi";
-import "package:ffi/ffi.dart";
 
 @#C6
 class Coordinate extends ffi::Struct {
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart
new file mode 100644
index 0000000..d2448ed
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async.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.
+
+// @dart=2.16
+
+// ignore_for_file: unused_local_variable
+
+import 'dart:ffi';
+
+Future<int> doSomething() async => 3;
+
+class MyFinalizable implements Finalizable {
+  Future<int> use() async {
+    return doSomething();
+  }
+
+  Future<int> use2() async {
+    return await doSomething();
+  }
+
+  Future<int> use3() {
+    return doSomething();
+  }
+}
+
+Future<int> useFinalizableAsync(Finalizable finalizable) async {
+  await Future.sync(() => 6);
+  final finalizable2 = MyFinalizable();
+  await Future.sync(() => 5);
+  final finalizable3 = MyFinalizable();
+  await Future.sync(() => 4);
+  return doSomething();
+}
+
+void main() async {
+  final finalizable = MyFinalizable();
+  final asyncResult = useFinalizableAsync(finalizable);
+  print(await asyncResult);
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
new file mode 100644
index 0000000..e098162
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async.dart.expect
@@ -0,0 +1,199 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  synthetic constructor •() → self::MyFinalizable
+    : super core::Object::•()
+    ;
+  method use() → asy::Future<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;
+    (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 = block {
+            final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+            _in::reachabilityFence(this);
+          } =>:expressionValueWrappedFinalizable;
+          break #L1;
+        }
+        asy::_completeOnAsyncReturn(: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;
+  }
+  method use2() → asy::Future<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;
+    dynamic :saved_try_context_var0;
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+      try {
+        #L2:
+        {
+          [yield] let dynamic #t1 = asy::_awaitHelper( block {
+            final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+            _in::reachabilityFence(this);
+          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+          final core::int :expressionValueWrappedFinalizable = _in::unsafeCast<core::int>(:result_or_exception);
+          :return_value = block {
+            _in::reachabilityFence(this);
+          } =>:expressionValueWrappedFinalizable;
+          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;
+  }
+  method use3() → asy::Future<core::int> {
+    return block {
+      final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
+  }
+}
+static method doSomething() → asy::Future<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 = 3;
+        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;
+}
+static method useFinalizableAsync(ffi::Finalizable finalizable) → asy::Future<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;
+  (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 
+    try {
+      #L4:
+      {
+        [yield] let dynamic #t2 = asy::_awaitHelper( block {
+          final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 6);
+          _in::reachabilityFence(finalizable);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
+        [yield] let dynamic #t3 = asy::_awaitHelper( block {
+          final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 5);
+          _in::reachabilityFence(finalizable);
+          _in::reachabilityFence(finalizable2);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
+        [yield] let dynamic #t4 = asy::_awaitHelper( block {
+          final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 4);
+          _in::reachabilityFence(finalizable);
+          _in::reachabilityFence(finalizable2);
+          _in::reachabilityFence(finalizable3);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        _in::unsafeCast<core::int>(:result_or_exception);
+        :return_value = block {
+          final asy::Future<core::int> :expressionValueWrappedFinalizable = self::doSomething();
+          _in::reachabilityFence(finalizable);
+          _in::reachabilityFence(finalizable2);
+          _in::reachabilityFence(finalizable3);
+        } =>:expressionValueWrappedFinalizable;
+        break #L4;
+      }
+      asy::_completeOnAsyncReturn(: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 main() → 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 :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L5:
+      {
+        final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+        final asy::Future<core::int> asyncResult = self::useFinalizableAsync(finalizable);
+        [yield] let dynamic #t5 = asy::_awaitHelper( block {
+          final asy::Future<core::int> :expressionValueWrappedFinalizable = asyncResult;
+          _in::reachabilityFence(finalizable);
+        } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+        core::print(_in::unsafeCast<core::int>(:result_or_exception));
+        _in::reachabilityFence(finalizable);
+      }
+      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;
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart
new file mode 100644
index 0000000..6e73ab3
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart
@@ -0,0 +1,33 @@
+// 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.16
+
+// ignore_for_file: unused_local_variable
+
+import 'dart:ffi';
+
+class MyFinalizable implements Finalizable {}
+
+int doSomething() => 3;
+
+Stream<int> useFinalizableAsyncStar(Finalizable finalizable) async* {
+  final finalizable2 = MyFinalizable();
+  yield doSomething();
+  final finalizable3 = MyFinalizable();
+  await Future.sync(() => 3);
+  final finalizable4 = MyFinalizable();
+  if (DateTime.now().millisecondsSinceEpoch == 4) {
+    return;
+  }
+  yield 5;
+}
+
+void main() async {
+  final finalizable = MyFinalizable();
+  final asyncStarResult = useFinalizableAsyncStar(finalizable);
+  await for (final element in asyncStarResult) {
+    print(element);
+  }
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
new file mode 100644
index 0000000..18fae35
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_async_star.dart.expect
@@ -0,0 +1,141 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  synthetic constructor •() → self::MyFinalizable
+    : super core::Object::•()
+    ;
+}
+static method doSomething() → core::int
+  return 3;
+static method useFinalizableAsyncStar(ffi::Finalizable finalizable) → asy::Stream<core::int> /* originally async* */ {
+  asy::_AsyncStarStreamController<core::int>? :controller;
+  dynamic :controller_stream;
+  (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;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try
+      try {
+        #L1:
+        {
+          final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
+          if([@vm.call-site-attributes.metadata=receiverType:dart.async::_AsyncStarStreamController<dart.core::int>?] :controller.{asy::_AsyncStarStreamController::add}( block {
+            final core::int :expressionValueWrappedFinalizable = self::doSomething();
+            _in::reachabilityFence(finalizable);
+            _in::reachabilityFence(finalizable2);
+          } =>:expressionValueWrappedFinalizable){(core::int) → core::bool})
+            return null;
+          else
+            [yield] null;
+          final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
+          [yield] let dynamic #t1 = asy::_awaitHelper( block {
+            final asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 3);
+            _in::reachabilityFence(finalizable);
+            _in::reachabilityFence(finalizable2);
+            _in::reachabilityFence(finalizable3);
+          } =>:expressionValueWrappedFinalizable, :async_op_then, :async_op_error) in null;
+          _in::unsafeCast<core::int>(:result_or_exception);
+          final self::MyFinalizable finalizable4 = new self::MyFinalizable::•();
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 4) {
+            {
+              _in::reachabilityFence(finalizable);
+              _in::reachabilityFence(finalizable2);
+              _in::reachabilityFence(finalizable3);
+              _in::reachabilityFence(finalizable4);
+              break #L1;
+            }
+          }
+          if([@vm.call-site-attributes.metadata=receiverType:dart.async::_AsyncStarStreamController<dart.core::int>?] :controller.{asy::_AsyncStarStreamController::add}( block {
+            final core::int :expressionValueWrappedFinalizable = 5;
+            _in::reachabilityFence(finalizable);
+            _in::reachabilityFence(finalizable2);
+            _in::reachabilityFence(finalizable3);
+            _in::reachabilityFence(finalizable4);
+          } =>:expressionValueWrappedFinalizable){(core::int) → core::bool})
+            return null;
+          else
+            [yield] null;
+          _in::reachabilityFence(finalizable2);
+          _in::reachabilityFence(finalizable3);
+          _in::reachabilityFence(finalizable4);
+          _in::reachabilityFence(finalizable);
+        }
+        return;
+      }
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
+      }
+    finally {
+      :controller.{asy::_AsyncStarStreamController::close}(){() → dynamic};
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :controller = new asy::_AsyncStarStreamController::•<core::int>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<core::int>};
+  return :controller_stream;
+}
+static method main() → 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 :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  dynamic :exception0;
+  dynamic :stack_trace0;
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
+    try {
+      #L2:
+      {
+        final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+        final asy::Stream<core::int> asyncStarResult = self::useFinalizableAsyncStar(finalizable);
+        {
+          asy::Stream<core::int> :stream = asyncStarResult;
+          asy::_StreamIterator<core::int>? :for-iterator = new asy::_StreamIterator::•<core::int>(:stream);
+          try
+            #L3:
+            while (true) {
+              dynamic #t2 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t3 = 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)) {
+                final core::int element = :for-iterator.{asy::_StreamIterator::current}{core::int};
+                {
+                  core::print(element);
+                }
+              }
+              else
+                break #L3;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<core::int>?} == null)) {
+              [yield] let dynamic #t4 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error) in null;
+              :result_or_exception;
+            }
+        }
+        _in::reachabilityFence(finalizable);
+      }
+      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;
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync.dart b/pkg/vm/testcases/transformations/ffi/finalizable_sync.dart
new file mode 100644
index 0000000..1735d18
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync.dart
@@ -0,0 +1,42 @@
+// 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.16
+
+import 'dart:ffi';
+
+int doSomething() => 3;
+
+class MyFinalizable implements Finalizable {
+  int use() {
+    return doSomething();
+  }
+}
+
+/// Should be transformed into:
+///
+/// ```
+/// int useFinalizableSync(Finalizable finalizable) {
+///   final result = doSomething();
+///   _reachabilityFence(finalizable);
+///   return result;
+/// }
+/// ```
+int useFinalizableSync(Finalizable finalizable) {
+  return doSomething();
+}
+
+/// Should be transformed into:
+///
+/// ```
+/// void main() {
+///   final finalizable = MyFinalizable();
+///   print(useFinalizableSync(finalizable));
+///   _reachabilityFence(finalizable);
+/// }
+/// ```
+void main() {
+  final finalizable = MyFinalizable();
+  print(useFinalizableSync(finalizable));
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_sync.dart.expect
new file mode 100644
index 0000000..45da19f
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync.dart.expect
@@ -0,0 +1,32 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  synthetic constructor •() → self::MyFinalizable
+    : super core::Object::•()
+    ;
+  method use() → core::int {
+    return block {
+      final core::int :expressionValueWrappedFinalizable = self::doSomething();
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
+  }
+}
+static method doSomething() → core::int
+  return 3;
+static method useFinalizableSync(ffi::Finalizable finalizable) → core::int {
+  return block {
+    final core::int :expressionValueWrappedFinalizable = self::doSomething();
+    _in::reachabilityFence(finalizable);
+  } =>:expressionValueWrappedFinalizable;
+}
+static method main() → void {
+  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+  core::print(self::useFinalizableSync(finalizable));
+  _in::reachabilityFence(finalizable);
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync2.dart b/pkg/vm/testcases/transformations/ffi/finalizable_sync2.dart
new file mode 100644
index 0000000..b435be9
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync2.dart
@@ -0,0 +1,227 @@
+// 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.16
+
+// ignore_for_file: unused_local_variable
+
+import 'dart:ffi';
+
+class MyFinalizable implements Finalizable {
+  int internalValue = 4;
+}
+
+void main() {
+  final finalizable = MyFinalizable();
+  {
+    final finalizable2 = MyFinalizable();
+    // Should generate: _reachabilityFence(finalizable2);
+  }
+  if (DateTime.now().millisecondsSinceEpoch == 42) {
+    // Should generate: _reachabilityFence(finalizable1);
+    return;
+  } else {
+    try {
+      final finalizable3 = MyFinalizable();
+      {
+        // Should not generate anything.
+      }
+      // Should generate: _reachabilityFence(finalizable3);
+    } on Exception {
+      final finalizable4 = MyFinalizable();
+      // Should generate: _reachabilityFence(finalizable4);
+    } finally {
+      final finalizable5 = MyFinalizable();
+      // Should generate: _reachabilityFence(finalizable5);
+    }
+    try {
+      final finalizable13 = MyFinalizable();
+      try {
+        final finalizable14 = MyFinalizable();
+        if (DateTime.now().millisecondsSinceEpoch == 100) {
+          // Caught in try.
+          // Should generate: _reachabilityFence(finalizable14);
+          throw Exception('foo');
+        }
+        if (DateTime.now().millisecondsSinceEpoch == 101) {
+          // Not caught in try.
+          // Should generate: _reachabilityFence(finalizable1);
+          // Should generate: _reachabilityFence(finalizable13);
+          // Should generate: _reachabilityFence(finalizable14);
+          throw Error();
+        }
+      } on Exception catch (e) {
+        print(e);
+        // Caught in surrounding try.
+        // Should generate: _reachabilityFence(finalizable13);
+        rethrow;
+      } finally {
+        if (DateTime.now().millisecondsSinceEpoch == 1000) {
+          // Caught in surrounding try.
+          // Should generate: _reachabilityFence(finalizable13);
+          throw Exception('bar');
+        }
+      }
+      // Should generate: _reachabilityFence(finalizable13);
+    } on Exception catch (e) {
+      print(e);
+    }
+  }
+  switch (DateTime.now().millisecondsSinceEpoch) {
+    case 1:
+    case 2:
+      final finalizable6 = MyFinalizable();
+      // Should generate: _reachabilityFence(finalizable1);
+      // Should generate: _reachabilityFence(finalizable6);
+      return;
+    Foo:
+    case 3:
+      final finalizable7 = MyFinalizable();
+      // Should generate: _reachabilityFence(finalizable7);
+      break;
+    Bar:
+    case 4:
+      final finalizable70 = MyFinalizable();
+      switch (DateTime.now().millisecondsSinceEpoch) {
+        case 5:
+          final finalizable71 = MyFinalizable();
+          if (DateTime.now().millisecondsSinceEpoch == 44) {
+            // Should generate: _reachabilityFence(finalizable70);
+            // Should generate: _reachabilityFence(finalizable71);
+            continue Bar;
+          }
+          // Should generate: _reachabilityFence(finalizable71);
+          break;
+      }
+      // Should generate: _reachabilityFence(finalizable70);
+      continue Foo;
+    default:
+      final finalizable8 = MyFinalizable();
+    // Should generate: _reachabilityFence(finalizable8);
+  }
+  labelI:
+  labelI3:
+  for (int i = 0; i < 10; i++) {
+    final finalizable9 = MyFinalizable();
+    labelJ:
+    for (int j = 0; j < 10; j++) {
+      final finalizable10 = MyFinalizable();
+      if (DateTime.now().millisecondsSinceEpoch == 42) {
+        // Should generate: _reachabilityFence(finalizable9);
+        // Should generate: _reachabilityFence(finalizable10);
+        break labelI3;
+      }
+      if (DateTime.now().millisecondsSinceEpoch == 1337) {
+        // Should generate: _reachabilityFence(finalizable9);
+        // Should generate: _reachabilityFence(finalizable10);
+        break labelI;
+      }
+      if (DateTime.now().millisecondsSinceEpoch == 1) {
+        // Should generate: _reachabilityFence(finalizable9);
+        continue labelJ;
+      }
+      if (DateTime.now().millisecondsSinceEpoch == 3) {
+        // Should generate: _reachabilityFence(finalizable9);
+        // Should generate: _reachabilityFence(finalizable10);
+        continue labelI;
+      }
+      // Should generate: _reachabilityFence(finalizable10);
+    }
+    // Should generate: _reachabilityFence(finalizable9);
+  }
+  label1:
+  {
+    final finalizable11 = MyFinalizable();
+    label2:
+    {
+      final finalizable12 = MyFinalizable();
+      if (DateTime.now().millisecondsSinceEpoch == 1) {
+        // Should generate: _reachabilityFence(finalizable11);
+        // Should generate: _reachabilityFence(finalizable12);
+        break label1;
+      }
+      if (DateTime.now().millisecondsSinceEpoch == 3) {
+        // Should generate: _reachabilityFence(finalizable12);
+        break label2;
+      }
+      // Should generate: _reachabilityFence(finalizable12);
+    }
+    // Should generate: _reachabilityFence(finalizable11);
+  }
+  for (int i = 0; i < 10; i++) {
+    final finalizable15 = MyFinalizable();
+    // Should generate: _reachabilityFence(finalizable15);
+  }
+  int i = 0;
+  while (i < 10) {
+    final finalizable16 = MyFinalizable();
+    i++;
+    // Should generate: _reachabilityFence(finalizable16);
+  }
+  for (final finalizable17
+      in Iterable<Finalizable>.generate(5, (int index) => MyFinalizable())) {
+    // Should generate: _reachabilityFence(finalizable17);
+  }
+  i = 0;
+  for (Finalizable finalizable18 = MyFinalizable(); i < 10; i++) {
+    // Should generate: _reachabilityFence(finalizable18);
+  }
+  // Should generate: _reachabilityFence(finalizable1);
+}
+
+int doSomething(int a) => a;
+
+void Function() createClosure() {
+  final finalizable20 = MyFinalizable();
+  return () {
+    if (DateTime.now().millisecondsSinceEpoch == 42) {
+      return;
+      // Should generate: _reachabilityFence(finalizable20);
+    }
+    doSomething(finalizable20.internalValue);
+    // Should generate: _reachabilityFence(finalizable20);
+  };
+  // Should generate: _reachabilityFence(finalizable20);
+}
+
+void Function() Function() Function() createNestedClosure() {
+  final finalizable40 = MyFinalizable();
+  return () {
+    final finalizable41 = MyFinalizable();
+    return () {
+      final finalizable42 = MyFinalizable();
+      return () {
+        doSomething(finalizable40.internalValue);
+        doSomething(finalizable41.internalValue);
+        doSomething(finalizable42.internalValue);
+        // Should generate: _reachabilityFence(finalizable40);
+        // Should generate: _reachabilityFence(finalizable41);
+        // Should generate: _reachabilityFence(finalizable42);
+      };
+      // Should generate: _reachabilityFence(finalizable40);
+      // Should generate: _reachabilityFence(finalizable41);
+      // Should generate: _reachabilityFence(finalizable42);
+    };
+    // Should generate: _reachabilityFence(finalizable40);
+    // Should generate: _reachabilityFence(finalizable41);
+  };
+  // Should generate: _reachabilityFence(finalizable40);
+}
+
+void Function() createBadClosure() {
+  final finalizable21 = MyFinalizable();
+  final internalValue = finalizable21.internalValue;
+  return () {
+    doSomething(internalValue);
+    // Should not generate: _reachabilityFence(finalizable21);
+  };
+  // Should generate: _reachabilityFence(finalizable21);
+}
+
+void reassignment() {
+  var finalizable30 = MyFinalizable();
+  doSomething(4);
+  // Should generate: _reachabilityFence(finalizable30);
+  finalizable30 = MyFinalizable();
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync2.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_sync2.dart.expect
new file mode 100644
index 0000000..987ce3e
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync2.dart.expect
@@ -0,0 +1,300 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  field core::int internalValue = 4;
+  synthetic constructor •() → self::MyFinalizable
+    : super core::Object::•()
+    ;
+}
+static method main() → void {
+  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+  {
+    final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
+    _in::reachabilityFence(finalizable2);
+  }
+  if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+    {
+      _in::reachabilityFence(finalizable);
+      return;
+    }
+  }
+  else {
+    try
+      try {
+        final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
+        {}
+        _in::reachabilityFence(finalizable3);
+      }
+      on core::Exception catch(no-exception-var) {
+        final self::MyFinalizable finalizable4 = new self::MyFinalizable::•();
+        _in::reachabilityFence(finalizable4);
+      }
+    finally {
+      final self::MyFinalizable finalizable5 = new self::MyFinalizable::•();
+      _in::reachabilityFence(finalizable5);
+    }
+    try {
+      final self::MyFinalizable finalizable13 = new self::MyFinalizable::•();
+      try
+        try {
+          final self::MyFinalizable finalizable14 = new self::MyFinalizable::•();
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 100) {
+            throw block {
+              final core::Exception :expressionValueWrappedFinalizable = core::Exception::•("foo");
+              _in::reachabilityFence(finalizable14);
+            } =>:expressionValueWrappedFinalizable;
+          }
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 101) {
+            throw block {
+              final core::Error :expressionValueWrappedFinalizable = new core::Error::•();
+              _in::reachabilityFence(finalizable);
+              _in::reachabilityFence(finalizable13);
+              _in::reachabilityFence(finalizable14);
+            } =>:expressionValueWrappedFinalizable;
+          }
+          _in::reachabilityFence(finalizable14);
+        }
+        on core::Exception catch(final core::Exception e) {
+          core::print(e);
+          block {
+            _in::reachabilityFence(finalizable13);
+          } =>rethrow;
+        }
+      finally {
+        if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 1000) {
+          throw block {
+            final core::Exception :expressionValueWrappedFinalizable = core::Exception::•("bar");
+            _in::reachabilityFence(finalizable13);
+          } =>:expressionValueWrappedFinalizable;
+        }
+      }
+      _in::reachabilityFence(finalizable13);
+    }
+    on core::Exception catch(final core::Exception e) {
+      core::print(e);
+    }
+  }
+  #L1:
+  switch(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int}) {
+    #L2:
+    case #C1:
+    case #C2:
+      {
+        final self::MyFinalizable finalizable6 = new self::MyFinalizable::•();
+        {
+          _in::reachabilityFence(finalizable);
+          _in::reachabilityFence(finalizable6);
+          return;
+        }
+      }
+    #L3:
+    case #C3:
+      {
+        final self::MyFinalizable finalizable7 = new self::MyFinalizable::•();
+        {
+          _in::reachabilityFence(finalizable7);
+          break #L1;
+        }
+      }
+    #L4:
+    case #C4:
+      {
+        final self::MyFinalizable finalizable70 = new self::MyFinalizable::•();
+        #L5:
+        switch(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int}) {
+          #L6:
+          case #C5:
+            {
+              final self::MyFinalizable finalizable71 = new self::MyFinalizable::•();
+              if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 44) {
+                {
+                  _in::reachabilityFence(finalizable70);
+                  _in::reachabilityFence(finalizable71);
+                  continue #L4;
+                }
+              }
+              {
+                _in::reachabilityFence(finalizable71);
+                break #L5;
+              }
+            }
+        }
+        {
+          _in::reachabilityFence(finalizable70);
+          continue #L3;
+        }
+      }
+    #L7:
+    default:
+      {
+        final self::MyFinalizable finalizable8 = new self::MyFinalizable::•();
+        _in::reachabilityFence(finalizable8);
+      }
+  }
+  #L8:
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int})
+    #L9:
+    {
+      final self::MyFinalizable finalizable9 = new self::MyFinalizable::•();
+      for (core::int j = 0; j.{core::num::<}(10){(core::num) → core::bool}; j = j.{core::num::+}(1){(core::num) → core::int})
+        #L10:
+        {
+          final self::MyFinalizable finalizable10 = new self::MyFinalizable::•();
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+            {
+              _in::reachabilityFence(finalizable9);
+              _in::reachabilityFence(finalizable10);
+              break #L8;
+            }
+          }
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 1337) {
+            {
+              _in::reachabilityFence(finalizable9);
+              _in::reachabilityFence(finalizable10);
+              break #L8;
+            }
+          }
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+            {
+              _in::reachabilityFence(finalizable10);
+              break #L10;
+            }
+          }
+          if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 3) {
+            {
+              _in::reachabilityFence(finalizable9);
+              _in::reachabilityFence(finalizable10);
+              break #L9;
+            }
+          }
+          _in::reachabilityFence(finalizable10);
+        }
+      _in::reachabilityFence(finalizable9);
+    }
+  #L11:
+  {
+    final self::MyFinalizable finalizable11 = new self::MyFinalizable::•();
+    #L12:
+    {
+      final self::MyFinalizable finalizable12 = new self::MyFinalizable::•();
+      if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 1) {
+        {
+          _in::reachabilityFence(finalizable11);
+          _in::reachabilityFence(finalizable12);
+          break #L11;
+        }
+      }
+      if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 3) {
+        {
+          _in::reachabilityFence(finalizable12);
+          break #L12;
+        }
+      }
+      _in::reachabilityFence(finalizable12);
+    }
+    _in::reachabilityFence(finalizable11);
+  }
+  for (core::int i = 0; i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    final self::MyFinalizable finalizable15 = new self::MyFinalizable::•();
+    _in::reachabilityFence(finalizable15);
+  }
+  core::int i = 0;
+  while (i.{core::num::<}(10){(core::num) → core::bool}) {
+    final self::MyFinalizable finalizable16 = new self::MyFinalizable::•();
+    i = i.{core::num::+}(1){(core::num) → core::int};
+    _in::reachabilityFence(finalizable16);
+  }
+  {
+    core::Iterator<ffi::Finalizable> :sync-for-iterator = core::Iterable::generate<ffi::Finalizable>(5, (core::int index) → self::MyFinalizable => new self::MyFinalizable::•()).{core::Iterable::iterator}{core::Iterator<ffi::Finalizable>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final ffi::Finalizable finalizable17 = :sync-for-iterator.{core::Iterator::current}{ffi::Finalizable};
+      {
+        _in::reachabilityFence(finalizable17);
+      }
+    }
+  }
+  i = 0;
+  for (ffi::Finalizable finalizable18 = new self::MyFinalizable::•(); i.{core::num::<}(10){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::num) → core::int}) {
+    _in::reachabilityFence(finalizable18);
+  }
+  _in::reachabilityFence(finalizable);
+}
+static method doSomething(core::int a) → core::int
+  return a;
+static method createClosure() → () → void {
+  final self::MyFinalizable finalizable20 = new self::MyFinalizable::•();
+  return block {
+    final () → void :expressionValueWrappedFinalizable = () → void {
+      if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+        {
+          _in::reachabilityFence(finalizable20);
+          return;
+        }
+      }
+      self::doSomething(finalizable20.{self::MyFinalizable::internalValue}{core::int});
+      _in::reachabilityFence(finalizable20);
+    };
+    _in::reachabilityFence(finalizable20);
+  } =>:expressionValueWrappedFinalizable;
+}
+static method createNestedClosure() → () → () → () → void {
+  final self::MyFinalizable finalizable40 = new self::MyFinalizable::•();
+  return block {
+    final () → () → () → void :expressionValueWrappedFinalizable = () → () → () → void {
+      final self::MyFinalizable finalizable41 = new self::MyFinalizable::•();
+      return block {
+        final () → () → void :expressionValueWrappedFinalizable = () → () → void {
+          final self::MyFinalizable finalizable42 = new self::MyFinalizable::•();
+          return block {
+            final () → void :expressionValueWrappedFinalizable = () → void {
+              self::doSomething(finalizable40.{self::MyFinalizable::internalValue}{core::int});
+              self::doSomething(finalizable41.{self::MyFinalizable::internalValue}{core::int});
+              self::doSomething(finalizable42.{self::MyFinalizable::internalValue}{core::int});
+              _in::reachabilityFence(finalizable40);
+              _in::reachabilityFence(finalizable41);
+              _in::reachabilityFence(finalizable42);
+            };
+            _in::reachabilityFence(finalizable40);
+            _in::reachabilityFence(finalizable41);
+            _in::reachabilityFence(finalizable42);
+          } =>:expressionValueWrappedFinalizable;
+        };
+        _in::reachabilityFence(finalizable40);
+        _in::reachabilityFence(finalizable41);
+      } =>:expressionValueWrappedFinalizable;
+    };
+    _in::reachabilityFence(finalizable40);
+  } =>:expressionValueWrappedFinalizable;
+}
+static method createBadClosure() → () → void {
+  final self::MyFinalizable finalizable21 = new self::MyFinalizable::•();
+  final core::int internalValue = finalizable21.{self::MyFinalizable::internalValue}{core::int};
+  return block {
+    final () → void :expressionValueWrappedFinalizable = () → void {
+      self::doSomething(internalValue);
+    };
+    _in::reachabilityFence(finalizable21);
+  } =>:expressionValueWrappedFinalizable;
+}
+static method reassignment() → void {
+  self::MyFinalizable finalizable30 = new self::MyFinalizable::•();
+  self::doSomething(4);
+  finalizable30 = block {
+    final self::MyFinalizable :expressionValueWrappedFinalizable = new self::MyFinalizable::•();
+    _in::reachabilityFence(finalizable30);
+  } =>:expressionValueWrappedFinalizable;
+  _in::reachabilityFence(finalizable30);
+}
+constants  {
+  #C1 = 1
+  #C2 = 2
+  #C3 = 3
+  #C4 = 4
+  #C5 = 5
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart b/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart
new file mode 100644
index 0000000..bc83bbe
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync3.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.
+
+// @dart=2.16
+
+// ignore_for_file: unused_local_variable
+
+import 'dart:ffi';
+
+class MyFinalizable implements Finalizable {
+  int _internalValue = 4;
+
+  int Function() capturingThis() {
+    return () {
+      final result = this._internalValue;
+      // Should generate: _reachabilityFence(this)
+      return result;
+    };
+    // Should generate: _reachabilityFence(this)
+  }
+
+  int Function() capturingThis2() {
+    return () {
+      return this._internalValue;
+      // Should generate: _reachabilityFence(this)
+    };
+    // Should generate: _reachabilityFence(this)
+  }
+
+  int Function() capturingThis3() {
+    return () {
+      return _internalValue;
+      // Should generate: _reachabilityFence(this)
+    };
+    // Should generate: _reachabilityFence(this)
+  }
+
+  /// Tests that captures later in the body also cause fences earlier in the body.
+  int Function() capturingThis4() {
+    return () {
+      if (DateTime.now().millisecondsSinceEpoch == 42) {
+        // Should generate: _reachabilityFence(this)
+        return 3;
+      }
+      return _internalValue;
+      // Should generate: _reachabilityFence(this)
+    };
+    // Should generate: _reachabilityFence(this)
+  }
+}
+
+void main() {}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart.expect
new file mode 100644
index 0000000..c251fa6
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync3.dart.expect
@@ -0,0 +1,66 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  field core::int _internalValue = 4;
+  synthetic constructor •() → self::MyFinalizable
+    : super core::Object::•()
+    ;
+  method capturingThis() → () → core::int {
+    return block {
+      final () → core::int :expressionValueWrappedFinalizable = () → core::int {
+        final core::int result = this.{self::MyFinalizable::_internalValue}{core::int};
+        return block {
+          final core::int :expressionValueWrappedFinalizable = result;
+          _in::reachabilityFence(this);
+        } =>:expressionValueWrappedFinalizable;
+      };
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
+  }
+  method capturingThis2() → () → core::int {
+    return block {
+      final () → core::int :expressionValueWrappedFinalizable = () → core::int {
+        return block {
+          final core::int :expressionValueWrappedFinalizable = this.{self::MyFinalizable::_internalValue}{core::int};
+          _in::reachabilityFence(this);
+        } =>:expressionValueWrappedFinalizable;
+      };
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
+  }
+  method capturingThis3() → () → core::int {
+    return block {
+      final () → core::int :expressionValueWrappedFinalizable = () → core::int {
+        return block {
+          final core::int :expressionValueWrappedFinalizable = this.{self::MyFinalizable::_internalValue}{core::int};
+          _in::reachabilityFence(this);
+        } =>:expressionValueWrappedFinalizable;
+      };
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
+  }
+  method capturingThis4() → () → core::int {
+    return block {
+      final () → core::int :expressionValueWrappedFinalizable = () → core::int {
+        if(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}{core::int} =={core::num::==}{(core::Object) → core::bool} 42) {
+          return block {
+            final core::int :expressionValueWrappedFinalizable = 3;
+            _in::reachabilityFence(this);
+          } =>:expressionValueWrappedFinalizable;
+        }
+        return block {
+          final core::int :expressionValueWrappedFinalizable = this.{self::MyFinalizable::_internalValue}{core::int};
+          _in::reachabilityFence(this);
+        } =>:expressionValueWrappedFinalizable;
+      };
+      _in::reachabilityFence(this);
+    } =>:expressionValueWrappedFinalizable;
+  }
+}
+static method main() → void {}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync_star.dart b/pkg/vm/testcases/transformations/ffi/finalizable_sync_star.dart
new file mode 100644
index 0000000..535486f
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync_star.dart
@@ -0,0 +1,37 @@
+// 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.16
+
+// ignore_for_file: unused_local_variable
+
+import 'dart:ffi';
+
+class MyFinalizable implements Finalizable {}
+
+int doSomething() => 3;
+
+Iterable<int> useFinalizableSyncStar(Finalizable finalizable) sync* {
+  // _in::reachabilityFence(finalizable);
+  yield doSomething();
+  final finalizable2 = MyFinalizable();
+  // _in::reachabilityFence(finalizable);
+  // _in::reachabilityFence(finalizable2);
+  yield 5;
+  final finalizable3 = MyFinalizable();
+  // _in::reachabilityFence(finalizable);
+  // _in::reachabilityFence(finalizable2);
+  // _in::reachabilityFence(finalizable3);
+  yield 10;
+  // _in::reachabilityFence(finalizable);
+  // _in::reachabilityFence(finalizable2);
+  // _in::reachabilityFence(finalizable3);
+}
+
+void main() {
+  final finalizable = MyFinalizable();
+  for (final element in useFinalizableSyncStar(finalizable)) {
+    print(element);
+  }
+}
diff --git a/pkg/vm/testcases/transformations/ffi/finalizable_sync_star.dart.expect b/pkg/vm/testcases/transformations/ffi/finalizable_sync_star.dart.expect
new file mode 100644
index 0000000..fc74d17
--- /dev/null
+++ b/pkg/vm/testcases/transformations/ffi/finalizable_sync_star.dart.expect
@@ -0,0 +1,71 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "dart:_internal" as _in;
+
+import "dart:ffi";
+
+class MyFinalizable extends core::Object implements ffi::Finalizable {
+  synthetic constructor •() → self::MyFinalizable
+    : super core::Object::•()
+    ;
+}
+static method doSomething() → core::int
+  return 3;
+static method useFinalizableSyncStar(ffi::Finalizable finalizable) → 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;
+    ffi::Finalizable finalizable = finalizable;
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+      {
+        {
+          [@vm.call-site-attributes.metadata=receiverType:dart.core::_SyncIterator<dynamic>?] :iterator.{core::_SyncIterator::_current} = block {
+            final core::int :expressionValueWrappedFinalizable = self::doSomething();
+            _in::reachabilityFence(finalizable);
+          } =>:expressionValueWrappedFinalizable;
+          [yield] true;
+        }
+        final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
+        {
+          [@vm.call-site-attributes.metadata=receiverType:dart.core::_SyncIterator<dynamic>?] :iterator.{core::_SyncIterator::_current} = block {
+            final core::int :expressionValueWrappedFinalizable = 5;
+            _in::reachabilityFence(finalizable);
+            _in::reachabilityFence(finalizable2);
+          } =>:expressionValueWrappedFinalizable;
+          [yield] true;
+        }
+        final self::MyFinalizable finalizable3 = new self::MyFinalizable::•();
+        {
+          [@vm.call-site-attributes.metadata=receiverType:dart.core::_SyncIterator<dynamic>?] :iterator.{core::_SyncIterator::_current} = block {
+            final core::int :expressionValueWrappedFinalizable = 10;
+            _in::reachabilityFence(finalizable);
+            _in::reachabilityFence(finalizable2);
+            _in::reachabilityFence(finalizable3);
+          } =>:expressionValueWrappedFinalizable;
+          [yield] true;
+        }
+        _in::reachabilityFence(finalizable2);
+        _in::reachabilityFence(finalizable3);
+        _in::reachabilityFence(finalizable);
+      }
+      return false;
+    }
+    return :sync_op;
+  }
+  return new core::_SyncIterable::•<core::int>(:sync_op_gen);
+}
+static method main() → void {
+  final self::MyFinalizable finalizable = new self::MyFinalizable::•();
+  {
+    core::Iterator<core::int> :sync-for-iterator = self::useFinalizableSyncStar(finalizable).{core::Iterable::iterator}{core::Iterator<core::int>};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+      final core::int element = :sync-for-iterator.{core::Iterator::current}{core::int};
+      {
+        core::print(element);
+      }
+    }
+  }
+  _in::reachabilityFence(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 fc5a260..da5be5f 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
@@ -15,7 +15,7 @@
     (core::Object, core::StackTrace) → dynamic :async_op_error;
     core::int :await_jump_var = 0;
     dynamic :await_ctx_var;
-    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
       try {
         #L1:
         {
@@ -30,7 +30,7 @@
       }
     :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
     :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-    :async_op(){() → dynamic};
+    :async_op(null, null){() → dynamic};
     :is_sync = true;
     return :async_future;
   }
@@ -45,19 +45,19 @@
 static method baz() → asy::Future<dynamic> /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L2:
       {
         :return_value = new self::B::•();
         break #L2;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -65,30 +65,30 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method main() → dynamic /* originally async */ {
   final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
-  FutureOr<dynamic>? :return_value;
+  dynamic :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;
   dynamic :saved_try_context_var0;
   dynamic :async_temporary_0;
-  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+  function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
       #L3:
       {
         :async_temporary_0 = [@vm.inferred-type.metadata=#lib::A] self::foo();
-        [yield] let dynamic #t1 = asy::_awaitHelper([@vm.inferred-type.metadata=dart.async::_Future<dynamic>] self::baz(), :async_op_then, :async_op_error, :async_op) in null;
-        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] :async_temporary_0{dynamic}.bar(:result), :async_op_then, :async_op_error, :async_op) in null;
-        :result;
+        [yield] let dynamic #t1 = asy::_awaitHelper([@vm.inferred-type.metadata=dart.async::_Future<dynamic>] self::baz(), :async_op_then, :async_op_error) in null;
+        [yield] let dynamic #t2 = asy::_awaitHelper([@vm.direct-call.metadata=#lib::A.bar??] [@vm.inferred-type.metadata=dart.async::_Future<dynamic> (receiver not int)] :async_temporary_0{dynamic}.bar(:result_or_exception), :async_op_then, :async_op_error) in null;
+        :result_or_exception;
       }
-      asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
     on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
@@ -96,7 +96,7 @@
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(){() → dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
index 5fa7916..b2f616f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
@@ -4,5 +4,5 @@
 
 static method main() → dynamic {
   dynamic x = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(10);
-  [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.direct-call.metadata=dart.core::_List.[]] [@vm.inferred-type.metadata=int? (receiver not int)] x{dynamic}.[](0){dynamic}.+(10);
+  [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+??] [@vm.direct-call.metadata=dart.core::_Array.[]] [@vm.inferred-type.metadata=int? (receiver not int)] x{dynamic}.[](0){dynamic}.+(10);
 }
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 1443d95..bdf5f22 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:3384,getterSelectorId:3385]  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,methodOrSetterSelectorId:3333,getterSelectorId:3334]  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/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index f5fb218..1531bb7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -55,7 +55,7 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  no-such-method-forwarder method foo() → dynamic
     return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b]  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
@@ -74,7 +74,7 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  no-such-method-forwarder method foo() → dynamic
     return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b]  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C.noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
 }
 class E extends core::Object implements self::A {
   synthetic constructor •() → self::E
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
index a2ce7a5..3edc30c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
@@ -37,9 +37,9 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(#C1 ?{core::String} "" : "mapKeep", #C2){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
@@ -82,7 +82,7 @@
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
   constructor _() → self::BarKeep
@@ -105,7 +105,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::HasKeep
@@ -119,7 +119,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
index a36af4a..5f438f9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
@@ -30,9 +30,9 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep", createEmptyInstance: #C2) in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(#C1 ?{core::String} "" : "mapKeep", #C3){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", "hasKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", "clearKeep", #C5){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
@@ -69,7 +69,7 @@
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep", createEmptyInstance: #C3) in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::BarKeep
@@ -86,7 +86,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep", createEmptyInstance: #C4) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::HasKeep
@@ -100,7 +100,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t5 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep", createEmptyInstance: #C5) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t5;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
index 423420c..0df0c27 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
@@ -44,7 +44,7 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, #C1 ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", "mapKeep", #C2){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::ZopDrop>(4, #C1 ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", "mapDrop", #C3){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep", "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
@@ -112,7 +112,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::HasKeep
@@ -128,7 +128,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
index c046050..426f988 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
@@ -40,9 +40,9 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(#C1 ?{core::String} "" : "mapKeep", #C2){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
@@ -85,7 +85,7 @@
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
   constructor _() → self::BarKeep
@@ -108,7 +108,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::HasKeep
@@ -122,7 +122,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
index 69b1559..ce3bd09 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::_SplayTree<self::_SplayTree::Node>
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add(covariant-by-class self::_SplayTree::Node n) → dynamic {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add([@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] covariant-by-class self::_SplayTree::Node n) → dynamic {
     self::_SplayTree::Node? root = [@vm.direct-call.metadata=#lib::SplayTreeMap._root] [@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] this.{self::_SplayTree::_root}{self::_SplayTree::Node?};
     ;
     core::print([@vm.direct-call.metadata=#lib::_SplayTreeNode.left] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] root{self::_SplayTree::Node}.{self::_SplayTreeNode::left}{self::_SplayTree::Node?});
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
index fa24c7a..9b6b0d9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A1.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A1::foo} = _in::unsafeCast<self::T1?>(a5);
   }
 }
@@ -42,7 +42,7 @@
   synthetic constructor •() → self::A2
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A2.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A2::foo} = a6;
   }
 }
@@ -75,7 +75,7 @@
   synthetic constructor •() → self::A3
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:24,getterSelectorId:25]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:24,getterSelectorId:25]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A3.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A3::foo} = a7;
   }
 }
@@ -98,7 +98,7 @@
   synthetic constructor •() → self::A4
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:32,getterSelectorId:33]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:32,getterSelectorId:33]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A4.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A4::foo} = a8;
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
index 4c3106f..963f8c2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter81068.dart.expect
@@ -17,11 +17,11 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method noSuchMethod(core::Invocation i) → dynamic
     return throw "Not implemented";
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError) → asy::Future<self::B::T%>
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: #C4}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: #C4}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::B::T%>
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::T%>;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::B::T%) → FutureOr<self::B::then::R%>onValue, {core::Function? onError = #C4}) → asy::Future<self::B::then::R%>
-    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R%)), core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::then::R%>;
+    return [@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R%)), [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::B::then::R%>;
 }
 static method createB<T extends core::Object? = dynamic>() → self::B<dynamic>
   return new self::B::•<self::createB::T%>();
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 c16c8ac..0a305ef 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:3388,getterSelectorId:3389]  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,methodOrSetterSelectorId:3337,getterSelectorId:3338]  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 1d09a57..6f14afa 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,6 +1,6 @@
 # Changelog
 
-## 8.2.0-dev
+## 8.2.0
 - Update to version `3.56` of the spec.
 - Added optional `line` and `column` properties to `SourceLocation`.
 - Added a new `SourceReportKind`, `BranchCoverage`, which reports branch level
diff --git a/pkg/vm_service/OWNERS b/pkg/vm_service/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/vm_service/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java
index 7fdc2dd..b9b746f 100644
--- a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java
@@ -13,7 +13,7 @@
  */
 package org.dartlang.vm.service.consumer;
 
-// This is a generated file.
+// This file is generated by the script: pkg/vm_service/tool/generate.dart in dart-lang/sdk.
 
 import org.dartlang.vm.service.element.Breakpoint;
 
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java
index 6bc5e2f..8b45e8a 100644
--- a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java
@@ -13,7 +13,7 @@
  */
 package org.dartlang.vm.service.consumer;
 
-// This is a generated file.
+// This file is generated by the script: pkg/vm_service/tool/generate.dart in dart-lang/sdk.
 
 import org.dartlang.vm.service.element.CpuSamples;
 
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/element/Element.java b/pkg/vm_service/java/src/org/dartlang/vm/service/element/Element.java
index cdee4bd..7fc05db 100644
--- a/pkg/vm_service/java/src/org/dartlang/vm/service/element/Element.java
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/element/Element.java
@@ -92,7 +92,8 @@
     int size = array.size();
     List<String> result = new ArrayList<>();
     for (int index = 0; index < size; ++index) {
-      result.add(array.get(index).getAsString());
+      final JsonElement elem = array.get(index);
+      result.add(elem == JsonNull.INSTANCE ? null : elem.getAsString());
     }
     return result;
   }
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 4905a0d..f22ff9d 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -3420,7 +3420,7 @@
 }
 
 /// A `Code` object represents compiled code in the Dart VM.
-class Code extends ObjRef implements CodeRef {
+class Code extends Obj implements CodeRef {
   static Code? parse(Map<String, dynamic>? json) =>
       json == null ? null : Code._fromJson(json);
 
diff --git a/pkg/vm_service/pubspec.yaml b/pkg/vm_service/pubspec.yaml
index 99c5e18..8240e95 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-dev
+version: 8.2.0
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_service
 
@@ -14,6 +14,7 @@
 
 dev_dependencies:
   async: ^2.5.0
+  expect: any
   markdown: ^4.0.0-nullsafety.0
   mockito: ^5.0.0-nullsafety.1
   path: ^1.8.0
diff --git a/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart b/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
new file mode 100644
index 0000000..ebedeeb
--- /dev/null
+++ b/pkg/vm_service/test/breakpoint_in_enhanced_enums_test.dart
@@ -0,0 +1,111 @@
+// 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.
+//
+// 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_B = LINE_A + 11;
+const int LINE_C = LINE_B + 4;
+const int LINE_D = LINE_C + 4;
+const int LINE_E = LINE_D + 5;
+const int LINE_F = LINE_E + 4;
+const int LINE_G = LINE_F + 5;
+const int LINE_H = LINE_G + 4;
+
+mixin M on Object {
+  int mixedInMethod() {
+    print('mixedInMethod'); // LINE_A
+    return 0;
+  }
+}
+
+enum E with M {
+  e1,
+  e2,
+  e3;
+
+  void instanceMethod() {
+    print('instanceMethod'); // LINE_B
+  }
+
+  static void staticMethod() {
+    print('staticMethod'); // LINE_C
+  }
+
+  int get getter {
+    print('getter'); // LINE_D
+    return 0;
+  }
+
+  set setter(int x) {
+    print('setter'); // LINE_E
+  }
+
+  static int get staticGetter {
+    print('staticGetter'); // LINE_F
+    return 0;
+  }
+
+  static set staticSetter(int x) {
+    print('staticSetter'); // LINE_G
+  }
+
+  String toString() {
+    print('overriden toString'); // LINE_H
+    return '';
+  }
+}
+
+void testMain() {
+  E.staticMethod();
+  E.staticGetter;
+  E.staticSetter = 42;
+  final e = E.e1;
+  e.mixedInMethod();
+  e.instanceMethod();
+  e.getter;
+  e.setter = 42;
+  e.toString();
+}
+
+const lines = <int>[
+  LINE_C,
+  LINE_F,
+  LINE_G,
+  LINE_A,
+  LINE_B,
+  LINE_D,
+  LINE_E,
+  LINE_H,
+];
+
+const fileName = 'breakpoint_in_enhanced_enums_test.dart';
+final expected = <String>[
+  for (final line in lines) '$fileName:$line:5',
+];
+
+final stops = <String>[];
+
+final tests = <IsolateTest>[
+  hasPausedAtStart,
+  for (final line in lines) setBreakpointAtLine(line),
+  resumeProgramRecordingStops(stops, false),
+  checkRecordedStops(stops, expected),
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      fileName,
+      testeeConcurrent: testMain,
+      pause_on_start: true,
+      pause_on_exit: true,
+      experiments: ['enhanced-enums'],
+    );
diff --git a/pkg/vm_service/test/causal_async_stack_contents_test.dart b/pkg/vm_service/test/causal_async_stack_contents_test.dart
new file mode 100644
index 0000000..b634f10
--- /dev/null
+++ b/pkg/vm_service/test/causal_async_stack_contents_test.dart
@@ -0,0 +1,76 @@
+// 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.
+//
+// VMOptions=--lazy-async-stacks --verbose_debug
+
+import 'dart:developer';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const LINE_C = 20;
+const LINE_A = 26;
+const LINE_B = 32;
+
+foobar() {
+  debugger();
+  print('foobar'); // LINE_C.
+}
+
+helper() async {
+  await 0; // force async gap
+  debugger();
+  print('helper'); // LINE_A.
+  foobar();
+}
+
+testMain() {
+  debugger();
+  helper(); // LINE_B.
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // No causal frames because we are in a completely synchronous stack.
+    expect(stack.asyncCausalFrames, isNull);
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+    expect(
+      stack.asyncCausalFrames![0].function!.owner.name,
+      contains('helper'),
+    );
+    // "helper" is not await'ed.
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_C),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside a function called by an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+    final asyncStack = stack.asyncCausalFrames!;
+    expect(asyncStack[0].function!.name, contains('foobar'));
+    expect(asyncStack[1].function!.owner.name, contains('helper'));
+    // "helper" is not await'ed.
+  },
+];
+
+main(args) => runIsolateTestsSynchronous(
+      args,
+      tests,
+      'causal_async_stack_contents_test.dart',
+      testeeConcurrent: testMain,
+      extraArgs: extraDebuggingArgs,
+    );
diff --git a/pkg/vm_service/test/causal_async_stack_presence_test.dart b/pkg/vm_service/test/causal_async_stack_presence_test.dart
new file mode 100644
index 0000000..48bf16e
--- /dev/null
+++ b/pkg/vm_service/test/causal_async_stack_presence_test.dart
@@ -0,0 +1,67 @@
+// 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.
+//
+// VMOptions=--lazy-async-stacks --verbose_debug
+
+import 'dart:developer';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const LINE_C = 19;
+const LINE_A = 25;
+const LINE_B = 31;
+
+foobar() {
+  debugger();
+  print('foobar'); // LINE_C.
+}
+
+helper() async {
+  await 0; // Yield. The rest will run async.
+  debugger();
+  print('helper'); // LINE_A.
+  foobar();
+}
+
+testMain() {
+  debugger();
+  helper(); // LINE_B.
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // No causal frames because we are in a completely synchronous stack.
+    // Async function hasn't yielded yet.
+    expect(stack.asyncCausalFrames, isNull);
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Async function has yielded once, so it's now running async.
+    expect(stack.asyncCausalFrames, isNotNull);
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_C),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside a function called by an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+  },
+];
+
+main(args) => runIsolateTestsSynchronous(
+      args,
+      tests,
+      'causal_async_stack_presence_test.dart',
+      testeeConcurrent: testMain,
+      extraArgs: extraDebuggingArgs,
+    );
diff --git a/pkg/vm_service/test/causal_async_star_stack_contents_test.dart b/pkg/vm_service/test/causal_async_star_stack_contents_test.dart
new file mode 100644
index 0000000..4795850
--- /dev/null
+++ b/pkg/vm_service/test/causal_async_star_stack_contents_test.dart
@@ -0,0 +1,97 @@
+// 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.
+//
+// VMOptions=--lazy-async-stacks --verbose_debug
+
+import 'dart:developer';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const LINE_A = 29;
+const LINE_B = 21;
+const LINE_C = 23;
+
+foobar() async* {
+  await 0; // force async gap
+  debugger();
+  yield 1; // LINE_B.
+  debugger();
+  yield 2; // LINE_C.
+}
+
+helper() async {
+  await 0; // force async gap
+  debugger();
+  print('helper'); // LINE_A.
+  await for (var i in foobar()) {
+    print('helper $i');
+  }
+}
+
+testMain() {
+  helper();
+}
+
+final tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // No causal frames because we are in a completely synchronous stack.
+    expect(stack.asyncCausalFrames, isNotNull);
+    final asyncStack = stack.asyncCausalFrames!;
+    expect(asyncStack.length, greaterThanOrEqualTo(1));
+    expect(asyncStack[0].function!.owner.name, contains('helper'));
+    // helper isn't awaited.
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+    final asyncStack = stack.asyncCausalFrames!;
+    expect(asyncStack.length, greaterThanOrEqualTo(3));
+    expect(asyncStack[0].function!.owner.name, contains('foobar'));
+    expect(asyncStack[1].kind, equals(FrameKind.kAsyncSuspensionMarker));
+    expect(asyncStack[2].function!.owner.name, contains('helper'));
+    expect(asyncStack[3].kind, equals(FrameKind.kAsyncSuspensionMarker));
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_C),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside a function called by an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+    final asyncStack = stack.asyncCausalFrames!;
+    expect(asyncStack.length, greaterThanOrEqualTo(4));
+    final script = await service.getObject(
+        isolateRef.id!, asyncStack[0].location!.script!.id!) as Script;
+    expect(asyncStack[0].function!.owner.name, contains('foobar'));
+    expect(
+      script.getLineNumberFromTokenPos(asyncStack[0].location!.tokenPos!),
+      LINE_C,
+    );
+    expect(asyncStack[1].kind, equals(FrameKind.kAsyncSuspensionMarker));
+    expect(asyncStack[2].function!.owner.name, contains('helper'));
+    expect(
+      script.getLineNumberFromTokenPos(asyncStack[2].location!.tokenPos!),
+      30,
+    );
+    expect(asyncStack[3].kind, equals(FrameKind.kAsyncSuspensionMarker));
+  },
+];
+
+main(args) => runIsolateTestsSynchronous(
+      args,
+      tests,
+      'causal_async_star_stack_contents_test.dart',
+      testeeConcurrent: testMain,
+      extraArgs: extraDebuggingArgs,
+    );
diff --git a/pkg/vm_service/test/causal_async_star_stack_presence_test.dart b/pkg/vm_service/test/causal_async_star_stack_presence_test.dart
new file mode 100644
index 0000000..5ba0a7d
--- /dev/null
+++ b/pkg/vm_service/test/causal_async_star_stack_presence_test.dart
@@ -0,0 +1,68 @@
+// 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.
+//
+// VMOptions=--lazy-async-stacks --verbose_debug
+
+import 'dart:developer';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const LINE_A = 26;
+const LINE_B = 19;
+const LINE_C = 21;
+
+foobar() async* {
+  debugger();
+  yield 1; // LINE_B.
+  debugger();
+  yield 2; // LINE_C.
+}
+
+helper() async {
+  debugger();
+  print('helper'); // LINE_A.
+  await for (var i in foobar()) {
+    print('helper $i');
+  }
+}
+
+testMain() {
+  helper();
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // No causal frames because we are in a completely synchronous stack.
+    expect(stack.asyncCausalFrames, isNull);
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_C),
+  (VmService service, IsolateRef isolateRef) async {
+    Stack stack = await service.getStack(isolateRef.id!);
+    // Has causal frames (we are inside a function called by an async function)
+    expect(stack.asyncCausalFrames, isNotNull);
+  },
+];
+
+main(args) => runIsolateTestsSynchronous(
+      args,
+      tests,
+      'causal_async_star_stack_presence_test.dart',
+      testeeConcurrent: testMain,
+      extraArgs: extraDebuggingArgs,
+    );
diff --git a/pkg/vm_service/test/code_test.dart b/pkg/vm_service/test/code_test.dart
new file mode 100644
index 0000000..3803827
--- /dev/null
+++ b/pkg/vm_service/test/code_test.dart
@@ -0,0 +1,90 @@
+// 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 'dart:async';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+import 'common/test_helper.dart';
+
+int counter = 0;
+
+void funcB() {
+  counter++; // line 13
+  if (counter % 100000000 == 0) {
+    print(counter);
+  }
+}
+
+void funcA() {
+  funcB();
+}
+
+void testFunction() {
+  while (true) {
+    funcA();
+  }
+}
+
+var tests = <IsolateTest>[
+// Go to breakpoint at line 13.
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final rootLib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    // Set up a listener to wait for breakpoint events.
+    final completer = Completer<void>();
+
+    late final StreamSubscription subscription;
+    subscription = service.onDebugEvent.listen((event) async {
+      if (event.kind == EventKind.kPauseBreakpoint) {
+        print('Breakpoint reached');
+        await service.streamCancel(EventStreams.kDebug);
+        await subscription.cancel();
+        completer.complete();
+      }
+    });
+    await service.streamListen(EventStreams.kDebug);
+
+    // Add the breakpoint.
+    final script = rootLib.scripts![0];
+    final line = 13;
+    await service.addBreakpoint(isolateId, script.id!, line);
+    await completer.future; // Wait for breakpoint reached.
+  },
+
+// Inspect code objects for top two frames.
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    Stack stack = await service.getStack(isolateId);
+    // Make sure we are in the right place.
+    expect(stack.frames!.length, greaterThanOrEqualTo(3));
+    final frame0 = stack.frames![0];
+    final frame1 = stack.frames![1];
+    expect(frame0.function!.name, equals('funcB'));
+    expect(frame1.function!.name, equals('funcA'));
+    final codeId0 = frame0.code!.id!;
+    final codeId1 = frame1.code!.id!;
+
+    // Load code from frame 0.
+    Code code = await service.getObject(isolateId, codeId0) as Code;
+    expect(code.name, contains('funcB'));
+    expect(code.json!['_disassembly'], isNotNull);
+    expect(code.json!['_disassembly'].length, greaterThan(0));
+
+    // Load code from frame 0.
+    code = await service.getObject(isolateId, codeId1) as Code;
+    expect(code.type, equals('Code'));
+    expect(code.name, contains('funcA'));
+    expect(code.json!['_disassembly'], isNotNull);
+    expect(code.json!['_disassembly'].length, greaterThan(0));
+  },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'code_test.dart',
+      testeeConcurrent: testFunction,
+    );
diff --git a/pkg/vm_service/test/column_breakpoint_test.dart b/pkg/vm_service/test/column_breakpoint_test.dart
new file mode 100644
index 0000000..8989f0d
--- /dev/null
+++ b/pkg/vm_service/test/column_breakpoint_test.dart
@@ -0,0 +1,44 @@
+// 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 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+code() {
+  var b = [1, 2].map((i) => i == 0).toList();
+  print(b.length);
+}
+
+const int LINE = 9;
+const int COLUMN = 29;
+const String shortFile = "column_breakpoint_test.dart";
+const String breakpointFile =
+    "package:observatory_test_package/column_breakpoint_test.dart";
+
+List<String> stops = [];
+
+List<String> expected = [
+  "$shortFile:${LINE + 0}:23", // on 'i == 0'
+  "$shortFile:${LINE + 0}:23", // iterate twice
+  "$shortFile:${LINE + 1}:3" //on 'b.length'
+];
+
+var tests = <IsolateTest>[
+  hasPausedAtStart,
+  setBreakpointAtLineColumn(LINE, COLUMN), // on 'i == 0'
+  setBreakpointAtLineColumn(LINE + 1, 9), // on 'b.length'
+  resumeProgramRecordingStops(stops, false),
+  checkRecordedStops(stops, expected)
+];
+
+main(args) {
+  runIsolateTestsSynchronous(
+    args,
+    tests,
+    'column_breakpoint_test.dart',
+    testeeConcurrent: code,
+    pause_on_start: true,
+    pause_on_exit: true,
+  );
+}
diff --git a/pkg/vm_service/test/common/service_test_common.dart b/pkg/vm_service/test/common/service_test_common.dart
index 6e84d16..268060a 100644
--- a/pkg/vm_service/test/common/service_test_common.dart
+++ b/pkg/vm_service/test/common/service_test_common.dart
@@ -142,6 +142,25 @@
   };
 }
 
+IsolateTest setBreakpointAtLineColumn(int line, int column) {
+  return (VmService service, IsolateRef isolateRef) async {
+    print("Setting breakpoint for line $line column $column");
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final lib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    ScriptRef script = lib.scripts!.firstWhere((s) => s.uri == lib.uri);
+    Breakpoint bpt = await service.addBreakpoint(
+      isolateId,
+      script.id!,
+      line,
+      column: column,
+    );
+    print("Breakpoint is $bpt");
+    expect(bpt, isNotNull);
+  };
+}
+
 IsolateTest stoppedAtLine(int line) {
   return (VmService service, IsolateRef isolateRef) async {
     print("Checking we are at line $line");
@@ -211,6 +230,34 @@
   }
 }
 
+Future<void> resumeAndAwaitEvent(
+  VmService service,
+  IsolateRef isolateRef,
+  String streamId,
+  Function(Event) onEvent,
+) async {
+  final completer = Completer<void>();
+  late final StreamSubscription sub;
+  sub = service.onEvent(streamId).listen((event) async {
+    await onEvent(event);
+    await sub.cancel();
+    await service.streamCancel(streamId);
+    completer.complete();
+  });
+
+  await service.streamListen(streamId);
+  await service.resume(isolateRef.id!);
+  return completer.future;
+}
+
+IsolateTest resumeIsolateAndAwaitEvent(
+  String streamId,
+  Function(Event) onEvent,
+) {
+  return (VmService service, IsolateRef isolate) async =>
+      resumeAndAwaitEvent(service, isolate, streamId, onEvent);
+}
+
 Future<void> stepOver(VmService service, IsolateRef isolateRef) async {
   await service.streamListen(EventStreams.kDebug);
   await _subscribeDebugStream(service);
@@ -242,14 +289,13 @@
     subscription = service.onDebugEvent.listen((event) async {
       if (event.kind == EventKind.kPauseBreakpoint) {
         final stack = await service.getStack(isolateRef.id!);
-        final frames = stack.frames!;
-        expect(frames.length, greaterThanOrEqualTo(2));
+        expect(stack.frames!.length, greaterThanOrEqualTo(2));
 
         String brokeAt =
-            await _locationToString(service, isolateRef, frames[0]);
+            await _locationToString(service, isolateRef, stack.frames![0]);
         if (includeCaller) {
           brokeAt =
-              '$brokeAt (${await _locationToString(service, isolateRef, frames[1])})';
+              '$brokeAt (${await _locationToString(service, isolateRef, stack.frames![1])})';
         }
         recordStops.add(brokeAt);
         await service.resume(isolateRef.id!);
diff --git a/pkg/vm_service/test/common/test_helper.dart b/pkg/vm_service/test/common/test_helper.dart
index 62ced95..8415c74 100644
--- a/pkg/vm_service/test/common/test_helper.dart
+++ b/pkg/vm_service/test/common/test_helper.dart
@@ -32,7 +32,7 @@
 }
 
 Uri _getTestUri(String script) {
-  if (io.Platform.script.scheme == 'data') {
+  if (io.Platform.script.isScheme('data')) {
     // If running from pub we can assume that we're in the root of the package
     // directory.
     return Uri.parse('test/$script');
@@ -349,8 +349,6 @@
     });
     await service.streamListen(EventStreams.kIsolate);
 
-    await service.streamListen(EventStreams.kIsolate);
-
     // The isolate may have started before we subscribed.
     vm = await service.getVM();
     if (vmIsolates.isNotEmpty) {
diff --git a/pkg/vm_service/test/contexts_test.dart b/pkg/vm_service/test/contexts_test.dart
new file mode 100644
index 0000000..4047e7a
--- /dev/null
+++ b/pkg/vm_service/test/contexts_test.dart
@@ -0,0 +1,151 @@
+// 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 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/test_helper.dart';
+
+// Make sure these variables are not removed by the tree shaker.
+@pragma("vm:entry-point")
+var cleanBlock;
+@pragma("vm:entry-point")
+var copyingBlock;
+@pragma("vm:entry-point")
+var fullBlock;
+@pragma("vm:entry-point")
+var fullBlockWithChain;
+
+Function genCleanBlock() {
+  block(x) => x;
+  return block;
+}
+
+Function genCopyingBlock() {
+  final x = 'I could be copied into the block';
+  block() => x;
+  return block;
+}
+
+Function genFullBlock() {
+  var x = 42; // I must captured in a context.
+  block() => x;
+  x++;
+  return block;
+}
+
+Function genFullBlockWithChain() {
+  var x = 420; // I must captured in a context.
+  outerBlock() {
+    var y = 4200;
+    innerBlock() => x + y;
+    y++;
+    return innerBlock;
+  }
+
+  x++;
+  return outerBlock();
+}
+
+void script() {
+  cleanBlock = genCleanBlock();
+  copyingBlock = genCopyingBlock();
+  fullBlock = genFullBlock();
+  fullBlockWithChain = genFullBlockWithChain();
+}
+
+var tests = <IsolateTest>[
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final lib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    final field = await service.getObject(
+      isolateId,
+      lib.variables!.singleWhere((v) => v.name == 'cleanBlock').id!,
+    ) as Field;
+
+    Instance block =
+        await service.getObject(isolateId, field.staticValue!.id!) as Instance;
+    expect(block.closureFunction, isNotNull);
+    expect(block.closureContext, isNull);
+  },
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final lib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    final field = await service.getObject(
+      isolateId,
+      lib.variables!.singleWhere((v) => v.name == 'copyingBlock').id!,
+    ) as Field;
+    Instance block =
+        await service.getObject(isolateId, field.staticValue!.id!) as Instance;
+
+    expect(block.closureContext, isNotNull);
+    expect(block.closureContext!.length, equals(1));
+    final ctxt = await service.getObject(isolateId, block.closureContext!.id!)
+        as Context;
+    expect(ctxt.variables!.single.value.kind, InstanceKind.kString);
+    expect(
+      ctxt.variables!.single.value.valueAsString,
+      'I could be copied into the block',
+    );
+    expect(ctxt.parent, isNull);
+  },
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final lib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    final field = await service.getObject(
+      isolateId,
+      lib.variables!.singleWhere((v) => v.name == 'fullBlock').id!,
+    ) as Field;
+    Instance block =
+        await service.getObject(isolateId, field.staticValue!.id!) as Instance;
+
+    expect(block.closureContext, isNotNull);
+    expect(block.closureContext!.length, equals(1));
+    final ctxt = await service.getObject(isolateId, block.closureContext!.id!)
+        as Context;
+
+    expect(ctxt.variables!.single.value.kind, InstanceKind.kInt);
+    expect(ctxt.variables!.single.value.valueAsString, '43');
+    expect(ctxt.parent, isNull);
+  },
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final lib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    final field = await service.getObject(
+      isolateId,
+      lib.variables!.singleWhere((v) => v.name == 'fullBlockWithChain').id!,
+    ) as Field;
+    final block =
+        await service.getObject(isolateId, field.staticValue!.id!) as Instance;
+
+    expect(block.closureContext, isNotNull);
+    expect(block.closureContext!.length, equals(1));
+    final ctxt = await service.getObject(isolateId, block.closureContext!.id!)
+        as Context;
+    expect(ctxt.variables!.single.value.kind, InstanceKind.kInt);
+    expect(ctxt.variables!.single.value.valueAsString, '4201');
+    expect(ctxt.parent!.length, 1);
+
+    final outerCtxt =
+        await service.getObject(isolateId, ctxt.parent!.id!) as Context;
+    expect(outerCtxt.variables!.single.value.kind, InstanceKind.kInt);
+    expect(outerCtxt.variables!.single.value.valueAsString, '421');
+    expect(outerCtxt.parent, isNull);
+  },
+];
+
+main(args) => runIsolateTests(
+      args,
+      tests,
+      'contexts_test.dart',
+      testeeBefore: script,
+    );
diff --git a/pkg/vm_service/test/coverage_const_field_async_closure_test.dart b/pkg/vm_service/test/coverage_const_field_async_closure_test.dart
new file mode 100644
index 0000000..8a7430d
--- /dev/null
+++ b/pkg/vm_service/test/coverage_const_field_async_closure_test.dart
@@ -0,0 +1,83 @@
+// 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:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const int LINE_A = 17; // LINE_A - 4
+const int LINE_B = 25; // LINE_A - 3
+
+class Bar {
+  static const String field = "field"; // LINE_A
+}
+
+Future<String> fooAsync(int x) async {
+  if (x == 42) {
+    return '*' * x;
+  }
+  return List.generate(x, (_) => 'xyzzy').join(' ');
+} // LINE_B
+
+Future<void> testFunction() async {
+  await Future.delayed(Duration(milliseconds: 500));
+  // ignore: unawaited_futures
+  fooAsync(42).then((_) {});
+  debugger();
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final stack = await service.getStack(isolateId);
+
+    // Make sure we are in the right place.
+    expect(stack.frames!.length, greaterThanOrEqualTo(1));
+    // Async closure of testFunction
+    expect(stack.frames![0].function!.name, 'async_op');
+
+    final rootLib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    final script = await service.getObject(
+        isolateId, rootLib.scripts!.first.id!) as Script;
+
+    final report = await service.getSourceReport(
+      isolateId,
+      ['Coverage'],
+      scriptId: script.id!,
+      forceCompile: true,
+    );
+    int match = 0;
+    for (var range in report.ranges!) {
+      for (int i in range.coverage!.hits!) {
+        int? line = script.getLineNumberFromTokenPos(i);
+        if (line == null) {
+          throw FormatException('token ${i} was missing source location');
+        }
+        // Check LINE.
+        if (line == LINE_A || line == LINE_A - 3 || line == LINE_A - 4) {
+          match = match + 1;
+        }
+        // _clearAsyncThreadStackTrace should have an invalid token position.
+        expect(line, isNot(LINE_B));
+      }
+    }
+    // Neither LINE nor Bar.field should be added into coverage.
+    expect(match, 0);
+  },
+  resumeIsolate
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'coverage_const_field_async_closure_test.dart',
+      testeeConcurrent: testFunction,
+    );
diff --git a/pkg/vm_service/test/coverage_leaf_function_test.dart b/pkg/vm_service/test/coverage_leaf_function_test.dart
index 36b9a88..95ec6f8 100644
--- a/pkg/vm_service/test/coverage_leaf_function_test.dart
+++ b/pkg/vm_service/test/coverage_leaf_function_test.dart
@@ -3,8 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:developer';
+
 import 'package:test/test.dart';
 import 'package:vm_service/vm_service.dart';
+
 import 'common/service_test_common.dart';
 import 'common/test_helper.dart';
 
@@ -38,7 +40,7 @@
     expect(stack.frames!.length, greaterThanOrEqualTo(1));
     expect(stack.frames![0].function!.name, 'testFunction');
 
-    final Library root =
+    final root =
         await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
     FuncRef funcRef =
         root.functions!.singleWhere((f) => f.name == 'leafFunction');
@@ -69,12 +71,12 @@
   coverageTest(
     {
       'scriptIndex': 0,
-      'startPos': 397,
-      'endPos': 447,
+      'startPos': 399,
+      'endPos': 449,
       'compiled': true,
       'coverage': {
         'hits': [],
-        'misses': [397]
+        'misses': [399]
       }
     },
     reportLines: false,
@@ -82,12 +84,12 @@
   coverageTest(
     {
       'scriptIndex': 0,
-      'startPos': 397,
-      'endPos': 447,
+      'startPos': 399,
+      'endPos': 449,
       'compiled': true,
       'coverage': {
         'hits': [],
-        'misses': [11]
+        'misses': [13]
       }
     },
     reportLines: true,
@@ -97,11 +99,11 @@
   coverageTest(
     {
       'scriptIndex': 0,
-      'startPos': 397,
-      'endPos': 447,
+      'startPos': 399,
+      'endPos': 449,
       'compiled': true,
       'coverage': {
-        'hits': [397],
+        'hits': [399],
         'misses': []
       }
     },
@@ -110,11 +112,11 @@
   coverageTest(
     {
       'scriptIndex': 0,
-      'startPos': 397,
-      'endPos': 447,
+      'startPos': 399,
+      'endPos': 449,
       'compiled': true,
       'coverage': {
-        'hits': [11],
+        'hits': [13],
         'misses': []
       }
     },
diff --git a/pkg/vm_service/test/coverage_optimized_function_test.dart b/pkg/vm_service/test/coverage_optimized_function_test.dart
new file mode 100644
index 0000000..129fddc7
--- /dev/null
+++ b/pkg/vm_service/test/coverage_optimized_function_test.dart
@@ -0,0 +1,73 @@
+// 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.
+// VMOptions=--no_background_compilation --optimization_counter_threshold=10
+
+import 'dart:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+String optimizedFunction() {
+  return 5.toString() + 3.toString();
+}
+
+void testFunction() {
+  for (var i = 0; i < 20; i++) {
+    optimizedFunction();
+  }
+  debugger();
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final stack = await service.getStack(isolateId);
+
+    // Make sure we are in the right place.
+    expect(stack.frames!.length, greaterThanOrEqualTo(1));
+    expect(stack.frames![0].function!.name, 'testFunction');
+
+    final root =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+    final func = await service.getObject(
+      isolateId,
+      root.functions!.singleWhere((f) => f.name == 'optimizedFunction').id!,
+    ) as Func;
+
+    final report = await service.getSourceReport(
+      isolateId,
+      ['Coverage'],
+      scriptId: func.location!.script!.id!,
+      tokenPos: func.location!.tokenPos,
+      endTokenPos: func.location!.endTokenPos,
+      forceCompile: true,
+    );
+    expect(report.ranges!.length, 1);
+    final range = report.ranges![0];
+    expect(range.scriptIndex, 0);
+    expect(range.startPos, 476);
+    expect(range.endPos, 543);
+    expect(range.compiled, true);
+    final coverage = range.coverage!;
+    expect(coverage.hits, const [476, 516, 527, 531]);
+    expect(coverage.misses, isEmpty);
+    expect(report.scripts!.length, 1);
+    expect(
+      report.scripts![0].uri,
+      endsWith('coverage_optimized_function_test.dart'),
+    );
+  },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'coverage_optimized_function_test.dart',
+      testeeConcurrent: testFunction,
+    );
diff --git a/pkg/vm_service/test/debugger_inspect_test.dart b/pkg/vm_service/test/debugger_inspect_test.dart
new file mode 100644
index 0000000..ab85371
--- /dev/null
+++ b/pkg/vm_service/test/debugger_inspect_test.dart
@@ -0,0 +1,54 @@
+// 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 'dart:async';
+import 'dart:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/test_helper.dart';
+
+class Point {
+  int x, y;
+  Point(this.x, this.y);
+}
+
+void testeeDo() {
+  inspect(Point(3, 4));
+}
+
+final tests = <IsolateTest>[
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+
+    final completer = Completer();
+    late StreamSubscription sub;
+    sub = service.onDebugEvent.listen((event) async {
+      if (event.kind == EventKind.kInspect) {
+        expect(event.inspectee!.classRef!.name, 'Point');
+        await sub.cancel();
+        await service.streamCancel(EventStreams.kDebug);
+        completer.complete();
+      }
+    });
+
+    await service.streamListen(EventStreams.kDebug);
+
+    // Start listening for events first.
+    await service.evaluate(
+      isolateRef.id!,
+      isolate.rootLib!.id!,
+      'testeeDo()',
+    );
+    await completer.future;
+  },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'debugger_inspect_test.dart',
+    );
diff --git a/pkg/vm_service/test/debugging_inlined_finally_test.dart b/pkg/vm_service/test/debugging_inlined_finally_test.dart
new file mode 100644
index 0000000..c6ebeda
--- /dev/null
+++ b/pkg/vm_service/test/debugging_inlined_finally_test.dart
@@ -0,0 +1,143 @@
+// 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 'dart:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const int LINE_A = 25;
+const int LINE_B = 28;
+const int LINE_C = 31;
+
+testFunction() {
+  debugger();
+  var a;
+  try {
+    var b;
+    try {
+      for (int i = 0; i < 10; i++) {
+        var x = () => i + a + b;
+        return x; // LINE_A
+      }
+    } finally {
+      b = 10; // LINE_B
+    }
+  } finally {
+    a = 1; // LINE_C
+  }
+}
+
+testMain() {
+  var f = testFunction();
+  expect(f(), equals(11));
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  // Add breakpoint
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    Isolate isolate = await service.getIsolate(isolateId);
+    final rootLib =
+        await service.getObject(isolateId, isolate.rootLib!.id!) as Library;
+
+    final script =
+        await service.getObject(isolateId, rootLib.scripts![0].id!) as Script;
+
+    // Add 3 breakpoints.
+    {
+      final bpt = await service.addBreakpoint(isolateId, script.id!, LINE_A);
+      expect(bpt.location!.script.id!, script.id);
+      final tmpScript =
+          await service.getObject(isolateId, script.id!) as Script;
+      expect(
+        tmpScript.getLineNumberFromTokenPos(bpt.location!.tokenPos),
+        LINE_A,
+      );
+      isolate = await service.getIsolate(isolateId);
+      expect(isolate.breakpoints!.length, 1);
+    }
+
+    {
+      final bpt = await service.addBreakpoint(isolateId, script.id!, LINE_B);
+      expect(bpt.location!.script.id, script.id);
+      final tmpScript =
+          await service.getObject(isolateId, script.id!) as Script;
+      expect(
+        tmpScript.getLineNumberFromTokenPos(bpt.location!.tokenPos),
+        LINE_B,
+      );
+      isolate = await service.getIsolate(isolateId);
+      expect(isolate.breakpoints!.length, 2);
+    }
+
+    {
+      final bpt = await service.addBreakpoint(isolateId, script.id!, LINE_C);
+      expect(bpt.location!.script.id, script.id!);
+      final tmpScript =
+          await service.getObject(isolateId, script.id!) as Script;
+      expect(
+        tmpScript.getLineNumberFromTokenPos(bpt.location!.tokenPos),
+        LINE_C,
+      );
+      isolate = await service.getIsolate(isolateId);
+      expect(isolate.breakpoints!.length, 3);
+    }
+    // Wait for breakpoint events.
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  // We are at the breakpoint on line LINE_A.
+  (VmService service, IsolateRef isolateRef) async {
+    final stack = await service.getStack(isolateRef.id!);
+    expect(stack.frames!.length, greaterThanOrEqualTo(1));
+
+    final script = await service.getObject(
+        isolateRef.id!, stack.frames![0].location!.script!.id!) as Script;
+    expect(
+      script.getLineNumberFromTokenPos(stack.frames![0].location!.tokenPos!),
+      LINE_A,
+    );
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  // We are at the breakpoint on line LINE_B.
+  (VmService service, IsolateRef isolateRef) async {
+    final stack = await service.getStack(isolateRef.id!);
+    expect(stack.frames!.length, greaterThanOrEqualTo(1));
+
+    final script = await service.getObject(
+        isolateRef.id!, stack.frames![0].location!.script!.id!) as Script;
+    expect(
+      script.getLineNumberFromTokenPos(stack.frames![0].location!.tokenPos!),
+      LINE_B,
+    );
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  // We are at the breakpoint on line LINE_C.
+  (VmService service, IsolateRef isolateRef) async {
+    final stack = await service.getStack(isolateRef.id!);
+    expect(stack.frames!.length, greaterThanOrEqualTo(1));
+
+    final script = await service.getObject(
+        isolateRef.id!, stack.frames![0].location!.script!.id!) as Script;
+    expect(
+      script.getLineNumberFromTokenPos(stack.frames![0].location!.tokenPos!),
+      LINE_C,
+    );
+  },
+  resumeIsolate,
+];
+
+main(args) => runIsolateTests(
+      args,
+      tests,
+      'debugging_inlined_finally_test.dart',
+      testeeConcurrent: testMain,
+    );
diff --git a/pkg/vm_service/test/developer_extension_test.dart b/pkg/vm_service/test/developer_extension_test.dart
new file mode 100644
index 0000000..baa5115
--- /dev/null
+++ b/pkg/vm_service/test/developer_extension_test.dart
@@ -0,0 +1,137 @@
+// 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 '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';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+Future<ServiceExtensionResponse> Handler(String method, Map paremeters) {
+  print('Invoked extension: $method');
+  switch (method) {
+    case 'ext..delay':
+      var c = Completer<ServiceExtensionResponse>();
+      Timer(Duration(seconds: 1), () {
+        c.complete(ServiceExtensionResponse.result(jsonEncode({
+          'type': '_delayedType',
+          'method': method,
+          'parameters': paremeters,
+        })));
+      });
+      return c.future;
+    case 'ext..error':
+      return Future<ServiceExtensionResponse>.value(
+          ServiceExtensionResponse.error(
+              ServiceExtensionResponse.extensionErrorMin, 'My error detail.'));
+    case 'ext..exception':
+      throw "I always throw!";
+    case 'ext..success':
+      return Future<ServiceExtensionResponse>.value(
+          ServiceExtensionResponse.result(jsonEncode({
+        'type': '_extensionType',
+        'method': method,
+        'parameters': paremeters,
+      })));
+  }
+  throw "Unknown extension: $method";
+}
+
+void test() {
+  registerExtension('ext..delay', Handler);
+  debugger();
+  postEvent('ALPHA', {'cat': 'dog'});
+  debugger();
+  registerExtension('ext..error', Handler);
+  registerExtension('ext..exception', Handler);
+  registerExtension('ext..success', Handler);
+  bool exceptionThrown = false;
+  try {
+    registerExtension('ext..delay', Handler);
+  } catch (e) {
+    exceptionThrown = true;
+  }
+  // This check is running in the target process so we can't used package:test.
+  Expect.equals(exceptionThrown, true);
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    final isolate = await service.getIsolate(isolateRef.id!);
+    // Note: extensions other than those is this test might already be
+    // registered by core libraries.
+    expect(isolate.extensionRPCs, contains('ext..delay'));
+    expect(isolate.extensionRPCs, isNot(contains('ext..error')));
+    expect(isolate.extensionRPCs, isNot(contains('ext..exception')));
+    expect(isolate.extensionRPCs, isNot(contains('ext..success')));
+  },
+  resumeIsolateAndAwaitEvent(EventStreams.kExtension, (event) {
+    expect(event.kind, EventKind.kExtension);
+    expect(event.extensionKind, 'ALPHA');
+    expect(event.extensionData!.data['cat'], equals('dog'));
+  }),
+  hasStoppedAtBreakpoint,
+  resumeIsolateAndAwaitEvent(EventStreams.kIsolate, (event) {
+    // Check that we received an event when '__error' was registered.
+    expect(event.kind, equals(EventKind.kServiceExtensionAdded));
+    expect(event.extensionRPC, 'ext..error');
+  }),
+  // Initial.
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    var result = await service.callServiceExtension(
+      'ext..delay',
+      isolateId: isolateId,
+    );
+
+    expect(result.json!['type'], '_delayedType');
+    expect(result.json!['method'], equals('ext..delay'));
+    expect(result.json!['parameters']['isolateId'], isNotNull);
+
+    try {
+      await service.callServiceExtension(
+        'ext..error',
+        isolateId: isolateId,
+      );
+    } on RPCError catch (e) {
+      expect(e.code, ServiceExtensionResponse.extensionErrorMin);
+      expect(e.details, 'My error detail.');
+    }
+
+    try {
+      await service.callServiceExtension(
+        'ext..exception',
+        isolateId: isolateId,
+      );
+    } on RPCError catch (e) {
+      expect(e.code, ServiceExtensionResponse.extensionError);
+      expect(e.details!.startsWith('I always throw!\n'), isTrue);
+    }
+
+    result = await service.callServiceExtension(
+      'ext..success',
+      isolateId: isolateId,
+      args: {
+        'apple': 'banana',
+      },
+    );
+    expect(result.json!['type'], '_extensionType');
+    expect(result.json!['method'], 'ext..success');
+    expect(result.json!['parameters']['isolateId'], isNotNull);
+    expect(result.json!['parameters']['apple'], 'banana');
+  },
+];
+
+main([args = const <String>[]]) async => runIsolateTests(
+      args,
+      tests,
+      'developer_extension_test.dart',
+      testeeConcurrent: test,
+    );
diff --git a/pkg/vm_service/test/developer_service_get_isolate_id_test.dart b/pkg/vm_service/test/developer_service_get_isolate_id_test.dart
new file mode 100644
index 0000000..d60780c
--- /dev/null
+++ b/pkg/vm_service/test/developer_service_get_isolate_id_test.dart
@@ -0,0 +1,105 @@
+// 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 'dart:async';
+import 'dart:developer';
+import 'dart:isolate' as iso;
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+// testee state.
+late String selfId;
+late iso.Isolate childIsolate;
+late String childId;
+
+void spawnEntry(int i) {
+  debugger();
+}
+
+Future testeeMain() async {
+  debugger();
+  // Spawn an isolate.
+  childIsolate = await iso.Isolate.spawn(spawnEntry, 0);
+  // Assign the id for this isolate and it's child to strings so they can
+  // be read by the tester.
+  selfId = Service.getIsolateID(iso.Isolate.current)!;
+  childId = Service.getIsolateID(childIsolate)!;
+  debugger();
+}
+
+@pragma("vm:entry-point")
+getSelfId() => selfId;
+
+@pragma("vm:entry-point")
+getChildId() => childId;
+
+// tester state:
+late IsolateRef initialIsolate;
+late IsolateRef localChildIsolate;
+
+var tests = <VMTest>[
+  (VmService service) async {
+    final vm = await service.getVM();
+    // Sanity check.
+    expect(vm.isolates!.length, 1);
+    initialIsolate = vm.isolates![0];
+    await hasStoppedAtBreakpoint(service, initialIsolate);
+    // Resume.
+    await service.resume(initialIsolate.id!);
+  },
+  (VmService service) async {
+    // Initial isolate has paused at second debugger call.
+    await hasStoppedAtBreakpoint(service, initialIsolate);
+  },
+  (VmService service) async {
+    final vm = await service.getVM();
+
+    // Grab the child isolate.
+    localChildIsolate =
+        vm.isolates!.firstWhere((IsolateRef i) => i != initialIsolate);
+    expect(localChildIsolate, isNotNull);
+
+    // Reload the initial isolate.
+    initialIsolate = await service.getIsolate(initialIsolate.id!);
+
+    // Grab the root library.
+    Library rootLib = await service.getObject(
+      initialIsolate.id!,
+      (initialIsolate as Isolate).rootLib!.id!,
+    ) as Library;
+
+    // Grab self id.
+    final localSelfId = await service.invoke(
+      initialIsolate.id!,
+      rootLib.id!,
+      'getSelfId',
+      [],
+    ) as InstanceRef;
+
+    // Check that the id reported from dart:loper matches the id reported
+    // from the service protocol.
+    expect(localSelfId.kind, InstanceKind.kString);
+    expect(initialIsolate.id, localSelfId.valueAsString);
+
+    // Grab the child isolate's id.
+    final localChildId =
+        await service.invoke(initialIsolate.id!, rootLib.id!, 'getChildId', [])
+            as InstanceRef;
+
+    // Check that the id reported from dart:loper matches the id reported
+    // from the service protocol.
+    expect(localChildId.kind, InstanceKind.kString);
+    expect(localChildIsolate.id, localChildId.valueAsString);
+  }
+];
+
+main(args) async => runVMTests(
+      args,
+      tests,
+      'developer_service_get_isolate_id_test.dart',
+      testeeConcurrent: testeeMain,
+    );
diff --git a/pkg/vm_service/test/echo_test.dart b/pkg/vm_service/test/echo_test.dart
new file mode 100644
index 0000000..d21a524
--- /dev/null
+++ b/pkg/vm_service/test/echo_test.dart
@@ -0,0 +1,72 @@
+// 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:async';
+import 'package:test/test.dart';
+import 'package:vm_service/src/vm_service.dart';
+import 'common/test_helper.dart';
+
+class EchoResponse extends Response {
+  static EchoResponse? parse(Map<String, dynamic>? json) =>
+      json == null ? null : EchoResponse._fromJson(json);
+
+  EchoResponse._fromJson(Map<String, dynamic> json) : text = json['text'];
+
+  @override
+  String get type => '_EchoResponse';
+  final String text;
+}
+
+var tests = <IsolateTest>[
+  (VmService service, IsolateRef isolateRef) async {
+    addTypeFactory('_EchoResponse', EchoResponse.parse);
+  },
+  (VmService service, IsolateRef isolateRef) async {
+    // Echo from VM target.
+    final result = await service.callMethod('_echo', args: {
+      'text': 'hello',
+    });
+    expect(result, isA<EchoResponse>());
+    expect((result as EchoResponse).text, 'hello');
+  },
+  (VmService service, IsolateRef isolateRef) async {
+    // Echo from Isolate target.
+    final result =
+        await service.callMethod('_echo', isolateId: isolateRef.id!, args: {
+      'text': 'hello',
+    });
+    expect(result, isA<EchoResponse>());
+    expect((result as EchoResponse).text, 'hello');
+  },
+  (VmService service, IsolateRef isolateRef) async {
+    final completer = Completer<void>();
+    late final StreamSubscription sub;
+    sub = service.onEvent('_Echo').listen((event) async {
+      expect(event.kind, '_Echo');
+      expect(event.data!.lengthInBytes, 3);
+      expect(event.data!.getUint8(0), 0);
+      expect(event.data!.getUint8(1), 128);
+      expect(event.data!.getUint8(2), 255);
+      await sub.cancel();
+      await service.streamCancel('_Echo');
+      completer.complete();
+    });
+
+    await service.streamListen('_Echo');
+    await service.callMethod(
+      '_triggerEchoEvent',
+      isolateId: isolateRef.id!,
+      args: {
+        'text': 'hello',
+      },
+    );
+    await completer.future;
+  },
+];
+
+main(args) => runIsolateTests(
+      args,
+      tests,
+      'echo_test.dart',
+    );
diff --git a/pkg/vm_service/test/enhanced_enum_test.dart b/pkg/vm_service/test/enhanced_enum_test.dart
new file mode 100644
index 0000000..633caa5
--- /dev/null
+++ b/pkg/vm_service/test/enhanced_enum_test.dart
@@ -0,0 +1,296 @@
+// 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.
+//
+// SharedOptions=--enable-experiment=enhanced-enums
+
+// ignore_for_file: experiment_not_enabled
+// @dart=2.17
+
+import 'dart:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+class I1 {
+  int interfaceMethod1() => 0;
+  int get interfaceGetter1 => 0;
+  set interfaceSetter1(int value) {}
+}
+
+abstract class I2 {
+  int interfaceMethod2();
+  int get interfaceGetter2;
+  set interfaceSetter2(int value);
+}
+
+mixin M on Object {
+  int mixedInMethod() => 42;
+}
+
+enum E with M implements I1, I2 {
+  e1,
+  e2,
+  e3;
+
+  int interfaceMethod1() => 42;
+  int get interfaceGetter1 => 42;
+  set interfaceSetter1(int value) {}
+  int interfaceMethod2() => 42;
+  int get interfaceGetter2 => 42;
+  set interfaceSetter2(int value) {}
+
+  static int staticMethod() => 42;
+  static int get staticGetter => _staticField;
+  static set staticSetter(int x) => _staticField = x;
+  static int _staticField = 0;
+}
+
+enum F<T> {
+  f1<int>(1),
+  f2('foo'),
+  f3(<String, dynamic>{});
+
+  const F(this.value);
+
+  void debugMethod() {
+    debugger();
+  }
+
+  final T value;
+
+  String toString() => 'OVERRIDE ${value.toString()}';
+}
+
+void testMain() {
+  debugger();
+  F.f1.debugMethod();
+}
+
+Future<void> expectError(func) async {
+  bool gotException = false;
+  try {
+    await func();
+    fail('Failed to throw');
+  } on RPCError catch (e) {
+    expect(e.code, 113); // Compile time error.
+    gotException = true;
+  }
+  expect(gotException, true);
+}
+
+late final String isolateId;
+late final Isolate isolate;
+late final String rootLibraryId;
+late final Class enumECls;
+late final String enumEClsId;
+late final Class enumFCls;
+late final String enumFClsId;
+
+final tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (VmService service, IsolateRef isolateRef) async {
+    // Initialization.
+    isolateId = isolateRef.id!;
+    isolate = await service.getIsolate(isolateId);
+    rootLibraryId = isolate.rootLib!.id!;
+    final rootLibrary = await service.getObject(
+      isolateId,
+      rootLibraryId,
+    ) as Library;
+
+    final enumERef = rootLibrary.classes!.firstWhere((c) => c.name == 'E');
+    enumECls = await service.getObject(isolateId, enumERef.id!) as Class;
+    enumEClsId = enumECls.id!;
+
+    final enumFRef = rootLibrary.classes!.firstWhere((c) => c.name == 'F');
+    enumFCls = await service.getObject(isolateId, enumFRef.id!) as Class;
+    enumFClsId = enumFCls.id!;
+  },
+  (VmService service, _) async {
+    // Check all functions and fields are found.
+    expect(
+      enumECls.functions!.map((f) => f.name),
+      containsAll([
+        'e1',
+        'e2',
+        'e3',
+        'values',
+        'toString',
+        'interfaceSetter1=',
+        'interfaceGetter1',
+        'interfaceSetter2=',
+        'interfaceGetter2',
+        'interfaceMethod1',
+        'interfaceMethod2',
+        'staticGetter',
+        'staticSetter=',
+      ]),
+    );
+    expect(
+      enumECls.fields!.map((f) => f.name),
+      containsAll([
+        'e1',
+        'e2',
+        'e3',
+        'values',
+        '_staticField',
+      ]),
+    );
+  },
+  (VmService service, _) async {
+    // Ensure attempting to create an instance of an Enum fails.
+    await expectError(() => service.evaluate(isolateId, rootLibraryId, 'E()'));
+    await expectError(
+      () => service.evaluate(isolateId, rootLibraryId, 'E(10, "staticGetter")'),
+    );
+  },
+  (VmService service, _) async {
+    // Ensure we can evaluate enum values in the context of the enum Class.
+    dynamic result = await service.evaluate(isolateId, enumEClsId, 'e1');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'E');
+    result = await service.evaluate(isolateId, result.id!, 'name');
+    expect(result.valueAsString, 'e1');
+
+    result = await service.evaluate(isolateId, enumEClsId, 'e2');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'E');
+    result = await service.evaluate(isolateId, result.id!, 'name');
+    expect(result.valueAsString, 'e2');
+
+    result = await service.evaluate(isolateId, enumEClsId, 'e3');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'E');
+    result = await service.evaluate(isolateId, result.id!, 'name');
+    expect(result.valueAsString, 'e3');
+  },
+  (VmService service, _) async {
+    // Ensure we can evaluate enum values in the context of the library.
+    dynamic result = await service.evaluate(isolateId, rootLibraryId, 'E.e1');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'E');
+    result = await service.evaluate(isolateId, result.id!, 'name');
+    expect(result.valueAsString, 'e1');
+
+    result = await service.evaluate(isolateId, rootLibraryId, 'E.e2');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'E');
+    result = await service.evaluate(isolateId, result.id!, 'name');
+    expect(result.valueAsString, 'e2');
+
+    result = await service.evaluate(isolateId, rootLibraryId, 'E.e3');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'E');
+    result = await service.evaluate(isolateId, result.id!, 'name');
+    expect(result.valueAsString, 'e3');
+  },
+  (VmService service, _) async {
+    // Ensure we can evaluate instance getters and methods.
+    dynamic e1 = await service.evaluate(isolateId, enumEClsId, 'e1');
+    expect(e1, isA<InstanceRef>());
+    final e1Id = e1.id!;
+
+    dynamic result = await service.evaluate(isolateId, e1Id, 'interfaceGetter1');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.evaluate(isolateId, e1Id, 'interfaceGetter2');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.evaluate(isolateId, e1Id, 'interfaceMethod1()');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.evaluate(isolateId, e1Id, 'interfaceMethod2()');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.evaluate(isolateId, e1Id, 'mixedInMethod()');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.evaluate(isolateId, e1Id, 'toString()');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, 'E.e1');
+  },
+  (VmService service, _) async {
+    // Ensure we can evaluate static getters and methods.
+    dynamic result = await service.evaluate(isolateId, enumEClsId, 'staticGetter');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '0');
+
+    result = await service.evaluate(isolateId, enumEClsId, 'staticMethod()');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+  },
+  (VmService service, _) async {
+    // Ensure we can invoke instance methods.
+    dynamic e1 = await service.evaluate(isolateId, enumEClsId, 'e1');
+    expect(e1, isA<InstanceRef>());
+    final e1Id = e1.id!;
+
+    dynamic result = await service.invoke(isolateId, e1Id, 'interfaceMethod1', []);
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.invoke(isolateId, e1Id, 'interfaceMethod2', []);
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.invoke(isolateId, e1Id, 'mixedInMethod', []);
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+
+    result = await service.invoke(isolateId, e1Id, 'toString', []);
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, 'E.e1');
+  },
+  (VmService service, _) async {
+    // Ensure we can invoke static methods.
+    dynamic result = await service.evaluate(isolateId, enumEClsId, 'staticMethod()');
+    expect(result, isA<InstanceRef>());
+    expect(result.valueAsString, '42');
+  },
+  (VmService service, _) async {
+    // Ensure we can evaluate enums user defined properties.
+    dynamic result = await service.evaluate(isolateId, rootLibraryId, 'F.f1');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'F');
+    result = await service.evaluate(isolateId, result.id!, 'value');
+    expect(result.valueAsString, '1');
+
+    result = await service.evaluate(isolateId, rootLibraryId, 'F.f2');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'F');
+    result = await service.evaluate(isolateId, result.id!, 'value');
+    expect(result.valueAsString, 'foo');
+
+    result = await service.evaluate(isolateId, rootLibraryId, 'F.f3');
+    expect(result, isA<InstanceRef>());
+    expect(result.classRef.name, 'F');
+    result = await service.evaluate(isolateId, result.id!, 'value');
+    expect(result.kind, 'Map');
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  (VmService service, _) async {
+    dynamic result = await service.evaluateInFrame(isolateId, 0, 'T.toString()');
+    expect(result.valueAsString, 'int');
+
+    result = await service.evaluateInFrame(isolateId, 0, 'value');
+    expect(result.kind, 'Int');
+  },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'enhanced_enum_test.dart',
+      testeeConcurrent: testMain,
+      experiments: ['enhanced-enums'],
+    );
diff --git a/pkg/vm_service/test/eval_internal_class_test.dart b/pkg/vm_service/test/eval_internal_class_test.dart
new file mode 100644
index 0000000..9ddeb00
--- /dev/null
+++ b/pkg/vm_service/test/eval_internal_class_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.
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/test_helper.dart';
+
+var tests = <IsolateTest>[
+  (VmService service, IsolateRef isolateRef) async {
+    final isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    final rootLib = await service.getObject(
+      isolateId,
+      isolate.rootLib!.id!,
+    ) as Library;
+    Class classLibrary = await service.getObject(
+      isolateId,
+      rootLib.classRef!.id!,
+    ) as Class;
+
+    {
+      bool caughtExceptions = false;
+      try {
+        dynamic result = await service.evaluate(
+          isolateId,
+          classLibrary.id!,
+          '3 + 4',
+        );
+        print(result);
+      } on RPCError catch (e) {
+        expect(e.toString(), contains('can be evaluated only'));
+        caughtExceptions = true;
+      }
+      expect(caughtExceptions, isTrue);
+    }
+
+    final classClass = await service.getObject(
+      isolateId,
+      classLibrary.classRef!.id!,
+    ) as Class;
+    {
+      bool caughtExceptions = false;
+      try {
+        dynamic result = await service.evaluate(
+          isolateId,
+          classClass.id!,
+          '3 + 4',
+        );
+        print(result);
+      } on RPCError catch (e) {
+        expect(e.toString(), contains('can be evaluated only'));
+        caughtExceptions = true;
+      }
+      expect(caughtExceptions, isTrue);
+    }
+    final classArray = await service.getObject(
+      isolateId,
+      (await service.evaluate(
+        isolateId,
+        rootLib.id!,
+        "List<dynamic>.filled(2, null)",
+      ) as InstanceRef)
+          .classRef!
+          .id!,
+    ) as Class;
+    dynamic result = await service.evaluate(
+      isolateId,
+      classArray.id!,
+      '3 + 4',
+    );
+    expect(result is InstanceRef, isTrue);
+    expect(result.valueAsString, '7');
+  },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'eval_internal_class_test.dart',
+    );
diff --git a/pkg/vm_service/test/eval_regression_flutter20255_test.dart b/pkg/vm_service/test/eval_regression_flutter20255_test.dart
new file mode 100644
index 0000000..6d3b963
--- /dev/null
+++ b/pkg/vm_service/test/eval_regression_flutter20255_test.dart
@@ -0,0 +1,108 @@
+// 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:async';
+import 'dart:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+class Base<T> {
+  String field;
+
+  Base(this.field);
+  String foo() => 'Base-$field';
+}
+
+class Sub<T> extends Base<T> {
+  String field;
+
+  Sub(this.field) : super(field);
+  String foo() {
+    debugger();
+    return 'Sub-$field';
+  }
+}
+
+class ISub<T> implements Base<T> {
+  String field;
+
+  ISub(this.field);
+  String foo() => 'ISub-$field';
+}
+
+class Box<T> {
+  late T value;
+
+  @pragma('vm:never-inline')
+  void setValue(T value) {
+    this.value = value;
+  }
+}
+
+final objects = <Base>[Base<int>('b'), Sub<double>('a'), ISub<bool>('c')];
+
+String triggerTypeTestingStubGeneration() {
+  final Box<Object> box = Box<Base>();
+  for (int i = 0; i < 1000000; ++i) {
+    box.setValue(objects.last);
+  }
+  return 'tts-generated';
+}
+
+void testFunction() {
+  // Triggers the debugger, which will evaluate an expression in the context of
+  // [Sub<double>], which will make a subclass of [Base<T>].
+  print(objects[1].foo());
+
+  triggerTypeTestingStubGeneration();
+
+  // Triggers the debugger, which will evaluate an expression in the context of
+  // [Sub<double>], which will make a subclass of [Base<T>].
+  print(objects[1].foo());
+}
+
+Future triggerEvaluation(VmService service, IsolateRef isolateRef) async {
+  Stack stack = await service.getStack(isolateRef.id!);
+
+  // Make sure we are in the right place.
+  expect(stack.frames!.length, greaterThanOrEqualTo(2));
+  expect(stack.frames![0].function!.name, 'foo');
+  expect(stack.frames![0].function!.owner.name, 'Sub');
+
+  // Trigger an evaluation, which will create a subclass of Base<T>.
+  final dynamic result = await service.evaluateInFrame(
+    isolateRef.id!,
+    0,
+    'this.field + " world \$T"',
+  );
+  expect(result.valueAsString, 'a world double');
+
+  // Trigger an optimization of a type testing stub (and usage of it).
+  final dynamic result2 = await service.evaluateInFrame(
+    isolateRef.id!,
+    0,
+    'triggerTypeTestingStubGeneration()',
+  );
+  expect(result2.valueAsString, 'tts-generated');
+}
+
+final testSteps = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  triggerEvaluation,
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  triggerEvaluation,
+  resumeIsolate,
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      testSteps,
+      'eval_regression_flutter20255_test.dart',
+      testeeConcurrent: testFunction,
+    );
diff --git a/pkg/vm_service/test/eval_skip_breakpoint.dart b/pkg/vm_service/test/eval_skip_breakpoint.dart
new file mode 100644
index 0000000..cdb4d5c
--- /dev/null
+++ b/pkg/vm_service/test/eval_skip_breakpoint.dart
@@ -0,0 +1,55 @@
+// 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.
+// VMOptions=--verbose_debug
+
+import 'dart:developer';
+
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const int LINE_A = 22;
+const int LINE_B = 17;
+
+bar() {
+  print('bar');
+}
+
+testMain() {
+  debugger();
+  bar();
+  print("Done");
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  // Add breakpoint
+  setBreakpointAtLine(LINE_B),
+  // Evaluate 'bar()'
+  (VmService service, IsolateRef isolateRef) async {
+    final isolate = await service.getIsolate(isolateRef.id!);
+    await service.evaluate(
+      isolateRef.id!,
+      isolate.rootLib!.id!,
+      'bar()',
+      disableBreakpoints: true,
+    );
+  },
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_A),
+  resumeIsolate,
+
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE_B),
+  resumeIsolate,
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'eval_skip_breakpoint.dart',
+      testeeConcurrent: testMain,
+    );
diff --git a/pkg/vm_service/test/evaluate_activation_in_method_class_other.dart b/pkg/vm_service/test/evaluate_activation_in_method_class_other.dart
new file mode 100644
index 0000000..000ba5e
--- /dev/null
+++ b/pkg/vm_service/test/evaluate_activation_in_method_class_other.dart
@@ -0,0 +1,29 @@
+// 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 'dart:developer';
+
+var topLevel = "OtherLibrary";
+
+class Superclass2 {
+  var _instVar = 'Superclass2';
+  var instVar = 'Superclass2';
+  method() => 'Superclass2';
+  static staticMethod() => 'Superclass2';
+  suppress_warning() => _instVar;
+}
+
+class Superclass1 extends Superclass2 {
+  var _instVar = 'Superclass1';
+  var instVar = 'Superclass1';
+  method() => 'Superclass1';
+  static staticMethod() => 'Superclass1';
+
+  test() {
+    var _local = 'Superclass1';
+    debugger();
+    // Suppress unused variable warning.
+    print(_local);
+  }
+}
diff --git a/pkg/vm_service/test/evaluate_activation_in_method_class_test.dart b/pkg/vm_service/test/evaluate_activation_in_method_class_test.dart
new file mode 100644
index 0000000..0e1cc1d
--- /dev/null
+++ b/pkg/vm_service/test/evaluate_activation_in_method_class_test.dart
@@ -0,0 +1,104 @@
+// 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.
+
+// Tests that expressions evaluated in a frame see the same scope as the
+// frame's method.
+
+import 'dart:async';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+import 'evaluate_activation_in_method_class_other.dart';
+
+var topLevel = "TestLibrary";
+
+class Subclass extends Superclass1 {
+  var _instVar = 'Subclass';
+  var instVar = 'Subclass';
+  method() => 'Subclass';
+  static staticMethod() => 'Subclass';
+  suppress_warning() => _instVar;
+}
+
+testeeDo() {
+  var obj = Subclass();
+  obj.test();
+}
+
+Future testerDo(VmService service, IsolateRef isolateRef) async {
+  await hasStoppedAtBreakpoint(service, isolateRef);
+  final isolateId = isolateRef.id!;
+
+  // Make sure we are in the right place.
+  var stack = await service.getStack(isolateId);
+  var topFrame = 0;
+  expect(
+    stack.frames![topFrame].function!.name,
+    equals('test'),
+  );
+  expect(
+    stack.frames![topFrame].function!.owner.name,
+    equals('Superclass1'),
+  );
+
+  InstanceRef result;
+
+  result = await service.evaluateInFrame(isolateId, topFrame, '_local')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Superclass1'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, '_instVar')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Superclass1'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, 'instVar')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Subclass'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, 'method()')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Subclass'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, 'super._instVar')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Superclass2'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, 'super.instVar')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Superclass2'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, 'super.method()')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Superclass2'));
+
+  result = await service.evaluateInFrame(isolateId, topFrame, 'staticMethod()')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('Superclass1'));
+
+  // function.Owner verus function.Origin
+  // The mixin of Superclass is in _other.dart and the mixin
+  // application is in _test.dart.
+  result = await service.evaluateInFrame(isolateId, topFrame, 'topLevel')
+      as InstanceRef;
+  print(result);
+  expect(result.valueAsString, equals('OtherLibrary'));
+}
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      [testerDo],
+      'evaluate_activation_in_method_class_test.dart',
+      testeeConcurrent: testeeDo,
+    );
diff --git a/pkg/vm_service/test/regress_48279_test.dart b/pkg/vm_service/test/regress_48279_test.dart
new file mode 100644
index 0000000..d57b084
--- /dev/null
+++ b/pkg/vm_service/test/regress_48279_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.
+
+// This test verifies that generic type argument ('T') can be evaluated
+// when stopped on an exception which is thrown during type check in
+// the implicit field setter.
+// Regression test for https://github.com/dart-lang/sdk/issues/48279.
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+class A<T, U, V> {
+  List<T> foo = [];
+}
+
+testeeMain() {
+  A<num, Object, Object> object = A<int, String, String>();
+  object.foo = <double>[];
+}
+
+var tests = <IsolateTest>[
+  hasStoppedWithUnhandledException,
+  (VmService? service, IsolateRef? isolateRef) async {
+    print("We stopped!");
+    final isolateId = isolateRef!.id!;
+    final stack = await service!.getStack(isolateId);
+    final topFrame = stack.frames![0];
+    expect(topFrame.function!.name, equals('foo='));
+    final result = await service.evaluateInFrame(isolateId, 0, 'T');
+    print(result);
+    expect((result as InstanceRef).name, equals("int"));
+  }
+];
+
+main(args) => runIsolateTests(
+      args,
+      tests,
+      'regress_48279_test.dart',
+      pause_on_unhandled_exceptions: true,
+      testeeConcurrent: testeeMain,
+    );
diff --git a/pkg/vm_service/test/super_constructor_invocation_test.dart b/pkg/vm_service/test/super_constructor_invocation_test.dart
new file mode 100644
index 0000000..7a0d300
--- /dev/null
+++ b/pkg/vm_service/test/super_constructor_invocation_test.dart
@@ -0,0 +1,183 @@
+// 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.
+//
+// SharedOptions=--enable-experiment=super-parameters
+
+// ignore_for_file: experiment_not_enabled
+// @dart=2.17
+
+import 'dart:developer';
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+class S<T> {
+  num? n;
+  T? t;
+  String constrName;
+  S({this.n, this.t}) : constrName = "S";
+  S.named({this.t, this.n}) : constrName = "S.named";
+}
+
+class C<T> extends S<T> {
+  C.constr1(String s, {super.t});
+  C.constr2(int i, String s, {super.n}) : super();
+  C.constr3(int i, String s, {super.n, super.t}) : super.named() {
+    debugger();
+  }
+}
+
+class R<T> {
+  final f1;
+  var v1;
+  num i1;
+  T t1;
+  R(this.f1, this.v1, this.i1, this.t1);
+}
+
+class B<T> extends R<T> {
+  // ignore: no_default_super_constructor
+  B(super.f1, super.v1, super.i1, super.t1) {
+    debugger();
+  }
+}
+
+void testMain() {
+  debugger();
+  C.constr3(1, 'abc', n: 3.14, t: 42);
+  B('a', 3.14, 2.718, 42);
+}
+
+late final String isolateId;
+late final String rootLibId;
+
+createInstance(VmService service, String expr) async {
+  return await service.evaluate(
+      isolateId,
+      rootLibId,
+      expr,
+      disableBreakpoints: true,
+    );
+}
+
+evaluateGetter(VmService service, String instanceId, String getter) async {
+  dynamic result = await service.evaluate(isolateId, instanceId, getter);
+  return await service.getObject(isolateId, result.id);
+}
+
+final tests = <IsolateTest>[
+  (VmService service, IsolateRef isolateRef) async {
+    // Initialization
+    isolateId = isolateRef.id!;
+    final isolate = await service.getIsolate(isolateId);
+    rootLibId = isolate.rootLib!.id!;
+  },
+  (VmService service, _) async {
+    dynamic instance = await createInstance(service, 'C.constr1("abc", t: 42)');
+    dynamic result = await evaluateGetter(service, instance.id, 'n');
+    expect(result.valueAsString, 'null');
+    result = await evaluateGetter(service, instance.id, 't');
+    expect(result.valueAsString, '42');
+    result = await evaluateGetter(service, instance.id, 'constrName');
+    expect(result.valueAsString, 'S');
+    result = await service.evaluate(isolateId, instance.id, 'T');
+    expect(result.json['name'], 'int');
+
+    instance = await createInstance(service, 'C.constr1("abc", t: "42")');
+    result = await evaluateGetter(service, instance.id, 'n');
+    expect(result.valueAsString, 'null');
+    result = await evaluateGetter(service, instance.id, 't');
+    expect(result.valueAsString, '42');
+    result = await evaluateGetter(service, instance.id, 'constrName');
+    expect(result.valueAsString, 'S');
+    result = await service.evaluate(isolateId, instance.id, 'T');
+    expect(result.json['name'], 'String');
+  },
+  (VmService service, _) async {
+    dynamic instance = await createInstance(service, 'C.constr2(1, "abc", n: 3.14)');
+    dynamic result = await evaluateGetter(service, instance.id, 'n');
+    expect(result.valueAsString, '3.14');
+    result = await evaluateGetter(service, instance.id, 't');
+    expect(result.valueAsString, 'null');
+    result = await evaluateGetter(service, instance.id, 'constrName');
+    expect(result.valueAsString, 'S');
+    result = await service.evaluate(isolateId, instance.id, 'T');
+    expect(result.json['name'], 'dynamic');
+
+    instance = await createInstance(service, 'C.constr2(1, "abc", n: 2)');
+    result = await evaluateGetter(service, instance.id, 'n');
+    expect(result.valueAsString, '2');
+    result = await evaluateGetter(service, instance.id, 't');
+    expect(result.valueAsString, 'null');
+    result = await evaluateGetter(service, instance.id, 'constrName');
+    expect(result.valueAsString, 'S');
+    result = await service.evaluate(isolateId, instance.id, 'T');
+    expect(result.json['name'], 'dynamic');
+  },
+  (VmService service, _) async {
+    dynamic instance = await createInstance(service, 'C.constr3(1, "abc", n: 42, t: 3.14)');
+    dynamic result = await evaluateGetter(service, instance.id, 'n');
+    expect(result.valueAsString, '42');
+    result = await evaluateGetter(service, instance.id, 't');
+    expect(result.valueAsString, '3.14');
+    result = await evaluateGetter(service, instance.id, 'constrName');
+    expect(result.valueAsString, 'S.named');
+    result = await service.evaluate(isolateId, instance.id, 'T');
+    expect(result.json['name'], 'double');
+
+    instance = await createInstance(service, 'C.constr3(1, "abc", n: 3.14, t: 42)');
+    result = await evaluateGetter(service, instance.id, 'n');
+    expect(result.valueAsString, '3.14');
+    result = await evaluateGetter(service, instance.id, 't');
+    expect(result.valueAsString, '42');
+    result = await evaluateGetter(service, instance.id, 'constrName');
+    expect(result.valueAsString, 'S.named');
+    result = await service.evaluate(isolateId, instance.id, 'T');
+    expect(result.json['name'], 'int');
+  },
+  (VmService service, _) async {
+    dynamic instance = await createInstance(service, 'B(1, 2, 3, 4)');
+    dynamic result = await evaluateGetter(service, instance.id, 'f1');
+    expect(result.valueAsString, '1');
+    result = await evaluateGetter(service, instance.id, 'v1');
+    expect(result.valueAsString, '2');
+    result = await evaluateGetter(service, instance.id, 'i1');
+    expect(result.valueAsString, '3');
+    result = await evaluateGetter(service, instance.id, 't1');
+    expect(result.valueAsString, '4');
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  (VmService service, _) async {
+    dynamic result = await service.evaluateInFrame(isolateId, 0, 'n');
+    expect(result.valueAsString, '3.14');
+    result = await service.evaluateInFrame(isolateId, 0, 't');
+    expect(result.valueAsString, '42');
+    result = await service.evaluateInFrame(isolateId, 0, 'constrName');
+    expect(result.valueAsString, 'S.named');
+  },
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  (VmService service, _) async {
+    dynamic result = await service.evaluateInFrame(isolateId, 0, 'f1');
+    expect(result.valueAsString, 'a');
+    result = await service.evaluateInFrame(isolateId, 0, 'v1');
+    expect(result.valueAsString, '3.14');
+    result = await service.evaluateInFrame(isolateId, 0, 'i1');
+    expect(result.valueAsString, '2.718');
+    result = await service.evaluateInFrame(isolateId, 0, 't1');
+    expect(result.valueAsString, '42');
+  }
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'super_constructor_invocation_test.dart',
+      testeeConcurrent: testMain,
+      experiments: ['super-parameters'],
+    );
diff --git a/pkg/vm_service/tool/generate.dart b/pkg/vm_service/tool/generate.dart
index 79d74eb..e91c0f3 100644
--- a/pkg/vm_service/tool/generate.dart
+++ b/pkg/vm_service/tool/generate.dart
@@ -67,7 +67,12 @@
 Future _generateJava(String appDirPath, List<Node> nodes) async {
   var srcDirPath = normalize(join(appDirPath, '..', 'java', 'src'));
   var generator = java.JavaGenerator(srcDirPath);
-  java.api = java.Api();
+
+  final scriptPath = Platform.script.toFilePath();
+  final kSdk = '/sdk/';
+  final scriptLocation =
+      scriptPath.substring(scriptPath.indexOf(kSdk) + kSdk.length);
+  java.api = java.Api(scriptLocation);
   java.api.parse(nodes);
   java.api.generate(generator);
 
diff --git a/pkg/vm_service/tool/java/generate_java.dart b/pkg/vm_service/tool/java/generate_java.dart
index c80a481..9f48c01 100644
--- a/pkg/vm_service/tool/java/generate_java.dart
+++ b/pkg/vm_service/tool/java/generate_java.dart
@@ -101,11 +101,14 @@
   List<Enum?> enums = [];
   List<Type?> types = [];
   Map<String, List<String>> streamIdMap = {};
+  final String scriptLocation;
 
   String? get docs => null;
 
   String get name => 'api';
 
+  Api(this.scriptLocation);
+
   void addProperty(String typeName, String propertyName, {String? javadoc}) {
     var t = types.firstWhere((t) => t!.name == typeName)!;
     for (var f in t.fields) {
@@ -148,7 +151,8 @@
       }
     }
 
-    gen.writeType('$servicePackage.VmService', (TypeWriter writer) {
+    gen.writeType('$servicePackage.VmService', scriptLocation,
+        (TypeWriter writer) {
       writer.addImport('com.google.gson.JsonArray');
       writer.addImport('com.google.gson.JsonObject');
       writer.addImport('com.google.gson.JsonPrimitive');
@@ -259,11 +263,14 @@
 
     String? h3Name;
 
+    // TODO(helin24): This code does not capture documentation with more than
+    //  one paragraph or lists. It may help to check generate_dart to fix this.
     for (int i = 0; i < nodes.length; i++) {
       Node node = nodes[i];
 
       if (isPre(node) && h3Name != null) {
-        String definition = textForCode(node);
+        String definition = textForCode(node)
+            .replaceAll('(string|Null)', 'string'); // this is terrible.
         String? docs;
 
         if (i + 1 < nodes.length && isPara(nodes[i + 1])) {
@@ -308,11 +315,11 @@
     if (docs != null) docs = docs.trim();
 
     if (definition.startsWith('class ')) {
-      types.add(Type(this, name, definition, docs));
+      types.add(Type(this, scriptLocation, name, definition, docs));
     } else if (name.substring(0, 1).toLowerCase() == name.substring(0, 1)) {
-      methods.add(Method(name, definition, docs));
+      methods.add(Method(name, scriptLocation, definition, docs));
     } else if (definition.startsWith('enum ')) {
-      enums.add(Enum(name, definition, docs));
+      enums.add(Enum(name, scriptLocation, definition, docs));
     } else {
       throw 'unexpected entity: ${name}, ${definition}';
     }
@@ -362,18 +369,19 @@
 
 class Enum extends Member {
   final String name;
+  final String scriptLocation;
   final String? docs;
 
   List<EnumValue> enums = [];
 
-  Enum(this.name, String definition, [this.docs]) {
+  Enum(this.name, this.scriptLocation, String definition, [this.docs]) {
     _parse(Tokenizer(definition).tokenize());
   }
 
   String get elementTypeName => '$servicePackage.element.$name';
 
   void generateEnum(JavaGenerator gen) {
-    gen.writeType(elementTypeName, (TypeWriter writer) {
+    gen.writeType(elementTypeName, scriptLocation, (TypeWriter writer) {
       writer.javadoc = convertDocLinks(docs);
       writer.isEnum = true;
       enums.sort((v1, v2) => v1.name!.compareTo(v2.name!));
@@ -493,13 +501,14 @@
 
 class Method extends Member {
   final String name;
+  final String scriptLocation;
   final String? docs;
 
   MemberType returnType = MemberType();
   bool deprecated = false;
   List<MethodArg> args = [];
 
-  Method(this.name, String definition, [this.docs]) {
+  Method(this.name, this.scriptLocation, String definition, [this.docs]) {
     _parse(Tokenizer(definition).tokenize());
   }
 
@@ -518,7 +527,7 @@
   bool get hasOptionalArgs => args.any((MethodArg arg) => arg.optional);
 
   void generateConsumerInterface(JavaGenerator gen) {
-    gen.writeType(consumerTypeName, (TypeWriter writer) {
+    gen.writeType(consumerTypeName, scriptLocation, (TypeWriter writer) {
       writer.javadoc = convertDocLinks(returnType.docs);
       writer.interfaceNames.add('$servicePackage.consumer.Consumer');
       writer.isInterface = true;
@@ -638,7 +647,8 @@
   }
 
   /// TODO: Hacked enum arg type determination
-  bool get isEnumType => name == 'step' || name == 'mode';
+  bool get isEnumType =>
+      name == 'step' || name == 'mode' || name == 'exceptionPauseMode';
 }
 
 class MethodParser extends Parser {
@@ -748,13 +758,15 @@
 
 class Type extends Member {
   final Api parent;
+  final String scriptLocation;
   String? rawName;
   String? name;
   String? superName;
   final String? docs;
   List<TypeField> fields = [];
 
-  Type(this.parent, String categoryName, String definition, [this.docs]) {
+  Type(this.parent, this.scriptLocation, String categoryName, String definition,
+      [this.docs]) {
     _parse(Tokenizer(definition).tokenize());
   }
 
@@ -783,7 +795,8 @@
       api.types.toList()..retainWhere((t) => t!.superName == name);
 
   void generateElement(JavaGenerator gen) {
-    gen.writeType('$servicePackage.element.$name', (TypeWriter writer) {
+    gen.writeType('$servicePackage.element.$name', scriptLocation,
+        (TypeWriter writer) {
       if (fields.any((f) => f.type.types.any((t) => t.isArray))) {
         writer.addImport('com.google.gson.JsonObject');
       }
diff --git a/pkg/vm_service/tool/java/src_gen_java.dart b/pkg/vm_service/tool/java/src_gen_java.dart
index a2e62e5..4342380 100644
--- a/pkg/vm_service/tool/java/src_gen_java.dart
+++ b/pkg/vm_service/tool/java/src_gen_java.dart
@@ -57,8 +57,8 @@
   Iterable<String> get allWrittenFiles => _generatedPaths;
 
   /// Generate a Java class/interface in the given package
-  void writeType(String typeName, WriteType write) {
-    var classWriter = TypeWriter(typeName);
+  void writeType(String typeName, scriptLocation, WriteType write) {
+    var classWriter = TypeWriter(typeName, scriptLocation);
     write(classWriter);
     var pkgDirPath = join(srcDirPath, joinAll(pkgNameFor(typeName).split('.')));
     var pkgDir = Directory(pkgDirPath);
@@ -123,10 +123,12 @@
   final StringBuffer _content = StringBuffer();
   final List<String> _fields = <String>[];
   final Map<String, String> _methods = Map<String, String>();
+  final String scriptLocation;
 
-  TypeWriter(String typeName)
+  TypeWriter(String typeName, scriptLocation)
       : this.pkgName = pkgNameFor(typeName),
-        this.className = classNameFor(typeName);
+        this.className = classNameFor(typeName),
+        this.scriptLocation = scriptLocation;
 
   String get kind {
     if (isInterface) return 'interface';
@@ -263,7 +265,8 @@
     if (fileHeader != null) buffer.write(fileHeader);
     buffer.writeln('package $pkgName;');
     buffer.writeln();
-    buffer.writeln('// This is a generated file.');
+    buffer.writeln(
+        '// This file is generated by the script: ${scriptLocation} in dart-lang/sdk.');
     buffer.writeln();
     addImport(superclassName);
     interfaceNames.forEach((t) => addImport(t));
diff --git a/pkg/vm_service/tool/java/version.properties b/pkg/vm_service/tool/java/version.properties
new file mode 100644
index 0000000..1c8ad22
--- /dev/null
+++ b/pkg/vm_service/tool/java/version.properties
@@ -0,0 +1 @@
+version=3.56
diff --git a/pkg/vm_snapshot_analysis/CHANGELOG.md b/pkg/vm_snapshot_analysis/CHANGELOG.md
index 9da6e6a1..f931fce 100644
--- a/pkg/vm_snapshot_analysis/CHANGELOG.md
+++ b/pkg/vm_snapshot_analysis/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 0.7.1
+
+- Make `CallGraphNode.dominator` nullable.
+
 ## 0.7.0
 
 - Migrate to null-safety.
diff --git a/pkg/vm_snapshot_analysis/OWNERS b/pkg/vm_snapshot_analysis/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/pkg/vm_snapshot_analysis/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/pkg/vm_snapshot_analysis/lib/precompiler_trace.dart b/pkg/vm_snapshot_analysis/lib/precompiler_trace.dart
index 06e8076..49fe928 100644
--- a/pkg/vm_snapshot_analysis/lib/precompiler_trace.dart
+++ b/pkg/vm_snapshot_analysis/lib/precompiler_trace.dart
@@ -39,7 +39,7 @@
   /// Dominator of this node.
   ///
   /// Computed by [CallGraph.computeDominators].
-  late CallGraphNode dominator;
+  CallGraphNode? dominator;
 
   /// Nodes dominated by this node.
   ///
diff --git a/pkg/vm_snapshot_analysis/pubspec.yaml b/pkg/vm_snapshot_analysis/pubspec.yaml
index cf8bed0..45627e6 100644
--- a/pkg/vm_snapshot_analysis/pubspec.yaml
+++ b/pkg/vm_snapshot_analysis/pubspec.yaml
@@ -1,6 +1,6 @@
 name: vm_snapshot_analysis
 description: Utilities for analysing AOT snapshot size.
-version: 0.7.0
+version: 0.7.1
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/vm_snapshot_analysis
 
diff --git a/pkg/vm_snapshot_analysis/test/precompiler_trace_test.dart b/pkg/vm_snapshot_analysis/test/precompiler_trace_test.dart
index f00e977..4301155 100644
--- a/pkg/vm_snapshot_analysis/test/precompiler_trace_test.dart
+++ b/pkg/vm_snapshot_analysis/test/precompiler_trace_test.dart
@@ -103,6 +103,7 @@
     test('collapse-by-package', () async {
       await withFlag(testSource, '--trace_precompiler_to', (json) async {
         final jsonRaw = await loadJson(File(json));
+
         final callGraph = loadTrace(jsonRaw).collapse(NodeType.packageNode);
 
         // Collapsing by package should not collapse dart:* libraries into root
@@ -110,5 +111,15 @@
         expect(callGraph.root.pred, isEmpty);
       });
     });
+
+    test('root-dominator-is-null', () async {
+      await withFlag(testSource, '--trace_precompiler_to', (json) async {
+        final jsonRaw = await loadJson(File(json));
+
+        final callGraph = loadTrace(jsonRaw).collapse(NodeType.classNode);
+
+        expect(callGraph.root.dominator, isNull);
+      });
+    });
   });
 }
diff --git a/pkg/wasm_builder/LICENSE b/pkg/wasm_builder/LICENSE
new file mode 100644
index 0000000..9566a27
--- /dev/null
+++ b/pkg/wasm_builder/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2022, the Dart project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/wasm_builder/OWNERS b/pkg/wasm_builder/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/pkg/wasm_builder/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/pkg/wasm_builder/lib/src/instructions.dart b/pkg/wasm_builder/lib/src/instructions.dart
new file mode 100644
index 0000000..10df25a
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/instructions.dart
@@ -0,0 +1,2332 @@
+// 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 'module.dart';
+import 'serialize.dart';
+import 'types.dart';
+
+/// Thrown when Wasm bytecode validation fails.
+class ValidationError {
+  final String trace;
+  final String error;
+
+  ValidationError(this.trace, this.error);
+
+  @override
+  String toString() => "$trace\n$error";
+}
+
+/// Label to use as target for branch instructions.
+abstract class Label {
+  final List<ValueType> inputs;
+  final List<ValueType> outputs;
+
+  late final int? ordinal;
+  late final int depth;
+  late final int baseStackHeight;
+  late final bool reachable;
+
+  Label._(this.inputs, this.outputs);
+
+  List<ValueType> get targetTypes;
+
+  bool get hasOrdinal => ordinal != null;
+
+  @override
+  String toString() => "L$ordinal";
+}
+
+class Expression extends Label {
+  Expression(List<ValueType> inputs, List<ValueType> outputs)
+      : super._(inputs, outputs) {
+    ordinal = null;
+    depth = 0;
+    baseStackHeight = 0;
+    reachable = true;
+  }
+
+  List<ValueType> get targetTypes => outputs;
+}
+
+class Block extends Label {
+  Block(List<ValueType> inputs, List<ValueType> outputs)
+      : super._(inputs, outputs);
+
+  List<ValueType> get targetTypes => outputs;
+}
+
+class Loop extends Label {
+  Loop(List<ValueType> inputs, List<ValueType> outputs)
+      : super._(inputs, outputs);
+
+  List<ValueType> get targetTypes => inputs;
+}
+
+class If extends Label {
+  bool hasElse = false;
+
+  If(List<ValueType> inputs, List<ValueType> outputs)
+      : super._(inputs, outputs);
+
+  List<ValueType> get targetTypes => outputs;
+}
+
+class Try extends Label {
+  bool hasCatch = false;
+
+  Try(List<ValueType> inputs, List<ValueType> outputs)
+      : super._(inputs, outputs);
+
+  List<ValueType> get targetTypes => outputs;
+}
+
+/// A sequence of Wasm instructions.
+///
+/// Instructions can be added to the sequence by calling the corresponding
+/// instruction methods.
+///
+/// If asserts are enabled, the instruction methods will perform on-the-fly
+/// validation and throw a [ValidationError] if validation fails.
+class Instructions with SerializerMixin {
+  /// The module containing these instructions.
+  final Module module;
+
+  /// Locals declared in this body, including parameters.
+  final List<Local> locals;
+
+  /// Is this the initializer of a global variable?
+  final bool isGlobalInitializer;
+
+  /// Whether a textual trace of the instruction stream should be recorded when
+  /// emitting instructions (provided asserts are enabled).
+  ///
+  /// This trace can be accessed via the [trace] property and will be part of
+  /// the exception text if a validation error occurs.
+  bool traceEnabled = true;
+
+  /// Whether to print a byte offset for each instruction in the textual trace.
+  bool byteOffsetEnabled = false;
+
+  /// Column width for the instruction byte offset.
+  int byteOffsetWidth = 7;
+
+  /// Column width for the instructions.
+  int instructionColumnWidth = 50;
+
+  int _indent = 1;
+  final List<String> _traceLines = [];
+
+  int _labelCount = 0;
+  final List<Label> _labelStack = [];
+  final List<ValueType> _stackTypes = [];
+  bool _reachable = true;
+
+  /// Create a new instruction sequence.
+  Instructions(this.module, List<ValueType> outputs,
+      {this.locals = const [], this.isGlobalInitializer = false}) {
+    _labelStack.add(Expression(const [], outputs));
+  }
+
+  /// Whether the current point in the instruction stream is reachable.
+  bool get reachable => _reachable;
+
+  /// Whether the instruction sequence has been completed by the final `end`.
+  bool get isComplete => _labelStack.isEmpty;
+
+  /// Textual trace of the instructions.
+  String get trace => _traceLines.join();
+
+  bool _debugTrace(List<Object>? trace,
+      {required bool reachableAfter,
+      int indentBefore = 0,
+      int indentAfter = 0}) {
+    if (traceEnabled && trace != null) {
+      _indent += indentBefore;
+      String byteOffset =
+          byteOffsetEnabled ? "${data.length}".padLeft(byteOffsetWidth) : "";
+      String instr = "  " * _indent + " " + trace.join(" ");
+      instr = instr.length > instructionColumnWidth - 2
+          ? instr.substring(0, instructionColumnWidth - 4) + "... "
+          : instr.padRight(instructionColumnWidth);
+      final String stack = reachableAfter ? _stackTypes.join(', ') : "-";
+      final String line = "$byteOffset$instr$stack\n";
+      _indent += indentAfter;
+
+      _traceLines.add(line);
+    }
+    return true;
+  }
+
+  bool _comment(String text) {
+    if (traceEnabled) {
+      final String line = " " * (byteOffsetEnabled ? byteOffsetWidth : 0) +
+          "  " * _indent +
+          " ;; $text\n";
+      _traceLines.add(line);
+    }
+    return true;
+  }
+
+  Never _reportError(String error) {
+    throw ValidationError(trace, error);
+  }
+
+  ValueType get _topOfStack {
+    if (!reachable) return RefType.any();
+    if (_stackTypes.isEmpty) _reportError("Stack underflow");
+    return _stackTypes.last;
+  }
+
+  Label get _topOfLabelStack {
+    if (_labelStack.isEmpty) _reportError("Label stack underflow");
+    return _labelStack.last;
+  }
+
+  List<ValueType> _stack(int n) {
+    if (_stackTypes.length < n) _reportError("Stack underflow");
+    return _stackTypes.sublist(_stackTypes.length - n);
+  }
+
+  List<ValueType> _checkStackTypes(List<ValueType> inputs,
+      [List<ValueType>? stack]) {
+    stack ??= _stack(inputs.length);
+    bool typesMatch = true;
+    for (int i = 0; i < inputs.length; i++) {
+      if (!stack[i].isSubtypeOf(inputs[i])) {
+        typesMatch = false;
+        break;
+      }
+    }
+    if (!typesMatch) {
+      final String expected = inputs.join(', ');
+      final String got = stack.join(', ');
+      _reportError("Expected [$expected], but stack contained [$got]");
+    }
+    return stack;
+  }
+
+  bool _verifyTypes(List<ValueType> inputs, List<ValueType> outputs,
+      {List<Object>? trace, bool reachableAfter = true}) {
+    return _verifyTypesFun(inputs, (_) => outputs,
+        trace: trace, reachableAfter: reachableAfter);
+  }
+
+  bool _verifyTypesFun(List<ValueType> inputs,
+      List<ValueType> Function(List<ValueType>) outputsFun,
+      {List<Object>? trace, bool reachableAfter = true}) {
+    if (!reachable) {
+      return _debugTrace(trace, reachableAfter: false);
+    }
+    if (_stackTypes.length - inputs.length < _topOfLabelStack.baseStackHeight) {
+      _reportError("Underflowing base stack of innermost block");
+    }
+    final List<ValueType> stack = _checkStackTypes(inputs);
+    _stackTypes.length -= inputs.length;
+    _stackTypes.addAll(outputsFun(stack));
+    return _debugTrace(trace, reachableAfter: reachableAfter);
+  }
+
+  bool _verifyBranchTypes(Label label,
+      [int popped = 0, List<ValueType> pushed = const []]) {
+    if (!reachable) {
+      return true;
+    }
+    final List<ValueType> inputs = label.targetTypes;
+    if (_stackTypes.length - popped + pushed.length - inputs.length <
+        label.baseStackHeight) {
+      _reportError("Underflowing base stack of target label");
+    }
+    final List<ValueType> stack = inputs.length <= pushed.length
+        ? pushed.sublist(pushed.length - inputs.length)
+        : [
+            ..._stackTypes.sublist(
+                _stackTypes.length - popped + pushed.length - inputs.length,
+                _stackTypes.length - popped),
+            ...pushed
+          ];
+    _checkStackTypes(inputs, stack);
+    return true;
+  }
+
+  bool _verifyStartOfBlock(Label label, {required List<Object> trace}) {
+    return _debugTrace(
+        ["$label:", ...trace, FunctionType(label.inputs, label.outputs)],
+        reachableAfter: reachable, indentAfter: 1);
+  }
+
+  bool _verifyEndOfBlock(List<ValueType> outputs,
+      {required List<Object> trace,
+      required bool reachableAfter,
+      required bool reindent}) {
+    final Label label = _topOfLabelStack;
+    if (reachable) {
+      final int expectedHeight = label.baseStackHeight + label.outputs.length;
+      if (_stackTypes.length != expectedHeight) {
+        _reportError("Incorrect stack height at end of block"
+            " (expected $expectedHeight, actual ${_stackTypes.length})");
+      }
+      _checkStackTypes(label.outputs);
+    }
+    if (label.reachable) {
+      assert(_stackTypes.length >= label.baseStackHeight);
+      _stackTypes.length = label.baseStackHeight;
+      _stackTypes.addAll(outputs);
+    }
+    return _debugTrace([if (label.hasOrdinal) "$label:", ...trace],
+        reachableAfter: reachableAfter,
+        indentBefore: -1,
+        indentAfter: reindent ? 1 : 0);
+  }
+
+  // Meta
+
+  /// Emit a comment.
+  void comment(String text) {
+    assert(_comment(text));
+  }
+
+  // Control instructions
+
+  /// Emit an `unreachable` instruction.
+  void unreachable() {
+    assert(_verifyTypes(const [], const [],
+        trace: const ['unreachable'], reachableAfter: false));
+    _reachable = false;
+    writeByte(0x00);
+  }
+
+  /// Emit a `nop` instruction.
+  void nop() {
+    assert(_verifyTypes(const [], const [], trace: const ['nop']));
+    writeByte(0x01);
+  }
+
+  Label _beginBlock(int encoding, Label label, {required List<Object> trace}) {
+    assert(_verifyTypes(label.inputs, label.inputs));
+    label.ordinal = ++_labelCount;
+    label.depth = _labelStack.length;
+    label.baseStackHeight = _stackTypes.length - label.inputs.length;
+    label.reachable = reachable;
+    _labelStack.add(label);
+    assert(_verifyStartOfBlock(label, trace: trace));
+    writeByte(encoding);
+    if (label.inputs.isEmpty && label.outputs.isEmpty) {
+      writeByte(0x40);
+    } else if (label.inputs.isEmpty && label.outputs.length == 1) {
+      write(label.outputs.single);
+    } else {
+      final type = module.addFunctionType(label.inputs, label.outputs);
+      writeSigned(type.index);
+    }
+    return label;
+  }
+
+  /// Emit a `block` instruction.
+  /// Branching to the returned label will branch to the matching `end`.
+  Label block(
+      [List<ValueType> inputs = const [], List<ValueType> outputs = const []]) {
+    return _beginBlock(0x02, Block(inputs, outputs), trace: const ['block']);
+  }
+
+  /// Emit a `loop` instruction.
+  /// Branching to the returned label will branch to the `loop`.
+  Label loop(
+      [List<ValueType> inputs = const [], List<ValueType> outputs = const []]) {
+    return _beginBlock(0x03, Loop(inputs, outputs), trace: const ['loop']);
+  }
+
+  /// Emit an `if` instruction.
+  /// Branching to the returned label will branch to the matching `end`.
+  Label if_(
+      [List<ValueType> inputs = const [], List<ValueType> outputs = const []]) {
+    assert(_verifyTypes(const [NumType.i32], const []));
+    return _beginBlock(0x04, If(inputs, outputs), trace: const ['if']);
+  }
+
+  /// Emit an `else` instruction.
+  void else_() {
+    assert(_topOfLabelStack is If ||
+        _reportError("Unexpected 'else' (not in 'if' block)"));
+    final If label = _topOfLabelStack as If;
+    assert(!label.hasElse || _reportError("Duplicate 'else' in 'if' block"));
+    assert(_verifyEndOfBlock(label.inputs,
+        trace: const ['else'],
+        reachableAfter: _topOfLabelStack.reachable,
+        reindent: true));
+    label.hasElse = true;
+    _reachable = _topOfLabelStack.reachable;
+    writeByte(0x05);
+  }
+
+  /// Emit a `try` instruction.
+  Label try_(
+      [List<ValueType> inputs = const [], List<ValueType> outputs = const []]) {
+    return _beginBlock(0x06, Try(inputs, outputs), trace: const ['try']);
+  }
+
+  /// Emit a `catch` instruction.
+  void catch_(Tag tag) {
+    assert(_topOfLabelStack is Try ||
+        _reportError("Unexpected 'catch' (not in 'try' block"));
+    final Try try_ = _topOfLabelStack as Try;
+    assert(_verifyEndOfBlock(tag.type.inputs,
+        trace: ['catch', tag], reachableAfter: try_.reachable, reindent: true));
+    try_.hasCatch = true;
+    _reachable = try_.reachable;
+    writeByte(0x07);
+    _writeTag(tag);
+  }
+
+  /// Emit a `throw` instruction.
+  void throw_(Tag tag) {
+    assert(_verifyTypes(tag.type.inputs, const [], trace: ['throw', tag]));
+    _reachable = false;
+    writeByte(0x08);
+    writeUnsigned(tag.index);
+  }
+
+  /// Emit a `rethrow` instruction.
+  void rethrow_(Label label) {
+    assert(label is Try && label.hasCatch);
+    assert(_verifyTypes(const [], const [], trace: ['rethrow', label]));
+    _reachable = false;
+    writeByte(0x09);
+    _writeLabel(label);
+  }
+
+  /// Emit an `end` instruction.
+  void end() {
+    assert(_verifyEndOfBlock(_topOfLabelStack.outputs,
+        trace: const ['end'],
+        reachableAfter: _topOfLabelStack.reachable,
+        reindent: false));
+    _reachable = _topOfLabelStack.reachable;
+    _labelStack.removeLast();
+    writeByte(0x0B);
+  }
+
+  int _labelIndex(Label label) {
+    final int index = _labelStack.length - label.depth - 1;
+    assert(_labelStack[label.depth] == label);
+    return index;
+  }
+
+  void _writeLabel(Label label) {
+    writeUnsigned(_labelIndex(label));
+  }
+
+  void _writeTag(Tag tag) {
+    writeUnsigned(tag.index);
+  }
+
+  /// Emit a `br` instruction.
+  void br(Label label) {
+    assert(_verifyTypes(const [], const [],
+        trace: ['br', label], reachableAfter: false));
+    assert(_verifyBranchTypes(label));
+    _reachable = false;
+    writeByte(0x0C);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_if` instruction.
+  void br_if(Label label) {
+    assert(
+        _verifyTypes(const [NumType.i32], const [], trace: ['br_if', label]));
+    assert(_verifyBranchTypes(label));
+    writeByte(0x0D);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_table` instruction.
+  void br_table(List<Label> labels, Label defaultLabel) {
+    assert(_verifyTypes(const [NumType.i32], const [],
+        trace: ['br_table', ...labels, defaultLabel], reachableAfter: false));
+    for (var label in labels) {
+      assert(_verifyBranchTypes(label));
+    }
+    assert(_verifyBranchTypes(defaultLabel));
+    _reachable = false;
+    writeByte(0x0E);
+    writeUnsigned(labels.length);
+    for (Label label in labels) {
+      _writeLabel(label);
+    }
+    _writeLabel(defaultLabel);
+  }
+
+  /// Emit a `return` instruction.
+  void return_() {
+    assert(_verifyTypes(_labelStack[0].outputs, const [],
+        trace: const ['return'], reachableAfter: false));
+    _reachable = false;
+    writeByte(0x0F);
+  }
+
+  /// Emit a `call` instruction.
+  void call(BaseFunction function) {
+    assert(_verifyTypes(function.type.inputs, function.type.outputs,
+        trace: ['call', function]));
+    writeByte(0x10);
+    writeUnsigned(function.index);
+  }
+
+  /// Emit a `call_indirect` instruction.
+  void call_indirect(FunctionType type, [Table? table]) {
+    assert(_verifyTypes([...type.inputs, NumType.i32], type.outputs,
+        trace: ['call_indirect', type, if (table != null) table.index]));
+    writeByte(0x11);
+    writeUnsigned(type.index);
+    writeUnsigned(table?.index ?? 0);
+  }
+
+  bool _verifyCallRef() {
+    if (!reachable) {
+      return _debugTrace(const ['call_ref'], reachableAfter: false);
+    }
+    ValueType fun = _topOfStack;
+    if (fun is RefType) {
+      var heapType = fun.heapType;
+      if (heapType is FunctionType) {
+        return _verifyTypes([...heapType.inputs, fun], heapType.outputs,
+            trace: const ['call_ref']);
+      }
+    }
+    _reportError("Expected function type, got $fun");
+  }
+
+  /// Emit a `call_ref` instruction.
+  void call_ref() {
+    assert(_verifyCallRef());
+    writeByte(0x14);
+  }
+
+  // Parametric instructions
+
+  /// Emit a `drop` instruction.
+  void drop() {
+    assert(_verifyTypes([_topOfStack], const [], trace: const ['drop']));
+    writeByte(0x1A);
+  }
+
+  /// Emit a `select` instruction.
+  void select(ValueType type) {
+    assert(_verifyTypes([type, type, NumType.i32], [type],
+        trace: ['select', type]));
+    if (type is NumType) {
+      writeByte(0x1B);
+    } else {
+      writeByte(0x1C);
+      writeUnsigned(1);
+      write(type);
+    }
+  }
+
+  // Variable instructions
+
+  /// Emit a `local.get` instruction.
+  void local_get(Local local) {
+    assert(locals[local.index] == local);
+    assert(_verifyTypes(const [], [local.type], trace: ['local.get', local]));
+    writeByte(0x20);
+    writeUnsigned(local.index);
+  }
+
+  /// Emit a `local.set` instruction.
+  void local_set(Local local) {
+    assert(locals[local.index] == local);
+    assert(_verifyTypes([local.type], const [], trace: ['local.set', local]));
+    writeByte(0x21);
+    writeUnsigned(local.index);
+  }
+
+  /// Emit a `local.tee` instruction.
+  void local_tee(Local local) {
+    assert(locals[local.index] == local);
+    assert(
+        _verifyTypes([local.type], [local.type], trace: ['local.tee', local]));
+    writeByte(0x22);
+    writeUnsigned(local.index);
+  }
+
+  /// Emit a `global.get` instruction.
+  void global_get(Global global) {
+    assert(_verifyTypes(const [], [global.type.type],
+        trace: ['global.get', global]));
+    writeByte(0x23);
+    writeUnsigned(global.index);
+  }
+
+  /// Emit a `global.set` instruction.
+  void global_set(Global global) {
+    assert(global.type.mutable);
+    assert(_verifyTypes([global.type.type], const [],
+        trace: ['global.set', global]));
+    writeByte(0x24);
+    writeUnsigned(global.index);
+  }
+
+  // Memory instructions
+
+  void _writeMemArg(Memory memory, int offset, int align) {
+    assert(align >= 0 && align < 64);
+    if (memory.index == 0) {
+      writeByte(align);
+      writeUnsigned(offset);
+    } else {
+      writeByte(64 + align);
+      writeUnsigned(offset);
+      writeUnsigned(memory.index);
+    }
+  }
+
+  /// Emit an `i32.load` instruction.
+  void i32_load(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: ['i32.load', memory.index, offset, align]));
+    writeByte(0x28);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load` instruction.
+  void i64_load(Memory memory, int offset, [int align = 3]) {
+    assert(align >= 0 && align <= 3);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load', memory.index, offset, align]));
+    writeByte(0x29);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `f32.load` instruction.
+  void f32_load(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f32],
+        trace: ['f32.load', memory.index, offset, align]));
+    writeByte(0x2A);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `f64.load` instruction.
+  void f64_load(Memory memory, int offset, [int align = 3]) {
+    assert(align >= 0 && align <= 3);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f64],
+        trace: ['f64.load', memory.index, offset, align]));
+    writeByte(0x2B);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.load8_s` instruction.
+  void i32_load8_s(Memory memory, int offset, [int align = 0]) {
+    assert(align == 0);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: ['i32.load8_s', memory.index, offset, align]));
+    writeByte(0x2C);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.load8_u` instruction.
+  void i32_load8_u(Memory memory, int offset, [int align = 0]) {
+    assert(align == 0);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: ['i32.load8_u', memory.index, offset, align]));
+    writeByte(0x2D);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.load16_s` instruction.
+  void i32_load16_s(Memory memory, int offset, [int align = 1]) {
+    assert(align >= 0 && align <= 1);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: ['i32.load16_s', memory.index, offset, align]));
+    writeByte(0x2E);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.load16_u` instruction.
+  void i32_load16_u(Memory memory, int offset, [int align = 1]) {
+    assert(align >= 0 && align <= 1);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: ['i32.load16_u', memory.index, offset, align]));
+    writeByte(0x2F);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load8_s` instruction.
+  void i64_load8_s(Memory memory, int offset, [int align = 0]) {
+    assert(align == 0);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load8_s', memory.index, offset, align]));
+    writeByte(0x30);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load8_u` instruction.
+  void i64_load8_u(Memory memory, int offset, [int align = 0]) {
+    assert(align == 0);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load8_u', memory.index, offset, align]));
+    writeByte(0x31);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load16_s` instruction.
+  void i64_load16_s(Memory memory, int offset, [int align = 1]) {
+    assert(align >= 0 && align <= 1);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load16_s', memory.index, offset, align]));
+    writeByte(0x32);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load16_u` instruction.
+  void i64_load16_u(Memory memory, int offset, [int align = 1]) {
+    assert(align >= 0 && align <= 1);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load16_u', memory.index, offset, align]));
+    writeByte(0x33);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load32_s` instruction.
+  void i64_load32_s(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load32_s', memory.index, offset, align]));
+    writeByte(0x34);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.load32_u` instruction.
+  void i64_load32_u(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: ['i64.load32_u', memory.index, offset, align]));
+    writeByte(0x35);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.store` instruction.
+  void i32_store(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [],
+        trace: ['i32.store', memory.index, offset, align]));
+    writeByte(0x36);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.store` instruction.
+  void i64_store(Memory memory, int offset, [int align = 3]) {
+    assert(align >= 0 && align <= 3);
+    assert(_verifyTypes(const [NumType.i32, NumType.i64], const [],
+        trace: ['i64.store', memory.index, offset, align]));
+    writeByte(0x37);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `f32.store` instruction.
+  void f32_store(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32, NumType.f32], const [],
+        trace: ['f32.store', memory.index, offset, align]));
+    writeByte(0x38);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `f64.store` instruction.
+  void f64_store(Memory memory, int offset, [int align = 3]) {
+    assert(align >= 0 && align <= 3);
+    assert(_verifyTypes(const [NumType.i32, NumType.f64], const [],
+        trace: ['f64.store', memory.index, offset, align]));
+    writeByte(0x39);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.store8` instruction.
+  void i32_store8(Memory memory, int offset, [int align = 0]) {
+    assert(align == 0);
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [],
+        trace: ['i32.store8', memory.index, offset, align]));
+    writeByte(0x3A);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i32.store16` instruction.
+  void i32_store16(Memory memory, int offset, [int align = 1]) {
+    assert(align >= 0 && align <= 1);
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [],
+        trace: ['i32.store16', memory.index, offset, align]));
+    writeByte(0x3B);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.store8` instruction.
+  void i64_store8(Memory memory, int offset, [int align = 0]) {
+    assert(align == 0);
+    assert(_verifyTypes(const [NumType.i32, NumType.i64], const [],
+        trace: ['i64.store8', memory.index, offset, align]));
+    writeByte(0x3C);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.store16` instruction.
+  void i64_store16(Memory memory, int offset, [int align = 1]) {
+    assert(align >= 0 && align <= 1);
+    assert(_verifyTypes(const [NumType.i32, NumType.i64], const [],
+        trace: ['i64.store16', memory.index, offset, align]));
+    writeByte(0x3D);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit an `i64.store32` instruction.
+  void i64_store32(Memory memory, int offset, [int align = 2]) {
+    assert(align >= 0 && align <= 2);
+    assert(_verifyTypes(const [NumType.i32, NumType.i64], const [],
+        trace: ['i64.store32', memory.index, offset, align]));
+    writeByte(0x3E);
+    _writeMemArg(memory, offset, align);
+  }
+
+  /// Emit a `memory.size` instruction.
+  void memory_size(Memory memory) {
+    assert(_verifyTypes(const [], const [NumType.i32]));
+    writeByte(0x3F);
+    writeUnsigned(memory.index);
+  }
+
+  /// Emit a `memory.grow` instruction.
+  void memory_grow(Memory memory) {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32]));
+    writeByte(0x40);
+    writeUnsigned(memory.index);
+  }
+
+  // Reference instructions
+
+  /// Emit a `ref.null` instruction.
+  void ref_null(HeapType heapType) {
+    assert(_verifyTypes(const [], [RefType(heapType, nullable: true)],
+        trace: ['ref.null', heapType]));
+    writeByte(0xD0);
+    write(heapType);
+  }
+
+  /// Emit a `ref.is_null` instruction.
+  void ref_is_null() {
+    assert(_verifyTypes(const [RefType.any()], const [NumType.i32],
+        trace: const ['ref.is_null']));
+    writeByte(0xD1);
+  }
+
+  /// Emit a `ref.func` instruction.
+  void ref_func(BaseFunction function) {
+    assert(_verifyTypes(const [], [RefType.def(function.type, nullable: false)],
+        trace: ['ref.func', function]));
+    writeByte(0xD2);
+    writeUnsigned(function.index);
+  }
+
+  /// Emit a `ref.as_non_null` instruction.
+  void ref_as_non_null() {
+    assert(_verifyTypes(
+        const [RefType.any()], [_topOfStack.withNullability(false)],
+        trace: const ['ref.as_non_null']));
+    writeByte(0xD3);
+  }
+
+  /// Emit a `br_on_null` instruction.
+  void br_on_null(Label label) {
+    assert(_verifyTypes(
+        const [RefType.any()], [_topOfStack.withNullability(false)],
+        trace: ['br_on_null', label]));
+    assert(_verifyBranchTypes(label, 1));
+    writeByte(0xD4);
+    _writeLabel(label);
+  }
+
+  /// Emit a `ref.eq` instruction.
+  void ref_eq() {
+    assert(_verifyTypes(const [RefType.eq(), RefType.eq()], const [NumType.i32],
+        trace: const ['ref.eq']));
+    writeByte(0xD5);
+  }
+
+  /// Emit a `br_on_non_null` instruction.
+  void br_on_non_null(Label label) {
+    assert(_verifyBranchTypes(label, 1, [_topOfStack.withNullability(false)]));
+    assert(_verifyTypes(const [RefType.any()], const [],
+        trace: ['br_on_non_null', label]));
+    writeByte(0xD6);
+    _writeLabel(label);
+  }
+
+  /// Emit a `struct.new_with_rtt` instruction.
+  void struct_new_with_rtt(StructType structType) {
+    assert(_verifyTypes(
+        [...structType.fields.map((f) => f.type.unpacked), Rtt(structType)],
+        [RefType.def(structType, nullable: false)],
+        trace: ['struct.new_with_rtt', structType]));
+    writeBytes(const [0xFB, 0x01]);
+    writeUnsigned(structType.index);
+  }
+
+  /// Emit a `struct.new_default_with_rtt` instruction.
+  void struct_new_default_with_rtt(StructType structType) {
+    assert(_verifyTypes(
+        [Rtt(structType)], [RefType.def(structType, nullable: false)],
+        trace: ['struct.new_default_with_rtt', structType]));
+    writeBytes(const [0xFB, 0x02]);
+    writeUnsigned(structType.index);
+  }
+
+  /// Emit a `struct.get` instruction.
+  void struct_get(StructType structType, int fieldIndex) {
+    assert(structType.fields[fieldIndex].type is ValueType);
+    assert(_verifyTypes([RefType.def(structType, nullable: true)],
+        [structType.fields[fieldIndex].type.unpacked],
+        trace: ['struct.get', structType, fieldIndex]));
+    writeBytes(const [0xFB, 0x03]);
+    writeUnsigned(structType.index);
+    writeUnsigned(fieldIndex);
+  }
+
+  /// Emit a `struct.get_s` instruction.
+  void struct_get_s(StructType structType, int fieldIndex) {
+    assert(structType.fields[fieldIndex].type is PackedType);
+    assert(_verifyTypes([RefType.def(structType, nullable: true)],
+        [structType.fields[fieldIndex].type.unpacked],
+        trace: ['struct.get_s', structType, fieldIndex]));
+    writeBytes(const [0xFB, 0x04]);
+    writeUnsigned(structType.index);
+    writeUnsigned(fieldIndex);
+  }
+
+  /// Emit a `struct.get_u` instruction.
+  void struct_get_u(StructType structType, int fieldIndex) {
+    assert(structType.fields[fieldIndex].type is PackedType);
+    assert(_verifyTypes([RefType.def(structType, nullable: true)],
+        [structType.fields[fieldIndex].type.unpacked],
+        trace: ['struct.get_u', structType, fieldIndex]));
+    writeBytes(const [0xFB, 0x05]);
+    writeUnsigned(structType.index);
+    writeUnsigned(fieldIndex);
+  }
+
+  /// Emit a `struct.set` instruction.
+  void struct_set(StructType structType, int fieldIndex) {
+    assert(_verifyTypes([
+      RefType.def(structType, nullable: true),
+      structType.fields[fieldIndex].type.unpacked
+    ], const [], trace: [
+      'struct.set',
+      structType,
+      fieldIndex
+    ]));
+    writeBytes(const [0xFB, 0x06]);
+    writeUnsigned(structType.index);
+    writeUnsigned(fieldIndex);
+  }
+
+  /// Emit a `struct.new` instruction.
+  void struct_new(StructType structType) {
+    assert(_verifyTypes([...structType.fields.map((f) => f.type.unpacked)],
+        [RefType.def(structType, nullable: false)],
+        trace: ['struct.new', structType]));
+    writeBytes(const [0xFB, 0x07]);
+    writeUnsigned(structType.index);
+  }
+
+  /// Emit a `struct.new_default` instruction.
+  void struct_new_default(StructType structType) {
+    assert(_verifyTypes(const [], [RefType.def(structType, nullable: false)],
+        trace: ['struct.new_default', structType]));
+    writeBytes(const [0xFB, 0x08]);
+    writeUnsigned(structType.index);
+  }
+
+  /// Emit an `array.new_with_rtt` instruction.
+  void array_new_with_rtt(ArrayType arrayType) {
+    assert(_verifyTypes(
+        [arrayType.elementType.type.unpacked, NumType.i32, Rtt(arrayType)],
+        [RefType.def(arrayType, nullable: false)],
+        trace: ['array.new_with_rtt', arrayType]));
+    writeBytes(const [0xFB, 0x11]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.new_default_with_rtt` instruction.
+  void array_new_default_with_rtt(ArrayType arrayType) {
+    assert(_verifyTypes([NumType.i32, Rtt(arrayType)],
+        [RefType.def(arrayType, nullable: false)],
+        trace: ['array.new_default_with_rtt', arrayType]));
+    writeBytes(const [0xFB, 0x12]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.get` instruction.
+  void array_get(ArrayType arrayType) {
+    assert(arrayType.elementType.type is ValueType);
+    assert(_verifyTypes([RefType.def(arrayType, nullable: true), NumType.i32],
+        [arrayType.elementType.type.unpacked],
+        trace: ['array.get', arrayType]));
+    writeBytes(const [0xFB, 0x13]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.get_s` instruction.
+  void array_get_s(ArrayType arrayType) {
+    assert(arrayType.elementType.type is PackedType);
+    assert(_verifyTypes([RefType.def(arrayType, nullable: true), NumType.i32],
+        [arrayType.elementType.type.unpacked],
+        trace: ['array.get_s', arrayType]));
+    writeBytes(const [0xFB, 0x14]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.get_u` instruction.
+  void array_get_u(ArrayType arrayType) {
+    assert(arrayType.elementType.type is PackedType);
+    assert(_verifyTypes([RefType.def(arrayType, nullable: true), NumType.i32],
+        [arrayType.elementType.type.unpacked],
+        trace: ['array.get_u', arrayType]));
+    writeBytes(const [0xFB, 0x15]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.set` instruction.
+  void array_set(ArrayType arrayType) {
+    assert(_verifyTypes([
+      RefType.def(arrayType, nullable: true),
+      NumType.i32,
+      arrayType.elementType.type.unpacked
+    ], const [], trace: [
+      'array.set',
+      arrayType
+    ]));
+    writeBytes(const [0xFB, 0x16]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.len` instruction.
+  void array_len(ArrayType arrayType) {
+    assert(_verifyTypes(
+        [RefType.def(arrayType, nullable: true)], const [NumType.i32],
+        trace: ['array.len', arrayType]));
+    writeBytes(const [0xFB, 0x17]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.init` instruction.
+  void array_init(ArrayType arrayType, int length) {
+    ValueType elementType = arrayType.elementType.type.unpacked;
+    assert(_verifyTypes([...List.filled(length, elementType), Rtt(arrayType)],
+        [RefType.def(arrayType, nullable: false)],
+        trace: ['array.init', arrayType, length]));
+    writeBytes(const [0xFB, 0x19]);
+    writeUnsigned(arrayType.index);
+    writeUnsigned(length);
+  }
+
+  /// Emit an `array.init_static` instruction.
+  void array_init_static(ArrayType arrayType, int length) {
+    ValueType elementType = arrayType.elementType.type.unpacked;
+    assert(_verifyTypes([...List.filled(length, elementType)],
+        [RefType.def(arrayType, nullable: false)],
+        trace: ['array.init_static', arrayType, length]));
+    writeBytes(const [0xFB, 0x1a]);
+    writeUnsigned(arrayType.index);
+    writeUnsigned(length);
+  }
+
+  /// Emit an `array.new` instruction.
+  void array_new(ArrayType arrayType) {
+    assert(_verifyTypes([arrayType.elementType.type.unpacked, NumType.i32],
+        [RefType.def(arrayType, nullable: false)],
+        trace: ['array.new', arrayType]));
+    writeBytes(const [0xFB, 0x1b]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.new_default` instruction.
+  void array_new_default(ArrayType arrayType) {
+    assert(_verifyTypes(
+        [NumType.i32], [RefType.def(arrayType, nullable: false)],
+        trace: ['array.new_default', arrayType]));
+    writeBytes(const [0xFB, 0x1c]);
+    writeUnsigned(arrayType.index);
+  }
+
+  /// Emit an `array.init_from_data_static` instruction.
+  void array_init_from_data_static(ArrayType arrayType, DataSegment data) {
+    assert(arrayType.elementType.type.isPrimitive);
+    assert(_verifyTypes(
+        [NumType.i32, NumType.i32], [RefType.def(arrayType, nullable: false)],
+        trace: ['array.init_from_data_static', arrayType, data.index]));
+    writeBytes(const [0xFB, 0x1d]);
+    writeUnsigned(arrayType.index);
+    writeUnsigned(data.index);
+    if (isGlobalInitializer) module.dataReferencedFromGlobalInitializer = true;
+  }
+
+  /// Emit an `array.init_from_data` instruction.
+  void array_init_from_data(ArrayType arrayType, DataSegment data) {
+    assert(arrayType.elementType.type.isPrimitive);
+    assert(_verifyTypes([NumType.i32, NumType.i32, Rtt(arrayType)],
+        [RefType.def(arrayType, nullable: false)],
+        trace: ['array.init_from_data', arrayType, data.index]));
+    writeBytes(const [0xFB, 0x1e]);
+    writeUnsigned(arrayType.index);
+    writeUnsigned(data.index);
+    if (isGlobalInitializer) module.dataReferencedFromGlobalInitializer = true;
+  }
+
+  /// Emit an `i31.new` instruction.
+  void i31_new() {
+    assert(_verifyTypes(const [NumType.i32], const [RefType.i31()],
+        trace: const ['i31.new']));
+    writeBytes(const [0xFB, 0x20]);
+  }
+
+  /// Emit an `i31.get_s` instruction.
+  void i31_get_s() {
+    assert(_verifyTypes(const [RefType.i31()], const [NumType.i32],
+        trace: const ['i31.get_s']));
+    writeBytes(const [0xFB, 0x21]);
+  }
+
+  /// Emit an `i31.get_u` instruction.
+  void i31_get_u() {
+    assert(_verifyTypes(const [RefType.i31()], const [NumType.i32],
+        trace: const ['i31.get_u']));
+    writeBytes(const [0xFB, 0x22]);
+  }
+
+  /// Emit an `rtt.canon` instruction.
+  void rtt_canon(DefType defType) {
+    assert(_verifyTypes(const [], [Rtt(defType, defType.depth)],
+        trace: ['rtt.canon', defType]));
+    writeBytes(const [0xFB, 0x30]);
+    writeSigned(defType.index);
+  }
+
+  bool _verifyRttSub(DefType subType) {
+    if (!reachable) {
+      return _debugTrace(['rtt.sub', subType], reachableAfter: false);
+    }
+    final ValueType input = _topOfStack;
+    if (input is! Rtt) _reportError("Expected rtt, but stack contained $input");
+    final int? depth = input.depth;
+    if (depth == null) _reportError("Expected rtt with known depth");
+    final DefType superType = input.defType;
+    if (!subType.isSubtypeOf(superType)) {
+      _reportError("Expected supertype of $subType, but got $superType");
+    }
+    return _verifyTypes([input], [Rtt(subType, depth + 1)],
+        trace: ['rtt.sub', subType]);
+  }
+
+  /// Emit an `rtt.sub` instruction.
+  void rtt_sub(DefType defType) {
+    assert(_verifyRttSub(defType));
+    writeBytes(const [0xFB, 0x31]);
+    writeSigned(defType.index);
+  }
+
+  bool _verifyCast(List<ValueType> Function(List<ValueType>) outputsFun,
+      {List<Object>? trace}) {
+    if (!reachable) {
+      return _debugTrace(trace, reachableAfter: false);
+    }
+    final stack = _stack(2);
+    final ValueType value = stack[0];
+    final ValueType rtt = stack[1];
+    if (rtt is! Rtt ||
+        !value.isSubtypeOf(const RefType.data(nullable: true)) &&
+            !value.isSubtypeOf(const RefType.func(nullable: true))) {
+      _reportError("Expected [data or func, rtt], but stack contained $stack");
+    }
+    return _verifyTypesFun(stack, outputsFun, trace: trace);
+  }
+
+  /// Emit a `ref.test` instruction.
+  void ref_test() {
+    assert(_verifyCast((_) => const [NumType.i32], trace: const ['ref.test']));
+    writeBytes(const [0xFB, 0x40]);
+  }
+
+  /// Emit a `ref.cast` instruction.
+  void ref_cast() {
+    assert(_verifyCast(
+        (inputs) => [
+              RefType.def((inputs[1] as Rtt).defType,
+                  nullable: inputs[0].nullable)
+            ],
+        trace: const ['ref.cast']));
+    writeBytes(const [0xFB, 0x41]);
+  }
+
+  /// Emit a `br_on_cast` instruction.
+  void br_on_cast(Label label) {
+    late final DefType targetType;
+    assert(_verifyCast((inputs) {
+      targetType = (inputs[1] as Rtt).defType;
+      return [inputs[0]];
+    }, trace: ['br_on_cast', label]));
+    assert(_verifyBranchTypes(
+        label, 1, [RefType.def(targetType, nullable: false)]));
+    writeBytes(const [0xFB, 0x42]);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_on_cast_fail` instruction.
+  void br_on_cast_fail(Label label) {
+    assert(_verifyBranchTypes(label, 1, [_topOfStack]));
+    assert(_verifyCast(
+        (inputs) => [RefType.def((inputs[1] as Rtt).defType, nullable: false)],
+        trace: ['br_on_cast_fail', label]));
+    writeBytes(const [0xFB, 0x43]);
+    _writeLabel(label);
+  }
+
+  bool _verifyCastStatic(List<ValueType> Function(List<ValueType>) outputsFun,
+      {List<Object>? trace}) {
+    if (!reachable) {
+      return _debugTrace(trace, reachableAfter: false);
+    }
+    final ValueType value = _topOfStack;
+    if (!value.isSubtypeOf(const RefType.data(nullable: true)) &&
+        !value.isSubtypeOf(const RefType.func(nullable: true))) {
+      _reportError("Expected [data or func], but stack contained [$value]");
+    }
+    return _verifyTypesFun([value], outputsFun, trace: trace);
+  }
+
+  /// Emit a `ref.test_static` instruction.
+  void ref_test_static(DefType targetType) {
+    assert(_verifyCastStatic((_) => const [NumType.i32],
+        trace: ['ref.test_static', targetType]));
+    writeBytes(const [0xFB, 0x44]);
+    writeSigned(targetType.index);
+  }
+
+  /// Emit a `ref.cast_static` instruction.
+  void ref_cast_static(DefType targetType) {
+    assert(_verifyCastStatic(
+        (inputs) => [RefType.def(targetType, nullable: inputs[0].nullable)],
+        trace: ['ref.cast_static', targetType]));
+    writeBytes(const [0xFB, 0x45]);
+    writeSigned(targetType.index);
+  }
+
+  /// Emit a `br_on_cast_static` instruction.
+  void br_on_cast_static(Label label, DefType targetType) {
+    assert(_verifyCastStatic((inputs) {
+      return [inputs[0]];
+    }, trace: ['br_on_cast_static', label, targetType]));
+    assert(_verifyBranchTypes(
+        label, 1, [RefType.def(targetType, nullable: false)]));
+    writeBytes(const [0xFB, 0x46]);
+    _writeLabel(label);
+    writeSigned(targetType.index);
+  }
+
+  /// Emit a `br_on_cast_static_fail` instruction.
+  void br_on_cast_static_fail(Label label, DefType targetType) {
+    assert(_verifyBranchTypes(label, 1, [_topOfStack]));
+    assert(_verifyCast((inputs) => [RefType.def(targetType, nullable: false)],
+        trace: ['br_on_cast_static_fail', label, targetType]));
+    writeBytes(const [0xFB, 0x47]);
+    _writeLabel(label);
+    writeSigned(targetType.index);
+  }
+
+  /// Emit a `ref.is_func` instruction.
+  void ref_is_func() {
+    assert(_verifyTypes(const [RefType.any()], const [NumType.i32],
+        trace: const ['ref.is_func']));
+    writeBytes(const [0xFB, 0x50]);
+  }
+
+  /// Emit a `ref.is_data` instruction.
+  void ref_is_data() {
+    assert(_verifyTypes(const [RefType.any()], const [NumType.i32],
+        trace: const ['ref.is_data']));
+    writeBytes(const [0xFB, 0x51]);
+  }
+
+  /// Emit a `ref.is_i31` instruction.
+  void ref_is_i31() {
+    assert(_verifyTypes(const [RefType.any()], const [NumType.i32],
+        trace: const ['ref.is_i31']));
+    writeBytes(const [0xFB, 0x52]);
+  }
+
+  /// Emit a `ref.as_func` instruction.
+  void ref_as_func() {
+    assert(_verifyTypes(
+        const [RefType.any()], const [RefType.func(nullable: false)],
+        trace: const ['ref.as_func']));
+    writeBytes(const [0xFB, 0x58]);
+  }
+
+  /// Emit a `ref.as_data` instruction.
+  void ref_as_data() {
+    assert(_verifyTypes(
+        const [RefType.any()], const [RefType.data(nullable: false)],
+        trace: const ['ref.as_data']));
+    writeBytes(const [0xFB, 0x59]);
+  }
+
+  /// Emit a `ref.as_i31` instruction.
+  void ref_as_i31() {
+    assert(_verifyTypes(
+        const [RefType.any()], const [RefType.i31(nullable: false)],
+        trace: const ['ref.as_i31']));
+    writeBytes(const [0xFB, 0x5A]);
+  }
+
+  /// Emit a `br_on_func` instruction.
+  void br_on_func(Label label) {
+    assert(_verifyTypes(const [RefType.any()], [_topOfStack],
+        trace: ['br_on_func', label]));
+    assert(_verifyBranchTypes(label, 1, const [RefType.func(nullable: false)]));
+    writeBytes(const [0xFB, 0x60]);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_on_data` instruction.
+  void br_on_data(Label label) {
+    assert(_verifyTypes(const [RefType.any()], [_topOfStack],
+        trace: ['br_on_data', label]));
+    assert(_verifyBranchTypes(label, 1, const [RefType.data(nullable: false)]));
+    writeBytes(const [0xFB, 0x61]);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_on_i31` instruction.
+  void br_on_i31(Label label) {
+    assert(_verifyTypes(const [RefType.any()], [_topOfStack],
+        trace: ['br_on_i31', label]));
+    assert(_verifyBranchTypes(label, 1, const [RefType.i31(nullable: false)]));
+    writeBytes(const [0xFB, 0x62]);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_on_non_func` instruction.
+  void br_on_non_func(Label label) {
+    assert(_verifyBranchTypes(label, 1, [_topOfStack]));
+    assert(_verifyTypes(
+        const [RefType.any()], const [RefType.func(nullable: false)],
+        trace: ['br_on_non_func', label]));
+    writeBytes(const [0xFB, 0x63]);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_on_non_data` instruction.
+  void br_on_non_data(Label label) {
+    assert(_verifyBranchTypes(label, 1, [_topOfStack]));
+    assert(_verifyTypes(
+        const [RefType.any()], const [RefType.data(nullable: false)],
+        trace: ['br_on_non_data', label]));
+    writeBytes(const [0xFB, 0x64]);
+    _writeLabel(label);
+  }
+
+  /// Emit a `br_on_non_i31` instruction.
+  void br_on_non_i31(Label label) {
+    assert(_verifyBranchTypes(label, 1, [_topOfStack]));
+    assert(_verifyTypes(
+        const [RefType.any()], const [RefType.i31(nullable: false)],
+        trace: ['br_on_non_i31', label]));
+    writeBytes(const [0xFB, 0x65]);
+    _writeLabel(label);
+  }
+
+  // Numeric instructions
+
+  /// Emit an `i32.const` instruction.
+  void i32_const(int value) {
+    assert(_verifyTypes(const [], const [NumType.i32],
+        trace: ['i32.const', value]));
+    assert(-1 << 31 <= value && value < 1 << 31);
+    writeByte(0x41);
+    writeSigned(value);
+  }
+
+  /// Emit an `i64.const` instruction.
+  void i64_const(int value) {
+    assert(_verifyTypes(const [], const [NumType.i64],
+        trace: ['i64.const', value]));
+    writeByte(0x42);
+    writeSigned(value);
+  }
+
+  /// Emit an `f32.const` instruction.
+  void f32_const(double value) {
+    assert(_verifyTypes(const [], const [NumType.f32],
+        trace: ['f32.const', value]));
+    writeByte(0x43);
+    writeF32(value);
+  }
+
+  /// Emit an `f64.const` instruction.
+  void f64_const(double value) {
+    assert(_verifyTypes(const [], const [NumType.f64],
+        trace: ['f64.const', value]));
+    writeByte(0x44);
+    writeF64(value);
+  }
+
+  /// Emit an `i32.eqz` instruction.
+  void i32_eqz() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: const ['i32.eqz']));
+    writeByte(0x45);
+  }
+
+  /// Emit an `i32.eq` instruction.
+  void i32_eq() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.eq']));
+    writeByte(0x46);
+  }
+
+  /// Emit an `i32.ne` instruction.
+  void i32_ne() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.ne']));
+    writeByte(0x47);
+  }
+
+  /// Emit an `i32.lt_s` instruction.
+  void i32_lt_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.lt_s']));
+    writeByte(0x48);
+  }
+
+  /// Emit an `i32.lt_u` instruction.
+  void i32_lt_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.lt_u']));
+    writeByte(0x49);
+  }
+
+  /// Emit an `i32.gt_s` instruction.
+  void i32_gt_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.gt_s']));
+    writeByte(0x4A);
+  }
+
+  /// Emit an `i32.gt_u` instruction.
+  void i32_gt_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.gt_u']));
+    writeByte(0x4B);
+  }
+
+  /// Emit an `i32.le_s` instruction.
+  void i32_le_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.le_s']));
+    writeByte(0x4C);
+  }
+
+  /// Emit an `i32.le_u` instruction.
+  void i32_le_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.le_u']));
+    writeByte(0x4D);
+  }
+
+  /// Emit an `i32.ge_s` instruction.
+  void i32_ge_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.ge_s']));
+    writeByte(0x4E);
+  }
+
+  /// Emit an `i32.ge_u` instruction.
+  void i32_ge_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.ge_u']));
+    writeByte(0x4F);
+  }
+
+  /// Emit an `i64.eqz` instruction.
+  void i64_eqz() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i32],
+        trace: const ['i64.eqz']));
+    writeByte(0x50);
+  }
+
+  /// Emit an `i64.eq` instruction.
+  void i64_eq() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.eq']));
+    writeByte(0x51);
+  }
+
+  /// Emit an `i64.ne` instruction.
+  void i64_ne() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.ne']));
+    writeByte(0x52);
+  }
+
+  /// Emit an `i64.lt_s` instruction.
+  void i64_lt_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.lt_s']));
+    writeByte(0x53);
+  }
+
+  /// Emit an `i64.lt_u` instruction.
+  void i64_lt_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.lt_u']));
+    writeByte(0x54);
+  }
+
+  /// Emit an `i64.gt_s` instruction.
+  void i64_gt_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.gt_s']));
+    writeByte(0x55);
+  }
+
+  /// Emit an `i64.gt_u` instruction.
+  void i64_gt_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.gt_u']));
+    writeByte(0x56);
+  }
+
+  /// Emit an `i64.le_s` instruction.
+  void i64_le_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.le_s']));
+    writeByte(0x57);
+  }
+
+  /// Emit an `i64.le_u` instruction.
+  void i64_le_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.le_u']));
+    writeByte(0x58);
+  }
+
+  /// Emit an `i64.ge_s` instruction.
+  void i64_ge_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.ge_s']));
+    writeByte(0x59);
+  }
+
+  /// Emit an `i64.ge_u` instruction.
+  void i64_ge_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i32],
+        trace: const ['i64.ge_u']));
+    writeByte(0x5A);
+  }
+
+  /// Emit an `f32.eq` instruction.
+  void f32_eq() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.i32],
+        trace: const ['f32.eq']));
+    writeByte(0x5B);
+  }
+
+  /// Emit an `f32.ne` instruction.
+  void f32_ne() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.i32],
+        trace: const ['f32.ne']));
+    writeByte(0x5C);
+  }
+
+  /// Emit an `f32.lt` instruction.
+  void f32_lt() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.i32],
+        trace: const ['f32.lt']));
+    writeByte(0x5D);
+  }
+
+  /// Emit an `f32.gt` instruction.
+  void f32_gt() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.i32],
+        trace: const ['f32.gt']));
+    writeByte(0x5E);
+  }
+
+  /// Emit an `f32.le` instruction.
+  void f32_le() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.i32],
+        trace: const ['f32.le']));
+    writeByte(0x5F);
+  }
+
+  /// Emit an `f32.ge` instruction.
+  void f32_ge() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.i32],
+        trace: const ['f32.ge']));
+    writeByte(0x60);
+  }
+
+  /// Emit an `f64.eq` instruction.
+  void f64_eq() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.i32],
+        trace: const ['f64.eq']));
+    writeByte(0x61);
+  }
+
+  /// Emit an `f64.ne` instruction.
+  void f64_ne() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.i32],
+        trace: const ['f64.ne']));
+    writeByte(0x62);
+  }
+
+  /// Emit an `f64.lt` instruction.
+  void f64_lt() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.i32],
+        trace: const ['f64.lt']));
+    writeByte(0x63);
+  }
+
+  /// Emit an `f64.gt` instruction.
+  void f64_gt() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.i32],
+        trace: const ['f64.gt']));
+    writeByte(0x64);
+  }
+
+  /// Emit an `f64.le` instruction.
+  void f64_le() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.i32],
+        trace: const ['f64.le']));
+    writeByte(0x65);
+  }
+
+  /// Emit an `f64.ge` instruction.
+  void f64_ge() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.i32],
+        trace: const ['f64.ge']));
+    writeByte(0x66);
+  }
+
+  /// Emit an `i32.clz` instruction.
+  void i32_clz() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: const ['i32.clz']));
+    writeByte(0x67);
+  }
+
+  /// Emit an `i32.ctz` instruction.
+  void i32_ctz() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: const ['i32.ctz']));
+    writeByte(0x68);
+  }
+
+  /// Emit an `i32.popcnt` instruction.
+  void i32_popcnt() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: const ['i32.popcnt']));
+    writeByte(0x69);
+  }
+
+  /// Emit an `i32.add` instruction.
+  void i32_add() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.add']));
+    writeByte(0x6A);
+  }
+
+  /// Emit an `i32.sub` instruction.
+  void i32_sub() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.sub']));
+    writeByte(0x6B);
+  }
+
+  /// Emit an `i32.mul` instruction.
+  void i32_mul() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.mul']));
+    writeByte(0x6C);
+  }
+
+  /// Emit an `i32.div_s` instruction.
+  void i32_div_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.div_s']));
+    writeByte(0x6D);
+  }
+
+  /// Emit an `i32.div_u` instruction.
+  void i32_div_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.div_u']));
+    writeByte(0x6E);
+  }
+
+  /// Emit an `i32.rem_s` instruction.
+  void i32_rem_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.rem_s']));
+    writeByte(0x6F);
+  }
+
+  /// Emit an `i32.rem_u` instruction.
+  void i32_rem_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.rem_u']));
+    writeByte(0x70);
+  }
+
+  /// Emit an `i32.and` instruction.
+  void i32_and() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.and']));
+    writeByte(0x71);
+  }
+
+  /// Emit an `i32.or` instruction.
+  void i32_or() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.or']));
+    writeByte(0x72);
+  }
+
+  /// Emit an `i32.xor` instruction.
+  void i32_xor() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.xor']));
+    writeByte(0x73);
+  }
+
+  /// Emit an `i32.shl` instruction.
+  void i32_shl() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.shl']));
+    writeByte(0x74);
+  }
+
+  /// Emit an `i32.shr_s` instruction.
+  void i32_shr_s() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.shr_s']));
+    writeByte(0x75);
+  }
+
+  /// Emit an `i32.shr_u` instruction.
+  void i32_shr_u() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.shr_u']));
+    writeByte(0x76);
+  }
+
+  /// Emit an `i32.rotl` instruction.
+  void i32_rotl() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.rotl']));
+    writeByte(0x77);
+  }
+
+  /// Emit an `i32.rotr` instruction.
+  void i32_rotr() {
+    assert(_verifyTypes(const [NumType.i32, NumType.i32], const [NumType.i32],
+        trace: const ['i32.rotr']));
+    writeByte(0x78);
+  }
+
+  /// Emit an `i64.clz` instruction.
+  void i64_clz() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i64],
+        trace: const ['i64.clz']));
+    writeByte(0x79);
+  }
+
+  /// Emit an `i64.ctz` instruction.
+  void i64_ctz() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i64],
+        trace: const ['i64.ctz']));
+    writeByte(0x7A);
+  }
+
+  /// Emit an `i64.popcnt` instruction.
+  void i64_popcnt() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i64],
+        trace: const ['i64.popcnt']));
+    writeByte(0x7B);
+  }
+
+  /// Emit an `i64.add` instruction.
+  void i64_add() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.add']));
+    writeByte(0x7C);
+  }
+
+  /// Emit an `i64.sub` instruction.
+  void i64_sub() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.sub']));
+    writeByte(0x7D);
+  }
+
+  /// Emit an `i64.mul` instruction.
+  void i64_mul() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.mul']));
+    writeByte(0x7E);
+  }
+
+  /// Emit an `i64.div_s` instruction.
+  void i64_div_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.div_s']));
+    writeByte(0x7F);
+  }
+
+  /// Emit an `i64.div_u` instruction.
+  void i64_div_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.div_u']));
+    writeByte(0x80);
+  }
+
+  /// Emit an `i64.rem_s` instruction.
+  void i64_rem_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.rem_s']));
+    writeByte(0x81);
+  }
+
+  /// Emit an `i64.rem_u` instruction.
+  void i64_rem_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.rem_u']));
+    writeByte(0x82);
+  }
+
+  /// Emit an `i64.and` instruction.
+  void i64_and() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.and']));
+    writeByte(0x83);
+  }
+
+  /// Emit an `i64.or` instruction.
+  void i64_or() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.or']));
+    writeByte(0x84);
+  }
+
+  /// Emit an `i64.xor` instruction.
+  void i64_xor() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.xor']));
+    writeByte(0x85);
+  }
+
+  /// Emit an `i64.shl` instruction.
+  void i64_shl() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.shl']));
+    writeByte(0x86);
+  }
+
+  /// Emit an `i64.shr_s` instruction.
+  void i64_shr_s() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.shr_s']));
+    writeByte(0x87);
+  }
+
+  /// Emit an `i64.shr_u` instruction.
+  void i64_shr_u() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.shr_u']));
+    writeByte(0x88);
+  }
+
+  /// Emit an `i64.rotl` instruction.
+  void i64_rotl() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.rotl']));
+    writeByte(0x89);
+  }
+
+  /// Emit an `i64.rotr` instruction.
+  void i64_rotr() {
+    assert(_verifyTypes(const [NumType.i64, NumType.i64], const [NumType.i64],
+        trace: const ['i64.rotr']));
+    writeByte(0x8A);
+  }
+
+  /// Emit an `f32.abs` instruction.
+  void f32_abs() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.abs']));
+    writeByte(0x8B);
+  }
+
+  /// Emit an `f32.neg` instruction.
+  void f32_neg() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.neg']));
+    writeByte(0x8C);
+  }
+
+  /// Emit an `f32.ceil` instruction.
+  void f32_ceil() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.ceil']));
+    writeByte(0x8D);
+  }
+
+  /// Emit an `f32.floor` instruction.
+  void f32_floor() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.floor']));
+    writeByte(0x8E);
+  }
+
+  /// Emit an `f32.trunc` instruction.
+  void f32_trunc() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.trunc']));
+    writeByte(0x8F);
+  }
+
+  /// Emit an `f32.nearest` instruction.
+  void f32_nearest() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.nearest']));
+    writeByte(0x90);
+  }
+
+  /// Emit an `f32.sqrt` instruction.
+  void f32_sqrt() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f32],
+        trace: const ['f32.sqrt']));
+    writeByte(0x91);
+  }
+
+  /// Emit an `f32.add` instruction.
+  void f32_add() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.add']));
+    writeByte(0x92);
+  }
+
+  /// Emit an `f32.sub` instruction.
+  void f32_sub() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.sub']));
+    writeByte(0x93);
+  }
+
+  /// Emit an `f32.mul` instruction.
+  void f32_mul() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.mul']));
+    writeByte(0x94);
+  }
+
+  /// Emit an `f32.div` instruction.
+  void f32_div() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.div']));
+    writeByte(0x95);
+  }
+
+  /// Emit an `f32.min` instruction.
+  void f32_min() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.min']));
+    writeByte(0x96);
+  }
+
+  /// Emit an `f32.max` instruction.
+  void f32_max() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.max']));
+    writeByte(0x97);
+  }
+
+  /// Emit an `f32.copysign` instruction.
+  void f32_copysign() {
+    assert(_verifyTypes(const [NumType.f32, NumType.f32], const [NumType.f32],
+        trace: const ['f32.copysign']));
+    writeByte(0x98);
+  }
+
+  /// Emit an `f64.abs` instruction.
+  void f64_abs() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.abs']));
+    writeByte(0x99);
+  }
+
+  /// Emit an `f64.neg` instruction.
+  void f64_neg() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.neg']));
+    writeByte(0x9A);
+  }
+
+  /// Emit an `f64.ceil` instruction.
+  void f64_ceil() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.ceil']));
+    writeByte(0x9B);
+  }
+
+  /// Emit an `f64.floor` instruction.
+  void f64_floor() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.floor']));
+    writeByte(0x9C);
+  }
+
+  /// Emit an `f64.trunc` instruction.
+  void f64_trunc() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.trunc']));
+    writeByte(0x9D);
+  }
+
+  /// Emit an `f64.nearest` instruction.
+  void f64_nearest() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.nearest']));
+    writeByte(0x9E);
+  }
+
+  /// Emit an `f64.sqrt` instruction.
+  void f64_sqrt() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f64],
+        trace: const ['f64.sqrt']));
+    writeByte(0x9F);
+  }
+
+  /// Emit an `f64.add` instruction.
+  void f64_add() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.add']));
+    writeByte(0xA0);
+  }
+
+  /// Emit an `f64.sub` instruction.
+  void f64_sub() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.sub']));
+    writeByte(0xA1);
+  }
+
+  /// Emit an `f64.mul` instruction.
+  void f64_mul() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.mul']));
+    writeByte(0xA2);
+  }
+
+  /// Emit an `f64.div` instruction.
+  void f64_div() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.div']));
+    writeByte(0xA3);
+  }
+
+  /// Emit an `f64.min` instruction.
+  void f64_min() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.min']));
+    writeByte(0xA4);
+  }
+
+  /// Emit an `f64.max` instruction.
+  void f64_max() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.max']));
+    writeByte(0xA5);
+  }
+
+  /// Emit an `f64.copysign` instruction.
+  void f64_copysign() {
+    assert(_verifyTypes(const [NumType.f64, NumType.f64], const [NumType.f64],
+        trace: const ['f64.copysign']));
+    writeByte(0xA6);
+  }
+
+  /// Emit an `i32.wrap_i64` instruction.
+  void i32_wrap_i64() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i32],
+        trace: const ['i32.wrap_i64']));
+    writeByte(0xA7);
+  }
+
+  /// Emit an `i32.trunc_f32_s` instruction.
+  void i32_trunc_f32_s() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i32],
+        trace: const ['i32.trunc_f32_s']));
+    writeByte(0xA8);
+  }
+
+  /// Emit an `i32.trunc_f32_u` instruction.
+  void i32_trunc_f32_u() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i32],
+        trace: const ['i32.trunc_f32_u']));
+    writeByte(0xA9);
+  }
+
+  /// Emit an `i32.trunc_f64_s` instruction.
+  void i32_trunc_f64_s() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i32],
+        trace: const ['i32.trunc_f64_s']));
+    writeByte(0xAA);
+  }
+
+  /// Emit an `i32.trunc_f64_u` instruction.
+  void i32_trunc_f64_u() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i32],
+        trace: const ['i32.trunc_f64_u']));
+    writeByte(0xAB);
+  }
+
+  /// Emit an `i64.extend_i32_s` instruction.
+  void i64_extend_i32_s() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: const ['i64.extend_i32_s']));
+    writeByte(0xAC);
+  }
+
+  /// Emit an `i64.extend_i32_u` instruction.
+  void i64_extend_i32_u() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i64],
+        trace: const ['i64.extend_i32_u']));
+    writeByte(0xAD);
+  }
+
+  /// Emit an `i64.trunc_f32_s` instruction.
+  void i64_trunc_f32_s() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i64],
+        trace: const ['i64.trunc_f32_s']));
+    writeByte(0xAE);
+  }
+
+  /// Emit an `i64.trunc_f32_u` instruction.
+  void i64_trunc_f32_u() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i64],
+        trace: const ['i64.trunc_f32_u']));
+    writeByte(0xAF);
+  }
+
+  /// Emit an `i64.trunc_f64_s` instruction.
+  void i64_trunc_f64_s() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i64],
+        trace: const ['i64.trunc_f64_s']));
+    writeByte(0xB0);
+  }
+
+  /// Emit an `i64.trunc_f64_u` instruction.
+  void i64_trunc_f64_u() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i64],
+        trace: const ['i64.trunc_f64_u']));
+    writeByte(0xB1);
+  }
+
+  /// Emit an `f32.convert_i32_s` instruction.
+  void f32_convert_i32_s() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f32],
+        trace: const ['f32.convert_i32_s']));
+    writeByte(0xB2);
+  }
+
+  /// Emit an `f32.convert_i32_u` instruction.
+  void f32_convert_i32_u() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f32],
+        trace: const ['f32.convert_i32_u']));
+    writeByte(0xB3);
+  }
+
+  /// Emit an `f32.convert_i64_s` instruction.
+  void f32_convert_i64_s() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.f32],
+        trace: const ['f32.convert_i64_s']));
+    writeByte(0xB4);
+  }
+
+  /// Emit an `f32.convert_i64_u` instruction.
+  void f32_convert_i64_u() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.f32],
+        trace: const ['f32.convert_i64_u']));
+    writeByte(0xB5);
+  }
+
+  /// Emit an `f32.demote_f64` instruction.
+  void f32_demote_f64() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.f32],
+        trace: const ['f32.demote_f64']));
+    writeByte(0xB6);
+  }
+
+  /// Emit an `f64.convert_i32_s` instruction.
+  void f64_convert_i32_s() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f64],
+        trace: const ['f64.convert_i32_s']));
+    writeByte(0xB7);
+  }
+
+  /// Emit an `f64.convert_i32_u` instruction.
+  void f64_convert_i32_u() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f64],
+        trace: const ['f64.convert_i32_u']));
+    writeByte(0xB8);
+  }
+
+  /// Emit an `f64.convert_i64_s` instruction.
+  void f64_convert_i64_s() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.f64],
+        trace: const ['f64.convert_i64_s']));
+    writeByte(0xB9);
+  }
+
+  /// Emit an `f64.convert_i64_u` instruction.
+  void f64_convert_i64_u() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.f64],
+        trace: const ['f64.convert_i64_u']));
+    writeByte(0xBA);
+  }
+
+  /// Emit an `f64.promote_f32` instruction.
+  void f64_promote_f32() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.f64],
+        trace: const ['f64.promote_f32']));
+    writeByte(0xBB);
+  }
+
+  /// Emit an `i32.reinterpret_f32` instruction.
+  void i32_reinterpret_f32() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i32],
+        trace: const ['i32.reinterpret_f32']));
+    writeByte(0xBC);
+  }
+
+  /// Emit an `i64.reinterpret_f64` instruction.
+  void i64_reinterpret_f64() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i64],
+        trace: const ['i64.reinterpret_f64']));
+    writeByte(0xBD);
+  }
+
+  /// Emit an `f32.reinterpret_i32` instruction.
+  void f32_reinterpret_i32() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.f32],
+        trace: const ['f32.reinterpret_i32']));
+    writeByte(0xBE);
+  }
+
+  /// Emit an `f64.reinterpret_i64` instruction.
+  void f64_reinterpret_i64() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.f64],
+        trace: const ['f64.reinterpret_i64']));
+    writeByte(0xBF);
+  }
+
+  /// Emit an `i32.extend8_s` instruction.
+  void i32_extend8_s() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: const ['i32.extend8_s']));
+    writeByte(0xC0);
+  }
+
+  /// Emit an `i32.extend16_s` instruction.
+  void i32_extend16_s() {
+    assert(_verifyTypes(const [NumType.i32], const [NumType.i32],
+        trace: const ['i32.extend16_s']));
+    writeByte(0xC1);
+  }
+
+  /// Emit an `i64.extend8_s` instruction.
+  void i64_extend8_s() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i64],
+        trace: const ['i64.extend8_s']));
+    writeByte(0xC2);
+  }
+
+  /// Emit an `i64.extend16_s` instruction.
+  void i64_extend16_s() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i64],
+        trace: const ['i64.extend16_s']));
+    writeByte(0xC3);
+  }
+
+  /// Emit an `i64.extend32_s` instruction.
+  void i64_extend32_s() {
+    assert(_verifyTypes(const [NumType.i64], const [NumType.i64],
+        trace: const ['i64.extend32_s']));
+    writeByte(0xC4);
+  }
+
+  /// Emit an `i32.trunc_sat_f32_s` instruction.
+  void i32_trunc_sat_f32_s() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i32],
+        trace: const ['i32.trunc_sat_f32_s']));
+    writeBytes(const [0xFC, 0x00]);
+  }
+
+  /// Emit an `i32.trunc_sat_f32_u` instruction.
+  void i32_trunc_sat_f32_u() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i32],
+        trace: const ['i32.trunc_sat_f32_u']));
+    writeBytes(const [0xFC, 0x01]);
+  }
+
+  /// Emit an `i32.trunc_sat_f64_s` instruction.
+  void i32_trunc_sat_f64_s() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i32],
+        trace: const ['i32.trunc_sat_f64_s']));
+    writeBytes(const [0xFC, 0x02]);
+  }
+
+  /// Emit an `i32.trunc_sat_f64_u` instruction.
+  void i32_trunc_sat_f64_u() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i32],
+        trace: const ['i32.trunc_sat_f64_u']));
+    writeBytes(const [0xFC, 0x03]);
+  }
+
+  /// Emit an `i64.trunc_sat_f32_s` instruction.
+  void i64_trunc_sat_f32_s() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i64],
+        trace: const ['i64.trunc_sat_f32_s']));
+    writeBytes(const [0xFC, 0x04]);
+  }
+
+  /// Emit an `i64.trunc_sat_f32_u` instruction.
+  void i64_trunc_sat_f32_u() {
+    assert(_verifyTypes(const [NumType.f32], const [NumType.i64],
+        trace: const ['i64.trunc_sat_f32_u']));
+    writeBytes(const [0xFC, 0x05]);
+  }
+
+  /// Emit an `i64.trunc_sat_f64_s` instruction.
+  void i64_trunc_sat_f64_s() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i64],
+        trace: const ['i64.trunc_sat_f64_s']));
+    writeBytes(const [0xFC, 0x06]);
+  }
+
+  /// Emit an `i64.trunc_sat_f64_u` instruction.
+  void i64_trunc_sat_f64_u() {
+    assert(_verifyTypes(const [NumType.f64], const [NumType.i64],
+        trace: const ['i64.trunc_sat_f64_u']));
+    writeBytes(const [0xFC, 0x07]);
+  }
+}
diff --git a/pkg/wasm_builder/lib/src/module.dart b/pkg/wasm_builder/lib/src/module.dart
new file mode 100644
index 0000000..e015acf
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/module.dart
@@ -0,0 +1,861 @@
+// 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 'instructions.dart';
+import 'serialize.dart';
+import 'types.dart';
+
+/// A Wasm module.
+///
+/// Serves as a builder for building new modules.
+class Module with SerializerMixin {
+  final List<int>? watchPoints;
+
+  final Map<_FunctionTypeKey, FunctionType> functionTypeMap = {};
+
+  final List<DefType> defTypes = [];
+  final List<BaseFunction> functions = [];
+  final List<Table> tables = [];
+  final List<Memory> memories = [];
+  final List<Tag> tags = [];
+  final List<DataSegment> dataSegments = [];
+  final List<Global> globals = [];
+  final List<Export> exports = [];
+  BaseFunction? startFunction = null;
+
+  bool anyFunctionsDefined = false;
+  bool anyGlobalsDefined = false;
+  bool dataReferencedFromGlobalInitializer = false;
+
+  int functionNameCount = 0;
+
+  /// Create a new, initially empty, module.
+  ///
+  /// The [watchPoints] is a list of byte offsets within the final module of
+  /// bytes to watch. When the module is serialized, the stack traces leading to
+  /// the production of all watched bytes are printed. This can be used to debug
+  /// runtime errors happening at specific offsets within the module.
+  Module({this.watchPoints}) {
+    if (watchPoints != null) {
+      SerializerMixin.traceEnabled = true;
+    }
+  }
+
+  /// All module imports (functions and globals).
+  Iterable<Import> get imports =>
+      functions.whereType<Import>().followedBy(globals.whereType<Import>());
+
+  /// All functions defined in the module.
+  Iterable<DefinedFunction> get definedFunctions =>
+      functions.whereType<DefinedFunction>();
+
+  /// Add a new function type to the module.
+  ///
+  /// All function types are canonicalized, such that identical types become
+  /// the same type definition in the module, assuming nominal type identity
+  /// of all inputs and outputs.
+  ///
+  /// Inputs and outputs can't be changed after the function type is created.
+  /// This means that recursive function types (without any non-function types
+  /// on the recursion path) are not supported.
+  FunctionType addFunctionType(
+      Iterable<ValueType> inputs, Iterable<ValueType> outputs,
+      {HeapType? superType}) {
+    final List<ValueType> inputList = List.unmodifiable(inputs);
+    final List<ValueType> outputList = List.unmodifiable(outputs);
+    final _FunctionTypeKey key = _FunctionTypeKey(inputList, outputList);
+    return functionTypeMap.putIfAbsent(key, () {
+      final type = FunctionType(inputList, outputList, superType: superType)
+        ..index = defTypes.length;
+      defTypes.add(type);
+      return type;
+    });
+  }
+
+  /// Add a new struct type to the module.
+  ///
+  /// Fields can be added later, by adding to the [fields] list. This enables
+  /// struct types to be recursive.
+  StructType addStructType(String name,
+      {Iterable<FieldType>? fields, HeapType? superType}) {
+    final type = StructType(name, fields: fields, superType: superType)
+      ..index = defTypes.length;
+    defTypes.add(type);
+    return type;
+  }
+
+  /// Add a new array type to the module.
+  ///
+  /// The element type can be specified later. This enables array types to be
+  /// recursive.
+  ArrayType addArrayType(String name,
+      {FieldType? elementType, HeapType? superType}) {
+    final type = ArrayType(name, elementType: elementType, superType: superType)
+      ..index = defTypes.length;
+    defTypes.add(type);
+    return type;
+  }
+
+  /// Add a new function to the module with the given function type.
+  ///
+  /// The [DefinedFunction.body] must be completed (including the terminating
+  /// `end`) before the module can be serialized.
+  DefinedFunction addFunction(FunctionType type, [String? name]) {
+    anyFunctionsDefined = true;
+    if (name != null) functionNameCount++;
+    final function = DefinedFunction(this, functions.length, type, name);
+    functions.add(function);
+    return function;
+  }
+
+  /// Add a new table to the module.
+  Table addTable(int minSize, [int? maxSize]) {
+    final table = Table(tables.length, minSize, maxSize);
+    tables.add(table);
+    return table;
+  }
+
+  /// Add a new memory to the module.
+  Memory addMemory(int minSize, [int? maxSize]) {
+    final memory = Memory(memories.length, minSize, maxSize);
+    memories.add(memory);
+    return memory;
+  }
+
+  /// Add a new tag to the module.
+  Tag addTag(FunctionType type) {
+    final tag = Tag(tags.length, type);
+    tags.add(tag);
+    return tag;
+  }
+
+  /// Add a new data segment to the module.
+  ///
+  /// Either [memory] and [offset] must be both specified or both omitted. If
+  /// they are specified, the segment becomes an *active* segment, otherwise it
+  /// becomes a *passive* segment.
+  ///
+  /// If [initialContent] is specified, it defines the initial content of the
+  /// segment. The content can be extended later.
+  DataSegment addDataSegment(
+      [Uint8List? initialContent, Memory? memory, int? offset]) {
+    initialContent ??= Uint8List(0);
+    assert((memory != null) == (offset != null));
+    assert(memory == null ||
+        offset! >= 0 && offset + initialContent.length <= memory.minSize);
+    final DataSegment data =
+        DataSegment(dataSegments.length, initialContent, memory, offset);
+    dataSegments.add(data);
+    return data;
+  }
+
+  /// Add a global variable to the module.
+  ///
+  /// The [DefinedGlobal.initializer] must be completed (including the
+  /// terminating `end`) before the module can be serialized.
+  DefinedGlobal addGlobal(GlobalType type) {
+    anyGlobalsDefined = true;
+    final global = DefinedGlobal(this, globals.length, type);
+    globals.add(global);
+    return global;
+  }
+
+  /// Import a function into the module.
+  ///
+  /// All imported functions must be specified before any functions are declared
+  /// using [Module.addFunction].
+  ImportedFunction importFunction(String module, String name, FunctionType type,
+      [String? functionName]) {
+    if (anyFunctionsDefined) {
+      throw "All function imports must be specified before any definitions.";
+    }
+    if (functionName != null) functionNameCount++;
+    final function =
+        ImportedFunction(module, name, functions.length, type, functionName);
+    functions.add(function);
+    return function;
+  }
+
+  /// Import a global variable into the module.
+  ///
+  /// All imported globals must be specified before any globals are declared
+  /// using [Module.addGlobal].
+  ImportedGlobal importGlobal(String module, String name, GlobalType type) {
+    if (anyGlobalsDefined) {
+      throw "All global imports must be specified before any definitions.";
+    }
+    final global = ImportedGlobal(module, name, functions.length, type);
+    globals.add(global);
+    return global;
+  }
+
+  void _addExport(Export export) {
+    assert(!exports.any((e) => e.name == export.name), export.name);
+    exports.add(export);
+  }
+
+  /// Export a function from the module.
+  ///
+  /// All exports must have unique names.
+  void exportFunction(String name, BaseFunction function) {
+    function.exportedName = name;
+    _addExport(FunctionExport(name, function));
+  }
+
+  /// Export a global variable from the module.
+  ///
+  /// All exports must have unique names.
+  void exportGlobal(String name, Global global) {
+    exports.add(GlobalExport(name, global));
+  }
+
+  /// Serialize the module to its binary representation.
+  Uint8List encode({bool emitNameSection: true}) {
+    // Wasm module preamble: magic number, version 1.
+    writeBytes(const [0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00, 0x00]);
+    TypeSection(this).serialize(this);
+    ImportSection(this).serialize(this);
+    FunctionSection(this).serialize(this);
+    TableSection(this).serialize(this);
+    MemorySection(this).serialize(this);
+    TagSection(this).serialize(this);
+    if (dataReferencedFromGlobalInitializer) {
+      DataCountSection(this).serialize(this);
+    }
+    GlobalSection(this).serialize(this);
+    ExportSection(this).serialize(this);
+    StartSection(this).serialize(this);
+    ElementSection(this).serialize(this);
+    if (!dataReferencedFromGlobalInitializer) {
+      DataCountSection(this).serialize(this);
+    }
+    CodeSection(this).serialize(this);
+    DataSection(this).serialize(this);
+    if (emitNameSection) {
+      NameSection(this).serialize(this);
+    }
+    return data;
+  }
+}
+
+class _FunctionTypeKey {
+  final List<ValueType> inputs;
+  final List<ValueType> outputs;
+
+  _FunctionTypeKey(this.inputs, this.outputs);
+
+  @override
+  bool operator ==(Object other) {
+    if (other is! _FunctionTypeKey) return false;
+    if (inputs.length != other.inputs.length) return false;
+    if (outputs.length != other.outputs.length) return false;
+    for (int i = 0; i < inputs.length; i++) {
+      if (inputs[i] != other.inputs[i]) return false;
+    }
+    for (int i = 0; i < outputs.length; i++) {
+      if (outputs[i] != other.outputs[i]) return false;
+    }
+    return true;
+  }
+
+  @override
+  int get hashCode {
+    int inputHash = 13;
+    for (var input in inputs) {
+      inputHash = inputHash * 17 + input.hashCode;
+    }
+    int outputHash = 23;
+    for (var output in outputs) {
+      outputHash = outputHash * 29 + output.hashCode;
+    }
+    return (inputHash * 2 + 1) * (outputHash * 2 + 1);
+  }
+}
+
+/// An (imported or defined) Wasm function.
+abstract class BaseFunction {
+  final int index;
+  final FunctionType type;
+  final String? functionName;
+  String? exportedName;
+
+  BaseFunction(this.index, this.type, this.functionName);
+}
+
+/// A function defined in the module.
+class DefinedFunction extends BaseFunction
+    with SerializerMixin
+    implements Serializable {
+  /// All local variables defined in the function, including its inputs.
+  final List<Local> locals = [];
+
+  /// The body of the function.
+  late final Instructions body;
+
+  DefinedFunction(Module module, int index, FunctionType type,
+      [String? functionName])
+      : super(index, type, functionName) {
+    for (ValueType paramType in type.inputs) {
+      addLocal(paramType);
+    }
+    body = Instructions(module, type.outputs, locals: locals);
+  }
+
+  /// Add a local variable to the function.
+  Local addLocal(ValueType type) {
+    Local local = Local(locals.length, type);
+    locals.add(local);
+    return local;
+  }
+
+  @override
+  void serialize(Serializer s) {
+    // Serialize locals internally first in order to compute the total size of
+    // the serialized data.
+    int paramCount = type.inputs.length;
+    int entries = 0;
+    for (int i = paramCount + 1; i <= locals.length; i++) {
+      if (i == locals.length || locals[i - 1].type != locals[i].type) entries++;
+    }
+    writeUnsigned(entries);
+    int start = paramCount;
+    for (int i = paramCount + 1; i <= locals.length; i++) {
+      if (i == locals.length || locals[i - 1].type != locals[i].type) {
+        writeUnsigned(i - start);
+        write(locals[i - 1].type);
+        start = i;
+      }
+    }
+
+    // Bundle locals and body
+    assert(body.isComplete);
+    s.writeUnsigned(data.length + body.data.length);
+    s.writeData(this);
+    s.writeData(body);
+  }
+
+  @override
+  String toString() => exportedName ?? "#$index";
+}
+
+/// A local variable defined in a function.
+class Local {
+  final int index;
+  final ValueType type;
+
+  Local(this.index, this.type);
+
+  @override
+  String toString() => "$index";
+}
+
+/// A table in a module.
+class Table implements Serializable {
+  final int index;
+  final int minSize;
+  final int? maxSize;
+  final List<BaseFunction?> elements;
+
+  Table(this.index, this.minSize, this.maxSize)
+      : elements = List.filled(minSize, null);
+
+  void setElement(int index, BaseFunction function) {
+    elements[index] = function;
+  }
+
+  @override
+  void serialize(Serializer s) {
+    s.writeByte(0x70); // funcref
+    if (maxSize == null) {
+      s.writeByte(0x00);
+      s.writeUnsigned(minSize);
+    } else {
+      s.writeByte(0x01);
+      s.writeUnsigned(minSize);
+      s.writeUnsigned(maxSize!);
+    }
+  }
+}
+
+/// A memory in a module.
+class Memory implements Serializable {
+  final int index;
+  final int minSize;
+  final int? maxSize;
+
+  Memory(this.index, this.minSize, [this.maxSize]);
+
+  @override
+  void serialize(Serializer s) {
+    if (maxSize == null) {
+      s.writeByte(0x00);
+      s.writeUnsigned(minSize);
+    } else {
+      s.writeByte(0x01);
+      s.writeUnsigned(minSize);
+      s.writeUnsigned(maxSize!);
+    }
+  }
+}
+
+/// A tag in a module.
+class Tag implements Serializable {
+  final int index;
+  final FunctionType type;
+
+  Tag(this.index, this.type);
+
+  @override
+  void serialize(Serializer s) {
+    // 0 byte for exception.
+    s.writeByte(0x00);
+    s.write(type);
+  }
+
+  String toString() => "#$index";
+}
+
+/// A data segment in a module.
+class DataSegment implements Serializable {
+  final int index;
+  final BytesBuilder content;
+  final Memory? memory;
+  final int? offset;
+
+  DataSegment(this.index, Uint8List initialContent, this.memory, this.offset)
+      : content = BytesBuilder()..add(initialContent);
+
+  bool get isActive => memory != null;
+  bool get isPassive => memory == null;
+
+  int get length => content.length;
+
+  /// Append content to the data segment.
+  void append(Uint8List data) {
+    content.add(data);
+    assert(isPassive ||
+        offset! >= 0 && offset! + content.length <= memory!.minSize);
+  }
+
+  @override
+  void serialize(Serializer s) {
+    if (memory != null) {
+      // Active segment
+      if (memory!.index == 0) {
+        s.writeByte(0x00);
+      } else {
+        s.writeByte(0x02);
+        s.writeUnsigned(memory!.index);
+      }
+      s.writeByte(0x41); // i32.const
+      s.writeSigned(offset!);
+      s.writeByte(0x0B); // end
+    } else {
+      // Passive segment
+      s.writeByte(0x01);
+    }
+    s.writeUnsigned(content.length);
+    s.writeBytes(content.toBytes());
+  }
+}
+
+/// An (imported or defined) global variable in a module.
+abstract class Global {
+  final int index;
+  final GlobalType type;
+
+  Global(this.index, this.type);
+
+  @override
+  String toString() => "$index";
+}
+
+/// A global variable defined in the module.
+class DefinedGlobal extends Global implements Serializable {
+  final Instructions initializer;
+
+  DefinedGlobal(Module module, int index, GlobalType type)
+      : initializer =
+            Instructions(module, [type.type], isGlobalInitializer: true),
+        super(index, type);
+
+  @override
+  void serialize(Serializer s) {
+    assert(initializer.isComplete);
+    s.write(type);
+    s.writeData(initializer);
+  }
+}
+
+/// Any import (function or global).
+abstract class Import implements Serializable {
+  String get module;
+  String get name;
+}
+
+/// An imported function.
+class ImportedFunction extends BaseFunction implements Import {
+  final String module;
+  final String name;
+
+  ImportedFunction(this.module, this.name, int index, FunctionType type,
+      [String? functionName])
+      : super(index, type, functionName);
+
+  @override
+  void serialize(Serializer s) {
+    s.writeName(module);
+    s.writeName(name);
+    s.writeByte(0x00);
+    s.writeUnsigned(type.index);
+  }
+
+  @override
+  String toString() => "$module.$name";
+}
+
+/// An imported global variable.
+class ImportedGlobal extends Global implements Import {
+  final String module;
+  final String name;
+
+  ImportedGlobal(this.module, this.name, int index, GlobalType type)
+      : super(index, type);
+
+  @override
+  void serialize(Serializer s) {
+    s.writeName(module);
+    s.writeName(name);
+    s.writeByte(0x03);
+    s.write(type);
+  }
+}
+
+abstract class Export implements Serializable {
+  final String name;
+
+  Export(this.name);
+}
+
+class FunctionExport extends Export {
+  final BaseFunction function;
+
+  FunctionExport(String name, this.function) : super(name);
+
+  @override
+  void serialize(Serializer s) {
+    s.writeName(name);
+    s.writeByte(0x00);
+    s.writeUnsigned(function.index);
+  }
+}
+
+class GlobalExport extends Export {
+  final Global global;
+
+  GlobalExport(String name, this.global) : super(name);
+
+  @override
+  void serialize(Serializer s) {
+    s.writeName(name);
+    s.writeByte(0x03);
+    s.writeUnsigned(global.index);
+  }
+}
+
+abstract class Section with SerializerMixin implements Serializable {
+  final Module module;
+
+  Section(this.module);
+
+  void serialize(Serializer s) {
+    if (isNotEmpty) {
+      serializeContents();
+      s.writeByte(id);
+      s.writeUnsigned(data.length);
+      s.writeData(this, module.watchPoints);
+    }
+  }
+
+  int get id;
+
+  bool get isNotEmpty;
+
+  void serializeContents();
+}
+
+class TypeSection extends Section {
+  TypeSection(Module module) : super(module);
+
+  @override
+  int get id => 1;
+
+  @override
+  bool get isNotEmpty => module.defTypes.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeUnsigned(module.defTypes.length);
+    for (DefType defType in module.defTypes) {
+      defType.serializeDefinition(this);
+    }
+  }
+}
+
+class ImportSection extends Section {
+  ImportSection(Module module) : super(module);
+
+  @override
+  int get id => 2;
+
+  @override
+  bool get isNotEmpty => module.imports.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.imports.toList());
+  }
+}
+
+class FunctionSection extends Section {
+  FunctionSection(Module module) : super(module);
+
+  @override
+  int get id => 3;
+
+  @override
+  bool get isNotEmpty => module.definedFunctions.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeUnsigned(module.definedFunctions.length);
+    for (var function in module.definedFunctions) {
+      writeUnsigned(function.type.index);
+    }
+  }
+}
+
+class TableSection extends Section {
+  TableSection(Module module) : super(module);
+
+  @override
+  int get id => 4;
+
+  @override
+  bool get isNotEmpty => module.tables.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.tables);
+  }
+}
+
+class MemorySection extends Section {
+  MemorySection(Module module) : super(module);
+
+  @override
+  int get id => 5;
+
+  @override
+  bool get isNotEmpty => module.memories.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.memories);
+  }
+}
+
+class TagSection extends Section {
+  TagSection(Module module) : super(module);
+
+  @override
+  int get id => 13;
+
+  @override
+  bool get isNotEmpty => module.tags.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.tags);
+  }
+}
+
+class GlobalSection extends Section {
+  GlobalSection(Module module) : super(module);
+
+  @override
+  int get id => 6;
+
+  @override
+  bool get isNotEmpty => module.globals.whereType<DefinedGlobal>().isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.globals.whereType<DefinedGlobal>().toList());
+  }
+}
+
+class ExportSection extends Section {
+  ExportSection(Module module) : super(module);
+
+  @override
+  int get id => 7;
+
+  @override
+  bool get isNotEmpty => module.exports.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.exports);
+  }
+}
+
+class StartSection extends Section {
+  StartSection(Module module) : super(module);
+
+  @override
+  int get id => 8;
+
+  @override
+  bool get isNotEmpty => module.startFunction != null;
+
+  @override
+  void serializeContents() {
+    writeUnsigned(module.startFunction!.index);
+  }
+}
+
+class _Element implements Serializable {
+  final Table table;
+  final int startIndex;
+  final List<BaseFunction> entries = [];
+
+  _Element(this.table, this.startIndex);
+
+  @override
+  void serialize(Serializer s) {
+    s.writeUnsigned(table.index);
+    s.writeByte(0x41); // i32.const
+    s.writeSigned(startIndex);
+    s.writeByte(0x0B); // end
+    s.writeUnsigned(entries.length);
+    for (var entry in entries) {
+      s.writeUnsigned(entry.index);
+    }
+  }
+}
+
+class ElementSection extends Section {
+  ElementSection(Module module) : super(module);
+
+  @override
+  int get id => 9;
+
+  @override
+  bool get isNotEmpty =>
+      module.tables.any((table) => table.elements.any((e) => e != null));
+
+  @override
+  void serializeContents() {
+    // Group nonempty element entries into contiguous stretches and serialize
+    // each stretch as an element.
+    List<_Element> elements = [];
+    for (Table table in module.tables) {
+      _Element? current = null;
+      for (int i = 0; i < table.elements.length; i++) {
+        BaseFunction? function = table.elements[i];
+        if (function != null) {
+          if (current == null) {
+            current = _Element(table, i);
+            elements.add(current);
+          }
+          current.entries.add(function);
+        } else {
+          current = null;
+        }
+      }
+    }
+    writeList(elements);
+  }
+}
+
+class DataCountSection extends Section {
+  DataCountSection(Module module) : super(module);
+
+  @override
+  int get id => 12;
+
+  @override
+  bool get isNotEmpty => module.dataSegments.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeUnsigned(module.dataSegments.length);
+  }
+}
+
+class CodeSection extends Section {
+  CodeSection(Module module) : super(module);
+
+  @override
+  int get id => 10;
+
+  @override
+  bool get isNotEmpty => module.definedFunctions.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.definedFunctions.toList());
+  }
+}
+
+class DataSection extends Section {
+  DataSection(Module module) : super(module);
+
+  @override
+  int get id => 11;
+
+  @override
+  bool get isNotEmpty => module.dataSegments.isNotEmpty;
+
+  @override
+  void serializeContents() {
+    writeList(module.dataSegments);
+  }
+}
+
+abstract class CustomSection extends Section {
+  CustomSection(Module module) : super(module);
+
+  @override
+  int get id => 0;
+}
+
+class NameSection extends CustomSection {
+  NameSection(Module module) : super(module);
+
+  @override
+  bool get isNotEmpty => module.functionNameCount > 0;
+
+  @override
+  void serializeContents() {
+    writeName("name");
+    var functionNameSubsection = _NameSubsection();
+    functionNameSubsection.writeUnsigned(module.functionNameCount);
+    for (int i = 0; i < module.functions.length; i++) {
+      String? functionName = module.functions[i].functionName;
+      if (functionName != null) {
+        functionNameSubsection.writeUnsigned(i);
+        functionNameSubsection.writeName(functionName);
+      }
+    }
+    writeByte(1); // Function names subsection
+    writeUnsigned(functionNameSubsection.data.length);
+    writeData(functionNameSubsection);
+  }
+}
+
+class _NameSubsection with SerializerMixin {}
diff --git a/pkg/wasm_builder/lib/src/serialize.dart b/pkg/wasm_builder/lib/src/serialize.dart
new file mode 100644
index 0000000..007b6e1
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/serialize.dart
@@ -0,0 +1,137 @@
+// 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';
+import 'dart:convert';
+import 'dart:typed_data';
+
+abstract class Serializer {
+  void writeByte(int byte);
+  void writeBytes(List<int> bytes);
+  void writeSigned(int value);
+  void writeUnsigned(int value);
+  void writeF32(double value);
+  void writeF64(double value);
+  void writeName(String name);
+  void write(Serializable object);
+  void writeList(List<Serializable> objects);
+  void writeData(Serializer chunk, [List<int>? watchPoints]);
+
+  Uint8List get data;
+}
+
+abstract class Serializable {
+  void serialize(Serializer s);
+}
+
+mixin SerializerMixin implements Serializer {
+  static bool traceEnabled = false;
+
+  // The prefix of `_data` up to `_index` contains the data serialized so far.
+  Uint8List _data = Uint8List(24);
+  int _index = 0;
+
+  // Stack traces or other serializers attached to byte positions within the
+  // chunk of data produced by this serializer.
+  late final SplayTreeMap<int, Object> _traces = SplayTreeMap();
+
+  void _ensure(int size) {
+    // Ensure space for at least `size` additional bytes.
+    if (_data.length < _index + size) {
+      int newLength = _data.length * 2;
+      while (newLength < _index + size) newLength *= 2;
+      _data = Uint8List(newLength)..setRange(0, _data.length, _data);
+    }
+  }
+
+  void _debugTrace(Object data) {
+    _traces[_index] ??= data;
+  }
+
+  void writeByte(int byte) {
+    if (traceEnabled) _debugTrace(StackTrace.current);
+    assert(byte == byte & 0xFF);
+    _ensure(1);
+    _data[_index++] = byte;
+  }
+
+  void writeBytes(List<int> bytes) {
+    if (traceEnabled) _debugTrace(StackTrace.current);
+    _ensure(bytes.length);
+    _data.setRange(_index, _index += bytes.length, bytes);
+  }
+
+  void writeSigned(int value) {
+    while (value < -0x40 || value >= 0x40) {
+      writeByte((value & 0x7F) | 0x80);
+      value >>= 7;
+    }
+    writeByte(value & 0x7F);
+  }
+
+  void writeUnsigned(int value) {
+    assert(value >= 0);
+    while (value >= 0x80) {
+      writeByte((value & 0x7F) | 0x80);
+      value >>= 7;
+    }
+    writeByte(value);
+  }
+
+  void writeF32(double value) {
+    // Get the binary representation of the F32.
+    List<int> bytes = Float32List.fromList([value]).buffer.asUint8List();
+    assert(bytes.length == 4);
+    if (Endian.host == Endian.big) bytes = bytes.reversed.toList();
+    writeBytes(bytes);
+  }
+
+  void writeF64(double value) {
+    // Get the binary representation of the F64.
+    List<int> bytes = Float64List.fromList([value]).buffer.asUint8List();
+    assert(bytes.length == 8);
+    if (Endian.host == Endian.big) bytes = bytes.reversed.toList();
+    writeBytes(bytes);
+  }
+
+  void writeName(String name) {
+    List<int> bytes = utf8.encode(name);
+    writeUnsigned(bytes.length);
+    writeBytes(bytes);
+  }
+
+  void write(Serializable object) {
+    object.serialize(this);
+  }
+
+  void writeList(List<Serializable> objects) {
+    writeUnsigned(objects.length);
+    for (int i = 0; i < objects.length; i++) write(objects[i]);
+  }
+
+  void writeData(Serializer chunk, [List<int>? watchPoints]) {
+    if (traceEnabled) _debugTrace(chunk);
+    if (watchPoints != null) {
+      for (int watchPoint in watchPoints) {
+        if (_index <= watchPoint && watchPoint < _index + chunk.data.length) {
+          int byteValue = chunk.data[watchPoint - _index];
+          Object trace = this;
+          int offset = watchPoint;
+          while (trace is SerializerMixin) {
+            int keyOffset = trace._traces.containsKey(offset)
+                ? offset
+                : trace._traces.lastKeyBefore(offset)!;
+            trace = trace._traces[keyOffset]!;
+            offset -= keyOffset;
+          }
+          String byte = byteValue.toRadixString(16).padLeft(2, '0');
+          print("Watch $watchPoint: 0x$byte\n$trace");
+        }
+      }
+    }
+    writeBytes(chunk.data);
+  }
+
+  Uint8List get data => Uint8List.sublistView(_data, 0, _index);
+}
diff --git a/pkg/wasm_builder/lib/src/types.dart b/pkg/wasm_builder/lib/src/types.dart
new file mode 100644
index 0000000..ecc8b1e
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/types.dart
@@ -0,0 +1,657 @@
+// 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 'serialize.dart';
+
+// Representations of all Wasm types.
+
+/// A *storage type*.
+abstract class StorageType implements Serializable {
+  /// Returns whether this type is a subtype of the [other] type, i.e. whether
+  /// it can be used as input where [other] is expected.
+  bool isSubtypeOf(StorageType other);
+
+  /// The *unpacked* form of this storage type, i.e. the *value type* to use
+  /// when reading/writing this storage type from/to memory.
+  ValueType get unpacked;
+
+  /// Whether this is a primitive (i.e. not reference) type.
+  bool get isPrimitive;
+
+  /// For primitive types: the size in bytes of a value of this type.
+  int get byteSize;
+}
+
+/// A *value type*.
+abstract class ValueType implements StorageType {
+  const ValueType();
+
+  @override
+  ValueType get unpacked => this;
+
+  @override
+  bool get isPrimitive => false;
+
+  @override
+  int get byteSize => throw "Size of non-primitive type $runtimeType";
+
+  /// Whether this type is nullable. Primitive types are never nullable.
+  bool get nullable => false;
+
+  /// If this exists in both a nullable and non-nullable version, return the
+  /// version with the given nullability.
+  ValueType withNullability(bool nullable) => this;
+
+  /// Whether this type is defaultable. Primitive types are always defaultable.
+  bool get defaultable => true;
+}
+
+enum NumTypeKind { i32, i64, f32, f64, v128 }
+
+/// A *number type* or *vector type*.
+class NumType extends ValueType {
+  final NumTypeKind kind;
+
+  const NumType._(this.kind);
+
+  /// The `i32` type.
+  static const i32 = NumType._(NumTypeKind.i32);
+
+  /// The `i64` type.
+  static const i64 = NumType._(NumTypeKind.i64);
+
+  /// The `f32` type.
+  static const f32 = NumType._(NumTypeKind.f32);
+
+  /// The `f64` type.
+  static const f64 = NumType._(NumTypeKind.f64);
+
+  /// The `v128` type.
+  static const v128 = NumType._(NumTypeKind.v128);
+
+  @override
+  bool isSubtypeOf(StorageType other) => this == other;
+
+  @override
+  bool get isPrimitive => true;
+
+  @override
+  int get byteSize {
+    switch (kind) {
+      case NumTypeKind.i32:
+      case NumTypeKind.f32:
+        return 4;
+      case NumTypeKind.i64:
+      case NumTypeKind.f64:
+        return 8;
+      case NumTypeKind.v128:
+        return 16;
+    }
+  }
+
+  @override
+  void serialize(Serializer s) {
+    switch (kind) {
+      case NumTypeKind.i32:
+        s.writeByte(0x7F);
+        break;
+      case NumTypeKind.i64:
+        s.writeByte(0x7E);
+        break;
+      case NumTypeKind.f32:
+        s.writeByte(0x7D);
+        break;
+      case NumTypeKind.f64:
+        s.writeByte(0x7C);
+        break;
+      case NumTypeKind.v128:
+        s.writeByte(0x7B);
+        break;
+    }
+  }
+
+  @override
+  String toString() {
+    switch (kind) {
+      case NumTypeKind.i32:
+        return "i32";
+      case NumTypeKind.i64:
+        return "i64";
+      case NumTypeKind.f32:
+        return "f32";
+      case NumTypeKind.f64:
+        return "f64";
+      case NumTypeKind.v128:
+        return "v128";
+    }
+  }
+}
+
+/// An RTT (runtime type) type.
+class Rtt extends ValueType {
+  final DefType defType;
+  final int? depth;
+
+  const Rtt(this.defType, [this.depth]);
+
+  @override
+  bool get defaultable => false;
+
+  @override
+  bool isSubtypeOf(StorageType other) =>
+      other is Rtt &&
+      defType == other.defType &&
+      (other.depth == null || depth == other.depth);
+
+  @override
+  void serialize(Serializer s) {
+    if (depth != null) {
+      s.writeByte(0x69);
+      s.writeUnsigned(depth!);
+    } else {
+      s.writeByte(0x68);
+    }
+    s.writeSigned(defType.index);
+  }
+
+  @override
+  String toString() => depth == null ? "rtt $defType" : "rtt $depth $defType";
+
+  @override
+  bool operator ==(Object other) =>
+      other is Rtt && other.defType == defType && other.depth == depth;
+
+  @override
+  int get hashCode => defType.hashCode * (3 + (depth ?? -3) * 2);
+}
+
+/// A *reference type*.
+class RefType extends ValueType {
+  /// The *heap type* of this reference type.
+  final HeapType heapType;
+
+  /// The nullability of this reference type.
+  final bool nullable;
+
+  RefType(this.heapType, {bool? nullable})
+      : this.nullable = nullable ??
+            heapType.nullableByDefault ??
+            (throw "Unspecified nullability");
+
+  const RefType._(this.heapType, this.nullable);
+
+  /// A (possibly nullable) reference to the `any` heap type.
+  const RefType.any({bool nullable = AnyHeapType.defaultNullability})
+      : this._(HeapType.any, nullable);
+
+  /// A (possibly nullable) reference to the `eq` heap type.
+  const RefType.eq({bool nullable = EqHeapType.defaultNullability})
+      : this._(HeapType.eq, nullable);
+
+  /// A (possibly nullable) reference to the `func` heap type.
+  const RefType.func({bool nullable = FuncHeapType.defaultNullability})
+      : this._(HeapType.func, nullable);
+
+  /// A (possibly nullable) reference to the `data` heap type.
+  const RefType.data({bool nullable = DataHeapType.defaultNullability})
+      : this._(HeapType.data, nullable);
+
+  /// A (possibly nullable) reference to the `i31` heap type.
+  const RefType.i31({bool nullable = I31HeapType.defaultNullability})
+      : this._(HeapType.i31, nullable);
+
+  /// A (possibly nullable) reference to the `extern` heap type.
+  const RefType.extern({bool nullable = ExternHeapType.defaultNullability})
+      : this._(HeapType.extern, nullable);
+
+  /// A (possibly nullable) reference to a custom heap type.
+  RefType.def(DefType defType, {required bool nullable})
+      : this(defType, nullable: nullable);
+
+  @override
+  ValueType withNullability(bool nullable) =>
+      nullable == this.nullable ? this : RefType(heapType, nullable: nullable);
+
+  @override
+  bool get defaultable => nullable;
+
+  @override
+  bool isSubtypeOf(StorageType other) {
+    if (other is! RefType) return false;
+    if (nullable && !other.nullable) return false;
+    return heapType.isSubtypeOf(other.heapType);
+  }
+
+  @override
+  void serialize(Serializer s) {
+    if (nullable != heapType.nullableByDefault) {
+      s.writeByte(nullable ? 0x6C : 0x6B);
+    }
+    s.write(heapType);
+  }
+
+  @override
+  String toString() {
+    if (nullable == heapType.nullableByDefault) return "${heapType}ref";
+    return "ref${nullable ? " null " : " "}${heapType}";
+  }
+
+  @override
+  bool operator ==(Object other) =>
+      other is RefType &&
+      other.heapType == heapType &&
+      other.nullable == nullable;
+
+  @override
+  int get hashCode => heapType.hashCode * (nullable ? -1 : 1);
+}
+
+/// A *heap type*.
+abstract class HeapType implements Serializable {
+  const HeapType();
+
+  /// The `any` heap type.
+  static const any = AnyHeapType._();
+
+  /// The `eq` heap type.
+  static const eq = EqHeapType._();
+
+  /// The `func` heap type.
+  static const func = FuncHeapType._();
+
+  /// The `data` heap type.
+  static const data = DataHeapType._();
+
+  /// The `i31` heap type.
+  static const i31 = I31HeapType._();
+
+  /// The `extern` heap type.
+  static const extern = ExternHeapType._();
+
+  /// Whether this heap type is nullable by default, i.e. when written with the
+  /// -`ref` shorthand. A `null` value here means the heap type has no default
+  /// nullability, so the nullability of a reference has to be specified
+  /// explicitly.
+  bool? get nullableByDefault;
+
+  /// Whether this heap type is a declared subtype of the other heap type.
+  bool isSubtypeOf(HeapType other);
+
+  /// Whether this heap type is a structural subtype of the other heap type.
+  bool isStructuralSubtypeOf(HeapType other) => isSubtypeOf(other);
+}
+
+/// The `any` heap type.
+class AnyHeapType extends HeapType {
+  const AnyHeapType._();
+
+  static const defaultNullability = true;
+
+  @override
+  bool? get nullableByDefault => defaultNullability;
+
+  @override
+  bool isSubtypeOf(HeapType other) => other == HeapType.any;
+
+  @override
+  void serialize(Serializer s) => s.writeByte(0x6E);
+
+  @override
+  String toString() => "any";
+}
+
+/// The `eq` heap type.
+class EqHeapType extends HeapType {
+  const EqHeapType._();
+
+  static const defaultNullability = true;
+
+  @override
+  bool? get nullableByDefault => defaultNullability;
+
+  @override
+  bool isSubtypeOf(HeapType other) =>
+      other == HeapType.any || other == HeapType.eq;
+
+  @override
+  void serialize(Serializer s) => s.writeByte(0x6D);
+
+  @override
+  String toString() => "eq";
+}
+
+/// The `func` heap type.
+class FuncHeapType extends HeapType {
+  const FuncHeapType._();
+
+  static const defaultNullability = true;
+
+  @override
+  bool? get nullableByDefault => defaultNullability;
+
+  @override
+  bool isSubtypeOf(HeapType other) =>
+      other == HeapType.any || other == HeapType.func;
+
+  @override
+  void serialize(Serializer s) => s.writeByte(0x70);
+
+  @override
+  String toString() => "func";
+}
+
+/// The `data` heap type.
+class DataHeapType extends HeapType {
+  const DataHeapType._();
+
+  static const defaultNullability = false;
+
+  @override
+  bool? get nullableByDefault => defaultNullability;
+
+  @override
+  bool isSubtypeOf(HeapType other) =>
+      other == HeapType.any || other == HeapType.eq || other == HeapType.data;
+
+  @override
+  void serialize(Serializer s) => s.writeByte(0x67);
+
+  @override
+  String toString() => "data";
+}
+
+/// The `i31` heap type.
+class I31HeapType extends HeapType {
+  const I31HeapType._();
+
+  static const defaultNullability = false;
+
+  @override
+  bool? get nullableByDefault => defaultNullability;
+
+  @override
+  bool isSubtypeOf(HeapType other) =>
+      other == HeapType.any || other == HeapType.eq || other == HeapType.i31;
+
+  @override
+  void serialize(Serializer s) => s.writeByte(0x6A);
+
+  @override
+  String toString() => "i31";
+}
+
+/// The `extern` heap type.
+class ExternHeapType extends HeapType {
+  const ExternHeapType._();
+
+  static const defaultNullability = true;
+
+  @override
+  bool? get nullableByDefault => defaultNullability;
+
+  @override
+  bool isSubtypeOf(HeapType other) =>
+      other == HeapType.any || other == HeapType.extern;
+
+  @override
+  void serialize(Serializer s) => s.writeByte(0x6F);
+
+  @override
+  String toString() => "extern";
+}
+
+/// A custom heap type.
+abstract class DefType extends HeapType {
+  int? _index;
+
+  /// For nominal types: the declared supertype of this heap type.
+  final HeapType? superType;
+
+  /// The length of the supertype chain of this heap type.
+  final int depth;
+
+  DefType({this.superType})
+      : depth = superType is DefType ? superType.depth + 1 : 0;
+
+  int get index => _index ?? (throw "$runtimeType $this not added to module");
+  set index(int i) => _index = i;
+
+  bool get hasSuperType => superType != null;
+
+  @override
+  bool? get nullableByDefault => null;
+
+  @override
+  bool isSubtypeOf(HeapType other) {
+    if (this == other) return true;
+    if (hasSuperType) {
+      return superType!.isSubtypeOf(other);
+    }
+    return isStructuralSubtypeOf(other);
+  }
+
+  @override
+  void serialize(Serializer s) => s.writeSigned(index);
+
+  void serializeDefinition(Serializer s);
+}
+
+/// A custom function type.
+class FunctionType extends DefType {
+  final List<ValueType> inputs;
+  final List<ValueType> outputs;
+
+  FunctionType(this.inputs, this.outputs, {HeapType? superType})
+      : super(superType: superType);
+
+  @override
+  bool isStructuralSubtypeOf(HeapType other) {
+    if (other == HeapType.any || other == HeapType.func) return true;
+    if (other is! FunctionType) return false;
+    if (inputs.length != other.inputs.length) return false;
+    if (outputs.length != other.outputs.length) return false;
+    for (int i = 0; i < inputs.length; i++) {
+      // Inputs are contravariant.
+      if (!other.inputs[i].isSubtypeOf(inputs[i])) return false;
+    }
+    for (int i = 0; i < outputs.length; i++) {
+      // Outputs are covariant.
+      if (!outputs[i].isSubtypeOf(other.outputs[i])) return false;
+    }
+    return true;
+  }
+
+  @override
+  void serializeDefinition(Serializer s) {
+    s.writeByte(hasSuperType ? 0x5D : 0x60);
+    s.writeList(inputs);
+    s.writeList(outputs);
+    if (hasSuperType) {
+      assert(isStructuralSubtypeOf(superType!));
+      s.write(superType!);
+    }
+  }
+
+  @override
+  String toString() => "(${inputs.join(", ")}) -> (${outputs.join(", ")})";
+}
+
+/// A subtype of the `data` heap type, i.e. `struct` or `array`.
+abstract class DataType extends DefType {
+  final String name;
+
+  DataType(this.name, {HeapType? superType}) : super(superType: superType);
+
+  @override
+  String toString() => name;
+}
+
+/// A custom `struct` type.
+class StructType extends DataType {
+  final List<FieldType> fields = [];
+
+  StructType(String name, {Iterable<FieldType>? fields, HeapType? superType})
+      : super(name, superType: superType) {
+    if (fields != null) this.fields.addAll(fields);
+  }
+
+  @override
+  bool isStructuralSubtypeOf(HeapType other) {
+    if (other == HeapType.any ||
+        other == HeapType.eq ||
+        other == HeapType.data) {
+      return true;
+    }
+    if (other is! StructType) return false;
+    if (fields.length < other.fields.length) return false;
+    for (int i = 0; i < other.fields.length; i++) {
+      if (!fields[i].isSubtypeOf(other.fields[i])) return false;
+    }
+    return true;
+  }
+
+  @override
+  void serializeDefinition(Serializer s) {
+    s.writeByte(hasSuperType ? 0x5C : 0x5F);
+    s.writeList(fields);
+    if (hasSuperType) {
+      assert(isStructuralSubtypeOf(superType!));
+      s.write(superType!);
+    }
+  }
+}
+
+/// A custom `array` type.
+class ArrayType extends DataType {
+  late final FieldType elementType;
+
+  ArrayType(String name, {FieldType? elementType, HeapType? superType})
+      : super(name, superType: superType) {
+    if (elementType != null) this.elementType = elementType;
+  }
+
+  @override
+  bool isStructuralSubtypeOf(HeapType other) {
+    if (other == HeapType.any ||
+        other == HeapType.eq ||
+        other == HeapType.data) {
+      return true;
+    }
+    if (other is! ArrayType) return false;
+    return elementType.isSubtypeOf(other.elementType);
+  }
+
+  @override
+  void serializeDefinition(Serializer s) {
+    s.writeByte(hasSuperType ? 0x5B : 0x5E);
+    s.write(elementType);
+    if (hasSuperType) {
+      assert(isStructuralSubtypeOf(superType!));
+      s.write(superType!);
+    }
+  }
+}
+
+class _WithMutability<T extends StorageType> implements Serializable {
+  final T type;
+  final bool mutable;
+
+  _WithMutability(this.type, this.mutable);
+
+  @override
+  void serialize(Serializer s) {
+    s.write(type);
+    s.writeByte(mutable ? 0x01 : 0x00);
+  }
+
+  @override
+  String toString() => "${mutable ? "var " : "const "}$type";
+}
+
+/// A type for a global.
+///
+/// It consists of a type and a mutability.
+class GlobalType extends _WithMutability<ValueType> {
+  GlobalType(ValueType type, {bool mutable = true}) : super(type, mutable);
+}
+
+/// A type for a struct field or an array element.
+///
+/// It consists of a type and a mutability.
+class FieldType extends _WithMutability<StorageType> {
+  FieldType(StorageType type, {bool mutable = true}) : super(type, mutable);
+
+  /// The `i8` storage type as a field type.
+  FieldType.i8({bool mutable: true}) : this(PackedType.i8, mutable: mutable);
+
+  /// The `i16` storage type as a field type.
+  FieldType.i16({bool mutable: true}) : this(PackedType.i16, mutable: mutable);
+
+  bool isSubtypeOf(FieldType other) {
+    if (mutable != other.mutable) return false;
+    if (mutable) {
+      // Mutable fields are invariant.
+      return type == other.type;
+    } else {
+      // Immutable fields are covariant.
+      return type.isSubtypeOf(other.type);
+    }
+  }
+}
+
+enum PackedTypeKind { i8, i16 }
+
+/// A *packed type*, i.e. a storage type that only exists in memory.
+class PackedType implements StorageType {
+  final PackedTypeKind kind;
+
+  const PackedType._(this.kind);
+
+  /// The `i8` storage type.
+  static const i8 = PackedType._(PackedTypeKind.i8);
+
+  /// The `i16` storage type.
+  static const i16 = PackedType._(PackedTypeKind.i16);
+
+  @override
+  ValueType get unpacked => NumType.i32;
+
+  @override
+  bool isSubtypeOf(StorageType other) => this == other;
+
+  @override
+  bool get isPrimitive => true;
+
+  @override
+  int get byteSize {
+    switch (kind) {
+      case PackedTypeKind.i8:
+        return 1;
+      case PackedTypeKind.i16:
+        return 2;
+    }
+  }
+
+  @override
+  void serialize(Serializer s) {
+    switch (kind) {
+      case PackedTypeKind.i8:
+        s.writeByte(0x7A);
+        break;
+      case PackedTypeKind.i16:
+        s.writeByte(0x79);
+        break;
+    }
+  }
+
+  @override
+  String toString() {
+    switch (kind) {
+      case PackedTypeKind.i8:
+        return "i8";
+      case PackedTypeKind.i16:
+        return "i16";
+    }
+  }
+}
diff --git a/pkg/wasm_builder/lib/wasm_builder.dart b/pkg/wasm_builder/lib/wasm_builder.dart
new file mode 100644
index 0000000..7dfeb68
--- /dev/null
+++ b/pkg/wasm_builder/lib/wasm_builder.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.
+
+export 'src/module.dart'
+    show
+        DataSegment,
+        DefinedFunction,
+        DefinedGlobal,
+        BaseFunction,
+        Global,
+        ImportedFunction,
+        ImportedGlobal,
+        Local,
+        Memory,
+        Module,
+        Table,
+        Tag;
+export 'src/types.dart'
+    show
+        ArrayType,
+        DataType,
+        DefType,
+        FieldType,
+        FunctionType,
+        GlobalType,
+        HeapType,
+        NumType,
+        PackedType,
+        RefType,
+        Rtt,
+        StorageType,
+        StructType,
+        ValueType;
+export 'src/instructions.dart' show Instructions, Label, ValidationError;
diff --git a/pkg/wasm_builder/pubspec.yaml b/pkg/wasm_builder/pubspec.yaml
new file mode 100644
index 0000000..af4d545
--- /dev/null
+++ b/pkg/wasm_builder/pubspec.yaml
@@ -0,0 +1,9 @@
+name: wasm_builder
+# This package is not intended for consumption on pub.dev. DO NOT publish.
+publish_to: none
+description: Generate binary Wasm modules
+
+environment:
+  sdk: '>=2.12.0'
+
+dependencies:
diff --git a/runtime/OWNERS b/runtime/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/runtime/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 05a500e..5f2e056 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -658,6 +658,11 @@
   return Dart_PostCObject(port_id, &object);
 }
 
+bool DartUtils::PostString(Dart_Port port_id, const char* value) {
+  Dart_CObject* object = CObject::NewString(value);
+  return Dart_PostCObject(port_id, object);
+}
+
 Dart_Handle DartUtils::GetDartType(const char* library_url,
                                    const char* class_name) {
   return Dart_GetNonNullableType(Dart_LookupLibrary(NewString(library_url)),
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index bbe0a1f..568e70e 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -173,6 +173,7 @@
   static bool PostNull(Dart_Port port_id);
   static bool PostInt32(Dart_Port port_id, int32_t value);
   static bool PostInt64(Dart_Port port_id, int64_t value);
+  static bool PostString(Dart_Port port_id, const char* value);
 
   static Dart_Handle GetDartType(const char* library_url,
                                  const char* class_name);
@@ -580,6 +581,17 @@
   DISALLOW_COPY_AND_ASSIGN(CObjectExternalUint8Array);
 };
 
+/***
+ * This class is intended for internal use by dart:io implementation and
+ * has no connection to dart:ffi Pointer class.
+ *
+ * It represents a pointer to a native resource of a known type.
+ *
+ * The receiving side will only see this pointer as an integer and will not
+ * see the specified finalizer.
+ *
+ * The specified finalizer will only be invoked if the message is not delivered.
+ **/
 class CObjectNativePointer : public CObject {
  public:
   DECLARE_COBJECT_CONSTRUCTORS(NativePointer)
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index b29c8c1..e274351 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -9,6 +9,7 @@
 #include "bin/error_exit.h"
 #include "bin/exe_utils.h"
 #include "bin/file.h"
+#include "bin/lockers.h"
 #include "bin/platform.h"
 #include "bin/utils.h"
 #include "include/dart_tools_api.h"
@@ -65,8 +66,9 @@
       use_incremental_compiler_(false),
       frontend_filename_(nullptr),
       application_kernel_buffer_(nullptr),
-      application_kernel_buffer_size_(0) {
-}
+      application_kernel_buffer_size_(0),
+      kernel_blobs_(&SimpleHashMap::SameStringValue, 4),
+      kernel_blobs_lock_() {}
 
 DFE::~DFE() {
   if (frontend_filename_ != nullptr) {
@@ -77,6 +79,9 @@
   free(application_kernel_buffer_);
   application_kernel_buffer_ = nullptr;
   application_kernel_buffer_size_ = 0;
+
+  kernel_blobs_.Clear(
+      [](void* value) { delete reinterpret_cast<KernelBlob*>(value); });
 }
 
 void DFE::Init() {
@@ -247,14 +252,19 @@
 void DFE::ReadScript(const char* script_uri,
                      uint8_t** kernel_buffer,
                      intptr_t* kernel_buffer_size,
-                     bool decode_uri) const {
+                     bool decode_uri,
+                     std::shared_ptr<uint8_t>* kernel_blob_ptr) {
   int64_t start = Dart_TimelineGetMicros();
   if (!TryReadKernelFile(script_uri, kernel_buffer, kernel_buffer_size,
-                         decode_uri)) {
+                         decode_uri, kernel_blob_ptr)) {
     return;
   }
   if (!Dart_IsKernel(*kernel_buffer, *kernel_buffer_size)) {
-    free(*kernel_buffer);
+    if (kernel_blob_ptr != nullptr && *kernel_blob_ptr) {
+      *kernel_blob_ptr = nullptr;
+    } else {
+      free(*kernel_buffer);
+    }
     *kernel_buffer = nullptr;
     *kernel_buffer_size = -1;
   }
@@ -438,10 +448,21 @@
 bool DFE::TryReadKernelFile(const char* script_uri,
                             uint8_t** kernel_ir,
                             intptr_t* kernel_ir_size,
-                            bool decode_uri) {
+                            bool decode_uri,
+                            std::shared_ptr<uint8_t>* kernel_blob_ptr) {
   *kernel_ir = nullptr;
   *kernel_ir_size = -1;
 
+  if (decode_uri && kernel_blob_ptr != nullptr) {
+    *kernel_blob_ptr = TryFindKernelBlob(script_uri, kernel_ir_size);
+    if (*kernel_blob_ptr) {
+      *kernel_ir = kernel_blob_ptr->get();
+      ASSERT(DartUtils::SniffForMagicNumber(*kernel_ir, *kernel_ir_size) ==
+             DartUtils::kKernelMagicNumber);
+      return true;
+    }
+  }
+
   uint8_t* buffer;
   if (!TryReadFile(script_uri, &buffer, kernel_ir_size, decode_uri)) {
     return false;
@@ -456,5 +477,72 @@
   return TryReadSimpleKernelBuffer(buffer, kernel_ir, kernel_ir_size);
 }
 
+const char* DFE::RegisterKernelBlob(const uint8_t* kernel_buffer,
+                                    intptr_t kernel_buffer_size) {
+  ASSERT(DartUtils::SniffForMagicNumber(kernel_buffer, kernel_buffer_size) ==
+         DartUtils::kKernelMagicNumber);
+  uint8_t* buffer_copy = reinterpret_cast<uint8_t*>(malloc(kernel_buffer_size));
+  if (buffer_copy == nullptr) {
+    return nullptr;
+  }
+  memmove(buffer_copy, kernel_buffer, kernel_buffer_size);
+
+  MutexLocker ml(&kernel_blobs_lock_);
+  ++kernel_blob_counter_;
+  char* uri =
+      Utils::SCreate("dart-kernel-blob://blob%" Pd, kernel_blob_counter_);
+  KernelBlob* blob = new KernelBlob(uri, buffer_copy, kernel_buffer_size);
+
+  const uint32_t hash = SimpleHashMap::StringHash(uri);
+  SimpleHashMap::Entry* entry =
+      kernel_blobs_.Lookup(uri, hash, /*insert=*/true);
+  ASSERT(entry != nullptr);
+  ASSERT(entry->value == nullptr);
+  entry->value = blob;
+
+  return uri;
+}
+
+std::shared_ptr<uint8_t> DFE::TryFindKernelBlob(const char* uri,
+                                                intptr_t* kernel_length) {
+  *kernel_length = -1;
+
+  MutexLocker ml(&kernel_blobs_lock_);
+  if (kernel_blob_counter_ == 0) {
+    return nullptr;
+  }
+
+  // This const_cast is safe as this 'key' is only used to find entry, not add.
+  void* key = const_cast<char*>(uri);
+  const uint32_t hash = SimpleHashMap::StringHash(uri);
+  SimpleHashMap::Entry* entry =
+      kernel_blobs_.Lookup(key, hash, /*insert=*/false);
+  if (entry == nullptr) {
+    return nullptr;
+  }
+
+  KernelBlob* blob = reinterpret_cast<KernelBlob*>(entry->value);
+  *kernel_length = blob->size();
+  return blob->buffer();
+}
+
+void DFE::UnregisterKernelBlob(const char* uri) {
+  MutexLocker ml(&kernel_blobs_lock_);
+
+  // This const_cast is safe as this 'key' is only used to find entry, not add.
+  void* key = const_cast<char*>(uri);
+  const uint32_t hash = SimpleHashMap::StringHash(uri);
+  SimpleHashMap::Entry* entry =
+      kernel_blobs_.Lookup(key, hash, /*insert=*/false);
+  if (entry == nullptr) {
+    return;
+  }
+
+  KernelBlob* blob = reinterpret_cast<KernelBlob*>(entry->value);
+  entry->value = nullptr;
+  kernel_blobs_.Remove(key, hash);
+  delete blob;
+}
+
 }  // namespace bin
 }  // namespace dart
diff --git a/runtime/bin/dfe.h b/runtime/bin/dfe.h
index eb18df6..21700db 100644
--- a/runtime/bin/dfe.h
+++ b/runtime/bin/dfe.h
@@ -7,10 +7,12 @@
 
 #include <memory>
 
+#include "bin/thread.h"
 #include "include/dart_api.h"
 #include "include/dart_native_api.h"
 #include "platform/assert.h"
 #include "platform/globals.h"
+#include "platform/hashmap.h"
 #include "platform/utils.h"
 
 namespace dart {
@@ -102,23 +104,34 @@
 
   // Reads the script kernel file if specified 'script_uri' is a kernel file.
   // Returns an in memory kernel representation of the specified script is a
-  // valid kernel file, false otherwise.
+  // valid kernel file, sets 'kernel_buffer' to nullptr otherwise.
+  //
+  // If 'kernel_blob_ptr' is not nullptr, then this function can also
+  // read kernel blobs. In such case it sets 'kernel_blob_ptr'
+  // to a shared pointer which owns the kernel buffer.
+  // Othwerise, the caller is responsible for free()ing 'kernel_buffer'.
   void ReadScript(const char* script_uri,
                   uint8_t** kernel_buffer,
                   intptr_t* kernel_buffer_size,
-                  bool decode_uri = true) const;
+                  bool decode_uri = true,
+                  std::shared_ptr<uint8_t>* kernel_blob_ptr = nullptr);
 
   bool KernelServiceDillAvailable() const;
 
-  // Tries to read [script_uri] as a Kernel IR file.
-  // Returns `true` if successful and sets [kernel_file] and [kernel_length]
+  // Tries to read 'script_uri' as a Kernel IR file.
+  // Returns `true` if successful and sets 'kernel_buffer' and 'kernel_length'
   // to be the kernel IR contents.
-  // The caller is responsible for free()ing [kernel_file] if `true`
-  // was returned.
-  static bool TryReadKernelFile(const char* script_uri,
-                                uint8_t** kernel_buffer,
-                                intptr_t* kernel_buffer_size,
-                                bool decode_uri = true);
+  //
+  // If 'kernel_blob_ptr' is not nullptr, then this function can also
+  // read kernel blobs. In such case it sets 'kernel_blob_ptr'
+  // to a shared pointer which owns the kernel buffer.
+  // Othwerise, the caller is responsible for free()ing 'kernel_buffer'
+  // if `true` was returned.
+  bool TryReadKernelFile(const char* script_uri,
+                         uint8_t** kernel_buffer,
+                         intptr_t* kernel_buffer_size,
+                         bool decode_uri = true,
+                         std::shared_ptr<uint8_t>* kernel_blob_ptr = nullptr);
 
   // We distinguish between "intent to use Dart frontend" vs "can actually
   // use Dart frontend". The method UseDartFrontend tells us about the
@@ -131,6 +144,22 @@
   void LoadKernelService(const uint8_t** kernel_service_buffer,
                          intptr_t* kernel_service_buffer_size);
 
+  // Registers given kernel blob and returns blob URI which
+  // can be used in TryReadKernelFile later to load the given kernel.
+  // Data from [kernel_buffer] is copied, it doesn't need to stay alive.
+  // Returns NULL if failed to allocate memory.
+  const char* RegisterKernelBlob(const uint8_t* kernel_buffer,
+                                 intptr_t kernel_buffer_size);
+
+  // Looks for kernel blob using the given [uri].
+  // Returns non-null pointer to the kernel blob if successful and
+  // sets [kernel_length].
+  std::shared_ptr<uint8_t> TryFindKernelBlob(const char* uri,
+                                             intptr_t* kernel_length);
+
+  // Unregisters kernel blob with given URI.
+  void UnregisterKernelBlob(const char* uri);
+
  private:
   bool use_dfe_;
   bool use_incremental_compiler_;
@@ -142,11 +171,33 @@
   uint8_t* application_kernel_buffer_;
   intptr_t application_kernel_buffer_size_;
 
+  // Registry of kernel blobs. Maps URI (char *) to KernelBlob.
+  SimpleHashMap kernel_blobs_;
+  intptr_t kernel_blob_counter_ = 0;
+  Mutex kernel_blobs_lock_;
+
   void InitKernelServiceAndPlatformDills();
 
   DISALLOW_COPY_AND_ASSIGN(DFE);
 };
 
+class KernelBlob {
+ public:
+  // Takes ownership over [uri] and [buffer].
+  KernelBlob(char* uri, uint8_t* buffer, intptr_t size)
+      : uri_(uri, std::free), buffer_(buffer, std::free), size_(size) {}
+
+  std::shared_ptr<uint8_t> buffer() { return buffer_; }
+  intptr_t size() const { return size_; }
+
+ private:
+  Utils::CStringUniquePtr uri_;
+  std::shared_ptr<uint8_t> buffer_;
+  const intptr_t size_;
+
+  DISALLOW_COPY_AND_ASSIGN(KernelBlob);
+};
+
 class PathSanitizer {
  public:
   explicit PathSanitizer(const char* path);
diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc
index 3e199239..41d58e8 100644
--- a/runtime/bin/directory_win.cc
+++ b/runtime/bin/directory_win.cc
@@ -508,6 +508,7 @@
   Utf8ToWideScope system_path(prefixed_dir);
   ExistsResult exists = ExistsHelper(system_path.wide());
   if (exists != EXISTS) {
+    SetLastError(ERROR_FILE_NOT_FOUND);
     return false;
   }
   const char* prefixed_new_dir = PrefixLongDirectoryPath(new_path);
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index 17b9404..6eddb5a 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -129,8 +129,8 @@
   V(SecureSocket_Init, 1)                                                      \
   V(SecureSocket_PeerCertificate, 1)                                           \
   V(SecureSocket_RegisterBadCertificateCallback, 2)                            \
+  V(SecureSocket_RegisterKeyLogPort, 2)                                        \
   V(SecureSocket_RegisterHandshakeCompleteCallback, 2)                         \
-  V(SecureSocket_Renegotiate, 4)                                               \
   V(SecurityContext_Allocate, 1)                                               \
   V(SecurityContext_UsePrivateKeyBytes, 3)                                     \
   V(SecurityContext_SetAlpnProtocols, 3)                                       \
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index 045bf33..709fc54 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -83,8 +83,8 @@
   if (tag == Dart_kKernelTag) {
     uint8_t* kernel_buffer = NULL;
     intptr_t kernel_buffer_size = 0;
-    if (!DFE::TryReadKernelFile(url_string, &kernel_buffer,
-                                &kernel_buffer_size)) {
+    if (!dfe.TryReadKernelFile(url_string, &kernel_buffer,
+                               &kernel_buffer_size)) {
       return DartUtils::NewError("'%s' is not a kernel file", url_string);
     }
     result = Dart_NewExternalTypedData(Dart_TypedData_kUint8, kernel_buffer,
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 2e80b0a..52beba4 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -502,7 +502,8 @@
   ASSERT(flags != nullptr);
 
 #if defined(DART_PRECOMPILED_RUNTIME)
-  // AOT: All isolates start from the app snapshot.
+  // AOT: The service isolate is included in any AOT snapshot in non-PRODUCT
+  // mode - so we launch the vm-service from the main app AOT snapshot.
   const uint8_t* isolate_snapshot_data = app_isolate_snapshot_data;
   const uint8_t* isolate_snapshot_instructions =
       app_isolate_snapshot_instructions;
@@ -688,16 +689,36 @@
   int64_t start = Dart_TimelineGetMicros();
   ASSERT(script_uri != NULL);
   uint8_t* kernel_buffer = NULL;
-  std::shared_ptr<uint8_t> parent_kernel_buffer;
+  std::shared_ptr<uint8_t> kernel_buffer_ptr;
   intptr_t kernel_buffer_size = 0;
   AppSnapshot* app_snapshot = NULL;
 
 #if defined(DART_PRECOMPILED_RUNTIME)
-  // AOT: All isolates start from the app snapshot.
+  const uint8_t* isolate_snapshot_data = nullptr;
+  const uint8_t* isolate_snapshot_instructions = nullptr;
+  if (is_main_isolate) {
+    isolate_snapshot_data = app_isolate_snapshot_data;
+    isolate_snapshot_instructions = app_isolate_snapshot_instructions;
+  } else {
+    // AOT: All isolates need to be run from AOT compiled snapshots.
+    const bool kForceLoadElfFromMemory = false;
+    app_snapshot =
+        Snapshot::TryReadAppSnapshot(script_uri, kForceLoadElfFromMemory);
+    if (app_snapshot == nullptr) {
+      *error = Utils::StrDup(
+          "The uri provided to `Isolate.spawnUri()` does not "
+          "contain a valid AOT snapshot.");
+      return nullptr;
+    }
+
+    const uint8_t* ignore_vm_snapshot_data;
+    const uint8_t* ignore_vm_snapshot_instructions;
+    app_snapshot->SetBuffers(
+        &ignore_vm_snapshot_data, &ignore_vm_snapshot_instructions,
+        &isolate_snapshot_data, &isolate_snapshot_instructions);
+  }
+
   bool isolate_run_app_snapshot = true;
-  const uint8_t* isolate_snapshot_data = app_isolate_snapshot_data;
-  const uint8_t* isolate_snapshot_instructions =
-      app_isolate_snapshot_instructions;
   flags->null_safety =
       Dart_DetectNullSafety(nullptr, nullptr, nullptr, isolate_snapshot_data,
                             isolate_snapshot_instructions, nullptr, -1);
@@ -729,13 +750,14 @@
   if (flags->copy_parent_code && callback_data != nullptr) {
     auto parent_isolate_group_data =
         reinterpret_cast<IsolateData*>(callback_data)->isolate_group_data();
-    parent_kernel_buffer = parent_isolate_group_data->kernel_buffer();
-    kernel_buffer = parent_kernel_buffer.get();
+    kernel_buffer_ptr = parent_isolate_group_data->kernel_buffer();
+    kernel_buffer = kernel_buffer_ptr.get();
     kernel_buffer_size = parent_isolate_group_data->kernel_buffer_size();
   }
 
   if (kernel_buffer == NULL && !isolate_run_app_snapshot) {
-    dfe.ReadScript(script_uri, &kernel_buffer, &kernel_buffer_size);
+    dfe.ReadScript(script_uri, &kernel_buffer, &kernel_buffer_size,
+                   /*decode_uri=*/true, &kernel_buffer_ptr);
   }
   PathSanitizer script_uri_sanitizer(script_uri);
   PathSanitizer packages_config_sanitizer(packages_config);
@@ -749,9 +771,9 @@
   auto isolate_group_data = new IsolateGroupData(
       script_uri, packages_config, app_snapshot, isolate_run_app_snapshot);
   if (kernel_buffer != NULL) {
-    if (parent_kernel_buffer) {
+    if (kernel_buffer_ptr) {
       isolate_group_data->SetKernelBufferAlreadyOwned(
-          std::move(parent_kernel_buffer), kernel_buffer_size);
+          std::move(kernel_buffer_ptr), kernel_buffer_size);
     } else {
       isolate_group_data->SetKernelBufferNewlyOwned(kernel_buffer,
                                                     kernel_buffer_size);
@@ -867,6 +889,16 @@
                                           error, &exit_code);
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+static const char* RegisterKernelBlob(const uint8_t* kernel_buffer,
+                                      intptr_t kernel_buffer_size) {
+  return dfe.RegisterKernelBlob(kernel_buffer, kernel_buffer_size);
+}
+static void UnregisterKernelBlob(const char* kernel_blob_uri) {
+  dfe.UnregisterKernelBlob(kernel_blob_uri);
+}
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
 static void OnIsolateShutdown(void* isolate_group_data, void* isolate_data) {
   Dart_EnterScope();
   Dart_Handle sticky_error = Dart_GetStickyError();
@@ -1311,6 +1343,10 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
   init_params.start_kernel_isolate =
       dfe.UseDartFrontend() && dfe.CanUseDartFrontend();
+  if (init_params.start_kernel_isolate) {
+    init_params.register_kernel_blob = RegisterKernelBlob;
+    init_params.unregister_kernel_blob = UnregisterKernelBlob;
+  }
 #else
   init_params.start_kernel_isolate = false;
 #endif
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 58d16b6..994f542 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -373,20 +373,19 @@
   TesterState::argv = dart_argv;
   TesterState::argc = dart_argc;
 
-  error = Dart::Init(
-      dart::bin::vm_snapshot_data, dart::bin::vm_snapshot_instructions,
-      /*create_group=*/CreateIsolateAndSetup,
-      /*initialize_isolate=*/nullptr,
-      /*shutdown_isolate=*/nullptr,
-      /*cleanup_isolate=*/nullptr,
-      /*cleanup_group=*/CleanupIsolateGroup,
-      /*thread_start=*/nullptr,
-      /*thread_exit=*/nullptr, dart::bin::DartUtils::OpenFile,
-      dart::bin::DartUtils::ReadFile, dart::bin::DartUtils::WriteFile,
-      dart::bin::DartUtils::CloseFile, /*entropy_source=*/nullptr,
-      /*get_service_assets=*/nullptr, start_kernel_isolate,
-      /*code_observer=*/nullptr, /*post_task=*/nullptr,
-      /*post_task_data*/ nullptr);
+  Dart_InitializeParams init_params;
+  memset(&init_params, 0, sizeof(init_params));
+  init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
+  init_params.vm_snapshot_data = dart::bin::vm_snapshot_data;
+  init_params.vm_snapshot_instructions = dart::bin::vm_snapshot_instructions;
+  init_params.create_group = CreateIsolateAndSetup;
+  init_params.cleanup_group = CleanupIsolateGroup;
+  init_params.file_open = dart::bin::DartUtils::OpenFile;
+  init_params.file_read = dart::bin::DartUtils::ReadFile;
+  init_params.file_write = dart::bin::DartUtils::WriteFile;
+  init_params.file_close = dart::bin::DartUtils::CloseFile;
+  init_params.start_kernel_isolate = start_kernel_isolate;
+  error = Dart::Init(&init_params);
   if (error != nullptr) {
     Syslog::PrintErr("Failed to initialize VM: %s\n", error);
     free(error);
diff --git a/runtime/bin/secure_socket_filter.cc b/runtime/bin/secure_socket_filter.cc
index efaa417..9e1492e 100644
--- a/runtime/bin/secure_socket_filter.cc
+++ b/runtime/bin/secure_socket_filter.cc
@@ -175,17 +175,6 @@
   GetFilter(args)->GetSelectedProtocol(args);
 }
 
-void FUNCTION_NAME(SecureSocket_Renegotiate)(Dart_NativeArguments args) {
-  bool use_session_cache =
-      DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 1));
-  bool request_client_certificate =
-      DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 2));
-  bool require_client_certificate =
-      DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3));
-  GetFilter(args)->Renegotiate(use_session_cache, request_client_certificate,
-                               require_client_certificate);
-}
-
 void FUNCTION_NAME(SecureSocket_RegisterHandshakeCompleteCallback)(
     Dart_NativeArguments args) {
   Dart_Handle handshake_complete =
@@ -207,6 +196,15 @@
   GetFilter(args)->RegisterBadCertificateCallback(callback);
 }
 
+void FUNCTION_NAME(SecureSocket_RegisterKeyLogPort)(Dart_NativeArguments args) {
+  Dart_Handle port = ThrowIfError(Dart_GetNativeArgument(args, 1));
+  ASSERT(!Dart_IsNull(port));
+
+  Dart_Port port_id;
+  ThrowIfError(Dart_SendPortGetId(port, &port_id));
+  GetFilter(args)->RegisterKeyLogPort(port_id);
+}
+
 void FUNCTION_NAME(SecureSocket_PeerCertificate)(Dart_NativeArguments args) {
   Dart_Handle cert = ThrowIfError(GetFilter(args)->PeerCertificate());
   Dart_SetReturnValue(args, cert);
@@ -465,6 +463,10 @@
   return X509Helper::WrappedX509Certificate(ca);
 }
 
+void SSLFilter::RegisterKeyLogPort(Dart_Port key_log_port) {
+  key_log_port_ = key_log_port;
+}
+
 void SSLFilter::InitializeLibrary() {
   MutexLocker locker(mutex_);
   if (!library_initialized_) {
@@ -595,10 +597,14 @@
     return SSL_ERROR_WANT_CERTIFICATE_VERIFY;
   }
   if (callback_error != NULL) {
-    // The SSL_do_handshake will try performing a handshake and might call
-    // a CertificateCallback. If the certificate validation
-    // failed the 'callback_error" will be set by the certificateCallback
-    // logic and we propagate the error"
+    // The SSL_do_handshake will try performing a handshake and might call one
+    // or both of:
+    //   SSLCertContext::KeyLogCallback
+    //   SSLCertContext::CertificateCallback
+    //
+    // If either of those functions fail, and this.callback_error has not
+    // already been set, then they will set this.callback_error to an error
+    // handle i.e. only the first error will be captured and propogated.
     Dart_PropagateError(callback_error);
   }
   if (SSL_want_write(ssl_) || SSL_want_read(ssl_)) {
@@ -645,17 +651,6 @@
   }
 }
 
-void SSLFilter::Renegotiate(bool use_session_cache,
-                            bool request_client_certificate,
-                            bool require_client_certificate) {
-  // The SSL_REQUIRE_CERTIFICATE option only takes effect if the
-  // SSL_REQUEST_CERTIFICATE option is also set, so set it.
-  request_client_certificate =
-      request_client_certificate || require_client_certificate;
-  // TODO(24070, 24069): Implement setting the client certificate parameters,
-  //   and triggering rehandshake.
-}
-
 void SSLFilter::FreeResources() {
   if (ssl_ != NULL) {
     SSL_free(ssl_);
@@ -728,6 +723,13 @@
       if (SSL_LOG_DATA) {
         Syslog::Print("SSL_read returned error %d\n", error);
       }
+      switch (error) {
+        case SSL_ERROR_SYSCALL:
+        case SSL_ERROR_SSL:
+          return -1;
+        default:
+          break;
+      }
       bytes_processed = 0;
     }
   }
diff --git a/runtime/bin/secure_socket_filter.h b/runtime/bin/secure_socket_filter.h
index 826e28f..fe3b778 100644
--- a/runtime/bin/secure_socket_filter.h
+++ b/runtime/bin/secure_socket_filter.h
@@ -85,11 +85,10 @@
   void MarkAsTrusted(Dart_NativeArguments args);
   int Handshake(Dart_Port reply_port);
   void GetSelectedProtocol(Dart_NativeArguments args);
-  void Renegotiate(bool use_session_cache,
-                   bool request_client_certificate,
-                   bool require_client_certificate);
   void RegisterHandshakeCompleteCallback(Dart_Handle handshake_complete);
   void RegisterBadCertificateCallback(Dart_Handle callback);
+  void RegisterKeyLogPort(Dart_Port key_log_port);
+  Dart_Port key_log_port() { return key_log_port_; }
   Dart_Handle bad_certificate_callback() {
     return Dart_HandleFromPersistent(bad_certificate_callback_);
   }
@@ -145,6 +144,7 @@
 
   Dart_Port reply_port_ = ILLEGAL_PORT;
   Dart_Port trust_evaluate_reply_port_ = ILLEGAL_PORT;
+  Dart_Port key_log_port_ = ILLEGAL_PORT;
 
   static bool IsBufferEncrypted(int i) {
     return static_cast<BufferIndex>(i) >= kFirstEncrypted;
diff --git a/runtime/bin/secure_socket_unsupported.cc b/runtime/bin/secure_socket_unsupported.cc
index 8d2b2fc..f64203d 100644
--- a/runtime/bin/secure_socket_unsupported.cc
+++ b/runtime/bin/secure_socket_unsupported.cc
@@ -65,6 +65,11 @@
       "Secure Sockets unsupported on this platform"));
 }
 
+void FUNCTION_NAME(SecureSocket_RegisterKeyLogPort)(Dart_NativeArguments args) {
+  Dart_ThrowException(DartUtils::NewDartArgumentError(
+      "Secure Sockets unsupported on this platform"));
+}
+
 void FUNCTION_NAME(SecureSocket_ProcessBuffer)(Dart_NativeArguments args) {
   Dart_ThrowException(DartUtils::NewDartArgumentError(
       "Secure Sockets unsupported on this platform"));
@@ -85,11 +90,6 @@
       "Secure Sockets unsupported on this platform"));
 }
 
-void FUNCTION_NAME(SecureSocket_Renegotiate)(Dart_NativeArguments args) {
-  Dart_ThrowException(DartUtils::NewDartArgumentError(
-      "Secure Sockets unsupported on this platform"));
-}
-
 void FUNCTION_NAME(SecureSocket_NewServicePort)(Dart_NativeArguments args) {
   Dart_ThrowException(DartUtils::NewDartArgumentError(
       "Secure Sockets unsupported on this platform"));
diff --git a/runtime/bin/security_context.cc b/runtime/bin/security_context.cc
index 77e7ad1..8ccc6a3 100644
--- a/runtime/bin/security_context.cc
+++ b/runtime/bin/security_context.cc
@@ -74,13 +74,24 @@
         "BadCertificateCallback returned a value that was not a boolean",
         Dart_Null()));
   }
-  if (Dart_IsError(result)) {
+  // See SSLFilter::Handshake for the semantics of filter->callback_error.
+  if (Dart_IsError(result) && filter->callback_error == nullptr) {
     filter->callback_error = result;
     return 0;
   }
   return static_cast<int>(DartUtils::GetBooleanValue(result));
 }
 
+void SSLCertContext::KeyLogCallback(const SSL* ssl, const char* line) {
+  SSLFilter* filter = static_cast<SSLFilter*>(
+      SSL_get_ex_data(ssl, SSLFilter::filter_ssl_index));
+
+  Dart_Port port = filter->key_log_port();
+  if (port != ILLEGAL_PORT) {
+    DartUtils::PostString(port, line);
+  }
+}
+
 SSLCertContext* SSLCertContext::GetSecurityContext(Dart_NativeArguments args) {
   SSLCertContext* context;
   Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
@@ -807,6 +818,7 @@
   SSLFilter::InitializeLibrary();
   SSL_CTX* ctx = SSL_CTX_new(TLS_method());
   SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, SSLCertContext::CertificateCallback);
+  SSL_CTX_set_keylog_callback(ctx, SSLCertContext::KeyLogCallback);
   SSL_CTX_set_min_proto_version(ctx, TLS1_2_VERSION);
   SSL_CTX_set_cipher_list(ctx, "HIGH:MEDIUM");
   SSLCertContext* context = new SSLCertContext(ctx);
diff --git a/runtime/bin/security_context.h b/runtime/bin/security_context.h
index e8800e2..b5bc66b 100644
--- a/runtime/bin/security_context.h
+++ b/runtime/bin/security_context.h
@@ -30,17 +30,16 @@
   explicit SSLCertContext(SSL_CTX* context)
       : ReferenceCounted(),
         context_(context),
-        alpn_protocol_string_(NULL),
+        alpn_protocol_string_(nullptr),
         trust_builtin_(false) {}
 
   ~SSLCertContext() {
     SSL_CTX_free(context_);
-    if (alpn_protocol_string_ != NULL) {
-      free(alpn_protocol_string_);
-    }
+    free(alpn_protocol_string_);
   }
 
   static int CertificateCallback(int preverify_ok, X509_STORE_CTX* store_ctx);
+  static void KeyLogCallback(const SSL* ssl, const char* line);
 
   static SSLCertContext* GetSecurityContext(Dart_NativeArguments args);
   static const char* GetPasswordArgument(Dart_NativeArguments args,
diff --git a/runtime/docs/infra/coredumps.md b/runtime/docs/infra/coredumps.md
index 3e1e2d5..a35d924 100644
--- a/runtime/docs/infra/coredumps.md
+++ b/runtime/docs/infra/coredumps.md
@@ -45,11 +45,25 @@
 
 ![shard isolate out](images/isolated-out-link.png)
 
-This link would bring you to isolate server file browser where you will be
-able to download archived artifacts.
+This link would bring you to isolate server file browser where you can see the artifacts you can download.
 
 ![Isolate Server Browser](images/isolated-out-browser.png)
 
+One caveat is that file browser might fail to download large files, so you might need to use `cas` tool if you need to download those.
+
+`cas` tool is installed using `cipd`:
+```
+cipd install "infra/tools/luci/cas/\${platform}" -root ~/cas_tool
+```
+
+Then you point `cas` at digest hash for the directory to be downloaded:
+
+```
+~/cas_tool/cas download -cas-instance projects/chromium-swarm/instances/default_instance -digest <digest_hash> -dir downloaded
+```
+
+where `<digest_hash>` is 'Digest' value from the isolate server browser listing.
+
 ### Cloud Storage
 
 Other bots upload collected artifacts into a `dart-temp-crash-archive` Cloud Storage bucket. In this case you will see
diff --git a/runtime/docs/infra/il_tests.md b/runtime/docs/infra/il_tests.md
index c8c2b40..44b948c 100644
--- a/runtime/docs/infra/il_tests.md
+++ b/runtime/docs/infra/il_tests.md
@@ -11,6 +11,17 @@
 
 IL tests are placed in files ending with `_il_test.dart`.
 
+To run an IL test you need to use `tools/test.py` runner with AOT configuration:
+
+```
+# Run against ReleaseX64 AOT compiler
+$ tools/test.py -n dartkp-linux-release-x64 $path_to_an_il_test
+$ tools/test.py -c dartkp -m release $path_to_an_il_test
+```
+
+Tests require `gen_snapshot`, `dart_precompiled_runtime` and
+`vm_platform_strong.dill` to be built for the target configuration.
+
 Each IL test should contain one or more of the functions marked with a
 `@pragma('vm:testing:print-flow-graph'[, 'phases filter'])`.
 
diff --git a/runtime/docs/pragmas.md b/runtime/docs/pragmas.md
index 77d6d8e..90eb126 100644
--- a/runtime/docs/pragmas.md
+++ b/runtime/docs/pragmas.md
@@ -11,6 +11,7 @@
 | `vm:prefer-inline` | [Inline a function or method when possible](compiler/pragmas_recognized_by_compiler.md#requesting-a-function-be-inlined) |
 | `vm:notify-debugger-on-exception` | Marks a function that catches exceptions, making the VM treat any caught exception as if they were uncaught. This can be used to notify an attached debugger during debugging, without pausing the app during regular execution. |
 | `vm:external-name` | Allows to specify an external (native) name for an `external` function. This name is used to lookup native implementation via native resolver associated with the current library through embedding APIs. This is a replacement for legacy VM specific `native "name"` syntax. |
+| `vm:invisible` | Allows to mark a function as invisible so it will not appear on stack traces. |
 
 ## Unsafe pragmas for general use
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 360de52..b884b36 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -920,6 +920,36 @@
 DART_EXPORT void Dart_RunTask(Dart_Task task);
 
 /**
+ * Optional callback provided by the embedder that is used by the VM to
+ * implement registration of kernel blobs for the subsequent Isolate.spawnUri
+ * If no callback is provided, the registration of kernel blobs will throw
+ * an error.
+ * 
+ * \param kernel_buffer A buffer which contains a kernel program. Callback
+ *                      should copy the contents of `kernel_buffer` as
+ *                      it may be freed immediately after registration.
+ * \param kernel_buffer_size The size of `kernel_buffer`.
+ *
+ * \return A C string representing URI which can be later used
+ *         to spawn a new isolate. This C String should be scope allocated
+ *         or owned by the embedder.
+ *         Returns NULL if embedder runs out of memory.
+ */
+typedef const char* (*Dart_RegisterKernelBlobCallback)(
+    const uint8_t* kernel_buffer,
+    intptr_t kernel_buffer_size);
+
+/**
+ * Optional callback provided by the embedder that is used by the VM to
+ * unregister kernel blobs.
+ * If no callback is provided, the unregistration of kernel blobs will throw
+ * an error.
+ * 
+ * \param kernel_blob_uri URI of the kernel blob to unregister.
+ */
+typedef void (*Dart_UnregisterKernelBlobCallback)(const char* kernel_blob_uri);
+
+/**
  * Describes how to initialize the VM. Used with Dart_Initialize.
  */
 typedef struct {
@@ -1003,6 +1033,16 @@
   Dart_PostTaskCallback post_task;
 
   void* post_task_data;
+
+  /**
+   * Kernel blob registration callback function. See Dart_RegisterKernelBlobCallback.
+   */
+  Dart_RegisterKernelBlobCallback register_kernel_blob;
+
+  /**
+   * Kernel blob unregistration callback function. See Dart_UnregisterKernelBlobCallback.
+   */
+  Dart_UnregisterKernelBlobCallback unregister_kernel_blob;
 } Dart_InitializeParams;
 
 /**
diff --git a/runtime/include/dart_native_api.h b/runtime/include/dart_native_api.h
index 66e5f93..a938b49 100644
--- a/runtime/include/dart_native_api.h
+++ b/runtime/include/dart_native_api.h
@@ -32,6 +32,13 @@
  * the caller. The ownership of data for kExternalTyped is passed to the VM on
  * message send and returned when the VM invokes the
  * Dart_HandleFinalizer callback; a non-NULL callback must be provided.
+ *
+ * Note that Dart_CObject_kNativePointer is intended for internal use by
+ * dart:io implementation and has no connection to dart:ffi Pointer class.
+ * It represents a pointer to a native resource of a known type.
+ * The receiving side will only see this pointer as an integer and will not
+ * see the specified finalizer.
+ * The specified finalizer will only be invoked if the message is not delivered.
  */
 typedef enum {
   Dart_CObject_kNull = 0,
diff --git a/runtime/lib/errors.cc b/runtime/lib/errors.cc
index 7a3415a..3ef3079 100644
--- a/runtime/lib/errors.cc
+++ b/runtime/lib/errors.cc
@@ -168,57 +168,6 @@
   return Object::null();
 }
 
-// Allocate and throw a new FallThroughError.
-// Arg0: index of the case clause token into which we fall through.
-// Return value: none, throws an exception.
-DEFINE_NATIVE_ENTRY(FallThroughError_throwNew, 0, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Smi, smi_pos, arguments->NativeArgAt(0));
-  TokenPosition fallthrough_pos = TokenPosition::Deserialize(smi_pos.Value());
-
-  const Array& args = Array::Handle(Array::New(2));
-
-  // Initialize 'url' and 'line' arguments.
-  DartFrameIterator iterator(thread,
-                             StackFrameIterator::kNoCrossThreadIteration);
-  iterator.NextFrame();  // Skip native call.
-  const Script& script = Script::Handle(Exceptions::GetCallerScript(&iterator));
-  args.SetAt(0, String::Handle(script.url()));
-  intptr_t line = -1;
-  script.GetTokenLocation(fallthrough_pos, &line);
-  args.SetAt(1, Smi::Handle(Smi::New(line)));
-
-  Exceptions::ThrowByType(Exceptions::kFallThrough, args);
-  UNREACHABLE();
-  return Object::null();
-}
-
-// Allocate and throw a new AbstractClassInstantiationError.
-// Arg0: Token position of allocation statement.
-// Arg1: class name of the abstract class that cannot be instantiated.
-// Return value: none, throws an exception.
-DEFINE_NATIVE_ENTRY(AbstractClassInstantiationError_throwNew, 0, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Smi, smi_pos, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(String, class_name, arguments->NativeArgAt(1));
-  TokenPosition error_pos = TokenPosition::Deserialize(smi_pos.Value());
-
-  const Array& args = Array::Handle(Array::New(3));
-
-  // Initialize 'className', 'url' and 'line' arguments.
-  DartFrameIterator iterator(thread,
-                             StackFrameIterator::kNoCrossThreadIteration);
-  iterator.NextFrame();  // Skip native call.
-  const Script& script = Script::Handle(Exceptions::GetCallerScript(&iterator));
-  args.SetAt(0, class_name);
-  args.SetAt(1, String::Handle(script.url()));
-  intptr_t line = -1;
-  script.GetTokenLocation(error_pos, &line);
-  args.SetAt(2, Smi::Handle(Smi::New(line)));
-
-  Exceptions::ThrowByType(Exceptions::kAbstractClassInstantiation, args);
-  UNREACHABLE();
-  return Object::null();
-}
-
 // Rethrow an error with a stacktrace.
 DEFINE_NATIVE_ENTRY(Error_throwWithStackTrace, 0, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(Instance, error, arguments->NativeArgAt(0));
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index f57a6c4..3d2a0f0 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -330,7 +330,6 @@
   IsolateSpawnState(Dart_Port parent_port,
                     Dart_Port origin_id,
                     const char* script_url,
-                    const Function& func,
                     PersistentHandle* closure_tuple_handle,
                     SerializedObjectBuffer* message_buffer,
                     const char* package_config,
@@ -415,7 +414,6 @@
 IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
                                      Dart_Port origin_id,
                                      const char* script_url,
-                                     const Function& func,
                                      PersistentHandle* closure_tuple_handle,
                                      SerializedObjectBuffer* message_buffer,
                                      const char* package_config,
@@ -438,30 +436,11 @@
       serialized_message_(message_buffer->StealMessage()),
       paused_(paused),
       errors_are_fatal_(errors_are_fatal) {
-  // Either we have a top-level function or we have a closure.
-  ASSERT((closure_tuple_handle_ != nullptr) == func.IsNull());
+  ASSERT(closure_tuple_handle_ != nullptr);
 
   auto thread = Thread::Current();
   auto isolate = thread->isolate();
 
-  if (!func.IsNull()) {
-    auto zone = thread->zone();
-    const auto& cls = Class::Handle(zone, func.Owner());
-    const auto& lib = Library::Handle(zone, cls.library());
-    const auto& lib_url = String::Handle(zone, lib.url());
-    library_url_ = NewConstChar(lib_url.ToCString());
-
-    String& func_name = String::Handle(zone);
-    func_name = func.name();
-    function_name_ = NewConstChar(String::ScrubName(func_name));
-    if (!cls.IsTopLevel()) {
-      const auto& class_name = String::Handle(zone, cls.Name());
-      class_name_ = NewConstChar(class_name.ToCString());
-    }
-  } else {
-    ASSERT(closure_tuple_handle != nullptr);
-  }
-
   // Inherit flags from spawning isolate.
   isolate->FlagsCopyTo(isolate_flags());
 }
@@ -679,7 +658,8 @@
     auto initialize_callback = Isolate::InitializeCallback();
     if (initialize_callback == nullptr) {
       FailedSpawn(
-          "Lightweight isolate spawn is not supported by this Dart embedder\n");
+          "Lightweight isolate spawn is not supported by this Dart embedder\n",
+          /*has_current_isolate=*/false);
       return;
     }
 
@@ -908,19 +888,6 @@
   return result;
 }
 
-static FunctionPtr GetTopLevelFunction(Zone* zone, const Instance& closure) {
-  if (closure.IsClosure()) {
-    auto& func = Function::Handle(zone);
-    func = Closure::Cast(closure).function();
-    if (func.IsImplicitClosureFunction() && func.is_static()) {
-      ASSERT(Closure::Cast(closure).context() == Context::null());
-      // Get the parent function so that we get the right function name.
-      return func.parent_function();
-    }
-  }
-  return Function::null();
-}
-
 DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 10) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(String, script_uri, arguments->NativeArgAt(1));
@@ -933,20 +900,17 @@
   GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(8));
   GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(9));
 
-  const auto& func = Function::Handle(zone, GetTopLevelFunction(zone, closure));
   PersistentHandle* closure_tuple_handle = nullptr;
-  if (func.IsNull()) {
-    // We have a non-toplevel closure that we might need to copy.
-    // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
-    const auto& closure_copy_tuple = Object::Handle(
-        zone, CopyMutableObjectGraph(closure));  // Throws if it fails.
-    ASSERT(closure_copy_tuple.IsArray());
-    ASSERT(Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0))
-               .IsClosure());
-    closure_tuple_handle =
-        isolate->group()->api_state()->AllocatePersistentHandle();
-    closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
-  }
+  // We have a non-toplevel closure that we might need to copy.
+  // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
+  const auto& closure_copy_tuple = Object::Handle(
+      zone, CopyMutableObjectGraph(closure));  // Throws if it fails.
+  ASSERT(closure_copy_tuple.IsArray());
+  ASSERT(
+      Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0)).IsClosure());
+  closure_tuple_handle =
+      isolate->group()->api_state()->AllocatePersistentHandle();
+  closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
 
   bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
   Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
@@ -964,15 +928,13 @@
   const char* utf8_debug_name =
       debugName.IsNull() ? NULL : String2UTF8(debugName);
   if (closure_tuple_handle != nullptr && utf8_debug_name == nullptr) {
-    ASSERT(func.IsNull());
-
     const auto& closure_function = Function::Handle(zone, closure.function());
     utf8_debug_name =
         NewConstChar(closure_function.QualifiedUserVisibleNameCString());
   }
 
   std::unique_ptr<IsolateSpawnState> state(new IsolateSpawnState(
-      port.Id(), isolate->origin_id(), String2UTF8(script_uri), func,
+      port.Id(), isolate->origin_id(), String2UTF8(script_uri),
       closure_tuple_handle, &message_buffer, utf8_package_config,
       paused.value(), fatal_errors, on_exit_port, on_error_port,
       utf8_debug_name, isolate->group()));
@@ -1110,6 +1072,62 @@
   return root_lib.url();
 }
 
+DEFINE_NATIVE_ENTRY(Isolate_registerKernelBlob, 0, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(TypedData, kernel_blob,
+                               arguments->NativeArgAt(0));
+  auto register_kernel_blob_callback = Isolate::RegisterKernelBlobCallback();
+  if (register_kernel_blob_callback == nullptr) {
+    const auto& error =
+        String::Handle(zone, String::New("Registration of kernel blobs is not "
+                                         "supported by this Dart embedder.\n"));
+    Exceptions::ThrowArgumentError(error);
+    UNREACHABLE();
+  }
+  bool is_kernel = false;
+  {
+    NoSafepointScope no_safepoint;
+    is_kernel =
+        Dart_IsKernel(reinterpret_cast<uint8_t*>(kernel_blob.DataAddr(0)),
+                      kernel_blob.LengthInBytes());
+  }
+  if (!is_kernel) {
+    const auto& error = String::Handle(
+        zone, String::New("kernelBlob doesn\'t contain a valid kernel.\n"));
+    Exceptions::ThrowArgumentError(error);
+    UNREACHABLE();
+  }
+  const char* uri = nullptr;
+  {
+    NoSafepointScope no_safepoint;
+    uri = register_kernel_blob_callback(
+        reinterpret_cast<uint8_t*>(kernel_blob.DataAddr(0)),
+        kernel_blob.LengthInBytes());
+  }
+  if (uri == nullptr) {
+    const Instance& exception = Instance::Handle(
+        thread->isolate_group()->object_store()->out_of_memory());
+    Exceptions::Throw(thread, exception);
+    UNREACHABLE();
+  }
+  return String::New(uri);
+}
+
+DEFINE_NATIVE_ENTRY(Isolate_unregisterKernelBlob, 0, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(String, kernel_blob_uri,
+                               arguments->NativeArgAt(0));
+  auto unregister_kernel_blob_callback =
+      Isolate::UnregisterKernelBlobCallback();
+  if (unregister_kernel_blob_callback == nullptr) {
+    const auto& error =
+        String::Handle(zone, String::New("Registration of kernel blobs is not "
+                                         "supported by this Dart embedder.\n"));
+    Exceptions::ThrowArgumentError(error);
+    UNREACHABLE();
+  }
+  unregister_kernel_blob_callback(kernel_blob_uri.ToCString());
+  return Object::null();
+}
+
 DEFINE_NATIVE_ENTRY(Isolate_sendOOB, 0, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Array, msg, arguments->NativeArgAt(1));
diff --git a/runtime/lib/math.cc b/runtime/lib/math.cc
index 59e2305..d13b2ef 100644
--- a/runtime/lib/math.cc
+++ b/runtime/lib/math.cc
@@ -22,91 +22,11 @@
   return Double::New(pow(operand, exponent));
 }
 
-// Returns the typed-data array store in '_Random._state' field.
-static TypedDataPtr GetRandomStateArray(const Instance& receiver) {
-  const Class& random_class = Class::Handle(receiver.clazz());
-  const Field& state_field =
-      Field::Handle(random_class.LookupFieldAllowPrivate(Symbols::_state()));
-  ASSERT(!state_field.IsNull());
-  const Instance& state_field_value =
-      Instance::Cast(Object::Handle(receiver.GetField(state_field)));
-  ASSERT(!state_field_value.IsNull());
-  ASSERT(state_field_value.IsTypedData());
-  const TypedData& array = TypedData::Cast(state_field_value);
-  ASSERT(array.Length() == 2);
-  ASSERT(array.ElementType() == kUint32ArrayElement);
-  return array.ptr();
-}
-
-// Implements:
-//   var state =
-//       ((_A * (_state[_kSTATE_LO])) + _state[_kSTATE_HI]) & (1 << 64) - 1);
-//   _state[_kSTATE_LO] = state & (1 << 32) - 1);
-//   _state[_kSTATE_HI] = state >> 32;
-DEFINE_NATIVE_ENTRY(Random_nextState, 0, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Instance, receiver, arguments->NativeArgAt(0));
-  const TypedData& array = TypedData::Handle(GetRandomStateArray(receiver));
-  const uint64_t state_lo = array.GetUint32(0);
-  const uint64_t state_hi = array.GetUint32(array.ElementSizeInBytes());
-  const uint64_t A = 0xffffda61;
-  uint64_t state = (A * state_lo) + state_hi;
-  array.SetUint32(0, static_cast<uint32_t>(state));
-  array.SetUint32(array.ElementSizeInBytes(),
-                  static_cast<uint32_t>(state >> 32));
-  return Object::null();
-}
-
-TypedDataPtr CreateRandomState(Zone* zone, uint64_t seed) {
-  const TypedData& result =
-      TypedData::Handle(zone, TypedData::New(kTypedDataUint32ArrayCid, 2));
-  result.SetUint32(0, static_cast<uint32_t>(seed));
-  result.SetUint32(result.ElementSizeInBytes(),
-                   static_cast<uint32_t>(seed >> 32));
-  return result.ptr();
-}
-
-uint64_t mix64(uint64_t n) {
-  // Thomas Wang 64-bit mix.
-  // http://www.concentric.net/~Ttwang/tech/inthash.htm
-  // via. http://web.archive.org/web/20071223173210/http://www.concentric.net/~Ttwang/tech/inthash.htm
-  n = (~n) + (n << 21);  // n = (n << 21) - n - 1;
-  n = n ^ (n >> 24);
-  n = n * 265;  // n = (n + (n << 3)) + (n << 8);
-  n = n ^ (n >> 14);
-  n = n * 21;  // n = (n + (n << 2)) + (n << 4);
-  n = n ^ (n >> 28);
-  n = n + (n << 31);
-  return n;
-}
-
-// Implements:
-//   uint64_t hash = 0;
-//   do {
-//      hash = hash * 1037 ^ mix64((uint64_t)seed);
-//      seed >>= 64;
-//   } while (seed != 0 && seed != -1);  // Limits if seed positive or negative.
-//   if (hash == 0) {
-//     hash = 0x5A17;
-//   }
-//   var result = new Uint32List(2);
-//   result[_kSTATE_LO] = seed & ((1 << 32) - 1);
-//   result[_kSTATE_HI] = seed >> 32;
-//   return result;
-DEFINE_NATIVE_ENTRY(Random_setupSeed, 0, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Integer, seed_int, arguments->NativeArgAt(0));
-  uint64_t seed = mix64(static_cast<uint64_t>(seed_int.AsInt64Value()));
-
-  if (seed == 0) {
-    seed = 0x5a17;
-  }
-  return CreateRandomState(zone, seed);
-}
-
 DEFINE_NATIVE_ENTRY(Random_initialSeed, 0, 0) {
   Random* rnd = isolate->random();
   uint64_t seed = rnd->NextUInt32();
   seed |= (static_cast<uint64_t>(rnd->NextUInt32()) << 32);
-  return CreateRandomState(zone, seed);
+  return Integer::New(seed);
 }
 
 DEFINE_NATIVE_ENTRY(SecureRandom_getBytes, 0, 1) {
diff --git a/runtime/observatory/bin/heap_snapshot.dart b/runtime/observatory/bin/heap_snapshot.dart
index b5aaf93..3820096 100644
--- a/runtime/observatory/bin/heap_snapshot.dart
+++ b/runtime/observatory/bin/heap_snapshot.dart
@@ -401,9 +401,9 @@
   }
 
   var uri = Uri.parse(args[0]);
-  if (uri.scheme == 'http') {
+  if (uri.isScheme('http')) {
     uri = uri.replace(scheme: 'ws');
-  } else if (uri.scheme == 'https') {
+  } else if (uri.isScheme('https')) {
     uri = uri.replace(scheme: 'wss');
   }
   if (!uri.path.endsWith('/ws')) {
diff --git a/runtime/observatory/lib/src/elements/script_inset.dart b/runtime/observatory/lib/src/elements/script_inset.dart
index 68dc829..ca74491 100644
--- a/runtime/observatory/lib/src/elements/script_inset.dart
+++ b/runtime/observatory/lib/src/elements/script_inset.dart
@@ -439,7 +439,7 @@
         return l as S.Library;
       }
     }
-    if (targetUri.scheme == 'package') {
+    if (targetUri.isScheme('package')) {
       var targetUriString = "packages/${targetUri.path}";
       for (M.Library l in script.isolate!.libraries) {
         if (targetUriString == l.uri) {
@@ -482,7 +482,7 @@
   S.Script? resolvePart(String relativeUri) {
     S.Script script = _loadedScript as S.Script;
     var rootUri = Uri.parse(script.library!.uri!);
-    if (rootUri.scheme == 'dart') {
+    if (rootUri.isScheme('dart')) {
       // The relative paths from dart:* libraries to their parts are not valid.
       rootUri = Uri.parse(script.library!.uri! + '/');
     }
diff --git a/runtime/observatory/tests/service/evaluate_fold_on_list_test.dart b/runtime/observatory/tests/service/evaluate_fold_on_list_test.dart
new file mode 100644
index 0000000..36df1f4
--- /dev/null
+++ b/runtime/observatory/tests/service/evaluate_fold_on_list_test.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.
+
+import 'dart:developer';
+import 'package:observatory/models.dart' show InstanceKind;
+import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
+
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+void testFunction() {
+  List<String> x = ["a", "b", "c"];
+  int xCombinedLength = x.fold<int>(
+      0, (previousValue, element) => previousValue + element.length);
+  debugger();
+  print("xCombinedLength = $xCombinedLength");
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    Instance result = await isolate.evalFrame(0, '''x.fold<int>(
+              0, (previousValue, element) => previousValue + element.length)''')
+        as Instance;
+    expect(result.valueAsString, equals('3'));
+    expect(result.kind, equals(InstanceKind.int));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory/tests/service/evaluate_type_arguments_test.dart b/runtime/observatory/tests/service/evaluate_type_arguments_test.dart
new file mode 100644
index 0000000..50861ec
--- /dev/null
+++ b/runtime/observatory/tests/service/evaluate_type_arguments_test.dart
@@ -0,0 +1,116 @@
+// 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';
+import 'dart:developer';
+import 'package:observatory/models.dart' show InstanceKind;
+import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
+
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+class A {}
+
+class B extends A {}
+
+class C extends Object with ListMixin<C> implements List<C> {
+  int length = 0;
+  C operator [](int index) => throw UnimplementedError();
+  void operator []=(int index, C value) {}
+}
+
+void testFunction4<T4 extends List<T4>>() {
+  debugger();
+  print("T4 = $T4");
+}
+
+void testFunction3<T3, S3 extends T3>() {
+  debugger();
+  print("T3 = $T3");
+  print("S3 = $S3");
+}
+
+void testFunction2<E extends String>(List<E> x) {
+  debugger();
+  print("x = $x");
+}
+
+void testFunction() {
+  testFunction2<String>(<String>["a", "b", "c"]);
+  testFunction3<A, B>();
+  testFunction4<C>();
+}
+
+void fooxx<E extends String>(List<E> y) {
+  List<E> x = new List<E>.from(["hello"]);
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    {
+      // Can add List<E extends String> to List<String> directly.
+      Instance result = await isolate.evalFrame(0, '''() {
+        List<E> y = new List<E>.from(["hello"]);
+        x.addAll(y);
+        return x.last;
+      }()''') as Instance;
+      expect(result.valueAsString, equals("hello"));
+      expect(result.kind, equals(InstanceKind.string));
+    }
+    {
+      // Can't add List<String> to List<E extends String> directly.
+      DartError result = await isolate.evalFrame(0, '''() {
+        List<E> y = [];
+        y.addAll(x);
+        return y.last;
+      }()''') as DartError;
+      expect(
+          result.message,
+          contains(
+              "The argument type '_GrowableList<String>' can't be assigned "
+              "to the parameter type 'Iterable<E>'"));
+    }
+    {
+      // Can add List<String> to List<E extends String> via cast.
+      Instance result = await isolate.evalFrame(0, '''() {
+        List<E> y = [];
+        y.addAll(x.cast());
+        return y.toString();
+      }()''') as Instance;
+      // Notice how "hello" was added a few evaluations back.
+      expect(result.valueAsString, equals("[a, b, c, hello]"));
+      expect(result.kind, equals(InstanceKind.string));
+    }
+    {
+      // Can create List<String> from List<E extends String>.
+      Instance result = await isolate.evalFrame(0, '''() {
+        List<E> y = new List<E>.from(x);
+        return y.toString();
+      }()''') as Instance;
+      // Notice how "hello" was added a few evaluations back.
+      expect(result.valueAsString, equals("[a, b, c, hello]"));
+      expect(result.kind, equals(InstanceKind.string));
+    }
+  },
+  resumeIsolate,
+  (Isolate isolate) async {
+    // This is just to make sure the VM doesn't crash.
+    Instance result =
+        await isolate.evalFrame(0, '''S3.toString()''') as Instance;
+    expect(result.valueAsString, equals("B"));
+    expect(result.kind, equals(InstanceKind.string));
+  },
+  resumeIsolate,
+  (Isolate isolate) async {
+    // This is just to make sure the VM doesn't crash.
+    Instance result =
+        await isolate.evalFrame(0, '''T4.toString()''') as Instance;
+    expect(result.valueAsString, equals("C"));
+    expect(result.kind, equals(InstanceKind.string));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory/tests/service/evaluate_type_with_extension_test.dart b/runtime/observatory/tests/service/evaluate_type_with_extension_test.dart
new file mode 100644
index 0000000..b998aed
--- /dev/null
+++ b/runtime/observatory/tests/service/evaluate_type_with_extension_test.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:developer';
+import 'package:observatory/models.dart' show InstanceKind;
+import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
+
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+extension on String {
+  String printAndReturnHello() {
+    String response = "Hello from String '$this'";
+    print(response);
+    return response;
+  }
+}
+
+void testFunction() {
+  String x = "hello";
+  String value = x.printAndReturnHello();
+  debugger();
+  print("value = $value");
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    Instance result =
+        await isolate.evalFrame(0, 'x.printAndReturnHello()') as Instance;
+    expect(result.valueAsString, equals("Hello from String 'hello'"));
+    expect(result.kind, equals(InstanceKind.string));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index ee2c8dc..0b85116 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -51,11 +51,11 @@
 [ $mode == debug && $system == windows && $checked ]
 async_scope_test: Pass, Slow
 
-[ $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 *: SkipSlow
 
 # These tests are slow on simulators.
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 *: Pass, Slow
 
 # All tests use dart:io
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index ee4f627..b358a82 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -95,6 +95,7 @@
 evaluate_activation_test: SkipByDesign
 evaluate_async_closure_test: SkipByDesign
 evaluate_class_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_fold_on_list_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_function_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_async_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_async_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -102,6 +103,8 @@
 evaluate_in_frame_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_frame_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_sync_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_type_arguments_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_type_with_extension_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_with_escaping_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
 field_script_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -274,7 +277,7 @@
 step_through_switch_test: Skip # Times out. Issue 32137.
 step_through_switch_with_continue_test: Skip # Times out. Issue 32137.
 
-[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 add_breakpoint_rpc_kernel_test: RuntimeError # Issue #34736
 async_generator_breakpoint_test: SkipByDesign # No incremental compiler available.
 bad_reload_test: Skip # Times out on sim architectures, also RuntimeError.
diff --git a/runtime/observatory_2/bin/heap_snapshot.dart b/runtime/observatory_2/bin/heap_snapshot.dart
index 495c778..11e25ea 100644
--- a/runtime/observatory_2/bin/heap_snapshot.dart
+++ b/runtime/observatory_2/bin/heap_snapshot.dart
@@ -401,9 +401,9 @@
   }
 
   var uri = Uri.parse(args[0]);
-  if (uri.scheme == 'http') {
+  if (uri.isScheme('http')) {
     uri = uri.replace(scheme: 'ws');
-  } else if (uri.scheme == 'https') {
+  } else if (uri.isScheme('https')) {
     uri = uri.replace(scheme: 'wss');
   }
   if (!uri.path.endsWith('/ws')) {
diff --git a/runtime/observatory_2/lib/src/elements/script_inset.dart b/runtime/observatory_2/lib/src/elements/script_inset.dart
index c4a0094..70d2049 100644
--- a/runtime/observatory_2/lib/src/elements/script_inset.dart
+++ b/runtime/observatory_2/lib/src/elements/script_inset.dart
@@ -436,7 +436,7 @@
         return l;
       }
     }
-    if (targetUri.scheme == 'package') {
+    if (targetUri.isScheme('package')) {
       var targetUriString = "packages/${targetUri.path}";
       for (M.Library l in script.isolate.libraries) {
         if (targetUriString == l.uri) {
@@ -479,7 +479,7 @@
   M.Script resolvePart(String relativeUri) {
     S.Script script = _loadedScript as S.Script;
     var rootUri = Uri.parse(script.library.uri);
-    if (rootUri.scheme == 'dart') {
+    if (rootUri.isScheme('dart')) {
       // The relative paths from dart:* libraries to their parts are not valid.
       rootUri = Uri.parse(script.library.uri + '/');
     }
diff --git a/runtime/observatory_2/tests/service_2/evaluate_fold_on_list_test.dart b/runtime/observatory_2/tests/service_2/evaluate_fold_on_list_test.dart
new file mode 100644
index 0000000..87c1698
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/evaluate_fold_on_list_test.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.
+
+import 'dart:developer';
+import 'package:observatory_2/models.dart' show InstanceKind;
+import 'package:observatory_2/service_io.dart';
+import 'package:test/test.dart';
+
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+void testFunction() {
+  List<String> x = ["a", "b", "c"];
+  int xCombinedLength = x.fold<int>(
+      0, (previousValue, element) => previousValue + element.length);
+  debugger();
+  print("xCombinedLength = $xCombinedLength");
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    Instance result = await isolate.evalFrame(0, '''x.fold<int>(
+              0, (previousValue, element) => previousValue + element.length)''')
+        as Instance;
+    expect(result.valueAsString, equals('3'));
+    expect(result.kind, equals(InstanceKind.int));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory_2/tests/service_2/evaluate_type_arguments_test.dart b/runtime/observatory_2/tests/service_2/evaluate_type_arguments_test.dart
new file mode 100644
index 0000000..694be96
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/evaluate_type_arguments_test.dart
@@ -0,0 +1,116 @@
+// 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';
+import 'dart:developer';
+import 'package:observatory_2/models.dart' show InstanceKind;
+import 'package:observatory_2/service_io.dart';
+import 'package:test/test.dart';
+
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+class A {}
+
+class B extends A {}
+
+class C extends Object with ListMixin<C> implements List<C> {
+  int length = 0;
+  C operator [](int index) => throw UnimplementedError();
+  void operator []=(int index, C value) {}
+}
+
+void testFunction4<T4 extends List<T4>>() {
+  debugger();
+  print("T4 = $T4");
+}
+
+void testFunction3<T3, S3 extends T3>() {
+  debugger();
+  print("T3 = $T3");
+  print("S3 = $S3");
+}
+
+void testFunction2<E extends String>(List<E> x) {
+  debugger();
+  print("x = $x");
+}
+
+void testFunction() {
+  testFunction2<String>(<String>["a", "b", "c"]);
+  testFunction3<A, B>();
+  testFunction4<C>();
+}
+
+void fooxx<E extends String>(List<E> y) {
+  List<E> x = new List<E>.from(["hello"]);
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    {
+      // Can add List<E extends String> to List<String> directly.
+      Instance result = await isolate.evalFrame(0, '''() {
+        List<E> y = new List<E>.from(["hello"]);
+        x.addAll(y);
+        return x.last;
+      }()''') as Instance;
+      expect(result.valueAsString, equals("hello"));
+      expect(result.kind, equals(InstanceKind.string));
+    }
+    {
+      // Can't add List<String> to List<E extends String> directly.
+      DartError result = await isolate.evalFrame(0, '''() {
+        List<E> y = [];
+        y.addAll(x);
+        return y.last;
+      }()''') as DartError;
+      expect(
+          result.message,
+          contains(
+              "The argument type '_GrowableList<String>' can't be assigned "
+              "to the parameter type 'Iterable<E>'"));
+    }
+    {
+      // Can add List<String> to List<E extends String> via cast.
+      Instance result = await isolate.evalFrame(0, '''() {
+        List<E> y = [];
+        y.addAll(x.cast());
+        return y.toString();
+      }()''') as Instance;
+      // Notice how "hello" was added a few evaluations back.
+      expect(result.valueAsString, equals("[a, b, c, hello]"));
+      expect(result.kind, equals(InstanceKind.string));
+    }
+    {
+      // Can create List<String> from List<E extends String>.
+      Instance result = await isolate.evalFrame(0, '''() {
+        List<E> y = new List<E>.from(x);
+        return y.toString();
+      }()''') as Instance;
+      // Notice how "hello" was added a few evaluations back.
+      expect(result.valueAsString, equals("[a, b, c, hello]"));
+      expect(result.kind, equals(InstanceKind.string));
+    }
+  },
+  resumeIsolate,
+  (Isolate isolate) async {
+    // This is just to make sure the VM doesn't crash.
+    Instance result =
+        await isolate.evalFrame(0, '''S3.toString()''') as Instance;
+    expect(result.valueAsString, equals("B"));
+    expect(result.kind, equals(InstanceKind.string));
+  },
+  resumeIsolate,
+  (Isolate isolate) async {
+    // This is just to make sure the VM doesn't crash.
+    Instance result =
+        await isolate.evalFrame(0, '''T4.toString()''') as Instance;
+    expect(result.valueAsString, equals("C"));
+    expect(result.kind, equals(InstanceKind.string));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory_2/tests/service_2/evaluate_type_with_extension_test.dart b/runtime/observatory_2/tests/service_2/evaluate_type_with_extension_test.dart
new file mode 100644
index 0000000..333eb89
--- /dev/null
+++ b/runtime/observatory_2/tests/service_2/evaluate_type_with_extension_test.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:developer';
+import 'package:observatory_2/models.dart' show InstanceKind;
+import 'package:observatory_2/service_io.dart';
+import 'package:test/test.dart';
+
+import 'service_test_common.dart';
+import 'test_helper.dart';
+
+extension on String {
+  String printAndReturnHello() {
+    String response = "Hello from String '$this'";
+    print(response);
+    return response;
+  }
+}
+
+void testFunction() {
+  String x = "hello";
+  String value = x.printAndReturnHello();
+  debugger();
+  print("value = $value");
+}
+
+var tests = <IsolateTest>[
+  hasStoppedAtBreakpoint,
+  (Isolate isolate) async {
+    Instance result =
+        await isolate.evalFrame(0, 'x.printAndReturnHello()') as Instance;
+    expect(result.valueAsString, equals("Hello from String 'hello'"));
+    expect(result.kind, equals(InstanceKind.string));
+  },
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
diff --git a/runtime/observatory_2/tests/service_2/service_2.status b/runtime/observatory_2/tests/service_2/service_2.status
index c5a50bb..54c0328 100644
--- a/runtime/observatory_2/tests/service_2/service_2.status
+++ b/runtime/observatory_2/tests/service_2/service_2.status
@@ -54,11 +54,11 @@
 [ $mode == debug && $system == windows && $checked ]
 async_scope_test: Pass, Slow
 
-[ $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 *: SkipSlow
 
 # These tests are slow on simulators.
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 *: Pass, Slow
 
 # All tests use dart:io
diff --git a/runtime/observatory_2/tests/service_2/service_2_kernel.status b/runtime/observatory_2/tests/service_2/service_2_kernel.status
index 914b102..c64d881 100644
--- a/runtime/observatory_2/tests/service_2/service_2_kernel.status
+++ b/runtime/observatory_2/tests/service_2/service_2_kernel.status
@@ -95,6 +95,7 @@
 evaluate_activation_test: SkipByDesign
 evaluate_async_closure_test: SkipByDesign
 evaluate_class_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_fold_on_list_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_function_type_parameters_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_async_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_async_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -102,6 +103,8 @@
 evaluate_in_frame_rpc_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_frame_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_in_sync_star_activation_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_type_arguments_test: SkipByDesign # Debugger is disabled in AOT mode.
+evaluate_type_with_extension_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_with_escaping_closure_test: SkipByDesign # Debugger is disabled in AOT mode.
 evaluate_with_scope_test: SkipByDesign # Debugger is disabled in AOT mode.
 field_script_test: SkipByDesign # Debugger is disabled in AOT mode.
@@ -274,7 +277,7 @@
 step_through_switch_test: Skip # Times out. Issue 32137.
 step_through_switch_with_continue_test: Skip # Times out. Issue 32137.
 
-[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 add_breakpoint_rpc_kernel_test: RuntimeError # Issue #34736
 async_generator_breakpoint_test: SkipByDesign # No incremental compiler available.
 bad_reload_test: Skip # Times out on sim architectures, also RuntimeError.
diff --git a/runtime/platform/hashmap.h b/runtime/platform/hashmap.h
index e3e9c5a..f71600f 100644
--- a/runtime/platform/hashmap.h
+++ b/runtime/platform/hashmap.h
@@ -23,7 +23,7 @@
 
   static bool SamePointerValue(void* key1, void* key2) { return key1 == key2; }
 
-  static uint32_t StringHash(char* key) {
+  static uint32_t StringHash(const char* key) {
     uint32_t hash_ = 0;
     if (key == NULL) return hash_;
     int len = strlen(key);
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index 0e7a462..c22fcc0 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.h
@@ -84,7 +84,7 @@
   }
 
   template <typename T>
-  static inline T RoundDown(T x, intptr_t n) {
+  static constexpr inline T RoundDown(T x, intptr_t n) {
     ASSERT(IsPowerOfTwo(n));
     return (x & -n);
   }
@@ -95,7 +95,7 @@
   }
 
   template <typename T>
-  static inline T RoundUp(T x, intptr_t n) {
+  static constexpr inline T RoundUp(T x, intptr_t n) {
     return RoundDown(x + n - 1, n);
   }
 
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index a3073eb..843350b 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -3295,7 +3295,6 @@
     "../../../tests/standalone/io/http_parser_header_add_test.dart",
     "../../../tests/standalone/io/http_proxy_close_test.dart",
     "../../../tests/standalone/io/http_proxy_configuration_test.dart",
-    "../../../tests/standalone/io/http_redirect_test.dart",
     "../../../tests/standalone/io/http_request_pipeling_test.dart",
     "../../../tests/standalone/io/http_requested_uri_test.dart",
     "../../../tests/standalone/io/http_response_deadline_test.dart",
@@ -3326,7 +3325,6 @@
     "../../../tests/standalone/io/process_path_environment_test.dart",
     "../../../tests/standalone/io/process_path_test.dart",
     "../../../tests/standalone/io/process_pid_test.dart",
-    "../../../tests/standalone/io/process_run_test.dart",
     "../../../tests/standalone/io/process_segfault_test.dart",
     "../../../tests/standalone/io/process_start_exception_test.dart",
     "../../../tests/standalone/io/raw_datagram_read_all_test.dart",
@@ -6622,7 +6620,6 @@
     "../../../tests/standalone_2/io/http_parser_header_add_test.dart",
     "../../../tests/standalone_2/io/http_proxy_close_test.dart",
     "../../../tests/standalone_2/io/http_proxy_configuration_test.dart",
-    "../../../tests/standalone_2/io/http_redirect_test.dart",
     "../../../tests/standalone_2/io/http_request_pipeling_test.dart",
     "../../../tests/standalone_2/io/http_requested_uri_test.dart",
     "../../../tests/standalone_2/io/http_response_deadline_test.dart",
@@ -6652,7 +6649,6 @@
     "../../../tests/standalone_2/io/process_path_environment_test.dart",
     "../../../tests/standalone_2/io/process_path_test.dart",
     "../../../tests/standalone_2/io/process_pid_test.dart",
-    "../../../tests/standalone_2/io/process_run_test.dart",
     "../../../tests/standalone_2/io/process_segfault_test.dart",
     "../../../tests/standalone_2/io/process_start_exception_test.dart",
     "../../../tests/standalone_2/io/raw_datagram_read_all_test.dart",
diff --git a/runtime/tests/vm/dart/disassemble_aot_test.dart b/runtime/tests/vm/dart/disassemble_aot_test.dart
index 80a32c3..24454ac 100644
--- a/runtime/tests/vm/dart/disassemble_aot_test.dart
+++ b/runtime/tests/vm/dart/disassemble_aot_test.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.
 //
-// OtherResources=use_dwarf_stack_traces_flag_program.dart
+// OtherResources=hello_world_test.dart
 //
 // Tests proper object recognition in disassembler.
 
@@ -40,7 +40,7 @@
 
   await withTempDir('disassemble_aot', (String tempDir) async {
     final cwDir = path.dirname(Platform.script.toFilePath());
-    final script = path.join(cwDir, 'use_dwarf_stack_traces_flag_program.dart');
+    final script = path.join(cwDir, 'hello_world_test.dart');
     final scriptDill = path.join(tempDir, 'out.dill');
 
     // Compile script to Kernel IR.
@@ -54,14 +54,17 @@
 
     // Run the AOT compiler with the disassemble flags set.
     final elfFile = path.join(tempDir, 'aot.snapshot');
-    await Future.wait(<Future>[
-      run(genSnapshot, <String>[
-        '--snapshot-kind=app-aot-elf',
-        '--disassemble',
-        '--always_generate_trampolines_for_testing',
-        '--elf=$elfFile',
-        scriptDill,
-      ]),
+    await run(genSnapshot, <String>[
+      '--disassemble',
+      '--disassemble_stubs',
+      '--always_generate_trampolines_for_testing',
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$elfFile',
+      scriptDill
     ]);
+
+    // Run the AOT runtime with the disassemble flags set.
+    await run(
+        aotRuntime, <String>['--disassemble', '--disassemble_stubs', elfFile]);
   });
 }
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 74e128e..15b330d 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
@@ -1,16 +1,15 @@
 // 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:async';
-import 'dart:ffi';
-import 'dart:io';
+// ignore: import_internal_library, unused_import
+import 'dart:_internal';
 
 import 'package:expect/expect.dart';
 
 void main() {
+  testWeakReferenceNonExpandoKey();
+  testWeakReferenceTypeArgument();
   testWeakReference();
 }
 
@@ -22,23 +21,34 @@
   String toString() => 'Nonce($value)';
 }
 
-void testWeakReference() async {
-  final weakRef = () {
-    final object = Nonce(23);
-    final weakRef = WeakReference(object);
-    // Left to right argument evaluation: evaluate weakRef.target first.
-    Expect.equals(weakRef.target, object);
-    return weakRef;
-  }();
+void testWeakReferenceNonExpandoKey() {
+  Expect.throwsArgumentError(() {
+    WeakReference<String>("Hello world!");
+  });
+}
+
+void testWeakReferenceTypeArgument() {
+  final object = Nonce(23);
+  final weakRef = WeakReference(object);
+  Expect.type<WeakReference<Nonce>>(weakRef);
+}
+
+/// Never inline to ensure `object` becomes unreachable.
+@pragma('vm:never-inline')
+WeakReference<Nonce> makeWeakRef() {
+  final object = Nonce(23);
+  final weakRef = WeakReference(object);
+  // Left to right argument evaluation: evaluate weakRef.target first.
+  Expect.equals(weakRef.target, object);
+  return weakRef;
+}
+
+void testWeakReference() {
+  final weakRef = makeWeakRef();
 
   print('do gc');
   triggerGc();
-  await Future.delayed(Duration(milliseconds: 1));
-  triggerGc();
-  await Future.delayed(Duration(milliseconds: 1));
-  triggerGc();
-  await Future.delayed(Duration(milliseconds: 1));
-  triggerGc();
+  print('gc done');
 
   // The weak reference should not target anything anymore.
   Expect.isNull(weakRef.target);
@@ -46,23 +56,6 @@
   print('End of test, shutting down.');
 }
 
-final void Function() triggerGc = () {
-  String _platformPath(String name, {String? path}) {
-    if (path == null) path = "";
-    if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia)
-      return path + "lib" + name + ".so";
-    if (Platform.isMacOS) return path + "lib" + name + ".dylib";
-    if (Platform.isWindows) return path + name + ".dll";
-    throw Exception("Platform not implemented");
-  }
-
-  DynamicLibrary dlopenPlatformSpecific(String name, {String? path}) {
-    String fullPath = _platformPath(name, path: path);
-    return DynamicLibrary.open(fullPath);
-  }
-
-  final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
-
-  return ffiTestFunctions
-      .lookupFunction<Void Function(), void Function()>("TriggerGC");
-}();
+// Defined in `dart:_internal`.
+// ignore: undefined_identifier
+void triggerGc() => VMInternalsForTesting.collectAllGarbage();
diff --git a/runtime/tests/vm/dart/flutter_regress_98466_il_test.dart b/runtime/tests/vm/dart/flutter_regress_98466_il_test.dart
new file mode 100644
index 0000000..faf771f
--- /dev/null
+++ b/runtime/tests/vm/dart/flutter_regress_98466_il_test.dart
@@ -0,0 +1,119 @@
+// 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:vm/testing/il_matchers.dart';
+
+// This test creates a phi which has multiple inputs referring to the same
+// AllocateObject instruction. When delaying this allocation we need to
+// look at all of these inputs and not just at the first one.
+
+bool shouldPrint = false;
+
+@pragma('vm:never-inline')
+void blackhole(Object v) {
+  if (shouldPrint) {
+    print(v);
+  }
+}
+
+class X {
+  dynamic field;
+
+  @override
+  String toString() => 'X($field)';
+}
+
+// This function is used to create a phi with three arguments two of which
+// point to the same definition: original value of [v].
+@pragma('vm:prefer-inline')
+X decisionTree(bool a, bool b, X v) {
+  if (a) {
+    v.field = 10;
+    blackhole(v);
+    return v;
+  } else if (b) {
+    return v;
+  } else {
+    return X();
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('vm:testing:print-flow-graph')
+dynamic testDelayAllocationsUnsunk(bool a, bool b) {
+  // Allocation is expected to be unsunk because no use dominates all other
+  // uses.
+  var v = X();
+  if (a) {
+    blackhole(b);
+  }
+  v = decisionTree(a, b, v);
+  blackhole(v);
+  return v.field;
+}
+
+@pragma('vm:never-inline')
+@pragma('vm:testing:print-flow-graph')
+dynamic testDelayAllocationsSunk(bool a, bool b) {
+  var v = X();
+  if (a) {
+    blackhole(b);
+  }
+  v.field = 42; // Allocation is expected to be sunk past if to this use.
+  v = decisionTree(a, b, v);
+  blackhole(v);
+  return v.field;
+}
+
+List<dynamic> testAllVariants(dynamic Function(bool, bool) f) {
+  return [
+    for (var a in [true, false])
+      for (var b in [true, false]) f(a, b),
+  ];
+}
+
+void main(List<String> args) {
+  shouldPrint = args.contains("shouldPrint");
+
+  Expect.listEquals(
+      [10, 10, null, null], testAllVariants(testDelayAllocationsUnsunk));
+  Expect.listEquals(
+      [10, 10, 42, null], testAllVariants(testDelayAllocationsSunk));
+}
+
+void matchIL$testDelayAllocationsUnsunk(FlowGraph afterDelayAllocations) {
+  afterDelayAllocations.dump();
+  afterDelayAllocations.match([
+    match.block('Graph'),
+    match.block('Function', [
+      // Allocation must stay unsunk
+      match.AllocateObject()
+    ])
+  ]);
+}
+
+void matchIL$testDelayAllocationsSunk(FlowGraph afterDelayAllocations) {
+  afterDelayAllocations.dump();
+  afterDelayAllocations.match([
+    match.block('Graph'),
+    match.block('Function', [
+      // Allocation must be sunk from this block.
+      match.Branch(match.StrictCompare(match.any, match.any, kind: '==='),
+          ifTrue: 'B3', ifFalse: 'B4'),
+    ]),
+    'B3' <<
+        match.block('Target', [
+          match.Goto('B5'),
+        ]),
+    'B4' <<
+        match.block('Target', [
+          match.Goto('B5'),
+        ]),
+    'B5' <<
+        match.block('Join', [
+          match.AllocateObject(),
+        ]),
+  ]);
+}
diff --git a/runtime/tests/vm/dart/invisible_function_pragma_test.dart b/runtime/tests/vm/dart/invisible_function_pragma_test.dart
new file mode 100644
index 0000000..dff913a
--- /dev/null
+++ b/runtime/tests/vm/dart/invisible_function_pragma_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.
+
+import 'causal_stacks/utils.dart';
+
+main() async {
+  StackTrace trace = StackTrace.empty;
+
+  A.visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      new A.visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  A.invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visibleClosure.visibleInner',
+    r'^#2      visibleClosure',
+    r'^#3      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      invisibleClosure',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+}
+
+class A {
+  A.visible(void Function() fun) {
+    fun();
+  }
+
+  @pragma('vm:invisible')
+  A.invisible(void Function() fun) {
+    fun();
+  }
+}
+
+void visible(void Function() fun) => fun();
+
+@pragma('vm:invisible')
+void invisible(void Function() fun) => fun();
+
+void visibleClosure(void Function() fun) {
+  visibleInner() {
+    fun();
+  }
+
+  visibleInner();
+}
+
+void invisibleClosure(void Function() fun) {
+  @pragma('vm:invisible')
+  invisibleInner() {
+    fun();
+  }
+
+  invisibleInner();
+}
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 955e13d..cd24fbc 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
@@ -6,6 +6,8 @@
 // VMOptions=--enable-fast-object-copy
 // VMOptions=--no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
 // VMOptions=--enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
+// VMOptions=--no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer --deterministic
+// VMOptions=--enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer --deterministic
 
 // The tests in this file are particularly for an implementation that tries to
 // allocate the entire graph in BFS order using a fast new space allocation
@@ -242,6 +244,7 @@
     await testSlowOnly();
 
     await testWeakProperty();
+    await testWeakReference();
 
     await testForbiddenClosures();
   }
@@ -690,6 +693,69 @@
     }
   }
 
+  Future testWeakReference() async {
+    print('testWeakReference');
+
+    final object1 = Nonce(1);
+    final weakRef1 = WeakReference(object1);
+    final object2 = Nonce(2);
+    final weakRef2 = WeakReference(object2);
+    final object3 = Nonce(3);
+    final weakRef3 = WeakReference(object3);
+    final object4 = Nonce(4);
+    final weakRef4 = WeakReference(object4);
+
+    final key3 = Object();
+    final expando3 = Expando()..[key3] = object3;
+    final key4 = Object();
+    final expando4 = Expando()..[key4] = object4;
+
+    {
+      final result = await sendReceive([
+        weakRef1, // Does not have its target inluded.
+        weakRef2, // Has its target included later than itself.
+        object2,
+        weakRef3, // Does not have its target inluded.
+        expando3,
+        weakRef4, // Has its target included due to expando.
+        expando4,
+        key4,
+      ]);
+
+      final weakRef1copy = result[0] as WeakReference<Nonce>;
+      final weakRef2copy = result[1] as WeakReference<Nonce>;
+      final weakRef3copy = result[3] as WeakReference<Nonce>;
+      final weakRef4copy = result[5] as WeakReference<Nonce>;
+      Expect.isNull(weakRef1copy.target);
+      Expect.equals(weakRef2.target?.value, weakRef2copy.target?.value);
+      Expect.isNull(weakRef3copy.target);
+      Expect.equals(weakRef4.target?.value, weakRef4copy.target?.value);
+    }
+
+    {
+      final result = await sendReceive([
+        weakRef1, // Does not have its target inluded.
+        weakRef2, // Has its target included later than itself.
+        notAllocatableInTLAB,
+        object2,
+        weakRef3, // Does not have its target inluded.
+        expando3,
+        weakRef4, // Has its target included due to expando.
+        expando4,
+        key4,
+      ]);
+
+      final weakRef1copy = result[0] as WeakReference<Nonce>;
+      final weakRef2copy = result[1] as WeakReference<Nonce>;
+      final weakRef3copy = result[4] as WeakReference<Nonce>;
+      final weakRef4copy = result[6] as WeakReference<Nonce>;
+      Expect.isNull(weakRef1copy.target);
+      Expect.equals(weakRef2.target?.value, weakRef2copy.target?.value);
+      Expect.isNull(weakRef3copy.target);
+      Expect.equals(weakRef4.target?.value, weakRef4copy.target?.value);
+    }
+  }
+
   Future testForbiddenClosures() async {
     print('testForbiddenClosures');
     for (final closure in nonCopyableClosures) {
@@ -705,6 +771,14 @@
   }
 }
 
+class Nonce {
+  final int value;
+
+  Nonce(this.value);
+
+  String toString() => 'Nonce($value)';
+}
+
 main() async {
   await SendReceiveTest().run();
 }
diff --git a/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart b/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart
new file mode 100644
index 0000000..3b9831a
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/spawn_generic_function_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.
+//
+// Tests that generic functions are spawned with correct type arguments
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void func<T>(T o) {
+  print("$o:$T");
+  Expect.equals("int", "$T");
+}
+
+void call2(dynamic f) {
+  f(2);
+}
+
+void call4(dynamic f) {
+  f(4);
+}
+
+void main() async {
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(func<int>, 1, onExit: rp.sendPort);
+    await rp.first;
+  }
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(call2, func<int>, onExit: rp.sendPort);
+    await rp.first;
+  }
+  void Function(int) to = func;
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(to, 3, onExit: rp.sendPort);
+    await rp.first;
+  }
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(call4, to, onExit: rp.sendPort);
+    await rp.first;
+  }
+}
diff --git a/runtime/tests/vm/dart/regress_big_regexp_test.dart b/runtime/tests/vm/dart/regress_big_regexp_test.dart
index 09a7aa4..8a3530d 100644
--- a/runtime/tests/vm/dart/regress_big_regexp_test.dart
+++ b/runtime/tests/vm/dart/regress_big_regexp_test.dart
@@ -2,6 +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.
 
+// VMOptions=--intrinsify
+// VMOptions=--no_intrinsify
+
 // Verifies that RegExp compilation doesn't crash on a huge source string.
 
 import 'package:expect/expect.dart';
diff --git a/runtime/tests/vm/dart/regress_flutter98967_test.dart b/runtime/tests/vm/dart/regress_flutter98967_test.dart
new file mode 100644
index 0000000..97feb2d
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_flutter98967_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.
+
+// Regression test for https://github.com/flutter/flutter/issues/98967.
+// Verifies that compiler doesn't generate wrong code for comparison of ints
+// due to a late change in the representation of EqualityCompare inputs.
+
+import 'package:expect/expect.dart';
+
+class C {
+  int? val;
+
+  @pragma('vm:never-inline')
+  void testImpl(bool Function(int) compare) {
+    for (var i = 0; i < 2; i++) {
+      Expect.equals(false, compare(i));
+      val = i;
+      Expect.equals(true, compare(i));
+    }
+
+    final mint0 = int.parse("7fffffffffffffff", radix: 16);
+    final mint1 = int.parse("7fffffffffffffff", radix: 16);
+    if (mint0 != mint1) throw 'This is the same mint value';
+
+    Expect.equals(false, compare(mint0));
+    val = mint0;
+    Expect.equals(true, compare(mint0));
+    Expect.equals(true, compare(mint1),
+        'expected two different mints with the same value compare equal');
+  }
+
+  @pragma('vm:never-inline')
+  static void blackhole(void Function() f) {
+    f();
+  }
+
+  void test() {
+    return testImpl((v) {
+      // Note: need multiple context levels in the chain to delay
+      // optimizer forwarding load of [val] and subsequently
+      // clearing null_aware flag on the equality comparison.
+      // Hence the closure capturing [v] below.
+      final result = val != null ? val == v : false;
+      blackhole(() => v);
+      return result;
+    });
+  }
+}
+
+void main() {
+  C().test();
+}
diff --git a/runtime/tests/vm/dart/spawn_uri_aot_test.dart b/runtime/tests/vm/dart/spawn_uri_aot_test.dart
new file mode 100644
index 0000000..44acb3a
--- /dev/null
+++ b/runtime/tests/vm/dart/spawn_uri_aot_test.dart
@@ -0,0 +1,122 @@
+// 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:expect/expect.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+main(List<String> args) async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and gen_snapshot not available on the test device.
+  }
+
+  // These are the tools we need to be available to run on a given platform:
+  if (!await testExecutable(genSnapshot)) {
+    throw "Cannot run test as $genSnapshot not available";
+  }
+  if (!await testExecutable(aotRuntime)) {
+    throw "Cannot run test as $aotRuntime not available";
+  }
+  if (!File(platformDill).existsSync()) {
+    throw "Cannot run test as $platformDill does not exist";
+  }
+
+  await withTempDir('dwarf-flag-test', (String dir) async {
+    File(path.join(dir, 'main.dart')).writeAsStringSync('''
+        import 'dart:isolate';
+        main(List<String> args) async {
+          final rp = ReceivePort();
+          try {
+            await Isolate.spawnUri(Uri.parse(args.single), <String>[], rp.sendPort);
+            final result = await rp.first;
+            if (result != 'hello from spawnee') throw 'failed';
+            print('got spawnee message');
+            print('success');
+          } finally {
+            rp.close();
+          }
+        }
+    ''');
+    for (final basename in ['spawnee', 'spawnee_checked']) {
+      File(path.join(dir, '$basename.dart')).writeAsStringSync('''
+          import 'dart:isolate';
+          main(List<String> args, dynamic sendPort) {
+            print('spawnee started');
+            (sendPort as SendPort).send('hello from spawnee');
+          }
+      ''');
+    }
+
+    // '--enable-asserts' is not available in product mode, so we skip the
+    // negative test.
+    final isProductMode = const bool.fromEnvironment('dart.vm.product');
+
+    for (final basename in ['main', 'spawnee', 'spawnee_checked']) {
+      final script = path.join(dir, '$basename.dart');
+      final scriptDill = path.join(dir, '$basename.dart.dill');
+      final bool checked = basename.endsWith('_checked');
+
+      if (isProductMode && checked) continue;
+
+      await run(genKernel, <String>[
+        if (checked) '--enable-asserts',
+        '--aot',
+        '--platform=$platformDill',
+        '-o',
+        scriptDill,
+        script,
+      ]);
+
+      final scriptAot = path.join(dir, '$basename.dart.dill.so');
+      await run(genSnapshot, <String>[
+        if (checked) '--enable-asserts',
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$scriptAot',
+        scriptDill,
+      ]);
+    }
+
+    // Successful run
+    final result1 = await runOutput(aotRuntime, <String>[
+      path.join(dir, 'main.dart.dill.so'),
+      path.join(dir, 'spawnee.dart.dill.so'),
+    ]);
+    Expect.deepEquals([
+      'spawnee started',
+      'got spawnee message',
+      'success',
+    ], result1);
+
+    if (!isProductMode) {
+      // File exists and is AOT snapshot but was compiled with different flags
+      // (namely --enable-asserts)
+      final result2 = await runHelper(aotRuntime, [
+        path.join(dir, 'main.dart.dill.so'),
+        path.join(dir, 'spawnee_checked.dart.dill.so'),
+      ]);
+      Expect.notEquals(0, result2.exitCode);
+      Expect.contains(
+          'Snapshot not compatible with the current VM configuration',
+          result2.stderr);
+    }
+
+    // File does not exist.
+    final result3 = await runHelper(aotRuntime, [
+      path.join(dir, 'main.dart.dill.so'),
+      path.join(dir, 'does_not_exist.dart.dill.so'),
+    ]);
+    Expect.notEquals(0, result3.exitCode);
+    Expect.contains(
+        'The uri provided to `Isolate.spawnUri()` does not contain a valid AOT '
+        'snapshot',
+        result3.stderr);
+  });
+}
diff --git a/runtime/tests/vm/dart/spawn_uri_from_kernel_blob_script.dart b/runtime/tests/vm/dart/spawn_uri_from_kernel_blob_script.dart
new file mode 100644
index 0000000..43a200d
--- /dev/null
+++ b/runtime/tests/vm/dart/spawn_uri_from_kernel_blob_script.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 "dart:convert";
+import "dart:isolate";
+
+main(List<String> args, SendPort replyPort) {
+  final String encoded = base64.encode(args[0].codeUnits);
+  replyPort.send(String.fromCharCodes(base64.decode(encoded)));
+}
diff --git a/runtime/tests/vm/dart/spawn_uri_from_kernel_blob_test.dart b/runtime/tests/vm/dart/spawn_uri_from_kernel_blob_test.dart
new file mode 100644
index 0000000..72c8793e
--- /dev/null
+++ b/runtime/tests/vm/dart/spawn_uri_from_kernel_blob_test.dart
@@ -0,0 +1,62 @@
+// 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.
+
+// OtherResources=spawn_uri_from_kernel_blob_script.dart
+
+// Test for Isolate.createUriForKernelBlob and subsequent Isolate.spawnUri.
+
+import 'dart:io' show Platform;
+import 'dart:isolate' show Isolate, ReceivePort;
+
+import "package:expect/expect.dart";
+import 'package:front_end/src/api_unstable/vm.dart'
+    show CompilerOptions, DiagnosticMessage, kernelForProgram, NnbdMode;
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:vm/target/vm.dart' show VmTarget;
+
+import 'snapshot_test_helper.dart';
+
+main() async {
+  final sourceUri =
+      Platform.script.resolve('spawn_uri_from_kernel_blob_script.dart');
+  final options = new CompilerOptions()
+    ..target = VmTarget(TargetFlags())
+    ..additionalDills = <Uri>[Uri.file(platformDill)]
+    ..environmentDefines = {}
+    ..nnbdMode = hasSoundNullSafety ? NnbdMode.Strong : NnbdMode.Weak
+    ..onDiagnostic = (DiagnosticMessage message) {
+      Expect.fail(
+          "Compilation error: ${message.plainTextFormatted.join('\n')}");
+    };
+  final Component component =
+      (await kernelForProgram(sourceUri, options))!.component!;
+  final kernelBlob = writeComponentToBytes(component);
+
+  final kernelBlobUri =
+      (Isolate.current as dynamic).createUriForKernelBlob(kernelBlob);
+
+  print('URI: $kernelBlobUri');
+
+  for (int i = 0; i < 2; ++i) {
+    final receivePort = ReceivePort();
+    receivePort.listen((message) {
+      Expect.equals(message, 'Hello');
+      print('ok');
+      receivePort.close();
+    });
+
+    await Isolate.spawnUri(kernelBlobUri, ['Hello'], receivePort.sendPort);
+  }
+
+  (Isolate.current as dynamic).unregisterKernelBlobUri(kernelBlobUri);
+
+  try {
+    await Isolate.spawnUri(kernelBlobUri, ['Hello'], null);
+    Expect.fail(
+        "Isolate.spawnUri didn't complete with error after unregisterKernelBlobUri");
+  } catch (e) {
+    print('Got exception: $e');
+  }
+}
diff --git a/runtime/tests/vm/dart_2/disassemble_aot_test.dart b/runtime/tests/vm/dart_2/disassemble_aot_test.dart
index fd4e55e..3ce7a9e 100644
--- a/runtime/tests/vm/dart_2/disassemble_aot_test.dart
+++ b/runtime/tests/vm/dart_2/disassemble_aot_test.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.
 //
-// OtherResources=use_dwarf_stack_traces_flag_program.dart
+// OtherResources=hello_world_test.dart
 //
 // Tests proper object recognition in disassembler.
 
@@ -42,7 +42,7 @@
 
   await withTempDir('disassemble_aot', (String tempDir) async {
     final cwDir = path.dirname(Platform.script.toFilePath());
-    final script = path.join(cwDir, 'use_dwarf_stack_traces_flag_program.dart');
+    final script = path.join(cwDir, 'hello_world_test.dart');
     final scriptDill = path.join(tempDir, 'out.dill');
 
     // Compile script to Kernel IR.
@@ -56,14 +56,17 @@
 
     // Run the AOT compiler with the disassemble flags set.
     final elfFile = path.join(tempDir, 'aot.snapshot');
-    await Future.wait(<Future>[
-      run(genSnapshot, <String>[
-        '--snapshot-kind=app-aot-elf',
-        '--disassemble',
-        '--always_generate_trampolines_for_testing',
-        '--elf=$elfFile',
-        scriptDill,
-      ]),
+    await run(genSnapshot, <String>[
+      '--disassemble',
+      '--disassemble_stubs',
+      '--always_generate_trampolines_for_testing',
+      '--snapshot-kind=app-aot-elf',
+      '--elf=$elfFile',
+      scriptDill
     ]);
+
+    // Run the AOT runtime with the disassemble flags set.
+    await run(
+        aotRuntime, <String>['--disassemble', '--disassemble_stubs', elfFile]);
   });
 }
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
new file mode 100644
index 0000000..8c7583d
--- /dev/null
+++ b/runtime/tests/vm/dart_2/finalizer/weak_reference_run_gc_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
+
+// ignore: import_internal_library, unused_import
+import 'dart:_internal';
+
+import 'package:expect/expect.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!");
+  });
+}
+
+void testWeakReferenceTypeArgument() {
+  final object = Nonce(23);
+  final weakRef = WeakReference(object);
+  Expect.type<WeakReference<Nonce>>(weakRef);
+}
+
+/// Never inline to ensure `object` becomes unreachable.
+@pragma('vm:never-inline')
+WeakReference<Nonce> makeWeakRef() {
+  final object = Nonce(23);
+  final weakRef = WeakReference(object);
+  // Left to right argument evaluation: evaluate weakRef.target first.
+  Expect.equals(weakRef.target, object);
+  return weakRef;
+}
+
+void testWeakReference() {
+  final weakRef = makeWeakRef();
+
+  print('do gc');
+  triggerGc();
+  print('gc done');
+
+  // The weak reference should not target anything anymore.
+  Expect.isNull(weakRef.target);
+
+  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_98466_il_test.dart b/runtime/tests/vm/dart_2/flutter_regress_98466_il_test.dart
new file mode 100644
index 0000000..faf771f
--- /dev/null
+++ b/runtime/tests/vm/dart_2/flutter_regress_98466_il_test.dart
@@ -0,0 +1,119 @@
+// 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:vm/testing/il_matchers.dart';
+
+// This test creates a phi which has multiple inputs referring to the same
+// AllocateObject instruction. When delaying this allocation we need to
+// look at all of these inputs and not just at the first one.
+
+bool shouldPrint = false;
+
+@pragma('vm:never-inline')
+void blackhole(Object v) {
+  if (shouldPrint) {
+    print(v);
+  }
+}
+
+class X {
+  dynamic field;
+
+  @override
+  String toString() => 'X($field)';
+}
+
+// This function is used to create a phi with three arguments two of which
+// point to the same definition: original value of [v].
+@pragma('vm:prefer-inline')
+X decisionTree(bool a, bool b, X v) {
+  if (a) {
+    v.field = 10;
+    blackhole(v);
+    return v;
+  } else if (b) {
+    return v;
+  } else {
+    return X();
+  }
+}
+
+@pragma('vm:never-inline')
+@pragma('vm:testing:print-flow-graph')
+dynamic testDelayAllocationsUnsunk(bool a, bool b) {
+  // Allocation is expected to be unsunk because no use dominates all other
+  // uses.
+  var v = X();
+  if (a) {
+    blackhole(b);
+  }
+  v = decisionTree(a, b, v);
+  blackhole(v);
+  return v.field;
+}
+
+@pragma('vm:never-inline')
+@pragma('vm:testing:print-flow-graph')
+dynamic testDelayAllocationsSunk(bool a, bool b) {
+  var v = X();
+  if (a) {
+    blackhole(b);
+  }
+  v.field = 42; // Allocation is expected to be sunk past if to this use.
+  v = decisionTree(a, b, v);
+  blackhole(v);
+  return v.field;
+}
+
+List<dynamic> testAllVariants(dynamic Function(bool, bool) f) {
+  return [
+    for (var a in [true, false])
+      for (var b in [true, false]) f(a, b),
+  ];
+}
+
+void main(List<String> args) {
+  shouldPrint = args.contains("shouldPrint");
+
+  Expect.listEquals(
+      [10, 10, null, null], testAllVariants(testDelayAllocationsUnsunk));
+  Expect.listEquals(
+      [10, 10, 42, null], testAllVariants(testDelayAllocationsSunk));
+}
+
+void matchIL$testDelayAllocationsUnsunk(FlowGraph afterDelayAllocations) {
+  afterDelayAllocations.dump();
+  afterDelayAllocations.match([
+    match.block('Graph'),
+    match.block('Function', [
+      // Allocation must stay unsunk
+      match.AllocateObject()
+    ])
+  ]);
+}
+
+void matchIL$testDelayAllocationsSunk(FlowGraph afterDelayAllocations) {
+  afterDelayAllocations.dump();
+  afterDelayAllocations.match([
+    match.block('Graph'),
+    match.block('Function', [
+      // Allocation must be sunk from this block.
+      match.Branch(match.StrictCompare(match.any, match.any, kind: '==='),
+          ifTrue: 'B3', ifFalse: 'B4'),
+    ]),
+    'B3' <<
+        match.block('Target', [
+          match.Goto('B5'),
+        ]),
+    'B4' <<
+        match.block('Target', [
+          match.Goto('B5'),
+        ]),
+    'B5' <<
+        match.block('Join', [
+          match.AllocateObject(),
+        ]),
+  ]);
+}
diff --git a/runtime/tests/vm/dart_2/invisible_function_pragma_test.dart b/runtime/tests/vm/dart_2/invisible_function_pragma_test.dart
new file mode 100644
index 0000000..6e0d7cf
--- /dev/null
+++ b/runtime/tests/vm/dart_2/invisible_function_pragma_test.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.
+
+// @dart = 2.9
+
+import 'causal_stacks/utils.dart';
+
+main() async {
+  StackTrace trace = StackTrace.empty;
+
+  A.visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      new A.visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  A.invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visible',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisible(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  visibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      visibleClosure.visibleInner',
+    r'^#2      visibleClosure',
+    r'^#3      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+
+  invisibleClosure(() => trace = StackTrace.current);
+  await assertStack([
+    r'^#0      main.<anonymous closure>',
+    r'^#1      invisibleClosure',
+    r'^#2      main',
+    IGNORE_REMAINING_STACK,
+  ], trace);
+}
+
+class A {
+  A.visible(void Function() fun) {
+    fun();
+  }
+
+  @pragma('vm:invisible')
+  A.invisible(void Function() fun) {
+    fun();
+  }
+}
+
+void visible(void Function() fun) => fun();
+
+@pragma('vm:invisible')
+void invisible(void Function() fun) => fun();
+
+void visibleClosure(void Function() fun) {
+  visibleInner() {
+    fun();
+  }
+
+  visibleInner();
+}
+
+void invisibleClosure(void Function() fun) {
+  @pragma('vm:invisible')
+  invisibleInner() {
+    fun();
+  }
+
+  invisibleInner();
+}
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 09aa46f..1843f0c 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
@@ -8,6 +8,8 @@
 // VMOptions=--enable-fast-object-copy
 // VMOptions=--no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
 // VMOptions=--enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
+// VMOptions=--no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer --deterministic
+// VMOptions=--enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer --deterministic
 
 // The tests in this file are particularly for an implementation that tries to
 // allocate the entire graph in BFS order using a fast new space allocation
@@ -244,6 +246,7 @@
     await testSlowOnly();
 
     await testWeakProperty();
+    await testWeakReference();
 
     await testForbiddenClosures();
   }
@@ -692,6 +695,69 @@
     }
   }
 
+  Future testWeakReference() async {
+    print('testWeakReference');
+
+    final object1 = Nonce(1);
+    final weakRef1 = WeakReference(object1);
+    final object2 = Nonce(2);
+    final weakRef2 = WeakReference(object2);
+    final object3 = Nonce(3);
+    final weakRef3 = WeakReference(object3);
+    final object4 = Nonce(4);
+    final weakRef4 = WeakReference(object4);
+
+    final key3 = Object();
+    final expando3 = Expando()..[key3] = object3;
+    final key4 = Object();
+    final expando4 = Expando()..[key4] = object4;
+
+    {
+      final result = await sendReceive([
+        weakRef1, // Does not have its target inluded.
+        weakRef2, // Has its target included later than itself.
+        object2,
+        weakRef3, // Does not have its target inluded.
+        expando3,
+        weakRef4, // Has its target included due to expando.
+        expando4,
+        key4,
+      ]);
+
+      final weakRef1copy = result[0] as WeakReference<Nonce>;
+      final weakRef2copy = result[1] as WeakReference<Nonce>;
+      final weakRef3copy = result[3] as WeakReference<Nonce>;
+      final weakRef4copy = result[5] as WeakReference<Nonce>;
+      Expect.isNull(weakRef1copy.target);
+      Expect.equals(weakRef2.target?.value, weakRef2copy.target?.value);
+      Expect.isNull(weakRef3copy.target);
+      Expect.equals(weakRef4.target?.value, weakRef4copy.target?.value);
+    }
+
+    {
+      final result = await sendReceive([
+        weakRef1, // Does not have its target inluded.
+        weakRef2, // Has its target included later than itself.
+        notAllocatableInTLAB,
+        object2,
+        weakRef3, // Does not have its target inluded.
+        expando3,
+        weakRef4, // Has its target included due to expando.
+        expando4,
+        key4,
+      ]);
+
+      final weakRef1copy = result[0] as WeakReference<Nonce>;
+      final weakRef2copy = result[1] as WeakReference<Nonce>;
+      final weakRef3copy = result[4] as WeakReference<Nonce>;
+      final weakRef4copy = result[6] as WeakReference<Nonce>;
+      Expect.isNull(weakRef1copy.target);
+      Expect.equals(weakRef2.target?.value, weakRef2copy.target?.value);
+      Expect.isNull(weakRef3copy.target);
+      Expect.equals(weakRef4.target?.value, weakRef4copy.target?.value);
+    }
+  }
+
   Future testForbiddenClosures() async {
     print('testForbiddenClosures');
     for (final closure in nonCopyableClosures) {
@@ -707,6 +773,14 @@
   }
 }
 
+class Nonce {
+  final int value;
+
+  Nonce(this.value);
+
+  String toString() => 'Nonce($value)';
+}
+
 main() async {
   await SendReceiveTest().run();
 }
diff --git a/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart b/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart
new file mode 100644
index 0000000..8529015
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart
@@ -0,0 +1,33 @@
+// 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 generic functions are spawned with correct type arguments
+
+// @dart = 2.9
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void func<T>(T o) {
+  print("$o:$T");
+  Expect.equals("int", "$T");
+}
+
+void call4(dynamic f) {
+  f(4);
+}
+
+void main() async {
+  void Function(int) to = func;
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(to, 3, onExit: rp.sendPort);
+    await rp.first;
+  }
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(call4, to, onExit: rp.sendPort);
+    await rp.first;
+  }
+}
diff --git a/runtime/tests/vm/dart_2/regress_big_regexp_test.dart b/runtime/tests/vm/dart_2/regress_big_regexp_test.dart
index 1ef005d..69729d1 100644
--- a/runtime/tests/vm/dart_2/regress_big_regexp_test.dart
+++ b/runtime/tests/vm/dart_2/regress_big_regexp_test.dart
@@ -2,6 +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.
 
+// VMOptions=--intrinsify
+// VMOptions=--no_intrinsify
+
 // @dart = 2.9
 
 // Verifies that RegExp compilation doesn't crash on a huge source string.
diff --git a/runtime/tests/vm/dart_2/spawn_uri_aot_test.dart b/runtime/tests/vm/dart_2/spawn_uri_aot_test.dart
new file mode 100644
index 0000000..ca4bd6a
--- /dev/null
+++ b/runtime/tests/vm/dart_2/spawn_uri_aot_test.dart
@@ -0,0 +1,124 @@
+// 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:io";
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as path;
+
+import 'use_flag_test_helper.dart';
+
+main(List<String> args) async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and gen_snapshot not available on the test device.
+  }
+
+  // These are the tools we need to be available to run on a given platform:
+  if (!await testExecutable(genSnapshot)) {
+    throw "Cannot run test as $genSnapshot not available";
+  }
+  if (!await testExecutable(aotRuntime)) {
+    throw "Cannot run test as $aotRuntime not available";
+  }
+  if (!File(platformDill).existsSync()) {
+    throw "Cannot run test as $platformDill does not exist";
+  }
+
+  await withTempDir('dwarf-flag-test', (String dir) async {
+    File(path.join(dir, 'main.dart')).writeAsStringSync('''
+        import 'dart:isolate';
+        main(List<String> args) async {
+          final rp = ReceivePort();
+          try {
+            await Isolate.spawnUri(Uri.parse(args.single), <String>[], rp.sendPort);
+            final result = await rp.first;
+            if (result != 'hello from spawnee') throw 'failed';
+            print('got spawnee message');
+            print('success');
+          } finally {
+            rp.close();
+          }
+        }
+    ''');
+    for (final basename in ['spawnee', 'spawnee_checked']) {
+      File(path.join(dir, '$basename.dart')).writeAsStringSync('''
+          import 'dart:isolate';
+          main(List<String> args, dynamic sendPort) {
+            print('spawnee started');
+            (sendPort as SendPort).send('hello from spawnee');
+          }
+      ''');
+    }
+
+    // '--enable-asserts' is not available in product mode, so we skip the
+    // negative test.
+    final isProductMode = const bool.fromEnvironment('dart.vm.product');
+
+    for (final basename in ['main', 'spawnee', 'spawnee_checked']) {
+      final script = path.join(dir, '$basename.dart');
+      final scriptDill = path.join(dir, '$basename.dart.dill');
+      final bool checked = basename.endsWith('_checked');
+
+      if (isProductMode && checked) continue;
+
+      await run(genKernel, <String>[
+        if (checked) '--enable-asserts',
+        '--aot',
+        '--platform=$platformDill',
+        '-o',
+        scriptDill,
+        script,
+      ]);
+
+      final scriptAot = path.join(dir, '$basename.dart.dill.so');
+      await run(genSnapshot, <String>[
+        if (checked) '--enable-asserts',
+        '--snapshot-kind=app-aot-elf',
+        '--elf=$scriptAot',
+        scriptDill,
+      ]);
+    }
+
+    // Successful run
+    final result1 = await runOutput(aotRuntime, <String>[
+      path.join(dir, 'main.dart.dill.so'),
+      path.join(dir, 'spawnee.dart.dill.so'),
+    ]);
+    Expect.deepEquals([
+      'spawnee started',
+      'got spawnee message',
+      'success',
+    ], result1);
+
+    if (!isProductMode) {
+      // File exists and is AOT snapshot but was compiled with different flags
+      // (namely --enable-asserts)
+      final result2 = await runHelper(aotRuntime, [
+        path.join(dir, 'main.dart.dill.so'),
+        path.join(dir, 'spawnee_checked.dart.dill.so'),
+      ]);
+      Expect.notEquals(0, result2.exitCode);
+      Expect.contains(
+          'Snapshot not compatible with the current VM configuration',
+          result2.stderr);
+    }
+
+    // File does not exist.
+    final result3 = await runHelper(aotRuntime, [
+      path.join(dir, 'main.dart.dill.so'),
+      path.join(dir, 'does_not_exist.dart.dill.so'),
+    ]);
+    Expect.notEquals(0, result3.exitCode);
+    Expect.contains(
+        'The uri provided to `Isolate.spawnUri()` does not contain a valid AOT '
+        'snapshot',
+        result3.stderr);
+  });
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index fdb96d1..5fe1fbf 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -96,6 +96,7 @@
 cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Skip
 dart/b162922506_test: SkipByDesign # Only run in JIT
 dart/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
+dart/spawn_uri_from_kernel_blob_test: SkipByDesign # Only run in JIT.
 dart_2/b162922506_test: SkipByDesign # Only run in JIT
 dart_2/entrypoints/jit/*: SkipByDesign # These tests should only run on JIT.
 dart_2/isolates/reload_*: SkipByDesign # These tests only run on normal JIT.
@@ -180,7 +181,10 @@
 dart/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
 dart_2/transferable_test: Skip # This is performance test and somehow debug win ia32 bot's performance is unpredictable
 
-[ $arch != simarm && $arch != simarm64 && $arch != simarm64c && $compiler == dartk && $hot_reload ]
+[ $arch == ia32 && ($nnbd == strong || $nnbd == weak) ]
+dart/type_casts_with_null_safety_autodetection_test: Pass, Slow # Uses --optimization-counter-threshold=10 without a kernel service snapshot.
+
+[ $arch != simarm && $arch != simarm64 && $arch != simarm64c && $arch != simriscv32 && $arch != simriscv64 && $compiler == dartk && $hot_reload ]
 dart/data_uri_import_test/base64: Crash
 dart/data_uri_import_test/nocharset: Crash
 dart/data_uri_import_test/nomime: Crash
@@ -211,7 +215,7 @@
 # Enabling of dartk for sim{arm,arm64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
-[ $compiler == dartk && $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && $mode == debug && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 cc/StackTraceMallocHookLengthTest: Fail # Please triage.
 
 [ $compiler == dartk && $mode == product && $runtime == vm ]
@@ -245,7 +249,7 @@
 [ $compiler == dartk && $system == windows ]
 cc/IsolateReload_LibraryLookup: Fail, Crash
 
-[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 dart/appjit*: SkipSlow # DFE too slow
 dart/b162922506_test: SkipSlow # Generates large input file
 dart/data_uri_spawn_test: Skip # Please triage.
@@ -280,15 +284,14 @@
 dart_2/snapshot_depfile_test: SkipByDesign # Test needs to run from source
 
 [ $compiler == dartkp && $system == windows ]
-dart/finalizer/weak_reference_run_gc_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
 dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
 dart_2/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
 
-[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 dart/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
 dart_2/causal_stacks/async_throws_stack_lazy_non_symbolic_test: Pass, Slow
 
-[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $builder_tag == tsan) ]
+[ $compiler == dartkp && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $builder_tag == tsan) ]
 dart/regress_45898_test: Pass, Slow
 dart_2/regress_45898_test: Pass, Slow
 
@@ -318,14 +321,14 @@
 [ $system != fuchsia && ($arch != x64 || $system != linux) ]
 cc/CodeExecutability: SkipByDesign # --dual-map-code not supported on non-Linux/Fuchsia
 
-[ $arch == arm || $arch == arm64 || $builder_tag == crossword || $builder_tag == crossword_ast || $compiler != dartkp || $system == linux && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $arch == arm || $arch == arm64 || $builder_tag == crossword || $builder_tag == crossword_ast || $compiler != dartkp || $system == linux && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 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.
 
 # 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.
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 cc/DartAPI_NativeFieldAccess: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
 cc/DartAPI_NativeFieldAccess_Throws: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
 cc/Dart_SetFfiNativeResolver: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
@@ -357,7 +360,6 @@
 cc/Profiler_TrivialRecordAllocation: SkipByDesign
 cc/Profiler_TypedArrayAllocation: SkipByDesign
 cc/Service_Profile: SkipByDesign
-dart/finalizer/weak_reference_run_gc_test: SkipByDesign # https://dartbug.com/37299 FFI not yet supported on simulators.
 dart/isolates/dart_api_create_lightweight_isolate_test: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
 dart/isolates/thread_pool_test: SkipByDesign # https://dartbug.com/37299 Test uses dart:ffi which is not supported on simulators.
 dart/regress_41971_test: SkipByDesign # https://dartbug.com/37299 dart:ffi is not supported on simulator
@@ -373,15 +375,15 @@
 dart_2/unboxed_param_tear_off_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
 dart_2/unboxed_param_test: SkipByDesign # https://dartbug.com/37299 FFI helper not supported on simulator
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $system != macos ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $system != macos ]
 dart/thread_priority_macos_test: SkipByDesign
 dart_2/thread_priority_macos_test: SkipByDesign
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $system != windows ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $system != windows ]
 dart/thread_priority_windows_test: SkipByDesign
 dart_2/thread_priority_windows_test: SkipByDesign
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $system != android && $system != linux ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $system != android && $system != linux ]
 dart/thread_priority_linux_test: SkipByDesign
 dart_2/thread_priority_linux_test: SkipByDesign
 
@@ -427,7 +429,7 @@
 # as that would involve running CFE (the front end) in simulator mode
 # to compile the URI file specified in spawnURI code.
 # These Isolate tests that use spawnURI are hence skipped on purpose.
-[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 dart/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
 dart/isolates/send_object_to_spawn_uri_isolate_test: SkipByDesign # uses spawnUri
 dart/issue32950_test: SkipByDesign # uses spawnUri.
diff --git a/runtime/tools/dartfuzz/gen_api_table.dart b/runtime/tools/dartfuzz/gen_api_table.dart
index 2eb9f52..784dfcb 100644
--- a/runtime/tools/dartfuzz/gen_api_table.dart
+++ b/runtime/tools/dartfuzz/gen_api_table.dart
@@ -382,7 +382,7 @@
           protoString(null, function.parameters));
     }
   }
-  for (var classElement in unit.types) {
+  for (var classElement in unit.classes) {
     if (classElement.isPublic) {
       visitClass(classElement);
     }
diff --git a/runtime/tools/dartfuzz/gen_type_table.dart b/runtime/tools/dartfuzz/gen_type_table.dart
index a8e0868..da29e56 100644
--- a/runtime/tools/dartfuzz/gen_type_table.dart
+++ b/runtime/tools/dartfuzz/gen_type_table.dart
@@ -1364,7 +1364,7 @@
   // classes. Note that `types` only returns classes. You can use
   // `mixins` to visit mixins, `enums` to visit enum, `functionTypeAliases`
   // to visit typedefs, etc.
-  for (var classElement in unit.types) {
+  for (var classElement in unit.classes) {
     if (classElement.isPublic) {
       // Hack: Filter out some difficult types, abstract types and types that
       // have methods with abstract type parameters.
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index fd5ab028..f694613b 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -4567,10 +4567,11 @@
 };
 #endif  // !DART_PRECOMPILED_RUNTIME
 
-class MintDeserializationCluster : public DeserializationCluster {
+class MintDeserializationCluster
+    : public AbstractInstanceDeserializationCluster {
  public:
   explicit MintDeserializationCluster(bool is_canonical)
-      : DeserializationCluster("int", is_canonical) {}
+      : AbstractInstanceDeserializationCluster("int", is_canonical) {}
   ~MintDeserializationCluster() {}
 
   void ReadAlloc(Deserializer* d) {
@@ -4595,31 +4596,6 @@
   }
 
   void ReadFill(Deserializer* d, bool primary) {}
-
-#if defined(DART_PRECOMPILED_RUNTIME)
-  void PostLoad(Deserializer* d, const Array& refs, bool primary) {
-    if (!primary && is_canonical()) {
-      const Class& mint_cls = Class::Handle(
-          d->zone(), d->isolate_group()->object_store()->mint_class());
-      Object& number = Object::Handle(d->zone());
-      Mint& number2 = Mint::Handle(d->zone());
-      SafepointMutexLocker ml(
-          d->isolate_group()->constant_canonicalization_mutex());
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
-        number = refs.At(i);
-        if (!number.IsMint()) continue;
-        number2 =
-            mint_cls.LookupCanonicalMint(d->zone(), Mint::Cast(number).value());
-        if (number2.IsNull()) {
-          number.SetCanonical();
-          mint_cls.InsertCanonicalMint(d->zone(), Mint::Cast(number));
-        } else {
-          refs.SetAt(i, number2);
-        }
-      }
-    }
-  }
-#endif
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -4660,10 +4636,11 @@
 };
 #endif  // !DART_PRECOMPILED_RUNTIME
 
-class DoubleDeserializationCluster : public DeserializationCluster {
+class DoubleDeserializationCluster
+    : public AbstractInstanceDeserializationCluster {
  public:
   explicit DoubleDeserializationCluster(bool is_canonical)
-      : DeserializationCluster("double", is_canonical) {}
+      : AbstractInstanceDeserializationCluster("double", is_canonical) {}
   ~DoubleDeserializationCluster() {}
 
   void ReadAlloc(Deserializer* d) {
@@ -4678,30 +4655,6 @@
       dbl->untag()->value_ = d->Read<double>();
     }
   }
-
-#if defined(DART_PRECOMPILED_RUNTIME)
-  void PostLoad(Deserializer* d, const Array& refs, bool primary) {
-    if (!primary && is_canonical()) {
-      auto Z = d->zone();
-      auto isolate_group = d->isolate_group();
-      const Class& cls =
-          Class::Handle(Z, isolate_group->object_store()->double_class());
-      SafepointMutexLocker ml(isolate_group->constant_canonicalization_mutex());
-      Double& dbl = Double::Handle(Z);
-      Double& dbl2 = Double::Handle(Z);
-      for (intptr_t i = start_index_; i < stop_index_; i++) {
-        dbl ^= refs.At(i);
-        dbl2 = cls.LookupCanonicalDouble(Z, dbl.value());
-        if (dbl2.IsNull()) {
-          dbl.SetCanonical();
-          cls.InsertCanonicalDouble(Z, dbl);
-        } else {
-          refs.SetAt(i, dbl2);
-        }
-      }
-    }
-  }
-#endif
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -5806,6 +5759,7 @@
                             DECLARE_OBJECT_STORE_FIELD,
                             DECLARE_OBJECT_STORE_FIELD,
                             DECLARE_OBJECT_STORE_FIELD,
+                            DECLARE_OBJECT_STORE_FIELD,
                             DECLARE_OBJECT_STORE_FIELD)
 #undef DECLARE_OBJECT_STORE_FIELD
 };
diff --git a/runtime/vm/base_isolate.h b/runtime/vm/base_isolate.h
index a8c09ee..0bfd061 100644
--- a/runtime/vm/base_isolate.h
+++ b/runtime/vm/base_isolate.h
@@ -21,12 +21,6 @@
 class BaseIsolate {
  public:
 #if defined(DEBUG)
-  void AssertCurrentThreadIsMutator() const;
-#else
-  void AssertCurrentThreadIsMutator() const {}
-#endif  // DEBUG
-
-#if defined(DEBUG)
   static void AssertCurrent(BaseIsolate* isolate);
 #endif
 
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 20a2d74e..df65a0d 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -139,8 +139,6 @@
   V(String_toUpperCase, 1)                                                     \
   V(String_concatRange, 3)                                                     \
   V(Math_doublePow, 2)                                                         \
-  V(Random_nextState, 1)                                                       \
-  V(Random_setupSeed, 1)                                                       \
   V(Random_initialSeed, 0)                                                     \
   V(SecureRandom_getBytes, 1)                                                  \
   V(DateTime_currentTimeMicros, 0)                                             \
@@ -152,8 +150,6 @@
   V(Error_throwWithStackTrace, 2)                                              \
   V(StackTrace_current, 0)                                                     \
   V(TypeError_throwNew, 4)                                                     \
-  V(FallThroughError_throwNew, 1)                                              \
-  V(AbstractClassInstantiationError_throwNew, 2)                               \
   V(Stopwatch_now, 0)                                                          \
   V(Stopwatch_frequency, 0)                                                    \
   V(Timeline_getNextAsyncId, 0)                                                \
@@ -308,6 +304,8 @@
   V(Isolate_getCurrentRootUriStr, 0)                                           \
   V(Isolate_getDebugName, 1)                                                   \
   V(Isolate_getPortAndCapabilitiesOfCurrentIsolate, 0)                         \
+  V(Isolate_registerKernelBlob, 1)                                             \
+  V(Isolate_unregisterKernelBlob, 1)                                           \
   V(Isolate_sendOOB, 2)                                                        \
   V(Isolate_spawnFunction, 10)                                                 \
   V(Isolate_spawnUri, 12)                                                      \
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 587b538..dc432e3 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -265,6 +265,8 @@
   ASSERT_EQUAL(ImmutableArray::InstanceSize(), cls.host_instance_size());
   cls = object_store->weak_property_class();
   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->linked_hash_map_class();
   ASSERT_EQUAL(LinkedHashMap::InstanceSize(), cls.host_instance_size());
   cls = object_store->immutable_linked_hash_map_class();
diff --git a/runtime/vm/class_id.h b/runtime/vm/class_id.h
index 6edd6b9..93e1979 100644
--- a/runtime/vm/class_id.h
+++ b/runtime/vm/class_id.h
@@ -93,6 +93,7 @@
   V(StackTrace)                                                                \
   V(RegExp)                                                                    \
   V(WeakProperty)                                                              \
+  V(WeakReference)                                                             \
   V(MirrorReference)                                                           \
   V(FutureOr)                                                                  \
   V(UserTag)                                                                   \
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 756c8b1..e1830d1 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -871,17 +871,6 @@
               function.token_pos().ToCString(),
               Function::KindToCString(function.kind()));
   }
-  if (function.SourceSize() >= FLAG_huge_method_cutoff_in_tokens) {
-    THR_Print(
-        "Warning: %s from %s is too large. Some optimizations have been "
-        "disabled, and the compiler might run out of memory. "
-        "Consider refactoring this code into smaller components.\n",
-        function.QualifiedUserVisibleNameCString(),
-        String::Handle(
-            Z, Library::Handle(Z, Class::Handle(Z, function.Owner()).library())
-                   .url())
-            .ToCString());
-  }
 
   ASSERT(!function.is_abstract());
 
@@ -2482,28 +2471,11 @@
           }
         }
       }
-      intptr_t cid = cls.id();
-      if (cid == kDoubleCid) {
-        // Rehash.
-        cls.set_constants(Object::null_array());
-        for (intptr_t j = 0; j < retained_constants.Length(); j++) {
-          constant ^= retained_constants.At(j);
-          cls.InsertCanonicalDouble(Z, Double::Cast(constant));
-        }
-      } else if (cid == kMintCid) {
-        // Rehash.
-        cls.set_constants(Object::null_array());
-        for (intptr_t j = 0; j < retained_constants.Length(); j++) {
-          constant ^= retained_constants.At(j);
-          cls.InsertCanonicalMint(Z, Mint::Cast(constant));
-        }
-      } else {
-        // Rehash.
-        cls.set_constants(Object::null_array());
-        for (intptr_t j = 0; j < retained_constants.Length(); j++) {
-          constant ^= retained_constants.At(j);
-          cls.InsertCanonicalConstant(Z, constant);
-        }
+      // Rehash.
+      cls.set_constants(Object::null_array());
+      for (intptr_t j = 0; j < retained_constants.Length(); j++) {
+        constant ^= retained_constants.At(j);
+        cls.InsertCanonicalConstant(Z, constant);
       }
 
       if (retained_constants.Length() > 0) {
diff --git a/runtime/vm/compiler/asm_intrinsifier.h b/runtime/vm/compiler/asm_intrinsifier.h
index d4e45e7..6696b4a 100644
--- a/runtime/vm/compiler/asm_intrinsifier.h
+++ b/runtime/vm/compiler/asm_intrinsifier.h
@@ -31,10 +31,6 @@
  private:
   friend class Intrinsifier;
 
-  // The "_A" value used in the intrinsification of
-  // `runtime/lib/math_patch.dart:_Random._nextState()`
-  static const int64_t kRandomAValue = 0xffffda61;
-
 #define DECLARE_FUNCTION(class_name, function_name, enum_name, fp)             \
   static void enum_name(Assembler* assembler, Label* normal_ir_body);
   ALL_INTRINSICS_LIST(DECLARE_FUNCTION)
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 77cb516..3b6b707 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -26,41 +26,6 @@
 
 #define __ assembler->
 
-// Allocate a GrowableObjectArray:: using the backing array specified.
-// On stack: type argument (+1), data (+0).
-void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  // The newly allocated object is returned in R0.
-  const intptr_t kTypeArgumentsOffset = 1 * target::kWordSize;
-  const intptr_t kArrayOffset = 0 * target::kWordSize;
-
-  // Try allocating in new space.
-  const Class& cls = GrowableObjectArrayClass();
-  __ TryAllocate(cls, normal_ir_body, Assembler::kFarJump, R0, R1);
-
-  // Store backing array object in growable array object.
-  __ ldr(R1, Address(SP, kArrayOffset));  // Data argument.
-  // R0 is new, no barrier needed.
-  __ StoreIntoObjectNoBarrier(
-      R0, FieldAddress(R0, target::GrowableObjectArray::data_offset()), R1);
-
-  // R0: new growable array object start as a tagged pointer.
-  // Store the type argument field in the growable array object.
-  __ ldr(R1, Address(SP, kTypeArgumentsOffset));  // Type argument.
-  __ StoreIntoObjectNoBarrier(
-      R0,
-      FieldAddress(R0, target::GrowableObjectArray::type_arguments_offset()),
-      R1);
-
-  // Set the length field in the growable array object to 0.
-  __ LoadImmediate(R1, 0);
-  __ StoreIntoObjectNoBarrier(
-      R0, FieldAddress(R0, target::GrowableObjectArray::length_offset()), R1);
-  __ Ret();  // Returns the newly allocated object in R0.
-
-  __ Bind(normal_ir_body);
-}
-
 // Loads args from stack into R0 and R1
 // Tests if they are smis, jumps to label not_smi if not.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
@@ -302,10 +267,10 @@
   // R4 = n ~/ _DIGIT_BITS
   __ Asr(R4, R3, Operand(5));
   // R8 = &x_digits[0]
-  __ add(R8, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R8, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
   // R6 = &r_digits[1]
   __ add(R6, R2,
-         Operand(target::TypedData::data_offset() - kHeapObjectTag +
+         Operand(target::TypedData::payload_offset() - kHeapObjectTag +
                  kBytesPerBigIntDigit));
   // R2 = &x_digits[x_used]
   __ add(R2, R8, Operand(R0, LSL, 1));
@@ -342,9 +307,9 @@
   // R4 = n ~/ _DIGIT_BITS
   __ Asr(R4, R3, Operand(5));
   // R6 = &r_digits[0]
-  __ add(R6, R2, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R6, R2, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
   // R2 = &x_digits[n ~/ _DIGIT_BITS]
-  __ add(R2, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R2, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
   __ add(R2, R2, Operand(R4, LSL, 2));
   // R8 = &r_digits[x_used - n ~/ _DIGIT_BITS - 1]
   __ add(R4, R4, Operand(1));
@@ -382,17 +347,17 @@
   // R0 = used, R1 = digits
   __ ldrd(R0, R1, SP, 3 * target::kWordSize);
   // R1 = &digits[0]
-  __ add(R1, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R1, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R2 = a_used, R3 = a_digits
   __ ldrd(R2, R3, SP, 1 * target::kWordSize);
   // R3 = &a_digits[0]
-  __ add(R3, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R3, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R8 = r_digits
   __ ldr(R8, Address(SP, 0 * target::kWordSize));
   // R8 = &r_digits[0]
-  __ add(R8, R8, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R8, R8, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R2 = &digits[a_used >> 1], a_used is Smi.
   __ add(R2, R1, Operand(R2, LSL, 1));
@@ -442,17 +407,17 @@
   // R0 = used, R1 = digits
   __ ldrd(R0, R1, SP, 3 * target::kWordSize);
   // R1 = &digits[0]
-  __ add(R1, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R1, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R2 = a_used, R3 = a_digits
   __ ldrd(R2, R3, SP, 1 * target::kWordSize);
   // R3 = &a_digits[0]
-  __ add(R3, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R3, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R8 = r_digits
   __ ldr(R8, Address(SP, 0 * target::kWordSize));
   // R8 = &r_digits[0]
-  __ add(R8, R8, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R8, R8, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R2 = &digits[a_used >> 1], a_used is Smi.
   __ add(R2, R1, Operand(R2, LSL, 1));
@@ -522,7 +487,7 @@
   // R3 = x, no_op if x == 0
   __ ldrd(R0, R1, SP, 5 * target::kWordSize);  // R0 = xi as Smi, R1 = x_digits.
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ ldr(R3, FieldAddress(R1, target::TypedData::data_offset()));
+  __ ldr(R3, FieldAddress(R1, target::TypedData::payload_offset()));
   __ tst(R3, Operand(R3));
   __ b(&done, EQ);
 
@@ -534,12 +499,12 @@
   // R4 = mip = &m_digits[i >> 1]
   __ ldrd(R0, R1, SP, 3 * target::kWordSize);  // R0 = i as Smi, R1 = m_digits.
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ add(R4, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R4, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R9 = ajp = &a_digits[j >> 1]
   __ ldrd(R0, R1, SP, 1 * target::kWordSize);  // R0 = j as Smi, R1 = a_digits.
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ add(R9, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R9, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R1 = c = 0
   __ mov(R1, Operand(0));
@@ -624,7 +589,7 @@
   // R4 = xip = &x_digits[i >> 1]
   __ ldrd(R2, R3, SP, 2 * target::kWordSize);  // R2 = i as Smi, R3 = x_digits
   __ add(R3, R3, Operand(R2, LSL, 1));
-  __ add(R4, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R4, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R3 = x = *xip++, return if x == 0
   Label x_zero;
@@ -635,7 +600,7 @@
   // R6 = ajp = &a_digits[i]
   __ ldr(R1, Address(SP, 1 * target::kWordSize));  // a_digits
   __ add(R1, R1, Operand(R2, LSL, 2));             // j == 2*i, i is Smi.
-  __ add(R6, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R6, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R8:R0 = t = x*x + *ajp
   __ ldr(R0, Address(R6, 0));
@@ -727,19 +692,19 @@
   __ ldr(R4, Address(SP, 2 * target::kWordSize));  // args
 
   // R3 = rho = args[2]
-  __ ldr(R3, FieldAddress(R4, target::TypedData::data_offset() +
+  __ ldr(R3, FieldAddress(R4, target::TypedData::payload_offset() +
                                   2 * kBytesPerBigIntDigit));
 
   // R2 = digits[i >> 1]
   __ ldrd(R0, R1, SP, 0 * target::kWordSize);  // R0 = i as Smi, R1 = digits
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ ldr(R2, FieldAddress(R1, target::TypedData::data_offset()));
+  __ ldr(R2, FieldAddress(R1, target::TypedData::payload_offset()));
 
   // R1:R0 = t = rho*d
   __ umull(R0, R1, R2, R3);
 
   // args[4] = t mod DIGIT_BASE = low32(t)
-  __ str(R0, FieldAddress(R4, target::TypedData::data_offset() +
+  __ str(R0, FieldAddress(R4, target::TypedData::payload_offset() +
                                   4 * kBytesPerBigIntDigit));
 
   __ mov(R0, Operand(target::ToRawSmi(1)));  // One digit processed.
@@ -1024,42 +989,6 @@
   __ Bind(normal_ir_body);
 }
 
-//    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
-//    _state[kSTATE_LO] = state & _MASK_32;
-//    _state[kSTATE_HI] = state >> 32;
-void AsmIntrinsifier::Random_nextState(Assembler* assembler,
-                                       Label* normal_ir_body) {
-  const Field& state_field = LookupMathRandomStateFieldOffset();
-  const int64_t a_int_value = AsmIntrinsifier::kRandomAValue;
-
-  // 'a_int_value' is a mask.
-  ASSERT(Utils::IsUint(32, a_int_value));
-  int32_t a_int32_value = static_cast<int32_t>(a_int_value);
-
-  // Receiver.
-  __ ldr(R0, Address(SP, 0 * target::kWordSize));
-  // Field '_state'.
-  __ ldr(R1, FieldAddress(R0, target::Field::OffsetOf(state_field)));
-  // Addresses of _state[0] and _state[1].
-
-  const int64_t disp_0 =
-      target::Instance::DataOffsetFor(kTypedDataUint32ArrayCid);
-  const int64_t disp_1 =
-      disp_0 + target::Instance::ElementSizeFor(kTypedDataUint32ArrayCid);
-
-  __ LoadImmediate(R0, a_int32_value);
-  __ LoadFieldFromOffset(R2, R1, disp_0);
-  __ LoadFieldFromOffset(R3, R1, disp_1);
-  __ mov(R8, Operand(0));  // Zero extend unsigned _state[kSTATE_HI].
-  // Unsigned 32-bit multiply and 64-bit accumulate into R8:R3.
-  __ umlal(R3, R8, R0, R2);  // R8:R3 <- R8:R3 + R0 * R2.
-  __ StoreFieldToOffset(R3, R1, disp_0);
-  __ StoreFieldToOffset(R8, R1, disp_1);
-  ASSERT(target::ToRawSmi(0) == 0);
-  __ eor(R0, R0, Operand(R0));
-  __ Ret();
-}
-
 void AsmIntrinsifier::ObjectEquals(Assembler* assembler,
                                    Label* normal_ir_body) {
   __ ldr(R0, Address(SP, 0 * target::kWordSize));
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 600e28c..eb5cacc 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -26,40 +26,6 @@
 
 #define __ assembler->
 
-// Allocate a GrowableObjectArray:: using the backing array specified.
-// On stack: type argument (+1), data (+0).
-void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  // The newly allocated object is returned in R0.
-  const intptr_t kTypeArgumentsOffset = 1 * target::kWordSize;
-  const intptr_t kArrayOffset = 0 * target::kWordSize;
-
-  // Try allocating in new space.
-  const Class& cls = GrowableObjectArrayClass();
-  __ TryAllocate(cls, normal_ir_body, Assembler::kFarJump, R0, R1);
-
-  // Store backing array object in growable array object.
-  __ ldr(R1, Address(SP, kArrayOffset));  // Data argument.
-  // R0 is new, no barrier needed.
-  __ StoreCompressedIntoObjectNoBarrier(
-      R0, FieldAddress(R0, target::GrowableObjectArray::data_offset()), R1);
-
-  // R0: new growable array object start as a tagged pointer.
-  // Store the type argument field in the growable array object.
-  __ ldr(R1, Address(SP, kTypeArgumentsOffset));  // Type argument.
-  __ StoreCompressedIntoObjectNoBarrier(
-      R0,
-      FieldAddress(R0, target::GrowableObjectArray::type_arguments_offset()),
-      R1);
-
-  // Set the length field in the growable array object to 0.
-  __ StoreCompressedIntoObjectNoBarrier(
-      R0, FieldAddress(R0, target::GrowableObjectArray::length_offset()), ZR);
-  __ ret();  // Returns the newly allocated object in R0.
-
-  __ Bind(normal_ir_body);
-}
-
 // Loads args from stack into R0 and R1
 // Tests if they are smis, jumps to label not_smi if not.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
@@ -226,12 +192,12 @@
   // R0 = n ~/ (2*_DIGIT_BITS)
   __ AsrImmediate(R0, R5, 6);
   // R6 = &x_digits[0]
-  __ add(R6, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R6, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
   // R7 = &x_digits[2*R2]
   __ add(R7, R6, Operand(R2, LSL, 3));
   // R8 = &r_digits[2*1]
   __ add(R8, R4,
-         Operand(target::TypedData::data_offset() - kHeapObjectTag +
+         Operand(target::TypedData::payload_offset() - kHeapObjectTag +
                  2 * kBytesPerBigIntDigit));
   // R8 = &r_digits[2*(R2 + n ~/ (2*_DIGIT_BITS) + 1)]
   __ add(R0, R0, Operand(R2));
@@ -276,9 +242,9 @@
   // R0 = n ~/ (2*_DIGIT_BITS)
   __ AsrImmediate(R0, R5, 6);
   // R8 = &r_digits[0]
-  __ add(R8, R4, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R8, R4, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
   // R7 = &x_digits[2*(n ~/ (2*_DIGIT_BITS))]
-  __ add(R7, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R7, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
   __ add(R7, R7, Operand(R0, LSL, 3));
   // R6 = &r_digits[2*(R2 - n ~/ (2*_DIGIT_BITS) - 1)]
   __ add(R0, R0, Operand(1));
@@ -323,7 +289,7 @@
   __ add(R2, R2, Operand(2));  // used > 0, Smi. R2 = used + 1, round up.
   __ add(R2, ZR, Operand(R2, ASR, 2));  // R2 = num of digit pairs to process.
   // R3 = &digits[0]
-  __ add(R3, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R3, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R4 = a_used, R5 = a_digits
   __ ldp(R4, R5, Address(SP, 1 * target::kWordSize, Address::PairOffset));
@@ -333,12 +299,12 @@
   __ add(R4, R4, Operand(2));  // a_used > 0, Smi. R4 = a_used + 1, round up.
   __ add(R4, ZR, Operand(R4, ASR, 2));  // R4 = num of digit pairs to process.
   // R5 = &a_digits[0]
-  __ add(R5, R5, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R5, R5, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R6 = r_digits
   __ ldr(R6, Address(SP, 0 * target::kWordSize));
   // R6 = &r_digits[0]
-  __ add(R6, R6, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R6, R6, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R7 = &digits[a_used rounded up to even number].
   __ add(R7, R3, Operand(R4, LSL, 3));
@@ -395,7 +361,7 @@
   __ add(R2, R2, Operand(2));  // used > 0, Smi. R2 = used + 1, round up.
   __ add(R2, ZR, Operand(R2, ASR, 2));  // R2 = num of digit pairs to process.
   // R3 = &digits[0]
-  __ add(R3, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R3, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R4 = a_used, R5 = a_digits
   __ ldp(R4, R5, Address(SP, 1 * target::kWordSize, Address::PairOffset));
@@ -405,12 +371,12 @@
   __ add(R4, R4, Operand(2));  // a_used > 0, Smi. R4 = a_used + 1, round up.
   __ add(R4, ZR, Operand(R4, ASR, 2));  // R4 = num of digit pairs to process.
   // R5 = &a_digits[0]
-  __ add(R5, R5, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R5, R5, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R6 = r_digits
   __ ldr(R6, Address(SP, 0 * target::kWordSize));
   // R6 = &r_digits[0]
-  __ add(R6, R6, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R6, R6, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R7 = &digits[a_used rounded up to even number].
   __ add(R7, R3, Operand(R4, LSL, 3));
@@ -485,7 +451,7 @@
   __ sxtw(R0, R0);
 #endif
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ ldr(R3, FieldAddress(R1, target::TypedData::data_offset()));
+  __ ldr(R3, FieldAddress(R1, target::TypedData::payload_offset()));
   __ tst(R3, Operand(R3));
   __ b(&done, EQ);
 
@@ -505,7 +471,7 @@
   __ sxtw(R0, R0);
 #endif
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ add(R4, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R4, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R5 = ajp = &a_digits[j >> 1]
   // R0 = j as Smi, R1 = a_digits.
@@ -514,7 +480,7 @@
   __ sxtw(R0, R0);
 #endif
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ add(R5, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R5, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R1 = c = 0
   __ mov(R1, ZR);
@@ -605,7 +571,7 @@
   __ sxtw(R2, R2);
 #endif
   __ add(R3, R3, Operand(R2, LSL, 1));
-  __ add(R4, R3, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R4, R3, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R3 = x = *xip++, return if x == 0
   Label x_zero;
@@ -616,7 +582,7 @@
   // R5 = ajp = &a_digits[i]
   __ ldr(R1, Address(SP, 1 * target::kWordSize));  // a_digits
   __ add(R1, R1, Operand(R2, LSL, 2));             // j == 2*i, i is Smi.
-  __ add(R5, R1, Operand(target::TypedData::data_offset() - kHeapObjectTag));
+  __ add(R5, R1, Operand(target::TypedData::payload_offset() - kHeapObjectTag));
 
   // R6:R1 = t = x*x + *ajp
   __ ldr(R0, Address(R5, 0));
@@ -741,7 +707,7 @@
   __ ldr(R4, Address(SP, 2 * target::kWordSize));  // args
 
   // R3 = yt = args[0..1]
-  __ ldr(R3, FieldAddress(R4, target::TypedData::data_offset()));
+  __ ldr(R3, FieldAddress(R4, target::TypedData::payload_offset()));
 
   // R2 = dh = digits[(i >> 1) - 1 .. i >> 1]
   // R0 = i as Smi, R1 = digits
@@ -750,8 +716,8 @@
   __ sxtw(R0, R0);
 #endif
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ ldr(R2, FieldAddress(
-                 R1, target::TypedData::data_offset() - kBytesPerBigIntDigit));
+  __ ldr(R2, FieldAddress(R1, target::TypedData::payload_offset() -
+                                  kBytesPerBigIntDigit));
 
   // R0 = qd = (DIGIT_MASK << 32) | DIGIT_MASK = -1
   __ movn(R0, Immediate(0), 0);
@@ -762,7 +728,7 @@
   __ b(&return_qd, EQ);
 
   // R1 = dl = digits[(i >> 1) - 3 .. (i >> 1) - 2]
-  __ ldr(R1, FieldAddress(R1, target::TypedData::data_offset() -
+  __ ldr(R1, FieldAddress(R1, target::TypedData::payload_offset() -
                                   3 * kBytesPerBigIntDigit));
 
   // R5 = yth = yt >> 32
@@ -867,7 +833,7 @@
 
   __ Bind(&return_qd);
   // args[2..3] = qd
-  __ str(R0, FieldAddress(R4, target::TypedData::data_offset() +
+  __ str(R0, FieldAddress(R4, target::TypedData::payload_offset() +
                                   2 * kBytesPerBigIntDigit));
 
   __ LoadImmediate(R0, target::ToRawSmi(2));  // Two digits processed.
@@ -889,7 +855,7 @@
   __ ldr(R4, Address(SP, 2 * target::kWordSize));  // args
 
   // R3 = rho = args[2..3]
-  __ ldr(R3, FieldAddress(R4, target::TypedData::data_offset() +
+  __ ldr(R3, FieldAddress(R4, target::TypedData::payload_offset() +
                                   2 * kBytesPerBigIntDigit));
 
   // R2 = digits[i >> 1 .. (i >> 1) + 1]
@@ -899,13 +865,13 @@
   __ sxtw(R0, R0);
 #endif
   __ add(R1, R1, Operand(R0, LSL, 1));
-  __ ldr(R2, FieldAddress(R1, target::TypedData::data_offset()));
+  __ ldr(R2, FieldAddress(R1, target::TypedData::payload_offset()));
 
   // R0 = rho*d mod DIGIT_BASE
   __ mul(R0, R2, R3);  // R0 = low64(R2*R3).
 
   // args[4 .. 5] = R0
-  __ str(R0, FieldAddress(R4, target::TypedData::data_offset() +
+  __ str(R0, FieldAddress(R4, target::TypedData::payload_offset() +
                                   4 * kBytesPerBigIntDigit));
 
   __ LoadImmediate(R0, target::ToRawSmi(2));  // Two digits processed.
@@ -1184,37 +1150,6 @@
   __ Bind(normal_ir_body);
 }
 
-//    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
-//    _state[kSTATE_LO] = state & _MASK_32;
-//    _state[kSTATE_HI] = state >> 32;
-void AsmIntrinsifier::Random_nextState(Assembler* assembler,
-                                       Label* normal_ir_body) {
-  const Field& state_field = LookupMathRandomStateFieldOffset();
-  const int64_t a_int_value = AsmIntrinsifier::kRandomAValue;
-
-  // Receiver.
-  __ ldr(R0, Address(SP, 0 * target::kWordSize));
-  // Field '_state'.
-  __ LoadCompressed(R1,
-                    FieldAddress(R0, LookupFieldOffsetInBytes(state_field)));
-
-  // Addresses of _state[0].
-  const int64_t disp =
-      target::Instance::DataOffsetFor(kTypedDataUint32ArrayCid) -
-      kHeapObjectTag;
-
-  __ LoadImmediate(R0, a_int_value);
-  __ LoadFromOffset(R2, R1, disp);
-  __ LsrImmediate(R3, R2, 32);
-  __ andi(R2, R2, Immediate(0xffffffff));
-  __ mul(R2, R0, R2);
-  __ add(R2, R2, Operand(R3));
-  __ StoreToOffset(R2, R1, disp);
-  ASSERT(target::ToRawSmi(0) == 0);
-  __ eor(R0, R0, Operand(R0));
-  __ ret();
-}
-
 void AsmIntrinsifier::ObjectEquals(Assembler* assembler,
                                    Label* normal_ir_body) {
   __ ldr(R0, Address(SP, 0 * target::kWordSize));
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index 341c285..815a2e0 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -31,42 +31,6 @@
 
 #define __ assembler->
 
-// Allocate a GrowableObjectArray:: using the backing array specified.
-// On stack: type argument (+2), data (+1), return-address (+0).
-void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  // This snippet of inlined code uses the following registers:
-  // EAX, EBX
-  // and the newly allocated object is returned in EAX.
-  const intptr_t kTypeArgumentsOffset = 2 * target::kWordSize;
-
-  const intptr_t kArrayOffset = 1 * target::kWordSize;
-
-  // Try allocating in new space.
-  const Class& cls = GrowableObjectArrayClass();
-  __ TryAllocate(cls, normal_ir_body, Assembler::kNearJump, EAX, EBX);
-
-  // Store backing array object in growable array object.
-  __ movl(EBX, Address(ESP, kArrayOffset));  // data argument.
-  // EAX is new, no barrier needed.
-  __ StoreIntoObjectNoBarrier(
-      EAX, FieldAddress(EAX, target::GrowableObjectArray::data_offset()), EBX);
-
-  // EAX: new growable array object start as a tagged pointer.
-  // Store the type argument field in the growable array object.
-  __ movl(EBX, Address(ESP, kTypeArgumentsOffset));  // type argument.
-  __ StoreIntoObjectNoBarrier(
-      EAX,
-      FieldAddress(EAX, target::GrowableObjectArray::type_arguments_offset()),
-      EBX);
-
-  __ ZeroInitSmiField(
-      FieldAddress(EAX, target::GrowableObjectArray::length_offset()));
-  __ ret();  // returns the newly allocated object in EAX.
-
-  __ Bind(normal_ir_body);
-}
-
 // Tests if two top most arguments are smis, jumps to label not_smi if not.
 // Topmost argument is in EAX.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
@@ -317,13 +281,13 @@
   __ movl(ESI, ECX);
   __ sarl(ESI, Immediate(5));  // ESI = n ~/ _DIGIT_BITS.
   __ leal(EBX,
-          FieldAddress(EBX, ESI, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EBX, ESI, TIMES_4, target::TypedData::payload_offset()));
   __ movl(ESI, Address(ESP, 4 * target::kWordSize));  // x_used > 0, Smi.
   __ SmiUntag(ESI);
   __ decl(ESI);
   __ xorl(EAX, EAX);  // EAX = 0.
   __ movl(EDX,
-          FieldAddress(EDI, ESI, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EDI, ESI, TIMES_4, target::TypedData::payload_offset()));
   __ shldl(EAX, EDX, ECX);
   __ movl(Address(EBX, ESI, TIMES_4, kBytesPerBigIntDigit), EAX);
   Label last;
@@ -334,7 +298,7 @@
   __ movl(EAX, EDX);
   __ movl(EDX, FieldAddress(
                    EDI, ESI, TIMES_4,
-                   target::TypedData::data_offset() - kBytesPerBigIntDigit));
+                   target::TypedData::payload_offset() - kBytesPerBigIntDigit));
   __ shldl(EAX, EDX, ECX);
   __ movl(Address(EBX, ESI, TIMES_4, 0), EAX);
   __ decl(ESI);
@@ -368,11 +332,11 @@
   __ decl(ESI);
   // EDI = &x_digits[x_used - 1].
   __ leal(EDI,
-          FieldAddress(EDI, ESI, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EDI, ESI, TIMES_4, target::TypedData::payload_offset()));
   __ subl(ESI, EDX);
   // EBX = &r_digits[x_used - 1 - (n ~/ 32)].
   __ leal(EBX,
-          FieldAddress(EBX, ESI, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EBX, ESI, TIMES_4, target::TypedData::payload_offset()));
   __ negl(ESI);
   __ movl(EDX, Address(EDI, ESI, TIMES_4, 0));
   Label last;
@@ -424,10 +388,10 @@
   __ Bind(&add_loop);
   // Loop a_used times, ECX = a_used, ECX > 0.
   __ movl(EAX,
-          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::payload_offset()));
   __ adcl(EAX,
-          FieldAddress(ESI, EDX, TIMES_4, target::TypedData::data_offset()));
-  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::data_offset()),
+          FieldAddress(ESI, EDX, TIMES_4, target::TypedData::payload_offset()));
+  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::payload_offset()),
           EAX);
   __ incl(EDX);  // Does not affect carry flag.
   __ decl(ECX);  // Does not affect carry flag.
@@ -442,9 +406,9 @@
   __ Bind(&carry_loop);
   // Loop used - a_used times, ECX = used - a_used, ECX > 0.
   __ movl(EAX,
-          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::payload_offset()));
   __ adcl(EAX, Immediate(0));
-  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::data_offset()),
+  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::payload_offset()),
           EAX);
   __ incl(EDX);  // Does not affect carry flag.
   __ decl(ECX);  // Does not affect carry flag.
@@ -453,7 +417,7 @@
   __ Bind(&last_carry);
   __ movl(EAX, Immediate(0));
   __ adcl(EAX, Immediate(0));
-  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::data_offset()),
+  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::payload_offset()),
           EAX);
 
   // Restore THR and return.
@@ -490,10 +454,10 @@
   __ Bind(&sub_loop);
   // Loop a_used times, ECX = a_used, ECX > 0.
   __ movl(EAX,
-          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::payload_offset()));
   __ sbbl(EAX,
-          FieldAddress(ESI, EDX, TIMES_4, target::TypedData::data_offset()));
-  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::data_offset()),
+          FieldAddress(ESI, EDX, TIMES_4, target::TypedData::payload_offset()));
+  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::payload_offset()),
           EAX);
   __ incl(EDX);  // Does not affect carry flag.
   __ decl(ECX);  // Does not affect carry flag.
@@ -508,9 +472,9 @@
   __ Bind(&carry_loop);
   // Loop used - a_used times, ECX = used - a_used, ECX > 0.
   __ movl(EAX,
-          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(EDI, EDX, TIMES_4, target::TypedData::payload_offset()));
   __ sbbl(EAX, Immediate(0));
-  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::data_offset()),
+  __ movl(FieldAddress(EBX, EDX, TIMES_4, target::TypedData::payload_offset()),
           EAX);
   __ incl(EDX);  // Does not affect carry flag.
   __ decl(ECX);  // Does not affect carry flag.
@@ -557,7 +521,7 @@
   __ movl(ECX, Address(ESP, 7 * target::kWordSize));  // x_digits
   __ movl(EAX, Address(ESP, 6 * target::kWordSize));  // xi is Smi
   __ movl(EBX,
-          FieldAddress(ECX, EAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(ECX, EAX, TIMES_2, target::TypedData::payload_offset()));
   __ testl(EBX, EBX);
   __ j(ZERO, &no_op, Assembler::kNearJump);
 
@@ -574,13 +538,13 @@
   __ movl(EDI, Address(ESP, 6 * target::kWordSize));  // m_digits
   __ movl(EAX, Address(ESP, 5 * target::kWordSize));  // i is Smi
   __ leal(EDI,
-          FieldAddress(EDI, EAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(EDI, EAX, TIMES_2, target::TypedData::payload_offset()));
 
   // ESI = ajp = &a_digits[j >> 1]
   __ movl(ESI, Address(ESP, 4 * target::kWordSize));  // a_digits
   __ movl(EAX, Address(ESP, 3 * target::kWordSize));  // j is Smi
   __ leal(ESI,
-          FieldAddress(ESI, EAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(ESI, EAX, TIMES_2, target::TypedData::payload_offset()));
 
   // Save n
   __ pushl(EDX);
@@ -678,7 +642,7 @@
   __ movl(EDI, Address(ESP, 4 * target::kWordSize));  // x_digits
   __ movl(EAX, Address(ESP, 3 * target::kWordSize));  // i is Smi
   __ leal(EDI,
-          FieldAddress(EDI, EAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(EDI, EAX, TIMES_2, target::TypedData::payload_offset()));
 
   // EBX = x = *xip++, return if x == 0
   Label x_zero;
@@ -694,7 +658,7 @@
   // ESI = ajp = &a_digits[i]
   __ movl(ESI, Address(ESP, 3 * target::kWordSize));  // a_digits
   __ leal(ESI,
-          FieldAddress(ESI, EAX, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(ESI, EAX, TIMES_4, target::TypedData::payload_offset()));
 
   // EDX:EAX = t = x*x + *ajp
   __ movl(EAX, EBX);
@@ -803,14 +767,14 @@
   __ movl(EDI, Address(ESP, 3 * target::kWordSize));  // args
 
   // ECX = yt = args[1]
-  __ movl(ECX, FieldAddress(EDI, target::TypedData::data_offset() +
+  __ movl(ECX, FieldAddress(EDI, target::TypedData::payload_offset() +
                                      kBytesPerBigIntDigit));
 
   // EBX = dp = &digits[i >> 1]
   __ movl(EBX, Address(ESP, 2 * target::kWordSize));  // digits
   __ movl(EAX, Address(ESP, 1 * target::kWordSize));  // i is Smi
   __ leal(EBX,
-          FieldAddress(EBX, EAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(EBX, EAX, TIMES_2, target::TypedData::payload_offset()));
 
   // EDX = dh = dp[0]
   __ movl(EDX, Address(EBX, 0));
@@ -831,8 +795,8 @@
 
   __ Bind(&return_qd);
   // args[2] = qd
-  __ movl(FieldAddress(
-              EDI, target::TypedData::data_offset() + 2 * kBytesPerBigIntDigit),
+  __ movl(FieldAddress(EDI, target::TypedData::payload_offset() +
+                                2 * kBytesPerBigIntDigit),
           EAX);
 
   __ movl(EAX, Immediate(target::ToRawSmi(1)));  // One digit processed.
@@ -854,21 +818,21 @@
   __ movl(EDI, Address(ESP, 3 * target::kWordSize));  // args
 
   // ECX = rho = args[2]
-  __ movl(ECX, FieldAddress(EDI, target::TypedData::data_offset() +
+  __ movl(ECX, FieldAddress(EDI, target::TypedData::payload_offset() +
                                      2 * kBytesPerBigIntDigit));
 
   // EAX = digits[i >> 1]
   __ movl(EBX, Address(ESP, 2 * target::kWordSize));  // digits
   __ movl(EAX, Address(ESP, 1 * target::kWordSize));  // i is Smi
   __ movl(EAX,
-          FieldAddress(EBX, EAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(EBX, EAX, TIMES_2, target::TypedData::payload_offset()));
 
   // EDX:EAX = t = rho*d
   __ mull(ECX);
 
   // args[4] = t mod DIGIT_BASE = low32(t)
-  __ movl(FieldAddress(
-              EDI, target::TypedData::data_offset() + 4 * kBytesPerBigIntDigit),
+  __ movl(FieldAddress(EDI, target::TypedData::payload_offset() +
+                                4 * kBytesPerBigIntDigit),
           EAX);
 
   __ movl(EAX, Immediate(target::ToRawSmi(1)));  // One digit processed.
@@ -1147,41 +1111,6 @@
   __ Bind(normal_ir_body);
 }
 
-//    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
-//    _state[kSTATE_LO] = state & _MASK_32;
-//    _state[kSTATE_HI] = state >> 32;
-void AsmIntrinsifier::Random_nextState(Assembler* assembler,
-                                       Label* normal_ir_body) {
-  const Field& state_field = LookupMathRandomStateFieldOffset();
-  const int64_t a_int_value = AsmIntrinsifier::kRandomAValue;
-
-  // 'a_int_value' is a mask.
-  ASSERT(Utils::IsUint(32, a_int_value));
-  int32_t a_int32_value = static_cast<int32_t>(a_int_value);
-
-  // Receiver.
-  __ movl(EAX, Address(ESP, +1 * target::kWordSize));
-  // Field '_state'.
-  __ movl(EBX, FieldAddress(EAX, LookupFieldOffsetInBytes(state_field)));
-  // Addresses of _state[0] and _state[1].
-  const intptr_t scale =
-      target::Instance::ElementSizeFor(kTypedDataUint32ArrayCid);
-  const intptr_t offset =
-      target::Instance::DataOffsetFor(kTypedDataUint32ArrayCid);
-  Address addr_0 = FieldAddress(EBX, 0 * scale + offset);
-  Address addr_1 = FieldAddress(EBX, 1 * scale + offset);
-  __ movl(EAX, Immediate(a_int32_value));
-  // 64-bit multiply EAX * value -> EDX:EAX.
-  __ mull(addr_0);
-  __ addl(EAX, addr_1);
-  __ adcl(EDX, Immediate(0));
-  __ movl(addr_1, EDX);
-  __ movl(addr_0, EAX);
-  ASSERT(target::ToRawSmi(0) == 0);
-  __ xorl(EAX, EAX);
-  __ ret();
-}
-
 // Identity comparison.
 void AsmIntrinsifier::ObjectEquals(Assembler* assembler,
                                    Label* normal_ir_body) {
diff --git a/runtime/vm/compiler/asm_intrinsifier_riscv.cc b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
index bd85776..db03989 100644
--- a/runtime/vm/compiler/asm_intrinsifier_riscv.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_riscv.cc
@@ -26,40 +26,6 @@
 
 #define __ assembler->
 
-// Allocate a GrowableObjectArray:: using the backing array specified.
-// On stack: type argument (+1), data (+0).
-void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  // The newly allocated object is returned in R0.
-  const intptr_t kTypeArgumentsOffset = 1 * target::kWordSize;
-  const intptr_t kArrayOffset = 0 * target::kWordSize;
-
-  // Try allocating in new space.
-  const Class& cls = GrowableObjectArrayClass();
-  __ TryAllocate(cls, normal_ir_body, Assembler::kFarJump, A0, A1);
-
-  // Store backing array object in growable array object.
-  __ lx(A1, Address(SP, kArrayOffset));  // Data argument.
-  // R0 is new, no barrier needed.
-  __ StoreCompressedIntoObjectNoBarrier(
-      A0, FieldAddress(A0, target::GrowableObjectArray::data_offset()), A1);
-
-  // R0: new growable array object start as a tagged pointer.
-  // Store the type argument field in the growable array object.
-  __ lx(A1, Address(SP, kTypeArgumentsOffset));  // Type argument.
-  __ StoreCompressedIntoObjectNoBarrier(
-      A0,
-      FieldAddress(A0, target::GrowableObjectArray::type_arguments_offset()),
-      A1);
-
-  // Set the length field in the growable array object to 0.
-  __ StoreCompressedIntoObjectNoBarrier(
-      A0, FieldAddress(A0, target::GrowableObjectArray::length_offset()), ZR);
-  __ ret();  // Returns the newly allocated object in A0.
-
-  __ Bind(normal_ir_body);
-}
-
 // Loads args from stack into A0 and A1
 // Tests if they are smis, jumps to label not_smi if not.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
@@ -440,15 +406,6 @@
   __ Bind(normal_ir_body);
 }
 
-//    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
-//    _state[kSTATE_LO] = state & _MASK_32;
-//    _state[kSTATE_HI] = state >> 32;
-void AsmIntrinsifier::Random_nextState(Assembler* assembler,
-                                       Label* normal_ir_body) {
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
-}
-
 void AsmIntrinsifier::ObjectEquals(Assembler* assembler,
                                    Label* normal_ir_body) {
   Label true_label;
@@ -679,8 +636,34 @@
                                                    bool sticky) {
   if (FLAG_interpret_irregexp) return;
 
-  // TODO(riscv)
-  __ Bind(normal_ir_body);
+  static const intptr_t kRegExpParamOffset = 2 * target::kWordSize;
+  static const intptr_t kStringParamOffset = 1 * target::kWordSize;
+  // start_index smi is located at offset 0.
+
+  // Incoming registers:
+  // T0: Function. (Will be reloaded with the specialized matcher function.)
+  // 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
+  // string CIDs as well as stored function pointers are in sequence.
+  __ lx(T2, Address(SP, kRegExpParamOffset));
+  __ lx(T1, Address(SP, kStringParamOffset));
+  __ LoadClassId(T1, T1);
+  __ AddImmediate(T1, -kOneByteStringCid);
+  __ slli(T1, T1, target::kWordSizeLog2);
+  __ add(T1, T1, T2);
+  __ lx(T0, FieldAddress(T1, target::RegExp::function_offset(kOneByteStringCid,
+                                                             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.
+  __ li(S5, 0);
+
+  // Tail-call the function.
+  __ lx(CODE_REG, FieldAddress(T0, target::Function::code_offset()));
+  __ lx(T1, FieldAddress(T0, target::Function::entry_point_offset()));
+  __ jr(T1);
 }
 
 void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index 656bce9..0a47313 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -26,42 +26,6 @@
 
 #define __ assembler->
 
-// Allocate a GrowableObjectArray using the backing array specified.
-// On stack: type argument (+2), data (+1), return-address (+0).
-void AsmIntrinsifier::GrowableArray_Allocate(Assembler* assembler,
-                                             Label* normal_ir_body) {
-  // This snippet of inlined code uses the following registers:
-  // RAX, RCX, R13
-  // and the newly allocated object is returned in RAX.
-  const intptr_t kTypeArgumentsOffset = 2 * target::kWordSize;
-  const intptr_t kArrayOffset = 1 * target::kWordSize;
-
-  // Try allocating in new space.
-  const Class& cls = GrowableObjectArrayClass();
-  __ TryAllocate(cls, normal_ir_body, Assembler::kFarJump, RAX, R13);
-
-  // Store backing array object in growable array object.
-  __ movq(RCX, Address(RSP, kArrayOffset));  // data argument.
-  // RAX is new, no barrier needed.
-  __ StoreCompressedIntoObjectNoBarrier(
-      RAX, FieldAddress(RAX, target::GrowableObjectArray::data_offset()), RCX);
-
-  // RAX: new growable array object start as a tagged pointer.
-  // Store the type argument field in the growable array object.
-  __ movq(RCX, Address(RSP, kTypeArgumentsOffset));  // type argument.
-  __ StoreCompressedIntoObjectNoBarrier(
-      RAX,
-      FieldAddress(RAX, target::GrowableObjectArray::type_arguments_offset()),
-      RCX);
-
-  // Set the length field in the growable array object to 0.
-  __ ZeroInitCompressedSmiField(
-      FieldAddress(RAX, target::GrowableObjectArray::length_offset()));
-  __ ret();  // returns the newly allocated object in RAX.
-
-  __ Bind(normal_ir_body);
-}
-
 // Tests if two top most arguments are smis, jumps to label not_smi if not.
 // Topmost argument is in RAX.
 static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
@@ -238,10 +202,10 @@
   __ movq(RSI, RCX);
   __ sarq(RSI, Immediate(6));  // RSI = n ~/ (2*_DIGIT_BITS).
   __ leaq(RBX,
-          FieldAddress(RBX, RSI, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RBX, RSI, TIMES_8, target::TypedData::payload_offset()));
   __ xorq(RAX, RAX);  // RAX = 0.
   __ movq(RDX,
-          FieldAddress(RDI, R8, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RDI, R8, TIMES_8, target::TypedData::payload_offset()));
   __ shldq(RAX, RDX, RCX);
   __ movq(Address(RBX, R8, TIMES_8, 2 * kBytesPerBigIntDigit), RAX);
   Label last;
@@ -251,7 +215,7 @@
   __ Bind(&loop);
   __ movq(RAX, RDX);
   __ movq(RDX, FieldAddress(RDI, R8, TIMES_8,
-                            target::TypedData::data_offset() -
+                            target::TypedData::payload_offset() -
                                 2 * kBytesPerBigIntDigit));
   __ shldq(RAX, RDX, RCX);
   __ movq(Address(RBX, R8, TIMES_8, 0), RAX);
@@ -284,10 +248,10 @@
   __ subq(RSI, Immediate(2));  // x_used > 0, Smi. RSI = x_used - 1, round up.
   __ sarq(RSI, Immediate(2));
   __ leaq(RDI,
-          FieldAddress(RDI, RSI, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RDI, RSI, TIMES_8, target::TypedData::payload_offset()));
   __ subq(RSI, RDX);  // RSI + 1 = number of digit pairs to read.
   __ leaq(RBX,
-          FieldAddress(RBX, RSI, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RBX, RSI, TIMES_8, target::TypedData::payload_offset()));
   __ negq(RSI);
   __ movq(RDX, Address(RDI, RSI, TIMES_8, 0));
   Label last;
@@ -339,10 +303,10 @@
   __ Bind(&add_loop);
   // Loop (a_used+1)/2 times, RCX > 0.
   __ movq(RAX,
-          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::payload_offset()));
   __ adcq(RAX,
-          FieldAddress(RSI, RDX, TIMES_8, target::TypedData::data_offset()));
-  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::data_offset()),
+          FieldAddress(RSI, RDX, TIMES_8, target::TypedData::payload_offset()));
+  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::payload_offset()),
           RAX);
   __ incq(RDX);  // Does not affect carry flag.
   __ decq(RCX);  // Does not affect carry flag.
@@ -356,9 +320,9 @@
   __ Bind(&carry_loop);
   // Loop (used+1)/2 - (a_used+1)/2 times, R8 > 0.
   __ movq(RAX,
-          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::payload_offset()));
   __ adcq(RAX, Immediate(0));
-  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::data_offset()),
+  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::payload_offset()),
           RAX);
   __ incq(RDX);  // Does not affect carry flag.
   __ decq(R8);   // Does not affect carry flag.
@@ -367,7 +331,7 @@
   __ Bind(&last_carry);
   Label done;
   __ j(NOT_CARRY, &done);
-  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::data_offset()),
+  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::payload_offset()),
           Immediate(1));
 
   __ Bind(&done);
@@ -406,10 +370,10 @@
   __ Bind(&sub_loop);
   // Loop (a_used+1)/2 times, RCX > 0.
   __ movq(RAX,
-          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::payload_offset()));
   __ sbbq(RAX,
-          FieldAddress(RSI, RDX, TIMES_8, target::TypedData::data_offset()));
-  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::data_offset()),
+          FieldAddress(RSI, RDX, TIMES_8, target::TypedData::payload_offset()));
+  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::payload_offset()),
           RAX);
   __ incq(RDX);  // Does not affect carry flag.
   __ decq(RCX);  // Does not affect carry flag.
@@ -423,9 +387,9 @@
   __ Bind(&carry_loop);
   // Loop (used+1)/2 - (a_used+1)/2 times, R8 > 0.
   __ movq(RAX,
-          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::data_offset()));
+          FieldAddress(RDI, RDX, TIMES_8, target::TypedData::payload_offset()));
   __ sbbq(RAX, Immediate(0));
-  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::data_offset()),
+  __ movq(FieldAddress(RBX, RDX, TIMES_8, target::TypedData::payload_offset()),
           RAX);
   __ incq(RDX);  // Does not affect carry flag.
   __ decq(R8);   // Does not affect carry flag.
@@ -474,7 +438,7 @@
   __ movsxd(RAX, RAX);
 #endif
   __ movq(RBX,
-          FieldAddress(RCX, RAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(RCX, RAX, TIMES_2, target::TypedData::payload_offset()));
   __ testq(RBX, RBX);
   __ j(ZERO, &done, Assembler::kNearJump);
 
@@ -494,7 +458,7 @@
   __ movsxd(RAX, RAX);
 #endif
   __ leaq(RDI,
-          FieldAddress(RDI, RAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(RDI, RAX, TIMES_2, target::TypedData::payload_offset()));
 
   // RSI = ajp = &a_digits[j >> 1]
   __ movq(RSI, Address(RSP, 3 * target::kWordSize));  // a_digits
@@ -503,7 +467,7 @@
   __ movsxd(RAX, RAX);
 #endif
   __ leaq(RSI,
-          FieldAddress(RSI, RAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(RSI, RAX, TIMES_2, target::TypedData::payload_offset()));
 
   // RCX = c = 0
   __ xorq(RCX, RCX);
@@ -594,7 +558,7 @@
   __ movsxd(RAX, RAX);
 #endif
   __ leaq(RDI,
-          FieldAddress(RDI, RAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(RDI, RAX, TIMES_2, target::TypedData::payload_offset()));
 
   // RBX = x = *xip++, return if x == 0
   Label x_zero;
@@ -606,7 +570,7 @@
   // RSI = ajp = &a_digits[i]
   __ movq(RSI, Address(RSP, 2 * target::kWordSize));  // a_digits
   __ leaq(RSI,
-          FieldAddress(RSI, RAX, TIMES_4, target::TypedData::data_offset()));
+          FieldAddress(RSI, RAX, TIMES_4, target::TypedData::payload_offset()));
 
   // RDX:RAX = t = x*x + *ajp
   __ movq(RAX, RBX);
@@ -706,7 +670,7 @@
   __ movq(RDI, Address(RSP, 3 * target::kWordSize));  // args
 
   // RCX = yt = args[0..1]
-  __ movq(RCX, FieldAddress(RDI, target::TypedData::data_offset()));
+  __ movq(RCX, FieldAddress(RDI, target::TypedData::payload_offset()));
 
   // RBX = dp = &digits[(i >> 1) - 1]
   __ movq(RBX, Address(RSP, 2 * target::kWordSize));  // digits
@@ -716,7 +680,7 @@
 #endif
   __ leaq(RBX, FieldAddress(
                    RBX, RAX, TIMES_2,
-                   target::TypedData::data_offset() - kBytesPerBigIntDigit));
+                   target::TypedData::payload_offset() - kBytesPerBigIntDigit));
 
   // RDX = dh = dp[0]
   __ movq(RDX, Address(RBX, 0));
@@ -737,8 +701,8 @@
 
   __ Bind(&return_qd);
   // args[2..3] = qd
-  __ movq(FieldAddress(
-              RDI, target::TypedData::data_offset() + 2 * kBytesPerBigIntDigit),
+  __ movq(FieldAddress(RDI, target::TypedData::payload_offset() +
+                                2 * kBytesPerBigIntDigit),
           RAX);
 
   __ movq(RAX, Immediate(target::ToRawSmi(2)));  // Two digits processed.
@@ -760,7 +724,7 @@
   __ movq(RDI, Address(RSP, 3 * target::kWordSize));  // args
 
   // RCX = rho = args[2 .. 3]
-  __ movq(RCX, FieldAddress(RDI, target::TypedData::data_offset() +
+  __ movq(RCX, FieldAddress(RDI, target::TypedData::payload_offset() +
                                      2 * kBytesPerBigIntDigit));
 
   // RAX = digits[i >> 1 .. (i >> 1) + 1]
@@ -770,14 +734,14 @@
   __ movsxd(RAX, RAX);
 #endif
   __ movq(RAX,
-          FieldAddress(RBX, RAX, TIMES_2, target::TypedData::data_offset()));
+          FieldAddress(RBX, RAX, TIMES_2, target::TypedData::payload_offset()));
 
   // RDX:RAX = t = rho*d
   __ mulq(RCX);
 
   // args[4 .. 5] = t mod DIGIT_BASE^2 = low64(t)
-  __ movq(FieldAddress(
-              RDI, target::TypedData::data_offset() + 4 * kBytesPerBigIntDigit),
+  __ movq(FieldAddress(RDI, target::TypedData::payload_offset() +
+                                4 * kBytesPerBigIntDigit),
           RAX);
 
   __ movq(RAX, Immediate(target::ToRawSmi(2)));  // Two digits processed.
@@ -1047,39 +1011,6 @@
   __ Bind(normal_ir_body);
 }
 
-//    var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64;
-//    _state[kSTATE_LO] = state & _MASK_32;
-//    _state[kSTATE_HI] = state >> 32;
-void AsmIntrinsifier::Random_nextState(Assembler* assembler,
-                                       Label* normal_ir_body) {
-  const Field& state_field = LookupMathRandomStateFieldOffset();
-  const int64_t a_int_value = AsmIntrinsifier::kRandomAValue;
-
-  // Receiver.
-  __ movq(RAX, Address(RSP, +1 * target::kWordSize));
-  // Field '_state'.
-  __ LoadCompressed(RBX,
-                    FieldAddress(RAX, LookupFieldOffsetInBytes(state_field)));
-  // Addresses of _state[0] and _state[1].
-  const intptr_t scale =
-      target::Instance::ElementSizeFor(kTypedDataUint32ArrayCid);
-  const intptr_t offset =
-      target::Instance::DataOffsetFor(kTypedDataUint32ArrayCid);
-  Address addr_0 = FieldAddress(RBX, 0 * scale + offset);
-  Address addr_1 = FieldAddress(RBX, 1 * scale + offset);
-  __ movq(RAX, Immediate(a_int_value));
-  __ movl(RCX, addr_0);
-  __ imulq(RCX, RAX);
-  __ movl(RDX, addr_1);
-  __ addq(RDX, RCX);
-  __ movl(addr_0, RDX);
-  __ shrq(RDX, Immediate(32));
-  __ movl(addr_1, RDX);
-  ASSERT(target::ToRawSmi(0) == 0);
-  __ xorq(RAX, RAX);
-  __ ret();
-}
-
 // Identity comparison.
 void AsmIntrinsifier::ObjectEquals(Assembler* assembler,
                                    Label* normal_ir_body) {
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 139be88..61bdd45 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -1912,6 +1912,11 @@
     str(value, dest);
   }
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 943457c..1212928 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1272,6 +1272,11 @@
   ASSERT(memory_order == kRelaxedNonAtomic);
   str(value, dest);
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
 
@@ -1294,6 +1299,11 @@
   ASSERT(memory_order == kRelaxedNonAtomic);
   str(value, dest, kObjectBytes);
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64_test.cc b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
index 97ce2ab..4c40284 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
@@ -349,8 +349,8 @@
       "movn r2, #0x0\n"
       "movz r1, #0x1\n"
       "movz r0, #0x0\n"
-      "adds ip0, r2, r1\n"
-      "adcs ip0, r2, r0\n"
+      "adds tmp, r2, r1\n"
+      "adcs tmp, r2, r0\n"
       "adc r0, r0, r0\n"
       "ret\n");
 }
@@ -370,8 +370,8 @@
   EXPECT_DISASSEMBLY(
       "movz r1, #0x1\n"
       "movz r0, #0x0\n"
-      "subs ip0, r0, r1\n"
-      "sbcs ip0, r0, r0\n"
+      "subs tmp, r0, r1\n"
+      "sbcs tmp, r0, r0\n"
       "sbc r0, r0, r0\n"
       "ret\n");
 }
@@ -395,8 +395,8 @@
       "movz r1, #0x1\n"
       "movn r2, #0x0\n"
       "mov r3, 0x7fffffffffffffff\n"
-      "adds ip0, r2, r1\n"
-      "adcs ip0, r3, r0\n"
+      "adds tmp, r2, r1\n"
+      "adcs tmp, r3, r0\n"
       "csinc r0, r0, r0, vs\n"
       "ret\n");
 }
@@ -418,8 +418,8 @@
       "movn r2, #0x0\n"
       "movz r1, #0x1\n"
       "movz r0, #0x0\n"
-      "addws ip0, r2, r1\n"
-      "adcws ip0, r2, r0\n"
+      "addws tmp, r2, r1\n"
+      "adcws tmp, r2, r0\n"
       "adcw r0, r0, r0\n"
       "ret\n");
 }
@@ -439,8 +439,8 @@
   EXPECT_DISASSEMBLY(
       "movz r1, #0x1\n"
       "movz r0, #0x0\n"
-      "subws ip0, r0, r1\n"
-      "sbcws ip0, r0, r0\n"
+      "subws tmp, r0, r1\n"
+      "sbcws tmp, r0, r0\n"
       "sbcw r0, r0, r0\n"
       "ret\n");
 }
@@ -464,8 +464,8 @@
       "movz r1, #0x1\n"
       "mov r2, 0xffffffff\n"
       "mov r3, 0x7fffffff\n"
-      "addws ip0, r2, r1\n"
-      "adcws ip0, r3, r0\n"
+      "addws tmp, r2, r1\n"
+      "adcws tmp, r3, r0\n"
       "csinc r0, r0, r0, vs\n"
       "ret\n");
 }
@@ -489,14 +489,14 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x10\n"
       "movz r0, #0x2b\n"
       "movz r1, #0x2a\n"
-      "str r1, [r15, #-8]!\n"
-      "ldr r0, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "str r1, [sp, #-8]!\n"
+      "ldr r0, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -515,14 +515,14 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x2b\n"
       "movz r1, #0x2a\n"
-      "add r2, r15, #0x1\n"
+      "add r2, sp, #0x1\n"
       "str r1, [r2, #-1]\n"
       "ldr r0, [r2, #-1]\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -548,15 +548,15 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x100\n"
       "movz r0, #0x2b\n"
       "movz r1, #0x2a\n"
-      "str r1, [r15, #-256]!\n"
-      "ldr r0, [r15], #248 !\n"
-      "add r15, r15, #0x8\n"
-      "mov csp, r15\n"
+      "str r1, [sp, #-256]!\n"
+      "ldr r0, [sp], #248 !\n"
+      "add sp, sp, #0x8\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -577,16 +577,16 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x2b\n"
       "movz r1, #0x2a\n"
-      "sub r15, r15, #0x1000\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "str r1, [r15, #4096]\n"
-      "add r15, r15, #0x1000\n"
-      "ldr r0, [r15]\n"
-      "mov csp, r15\n"
+      "sub sp, sp, #0x1000\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "str r1, [sp, #4096]\n"
+      "add sp, sp, #0x1000\n"
+      "ldr r0, [sp]\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -611,18 +611,18 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x2b\n"
       "movz r1, #0x2a\n"
       "movz r2, #0xfff8\n"
       "movk r2, #0xffff lsl 16\n"
-      "str r1, [r15, r2 sxtw]\n"
-      "sub r15, r15, #0x8\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "ldr r0, [r15]\n"
-      "add r15, r15, #0x8\n"
-      "mov csp, r15\n"
+      "str r1, [sp, r2 sxtw]\n"
+      "sub sp, sp, #0x8\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "ldr r0, [sp]\n"
+      "add sp, sp, #0x8\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -645,17 +645,17 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x2b\n"
       "movz r1, #0x2a\n"
       "movz r2, #0xa\n"
-      "sub r15, r15, #0x50\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "str r1, [r15, r2 uxtx scaled]\n"
-      "ldr r0, [r15, r2 uxtx scaled]\n"
-      "add r15, r15, #0x50\n"
-      "mov csp, r15\n"
+      "sub sp, sp, #0x50\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "str r1, [sp, r2 uxtx scaled]\n"
+      "ldr r0, [sp, r2 uxtx scaled]\n"
+      "add sp, sp, #0x50\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -677,14 +677,14 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x10\n"
       "mov r1, 0xffffffff\n"
-      "strw r1, [r15, #-4]!\n"
-      "ldrsw r0, [r15]\n"
-      "ldrsw r1, [r15], #4 !\n"
-      "mov csp, r15\n"
+      "strw r1, [sp, #-4]!\n"
+      "ldrsw r0, [sp]\n"
+      "ldrsw r1, [sp], #4 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -707,15 +707,15 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x10\n"
       "movz r2, #0x2b\n"
       "movz r3, #0x2a\n"
-      "stp r2, r3, [r15, #-16]!\n"
-      "ldp r0, r1, [r15], #16 !\n"
+      "stp r2, r3, [sp, #-16]!\n"
+      "ldp r0, r1, [sp], #16 !\n"
       "sub r0, r0, r1\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -737,17 +737,17 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r2, #0x2b\n"
       "movz r3, #0x2a\n"
-      "sub r15, r15, #0x20\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "stp r2, r3, [r15, #16]\n"
-      "ldp r0, r1, [r15, #16]\n"
-      "add r15, r15, #0x20\n"
+      "sub sp, sp, #0x20\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "stp r2, r3, [sp, #16]\n"
+      "ldp r0, r1, [sp, #16]\n"
+      "add sp, sp, #0x20\n"
       "sub r0, r0, r1\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -767,14 +767,14 @@
   typedef int (*PushRegisterPair)() DART_UNUSED;
   EXPECT_EQ(12, EXECUTE_TEST_CODE_INT64(PushRegisterPair, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r2, #0xc\n"
       "movz r3, #0x15\n"
-      "stp r2, r3, [r15, #-16]!\n"
-      "ldr r0, [r15], #8 !\n"
-      "ldr r1, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "stp r2, r3, [sp, #-16]!\n"
+      "ldr r0, [sp], #8 !\n"
+      "ldr r1, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -795,14 +795,14 @@
   EXPECT_EQ(12,
             EXECUTE_TEST_CODE_INT64(PushRegisterPairReversed, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r3, #0xc\n"
       "movz r2, #0x15\n"
-      "stp r3, r2, [r15, #-16]!\n"
-      "ldr r0, [r15], #8 !\n"
-      "ldr r1, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "stp r3, r2, [sp, #-16]!\n"
+      "ldr r0, [sp], #8 !\n"
+      "ldr r1, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -822,14 +822,14 @@
   typedef int (*PopRegisterPair)() DART_UNUSED;
   EXPECT_EQ(12, EXECUTE_TEST_CODE_INT64(PopRegisterPair, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r2, #0xc\n"
       "movz r3, #0x15\n"
-      "str r3, [r15, #-8]!\n"
-      "str r2, [r15, #-8]!\n"
-      "ldp r0, r1, [r15], #16 !\n"
-      "mov csp, r15\n"
+      "str r3, [sp, #-8]!\n"
+      "str r2, [sp, #-8]!\n"
+      "ldp r0, r1, [sp], #16 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -850,14 +850,14 @@
   EXPECT_EQ(12,
             EXECUTE_TEST_CODE_INT64(PopRegisterPairReversed, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r3, #0xc\n"
       "movz r2, #0x15\n"
-      "str r3, [r15, #-8]!\n"
-      "str r2, [r15, #-8]!\n"
-      "ldp r1, r0, [r15], #16 !\n"
-      "mov csp, r15\n"
+      "str r3, [sp, #-8]!\n"
+      "str r2, [sp, #-8]!\n"
+      "ldp r1, r0, [sp], #16 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -882,17 +882,17 @@
   typedef intptr_t (*Semaphore)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Semaphore, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x28\n"
       "movz r1, #0x2a\n"
-      "str r0, [r15, #-8]!\n"
-      "ldxr r0, r15\n"
-      "stxr ip0, r1, r15\n"
-      "cmp ip0, #0x0\n"
+      "str r0, [sp, #-8]!\n"
+      "ldxr r0, sp\n"
+      "stxr tmp, r1, sp\n"
+      "cmp tmp, #0x0\n"
       "bne -12\n"
-      "ldr r0, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "ldr r0, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -915,17 +915,17 @@
   typedef intptr_t (*FailedSemaphore)() DART_UNUSED;
   EXPECT_EQ(41, EXECUTE_TEST_CODE_INT64(FailedSemaphore, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x28\n"
       "movz r1, #0x2a\n"
-      "str r0, [r15, #-8]!\n"
-      "ldxr r0, r15\n"
+      "str r0, [sp, #-8]!\n"
+      "ldxr r0, sp\n"
       "clrex\n"
-      "stxr ip0, r1, r15\n"
-      "ldr r0, [r15], #8 !\n"
-      "add r0, r0, ip0\n"
-      "mov csp, r15\n"
+      "stxr tmp, r1, sp\n"
+      "ldr r0, [sp], #8 !\n"
+      "add r0, r0, tmp\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -959,19 +959,19 @@
   EXPECT_EQ(42 + (DART_INT64_C(40) << 32),
             EXECUTE_TEST_CODE_INT64(Semaphore32, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x28\n"
       "add r0, r0, r0 lsl #32\n"
-      "str r0, [r15, #-8]!\n"
+      "str r0, [sp, #-8]!\n"
       "movz r0, #0x28\n"
       "movz r1, #0x2a\n"
-      "ldxrw r0, r15\n"
-      "stxrw ip0, r1, r15\n"
-      "cmp ip0, #0x0\n"
+      "ldxrw r0, sp\n"
+      "stxrw tmp, r1, sp\n"
+      "cmp tmp, #0x0\n"
       "bne -12\n"
-      "ldr r0, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "ldr r0, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -1001,19 +1001,19 @@
   EXPECT_EQ(41 + (DART_INT64_C(40) << 32),
             EXECUTE_TEST_CODE_INT64(FailedSemaphore32, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "movz r0, #0x28\n"
       "add r0, r0, r0 lsl #32\n"
-      "str r0, [r15, #-8]!\n"
+      "str r0, [sp, #-8]!\n"
       "movz r0, #0x28\n"
       "movz r1, #0x2a\n"
-      "ldxrw r0, r15\n"
+      "ldxrw r0, sp\n"
       "clrex\n"
-      "stxrw ip0, r1, r15\n"
-      "ldr r0, [r15], #8 !\n"
-      "add r0, r0, ip0\n"
-      "mov csp, r15\n"
+      "stxrw tmp, r1, sp\n"
+      "ldr r0, [sp], #8 !\n"
+      "add r0, r0, tmp\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -1072,66 +1072,66 @@
   EXPECT_EQ(0x42,
             EXECUTE_TEST_CODE_INT64(LoadAcquireStoreRelease, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "stp fp, lr, [r15, #-16]!\n"
-      "mov fp, r15\n"
-      "movz ip0, #0x7788\n"
-      "movk ip0, #0x5566 lsl 16\n"
-      "movk ip0, #0x3344 lsl 32\n"
-      "movk ip0, #0x1122 lsl 48\n"
-      "str ip0, [r15, #-8]!\n"
-      "ldar r1, r15\n"
-      "movz ip1, #0x7788\n"
-      "movk ip1, #0x5566 lsl 16\n"
-      "movk ip1, #0x3344 lsl 32\n"
-      "movk ip1, #0x1122 lsl 48\n"
-      "cmp r1, ip1\n"
+      "stp fp, lr, [sp, #-16]!\n"
+      "mov fp, sp\n"
+      "movz tmp, #0x7788\n"
+      "movk tmp, #0x5566 lsl 16\n"
+      "movk tmp, #0x3344 lsl 32\n"
+      "movk tmp, #0x1122 lsl 48\n"
+      "str tmp, [sp, #-8]!\n"
+      "ldar r1, sp\n"
+      "movz tmp2, #0x7788\n"
+      "movk tmp2, #0x5566 lsl 16\n"
+      "movk tmp2, #0x3344 lsl 32\n"
+      "movk tmp2, #0x1122 lsl 48\n"
+      "cmp r1, tmp2\n"
       "bne +164\n"
-      "add r15, r15, #0x8\n"
-      "movz ip0, #0x7788\n"
-      "movk ip0, #0x5566 lsl 16\n"
-      "movk ip0, #0x3344 lsl 32\n"
-      "movk ip0, #0x1122 lsl 48\n"
-      "str ip0, [r15, #-8]!\n"
-      "ldarw r1, r15\n"
-      "movz ip1, #0x7788\n"
-      "movk ip1, #0x5566 lsl 16\n"
-      "cmp r1, ip1\n"
+      "add sp, sp, #0x8\n"
+      "movz tmp, #0x7788\n"
+      "movk tmp, #0x5566 lsl 16\n"
+      "movk tmp, #0x3344 lsl 32\n"
+      "movk tmp, #0x1122 lsl 48\n"
+      "str tmp, [sp, #-8]!\n"
+      "ldarw r1, sp\n"
+      "movz tmp2, #0x7788\n"
+      "movk tmp2, #0x5566 lsl 16\n"
+      "cmp r1, tmp2\n"
       "bne +120\n"
-      "add r15, r15, #0x8\n"
-      "movz ip0, #0x0\n"
-      "str ip0, [r15, #-8]!\n"
+      "add sp, sp, #0x8\n"
+      "movz tmp, #0x0\n"
+      "str tmp, [sp, #-8]!\n"
       "movz r1, #0x7788\n"
       "movk r1, #0x5566 lsl 16\n"
       "movk r1, #0x3344 lsl 32\n"
       "movk r1, #0x1122 lsl 48\n"
-      "stlr r1, r15\n"
-      "ldr r1, [r15], #8 !\n"
-      "movz ip1, #0x7788\n"
-      "movk ip1, #0x5566 lsl 16\n"
-      "movk ip1, #0x3344 lsl 32\n"
-      "movk ip1, #0x1122 lsl 48\n"
-      "cmp r1, ip1\n"
+      "stlr r1, sp\n"
+      "ldr r1, [sp], #8 !\n"
+      "movz tmp2, #0x7788\n"
+      "movk tmp2, #0x5566 lsl 16\n"
+      "movk tmp2, #0x3344 lsl 32\n"
+      "movk tmp2, #0x1122 lsl 48\n"
+      "cmp r1, tmp2\n"
       "bne +60\n"
-      "movz ip0, #0x0\n"
-      "str ip0, [r15, #-8]!\n"
+      "movz tmp, #0x0\n"
+      "str tmp, [sp, #-8]!\n"
       "movz r1, #0x7788\n"
       "movk r1, #0x5566 lsl 16\n"
       "movk r1, #0x3344 lsl 32\n"
       "movk r1, #0x1122 lsl 48\n"
-      "stlrw r1, r15\n"
-      "ldr r1, [r15], #8 !\n"
-      "movz ip1, #0x7788\n"
-      "movk ip1, #0x5566 lsl 16\n"
-      "cmp r1, ip1\n"
+      "stlrw r1, sp\n"
+      "ldr r1, [sp], #8 !\n"
+      "movz tmp2, #0x7788\n"
+      "movk tmp2, #0x5566 lsl 16\n"
+      "cmp r1, tmp2\n"
       "bne +12\n"
       "movz r0, #0x42\n"
       "b +8\n"
       "movz r0, #0x84\n"
-      "mov r15, fp\n"
-      "ldp fp, lr, [r15], #16 !\n"
-      "mov csp, r15\n"
+      "mov sp, fp\n"
+      "ldp fp, lr, [sp], #16 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -1762,12 +1762,12 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov ip0, csp\n"
-      "sub ip1, csp, #0x1f\n"
-      "and csp, ip1, 0xfffffffffffffff0\n"
+      "mov tmp, csp\n"
+      "sub tmp2, csp, #0x1f\n"
+      "and csp, tmp2, 0xfffffffffffffff0\n"
       "mov r0, csp\n"
-      "sub r0, ip0, r0\n"
-      "mov csp, ip0\n"
+      "sub r0, tmp, r0\n"
+      "mov csp, tmp\n"
       "ret\n");
 }
 
@@ -2439,18 +2439,18 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v2, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v2, tmp\n"
       "fcmpd v1, v2\n"
       "beq +12\n"
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "ret\n");
 }
 
@@ -2546,18 +2546,18 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x2000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v2, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x2000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v2, tmp\n"
       "fcmpd v1, v2\n"
       "beq +12\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "ret\n");
 }
 
@@ -2598,18 +2598,18 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x6000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v2, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x6000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v2, tmp\n"
       "fcmpd v1, v2\n"
       "blt +12\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "ret\n");
 }
 
@@ -2632,19 +2632,19 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x6000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x2000 lsl 32\n"
-      "movk ip0, #0x406d lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x6000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x2000 lsl 32\n"
+      "movk tmp, #0x406d lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcmpd v1, #0.0\n"
       "bgt +16\n"
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "ret\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "ret\n");
 }
 
@@ -4276,11 +4276,11 @@
                   EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()),
                   0.0001f);
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0xa19c\n"
-      "movk ip0, #0xdc87 lsl 16\n"
-      "movk ip0, #0x6c87 lsl 32\n"
-      "movk ip0, #0x419d lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0xa19c\n"
+      "movk tmp, #0xdc87 lsl 16\n"
+      "movk tmp, #0x6c87 lsl 32\n"
+      "movk tmp, #0x419d lsl 48\n"
+      "fmovdr v0, tmp\n"
       "ret\n");
 }
 
@@ -4372,14 +4372,14 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x10\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "fstrd v1, [r15, #-8]!\n"
-      "fldrd v0, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "fstrd v1, [sp, #-8]!\n"
+      "fldrd v0, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -4402,16 +4402,16 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x10\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v2, v1\n"
-      "fstrs v2, [r15, #-8]!\n"
-      "fldrs v3, [r15], #8 !\n"
+      "fstrs v2, [sp, #-8]!\n"
+      "fldrs v3, [sp], #8 !\n"
       "fcvtds v0, v3\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -4441,22 +4441,22 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x10\n"
       "fmovd v1, 21.000000\n"
       "fmovd v2, 21.000000\n"
       "movz r1, #0x2a\n"
-      "str r1, [r15, #-8]!\n"
-      "fstrd v1, [r15, #-8]!\n"
-      "fstrd v2, [r15, #-8]!\n"
-      "fldrq v3, [r15], #16 !\n"
-      "ldr r0, [r15], #8 !\n"
-      "fstrq v3, [r15, #-16]!\n"
-      "fldrd v0, [r15], #8 !\n"
-      "fldrd v1, [r15], #8 !\n"
+      "str r1, [sp, #-8]!\n"
+      "fstrd v1, [sp, #-8]!\n"
+      "fstrd v2, [sp, #-8]!\n"
+      "fldrq v3, [sp], #16 !\n"
+      "ldr r0, [sp], #8 !\n"
+      "fstrq v3, [sp, #-16]!\n"
+      "fldrd v0, [sp], #8 !\n"
+      "fldrd v1, [sp], #8 !\n"
       "faddd v0, v0, v1\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -4470,9 +4470,9 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtzs r0, v0\n"
       "ret\n");
 }
@@ -4488,9 +4488,9 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0xc045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0xc045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtzsw r0, v0\n"
       "sxtw r0, r0\n"
       "ret\n");
@@ -4517,11 +4517,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMinInt64, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x8c40\n"
-      "movk ip0, #0x78b5 lsl 16\n"
-      "movk ip0, #0xaf1d lsl 32\n"
-      "movk ip0, #0xc415 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x8c40\n"
+      "movk tmp, #0x78b5 lsl 16\n"
+      "movk tmp, #0xaf1d lsl 32\n"
+      "movk tmp, #0xc415 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtzs r0, v0\n"
       "ret\n");
 }
@@ -4536,10 +4536,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMaxInt32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x2000 lsl 16\n"
-      "movk ip0, #0xa05f lsl 32\n"
-      "movk ip0, #0x4202 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x2000 lsl 16\n"
+      "movk tmp, #0xa05f lsl 32\n"
+      "movk tmp, #0x4202 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtzsw r0, v0\n"
       "ret\n");
 }
@@ -4555,10 +4555,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMinInt32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x2000 lsl 16\n"
-      "movk ip0, #0xa05f lsl 32\n"
-      "movk ip0, #0xc202 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x2000 lsl 16\n"
+      "movk tmp, #0xa05f lsl 32\n"
+      "movk tmp, #0xc202 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtzsw r0, v0\n"
       "sxtw r0, r0\n"
       "ret\n");
@@ -4574,9 +4574,9 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(43, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtps r0, v0\n"
       "ret\n");
 }
@@ -4592,9 +4592,9 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0xc045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0xc045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtpsw r0, v0\n"
       "sxtw r0, r0\n"
       "ret\n");
@@ -4610,11 +4610,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMaxInt64, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x8c40\n"
-      "movk ip0, #0x78b5 lsl 16\n"
-      "movk ip0, #0xaf1d lsl 32\n"
-      "movk ip0, #0x4415 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x8c40\n"
+      "movk tmp, #0x78b5 lsl 16\n"
+      "movk tmp, #0xaf1d lsl 32\n"
+      "movk tmp, #0x4415 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtps r0, v0\n"
       "ret\n");
 }
@@ -4629,11 +4629,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMinInt64, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x8c40\n"
-      "movk ip0, #0x78b5 lsl 16\n"
-      "movk ip0, #0xaf1d lsl 32\n"
-      "movk ip0, #0xc415 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x8c40\n"
+      "movk tmp, #0x78b5 lsl 16\n"
+      "movk tmp, #0xaf1d lsl 32\n"
+      "movk tmp, #0xc415 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtps r0, v0\n"
       "ret\n");
 }
@@ -4648,10 +4648,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMaxInt32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x2000 lsl 16\n"
-      "movk ip0, #0xa05f lsl 32\n"
-      "movk ip0, #0x4202 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x2000 lsl 16\n"
+      "movk tmp, #0xa05f lsl 32\n"
+      "movk tmp, #0x4202 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtpsw r0, v0\n"
       "ret\n");
 }
@@ -4667,10 +4667,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMinInt32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x2000 lsl 16\n"
-      "movk ip0, #0xa05f lsl 32\n"
-      "movk ip0, #0xc202 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x2000 lsl 16\n"
+      "movk tmp, #0xa05f lsl 32\n"
+      "movk tmp, #0xc202 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtpsw r0, v0\n"
       "sxtw r0, r0\n"
       "ret\n");
@@ -4686,9 +4686,9 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtms r0, v0\n"
       "ret\n");
 }
@@ -4704,9 +4704,9 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-43, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0xc045 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0xc045 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtmsw r0, v0\n"
       "sxtw r0, r0\n"
       "ret\n");
@@ -4722,11 +4722,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMaxInt64, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x8c40\n"
-      "movk ip0, #0x78b5 lsl 16\n"
-      "movk ip0, #0xaf1d lsl 32\n"
-      "movk ip0, #0x4415 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x8c40\n"
+      "movk tmp, #0x78b5 lsl 16\n"
+      "movk tmp, #0xaf1d lsl 32\n"
+      "movk tmp, #0x4415 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtms r0, v0\n"
       "ret\n");
 }
@@ -4741,11 +4741,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMinInt64, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x8c40\n"
-      "movk ip0, #0x78b5 lsl 16\n"
-      "movk ip0, #0xaf1d lsl 32\n"
-      "movk ip0, #0xc415 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x8c40\n"
+      "movk tmp, #0x78b5 lsl 16\n"
+      "movk tmp, #0xaf1d lsl 32\n"
+      "movk tmp, #0xc415 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtms r0, v0\n"
       "ret\n");
 }
@@ -4760,10 +4760,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMaxInt32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x2000 lsl 16\n"
-      "movk ip0, #0xa05f lsl 32\n"
-      "movk ip0, #0x4202 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x2000 lsl 16\n"
+      "movk tmp, #0xa05f lsl 32\n"
+      "movk tmp, #0x4202 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtmsw r0, v0\n"
       "ret\n");
 }
@@ -4779,10 +4779,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(kMinInt32, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x2000 lsl 16\n"
-      "movk ip0, #0xa05f lsl 32\n"
-      "movk ip0, #0xc202 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x2000 lsl 16\n"
+      "movk tmp, #0xa05f lsl 32\n"
+      "movk tmp, #0xc202 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtmsw r0, v0\n"
       "sxtw r0, r0\n"
       "ret\n");
@@ -4831,8 +4831,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fabsd v0, v1\n"
       "ret\n");
 }
@@ -4847,8 +4847,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0xc045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0xc045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fabsd v0, v1\n"
       "ret\n");
 }
@@ -4863,8 +4863,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(-42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fnegd v0, v1\n"
       "ret\n");
 }
@@ -4879,8 +4879,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0xc045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0xc045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fnegd v0, v1\n"
       "ret\n");
 }
@@ -4895,8 +4895,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(8.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4050 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4050 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fsqrtd v0, v1\n"
       "ret\n");
 }
@@ -4912,8 +4912,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4055 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4055 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fmovd v2, 0.500000\n"
       "fmuld v0, v1, v2\n"
       "ret\n");
@@ -4930,8 +4930,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4055 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4055 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fmovd v2, 2.000000\n"
       "fdivd v0, v1, v2\n"
       "ret\n");
@@ -4948,9 +4948,9 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0xc000 lsl 32\n"
-      "movk ip0, #0x4044 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0xc000 lsl 32\n"
+      "movk tmp, #0x4044 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fmovd v2, 0.500000\n"
       "faddd v0, v1, v2\n"
       "ret\n");
@@ -4967,9 +4967,9 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fmovd v2, 0.500000\n"
       "fsubd v0, v1, v2\n"
       "ret\n");
@@ -4992,19 +4992,19 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "sub r15, r15, #0x8\n"
-      "add r2, r15, #0x1\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "sub sp, sp, #0x8\n"
+      "add r2, sp, #0x1\n"
       "fstrd v1, [r2, #-1]\n"
       "fldrd v0, [r2, #-1]\n"
-      "add r15, r15, #0x8\n"
-      "mov csp, r15\n"
+      "add sp, sp, #0x8\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5030,18 +5030,18 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "sub csp, csp, #0x100\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "fstrd v1, [r15, #-256]!\n"
-      "fldrd v0, [r15], #248 !\n"
-      "add r15, r15, #0x8\n"
-      "mov csp, r15\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "fstrd v1, [sp, #-256]!\n"
+      "fldrd v0, [sp], #248 !\n"
+      "add sp, sp, #0x8\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5062,19 +5062,19 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "sub r15, r15, #0x1000\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "fstrd v1, [r15, #4096]\n"
-      "add r15, r15, #0x1000\n"
-      "fldrd v0, [r15]\n"
-      "mov csp, r15\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "sub sp, sp, #0x1000\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "fstrd v1, [sp, #4096]\n"
+      "add sp, sp, #0x1000\n"
+      "fldrd v0, [sp]\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5099,21 +5099,21 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "movz r2, #0xfff8\n"
       "movk r2, #0xffff lsl 16\n"
-      "fstrd v1, [r15, r2 sxtw]\n"
-      "sub r15, r15, #0x8\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "fldrd v0, [r15]\n"
-      "add r15, r15, #0x8\n"
-      "mov csp, r15\n"
+      "fstrd v1, [sp, r2 sxtw]\n"
+      "sub sp, sp, #0x8\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "fldrd v0, [sp]\n"
+      "add sp, sp, #0x8\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5136,20 +5136,20 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "movz r2, #0xa\n"
-      "sub r15, r15, #0x50\n"
-      "and csp, r15, 0xfffffffffffffff0\n"
-      "fstrd v1, [r15, r2 uxtx scaled]\n"
-      "fldrd v0, [r15, r2 uxtx scaled]\n"
-      "add r15, r15, #0x50\n"
-      "mov csp, r15\n"
+      "sub sp, sp, #0x50\n"
+      "and csp, sp, 0xfffffffffffffff0\n"
+      "fstrd v1, [sp, r2 uxtx scaled]\n"
+      "fldrd v0, [sp, r2 uxtx scaled]\n"
+      "add sp, sp, #0x50\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5369,10 +5369,10 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "movz ip0, #0xc055 lsl 48\n"
-      "fmovdr v2, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0xc055 lsl 48\n"
+      "fmovdr v2, tmp\n"
       "fcvtsd v1, v1\n"
       "fcvtsd v2, v2\n"
       "veor v3, v3, v3\n"
@@ -5408,10 +5408,10 @@
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
-      "movz ip0, #0xc055 lsl 48\n"
-      "fmovdr v2, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
+      "movz tmp, #0xc055 lsl 48\n"
+      "fmovdr v2, tmp\n"
       "vinsd v3[0], v1[0]\n"
       "vinsd v3[1], v2[0]\n"
       "vnegd v4, v3\n"
@@ -5459,8 +5459,8 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(12.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "fmovd v1, 1.000000\n"
       "fmovd v2, 2.000000\n"
       "fmovd v3, 3.000000\n"
@@ -5527,13 +5527,13 @@
   EXPECT_EQ(-6.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "fmovd v1, 1.000000\n"
       "fmovd v2, 2.000000\n"
       "fmovd v3, 3.000000\n"
-      "movz ip0, #0x0\n"
-      "fmovdr v5, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v5, tmp\n"
       "fcvtsd v0, v0\n"
       "fcvtsd v1, v1\n"
       "fcvtsd v2, v2\n"
@@ -5596,8 +5596,8 @@
   EXPECT_EQ(14.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "fmovd v1, 1.000000\n"
       "fmovd v2, 2.000000\n"
       "fmovd v3, 3.000000\n"
@@ -5663,8 +5663,8 @@
   EXPECT_EQ(4.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "fmovd v1, 1.000000\n"
       "fmovd v2, 2.000000\n"
       "fmovd v3, 3.000000\n"
@@ -5746,8 +5746,8 @@
   EXPECT_DISASSEMBLY(
       "fmovd v0, 2.000000\n"
       "fmovd v1, 3.000000\n"
-      "movz ip0, #0x0\n"
-      "fmovdr v5, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v5, tmp\n"
       "vinsd v4[0], v0[0]\n"
       "vinsd v4[1], v1[0]\n"
       "vsubd v5, v5, v4\n"
@@ -5845,16 +5845,16 @@
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "fmovd v0, 21.000000\n"
       "vdupd v1, v0[0]\n"
       "sub csp, csp, #0x10\n"
-      "fstrq v1, [r15, #-16]!\n"
-      "fldrd v2, [r15], #8 !\n"
-      "fldrd v3, [r15], #8 !\n"
+      "fstrq v1, [sp, #-16]!\n"
+      "fldrd v2, [sp], #8 !\n"
+      "fldrd v3, [sp], #8 !\n"
       "faddd v0, v2, v3\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5893,17 +5893,17 @@
   EXPECT_EQ(84.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "fmovd v0, 21.000000\n"
       "fcvtsd v0, v0\n"
       "vdups v1, v0[0]\n"
       "sub csp, csp, #0x10\n"
-      "fstrq v1, [r15, #-16]!\n"
-      "fldrs v3, [r15], #4 !\n"
-      "fldrs v2, [r15], #4 !\n"
-      "fldrs v1, [r15], #4 !\n"
-      "fldrs v0, [r15], #4 !\n"
+      "fstrq v1, [sp, #-16]!\n"
+      "fldrs v3, [sp], #4 !\n"
+      "fldrs v2, [sp], #4 !\n"
+      "fldrs v1, [sp], #4 !\n"
+      "fldrs v0, [sp], #4 !\n"
       "fcvtds v0, v0\n"
       "fcvtds v1, v1\n"
       "fcvtds v2, v2\n"
@@ -5911,7 +5911,7 @@
       "faddd v0, v1, v1\n"
       "faddd v0, v0, v2\n"
       "faddd v0, v0, v3\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5940,17 +5940,17 @@
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       ""
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v5, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v5, tmp\n"
       "vinsd v1[1], v5[0]\n"
       "sub csp, csp, #0x10\n"
-      "fstrq v1, [r15, #-16]!\n"
-      "fldrd v2, [r15], #8 !\n"
-      "fldrd v3, [r15], #8 !\n"
+      "fstrq v1, [sp, #-16]!\n"
+      "fldrd v2, [sp], #8 !\n"
+      "fldrd v3, [sp], #8 !\n"
       "fmovdd v0, v3\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -5996,23 +5996,23 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
       "fmovd v0, 21.000000\n"
       "fcvtsd v0, v0\n"
       "vinss v1[3], v0[0]\n"
       "vinss v1[1], v0[0]\n"
-      "movz ip0, #0x0\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x0\n"
+      "fmovdr v0, tmp\n"
       "fcvtsd v0, v0\n"
       "vinss v1[2], v0[0]\n"
       "vinss v1[0], v0[0]\n"
       "sub csp, csp, #0x10\n"
-      "fstrq v1, [r15, #-16]!\n"
-      "fldrs v3, [r15], #4 !\n"
-      "fldrs v2, [r15], #4 !\n"
-      "fldrs v1, [r15], #4 !\n"
-      "fldrs v0, [r15], #4 !\n"
+      "fstrq v1, [sp, #-16]!\n"
+      "fldrs v3, [sp], #4 !\n"
+      "fldrs v2, [sp], #4 !\n"
+      "fldrs v1, [sp], #4 !\n"
+      "fldrs v0, [sp], #4 !\n"
       "fcvtds v0, v0\n"
       "fcvtds v1, v1\n"
       "fcvtds v2, v2\n"
@@ -6020,7 +6020,7 @@
       "faddd v0, v0, v1\n"
       "faddd v0, v0, v2\n"
       "faddd v0, v0, v3\n"
-      "mov csp, r15\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -6350,10 +6350,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(0xfffffffe, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0xc045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0xc045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v0, v0\n"
       "fcvtsd v1, v1\n"
       "vdups v2, v0[0]\n"
@@ -6393,10 +6393,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0xc045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0xc045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "vdupd v2, v0[0]\n"
       "vinsd v3[0], v0[0]\n"
       "vinsd v3[1], v1[0]\n"
@@ -6437,10 +6437,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(0xfffffffe, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0xc045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0xc045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v0, v0\n"
       "fcvtsd v1, v1\n"
       "vdups v2, v0[0]\n"
@@ -6480,10 +6480,10 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0xc045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0xc045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "vdupd v2, v0[0]\n"
       "vinsd v3[0], v0[0]\n"
       "vinsd v3[1], v1[0]\n"
@@ -6524,11 +6524,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(0xfffffffe, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v0, v0\n"
       "fcvtsd v1, v1\n"
       "vdups v2, v0[0]\n"
@@ -6568,11 +6568,11 @@
   typedef int64_t (*Int64Return)() DART_UNUSED;
   EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4045 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4045 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4045 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4045 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "vdupd v2, v0[0]\n"
       "vinsd v3[0], v0[0]\n"
       "vinsd v3[1], v1[0]\n"
@@ -6664,9 +6664,9 @@
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       "fmovd v0, 21.000000\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4034 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4034 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "vdupd v2, v0[0]\n"
       "vinsd v3[0], v0[0]\n"
       "vinsd v3[1], v1[0]\n"
@@ -6758,9 +6758,9 @@
   EXPECT_EQ(42.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
       "fmovd v0, 21.000000\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4035 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4035 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "vdupd v2, v0[0]\n"
       "vinsd v3[0], v0[0]\n"
       "vinsd v3[1], v1[0]\n"
@@ -6798,11 +6798,11 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(15.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4050 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4048 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4050 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4048 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v0, v0\n"
       "fcvtsd v1, v1\n"
       "veor v3, v3, v3\n"
@@ -6837,11 +6837,11 @@
   typedef double (*DoubleReturn)() DART_UNUSED;
   EXPECT_EQ(15.0, EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry()));
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x4050 lsl 48\n"
-      "fmovdr v0, ip0\n"
-      "movz ip0, #0x8000 lsl 32\n"
-      "movk ip0, #0x4048 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x4050 lsl 48\n"
+      "fmovdr v0, tmp\n"
+      "movz tmp, #0x8000 lsl 32\n"
+      "movk tmp, #0x4048 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "vinsd v3[0], v0[0]\n"
       "vinsd v3[1], v1[0]\n"
       "vsqrtd v4, v3\n"
@@ -6906,9 +6906,9 @@
   float res = EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry());
   EXPECT_FLOAT_EQ(arm_recip_estimate(147.0), res, 0.0001);
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x6000 lsl 32\n"
-      "movk ip0, #0x4062 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x6000 lsl 32\n"
+      "movk tmp, #0x4062 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v1, v1\n"
       "vinss v2[0], v1[0]\n"
       "vinss v2[1], v1[0]\n"
@@ -6976,11 +6976,11 @@
   double res = EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry());
   EXPECT_FLOAT_EQ(42.0, res, 0.0001);
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x8618\n"
-      "movk ip0, #0x1861 lsl 16\n"
-      "movk ip0, #0x6186 lsl 32\n"
-      "movk ip0, #0x3fb8 lsl 48\n"
-      "fmovdr v0, ip0\n"
+      "movz tmp, #0x8618\n"
+      "movk tmp, #0x1861 lsl 16\n"
+      "movk tmp, #0x6186 lsl 32\n"
+      "movk tmp, #0x3fb8 lsl 48\n"
+      "fmovdr v0, tmp\n"
       "fcvtsd v0, v0\n"
       "vdups v1, v0[0]\n"
       "vrecpes v2, v1\n"
@@ -7072,9 +7072,9 @@
   double res = EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry());
   EXPECT_FLOAT_EQ(arm_reciprocal_sqrt_estimate(147.0), res, 0.0001);
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0x6000 lsl 32\n"
-      "movk ip0, #0x4062 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0x6000 lsl 32\n"
+      "movk tmp, #0x4062 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v1, v1\n"
       "vrsqrtes v0, v1\n"
       "fcvtds v0, v0\n"
@@ -7125,9 +7125,9 @@
   double res = EXECUTE_TEST_CODE_DOUBLE(DoubleReturn, test->entry());
   EXPECT_FLOAT_EQ(1.0 / sqrt(147000.0), res, 0.0001);
   EXPECT_DISASSEMBLY(
-      "movz ip0, #0xf1c0 lsl 32\n"
-      "movk ip0, #0x4101 lsl 48\n"
-      "fmovdr v1, ip0\n"
+      "movz tmp, #0xf1c0 lsl 32\n"
+      "movk tmp, #0x4101 lsl 48\n"
+      "fmovdr v1, tmp\n"
       "fcvtsd v1, v1\n"
       "vrsqrtes v0, v1\n"
       "vmuls v31, v0, v0\n"
@@ -7318,18 +7318,18 @@
   EXPECT_EQ(123, EXECUTE_TEST_CODE_INTPTR_INTPTR(StoreReleaseLoadAcquire,
                                                  test->entry(), 123));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "str r1, [r15, #-8]!\n"
+      "str r1, [sp, #-8]!\n"
       "movz r1, #0x0\n"
-      "str r1, [r15, #-8]!\n"
+      "str r1, [sp, #-8]!\n"
       "mov r1, r0\n"
       "movz r0, #0x0\n"
-      "stlr r1, r15\n"
-      "ldar r0, r15\n"
-      "ldr r1, [r15], #8 !\n"
-      "ldr r1, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "stlr r1, sp\n"
+      "ldar r0, sp\n"
+      "ldr r1, [sp], #8 !\n"
+      "ldr r1, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 
@@ -7355,22 +7355,22 @@
   EXPECT_EQ(123, EXECUTE_TEST_CODE_INTPTR_INTPTR(StoreReleaseLoadAcquire1024,
                                                  test->entry(), 123));
   EXPECT_DISASSEMBLY(
-      "mov r15, csp\n"
+      "mov sp, csp\n"
       "sub csp, csp, #0x1000\n"
-      "str r1, [r15, #-8]!\n"
+      "str r1, [sp, #-8]!\n"
       "movz r1, #0x0\n"
-      "str r1, [r15, #-8]!\n"
+      "str r1, [sp, #-8]!\n"
       "mov r1, r0\n"
       "movz r0, #0x0\n"
-      "sub r15, r15, #0x2000\n"
-      "add ip0, r15, #0x400\n"
-      "stlr r1, ip0\n"
-      "add ip1, r15, #0x400\n"
-      "ldar r0, ip1\n"
-      "add r15, r15, #0x2000\n"
-      "ldr r1, [r15], #8 !\n"
-      "ldr r1, [r15], #8 !\n"
-      "mov csp, r15\n"
+      "sub sp, sp, #0x2000\n"
+      "add tmp, sp, #0x400\n"
+      "stlr r1, tmp\n"
+      "add tmp2, sp, #0x400\n"
+      "ldar r0, tmp2\n"
+      "add sp, sp, #0x2000\n"
+      "ldr r1, [sp], #8 !\n"
+      "ldr r1, [sp], #8 !\n"
+      "mov csp, sp\n"
       "ret\n");
 }
 #endif
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index a3b12b0..69c197c 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -2060,6 +2060,11 @@
     movl(dest, value);
   }
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   pushl(value);
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc
index 1c67022..897c9d7 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv.cc
@@ -3142,6 +3142,11 @@
   ASSERT(memory_order == kRelaxedNonAtomic);
   sx(value, dest);
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   beq(object, value, &done, kNearJump);
   BranchIfSmi(value, &done, kNearJump);
@@ -3149,7 +3154,7 @@
   lbu(TMP2, FieldAddress(value, target::Object::tags_offset()));
   srli(TMP, TMP, target::UntaggedObject::kBarrierOverlapShift);
   and_(TMP, TMP, TMP2);
-  and_(TMP, TMP, WRITE_BARRIER_MASK);
+  andi(TMP, TMP, target::UntaggedObject::kGenerationalBarrierMask);
   beqz(TMP, &done, kNearJump);
   Stop("Store buffer update is required");
   Bind(&done);
@@ -3171,6 +3176,11 @@
     StoreToOffset(value, object, offset - kHeapObjectTag);
   }
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   beq(object, value, &done, kNearJump);
   BranchIfSmi(value, &done, kNearJump);
@@ -3178,7 +3188,7 @@
   lbu(TMP2, FieldAddress(value, target::Object::tags_offset()));
   srli(TMP, TMP, target::UntaggedObject::kBarrierOverlapShift);
   and_(TMP, TMP, TMP2);
-  and_(TMP, TMP, WRITE_BARRIER_MASK);
+  andi(TMP, TMP, target::UntaggedObject::kGenerationalBarrierMask);
   beqz(TMP, &done, kNearJump);
   Stop("Store buffer update is required");
   Bind(&done);
@@ -4156,6 +4166,10 @@
   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) {
@@ -4176,9 +4190,7 @@
     addi(FP, SP, 2 * target::kWordSize + frame_size);
   }
 
-  const RegisterSet kVolatileRegisterSet(kAbiVolatileCpuRegs,
-                                         kAbiVolatileFpuRegs);
-  PushRegisters(kVolatileRegisterSet);
+  PushRegisters(kRuntimeCallSavedRegisters);
 
   if (!is_leaf) {  // Leaf calling sequence aligns the stack itself.
     ReserveAlignedFrameSpace(0);
@@ -4186,18 +4198,15 @@
 }
 
 void Assembler::LeaveCallRuntimeFrame(bool is_leaf) {
-  const RegisterSet kVolatileRegisterSet(kAbiVolatileCpuRegs,
-                                         kAbiVolatileFpuRegs);
-
   const intptr_t kPushedRegistersSize =
-      kVolatileRegisterSet.CpuRegisterCount() * target::kWordSize +
-      kVolatileRegisterSet.FpuRegisterCount() * kFpuRegisterSize +
+      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(kVolatileRegisterSet);
+  PopRegisters(kRuntimeCallSavedRegisters);
 
   LeaveStubFrame();
 }
diff --git a/runtime/vm/compiler/assembler/assembler_riscv_test.cc b/runtime/vm/compiler/assembler/assembler_riscv_test.cc
index b596017..9f25743 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv_test.cc
@@ -1102,6 +1102,8 @@
 
 #if XLEN >= 64
 ASSEMBLER_TEST_GENERATE(LoadWordUnsigned_0, assembler) {
+  FLAG_use_compressed_instructions = false;
+  __ SetExtensions(RV_G);
   __ lwu(A0, Address(A0, 0));
   __ ret();
 }
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 4e36eff..82a37b8 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -1602,6 +1602,11 @@
     movq(dest, value);
   }
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   pushq(value);
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
@@ -1627,6 +1632,11 @@
     OBJ(mov)(dest, value);
   }
 #if defined(DEBUG)
+  // We can't assert the incremental barrier is not needed here, only the
+  // generational barrier. We sometimes omit the write barrier when 'value' is
+  // a constant, but we don't eagerly mark 'value' and instead assume it is also
+  // reachable via a constant pool, so it doesn't matter if it is not traced via
+  // 'object'.
   Label done;
   pushq(value);
   StoreIntoObjectFilter(object, value, &done, kValueCanBeSmi, kJumpToNoUpdate);
diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc
index 761a858..c0acbff 100644
--- a/runtime/vm/compiler/assembler/assembler_x64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc
@@ -510,8 +510,8 @@
   EXPECT_EQ(1, reinterpret_cast<CmpbCode>(test->entry())());
   EXPECT_DISASSEMBLY(
       "movl rax,1\n"
-      "movl r11,0xffffff11\n"
-      "push r11\n"
+      "movl tmp,0xffffff11\n"
+      "push tmp\n"
       "cmpb [rsp],0x11\n"
       "jz +7\n"
       "movl rax,0\n"
@@ -542,8 +542,8 @@
   EXPECT_DISASSEMBLY(
       "movl rax,1\n"
       "movl rcx,0\n"
-      "movl r11,0xffffff11\n"
-      "push r11\n"
+      "movl tmp,0xffffff11\n"
+      "push tmp\n"
       "testb [rsp],0x10\n"
       "cmovzq rax,rcx\n"
       "testb [rsp],0x20\n"
@@ -951,8 +951,8 @@
   __ addq(RAX, R8);
 
   __ movq(R10, Immediate(2));
-  __ movq(R11, Immediate(4));
-  __ imulq(R10, R11);
+  __ movq(TMP, Immediate(4));
+  __ imulq(R10, TMP);
   __ addq(RAX, R10);
 
   __ movq(R15, Immediate(2));
@@ -977,8 +977,8 @@
       "pop r9\n"
       "addq rax,r8\n"
       "movl r10,2\n"
-      "movl r11,4\n"
-      "imulq r10,r11\n"
+      "movl tmp,4\n"
+      "imulq r10,tmp\n"
       "addq rax,r10\n"
       "movl pp,2\n"
       "imulq pp,pp,4\n"
@@ -1012,8 +1012,8 @@
       "movq rax,0x1234567887654321\n"
       "movq rcx,0x0db4da5f7ef412b1\n"
       "imulq rax,rcx\n"
-      "movq r11,0x1234567887654321\n"
-      "imulq rcx,r11\n"
+      "movq tmp,0x1234567887654321\n"
+      "imulq rcx,tmp\n"
       "cmpq rax,rcx\n"
       "jz +7\n"
       "int3\n"
@@ -1327,8 +1327,8 @@
   typedef intptr_t (*MoveExtend)();
   EXPECT_EQ(0x7ffffffe, reinterpret_cast<MoveExtend>(test->entry())());
   EXPECT_DISASSEMBLY(
-      "movl r11,0xffffffff\n"
-      "push r11\n"
+      "movl tmp,0xffffffff\n"
+      "push tmp\n"
       "push 0x7fffffff\n"
       "movsxdq rdx,[rsp+0x8]\n"
       "movsxdq rax,[rsp]\n"
@@ -1770,10 +1770,10 @@
       "addq r10,[rsp+0x10]\n"
       "movq rax,[rsp+0x8]\n"
       "adcq rax,[rsp+0x18]\n"
-      "pop r11\n"
-      "pop r11\n"
-      "pop r11\n"
-      "pop r11\n"
+      "pop tmp\n"
+      "pop tmp\n"
+      "pop tmp\n"
+      "pop tmp\n"
       "ret\n");
 }
 
@@ -1866,10 +1866,10 @@
       "subq r10,[rsp+0x10]\n"
       "movq rax,[rsp+0x8]\n"
       "sbbq rax,[rsp+0x18]\n"
-      "pop r11\n"
-      "pop r11\n"
-      "pop r11\n"
-      "pop r11\n"
+      "pop tmp\n"
+      "pop tmp\n"
+      "pop tmp\n"
+      "pop tmp\n"
       "ret\n");
 }
 
@@ -2391,8 +2391,8 @@
       "movl rcx,2\n"
       "shlq rdx,cl\n"
       "shldq rdx,r8,2\n"
-      "movq r11,0xf000000000000003\n"
-      "cmpq rdx,r11\n"
+      "movq tmp,0xf000000000000003\n"
+      "cmpq rdx,tmp\n"
       "jz +7\n"
       "int3\n"
       "movq rdx,0xff00000000000000\n"
@@ -2400,8 +2400,8 @@
       "movl rcx,2\n"
       "shlq rdx,cl\n"
       "shldq rdx,r8,cl\n"
-      "movq r11,0xf000000000000003\n"
-      "cmpq rdx,r11\n"
+      "movq tmp,0xf000000000000003\n"
+      "cmpq rdx,tmp\n"
       "jz +7\n"
       "int3\n"
       "movq rdx,0xff00000000000000\n"
@@ -2409,8 +2409,8 @@
       "movl rcx,2\n"
       "shrq rdx,cl\n"
       "shrdq rdx,r8,cl\n"
-      "movq r11,0xcff0000000000000\n"
-      "cmpq rdx,r11\n"
+      "movq tmp,0xcff0000000000000\n"
+      "cmpq rdx,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0\n"
@@ -2697,31 +2697,31 @@
       "movl rax,1\n"
       "shlq rax,63\n"
       "sarq rax,3\n"
-      "movq r11,0xf000000000000000\n"
-      "cmpq rax,r11\n"
+      "movq tmp,0xf000000000000000\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,1\n"
       "movl rcx,3\n"
       "shlq rax,63\n"
       "sarq rax,cl\n"
-      "movq r11,0xf000000000000000\n"
-      "cmpq rax,r11\n"
+      "movq tmp,0xf000000000000000\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "push pp\n"
       "movq pp,0xf000000000000001\n"
       "andq pp,-1\n"
-      "movq r11,0x8000000000000001\n"
-      "andq pp,r11\n"
+      "movq tmp,0x8000000000000001\n"
+      "andq pp,tmp\n"
       "orq pp,2\n"
-      "movq r11,0xf800000000000000\n"
-      "orq pp,r11\n"
+      "movq tmp,0xf800000000000000\n"
+      "orq pp,tmp\n"
       "xorq pp,1\n"
-      "movq r11,0x0800000000000000\n"
-      "xorq pp,r11\n"
-      "movq r11,0xf000000000000002\n"
-      "cmpq pp,r11\n"
+      "movq tmp,0x0800000000000000\n"
+      "xorq pp,tmp\n"
+      "movq tmp,0xf000000000000002\n"
+      "cmpq pp,tmp\n"
       "jz +7\n"
       "int3\n"
       "andl pp,2\n"
@@ -3080,7 +3080,7 @@
   typedef int (*CallSimpleLeafCode)();
   EXPECT_EQ(42 + 87, reinterpret_cast<CallSimpleLeafCode>(test->entry())());
   EXPECT_DISASSEMBLY_ENDS_WITH(
-      "call r11\n"
+      "call tmp\n"
       "addq rsp,8\n"
       "ret\n");
 }
@@ -3100,7 +3100,7 @@
 ASSEMBLER_TEST_RUN(JumpSimpleLeaf, test) {
   typedef int (*JumpSimpleLeafCode)();
   EXPECT_EQ(42, reinterpret_cast<JumpSimpleLeafCode>(test->entry())());
-  EXPECT_DISASSEMBLY_ENDS_WITH("jmp r11\n");
+  EXPECT_DISASSEMBLY_ENDS_WITH("jmp tmp\n");
 }
 
 ASSEMBLER_TEST_GENERATE(JumpIndirect, assembler) {
@@ -3185,7 +3185,7 @@
       "movss r8,xmm7\n"
       "movss r9,xmm8\n"
       "movss r10,xmm9\n"
-      "movss r11,xmm10\n"
+      "movss tmp,xmm10\n"
       "movss r12,xmm11\n"
       "movss r13,xmm12\n"
       "movss thr,xmm13\n"
@@ -3209,7 +3209,7 @@
       "movss thr,xmm15\n"
       "movss r13,xmm14\n"
       "movss r12,xmm13\n"
-      "movss r11,xmm12\n"
+      "movss tmp,xmm12\n"
       "movss r10,xmm11\n"
       "movss r9,xmm10\n"
       "movss r8,xmm9\n"
@@ -3384,8 +3384,8 @@
   EXPECT_FLOAT_EQ(-1.0, res, 0.000001f);
   EXPECT_DISASSEMBLY_NOT_WINDOWS_ENDS_WITH(
       "movups xmm10,[rax]\n"
-      "movq r11,[thr+0x...]\n"
-      "xorpd xmm10,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "xorpd xmm10,[tmp]\n"
       "movaps xmm0,xmm10\n"
       "pop thr\n"
       "pop pp\n"
@@ -3413,8 +3413,8 @@
   EXPECT_FLOAT_EQ(1.0, res, 0.000001f);
   EXPECT_DISASSEMBLY_NOT_WINDOWS_ENDS_WITH(
       "movups xmm10,[rax]\n"
-      "movq r11,[thr+0x...]\n"
-      "movups xmm0,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "movups xmm0,[tmp]\n"
       "andpd xmm0,xmm10\n"
       "pop thr\n"
       "pop pp\n"
@@ -4066,8 +4066,8 @@
       "movl rax,0x4144cccd\n"
       "movd xmm0,rax\n"
       "shufps xmm0,xmm0 [0]\n"
-      "movq r11,[thr+0x...]\n"
-      "xorps xmm0,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "xorps xmm0,[tmp]\n"
       "shufps xmm0,xmm0 [aa]\n"
       "pop thr\n"
       "pop pp\n"
@@ -4103,8 +4103,8 @@
       "movl rax,-0x3e8b3333\n"
       "movd xmm0,rax\n"
       "shufps xmm0,xmm0 [0]\n"
-      "movq r11,[thr+0x...]\n"
-      "andps xmm0,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "andps xmm0,[tmp]\n"
       "shufps xmm0,xmm0 [aa]\n"
       "pop thr\n"
       "pop pp\n"
@@ -4138,8 +4138,8 @@
       "movl rax,0x4144cccd\n"
       "movd xmm0,rax\n"
       "shufps xmm0,xmm0 [0]\n"
-      "movq r11,[thr+0x...]\n"
-      "andps xmm0,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "andps xmm0,[tmp]\n"
       "shufps xmm0,xmm0 [ff]\n"
       "pop thr\n"
       "pop pp\n"
@@ -4288,8 +4288,8 @@
   EXPECT_EQ(static_cast<uword>(0x0), res);
   EXPECT_DISASSEMBLY_NOT_WINDOWS_ENDS_WITH(
       "movups xmm9,[rax]\n"
-      "movq r11,[thr+0x...]\n"
-      "movups xmm0,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "movups xmm0,[tmp]\n"
       "xorps xmm0,xmm9\n"
       "push rax\n"
       "movss [rsp],xmm0\n"
@@ -4756,10 +4756,10 @@
   double res = reinterpret_cast<Int32ToDoubleConversion>(test->entry())();
   EXPECT_FLOAT_EQ(-2.0, res, 0.001);
   EXPECT_DISASSEMBLY(
-      "movq r11,0x1111111100000006\n"
-      "cvtsi2sd xmm0,r11\n"
-      "movq r11,0x2222222200000008\n"
-      "cvtsi2sd xmm8,r11\n"
+      "movq tmp,0x1111111100000006\n"
+      "cvtsi2sd xmm0,tmp\n"
+      "movq tmp,0x2222222200000008\n"
+      "cvtsi2sd xmm8,tmp\n"
       "subsd xmm0,xmm8\n"
       "ret\n");
 }
@@ -4823,8 +4823,8 @@
       "movsd xmm9,[rsp]\n"
       "pop rax\n"
       "cvttsd2siq rax,xmm9\n"
-      "movq r11,0x8000000000000000\n"
-      "cmpq rax,r11\n"
+      "movq tmp,0x8000000000000000\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movq rax,0x4258727cda000000\n"
@@ -4904,8 +4904,8 @@
       "movsd xmm9,[rsp]\n"
       "pop rax\n"
       "cvttsd2sil rax,xmm9\n"
-      "movl r11,0x80000000\n"
-      "cmpq rax,r11\n"
+      "movl tmp,0x80000000\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movq rax,0xc045000000000000\n"
@@ -4914,8 +4914,8 @@
       "pop rax\n"
       "movq r10,-1\n"
       "cvttsd2sil r10,xmm9\n"
-      "movl r11,0xffffffd6\n"
-      "cmpq r10,r11\n"
+      "movl tmp,0xffffffd6\n"
+      "cmpq r10,tmp\n"
       "jz +7\n"
       "int3\n"
       "movq rax,0x4045000000000000\n"
@@ -4991,8 +4991,8 @@
       "cmpq rcx,0x1e\n"
       "jnz +63\n"
       "push rax\n"
-      "movq r11,[pp+0xf]\n"
-      "movq [rsp],r11\n"
+      "movq tmp,[pp+0xf]\n"
+      "movq [rsp],tmp\n"
       "pop rcx\n"
       "cmpq rcx,[pp+0xf]\n"
       "jnz +43\n"
@@ -5035,8 +5035,8 @@
       "cmpl rcx,0x1e\n"
       "jnz +62\n"
       "push rax\n"
-      "movq r11,[pp+0xf]\n"
-      "movq [rsp],r11\n"
+      "movq tmp,[pp+0xf]\n"
+      "movq [rsp],tmp\n"
       "pop rcx\n"
       "cmpl rcx,[pp+0xf]\n"
       "jnz +42\n"
@@ -5464,8 +5464,8 @@
       "movq r12,[rdi+0x8]\n"
       "movq thr,rsi\n"
       "movq pp,[r12+0x27]\n"
-      "movq r11,[thr+0x...]\n"
-      "andpd xmm0,[r11]\n"
+      "movq tmp,[thr+0x...]\n"
+      "andpd xmm0,[tmp]\n"
       "pop thr\n"
       "pop pp\n"
       "pop r12\n"
@@ -5832,8 +5832,8 @@
   EXPECT_EQ(1, reinterpret_cast<BitTest>(test->entry())());
   EXPECT_DISASSEMBLY(
       "movl rax,4\n"
-      "movl r11,2\n"
-      "btq rax,r11\n"
+      "movl tmp,2\n"
+      "btq rax,tmp\n"
       "jc +7\n"
       "int3\n"
       "movl rax,1\n"
@@ -5855,8 +5855,8 @@
   typedef int (*BitTestImmediate)();
   EXPECT_EQ(1, reinterpret_cast<BitTestImmediate>(test->entry())());
   EXPECT_DISASSEMBLY(
-      "movl r11,0x20\n"
-      "bt r11,5\n"
+      "movl tmp,0x20\n"
+      "bt tmp,5\n"
       "jc +7\n"
       "int3\n"
       "movl rax,1\n"
@@ -6007,44 +6007,44 @@
   EXPECT_DISASSEMBLY(
       "movl rax,0x2a\n"
       "imulq rax,rax,0x3b9aca00\n"
-      "movq r11,0x00000009c7652400\n"
-      "cmpq rax,r11\n"
+      "movq tmp,0x00000009c7652400\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0x2a\n"
       "imull rax,rax,0x3b9aca00\n"
-      "movl r11,0xc7652400\n"
-      "cmpq rax,r11\n"
+      "movl tmp,0xc7652400\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0x3b9aca00\n"
-      "movq r11,0x000000098bca5a00\n"
-      "addq rax,r11\n"
-      "movq r11,0x00000009c7652400\n"
-      "cmpq rax,r11\n"
+      "movq tmp,0x000000098bca5a00\n"
+      "addq rax,tmp\n"
+      "movq tmp,0x00000009c7652400\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0x3b9aca00\n"
       "addl rax,0x3b9aca00\n"
       "addl rax,0x3b9aca00\n"
       "addl rax,0x3b9aca00\n"
-      "movl r11,0xee6b2800\n"
-      "cmpq rax,r11\n"
+      "movl tmp,0xee6b2800\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0x3b9aca00\n"
       "subl rax,0x4d2fa200\n"
       "addl rax,0x3b9aca00\n"
       "subl rax,0x3b9aca00\n"
-      "movl r11,0xee6b2800\n"
-      "cmpq rax,r11\n"
+      "movl tmp,0xee6b2800\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0x3b9aca00\n"
-      "movq r11,0x0000000a02ffee00\n"
-      "subq rax,r11\n"
-      "movq r11,0xfffffff6389adc00\n"
-      "cmpq rax,r11\n"
+      "movq tmp,0x0000000a02ffee00\n"
+      "subq rax,tmp\n"
+      "movq tmp,0xfffffff6389adc00\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movq rax,-0x3b9aca00\n"
@@ -6058,8 +6058,8 @@
       "subl rax,0x4d2fa200\n"
       "subl rax,0x3b9aca00\n"
       "addl rax,0x3b9aca00\n"
-      "movl r11,0xee6b2800\n"
-      "cmpq rax,r11\n"
+      "movl tmp,0xee6b2800\n"
+      "cmpq rax,tmp\n"
       "jz +7\n"
       "int3\n"
       "movl rax,0x2a\n"
diff --git a/runtime/vm/compiler/assembler/disassembler.cc b/runtime/vm/compiler/assembler/disassembler.cc
index 58b3430..9d8e13c 100644
--- a/runtime/vm/compiler/assembler/disassembler.cc
+++ b/runtime/vm/compiler/assembler/disassembler.cc
@@ -316,9 +316,9 @@
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
-  {
-    const auto& stackmaps =
-        CompressedStackMaps::Handle(zone, code.compressed_stackmaps());
+  const auto& stackmaps =
+      CompressedStackMaps::Handle(zone, code.compressed_stackmaps());
+  if (!stackmaps.IsNull()) {
     TextBuffer buffer(100);
     buffer.Printf("StackMaps for function '%s' {\n", function_fullname);
     stackmaps.WriteToBuffer(&buffer, "\n");
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index 22ff2d3..360d454 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -2410,6 +2410,8 @@
 
         Definition* replacement = current->Canonicalize(this);
         ASSERT(replacement != nullptr);
+        RELEASE_ASSERT(unmatched_representations_allowed() ||
+                       !replacement->HasUnmatchedInputRepresentations());
         if (replacement != current) {
           current->ReplaceUsesWith(replacement);
           it.RemoveCurrentFromGraph();
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index 2c82c13..614d19b 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -397,6 +397,23 @@
   // after this point.
   void disallow_licm() { licm_allowed_ = false; }
 
+  // Returns true if mismatch in input/output representations is allowed.
+  bool unmatched_representations_allowed() const {
+    return unmatched_representations_allowed_;
+  }
+
+  // After the last SelectRepresentations pass all further transformations
+  // should maintain matching input/output representations.
+  void disallow_unmatched_representations() {
+    unmatched_representations_allowed_ = false;
+  }
+
+  // Returns true if this flow graph was built for a huge method
+  // and certain optimizations should be disabled.
+  bool is_huge_method() const { return huge_method_; }
+  // Mark this flow graph as huge and disable certain optimizations.
+  void mark_huge_method() { huge_method_ = true; }
+
   PrologueInfo prologue_info() const { return prologue_info_; }
 
   // Computes the loop hierarchy of the flow graph on demand.
@@ -605,7 +622,6 @@
   // DiscoverBlocks computes parent_ and assigned_vars_ which are then used
   // if/when computing SSA.
   GrowableArray<intptr_t> parent_;
-  GrowableArray<BitVector*> assigned_vars_;
 
   intptr_t current_ssa_temp_index_;
   intptr_t max_block_id_;
@@ -623,6 +639,8 @@
   ConstantInstr* constant_dead_;
 
   bool licm_allowed_;
+  bool unmatched_representations_allowed_ = true;
+  bool huge_method_ = false;
 
   const PrologueInfo prologue_info_;
 
diff --git a/runtime/vm/compiler/backend/flow_graph_checker.cc b/runtime/vm/compiler/backend/flow_graph_checker.cc
index 140ee55..4fa26ee 100644
--- a/runtime/vm/compiler/backend/flow_graph_checker.cc
+++ b/runtime/vm/compiler/backend/flow_graph_checker.cc
@@ -333,6 +333,9 @@
       }
     }
   }
+  ASSERT1(flow_graph_->unmatched_representations_allowed() ||
+              !instruction->HasUnmatchedInputRepresentations(),
+          instruction);
 
   // Check all regular inputs.
   for (intptr_t i = 0, n = instruction->InputCount(); i < n; ++i) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index aa1d703..7677166 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -676,6 +676,13 @@
       Instruction* instr = it.Current();
       set_current_instruction(instr);
       StatsBegin(instr);
+      // Unoptimized code always stores boxed values on the expression stack.
+      // However, unboxed representation is allowed for instruction inputs and
+      // outputs of certain types (e.g. for doubles).
+      // Unboxed inputs/outputs are handled in the instruction prologue
+      // and epilogue, but flagged as a mismatch on the IL level.
+      RELEASE_ASSERT(!is_optimizing() ||
+                     !instr->HasUnmatchedInputRepresentations());
 
       if (FLAG_code_comments || FLAG_disassemble ||
           FLAG_disassemble_optimized) {
@@ -3476,8 +3483,9 @@
     return;
   }
 
+#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
   // Split moves from stack to stack, none of the architectures provides
-  // memory to memory move instructions.
+  // memory to memory move instructions. But RISC-V needs to avoid TMP.
   if (source.IsStack() && destination.IsStack()) {
     Register scratch = TMP;
     if (TMP == kNoRegister) {
@@ -3493,6 +3501,7 @@
     }
     return;
   }
+#endif
 
   const bool sign_or_zero_extend = dst_container_size > src_container_size;
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index c31d864..11b6467 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -898,6 +898,15 @@
   }
 }
 
+// See FfiCallInstr::MakeLocationSummary.
+static Register WithIntermediateMarshalling(Register r) {
+  if (r == A2) return T2;  // A2=CODE_REG
+  if (r == A3) return T3;  // A3=TMP
+  if (r == A4) return T4;  // A4=TMP2
+  if (r == A5) return T5;  // A5=PP
+  return r;
+}
+
 void FlowGraphCompiler::EmitNativeMoveArchitecture(
     const compiler::ffi::NativeLocation& destination,
     const compiler::ffi::NativeLocation& source) {
@@ -915,14 +924,13 @@
   if (source.IsRegisters()) {
     const auto& src = source.AsRegisters();
     ASSERT(src.num_regs() == 1);
-    const auto src_reg = src.reg_at(0);
+    const auto src_reg = WithIntermediateMarshalling(src.reg_at(0));
 
     if (destination.IsRegisters()) {
       const auto& dst = destination.AsRegisters();
       ASSERT(dst.num_regs() == 1);
-      const auto dst_reg = dst.reg_at(0);
+      const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
       if (!sign_or_zero_extend) {
-        // TODO(riscv): Unreachable? Calling convention always extends.
         __ mv(dst_reg, src_reg);
       } else {
         switch (src_type.AsPrimitive().representation()) {
@@ -947,9 +955,15 @@
             __ srliw(dst_reg, dst_reg, 16);
 #endif
             return;
+#if XLEN >= 64
+          case compiler::ffi::kUint32:
+          case compiler::ffi::kInt32:
+            // Note even uint32 is sign-extended to XLEN.
+            __ addiw(dst_reg, src_reg, 0);
+            return;
+#endif
           default:
-            // 32 to 64 bit is covered in IL by Representation conversions.
-            UNIMPLEMENTED();
+            UNREACHABLE();
         }
       }
 
@@ -1002,7 +1016,7 @@
     if (destination.IsRegisters()) {
       const auto& dst = destination.AsRegisters();
       ASSERT(dst.num_regs() == 1);
-      const auto dst_reg = dst.reg_at(0);
+      const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
       ASSERT(!sign_or_zero_extend);
       __ LoadFromOffset(dst_reg, src.base_register(), src.offset_in_bytes(),
                         BytesToOperandSize(dst_size));
@@ -1022,9 +1036,14 @@
         default:
           UNIMPLEMENTED();
       }
-
+    } else if (destination.IsStack()) {
+      const auto& dst = destination.AsStack();
+      // TMP=A3, here not remapped to T3.
+      __ LoadFromOffset(TMP, src.base_register(), src.offset_in_bytes(),
+                        BytesToOperandSize(src_size));
+      __ StoreToOffset(TMP, dst.base_register(), dst.offset_in_bytes(),
+                       BytesToOperandSize(dst_size));
     } else {
-      ASSERT(destination.IsStack());
       UNREACHABLE();
     }
   }
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 0a52e22..256e184 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -2753,7 +2753,7 @@
         }
       }
     }
-  } else if (slot().kind() == Slot::Kind::kTypedDataView_data) {
+  } else if (slot().kind() == Slot::Kind::kTypedDataView_typed_data) {
     // This case cover the first explicit argument to typed data view
     // factories, the data (buffer).
     ASSERT(!calls_initializer());
@@ -3460,7 +3460,11 @@
       flow_graph->InsertBefore(this, replacement, env(), FlowGraph::kValue);
       return replacement;
     } else {
-      if (!left_type->is_nullable() && !right_type->is_nullable()) {
+      // Null-aware EqualityCompare takes boxed inputs, so make sure
+      // unmatched representations are still allowed when converting
+      // EqualityCompare to the unboxed instruction.
+      if (!left_type->is_nullable() && !right_type->is_nullable() &&
+          flow_graph->unmatched_representations_allowed()) {
         set_null_aware(false);
       }
     }
@@ -6529,10 +6533,9 @@
           zone_, pointer_loc.payload_type(), pointer_loc.container_type(),
           temp);
       compiler->EmitNativeMove(dst, pointer_loc, &temp_alloc);
-      __ LoadField(
-          temp,
-          compiler::FieldAddress(
-              temp, compiler::target::TypedDataBase::data_field_offset()));
+      __ LoadField(temp,
+                   compiler::FieldAddress(
+                       temp, compiler::target::PointerBase::data_offset()));
 
       // Copy chuncks.
       const intptr_t sp_offset =
@@ -6594,10 +6597,9 @@
       __ LoadMemoryValue(temp0, FPREG, 0);
       __ LoadMemoryValue(temp0, temp0, typed_data_loc.ToStackSlotOffset());
     }
-    __ LoadField(
-        temp0,
-        compiler::FieldAddress(
-            temp0, compiler::target::TypedDataBase::data_field_offset()));
+    __ LoadField(temp0,
+                 compiler::FieldAddress(
+                     temp0, compiler::target::PointerBase::data_offset()));
 
     if (returnLocation.IsPointerToMemory()) {
       // Copy blocks from the stack location to TypedData.
@@ -6774,10 +6776,10 @@
   if (dst1.IsMultiple()) {
     Register typed_data_reg = locs()->in(0).reg();
     // Load the data pointer out of the TypedData/Pointer.
-    __ LoadField(typed_data_reg,
-                 compiler::FieldAddress(
-                     typed_data_reg,
-                     compiler::target::TypedDataBase::data_field_offset()));
+    __ LoadField(
+        typed_data_reg,
+        compiler::FieldAddress(typed_data_reg,
+                               compiler::target::PointerBase::data_offset()));
 
     const auto& multiple = dst1.AsMultiple();
     int offset_in_bytes = 0;
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 58b4a50..809c16c 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -182,7 +182,6 @@
 
  private:
   friend class FlowGraphPrinter;
-  friend class FlowGraphDeserializer;  // For setting reaching_type_ directly.
 
   Definition* definition_;
   Value* previous_use_;
@@ -1347,13 +1346,14 @@
 class TemplateInstruction
     : public CSETrait<Instruction, PureInstruction>::Base {
  public:
+  using BaseClass = typename CSETrait<Instruction, PureInstruction>::Base;
+
   explicit TemplateInstruction(intptr_t deopt_id = DeoptId::kNone)
-      : CSETrait<Instruction, PureInstruction>::Base(deopt_id), inputs_() {}
+      : BaseClass(deopt_id), inputs_() {}
 
   TemplateInstruction(const InstructionSource& source,
                       intptr_t deopt_id = DeoptId::kNone)
-      : CSETrait<Instruction, PureInstruction>::Base(source, deopt_id),
-        inputs_() {}
+      : BaseClass(source, deopt_id), inputs_() {}
 
   virtual intptr_t InputCount() const { return N; }
   virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
@@ -1616,14 +1616,8 @@
       : Instruction(deopt_id),
         block_id_(block_id),
         try_index_(try_index),
-        preorder_number_(-1),
-        postorder_number_(-1),
         stack_depth_(stack_depth),
-        dominator_(nullptr),
-        dominated_blocks_(1),
-        last_instruction_(NULL),
-        parallel_move_(nullptr),
-        loop_info_(nullptr) {}
+        dominated_blocks_(1) {}
 
   // Perform a depth first search to find OSR entry and
   // link it to the given graph entry.
@@ -1632,8 +1626,6 @@
                              BitVector* block_marks);
 
  private:
-  friend class FlowGraphDeserializer;  // Access to AddPredecessor().
-
   virtual void RawSetInputAt(intptr_t i, Value* value) { UNREACHABLE(); }
 
   virtual void ClearPredecessors() = 0;
@@ -1643,25 +1635,26 @@
 
   intptr_t block_id_;
   intptr_t try_index_;
-  intptr_t preorder_number_;
-  intptr_t postorder_number_;
+  intptr_t preorder_number_ = -1;
+  intptr_t postorder_number_ = -1;
   // Expected stack depth on entry (for stack-based IR only).
   intptr_t stack_depth_;
   // Starting and ending lifetime positions for this block.  Used by
   // the linear scan register allocator.
-  intptr_t start_pos_;
-  intptr_t end_pos_;
-  BlockEntryInstr* dominator_;  // Immediate dominator, NULL for graph entry.
+  intptr_t start_pos_ = -1;
+  intptr_t end_pos_ = -1;
+  // Immediate dominator, nullptr for graph entry.
+  BlockEntryInstr* dominator_ = nullptr;
   // TODO(fschneider): Optimize the case of one child to save space.
   GrowableArray<BlockEntryInstr*> dominated_blocks_;
-  Instruction* last_instruction_;
+  Instruction* last_instruction_ = nullptr;
 
   // Parallel move that will be used by linear scan register allocator to
   // connect live ranges at the start of the block.
-  ParallelMoveInstr* parallel_move_;
+  ParallelMoveInstr* parallel_move_ = nullptr;
 
   // Closest enveloping loop in loop hierarchy (nullptr at nesting depth 0).
-  LoopInfo* loop_info_;
+  LoopInfo* loop_info_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(BlockEntryInstr);
 };
@@ -1851,8 +1844,6 @@
   PRINT_TO_SUPPORT
 
  private:
-  friend class FlowGraphDeserializer;  // For the constructor with deopt_id arg.
-
   GraphEntryInstr(const ParsedFunction& parsed_function,
                   intptr_t osr_id,
                   intptr_t deopt_id);
@@ -2523,12 +2514,13 @@
           template <typename Impure, typename Pure> class CSETrait = NoCSE>
 class TemplateDefinition : public CSETrait<Definition, PureDefinition>::Base {
  public:
+  using BaseClass = typename CSETrait<Definition, PureDefinition>::Base;
+
   explicit TemplateDefinition(intptr_t deopt_id = DeoptId::kNone)
-      : CSETrait<Definition, PureDefinition>::Base(deopt_id), inputs_() {}
+      : BaseClass(deopt_id), inputs_() {}
   TemplateDefinition(const InstructionSource& source,
                      intptr_t deopt_id = DeoptId::kNone)
-      : CSETrait<Definition, PureDefinition>::Base(source, deopt_id),
-        inputs_() {}
+      : BaseClass(source, deopt_id), inputs_() {}
 
   virtual intptr_t InputCount() const { return N; }
   virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
@@ -2551,7 +2543,6 @@
       : block_(block),
         inputs_(num_inputs),
         representation_(kTagged),
-        reaching_defs_(NULL),
         is_alive_(false),
         is_receiver_(kUnknownReceiver) {
     for (intptr_t i = 0; i < num_inputs; ++i) {
@@ -2642,7 +2633,7 @@
   JoinEntryInstr* block_;
   GrowableArray<Value*> inputs_;
   Representation representation_;
-  BitVector* reaching_defs_;
+  BitVector* reaching_defs_ = nullptr;
   bool is_alive_;
   int8_t is_receiver_;
 
@@ -2958,10 +2949,9 @@
 //
 // This lowlevel instruction is non-inlinable since it makes assumptons about
 // the frame.  This is asserted via `inliner.cc::CalleeGraphValidator`.
-class TailCallInstr : public Instruction {
+class TailCallInstr : public TemplateInstruction<1, Throws, Pure> {
  public:
-  TailCallInstr(const Code& code, Value* arg_desc)
-      : code_(code), arg_desc_(NULL) {
+  TailCallInstr(const Code& code, Value* arg_desc) : code_(code) {
     SetInputAt(0, arg_desc);
   }
 
@@ -2969,19 +2959,8 @@
 
   const Code& code() const { return code_; }
 
-  virtual intptr_t InputCount() const { return 1; }
-  virtual Value* InputAt(intptr_t i) const {
-    ASSERT(i == 0);
-    return arg_desc_;
-  }
-  virtual void RawSetInputAt(intptr_t i, Value* value) {
-    ASSERT(i == 0);
-    arg_desc_ = value;
-  }
-
   // Two tailcalls can be canonicalized into one instruction if both have the
   // same destination.
-  virtual bool AllowsCSE() const { return true; }
   virtual bool AttributesEqual(const Instruction& other) const {
     return &other.AsTailCall()->code() == &code();
   }
@@ -2989,14 +2968,14 @@
   // Since no code after this instruction will be executed, there will be no
   // side-effects for the following code.
   virtual bool HasUnknownSideEffects() const { return false; }
-  virtual bool MayThrow() const { return true; }
   virtual bool ComputeCanDeoptimize() const { return false; }
 
   PRINT_OPERANDS_TO_SUPPORT
 
  private:
   const Code& code_;
-  Value* arg_desc_;
+
+  DISALLOW_COPY_AND_ASSIGN(TailCallInstr);
 };
 
 class PushArgumentInstr : public TemplateDefinition<1, NoThrow> {
@@ -5370,8 +5349,6 @@
 
   DECLARE_INSTRUCTION(AllocateHandle)
 
-  virtual intptr_t InputCount() const { return 1; }
-  virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
   virtual Representation RequiredInputRepresentation(intptr_t idx) const;
   virtual Representation representation() const { return kUnboxedIntPtr; }
   virtual bool ComputeCanDeoptimize() const { return false; }
@@ -5393,8 +5370,6 @@
 
   DECLARE_INSTRUCTION(RawStoreField)
 
-  virtual intptr_t InputCount() const { return 2; }
-  virtual Value* InputAt(intptr_t i) const { return inputs_[i]; }
   virtual Representation RequiredInputRepresentation(intptr_t idx) const;
   virtual bool ComputeCanDeoptimize() const { return false; }
   virtual bool HasUnknownSideEffects() const { return false; }
@@ -9742,7 +9717,6 @@
  private:
   friend class ShallowIterator;
   friend class compiler::BlockBuilder;  // For Environment constructor.
-  friend class FlowGraphDeserializer;   // For constructor and deopt_id_.
 
   class LazyDeoptPruningBits : public BitField<uintptr_t, uintptr_t, 0, 8> {};
   class LazyDeoptToBeforeDeoptId
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index d15b079..2d14822 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -232,10 +232,9 @@
                                               Register array_reg,
                                               Register start_reg) {
   if (IsTypedDataBaseClassId(array_cid)) {
-    __ ldr(
-        array_reg,
-        compiler::FieldAddress(
-            array_reg, compiler::target::TypedDataBase::data_field_offset()));
+    __ ldr(array_reg,
+           compiler::FieldAddress(
+               array_reg, compiler::target::PointerBase::data_offset()));
   } else {
     switch (array_cid) {
       case kOneByteStringCid:
@@ -1780,7 +1779,7 @@
 
   // Address of input bytes.
   __ LoadFieldFromOffset(bytes_reg, bytes_reg,
-                         compiler::target::TypedDataBase::data_field_offset());
+                         compiler::target::PointerBase::data_offset());
 
   // Table.
   __ AddImmediate(
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 979c8ba..33b02c1 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -232,10 +232,9 @@
                                               Register array_reg,
                                               Register start_reg) {
   if (IsTypedDataBaseClassId(array_cid)) {
-    __ ldr(
-        array_reg,
-        compiler::FieldAddress(
-            array_reg, compiler::target::TypedDataBase::data_field_offset()));
+    __ ldr(array_reg,
+           compiler::FieldAddress(
+               array_reg, compiler::target::PointerBase::data_offset()));
   } else {
     switch (array_cid) {
       case kOneByteStringCid:
@@ -1627,7 +1626,7 @@
 
   // Address of input bytes.
   __ LoadFieldFromOffset(bytes_reg, bytes_reg,
-                         compiler::target::TypedDataBase::data_field_offset());
+                         compiler::target::PointerBase::data_offset());
 
   // Table.
   __ AddImmediate(
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 60dd46e..99b20f7 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -131,10 +131,9 @@
                                               Register start_reg) {
   intptr_t offset;
   if (IsTypedDataBaseClassId(array_cid)) {
-    __ movl(
-        array_reg,
-        compiler::FieldAddress(
-            array_reg, compiler::target::TypedDataBase::data_field_offset()));
+    __ movl(array_reg,
+            compiler::FieldAddress(
+                array_reg, compiler::target::PointerBase::data_offset()));
     offset = 0;
   } else {
     switch (array_cid) {
@@ -1328,8 +1327,8 @@
 
   // Address of input bytes.
   __ movl(bytes_reg,
-          compiler::FieldAddress(
-              bytes_reg, compiler::target::TypedDataBase::data_field_offset()));
+          compiler::FieldAddress(bytes_reg,
+                                 compiler::target::PointerBase::data_offset()));
 
   // Pointers to start, end and end-16.
   __ leal(bytes_ptr_reg, compiler::Address(bytes_reg, start_reg, TIMES_1, 0));
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index 244a95e..51aa2b4 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -132,8 +132,7 @@
     }
     case kUnboxedDouble: {
       const auto out = locs()->out(0).fpu_reg();
-      const intptr_t kDoubleSizeLog2 = 3;
-      __ slli(TMP, index, kDoubleSizeLog2 - kSmiTagSize);
+      __ slli(TMP, index, kWordSizeLog2 - kSmiTagSize);
       __ add(TMP, TMP, base_reg());
       __ LoadDFromOffset(out, TMP, offset());
       break;
@@ -274,8 +273,8 @@
                                               Register start_reg) {
   if (IsTypedDataBaseClassId(array_cid)) {
     __ lx(array_reg,
-          compiler::FieldAddress(
-              array_reg, compiler::target::TypedDataBase::data_field_offset()));
+          compiler::FieldAddress(array_reg,
+                                 compiler::target::PointerBase::data_offset()));
   } else {
     switch (array_cid) {
       case kOneByteStringCid:
@@ -1771,7 +1770,7 @@
 
   // Address of input bytes.
   __ LoadFieldFromOffset(bytes_reg, bytes_reg,
-                         compiler::target::TypedDataBase::data_field_offset());
+                         compiler::target::PointerBase::data_offset());
 
   // Table.
   __ AddImmediate(
@@ -4340,9 +4339,6 @@
 
 LocationSummary* BoxInt64Instr::MakeLocationSummary(Zone* zone,
                                                     bool opt) const {
-  const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = 0;
-#if XLEN == 32
   // Shared slow path is used in BoxInt64Instr::EmitNativeCode in
   // FLAG_use_bare_instructions mode and only after VM isolate stubs where
   // replaced with isolate-specific stubs.
@@ -4356,51 +4352,30 @@
           ->InVMIsolateHeap();
   const bool shared_slow_path_call =
       SlowPathSharingSupported(opt) && !stubs_in_vm_isolate;
+  const intptr_t kNumInputs = 1;
+  const intptr_t kNumTemps = ValueFitsSmi() ? 0 : 1;
   LocationSummary* summary = new (zone) LocationSummary(
       zone, kNumInputs, kNumTemps,
       ValueFitsSmi()
           ? LocationSummary::kNoCall
           : ((shared_slow_path_call ? LocationSummary::kCallOnSharedSlowPath
                                     : LocationSummary::kCallOnSlowPath)));
+#if XLEN == 32
   summary->set_in(0, Location::Pair(Location::RequiresRegister(),
                                     Location::RequiresRegister()));
-  if (ValueFitsSmi()) {
-    summary->set_out(0, Location::RequiresRegister());
-  } else if (shared_slow_path_call) {
-    summary->set_out(0,
-                     Location::RegisterLocation(AllocateMintABI::kResultReg));
-  } else {
-    summary->set_out(0, Location::RequiresRegister());
-  }
 #else
-  // Shared slow path is used in BoxInt64Instr::EmitNativeCode in
-  // FLAG_use_bare_instructions mode and only after VM isolate stubs where
-  // replaced with isolate-specific stubs.
-  auto object_store = IsolateGroup::Current()->object_store();
-  const bool stubs_in_vm_isolate =
-      object_store->allocate_mint_with_fpu_regs_stub()
-          ->untag()
-          ->InVMIsolateHeap() ||
-      object_store->allocate_mint_without_fpu_regs_stub()
-          ->untag()
-          ->InVMIsolateHeap();
-  const bool shared_slow_path_call =
-      SlowPathSharingSupported(opt) && !stubs_in_vm_isolate;
-  LocationSummary* summary = new (zone) LocationSummary(
-      zone, kNumInputs, kNumTemps,
-      ValueFitsSmi() ? LocationSummary::kNoCall
-      : shared_slow_path_call ? LocationSummary::kCallOnSharedSlowPath
-                              : LocationSummary::kCallOnSlowPath);
   summary->set_in(0, Location::RequiresRegister());
+#endif
   if (ValueFitsSmi()) {
     summary->set_out(0, Location::RequiresRegister());
   } else if (shared_slow_path_call) {
     summary->set_out(0,
                      Location::RegisterLocation(AllocateMintABI::kResultReg));
+    summary->set_temp(0, Location::RegisterLocation(AllocateMintABI::kTempReg));
   } else {
     summary->set_out(0, Location::RequiresRegister());
+    summary->set_temp(0, Location::RequiresRegister());
   }
-#endif
   return summary;
 }
 
@@ -4934,17 +4909,10 @@
   } else {
     UNIMPLEMENTED();
   }
-  // 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);
 
   // Call the function.
   ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), TargetFunction().argument_count());
-
-  __ mv(PP, CALLEE_SAVED_TEMP);
-  __ mv(SP, CALLEE_SAVED_TEMP2);
 }
 
 LocationSummary* MathMinMaxInstr::MakeLocationSummary(Zone* zone,
@@ -5266,17 +5234,9 @@
     UNIMPLEMENTED();
   }
 
-  // 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);
-
   ASSERT(TargetFunction().is_leaf());  // No deopt info needed.
   __ CallRuntime(TargetFunction(), InputCount());
 
-  __ mv(PP, CALLEE_SAVED_TEMP);
-  __ mv(SP, CALLEE_SAVED_TEMP2);
-
   // TODO(riscv): Special case pow?
 }
 
@@ -7163,7 +7123,53 @@
 }
 
 void BitCastInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  switch (from()) {
+    case kUnboxedFloat: {
+      ASSERT(to() == kUnboxedInt64);
+      const FpuRegister src = locs()->in(0).fpu_reg();
+      const Register dst = locs()->out(0).reg();
+      __ fmvxw(dst, src);
+      break;
+    }
+#if XLEN >= 64
+    case kUnboxedDouble: {
+      ASSERT(to() == kUnboxedInt64);
+      const FpuRegister src = locs()->in(0).fpu_reg();
+      const Register dst = locs()->out(0).reg();
+      __ fmvxd(dst, src);
+      break;
+    }
+#endif
+    case kUnboxedInt64: {
+      const Register src = locs()->in(0).reg();
+      switch (to()) {
+#if XLEN >= 64
+        case kUnboxedDouble: {
+          const FpuRegister dst = locs()->out(0).fpu_reg();
+          __ fmvdx(dst, src);
+          break;
+        }
+#endif
+        case kUnboxedFloat: {
+          const FpuRegister dst = locs()->out(0).fpu_reg();
+          __ fmvwx(dst, src);
+          break;
+        }
+        default:
+          UNREACHABLE();
+      }
+      break;
+    }
+    case kUnboxedInt32: {
+      ASSERT(to() == kUnboxedFloat);
+      const Register src = locs()->in(0).reg();
+      const FpuRegister dst = locs()->out(0).fpu_reg();
+      __ fmvwx(dst, src);
+      break;
+    }
+    default:
+      UNREACHABLE();
+  }
 }
 
 LocationSummary* StopInstr::MakeLocationSummary(Zone* zone, bool opt) const {
diff --git a/runtime/vm/compiler/backend/il_test.cc b/runtime/vm/compiler/backend/il_test.cc
index 30502a4..d29658c 100644
--- a/runtime/vm/compiler/backend/il_test.cc
+++ b/runtime/vm/compiler/backend/il_test.cc
@@ -390,6 +390,49 @@
   }
 }
 
+static void TestNullAwareEqualityCompareCanonicalization(
+    Thread* thread,
+    bool allow_representation_change) {
+  using compiler::BlockBuilder;
+
+  CompilerState S(thread, /*is_aot=*/true, /*is_optimizing=*/true);
+
+  FlowGraphBuilderHelper H;
+
+  auto normal_entry = H.flow_graph()->graph_entry()->normal_entry();
+
+  EqualityCompareInstr* compare = nullptr;
+  {
+    BlockBuilder builder(H.flow_graph(), normal_entry);
+    Definition* v0 =
+        builder.AddParameter(0, 0, /*with_frame=*/true, kUnboxedInt64);
+    Definition* v1 =
+        builder.AddParameter(1, 1, /*with_frame=*/true, kUnboxedInt64);
+    Definition* box0 = builder.AddDefinition(new BoxInt64Instr(new Value(v0)));
+    Definition* box1 = builder.AddDefinition(new BoxInt64Instr(new Value(v1)));
+
+    compare = builder.AddDefinition(new EqualityCompareInstr(
+        InstructionSource(), Token::kEQ, new Value(box0), new Value(box1),
+        kMintCid, S.GetNextDeoptId(), /*null_aware=*/true));
+    builder.AddReturn(new Value(compare));
+  }
+
+  H.FinishGraph();
+
+  if (!allow_representation_change) {
+    H.flow_graph()->disallow_unmatched_representations();
+  }
+
+  H.flow_graph()->Canonicalize();
+
+  EXPECT(compare->is_null_aware() == !allow_representation_change);
+}
+
+ISOLATE_UNIT_TEST_CASE(IL_Canonicalize_EqualityCompare) {
+  TestNullAwareEqualityCompareCanonicalization(thread, true);
+  TestNullAwareEqualityCompareCanonicalization(thread, false);
+}
+
 static void WriteCidRangeVectorTo(const CidRangeVector& ranges,
                                   BaseTextBuffer* buffer) {
   if (ranges.is_empty()) {
diff --git a/runtime/vm/compiler/backend/il_test_helper.cc b/runtime/vm/compiler/backend/il_test_helper.cc
index caa35ac..df48df4 100644
--- a/runtime/vm/compiler/backend/il_test_helper.cc
+++ b/runtime/vm/compiler/backend/il_test_helper.cc
@@ -92,6 +92,25 @@
   return Api::UnwrapHandle(result);
 }
 
+InstructionsPtr BuildInstructions(
+    std::function<void(compiler::Assembler* assembler)> fun) {
+  auto thread = Thread::Current();
+  compiler::Assembler assembler(nullptr);
+
+  fun(&assembler);
+
+  auto& code = Code::Handle();
+  auto install_code_fun = [&] {
+    code = Code::FinalizeCode(nullptr, &assembler,
+                              Code::PoolAttachment::kNotAttachPool,
+                              /*optimized=*/false, /*stats=*/nullptr);
+  };
+  SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+  thread->isolate_group()->RunWithStoppedMutators(install_code_fun,
+                                                  /*use_force_growth=*/true);
+  return code.instructions();
+}
+
 FlowGraph* TestPipeline::RunPasses(
     std::initializer_list<CompilerPass::Id> passes) {
   auto thread = Thread::Current();
@@ -144,11 +163,29 @@
     } else {
       flow_graph_ = CompilerPass::RunPipeline(mode_, pass_state_);
     }
+    pass_state_->call_specializer = nullptr;
   }
 
   return flow_graph_;
 }
 
+void TestPipeline::RunAdditionalPasses(
+    std::initializer_list<CompilerPass::Id> passes) {
+  SpeculativeInliningPolicy speculative_policy(/*enable_suppression=*/false);
+
+  JitCallSpecializer jit_call_specializer(flow_graph_, &speculative_policy);
+  AotCallSpecializer aot_call_specializer(/*precompiler=*/nullptr, flow_graph_,
+                                          &speculative_policy);
+  if (mode_ == CompilerPass::kAOT) {
+    pass_state_->call_specializer = &aot_call_specializer;
+  } else {
+    pass_state_->call_specializer = &jit_call_specializer;
+  }
+
+  flow_graph_ = CompilerPass::RunPipelineWithPasses(pass_state_, passes);
+  pass_state_->call_specializer = nullptr;
+}
+
 void TestPipeline::CompileGraphAndAttachFunction() {
   Zone* zone = thread_->zone();
   const bool optimized = true;
@@ -156,15 +193,15 @@
   SpeculativeInliningPolicy speculative_policy(/*enable_suppression=*/false);
 
 #if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
-  const bool use_far_branches = false;
+  const intptr_t far_branch_level = 0;
 #else
-  const bool use_far_branches = true;
+  const intptr_t far_branch_level = 1;
 #endif
 
   ASSERT(pass_state_->inline_id_to_function.length() ==
          pass_state_->caller_inline_id.length());
   compiler::ObjectPoolBuilder object_pool_builder;
-  compiler::Assembler assembler(&object_pool_builder, use_far_branches);
+  compiler::Assembler assembler(&object_pool_builder, far_branch_level);
   FlowGraphCompiler graph_compiler(
       &assembler, flow_graph_, *parsed_function_, optimized,
       &speculative_policy, pass_state_->inline_id_to_function,
diff --git a/runtime/vm/compiler/backend/il_test_helper.h b/runtime/vm/compiler/backend/il_test_helper.h
index 73f32bf..babe427 100644
--- a/runtime/vm/compiler/backend/il_test_helper.h
+++ b/runtime/vm/compiler/backend/il_test_helper.h
@@ -65,6 +65,9 @@
 
 ObjectPtr Invoke(const Library& lib, const char* name);
 
+InstructionsPtr BuildInstructions(
+    std::function<void(compiler::Assembler* assembler)> fun);
+
 class TestPipeline : public ValueObject {
  public:
   explicit TestPipeline(const Function& function,
@@ -86,6 +89,8 @@
   //   - [flow_graph_]
   FlowGraph* RunPasses(std::initializer_list<CompilerPass::Id> passes);
 
+  void RunAdditionalPasses(std::initializer_list<CompilerPass::Id> passes);
+
   void CompileGraphAndAttachFunction();
 
  private:
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index c966f53..de70052 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -196,10 +196,9 @@
                                               Register start_reg) {
   intptr_t offset;
   if (IsTypedDataBaseClassId(array_cid)) {
-    __ movq(
-        array_reg,
-        compiler::FieldAddress(
-            array_reg, compiler::target::TypedDataBase::data_field_offset()));
+    __ movq(array_reg,
+            compiler::FieldAddress(
+                array_reg, compiler::target::PointerBase::data_offset()));
     offset = 0;
   } else {
     switch (array_cid) {
@@ -1534,8 +1533,8 @@
 
   // Address of input bytes.
   __ movq(bytes_reg,
-          compiler::FieldAddress(
-              bytes_reg, compiler::target::TypedDataBase::data_field_offset()));
+          compiler::FieldAddress(bytes_reg,
+                                 compiler::target::PointerBase::data_offset()));
 
   // Pointers to start, end and end-16.
   __ leaq(bytes_ptr_reg, compiler::Address(bytes_reg, start_reg, TIMES_1, 0));
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index dd1e62c..be5af29 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -2601,9 +2601,8 @@
     *array = elements;
     array_cid = kArrayCid;
   } else if (IsExternalTypedDataClassId(array_cid)) {
-    LoadUntaggedInstr* elements = new (Z)
-        LoadUntaggedInstr(new (Z) Value(*array),
-                          compiler::target::TypedDataBase::data_field_offset());
+    LoadUntaggedInstr* elements = new (Z) LoadUntaggedInstr(
+        new (Z) Value(*array), compiler::target::PointerBase::data_offset());
     *cursor = flow_graph->AppendTo(*cursor, elements, NULL, FlowGraph::kValue);
     *array = elements;
   }
@@ -2998,9 +2997,8 @@
                                          Instruction** cursor) {
   if (array_cid == kDynamicCid || IsExternalTypedDataClassId(array_cid)) {
     // Internal or External typed data: load untagged.
-    auto elements = new (Z)
-        LoadUntaggedInstr(new (Z) Value(*array),
-                          compiler::target::TypedDataBase::data_field_offset());
+    auto elements = new (Z) LoadUntaggedInstr(
+        new (Z) Value(*array), compiler::target::PointerBase::data_offset());
     *cursor = flow_graph->AppendTo(*cursor, elements, NULL, FlowGraph::kValue);
     *array = elements;
   } else {
@@ -3774,7 +3772,6 @@
   const MethodRecognizer::Kind kind = target.recognized_kind();
   switch (kind) {
     // Recognized [] operators.
-    case MethodRecognizer::kImmutableArrayGetIndexed:
     case MethodRecognizer::kObjectArrayGetIndexed:
     case MethodRecognizer::kGrowableArrayGetIndexed:
     case MethodRecognizer::kInt8ArrayGetIndexed:
diff --git a/runtime/vm/compiler/backend/linearscan.cc b/runtime/vm/compiler/backend/linearscan.cc
index c6767a5..19191d1 100644
--- a/runtime/vm/compiler/backend/linearscan.cc
+++ b/runtime/vm/compiler/backend/linearscan.cc
@@ -321,6 +321,16 @@
 }
 
 void LiveRange::AddSafepoint(intptr_t pos, LocationSummary* locs) {
+  if (spill_slot().IsConstant() &&
+      (locs->always_calls() && !locs->callee_safe_call())) {
+    // Constants have pseudo spill slot assigned to them from
+    // the very beginning. This means that we don't need to associate
+    // "always_calls" safepoints with these ranges, because they will never
+    // be spilled. We still need to associate slow-path safepoints because
+    // a value might be allocated to a register across a slow-path call.
+    return;
+  }
+
   ASSERT(IsInstructionStartPosition(pos));
   SafepointPosition* safepoint =
       new SafepointPosition(ToInstructionEnd(pos), locs);
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index d2824a2..4d28937 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -2803,8 +2803,7 @@
     case Slot::Kind::kFunctionType_parameter_types:
     case Slot::Kind::kFunctionType_type_parameters:
     case Slot::Kind::kInstance_native_fields_array:
-    case Slot::Kind::kPointerBase_data_field:
-    case Slot::Kind::kTypedDataView_data:
+    case Slot::Kind::kTypedDataView_typed_data:
     case Slot::Kind::kType_arguments:
     case Slot::Kind::kTypeArgumentsIndex:
     case Slot::Kind::kTypeParameters_names:
@@ -2816,6 +2815,8 @@
     case Slot::Kind::kUnhandledException_stacktrace:
     case Slot::Kind::kWeakProperty_key:
     case Slot::Kind::kWeakProperty_value:
+    case Slot::Kind::kWeakReference_target:
+    case Slot::Kind::kWeakReference_type_arguments:
       // Not an integer valued field.
       UNREACHABLE();
       break;
diff --git a/runtime/vm/compiler/backend/range_analysis.h b/runtime/vm/compiler/backend/range_analysis.h
index aa247c7..aa1f6b9 100644
--- a/runtime/vm/compiler/backend/range_analysis.h
+++ b/runtime/vm/compiler/backend/range_analysis.h
@@ -302,8 +302,6 @@
   int64_t SmiLowerBound() const { return LowerBound(kRangeBoundarySmi); }
 
  private:
-  friend class FlowGraphDeserializer;  // For setting fields directly.
-
   RangeBoundary(Kind kind, int64_t value, int64_t offset)
       : kind_(kind), value_(value), offset_(offset) {}
 
@@ -539,8 +537,6 @@
                        Range* result);
 
  private:
-  friend class FlowGraphDeserializer;  // For setting min_/max_ directly.
-
   RangeBoundary min_;
   RangeBoundary max_;
 
diff --git a/runtime/vm/compiler/backend/redundancy_elimination.cc b/runtime/vm/compiler/backend/redundancy_elimination.cc
index 35070d4..c9245a5 100644
--- a/runtime/vm/compiler/backend/redundancy_elimination.cc
+++ b/runtime/vm/compiler/backend/redundancy_elimination.cc
@@ -1671,34 +1671,13 @@
     uses.Insert(use);
   }
 
-  // Find the dominant use.
-  Instruction* dominant_use = nullptr;
-  auto use_it = uses.GetIterator();
-  while (auto use = use_it.Next()) {
-    // Start with the instruction before the use, then walk backwards through
-    // blocks in the dominator chain until we hit the definition or another use.
-    Instruction* instr = nullptr;
-    if (auto phi = (*use)->AsPhi()) {
-      // For phi uses, the dominant use only has to dominate the
-      // predecessor block corresponding to the phi input.
-      ASSERT(phi->InputCount() == phi->block()->PredecessorCount());
-      for (intptr_t i = 0; i < phi->InputCount(); i++) {
-        if (phi->InputAt(i)->definition() == def) {
-          instr = phi->block()->PredecessorAt(i)->last_instruction();
-          break;
-        }
-      }
-      ASSERT(instr != nullptr);
-    } else {
-      instr = (*use)->previous();
-    }
-
-    bool dominated = false;
+  // Returns |true| iff |instr| or any instruction dominating it are either a
+  // a |def| or a use of a |def|.
+  auto is_dominated_by_another_use = [&](Instruction* instr) {
     while (instr != def) {
       if (uses.HasKey(instr)) {
-        // We hit another use.
-        dominated = true;
-        break;
+        // We hit another use, meaning that this use dominates the given |use|.
+        return true;
       }
       if (auto block = instr->AsBlockEntry()) {
         instr = block->dominator()->last_instruction();
@@ -1706,7 +1685,38 @@
         instr = instr->previous();
       }
     }
-    if (!dominated) {
+    return false;
+  };
+
+  // Find the dominant use.
+  Instruction* dominant_use = nullptr;
+  auto use_it = uses.GetIterator();
+  while (auto use = use_it.Next()) {
+    bool dominated_by_another_use = false;
+
+    if (auto phi = (*use)->AsPhi()) {
+      // For phi uses check that the dominant use dominates all
+      // predecessor blocks corresponding to matching phi inputs.
+      ASSERT(phi->InputCount() == phi->block()->PredecessorCount());
+      dominated_by_another_use = true;
+      for (intptr_t i = 0; i < phi->InputCount(); i++) {
+        if (phi->InputAt(i)->definition() == def) {
+          if (!is_dominated_by_another_use(
+                  phi->block()->PredecessorAt(i)->last_instruction())) {
+            dominated_by_another_use = false;
+            break;
+          }
+        }
+      }
+    } else {
+      // Start with the instruction before the use, then walk backwards through
+      // blocks in the dominator chain until we hit the definition or
+      // another use.
+      dominated_by_another_use =
+          is_dominated_by_another_use((*use)->previous());
+    }
+
+    if (!dominated_by_another_use) {
       if (dominant_use != nullptr) {
         // More than one use reached the definition, which means no use
         // dominates all other uses.
@@ -1782,7 +1792,7 @@
 
     // For now, bail out for large functions to avoid OOM situations.
     // TODO(fschneider): Fix the memory consumption issue.
-    if (graph->function().SourceSize() >= FLAG_huge_method_cutoff_in_tokens) {
+    if (graph->is_huge_method()) {
       return false;
     }
 
@@ -3009,7 +3019,7 @@
 
     // For now, bail out for large functions to avoid OOM situations.
     // TODO(fschneider): Fix the memory consumption issue.
-    if (graph->function().SourceSize() >= FLAG_huge_method_cutoff_in_tokens) {
+    if (graph->is_huge_method()) {
       return;
     }
 
diff --git a/runtime/vm/compiler/backend/slot.cc b/runtime/vm/compiler/backend/slot.cc
index 75afb9a..4a512f8 100644
--- a/runtime/vm/compiler/backend/slot.cc
+++ b/runtime/vm/compiler/backend/slot.cc
@@ -215,7 +215,7 @@
     case Slot::Kind::kInstance_native_fields_array:
     case Slot::Kind::kTypeArguments:
     case Slot::Kind::kTypedDataView_offset_in_bytes:
-    case Slot::Kind::kTypedDataView_data:
+    case Slot::Kind::kTypedDataView_typed_data:
     case Slot::Kind::kGrowableObjectArray_data:
     case Slot::Kind::kArray_type_arguments:
     case Slot::Kind::kContext_parent:
@@ -232,7 +232,6 @@
     case Slot::Kind::kFunctionType_named_parameter_names:
     case Slot::Kind::kFunctionType_parameter_types:
     case Slot::Kind::kFunctionType_type_parameters:
-    case Slot::Kind::kPointerBase_data_field:
     case Slot::Kind::kType_arguments:
     case Slot::Kind::kTypeArgumentsIndex:
     case Slot::Kind::kTypeParameters_names:
@@ -244,6 +243,8 @@
     case Slot::Kind::kUnhandledException_stacktrace:
     case Slot::Kind::kWeakProperty_key:
     case Slot::Kind::kWeakProperty_value:
+    case Slot::Kind::kWeakReference_target:
+    case Slot::Kind::kWeakReference_type_arguments:
       return false;
   }
   UNREACHABLE();
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index 88c1dd8..ab82fe2 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -69,7 +69,9 @@
   V(TypeParameters, UntaggedTypeParameters, bounds, TypeArguments, FINAL)      \
   V(TypeParameters, UntaggedTypeParameters, defaults, TypeArguments, FINAL)    \
   V(WeakProperty, UntaggedWeakProperty, key, Dynamic, VAR)                     \
-  V(WeakProperty, UntaggedWeakProperty, value, Dynamic, VAR)
+  V(WeakProperty, UntaggedWeakProperty, value, Dynamic, VAR)                   \
+  V(WeakReference, UntaggedWeakReference, target, Dynamic, VAR)                \
+  V(WeakReference, UntaggedWeakReference, type_arguments, TypeArguments, FINAL)
 
 // The list of slots that correspond to non-nullable boxed fields of native
 // objects in the following format:
@@ -96,7 +98,7 @@
   V(GrowableObjectArray, UntaggedGrowableObjectArray, data, Array, VAR)        \
   V(TypedDataBase, UntaggedTypedDataBase, length, Smi, FINAL)                  \
   V(TypedDataView, UntaggedTypedDataView, offset_in_bytes, Smi, FINAL)         \
-  V(TypedDataView, UntaggedTypedDataView, data, Dynamic, FINAL)                \
+  V(TypedDataView, UntaggedTypedDataView, typed_data, Dynamic, FINAL)          \
   V(String, UntaggedString, length, Smi, FINAL)                                \
   V(LinkedHashBase, UntaggedLinkedHashBase, index, TypedDataUint32Array, VAR)  \
   V(LinkedHashBase, UntaggedLinkedHashBase, data, Array, VAR)                  \
@@ -109,13 +111,23 @@
   V(ArgumentsDescriptor, UntaggedArray, positional_count, Smi, FINAL)          \
   V(ArgumentsDescriptor, UntaggedArray, count, Smi, FINAL)                     \
   V(ArgumentsDescriptor, UntaggedArray, size, Smi, FINAL)                      \
-  V(PointerBase, UntaggedPointerBase, data_field, Dynamic, FINAL)              \
   V(TypeArguments, UntaggedTypeArguments, length, Smi, FINAL)                  \
   V(TypeParameters, UntaggedTypeParameters, names, Array, FINAL)               \
   V(TypeParameter, UntaggedTypeParameter, bound, Dynamic, FINAL)               \
   V(UnhandledException, UntaggedUnhandledException, exception, Dynamic, FINAL) \
   V(UnhandledException, UntaggedUnhandledException, stacktrace, Dynamic, FINAL)
 
+// Don't use Object or Instance, use Dynamic instead. The cid here should
+// correspond to an exact type or Dynamic, not a static type.
+// If we ever get a field of which the exact type is Instance (not a subtype),
+// update the check below.
+#define FOR_EACH_NATIVE_SLOT(_, __, ___, field_type, ____)                     \
+  static_assert(k##field_type##Cid != kObjectCid);                             \
+  static_assert(k##field_type##Cid != kInstanceCid);
+NULLABLE_BOXED_NATIVE_SLOTS_LIST(FOR_EACH_NATIVE_SLOT)
+NONNULLABLE_BOXED_NATIVE_SLOTS_LIST(FOR_EACH_NATIVE_SLOT)
+#undef FOR_EACH_NATIVE_SLOT
+
 // Only define AOT-only unboxed native slots when in the precompiler. See
 // UNBOXED_NATIVE_SLOTS_LIST for the format.
 #if defined(DART_PRECOMPILER) && !defined(TARGET_ARCH_IA32)
@@ -154,8 +166,7 @@
     FINAL)                                                                     \
   V(FunctionType, UntaggedFunctionType, packed_type_parameter_counts, Uint16,  \
     FINAL)                                                                     \
-  V(Pointer, UntaggedPointer, data_field, FfiIntPtr, FINAL)                    \
-  V(TypedDataBase, UntaggedTypedDataBase, data_field, IntPtr, VAR)             \
+  V(PointerBase, UntaggedPointerBase, data, IntPtr, VAR)                       \
   V(TypeParameter, UntaggedTypeParameter, flags, Uint8, FINAL)
 
 // For uses that do not need the exact_type (boxed) or representation (unboxed)
@@ -332,8 +343,6 @@
   Representation UnboxedRepresentation() const;
 
  private:
-  friend class FlowGraphDeserializer;  // For GetNativeSlot.
-
   Slot(Kind kind,
        int8_t bits,
        ClassIdTagType cid,
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index c6325a5..ae363e2 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -1676,9 +1676,8 @@
   const intptr_t element_size = TypedDataBase::ElementSizeFor(cid);
   const intptr_t index_scale = element_size;
 
-  auto data = new (Z)
-      LoadUntaggedInstr(new (Z) Value(array),
-                        compiler::target::TypedDataBase::data_field_offset());
+  auto data = new (Z) LoadUntaggedInstr(
+      new (Z) Value(array), compiler::target::PointerBase::data_offset());
   flow_graph_->InsertBefore(call, data, call->env(), FlowGraph::kValue);
 
   Definition* load = new (Z) LoadIndexedInstr(
@@ -1754,9 +1753,8 @@
       break;
   }
 
-  auto data = new (Z)
-      LoadUntaggedInstr(new (Z) Value(array),
-                        compiler::target::TypedDataBase::data_field_offset());
+  auto data = new (Z) LoadUntaggedInstr(
+      new (Z) Value(array), compiler::target::PointerBase::data_offset());
   flow_graph_->InsertBefore(call, data, call->env(), FlowGraph::kValue);
 
   auto store = new (Z) StoreIndexedInstr(
diff --git a/runtime/vm/compiler/compiler_pass.cc b/runtime/vm/compiler/compiler_pass.cc
index 1faa8d3..33079e7 100644
--- a/runtime/vm/compiler/compiler_pass.cc
+++ b/runtime/vm/compiler/compiler_pass.cc
@@ -309,7 +309,7 @@
   INVOKE_PASS(ConstantPropagation);
   INVOKE_PASS(TypePropagation);
   INVOKE_PASS(WidenSmiToInt32);
-  INVOKE_PASS(SelectRepresentations);
+  INVOKE_PASS(SelectRepresentations_Final);
   INVOKE_PASS(TypePropagation);
   INVOKE_PASS(TryCatchOptimization);
   INVOKE_PASS(EliminateEnvironments);
@@ -380,7 +380,7 @@
   INVOKE_PASS(EliminateDeadPhis);
   INVOKE_PASS(DCE);
   INVOKE_PASS(TypePropagation);
-  INVOKE_PASS(SelectRepresentations);
+  INVOKE_PASS(SelectRepresentations_Final);
   INVOKE_PASS(Canonicalize);
   INVOKE_PASS(UseTableDispatch);
   INVOKE_PASS(EliminateStackOverflowChecks);
@@ -469,6 +469,13 @@
   flow_graph->SelectRepresentations();
 });
 
+COMPILER_PASS(SelectRepresentations_Final, {
+  // Final selection of representations. After this pass
+  // representations of inputs/outputs should match.
+  flow_graph->SelectRepresentations();
+  flow_graph->disallow_unmatched_representations();
+});
+
 COMPILER_PASS(UseTableDispatch, {
   state->call_specializer->ReplaceInstanceCallsWithDispatchTableCalls();
 });
diff --git a/runtime/vm/compiler/compiler_pass.h b/runtime/vm/compiler/compiler_pass.h
index 01a7194..bac28af 100644
--- a/runtime/vm/compiler/compiler_pass.h
+++ b/runtime/vm/compiler/compiler_pass.h
@@ -46,6 +46,7 @@
   V(RangeAnalysis)                                                             \
   V(ReorderBlocks)                                                             \
   V(SelectRepresentations)                                                     \
+  V(SelectRepresentations_Final)                                               \
   V(SetOuterInliningId)                                                        \
   V(TryCatchOptimization)                                                      \
   V(TryOptimizePatterns)                                                       \
diff --git a/runtime/vm/compiler/ffi/native_calling_convention.cc b/runtime/vm/compiler/ffi/native_calling_convention.cc
index e30a518..4ec1199 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention.cc
@@ -112,6 +112,25 @@
           NativeFpuRegistersLocation(payload_type, payload_type, reg);
     }
 
+#if defined(TARGET_ARCH_RISCV64)
+    // After using up F registers, start bitcasting to X registers.
+    if (HasAvailableCpuRegisters(1)) {
+      const Register reg = AllocateCpuRegister();
+      const auto& container_type = *new (zone_) NativePrimitiveType(kInt64);
+      return *new (zone_)
+          NativeRegistersLocation(zone_, payload_type, container_type, reg);
+    }
+#elif defined(TARGET_ARCH_RISCV32)
+    // After using up F registers, start bitcasting to X register pairs.
+    if (HasAvailableCpuRegisters(2)) {
+      const Register reg1 = AllocateCpuRegister();
+      const Register reg2 = AllocateCpuRegister();
+      const auto& container_type = *new (zone_) NativePrimitiveType(kInt64);
+      return *new (zone_) NativeRegistersLocation(zone_, payload_type,
+                                                  container_type, reg1, reg2);
+    }
+#endif
+
     BlockAllFpuRegisters();
     if (CallingConventions::kArgumentIntRegXorFpuReg) {
       ASSERT(cpu_regs_used == CallingConventions::kNumArgRegs);
@@ -365,32 +384,85 @@
 #endif  // defined(TARGET_ARCH_ARM64)
 
 #if defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
-  // If total size is <= XLEN, passed like an XLEN scalar: use a register if
-  // available or pass by value on the stack.
-  // If total size is <= 2*XLEN, passed like two XLEN scalars: use registers
-  // if available or pass by value on the stack. If only one register is
-  // available, pass the low part by register and the high part on the stack.
-  // Otherwise, passed by reference.
+  // See RISC-V ABIs Specification
+  // https://github.com/riscv-non-isa/riscv-elf-psabi-doc/releases
   const NativeLocation& AllocateCompound(
       const NativeCompoundType& payload_type) {
-    const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
     const auto& compound_type = payload_type.AsCompound();
+
+    // 2.2. Hardware Floating-point Calling Convention.
+    const NativePrimitiveType* first = nullptr;
+    const NativePrimitiveType* second = nullptr;
+    const intptr_t num_primitive_members =
+        compound_type.PrimitivePairMembers(&first, &second);
+
+    // If exactly one floating-point member, pass like a scalar.
+    if ((num_primitive_members == 1) && first->IsFloat()) {
+      NativeLocations& multiple_locations =
+          *new (zone_) NativeLocations(zone_, 1);
+      multiple_locations.Add(&AllocateArgument(*first));
+      return *new (zone_)
+          MultipleNativeLocations(compound_type, multiple_locations);
+    }
+
+    if (num_primitive_members == 2) {
+      if (first->IsFloat() && second->IsFloat()) {
+        // If exactly two floating-point members, pass like two scalars if two F
+        // registers are available.
+        if (HasAvailableFpuRegisters(2)) {
+          NativeLocations& multiple_locations =
+              *new (zone_) NativeLocations(zone_, 2);
+          multiple_locations.Add(&AllocateArgument(*first));
+          multiple_locations.Add(&AllocateArgument(*second));
+          return *new (zone_)
+              MultipleNativeLocations(compound_type, multiple_locations);
+        }
+      } else if (first->IsFloat() || second->IsFloat()) {
+        // If exactly two members, one is integer and one is float in either
+        // order, pass like two scalars if both an X and F register are
+        // available.
+        if (HasAvailableFpuRegisters(1) && HasAvailableCpuRegisters(1)) {
+          NativeLocations& multiple_locations =
+              *new (zone_) NativeLocations(zone_, 2);
+          multiple_locations.Add(&AllocateArgument(*first));
+          multiple_locations.Add(&AllocateArgument(*second));
+          return *new (zone_)
+              MultipleNativeLocations(compound_type, multiple_locations);
+        }
+      }
+    }
+
+    // 2.1. Integer Calling Convention.
+    const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
     const intptr_t size = compound_type.SizeInBytes();
+
+    // If total size is <= XLEN, passed like an XLEN scalar: use a register if
+    // available or pass by value on the stack.
     if (size <= target::kWordSize) {
-      return AllocateArgument(pointer_type);
-    } else if (size <= 2 * target::kWordSize) {
+      NativeLocations& multiple_locations =
+          *new (zone_) NativeLocations(zone_, 1);
+      multiple_locations.Add(&AllocateArgument(pointer_type));
+      return *new (zone_)
+          MultipleNativeLocations(compound_type, multiple_locations);
+    }
+
+    // If total size is <= 2*XLEN, passed like two XLEN scalars: use registers
+    // if available or pass by value on the stack. If only one register is
+    // available, pass the low part by register and the high part on the
+    // stack.
+    if (size <= 2 * target::kWordSize) {
       NativeLocations& multiple_locations =
           *new (zone_) NativeLocations(zone_, 2);
       multiple_locations.Add(&AllocateArgument(pointer_type));
       multiple_locations.Add(&AllocateArgument(pointer_type));
       return *new (zone_)
           MultipleNativeLocations(compound_type, multiple_locations);
-    } else {
-      const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
-      const auto& pointer_location = AllocateArgument(pointer_type);
-      return *new (zone_)
-          PointerToMemoryLocation(pointer_location, compound_type);
     }
+
+    // Otherwise, passed by reference.
+    const auto& pointer_location = AllocateArgument(pointer_type);
+    return *new (zone_)
+        PointerToMemoryLocation(pointer_location, compound_type);
   }
 #endif
 
@@ -435,7 +507,7 @@
     stack_height_in_bytes = Utils::RoundUp(stack_height_in_bytes, alignment);
   }
 
-  int NumFpuRegisters(FpuRegisterKind kind) {
+  static int NumFpuRegisters(FpuRegisterKind kind) {
 #if defined(TARGET_ARCH_ARM)
     if (SoftFpAbi()) return 0;
     if (kind == kSingleFpuReg) return CallingConventions::kNumSFpuArgRegs;
@@ -446,7 +518,7 @@
   }
 
   // If no register is free, returns -1.
-  int FirstFreeFpuRegisterIndex(FpuRegisterKind kind, int amount = 1) {
+  int FirstFreeFpuRegisterIndex(FpuRegisterKind kind, int amount = 1) const {
     const intptr_t size = SizeFromFpuRegisterKind(kind) / 4;
     ASSERT(size == 1 || size == 2 || size == 4);
     if (fpu_reg_parts_used == -1) return kNoFpuRegister;
@@ -489,6 +561,13 @@
     fpu_reg_parts_used = -1;
   }
 
+  bool HasAvailableCpuRegisters(intptr_t count) const {
+    return cpu_regs_used + count <= CallingConventions::kNumArgRegs;
+  }
+  bool HasAvailableFpuRegisters(intptr_t count) const {
+    return FirstFreeFpuRegisterIndex(kQuadFpuReg, count) != kNoFpuRegister;
+  }
+
   intptr_t cpu_regs_used = 0;
   // Every bit denotes 32 bits of FPU registers.
   intptr_t fpu_reg_parts_used = 0;
diff --git a/runtime/vm/compiler/ffi/native_calling_convention_test.cc b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
index dc0d522..a8ebd99 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention_test.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
@@ -11,9 +11,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 const NativeCallingConvention& RunSignatureTest(
     dart::Zone* zone,
     const char* name,
@@ -68,10 +65,20 @@
   RunSignatureTest(Z, "int8x10", arguments, int8type);
 }
 
-UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_floatx10) {
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_floatx20) {
   const auto& floatType = *new (Z) NativePrimitiveType(kFloat);
 
-  auto& arguments = *new (Z) NativeTypes(Z, 10);
+  auto& arguments = *new (Z) NativeTypes(Z, 20);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
   arguments.Add(&floatType);
   arguments.Add(&floatType);
   arguments.Add(&floatType);
@@ -83,7 +90,35 @@
   arguments.Add(&floatType);
   arguments.Add(&floatType);
 
-  RunSignatureTest(Z, "floatx10", arguments, floatType);
+  RunSignatureTest(Z, "floatx20", arguments, floatType);
+}
+
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_doublex20) {
+  const auto& doubleType = *new (Z) NativePrimitiveType(kDouble);
+
+  auto& arguments = *new (Z) NativeTypes(Z, 20);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+
+  RunSignatureTest(Z, "doublex20", arguments, doubleType);
 }
 
 // Test with 3-byte struct.
@@ -628,8 +663,6 @@
   RunSignatureTest(Z, "struct12bytesFloatx6", arguments, int64_type);
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_location.cc b/runtime/vm/compiler/ffi/native_location.cc
index f757a31..7b362fd 100644
--- a/runtime/vm/compiler/ffi/native_location.cc
+++ b/runtime/vm/compiler/ffi/native_location.cc
@@ -277,14 +277,14 @@
 
 void NativeRegistersLocation::PrintTo(BaseTextBuffer* f) const {
   if (num_regs() == 1) {
-    f->Printf("%s", RegisterNames::RegisterName(regs_->At(0)));
+    f->Printf("%s", RegisterNames::RegisterAbiName(regs_->At(0)));
   } else {
     f->AddString("(");
     for (intptr_t i = 0; i < num_regs(); i++) {
       if (i != 0) {
         f->Printf(", ");
       }
-      f->Printf("%s", RegisterNames::RegisterName(regs_->At(i)));
+      f->Printf("%s", RegisterNames::RegisterAbiName(regs_->At(i)));
     }
     f->AddString(")");
   }
diff --git a/runtime/vm/compiler/ffi/native_location_test.cc b/runtime/vm/compiler/ffi/native_location_test.cc
index 8eecc54..8ba10d9 100644
--- a/runtime/vm/compiler/ffi/native_location_test.cc
+++ b/runtime/vm/compiler/ffi/native_location_test.cc
@@ -10,9 +10,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 UNIT_TEST_CASE_WITH_ZONE(NativeStackLocation) {
   const auto& native_type = *new (Z) NativePrimitiveType(kInt8);
 
@@ -38,8 +35,6 @@
   EXPECT_EQ(4, half_1.offset_in_bytes());
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type.cc b/runtime/vm/compiler/ffi/native_type.cc
index 8902c9b..6838082 100644
--- a/runtime/vm/compiler/ffi/native_type.cc
+++ b/runtime/vm/compiler/ffi/native_type.cc
@@ -766,6 +766,37 @@
   UNREACHABLE();
 }
 
+intptr_t NativePrimitiveType::PrimitivePairMembers(
+    const NativePrimitiveType** first,
+    const NativePrimitiveType** second,
+    intptr_t offset_in_members) const {
+  if (offset_in_members == 0) *first = this;
+  if (offset_in_members == 1) *second = this;
+  return offset_in_members + 1;
+}
+
+intptr_t NativeArrayType::PrimitivePairMembers(
+    const NativePrimitiveType** first,
+    const NativePrimitiveType** second,
+    intptr_t offset_in_members) const {
+  for (intptr_t i = 0; i < length_; i++) {
+    offset_in_members =
+        element_type_.PrimitivePairMembers(first, second, offset_in_members);
+  }
+  return offset_in_members;
+}
+
+intptr_t NativeCompoundType::PrimitivePairMembers(
+    const NativePrimitiveType** first,
+    const NativePrimitiveType** second,
+    intptr_t offset_in_members) const {
+  for (intptr_t i = 0; i < members().length(); i++) {
+    offset_in_members =
+        members_[i]->PrimitivePairMembers(first, second, offset_in_members);
+  }
+  return offset_in_members;
+}
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
 bool NativePrimitiveType::ContainsOnlyFloats(Range range) const {
   const auto this_range = Range::StartAndEnd(0, SizeInBytes());
diff --git a/runtime/vm/compiler/ffi/native_type.h b/runtime/vm/compiler/ffi/native_type.h
index f60fea6..a3a03bd 100644
--- a/runtime/vm/compiler/ffi/native_type.h
+++ b/runtime/vm/compiler/ffi/native_type.h
@@ -138,6 +138,13 @@
   virtual intptr_t NumPrimitiveMembersRecursive() const = 0;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const = 0;
 
+  // Returns the number of primitive members when this aggregrate is flattened
+  // out, and sets the out-parameters to the first two such primitive members.
+  virtual intptr_t PrimitivePairMembers(
+      const NativePrimitiveType** first,
+      const NativePrimitiveType** second,
+      intptr_t offset_in_members = 0) const = 0;
+
   virtual ~NativeType() {}
 
  protected:
@@ -206,6 +213,9 @@
 
   virtual intptr_t NumPrimitiveMembersRecursive() const;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+  virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+                                        const NativePrimitiveType** second,
+                                        intptr_t offset_in_members = 0) const;
 
   virtual ~NativePrimitiveType() {}
 
@@ -251,6 +261,9 @@
 
   virtual intptr_t NumPrimitiveMembersRecursive() const;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+  virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+                                        const NativePrimitiveType** second,
+                                        intptr_t offset_in_members = 0) const;
 
  private:
   const NativeType& element_type_;
@@ -300,6 +313,9 @@
 
   virtual intptr_t NumPrimitiveMembersRecursive() const = 0;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+  virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+                                        const NativePrimitiveType** second,
+                                        intptr_t offset_in_members = 0) const;
 
  protected:
   NativeCompoundType(const NativeTypes& members,
diff --git a/runtime/vm/compiler/ffi/native_type_test.cc b/runtime/vm/compiler/ffi/native_type_test.cc
index aa3b00c..d132b91 100644
--- a/runtime/vm/compiler/ffi/native_type_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_test.cc
@@ -12,9 +12,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 const NativeCompoundType& RunStructTest(dart::Zone* zone,
                                         const char* name,
                                         const NativeTypes& member_types,
@@ -342,8 +339,6 @@
   EXPECT(union_type.ContainsUnalignedMembers());
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type_vm_test.cc b/runtime/vm/compiler/ffi/native_type_vm_test.cc
index 28e2b42..50a1e07 100644
--- a/runtime/vm/compiler/ffi/native_type_vm_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_vm_test.cc
@@ -11,9 +11,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 ISOLATE_UNIT_TEST_CASE(Ffi_NativeType_Primitive_FromAbstractType) {
   Zone* Z = thread->zone();
 
@@ -89,8 +86,6 @@
             native_type.members()[1]->SizeInBytes());
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect
new file mode 100644
index 0000000..1855bc1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect
@@ -0,0 +1,22 @@
+(r0, r1) int64[double]
+(r2, r3) int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+=>
+(r0, r1) int64[double]
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect
new file mode 100644
index 0000000..9f87499
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect
@@ -0,0 +1,22 @@
+d0 double
+d1 double
+d2 double
+d3 double
+d4 double
+d5 double
+d6 double
+d7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+q0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect
new file mode 100644
index 0000000..9f87499
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect
@@ -0,0 +1,22 @@
+d0 double
+d1 double
+d2 double
+d3 double
+d4 double
+d5 double
+d6 double
+d7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+q0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect
new file mode 100644
index 0000000..5dcb075
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect
@@ -0,0 +1,22 @@
+fa0 double
+fa1 double
+fa2 double
+fa3 double
+fa4 double
+fa5 double
+fa6 double
+fa7 double
+(a0, a1) int64[double]
+(a2, a3) int64[double]
+(a4, a5) int64[double]
+(a6, a7) int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect
new file mode 100644
index 0000000..a46f1fb
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect
@@ -0,0 +1,22 @@
+fa0 double
+fa1 double
+fa2 double
+fa3 double
+fa4 double
+fa5 double
+fa6 double
+fa7 double
+a0 int64[double]
+a1 int64[double]
+a2 int64[double]
+a3 int64[double]
+a4 int64[double]
+a5 int64[double]
+a6 int64[double]
+a7 int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect
new file mode 100644
index 0000000..055bacc
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect
deleted file mode 100644
index 8f237e3..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+8 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect
deleted file mode 100644
index 0a25996..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+4 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect
deleted file mode 100644
index 8f237e3..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+8 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
deleted file mode 100644
index 0a25996..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+4 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect
deleted file mode 100644
index f563dbd..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-r0 int32[float]
-r1 int32[float]
-r2 int32[float]
-r3 int32[float]
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-=>
-r0 int32[float]
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect
deleted file mode 100644
index 9ff44a7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-s0 float
-s1 float
-s2 float
-s3 float
-s4 float
-s5 float
-s6 float
-s7 float
-s8 float
-s9 float
-=>
-q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect
deleted file mode 100644
index 9ff44a7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-s0 float
-s1 float
-s2 float
-s3 float
-s4 float
-s5 float
-s6 float
-s7 float
-s8 float
-s9 float
-=>
-q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect
deleted file mode 100644
index 1244587..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-S+0 float
-S+8 float
-S+16 float
-S+24 float
-S+32 float
-S+40 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect
new file mode 100644
index 0000000..7964f7b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect
new file mode 100644
index 0000000..b65ab29
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect
new file mode 100644
index 0000000..7964f7b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect
new file mode 100644
index 0000000..b65ab29
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect
new file mode 100644
index 0000000..dfc7b270
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect
@@ -0,0 +1,22 @@
+r0 int32[float]
+r1 int32[float]
+r2 int32[float]
+r3 int32[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+=>
+r0 int32[float]
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect
new file mode 100644
index 0000000..f1315e6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect
@@ -0,0 +1,22 @@
+s0 float
+s1 float
+s2 float
+s3 float
+s4 float
+s5 float
+s6 float
+s7 float
+s8 float
+s9 float
+s10 float
+s11 float
+s12 float
+s13 float
+s14 float
+s15 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect
new file mode 100644
index 0000000..f1315e6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect
@@ -0,0 +1,22 @@
+s0 float
+s1 float
+s2 float
+s3 float
+s4 float
+s5 float
+s6 float
+s7 float
+s8 float
+s9 float
+s10 float
+s11 float
+s12 float
+s13 float
+s14 float
+s15 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect
new file mode 100644
index 0000000..edb61cc
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect
@@ -0,0 +1,22 @@
+fa0 float
+fa1 float
+fa2 float
+fa3 float
+fa4 float
+fa5 float
+fa6 float
+fa7 float
+(a0, a1) int64[float]
+(a2, a3) int64[float]
+(a4, a5) int64[float]
+(a6, a7) int64[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+=>
+fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
new file mode 100644
index 0000000..b8030e0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
@@ -0,0 +1,22 @@
+fa0 float
+fa1 float
+fa2 float
+fa3 float
+fa4 float
+fa5 float
+fa6 float
+fa7 float
+a0 int64[float]
+a1 int64[float]
+a2 int64[float]
+a3 int64[float]
+a4 int64[float]
+a5 int64[float]
+a6 int64[float]
+a7 int64[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect
new file mode 100644
index 0000000..539d8cd
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+S+96 float
+S+104 float
+S+112 float
+S+120 float
+=>
+xmm0 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
new file mode 100644
index 0000000..71c8bd7
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+a0 int32[int8]
+a1 int32[int8]
+a2 int32[int8]
+a3 int32[int8]
+a4 int32[int8]
+a5 int32[int8]
+a6 int32[int8]
+a7 int32[int8]
+S+0 int8
+S+1 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
new file mode 100644
index 0000000..71c8bd7
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+a0 int32[int8]
+a1 int32[int8]
+a2 int32[int8]
+a3 int32[int8]
+a4 int32[int8]
+a5 int32[int8]
+a6 int32[int8]
+a7 int32[int8]
+S+0 int8
+S+1 int8
+=>
+a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect
new file mode 100644
index 0000000..cc334b3
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect
@@ -0,0 +1,3 @@
+
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect
new file mode 100644
index 0000000..ea09b9b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect
@@ -0,0 +1,3 @@
+
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect
new file mode 100644
index 0000000..3fb5790
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect
@@ -0,0 +1,4 @@
+P(a1 uint32) Struct(size: 128)
+a2 int32
+=>
+P(a0 uint32) Struct(size: 128)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect
new file mode 100644
index 0000000..ba868b6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect
@@ -0,0 +1,4 @@
+P(a1 int64) Struct(size: 128)
+a2 int32
+=>
+P(a0 int64) Struct(size: 128)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect
new file mode 100644
index 0000000..2f0c36f
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect
@@ -0,0 +1,8 @@
+P(a0 uint32) Struct(size: 12)
+P(a1 uint32) Struct(size: 12)
+P(a2 uint32) Struct(size: 12)
+P(a3 uint32) Struct(size: 12)
+P(a4 uint32) Struct(size: 12)
+P(a5 uint32) Struct(size: 12)
+=>
+(a0, a1) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect
new file mode 100644
index 0000000..c9dc492
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect
@@ -0,0 +1,8 @@
+M(a0 int64, a1 int64) Struct(size: 12)
+M(a2 int64, a3 int64) Struct(size: 12)
+M(a4 int64, a5 int64) Struct(size: 12)
+M(a6 int64, a7 int64) Struct(size: 12)
+M(S+0 int64, S+8 int64) Struct(size: 12)
+M(S+16 int64, S+24 int64) Struct(size: 12)
+=>
+a0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect
new file mode 100644
index 0000000..4824868
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect
@@ -0,0 +1,15 @@
+P(a1 uint32) Struct(size: 16)
+fa0 float
+P(a2 uint32) Struct(size: 16)
+P(a3 uint32) Struct(size: 16)
+P(a4 uint32) Struct(size: 16)
+P(a5 uint32) Struct(size: 16)
+P(a6 uint32) Struct(size: 16)
+P(a7 uint32) Struct(size: 16)
+P(S+0 uint32) Struct(size: 16)
+P(S+4 uint32) Struct(size: 16)
+fa1 float
+S+8 int8
+P(S+12 uint32) Struct(size: 16)
+=>
+P(a0 uint32) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect
new file mode 100644
index 0000000..620273c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int64, a1 int64) Struct(size: 16)
+fa0 float
+M(a2 int64, a3 int64) Struct(size: 16)
+M(a4 int64, a5 int64) Struct(size: 16)
+M(a6 int64, a7 int64) Struct(size: 16)
+M(S+0 int64, S+8 int64) Struct(size: 16)
+M(S+16 int64, S+24 int64) Struct(size: 16)
+M(S+32 int64, S+40 int64) Struct(size: 16)
+M(S+48 int64, S+56 int64) Struct(size: 16)
+M(S+64 int64, S+72 int64) Struct(size: 16)
+fa1 float
+S+80 int8
+M(S+88 int64, S+96 int64) Struct(size: 16)
+=>
+M(a0 int64, a1 int64) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect
new file mode 100644
index 0000000..39e23b8c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32) Struct(size: 3)
+M(a1 uint32) Struct(size: 3)
+M(a2 uint32) Struct(size: 3)
+M(a3 uint32) Struct(size: 3)
+M(a4 uint32) Struct(size: 3)
+M(a5 uint32) Struct(size: 3)
+M(a6 uint32) Struct(size: 3)
+M(a7 uint32) Struct(size: 3)
+M(S+0 uint32) Struct(size: 3)
+M(S+4 uint32) Struct(size: 3)
+=>
+M(a0 uint32) Struct(size: 3)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect
new file mode 100644
index 0000000..b67660c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Struct(size: 3)
+M(a1 int64) Struct(size: 3)
+M(a2 int64) Struct(size: 3)
+M(a3 int64) Struct(size: 3)
+M(a4 int64) Struct(size: 3)
+M(a5 int64) Struct(size: 3)
+M(a6 int64) Struct(size: 3)
+M(a7 int64) Struct(size: 3)
+M(S+0 int64) Struct(size: 3)
+M(S+8 int64) Struct(size: 3)
+=>
+M(a0 int64) Struct(size: 3)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect
new file mode 100644
index 0000000..14ea892
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32, a1 uint32) Struct(size: 8)
+M(a2 uint32, a3 uint32) Struct(size: 8)
+M(a4 uint32, a5 uint32) Struct(size: 8)
+M(a6 uint32, a7 uint32) Struct(size: 8)
+M(S+0 uint32, S+4 uint32) Struct(size: 8)
+M(S+8 uint32, S+12 uint32) Struct(size: 8)
+M(S+16 uint32, S+20 uint32) Struct(size: 8)
+M(S+24 uint32, S+28 uint32) Struct(size: 8)
+M(S+32 uint32, S+36 uint32) Struct(size: 8)
+M(S+40 uint32, S+44 uint32) Struct(size: 8)
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect
new file mode 100644
index 0000000..b0e7ecb
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Struct(size: 8)
+M(a1 int64) Struct(size: 8)
+M(a2 int64) Struct(size: 8)
+M(a3 int64) Struct(size: 8)
+M(a4 int64) Struct(size: 8)
+M(a5 int64) Struct(size: 8)
+M(a6 int64) Struct(size: 8)
+M(a7 int64) Struct(size: 8)
+M(S+0 int64) Struct(size: 8)
+M(S+8 int64) Struct(size: 8)
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect
new file mode 100644
index 0000000..648d83b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect
@@ -0,0 +1,3 @@
+M(a0 uint32, a1 uint32) Struct(size: 8)
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect
new file mode 100644
index 0000000..f1b1ff8
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect
@@ -0,0 +1,3 @@
+M(a0 int64) Struct(size: 8)
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect
new file mode 100644
index 0000000..d84073a
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int32[int8], fa0 double) Struct(size: 9)
+M(a1 int32[int8], fa1 double) Struct(size: 9)
+M(a2 int32[int8], fa2 double) Struct(size: 9)
+M(a3 int32[int8], fa3 double) Struct(size: 9)
+M(a4 int32[int8], fa4 double) Struct(size: 9)
+M(a5 int32[int8], fa5 double) Struct(size: 9)
+M(a6 int32[int8], fa6 double) Struct(size: 9)
+M(a7 int32[int8], fa7 double) Struct(size: 9)
+P(S+0 uint32) Struct(size: 9)
+P(S+4 uint32) Struct(size: 9)
+S+8 double
+S+16 int32
+S+20 int32
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
new file mode 100644
index 0000000..eee3c90
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int32[int8], fa0 double) Struct(size: 9)
+M(a1 int32[int8], fa1 double) Struct(size: 9)
+M(a2 int32[int8], fa2 double) Struct(size: 9)
+M(a3 int32[int8], fa3 double) Struct(size: 9)
+M(a4 int32[int8], fa4 double) Struct(size: 9)
+M(a5 int32[int8], fa5 double) Struct(size: 9)
+M(a6 int32[int8], fa6 double) Struct(size: 9)
+M(a7 int32[int8], fa7 double) Struct(size: 9)
+M(S+0 int64, S+8 int64) Struct(size: 9)
+M(S+16 int64, S+24 int64) Struct(size: 9)
+S+32 double
+S+40 int32
+S+44 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
new file mode 100644
index 0000000..e8eafe5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
@@ -0,0 +1,17 @@
+Struct(size: 72, field alignment: 8, stack alignment: 8, members: {
+  0: int8,
+  2: int16,
+  4: int32,
+  8: int64,
+  16: uint8,
+  18: uint16,
+  20: uint32,
+  24: uint64,
+  32: int32,
+  40: double,
+  48: float,
+  52: int32,
+  56: int32,
+  60: int32,
+  64: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect
new file mode 100644
index 0000000..59f05bb1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect
@@ -0,0 +1,17 @@
+Struct(size: 88, field alignment: 8, stack alignment: 8, members: {
+  0: int8,
+  2: int16,
+  4: int32,
+  8: int64,
+  16: uint8,
+  18: uint16,
+  20: uint32,
+  24: uint64,
+  32: int64,
+  40: double,
+  48: float,
+  56: int64,
+  64: int64,
+  72: int64,
+  80: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect
new file mode 100644
index 0000000..21f9c56
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect
@@ -0,0 +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)
+})
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
new file mode 100644
index 0000000..21f9c56
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
@@ -0,0 +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)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect
new file mode 100644
index 0000000..a753409
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect
@@ -0,0 +1,6 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: float,
+  4: float,
+  8: float,
+  12: float
+})
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
new file mode 100644
index 0000000..a753409
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
@@ -0,0 +1,6 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: float,
+  4: float,
+  8: float,
+  12: 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
new file mode 100644
index 0000000..b2249b0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 8, field alignment: 1, stack alignment: 1, 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
new file mode 100644
index 0000000..b2249b0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 8, field alignment: 1, stack alignment: 1, 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
new file mode 100644
index 0000000..cba532d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+  0: int8,
+  1: int8,
+  2: int8,
+  3: int8,
+  4: int8,
+  5: int8,
+  6: int8,
+  7: int8,
+  8: int8,
+  9: 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
new file mode 100644
index 0000000..cba532d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+  0: int8,
+  1: int8,
+  2: int8,
+  3: int8,
+  4: int8,
+  5: int8,
+  6: int8,
+  7: int8,
+  8: int8,
+  9: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect
new file mode 100644
index 0000000..f60a8fe
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect
@@ -0,0 +1,13 @@
+P(a1 uint32) Union(size: 16)
+P(a2 uint32) Union(size: 16)
+P(a3 uint32) Union(size: 16)
+P(a4 uint32) Union(size: 16)
+P(a5 uint32) Union(size: 16)
+P(a6 uint32) Union(size: 16)
+P(a7 uint32) Union(size: 16)
+P(S+0 uint32) Union(size: 16)
+P(S+4 uint32) Union(size: 16)
+S+8 int8
+P(S+12 uint32) Union(size: 16)
+=>
+P(a0 uint32) Union(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect
new file mode 100644
index 0000000..94bc67b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect
@@ -0,0 +1,13 @@
+M(a0 int64, a1 int64) Union(size: 16)
+M(a2 int64, a3 int64) Union(size: 16)
+M(a4 int64, a5 int64) Union(size: 16)
+M(a6 int64, a7 int64) Union(size: 16)
+M(S+0 int64, S+8 int64) Union(size: 16)
+M(S+16 int64, S+24 int64) Union(size: 16)
+M(S+32 int64, S+40 int64) Union(size: 16)
+M(S+48 int64, S+56 int64) Union(size: 16)
+M(S+64 int64, S+72 int64) Union(size: 16)
+S+80 int8
+M(S+88 int64, S+96 int64) Union(size: 16)
+=>
+M(a0 int64, a1 int64) Union(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect
new file mode 100644
index 0000000..9ac54e5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32, a1 uint32) Union(size: 5)
+M(a2 uint32, a3 uint32) Union(size: 5)
+M(a4 uint32, a5 uint32) Union(size: 5)
+M(a6 uint32, a7 uint32) Union(size: 5)
+M(S+0 uint32, S+4 uint32) Union(size: 5)
+M(S+8 uint32, S+12 uint32) Union(size: 5)
+M(S+16 uint32, S+20 uint32) Union(size: 5)
+M(S+24 uint32, S+28 uint32) Union(size: 5)
+M(S+32 uint32, S+36 uint32) Union(size: 5)
+M(S+40 uint32, S+44 uint32) Union(size: 5)
+=>
+M(a0 uint32, a1 uint32) Union(size: 5)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect
new file mode 100644
index 0000000..6116be3
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Union(size: 5)
+M(a1 int64) Union(size: 5)
+M(a2 int64) Union(size: 5)
+M(a3 int64) Union(size: 5)
+M(a4 int64) Union(size: 5)
+M(a5 int64) Union(size: 5)
+M(a6 int64) Union(size: 5)
+M(a7 int64) Union(size: 5)
+M(S+0 int64) Union(size: 5)
+M(S+8 int64) Union(size: 5)
+=>
+M(a0 int64) Union(size: 5)
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 00c2160..0af255f 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -1105,6 +1105,7 @@
 }
 
 Fragment StreamingFlowGraphBuilder::BuildExpression(TokenPosition* position) {
+  ++num_ast_nodes_;
   uint8_t payload = 0;
   Tag tag = ReadTag(&payload);  // read tag.
   switch (tag) {
@@ -1242,6 +1243,7 @@
 }
 
 Fragment StreamingFlowGraphBuilder::BuildStatement(TokenPosition* position) {
+  ++num_ast_nodes_;
   intptr_t offset = ReaderOffset();
   Tag tag = ReadTag();  // read tag.
   switch (tag) {
@@ -5210,36 +5212,35 @@
   yield_continuations().Add(YieldContinuation(anchor, CurrentTryIndex()));
 
   Fragment continuation(instructions.entry, anchor);
-
   RELEASE_ASSERT(parsed_function()->function().IsAsyncClosure() ||
                  parsed_function()->function().IsAsyncGenClosure() ||
                  parsed_function()->function().IsSyncGenClosure());
 
   // TODO(43900): Only emit this when needed.
   {
-    // If function is {async, async gen, sync yielding} closure it takes three
-    // parameters where the second and the third are exception and stack_trace.
-    // Check if exception is non-null and rethrow it.
+    // Our sync-yielding functions can be invoked with either a yield result or
+    // with an non-null exception & stacktrace.
     //
-    //   :sync_op(:iterator, [:exception, :stack_trace]) {
+    // We detect the case we're in based on the nullability of stacktrace in
+    //
+    //   :sync_op(:iterator, [:exception, :stack_trace]) { }
+    //
     // or:
-    //   :async_op(:result, [:exception, :stack_trace]) {
-    //     ...
-    //     Continuation<index>:
-    //       if (:exception != null) rethrow(:exception, :stack_trace);
-    //     ...
-    //   }
     //
-    LocalVariable* exception_var = parsed_function()->ParameterVariable(2);
-    LocalVariable* stack_trace_var = parsed_function()->ParameterVariable(3);
-    ASSERT(exception_var->name().ptr() == Symbols::ExceptionParameter().ptr());
+    //   :async_op(:result_or_exception, :stack_trace) { }
+    //
+    const auto& fun = parsed_function()->function();
+    LocalVariable* exception_var =
+        parsed_function()->ParameterVariable(fun.IsSyncGenClosure() ? 2 : 1);
+    LocalVariable* stack_trace_var =
+        parsed_function()->ParameterVariable(fun.IsSyncGenClosure() ? 3 : 2);
     ASSERT(stack_trace_var->name().ptr() ==
            Symbols::StackTraceParameter().ptr());
 
     TargetEntryInstr* no_error;
     TargetEntryInstr* error;
 
-    continuation += LoadLocal(exception_var);
+    continuation += LoadLocal(stack_trace_var);
     continuation += BranchIfNull(&no_error, &error);
 
     Fragment rethrow(/*instruction=*/error);
@@ -5471,6 +5472,13 @@
         signature ^= ClassFinalizer::FinalizeType(signature);
         function.SetSignature(signature);
 
+        if (has_pragma) {
+          if (Library::FindPragma(thread(), /*only_core=*/false, function,
+                                  Symbols::vm_invisible())) {
+            function.set_is_visible(false);
+          }
+        }
+
         ClosureFunctionsCache::AddClosureFunctionLocked(function);
         break;
       }
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 8fe4c5c..cc8a1f9 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -54,6 +54,8 @@
 
   Fragment BuildStatementAt(intptr_t kernel_offset);
 
+  intptr_t num_ast_nodes() const { return num_ast_nodes_; }
+
  private:
   Thread* thread() const { return flow_graph_builder_->thread_; }
 
@@ -436,6 +438,7 @@
   ProcedureAttributesMetadataHelper procedure_attributes_metadata_helper_;
   CallSiteAttributesMetadataHelper call_site_attributes_metadata_helper_;
   Object& closure_owner_;
+  intptr_t num_ast_nodes_ = 0;
 
   friend class KernelLoader;
 
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 5147fdc..2fab100 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -36,6 +36,12 @@
 #include "vm/symbols.h"
 
 namespace dart {
+
+DEFINE_FLAG(bool,
+            print_huge_methods,
+            false,
+            "Print huge methods (less optimized)");
+
 namespace kernel {
 
 #define Z (zone_)
@@ -768,6 +774,23 @@
   FinalizeCoverageArray();
   result->set_coverage_array(coverage_array());
 
+  if (streaming_flow_graph_builder.num_ast_nodes() >
+      FLAG_huge_method_cutoff_in_ast_nodes) {
+    if (FLAG_print_huge_methods) {
+      OS::PrintErr(
+          "Warning: \'%s\' from \'%s\' is too large. Some optimizations have "
+          "been "
+          "disabled, and the compiler might run out of memory. "
+          "Consider refactoring this code into smaller components.\n",
+          function.QualifiedUserVisibleNameCString(),
+          String::Handle(Z, Library::Handle(
+                                Z, Class::Handle(Z, function.Owner()).library())
+                                .url())
+              .ToCString());
+    }
+    result->mark_huge_method();
+  }
+
   return result;
 }
 
@@ -791,6 +814,38 @@
   return body;
 }
 
+#define LOAD_NATIVE_FIELD(V)                                                   \
+  V(ByteDataViewLength, TypedDataBase_length)                                  \
+  V(ByteDataViewOffsetInBytes, TypedDataView_offset_in_bytes)                  \
+  V(ByteDataViewTypedData, TypedDataView_typed_data)                           \
+  V(GrowableArrayLength, GrowableObjectArray_length)                           \
+  V(ImmutableLinkedHashBase_getData, ImmutableLinkedHashBase_data)             \
+  V(ImmutableLinkedHashBase_getIndex, ImmutableLinkedHashBase_index)           \
+  V(LinkedHashBase_getData, LinkedHashBase_data)                               \
+  V(LinkedHashBase_getDeletedKeys, LinkedHashBase_deleted_keys)                \
+  V(LinkedHashBase_getHashMask, LinkedHashBase_hash_mask)                      \
+  V(LinkedHashBase_getIndex, LinkedHashBase_index)                             \
+  V(LinkedHashBase_getUsedData, LinkedHashBase_used_data)                      \
+  V(ObjectArrayLength, Array_length)                                           \
+  V(TypedDataViewOffsetInBytes, TypedDataView_offset_in_bytes)                 \
+  V(TypedDataViewTypedData, TypedDataView_typed_data)                          \
+  V(TypedListBaseLength, TypedDataBase_length)                                 \
+  V(WeakProperty_getKey, WeakProperty_key)                                     \
+  V(WeakProperty_getValue, WeakProperty_value)                                 \
+  V(WeakReference_getTarget, WeakReference_target)
+
+#define STORE_NATIVE_FIELD(V)                                                  \
+  V(LinkedHashBase_setData, LinkedHashBase_data)                               \
+  V(LinkedHashBase_setIndex, LinkedHashBase_index)                             \
+  V(WeakProperty_setKey, WeakProperty_key)                                     \
+  V(WeakProperty_setValue, WeakProperty_value)                                 \
+  V(WeakReference_setTarget, WeakReference_target)
+
+#define STORE_NATIVE_FIELD_NO_BARRIER(V)                                       \
+  V(LinkedHashBase_setDeletedKeys, LinkedHashBase_deleted_keys)                \
+  V(LinkedHashBase_setHashMask, LinkedHashBase_hash_mask)                      \
+  V(LinkedHashBase_setUsedData, LinkedHashBase_used_data)
+
 bool FlowGraphBuilder::IsRecognizedMethodForFlowGraph(
     const Function& function) {
   const MethodRecognizer::Kind kind = function.recognized_kind();
@@ -867,41 +922,22 @@
     case MethodRecognizer::kObjectEquals:
     case MethodRecognizer::kStringBaseLength:
     case MethodRecognizer::kStringBaseIsEmpty:
-    case MethodRecognizer::kGrowableArrayLength:
-    case MethodRecognizer::kObjectArrayLength:
-    case MethodRecognizer::kImmutableArrayLength:
-    case MethodRecognizer::kTypedListBaseLength:
-    case MethodRecognizer::kByteDataViewLength:
-    case MethodRecognizer::kByteDataViewOffsetInBytes:
-    case MethodRecognizer::kTypedDataViewOffsetInBytes:
-    case MethodRecognizer::kByteDataViewTypedData:
-    case MethodRecognizer::kTypedDataViewTypedData:
     case MethodRecognizer::kClassIDgetID:
+    case MethodRecognizer::kGrowableArrayAllocateWithData:
     case MethodRecognizer::kGrowableArrayCapacity:
     case MethodRecognizer::kListFactory:
     case MethodRecognizer::kObjectArrayAllocate:
     case MethodRecognizer::kCopyRangeFromUint8ListToOneByteString:
-    case MethodRecognizer::kLinkedHashBase_getIndex:
-    case MethodRecognizer::kLinkedHashBase_setIndex:
-    case MethodRecognizer::kLinkedHashBase_getData:
-    case MethodRecognizer::kLinkedHashBase_setData:
-    case MethodRecognizer::kLinkedHashBase_getHashMask:
-    case MethodRecognizer::kLinkedHashBase_setHashMask:
-    case MethodRecognizer::kLinkedHashBase_getUsedData:
-    case MethodRecognizer::kLinkedHashBase_setUsedData:
-    case MethodRecognizer::kLinkedHashBase_getDeletedKeys:
-    case MethodRecognizer::kLinkedHashBase_setDeletedKeys:
-    case MethodRecognizer::kImmutableLinkedHashBase_getData:
-    case MethodRecognizer::kImmutableLinkedHashBase_getIndex:
     case MethodRecognizer::kImmutableLinkedHashBase_setIndexStoreRelease:
-    case MethodRecognizer::kWeakProperty_getKey:
-    case MethodRecognizer::kWeakProperty_setKey:
-    case MethodRecognizer::kWeakProperty_getValue:
-    case MethodRecognizer::kWeakProperty_setValue:
     case MethodRecognizer::kFfiAbi:
     case MethodRecognizer::kReachabilityFence:
     case MethodRecognizer::kUtf8DecoderScan:
     case MethodRecognizer::kHas63BitSmis:
+#define CASE(method, slot) case MethodRecognizer::k##method:
+      LOAD_NATIVE_FIELD(CASE)
+      STORE_NATIVE_FIELD(CASE)
+      STORE_NATIVE_FIELD_NO_BARRIER(CASE)
+#undef CASE
       return true;
     case MethodRecognizer::kDoubleToInteger:
     case MethodRecognizer::kDoubleMod:
@@ -1088,40 +1124,31 @@
         body += StrictCompare(Token::kEQ_STRICT);
       }
       break;
-    case MethodRecognizer::kGrowableArrayLength:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::GrowableObjectArray_length());
-      break;
-    case MethodRecognizer::kObjectArrayLength:
-    case MethodRecognizer::kImmutableArrayLength:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::Array_length());
-      break;
-    case MethodRecognizer::kTypedListBaseLength:
-    case MethodRecognizer::kByteDataViewLength:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::TypedDataBase_length());
-      break;
-    case MethodRecognizer::kByteDataViewOffsetInBytes:
-    case MethodRecognizer::kTypedDataViewOffsetInBytes:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::TypedDataView_offset_in_bytes());
-      break;
-    case MethodRecognizer::kByteDataViewTypedData:
-    case MethodRecognizer::kTypedDataViewTypedData:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::TypedDataView_data());
-      break;
     case MethodRecognizer::kClassIDgetID:
       ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += LoadClassId();
       break;
+    case MethodRecognizer::kGrowableArrayAllocateWithData: {
+      ASSERT(function.IsFactory());
+      ASSERT_EQUAL(function.NumParameters(), 2);
+      const Class& cls =
+          Class::ZoneHandle(Z, compiler::GrowableObjectArrayClass().ptr());
+      body += LoadLocal(parsed_function_->RawParameterVariable(0));
+      body += AllocateObject(TokenPosition::kNoSource, cls, 1);
+      LocalVariable* object = MakeTemporary();
+      body += LoadLocal(object);
+      body += LoadLocal(parsed_function_->RawParameterVariable(1));
+      body += StoreNativeField(Slot::GrowableObjectArray_data(),
+                               StoreInstanceFieldInstr::Kind::kInitializing,
+                               kNoStoreBarrier);
+      body += LoadLocal(object);
+      body += IntConstant(0);
+      body += StoreNativeField(Slot::GrowableObjectArray_length(),
+                               StoreInstanceFieldInstr::Kind::kInitializing,
+                               kNoStoreBarrier);
+      break;
+    }
     case MethodRecognizer::kGrowableArrayCapacity:
       ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
@@ -1207,23 +1234,6 @@
       body += MemoryCopy(kTypedDataUint8ArrayCid, kOneByteStringCid);
       body += NullConstant();
       break;
-    case MethodRecognizer::kLinkedHashBase_getIndex:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::LinkedHashBase_index());
-      break;
-    case MethodRecognizer::kImmutableLinkedHashBase_getIndex:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::ImmutableLinkedHashBase_index());
-      break;
-    case MethodRecognizer::kLinkedHashBase_setIndex:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::LinkedHashBase_index());
-      body += NullConstant();
-      break;
     case MethodRecognizer::kImmutableLinkedHashBase_setIndexStoreRelease:
       ASSERT_EQUAL(function.NumParameters(), 2);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
@@ -1236,89 +1246,6 @@
                            kEmitStoreBarrier, compiler::Assembler::kRelease);
       body += NullConstant();
       break;
-    case MethodRecognizer::kLinkedHashBase_getData:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::LinkedHashBase_data());
-      break;
-    case MethodRecognizer::kImmutableLinkedHashBase_getData:
-      ASSERT(function.NumParameters() == 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::ImmutableLinkedHashBase_data());
-      break;
-    case MethodRecognizer::kLinkedHashBase_setData:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::LinkedHashBase_data());
-      body += NullConstant();
-      break;
-    case MethodRecognizer::kLinkedHashBase_getHashMask:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::LinkedHashBase_hash_mask());
-      break;
-    case MethodRecognizer::kLinkedHashBase_setHashMask:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::LinkedHashBase_hash_mask(),
-                               StoreInstanceFieldInstr::Kind::kOther,
-                               kNoStoreBarrier);
-      body += NullConstant();
-      break;
-    case MethodRecognizer::kLinkedHashBase_getUsedData:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::LinkedHashBase_used_data());
-      break;
-    case MethodRecognizer::kLinkedHashBase_setUsedData:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::LinkedHashBase_used_data(),
-                               StoreInstanceFieldInstr::Kind::kOther,
-                               kNoStoreBarrier);
-      body += NullConstant();
-      break;
-    case MethodRecognizer::kLinkedHashBase_getDeletedKeys:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::LinkedHashBase_deleted_keys());
-      break;
-    case MethodRecognizer::kLinkedHashBase_setDeletedKeys:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::LinkedHashBase_deleted_keys(),
-                               StoreInstanceFieldInstr::Kind::kOther,
-                               kNoStoreBarrier);
-      body += NullConstant();
-      break;
-    case MethodRecognizer::kWeakProperty_getKey:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::WeakProperty_key());
-      break;
-    case MethodRecognizer::kWeakProperty_setKey:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::WeakProperty_key());
-      body += NullConstant();
-      break;
-    case MethodRecognizer::kWeakProperty_getValue:
-      ASSERT_EQUAL(function.NumParameters(), 1);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadNativeField(Slot::WeakProperty_value());
-      break;
-    case MethodRecognizer::kWeakProperty_setValue:
-      ASSERT_EQUAL(function.NumParameters(), 2);
-      body += LoadLocal(parsed_function_->RawParameterVariable(0));
-      body += LoadLocal(parsed_function_->RawParameterVariable(1));
-      body += StoreNativeField(Slot::WeakProperty_value());
-      body += NullConstant();
-      break;
     case MethodRecognizer::kUtf8DecoderScan:
       ASSERT_EQUAL(function.NumParameters(), 5);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // decoder
@@ -1374,7 +1301,7 @@
       body += LoadLocal(arg_pointer);
       body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       // No GC from here til LoadIndexed.
-      body += LoadUntagged(compiler::target::PointerBase::data_field_offset());
+      body += LoadUntagged(compiler::target::PointerBase::data_offset());
       body += LoadLocal(arg_offset_not_null);
       body += UnboxTruncate(kUnboxedFfiIntPtr);
       body += LoadIndexed(typed_data_cid, /*index_scale=*/1,
@@ -1415,8 +1342,8 @@
         LocalVariable* pointer = MakeTemporary();
         body += LoadLocal(pointer);
         body += LoadLocal(address);
-        body += UnboxTruncate(kUnboxedFfiIntPtr);
-        body += StoreNativeField(Slot::Pointer_data_field());
+        body += UnboxTruncate(kUnboxedIntPtr);
+        body += StoreNativeField(Slot::PointerBase_data());
         body += DropTempsPreserveTop(1);  // Drop [address] keep [pointer].
       }
       body += DropTempsPreserveTop(1);  // Drop [arg_offset].
@@ -1487,13 +1414,13 @@
       body += LoadLocal(arg_pointer);  // Pointer.
       body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       // No GC from here til StoreIndexed.
-      body += LoadUntagged(compiler::target::PointerBase::data_field_offset());
+      body += LoadUntagged(compiler::target::PointerBase::data_offset());
       body += LoadLocal(arg_offset_not_null);
       body += UnboxTruncate(kUnboxedFfiIntPtr);
       body += LoadLocal(arg_value_not_null);
       if (kind == MethodRecognizer::kFfiStorePointer) {
         // This can only be Pointer, so it is always safe to LoadUntagged.
-        body += LoadUntagged(compiler::target::Pointer::data_field_offset());
+        body += LoadUntagged(compiler::target::PointerBase::data_offset());
         body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
       } else {
         // Avoid any unnecessary (and potentially deoptimizing) int
@@ -1524,15 +1451,15 @@
       body += LoadLocal(MakeTemporary());  // Duplicate Pointer.
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // Address.
       body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
-      body += UnboxTruncate(kUnboxedFfiIntPtr);
-      body += StoreNativeField(Slot::Pointer_data_field());
+      body += UnboxTruncate(kUnboxedIntPtr);
+      body += StoreNativeField(Slot::PointerBase_data());
     } break;
     case MethodRecognizer::kFfiGetAddress: {
       ASSERT_EQUAL(function.NumParameters(), 1);
       body += LoadLocal(parsed_function_->RawParameterVariable(0));  // Pointer.
       body += CheckNullOptimized(String::ZoneHandle(Z, function.name()));
       // This can only be Pointer, so it is always safe to LoadUntagged.
-      body += LoadUntagged(compiler::target::Pointer::data_field_offset());
+      body += LoadUntagged(compiler::target::PointerBase::data_offset());
       body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
       body += Box(kUnboxedFfiIntPtr);
     } break;
@@ -1582,9 +1509,9 @@
       // Initialize the result's data pointer field.
       body += LoadLocal(typed_data_object);
       body += LoadLocal(arg_pointer);
-      body += LoadUntagged(compiler::target::Pointer::data_field_offset());
+      body += LoadUntagged(compiler::target::PointerBase::data_offset());
       body += ConvertUntaggedToUnboxed(kUnboxedIntPtr);
-      body += StoreNativeField(Slot::TypedDataBase_data_field(),
+      body += StoreNativeField(Slot::PointerBase_data(),
                                StoreInstanceFieldInstr::Kind::kInitializing,
                                kNoStoreBarrier);
     } break;
@@ -1640,6 +1567,35 @@
       body += LoadLocal(parsed_function_->RawParameterVariable(0));
       body += MathUnary(MathUnaryInstr::kSqrt);
     } break;
+#define IL_BODY(method, slot)                                                  \
+  case MethodRecognizer::k##method:                                            \
+    ASSERT_EQUAL(function.NumParameters(), 1);                                 \
+    body += LoadLocal(parsed_function_->RawParameterVariable(0));              \
+    body += LoadNativeField(Slot::slot());                                     \
+    break;
+      LOAD_NATIVE_FIELD(IL_BODY)
+#undef IL_BODY
+#define IL_BODY(method, slot)                                                  \
+  case MethodRecognizer::k##method:                                            \
+    ASSERT_EQUAL(function.NumParameters(), 2);                                 \
+    body += LoadLocal(parsed_function_->RawParameterVariable(0));              \
+    body += LoadLocal(parsed_function_->RawParameterVariable(1));              \
+    body += StoreNativeField(Slot::slot());                                    \
+    body += NullConstant();                                                    \
+    break;
+      STORE_NATIVE_FIELD(IL_BODY)
+#undef IL_BODY
+#define IL_BODY(method, slot)                                                  \
+  case MethodRecognizer::k##method:                                            \
+    ASSERT_EQUAL(function.NumParameters(), 2);                                 \
+    body += LoadLocal(parsed_function_->RawParameterVariable(0));              \
+    body += LoadLocal(parsed_function_->RawParameterVariable(1));              \
+    body += StoreNativeField(                                                  \
+        Slot::slot(), StoreInstanceFieldInstr::Kind::kOther, kNoStoreBarrier); \
+    body += NullConstant();                                                    \
+    break;
+      STORE_NATIVE_FIELD_NO_BARRIER(IL_BODY)
+#undef IL_BODY
     default: {
       UNREACHABLE();
       break;
@@ -1673,7 +1629,7 @@
 
   body += LoadLocal(view_object);
   body += LoadLocal(typed_data);
-  body += StoreNativeField(token_pos, Slot::TypedDataView_data(),
+  body += StoreNativeField(token_pos, Slot::TypedDataView_typed_data(),
                            StoreInstanceFieldInstr::Kind::kInitializing);
 
   body += LoadLocal(view_object);
@@ -1694,12 +1650,12 @@
   // instructions!
   body += LoadLocal(view_object);
   body += LoadLocal(typed_data);
-  body += LoadUntagged(compiler::target::TypedDataBase::data_field_offset());
+  body += LoadUntagged(compiler::target::PointerBase::data_offset());
   body += ConvertUntaggedToUnboxed(kUnboxedIntPtr);
   body += LoadLocal(offset_in_bytes);
   body += UnboxSmiToIntptr();
   body += AddIntptrIntegers();
-  body += StoreNativeField(Slot::TypedDataBase_data_field());
+  body += StoreNativeField(Slot::PointerBase_data());
 
   return body;
 }
@@ -1839,13 +1795,14 @@
 
 Fragment FlowGraphBuilder::CheckAssignable(const AbstractType& dst_type,
                                            const String& dst_name,
-                                           AssertAssignableInstr::Kind kind) {
+                                           AssertAssignableInstr::Kind kind,
+                                           TokenPosition token_pos) {
   Fragment instructions;
   if (!dst_type.IsTopTypeForSubtyping()) {
     LocalVariable* top_of_stack = MakeTemporary();
     instructions += LoadLocal(top_of_stack);
-    instructions += AssertAssignableLoadTypeArguments(TokenPosition::kNoSource,
-                                                      dst_type, dst_name, kind);
+    instructions +=
+        AssertAssignableLoadTypeArguments(token_pos, dst_type, dst_name, kind);
     instructions += Drop();
   }
   return instructions;
@@ -3679,7 +3636,8 @@
                                   setter_value->needs_type_check();
     if (needs_type_check) {
       body += CheckAssignable(setter_value->type(), setter_value->name(),
-                              AssertAssignableInstr::kParameterCheck);
+                              AssertAssignableInstr::kParameterCheck,
+                              field.token_pos());
     }
     body += BuildNullAssertions();
     if (field.is_late()) {
@@ -4082,8 +4040,8 @@
   LocalVariable* pointer = MakeTemporary();
   code += LoadLocal(pointer);
   code += LoadLocal(address);
-  code += UnboxTruncate(kUnboxedFfiIntPtr);
-  code += StoreNativeField(Slot::Pointer_data_field());
+  code += UnboxTruncate(kUnboxedIntPtr);
+  code += StoreNativeField(Slot::PointerBase_data());
   code += StoreLocal(TokenPosition::kNoSource, result);
   code += Drop();  // StoreLocal^
   code += Drop();  // address
@@ -4145,7 +4103,7 @@
   for (intptr_t i = 0; i < num_defs; i++) {
     body += LoadLocal(variable);
     body += LoadTypedDataBaseFromCompound();
-    body += LoadUntagged(compiler::target::Pointer::data_field_offset());
+    body += LoadUntagged(compiler::target::PointerBase::data_offset());
     body += IntConstant(offset_in_bytes);
     const Representation representation = representations[i];
     offset_in_bytes += RepresentationUtils::ValueSize(representation);
@@ -4167,7 +4125,7 @@
   for (intptr_t i = 0; i < num_defs; i++) {
     const Representation representation = representations[i];
     body += LoadLocal(uint8_list);
-    body += LoadUntagged(compiler::target::TypedDataBase::data_field_offset());
+    body += LoadUntagged(compiler::target::PointerBase::data_offset());
     body += IntConstant(offset_in_bytes);
     body += LoadLocal(definitions->At(i));
     body += StoreIndexedTypedDataUnboxed(representation, /*index_scale=*/1,
@@ -4221,7 +4179,7 @@
     const classid_t typed_data_cidd = typed_data_cid(chunk_sizee);
 
     body += LoadLocal(typed_data_base);
-    body += LoadUntagged(compiler::target::TypedDataBase::data_field_offset());
+    body += LoadUntagged(compiler::target::PointerBase::data_offset());
     body += IntConstant(offset_in_bytes);
     body += LoadIndexed(typed_data_cidd, /*index_scale=*/1,
                         /*index_unboxed=*/false);
@@ -4266,7 +4224,7 @@
     LocalVariable* chunk_value = MakeTemporary("chunk_value");
 
     body += LoadLocal(typed_data_base);
-    body += LoadUntagged(compiler::target::TypedDataBase::data_field_offset());
+    body += LoadUntagged(compiler::target::PointerBase::data_offset());
     body += IntConstant(offset_in_bytes);
     body += LoadLocal(chunk_value);
     body += StoreIndexedTypedData(typed_data_cidd, /*index_scale=*/1,
@@ -4425,7 +4383,7 @@
   Fragment body;
   if (marshaller.IsPointer(arg_index)) {
     // This can only be Pointer, so it is always safe to LoadUntagged.
-    body += LoadUntagged(compiler::target::Pointer::data_field_offset());
+    body += LoadUntagged(compiler::target::PointerBase::data_offset());
     body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
   } else if (marshaller.IsHandle(arg_index)) {
     body += WrapHandle(api_local_scope);
@@ -4557,7 +4515,7 @@
                     ->context_variables()[0]));
 
   // This can only be Pointer, so it is always safe to LoadUntagged.
-  body += LoadUntagged(compiler::target::Pointer::data_field_offset());
+  body += LoadUntagged(compiler::target::PointerBase::data_offset());
   body += ConvertUntaggedToUnboxed(kUnboxedFfiIntPtr);
 
   if (marshaller.PassTypedData()) {
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index cb66e59..f226a12 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -243,7 +243,8 @@
   Fragment CheckAssignable(
       const AbstractType& dst_type,
       const String& dst_name,
-      AssertAssignableInstr::Kind kind = AssertAssignableInstr::kUnknown);
+      AssertAssignableInstr::Kind kind = AssertAssignableInstr::kUnknown,
+      TokenPosition token_pos = TokenPosition::kNoSource);
 
   Fragment AssertAssignableLoadTypeArguments(
       TokenPosition position,
diff --git a/runtime/vm/compiler/graph_intrinsifier.cc b/runtime/vm/compiler/graph_intrinsifier.cc
index 18abb34..148a752 100644
--- a/runtime/vm/compiler/graph_intrinsifier.cc
+++ b/runtime/vm/compiler/graph_intrinsifier.cc
@@ -236,7 +236,7 @@
 
   if (IsExternalTypedDataClassId(array_cid)) {
     array = builder.AddDefinition(new LoadUntaggedInstr(
-        new Value(array), target::TypedDataBase::data_field_offset()));
+        new Value(array), target::PointerBase::data_offset()));
   }
 
   Definition* result = builder.AddDefinition(new LoadIndexedInstr(
@@ -420,7 +420,7 @@
 
   if (IsExternalTypedDataClassId(array_cid)) {
     array = builder.AddDefinition(new LoadUntaggedInstr(
-        new Value(array), target::TypedDataBase::data_field_offset()));
+        new Value(array), target::PointerBase::data_offset()));
   }
   // No store barrier.
   ASSERT(IsExternalTypedDataClassId(array_cid) ||
@@ -453,7 +453,6 @@
   }
 
 DEFINE_ARRAY_GETTER_INTRINSIC(ObjectArray)
-DEFINE_ARRAY_GETTER_INTRINSIC(ImmutableArray)
 
 #define DEFINE_ARRAY_GETTER_SETTER_INTRINSICS(enum_name)                       \
   DEFINE_ARRAY_GETTER_INTRINSIC(enum_name)                                     \
@@ -743,10 +742,6 @@
   return BuildLoadField(flow_graph, Slot::Array_length());
 }
 
-bool GraphIntrinsifier::Build_ImmutableArrayLength(FlowGraph* flow_graph) {
-  return BuildLoadField(flow_graph, Slot::Array_length());
-}
-
 bool GraphIntrinsifier::Build_GrowableArrayLength(FlowGraph* flow_graph) {
   return BuildLoadField(flow_graph, Slot::GrowableObjectArray_length());
 }
diff --git a/runtime/vm/compiler/intrinsifier.cc b/runtime/vm/compiler/intrinsifier.cc
index 072e8ca..ba448a7 100644
--- a/runtime/vm/compiler/intrinsifier.cc
+++ b/runtime/vm/compiler/intrinsifier.cc
@@ -179,11 +179,6 @@
   {nullptr, nullptr},
 };
 
-static const IntrinsicDesc math_intrinsics[] = {
-  MATH_LIB_INTRINSIC_LIST(DEFINE_INTRINSIC)
-  {nullptr, nullptr},
-};
-
 static const IntrinsicDesc typed_data_intrinsics[] = {
   GRAPH_TYPED_DATA_INTRINSICS_LIST(DEFINE_INTRINSIC)
   {nullptr, nullptr},
@@ -210,10 +205,9 @@
   String& str2 = String::Handle(zone);
   Error& error = Error::Handle(zone);
 
-  static const intptr_t kNumLibs = 5;
+  static const intptr_t kNumLibs = 4;
   const LibraryInstrinsicsDesc intrinsics[kNumLibs] = {
       {Library::Handle(zone, Library::CoreLibrary()), core_intrinsics},
-      {Library::Handle(zone, Library::MathLibrary()), math_intrinsics},
       {Library::Handle(zone, Library::TypedDataLibrary()),
        typed_data_intrinsics},
       {Library::Handle(zone, Library::DeveloperLibrary()),
diff --git a/runtime/vm/compiler/method_recognizer.cc b/runtime/vm/compiler/method_recognizer.cc
index d847251..cc5d4e2 100644
--- a/runtime/vm/compiler/method_recognizer.cc
+++ b/runtime/vm/compiler/method_recognizer.cc
@@ -94,9 +94,6 @@
 
 intptr_t MethodRecognizer::MethodKindToReceiverCid(Kind kind) {
   switch (kind) {
-    case kImmutableArrayGetIndexed:
-      return kImmutableArrayCid;
-
     case kObjectArrayGetIndexed:
     case kObjectArraySetIndexed:
     case kObjectArraySetIndexedUnchecked:
@@ -278,6 +275,8 @@
 #undef SET_FUNCTION_BIT
 
   if (!fingerprints_match) {
+    // Private names are mangled. Mangling depends on Library::private_key_.
+    // If registering a new bootstrap library, add at the end.
     FATAL(
         "FP mismatch while recognizing methods. If the behavior of "
         "these functions has changed, then changes are also needed in "
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 9dc2df9..e8a7016 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -18,6 +18,7 @@
   V(List, ., ListFactory, 0xbc820cf9)                                          \
   V(_List, ., ObjectArrayAllocate, 0xd693eee6)                                 \
   V(_List, []=, ObjectArraySetIndexed, 0xd7b48abc)                             \
+  V(_GrowableList, ._withData, GrowableArrayAllocateWithData, 0xa32d060b)      \
   V(_GrowableList, []=, GrowableArraySetIndexed, 0xd7b48abc)                   \
   V(_TypedList, _getInt8, ByteArrayBaseGetInt8, 0x1623dc34)                    \
   V(_TypedList, _getUint8, ByteArrayBaseGetUint8, 0x177ffe2a)                  \
@@ -186,11 +187,13 @@
   V(_WeakProperty, set:key, WeakProperty_setKey, 0x963a095f)                   \
   V(_WeakProperty, get:value, WeakProperty_getValue, 0xd2f28aae)               \
   V(_WeakProperty, set:value, WeakProperty_setValue, 0x8b2bafab)               \
-  V(::, _classRangeCheck, ClassRangeCheck, 0x00269620)                         \
+  V(_WeakReferenceImpl, get:target, WeakReference_getTarget, 0x632d6ca8)       \
+  V(_WeakReferenceImpl, set:_target, WeakReference_setTarget, 0x6edc7518)      \
+  V(::, _classRangeCheck, ClassRangeCheck, 0x09f5fc7a)                         \
   V(::, _abi, FfiAbi, 0x7c4ab3b4)                                              \
   V(::, _asFunctionInternal, FfiAsFunctionInternal, 0x92ae104f)                \
   V(::, _nativeCallbackFunction, FfiNativeCallbackFunction, 0x3ff5ae9c)        \
-  V(::, _nativeEffect, NativeEffect, 0x61e00b59)                               \
+  V(::, _nativeEffect, NativeEffect, 0x537dce91)                               \
   V(::, _loadAbiSpecificInt, FfiLoadAbiSpecificInt, 0x7807e872)                \
   V(::, _loadAbiSpecificIntAtIndex, FfiLoadAbiSpecificIntAtIndex, 0x6aa4cab4)  \
   V(::, _loadInt8, FfiLoadInt8, 0x0f04e397)                                    \
@@ -235,7 +238,8 @@
   V(::, _asExternalTypedDataDouble, FfiAsExternalTypedDataDouble, 0x40cdd9e1)  \
   V(::, _getNativeField, GetNativeField, 0xa0139b85)                           \
   V(::, reachabilityFence, ReachabilityFence, 0x730f2b7f)                      \
-  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x1dcaf73d)                          \
+  V(::, _asyncThenWrapperHelper, AsyncThenWrapperHelper, 0xd9974c34)           \
+  V(_Utf8Decoder, _scan, Utf8DecoderScan, 0x037e7601)                          \
   V(_Future, timeout, FutureTimeout, 0x73041520)                               \
   V(Future, wait, FutureWait, 0x495c83cd)                                      \
   V(_RootZone, runUnary, RootZoneRunUnary, 0xb607f8bf)                         \
@@ -271,7 +275,6 @@
   V(_Double, get:isNegative, Double_getIsNegative, 0xd4715091)                 \
   V(_Double, _mulFromInteger, Double_mulFromInteger, 0x0a50d2cf)               \
   V(_Double, .fromInteger, DoubleFromInteger, 0x7d0fd999)                      \
-  V(_GrowableList, ._withData, GrowableArray_Allocate, 0xa32d060b)             \
   V(_RegExp, _ExecuteMatch, RegExp_ExecuteMatch, 0x9911d549)                   \
   V(_RegExp, _ExecuteMatchSticky, RegExp_ExecuteMatchSticky, 0x91dd880f)       \
   V(Object, ==, ObjectEquals, 0x46587030)                                      \
@@ -285,8 +288,8 @@
   V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75e0d454)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
     OneByteString_substringUnchecked,  0x9b18195e)                             \
-  V(_OneByteString, ==, OneByteString_equality, 0xb50039a8)                    \
-  V(_TwoByteString, ==, TwoByteString_equality, 0xb50039a8)                    \
+  V(_OneByteString, ==, OneByteString_equality, 0xb5003d69)                    \
+  V(_TwoByteString, ==, TwoByteString_equality, 0xb5003d69)                    \
   V(_Type, get:hashCode, Type_getHashCode, 0x75e0d454)                         \
   V(_Type, ==, Type_equality, 0x465868ae)                                      \
   V(_FunctionType, get:hashCode, FunctionType_getHashCode, 0x75e0d454)         \
@@ -303,9 +306,6 @@
   V(_IntegerImplementation, >=, Integer_greaterEqualThan, 0xfecba6b3)          \
   V(_IntegerImplementation, <<, Integer_shl, 0x2d855b02)                       \
 
-#define MATH_LIB_INTRINSIC_LIST(V)                                             \
-  V(_Random, _nextState, Random_nextState, 0x7207677d)                         \
-
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
   V(_Int8List, [], Int8ArrayGetIndexed, 0x35f3fab6)                            \
   V(_Int8List, []=, Int8ArraySetIndexed, 0x6e4fdaa7)                           \
@@ -357,11 +357,9 @@
   V(_Float64x2, +, Float64x2Add, 0x0a09dbd8)                                   \
 
 #define GRAPH_CORE_INTRINSICS_LIST(V)                                          \
-  V(_List, get:length, ObjectArrayLength, 0x5850f06b)                          \
-  V(_List, [], ObjectArrayGetIndexed, 0x57b029cf)                              \
+  V(_Array, get:length, ObjectArrayLength, 0x5850f06b)                         \
+  V(_Array, [], ObjectArrayGetIndexed, 0x57b029cf)                             \
   V(_List, _setIndexed, ObjectArraySetIndexedUnchecked, 0x02f293ae)            \
-  V(_ImmutableList, get:length, ImmutableArrayLength, 0x5850f06b)              \
-  V(_ImmutableList, [], ImmutableArrayGetIndexed, 0x57b029cf)                  \
   V(_GrowableList, get:length, GrowableArrayLength, 0x5850f06b)                \
   V(_GrowableList, get:_capacity, GrowableArrayCapacity, 0x7d9f9bf2)           \
   V(_GrowableList, _setData, GrowableArraySetData, 0xbdda401b)                 \
@@ -399,8 +397,8 @@
   V(::, _isDartStreamEnabled, Timeline_isDartStreamEnabled, 0xc97aafb3)        \
 
 #define INTERNAL_LIB_INTRINSIC_LIST(V)                                         \
-  V(::, allocateOneByteString, AllocateOneByteString, 0x9e774214)              \
-  V(::, allocateTwoByteString, AllocateTwoByteString, 0xa63c7db1)              \
+  V(::, allocateOneByteString, AllocateOneByteString, 0x9e7745d5)              \
+  V(::, allocateTwoByteString, AllocateTwoByteString, 0xa63c8172)              \
   V(::, writeIntoOneByteString, WriteIntoOneByteString, 0xd8729161)            \
   V(::, writeIntoTwoByteString, WriteIntoTwoByteString, 0xcfc7982a)            \
 
@@ -408,7 +406,6 @@
   CORE_LIB_INTRINSIC_LIST(V)                                                   \
   DEVELOPER_LIB_INTRINSIC_LIST(V)                                              \
   INTERNAL_LIB_INTRINSIC_LIST(V)                                               \
-  MATH_LIB_INTRINSIC_LIST(V)                                                   \
 
 #define ALL_INTRINSICS_LIST(V)                                                 \
   ALL_INTRINSICS_NO_INTEGER_LIB_LIST(V)                                        \
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index a0cca50..9cc619d 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -389,6 +389,9 @@
 const word UntaggedObject::kBarrierOverlapShift =
     dart::UntaggedObject::kBarrierOverlapShift;
 
+const word UntaggedObject::kGenerationalBarrierMask =
+    dart::UntaggedObject::kGenerationalBarrierMask;
+
 bool IsTypedDataClassId(intptr_t cid) {
   return dart::IsTypedDataClassId(cid);
 }
@@ -434,6 +437,8 @@
       return UnhandledException::InstanceSize();
     case kWeakPropertyCid:
       return WeakProperty::InstanceSize();
+    case kWeakReferenceCid:
+      return WeakReference::InstanceSize();
     case kByteBufferCid:
     case kByteDataViewCid:
     case kPointerCid:
@@ -506,7 +511,7 @@
     return 0;
   }
   if (dart::IsTypedDataClassId(cid)) {
-    return TypedData::data_offset();
+    return TypedData::payload_offset();
   }
   switch (cid) {
     case kArrayCid:
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index af57f4ef..f502d99 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -447,6 +447,7 @@
   static const word kSizeTagMaxSizeTag;
   static const word kTagBitsSizeTagPos;
   static const word kBarrierOverlapShift;
+  static const word kGenerationalBarrierMask;
 
   static bool IsTypedDataClassId(intptr_t cid);
 };
@@ -614,10 +615,10 @@
 
 class PointerBase : public AllStatic {
  public:
-  static word data_field_offset();
+  static word data_offset();
 };
 
-class TypedDataBase : public PointerBase {
+class TypedDataBase : public AllStatic {
  public:
   static word length_offset();
   static word InstanceSize();
@@ -626,7 +627,7 @@
 
 class TypedData : public AllStatic {
  public:
-  static word data_offset();
+  static word payload_offset();
   static word HeaderSize();
   static word InstanceSize();
   static word InstanceSize(word lengthInBytes);
@@ -635,7 +636,6 @@
 
 class ExternalTypedData : public AllStatic {
  public:
-  static word data_offset();
   static word InstanceSize();
   FINAL_CLASS();
 };
@@ -643,7 +643,7 @@
 class TypedDataView : public AllStatic {
  public:
   static word offset_in_bytes_offset();
-  static word data_offset();
+  static word typed_data_offset();
   static word InstanceSize();
   FINAL_CLASS();
 };
@@ -699,7 +699,7 @@
   static word ptr_offset();
 };
 
-class Pointer : public PointerBase {
+class Pointer : public AllStatic {
  public:
   static word type_arguments_offset();
   static word InstanceSize();
@@ -1037,6 +1037,14 @@
   FINAL_CLASS();
 };
 
+class WeakReference : public AllStatic {
+ public:
+  static word target_offset();
+  static word type_arguments_offset();
+  static word InstanceSize();
+  FINAL_CLASS();
+};
+
 class MirrorReference : public AllStatic {
  public:
   static word InstanceSize();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index adeab04..6f1d535 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -226,7 +226,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     104;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
@@ -469,10 +469,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 24;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 8;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 12;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    12;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -484,6 +485,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 4;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -576,6 +580,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
@@ -792,7 +797,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -1041,10 +1046,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 44;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -1056,6 +1062,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 16;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -1150,6 +1159,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
@@ -1363,7 +1373,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     104;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
@@ -1606,10 +1616,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 24;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 8;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 12;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    12;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -1621,6 +1632,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 4;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
@@ -1710,6 +1724,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_IA32) && !defined(DART_COMPRESSED_POINTERS)
@@ -1926,7 +1941,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -2175,10 +2190,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 44;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -2190,6 +2206,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 16;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -2285,6 +2304,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
@@ -2498,7 +2518,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -2747,10 +2767,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -2762,6 +2783,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 12;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -2856,6 +2880,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 16;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 24;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
@@ -3069,7 +3094,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -3318,10 +3343,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -3333,6 +3359,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 12;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -3428,6 +3457,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 16;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 24;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
@@ -3641,7 +3671,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     104;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
@@ -3884,10 +3914,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 24;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 8;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 12;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    12;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -3899,6 +3930,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 4;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -3993,6 +4027,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
@@ -4209,7 +4244,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -4458,10 +4493,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 44;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -4473,6 +4509,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 16;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -4568,6 +4607,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_RISCV64) && !defined(DART_COMPRESSED_POINTERS)
@@ -4777,7 +4817,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     104;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
@@ -5020,10 +5060,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 24;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 8;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 12;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    12;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -5035,6 +5076,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 4;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -5127,6 +5171,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
@@ -5337,7 +5382,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -5586,10 +5631,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 44;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -5601,6 +5647,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 16;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -5695,6 +5744,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
@@ -5902,7 +5952,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     104;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
@@ -6145,10 +6195,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 24;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 8;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 12;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    12;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -6160,6 +6211,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 4;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
@@ -6249,6 +6303,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_IA32) && !defined(DART_COMPRESSED_POINTERS)
@@ -6459,7 +6514,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -6708,10 +6763,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 44;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -6723,6 +6779,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 16;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -6818,6 +6877,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
@@ -7025,7 +7085,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -7274,10 +7334,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -7289,6 +7350,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 12;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -7383,6 +7447,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 16;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 24;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
@@ -7590,7 +7655,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -7839,10 +7904,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -7854,6 +7920,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 12;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -7949,6 +8018,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 16;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 24;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 24;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
@@ -8156,7 +8226,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     104;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
     SingleTargetCache_entry_point_offset = 8;
@@ -8399,10 +8469,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 24;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 8;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 12;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    12;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -8414,6 +8485,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 4;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -8508,6 +8582,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 12;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 16;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 16;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
@@ -8718,7 +8793,7 @@
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     208;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
-static constexpr dart::compiler::target::word PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
     16;
 static constexpr dart::compiler::target::word
@@ -8967,10 +9042,11 @@
 static constexpr dart::compiler::target::word TypeParameter_flags_offset = 44;
 static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
+static constexpr dart::compiler::target::word TypedDataView_typed_data_offset =
+    24;
 static constexpr dart::compiler::target::word
     TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -8982,6 +9058,9 @@
     MonomorphicSmiableCall_entrypoint_offset = 16;
 static constexpr dart::compiler::target::word WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word WeakProperty_value_offset = 16;
+static constexpr dart::compiler::target::word WeakReference_target_offset = 8;
+static constexpr dart::compiler::target::word
+    WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -9077,6 +9156,7 @@
 static constexpr dart::compiler::target::word UnwindError_InstanceSize = 24;
 static constexpr dart::compiler::target::word UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word WeakProperty_InstanceSize = 32;
+static constexpr dart::compiler::target::word WeakReference_InstanceSize = 32;
 static constexpr dart::compiler::target::word
     WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_RISCV64) && !defined(DART_COMPRESSED_POINTERS)
@@ -9318,8 +9398,7 @@
     104;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
@@ -9589,11 +9668,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     8;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    12;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -9605,6 +9684,10 @@
     AOT_MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -9712,6 +9795,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
@@ -9950,8 +10035,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -10222,11 +10306,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -10239,6 +10323,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -10347,6 +10435,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     32;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    32;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
@@ -10588,8 +10678,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -10860,11 +10949,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -10877,6 +10966,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -10986,6 +11079,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     32;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    32;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
@@ -11223,8 +11318,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -11495,11 +11589,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     20;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -11512,6 +11606,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     12;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -11620,6 +11718,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     24;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
@@ -11857,8 +11957,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -12129,11 +12228,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     20;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -12146,6 +12245,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     12;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -12255,6 +12358,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     24;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
@@ -12492,8 +12597,7 @@
     104;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
@@ -12763,11 +12867,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     8;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    12;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -12779,6 +12883,10 @@
     AOT_MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -12888,6 +12996,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
@@ -13126,8 +13236,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -13398,11 +13507,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -13415,6 +13524,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -13524,6 +13637,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     32;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    32;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_RISCV64) && !defined(DART_COMPRESSED_POINTERS)
@@ -13756,8 +13871,7 @@
     104;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
@@ -14027,11 +14141,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     8;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    12;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -14043,6 +14157,10 @@
     AOT_MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -14150,6 +14268,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_ARM) && !defined(DART_COMPRESSED_POINTERS)
@@ -14381,8 +14501,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -14653,11 +14772,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -14670,6 +14789,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -14778,6 +14901,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     32;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    32;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_X64) && !defined(DART_COMPRESSED_POINTERS)
@@ -15012,8 +15137,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -15284,11 +15408,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -15301,6 +15425,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -15410,6 +15538,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     32;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    32;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_ARM64) && !defined(DART_COMPRESSED_POINTERS)
@@ -15640,8 +15770,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -15912,11 +16041,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     20;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -15929,6 +16058,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     12;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -16037,6 +16170,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     24;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_X64) && defined(DART_COMPRESSED_POINTERS)
@@ -16267,8 +16402,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -16539,11 +16673,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     20;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 28;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -16556,6 +16690,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     12;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 12;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -16665,6 +16803,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     24;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    24;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 16;
 #endif  // defined(TARGET_ARCH_ARM64) && defined(DART_COMPRESSED_POINTERS)
@@ -16895,8 +17035,7 @@
     104;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 4;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word
@@ -17166,11 +17305,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 12;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     8;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    12;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 16;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 12;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 12;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 4;
 static constexpr dart::compiler::target::word
@@ -17182,6 +17321,10 @@
     AOT_MonomorphicSmiableCall_entrypoint_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 4;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset = 8;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    4;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 8;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
@@ -17291,6 +17434,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    16;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 12;
 #endif  // defined(TARGET_ARCH_RISCV32) && !defined(DART_COMPRESSED_POINTERS)
@@ -17522,8 +17667,7 @@
     208;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
-static constexpr dart::compiler::target::word
-    AOT_PointerBase_data_field_offset = 8;
+static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_Pointer_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word
@@ -17794,11 +17938,11 @@
 static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
 static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
     16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
-    24;
+static constexpr dart::compiler::target::word
+    AOT_TypedDataView_typed_data_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_TypedDataView_offset_in_bytes_offset = 32;
-static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
+static constexpr dart::compiler::target::word AOT_TypedData_payload_offset = 24;
 static constexpr dart::compiler::target::word
     AOT_UnhandledException_exception_offset = 8;
 static constexpr dart::compiler::target::word
@@ -17811,6 +17955,10 @@
 static constexpr dart::compiler::target::word AOT_WeakProperty_key_offset = 8;
 static constexpr dart::compiler::target::word AOT_WeakProperty_value_offset =
     16;
+static constexpr dart::compiler::target::word AOT_WeakReference_target_offset =
+    8;
+static constexpr dart::compiler::target::word
+    AOT_WeakReference_type_arguments_offset = 16;
 static constexpr dart::compiler::target::word AOT_Code_entry_point_offset[] = {
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
@@ -17920,6 +18068,8 @@
 static constexpr dart::compiler::target::word AOT_UserTag_InstanceSize = 32;
 static constexpr dart::compiler::target::word AOT_WeakProperty_InstanceSize =
     32;
+static constexpr dart::compiler::target::word AOT_WeakReference_InstanceSize =
+    32;
 static constexpr dart::compiler::target::word
     AOT_WeakSerializationReference_InstanceSize = 24;
 #endif  // defined(TARGET_ARCH_RISCV64) && !defined(DART_COMPRESSED_POINTERS)
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index bff550b..cbd470c 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -177,7 +177,7 @@
   FIELD(ObjectStore, string_type_offset)                                       \
   FIELD(ObjectStore, type_type_offset)                                         \
   FIELD(OneByteString, data_offset)                                            \
-  FIELD(PointerBase, data_field_offset)                                        \
+  FIELD(PointerBase, data_offset)                                              \
   FIELD(Pointer, type_arguments_offset)                                        \
   FIELD(SingleTargetCache, entry_point_offset)                                 \
   FIELD(SingleTargetCache, lower_limit_offset)                                 \
@@ -322,9 +322,9 @@
   FIELD(TypeParameter, flags_offset)                                           \
   FIELD(TypeRef, type_offset)                                                  \
   FIELD(TypedDataBase, length_offset)                                          \
-  FIELD(TypedDataView, data_offset)                                            \
+  FIELD(TypedDataView, typed_data_offset)                                      \
   FIELD(TypedDataView, offset_in_bytes_offset)                                 \
-  FIELD(TypedData, data_offset)                                                \
+  FIELD(TypedData, payload_offset)                                             \
   FIELD(UnhandledException, exception_offset)                                  \
   FIELD(UnhandledException, stacktrace_offset)                                 \
   FIELD(UserTag, tag_offset)                                                   \
@@ -332,6 +332,8 @@
   FIELD(MonomorphicSmiableCall, entrypoint_offset)                             \
   FIELD(WeakProperty, key_offset)                                              \
   FIELD(WeakProperty, value_offset)                                            \
+  FIELD(WeakReference, target_offset)                                          \
+  FIELD(WeakReference, type_arguments_offset)                                  \
   RANGE(Code, entry_point_offset, CodeEntryKind, CodeEntryKind::kNormal,       \
         CodeEntryKind::kMonomorphicUnchecked,                                  \
         [](CodeEntryKind value) { return true; })                              \
@@ -413,6 +415,7 @@
   SIZEOF(UnwindError, InstanceSize, UntaggedUnwindError)                       \
   SIZEOF(UserTag, InstanceSize, UntaggedUserTag)                               \
   SIZEOF(WeakProperty, InstanceSize, UntaggedWeakProperty)                     \
+  SIZEOF(WeakReference, InstanceSize, UntaggedWeakReference)                   \
   SIZEOF(WeakSerializationReference, InstanceSize,                             \
          UntaggedWeakSerializationReference)                                   \
   PAYLOAD_SIZEOF(CodeSourceMap, InstanceSize, HeaderSize)                      \
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index b70a40e..199ae30 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -899,6 +899,43 @@
   __ Ret();
 }
 
+// Generates allocation stub for _GrowableList class.
+// This stub exists solely for performance reasons: default allocation
+// stub is slower as it doesn't use specialized inline allocation.
+void StubCodeCompiler::GenerateAllocateGrowableArrayStub(Assembler* assembler) {
+#if defined(TARGET_ARCH_IA32)
+  // This stub is not used on IA32 because IA32 version of
+  // StubCodeCompiler::GenerateAllocationStubForClass uses inline
+  // allocation. Also, AllocateObjectSlow stub is not generated on IA32.
+  __ Breakpoint();
+#else
+  const intptr_t instance_size = target::RoundedAllocationSize(
+      target::GrowableObjectArray::InstanceSize());
+
+  if (!FLAG_use_slow_path && FLAG_inline_alloc) {
+    Label slow_case;
+    __ Comment("Inline allocation of GrowableList");
+    __ TryAllocateObject(kGrowableObjectArrayCid, instance_size, &slow_case,
+                         Assembler::kNearJump, AllocateObjectABI::kResultReg,
+                         /*temp_reg=*/AllocateObjectABI::kTagsReg);
+    __ StoreIntoObjectNoBarrier(
+        AllocateObjectABI::kResultReg,
+        FieldAddress(AllocateObjectABI::kResultReg,
+                     target::GrowableObjectArray::type_arguments_offset()),
+        AllocateObjectABI::kTypeArgumentsReg);
+
+    __ Ret();
+    __ Bind(&slow_case);
+  }
+
+  const uword tags = target::MakeTagWordForNewSpaceObject(
+      kGrowableObjectArrayCid, instance_size);
+  __ LoadImmediate(AllocateObjectABI::kTagsReg, tags);
+  __ Jump(
+      Address(THR, target::Thread::allocate_object_slow_entry_point_offset()));
+#endif  // defined(TARGET_ARCH_IA32)
+}
+
 // The UnhandledException class lives in the VM isolate, so it cannot cache
 // an allocation stub for itself. Instead, we cache it in the stub code list.
 void StubCodeCompiler::GenerateAllocateUnhandledExceptionStub(
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index 602dfb2..3c65323 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -1195,7 +1195,8 @@
 //   R2 : arguments array.
 //   R3 : current thread.
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
-  READS_RETURN_ADDRESS_FROM_LR(__ Push(LR));  // Marker for the profiler.
+  // 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.
@@ -1318,7 +1319,7 @@
 
   // Restore the frame pointer and return.
   RESTORES_LR_FROM_FRAME(__ LeaveFrame((1 << FP) | (1 << LR)));
-  __ Drop(1);
+  NOT_IN_PRODUCT(__ Drop(1));  // Drop profiler marker.
   __ Ret();
 }
 
@@ -1728,7 +1729,7 @@
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
                                          bool is_cls_parameterized) {
-  const Register kTagsReg = R2;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   {
     Label slow_case;
@@ -1845,7 +1846,6 @@
 
 void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
   const Register kClsReg = R1;
-  const Register kTagsReg = R2;
 
   if (!FLAG_precompiled_mode) {
     __ ldr(CODE_REG,
@@ -1856,7 +1856,8 @@
   // calling into the runtime.
   __ EnterStubFrame();
 
-  __ ExtractClassIdFromTags(AllocateObjectABI::kResultReg, kTagsReg);
+  __ ExtractClassIdFromTags(AllocateObjectABI::kResultReg,
+                            AllocateObjectABI::kTagsReg);
   __ LoadClassById(kClsReg, AllocateObjectABI::kResultReg);
 
   __ LoadObject(AllocateObjectABI::kResultReg, NullObject());
@@ -1903,7 +1904,7 @@
   const uword tags =
       target::MakeTagWordForNewSpaceObject(cls_id, instance_size);
 
-  const Register kTagsReg = R2;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   __ LoadImmediate(kTagsReg, tags);
 
@@ -3515,7 +3516,7 @@
     __ mov(R9, Operand(R8));
     __ AddImmediate(R3, R0, target::TypedData::HeaderSize() - 1);
     __ StoreInternalPointer(
-        R0, FieldAddress(R0, target::TypedDataBase::data_field_offset()), R3);
+        R0, FieldAddress(R0, target::PointerBase::data_offset()), R3);
     Label init_loop;
     __ Bind(&init_loop);
     __ AddImmediate(R3, 2 * target::kWordSize);
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 4d22204..e32707b 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -1365,7 +1365,8 @@
   // from over-writing Dart frames.
   __ mov(SP, CSP);
   __ SetupCSPFromThread(R3);
-  READS_RETURN_ADDRESS_FROM_LR(__ Push(LR));  // Marker for the profiler.
+  // Marker for the profiler.
+  NOT_IN_PRODUCT(READS_RETURN_ADDRESS_FROM_LR(__ Push(LR)));
   __ EnterFrame(0);
 
   // Push code object to PC marker slot.
@@ -1488,7 +1489,7 @@
 
   // Restore the frame pointer and C stack pointer and return.
   __ LeaveFrame();
-  __ Drop(1);
+  NOT_IN_PRODUCT(__ Drop(1));  // Drop profiler marker.
   __ RestoreCSP();
   __ ret();
 }
@@ -1904,7 +1905,7 @@
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
                                          bool is_cls_parameterized) {
-  const Register kTagsReg = R2;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   {
     Label slow_case;
@@ -2014,20 +2015,19 @@
 }
 
 void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
-  const Register kTagsToClsIdReg = R2;
-
   if (!FLAG_precompiled_mode) {
     __ ldr(CODE_REG,
            Address(THR, target::Thread::call_to_runtime_stub_offset()));
   }
 
-  __ ExtractClassIdFromTags(kTagsToClsIdReg, kTagsToClsIdReg);
+  __ ExtractClassIdFromTags(AllocateObjectABI::kTagsReg,
+                            AllocateObjectABI::kTagsReg);
 
   // Create a stub frame as we are pushing some objects on the stack before
   // calling into the runtime.
   __ EnterStubFrame();
 
-  __ LoadClassById(R0, kTagsToClsIdReg);
+  __ LoadClassById(R0, AllocateObjectABI::kTagsReg);
   __ PushPair(R0, NULL_REG);  // Pushes result slot, then class object.
 
   // Should be Object::null() if class is non-parameterized.
@@ -2072,7 +2072,7 @@
       target::MakeTagWordForNewSpaceObject(cls_id, instance_size);
 
   // Note: Keep in sync with helper function.
-  const Register kTagsReg = R2;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   __ LoadImmediate(kTagsReg, tags);
 
@@ -3726,7 +3726,7 @@
     /* data area to be initialized. */
     __ AddImmediate(R2, R0, target::TypedData::HeaderSize() - 1);
     __ StoreInternalPointer(
-        R0, FieldAddress(R0, target::TypedDataBase::data_field_offset()), R2);
+        R0, FieldAddress(R0, target::PointerBase::data_offset()), R2);
     Label init_loop, done;
     __ Bind(&init_loop);
     __ cmp(R2, Operand(R1));
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index e75588c..52f6ed0 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -969,7 +969,7 @@
   const intptr_t kArgumentsOffset = 5 * target::kWordSize;
   const intptr_t kThreadOffset = 6 * target::kWordSize;
 
-  __ pushl(Address(ESP, 0));  // Marker for the profiler.
+  NOT_IN_PRODUCT(__ pushl(Address(ESP, 0)));  // Marker for the profiler.
   __ EnterFrame(0);
 
   // Push code object to PC marker slot.
@@ -1084,7 +1084,7 @@
 
   // Restore the frame pointer.
   __ LeaveFrame();
-  __ popl(ECX);
+  NOT_IN_PRODUCT(__ popl(ECX));  // Drop profiler marker.
 
   __ ret();
 }
@@ -3059,8 +3059,7 @@
     __ xorl(ECX, ECX); /* Zero. */
     __ leal(EDI, FieldAddress(EAX, target::TypedData::HeaderSize()));
     __ StoreInternalPointer(
-        EAX, FieldAddress(EAX, target::TypedDataBase::data_field_offset()),
-        EDI);
+        EAX, FieldAddress(EAX, target::PointerBase::data_offset()), EDI);
     Label done, init_loop;
     __ Bind(&init_loop);
     __ cmpl(EDI, EBX);
diff --git a/runtime/vm/compiler/stub_code_compiler_riscv.cc b/runtime/vm/compiler/stub_code_compiler_riscv.cc
index ec19d60..f4a17da 100644
--- a/runtime/vm/compiler/stub_code_compiler_riscv.cc
+++ b/runtime/vm/compiler/stub_code_compiler_riscv.cc
@@ -1276,7 +1276,7 @@
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
   __ Comment("InvokeDartCodeStub");
 
-  __ PushRegister(RA);  // Marker for the profiler.
+  NOT_IN_PRODUCT(__ PushRegister(RA));  // Marker for the profiler.
   __ EnterFrame(0);
 
   // Push code object to PC marker slot.
@@ -1396,7 +1396,7 @@
 
   // Restore the frame pointer and C stack pointer and return.
   __ LeaveFrame();
-  __ Drop(1);
+  __ NOT_IN_PRODUCT(__ Drop(1));  // Drop profiler marker.
   __ ret();
 }
 
@@ -1831,7 +1831,7 @@
 
 static void GenerateAllocateObjectHelper(Assembler* assembler,
                                          bool is_cls_parameterized) {
-  const Register kTagsReg = T2;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   {
     Label slow_case;
@@ -1936,8 +1936,6 @@
 }
 
 void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
-  const Register kTagsToClsIdReg = T2;
-
   if (!FLAG_precompiled_mode) {
     __ lx(CODE_REG,
           Address(THR, target::Thread::call_to_runtime_stub_offset()));
@@ -1947,8 +1945,9 @@
   // calling into the runtime.
   __ EnterStubFrame();
 
-  __ ExtractClassIdFromTags(kTagsToClsIdReg, kTagsToClsIdReg);
-  __ LoadClassById(A0, kTagsToClsIdReg);
+  __ ExtractClassIdFromTags(AllocateObjectABI::kTagsReg,
+                            AllocateObjectABI::kTagsReg);
+  __ LoadClassById(A0, AllocateObjectABI::kTagsReg);
 
   __ subi(SP, SP, 3 * target::kWordSize);
   __ sx(ZR, Address(SP, 2 * target::kWordSize));  // Result slot.
@@ -1993,7 +1992,7 @@
       target::MakeTagWordForNewSpaceObject(cls_id, instance_size);
 
   // Note: Keep in sync with helper function.
-  const Register kTagsReg = T2;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
   ASSERT(kTagsReg != AllocateObjectABI::kTypeArgumentsReg);
 
   __ LoadImmediate(kTagsReg, tags);
@@ -3619,7 +3618,7 @@
     /* data area to be initialized. */
     __ AddImmediate(T3, A0, target::TypedData::HeaderSize() - 1);
     __ StoreInternalPointer(
-        A0, FieldAddress(A0, target::TypedDataBase::data_field_offset()), T3);
+        A0, FieldAddress(A0, target::PointerBase::data_offset()), T3);
     Label init_loop, done;
     __ Bind(&init_loop);
     __ bgeu(T3, T4, &done);
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index fb870b5..0268696 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -1375,7 +1375,7 @@
 //   RDX : arguments array.
 //   RCX : current thread.
 void StubCodeCompiler::GenerateInvokeDartCodeStub(Assembler* assembler) {
-  __ pushq(Address(RSP, 0));  // Marker for the profiler.
+  NOT_IN_PRODUCT(__ pushq(Address(RSP, 0)));  // Marker for the profiler.
   __ EnterFrame(0);
 
   const Register kTargetReg = CallingConventions::kArg1Reg;
@@ -1518,7 +1518,7 @@
 
   // Restore the frame pointer.
   __ LeaveFrame();
-  __ popq(RCX);
+  NOT_IN_PRODUCT(__ popq(RCX));  // Drop profiler marker.
 
   __ ret();
 }
@@ -1938,7 +1938,7 @@
 static void GenerateAllocateObjectHelper(Assembler* assembler,
                                          bool is_cls_parameterized) {
   // Note: Keep in sync with calling function.
-  const Register kTagsReg = R8;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   {
     Label slow_case;
@@ -2049,14 +2049,13 @@
 }
 
 void StubCodeCompiler::GenerateAllocateObjectSlowStub(Assembler* assembler) {
-  const Register kTagsToClsIdReg = R8;
-
   if (!FLAG_precompiled_mode) {
     __ movq(CODE_REG,
             Address(THR, target::Thread::call_to_runtime_stub_offset()));
   }
 
-  __ ExtractClassIdFromTags(kTagsToClsIdReg, kTagsToClsIdReg);
+  __ ExtractClassIdFromTags(AllocateObjectABI::kTagsReg,
+                            AllocateObjectABI::kTagsReg);
 
   // Create a stub frame.
   // Ensure constant pool is allowed so we can e.g. load class object.
@@ -2067,7 +2066,7 @@
   __ pushq(AllocateObjectABI::kResultReg);
 
   // Push class of object to be allocated.
-  __ LoadClassById(AllocateObjectABI::kResultReg, kTagsToClsIdReg);
+  __ LoadClassById(AllocateObjectABI::kResultReg, AllocateObjectABI::kTagsReg);
   __ pushq(AllocateObjectABI::kResultReg);
 
   // Must be Object::null() if non-parameterized class.
@@ -2118,7 +2117,7 @@
   const uword tags =
       target::MakeTagWordForNewSpaceObject(cls_id, instance_size);
 
-  const Register kTagsReg = R8;
+  const Register kTagsReg = AllocateObjectABI::kTagsReg;
 
   __ movq(kTagsReg, Immediate(tags));
 
@@ -3782,8 +3781,7 @@
     __ xorq(RBX, RBX); /* Zero. */
     __ leaq(RDI, FieldAddress(RAX, target::TypedData::HeaderSize()));
     __ StoreInternalPointer(
-        RAX, FieldAddress(RAX, target::TypedDataBase::data_field_offset()),
-        RDI);
+        RAX, FieldAddress(RAX, target::PointerBase::data_offset()), RDI);
     Label done, init_loop;
     __ Bind(&init_loop);
     __ cmpq(RDI, RCX);
diff --git a/runtime/vm/compiler/write_barrier_elimination.cc b/runtime/vm/compiler/write_barrier_elimination.cc
index 855cffb..86f58bd 100644
--- a/runtime/vm/compiler/write_barrier_elimination.cc
+++ b/runtime/vm/compiler/write_barrier_elimination.cc
@@ -114,7 +114,7 @@
 
   // Bitvector with all non-Array-allocation instructions set. Used to
   // un-mark Array allocations as usable.
-  BitVector* array_allocations_mask_;
+  BitVector* large_array_allocations_mask_;
 
   // Bitvectors for each block of which allocations are new or remembered
   // at the start (after Phis).
@@ -189,8 +189,21 @@
   }
 }
 
+static bool IsCreateLargeArray(Definition* defn) {
+  if (auto create_array = defn->AsCreateArray()) {
+    static_assert(!Array::UseCardMarkingForAllocation(
+                      Array::kMaxLengthForWriteBarrierElimination),
+                  "Invariant restoration code does not handle card marking.");
+    // Note: IsUsable would reject CreateArray instructions with non-constant
+    // number of elements.
+    return create_array->GetConstantNumElements() >
+           Array::kMaxLengthForWriteBarrierElimination;
+  }
+  return false;
+}
+
 void WriteBarrierElimination::IndexDefinitions(Zone* zone) {
-  BitmapBuilder array_allocations;
+  BitmapBuilder large_array_allocations;
 
   GrowableArray<Definition*> create_array_worklist;
 
@@ -198,7 +211,7 @@
     BlockEntryInstr* const block = block_order_->At(i);
     if (auto join_block = block->AsJoinEntry()) {
       for (PhiIterator it(join_block); !it.Done(); it.Advance()) {
-        array_allocations.Set(definition_count_, false);
+        large_array_allocations.Set(definition_count_, false);
         definition_indices_.Insert({it.Current(), definition_count_++});
 #if defined(DEBUG)
         if (tracing_) {
@@ -211,10 +224,10 @@
     for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
       if (Definition* current = it.Current()->AsDefinition()) {
         if (IsUsable(current)) {
-          const bool is_create_array = current->IsCreateArray();
-          array_allocations.Set(definition_count_, is_create_array);
+          const bool is_create_large_array = IsCreateLargeArray(current);
+          large_array_allocations.Set(definition_count_, is_create_large_array);
           definition_indices_.Insert({current, definition_count_++});
-          if (is_create_array) {
+          if (is_create_large_array) {
             create_array_worklist.Add(current);
           }
 #if defined(DEBUG)
@@ -234,8 +247,9 @@
          it.Advance()) {
       if (auto phi_use = it.Current()->instruction()->AsPhi()) {
         const intptr_t index = Index(phi_use);
-        if (!array_allocations.Get(index)) {
-          array_allocations.Set(index, /*can_be_create_array=*/true);
+        if (!large_array_allocations.Get(index)) {
+          large_array_allocations.Set(index,
+                                      /*can_be_create_large_array=*/true);
           create_array_worklist.Add(phi_use);
         }
       }
@@ -244,9 +258,9 @@
 
   vector_ = new (zone) BitVector(zone, definition_count_);
   vector_->SetAll();
-  array_allocations_mask_ = new (zone) BitVector(zone, definition_count_);
+  large_array_allocations_mask_ = new (zone) BitVector(zone, definition_count_);
   for (intptr_t i = 0; i < definition_count_; ++i) {
-    if (!array_allocations.Get(i)) array_allocations_mask_->Add(i);
+    if (!large_array_allocations.Get(i)) large_array_allocations_mask_->Add(i);
   }
 }
 
@@ -388,9 +402,9 @@
     if (current->CanCallDart()) {
       vector_->Clear();
     } else if (current->CanTriggerGC()) {
-      // Clear array allocations. These are not added to the remembered set
-      // by Thread::RememberLiveTemporaries() after a scavenge.
-      vector_->Intersect(array_allocations_mask_);
+      // Clear large array allocations. These are not added to the remembered
+      // set by Thread::RememberLiveTemporaries() after a scavenge.
+      vector_->Intersect(large_array_allocations_mask_);
     }
 
     if (AllocationInstr* const alloc = current->AsAllocation()) {
diff --git a/runtime/vm/compiler/write_barrier_elimination_test.cc b/runtime/vm/compiler/write_barrier_elimination_test.cc
index 1275b14..284d112 100644
--- a/runtime/vm/compiler/write_barrier_elimination_test.cc
+++ b/runtime/vm/compiler/write_barrier_elimination_test.cc
@@ -138,14 +138,14 @@
   EXPECT(store->ShouldEmitStoreBarrier() == true);
 }
 
-ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_Arrays) {
+static void TestWBEForArrays(int length) {
   DEBUG_ONLY(
       SetFlagScope<bool> sfs(&FLAG_trace_write_barrier_elimination, true));
   const char* nullable_tag = TestCase::NullableTag();
 
-  // Test that array allocations are not considered usable after a
-  // may-trigger-GC instruction (in this case CheckStackOverflow), unlike
-  // normal allocations, which are only interruped by a Dart call.
+  // Test that array allocations are considered usable after a
+  // may-trigger-GC instruction (in this case CheckStackOverflow) iff they
+  // are small.
   // clang-format off
   auto kScript =
       Utils::CStringUniquePtr(OS::SCreate(nullptr, R"(
@@ -159,7 +159,8 @@
       foo(int x) {
         C c = C();
         C n = C();
-        List<C%s> array = List<C%s>.filled(1, null);
+        List<C%s> array = List<C%s>.filled(%d, null);
+        array[0] = c;
         while (x --> 0) {
           c.next = n;
           n = c;
@@ -170,10 +171,15 @@
       }
 
       main() { foo(10); }
-      )", TestCase::LateTag(), nullable_tag, nullable_tag), std::free);
+      )", TestCase::LateTag(), nullable_tag, nullable_tag, length), std::free);
   // clang-format on
 
-  const auto& root_library = Library::Handle(LoadTestScript(kScript.get()));
+  // Generate a length dependent test library uri.
+  char lib_uri[256];
+  snprintf(lib_uri, sizeof(lib_uri), "%s%d", RESOLVED_USER_TEST_URI, length);
+
+  const auto& root_library = Library::Handle(
+      LoadTestScript(kScript.get(), /*resolver=*/nullptr, lib_uri));
 
   Invoke(root_library, "main");
 
@@ -185,11 +191,14 @@
   EXPECT(entry != nullptr);
 
   StoreInstanceFieldInstr* store_into_c = nullptr;
-  StoreIndexedInstr* store_into_array = nullptr;
+  StoreIndexedInstr* store_into_array_before_loop = nullptr;
+  StoreIndexedInstr* store_into_array_after_loop = nullptr;
 
   ILMatcher cursor(flow_graph, entry);
   RELEASE_ASSERT(cursor.TryMatch({
       kMoveGlob,
+      {kMatchAndMoveStoreIndexed, &store_into_array_before_loop},
+      kMoveGlob,
       kMatchAndMoveGoto,
       kMoveGlob,
       kMatchAndMoveBranchTrue,
@@ -200,11 +209,19 @@
       kMoveGlob,
       kMatchAndMoveBranchFalse,
       kMoveGlob,
-      {kMatchAndMoveStoreIndexed, &store_into_array},
+      {kMatchAndMoveStoreIndexed, &store_into_array_after_loop},
   }));
 
   EXPECT(store_into_c->ShouldEmitStoreBarrier() == false);
-  EXPECT(store_into_array->ShouldEmitStoreBarrier() == true);
+  EXPECT(store_into_array_before_loop->ShouldEmitStoreBarrier() == false);
+  EXPECT(store_into_array_after_loop->ShouldEmitStoreBarrier() ==
+         (length > Array::kMaxLengthForWriteBarrierElimination));
+}
+
+ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_Arrays) {
+  TestWBEForArrays(1);
+  TestWBEForArrays(Array::kMaxLengthForWriteBarrierElimination);
+  TestWBEForArrays(Array::kMaxLengthForWriteBarrierElimination + 1);
 }
 
 ISOLATE_UNIT_TEST_CASE(IRTest_WriteBarrierElimination_Regress43786) {
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index 649bca4..d2229cd 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -208,6 +208,7 @@
         KernelIsolate::CompileExpressionToKernel(
             /*platform_kernel=*/nullptr, /*platform_kernel_size=*/0,
             expr_text.ToCString(), Array::empty_array(), Array::empty_array(),
+            Array::empty_array(), Array::empty_array(), Array::empty_array(),
             String::Handle(lib_handle.url()).ToCString(), "A",
             /* method= */ nullptr,
             /* is_static= */ false);
diff --git a/runtime/vm/constants.h b/runtime/vm/constants.h
index 26514bf..b56c7e1 100644
--- a/runtime/vm/constants.h
+++ b/runtime/vm/constants.h
@@ -41,6 +41,10 @@
     ASSERT((0 <= reg) && (reg < kNumberOfCpuRegisters));
     return cpu_reg_names[reg];
   }
+  static const char* RegisterAbiName(Register reg) {
+    ASSERT((0 <= reg) && (reg < kNumberOfCpuRegisters));
+    return cpu_reg_abi_names[reg];
+  }
   static const char* FpuRegisterName(FpuRegister reg) {
     ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters));
     return fpu_reg_names[reg];
diff --git a/runtime/vm/constants_arm.cc b/runtime/vm/constants_arm.cc
index 03e790f..b0e289a 100644
--- a/runtime/vm/constants_arm.cc
+++ b/runtime/vm/constants_arm.cc
@@ -14,11 +14,21 @@
 
 const char* const cpu_reg_names[kNumberOfCpuRegisters] = {
 #if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
-    "r0", "r1", "r2",  "r3",  "r4", "pp", "r6", "fp",
-    "r8", "r9", "thr", "r11", "ip", "sp", "lr", "pc",
+    "r0", "r1", "r2",  "r3",  "r4",  "pp", "r6", "fp",
+    "r8", "r9", "thr", "r11", "tmp", "sp", "lr", "pc",
 #else
-    "r0", "r1", "r2",  "r3", "r4", "pp", "r6", "r7",
-    "r8", "r9", "thr", "fp", "ip", "sp", "lr", "pc",
+    "r0", "r1", "r2",  "r3", "r4",  "pp", "r6", "r7",
+    "r8", "r9", "thr", "fp", "tmp", "sp", "lr", "pc",
+#endif
+};
+
+const char* const cpu_reg_abi_names[kNumberOfCpuRegisters] = {
+#if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
+    "r0", "r1", "r2",  "r3",  "r4", "r5", "r6", "fp",
+    "r8", "r9", "r10", "r11", "ip", "sp", "lr", "pc",
+#else
+    "r0", "r1", "r2",  "r3", "r4", "r5", "r6", "r7",
+    "r8", "r9", "r10", "fp", "ip", "sp", "lr", "pc",
 #endif
 };
 
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 94b214a..d560e44 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -294,6 +294,7 @@
 const FpuRegister kNoFpuRegister = kNoQRegister;
 
 extern const char* const cpu_reg_names[kNumberOfCpuRegisters];
+extern const char* const cpu_reg_abi_names[kNumberOfCpuRegisters];
 extern const char* const fpu_reg_names[kNumberOfFpuRegisters];
 extern const char* const fpu_s_reg_names[kNumberOfSRegisters];
 extern const char* const fpu_d_reg_names[kNumberOfDRegisters];
@@ -470,6 +471,7 @@
 struct AllocateObjectABI {
   static const Register kResultReg = R0;
   static const Register kTypeArgumentsReg = R3;
+  static const Register kTagsReg = R2;
 };
 
 // ABI for AllocateClosureStub.
diff --git a/runtime/vm/constants_arm64.cc b/runtime/vm/constants_arm64.cc
index c10999b..111e74e 100644
--- a/runtime/vm/constants_arm64.cc
+++ b/runtime/vm/constants_arm64.cc
@@ -11,9 +11,16 @@
 namespace dart {
 
 const char* const cpu_reg_names[kNumberOfCpuRegisters] = {
+    "r0",  "r1",   "r2",  "r3",  "r4",   "r5",  "r6",  "r7",
+    "r8",  "r9",   "r10", "r11", "r12",  "r13", "r14", "sp",
+    "tmp", "tmp2", "r18", "r19", "r20",  "r21", "nr",  "r23",
+    "r24", "r25",  "thr", "pp",  "mask", "fp",  "lr",  "csp",
+};
+
+const char* const cpu_reg_abi_names[kNumberOfCpuRegisters] = {
     "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",  "r8",  "r9",  "r10",
-    "r11", "r12", "r13", "r14", "r15", "ip0", "ip1", "r18", "r19", "r20", "r21",
-    "nr",  "r23", "r24", "r25", "r26", "pp",  "r28", "fp",  "lr",  "r31",
+    "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21",
+    "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "sp",
 };
 
 const char* const fpu_reg_names[kNumberOfFpuRegisters] = {
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 9e4213d..9b4df71 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -129,6 +129,7 @@
 const FpuRegister kNoFpuRegister = kNoVRegister;
 
 extern const char* const cpu_reg_names[kNumberOfCpuRegisters];
+extern const char* const cpu_reg_abi_names[kNumberOfCpuRegisters];
 extern const char* const fpu_reg_names[kNumberOfFpuRegisters];
 
 // Register aliases.
@@ -309,6 +310,7 @@
 struct AllocateObjectABI {
   static const Register kResultReg = R0;
   static const Register kTypeArgumentsReg = R1;
+  static const Register kTagsReg = R2;
 };
 
 // ABI for AllocateClosureStub.
diff --git a/runtime/vm/constants_ia32.cc b/runtime/vm/constants_ia32.cc
index bbe4feb..057264d 100644
--- a/runtime/vm/constants_ia32.cc
+++ b/runtime/vm/constants_ia32.cc
@@ -13,6 +13,9 @@
 const char* const cpu_reg_names[kNumberOfCpuRegisters] = {
     "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"};
 
+const char* const cpu_reg_abi_names[kNumberOfCpuRegisters] = {
+    "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"};
+
 const char* const fpu_reg_names[kNumberOfXmmRegisters] = {
     "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"};
 
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index bac9dd5..061771d 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -67,6 +67,7 @@
 const FpuRegister kNoFpuRegister = kNoXmmRegister;
 
 extern const char* const cpu_reg_names[kNumberOfCpuRegisters];
+extern const char* const cpu_reg_abi_names[kNumberOfCpuRegisters];
 extern const char* const fpu_reg_names[kNumberOfXmmRegisters];
 
 // Register aliases.
@@ -206,6 +207,7 @@
 struct AllocateObjectABI {
   static const Register kResultReg = EAX;
   static const Register kTypeArgumentsReg = EDX;
+  static const Register kTagsReg = kNoRegister;  // Not used.
 };
 
 // ABI for Allocate{Mint,Double,Float32x4,Float64x2}Stub.
diff --git a/runtime/vm/constants_riscv.cc b/runtime/vm/constants_riscv.cc
index 6f694e9..7c9b6ed 100644
--- a/runtime/vm/constants_riscv.cc
+++ b/runtime/vm/constants_riscv.cc
@@ -23,6 +23,12 @@
     "s6",   "s7", "s8",  "s9",   "null", "mask", "t3", "t4", "t5", "t6",
 };
 
+const char* const cpu_reg_abi_names[kNumberOfCpuRegisters] = {
+    "zero", "ra", "sp", "gp", "tp",  "t0",  "t1", "t2", "s0", "s1", "a0",
+    "a1",   "a2", "a3", "a4", "a5",  "a6",  "a7", "s2", "s3", "s4", "s5",
+    "s6",   "s7", "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6",
+};
+
 const char* const fpu_reg_names[kNumberOfFpuRegisters] = {
     "ft0", "ft1", "ft2",  "ft3",  "ft4", "ft5", "ft6",  "ft7",
     "fs0", "fs1", "fa0",  "fa1",  "fa2", "fa3", "fa4",  "fa5",
diff --git a/runtime/vm/constants_riscv.h b/runtime/vm/constants_riscv.h
index d04317b..645b69e 100644
--- a/runtime/vm/constants_riscv.h
+++ b/runtime/vm/constants_riscv.h
@@ -143,6 +143,7 @@
 typedef double fpu_register_t;
 
 extern const char* const cpu_reg_names[kNumberOfCpuRegisters];
+extern const char* const cpu_reg_abi_names[kNumberOfCpuRegisters];
 extern const char* const fpu_reg_names[kNumberOfFpuRegisters];
 
 // Register aliases.
@@ -326,6 +327,7 @@
 struct AllocateObjectABI {
   static constexpr Register kResultReg = A0;
   static constexpr Register kTypeArgumentsReg = T1;
+  static const Register kTagsReg = T2;
 };
 
 // ABI for AllocateClosureStub.
diff --git a/runtime/vm/constants_x64.cc b/runtime/vm/constants_x64.cc
index b80a77a..7e03cb6 100644
--- a/runtime/vm/constants_x64.cc
+++ b/runtime/vm/constants_x64.cc
@@ -12,7 +12,11 @@
 
 const char* const cpu_reg_names[kNumberOfCpuRegisters] = {
     "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
-    "r8",  "r9",  "r10", "r11", "r12", "r13", "thr", "pp"};
+    "r8",  "r9",  "r10", "tmp", "r12", "r13", "thr", "pp"};
+
+const char* const cpu_reg_abi_names[kNumberOfCpuRegisters] = {
+    "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
+    "r8",  "r9",  "r10", "r11", "r12", "r13", "r14", "r15"};
 
 const char* const fpu_reg_names[kNumberOfXmmRegisters] = {
     "xmm0", "xmm1", "xmm2",  "xmm3",  "xmm4",  "xmm5",  "xmm6",  "xmm7",
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 2bc9444..a880647 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -99,6 +99,7 @@
 const FpuRegister kNoFpuRegister = kNoXmmRegister;
 
 extern const char* const cpu_reg_names[kNumberOfCpuRegisters];
+extern const char* const cpu_reg_abi_names[kNumberOfCpuRegisters];
 extern const char* const fpu_reg_names[kNumberOfXmmRegisters];
 
 enum RexBits {
@@ -281,6 +282,7 @@
 struct AllocateObjectABI {
   static const Register kResultReg = RAX;
   static const Register kTypeArgumentsReg = RDX;
+  static const Register kTagsReg = R8;
 };
 
 // ABI for AllocateClosureStub.
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index e4e2869..b2fd4b3 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -246,25 +246,7 @@
 #endif  // !defined(IS_SIMARM_X64)
 }
 
-char* Dart::DartInit(const uint8_t* vm_isolate_snapshot,
-                     const uint8_t* instructions_snapshot,
-                     Dart_IsolateGroupCreateCallback create_group,
-                     Dart_InitializeIsolateCallback initialize_isolate,
-                     Dart_IsolateShutdownCallback shutdown,
-                     Dart_IsolateCleanupCallback cleanup,
-                     Dart_IsolateGroupCleanupCallback cleanup_group,
-                     Dart_ThreadStartCallback thread_start,
-                     Dart_ThreadExitCallback thread_exit,
-                     Dart_FileOpenCallback file_open,
-                     Dart_FileReadCallback file_read,
-                     Dart_FileWriteCallback file_write,
-                     Dart_FileCloseCallback file_close,
-                     Dart_EntropySource entropy_source,
-                     Dart_GetVMServiceAssetsArchive get_service_assets,
-                     bool start_kernel_isolate,
-                     Dart_CodeObserver* observer,
-                     Dart_PostTaskCallback post_task,
-                     void* post_task_data) {
+char* Dart::DartInit(const Dart_InitializeParams* params) {
   CheckOffsets();
 
   if (!Flags::Initialized()) {
@@ -275,8 +257,8 @@
   }
 
   const Snapshot* snapshot = nullptr;
-  if (vm_isolate_snapshot != nullptr) {
-    snapshot = Snapshot::SetupFromBuffer(vm_isolate_snapshot);
+  if (params->vm_snapshot_data != nullptr) {
+    snapshot = Snapshot::SetupFromBuffer(params->vm_snapshot_data);
     if (snapshot == nullptr) {
       return Utils::StrDup("Invalid vm isolate snapshot seen");
     }
@@ -296,16 +278,17 @@
 
   UntaggedFrame::Init();
 
-  set_thread_start_callback(thread_start);
-  set_thread_exit_callback(thread_exit);
-  SetFileCallbacks(file_open, file_read, file_write, file_close);
-  set_entropy_source_callback(entropy_source);
-  set_post_task_callback(post_task);
-  set_post_task_data(post_task_data);
+  set_thread_start_callback(params->thread_start);
+  set_thread_exit_callback(params->thread_exit);
+  SetFileCallbacks(params->file_open, params->file_read, params->file_write,
+                   params->file_close);
+  set_entropy_source_callback(params->entropy_source);
+  set_post_task_callback(params->post_task);
+  set_post_task_data(params->post_task_data);
   OS::Init();
   NOT_IN_PRODUCT(CodeObservers::Init());
-  if (observer != nullptr) {
-    NOT_IN_PRODUCT(CodeObservers::RegisterExternal(*observer));
+  if (params->code_observer != nullptr) {
+    NOT_IN_PRODUCT(CodeObservers::RegisterExternal(*params->code_observer));
   }
   start_time_micros_ = OS::GetCurrentMonotonicMicros();
   VirtualMemory::Init();
@@ -364,8 +347,8 @@
     // really an isolate itself - it acts more as a container for VM-global
     // objects.
     std::unique_ptr<IsolateGroupSource> source(new IsolateGroupSource(
-        kVmIsolateName, kVmIsolateName, vm_isolate_snapshot,
-        instructions_snapshot, nullptr, -1, api_flags));
+        kVmIsolateName, kVmIsolateName, params->vm_snapshot_data,
+        params->vm_snapshot_instructions, nullptr, -1, api_flags));
     // ObjectStore should be created later, after null objects are initialized.
     auto group = new IsolateGroup(std::move(source), /*embedder_data=*/nullptr,
                                   /*object_store=*/nullptr, api_flags);
@@ -392,7 +375,7 @@
     ArgumentsDescriptor::Init();
     ICData::Init();
     SubtypeTestCache::Init();
-    if (vm_isolate_snapshot != NULL) {
+    if (params->vm_snapshot_data != nullptr) {
 #if defined(SUPPORT_TIMELINE)
       TimelineBeginEndScope tbes(Timeline::GetVMStream(), "ReadVMSnapshot");
 #endif
@@ -405,7 +388,7 @@
           return Utils::StrDup("JIT runtime cannot run a precompiled snapshot");
 #endif
         }
-        if (instructions_snapshot == NULL) {
+        if (params->vm_snapshot_instructions == nullptr) {
           return Utils::StrDup("Missing instructions snapshot");
         }
       } else if (Snapshot::IsFull(vm_snapshot_kind_)) {
@@ -426,7 +409,7 @@
       } else {
         return Utils::StrDup("Invalid vm isolate snapshot seen");
       }
-      FullSnapshotReader reader(snapshot, instructions_snapshot, T);
+      FullSnapshotReader reader(snapshot, params->vm_snapshot_instructions, T);
       const Error& error = Error::Handle(reader.ReadVMSnapshot());
       if (!error.IsNull()) {
         // Must copy before leaving the zone.
@@ -496,15 +479,17 @@
   Api::InitHandles();
 
   Thread::ExitIsolate();  // Unregister the VM isolate from this thread.
-  Isolate::SetCreateGroupCallback(create_group);
-  Isolate::SetInitializeCallback_(initialize_isolate);
-  Isolate::SetShutdownCallback(shutdown);
-  Isolate::SetCleanupCallback(cleanup);
-  Isolate::SetGroupCleanupCallback(cleanup_group);
+  Isolate::SetCreateGroupCallback(params->create_group);
+  Isolate::SetInitializeCallback_(params->initialize_isolate);
+  Isolate::SetShutdownCallback(params->shutdown_isolate);
+  Isolate::SetCleanupCallback(params->cleanup_isolate);
+  Isolate::SetGroupCleanupCallback(params->cleanup_group);
+  Isolate::SetRegisterKernelBlobCallback(params->register_kernel_blob);
+  Isolate::SetUnregisterKernelBlobCallback(params->unregister_kernel_blob);
 
 #ifndef PRODUCT
   const bool support_service = true;
-  Service::SetGetServiceAssetsCallback(get_service_assets);
+  Service::SetGetServiceAssetsCallback(params->get_service_assets);
 #else
   const bool support_service = false;
 #endif
@@ -518,7 +503,7 @@
   }
 
 #ifndef DART_PRECOMPILED_RUNTIME
-  if (start_kernel_isolate) {
+  if (params->start_kernel_isolate) {
     KernelIsolate::InitializeState();
   }
 #endif  // DART_PRECOMPILED_RUNTIME
@@ -526,37 +511,14 @@
   return NULL;
 }
 
-char* Dart::Init(const uint8_t* vm_isolate_snapshot,
-                 const uint8_t* instructions_snapshot,
-                 Dart_IsolateGroupCreateCallback create_group,
-                 Dart_InitializeIsolateCallback initialize_isolate,
-                 Dart_IsolateShutdownCallback shutdown,
-                 Dart_IsolateCleanupCallback cleanup,
-                 Dart_IsolateGroupCleanupCallback cleanup_group,
-                 Dart_ThreadStartCallback thread_start,
-                 Dart_ThreadExitCallback thread_exit,
-                 Dart_FileOpenCallback file_open,
-                 Dart_FileReadCallback file_read,
-                 Dart_FileWriteCallback file_write,
-                 Dart_FileCloseCallback file_close,
-                 Dart_EntropySource entropy_source,
-                 Dart_GetVMServiceAssetsArchive get_service_assets,
-                 bool start_kernel_isolate,
-                 Dart_CodeObserver* observer,
-                 Dart_PostTaskCallback post_task,
-                 void* post_task_data) {
+char* Dart::Init(const Dart_InitializeParams* params) {
   if (!init_state_.SetInitializing()) {
     return Utils::StrDup(
         "Bad VM initialization state, "
         "already initialized or "
         "multiple threads initializing the VM.");
   }
-  char* retval =
-      DartInit(vm_isolate_snapshot, instructions_snapshot, create_group,
-               initialize_isolate, shutdown, cleanup, cleanup_group,
-               thread_start, thread_exit, file_open, file_read, file_write,
-               file_close, entropy_source, get_service_assets,
-               start_kernel_isolate, observer, post_task, post_task_data);
+  char* retval = DartInit(params);
   if (retval != NULL) {
     init_state_.ResetInitializing();
     return retval;
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 5a170c2..9b88af1 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -29,25 +29,7 @@
  public:
   // Returns null if initialization succeeds, otherwise returns an error message
   // (caller owns error message and has to free it).
-  static char* Init(const uint8_t* vm_snapshot_data,
-                    const uint8_t* vm_snapshot_instructions,
-                    Dart_IsolateGroupCreateCallback create_group,
-                    Dart_InitializeIsolateCallback initialize_isolate,
-                    Dart_IsolateShutdownCallback shutdown,
-                    Dart_IsolateCleanupCallback cleanup,
-                    Dart_IsolateGroupCleanupCallback cleanup_group,
-                    Dart_ThreadStartCallback thread_start,
-                    Dart_ThreadExitCallback thread_exit,
-                    Dart_FileOpenCallback file_open,
-                    Dart_FileReadCallback file_read,
-                    Dart_FileWriteCallback file_write,
-                    Dart_FileCloseCallback file_close,
-                    Dart_EntropySource entropy_source,
-                    Dart_GetVMServiceAssetsArchive get_service_assets,
-                    bool start_kernel_isolate,
-                    Dart_CodeObserver* observer,
-                    Dart_PostTaskCallback post_task,
-                    void* post_task_data);
+  static char* Init(const Dart_InitializeParams* params);
 
   // Returns null if cleanup succeeds, otherwise returns an error message
   // (caller owns error message and has to free it).
@@ -176,25 +158,7 @@
   static Dart_GCEventCallback gc_event_callback() { return gc_event_callback_; }
 
  private:
-  static char* DartInit(const uint8_t* vm_snapshot_data,
-                        const uint8_t* vm_snapshot_instructions,
-                        Dart_IsolateGroupCreateCallback create_group,
-                        Dart_InitializeIsolateCallback initialize_isolate,
-                        Dart_IsolateShutdownCallback shutdown,
-                        Dart_IsolateCleanupCallback cleanup,
-                        Dart_IsolateGroupCleanupCallback cleanup_group,
-                        Dart_ThreadStartCallback thread_start,
-                        Dart_ThreadExitCallback thread_exit,
-                        Dart_FileOpenCallback file_open,
-                        Dart_FileReadCallback file_read,
-                        Dart_FileWriteCallback file_write,
-                        Dart_FileCloseCallback file_close,
-                        Dart_EntropySource entropy_source,
-                        Dart_GetVMServiceAssetsArchive get_service_assets,
-                        bool start_kernel_isolate,
-                        Dart_CodeObserver* observer,
-                        Dart_PostTaskCallback post_task,
-                        void* post_task_data);
+  static char* DartInit(const Dart_InitializeParams* params);
 
   static constexpr const char* kVmIsolateName = "vm-isolate";
 
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 9e8ab9a..9fbb7d0 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1114,9 +1114,10 @@
 
 DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object,
                                          intptr_t external_size) {
-  IsolateGroup* isolate_group = IsolateGroup::Current();
+  Thread* T = Thread::Current();
+  IsolateGroup* isolate_group = T->isolate_group();
   CHECK_ISOLATE_GROUP(isolate_group);
-  NoSafepointScope no_safepoint_scope;
+  TransitionToVM transition(T);
   ApiState* state = isolate_group->api_state();
   ASSERT(state != NULL);
   ASSERT(state->IsActiveWeakPersistentHandle(object));
@@ -1140,9 +1141,10 @@
 }
 
 DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object) {
-  IsolateGroup* isolate_group = IsolateGroup::Current();
+  Thread* T = Thread::Current();
+  IsolateGroup* isolate_group = T->isolate_group();
   CHECK_ISOLATE_GROUP(isolate_group);
-  NoSafepointScope no_safepoint_scope;
+  TransitionToVM transition(T);
   ApiState* state = isolate_group->api_state();
   ASSERT(state != NULL);
   ASSERT(state->IsActivePersistentHandle(object));
@@ -1155,9 +1157,10 @@
 
 DART_EXPORT void Dart_DeleteWeakPersistentHandle(
     Dart_WeakPersistentHandle object) {
-  IsolateGroup* isolate_group = IsolateGroup::Current();
+  Thread* T = Thread::Current();
+  IsolateGroup* isolate_group = T->isolate_group();
   CHECK_ISOLATE_GROUP(isolate_group);
-  NoSafepointScope no_safepoint_scope;
+  TransitionToVM transition(T);
   ApiState* state = isolate_group->api_state();
   ASSERT(state != NULL);
   ASSERT(state->IsActiveWeakPersistentHandle(object));
@@ -1201,15 +1204,7 @@
         "Invalid Dart_InitializeParams version.");
   }
 
-  return Dart::Init(params->vm_snapshot_data, params->vm_snapshot_instructions,
-                    params->create_group, params->initialize_isolate,
-                    params->shutdown_isolate, params->cleanup_isolate,
-                    params->cleanup_group, params->thread_start,
-                    params->thread_exit, params->file_open, params->file_read,
-                    params->file_write, params->file_close,
-                    params->entropy_source, params->get_service_assets,
-                    params->start_kernel_isolate, params->code_observer,
-                    params->post_task, params->post_task_data);
+  return Dart::Init(params);
 }
 
 DART_EXPORT char* Dart_Cleanup() {
@@ -4172,8 +4167,6 @@
       !IsTypedDataViewClassId(class_id) && !IsTypedDataClassId(class_id)) {
     RETURN_TYPE_ERROR(Z, object, 'TypedData');
   }
-  T->DecrementNoSafepointScopeDepth();
-  END_NO_CALLBACK_SCOPE(T);
   if (FLAG_verify_acquired_data) {
     const Object& obj = Object::Handle(Z, Api::UnwrapHandle(object));
     WeakTable* table = I->group()->api_state()->acquired_table();
@@ -4185,6 +4178,8 @@
     table->SetValue(obj.ptr(), 0);  // Delete entry from table.
     delete ad;
   }
+  T->DecrementNoSafepointScopeDepth();
+  END_NO_CALLBACK_SCOPE(T);
   return Api::Success();
 }
 
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index 73f681f..bb5eda5 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -334,7 +334,13 @@
 #define START_NO_CALLBACK_SCOPE(thread) thread->IncrementNoCallbackScopeDepth()
 
 // End a no Dart API call backs Scope.
-#define END_NO_CALLBACK_SCOPE(thread) thread->DecrementNoCallbackScopeDepth()
+#define END_NO_CALLBACK_SCOPE(thread)                                          \
+  do {                                                                         \
+    thread->DecrementNoCallbackScopeDepth();                                   \
+    if (thread->no_callback_scope_depth() == 0) {                              \
+      thread->heap()->CheckExternalGC(thread);                                 \
+    }                                                                          \
+  } while (false)
 
 #define CHECK_CALLBACK_STATE(thread)                                           \
   if (thread->no_callback_scope_depth() != 0) {                                \
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 5691670..4d7f959 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -2808,6 +2808,34 @@
   TestByteDataDirectAccess();
 }
 
+static void NopCallback(void* isolate_callback_data, void* peer) {}
+
+TEST_CASE(DartAPI_ExternalAllocationDuringNoCallbackScope) {
+  Dart_Handle bytes = Dart_NewTypedData(Dart_TypedData_kUint8, 100);
+  EXPECT_VALID(bytes);
+
+  intptr_t gc_count_before = Thread::Current()->heap()->Collections(Heap::kNew);
+
+  Dart_TypedData_Type type;
+  void* data;
+  intptr_t len;
+  Dart_Handle result = Dart_TypedDataAcquireData(bytes, &type, &data, &len);
+  EXPECT_VALID(result);
+
+  Dart_WeakPersistentHandle weak =
+      Dart_NewWeakPersistentHandle(bytes, NULL, 100 * MB, NopCallback);
+  EXPECT_VALID(reinterpret_cast<Dart_Handle>(weak));
+
+  EXPECT_EQ(gc_count_before,
+            Thread::Current()->heap()->Collections(Heap::kNew));
+
+  result = Dart_TypedDataReleaseData(bytes);
+  EXPECT_VALID(result);
+
+  EXPECT_LT(gc_count_before,
+            Thread::Current()->heap()->Collections(Heap::kNew));
+}
+
 static void ExternalTypedDataAccessTests(Dart_Handle obj,
                                          Dart_TypedData_Type expected_type,
                                          uint8_t data[],
@@ -2917,8 +2945,6 @@
   EXPECT(value);
 }
 
-static void NopCallback(void* isolate_callback_data, void* peer) {}
-
 static void UnreachedCallback(void* isolate_callback_data, void* peer) {
   UNREACHABLE();
 }
@@ -3607,6 +3633,23 @@
 static Dart_WeakPersistentHandle weak_persistent_handle2;
 static Dart_WeakPersistentHandle weak_persistent_handle3;
 
+static void WeakPersistentHandlePeerCleanupEnsuresIGFinalizer(
+    void* isolate_callback_data,
+    void* peer) {
+  ASSERT(IsolateGroup::Current() != nullptr);
+}
+
+TEST_CASE(DartAPI_WeakPersistentHandleCleanupFinalizerAtShutdown) {
+  const char* kTestString1 = "Test String1";
+  int peer3 = 0;
+  Dart_EnterScope();
+  CHECK_API_SCOPE(thread);
+  Dart_Handle ref3 = Dart_NewStringFromCString(kTestString1);
+  weak_persistent_handle3 = Dart_NewWeakPersistentHandle(
+      ref3, &peer3, 0, WeakPersistentHandlePeerCleanupEnsuresIGFinalizer);
+  Dart_ExitScope();
+}
+
 static void WeakPersistentHandlePeerCleanupFinalizer(
     void* isolate_callback_data,
     void* peer) {
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 7bbf92b..4e4f9a1 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -888,7 +888,9 @@
   ASSERT(!function_.IsNull());
   auto isolate_group = IsolateGroup::Current();
   if (function_.ptr() ==
-      isolate_group->object_store()->complete_on_async_return()) {
+          isolate_group->object_store()->complete_on_async_return() ||
+      function_.ptr() == isolate_group->object_store()
+                             ->complete_with_no_future_on_async_return()) {
     // We are completing an async function's completer.
     return true;
   }
@@ -1287,7 +1289,9 @@
 TypeArgumentsPtr ActivationFrame::BuildParameters(
     const GrowableObjectArray& param_names,
     const GrowableObjectArray& param_values,
-    const GrowableObjectArray& type_params_names) {
+    const GrowableObjectArray& type_params_names,
+    const GrowableObjectArray& type_params_bounds,
+    const GrowableObjectArray& type_params_defaults) {
   GetDescIndices();
   bool type_arguments_available = false;
   String& name = String::Handle();
@@ -1329,6 +1333,12 @@
     intptr_t num_vars = function().NumTypeArguments();
     type_params_names.Grow(num_vars);
     type_params_names.SetLength(num_vars);
+    type_params_bounds.Grow(num_vars);
+    type_params_bounds.SetLength(num_vars);
+    type_params_defaults.Grow(num_vars);
+    type_params_defaults.SetLength(num_vars);
+    AbstractType& bound = AbstractType::Handle();
+    AbstractType& defaultType = AbstractType::Handle();
     TypeParameters& type_params = TypeParameters::Handle();
     Function& current = Function::Handle(function().ptr());
     intptr_t mapping_offset = num_vars;
@@ -1341,12 +1351,16 @@
       mapping_offset -= size;
       for (intptr_t j = 0; j < size; ++j) {
         name = type_params.NameAt(j);
+        bound = type_params.BoundAt(j);
+        defaultType = type_params.DefaultAt(j);
         // Write the names in backwards in terms of chain of functions.
         // But keep the order of names within the same function. so they
         // match up with the order of the types in 'type_arguments'.
         // Index:0 1 2 3 ...
         //       |Names in Grandparent| |Names in Parent| ..|Names in Child|
         type_params_names.SetAt(mapping_offset + j, name);
+        type_params_bounds.SetAt(mapping_offset + j, bound);
+        type_params_defaults.SetAt(mapping_offset + j, defaultType);
       }
     }
     if (!type_arguments.IsNull()) {
@@ -1942,11 +1956,15 @@
 
   const intptr_t length = code_array.Length();
   bool async_frames = false;
+  bool skip_next_gap_marker = false;
   for (intptr_t i = 0; i < length; ++i) {
     code ^= code_array.At(i);
-
     if (code.ptr() == StubCode::AsynchronousGapMarker().ptr()) {
-      stack_trace->AddMarker(ActivationFrame::kAsyncSuspensionMarker);
+      if (!skip_next_gap_marker) {
+        stack_trace->AddMarker(ActivationFrame::kAsyncSuspensionMarker);
+      }
+      skip_next_gap_marker = false;
+
       // Once we reach a gap, the rest is async.
       async_frames = true;
       continue;
@@ -1964,6 +1982,7 @@
     // Skip invisible function frames.
     function ^= code.function();
     if (!function.is_visible()) {
+      skip_next_gap_marker = true;
       continue;
     }
 
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 231bc3f..0c95bd3 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -392,7 +392,9 @@
   TypeArgumentsPtr BuildParameters(
       const GrowableObjectArray& param_names,
       const GrowableObjectArray& param_values,
-      const GrowableObjectArray& type_params_names);
+      const GrowableObjectArray& type_params_names,
+      const GrowableObjectArray& type_params_bounds,
+      const GrowableObjectArray& type_params_defaults);
 
   ObjectPtr EvaluateCompiledExpression(const ExternalTypedData& kernel_data,
                                        const Array& arguments,
diff --git a/runtime/vm/debugger_api_impl_test.cc b/runtime/vm/debugger_api_impl_test.cc
index f7b5cfd..3f048319 100644
--- a/runtime/vm/debugger_api_impl_test.cc
+++ b/runtime/vm/debugger_api_impl_test.cc
@@ -181,7 +181,10 @@
             /* platform_kernel= */ nullptr, /* platform_kernel_size= */ 0,
             expr.ToCString(),
             /* definitions= */ Array::empty_array(),
+            /* definition_types= */ Array::empty_array(),
             /* type_defintions= */ Array::empty_array(),
+            /* type_bounds= */ Array::empty_array(),
+            /* type_defaults= */ Array::empty_array(),
             String::Handle(lib.url()).ToCString(),
             /* klass= */ nullptr,
             /* method= */ nullptr,
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index 77d6949..7f87db9 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -1373,7 +1373,7 @@
 
   // Multiplier which will be used to scale operands of DW_CFA_offset and
   // DW_CFA_val_offset.
-  const intptr_t kDataAlignment = compiler::target::kWordSize;
+  const intptr_t kDataAlignment = -compiler::target::kWordSize;
 
   static const uint8_t DW_EH_PE_pcrel = 0x10;
   static const uint8_t DW_EH_PE_sdata4 = 0x0b;
@@ -1395,12 +1395,20 @@
         ConcreteRegister(LINK_REGISTER));  // Return address register
     dwarf_stream.uleb128(1);               // Augmentation size
     dwarf_stream.u1(DW_EH_PE_pcrel | DW_EH_PE_sdata4);  // FDE encoding.
-    // CFA is FP+0
+    // CFA is caller's SP (FP+kCallerSpSlotFromFp*kWordSize)
     dwarf_stream.u1(Dwarf::DW_CFA_def_cfa);
     dwarf_stream.uleb128(FP);
-    dwarf_stream.uleb128(0);
+    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 intptr_t scaled_offset = offset / kDataAlignment;
+    RELEASE_ASSERT(scaled_offset >= 0);
+    dwarf_stream.u1(Dwarf::DW_CFA_offset | reg);
+    dwarf_stream.uleb128(scaled_offset);
+  };
+
   // Emit an FDE covering each .text section.
   for (const auto& portion : text_section->portions()) {
     ASSERT(portion.symbol_name != nullptr);  // Needed for relocations.
@@ -1413,27 +1421,17 @@
       dwarf_stream.u4(portion.size);           // Size.
       dwarf_stream.u1(0);                      // Augmentation Data length.
 
-      // FP at FP+kSavedCallerPcSlotFromFp*kWordSize
-      COMPILE_ASSERT(kSavedCallerFpSlotFromFp >= 0);
-      dwarf_stream.u1(Dwarf::DW_CFA_offset | FP);
-      dwarf_stream.uleb128(kSavedCallerFpSlotFromFp);
+      // Caller FP at FP+kSavedCallerPcSlotFromFp*kWordSize,
+      // where FP is CFA - kCallerSpSlotFromFp*kWordSize.
+      COMPILE_ASSERT((kSavedCallerFpSlotFromFp - kCallerSpSlotFromFp) <= 0);
+      cfa_offset(FP,
+                 (kSavedCallerFpSlotFromFp - kCallerSpSlotFromFp) * kWordSize);
 
-      // LR at FP+kSavedCallerPcSlotFromFp*kWordSize
-      COMPILE_ASSERT(kSavedCallerPcSlotFromFp >= 0);
-      dwarf_stream.u1(Dwarf::DW_CFA_offset | ConcreteRegister(LINK_REGISTER));
-      dwarf_stream.uleb128(kSavedCallerPcSlotFromFp);
-
-      // SP is FP+kCallerSpSlotFromFp*kWordSize
-      COMPILE_ASSERT(kCallerSpSlotFromFp >= 0);
-      dwarf_stream.u1(Dwarf::DW_CFA_val_offset);
-#if defined(TARGET_ARCH_ARM64)
-      dwarf_stream.uleb128(ConcreteRegister(CSP));
-#elif defined(TARGET_ARCH_ARM)
-      dwarf_stream.uleb128(SP);
-#else
-#error "Unsupported .eh_frame architecture"
-#endif
-      dwarf_stream.uleb128(kCallerSpSlotFromFp);
+      // 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);
     });
   }
 
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index 41c46cf..aeb4640 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -631,9 +631,7 @@
   // The shadow call stack register will be restored by the JumpToFrame stub.
 #endif
 
-  // TODO(b/209838275): Re-enable this once g3 build rules for gen_snapshot are
-  // working with TSAN.
-#if 0  // defined(USING_THREAD_SANITIZER)
+#if defined(USING_THREAD_SANITIZER)
   if (thread->exit_through_ffi() == Thread::kExitThroughRuntimeCall) {
     auto tsan_utils = thread->tsan_utils();
     tsan_utils->exception_pc = program_counter;
diff --git a/runtime/vm/experimental_features.cc b/runtime/vm/experimental_features.cc
index 5200b16..9f2744a 100644
--- a/runtime/vm/experimental_features.cc
+++ b/runtime/vm/experimental_features.cc
@@ -28,6 +28,9 @@
     true,
     true,
     true,
+    true,
+    true,
+    true,
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureValues));
   return kFeatureValues[static_cast<int>(feature)];
@@ -45,6 +48,9 @@
     "spread-collections",
     "triple-shift",
     "constructor-tearoffs",
+    "enhanced-enums",
+    "named-arguments-anywhere",
+    "super-parameters",
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureNames));
   return kFeatureNames[static_cast<int>(feature)];
diff --git a/runtime/vm/experimental_features.h b/runtime/vm/experimental_features.h
index d1a5abb..c11734d 100644
--- a/runtime/vm/experimental_features.h
+++ b/runtime/vm/experimental_features.h
@@ -24,6 +24,9 @@
   spread_collections,
   triple_shift,
   constructor_tearoffs,
+  enhanced_enums,
+  named_arguments_anywhere,
+  super_parameters,
 };
 
 bool GetExperimentalFeatureDefault(ExperimentalFeature feature);
diff --git a/runtime/vm/field_table.cc b/runtime/vm/field_table.cc
index 7e147c5..935b157 100644
--- a/runtime/vm/field_table.cc
+++ b/runtime/vm/field_table.cc
@@ -117,8 +117,7 @@
   old_tables_->Add(old_table);
   // Ensure that new_table_ is populated before it is published
   // via store to table_.
-  std::atomic_thread_fence(std::memory_order_release);
-  table_ = new_table;
+  reinterpret_cast<AcqRelAtomic<ObjectPtr*>*>(&table_)->store(new_table);
   if (isolate_ != nullptr) {
     isolate_->mutator_thread()->field_table_values_ = table_;
   }
diff --git a/runtime/vm/field_table.h b/runtime/vm/field_table.h
index 71c01ef..cd25aa9 100644
--- a/runtime/vm/field_table.h
+++ b/runtime/vm/field_table.h
@@ -60,14 +60,15 @@
 
   ObjectPtr At(intptr_t index, bool concurrent_use = false) const {
     ASSERT(IsValidIndex(index));
-    ObjectPtr* slot = &table_[index];
     if (concurrent_use) {
-      return reinterpret_cast<AcqRelAtomic<ObjectPtr>*>(slot)->load();
+      ObjectPtr* table =
+          reinterpret_cast<const AcqRelAtomic<ObjectPtr*>*>(&table_)->load();
+      return reinterpret_cast<AcqRelAtomic<ObjectPtr>*>(&table[index])->load();
     } else {
       // There is no concurrent access expected for this field, so we avoid
       // using atomics. This will allow us to detect via TSAN if there are
       // racy uses.
-      return *slot;
+      return table_[index];
     }
   }
 
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index b5cde40..1e77f74 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -127,8 +127,9 @@
     "Force cloning of objects needed in compiler (ICData and Field).")         \
   P(guess_icdata_cid, bool, true,                                              \
     "Artificially create type feedback for arithmetic etc. operations")        \
-  P(huge_method_cutoff_in_tokens, int, 20000,                                  \
-    "Huge method cutoff in tokens: Disables optimizations for huge methods.")  \
+  P(huge_method_cutoff_in_ast_nodes, int, 10000,                               \
+    "Huge method cutoff in AST nodes: Disables optimizations for huge "        \
+    "methods.")                                                                \
   P(idle_timeout_micros, int, 1000 * kMicrosecondsPerMillisecond,              \
     "Consider thread pool isolates for idle tasks after this long.")           \
   P(idle_duration_micros, int, 500 * kMicrosecondsPerMillisecond,              \
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 286206f..feed760 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -149,30 +149,18 @@
 }
 
 void Heap::AllocatedExternal(intptr_t size, Space space) {
-  ASSERT(Thread::Current()->no_safepoint_scope_depth() == 0);
   if (space == kNew) {
-    Isolate::Current()->AssertCurrentThreadIsMutator();
     new_space_.AllocatedExternal(size);
-    if (new_space_.ExternalInWords() <= (4 * new_space_.CapacityInWords())) {
-      return;
-    }
-    // Attempt to free some external allocation by a scavenge. (If the total
-    // remains above the limit, next external alloc will trigger another.)
-    CollectGarbage(GCType::kScavenge, GCReason::kExternal);
-    // Promotion may have pushed old space over its limit. Fall through for old
-    // space GC check.
   } else {
     ASSERT(space == kOld);
     old_space_.AllocatedExternal(size);
   }
 
-  if (old_space_.ReachedHardThreshold()) {
-    if (last_gc_was_old_space_) {
-      CollectNewSpaceGarbage(Thread::Current(), GCReason::kFull);
-    }
-    CollectGarbage(GCType::kMarkSweep, GCReason::kExternal);
+  Thread* thread = Thread::Current();
+  if (thread->no_callback_scope_depth() == 0) {
+    CheckExternalGC(thread);
   } else {
-    CheckStartConcurrentMarking(Thread::Current(), GCReason::kExternal);
+    // Check delayed until Dart_TypedDataRelease.
   }
 }
 
@@ -190,6 +178,27 @@
   old_space_.AllocatedExternal(size);
 }
 
+void Heap::CheckExternalGC(Thread* thread) {
+  ASSERT(thread->no_safepoint_scope_depth() == 0);
+  ASSERT(thread->no_callback_scope_depth() == 0);
+  if (new_space_.ExternalInWords() >= (4 * new_space_.CapacityInWords())) {
+    // Attempt to free some external allocation by a scavenge. (If the total
+    // remains above the limit, next external alloc will trigger another.)
+    CollectGarbage(GCType::kScavenge, GCReason::kExternal);
+    // Promotion may have pushed old space over its limit. Fall through for old
+    // space GC check.
+  }
+
+  if (old_space_.ReachedHardThreshold()) {
+    if (last_gc_was_old_space_) {
+      CollectNewSpaceGarbage(thread, GCReason::kFull);
+    }
+    CollectGarbage(GCType::kMarkSweep, GCReason::kExternal);
+  } else {
+    CheckStartConcurrentMarking(thread, GCReason::kExternal);
+  }
+}
+
 bool Heap::Contains(uword addr) const {
   return new_space_.Contains(addr) || old_space_.Contains(addr);
 }
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index 121e075..59eae20 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -83,6 +83,7 @@
   void FreedExternal(intptr_t size, Space space);
   // Move external size from new to old space. Does not by itself trigger GC.
   void PromotedExternal(intptr_t size);
+  void CheckExternalGC(Thread* thread);
 
   // Heap contains the specified address.
   bool Contains(uword addr) const;
diff --git a/runtime/vm/heap/marker.cc b/runtime/vm/heap/marker.cc
index adbaab4..3309815 100644
--- a/runtime/vm/heap/marker.cc
+++ b/runtime/vm/heap/marker.cc
@@ -35,13 +35,16 @@
         work_list_(marking_stack),
         deferred_work_list_(deferred_marking_stack),
         delayed_weak_properties_(WeakProperty::null()),
-        tail_(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());
   }
 
   uintptr_t marked_bytes() const { return marked_bytes_; }
@@ -51,7 +54,8 @@
   bool ProcessPendingWeakProperties() {
     bool more_to_mark = false;
     WeakPropertyPtr cur_weak = delayed_weak_properties_;
-    tail_ = delayed_weak_properties_ = WeakProperty::null();
+    delayed_weak_properties_tail_ = delayed_weak_properties_ =
+        WeakProperty::null();
     while (cur_weak != WeakProperty::null()) {
       WeakPropertyPtr next_weak =
           cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
@@ -115,11 +119,14 @@
         const intptr_t class_id = raw_obj->GetClassId();
 
         intptr_t size;
-        if (class_id != kWeakPropertyCid) {
-          size = raw_obj->untag()->VisitPointersNonvirtual(this);
-        } else {
+        if (class_id == kWeakPropertyCid) {
           WeakPropertyPtr raw_weak = static_cast<WeakPropertyPtr>(raw_obj);
-          size = ProcessWeakProperty(raw_weak, /* did_mark */ true);
+          size = ProcessWeakProperty(raw_weak);
+        } else if (class_id == kWeakReferenceCid) {
+          WeakReferencePtr raw_weak = static_cast<WeakReferencePtr>(raw_obj);
+          size = ProcessWeakReference(raw_weak);
+        } else {
+          size = raw_obj->untag()->VisitPointersNonvirtual(this);
         }
         marked_bytes_ += size;
         remaining_budget -= size;
@@ -184,12 +191,26 @@
            CompressedWeakPropertyPtr(WeakProperty::null()));
     raw_weak->untag()->next_ = delayed_weak_properties_;
     if (delayed_weak_properties_ == WeakProperty::null()) {
-      tail_ = raw_weak;
+      delayed_weak_properties_tail_ = raw_weak;
     }
     delayed_weak_properties_ = raw_weak;
   }
 
-  intptr_t ProcessWeakProperty(WeakPropertyPtr raw_weak, bool did_mark) {
+  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 =
         LoadCompressedPointerIgnoreRace(&raw_weak->untag()->key_)
@@ -197,15 +218,33 @@
     if (raw_key->IsHeapObject() && raw_key->IsOldObject() &&
         !raw_key->untag()->IsMarked()) {
       // Key was white. Enqueue the weak property.
-      if (did_mark) {
-        EnqueueWeakProperty(raw_weak);
-      }
+      EnqueueWeakProperty(raw_weak);
       return raw_weak->untag()->HeapSize();
     }
     // Key is gray or black. Make the weak property black.
     return raw_weak->untag()->VisitPointersNonvirtual(this);
   }
 
+  intptr_t ProcessWeakReference(WeakReferencePtr raw_weak) {
+    // The fate of the target field is determined by the target.
+    // The type arguments always stay alive.
+    ObjectPtr raw_target =
+        LoadCompressedPointerIgnoreRace(&raw_weak->untag()->target_)
+            .Decompress(raw_weak->heap_base());
+    if (raw_target->IsHeapObject() && raw_target->IsOldObject() &&
+        !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);
+    }
+    // Always visit the type argument.
+    ObjectPtr raw_type_arguments =
+        LoadCompressedPointerIgnoreRace(&raw_weak->untag()->type_arguments_)
+            .Decompress(raw_weak->heap_base());
+    MarkObject(raw_type_arguments);
+    return raw_weak->untag()->HeapSize();
+  }
+
   void ProcessDeferredMarking() {
     ObjectPtr raw_obj;
     while ((raw_obj = deferred_work_list_.Pop()) != nullptr) {
@@ -226,11 +265,10 @@
       // encounters it during ordinary marking. This is in the same spirit as
       // the eliminated write barrier, which would have added the newly written
       // key and value to the ordinary marking stack.
-      bool did_mark = TryAcquireMarkBit(raw_obj);
       intptr_t size = raw_obj->untag()->VisitPointersNonvirtual(this);
       // Add the size only if we win the marking race to prevent
       // double-counting.
-      if (did_mark) {
+      if (TryAcquireMarkBit(raw_obj)) {
         marked_bytes_ += size;
       }
     }
@@ -256,34 +294,73 @@
     }
   }
 
+  void MournWeakReferences() {
+    WeakReferencePtr cur_weak = delayed_weak_references_;
+    delayed_weak_references_ = WeakReference::null();
+    while (cur_weak != WeakReference::null()) {
+      WeakReferencePtr next_weak =
+          cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
+      cur_weak->untag()->next_ = 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);
+      }
+      cur_weak = next_weak;
+    }
+  }
+
   bool WaitForWork(RelaxedAtomic<uintptr_t>* num_busy) {
     return work_list_.WaitForWork(num_busy);
   }
 
-  void Flush(WeakPropertyPtr* head, WeakPropertyPtr* tail) {
+  void Flush(WeakPropertyPtr* weak_properties_head,
+             WeakPropertyPtr* weak_properties_tail,
+             WeakReferencePtr* weak_references_head,
+             WeakReferencePtr* weak_references_tail) {
     work_list_.Flush();
     deferred_work_list_.Flush();
-    if (*head == WeakProperty::null()) {
-      *head = delayed_weak_properties_;
-      *tail = tail_;
+
+    if (*weak_properties_head == WeakProperty::null()) {
+      *weak_properties_head = delayed_weak_properties_;
+      *weak_properties_tail = delayed_weak_properties_tail_;
     } else {
-      (*tail)->untag()->next_ = delayed_weak_properties_;
-      *tail = tail_;
+      (*weak_properties_tail)->untag()->next_ = delayed_weak_properties_;
+      *weak_properties_tail = delayed_weak_properties_tail_;
     }
-    tail_ = delayed_weak_properties_ = WeakProperty::null();
+    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();
   }
 
-  void Adopt(WeakPropertyPtr head, WeakPropertyPtr tail) {
+  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(tail_ == WeakProperty::null());
-    delayed_weak_properties_ = head;
-    tail_ = tail;
+    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 AbandonWork() {
     work_list_.AbandonWork();
     deferred_work_list_.AbandonWork();
     delayed_weak_properties_ = WeakProperty::null();
+    delayed_weak_references_ = WeakReference::null();
   }
 
  private:
@@ -354,7 +431,9 @@
   MarkerWorkList work_list_;
   MarkerWorkList deferred_work_list_;
   WeakPropertyPtr delayed_weak_properties_;
-  WeakPropertyPtr tail_;
+  WeakPropertyPtr delayed_weak_properties_tail_;
+  WeakReferencePtr delayed_weak_references_;
+  WeakReferencePtr delayed_weak_references_tail_;
   uintptr_t marked_bytes_;
   int64_t marked_micros_;
 
@@ -666,6 +745,7 @@
 
       // Phase 3: Weak processing and statistics.
       visitor_->MournWeakProperties();
+      visitor_->MournWeakReferences();
       marker_->IterateWeakRoots(thread);
       int64_t stop = OS::GetCurrentMonotonicMicros();
       visitor_->AddMicros(stop - start);
@@ -903,6 +983,7 @@
       visitor.ProcessDeferredMarking();
       visitor.FinalizeMarking();
       visitor.MournWeakProperties();
+      visitor.MournWeakReferences();
       IterateWeakRoots(thread);
       // All marking done; detach code, etc.
       int64_t stop = OS::GetCurrentMonotonicMicros();
@@ -917,8 +998,10 @@
       RelaxedAtomic<uintptr_t> num_busy = 0;
       // Phase 1: Iterate over roots and drain marking stack in tasks.
 
-      WeakPropertyPtr head = WeakProperty::null();
-      WeakPropertyPtr tail = WeakProperty::null();
+      WeakPropertyPtr weak_properties_head = WeakProperty::null();
+      WeakPropertyPtr weak_properties_tail = WeakProperty::null();
+      WeakReferencePtr weak_references_head = WeakReference::null();
+      WeakReferencePtr weak_references_tail = WeakReference::null();
 
       for (intptr_t i = 0; i < num_tasks; ++i) {
         SyncMarkingVisitor* visitor = visitors_[i];
@@ -934,7 +1017,8 @@
         // 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(&head, &tail);
+        visitor->Flush(&weak_properties_head, &weak_properties_tail,
+                       &weak_references_head, &weak_references_tail);
         // Need to move weak property list too.
 
         if (i < (num_tasks - 1)) {
@@ -945,7 +1029,8 @@
           ASSERT(result);
         } else {
           // Last worker is the main thread.
-          visitor->Adopt(head, tail);
+          visitor->Adopt(weak_properties_head, weak_properties_tail,
+                         weak_references_head, weak_references_tail);
           ParallelMarkTask task(this, isolate_group_, &marking_stack_, barrier,
                                 visitor, &num_busy);
           task.RunEnteredIsolateGroup();
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index 48fbd5f..6c7c909 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -1704,21 +1704,23 @@
                                        intptr_t growth_in_pages,
                                        const char* reason) {
   // Save final threshold compared before growing.
-  hard_gc_threshold_in_words_ =
+  intptr_t threshold =
       after.CombinedUsedInWords() + (kOldPageSizeInWords * growth_in_pages);
 
+#if defined(TARGET_ARCH_IA32)
+  // No concurrent marking.
+  soft_gc_threshold_in_words_ = threshold;
+  hard_gc_threshold_in_words_ = threshold;
+#else
   // Start concurrent marking when old-space has less than half of new-space
   // available or less than 5% available.
-#if defined(TARGET_ARCH_IA32)
-  const intptr_t headroom = 0;  // No concurrent marking.
-#else
   // Note that heap_ can be null in some unit tests.
   const intptr_t new_space =
       heap_ == nullptr ? 0 : heap_->new_space()->CapacityInWords();
-  const intptr_t headroom =
-      Utils::Maximum(new_space / 2, hard_gc_threshold_in_words_ / 20);
+  const intptr_t headroom = Utils::Maximum(new_space / 2, threshold / 20);
+  soft_gc_threshold_in_words_ = threshold;
+  hard_gc_threshold_in_words_ = threshold + headroom;
 #endif
-  soft_gc_threshold_in_words_ = hard_gc_threshold_in_words_ - headroom;
 
   // Set a tight idle threshold.
   idle_gc_threshold_in_words_ =
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index 8c736b2..bed2610 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -132,9 +132,11 @@
         bytes_promoted_(0),
         visiting_old_object_(nullptr),
         promoted_list_(promotion_stack),
-        delayed_weak_properties_(WeakProperty::null()) {}
+        delayed_weak_properties_(WeakProperty::null()),
+        delayed_weak_references_(WeakReference::null()) {}
   ~ScavengerVisitorBase() {
     ASSERT(delayed_weak_properties_ == WeakProperty::null());
+    ASSERT(delayed_weak_references_ == WeakReference::null());
   }
 
   virtual void VisitTypedDataViewPointers(TypedDataViewPtr view,
@@ -180,8 +182,13 @@
     if (!parallel) {
       const uword td_header = ReadHeaderRelaxed(td);
       ASSERT(!IsForwarding(td_header) || td->IsOldObject());
-
-      ASSERT_EQUAL(IsExternalTypedDataClassId(td->GetClassId()), is_external);
+      if (td != Object::null()) {
+        // Fast object copy temporarily stores null in the typed_data field of
+        // views. This can cause the RecomputeDataFieldForInternalTypedData to
+        // run inappropriately, but when the object copy continues it will fix
+        // the data_ pointer.
+        ASSERT_EQUAL(IsExternalTypedDataClassId(td->GetClassId()), is_external);
+      }
     }
 #endif
 
@@ -291,6 +298,7 @@
       }
 
       MournWeakProperties();
+      MournOrUpdateWeakReferences();
     }
     page_space_->ReleaseLock(freelist_);
     thread_ = nullptr;
@@ -301,6 +309,7 @@
   void AbandonWork() {
     promoted_list_.AbandonWork();
     delayed_weak_properties_ = WeakProperty::null();
+    delayed_weak_references_ = WeakReference::null();
   }
 
   NewPage* head() const { return head_; }
@@ -503,7 +512,9 @@
   DART_FORCE_INLINE intptr_t ProcessCopied(ObjectPtr raw_obj);
   inline void ProcessPromotedList();
   inline void EnqueueWeakProperty(WeakPropertyPtr raw_weak);
+  inline void EnqueueWeakReference(WeakReferencePtr raw_weak);
   inline void MournWeakProperties();
+  inline void MournOrUpdateWeakReferences();
 
   Thread* thread_;
   Scavenger* scavenger_;
@@ -515,6 +526,7 @@
 
   PromotionWorkList promoted_list_;
   WeakPropertyPtr delayed_weak_properties_;
+  WeakReferencePtr delayed_weak_references_;
 
   NewPage* head_ = nullptr;
   NewPage* tail_ = nullptr;  // Allocating from here.
@@ -1382,13 +1394,29 @@
 }
 
 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)) {
     WeakPropertyPtr raw_weak = static_cast<WeakPropertyPtr>(raw_obj);
     // The fate of the weak property is determined by its key.
     ObjectPtr raw_key = raw_weak->untag()->key();
-    if (raw_key->IsHeapObject() && raw_key->IsNewObject()) {
+    if (!raw_key->IsSmiOrOldObject()) {
       uword header = ReadHeaderRelaxed(raw_key);
       if (!IsForwarding(header)) {
         // Key is white.  Enqueue the weak property.
@@ -1397,6 +1425,25 @@
       }
     }
     // Key is gray or black.  Make the weak property black.
+  } else if (UNLIKELY(class_id == kWeakReferenceCid)) {
+    WeakReferencePtr raw_weak = static_cast<WeakReferencePtr>(raw_obj);
+    // The fate of the weak reference target is determined by its target.
+    ObjectPtr raw_target = raw_weak->untag()->target();
+    if (!raw_target->IsSmiOrOldObject()) {
+      uword header = ReadHeaderRelaxed(raw_target);
+      if (!IsForwarding(header)) {
+        // Target is white. Enqueue the weak reference. Always visit type
+        // arguments.
+        EnqueueWeakReference(raw_weak);
+#if !defined(DART_COMPRESSED_POINTERS)
+        ScavengePointer(&raw_weak->untag()->type_arguments_);
+#else
+        ScavengeCompressedPointer(raw_weak->heap_base(),
+                                  &raw_weak->untag()->type_arguments_);
+#endif
+        return raw_weak->untag()->HeapSize();
+      }
+    }
   }
   return raw_obj->untag()->VisitPointersNonvirtual(this);
 }
@@ -1484,6 +1531,37 @@
   }
 }
 
+template <bool parallel>
+void ScavengerVisitorBase<parallel>::MournOrUpdateWeakReferences() {
+  ASSERT(!scavenger_->abort_);
+
+  // 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();
+  while (cur_weak != WeakReference::null()) {
+    WeakReferencePtr next_weak =
+        cur_weak->untag()->next_.Decompress(cur_weak->heap_base());
+    // Reset the next pointer in the weak reference.
+    cur_weak->untag()->next_ = 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);
+    }
+
+    // Advance to next weak reference in the queue.
+    cur_weak = next_weak;
+  }
+}
+
 void Scavenger::VisitObjectPointers(ObjectPointerVisitor* visitor) const {
   ASSERT(Thread::Current()->IsAtSafepoint() ||
          (Thread::Current()->task_kind() == Thread::kMarkerTask) ||
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 3661d07..4528f28 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -1294,97 +1294,31 @@
   // CFA = Canonical frame address
   assembly_stream_->WriteString(".cfi_startproc\n");
 
-#if defined(TARGET_ARCH_X64)
-  assembly_stream_->WriteString(".cfi_def_cfa rbp, 0\n");  // CFA is fp+0
-  assembly_stream_->WriteString(
-      ".cfi_offset rbp, 0\n");  // saved fp is *(CFA+0)
-  assembly_stream_->WriteString(
-      ".cfi_offset rip, 8\n");  // saved pc is *(CFA+8)
-  // saved sp is CFA+16
-  // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
-  // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
-  // because DW_CFA_val_offset uses scaled operand and we don't know what
-  // data alignment factor will be choosen by the assembler when emitting CIE.
-  // DW_CFA_expression          0x10
-  // uleb128 register (rsp)        7   (DWARF register number)
-  // uleb128 size of operation     2
-  // DW_OP_plus_uconst          0x23
-  // uleb128 addend               16
-  assembly_stream_->WriteString(".cfi_escape 0x10, 31, 2, 0x23, 16\n");
+  // Below .cfi_def_cfa defines CFA as caller's SP, while .cfi_offset R, offs
+  // tells unwinder that caller's value of register R is stored at address
+  // CFA+offs.
 
+#if 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");
 #elif defined(TARGET_ARCH_ARM64)
   COMPILE_ASSERT(R29 == FP);
   COMPILE_ASSERT(R30 == LINK_REGISTER);
-  assembly_stream_->WriteString(".cfi_def_cfa x29, 0\n");  // CFA is fp+0
-  assembly_stream_->WriteString(
-      ".cfi_offset x29, 0\n");  // saved fp is *(CFA+0)
-  assembly_stream_->WriteString(
-      ".cfi_offset x30, 8\n");  // saved pc is *(CFA+8)
-  // saved sp is CFA+16
-  // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
-  // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
-  // because DW_CFA_val_offset uses scaled operand and we don't know what
-  // data alignment factor will be choosen by the assembler when emitting CIE.
-#if defined(DART_TARGET_OS_ANDROID)
-  // On Android libunwindstack has a bug (b/191113792): it does not push
-  // CFA value to the expression stack before evaluating expression given
-  // to DW_CFA_expression. We have to workaround this bug by manually pushing
-  // CFA (R11) to the stack using DW_OP_breg29 0.
-  // DW_CFA_expression          0x10
-  // uleb128 register (x31)       31
-  // uleb128 size of operation     4
-  // DW_OP_breg11               0x8d (0x70 + 29)
-  // sleb128 offset                0
-  // DW_OP_plus_uconst          0x23
-  // uleb128 addend               16
-  assembly_stream_->WriteString(".cfi_escape 0x10, 31, 4, 0x8d, 0, 0x23, 16\n");
-#else
-  // DW_CFA_expression          0x10
-  // uleb128 register (x31)       31
-  // uleb128 size of operation     2
-  // DW_OP_plus_uconst          0x23
-  // uleb128 addend               16
-  assembly_stream_->WriteString(".cfi_escape 0x10, 31, 2, 0x23, 16\n");
-#endif
-
+  assembly_stream_->WriteString(".cfi_def_cfa x29, 16\n");
+  assembly_stream_->WriteString(".cfi_offset x29, -16\n");
+  assembly_stream_->WriteString(".cfi_offset x30, -8\n");
 #elif defined(TARGET_ARCH_ARM)
 #if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
   COMPILE_ASSERT(FP == R7);
-  assembly_stream_->WriteString(".cfi_def_cfa r7, 0\n");  // CFA is fp+0
-  assembly_stream_->WriteString(".cfi_offset r7, 0\n");  // saved fp is *(CFA+0)
+  assembly_stream_->WriteString(".cfi_def_cfa r7, 8\n");
+  assembly_stream_->WriteString(".cfi_offset r7, -8\n");
 #else
   COMPILE_ASSERT(FP == R11);
-  assembly_stream_->WriteString(".cfi_def_cfa r11, 0\n");  // CFA is fp+0
-  assembly_stream_->WriteString(
-      ".cfi_offset r11, 0\n");  // saved fp is *(CFA+0)
+  assembly_stream_->WriteString(".cfi_def_cfa r11, 8\n");
+  assembly_stream_->WriteString(".cfi_offset r11, -8\n");
 #endif
-  assembly_stream_->WriteString(".cfi_offset lr, 4\n");  // saved pc is *(CFA+4)
-  // saved sp is CFA+8
-  // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
-  // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
-  // because DW_CFA_val_offset uses scaled operand and we don't know what
-  // data alignment factor will be choosen by the assembler when emitting CIE.
-#if defined(DART_TARGET_OS_ANDROID)
-  // On Android libunwindstack has a bug (b/191113792): it does not push
-  // CFA value to the expression stack before evaluating expression given
-  // to DW_CFA_expression. We have to workaround this bug by manually pushing
-  // CFA (R11) to the stack using DW_OP_breg11 0.
-  // DW_CFA_expression          0x10
-  // uleb128 register (sp)        13
-  // uleb128 size of operation     4
-  // DW_OP_breg11               0x7b (0x70 + 11)
-  // sleb128 offset                0
-  // DW_OP_plus_uconst          0x23
-  // uleb128 addend                8
-  assembly_stream_->WriteString(".cfi_escape 0x10, 31, 4, 0x7b, 0, 0x23, 16\n");
-#else
-  // DW_CFA_expression          0x10
-  // uleb128 register (sp)        13
-  // uleb128 size of operation     2
-  // DW_OP_plus_uconst          0x23
-  // uleb128 addend                8
-  assembly_stream_->WriteString(".cfi_escape 0x10, 13, 2, 0x23, 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)
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index a48a622..260c293 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -412,10 +412,6 @@
 }
 
 IsolateGroup::~IsolateGroup() {
-  // Finalize any weak persistent handles with a non-null referent.
-  FinalizeWeakPersistentHandlesVisitor visitor(this);
-  api_state()->VisitWeakHandlesUnlocked(&visitor);
-
   // Ensure we destroy the heap before the other members.
   heap_ = nullptr;
   ASSERT(marking_stack_ == nullptr);
@@ -1656,11 +1652,6 @@
 void BaseIsolate::AssertCurrent(BaseIsolate* isolate) {
   ASSERT(isolate == Isolate::Current());
 }
-
-void BaseIsolate::AssertCurrentThreadIsMutator() const {
-  ASSERT(Isolate::Current() == this);
-  ASSERT(Thread::Current()->IsMutatorThread());
-}
 #endif  // defined(DEBUG)
 
 #if defined(DEBUG)
@@ -1785,6 +1776,8 @@
   shutdown_callback_ = nullptr;
   cleanup_callback_ = nullptr;
   cleanup_group_callback_ = nullptr;
+  register_kernel_blob_callback_ = nullptr;
+  unregister_kernel_blob_callback_ = nullptr;
   if (isolate_creation_monitor_ == nullptr) {
     isolate_creation_monitor_ = new Monitor();
   }
@@ -2661,14 +2654,20 @@
   if (shutdown_group) {
     KernelIsolate::NotifyAboutIsolateGroupShutdown(isolate_group);
 
-#if !defined(DART_PRECOMPILED_RUNTIME)
     if (!is_vm_isolate) {
       Thread::EnterIsolateGroupAsHelper(isolate_group, Thread::kUnknownTask,
                                         /*bypass_safepoint=*/false);
+#if !defined(DART_PRECOMPILED_RUNTIME)
       BackgroundCompiler::Stop(isolate_group);
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
+      // Finalize any weak persistent handles with a non-null referent with
+      // isolate group still being available.
+      FinalizeWeakPersistentHandlesVisitor visitor(isolate_group);
+      isolate_group->api_state()->VisitWeakHandlesUnlocked(&visitor);
+
       Thread::ExitIsolateGroupAsHelper(/*bypass_safepoint=*/false);
     }
-#endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
     // The "vm-isolate" does not have a thread pool.
     ASSERT(is_vm_isolate == (isolate_group->thread_pool() == nullptr));
@@ -2707,6 +2706,10 @@
 Dart_IsolateShutdownCallback Isolate::shutdown_callback_ = nullptr;
 Dart_IsolateCleanupCallback Isolate::cleanup_callback_ = nullptr;
 Dart_IsolateGroupCleanupCallback Isolate::cleanup_group_callback_ = nullptr;
+Dart_RegisterKernelBlobCallback Isolate::register_kernel_blob_callback_ =
+    nullptr;
+Dart_UnregisterKernelBlobCallback Isolate::unregister_kernel_blob_callback_ =
+    nullptr;
 
 Random* IsolateGroup::isolate_group_random_ = nullptr;
 Monitor* Isolate::isolate_creation_monitor_ = nullptr;
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 39e320c..7665ac1 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -1230,6 +1230,20 @@
   static Dart_IsolateGroupCleanupCallback GroupCleanupCallback() {
     return cleanup_group_callback_;
   }
+  static void SetRegisterKernelBlobCallback(
+      Dart_RegisterKernelBlobCallback cb) {
+    register_kernel_blob_callback_ = cb;
+  }
+  static Dart_RegisterKernelBlobCallback RegisterKernelBlobCallback() {
+    return register_kernel_blob_callback_;
+  }
+  static void SetUnregisterKernelBlobCallback(
+      Dart_UnregisterKernelBlobCallback cb) {
+    unregister_kernel_blob_callback_ = cb;
+  }
+  static Dart_UnregisterKernelBlobCallback UnregisterKernelBlobCallback() {
+    return unregister_kernel_blob_callback_;
+  }
 
 #if !defined(PRODUCT)
   ObjectIdRing* object_id_ring() const { return object_id_ring_; }
@@ -1680,6 +1694,8 @@
   static Dart_IsolateShutdownCallback shutdown_callback_;
   static Dart_IsolateCleanupCallback cleanup_callback_;
   static Dart_IsolateGroupCleanupCallback cleanup_group_callback_;
+  static Dart_RegisterKernelBlobCallback register_kernel_blob_callback_;
+  static Dart_UnregisterKernelBlobCallback unregister_kernel_blob_callback_;
 
 #if !defined(PRODUCT)
   static void WakePauseEventHandler(Dart_Isolate isolate);
diff --git a/runtime/vm/isolate_test.cc b/runtime/vm/isolate_test.cc
index 2b8afac..dd1c919 100644
--- a/runtime/vm/isolate_test.cc
+++ b/runtime/vm/isolate_test.cc
@@ -22,11 +22,13 @@
 
 // Test to ensure that an exception is thrown if no isolate creation
 // callback has been set by the embedder when an isolate is spawned.
-TEST_CASE(IsolateSpawn) {
-  const char* kScriptChars =
+void IsolateSpawn(const char* platform_script_value) {
+  char* scriptChars = OS::SCreate(
+      nullptr,
       "import 'dart:isolate';\n"
       // Ignores printed lines.
       "var _nullPrintClosure = (String line) {};\n"
+      "var _platformScript = () => Uri.parse(\"%s\");\n"
       "void entry(message) {}\n"
       "void testMain() {\n"
       "  Isolate.spawn(entry, null);\n"
@@ -35,9 +37,12 @@
       "  var rp = RawReceivePort();\n"
       "  rp.sendPort.send(null);\n"
       "  rp.handler = (_) { rp.close(); };\n"
-      "}\n";
+      "}\n",
+      platform_script_value);
 
-  Dart_Handle test_lib = TestCase::LoadTestScript(kScriptChars, NULL);
+  Dart_Handle test_lib = TestCase::LoadTestScript(scriptChars, NULL);
+
+  free(scriptChars);
 
   // Setup the internal library's 'internalPrint' function.
   // Necessary because asynchronous errors use "print" to print their
@@ -47,9 +52,19 @@
   Dart_Handle internal_lib = Dart_LookupLibrary(url);
   EXPECT_VALID(internal_lib);
   Dart_Handle print = Dart_GetField(test_lib, NewString("_nullPrintClosure"));
+  EXPECT_VALID(print);
   Dart_Handle result =
       Dart_SetField(internal_lib, NewString("_printClosure"), print);
+  EXPECT_VALID(result);
 
+  Dart_Handle platform_script =
+      Dart_GetField(test_lib, NewString("_platformScript"));
+  EXPECT_VALID(platform_script);
+  Dart_Handle vmlibraryhooks_class =
+      Dart_GetClass(internal_lib, NewString("VMLibraryHooks"));
+  EXPECT_VALID(vmlibraryhooks_class);
+  result = Dart_SetField(vmlibraryhooks_class, NewString("platformScript"),
+                         platform_script);
   EXPECT_VALID(result);
 
   // Setup the 'scheduleImmediate' closure.
@@ -72,12 +87,22 @@
   EXPECT_VALID(result);
   // Run until all ports to isolate are closed.
   result = Dart_RunLoop();
-  EXPECT_ERROR(result, "Unsupported operation: Isolate.spawn");
+  EXPECT_ERROR(
+      result,
+      "Lightweight isolate spawn is not supported by this Dart embedder");
   EXPECT(Dart_ErrorHasException(result));
   Dart_Handle exception_result = Dart_ErrorGetException(result);
   EXPECT_VALID(exception_result);
 }
 
+TEST_CASE(IsolateSpawn_FileUri) {
+  IsolateSpawn("file:/a.dart");
+}
+
+TEST_CASE(IsolateSpawn_PackageUri) {
+  IsolateSpawn("package:/a.dart");
+}
+
 class InterruptChecker : public ThreadPool::Task {
  public:
   static const intptr_t kTaskCount;
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index 7e098bf..c6f3222 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -476,7 +476,10 @@
       intptr_t platform_kernel_size,
       const char* expression,
       const Array& definitions,
+      const Array& definition_types,
       const Array& type_definitions,
+      const Array& type_bounds,
+      const Array& type_defaults,
       char const* library_uri,
       char const* klass,
       char const* method,
@@ -537,6 +540,22 @@
     }
     definitions_object.value.as_array.values = definitions_array;
 
+    Dart_CObject definition_types_object;
+    intptr_t num_definition_types = definition_types.Length();
+    definition_types_object.type = Dart_CObject_kArray;
+    definition_types_object.value.as_array.length = num_definition_types;
+
+    Dart_CObject** definition_types_array =
+        new Dart_CObject*[num_definition_types];
+    for (intptr_t i = 0; i < num_definition_types; ++i) {
+      definition_types_array[i] = new Dart_CObject;
+      definition_types_array[i]->type = Dart_CObject_kString;
+      definition_types_array[i]->value.as_string = const_cast<char*>(
+          String::CheckedHandle(thread->zone(), definition_types.At(i))
+              .ToCString());
+    }
+    definition_types_object.value.as_array.values = definition_types_array;
+
     Dart_CObject type_definitions_object;
     intptr_t num_type_definitions = type_definitions.Length();
     type_definitions_object.type = Dart_CObject_kArray;
@@ -553,6 +572,35 @@
     }
     type_definitions_object.value.as_array.values = type_definitions_array;
 
+    Dart_CObject type_bounds_object;
+    intptr_t num_type_bounds = type_bounds.Length();
+    type_bounds_object.type = Dart_CObject_kArray;
+    type_bounds_object.value.as_array.length = num_type_bounds;
+
+    Dart_CObject** type_bounds_array = new Dart_CObject*[num_type_bounds];
+    for (intptr_t i = 0; i < num_type_bounds; ++i) {
+      type_bounds_array[i] = new Dart_CObject;
+      type_bounds_array[i]->type = Dart_CObject_kString;
+      type_bounds_array[i]->value.as_string = const_cast<char*>(
+          String::CheckedHandle(thread->zone(), type_bounds.At(i)).ToCString());
+    }
+    type_bounds_object.value.as_array.values = type_bounds_array;
+
+    Dart_CObject type_defaults_object;
+    intptr_t num_type_defaults = type_defaults.Length();
+    type_defaults_object.type = Dart_CObject_kArray;
+    type_defaults_object.value.as_array.length = num_type_defaults;
+
+    Dart_CObject** type_defaults_array = new Dart_CObject*[num_type_defaults];
+    for (intptr_t i = 0; i < num_type_defaults; ++i) {
+      type_defaults_array[i] = new Dart_CObject;
+      type_defaults_array[i]->type = Dart_CObject_kString;
+      type_defaults_array[i]->value.as_string = const_cast<char*>(
+          String::CheckedHandle(thread->zone(), type_defaults.At(i))
+              .ToCString());
+    }
+    type_defaults_object.value.as_array.values = type_defaults_array;
+
     Dart_CObject library_uri_object;
     library_uri_object.type = Dart_CObject_kString;
     library_uri_object.value.as_string = const_cast<char*>(library_uri);
@@ -659,7 +707,10 @@
                                    &dart_platform_kernel,
                                    &expression_object,
                                    &definitions_object,
+                                   &definition_types_object,
                                    &type_definitions_object,
+                                   &type_bounds_object,
+                                   &type_defaults_object,
                                    &library_uri_object,
                                    &class_object,
                                    &method_object,
@@ -690,11 +741,26 @@
     }
     delete[] definitions_array;
 
+    for (intptr_t i = 0; i < num_definition_types; ++i) {
+      delete definition_types_array[i];
+    }
+    delete[] definition_types_array;
+
     for (intptr_t i = 0; i < num_type_definitions; ++i) {
       delete type_definitions_array[i];
     }
     delete[] type_definitions_array;
 
+    for (intptr_t i = 0; i < num_type_bounds; ++i) {
+      delete type_bounds_array[i];
+    }
+    delete[] type_bounds_array;
+
+    for (intptr_t i = 0; i < num_type_defaults; ++i) {
+      delete type_defaults_array[i];
+    }
+    delete[] type_defaults_array;
+
     for (intptr_t i = 0; i < num_dills; ++i) {
       delete dills_array[i];
     }
@@ -1142,7 +1208,10 @@
     intptr_t platform_kernel_size,
     const char* expression,
     const Array& definitions,
+    const Array& definition_types,
     const Array& type_definitions,
+    const Array& type_bounds,
+    const Array& type_defaults,
     const char* library_url,
     const char* klass,
     const char* method,
@@ -1160,7 +1229,8 @@
   ASSERT(is_static || (klass != nullptr));
   return request.SendAndWaitForResponse(
       kernel_port, platform_kernel, platform_kernel_size, expression,
-      definitions, type_definitions, library_url, klass, method, is_static,
+      definitions, definition_types, type_definitions, type_bounds,
+      type_defaults, library_url, klass, method, is_static,
       experimental_flags_);
 }
 
diff --git a/runtime/vm/kernel_isolate.h b/runtime/vm/kernel_isolate.h
index d5d5297..08a7427 100644
--- a/runtime/vm/kernel_isolate.h
+++ b/runtime/vm/kernel_isolate.h
@@ -73,7 +73,10 @@
       intptr_t platform_kernel_size,
       const char* expression,
       const Array& definitions,
+      const Array& definition_types,
       const Array& type_definitions,
+      const Array& type_bounds,
+      const Array& type_defaults,
       const char* library_url,
       const char* klass,
       const char* method,
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 0507227..0b1eb10 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -211,7 +211,7 @@
       inferred_type_metadata_helper_(&helper_, &constant_reader_),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
-      potential_natives_(GrowableObjectArray::Handle(Z)),
+      annotation_list_(GrowableObjectArray::Handle(Z)),
       potential_pragma_functions_(GrowableObjectArray::Handle(Z)),
       static_field_value_(Object::Handle(Z)),
       pragma_class_(Class::Handle(Z)),
@@ -483,7 +483,7 @@
       inferred_type_metadata_helper_(&helper_, &constant_reader_),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
-      potential_natives_(GrowableObjectArray::Handle(Z)),
+      annotation_list_(GrowableObjectArray::Handle(Z)),
       potential_pragma_functions_(GrowableObjectArray::Handle(Z)),
       static_field_value_(Object::Handle(Z)),
       pragma_class_(Class::Handle(Z)),
@@ -517,10 +517,10 @@
       GrowableObjectArray::Handle(Z));
 }
 
-void KernelLoader::AnnotateNativeProcedures() {
-  potential_natives_ = kernel_program_info_.potential_natives();
+void KernelLoader::AnnotateProcedures() {
+  annotation_list_ = kernel_program_info_.potential_natives();
   const intptr_t length =
-      !potential_natives_.IsNull() ? potential_natives_.Length() : 0;
+      !annotation_list_.IsNull() ? annotation_list_.Length() : 0;
   if (length == 0) return;
 
   // Prepare lazy constant reading.
@@ -540,11 +540,14 @@
   // attach the native name to it.
   Function& function = Function::Handle(Z);
   for (intptr_t i = 0; i < length; ++i) {
-    function ^= potential_natives_.At(i);
+    function ^= annotation_list_.At(i);
 
     helper_.SetOffset(function.KernelDataProgramOffset() +
                       function.kernel_offset());
-    {
+    if (function.IsGenerativeConstructor()) {
+      ConstructorHelper constructor_helper(&helper_);
+      constructor_helper.ReadUntilExcluding(ConstructorHelper::kAnnotations);
+    } else {
       ProcedureHelper procedure_helper(&helper_);
       procedure_helper.ReadUntilExcluding(ProcedureHelper::kAnnotations);
     }
@@ -570,21 +573,25 @@
           function.set_is_native(true);
           function.set_native_name(native_name);
           function.set_is_external(false);
-          break;
         } else if (constant_reader.IsInstanceConstant(constant_table_index,
                                                       pragma_class_)) {
           constant = constant_reader.ReadConstant(constant_table_index);
           ASSERT(constant.clazz() == pragma_class_.ptr());
+
+          pragma_name ^= constant.GetField(pragma_name_field_);
+
+          if (pragma_name.ptr() == Symbols::vm_invisible().ptr()) {
+            function.set_is_visible(false);
+          }
+
           // We found the annotation, let's flag the function as native and
           // set the native name!
-          pragma_name ^= constant.GetField(pragma_name_field_);
           if (pragma_name.ptr() == Symbols::vm_external_name().ptr()) {
             pragma_options = constant.GetField(pragma_options_field_);
             if (pragma_options.IsString()) {
               function.set_is_native(true);
               function.set_native_name(String::Cast(pragma_options));
               function.set_is_external(false);
-              break;
             }
           }
         }
@@ -596,8 +603,8 @@
 
   // Clear out the list of [Function] objects which might need their native
   // name to be set after reading the constant table from the kernel blob.
-  potential_natives_ = GrowableObjectArray::null();
-  kernel_program_info_.set_potential_natives(potential_natives_);
+  annotation_list_ = GrowableObjectArray::null();
+  kernel_program_info_.set_potential_natives(annotation_list_);
 }
 
 bool KernelLoader::IsClassName(NameIndex name,
@@ -653,7 +660,7 @@
     }
     kernel_program_info_.set_constants(array);
     H.SetConstants(array);  // for caching
-    AnnotateNativeProcedures();
+    AnnotateProcedures();
     EvaluateDelayedPragmas();
 
     NameIndex main = program_->main_method();
@@ -1132,7 +1139,9 @@
     intptr_t annotation_count = helper_.ReadListLength();
     bool has_pragma_annotation;
     ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                      /*is_potential_native=*/nullptr, &has_pragma_annotation);
+                      /*scan_annotations_lazy=*/nullptr,
+                      /*is_invisible_function=*/nullptr,
+                      &has_pragma_annotation);
     field_helper.SetJustRead(FieldHelper::kAnnotations);
 
     field_helper.ReadUntilExcluding(FieldHelper::kType);
@@ -1424,7 +1433,8 @@
   intptr_t annotation_count = helper_.ReadListLength();
   bool has_pragma_annotation = false;
   ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                    /*is_potential_native=*/nullptr, &has_pragma_annotation);
+                    /*scan_annotations_lazy=*/nullptr,
+                    /*is_invisible_function=*/nullptr, &has_pragma_annotation);
   if (has_pragma_annotation) {
     out_class->set_has_pragma(true);
   }
@@ -1503,7 +1513,8 @@
       intptr_t annotation_count = helper_.ReadListLength();
       bool has_pragma_annotation;
       ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                        /*is_potential_native=*/nullptr,
+                        /*scan_annotations_lazy=*/nullptr,
+                        /*is_invisible_function=*/nullptr,
                         &has_pragma_annotation);
       field_helper.SetJustRead(FieldHelper::kAnnotations);
 
@@ -1628,9 +1639,12 @@
     ConstructorHelper constructor_helper(&helper_);
     constructor_helper.ReadUntilExcluding(ConstructorHelper::kAnnotations);
     intptr_t annotation_count = helper_.ReadListLength();
+    bool scan_annotations_lazy;
     bool has_pragma_annotation;
+    bool is_invisible_function;
     ReadVMAnnotations(library, annotation_count, /*native_name=*/nullptr,
-                      /*is_potential_native=*/nullptr, &has_pragma_annotation);
+                      &scan_annotations_lazy, &is_invisible_function,
+                      &has_pragma_annotation);
     constructor_helper.SetJustRead(ConstructorHelper::kAnnotations);
     constructor_helper.ReadUntilExcluding(ConstructorHelper::kFunction);
 
@@ -1659,6 +1673,13 @@
     function.set_kernel_offset(constructor_offset);
     signature.set_result_type(T.ReceiverType(klass));
     function.set_has_pragma(has_pragma_annotation);
+    function.set_is_visible(!is_invisible_function);
+
+    if (scan_annotations_lazy) {
+      // Cannot be processed right now, so put on "pending" list.
+      EnsureAnnotationList();
+      annotation_list_.Add(function);
+    }
 
     FunctionNodeHelper function_node_helper(&helper_);
     function_node_helper.ReadUntilExcluding(
@@ -1778,21 +1799,28 @@
 //
 // Output parameters:
 //
-//   `native_name`: non-null if `@ExternalName(...)` was identified.
+//   `has_annotations_of_interest`: true if there may be annotations of
+//    interest and we need to re-try after reading the constants table.
 //
-//   `is_potential_native`: non-null if there may be an `@ExternalName(...)`
-//   annotation and we need to re-try after reading the constants table.
+//   `is_invisible_function`: if `@pragma('vm:invisible)` was found.
 //
-//   `has_pragma_annotation`: non-null if @pragma(...) was found (no information
+//   `native_name`: set if `@ExternalName(...)` / @pragma('vm:external-name)`
+//    was identified.
+//
+//   `has_pragma_annotation`: if `@pragma(...)` was found (no information
 //   is given on the kind of pragma directive).
 //
 void KernelLoader::ReadVMAnnotations(const Library& library,
                                      intptr_t annotation_count,
                                      String* native_name,
-                                     bool* is_potential_native,
+                                     bool* has_annotations_of_interest,
+                                     bool* is_invisible_function,
                                      bool* has_pragma_annotation) {
-  if (is_potential_native != nullptr) {
-    *is_potential_native = false;
+  if (has_annotations_of_interest != nullptr) {
+    *has_annotations_of_interest = false;
+  }
+  if (is_invisible_function != nullptr) {
+    *is_invisible_function = false;
   }
   *has_pragma_annotation = false;
   if (annotation_count == 0) {
@@ -1815,8 +1843,8 @@
         //
         // We therefore delay the scanning for `ExternalName {name: ... }`
         // constants in the annotation list to later.
-        if (is_potential_native != nullptr) {
-          *is_potential_native = true;
+        if (has_annotations_of_interest != nullptr) {
+          *has_annotations_of_interest = true;
         }
 
         ASSERT(kernel_program_info_.constants_table() !=
@@ -1892,11 +1920,18 @@
         } else if (constant_reader.IsInstanceConstant(constant_table_index,
                                                       pragma_class_)) {
           *has_pragma_annotation = true;
-          if (native_name != nullptr) {
+          if (native_name != nullptr || is_invisible_function != nullptr) {
             constant = constant_reader.ReadConstant(constant_table_index);
             ASSERT(constant.clazz() == pragma_class_.ptr());
             pragma_name ^= constant.GetField(pragma_name_field_);
-            if (pragma_name.ptr() == Symbols::vm_external_name().ptr()) {
+
+            if (is_invisible_function != nullptr &&
+                pragma_name.ptr() == Symbols::vm_invisible().ptr()) {
+              *is_invisible_function = true;
+            }
+
+            if (native_name != nullptr &&
+                pragma_name.ptr() == Symbols::vm_external_name().ptr()) {
               pragma_options = constant.GetField(pragma_options_field_);
               if (pragma_options.IsString()) {
                 *native_name ^= pragma_options.ptr();
@@ -1938,13 +1973,15 @@
   bool is_external = procedure_helper.IsExternal();
   bool is_extension_member = procedure_helper.IsExtensionMember();
   String& native_name = String::Handle(Z);
-  bool is_potential_native;
+  bool scan_annotations_lazy;
   bool has_pragma_annotation;
+  bool is_invisible_function;
   const intptr_t annotation_count = helper_.ReadListLength();
   ReadVMAnnotations(library, annotation_count, &native_name,
-                    &is_potential_native, &has_pragma_annotation);
+                    &scan_annotations_lazy, &is_invisible_function,
+                    &has_pragma_annotation);
   // If this is a potential native, we'll unset is_external in
-  // AnnotateNativeProcedures instead.
+  // AnnotateProcedures instead.
   is_external = is_external && native_name.IsNull();
   procedure_helper.SetJustRead(ProcedureHelper::kAnnotations);
   const Object& script_class =
@@ -1968,6 +2005,7 @@
   function.set_end_token_pos(procedure_helper.end_position_);
   function.set_is_synthetic(procedure_helper.IsNoSuchMethodForwarder() ||
                             procedure_helper.IsMemberSignature());
+  function.set_is_visible(!is_invisible_function);
   if (register_function) {
     functions_.Add(&function);
   } else {
@@ -2017,10 +2055,10 @@
   if (!native_name.IsNull()) {
     function.set_native_name(native_name);
   }
-  if (is_potential_native) {
+  if (scan_annotations_lazy) {
     // Cannot be processed right now, so put on "pending" list.
-    EnsurePotentialNatives();
-    potential_natives_.Add(function);
+    EnsureAnnotationList();
+    annotation_list_.Add(function);
   }
 
   function_node_helper.ReadUntilExcluding(FunctionNodeHelper::kTypeParameters);
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 68cd64b..5654ca9 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -226,13 +226,14 @@
 
   bool IsClassName(NameIndex name, const String& library, const String& klass);
 
-  void AnnotateNativeProcedures();
+  void AnnotateProcedures();
   void EvaluateDelayedPragmas();
 
   void ReadVMAnnotations(const Library& library,
                          intptr_t annotation_count,
                          String* native_name,
-                         bool* is_potential_native,
+                         bool* has_annotations_of_interest,
+                         bool* is_invisible_function,
                          bool* has_pragma_annotation);
 
   KernelLoader(const Script& script,
@@ -360,13 +361,13 @@
     ASSERT(pragma_class_.is_declaration_loaded());
   }
 
-  void EnsurePotentialNatives() {
-    potential_natives_ = kernel_program_info_.potential_natives();
-    if (potential_natives_.IsNull()) {
+  void EnsureAnnotationList() {
+    annotation_list_ = kernel_program_info_.potential_natives();
+    if (annotation_list_.IsNull()) {
       // To avoid too many grows in this array, we'll set it's initial size to
       // something close to the actual number of potential native functions.
-      potential_natives_ = GrowableObjectArray::New(100, Heap::kNew);
-      kernel_program_info_.set_potential_natives(potential_natives_);
+      annotation_list_ = GrowableObjectArray::New(100, Heap::kNew);
+      kernel_program_info_.set_potential_natives(annotation_list_);
     }
   }
 
@@ -403,7 +404,7 @@
 
   Class& external_name_class_;
   Field& external_name_field_;
-  GrowableObjectArray& potential_natives_;
+  GrowableObjectArray& annotation_list_;
   GrowableObjectArray& potential_pragma_functions_;
   Object& static_field_value_;
 
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index afc2bc3..22de126 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -502,7 +502,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     Library& lib = Library::Handle(s->zone());
     String& str = String::Handle(s->zone());
@@ -597,7 +597,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       TypeArguments* type_args = objects_[i];
@@ -608,7 +608,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       TypeArguments* type_args = objects_[i];
       intptr_t hash = Smi::Value(type_args->untag()->hash());
@@ -637,7 +637,7 @@
   ~TypeArgumentsMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       intptr_t length = d->ReadUnsigned();
       d->AssignRef(TypeArguments::New(length));
@@ -705,7 +705,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     Library& lib = Library::Handle(s->zone());
     Class& cls = Class::Handle(s->zone());
@@ -736,7 +736,7 @@
   ~FunctionMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     String& str = String::Handle(d->zone());
     Library& lib = Library::Handle(d->zone());
     Class& cls = Class::Handle(d->zone());
@@ -810,7 +810,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       Instance* instance = objects_[i];
 
@@ -964,7 +964,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Type* type = objects_[i];
@@ -973,7 +973,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       Type* type = objects_[i];
       s->WriteRef(type->type_class());
@@ -993,7 +993,7 @@
   ~TypeMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(Type::New());
     }
@@ -1050,7 +1050,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       TypeRef* type = objects_[i];
@@ -1059,7 +1059,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       TypeRef* type = objects_[i];
       s->WriteRef(type->type());
@@ -1078,7 +1078,7 @@
   ~TypeRefMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(TypeRef::New());
     }
@@ -1150,7 +1150,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Closure* closure = objects_[i];
@@ -1214,7 +1214,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Smi* smi = static_cast<Smi*>(objects_[i]);
@@ -1250,7 +1250,7 @@
   ~SmiMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(Smi::New(d->Read<intptr_t>()));
     }
@@ -1289,7 +1289,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Mint* mint = static_cast<Mint*>(objects_[i]);
@@ -1325,7 +1325,7 @@
   ~MintMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       int64_t value = d->Read<int64_t>();
       d->AssignRef(is_canonical() ? Mint::NewCanonical(value)
@@ -1367,7 +1367,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Double* dbl = objects_[i];
@@ -1402,7 +1402,7 @@
   ~DoubleMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       double value = d->Read<double>();
       d->AssignRef(is_canonical() ? Double::NewCanonical(value)
@@ -1440,7 +1440,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       GrowableObjectArray* array = objects_[i];
@@ -1450,7 +1450,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       GrowableObjectArray* array = objects_[i];
       s->WriteRef(array->GetTypeArguments());
@@ -1472,7 +1472,7 @@
   ~GrowableObjectArrayMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     GrowableObjectArray& array = GrowableObjectArray::Handle(d->zone());
     for (intptr_t i = 0; i < count; i++) {
       intptr_t length = d->ReadUnsigned();
@@ -1876,7 +1876,7 @@
   ~NativePointerMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       FinalizableData finalizable_data = d->finalizable_data()->Take();
       intptr_t ptr = reinterpret_cast<intptr_t>(finalizable_data.data);
@@ -1910,7 +1910,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       TypedDataView* view = objects_[i];
@@ -1919,7 +1919,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       TypedDataView* view = objects_[i];
       s->WriteRef(view->untag()->length());
@@ -1940,7 +1940,7 @@
   ~TypedDataViewMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(TypedDataView::New(cid_));
     }
@@ -2083,7 +2083,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       TransferableTypedData* transferable = objects_[i];
@@ -2125,7 +2125,7 @@
   ~TransferableTypedDataMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       intptr_t length = d->ReadUnsigned();
       const FinalizableData finalizable_data = d->finalizable_data()->Take();
@@ -2159,7 +2159,7 @@
   void Trace(MessageSerializer* s, Object* object) { objects_.Add(object); }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Object* vector = objects_[i];
@@ -2183,7 +2183,7 @@
   ~Simd128MessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       ASSERT_EQUAL(Int32x4::InstanceSize(), Float32x4::InstanceSize());
       ASSERT_EQUAL(Int32x4::InstanceSize(), Float64x2::InstanceSize());
@@ -2219,7 +2219,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       RegExp* regexp = objects_[i];
@@ -2275,7 +2275,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       SendPort* port = objects_[i];
@@ -2312,7 +2312,7 @@
   ~SendPortMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       Dart_Port id = d->Read<Dart_Port>();
       Dart_Port origin_id = d->Read<Dart_Port>();
@@ -2347,7 +2347,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Capability* cap = objects_[i];
@@ -2382,7 +2382,7 @@
   ~CapabilityMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       uint64_t id = d->Read<uint64_t>();
       d->AssignRef(Capability::New(id));
@@ -2423,7 +2423,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       WeakProperty* property = objects_[i];
@@ -2432,7 +2432,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       WeakProperty* property = objects_[i];
       if (s->HasRef(property->untag()->key())) {
@@ -2457,7 +2457,7 @@
   ~WeakPropertyMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(WeakProperty::New());
     }
@@ -2473,6 +2473,73 @@
   }
 };
 
+class WeakReferenceMessageSerializationCluster
+    : public MessageSerializationCluster {
+ public:
+  WeakReferenceMessageSerializationCluster()
+      : MessageSerializationCluster("WeakReference",
+                                    MessagePhase::kNonCanonicalInstances,
+                                    kWeakReferenceCid) {}
+  ~WeakReferenceMessageSerializationCluster() {}
+
+  void Trace(MessageSerializer* s, Object* object) {
+    WeakReference* reference = static_cast<WeakReference*>(object);
+    objects_.Add(reference);
+
+    s->Push(reference->untag()->type_arguments());
+  }
+
+  void WriteNodes(MessageSerializer* s) {
+    const intptr_t count = objects_.length();
+    s->WriteUnsigned(count);
+    for (intptr_t i = 0; i < count; i++) {
+      WeakReference* reference = objects_[i];
+      s->AssignRef(reference);
+    }
+  }
+
+  void WriteEdges(MessageSerializer* s) {
+    const intptr_t count = objects_.length();
+    for (intptr_t i = 0; i < count; i++) {
+      WeakReference* reference = objects_[i];
+      if (s->HasRef(reference->untag()->target())) {
+        s->WriteRef(reference->untag()->target());
+      } else {
+        s->WriteRef(Object::null());
+      }
+      s->WriteRef(reference->untag()->type_arguments());
+    }
+  }
+
+ private:
+  GrowableArray<WeakReference*> objects_;
+};
+
+class WeakReferenceMessageDeserializationCluster
+    : public MessageDeserializationCluster {
+ public:
+  WeakReferenceMessageDeserializationCluster()
+      : MessageDeserializationCluster("WeakReference") {}
+  ~WeakReferenceMessageDeserializationCluster() {}
+
+  void ReadNodes(MessageDeserializer* d) {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      d->AssignRef(WeakReference::New());
+    }
+  }
+
+  void ReadEdges(MessageDeserializer* d) {
+    ASSERT(!is_canonical());  // Never canonical.
+    for (intptr_t id = start_index_; id < stop_index_; id++) {
+      WeakReferencePtr reference = static_cast<WeakReferencePtr>(d->Ref(id));
+      reference->untag()->set_target(d->ReadRef());
+      reference->untag()->set_type_arguments(
+          static_cast<TypeArgumentsPtr>(d->ReadRef()));
+    }
+  }
+};
+
 class LinkedHashMapMessageSerializationCluster
     : public MessageSerializationCluster {
  public:
@@ -2498,7 +2565,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       LinkedHashMap* map = objects_[i];
@@ -2507,7 +2574,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       LinkedHashMap* map = objects_[i];
       s->WriteRef(map->untag()->type_arguments());
@@ -2529,7 +2596,7 @@
   ~LinkedHashMapMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(LinkedHashMap::NewUninitialized(cid_));
     }
@@ -2594,7 +2661,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       LinkedHashSet* map = objects_[i];
@@ -2603,7 +2670,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       LinkedHashSet* map = objects_[i];
       s->WriteRef(map->untag()->type_arguments());
@@ -2625,7 +2692,7 @@
   ~LinkedHashSetMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       d->AssignRef(LinkedHashSet::NewUninitialized(cid_));
     }
@@ -2689,7 +2756,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       Array* array = objects_[i];
@@ -2700,7 +2767,7 @@
   }
 
   void WriteEdges(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     for (intptr_t i = 0; i < count; i++) {
       Array* array = objects_[i];
       intptr_t length = array->Length();
@@ -2753,7 +2820,7 @@
   ~ArrayMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       intptr_t length = d->ReadUnsigned();
       d->AssignRef(Array::New(cid_, length));
@@ -2834,7 +2901,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       String* str = objects_[i];
@@ -2886,7 +2953,7 @@
   ~OneByteStringMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       intptr_t length = d->ReadUnsigned();
       const uint8_t* data = d->CurrentBufferAddress();
@@ -2940,7 +3007,7 @@
   }
 
   void WriteNodes(MessageSerializer* s) {
-    intptr_t count = objects_.length();
+    const intptr_t count = objects_.length();
     s->WriteUnsigned(count);
     for (intptr_t i = 0; i < count; i++) {
       String* str = objects_[i];
@@ -2995,7 +3062,7 @@
   ~TwoByteStringMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
-    intptr_t count = d->ReadUnsigned();
+    const intptr_t count = d->ReadUnsigned();
     for (intptr_t i = 0; i < count; i++) {
       intptr_t length = d->ReadUnsigned();
       const uint16_t* data =
@@ -3414,6 +3481,8 @@
     case kWeakPropertyCid:
       ephemeron_cluster_ = new (Z) WeakPropertyMessageSerializationCluster();
       return ephemeron_cluster_;
+    case kWeakReferenceCid:
+      return new (Z) WeakReferenceMessageSerializationCluster();
     case kLinkedHashMapCid:
     case kImmutableLinkedHashMapCid:
       return new (Z)
@@ -3513,6 +3582,9 @@
     case kWeakPropertyCid:
       ASSERT(!is_canonical);
       return new (Z) WeakPropertyMessageDeserializationCluster();
+    case kWeakReferenceCid:
+      ASSERT(!is_canonical);
+      return new (Z) WeakReferenceMessageDeserializationCluster();
     case kLinkedHashMapCid:
     case kImmutableLinkedHashMapCid:
       return new (Z)
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index d3cb9c6..00807b5 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -1935,6 +1935,14 @@
     object_store->set_weak_property_class(cls);
     RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib);
 
+    cls = Class::New<WeakReference, RTN::WeakReference>(isolate_group);
+    cls.set_type_arguments_field_offset(
+        WeakReference::type_arguments_offset(),
+        RTN::WeakReference::type_arguments_offset());
+    cls.set_num_type_arguments_unsafe(1);
+    object_store->set_weak_reference_class(cls);
+    RegisterPrivateClass(cls, Symbols::_WeakReferenceImpl(), core_lib);
+
     // Pre-register the mirrors library so we can place the vm class
     // MirrorReference there rather than the core library.
     lib = Library::LookupLibrary(thread, Symbols::DartMirrors());
@@ -2333,6 +2341,18 @@
     pending_classes.Add(cls);
     RegisterClass(cls, Symbols::FfiDynamicLibrary(), 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());
+    if (lib.IsNull()) {
+      lib = Library::NewLibraryHelper(Symbols::DartInternal(), true);
+      lib.SetLoadRequested();
+      lib.Register(thread);
+    }
+    object_store->set_bootstrap_library(ObjectStore::kInternal, lib);
+    ASSERT(!lib.IsNull());
+    ASSERT(lib.ptr() == Library::InternalLibrary());
+
     // Finish the initialization by compiling the bootstrap scripts containing
     // the base interfaces and the implementation of the internal classes.
     const Error& error = Error::Handle(
@@ -2498,6 +2518,8 @@
 
     cls = Class::New<WeakProperty, RTN::WeakProperty>(isolate_group);
     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<MirrorReference, RTN::MirrorReference>(isolate_group);
     cls = Class::New<UserTag, RTN::UserTag>(isolate_group);
@@ -5843,108 +5865,13 @@
   return static_cast<uint32_t>(v);
 }
 
-class CanonicalDoubleKey {
- public:
-  explicit CanonicalDoubleKey(const Double& key)
-      : key_(&key), value_(key.value()) {}
-  explicit CanonicalDoubleKey(const double value) : key_(NULL), value_(value) {}
-  bool Matches(const Double& obj) const {
-    return obj.BitwiseEqualsToDouble(value_);
-  }
-  uword Hash() const { return Hash(value_); }
-  static uword Hash(double value) {
-    return Hash64To32(bit_cast<uint64_t>(value));
-  }
-
-  const Double* key_;
-  const double value_;
-
- private:
-  DISALLOW_ALLOCATION();
-};
-
-class CanonicalMintKey {
- public:
-  explicit CanonicalMintKey(const Mint& key)
-      : key_(&key), value_(key.value()) {}
-  explicit CanonicalMintKey(const int64_t value) : key_(NULL), value_(value) {}
-  bool Matches(const Mint& obj) const { return obj.value() == value_; }
-  uword Hash() const { return Hash(value_); }
-  static uword Hash(int64_t value) {
-    return Hash64To32(bit_cast<uint64_t>(value));
-  }
-
-  const Mint* key_;
-  const int64_t value_;
-
- private:
-  DISALLOW_ALLOCATION();
-};
-
-// Traits for looking up Canonical numbers based on a hash of the value.
-template <typename ObjectType, typename KeyType>
-class CanonicalNumberTraits {
- public:
-  static const char* Name() { return "CanonicalNumberTraits"; }
-  static bool ReportStats() { return false; }
-
-  // Called when growing the table.
-  static bool IsMatch(const Object& a, const Object& b) {
-    return a.ptr() == b.ptr();
-  }
-  static bool IsMatch(const KeyType& a, const Object& b) {
-    return a.Matches(ObjectType::Cast(b));
-  }
-  static uword Hash(const Object& key) {
-    return KeyType::Hash(ObjectType::Cast(key).value());
-  }
-  static uword Hash(const KeyType& key) { return key.Hash(); }
-  static ObjectPtr NewKey(const KeyType& obj) {
-    if (obj.key_ != NULL) {
-      return obj.key_->ptr();
-    } else {
-      UNIMPLEMENTED();
-      return NULL;
-    }
-  }
-};
-typedef UnorderedHashSet<CanonicalNumberTraits<Double, CanonicalDoubleKey> >
-    CanonicalDoubleSet;
-typedef UnorderedHashSet<CanonicalNumberTraits<Mint, CanonicalMintKey> >
-    CanonicalMintSet;
-
-// Returns an instance of Double or Double::null().
-DoublePtr Class::LookupCanonicalDouble(Zone* zone, double value) const {
-  ASSERT(this->ptr() ==
-         IsolateGroup::Current()->object_store()->double_class());
-  if (this->constants() == Array::null()) return Double::null();
-
-  Double& canonical_value = Double::Handle(zone);
-  CanonicalDoubleSet constants(zone, this->constants());
-  canonical_value ^= constants.GetOrNull(CanonicalDoubleKey(value));
-  this->set_constants(constants.Release());
-  return canonical_value.ptr();
-}
-
-// Returns an instance of Mint or Mint::null().
-MintPtr Class::LookupCanonicalMint(Zone* zone, int64_t value) const {
-  ASSERT(this->ptr() == IsolateGroup::Current()->object_store()->mint_class());
-  if (this->constants() == Array::null()) return Mint::null();
-
-  Mint& canonical_value = Mint::Handle(zone);
-  CanonicalMintSet constants(zone, this->constants());
-  canonical_value ^= constants.GetOrNull(CanonicalMintKey(value));
-  this->set_constants(constants.Release());
-  return canonical_value.ptr();
-}
-
 class CanonicalInstanceKey {
  public:
   explicit CanonicalInstanceKey(const Instance& key) : key_(key) {
-    ASSERT(!(key.IsString() || key.IsInteger() || key.IsAbstractType()));
+    ASSERT(!(key.IsString() || key.IsAbstractType()));
   }
   bool Matches(const Instance& obj) const {
-    ASSERT(!(obj.IsString() || obj.IsInteger() || obj.IsAbstractType()));
+    ASSERT(!(obj.IsString() || obj.IsAbstractType()));
     if (key_.CanonicalizeEquals(obj)) {
       ASSERT(obj.IsCanonical());
       return true;
@@ -5966,15 +5893,15 @@
 
   // Called when growing the table.
   static bool IsMatch(const Object& a, const Object& b) {
-    ASSERT(!(a.IsString() || a.IsInteger() || a.IsAbstractType()));
-    ASSERT(!(b.IsString() || b.IsInteger() || b.IsAbstractType()));
+    ASSERT(!(a.IsString() || a.IsAbstractType()));
+    ASSERT(!(b.IsString() || b.IsAbstractType()));
     return a.ptr() == b.ptr();
   }
   static bool IsMatch(const CanonicalInstanceKey& a, const Object& b) {
     return a.Matches(Instance::Cast(b));
   }
   static uword Hash(const Object& key) {
-    ASSERT(!(key.IsString() || key.IsNumber() || key.IsAbstractType()));
+    ASSERT(!(key.IsString() || key.IsAbstractType()));
     ASSERT(key.IsInstance());
     return Instance::Cast(key).CanonicalizeHash();
   }
@@ -6017,26 +5944,6 @@
   return canonical_value.ptr();
 }
 
-void Class::InsertCanonicalDouble(Zone* zone, const Double& constant) const {
-  if (this->constants() == Array::null()) {
-    this->set_constants(Array::Handle(
-        zone, HashTables::New<CanonicalDoubleSet>(128, Heap::kOld)));
-  }
-  CanonicalDoubleSet constants(zone, this->constants());
-  constants.InsertNewOrGet(CanonicalDoubleKey(constant));
-  this->set_constants(constants.Release());
-}
-
-void Class::InsertCanonicalMint(Zone* zone, const Mint& constant) const {
-  if (this->constants() == Array::null()) {
-    this->set_constants(Array::Handle(
-        zone, HashTables::New<CanonicalMintSet>(128, Heap::kOld)));
-  }
-  CanonicalMintSet constants(zone, this->constants());
-  constants.InsertNewOrGet(CanonicalMintKey(constant));
-  this->set_constants(constants.Release());
-}
-
 void Class::RehashConstants(Zone* zone) const {
   intptr_t cid = id();
   if ((cid == kMintCid) || (cid == kDoubleCid)) {
@@ -8125,8 +8032,7 @@
     // Native methods don't need to be optimized.
     return false;
   }
-  if (is_optimizable() && (script() != Script::null()) &&
-      SourceSize() < FLAG_huge_method_cutoff_in_tokens) {
+  if (is_optimizable() && (script() != Script::null())) {
     // Additional check needed for implicit getters.
     return (unoptimized_code() == Object::null()) ||
            (Code::Handle(unoptimized_code()).Size() <
@@ -14469,10 +14375,6 @@
   all_libs.Add(&Library::ZoneHandle(Library::DeveloperLibrary()));
   DEVELOPER_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
 
-  all_libs.Clear();
-  all_libs.Add(&Library::ZoneHandle(Library::MathLibrary()));
-  MATH_LIB_INTRINSIC_LIST(CHECK_FINGERPRINTS_ASM_INTRINSIC);
-
 #undef CHECK_FINGERPRINTS_INNER
 #undef CHECK_FINGERPRINTS
 #undef CHECK_FINGERPRINTS_ASM_INTRINSIC
@@ -14497,6 +14399,8 @@
 #undef CHECK_FACTORY_FINGERPRINTS
 
   if (!fingerprints_match) {
+    // Private names are mangled. Mangling depends on Library::private_key_.
+    // If registering a new bootstrap library, add at the end.
     FATAL(
         "FP mismatch while recognizing methods. If the behavior of "
         "these functions has changed, then changes are also needed in "
@@ -18664,11 +18568,18 @@
     }
   }
   const Instance& stack = Instance::Handle(stacktrace());
-  strtmp = DartLibraryCalls::ToString(stack);
-  const char* stack_str =
-      "<Received error while converting stack trace to string>";
-  if (!strtmp.IsError()) {
-    stack_str = strtmp.ToCString();
+  const char* stack_str;
+  if (stack.IsNull()) {
+    stack_str = "null";
+  } else if (stack.IsStackTrace()) {
+    stack_str = StackTrace::Cast(stack).ToCString();
+  } else {
+    strtmp = DartLibraryCalls::ToString(stack);
+    if (!strtmp.IsError()) {
+      stack_str = strtmp.ToCString();
+    } else {
+      stack_str = "<Received error while converting stack trace to string>";
+    }
   }
   return OS::SCreate(thread->zone(), "Unhandled exception:\n%s\n%s", exc_str,
                      stack_str);
@@ -19138,7 +19049,7 @@
 }
 
 InstancePtr Instance::CanonicalizeLocked(Thread* thread) const {
-  if (this->IsCanonical()) {
+  if (!this->ptr()->IsHeapObject() || this->IsCanonical()) {
     return this->ptr();
   }
   ASSERT(!IsNull());
@@ -19685,7 +19596,7 @@
     return 0;
   }
   if (IsTypedDataClassId(cid)) {
-    return TypedData::data_offset();
+    return TypedData::payload_offset();
   }
   switch (cid) {
     case kArrayCid:
@@ -22155,46 +22066,6 @@
   return printer.buffer();
 }
 
-InstancePtr Number::CanonicalizeLocked(Thread* thread) const {
-  intptr_t cid = GetClassId();
-  switch (cid) {
-    case kSmiCid:
-      return static_cast<SmiPtr>(raw_value());
-    case kMintCid:
-      return Mint::NewCanonicalLocked(thread, Mint::Cast(*this).value());
-    case kDoubleCid:
-      return Double::NewCanonicalLocked(thread, Double::Cast(*this).value());
-    default:
-      UNREACHABLE();
-  }
-  return Instance::null();
-}
-
-#if defined(DEBUG)
-bool Number::CheckIsCanonical(Thread* thread) const {
-  intptr_t cid = GetClassId();
-  Zone* zone = thread->zone();
-  const Class& cls = Class::Handle(zone, this->clazz());
-  switch (cid) {
-    case kSmiCid:
-      return true;
-    case kMintCid: {
-      Mint& result = Mint::Handle(zone);
-      result ^= cls.LookupCanonicalMint(zone, Mint::Cast(*this).value());
-      return (result.ptr() == this->ptr());
-    }
-    case kDoubleCid: {
-      Double& dbl = Double::Handle(zone);
-      dbl ^= cls.LookupCanonicalDouble(zone, Double::Cast(*this).value());
-      return (dbl.ptr() == this->ptr());
-    }
-    default:
-      UNREACHABLE();
-  }
-  return false;
-}
-#endif  // DEBUG
-
 const char* Number::ToCString() const {
   // Number is an interface. No instances of Number should exist.
   UNREACHABLE();
@@ -22541,29 +22412,9 @@
 
 MintPtr Mint::NewCanonical(int64_t value) {
   Thread* thread = Thread::Current();
-  SafepointMutexLocker ml(
-      thread->isolate_group()->constant_canonicalization_mutex());
-  return NewCanonicalLocked(thread, value);
-}
-
-MintPtr Mint::NewCanonicalLocked(Thread* thread, int64_t value) {
-  // Do not allocate a Mint if Smi would do.
-  ASSERT(!Smi::IsValid(value));
-  Zone* zone = thread->zone();
-  auto isolate_group = thread->isolate_group();
-  const Class& cls =
-      Class::Handle(zone, isolate_group->object_store()->mint_class());
-  Mint& canonical_value =
-      Mint::Handle(zone, cls.LookupCanonicalMint(zone, value));
-  if (!canonical_value.IsNull()) {
-    return canonical_value.ptr();
-  }
-  canonical_value = Mint::New(value, Heap::kOld);
-  canonical_value.SetCanonical();
-  // The value needs to be added to the constants list. Grow the list if
-  // it is full.
-  cls.InsertCanonicalMint(zone, canonical_value);
-  return canonical_value.ptr();
+  Mint& mint = Mint::Handle(thread->zone(), Mint::New(value, Heap::kOld));
+  mint ^= mint.Canonicalize(thread);
+  return mint.ptr();
 }
 
 bool Mint::Equals(const Instance& other) const {
@@ -22672,28 +22523,9 @@
 
 DoublePtr Double::NewCanonical(double value) {
   Thread* thread = Thread::Current();
-  SafepointMutexLocker ml(
-      thread->isolate_group()->constant_canonicalization_mutex());
-  return NewCanonicalLocked(thread, value);
-}
-
-DoublePtr Double::NewCanonicalLocked(Thread* thread, double value) {
-  Zone* zone = thread->zone();
-  auto isolate_group = thread->isolate_group();
-  const Class& cls =
-      Class::Handle(zone, isolate_group->object_store()->double_class());
-  // Linear search to see whether this value is already present in the
-  // list of canonicalized constants.
-  Double& canonical_value =
-      Double::Handle(zone, cls.LookupCanonicalDouble(zone, value));
-  if (!canonical_value.IsNull()) {
-    return canonical_value.ptr();
-  }
-  canonical_value = Double::New(value, Heap::kOld);
-  canonical_value.SetCanonical();
-  // The value needs to be added to the constants list.
-  cls.InsertCanonicalDouble(zone, canonical_value);
-  return canonical_value.ptr();
+  Double& dbl = Double::Handle(thread->zone(), Double::New(value, Heap::kOld));
+  dbl ^= dbl.Canonicalize(thread);
+  return dbl.ptr();
 }
 
 DoublePtr Double::NewCanonical(const String& str) {
@@ -25863,9 +25695,11 @@
         for (intptr_t j = inlined_functions.length() - 1; j >= 0; j--) {
           const auto& inlined = *inlined_functions[j];
           auto const pos = inlined_token_positions[j];
-          PrintSymbolicStackFrame(zone, &buffer, inlined, pos, frame_index,
-                                  /*is_line=*/FLAG_precompiled_mode);
-          frame_index++;
+          if (FLAG_show_invisible_frames || inlined.is_visible()) {
+            PrintSymbolicStackFrame(zone, &buffer, inlined, pos, frame_index,
+                                    /*is_line=*/FLAG_precompiled_mode);
+            frame_index++;
+          }
         }
         continue;
       }
@@ -26073,6 +25907,22 @@
   return "_WeakProperty";
 }
 
+WeakReferencePtr WeakReference::New(Heap::Space space) {
+  ASSERT(IsolateGroup::Current()->object_store()->weak_reference_class() !=
+         Class::null());
+  ObjectPtr raw =
+      Object::Allocate(WeakReference::kClassId, WeakReference::InstanceSize(),
+                       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",
+                     type_args_name.ToCString());
+}
+
 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 b830f12..25d7a8e 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -668,7 +668,7 @@
                             Heap::Space space,
                             bool compressed);
 
-  static intptr_t RoundedAllocationSize(intptr_t size) {
+  static constexpr intptr_t RoundedAllocationSize(intptr_t size) {
     return Utils::RoundUp(size, kObjectAlignment);
   }
 
@@ -1497,16 +1497,11 @@
   FieldPtr LookupInstanceFieldAllowPrivate(const String& name) const;
   FieldPtr LookupStaticFieldAllowPrivate(const String& name) const;
 
-  DoublePtr LookupCanonicalDouble(Zone* zone, double value) const;
-  MintPtr LookupCanonicalMint(Zone* zone, int64_t value) const;
-
   // The methods above are more efficient than this generic one.
   InstancePtr LookupCanonicalInstance(Zone* zone, const Instance& value) const;
 
   InstancePtr InsertCanonicalConstant(Zone* zone,
                                       const Instance& constant) const;
-  void InsertCanonicalDouble(Zone* zone, const Double& constant) const;
-  void InsertCanonicalMint(Zone* zone, const Mint& constant) const;
 
   void RehashConstants(Zone* zone) const;
 
@@ -9117,15 +9112,6 @@
   // TODO(iposva): Add more useful Number methods.
   StringPtr ToString(Heap::Space space) const;
 
-  // Numbers are canonicalized differently from other instances/strings.
-  // Caller must hold IsolateGroup::constant_canonicalization_mutex_.
-  virtual InstancePtr CanonicalizeLocked(Thread* thread) const;
-
-#if defined(DEBUG)
-  // Check if number is canonical.
-  virtual bool CheckIsCanonical(Thread* thread) const;
-#endif  // DEBUG
-
  private:
   OBJECT_IMPLEMENTATION(Number, Instance);
 
@@ -9329,7 +9315,6 @@
   static MintPtr New(int64_t value, Heap::Space space = Heap::kNew);
 
   static MintPtr NewCanonical(int64_t value);
-  static MintPtr NewCanonicalLocked(Thread* thread, int64_t value);
 
  private:
   void set_value(int64_t value) const;
@@ -9356,7 +9341,6 @@
 
   // Returns a canonical double object allocated in the old gen space.
   static DoublePtr NewCanonical(double d);
-  static DoublePtr NewCanonicalLocked(Thread* thread, double d);
 
   // Returns a canonical double object (allocated in the old gen space) or
   // Double::null() if str points to a string that does not convert to a
@@ -10244,10 +10228,17 @@
 class Array : public Instance {
  public:
   // Returns `true` if we use card marking for arrays of length [array_length].
-  static bool UseCardMarkingForAllocation(const intptr_t array_length) {
+  static constexpr bool UseCardMarkingForAllocation(
+      const intptr_t array_length) {
     return Array::InstanceSize(array_length) > Heap::kNewAllocatableSize;
   }
 
+  // WB invariant restoration code only applies to arrives which have at most
+  // this many elements. Consequently WB elimination code should not eliminate
+  // WB on arrays of larger lengths across instructions that can cause GC.
+  // Note: we also can't restore WB invariant for arrays which use card marking.
+  static constexpr intptr_t kMaxLengthForWriteBarrierElimination = 8;
+
   intptr_t Length() const { return LengthOf(ptr()); }
   static intptr_t LengthOf(const ArrayPtr array) {
     return Smi::Value(array->untag()->length());
@@ -10343,7 +10334,7 @@
     return OFFSET_OF(UntaggedArray, type_arguments_);
   }
 
-  static bool IsValidLength(intptr_t len) {
+  static constexpr bool IsValidLength(intptr_t len) {
     return 0 <= len && len <= kMaxElements;
   }
 
@@ -10353,7 +10344,7 @@
     return 0;
   }
 
-  static intptr_t InstanceSize(intptr_t len) {
+  static constexpr intptr_t InstanceSize(intptr_t len) {
     // Ensure that variable length data is not adding to the object length.
     ASSERT(sizeof(UntaggedArray) ==
            (sizeof(UntaggedInstance) + (2 * kBytesPerElement)));
@@ -10686,7 +10677,7 @@
 
 class PointerBase : public Instance {
  public:
-  static intptr_t data_field_offset() {
+  static intptr_t data_offset() {
     return OFFSET_OF(UntaggedPointerBase, data_);
   }
 };
@@ -10830,7 +10821,9 @@
 
 #undef TYPED_GETTER_SETTER
 
-  static intptr_t data_offset() { return UntaggedTypedData::payload_offset(); }
+  static intptr_t payload_offset() {
+    return UntaggedTypedData::payload_offset();
+  }
 
   static intptr_t InstanceSize() {
     ASSERT(sizeof(UntaggedTypedData) ==
@@ -10940,10 +10933,6 @@
                                             Dart_HandleFinalizer callback,
                                             intptr_t external_size) const;
 
-  static intptr_t data_offset() {
-    return OFFSET_OF(UntaggedExternalTypedData, data_);
-  }
-
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(UntaggedExternalTypedData));
   }
@@ -11016,7 +11005,7 @@
     return IsExternalTypedDataClassId(cid);
   }
 
-  static intptr_t data_offset() {
+  static intptr_t typed_data_offset() {
     return OFFSET_OF(UntaggedTypedDataView, typed_data_);
   }
 
@@ -12012,6 +12001,38 @@
   friend class Class;
 };
 
+class WeakReference : public Instance {
+ public:
+  ObjectPtr target() const { return untag()->target(); }
+  void set_target(const Object& target) const {
+    untag()->set_target(target.ptr());
+  }
+  static intptr_t target_offset() {
+    return OFFSET_OF(UntaggedWeakReference, target_);
+  }
+
+  static intptr_t type_arguments_offset() {
+    return OFFSET_OF(UntaggedWeakReference, type_arguments_);
+  }
+
+  static WeakReferencePtr New(Heap::Space space = Heap::kNew);
+
+  static intptr_t InstanceSize() {
+    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 MirrorReference : public Instance {
  public:
   ObjectPtr referent() const { return untag()->referent(); }
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index d348aec..0eeb88c 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -393,6 +393,9 @@
     raw_transferables_from_to_.Add(to);
   }
   void AddWeakProperty(WeakPropertyPtr from) { raw_weak_properties_.Add(from); }
+  void AddWeakReference(WeakReferencePtr from) {
+    raw_weak_references_.Add(from);
+  }
   void AddExternalTypedData(ExternalTypedDataPtr to) {
     raw_external_typed_data_to_.Add(to);
   }
@@ -410,6 +413,7 @@
   GrowableArray<ObjectPtr> raw_objects_to_rehash_;
   GrowableArray<ObjectPtr> raw_expandos_to_rehash_;
   GrowableArray<WeakPropertyPtr> raw_weak_properties_;
+  GrowableArray<WeakReferencePtr> raw_weak_references_;
   intptr_t fill_cursor_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(FastForwardMap);
@@ -450,6 +454,9 @@
   void AddWeakProperty(const WeakProperty& from) {
     weak_properties_.Add(&WeakProperty::Handle(from.ptr()));
   }
+  void AddWeakReference(const WeakReference& from) {
+    weak_references_.Add(&WeakReference::Handle(from.ptr()));
+  }
   void AddExternalTypedData(ExternalTypedDataPtr to) {
     external_typed_data_.Add(&ExternalTypedData::Handle(to));
   }
@@ -485,6 +492,7 @@
   GrowableArray<const Object*> objects_to_rehash_;
   GrowableArray<const Object*> expandos_to_rehash_;
   GrowableArray<const WeakProperty*> weak_properties_;
+  GrowableArray<const WeakReference*> weak_references_;
   intptr_t fill_cursor_ = 0;
 
   DISALLOW_COPY_AND_ASSIGN(SlowForwardMap);
@@ -740,6 +748,9 @@
   void EnqueueWeakProperty(WeakPropertyPtr from) {
     fast_forward_map_.AddWeakProperty(from);
   }
+  void EnqueueWeakReference(WeakReferencePtr from) {
+    fast_forward_map_.AddWeakReference(from);
+  }
   void EnqueueObjectToRehash(ObjectPtr to) {
     fast_forward_map_.AddObjectToRehash(to);
   }
@@ -937,6 +948,9 @@
   void EnqueueWeakProperty(const WeakProperty& from) {
     slow_forward_map_.AddWeakProperty(from);
   }
+  void EnqueueWeakReference(const WeakReference& from) {
+    slow_forward_map_.AddWeakReference(from);
+  }
   void EnqueueObjectToRehash(const Object& to) {
     slow_forward_map_.AddObjectToRehash(to);
   }
@@ -1346,9 +1360,31 @@
     Base::StoreCompressedPointerNoBarrier(
         Types::GetWeakPropertyPtr(to), OFFSET_OF(UntaggedWeakProperty, value_),
         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());
     Base::EnqueueWeakProperty(from);
   }
 
+  void CopyWeakReference(typename Types::WeakReference from,
+                         typename Types::WeakReference to) {
+    // We store `null` as target and let the main algorithm know that
+    // we should check reachability of the target again after the fixpoint (if
+    // it became reachable, forward the target).
+    Base::StoreCompressedPointerNoBarrier(
+        Types::GetWeakReferencePtr(to),
+        OFFSET_OF(UntaggedWeakReference, target_), Object::null());
+    // Type argument should always be copied.
+    Base::ForwardCompressedPointer(
+        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());
+    Base::EnqueueWeakReference(from);
+  }
+
 #define DEFINE_UNSUPPORTED(clazz)                                              \
   void Copy##clazz(typename Types::clazz from, typename Types::clazz to) {     \
     FATAL("Objects of type " #clazz " should not occur in object graphs");     \
@@ -1437,6 +1473,25 @@
         i++;
       }
     }
+    // After the fix point with [WeakProperty]s do [WeakReference]s.
+    auto& from_weak_reference = WeakReference::Handle(zone_);
+    auto& to_weak_reference = WeakReference::Handle(zone_);
+    auto& weak_reference_target = Object::Handle(zone_);
+    auto& weak_references = fast_forward_map_.raw_weak_references_;
+    for (intptr_t i = 0; i < weak_references.length(); i++) {
+      from_weak_reference = weak_references[i];
+      weak_reference_target =
+          fast_forward_map_.ForwardedObject(from_weak_reference.target());
+      if (weak_reference_target.ptr() != Marker()) {
+        to_weak_reference ^=
+            fast_forward_map_.ForwardedObject(from_weak_reference.ptr());
+
+        // The target became reachable so we'll change the forwarded
+        // [WeakReference]'s target to the new target (it is `null` at this
+        // point).
+        to_weak_reference.set_target(weak_reference_target);
+      }
+    }
     if (root_copy != Marker()) {
       ObjectPtr array;
       array = TryBuildArrayOfObjectsToRehash(
@@ -1586,6 +1641,23 @@
       }
     }
 
+    // After the fix point with [WeakProperty]s do [WeakReference]s.
+    WeakReference& weak_reference = WeakReference::Handle(Z);
+    auto& weak_references = slow_forward_map_.weak_references_;
+    for (intptr_t i = 0; i < weak_references.length(); i++) {
+      const auto& from_weak_reference = *weak_references[i];
+      to = slow_forward_map_.ForwardedObject(from_weak_reference.target());
+      if (to.ptr() != Marker()) {
+        weak_reference ^=
+            slow_forward_map_.ForwardedObject(from_weak_reference.ptr());
+
+        // The target became reachable so we'll change the forwarded
+        // [WeakReference]'s target to the new target (it is `null` at this
+        // point).
+        weak_reference.set_target(to);
+      }
+    }
+
     objects_to_rehash_ =
         BuildArrayOfObjectsToRehash(slow_forward_map_.objects_to_rehash_);
     expandos_to_rehash_ =
@@ -1779,6 +1851,7 @@
     MakeUninitializedNewSpaceObjectsGCSafe();
     HandlifyTransferables();
     HandlifyWeakProperties();
+    HandlifyWeakReferences();
     HandlifyExternalTypedData();
     HandlifyObjectsToReHash();
     HandlifyExpandosToReHash();
@@ -1816,6 +1889,10 @@
     Handlify(&fast_object_copy_.fast_forward_map_.raw_weak_properties_,
              &slow_object_copy_.slow_forward_map_.weak_properties_);
   }
+  void HandlifyWeakReferences() {
+    Handlify(&fast_object_copy_.fast_forward_map_.raw_weak_references_,
+             &slow_object_copy_.slow_forward_map_.weak_references_);
+  }
   void HandlifyExternalTypedData() {
     Handlify(&fast_object_copy_.fast_forward_map_.raw_external_typed_data_to_,
              &slow_object_copy_.slow_forward_map_.external_typed_data_);
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index d24df33..210f508 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -1687,6 +1687,19 @@
   jsobj.AddProperty("propertyValue", value_handle);
 }
 
+void WeakReference::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  JSONObject jsobj(stream);
+  PrintSharedInstanceJSON(&jsobj, ref);
+  jsobj.AddProperty("kind", "WeakReference");
+  jsobj.AddServiceId(*this);
+  if (ref) {
+    return;
+  }
+
+  const Object& target_handle = Object::Handle(target());
+  jsobj.AddProperty("target", target_handle);
+}
+
 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 8ce45e3..23f9b4d 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -105,6 +105,7 @@
                               EMIT_FIELD_INIT,
                               EMIT_FIELD_INIT,
                               EMIT_FIELD_INIT,
+                              EMIT_FIELD_INIT,
                               EMIT_FIELD_INIT)
 #undef EMIT_FIELD_INIT
       // Just to prevent a trailing comma.
@@ -140,7 +141,8 @@
 #define EMIT_FIELD_NAME(type, name) #name "_",
         OBJECT_STORE_FIELD_LIST(
             EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
-            EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME)
+            EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
+            EMIT_FIELD_NAME)
 #undef EMIT_FIELD_NAME
     };
     ObjectPtr* current = from();
@@ -210,6 +212,15 @@
   return result.ptr();
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+static void DisableDebuggingAndInlining(const Function& function) {
+  if (FLAG_async_debugger) {
+    function.set_is_debuggable(false);
+    function.set_is_inlinable(false);
+  }
+}
+#endif  // DART_PRECOMPILED_RUNTIME
+
 void ObjectStore::InitKnownObjects() {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
@@ -251,11 +262,16 @@
                                      function_name, 0, 3, Object::null_array());
   ASSERT(!function.IsNull());
   set_complete_on_async_return(function);
-  if (FLAG_async_debugger) {
-    // Disable debugging and inlining the _CompleteOnAsyncReturn function.
-    function.set_is_debuggable(false);
-    function.set_is_inlinable(false);
-  }
+  DisableDebuggingAndInlining(function);
+
+  function_name =
+      async_lib.PrivateName(Symbols::_CompleteWithNoFutureOnAsyncReturn());
+  ASSERT(!function_name.IsNull());
+  function = Resolver::ResolveStatic(async_lib, Object::null_string(),
+                                     function_name, 0, 3, Object::null_array());
+  ASSERT(!function.IsNull());
+  set_complete_with_no_future_on_async_return(function);
+  DisableDebuggingAndInlining(function);
 
   function_name = async_lib.PrivateName(Symbols::_CompleteOnAsyncError());
   ASSERT(!function_name.IsNull());
@@ -263,11 +279,7 @@
                                      function_name, 0, 4, Object::null_array());
   ASSERT(!function.IsNull());
   set_complete_on_async_error(function);
-  if (FLAG_async_debugger) {
-    // Disable debugging and inlining the _CompleteOnAsyncError function.
-    function.set_is_debuggable(false);
-    function.set_is_inlinable(false);
-  }
+  DisableDebuggingAndInlining(function);
 
   cls =
       async_lib.LookupClassAllowPrivate(Symbols::_AsyncStarStreamController());
@@ -283,8 +295,7 @@
       if (function.IsNull()) {
         break;
       }
-      function.set_is_debuggable(false);
-      function.set_is_inlinable(false);
+      DisableDebuggingAndInlining(function);
     }
   }
 
@@ -452,6 +463,13 @@
   }
 }
 
+void ObjectStore::LazyInitFfiMembers() {
+  auto* const thread = Thread::Current();
+  SafepointWriteRwLocker locker(thread,
+                                thread->isolate_group()->program_lock());
+  // TODO(http://dartbug.com/47777): Implement finalizers.
+}
+
 void ObjectStore::LazyInitIsolateMembers() {
   auto* const thread = Thread::Current();
   SafepointWriteRwLocker locker(thread,
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 3d77c61..f86b8c5 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -43,7 +43,8 @@
 // LAZY_ISOLATE - needs lazy init getter for a "dart:isolate" member
 // LAZY_INTERNAL - needs lazy init getter for a "dart:_internal" member
 #define OBJECT_STORE_FIELD_LIST(R_, RW, ARW_RELAXED, ARW_AR, LAZY_CORE,        \
-                                LAZY_ASYNC, LAZY_ISOLATE, LAZY_INTERNAL)       \
+                                LAZY_ASYNC, LAZY_ISOLATE, LAZY_INTERNAL,       \
+                                LAZY_FFI)                                      \
   LAZY_CORE(Class, list_class)                                                 \
   LAZY_CORE(Type, non_nullable_list_rare_type)                                 \
   LAZY_CORE(Type, non_nullable_map_rare_type)                                  \
@@ -124,6 +125,7 @@
   RW(Class, error_class)                                                       \
   RW(Class, expando_class)                                                     \
   RW(Class, weak_property_class)                                               \
+  RW(Class, weak_reference_class)                                              \
   ARW_AR(Array, symbol_table)                                                  \
   RW(Array, canonical_types)                                                   \
   RW(Array, canonical_function_types)                                          \
@@ -159,6 +161,7 @@
   RW(Function, simple_instance_of_false_function)                              \
   RW(Function, async_star_move_next_helper)                                    \
   RW(Function, complete_on_async_return)                                       \
+  RW(Function, complete_with_no_future_on_async_return)                        \
   RW(Function, complete_on_async_error)                                        \
   RW(Class, async_star_stream_controller)                                      \
   ARW_RELAXED(Smi, future_timeout_future_index)                                \
@@ -206,6 +209,7 @@
   RW(Code, allocate_float64x2_array_stub)                                      \
   RW(Code, allocate_closure_stub)                                              \
   RW(Code, allocate_context_stub)                                              \
+  RW(Code, allocate_growable_array_stub)                                       \
   RW(Code, allocate_object_stub)                                               \
   RW(Code, allocate_object_parametrized_stub)                                  \
   RW(Code, allocate_unhandled_exception_stub)                                  \
@@ -236,7 +240,6 @@
   RW(GrowableObjectArray, ffi_callback_functions)                              \
   RW(Class, ffi_pointer_class)                                                 \
   RW(Class, ffi_native_type_class)                                             \
-  RW(Object, ffi_as_function_internal)                                         \
   // Please remember the last entry must be referred in the 'to' function below.
 
 #define OBJECT_STORE_STUB_CODE_LIST(DO)                                        \
@@ -282,6 +285,7 @@
   DO(allocate_float64x2_array_stub, AllocateFloat64x2Array)                    \
   DO(allocate_closure_stub, AllocateClosure)                                   \
   DO(allocate_context_stub, AllocateContext)                                   \
+  DO(allocate_growable_array_stub, AllocateGrowableArray)                      \
   DO(allocate_object_stub, AllocateObject)                                     \
   DO(allocate_object_parametrized_stub, AllocateObjectParameterized)           \
   DO(allocate_unhandled_exception_stub, AllocateUnhandledException)            \
@@ -422,6 +426,8 @@
   DECLARE_LAZY_INIT_GETTER(Type, name, LazyInitIsolateMembers)
 #define DECLARE_LAZY_INIT_INTERNAL_GETTER(Type, name)                          \
   DECLARE_LAZY_INIT_GETTER(Type, name, LazyInitInternalMembers)
+#define DECLARE_LAZY_INIT_FFI_GETTER(Type, name)                               \
+  DECLARE_LAZY_INIT_GETTER(Type, name, LazyInitFfiMembers)
   OBJECT_STORE_FIELD_LIST(DECLARE_GETTER,
                           DECLARE_GETTER_AND_SETTER,
                           DECLARE_RELAXED_ATOMIC_GETTER_AND_SETTER,
@@ -429,7 +435,8 @@
                           DECLARE_LAZY_INIT_CORE_GETTER,
                           DECLARE_LAZY_INIT_ASYNC_GETTER,
                           DECLARE_LAZY_INIT_ISOLATE_GETTER,
-                          DECLARE_LAZY_INIT_INTERNAL_GETTER)
+                          DECLARE_LAZY_INIT_INTERNAL_GETTER,
+                          DECLARE_LAZY_INIT_FFI_GETTER)
 #undef DECLARE_OFFSET
 #undef DECLARE_GETTER
 #undef DECLARE_GETTER_AND_SETTER
@@ -489,6 +496,7 @@
  private:
   void LazyInitCoreMembers();
   void LazyInitAsyncMembers();
+  void LazyInitFfiMembers();
   void LazyInitIsolateMembers();
   void LazyInitInternalMembers();
 
@@ -508,12 +516,13 @@
                           DECLARE_LAZY_OBJECT_STORE_FIELD,
                           DECLARE_LAZY_OBJECT_STORE_FIELD,
                           DECLARE_LAZY_OBJECT_STORE_FIELD,
+                          DECLARE_LAZY_OBJECT_STORE_FIELD,
                           DECLARE_LAZY_OBJECT_STORE_FIELD)
 #undef DECLARE_OBJECT_STORE_FIELD
 #undef DECLARE_ATOMIC_OBJECT_STORE_FIELD
 #undef DECLARE_LAZY_OBJECT_STORE_FIELD
   ObjectPtr* to() {
-    return reinterpret_cast<ObjectPtr*>(&ffi_as_function_internal_);
+    return reinterpret_cast<ObjectPtr*>(&ffi_native_type_class_);
   }
   ObjectPtr* to_snapshot(Snapshot::Kind kind) {
     switch (kind) {
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index b2dce5c..ac5c703 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3643,7 +3643,7 @@
     weak.set_key(key);
     weak.set_value(value);
   }
-  GCTestHelper::CollectAllGarbage();
+  GCTestHelper::CollectNewSpace();
   EXPECT(weak.key() != Object::null());
   EXPECT(weak.value() != Object::null());
 }
@@ -3668,7 +3668,7 @@
     weak2.set_key(key2);
     weak2.set_value(value2);
   }
-  GCTestHelper::CollectAllGarbage();
+  GCTestHelper::CollectNewSpace();
   EXPECT(weak1.key() != Object::null());
   EXPECT(weak1.value() != Object::null());
   EXPECT(weak2.key() != Object::null());
@@ -3693,7 +3693,7 @@
     weak2.set_key(key);
     weak2.set_value(value2);
   }
-  GCTestHelper::CollectAllGarbage();
+  GCTestHelper::CollectNewSpace();
   EXPECT(weak1.key() != Object::null());
   EXPECT(weak1.value() != Object::null());
   EXPECT(weak2.key() != Object::null());
@@ -3783,7 +3783,7 @@
     key ^= OneByteString::null();
     value ^= OneByteString::null();
   }
-  GCTestHelper::CollectAllGarbage();
+  GCTestHelper::CollectNewSpace();
   EXPECT(weak.key() == Object::null());
   EXPECT(weak.value() == Object::null());
 }
@@ -3806,7 +3806,7 @@
     weak2.set_key(key);
     weak2.set_value(value2);
   }
-  GCTestHelper::CollectAllGarbage();
+  GCTestHelper::CollectNewSpace();
   EXPECT(weak1.key() == Object::null());
   EXPECT(weak1.value() == Object::null());
   EXPECT(weak2.key() == Object::null());
@@ -3857,6 +3857,154 @@
   EXPECT(weak2.value() == Object::null());
 }
 
+static void WeakReference_PreserveOne(Thread* thread, Heap::Space space) {
+  auto& weak = WeakReference::Handle();
+  const auto& target = String::Handle(OneByteString::New("target", space));
+  {
+    HANDLESCOPE(thread);
+    ObjectStore* object_store = thread->isolate_group()->object_store();
+    const auto& type_arguments =
+        TypeArguments::Handle(object_store->type_argument_double());
+    weak ^= WeakReference::New(space);
+    weak.set_target(target);
+    weak.SetTypeArguments(type_arguments);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  EXPECT(weak.target() != Object::null());
+  EXPECT(weak.GetTypeArguments() != Object::null());
+}
+
+ISOLATE_UNIT_TEST_CASE(WeakReference_PreserveOne_NewSpace) {
+  WeakReference_PreserveOne(thread, Heap::kNew);
+}
+
+ISOLATE_UNIT_TEST_CASE(WeakReference_PreserveOne_OldSpace) {
+  WeakReference_PreserveOne(thread, Heap::kOld);
+}
+
+static void WeakReference_ClearOne(Thread* thread, Heap::Space space) {
+  auto& weak = WeakReference::Handle();
+  {
+    HANDLESCOPE(thread);
+    const auto& target = String::Handle(OneByteString::New("target", space));
+    ObjectStore* object_store = thread->isolate_group()->object_store();
+    const auto& type_arguments =
+        TypeArguments::Handle(object_store->type_argument_double());
+    weak ^= WeakReference::New(space);
+    weak.set_target(target);
+    weak.SetTypeArguments(type_arguments);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  EXPECT(weak.target() == Object::null());
+  EXPECT(weak.GetTypeArguments() != Object::null());
+}
+
+ISOLATE_UNIT_TEST_CASE(WeakReference_ClearOne_NewSpace) {
+  WeakReference_ClearOne(thread, Heap::kNew);
+}
+
+ISOLATE_UNIT_TEST_CASE(WeakReference_ClearOne_OldSpace) {
+  WeakReference_ClearOne(thread, Heap::kOld);
+}
+
+static void WeakReference_Clear_ReachableThroughWeakProperty(
+    Thread* thread,
+    Heap::Space space) {
+  auto& weak_property = WeakProperty::Handle();
+  const auto& key = String::Handle(OneByteString::New("key", space));
+  {
+    HANDLESCOPE(thread);
+    ObjectStore* object_store = thread->isolate_group()->object_store();
+    const auto& type_arguments =
+        TypeArguments::Handle(object_store->type_argument_double());
+    const auto& weak_reference =
+        WeakReference::Handle(WeakReference::New(space));
+    const auto& target = String::Handle(OneByteString::New("target", space));
+    weak_reference.set_target(target);
+    weak_reference.SetTypeArguments(type_arguments);
+
+    weak_property ^= WeakProperty::New(space);
+    weak_property.set_key(key);
+    weak_property.set_value(weak_reference);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  const auto& weak_reference =
+      WeakReference::CheckedHandle(Z, weak_property.value());
+  EXPECT(weak_reference.target() == Object::null());
+  EXPECT(weak_reference.GetTypeArguments() != Object::null());
+}
+
+ISOLATE_UNIT_TEST_CASE(
+    WeakReference_Clear_ReachableThroughWeakProperty_NewSpace) {
+  WeakReference_Clear_ReachableThroughWeakProperty(thread, Heap::kNew);
+}
+
+ISOLATE_UNIT_TEST_CASE(
+    WeakReference_Clear_ReachableThroughWeakProperty_OldSpace) {
+  WeakReference_Clear_ReachableThroughWeakProperty(thread, Heap::kOld);
+}
+
+static void WeakReference_Preserve_ReachableThroughWeakProperty(
+    Thread* thread,
+    Heap::Space space) {
+  auto& weak_property = WeakProperty::Handle();
+  const auto& key = String::Handle(OneByteString::New("key", space));
+  const auto& target = String::Handle(OneByteString::New("target", space));
+  {
+    HANDLESCOPE(thread);
+    ObjectStore* object_store = thread->isolate_group()->object_store();
+    const auto& type_arguments =
+        TypeArguments::Handle(object_store->type_argument_double());
+    const auto& weak_reference =
+        WeakReference::Handle(WeakReference::New(space));
+    weak_reference.set_target(target);
+    weak_reference.SetTypeArguments(type_arguments);
+
+    weak_property ^= WeakProperty::New(space);
+    weak_property.set_key(key);
+    weak_property.set_value(weak_reference);
+  }
+
+  if (space == Heap::kNew) {
+    GCTestHelper::CollectNewSpace();
+  } else {
+    GCTestHelper::CollectAllGarbage();
+  }
+
+  const auto& weak_reference =
+      WeakReference::CheckedHandle(Z, weak_property.value());
+  EXPECT(weak_reference.target() != Object::null());
+  EXPECT(weak_reference.GetTypeArguments() != Object::null());
+}
+
+ISOLATE_UNIT_TEST_CASE(
+    WeakReference_Preserve_ReachableThroughWeakProperty_NewSpace) {
+  WeakReference_Preserve_ReachableThroughWeakProperty(thread, Heap::kNew);
+}
+
+ISOLATE_UNIT_TEST_CASE(
+    WeakReference_Preserve_ReachableThroughWeakProperty_OldSpace) {
+  WeakReference_Preserve_ReachableThroughWeakProperty(thread, Heap::kOld);
+}
+
 ISOLATE_UNIT_TEST_CASE(MirrorReference) {
   const MirrorReference& reference =
       MirrorReference::Handle(MirrorReference::New(Object::Handle()));
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index c32aa1e..eb83d68 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -551,6 +551,7 @@
 COMPRESSED_VISITOR(StackTrace)
 COMPRESSED_VISITOR(RegExp)
 COMPRESSED_VISITOR(WeakProperty)
+COMPRESSED_VISITOR(WeakReference)
 COMPRESSED_VISITOR(MirrorReference)
 COMPRESSED_VISITOR(UserTag)
 REGULAR_VISITOR(SubtypeTestCache)
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index ff0a766..5a084c5 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -3285,6 +3285,29 @@
   friend class SlowObjectCopy;  // For OFFSET_OF
 };
 
+class UntaggedWeakReference : public UntaggedInstance {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(WeakReference);
+
+  COMPRESSED_POINTER_FIELD(ObjectPtr, target)
+  VISIT_FROM(target)
+  COMPRESSED_POINTER_FIELD(TypeArgumentsPtr, type_arguments)
+  VISIT_TO(type_arguments)
+  CompressedObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
+
+  // Linked list is chaining all pending weak properties. Not visited by
+  // pointer visitors.
+  CompressedWeakReferencePtr next_;
+
+  friend class GCMarker;
+  template <bool>
+  friend class MarkingVisitorBase;
+  friend class Scavenger;
+  template <bool>
+  friend class ScavengerVisitorBase;
+  friend class FastObjectCopy;  // For OFFSET_OF
+  friend class SlowObjectCopy;  // For OFFSET_OF
+};
+
 // 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/raw_object_fields.cc b/runtime/vm/raw_object_fields.cc
index e59f439..49bae77 100644
--- a/runtime/vm/raw_object_fields.cc
+++ b/runtime/vm/raw_object_fields.cc
@@ -6,7 +6,7 @@
 
 namespace dart {
 
-#if defined(DART_PRECOMPILER) || !defined(DART_PRODUCT)
+#if defined(DART_PRECOMPILER) || !defined(PRODUCT)
 
 #define COMMON_CLASSES_AND_FIELDS(F)                                           \
   F(Class, name_)                                                              \
@@ -193,6 +193,8 @@
   F(RegExp, external_two_byte_sticky_)                                         \
   F(WeakProperty, key_)                                                        \
   F(WeakProperty, value_)                                                      \
+  F(WeakReference, target_)                                                    \
+  F(WeakReference, type_arguments_)                                            \
   F(MirrorReference, referent_)                                                \
   F(UserTag, label_)                                                           \
   F(PointerBase, data_)                                                        \
diff --git a/runtime/vm/raw_object_fields.h b/runtime/vm/raw_object_fields.h
index be56a51..611f9dd 100644
--- a/runtime/vm/raw_object_fields.h
+++ b/runtime/vm/raw_object_fields.h
@@ -19,7 +19,7 @@
 
 namespace dart {
 
-#if defined(DART_PRECOMPILER) || !defined(DART_PRODUCT)
+#if defined(DART_PRECOMPILER) || !defined(PRODUCT)
 
 class OffsetsTable : public ZoneAllocated {
  public:
diff --git a/runtime/vm/regexp_assembler_ir.cc b/runtime/vm/regexp_assembler_ir.cc
index 60dc2c6..36c5414 100644
--- a/runtime/vm/regexp_assembler_ir.cc
+++ b/runtime/vm/regexp_assembler_ir.cc
@@ -299,14 +299,12 @@
 
   const Object& retval =
       Object::Handle(zone, DartEntry::InvokeFunction(fun, args));
-  if (retval.IsUnwindError()) {
-    Exceptions::PropagateError(Error::Cast(retval));
+  if (retval.IsLanguageError()) {
+    Exceptions::ThrowCompileTimeError(LanguageError::Cast(retval));
+    UNREACHABLE();
   }
   if (retval.IsError()) {
-    const Error& error = Error::Cast(retval);
-    OS::PrintErr("%s\n", error.ToErrorCString());
-    // Should never happen.
-    UNREACHABLE();
+    Exceptions::PropagateError(Error::Cast(retval));
   }
 
   if (retval.IsNull()) {
diff --git a/runtime/vm/runtime_entry_riscv.cc b/runtime/vm/runtime_entry_riscv.cc
index 8dfab67..3987176 100644
--- a/runtime/vm/runtime_entry_riscv.cc
+++ b/runtime/vm/runtime_entry_riscv.cc
@@ -50,10 +50,11 @@
                                 intptr_t argument_count) {
   if (runtime_entry->is_leaf()) {
     ASSERT(argument_count == runtime_entry->argument_count());
-    // Caller is responsible for either using CallRuntimeScore or manually
-    // saving PP (C volatile register) and SP (altered by alignment).
     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()));
@@ -61,6 +62,8 @@
     __ 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));
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 553097b..336cd88 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -2857,6 +2857,51 @@
         NULL,
 };
 
+static void CollectStringifiedType(Zone* zone,
+                                   const AbstractType& type,
+                                   const GrowableObjectArray& output) {
+  Instance& instance = Instance::Handle(zone);
+  if (type.IsFunctionType()) {
+    // The closure class
+    // (IsolateGroup::Current()->object_store()->closure_class())
+    // is statically typed weird (the call method redirects to itself)
+    // and the type is therefore not useful for the CFE. We use null instead.
+    output.Add(instance);
+    return;
+  }
+  if (type.IsDynamicType()) {
+    // Dynamic is weird in that it seems to have a class with no name and a
+    // library called something like '7189777121420'. We use null instead.
+    output.Add(instance);
+    return;
+  }
+  if (type.IsTypeParameter() && type.IsAbstractType()) {
+    // Calling type_class on an abstract type parameter will crash the VM.
+    // We use null instead.
+    output.Add(instance);
+    return;
+  }
+  const Class& cls = Class::Handle(type.type_class());
+  const Library& lib = Library::Handle(zone, cls.library());
+
+  instance ^= lib.url();
+  output.Add(instance);
+
+  instance ^= cls.ScrubbedName();
+  output.Add(instance);
+
+  instance ^= Smi::New((intptr_t)type.nullability());
+  output.Add(instance);
+
+  const TypeArguments& srcArguments = TypeArguments::Handle(type.arguments());
+  instance ^= Smi::New(srcArguments.Length());
+  output.Add(instance);
+  for (int i = 0; i < srcArguments.Length(); i++) {
+    const AbstractType& src_type = AbstractType::Handle(srcArguments.TypeAt(i));
+    CollectStringifiedType(zone, src_type, output);
+  }
+}
+
 static void BuildExpressionEvaluationScope(Thread* thread, JSONStream* js) {
   if (CheckDebuggerDisabled(thread, js)) {
     return;
@@ -2877,6 +2922,10 @@
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
   const GrowableObjectArray& type_params_names =
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  const GrowableObjectArray& type_params_bounds =
+      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  const GrowableObjectArray& type_params_defaults =
+      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
   String& klass_name = String::Handle(zone);
   String& method_name = String::Handle(zone);
   String& library_uri = String::Handle(zone);
@@ -2896,7 +2945,8 @@
     }
 
     ActivationFrame* frame = stack->FrameAt(framePos);
-    frame->BuildParameters(param_names, param_values, type_params_names);
+    frame->BuildParameters(param_names, param_values, type_params_names,
+                           type_params_bounds, type_params_defaults);
 
     if (frame->function().is_static()) {
       const Class& cls = Class::Handle(zone, frame->function().Owner());
@@ -2976,6 +3026,28 @@
       jsonParamNames.AddValue(param_name.ToCString());
     }
   }
+  {
+    const JSONArray jsonParamTypes(&report, "param_types");
+    Object& obj = Object::Handle();
+    Instance& instance = Instance::Handle();
+    const GrowableObjectArray& param_types =
+        GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+    AbstractType& type = AbstractType::Handle();
+    for (intptr_t i = 0; i < param_names.Length(); i++) {
+      obj = param_values.At(i);
+      if (obj.IsNull()) {
+        param_types.Add(obj);
+      } else if (obj.IsInstance()) {
+        instance ^= param_values.At(i);
+        type = instance.GetType(Heap::kNew);
+        CollectStringifiedType(zone, type, param_types);
+      }
+    }
+    for (intptr_t i = 0; i < param_types.Length(); i++) {
+      instance ^= param_types.At(i);
+      jsonParamTypes.AddValue(instance.ToCString());
+    }
+  }
 
   {
     JSONArray jsonTypeParamsNames(&report, "type_params_names");
@@ -2985,6 +3057,36 @@
       jsonTypeParamsNames.AddValue(type_param_name.ToCString());
     }
   }
+  {
+    const JSONArray jsonParamTypes(&report, "type_params_bounds");
+    const GrowableObjectArray& type_params_bounds_strings =
+        GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+    AbstractType& type = AbstractType::Handle();
+    for (intptr_t i = 0; i < type_params_bounds.Length(); i++) {
+      type ^= type_params_bounds.At(i);
+      CollectStringifiedType(zone, type, type_params_bounds_strings);
+    }
+    Instance& instance = Instance::Handle();
+    for (intptr_t i = 0; i < type_params_bounds_strings.Length(); i++) {
+      instance ^= type_params_bounds_strings.At(i);
+      jsonParamTypes.AddValue(instance.ToCString());
+    }
+  }
+  {
+    const JSONArray jsonParamTypes(&report, "type_params_defaults");
+    const GrowableObjectArray& type_params_defaults_strings =
+        GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+    AbstractType& type = AbstractType::Handle();
+    for (intptr_t i = 0; i < type_params_defaults.Length(); i++) {
+      type ^= type_params_defaults.At(i);
+      CollectStringifiedType(zone, type, type_params_defaults_strings);
+    }
+    Instance& instance = Instance::Handle();
+    for (intptr_t i = 0; i < type_params_defaults_strings.Length(); i++) {
+      instance ^= type_params_defaults_strings.At(i);
+      jsonParamTypes.AddValue(instance.ToCString());
+    }
+  }
   report.AddProperty("libraryUri", library_uri.ToCString());
   if (!klass_name.IsNull()) {
     report.AddProperty("klass", klass_name.ToCString());
@@ -3036,7 +3138,10 @@
     RUNNABLE_ISOLATE_PARAMETER,
     new StringParameter("expression", true),
     new StringParameter("definitions", false),
+    new StringParameter("definitionTypes", false),
     new StringParameter("typeDefinitions", false),
+    new StringParameter("typeBounds", false),
+    new StringParameter("typeDefaults", false),
     new StringParameter("libraryUri", true),
     new StringParameter("klass", false),
     new BoolParameter("isStatic", false),
@@ -3070,6 +3175,12 @@
     PrintInvalidParamError(js, "definitions");
     return;
   }
+  const GrowableObjectArray& param_types =
+      GrowableObjectArray::Handle(thread->zone(), GrowableObjectArray::New());
+  if (!ParseCSVList(js->LookupParam("definitionTypes"), param_types)) {
+    PrintInvalidParamError(js, "definitionTypes");
+    return;
+  }
 
   const GrowableObjectArray& type_params =
       GrowableObjectArray::Handle(thread->zone(), GrowableObjectArray::New());
@@ -3077,6 +3188,18 @@
     PrintInvalidParamError(js, "typedDefinitions");
     return;
   }
+  const GrowableObjectArray& type_bounds =
+      GrowableObjectArray::Handle(thread->zone(), GrowableObjectArray::New());
+  if (!ParseCSVList(js->LookupParam("typeBounds"), type_bounds)) {
+    PrintInvalidParamError(js, "typeBounds");
+    return;
+  }
+  const GrowableObjectArray& type_defaults =
+      GrowableObjectArray::Handle(thread->zone(), GrowableObjectArray::New());
+  if (!ParseCSVList(js->LookupParam("typeDefaults"), type_defaults)) {
+    PrintInvalidParamError(js, "typeDefaults");
+    return;
+  }
 
   const uint8_t* kernel_buffer = Service::dart_library_kernel();
   const intptr_t kernel_buffer_len = Service::dart_library_kernel_length();
@@ -3085,7 +3208,10 @@
       KernelIsolate::CompileExpressionToKernel(
           kernel_buffer, kernel_buffer_len, js->LookupParam("expression"),
           Array::Handle(Array::MakeFixedLength(params)),
+          Array::Handle(Array::MakeFixedLength(param_types)),
           Array::Handle(Array::MakeFixedLength(type_params)),
+          Array::Handle(Array::MakeFixedLength(type_bounds)),
+          Array::Handle(Array::MakeFixedLength(type_defaults)),
           js->LookupParam("libraryUri"), js->LookupParam("klass"),
           js->LookupParam("method"), is_static);
 
@@ -3145,6 +3271,10 @@
   }
   const GrowableObjectArray& type_params_names =
       GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  const GrowableObjectArray& type_params_bounds =
+      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
+  const GrowableObjectArray& type_params_defaults =
+      GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
 
   const ExternalTypedData& kernel_data = ExternalTypedData::Handle(
       zone, DecodeKernelBuffer(js->LookupParam("kernelBytes")));
@@ -3160,7 +3290,8 @@
     ActivationFrame* frame = stack->FrameAt(frame_pos);
     TypeArguments& type_arguments = TypeArguments::Handle(
         zone,
-        frame->BuildParameters(param_names, param_values, type_params_names));
+        frame->BuildParameters(param_names, param_values, type_params_names,
+                               type_params_bounds, type_params_defaults));
 
     const Object& result = Object::Handle(
         zone,
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index ed6e095..368f70b 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1903,7 +1903,7 @@
 _@Code_ is a reference to a _Code_ object.
 
 ```
-class Code extends @Object {
+class Code extends Object {
   // A name for this code object.
   string name;
 
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index f2a1286..b8b855d 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -49,19 +49,40 @@
 
 #define VM_SERVICE_METHOD_CALL_FROM_NATIVE 5
 
-static ArrayPtr MakeServiceControlMessage(Dart_Port port_id,
-                                          intptr_t code,
-                                          const String& name) {
-  const Array& list = Array::Handle(Array::New(4));
-  ASSERT(!list.IsNull());
-  const Integer& code_int = Integer::Handle(Integer::New(code));
-  const Integer& port_int = Integer::Handle(Integer::New(port_id));
-  const SendPort& send_port = SendPort::Handle(SendPort::New(port_id));
-  list.SetAt(0, code_int);
-  list.SetAt(1, port_int);
-  list.SetAt(2, send_port);
-  list.SetAt(3, name);
-  return list.ptr();
+bool ServiceIsolate::SendServiceControlMessage(Thread* thread,
+                                               Dart_Port port_id,
+                                               intptr_t code,
+                                               const char* name) {
+  Dart_CObject ccode;
+  ccode.type = Dart_CObject_kInt32;
+  ccode.value.as_int32 = code;
+
+  Dart_CObject port_int;
+  port_int.type = Dart_CObject_kInt64;
+  port_int.value.as_int64 = port_id;
+
+  Dart_CObject send_port;
+  send_port.type = Dart_CObject_kSendPort;
+  send_port.value.as_send_port.id = port_id;
+  send_port.value.as_send_port.origin_id = port_id;
+
+  Dart_CObject cname;
+  cname.type = Dart_CObject_kString;
+  cname.value.as_string = const_cast<char*>(name);
+
+  Dart_CObject* values[4];
+  values[0] = &ccode;
+  values[1] = &port_int;
+  values[2] = &send_port;
+  values[3] = &cname;
+
+  Dart_CObject message;
+  message.type = Dart_CObject_kArray;
+  message.value.as_array.length = 4;
+  message.value.as_array.values = values;
+
+  return PortMap::PostMessage(WriteApiMessage(thread->zone(), &message, port_,
+                                              Message::kNormalPriority));
 }
 
 static ArrayPtr MakeServerControlMessage(const SendPort& sp,
@@ -217,21 +238,16 @@
   if (Dart::VmIsolateNameEquals(isolate->name())) {
     return false;
   }
-  ASSERT(isolate != NULL);
-  HANDLESCOPE(thread);
-  const String& name = String::Handle(String::New(isolate->name()));
-  ASSERT(!name.IsNull());
-  const Array& list = Array::Handle(MakeServiceControlMessage(
-      Dart_GetMainPortId(), VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID, name));
-  ASSERT(!list.IsNull());
+
+  Dart_Port main_port = Dart_GetMainPortId();
   if (FLAG_trace_service) {
     OS::PrintErr(DART_VM_SERVICE_ISOLATE_NAME ": Isolate %s %" Pd64
                                               " registered.\n",
-                 name.ToCString(), Dart_GetMainPortId());
+                 isolate->name(), main_port);
   }
-  bool result = PortMap::PostMessage(WriteMessage(
-      /* can_send_any_object */ false, /* same_group */ false, list, port_,
-      Message::kNormalPriority));
+  bool result = SendServiceControlMessage(thread, main_port,
+                                          VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID,
+                                          isolate->name());
   isolate->set_is_service_registered(true);
   return result;
 }
@@ -245,21 +261,17 @@
   if (Dart::VmIsolateNameEquals(isolate->name())) {
     return false;
   }
-  ASSERT(isolate != NULL);
-  HANDLESCOPE(thread);
-  const String& name = String::Handle(String::New(isolate->name()));
-  ASSERT(!name.IsNull());
-  const Array& list = Array::Handle(MakeServiceControlMessage(
-      Dart_GetMainPortId(), VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID, name));
-  ASSERT(!list.IsNull());
+
+  Dart_Port main_port = Dart_GetMainPortId();
   if (FLAG_trace_service) {
     OS::PrintErr(DART_VM_SERVICE_ISOLATE_NAME ": Isolate %s %" Pd64
                                               " deregistered.\n",
-                 name.ToCString(), Dart_GetMainPortId());
+                 isolate->name(), main_port);
   }
-  return PortMap::PostMessage(WriteMessage(
-      /* can_send_any_object */ false, /* same_group */ false, list, port_,
-      Message::kNormalPriority));
+
+  return SendServiceControlMessage(thread, main_port,
+                                   VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID,
+                                   isolate->name());
 }
 
 void ServiceIsolate::SendServiceExitMessage() {
diff --git a/runtime/vm/service_isolate.h b/runtime/vm/service_isolate.h
index 0fc018a..4dff100 100644
--- a/runtime/vm/service_isolate.h
+++ b/runtime/vm/service_isolate.h
@@ -45,6 +45,10 @@
   static void Run();
   static bool SendIsolateStartupMessage();
   static bool SendIsolateShutdownMessage();
+  static bool SendServiceControlMessage(Thread* thread,
+                                        Dart_Port port_id,
+                                        intptr_t code,
+                                        const char* name);
   static void SendServiceExitMessage();
   static void Shutdown();
 
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index 583e055..9b665c2 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -55,7 +55,8 @@
 // Instance caches library and field references.
 // This way we don't have to do the look-ups for every frame in the stack.
 CallerClosureFinder::CallerClosureFinder(Zone* zone)
-    : receiver_context_(Context::Handle(zone)),
+    : closure_(Closure::Handle(zone)),
+      receiver_context_(Context::Handle(zone)),
       receiver_function_(Function::Handle(zone)),
       parent_function_(Function::Handle(zone)),
       context_entry_(Object::Handle(zone)),
@@ -210,6 +211,12 @@
 
 ClosurePtr CallerClosureFinder::GetCallerInFutureListener(
     const Object& future_listener) {
+  closure_ = GetCallerInFutureListenerInternal(future_listener);
+  return UnwrapAsyncThen(closure_);
+}
+
+ClosurePtr CallerClosureFinder::GetCallerInFutureListenerInternal(
+    const Object& future_listener) {
   auto value = GetFutureListenerState(future_listener);
 
   // If the _FutureListener is a `then`, `catchError`, or `whenComplete`
@@ -227,6 +234,26 @@
 }
 
 ClosurePtr CallerClosureFinder::FindCaller(const Closure& receiver_closure) {
+  closure_ = FindCallerInternal(receiver_closure);
+  return UnwrapAsyncThen(closure_);
+}
+
+ClosurePtr CallerClosureFinder::UnwrapAsyncThen(const Closure& closure) {
+  if (closure.IsNull()) return closure.ptr();
+
+  receiver_function_ = closure.function();
+  receiver_function_ = receiver_function_.parent_function();
+  if (receiver_function_.recognized_kind() ==
+      MethodRecognizer::kAsyncThenWrapperHelper) {
+    receiver_context_ = closure.context();
+    RELEASE_ASSERT(receiver_context_.num_variables() == 1);
+    return Closure::RawCast(receiver_context_.At(0));
+  }
+  return closure.ptr();
+}
+
+ClosurePtr CallerClosureFinder::FindCallerInternal(
+    const Closure& receiver_closure) {
   receiver_function_ = receiver_closure.function();
   receiver_context_ = receiver_closure.context();
 
@@ -358,23 +385,18 @@
   ASSERT(function.IsAsyncClosure() || function.IsAsyncGenClosure());
 
   // The callee has function signature
-  //   :async_op([result, exception, stack])
-  // So we are guaranteed to
-  //   a) have only tagged arguments on the stack until we find the :async_op
-  //      closure, and
-  //   b) find the async closure.
-  const intptr_t kNumClosureAndArgs = 4;
-  auto& closure = Closure::Handle();
-  for (intptr_t i = 0; i < kNumClosureAndArgs; i++) {
-    ObjectPtr arg = last_object_in_caller[i];
-    if (arg->IsHeapObject() && arg->GetClassId() == kClosureCid) {
-      closure = Closure::RawCast(arg);
-      if (closure.function() == function.ptr()) {
-        return closure.ptr();
-      }
+  //   :async_op(result_or_exception, stack)
+  // so the "this" closure is the 3rd argument.
+  ObjectPtr arg = last_object_in_caller[2];
+  if (arg->IsHeapObject() && arg->GetClassId() == kClosureCid) {
+    auto& closure = Closure::Handle();
+    closure = Closure::RawCast(arg);
+    if (closure.function() == function.ptr()) {
+      return closure.ptr();
     }
   }
-  UNREACHABLE();
+  ASSERT(arg == Symbols::OptimizedOut().ptr());
+  return Closure::null();
 }
 
 ClosurePtr StackTraceUtils::ClosureFromFrameFunction(
@@ -395,13 +417,10 @@
   if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
     // Next, look up caller's closure on the stack and walk backwards
     // through the yields.
-    //
-    // Due the async/async* closures having optional parameters, the
-    // caller-frame's pushed arguments includes the closure and should never be
-    // modified (even in the event of deopts).
     ObjectPtr* last_caller_obj =
         reinterpret_cast<ObjectPtr*>(frame->GetCallerSp());
     closure = FindClosureInFrame(last_caller_obj, function);
+    if (closure.IsNull()) return Closure::null();
 
     // If this async function hasn't yielded yet, we're still dealing with a
     // normal stack. Continue to next frame as usual.
@@ -589,13 +608,11 @@
         function.parent_function() != Function::null()) {
       if (async_function.ptr() == function.parent_function()) {
         if (function.IsAsyncClosure() || function.IsAsyncGenClosure()) {
-          // Due the async/async* closures having optional parameters, the
-          // caller-frame's pushed arguments includes the closure and should
-          // never be modified (even in the event of deopts).
           ObjectPtr* last_caller_obj =
               reinterpret_cast<ObjectPtr*>(frame->GetCallerSp());
           closure = FindClosureInFrame(last_caller_obj, function);
-          if (CallerClosureFinder::IsRunningAsync(closure)) {
+          if (!closure.IsNull() &&
+              CallerClosureFinder::IsRunningAsync(closure)) {
             *sync_async_end = false;
             return frame_count;
           }
diff --git a/runtime/vm/stack_trace.h b/runtime/vm/stack_trace.h
index c2eb02a..566a0a8 100644
--- a/runtime/vm/stack_trace.h
+++ b/runtime/vm/stack_trace.h
@@ -56,6 +56,11 @@
   static bool IsRunningAsync(const Closure& receiver_closure);
 
  private:
+  ClosurePtr FindCallerInternal(const Closure& receiver_closure);
+  ClosurePtr GetCallerInFutureListenerInternal(const Object& future_listener);
+  ClosurePtr UnwrapAsyncThen(const Closure& closure);
+
+  Closure& closure_;
   Context& receiver_context_;
   Function& receiver_function_;
   Function& parent_function_;
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 6303447..be40522 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -172,6 +172,10 @@
   switch (cls.id()) {
     case kArrayCid:
       return object_store->allocate_array_stub();
+#if !defined(TARGET_ARCH_IA32)
+    case kGrowableObjectArrayCid:
+      return object_store->allocate_growable_array_stub();
+#endif  // !defined(TARGET_ARCH_IA32)
     case kContextCid:
       return object_store->allocate_context_stub();
     case kUnhandledExceptionCid:
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index 778e08c..3607cbc 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -52,6 +52,7 @@
   V(AllocateMintSharedWithoutFPURegs)                                          \
   V(AllocateClosure)                                                           \
   V(AllocateContext)                                                           \
+  V(AllocateGrowableArray)                                                     \
   V(AllocateObject)                                                            \
   V(AllocateObjectParameterized)                                               \
   V(AllocateObjectSlow)                                                        \
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 5c8db08..7784041 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -102,7 +102,6 @@
   V(EvalSourceUri, "evaluate:source")                                          \
   V(EvaluateAssertion, "_evaluateAssertion")                                   \
   V(ExceptionHandlers, "ExceptionHandlers")                                    \
-  V(ExceptionParameter, ":exception")                                          \
   V(ExceptionVar, ":exception_var")                                            \
   V(Expando, "Expando")                                                        \
   V(ExprTemp, ":expr_temp")                                                    \
@@ -288,6 +287,7 @@
   V(_CombinatorMirror, "_CombinatorMirror")                                    \
   V(_CompileTimeError, "_CompileTimeError")                                    \
   V(_CompleteOnAsyncReturn, "_completeOnAsyncReturn")                          \
+  V(_CompleteWithNoFutureOnAsyncReturn, "_completeWithNoFutureOnAsyncReturn")  \
   V(_ControllerSubscription, "_ControllerSubscription")                        \
   V(_CompleteOnAsyncError, "_completeOnAsyncError")                            \
   V(_DeletedEnumPrefix, "Deleted enum value from ")                            \
@@ -401,6 +401,7 @@
   V(_Utf8Decoder, "_Utf8Decoder")                                              \
   V(_VariableMirror, "_VariableMirror")                                        \
   V(_WeakProperty, "_WeakProperty")                                            \
+  V(_WeakReferenceImpl, "_WeakReferenceImpl")                                  \
   V(_typedDataBase, "_typedDataBase")                                          \
   V(_classRangeCheck, "_classRangeCheck")                                      \
   V(_ensureScheduleImmediate, "_ensureScheduleImmediate")                      \
@@ -475,6 +476,7 @@
   V(vm_ffi_struct_fields, "vm:ffi:struct-fields")                              \
   V(vm_unsafe_no_interrupts, "vm:unsafe:no-interrupts")                        \
   V(vm_external_name, "vm:external-name")                                      \
+  V(vm_invisible, "vm:invisible")                                              \
   V(vm_testing_print_flow_graph, "vm:testing:print-flow-graph")
 
 // Contains a list of frequently used strings in a canonicalized form. This
diff --git a/runtime/vm/tagged_pointer.h b/runtime/vm/tagged_pointer.h
index c7c8b94..0f53fe7 100644
--- a/runtime/vm/tagged_pointer.h
+++ b/runtime/vm/tagged_pointer.h
@@ -412,6 +412,7 @@
 DEFINE_TAGGED_POINTER(StackTrace, Instance)
 DEFINE_TAGGED_POINTER(RegExp, Instance)
 DEFINE_TAGGED_POINTER(WeakProperty, Instance)
+DEFINE_TAGGED_POINTER(WeakReference, Instance)
 DEFINE_TAGGED_POINTER(MirrorReference, Instance)
 DEFINE_TAGGED_POINTER(UserTag, Instance)
 DEFINE_TAGGED_POINTER(FutureOr, Instance)
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 584cb9c..e21a66c 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -657,10 +657,15 @@
       // Stores into new-space objects don't need a write barrier.
       if (obj->IsSmiOrNewObject()) continue;
 
-      // To avoid adding too much work into the remembered set, skip
+      // To avoid adding too much work into the remembered set, skip large
       // arrays. Write barrier elimination will not remove the barrier
       // if we can trigger GC between array allocation and store.
-      if (obj->GetClassId() == kArrayCid) continue;
+      if (obj->GetClassId() == kArrayCid) {
+        const auto length = Smi::Value(Array::RawCast(obj)->untag()->length());
+        if (length > Array::kMaxLengthForWriteBarrierElimination) {
+          continue;
+        }
+      }
 
       // Dart code won't store into VM-internal objects except Contexts and
       // UnhandledExceptions. This assumption is checked by an assertion in
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 5242592..31187eb 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -648,7 +648,9 @@
         KernelIsolate::CompileExpressionToKernel(
             /* platform_kernel= */ nullptr, /* platform_kernel_size= */ 0,
             expr.ToCString(), param_names, Array::empty_array(),
-            String::Handle(lib.url()).ToCString(), /* klass= */ nullptr,
+            Array::empty_array(), Array::empty_array(), Array::empty_array(),
+            String::Handle(lib.url()).ToCString(),
+            /* klass= */ nullptr,
             /* method= */ nullptr,
             /* is_static= */ true);
     if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
diff --git a/samples-dev/OWNERS b/samples-dev/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/samples-dev/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/samples/OWNERS b/samples/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/samples/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/samples/samples.status b/samples/samples.status
index 6f471b2..f119b0e 100644
--- a/samples/samples.status
+++ b/samples/samples.status
@@ -20,7 +20,7 @@
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Not yet triaged.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 ffi/*: SkipByDesign # FFI skips, see ffi.status
 
 [ $arch != x64 || $compiler != dartk || $system != linux || $hot_reload || $hot_reload_rollback ]
diff --git a/samples_2/OWNERS b/samples_2/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/samples_2/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/samples_2/samples_2.status b/samples_2/samples_2.status
index 6f471b2..f119b0e 100644
--- a/samples_2/samples_2.status
+++ b/samples_2/samples_2.status
@@ -20,7 +20,7 @@
 [ $compiler == none && $runtime == vm && $system == fuchsia ]
 *: Skip # Not yet triaged.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 ffi/*: SkipByDesign # FFI skips, see ffi.status
 
 [ $arch != x64 || $compiler != dartk || $system != linux || $hot_reload || $hot_reload_rollback ]
diff --git a/sdk/OWNERS b/sdk/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/sdk/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/sdk/bin/dart2wasm b/sdk/bin/dart2wasm
new file mode 100755
index 0000000..893fcda
--- /dev/null
+++ b/sdk/bin/dart2wasm
@@ -0,0 +1,48 @@
+#!/usr/bin/env 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.
+
+# Run dart2wasm on the Dart VM. This script assumes the Dart repo'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"
+}
+
+# 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)"
+SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
+
+SDK_ARG="--dart-sdk=$SDK_DIR"
+
+DART="$BIN_DIR/dart"
+
+unset EXTRA_VM_OPTIONS
+declare -a EXTRA_VM_OPTIONS
+
+case $0 in
+  *_developer)
+    EXTRA_VM_OPTIONS+=('--enable_asserts')
+    ;;
+esac
+
+# We allow extra vm options to be passed in through an environment variable.
+if [[ $DART_VM_OPTIONS ]]; then
+  read -a OPTIONS <<< "$DART_VM_OPTIONS"
+  EXTRA_VM_OPTIONS+=("${OPTIONS[@]}")
+fi
+
+DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)"
+
+DART2WASM_COMPILER="$DART_ROOT/pkg/dart2wasm/bin/dart2wasm.dart"
+
+exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DART2WASM_COMPILER" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dart2wasm_developer b/sdk/bin/dart2wasm_developer
new file mode 100755
index 0000000..aabf8ea
--- /dev/null
+++ b/sdk/bin/dart2wasm_developer
@@ -0,0 +1,6 @@
+#!/usr/bin/env 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.
+
+. ${BASH_SOURCE%_developer}
diff --git a/sdk/lib/_http/http.dart b/sdk/lib/_http/http.dart
index fdb4de0..6ea7e64 100644
--- a/sdk/lib/_http/http.dart
+++ b/sdk/lib/_http/http.dart
@@ -53,7 +53,7 @@
 /// ```dart
 /// import 'dart:io';
 ///
-/// Future<void> main() async {
+/// void main() async {
 ///   var server = await HttpServer.bind(InternetAddress.anyIPv6, 80);
 ///   await server.forEach((HttpRequest request) {
 ///     request.response.write('Hello, world!');
@@ -82,7 +82,7 @@
 /// ```dart
 /// import 'dart:io';
 ///
-/// Future<void> main() async {
+/// void main() async {
 ///   var chain =
 ///       Platform.script.resolve('certificates/server_chain.pem').toFilePath();
 ///   var key = Platform.script.resolve('certificates/server_key.pem').toFilePath();
@@ -1516,6 +1516,46 @@
   /// Add credentials to be used for authorizing HTTP requests.
   void addCredentials(Uri url, String realm, HttpClientCredentials credentials);
 
+  /// Sets the function used to create socket connections.
+  ///
+  /// The URL requested (e.g. through [getUrl]) and proxy configuration
+  /// ([f.proxyHost] and [f.proxyPort]) are passed as arguments. [f.proxyHost]
+  /// and [f.proxyPort] will be `null` if the connection is not made through
+  /// a proxy.
+  ///
+  /// Since connections may be reused based on host and port, it is important
+  /// that the function not ignore [f.proxyHost] and [f.proxyPort] if they are
+  /// not `null`. If proxies are not meaningful for the returned [Socket], you
+  /// can set [findProxy] to use a direct connection.
+  ///
+  /// For example:
+  ///
+  /// ```dart
+  /// import "dart:io";
+  ///
+  /// void main() async {
+  ///   HttpClient client = HttpClient()
+  ///     ..connectionFactory = (Uri uri, String? proxyHost, int? proxyPort) {
+  ///         assert(proxyHost == null);
+  ///         assert(proxyPort == null);
+  ///         var address = InternetAddress("/var/run/docker.sock",
+  ///             type: InternetAddressType.unix);
+  ///         return Socket.startConnect(address, 0);
+  ///     }
+  ///     ..findProxy = (Uri uri) => 'DIRECT';
+  ///
+  ///   final request = await client.getUrl(Uri.parse("http://ignored/v1.41/info"));
+  ///   final response = await request.close();
+  ///   print(response.statusCode);
+  ///   await response.drain();
+  ///   client.close();
+  /// }
+  /// ```
+  void set connectionFactory(
+      Future<ConnectionTask<Socket>> Function(
+              Uri url, String? proxyHost, int? proxyPort)?
+          f);
+
   /// Sets the function used to resolve the proxy server to be used for
   /// opening a HTTP connection to the specified [url]. If this
   /// function is not set, direct connections will always be used.
@@ -1648,6 +1688,21 @@
   void set badCertificateCallback(
       bool Function(X509Certificate cert, String host, int port)? callback);
 
+  /// Sets a callback that will be called when new TLS keys are exchanged with
+  /// the server. It will receive one line of text in
+  /// [NSS Key Log Format](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format)
+  /// for each call. Writing these lines to a file will allow tools (such as
+  /// [Wireshark](https://gitlab.com/wireshark/wireshark/-/wikis/TLS#tls-decryption))
+  /// to decrypt communication between the this client and the server. This is
+  /// meant to allow network-level debugging of secure sockets and should not
+  /// be used in production code. For example:
+  ///
+  ///     final log = File('keylog.txt');
+  ///     final client = HttpClient();
+  ///     client.keyLog = (line) => log.writeAsStringSync(line,
+  ///         mode: FileMode.append);
+  void set keyLog(Function(String line)? callback);
+
   /// Shuts down the HTTP client.
   ///
   /// If [force] is `false` (the default) the [HttpClient] will be kept alive
diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart
index 622c662..e1c0d5c 100644
--- a/sdk/lib/_http/http_impl.dart
+++ b/sdk/lib/_http/http_impl.dart
@@ -1094,7 +1094,7 @@
       {_HttpHeaders? initialHeaders})
       : _uri = uri,
         headers = _HttpHeaders(protocolVersion,
-            defaultPortForScheme: uri.scheme == 'https'
+            defaultPortForScheme: uri.isScheme('https')
                 ? HttpClient.defaultHttpsPort
                 : HttpClient.defaultHttpPort,
             initialHeaders: initialHeaders),
@@ -2338,14 +2338,16 @@
   final int port;
   final bool isSecure;
   final SecurityContext? context;
+  final Future<ConnectionTask<Socket>> Function(Uri, String?, int?)?
+      connectionFactory;
   final Set<_HttpClientConnection> _idle = HashSet();
   final Set<_HttpClientConnection> _active = HashSet();
-  final Set<ConnectionTask> _socketTasks = HashSet();
+  final Set<ConnectionTask<Socket>> _socketTasks = HashSet();
   final _pending = ListQueue<void Function()>();
   int _connecting = 0;
 
-  _ConnectionTarget(
-      this.key, this.host, this.port, this.isSecure, this.context);
+  _ConnectionTarget(this.key, this.host, this.port, this.isSecure, this.context,
+      this.connectionFactory);
 
   bool get isEmpty => _idle.isEmpty && _active.isEmpty && _connecting == 0;
 
@@ -2410,8 +2412,8 @@
     }
   }
 
-  Future<_ConnectionInfo> connect(String uriHost, int uriPort, _Proxy proxy,
-      _HttpClient client, _HttpProfileData? profileData) {
+  Future<_ConnectionInfo> connect(Uri uri, String uriHost, int uriPort,
+      _Proxy proxy, _HttpClient client, _HttpProfileData? profileData) {
     if (hasIdle) {
       var connection = takeIdle();
       client._connectionsChanged();
@@ -2422,8 +2424,8 @@
         _active.length + _connecting >= maxConnectionsPerHost) {
       var completer = Completer<_ConnectionInfo>();
       _pending.add(() {
-        completer
-            .complete(connect(uriHost, uriPort, proxy, client, profileData));
+        completer.complete(
+            connect(uri, uriHost, uriPort, proxy, client, profileData));
       });
       return completer.future;
     }
@@ -2434,14 +2436,26 @@
       return currentBadCertificateCallback(certificate, uriHost, uriPort);
     }
 
-    Future<ConnectionTask> connectionTask = (isSecure && proxy.isDirect
-        ? SecureSocket.startConnect(host, port,
-            context: context, onBadCertificate: callback)
-        : Socket.startConnect(host, port));
+    Future<ConnectionTask<Socket>> connectionTask;
+    final cf = connectionFactory;
+    if (cf != null) {
+      if (proxy.isDirect) {
+        connectionTask = cf(uri, null, null);
+      } else {
+        connectionTask = cf(uri, host, port);
+      }
+    } else {
+      connectionTask = (isSecure && proxy.isDirect
+          ? SecureSocket.startConnect(host, port,
+              context: context,
+              onBadCertificate: callback,
+              keyLog: client._keyLog)
+          : Socket.startConnect(host, port));
+    }
     _connecting++;
-    return connectionTask.then((ConnectionTask task) {
+    return connectionTask.then((ConnectionTask<Socket> task) {
       _socketTasks.add(task);
-      Future socketFuture = task.socket;
+      Future<Socket> socketFuture = task.socket;
       final Duration? connectionTimeout = client.connectionTimeout;
       if (connectionTimeout != null) {
         socketFuture = socketFuture.timeout(connectionTimeout);
@@ -2506,12 +2520,15 @@
   final List<_Credentials> _credentials = [];
   final List<_ProxyCredentials> _proxyCredentials = [];
   final SecurityContext? _context;
+  Future<ConnectionTask<Socket>> Function(Uri, String?, int?)?
+      _connectionFactory;
   Future<bool> Function(Uri, String scheme, String? realm)? _authenticate;
   Future<bool> Function(String host, int port, String scheme, String? realm)?
       _authenticateProxy;
   String Function(Uri)? _findProxy = HttpClient.findProxyFromEnvironment;
   Duration _idleTimeout = const Duration(seconds: 15);
   BadCertificateCallback? _badCertificateCallback;
+  Function(String line)? _keyLog;
 
   Duration get idleTimeout => _idleTimeout;
 
@@ -2541,6 +2558,10 @@
     _badCertificateCallback = callback;
   }
 
+  void set keyLog(Function(String line)? callback) {
+    _keyLog = callback;
+  }
+
   Future<HttpClientRequest> open(
       String method, String host, int port, String path) {
     const int hashMark = 0x23;
@@ -2631,6 +2652,12 @@
         _ProxyCredentials(host, port, realm, cr as _HttpClientCredentials));
   }
 
+  void set connectionFactory(
+          Future<ConnectionTask<Socket>> Function(
+                  Uri url, String? proxyHost, int? proxyPort)?
+              f) =>
+      _connectionFactory = f;
+
   set findProxy(String Function(Uri uri)? f) => _findProxy = f;
 
   static void _startRequestTimelineEvent(
@@ -2665,7 +2692,9 @@
     if (method != "CONNECT") {
       if (uri.host.isEmpty) {
         throw ArgumentError("No host specified in URI $uri");
-      } else if (uri.scheme != "http" && uri.scheme != "https") {
+      } else if (this._connectionFactory == null &&
+          !uri.isScheme("http") &&
+          !uri.isScheme("https")) {
         throw ArgumentError("Unsupported scheme '${uri.scheme}' in URI $uri");
       }
     }
@@ -2695,7 +2724,7 @@
     if (HttpClient.enableTimelineLogging) {
       profileData = HttpProfiler.startRequest(method, uri);
     }
-    return _getConnection(uri.host, port, proxyConf, isSecure, profileData)
+    return _getConnection(uri, uri.host, port, proxyConf, isSecure, profileData)
         .then((_ConnectionInfo info) {
       _HttpClientRequest send(_ConnectionInfo info) {
         profileData?.requestEvent('Connection established');
@@ -2706,7 +2735,8 @@
       // If the connection was closed before the request was sent, create
       // and use another connection.
       if (info.connection.closed) {
-        return _getConnection(uri.host, port, proxyConf, isSecure, profileData)
+        return _getConnection(
+                uri, uri.host, port, proxyConf, isSecure, profileData)
             .then(send);
       }
       return send(info);
@@ -2717,13 +2747,14 @@
   }
 
   static bool _isSubdomain(Uri subdomain, Uri domain) {
-    return (subdomain.scheme == domain.scheme &&
+    return (subdomain.isScheme(domain.scheme) &&
         subdomain.port == domain.port &&
         (subdomain.host == domain.host ||
             subdomain.host.endsWith("." + domain.host)));
   }
 
-  static bool _shouldCopyHeaderOnRedirect(
+  // Only visible for testing.
+  static bool shouldCopyHeaderOnRedirect(
       String headerKey, Uri originalUrl, Uri redirectUri) {
     if (_isSubdomain(redirectUri, originalUrl)) {
       return true;
@@ -2754,7 +2785,7 @@
       for (var header in previous.headers._headers.keys) {
         if (request.headers[header] == null &&
             (!isRedirect ||
-                _shouldCopyHeaderOnRedirect(header, resolved, previous.uri))) {
+                shouldCopyHeaderOnRedirect(header, resolved, previous.uri))) {
           request.headers.set(header, previous.headers[header]!);
         }
       }
@@ -2812,12 +2843,14 @@
   _ConnectionTarget _getConnectionTarget(String host, int port, bool isSecure) {
     String key = _HttpClientConnection.makeKey(isSecure, host, port);
     return _connectionTargets.putIfAbsent(key, () {
-      return _ConnectionTarget(key, host, port, isSecure, _context);
+      return _ConnectionTarget(
+          key, host, port, isSecure, _context, _connectionFactory);
     });
   }
 
   // Get a new _HttpClientConnection, from the matching _ConnectionTarget.
   Future<_ConnectionInfo> _getConnection(
+      Uri uri,
       String uriHost,
       int uriPort,
       _ProxyConfiguration proxyConf,
@@ -2831,7 +2864,7 @@
       String host = proxy.isDirect ? uriHost : proxy.host!;
       int port = proxy.isDirect ? uriPort : proxy.port!;
       return _getConnectionTarget(host, port, isSecure)
-          .connect(uriHost, uriPort, proxy, this, profileData)
+          .connect(uri, uriHost, uriPort, proxy, this, profileData)
           // On error, continue with next proxy.
           .catchError(connect);
     }
@@ -2928,13 +2961,13 @@
       return proxyCfg;
     }
 
-    if (url.scheme == "http") {
+    if (url.isScheme("http")) {
       String? proxy = environment["http_proxy"] ?? environment["HTTP_PROXY"];
       proxyCfg = checkProxy(proxy);
       if (proxyCfg != null) {
         return proxyCfg;
       }
-    } else if (url.scheme == "https") {
+    } else if (url.isScheme("https")) {
       String? proxy = environment["https_proxy"] ?? environment["HTTPS_PROXY"];
       proxyCfg = checkProxy(proxy);
       if (proxyCfg != null) {
diff --git a/sdk/lib/_http/websocket_impl.dart b/sdk/lib/_http/websocket_impl.dart
index c7126c2..fdafda8 100644
--- a/sdk/lib/_http/websocket_impl.dart
+++ b/sdk/lib/_http/websocket_impl.dart
@@ -996,7 +996,7 @@
       {CompressionOptions compression = CompressionOptions.compressionDefault,
       HttpClient? customClient}) {
     Uri uri = Uri.parse(url);
-    if (uri.scheme != "ws" && uri.scheme != "wss") {
+    if (!uri.isScheme("ws") && !uri.isScheme("wss")) {
       throw WebSocketException("Unsupported URL scheme '${uri.scheme}'");
     }
 
@@ -1011,7 +1011,7 @@
     final callerStackTrace = StackTrace.current;
 
     uri = Uri(
-        scheme: uri.scheme == "wss" ? "https" : "http",
+        scheme: uri.isScheme("wss") ? "https" : "http",
         userInfo: uri.userInfo,
         host: uri.host,
         port: uri.port,
diff --git a/sdk/lib/_internal/js_dev_runtime/OWNERS b/sdk/lib/_internal/js_dev_runtime/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/sdk/lib/_internal/js_dev_runtime/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart
index 41ac9d6..2464057 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/collection_patch.dart
@@ -181,7 +181,7 @@
         dart.identityEquals)) {
       @notNull
       Object? k = key;
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, k.hashCode);
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, k.hashCode);
       if (buckets != null) {
         for (int i = 0, n = JS('!', '#.length', buckets); i < n; i++) {
           k = JS('', '#[#]', buckets, i);
@@ -199,7 +199,7 @@
         dart.identityEquals)) {
       @notNull
       Object? k = key;
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, k.hashCode);
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, k.hashCode);
       if (buckets != null) {
         for (int i = 0, n = JS('!', '#.length', buckets); i < n; i++) {
           k = JS('', '#[#]', buckets, i);
@@ -222,7 +222,7 @@
       var keyMap = _keyMap;
       @notNull
       var k = key;
-      int hash = JS('!', '# & 0x3ffffff', k.hashCode);
+      int hash = JS('!', '# & 0x3fffffff', k.hashCode);
       var buckets = JS('', '#.get(#)', keyMap, hash);
       if (buckets == null) {
         JS('', '#.set(#, [#])', keyMap, hash, key);
@@ -237,7 +237,7 @@
       return false;
     }
     JS('', '#.add(#)', map, key);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
     return true;
   }
 
@@ -255,7 +255,7 @@
       JS('', '#.add(#)', map, key);
     }
     if (length != JS<int>('!', '#.size', map)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 
@@ -267,7 +267,7 @@
         dart.identityEquals)) {
       @notNull
       Object? k = key;
-      int hash = JS('!', '# & 0x3ffffff', k.hashCode);
+      int hash = JS('!', '# & 0x3fffffff', k.hashCode);
       var buckets = JS('', '#.get(#)', _keyMap, hash);
       if (buckets == null) return false; // not found
       for (int i = 0, n = JS('!', '#.length', buckets);;) {
@@ -286,7 +286,7 @@
     }
     var map = _map;
     if (JS<bool>('!', '#.delete(#)', map, key)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
       return true;
     }
     return false;
@@ -297,7 +297,7 @@
     if (JS<int>('!', '#.size', map) > 0) {
       JS('', '#.clear()', map);
       JS('', '#.clear()', _keyMap);
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 }
@@ -356,7 +356,7 @@
     var map = _map;
     if (JS<bool>('!', '#.has(#)', map, element)) return false;
     JS('', '#.add(#)', map, element);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
     return true;
   }
 
@@ -367,13 +367,13 @@
       JS('', '#.add(#)', map, key);
     }
     if (length != JS<int>('!', '#.size', map)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 
   bool remove(Object? element) {
     if (JS<bool>('!', '#.delete(#)', _map, element)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
       return true;
     }
     return false;
@@ -383,7 +383,7 @@
     var map = _map;
     if (JS<int>('!', '#.size', map) > 0) {
       JS('', '#.clear()', map);
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 }
@@ -449,7 +449,7 @@
 
   bool contains(Object? key) {
     if (key is E) {
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, _hashCode(key));
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, _hashCode(key));
       if (buckets != null) {
         var equals = _equals;
         for (int i = 0, n = JS('!', '#.length', buckets); i < n; i++) {
@@ -463,7 +463,7 @@
 
   E? lookup(Object? key) {
     if (key is E) {
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, _hashCode(key));
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, _hashCode(key));
       if (buckets != null) {
         var equals = _equals;
         for (int i = 0, n = JS('!', '#.length', buckets); i < n; i++) {
@@ -477,7 +477,7 @@
 
   bool add(E key) {
     var keyMap = _keyMap;
-    var hash = JS<int>('!', '# & 0x3ffffff', _hashCode(key));
+    var hash = JS<int>('!', '# & 0x3fffffff', _hashCode(key));
     var buckets = JS('', '#.get(#)', keyMap, hash);
     if (buckets == null) {
       JS('', '#.set(#, [#])', keyMap, hash, key);
@@ -490,7 +490,7 @@
       JS('', '#.push(#)', buckets, key);
     }
     JS('', '#.add(#)', _map, key);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
     return true;
   }
 
@@ -501,7 +501,7 @@
 
   bool remove(Object? key) {
     if (key is E) {
-      var hash = JS<int>('!', '# & 0x3ffffff', _hashCode(key));
+      var hash = JS<int>('!', '# & 0x3fffffff', _hashCode(key));
       var keyMap = _keyMap;
       var buckets = JS('', '#.get(#)', keyMap, hash);
       if (buckets == null) return false; // not found
@@ -515,7 +515,7 @@
             JS('', '#.splice(#, 1)', buckets, i);
           }
           JS('', '#.delete(#)', _map, k);
-          _modifications = (_modifications + 1) & 0x3ffffff;
+          _modifications = (_modifications + 1) & 0x3fffffff;
           return true;
         }
       }
@@ -528,7 +528,7 @@
     if (JS<int>('!', '#.size', map) > 0) {
       JS('', '#.clear()', map);
       JS('', '#.clear()', _keyMap);
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 }
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
index 95b46d6..1ef87b9 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
@@ -17,7 +17,8 @@
         Primitives,
         PrivateSymbol,
         quoteStringForRegExp,
-        undefined;
+        undefined,
+        wrapZoneUnaryCallback;
 import 'dart:_runtime' as dart;
 import 'dart:_foreign_helper' show JS, JSExportName;
 import 'dart:_native_typed_data' show NativeUint8List;
@@ -165,19 +166,55 @@
   }
 }
 
+// Patch for WeakReference implementation.
 @patch
 class WeakReference<T extends Object> {
   @patch
   factory WeakReference(T object) {
-    throw UnimplementedError("WeakReference");
+    return _WeakReferenceWrapper<T>(object);
   }
 }
 
+class _WeakReferenceWrapper<T extends Object> implements WeakReference<T> {
+  final Object _weakRef;
+
+  _WeakReferenceWrapper(T object)
+      : _weakRef = JS('!', 'new WeakRef(#)', object);
+
+  T? get target {
+    var target = JS<T?>('', '#.deref()', _weakRef);
+    // Coerce to null if JavaScript returns undefined.
+    if (JS<bool>('!', 'target === void 0')) return null;
+    return target;
+  }
+}
+
+// Patch for Finalizer implementation.
 @patch
 class Finalizer<T> {
   @patch
   factory Finalizer(void Function(T) object) {
-    throw UnimplementedError("Finalizer");
+    return _FinalizationRegistryWrapper<T>(object);
+  }
+}
+
+class _FinalizationRegistryWrapper<T> implements Finalizer<T> {
+  final Object _registry;
+
+  _FinalizationRegistryWrapper(void Function(T) callback)
+      : _registry = JS('!', 'new FinalizationRegistry(#)',
+            wrapZoneUnaryCallback(callback));
+
+  void attach(Object value, T token, {Object? detach}) {
+    if (detach != null) {
+      JS('', '#.register(#, #, #)', _registry, value, token, detach);
+    } else {
+      JS('', '#.register(#, #)', _registry, value, token);
+    }
+  }
+
+  void detach(Object detachToken) {
+    JS('', '#.unregister(#)', _registry, detachToken);
   }
 }
 
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart
index cf1bdbd..761bf6e 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/developer_patch.dart
@@ -15,7 +15,7 @@
 var _issuedRegisterExtensionWarning = false;
 final _developerSupportWarning = 'from dart:developer is only supported in '
     'build/run/test environments where the developer event method hooks have '
-    'been set.';
+    'been set by package:dwds v11.1.0 or higher.';
 
 /// Returns `true` if the debugger service has been attached to the app.
 // TODO(46377) Update this check when we have a documented API for DDC apps.
@@ -85,8 +85,7 @@
     JS('', r'#.$emitRegisterEvent(#)', dart.global_, method);
     return;
   }
-  // TODO(nshahan) Remove use of debug log after package:dwds removes support.
-  // https://github.com/dart-lang/webdev/issues/1342
+  // TODO(48103) Remove use of debug log in Dart 3.0.0.
   JS('', 'console.debug("dart.developer.registerExtension", #)', method);
 }
 
@@ -134,8 +133,7 @@
     JS('', r'#.$emitDebugEvent(#, #)', dart.global_, eventKind, eventData);
     return;
   }
-  // TODO(nshahan) Remove use of debug log after package:dwds removes support.
-  // https://github.com/dart-lang/webdev/issues/1342
+  // TODO(48103) Remove use of debug log in Dart 3.0.0.
   JS('', 'console.debug("dart.developer.postEvent", #, #)', eventKind,
       eventData);
 }
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/internal_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/internal_patch.dart
index f4ab556..ca3bd4f 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/internal_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/internal_patch.dart
@@ -62,3 +62,6 @@
 
 @patch
 bool isSentinel(dynamic value) => throw UnsupportedError('isSentinel');
+
+@patch
+T unsafeCast<T>(dynamic v) => v;
diff --git a/sdk/lib/_internal/js_dev_runtime/private/custom_hash_map.dart b/sdk/lib/_internal/js_dev_runtime/private/custom_hash_map.dart
index 14444e3..bcbf5b6 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/custom_hash_map.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/custom_hash_map.dart
@@ -69,7 +69,7 @@
   @notNull
   bool containsKey(Object? key) {
     if (key is K) {
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, _hashCode(key));
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, _hashCode(key));
       if (buckets != null) {
         var equals = _equals;
         for (int i = 0, n = JS<int>('!', '#.length', buckets); i < n; i++) {
@@ -96,7 +96,7 @@
 
   V? operator [](Object? key) {
     if (key is K) {
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, _hashCode(key));
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, _hashCode(key));
       if (buckets != null) {
         var equals = _equals;
         for (int i = 0, n = JS<int>('!', '#.length', buckets); i < n; i++) {
@@ -113,7 +113,7 @@
 
   void operator []=(K key, V value) {
     var keyMap = _keyMap;
-    int hash = JS('!', '# & 0x3ffffff', _hashCode(key));
+    int hash = JS('!', '# & 0x3fffffff', _hashCode(key));
     var buckets = JS('', '#.get(#)', keyMap, hash);
     if (buckets == null) {
       JS('', '#.set(#, [#])', keyMap, hash, key);
@@ -132,12 +132,12 @@
       }
     }
     JS('', '#.set(#, #)', _map, key, value);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
   }
 
   V putIfAbsent(K key, V ifAbsent()) {
     var keyMap = _keyMap;
-    int hash = JS('!', '# & 0x3ffffff', _hashCode(key));
+    int hash = JS('!', '# & 0x3fffffff', _hashCode(key));
     var buckets = JS('', '#.get(#)', keyMap, hash);
     if (buckets == null) {
       JS('', '#.set(#, [#])', keyMap, hash, key);
@@ -152,13 +152,13 @@
     V value = ifAbsent();
     if (value == null) JS('', '# = null', value); // coerce undefined to null.
     JS('', '#.set(#, #)', _map, key, value);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
     return value;
   }
 
   V? remove(Object? key) {
     if (key is K) {
-      int hash = JS('!', '# & 0x3ffffff', _hashCode(key));
+      int hash = JS('!', '# & 0x3fffffff', _hashCode(key));
       var keyMap = _keyMap;
       var buckets = JS('', '#.get(#)', keyMap, hash);
       if (buckets == null) return null; // not found
@@ -174,7 +174,7 @@
           var map = _map;
           V value = JS('', '#.get(#)', map, k);
           JS('', '#.delete(#)', map, k);
-          _modifications = (_modifications + 1) & 0x3ffffff;
+          _modifications = (_modifications + 1) & 0x3fffffff;
           return value == null ? null : value; // coerce undefined to null.
         }
       }
@@ -187,7 +187,7 @@
     if (JS<int>('!', '#.size', map) > 0) {
       JS('', '#.clear()', map);
       JS('', '#.clear()', _keyMap);
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 }
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
index 89c90d5..9c9e4b9 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
@@ -836,7 +836,7 @@
     if (!savedLocals) {
       // Record the field on first execution so we can reset it later if
       // needed (hot restart).
-      $_resetFields.push(() => {
+      $resetFields.push(() => {
         init = initializer;
         value = null;
         savedLocals = false;
@@ -860,9 +860,17 @@
   $desc.configurable = true;
   if ($desc.set != null) {
     $desc.set = function(x) {
+      if (!savedLocals) {
+        $resetFields.push(() => {
+          init = initializer;
+          value = null;
+          savedLocals = false;
+          initialized = false;
+        });
+        savedLocals = true;
+      }
       init = null;
       value = x;
-      // savedLocals and initialized are dead since init is set to null
     };
   }
   return ${defineProperty(to, name, desc)};
@@ -873,6 +881,9 @@
   const initializer = $desc.get;
   let init = initializer;
   let value = null;
+  // Tracks if these local variables have been saved so they can be restored
+  // after a hot restart.
+  let savedLocals = false;
   $desc.get = function() {
     if (init == null) return value;
     let f = init;
@@ -881,10 +892,14 @@
 
     // On the first (non-cyclic) execution, record the field so we can reset it
     // later if needed (hot restart).
-    $_resetFields.push(() => {
-      init = initializer;
-      value = null;
-    });
+    if (!savedLocals) {
+      $resetFields.push(() => {
+        init = initializer;
+        value = null;
+        savedLocals = false;
+      });
+      savedLocals = true;
+    }
 
     // Try to evaluate the field, using try+catch to ensure we implement the
     // correct Dart error semantics.
@@ -901,6 +916,14 @@
   $desc.configurable = true;
   if ($desc.set != null) {
     $desc.set = function(x) {
+      if (!savedLocals) {
+        $resetFields.push(() => {
+          init = initializer;
+          value = null;
+          savedLocals = false;
+        });
+        savedLocals = true;
+      }
       init = null;
       value = x;
     };
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
index af599c3..8b677f1 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
@@ -183,7 +183,7 @@
 /// This is populated by [defineLazyField] and only contains fields that have
 /// been initialized.
 @notNull
-final List<void Function()> _resetFields = JS('', '[]');
+final List<void Function()> resetFields = JS('', '[]');
 
 /// A counter to track each time [hotRestart] is invoked. This is used to ensure
 /// that pending callbacks that were created on a previous iteration (e.g. a
@@ -199,8 +199,8 @@
 void hotRestart() {
   // TODO(sigmund): prevent DOM callbacks from firing.
   hotRestartIteration++;
-  for (var f in _resetFields) f();
-  _resetFields.clear();
+  for (var f in resetFields) f();
+  resetFields.clear();
   for (var m in _cacheMaps) JS('', '#.clear()', m);
   _cacheMaps.clear();
   JS('', '#.clear()', _nullComparisonSet);
diff --git a/sdk/lib/_internal/js_dev_runtime/private/identity_hash_map.dart b/sdk/lib/_internal/js_dev_runtime/private/identity_hash_map.dart
index eda6c44..3f3d1dd 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/identity_hash_map.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/identity_hash_map.dart
@@ -50,7 +50,7 @@
       other.forEach((key, value) {
         JS('', '#.set(#, #)', map, key, value);
       });
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 
@@ -64,7 +64,7 @@
     int length = JS('!', '#.size', map);
     JS('', '#.set(#, #)', map, key, value);
     if (length != JS<int>('!', '#.size', map)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 
@@ -75,14 +75,14 @@
     V value = ifAbsent();
     if (value == null) JS('', '# = null', value);
     JS('', '#.set(#, #)', _map, key, value);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
     return value;
   }
 
   V? remove(Object? key) {
     V value = JS('', '#.get(#)', _map, key);
     if (JS<bool>('!', '#.delete(#)', _map, key)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
     return value == null ? null : value; // coerce undefined to null.
   }
@@ -90,7 +90,7 @@
   void clear() {
     if (JS<int>('!', '#.size', _map) > 0) {
       JS('', '#.clear()', _map);
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 }
diff --git a/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart b/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
index 3fc8f51..1eed466 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/js_helper.dart
@@ -4,6 +4,7 @@
 
 library dart._js_helper;
 
+import 'dart:async' show Zone;
 import 'dart:collection';
 
 import 'dart:_foreign_helper' show JS, JSExportName;
@@ -828,3 +829,11 @@
 /// Like [assertInterop], except iterates over a list of arguments
 /// non-recursively.
 void assertInteropArgs(List<Object?> args) => args.forEach(assertInterop);
+
+/// Wraps the given [callback] within the current Zone.
+void Function(T)? wrapZoneUnaryCallback<T>(void Function(T)? callback) {
+  // For performance reasons avoid wrapping if we are in the root zone.
+  if (Zone.current == Zone.root) return callback;
+  if (callback == null) return null;
+  return Zone.current.bindUnaryCallbackGuarded(callback);
+}
diff --git a/sdk/lib/_internal/js_dev_runtime/private/linked_hash_map.dart b/sdk/lib/_internal/js_dev_runtime/private/linked_hash_map.dart
index f797ea4..3b226b2 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/linked_hash_map.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/linked_hash_map.dart
@@ -99,7 +99,7 @@
       key = JS('', 'null');
     } else if (JS<bool>('!', '#[#] !== #', key, dart.extensionSymbol('_equals'),
         dart.identityEquals)) {
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, key.hashCode);
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, key.hashCode);
       if (buckets != null) {
         for (int i = 0, n = JS('!', '#.length', buckets); i < n; i++) {
           K k = JS('', '#[#]', buckets, i);
@@ -131,7 +131,7 @@
       JS('', '#.set(#, #)', _map, key, value);
     });
     if (length != JS<int>('!', '#.size', map)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 
@@ -140,7 +140,7 @@
       key = JS('', 'null');
     } else if (JS<bool>('!', '#[#] !== #', key, dart.extensionSymbol('_equals'),
         dart.identityEquals)) {
-      var buckets = JS('', '#.get(# & 0x3ffffff)', _keyMap, key.hashCode);
+      var buckets = JS('', '#.get(# & 0x3fffffff)', _keyMap, key.hashCode);
       if (buckets != null) {
         for (int i = 0, n = JS('!', '#.length', buckets); i < n; i++) {
           K k = JS('', '#[#]', buckets, i);
@@ -164,7 +164,7 @@
     int length = JS('', '#.size', map);
     JS('', '#.set(#, #)', map, key, value);
     if (length != JS<int>('!', '#.size', map)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 
@@ -177,7 +177,7 @@
         dart.identityEquals)) {
       @notNull
       K k = key;
-      var hash = JS<int>('!', '# & 0x3ffffff', k.hashCode);
+      var hash = JS<int>('!', '# & 0x3fffffff', k.hashCode);
       var buckets = JS('', '#.get(#)', _keyMap, hash);
       if (buckets == null) {
         JS('', '#.set(#, [#])', _keyMap, hash, key);
@@ -196,7 +196,7 @@
       value = JS('', 'null');
     }
     JS('', '#.set(#, #)', map, key, value);
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
     return value;
   }
 
@@ -206,7 +206,7 @@
     } else if (JS<bool>('!', '#[#] !== #', key, dart.extensionSymbol('_equals'),
         dart.identityEquals)) {
       @notNull
-      var hash = JS<int>('!', '# & 0x3ffffff', key.hashCode);
+      var hash = JS<int>('!', '# & 0x3fffffff', key.hashCode);
       var buckets = JS('', '#.get(#)', _keyMap, hash);
       if (buckets == null) return null; // not found
       for (int i = 0, n = JS('!', '#.length', buckets);;) {
@@ -226,7 +226,7 @@
     var map = _map;
     V value = JS('', '#.get(#)', map, key);
     if (JS<bool>('!', '#.delete(#)', map, key)) {
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
     return value == null ? null : value; // coerce undefined to null.
   }
@@ -236,14 +236,14 @@
     if (JS<int>('!', '#.size', map) > 0) {
       JS('', '#.clear()', map);
       JS('', '#.clear()', _keyMap);
-      _modifications = (_modifications + 1) & 0x3ffffff;
+      _modifications = (_modifications + 1) & 0x3fffffff;
     }
   }
 }
 
 @NoReifyGeneric()
 K putLinkedMapKey<K>(@notNull K key, keyMap) {
-  var hash = JS<int>('!', '# & 0x3ffffff', key.hashCode);
+  var hash = JS<int>('!', '# & 0x3fffffff', key.hashCode);
   var buckets = JS('', '#.get(#)', keyMap, hash);
   if (buckets == null) {
     JS('', '#.set(#, [#])', keyMap, hash, key);
diff --git a/sdk/lib/_internal/js_runtime/OWNERS b/sdk/lib/_internal/js_runtime/OWNERS
new file mode 100644
index 0000000..f5bd90c
--- /dev/null
+++ b/sdk/lib/_internal/js_runtime/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WEB
diff --git a/sdk/lib/_internal/js_runtime/lib/async_patch.dart b/sdk/lib/_internal/js_runtime/lib/async_patch.dart
index 4888baf..5f8f5af 100644
--- a/sdk/lib/_internal/js_runtime/lib/async_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/async_patch.dart
@@ -481,7 +481,7 @@
 
   add(event) => controller.add(event);
 
-  addStream(Stream<T> stream) {
+  Future addStream(Stream<T> stream) {
     return controller.addStream(stream, cancelOnError: false);
   }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index 529682d..1332aef 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -13,6 +13,7 @@
         checkInt,
         Closure,
         ConstantMap,
+        convertDartClosureToJS,
         getRuntimeType,
         JsLinkedHashMap,
         jsonEncodeNative,
@@ -23,7 +24,8 @@
         quoteStringForRegExp,
         getTraceFromException,
         RuntimeError,
-        wrapException;
+        wrapException,
+        wrapZoneUnaryCallback;
 
 import 'dart:_foreign_helper' show JS;
 import 'dart:_native_typed_data' show NativeUint8List;
@@ -117,19 +119,49 @@
   }
 }
 
+// Patch for WeakReference implementation.
 @patch
 class WeakReference<T extends Object> {
   @patch
   factory WeakReference(T object) {
-    throw UnimplementedError("WeakReference");
+    return _WeakReferenceWrapper<T>(object);
   }
 }
 
+class _WeakReferenceWrapper<T extends Object> implements WeakReference<T> {
+  final Object _weakRef;
+
+  _WeakReferenceWrapper(T object) : _weakRef = JS('', 'new WeakRef(#)', object);
+
+  T? get target => JS('', '#.deref()', _weakRef);
+}
+
+// Patch for Finalizer implementation.
 @patch
 class Finalizer<T> {
   @patch
   factory Finalizer(void Function(T) object) {
-    throw UnimplementedError("Finalizer");
+    return _FinalizationRegistryWrapper<T>(object);
+  }
+}
+
+class _FinalizationRegistryWrapper<T> implements Finalizer<T> {
+  final Object _registry;
+
+  _FinalizationRegistryWrapper(void Function(T) callback)
+      : _registry = JS('', 'new FinalizationRegistry(#)',
+            convertDartClosureToJS(wrapZoneUnaryCallback(callback), 1));
+
+  void attach(Object value, T token, {Object? detach}) {
+    if (detach != null) {
+      JS('', '#.register(#, #, #)', _registry, value, token, detach);
+    } else {
+      JS('', '#.register(#, #)', _registry, value, token);
+    }
+  }
+
+  void detach(Object detachToken) {
+    JS('', '#.unregister(#)', _registry, detachToken);
   }
 }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/internal_patch.dart b/sdk/lib/_internal/js_runtime/lib/internal_patch.dart
index 9bf6da6..ef27959 100644
--- a/sdk/lib/_internal/js_runtime/lib/internal_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/internal_patch.dart
@@ -73,3 +73,7 @@
 @patch
 @pragma('dart2js:tryInline')
 bool isSentinel(dynamic value) => isJsSentinel(value);
+
+@patch
+@pragma('dart2js:tryInline')
+T unsafeCast<T>(dynamic v) => v;
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index d41e511..ad7098c 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -27,7 +27,7 @@
 
 import 'dart:collection';
 
-import 'dart:async' show Completer, DeferredLoadException, Future;
+import 'dart:async' show Completer, DeferredLoadException, Future, Zone;
 
 import 'dart:_foreign_helper'
     show
@@ -276,19 +276,6 @@
   }
 
   static Object _computeIdentityHashCodeProperty() =>
-      JS_GET_FLAG('LEGACY_JAVASCRIPT')
-          ? _computeIdentityHashCodePropertyLegacy()
-          : _computeIdentityHashCodePropertyModern();
-
-  static Object _computeIdentityHashCodePropertyLegacy() {
-    if (JS<bool>('bool', 'typeof Symbol == "function"') ||
-        JS<bool>('bool', 'typeof Symbol() == "symbol"')) {
-      return _computeIdentityHashCodePropertyModern();
-    }
-    return r'$identityHashCode';
-  }
-
-  static Object _computeIdentityHashCodePropertyModern() =>
       JS('', 'Symbol("identityHashCode")');
 
   static int? parseInt(String source, int? radix) {
@@ -397,7 +384,7 @@
   /// In minified mode, uses the unminified names if available, otherwise tags
   /// them with 'minified:'.
   @pragma('dart2js:noInline')
-  static String objectTypeName(Object object) {
+  static String objectTypeName(Object? object) {
     return _objectTypeNameNewRti(object);
   }
 
@@ -406,7 +393,7 @@
   ///
   /// In minified mode, uses the unminified names if available, otherwise tags
   /// them with 'minified:'.
-  static String _objectTypeNameNewRti(Object object) {
+  static String _objectTypeNameNewRti(Object? object) {
     var dartObjectConstructor = JS_BUILTIN(
         'depends:none;effects:none;', JsBuiltin.dartObjectConstructor);
     if (JS('bool', '# instanceof #', object, dartObjectConstructor)) {
@@ -452,7 +439,7 @@
       name != null && name != 'Object' && name != '';
 
   /// In minified mode, uses the unminified names if available.
-  static String objectToHumanReadableString(Object object) {
+  static String objectToHumanReadableString(Object? object) {
     String name = objectTypeName(object);
     return "Instance of '$name'";
   }
@@ -2666,12 +2653,6 @@
   return JS('String', '#(#)', isolateTagGetter, name);
 }
 
-typedef Future<Null> LoadLibraryFunctionType();
-
-LoadLibraryFunctionType _loadLibraryWrapper(String loadId) {
-  return () => loadDeferredLibrary(loadId);
-}
-
 final Map<String, Future<Null>?> _loadingLibraries = <String, Future<Null>?>{};
 final Set<String> _loadedLibraries = new Set<String>();
 
@@ -3035,3 +3016,11 @@
 Object? rawStartupMetrics() {
   return JS('JSArray', '#.a', JS_EMBEDDED_GLOBAL('', STARTUP_METRICS));
 }
+
+/// Wraps the given [callback] within the current Zone.
+void Function(T)? wrapZoneUnaryCallback<T>(void Function(T)? callback) {
+  // For performance reasons avoid wrapping if we are in the root zone.
+  if (Zone.current == Zone.root) return callback;
+  if (callback == null) return null;
+  return Zone.current.bindUnaryCallbackGuarded(callback);
+}
diff --git a/sdk/lib/_internal/js_runtime/lib/js_number.dart b/sdk/lib/_internal/js_runtime/lib/js_number.dart
index 678a61b..f217b53 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_number.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_number.dart
@@ -242,7 +242,7 @@
   static String _handleIEtoString(String result) {
     // Result is probably IE's untraditional format for large numbers,
     // e.g., "8.0000000000008(e+15)" for 0x8000000000000800.toString(16).
-    var match = JS('JSArray|Null',
+    List? match = JS('JSArray|Null',
         r'/^([\da-z]+)(?:\.([\da-z]+))?\(e\+(\d+)\)$/.exec(#)', result);
     if (match == null) {
       // Then we don't know how to handle it at all.
diff --git a/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart b/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart
index bd8533a..4053525 100644
--- a/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart
+++ b/sdk/lib/_internal/js_runtime/lib/linked_hash_map.dart
@@ -218,7 +218,7 @@
     // always unboxed (Smi) values. Modification detection will be missed if you
     // make exactly some multiple of 2^30 modifications between advances of an
     // iterator.
-    _modifications = (_modifications + 1) & 0x3ffffff;
+    _modifications = (_modifications + 1) & 0x3fffffff;
   }
 
   // Create a new cell and link it in as the last one in the list.
@@ -264,14 +264,14 @@
     // Only treat unsigned 30-bit integers as numeric keys. This way,
     // we avoid converting them to strings when we use them as keys in
     // the JavaScript hash table object.
-    return key is num && JS('bool', '(# & 0x3ffffff) === #', key, key);
+    return key is num && JS('bool', '(# & 0x3fffffff) === #', key, key);
   }
 
   int internalComputeHashCode(var key) {
     // We force the hash codes to be unsigned 30-bit integers to avoid
     // issues with problematic keys like '__proto__'. Another option
     // would be to throw an exception if the hash code isn't a number.
-    return JS('int', '# & 0x3ffffff', key.hashCode);
+    return JS('int', '# & 0x3fffffff', key.hashCode);
   }
 
   List<LinkedHashMapCell>? _getBucket(var table, var key) {
diff --git a/sdk/lib/_internal/vm/OWNERS b/sdk/lib/_internal/vm/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/sdk/lib/_internal/vm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/sdk/lib/_internal/vm/bin/builtin.dart b/sdk/lib/_internal/vm/bin/builtin.dart
index e39fa7f..2684e6f 100644
--- a/sdk/lib/_internal/vm/bin/builtin.dart
+++ b/sdk/lib/_internal/vm/bin/builtin.dart
@@ -96,7 +96,7 @@
 _setPackagesConfig(String packagesParam) {
   var packagesName = _sanitizeWindowsPath(packagesParam);
   var packagesUri = Uri.parse(packagesName);
-  if (packagesUri.scheme == '') {
+  if (!packagesUri.hasScheme) {
     // Script does not have a scheme, assume that it is a path,
     // resolve it against the working directory.
     packagesUri = _workingDirectory.resolveUri(packagesUri);
@@ -107,7 +107,7 @@
 // Given a uri with a 'package' scheme, return a Uri that is prefixed with
 // the package root or resolved relative to the package configuration.
 Uri _resolvePackageUri(Uri uri) {
-  assert(uri.scheme == "package");
+  assert(uri.isScheme("package"));
   assert(_packagesReady);
 
   if (uri.host.isNotEmpty) {
@@ -444,7 +444,7 @@
 _handlePackagesRequest(bool traceLoading, int tag, Uri resource) {
   try {
     if (tag == -1) {
-      if (resource.scheme == '' || resource.scheme == 'file') {
+      if (!resource.hasScheme || resource.isScheme('file')) {
         return _findPackagesConfiguration(traceLoading, resource);
       } else {
         return "Unsupported scheme used to locate .packages file:'$resource'.";
@@ -454,13 +454,13 @@
         _log("Handling load of packages map: '$resource'.");
       }
       late Uint8List bytes;
-      if (resource.scheme == '' || resource.scheme == 'file') {
+      if (!resource.hasScheme || resource.isScheme('file')) {
         final file = File.fromUri(resource);
         if (!file.existsSync()) {
           return "Packages file '$resource' does not exit.";
         }
         bytes = file.readAsBytesSync();
-      } else if (resource.scheme == 'data') {
+      } else if (resource.isScheme('data')) {
         final uriData = resource.data!;
         if (!_isValidUtf8DataUrl(uriData)) {
           return "The data resource '$resource' must have a 'text/plain' mime "
@@ -543,7 +543,7 @@
   }
   var packagesName = _sanitizeWindowsPath(packagesParam);
   var packagesUri = Uri.parse(packagesName);
-  if (packagesUri.scheme == '') {
+  if (!packagesUri.hasScheme) {
     // Script does not have a scheme, assume that it is a path,
     // resolve it against the working directory.
     packagesUri = _workingDirectory.resolveUri(packagesUri);
@@ -569,7 +569,7 @@
   scriptName = _sanitizeWindowsPath(scriptName);
 
   var scriptUri = Uri.parse(scriptName);
-  if (scriptUri.scheme == '') {
+  if (!scriptUri.hasScheme) {
     // Script does not have a scheme, assume that it is a path,
     // resolve it against the working directory.
     scriptUri = _workingDirectory.resolveUri(scriptUri);
@@ -608,7 +608,7 @@
   if (_traceLoading) {
     _log("Request for package Uri resolution from user code: $packageUri");
   }
-  if (packageUri.scheme != "package") {
+  if (!packageUri.isScheme("package")) {
     if (_traceLoading) {
       _log("Non-package Uri, returning unmodified: $packageUri");
     }
diff --git a/sdk/lib/_internal/vm/bin/platform_patch.dart b/sdk/lib/_internal/vm/bin/platform_patch.dart
index db632d6..fbcd877 100644
--- a/sdk/lib/_internal/vm/bin/platform_patch.dart
+++ b/sdk/lib/_internal/vm/bin/platform_patch.dart
@@ -48,7 +48,7 @@
   static String? _packageConfig() => VMLibraryHooks.packageConfigString;
 
   @patch
-  static Uri _script() => VMLibraryHooks.platformScript;
+  static Uri _script() => VMLibraryHooks.platformScript!;
 
   // This script singleton is written to by the embedder if applicable.
   @pragma("vm:entry-point")
diff --git a/sdk/lib/_internal/vm/bin/secure_socket_patch.dart b/sdk/lib/_internal/vm/bin/secure_socket_patch.dart
index cfd1d6b..680adcf 100644
--- a/sdk/lib/_internal/vm/bin/secure_socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/secure_socket_patch.dart
@@ -33,12 +33,7 @@
   void renegotiate(
       {bool useSessionCache: true,
       bool requestClientCertificate: false,
-      bool requireClientCertificate: false}) {
-    _raw!.renegotiate(
-        useSessionCache: useSessionCache,
-        requestClientCertificate: requestClientCertificate,
-        requireClientCertificate: requireClientCertificate);
-  }
+      bool requireClientCertificate: false}) {}
 
   X509Certificate? get peerCertificate {
     if (_raw == null) {
@@ -165,10 +160,6 @@
   @pragma("vm:external-name", "SecureSocket_GetSelectedProtocol")
   external String? selectedProtocol();
 
-  @pragma("vm:external-name", "SecureSocket_Renegotiate")
-  external void renegotiate(bool useSessionCache, bool requestClientCertificate,
-      bool requireClientCertificate);
-
   @pragma("vm:external-name", "SecureSocket_Init")
   external void init();
 
@@ -189,6 +180,9 @@
   external void registerHandshakeCompleteCallback(
       Function handshakeCompleteHandler);
 
+  @pragma("vm:external-name", "SecureSocket_RegisterKeyLogPort")
+  external void registerKeyLogPort(SendPort port);
+
   // This is a security issue, as it exposes a raw pointer to Dart code.
   @pragma("vm:external-name", "SecureSocket_FilterPointer")
   external int _pointer();
diff --git a/sdk/lib/_internal/vm/bin/sync_socket_patch.dart b/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
index 708a1e7..beff01e 100644
--- a/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
@@ -307,9 +307,9 @@
   @pragma("vm:external-name", "SynchronousSocket_CloseSync")
   external _nativeCloseSync();
   @pragma("vm:external-name", "SynchronousSocket_GetPort")
-  external int _nativeGetPort();
+  external _nativeGetPort();
   @pragma("vm:external-name", "SynchronousSocket_GetRemotePeer")
-  external List _nativeGetRemotePeer();
+  external _nativeGetRemotePeer();
   @pragma("vm:external-name", "SynchronousSocket_Read")
   external _nativeRead(int len);
   @pragma("vm:external-name", "SynchronousSocket_ReadList")
diff --git a/sdk/lib/_internal/vm/lib/array.dart b/sdk/lib/_internal/vm/lib/array.dart
index ba48fbe..be6f0dd 100644
--- a/sdk/lib/_internal/vm/lib/array.dart
+++ b/sdk/lib/_internal/vm/lib/array.dart
@@ -4,8 +4,81 @@
 
 // part of "core_patch.dart";
 
+abstract class _Array<E> extends FixedLengthListBase<E> {
+  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:external-name", "List_getIndexed")
+  external E operator [](int index);
+
+  @pragma("vm:recognized", "graph-intrinsic")
+  @pragma("vm:exact-result-type", "dart:core#_Smi")
+  @pragma("vm:prefer-inline")
+  @pragma("vm:external-name", "List_getLength")
+  external int get length;
+
+  @pragma("vm:prefer-inline")
+  _List _slice(int start, int count, bool needsTypeArgument) {
+    if (count <= 64) {
+      final result = needsTypeArgument ? new _List<E>(count) : new _List(count);
+      for (int i = 0; i < result.length; i++) {
+        result[i] = this[start + i];
+      }
+      return result;
+    } else {
+      return _sliceInternal(start, count, needsTypeArgument);
+    }
+  }
+
+  @pragma("vm:external-name", "List_slice")
+  external _List _sliceInternal(int start, int count, bool needsTypeArgument);
+
+  // Iterable interface.
+
+  @pragma("vm:prefer-inline")
+  void forEach(f(E element)) {
+    final length = this.length;
+    for (int i = 0; i < length; i++) {
+      f(this[i]);
+    }
+  }
+
+  @pragma("vm:prefer-inline")
+  Iterator<E> get iterator {
+    return new _ArrayIterator<E>(this);
+  }
+
+  E get first {
+    if (length > 0) return this[0];
+    throw IterableElementError.noElement();
+  }
+
+  E get last {
+    if (length > 0) return this[length - 1];
+    throw IterableElementError.noElement();
+  }
+
+  E get single {
+    if (length == 1) return this[0];
+    if (length == 0) throw IterableElementError.noElement();
+    throw IterableElementError.tooMany();
+  }
+
+  List<E> toList({bool growable: true}) {
+    var length = this.length;
+    if (length > 0) {
+      _List result = _slice(0, length, !growable);
+      if (growable) {
+        return new _GrowableList<E>._withData(result).._setLength(length);
+      }
+      return unsafeCast<_List<E>>(result);
+    }
+    // _GrowableList._withData must not be called with empty list.
+    return growable ? <E>[] : new _List<E>(0);
+  }
+}
+
+// Known to the VM as kArrayCid.
 @pragma("vm:entry-point")
-class _List<E> extends FixedLengthListBase<E> {
+class _List<E> extends _Array<E> {
   @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type",
       <dynamic>[_List, "result-type-uses-passed-type-arguments"])
@@ -46,11 +119,8 @@
     if (elements is _GrowableList) {
       return _List._ofGrowableList(unsafeCast(elements));
     }
-    if (elements is _List) {
-      return _List._ofList(unsafeCast(elements));
-    }
-    if (elements is _ImmutableList) {
-      return _List._ofImmutableList(unsafeCast(elements));
+    if (elements is _Array) {
+      return _List._ofArray(unsafeCast(elements));
     }
     if (elements is EfficientLengthIterable) {
       return _List._ofEfficientLengthIterable(unsafeCast(elements));
@@ -70,19 +140,7 @@
     return list;
   }
 
-  factory _List._ofList(_List<E> elements) {
-    final int length = elements.length;
-    final list = _List<E>(length);
-    // TODO(30102): Remove this loop zero-trip guard.
-    if (length > 0) {
-      for (int i = 0; i < length; i++) {
-        list[i] = elements[i];
-      }
-    }
-    return list;
-  }
-
-  factory _List._ofImmutableList(_ImmutableList<E> elements) {
+  factory _List._ofArray(_Array<E> elements) {
     final int length = elements.length;
     final list = _List<E>(length);
     // TODO(30102): Remove this loop zero-trip guard.
@@ -116,10 +174,6 @@
     return unsafeCast(makeListFixedLength(_GrowableList<E>._ofOther(elements)));
   }
 
-  @pragma("vm:recognized", "graph-intrinsic")
-  @pragma("vm:external-name", "List_getIndexed")
-  external E operator [](int index);
-
   @pragma("vm:recognized", "other")
   void operator []=(int index, E value) {
     _setIndexed(index, value);
@@ -129,28 +183,6 @@
   @pragma("vm:external-name", "List_setIndexed")
   external void _setIndexed(int index, E value);
 
-  @pragma("vm:recognized", "graph-intrinsic")
-  @pragma("vm:exact-result-type", "dart:core#_Smi")
-  @pragma("vm:prefer-inline")
-  @pragma("vm:external-name", "List_getLength")
-  external int get length;
-
-  @pragma("vm:prefer-inline")
-  _List _slice(int start, int count, bool needsTypeArgument) {
-    if (count <= 64) {
-      final result = needsTypeArgument ? new _List<E>(count) : new _List(count);
-      for (int i = 0; i < result.length; i++) {
-        result[i] = this[start + i];
-      }
-      return result;
-    } else {
-      return _sliceInternal(start, count, needsTypeArgument);
-    }
-  }
-
-  @pragma("vm:external-name", "List_slice")
-  external _List _sliceInternal(int start, int count, bool needsTypeArgument);
-
   // List interface.
   void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
     if (start < 0 || start > this.length) {
@@ -214,61 +246,11 @@
     result._setLength(length);
     return result;
   }
-
-  // Iterable interface.
-
-  @pragma("vm:prefer-inline")
-  void forEach(f(E element)) {
-    final length = this.length;
-    for (int i = 0; i < length; i++) {
-      f(this[i]);
-    }
-  }
-
-  @pragma("vm:prefer-inline")
-  Iterator<E> get iterator {
-    return new _FixedSizeArrayIterator<E>(this);
-  }
-
-  E get first {
-    if (length > 0) return this[0];
-    throw IterableElementError.noElement();
-  }
-
-  E get last {
-    if (length > 0) return this[length - 1];
-    throw IterableElementError.noElement();
-  }
-
-  E get single {
-    if (length == 1) return this[0];
-    if (length == 0) throw IterableElementError.noElement();
-    throw IterableElementError.tooMany();
-  }
-
-  List<E> toList({bool growable: true}) {
-    var length = this.length;
-    if (length > 0) {
-      _List result = _slice(0, length, !growable);
-      if (growable) {
-        return new _GrowableList<E>._withData(result).._setLength(length);
-      }
-      return unsafeCast<_List<E>>(result);
-    }
-    // _GrowableList._withData must not be called with empty list.
-    return growable ? <E>[] : new _List<E>(0);
-  }
 }
 
-// This is essentially the same class as _List, but it does not
-// permit any modification of array elements from Dart code. We use
-// this class for arrays constructed from Dart array literals.
-// TODO(hausner): We should consider the trade-offs between two
-// classes (and inline cache misses) versus a field in the native
-// implementation (checks when modifying). We should keep watching
-// the inline cache misses.
+// Known to the VM as kImmutableArrayCid.
 @pragma("vm:entry-point")
-class _ImmutableList<E> extends UnmodifiableListBase<E> {
+class _ImmutableList<E> extends _Array<E> with UnmodifiableListMixin<E> {
   factory _ImmutableList._uninstantiable() {
     throw new UnsupportedError(
         "ImmutableArray can only be allocated by the VM");
@@ -276,95 +258,19 @@
 
   @pragma("vm:external-name", "ImmutableList_from")
   external factory _ImmutableList._from(List from, int offset, int length);
-
-  @pragma("vm:recognized", "graph-intrinsic")
-  @pragma("vm:external-name", "List_getIndexed")
-  external E operator [](int index);
-
-  @pragma("vm:recognized", "graph-intrinsic")
-  @pragma("vm:exact-result-type", "dart:core#_Smi")
-  @pragma("vm:prefer-inline")
-  @pragma("vm:external-name", "List_getLength")
-  external int get length;
-
-  List<E> sublist(int start, [int? end]) {
-    final int actualEnd = RangeError.checkValidRange(start, end, this.length);
-    int length = actualEnd - start;
-    if (length == 0) return <E>[];
-    final list = new _List(length);
-    for (int i = 0; i < length; i++) {
-      list[i] = this[start + i];
-    }
-    final result = new _GrowableList<E>._withData(list);
-    result._setLength(length);
-    return result;
-  }
-
-  // Collection interface.
-
-  @pragma("vm:prefer-inline")
-  void forEach(f(E element)) {
-    final length = this.length;
-    for (int i = 0; i < length; i++) {
-      f(this[i]);
-    }
-  }
-
-  @pragma("vm:prefer-inline")
-  Iterator<E> get iterator {
-    return new _FixedSizeArrayIterator<E>(this);
-  }
-
-  E get first {
-    if (length > 0) return this[0];
-    throw IterableElementError.noElement();
-  }
-
-  E get last {
-    if (length > 0) return this[length - 1];
-    throw IterableElementError.noElement();
-  }
-
-  E get single {
-    if (length == 1) return this[0];
-    if (length == 0) throw IterableElementError.noElement();
-    throw IterableElementError.tooMany();
-  }
-
-  List<E> toList({bool growable: true}) {
-    final int length = this.length;
-    if (length > 0) {
-      if (growable) {
-        final list = new _List(length);
-        for (int i = 0; i < length; i++) {
-          list[i] = this[i];
-        }
-        return _GrowableList<E>._withData(list).._setLength(length);
-      } else {
-        final list = new _List<E>(length);
-        for (int i = 0; i < length; i++) {
-          list[i] = this[i];
-        }
-        return list;
-      }
-    }
-    return growable ? <E>[] : new _List<E>(0);
-  }
 }
 
-// Iterator for arrays with fixed size.
-class _FixedSizeArrayIterator<E> implements Iterator<E> {
-  final List<E> _array;
+// Iterator for arrays.
+class _ArrayIterator<E> implements Iterator<E> {
+  final _Array<E> _array;
   final int _length; // Cache array length for faster access.
   int _index;
   E? _current;
 
-  _FixedSizeArrayIterator(List<E> array)
+  _ArrayIterator(_Array<E> array)
       : _array = array,
         _length = array.length,
-        _index = 0 {
-    assert(array is _List<E> || array is _ImmutableList<E>);
-  }
+        _index = 0 {}
 
   E get current => _current as E;
 
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 363ae71..2e322f1 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -20,8 +20,12 @@
 
 // We need to pass the value as first argument and leave the second and third
 // arguments empty (used for error handling).
+@pragma("vm:recognized", "other")
 dynamic Function(dynamic) _asyncThenWrapperHelper(
-    dynamic Function(dynamic) continuation) {
+    dynamic Function(dynamic, dynamic) continuation) {
+  @pragma("vm:invisible")
+  dynamic thenWrapper(dynamic arg) => continuation(arg, /*stack_trace=*/ null);
+
   // Any function that is used as an asynchronous callback must be registered
   // in the current Zone. Normally, this is done by the future when a
   // callback is registered (for example with `.then` or `.catchError`). In our
@@ -41,17 +45,15 @@
   if (identical(currentZone, _rootZone) ||
       identical(currentZone._registerUnaryCallback,
           _rootZone._registerUnaryCallback)) {
-    return continuation;
+    return thenWrapper;
   }
-  return currentZone.registerUnaryCallback<dynamic, dynamic>(continuation);
+  return currentZone.registerUnaryCallback<dynamic, dynamic>(thenWrapper);
 }
 
 // We need to pass the exception and stack trace objects as second and third
 // parameter to the continuation.
 dynamic Function(Object, StackTrace) _asyncErrorWrapperHelper(
-    dynamic Function(dynamic, dynamic, StackTrace) continuation) {
-  // See comments of `_asyncThenWrapperHelper`.
-  dynamic errorCallback(Object e, StackTrace s) => continuation(null, e, s);
+    dynamic Function(dynamic, StackTrace) errorCallback) {
   final currentZone = Zone._current;
   if (identical(currentZone, _rootZone) ||
       identical(currentZone._registerBinaryCallback,
@@ -68,12 +70,12 @@
 ///
 /// Returns the result of registering with `.then`.
 Future _awaitHelper(var object, dynamic Function(dynamic) thenCallback,
-    dynamic Function(dynamic, StackTrace) errorCallback, Function awaiter) {
+    dynamic Function(dynamic, StackTrace) errorCallback) {
   late _Future future;
-  if (object is! Future) {
-    future = new _Future().._setValue(object);
-  } else if (object is _Future) {
+  if (object is _Future) {
     future = object;
+  } else if (object is! Future) {
+    future = new _Future().._setValue(object);
   } else {
     return object.then(thenCallback, onError: errorCallback);
   }
@@ -126,7 +128,7 @@
   void runBody() {
     isScheduled = false;
     isSuspendedAtYield = false;
-    asyncStarBody();
+    asyncStarBody(null, null);
   }
 
   void scheduleGenerator() {
@@ -257,7 +259,20 @@
   // allow then and error handlers to be attached.
   // async_jump_var=0 is prior to first await, =1 is first await.
   if (!is_sync || value is Future) {
-    _future._asyncComplete(value);
+    _future._asyncCompleteUnchecked(value);
+  } else {
+    _future._completeWithValue(value);
+  }
+}
+
+@pragma("vm:entry-point", "call")
+void _completeWithNoFutureOnAsyncReturn(
+    _Future _future, Object? value, bool is_sync) {
+  // The first awaited expression is invoked sync. so complete is async. to
+  // allow then and error handlers to be attached.
+  // async_jump_var=0 is prior to first await, =1 is first await.
+  if (!is_sync) {
+    _future._asyncCompleteUncheckedNoFuture(value);
   } else {
     _future._completeWithValue(value);
   }
diff --git a/sdk/lib/_internal/vm/lib/collection_patch.dart b/sdk/lib/_internal/vm/lib/collection_patch.dart
index 4755514..942dc83 100644
--- a/sdk/lib/_internal/vm/lib/collection_patch.dart
+++ b/sdk/lib/_internal/vm/lib/collection_patch.dart
@@ -849,72 +849,3 @@
 
   E get current => _current as E;
 }
-
-/**
- * A hash-based map that iterates keys and values in key insertion order.
- * This is never actually instantiated any more - the constructor always
- * returns an instance of _CompactLinkedHashMap or _InternalLinkedHashMap,
- * which despite the names do not use links (but are insertion-ordered as if
- * they did).
- */
-@patch
-class LinkedHashMap<K, V> {
-  @patch
-  factory LinkedHashMap(
-      {bool equals(K key1, K key2)?,
-      int hashCode(K key)?,
-      bool isValidKey(potentialKey)?}) {
-    if (isValidKey == null) {
-      if (hashCode == null) {
-        if (equals == null) {
-          return new _InternalLinkedHashMap<K, V>();
-        }
-        hashCode = _defaultHashCode;
-      } else {
-        if (identical(identityHashCode, hashCode) &&
-            identical(identical, equals)) {
-          return new _CompactLinkedIdentityHashMap<K, V>();
-        }
-        equals ??= _defaultEquals;
-      }
-    } else {
-      hashCode ??= _defaultHashCode;
-      equals ??= _defaultEquals;
-    }
-    return new _CompactLinkedCustomHashMap<K, V>(equals, hashCode, isValidKey);
-  }
-
-  @patch
-  factory LinkedHashMap.identity() => new _CompactLinkedIdentityHashMap<K, V>();
-}
-
-@patch
-class LinkedHashSet<E> {
-  @patch
-  factory LinkedHashSet(
-      {bool equals(E e1, E e2)?,
-      int hashCode(E e)?,
-      bool isValidKey(potentialKey)?}) {
-    if (isValidKey == null) {
-      if (hashCode == null) {
-        if (equals == null) {
-          return new _CompactLinkedHashSet<E>();
-        }
-        hashCode = _defaultHashCode;
-      } else {
-        if (identical(identityHashCode, hashCode) &&
-            identical(identical, equals)) {
-          return new _CompactLinkedIdentityHashSet<E>();
-        }
-        equals ??= _defaultEquals;
-      }
-    } else {
-      hashCode ??= _defaultHashCode;
-      equals ??= _defaultEquals;
-    }
-    return new _CompactLinkedCustomHashSet<E>(equals, hashCode, isValidKey);
-  }
-
-  @patch
-  factory LinkedHashSet.identity() => new _CompactLinkedIdentityHashSet<E>();
-}
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index f2b6fc0..fa4b32d 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -325,6 +325,11 @@
     // Publish new index, uses store release semantics.
     _index = newIndex;
   }
+
+  Iterable<K> get keys =>
+      new _CompactIterableImmutable<K>(this, _data, _usedData, -2, 2);
+  Iterable<V> get values =>
+      new _CompactIterableImmutable<V>(this, _data, _usedData, -1, 2);
 }
 
 // Implementation is from "Hacker's Delight" by Henry S. Warren, Jr.,
@@ -619,6 +624,9 @@
   V? operator [](Object? o) => _validKey(o) ? super[o] : null;
   V? remove(Object? o) => _validKey(o) ? super.remove(o) : null;
 
+  @pragma("wasm:entry-point")
+  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);
@@ -628,6 +636,7 @@
 // and checks for concurrent modification.
 class _CompactIterable<E> extends Iterable<E> {
   final _HashBase _table;
+  // dart:core#_List (sdk/lib/_internal/vm/lib/array.dart).
   final List _data;
   final int _len;
   final int _offset;
@@ -646,6 +655,7 @@
 
 class _CompactIterator<E> implements Iterator<E> {
   final _HashBase _table;
+  // dart:core#_List (sdk/lib/_internal/vm/lib/array.dart).
   final List _data;
   final int _len;
   int _offset;
@@ -677,6 +687,58 @@
   E get current => _current as E;
 }
 
+// Iterates through _data[_offset + _step], _data[_offset + 2*_step], ...
+// and checks for concurrent modification.
+class _CompactIterableImmutable<E> extends Iterable<E> {
+  // _HashBase with _HashVMImmutableBase.
+  final _HashBase _table;
+  // dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart).
+  final List _data;
+  final int _len;
+  final int _offset;
+  final int _step;
+
+  _CompactIterableImmutable(
+      this._table, this._data, this._len, this._offset, this._step);
+
+  Iterator<E> get iterator =>
+      new _CompactIteratorImmutable<E>(_table, _data, _len, _offset, _step);
+
+  int get length => _table.length;
+  bool get isEmpty => length == 0;
+  bool get isNotEmpty => !isEmpty;
+}
+
+class _CompactIteratorImmutable<E> implements Iterator<E> {
+  // _HashBase with _HashVMImmutableBase.
+  final _HashBase _table;
+  // dart:core#_ImmutableList (sdk/lib/_internal/vm/lib/array.dart).
+  final List _data;
+  final int _len;
+  int _offset;
+  final int _step;
+  final int _checkSum;
+  E? _current;
+
+  _CompactIteratorImmutable(
+      _HashBase table, this._data, this._len, this._offset, this._step)
+      : _table = table,
+        _checkSum = table._checkSum;
+
+  bool moveNext() {
+    _offset += _step;
+    if (_offset < _len) {
+      _current = internal.unsafeCast<E>(_data[_offset]);
+      return true;
+    } else {
+      _current = null;
+      return false;
+    }
+  }
+
+  E get current => _current as E;
+}
+
 abstract class _LinkedHashSetMixin<E> implements _HashBase {
   int _hashCode(e);
   bool _equals(e1, e2);
@@ -959,6 +1021,9 @@
 
   // Returns a mutable set.
   Set<E> toSet() => new _CompactLinkedHashSet<E>()..addAll(this);
+
+  Iterator<E> get iterator =>
+      new _CompactIteratorImmutable<E>(this, _data, _usedData, -1, 1);
 }
 
 class _CompactLinkedIdentityHashSet<E> extends _HashFieldBase
diff --git a/sdk/lib/_internal/vm/lib/convert_patch.dart b/sdk/lib/_internal/vm/lib/convert_patch.dart
index 2885579..5893e26 100644
--- a/sdk/lib/_internal/vm/lib/convert_patch.dart
+++ b/sdk/lib/_internal/vm/lib/convert_patch.dart
@@ -28,12 +28,7 @@
 @patch
 dynamic _parseJson(
     String source, Object? Function(Object? key, Object? value)? reviver) {
-  _BuildJsonListener listener;
-  if (reviver == null) {
-    listener = new _BuildJsonListener();
-  } else {
-    listener = new _ReviverJsonListener(reviver);
-  }
+  _JsonListener listener = new _JsonListener(reviver);
   var parser = new _JsonStringParser(listener);
   parser.chunk = source;
   parser.chunkEnd = source.length;
@@ -88,36 +83,16 @@
 // Simple API for JSON parsing.
 
 /**
- * Listener for parsing events from [_ChunkedJsonParser].
- */
-abstract class _JsonListener {
-  void handleString(String value) {}
-  void handleNumber(num value) {}
-  void handleBool(bool value) {}
-  void handleNull() {}
-  void beginObject() {}
-  void propertyName() {}
-  void propertyValue() {}
-  void endObject() {}
-  void beginArray() {}
-  void arrayElement() {}
-  void endArray() {}
-
-  /**
-   * Read out the final result of parsing a JSON string.
-   *
-   * Must only be called when the entire input has been parsed.
-   */
-  dynamic get result;
-}
-
-/**
- * A [_JsonListener] that builds data objects from the parser events.
+ * A [_JsonListener] builds data objects from the parser events.
  *
  * This is a simple stack-based object builder. It keeps the most recently
  * seen value in a variable, and uses it depending on the following event.
  */
-class _BuildJsonListener extends _JsonListener {
+class _JsonListener {
+  _JsonListener(this.reviver);
+
+  final Object? Function(Object? key, Object? value)? reviver;
+
   /**
    * Stack used to handle nested containers.
    *
@@ -126,12 +101,17 @@
    * which is also stored on the stack.
    */
   final List<Object?> stack = [];
-  /** The current [Map] or [List] being built. */
-  dynamic currentContainer;
+
+  /** The current [Map] or [List] being built, or null if not building a
+  * container.
+  */
+  Object? currentContainer;
+
   /** The most recently read property key. */
   String key = '';
+
   /** The most recently read value. */
-  dynamic value;
+  Object? value;
 
   /** Pushes the currently active container (and key, if a [Map]). */
   void pushContainer() {
@@ -168,12 +148,16 @@
   }
 
   void propertyName() {
-    key = value;
+    key = value as String;
     value = null;
   }
 
   void propertyValue() {
-    Map map = currentContainer;
+    var map = currentContainer as Map;
+    var reviver = this.reviver;
+    if (reviver != null) {
+      value = reviver(key, value);
+    }
     map[key] = value;
     key = '';
     value = null;
@@ -185,11 +169,16 @@
 
   void beginArray() {
     pushContainer();
-    currentContainer = [];
+    currentContainer = <dynamic>[];
   }
 
   void arrayElement() {
-    currentContainer.add(value);
+    var list = currentContainer as List;
+    var reviver = this.reviver;
+    if (reviver != null) {
+      value = reviver(list.length, value);
+    }
+    list.add(value);
     value = null;
   }
 
@@ -197,30 +186,19 @@
     popContainer();
   }
 
-  /** Read out the final result of parsing a JSON string. */
+  /**
+   * Read out the final result of parsing a JSON string.
+   *
+   * Must only be called when the entire input has been parsed.
+   */
   dynamic get result {
     assert(currentContainer == null);
-    return value;
-  }
-}
-
-class _ReviverJsonListener extends _BuildJsonListener {
-  final Object? Function(Object? key, Object? value) reviver;
-  _ReviverJsonListener(this.reviver);
-
-  void arrayElement() {
-    List list = currentContainer;
-    value = reviver(list.length, value);
-    super.arrayElement();
-  }
-
-  void propertyValue() {
-    value = reviver(key, value);
-    super.propertyValue();
-  }
-
-  dynamic get result {
-    return reviver(null, value);
+    var reviver = this.reviver;
+    if (reviver != null) {
+      return reviver(null, value);
+    } else {
+      return value;
+    }
   }
 }
 
@@ -1477,13 +1455,7 @@
 
   static _JsonStringParser _createParser(
       Object? Function(Object? key, Object? value)? reviver) {
-    _BuildJsonListener listener;
-    if (reviver == null) {
-      listener = new _BuildJsonListener();
-    } else {
-      listener = new _ReviverJsonListener(reviver);
-    }
-    return new _JsonStringParser(listener);
+    return new _JsonStringParser(new _JsonListener(reviver));
   }
 
   void addSlice(String chunk, int start, int end, bool isLast) {
@@ -1591,13 +1563,7 @@
   static _JsonUtf8Parser _createParser(
       Object? Function(Object? key, Object? value)? reviver,
       bool allowMalformed) {
-    _BuildJsonListener listener;
-    if (reviver == null) {
-      listener = new _BuildJsonListener();
-    } else {
-      listener = new _ReviverJsonListener(reviver);
-    }
-    return new _JsonUtf8Parser(listener, allowMalformed);
+    return new _JsonUtf8Parser(new _JsonListener(reviver), allowMalformed);
   }
 
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
diff --git a/sdk/lib/_internal/vm/lib/core_patch.dart b/sdk/lib/_internal/vm/lib/core_patch.dart
index 0d1d4a8..78b3bab 100644
--- a/sdk/lib/_internal/vm/lib/core_patch.dart
+++ b/sdk/lib/_internal/vm/lib/core_patch.dart
@@ -23,7 +23,7 @@
         Lists,
         POWERS_OF_TEN,
         SubListIterable,
-        UnmodifiableListBase,
+        UnmodifiableListMixin,
         has63BitSmis,
         makeFixedListUnmodifiable,
         makeListFixedLength,
@@ -66,6 +66,7 @@
 // part "double_patch.dart";
 // part "errors_patch.dart";
 // part "expando_patch.dart";
+// part "finalizer_patch.dart";
 // part "function.dart";
 // part "function_patch.dart";
 // part "growable_array.dart";
diff --git a/sdk/lib/_internal/vm/lib/errors_patch.dart b/sdk/lib/_internal/vm/lib/errors_patch.dart
index aaaf11f..05b0afa 100644
--- a/sdk/lib/_internal/vm/lib/errors_patch.dart
+++ b/sdk/lib/_internal/vm/lib/errors_patch.dart
@@ -134,9 +134,6 @@
   @pragma("vm:entry-point")
   FallThroughError._create(this._url, this._line);
 
-  @pragma("vm:external-name", "FallThroughError_throwNew")
-  external static _throwNew(int caseClausePos);
-
   @patch
   String toString() {
     return "'$_url': Switch case fall-through at line $_line.";
@@ -176,9 +173,6 @@
   AbstractClassInstantiationError._create(
       this._className, this._url, this._line);
 
-  @pragma("vm:external-name", "AbstractClassInstantiationError_throwNew")
-  external static _throwNew(int caseClausePos, String className);
-
   @patch
   String toString() {
     return "Cannot instantiate abstract class $_className: "
diff --git a/sdk/lib/_internal/vm/lib/expando_patch.dart b/sdk/lib/_internal/vm/lib/expando_patch.dart
index 882231f..cf34b7f 100644
--- a/sdk/lib/_internal/vm/lib/expando_patch.dart
+++ b/sdk/lib/_internal/vm/lib/expando_patch.dart
@@ -173,14 +173,22 @@
   factory WeakReference(T object) = _WeakReferenceImpl<T>;
 }
 
+@pragma("vm:entry-point")
 class _WeakReferenceImpl<T extends Object> implements WeakReference<T> {
-  // TODO(http://dartbug.com/48162): Implement _WeakReference in the VM
-  // instead of reusing WeakProperty.
-  final _WeakProperty _weakProperty;
+  _WeakReferenceImpl(T object) {
+    Expando._checkType(object);
+    _target = object;
+  }
 
-  _WeakReferenceImpl(T object) : _weakProperty = _WeakProperty()..key = object;
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  @pragma("vm:external-name", "WeakReference_getTarget")
+  external T? get target;
 
-  T? get target => unsafeCast<T?>(_weakProperty.key);
+  @pragma("vm:recognized", "other")
+  @pragma("vm:prefer-inline")
+  @pragma("vm:external-name", "WeakReference_setTarget")
+  external set _target(T? value);
 }
 
 @patch
diff --git a/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart b/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.dart
new file mode 100644
index 0000000..e697230
--- /dev/null
+++ b/sdk/lib/_internal/vm/lib/ffi_native_finalizer_patch.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.
+
+// All imports must be in all FFI patch files to not depend on the order
+// the patches are applied.
+import 'dart:_internal';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+// This is a placeholder file which will shortly contain a NativeFinalizer
+// implementation.
diff --git a/sdk/lib/_internal/vm/lib/finalizer_patch.dart b/sdk/lib/_internal/vm/lib/finalizer_patch.dart
new file mode 100644
index 0000000..aec537b
--- /dev/null
+++ b/sdk/lib/_internal/vm/lib/finalizer_patch.dart
@@ -0,0 +1,8 @@
+// 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";
+
+// This is a placeholder file which will shortly contain a Finalizer
+// implementation.
diff --git a/sdk/lib/_internal/vm/lib/growable_array.dart b/sdk/lib/_internal/vm/lib/growable_array.dart
index c6d9e46..4644c30 100644
--- a/sdk/lib/_internal/vm/lib/growable_array.dart
+++ b/sdk/lib/_internal/vm/lib/growable_array.dart
@@ -143,11 +143,8 @@
     if (elements is _GrowableList) {
       return _GrowableList._ofGrowableList(unsafeCast(elements));
     }
-    if (elements is _List) {
-      return _GrowableList._ofList(unsafeCast(elements));
-    }
-    if (elements is _ImmutableList) {
-      return _GrowableList._ofImmutableList(unsafeCast(elements));
+    if (elements is _Array) {
+      return _GrowableList._ofArray(unsafeCast(elements));
     }
     if (elements is EfficientLengthIterable) {
       return _GrowableList._ofEfficientLengthIterable(unsafeCast(elements));
@@ -155,7 +152,7 @@
     return _GrowableList._ofOther(elements);
   }
 
-  factory _GrowableList._ofList(_List<T> elements) {
+  factory _GrowableList._ofArray(_Array<T> elements) {
     final int length = elements.length;
     if (length > 0) {
       final data = _List(_adjustedCapacity(length));
@@ -183,20 +180,6 @@
     return _GrowableList<T>.empty();
   }
 
-  factory _GrowableList._ofImmutableList(_ImmutableList<T> elements) {
-    final int length = elements.length;
-    if (length > 0) {
-      final data = _List(_adjustedCapacity(length));
-      for (int i = 0; i < length; i++) {
-        data[i] = elements[i];
-      }
-      final list = _GrowableList<T>._withData(data);
-      list._setLength(length);
-      return list;
-    }
-    return _GrowableList<T>.empty();
-  }
-
   factory _GrowableList._ofEfficientLengthIterable(
       EfficientLengthIterable<T> elements) {
     final int length = elements.length;
@@ -222,7 +205,7 @@
     return list;
   }
 
-  @pragma("vm:recognized", "asm-intrinsic")
+  @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type",
       <dynamic>[_GrowableList, "result-type-uses-passed-type-arguments"])
   @pragma("vm:external-name", "GrowableList_allocate")
diff --git a/sdk/lib/_internal/vm/lib/hash_factories.dart b/sdk/lib/_internal/vm/lib/hash_factories.dart
index 9e45e8d..01558af 100644
--- a/sdk/lib/_internal/vm/lib/hash_factories.dart
+++ b/sdk/lib/_internal/vm/lib/hash_factories.dart
@@ -2,6 +2,67 @@
 // for 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 placeholder file which will shortly contain the LinkedhashMap and
-// LinkedHashSet patches from collection_patch.dart. The change is done in two
-// steps to ease rolling it into Flutter.
+// The [LinkedHashMap] and [LinkedHashSet] factory constructors return different
+// internal implementations depending on the supplied callback functions.
+
+@patch
+class LinkedHashMap<K, V> {
+  @patch
+  factory LinkedHashMap(
+      {bool equals(K key1, K key2)?,
+      int hashCode(K key)?,
+      bool isValidKey(potentialKey)?}) {
+    if (isValidKey == null) {
+      if (hashCode == null) {
+        if (equals == null) {
+          return new _InternalLinkedHashMap<K, V>();
+        }
+        hashCode = _defaultHashCode;
+      } else {
+        if (identical(identityHashCode, hashCode) &&
+            identical(identical, equals)) {
+          return new _CompactLinkedIdentityHashMap<K, V>();
+        }
+        equals ??= _defaultEquals;
+      }
+    } else {
+      hashCode ??= _defaultHashCode;
+      equals ??= _defaultEquals;
+    }
+    return new _CompactLinkedCustomHashMap<K, V>(equals, hashCode, isValidKey);
+  }
+
+  @patch
+  factory LinkedHashMap.identity() => new _CompactLinkedIdentityHashMap<K, V>();
+}
+
+@patch
+class LinkedHashSet<E> {
+  @patch
+  factory LinkedHashSet(
+      {bool equals(E e1, E e2)?,
+      int hashCode(E e)?,
+      bool isValidKey(potentialKey)?}) {
+    if (isValidKey == null) {
+      if (hashCode == null) {
+        if (equals == null) {
+          return new _CompactLinkedHashSet<E>();
+        }
+        hashCode = _defaultHashCode;
+      } else {
+        if (identical(identityHashCode, hashCode) &&
+            identical(identical, equals)) {
+          return new _CompactLinkedIdentityHashSet<E>();
+        }
+        equals ??= _defaultEquals;
+      }
+    } else {
+      hashCode ??= _defaultHashCode;
+      equals ??= _defaultEquals;
+    }
+    return new _CompactLinkedCustomHashSet<E>(equals, hashCode, isValidKey);
+  }
+
+  @patch
+  factory LinkedHashSet.identity() => new _CompactLinkedIdentityHashSet<E>();
+}
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index b8141d6..4c0fa92 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -7,6 +7,7 @@
 /// used by patches of that library. We plan to change this when we have a
 /// shared front end and simply use parts.
 
+import "dart:async" show Timer;
 import "dart:core" hide Symbol;
 
 import "dart:isolate" show SendPort;
@@ -25,10 +26,12 @@
 
 @patch
 @pragma("vm:external-name", "Internal_makeListFixedLength")
+@pragma("vm:exact-result-type", "dart:core#_List")
 external List<T> makeListFixedLength<T>(List<T> growableList);
 
 @patch
 @pragma("vm:external-name", "Internal_makeFixedListUnmodifiable")
+@pragma("vm:exact-result-type", "dart:core#_ImmutableList")
 external List<T> makeFixedListUnmodifiable<T>(List<T> fixedLengthList);
 
 @patch
@@ -38,6 +41,7 @@
 /// The returned string is a [_OneByteString] with uninitialized content.
 @pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:external-name", "Internal_allocateOneByteString")
+@pragma("vm:exact-result-type", "dart:core#_OneByteString")
 external String allocateOneByteString(int length);
 
 /// The [string] must be a [_OneByteString]. The [index] must be valid.
@@ -60,6 +64,7 @@
 /// The returned string is a [_TwoByteString] with uninitialized content.
 @pragma("vm:recognized", "asm-intrinsic")
 @pragma("vm:external-name", "Internal_allocateTwoByteString")
+@pragma("vm:exact-result-type", "dart:core#_TwoByteString")
 external String allocateTwoByteString(int length);
 
 /// The [string] must be a [_TwoByteString]. The [index] must be valid.
@@ -69,36 +74,30 @@
 
 class VMLibraryHooks {
   // Example: "dart:isolate _Timer._factory"
-  static var timerFactory;
+  static Timer Function(int, void Function(Timer), bool)? timerFactory;
 
   // Example: "dart:io _EventHandler._sendData"
-  static var eventHandlerSendData;
+  static late void Function(Object?, SendPort, int) eventHandlerSendData;
 
   // A nullary closure that answers the current clock value in milliseconds.
   // Example: "dart:io _EventHandler._timerMillisecondClock"
-  static var timerMillisecondClock;
-
-  // Implementation of Resource.readAsBytes.
-  static var resourceReadAsBytes;
+  static late int Function() timerMillisecondClock;
 
   // Implementation of package root/map provision.
-  static var packageRootString;
-  static var packageConfigString;
-  static var packageConfigUriFuture;
-  static var resolvePackageUriFuture;
+  static String? packageRootString;
+  static String? packageConfigString;
+  static Future<Uri?> Function()? packageConfigUriFuture;
+  static Future<Uri?> Function(Uri)? resolvePackageUriFuture;
 
-  static var _computeScriptUri;
-  static var _cachedScript;
-  static set platformScript(var f) {
-    _computeScriptUri = f;
+  static Uri Function()? _computeScriptUri;
+  static Uri? _cachedScript;
+  static set platformScript(Object? f) {
+    _computeScriptUri = f as Uri Function()?;
     _cachedScript = null;
   }
 
-  static get platformScript {
-    if (_cachedScript == null && _computeScriptUri != null) {
-      _cachedScript = _computeScriptUri();
-    }
-    return _cachedScript;
+  static Uri? get platformScript {
+    return _cachedScript ??= _computeScriptUri?.call();
   }
 }
 
@@ -156,13 +155,9 @@
   return newStack;
 }
 
-// This function can be used to skip implicit or explicit checked down casts in
-// the parts of the core library implementation where we know by construction the
-// type of a value.
-//
-// Important: this is unsafe and must be used with care.
+@patch
 @pragma("vm:external-name", "Internal_unsafeCast")
-external T unsafeCast<T>(Object? v);
+external T unsafeCast<T>(dynamic v);
 
 // This function can be used to keep an object alive till that point.
 @pragma("vm:recognized", "other")
diff --git a/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart b/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart
index ae387bf..6c75bc2 100644
--- a/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart
+++ b/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart
@@ -40,8 +40,8 @@
 
   // Internal representation of the invocation mirror.
   String? _functionName;
-  List? _argumentsDescriptor;
-  List? _arguments;
+  List<Object?>? _argumentsDescriptor;
+  List<Object?>? _arguments;
   bool _isSuperInvocation = false;
   int _delayedTypeArgumentsLen = 0;
 
@@ -49,8 +49,8 @@
   Symbol? _memberName;
   int _type = _UNINITIALIZED;
   List<Type>? _typeArguments;
-  List? _positionalArguments;
-  Map<Symbol, dynamic>? _namedArguments;
+  List<Object?>? _positionalArguments;
+  Map<Symbol, Object?>? _namedArguments;
 
   _InvocationMirror._withType(this._memberName, int? type, this._typeArguments,
       this._positionalArguments, this._namedArguments)
@@ -87,7 +87,7 @@
   }
 
   int get _typeArgsLen {
-    int typeArgsLen = _argumentsDescriptor![_TYPE_ARGS_LEN];
+    var typeArgsLen = _argumentsDescriptor![_TYPE_ARGS_LEN] as int;
     return typeArgsLen == 0 ? _delayedTypeArgumentsLen : typeArgsLen;
   }
 
@@ -113,12 +113,13 @@
     if (_positionalArguments == null) {
       // The argument descriptor counts the receiver, but not the type arguments
       // as positional arguments.
-      int numPositionalArguments = _argumentsDescriptor![_POSITIONAL_COUNT] - 1;
+      var numPositionalArguments =
+          (_argumentsDescriptor![_POSITIONAL_COUNT] as int) - 1;
       if (numPositionalArguments == 0) {
         return _positionalArguments = const [];
       }
       // Exclude receiver and type args in the returned list.
-      int receiverIndex = _typeArgsLen > 0 ? 1 : 0;
+      var receiverIndex = _typeArgsLen > 0 ? 1 : 0;
       var args = _arguments!;
       _positionalArguments = new _ImmutableList._from(
           args, receiverIndex + 1, numPositionalArguments);
@@ -129,18 +130,20 @@
   Map<Symbol, dynamic> get namedArguments {
     if (_namedArguments == null) {
       final argsDescriptor = _argumentsDescriptor!;
-      int numArguments = argsDescriptor[_COUNT] - 1; // Exclude receiver.
-      int numPositionalArguments = argsDescriptor[_POSITIONAL_COUNT] - 1;
-      int numNamedArguments = numArguments - numPositionalArguments;
+      var numArguments =
+          (argsDescriptor[_COUNT] as int) - 1; // Exclude receiver.
+      var numPositionalArguments =
+          (argsDescriptor[_POSITIONAL_COUNT] as int) - 1;
+      var numNamedArguments = numArguments - numPositionalArguments;
       if (numNamedArguments == 0) {
         return _namedArguments = const {};
       }
-      int receiverIndex = _typeArgsLen > 0 ? 1 : 0;
-      final namedArguments = new Map<Symbol, dynamic>();
-      for (int i = 0; i < numNamedArguments; i++) {
-        int namedEntryIndex = _FIRST_NAMED_ENTRY + 2 * i;
-        int pos = argsDescriptor[namedEntryIndex + 1];
-        String arg_name = argsDescriptor[namedEntryIndex];
+      var receiverIndex = _typeArgsLen > 0 ? 1 : 0;
+      final namedArguments = new Map<Symbol, Object?>();
+      for (var i = 0; i < numNamedArguments; i++) {
+        var namedEntryIndex = _FIRST_NAMED_ENTRY + 2 * i;
+        var pos = argsDescriptor[namedEntryIndex + 1] as int;
+        var arg_name = argsDescriptor[namedEntryIndex] as String;
         var arg_value = _arguments![receiverIndex + pos];
         namedArguments[new internal.Symbol.unvalidated(arg_name)] = arg_value;
       }
diff --git a/sdk/lib/_internal/vm/lib/isolate_patch.dart b/sdk/lib/_internal/vm/lib/isolate_patch.dart
index 6e3aabf..4e7b164 100644
--- a/sdk/lib/_internal/vm/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/vm/lib/isolate_patch.dart
@@ -366,7 +366,11 @@
       throw new UnsupportedError("Isolate.spawn");
     }
     if (script.isScheme("package")) {
-      script = await Isolate.resolvePackageUri(script);
+      if (Isolate._packageSupported()) {
+        // resolving script uri is not really neccessary, but can be useful
+        // for better failed-to-lookup-function-in-a-script spawn errors.
+        script = await Isolate.resolvePackageUri(script);
+      }
     }
 
     final RawReceivePort readyPort =
@@ -652,6 +656,31 @@
   static Never exit([SendPort? finalMessagePort, Object? message]) {
     _exit(finalMessagePort, message);
   }
+
+  /**
+   * Creates an Uri representing the script which was compiled into kernel
+   * binary in [kernelBlob].
+   * The resulting Uri can be used for the subsequent spawnUri calls.
+   * Such spawnUri will start an isolate which would run the given
+   * compiled script in [kernelBlob].
+   */
+  /*static*/ Uri createUriForKernelBlob(Uint8List kernelBlob) {
+    return Uri.parse(_registerKernelBlob(kernelBlob));
+  }
+
+  /**
+   * Unregisters kernel blob previously registered with
+   * [createUriForKernelBlob] and frees underlying resources.
+   */
+  /*static*/ void unregisterKernelBlobUri(Uri kernelBlobUri) {
+    _unregisterKernelBlob(kernelBlobUri.toString());
+  }
+
+  @pragma("vm:external-name", "Isolate_registerKernelBlob")
+  external static String _registerKernelBlob(Uint8List kernelBlob);
+
+  @pragma("vm:external-name", "Isolate_unregisterKernelBlob")
+  external static void _unregisterKernelBlob(String kernelBlobUri);
 }
 
 @patch
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index ae7872c..05b498b 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -214,30 +214,19 @@
 }
 
 class _Random implements Random {
-  // Internal state of the random number generator.
-  @pragma("vm:entry-point")
-  final Uint32List _state;
-  static const _kSTATE_LO = 0;
-  static const _kSTATE_HI = 1; // Unused in Dart code.
+  int _state;
 
   _Random._withState(this._state);
 
   // The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32.
   // http://en.wikipedia.org/wiki/Multiply-with-carry
   // The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1.
-
-  // Implements:
-  //   const _A = 0xffffda61;
-  //   var state =
-  //       ((_A * (_state[_kSTATE_LO])) + _state[_kSTATE_HI]) & ((1 << 64) - 1);
-  //   _state[_kSTATE_LO] = state & ((1 << 32) - 1);
-  //   _state[_kSTATE_HI] = state >> 32;
-  // This is a native to prevent 64-bit operations in Dart, which
-  // fail with --throw_on_javascript_int_overflow.
-  // TODO(regis): Implement in Dart and remove Random_nextState in math.cc.
-  @pragma("vm:recognized", "asm-intrinsic")
-  @pragma("vm:external-name", "Random_nextState")
-  external void _nextState();
+  void _nextState() {
+    const A = 0xffffda61;
+    final state_lo = _state & 0xFFFFFFFF;
+    final state_hi = _state >>> 32;
+    _state = (A * state_lo) + state_hi;
+  }
 
   int nextInt(int max) {
     const limit = 0x3FFFFFFF;
@@ -248,14 +237,14 @@
     if ((max & -max) == max) {
       // Fast case for powers of two.
       _nextState();
-      return _state[_kSTATE_LO] & (max - 1);
+      return _state & 0xFFFFFFFF & (max - 1);
     }
 
     var rnd32;
     var result;
     do {
       _nextState();
-      rnd32 = _state[_kSTATE_LO];
+      rnd32 = _state & 0xFFFFFFFF;
       result = rnd32 % max;
     } while ((rnd32 - result + max) > _POW2_32);
     return result;
@@ -277,19 +266,31 @@
   // Use a singleton Random object to get a new seed if no seed was passed.
   static final _prng = new _Random._withState(_initialSeed());
 
-  // This is a native to prevent 64-bit operations in Dart, which
-  // fail with --throw_on_javascript_int_overflow.
-  // TODO(regis): Implement here in Dart and remove native in math.cc.
-  @pragma("vm:external-name", "Random_setupSeed")
-  external static Uint32List _setupSeed(int seed);
+  // Thomas Wang 64-bit mix.
+  // http://www.concentric.net/~Ttwang/tech/inthash.htm
+  // via. http://web.archive.org/web/20071223173210/http://www.concentric.net/~Ttwang/tech/inthash.htm
+  static int _setupSeed(int n) {
+    n = (~n) + (n << 21); // n = (n << 21) - n - 1;
+    n = n ^ (n >>> 24);
+    n = n * 265; // n = (n + (n << 3)) + (n << 8);
+    n = n ^ (n >>> 14);
+    n = n * 21; // n = (n + (n << 2)) + (n << 4);
+    n = n ^ (n >>> 28);
+    n = n + (n << 31);
+    if (n == 0) {
+      n = 0x5a17;
+    }
+    return n;
+  }
+
   // Get a seed from the VM's random number provider.
   @pragma("vm:external-name", "Random_initialSeed")
-  external static Uint32List _initialSeed();
+  external static int _initialSeed();
 
   static int _nextSeed() {
     // Trigger the PRNG once to change the internal state.
     _prng._nextState();
-    return _prng._state[_kSTATE_LO];
+    return _prng._state & 0xFFFFFFFF;
   }
 }
 
diff --git a/sdk/lib/_internal/vm/lib/string_patch.dart b/sdk/lib/_internal/vm/lib/string_patch.dart
index c62a03a..0a51f33 100644
--- a/sdk/lib/_internal/vm/lib/string_patch.dart
+++ b/sdk/lib/_internal/vm/lib/string_patch.dart
@@ -986,6 +986,9 @@
 
   @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
+  // Intrinsic is more efficient than an inlined body even for the small
+  // strings.
+  @pragma('vm:never-inline')
   bool operator ==(Object other) {
     return super == other;
   }
@@ -1332,6 +1335,9 @@
 
   @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
+  // Intrinsic is more efficient than an inlined body even for the small
+  // strings.
+  @pragma('vm:never-inline')
   bool operator ==(Object other) {
     return super == other;
   }
diff --git a/sdk/lib/_internal/vm/lib/timer_impl.dart b/sdk/lib/_internal/vm/lib/timer_impl.dart
index ac1939d..1f27731 100644
--- a/sdk/lib/_internal/vm/lib/timer_impl.dart
+++ b/sdk/lib/_internal/vm/lib/timer_impl.dart
@@ -29,8 +29,9 @@
     if (_used == _list.length) {
       _resize();
     }
-    timer._indexOrNext = _used++;
-    _list[timer._indexOrNext] = timer;
+    var index = _used++;
+    timer._indexOrNext = index;
+    _list[index] = timer;
     _bubbleUp(timer);
   }
 
@@ -49,8 +50,9 @@
     }
     var last = _list[_used];
     if (!identical(last, timer)) {
-      last._indexOrNext = timer._indexOrNext;
-      _list[last._indexOrNext] = last;
+      var index = timer._indexOrNext as int;
+      last._indexOrNext = index;
+      _list[index] = last;
       if (last._compareTo(timer) < 0) {
         _bubbleUp(last);
       } else {
@@ -81,8 +83,8 @@
 
   void _bubbleDown(_Timer timer) {
     while (true) {
-      int leftIndex = _leftChildIndex(timer._indexOrNext);
-      int rightIndex = _rightChildIndex(timer._indexOrNext);
+      var leftIndex = _leftChildIndex(timer._indexOrNext as int);
+      var rightIndex = _rightChildIndex(timer._indexOrNext as int);
       _Timer newest = timer;
       if (leftIndex < _used && _list[leftIndex]._compareTo(newest) < 0) {
         newest = _list[leftIndex];
@@ -99,14 +101,16 @@
   }
 
   void _swap(_Timer first, _Timer second) {
-    int tmp = first._indexOrNext;
-    first._indexOrNext = second._indexOrNext;
-    second._indexOrNext = tmp;
-    _list[first._indexOrNext] = first;
-    _list[second._indexOrNext] = second;
+    var newFirstIndex = second._indexOrNext as int;
+    var newSecondIndex = first._indexOrNext as int;
+    first._indexOrNext = newFirstIndex;
+    second._indexOrNext = newSecondIndex;
+    _list[newFirstIndex] = first;
+    _list[newSecondIndex] = second;
   }
 
-  _Timer _parent(_Timer timer) => _list[_parentIndex(timer._indexOrNext)];
+  _Timer _parent(_Timer timer) =>
+      _list[_parentIndex(timer._indexOrNext as int)];
 
   static int _parentIndex(int index) => (index - 1) ~/ 2;
   static int _leftChildIndex(int index) => 2 * index + 1;
@@ -136,18 +140,19 @@
   static const _ID_MASK = 0x1fffffff;
   static int _idCount = 0;
 
-  static RawReceivePort? _receivePort;
+  static _RawReceivePortImpl? _receivePort;
   static SendPort? _sendPort;
   static bool _receivePortActive = false;
   static int _scheduledWakeupTime = 0;
 
   static bool _handlingCallbacks = false;
 
-  Function? _callback; // Closure to call when timer fires. null if canceled.
+  void Function(Timer)?
+      _callback; // Closure to call when timer fires. null if canceled.
   int _wakeupTime; // Expiration time.
   final int _milliSeconds; // Duration specified at creation.
   final bool _repeating; // Indicates periodic timers.
-  var _indexOrNext; // Index if part of the TimerHeap, link otherwise.
+  Object? _indexOrNext; // Index if part of the TimerHeap, link otherwise.
   int _id; // Incrementing id to enable sorting of timers with same expiry.
 
   int _tick = 0; // Backing for [tick],
@@ -271,20 +276,20 @@
 
   // Handle the notification of a zero timer. Make sure to also execute non-zero
   // timers with a lower expiration time.
-  static List _queueFromZeroEvent() {
-    var pendingTimers = <dynamic>[];
+  static List<_Timer> _queueFromZeroEvent() {
+    var pendingTimers = <_Timer>[];
     final firstTimer = _firstZeroTimer;
     if (firstTimer != null) {
       // Collect pending timers from the timer heap that have an expiration prior
       // to the currently notified zero timer.
-      var timer;
+      _Timer timer;
       while (!_heap.isEmpty && (_heap.first._compareTo(firstTimer) < 0)) {
         timer = _heap.removeFirst();
         pendingTimers.add(timer);
       }
       // Append the first zero timer to the pending timers.
-      timer = _firstZeroTimer;
-      _firstZeroTimer = timer._indexOrNext;
+      timer = firstTimer;
+      _firstZeroTimer = timer._indexOrNext as _Timer?;
       timer._indexOrNext = null;
       pendingTimers.add(timer);
     }
@@ -321,8 +326,8 @@
     }
   }
 
-  static List _queueFromTimeoutEvent() {
-    var pendingTimers = [];
+  static List<_Timer> _queueFromTimeoutEvent() {
+    var pendingTimers = <_Timer>[];
     final firstTimer = _firstZeroTimer;
     if (firstTimer != null) {
       // Collect pending timers from the timer heap that have an expiration
@@ -331,25 +336,23 @@
       // current time, meaning all timers which are "less than" the first zero
       // timer are expired. The first zero timer will be dispatched when its
       // corresponding message is delivered.
-      var timer;
       while (!_heap.isEmpty && (_heap.first._compareTo(firstTimer) < 0)) {
-        timer = _heap.removeFirst();
+        var timer = _heap.removeFirst();
         pendingTimers.add(timer);
       }
     } else {
       // Collect pending timers from the timer heap which have expired at this
       // time.
       var currentTime = VMLibraryHooks.timerMillisecondClock();
-      var timer;
       while (!_heap.isEmpty && (_heap.first._wakeupTime <= currentTime)) {
-        timer = _heap.removeFirst();
+        var timer = _heap.removeFirst();
         pendingTimers.add(timer);
       }
     }
     return pendingTimers;
   }
 
-  static void _runTimers(List pendingTimers) {
+  static void _runTimers(List<_Timer> pendingTimers) {
     // If there are no pending timers currently reset the id space before we
     // have a chance to enqueue new timers.
     if (_heap.isEmpty && (_firstZeroTimer == null)) {
@@ -375,8 +378,8 @@
         // One of the timers in the pending_timers list can cancel
         // one of the later timers which will set the callback to
         // null. Or the pending zero timer has been canceled earlier.
-        if (timer._callback != null) {
-          var callback = timer._callback;
+        var callback = timer._callback;
+        if (callback != null) {
           if (!timer._repeating) {
             // Mark timer as inactive.
             timer._callback = null;
@@ -414,7 +417,7 @@
   }
 
   static void _handleMessage(msg) {
-    var pendingTimers;
+    List<_Timer> pendingTimers;
     if (msg == _ZERO_EVENT) {
       pendingTimers = _queueFromZeroEvent();
       assert(pendingTimers.length > 0);
@@ -434,14 +437,14 @@
     if (!_receivePortActive) {
       _createTimerHandler();
     }
-    VMLibraryHooks.eventHandlerSendData(null, _sendPort, wakeupTime);
+    VMLibraryHooks.eventHandlerSendData(null, _sendPort!, wakeupTime);
     _scheduledWakeupTime = wakeupTime;
   }
 
   // Cancel pending wakeups in the event handler.
   static void _cancelWakeup() {
     if (_sendPort != null) {
-      VMLibraryHooks.eventHandlerSendData(null, _sendPort, _NO_TIMER);
+      VMLibraryHooks.eventHandlerSendData(null, _sendPort!, _NO_TIMER);
       _scheduledWakeupTime = 0;
     }
   }
@@ -449,21 +452,23 @@
   // Create a receive port and register a message handler for the timer
   // events.
   static void _createTimerHandler() {
-    if (_receivePort == null) {
-      assert(_receivePort == null);
+    var receivePort = _receivePort;
+    if (receivePort == null) {
       assert(_sendPort == null);
-      _receivePort = RawReceivePort(_handleMessage, 'Timer');
-      _sendPort = _receivePort!.sendPort;
+      final port = _RawReceivePortImpl('Timer');
+      port.handler = _handleMessage;
+      _sendPort = port.sendPort;
+      _receivePort = port;
       _scheduledWakeupTime = 0;
     } else {
-      (_receivePort as _RawReceivePortImpl)._setActive(true);
+      receivePort._setActive(true);
     }
     _receivePortActive = true;
   }
 
   static void _shutdownTimerHandler() {
     _scheduledWakeupTime = 0;
-    (_receivePort as _RawReceivePortImpl)._setActive(false);
+    _receivePort!._setActive(false);
     _receivePortActive = false;
   }
 
diff --git a/sdk/lib/_internal/vm/lib/typed_data_patch.dart b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
index 37587c7..68c63b1 100644
--- a/sdk/lib/_internal/vm/lib/typed_data_patch.dart
+++ b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
@@ -2228,6 +2228,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint8List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Uint8List>
     implements Uint8List {
@@ -2281,6 +2282,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint8ClampedList extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Uint8ClampedList>
     implements Uint8ClampedList {
@@ -2334,6 +2336,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int16List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Int16List>
     implements Int16List {
@@ -2407,6 +2410,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint16List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Uint16List>
     implements Uint16List {
@@ -2480,6 +2484,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int32List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Int32List>
     implements Int32List {
@@ -2540,6 +2545,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint32List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Uint32List>
     implements Uint32List {
@@ -2600,6 +2606,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int64List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Int64List>
     implements Int64List {
@@ -2660,6 +2667,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint64List extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Uint64List>
     implements Uint64List {
@@ -2720,6 +2728,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Float32List extends _TypedList
     with _DoubleListMixin, _TypedDoubleListMixin<Float32List>
     implements Float32List {
@@ -2781,6 +2790,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Float64List extends _TypedList
     with _DoubleListMixin, _TypedDoubleListMixin<Float64List>
     implements Float64List {
@@ -3040,6 +3050,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _ExternalUint8Array extends _TypedList
     with _IntListMixin, _TypedIntListMixin<Uint8List>
     implements Uint8List {
@@ -4123,6 +4134,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int8ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Int8List>
     implements Int8List {
@@ -4164,6 +4176,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint8ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Uint8List>
     implements Uint8List {
@@ -4205,6 +4218,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint8ClampedArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Uint8ClampedList>
     implements Uint8ClampedList {
@@ -4246,6 +4260,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int16ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Int16List>
     implements Int16List {
@@ -4300,6 +4315,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint16ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Uint16List>
     implements Uint16List {
@@ -4355,6 +4371,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int32ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Int32List>
     implements Int32List {
@@ -4396,6 +4413,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint32ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Uint32List>
     implements Uint32List {
@@ -4437,6 +4455,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Int64ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Int64List>
     implements Int64List {
@@ -4478,6 +4497,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Uint64ArrayView extends _TypedListView
     with _IntListMixin, _TypedIntListMixin<Uint64List>
     implements Uint64List {
@@ -4519,6 +4539,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Float32ArrayView extends _TypedListView
     with _DoubleListMixin, _TypedDoubleListMixin<Float32List>
     implements Float32List {
@@ -4560,6 +4581,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _Float64ArrayView extends _TypedListView
     with _DoubleListMixin, _TypedDoubleListMixin<Float64List>
     implements Float64List {
@@ -4718,6 +4740,7 @@
 }
 
 @pragma("vm:entry-point")
+@pragma("wasm:entry-point")
 class _ByteDataView implements ByteData {
   @pragma("vm:recognized", "other")
   @pragma("vm:exact-result-type", _ByteDataView)
diff --git a/sdk/lib/_internal/wasm/OWNERS b/sdk/lib/_internal/wasm/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/sdk/lib/_internal/wasm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/sdk/lib/_internal/wasm/lib/bool.dart b/sdk/lib/_internal/wasm/lib/bool.dart
new file mode 100644
index 0000000..929e519
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/bool.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.
+
+@pragma("wasm:entry-point")
+class _BoxedBool implements bool {
+  // A boxed bool contains an unboxed bool.
+  @pragma("wasm:entry-point")
+  bool value = false;
+
+  @override
+  bool operator ==(Object other) {
+    return other is bool
+        ? this == other // Intrinsic ==
+        : false;
+  }
+
+  bool operator &(bool other) => this & other; // Intrinsic &
+  bool operator ^(bool other) => this ^ other; // Intrinsic ^
+  bool operator |(bool other) => this | other; // Intrinsic |
+}
diff --git a/sdk/lib/_internal/wasm/lib/class_id.dart b/sdk/lib/_internal/wasm/lib/class_id.dart
new file mode 100644
index 0000000..e650509
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/class_id.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.
+
+// part of "internal_patch.dart";
+
+@pragma("wasm:entry-point")
+class ClassID {
+  external static int getID(Object value);
+
+  @pragma("wasm:class-id", "dart.typed_data#_ExternalUint8Array")
+  external static int get cidExternalUint8Array;
+  @pragma("wasm:class-id", "dart.typed_data#_Uint8List")
+  external static int get cidUint8Array;
+  @pragma("wasm:class-id", "dart.typed_data#_Uint8ArrayView")
+  external static int get cidUint8ArrayView;
+
+  // Dummy, only used by VM-specific hash table code.
+  static final int numPredefinedCids = 1;
+}
diff --git a/sdk/lib/_internal/wasm/lib/core_patch.dart b/sdk/lib/_internal/wasm/lib/core_patch.dart
new file mode 100644
index 0000000..64b7d9d
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/core_patch.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:_internal" show patch;
+
+import "dart:_internal"
+    show
+        allocateOneByteString,
+        allocateTwoByteString,
+        CodeUnits,
+        copyRangeFromUint8ListToOneByteString,
+        doubleToIntBits,
+        EfficientLengthIterable,
+        FixedLengthListMixin,
+        IterableElementError,
+        ListIterator,
+        Lists,
+        mix64,
+        POWERS_OF_TEN,
+        SubListIterable,
+        UnmodifiableListMixin,
+        has63BitSmis,
+        makeFixedListUnmodifiable,
+        makeListFixedLength,
+        patch,
+        unsafeCast,
+        writeIntoOneByteString,
+        writeIntoTwoByteString;
+
+import "dart:collection"
+    show
+        HashMap,
+        IterableBase,
+        LinkedHashMap,
+        LinkedList,
+        LinkedListEntry,
+        ListBase,
+        MapBase,
+        Maps,
+        UnmodifiableMapBase,
+        UnmodifiableMapView;
+
+import 'dart:math' show Random;
+
+import "dart:typed_data"
+    show Endian, Uint8List, Int64List, Uint16List, Uint32List;
+
+import 'dart:wasm';
+
+typedef _Smi = int; // For compatibility with VM patch files
diff --git a/sdk/lib/_internal/wasm/lib/date_patch.dart b/sdk/lib/_internal/wasm/lib/date_patch.dart
new file mode 100644
index 0000000..f2f0672
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/date_patch.dart
@@ -0,0 +1,542 @@
+// 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";
+
+// This file is identical to the VM `date_patch.dart` except for the
+// implementation of `_getCurrentMicros` and the `_jsDateNow` import.
+// TODO(askesc): Share this file with the VM when the patching mechanism gains
+// support for patching an external member from a patch in a separate patch.
+
+@pragma("wasm:import", "Date.now")
+external double _jsDateNow();
+
+// VM implementation of DateTime.
+@patch
+class DateTime {
+  // Natives.
+  // The natives have been moved up here to work around Issue 10401.
+  @pragma("vm:external-name", "DateTime_currentTimeMicros")
+  static int _getCurrentMicros() =>
+      (_jsDateNow() * Duration.microsecondsPerMillisecond).toInt();
+
+  @pragma("vm:external-name", "DateTime_timeZoneName")
+  external static String _timeZoneNameForClampedSeconds(int secondsSinceEpoch);
+
+  @pragma("vm:external-name", "DateTime_timeZoneOffsetInSeconds")
+  external static int _timeZoneOffsetInSecondsForClampedSeconds(
+      int secondsSinceEpoch);
+
+  // Daylight-savings independent adjustment for the local time zone.
+  @pragma("vm:external-name", "DateTime_localTimeZoneAdjustmentInSeconds")
+  external static int _localTimeZoneAdjustmentInSeconds();
+
+  static const _MICROSECOND_INDEX = 0;
+  static const _MILLISECOND_INDEX = 1;
+  static const _SECOND_INDEX = 2;
+  static const _MINUTE_INDEX = 3;
+  static const _HOUR_INDEX = 4;
+  static const _DAY_INDEX = 5;
+  static const _WEEKDAY_INDEX = 6;
+  static const _MONTH_INDEX = 7;
+  static const _YEAR_INDEX = 8;
+
+  List<int>? __parts;
+
+  @patch
+  DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch,
+      {bool isUtc: false})
+      : this._withValue(
+            _validateMilliseconds(millisecondsSinceEpoch) *
+                Duration.microsecondsPerMillisecond,
+            isUtc: isUtc);
+
+  @patch
+  DateTime.fromMicrosecondsSinceEpoch(int microsecondsSinceEpoch,
+      {bool isUtc: false})
+      : this._withValue(microsecondsSinceEpoch, isUtc: isUtc);
+
+  @patch
+  DateTime._internal(int year, int month, int day, int hour, int minute,
+      int second, int millisecond, int microsecond, bool isUtc)
+      : this.isUtc = isUtc,
+        this._value = _brokenDownDateToValue(year, month, day, hour, minute,
+                second, millisecond, microsecond, isUtc) ??
+            -1 {
+    if (_value == -1) throw new ArgumentError();
+    if (isUtc == null) throw new ArgumentError();
+  }
+
+  static int _validateMilliseconds(int millisecondsSinceEpoch) =>
+      RangeError.checkValueInInterval(
+          millisecondsSinceEpoch,
+          -_maxMillisecondsSinceEpoch,
+          _maxMillisecondsSinceEpoch,
+          "millisecondsSinceEpoch");
+
+  @patch
+  DateTime._now()
+      : isUtc = false,
+        _value = _getCurrentMicros();
+
+  @patch
+  String get timeZoneName {
+    if (isUtc) return "UTC";
+    return _timeZoneName(microsecondsSinceEpoch);
+  }
+
+  @patch
+  Duration get timeZoneOffset {
+    if (isUtc) return new Duration();
+    int offsetInSeconds = _timeZoneOffsetInSeconds(microsecondsSinceEpoch);
+    return new Duration(seconds: offsetInSeconds);
+  }
+
+  @patch
+  bool operator ==(dynamic other) =>
+      other is DateTime &&
+      _value == other.microsecondsSinceEpoch &&
+      isUtc == other.isUtc;
+
+  @patch
+  bool isBefore(DateTime other) => _value < other.microsecondsSinceEpoch;
+
+  @patch
+  bool isAfter(DateTime other) => _value > other.microsecondsSinceEpoch;
+
+  @patch
+  bool isAtSameMomentAs(DateTime other) =>
+      _value == other.microsecondsSinceEpoch;
+
+  @patch
+  int compareTo(DateTime other) =>
+      _value.compareTo(other.microsecondsSinceEpoch);
+
+  /** The first list contains the days until each month in non-leap years. The
+    * second list contains the days in leap years. */
+  static const List<List<int>> _DAYS_UNTIL_MONTH = const [
+    const [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
+    const [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]
+  ];
+
+  static List<int> _computeUpperPart(int localMicros) {
+    const int DAYS_IN_4_YEARS = 4 * 365 + 1;
+    const int DAYS_IN_100_YEARS = 25 * DAYS_IN_4_YEARS - 1;
+    const int DAYS_IN_400_YEARS = 4 * DAYS_IN_100_YEARS + 1;
+    const int DAYS_1970_TO_2000 = 30 * 365 + 7;
+    const int DAYS_OFFSET =
+        1000 * DAYS_IN_400_YEARS + 5 * DAYS_IN_400_YEARS - DAYS_1970_TO_2000;
+    const int YEARS_OFFSET = 400000;
+
+    int resultYear = 0;
+    int resultMonth = 0;
+    int resultDay = 0;
+
+    // Always round down.
+    final int daysSince1970 =
+        _flooredDivision(localMicros, Duration.microsecondsPerDay);
+    int days = daysSince1970;
+    days += DAYS_OFFSET;
+    resultYear = 400 * (days ~/ DAYS_IN_400_YEARS) - YEARS_OFFSET;
+    days = unsafeCast<int>(days.remainder(DAYS_IN_400_YEARS));
+    days--;
+    int yd1 = days ~/ DAYS_IN_100_YEARS;
+    days = unsafeCast<int>(days.remainder(DAYS_IN_100_YEARS));
+    resultYear += 100 * yd1;
+    days++;
+    int yd2 = days ~/ DAYS_IN_4_YEARS;
+    days = unsafeCast<int>(days.remainder(DAYS_IN_4_YEARS));
+    resultYear += 4 * yd2;
+    days--;
+    int yd3 = days ~/ 365;
+    days = unsafeCast<int>(days.remainder(365));
+    resultYear += yd3;
+
+    bool isLeap = (yd1 == 0 || yd2 != 0) && yd3 == 0;
+    if (isLeap) days++;
+
+    List<int> daysUntilMonth = _DAYS_UNTIL_MONTH[isLeap ? 1 : 0];
+    for (resultMonth = 12;
+        daysUntilMonth[resultMonth - 1] > days;
+        resultMonth--) {
+      // Do nothing.
+    }
+    resultDay = days - daysUntilMonth[resultMonth - 1] + 1;
+
+    int resultMicrosecond = localMicros % Duration.microsecondsPerMillisecond;
+    int resultMillisecond =
+        _flooredDivision(localMicros, Duration.microsecondsPerMillisecond) %
+            Duration.millisecondsPerSecond;
+    int resultSecond =
+        _flooredDivision(localMicros, Duration.microsecondsPerSecond) %
+            Duration.secondsPerMinute;
+
+    int resultMinute =
+        _flooredDivision(localMicros, Duration.microsecondsPerMinute);
+    resultMinute %= Duration.minutesPerHour;
+
+    int resultHour =
+        _flooredDivision(localMicros, Duration.microsecondsPerHour);
+    resultHour %= Duration.hoursPerDay;
+
+    // In accordance with ISO 8601 a week
+    // starts with Monday. Monday has the value 1 up to Sunday with 7.
+    // 1970-1-1 was a Thursday.
+    int resultWeekday = ((daysSince1970 + DateTime.thursday - DateTime.monday) %
+            DateTime.daysPerWeek) +
+        DateTime.monday;
+
+    List<int> list = new List<int>.filled(_YEAR_INDEX + 1, 0);
+    list[_MICROSECOND_INDEX] = resultMicrosecond;
+    list[_MILLISECOND_INDEX] = resultMillisecond;
+    list[_SECOND_INDEX] = resultSecond;
+    list[_MINUTE_INDEX] = resultMinute;
+    list[_HOUR_INDEX] = resultHour;
+    list[_DAY_INDEX] = resultDay;
+    list[_WEEKDAY_INDEX] = resultWeekday;
+    list[_MONTH_INDEX] = resultMonth;
+    list[_YEAR_INDEX] = resultYear;
+    return list;
+  }
+
+  List<int> get _parts {
+    return __parts ??= _computeUpperPart(_localDateInUtcMicros);
+  }
+
+  @patch
+  DateTime add(Duration duration) {
+    return new DateTime._withValue(_value + duration.inMicroseconds,
+        isUtc: isUtc);
+  }
+
+  @patch
+  DateTime subtract(Duration duration) {
+    return new DateTime._withValue(_value - duration.inMicroseconds,
+        isUtc: isUtc);
+  }
+
+  @patch
+  Duration difference(DateTime other) {
+    return new Duration(microseconds: _value - other.microsecondsSinceEpoch);
+  }
+
+  @patch
+  int get millisecondsSinceEpoch =>
+      _value ~/ Duration.microsecondsPerMillisecond;
+
+  @patch
+  int get microsecondsSinceEpoch => _value;
+
+  @patch
+  int get microsecond => _parts[_MICROSECOND_INDEX];
+
+  @patch
+  int get millisecond => _parts[_MILLISECOND_INDEX];
+
+  @patch
+  int get second => _parts[_SECOND_INDEX];
+
+  @patch
+  int get minute => _parts[_MINUTE_INDEX];
+
+  @patch
+  int get hour => _parts[_HOUR_INDEX];
+
+  @patch
+  int get day => _parts[_DAY_INDEX];
+
+  @patch
+  int get weekday => _parts[_WEEKDAY_INDEX];
+
+  @patch
+  int get month => _parts[_MONTH_INDEX];
+
+  @patch
+  int get year => _parts[_YEAR_INDEX];
+
+  /**
+   * Returns the amount of microseconds in UTC that represent the same values
+   * as [this].
+   *
+   * Say `t` is the result of this function, then
+   * * `this.year == new DateTime.fromMicrosecondsSinceEpoch(t, true).year`,
+   * * `this.month == new DateTime.fromMicrosecondsSinceEpoch(t, true).month`,
+   * * `this.day == new DateTime.fromMicrosecondsSinceEpoch(t, true).day`,
+   * * `this.hour == new DateTime.fromMicrosecondsSinceEpoch(t, true).hour`,
+   * * ...
+   *
+   * Daylight savings is computed as if the date was computed in [1970..2037].
+   * If [this] lies outside this range then it is a year with similar
+   * properties (leap year, weekdays) is used instead.
+   */
+  int get _localDateInUtcMicros {
+    int micros = _value;
+    if (isUtc) return micros;
+    int offset =
+        _timeZoneOffsetInSeconds(micros) * Duration.microsecondsPerSecond;
+    return micros + offset;
+  }
+
+  static int _flooredDivision(int a, int b) {
+    return (a - (a < 0 ? b - 1 : 0)) ~/ b;
+  }
+
+  // Returns the days since 1970 for the start of the given [year].
+  // [year] may be before epoch.
+  static int _dayFromYear(int year) {
+    return 365 * (year - 1970) +
+        _flooredDivision(year - 1969, 4) -
+        _flooredDivision(year - 1901, 100) +
+        _flooredDivision(year - 1601, 400);
+  }
+
+  static bool _isLeapYear(int y) {
+    // (y % 16 == 0) matches multiples of 400, and is faster than % 400.
+    return (y % 4 == 0) && ((y % 16 == 0) || (y % 100 != 0));
+  }
+
+  /// Converts the given broken down date to microseconds.
+  @patch
+  static int? _brokenDownDateToValue(int year, int month, int day, int hour,
+      int minute, int second, int millisecond, int microsecond, bool isUtc) {
+    // Simplify calculations by working with zero-based month.
+    --month;
+    // Deal with under and overflow.
+    if (month >= 12) {
+      year += month ~/ 12;
+      month = month % 12;
+    } else if (month < 0) {
+      int realMonth = month % 12;
+      year += (month - realMonth) ~/ 12;
+      month = realMonth;
+    }
+
+    // First compute the seconds in UTC, independent of the [isUtc] flag. If
+    // necessary we will add the time-zone offset later on.
+    int days = day - 1;
+    days += _DAYS_UNTIL_MONTH[_isLeapYear(year) ? 1 : 0][month];
+    days += _dayFromYear(year);
+    int microsecondsSinceEpoch = days * Duration.microsecondsPerDay +
+        hour * Duration.microsecondsPerHour +
+        minute * Duration.microsecondsPerMinute +
+        second * Duration.microsecondsPerSecond +
+        millisecond * Duration.microsecondsPerMillisecond +
+        microsecond;
+
+    if (!isUtc) {
+      // Since [_timeZoneOffsetInSeconds] will crash if the input is far out of
+      // the valid range we do a preliminary test that weeds out values that can
+      // not become valid even with timezone adjustments.
+      // The timezone adjustment is always less than a day, so adding a security
+      // margin of one day should be enough.
+      if (microsecondsSinceEpoch.abs() >
+          _maxMillisecondsSinceEpoch * Duration.microsecondsPerMillisecond +
+              Duration.microsecondsPerDay) {
+        return null;
+      }
+
+      microsecondsSinceEpoch -= _toLocalTimeOffset(microsecondsSinceEpoch);
+    }
+    if (microsecondsSinceEpoch.abs() >
+        _maxMillisecondsSinceEpoch * Duration.microsecondsPerMillisecond) {
+      return null;
+    }
+    return microsecondsSinceEpoch;
+  }
+
+  static int _weekDay(y) {
+    // 1/1/1970 was a Thursday.
+    return (_dayFromYear(y) + 4) % 7;
+  }
+
+  /**
+   * Returns a year in the range 2008-2035 matching
+   * * leap year, and
+   * * week day of first day.
+   *
+   * Leap seconds are ignored.
+   * Adapted from V8's date implementation. See ECMA 262 - 15.9.1.9.
+   */
+  static int _equivalentYear(int year) {
+    // Returns year y so that _weekDay(y) == _weekDay(year).
+    // _weekDay returns the week day (in range 0 - 6).
+    // 1/1/1956 was a Sunday (i.e. weekday 0). 1956 was a leap-year.
+    // 1/1/1967 was a Sunday (i.e. weekday 0).
+    // Without leap years a subsequent year has a week day + 1 (for example
+    // 1/1/1968 was a Monday). With leap-years it jumps over one week day
+    // (e.g. 1/1/1957 was a Tuesday).
+    // After 12 years the weekdays have advanced by 12 days + 3 leap days =
+    // 15 days. 15 % 7 = 1. So after 12 years the week day has always
+    // (now independently of leap-years) advanced by one.
+    // weekDay * 12 gives thus a year starting with the wanted weekDay.
+    int recentYear = (_isLeapYear(year) ? 1956 : 1967) + (_weekDay(year) * 12);
+    // Close to the year 2008 the calendar cycles every 4 * 7 years (4 for the
+    // leap years, 7 for the weekdays).
+    // Find the year in the range 2008..2037 that is equivalent mod 28.
+    return 2008 + (recentYear - 2008) % 28;
+  }
+
+  /**
+   * Returns the UTC year for the corresponding [secondsSinceEpoch].
+   * It is relatively fast for values in the range 0 to year 2098.
+   *
+   * Code is adapted from V8.
+   */
+  static int _yearsFromSecondsSinceEpoch(int secondsSinceEpoch) {
+    const int DAYS_IN_4_YEARS = 4 * 365 + 1;
+    const int DAYS_IN_100_YEARS = 25 * DAYS_IN_4_YEARS - 1;
+    const int DAYS_YEAR_2098 = DAYS_IN_100_YEARS + 6 * DAYS_IN_4_YEARS;
+
+    int days = secondsSinceEpoch ~/ Duration.secondsPerDay;
+    if (days > 0 && days < DAYS_YEAR_2098) {
+      // According to V8 this fast case works for dates from 1970 to 2099.
+      return 1970 + (4 * days + 2) ~/ DAYS_IN_4_YEARS;
+    }
+    int micros = secondsSinceEpoch * Duration.microsecondsPerSecond;
+    return _computeUpperPart(micros)[_YEAR_INDEX];
+  }
+
+  /**
+   * Returns a date in seconds that is equivalent to the given
+   * date in microseconds [microsecondsSinceEpoch]. An equivalent
+   * date has the same fields (`month`, `day`, etc.) as the given
+   * date, but the `year` is in the range [1901..2038].
+   *
+   * * The time since the beginning of the year is the same.
+   * * If the given date is in a leap year then the returned
+   *   seconds are in a leap year, too.
+   * * The week day of given date is the same as the one for the
+   *   returned date.
+   */
+  static int _equivalentSeconds(int microsecondsSinceEpoch) {
+    const int CUT_OFF_SECONDS = 0x7FFFFFFF;
+
+    int secondsSinceEpoch = _flooredDivision(
+        microsecondsSinceEpoch, Duration.microsecondsPerSecond);
+
+    if (secondsSinceEpoch.abs() > CUT_OFF_SECONDS) {
+      int year = _yearsFromSecondsSinceEpoch(secondsSinceEpoch);
+      int days = _dayFromYear(year);
+      int equivalentYear = _equivalentYear(year);
+      int equivalentDays = _dayFromYear(equivalentYear);
+      int diffDays = equivalentDays - days;
+      secondsSinceEpoch += diffDays * Duration.secondsPerDay;
+    }
+    return secondsSinceEpoch;
+  }
+
+  static int _timeZoneOffsetInSeconds(int microsecondsSinceEpoch) {
+    int equivalentSeconds = _equivalentSeconds(microsecondsSinceEpoch);
+    return _timeZoneOffsetInSecondsForClampedSeconds(equivalentSeconds);
+  }
+
+  static String _timeZoneName(int microsecondsSinceEpoch) {
+    int equivalentSeconds = _equivalentSeconds(microsecondsSinceEpoch);
+    return _timeZoneNameForClampedSeconds(equivalentSeconds);
+  }
+
+  /// Finds the local time corresponding to a UTC date and time.
+  ///
+  /// The [microsecondsSinceEpoch] represents a particular
+  /// calendar date and clock time in UTC.
+  /// This methods returns a (usually different) point in time
+  /// where the local time had the same calendar date and clock
+  /// time (if such a time exists, otherwise it finds the "best"
+  /// substitute).
+  ///
+  /// A valid result is a point in time `microsecondsSinceEpoch - offset`
+  /// where the local time zone offset is `+offset`.
+  ///
+  /// In some cases there are two valid results, due to a time zone
+  /// change setting the clock back (for example exiting from daylight
+  /// saving time). In that case, we return the *earliest* valid result.
+  ///
+  /// In some cases there are no valid results, due to a time zone
+  /// change setting the clock forward (for example entering daylight
+  /// saving time). In that case, we return the time which would have
+  /// been correct in the earlier time zone (so asking for 2:30 AM
+  /// when clocks move directly from 2:00 to 3:00 will give the
+  /// time that *would have been* 2:30 in the earlier time zone,
+  /// which is now 3:30 in the local time zone).
+  ///
+  /// Returns the point in time as a number of microseconds since epoch.
+  static int _toLocalTimeOffset(int microsecondsSinceEpoch) {
+    // Argument is the UTC time corresponding to the desired
+    // calendar date/wall time.
+    // We now need to find an UTC time where the difference
+    // from `microsecondsSinceEpoch` is the same as the
+    // local time offset at that time. That is, we want to
+    // find `adjustment` in microseconds such that:
+    //
+    //  _timeZoneOffsetInSeconds(microsecondsSinceEpoch - offset)
+    //      * Duration.microsecondsPerSecond == offset
+    //
+    // Such an offset might not exist, if that wall time
+    // is skipped when a time zone change moves the clock forwards.
+    // In that case we pick a time after the switch which would be
+    // correct in the previous time zone.
+    // Also, there might be more than one solution if a time zone
+    // change moves the clock backwards and the same wall clock
+    // time occurs twice in the same day.
+    // In that case we pick the one in the time zone prior to
+    // the switch.
+
+    // Start with the time zone at the current microseconds since
+    // epoch. It's within one day of the real time we're looking for.
+
+    int offset = _timeZoneOffsetInSeconds(microsecondsSinceEpoch) *
+        Duration.microsecondsPerSecond;
+
+    // If offset is 0 (we're right around the UTC+0, and)
+    // we have found one solution.
+    if (offset != 0) {
+      // If not, try to find an actual solution in the time zone
+      // we just discovered.
+      int offset2 = _timeZoneOffsetInSeconds(microsecondsSinceEpoch - offset) *
+          Duration.microsecondsPerSecond;
+      if (offset2 != offset) {
+        // Also not a solution. We have found a second time zone
+        // within the same day. We assume that's all there are.
+        // Try again with the new time zone.
+        int offset3 =
+            _timeZoneOffsetInSeconds(microsecondsSinceEpoch - offset2) *
+                Duration.microsecondsPerSecond;
+        // Either offset3 is a solution (equal to offset2),
+        // or we have found two different time zones and no solution.
+        // In the latter case we choose the lower offset (latter time).
+        return (offset2 <= offset3 ? offset2 : offset3);
+      }
+      // We have found one solution and one time zone.
+      offset = offset2;
+    }
+    // Try to see if there is an earlier time zone which also
+    // has a solution.
+    // Pretends time zone changes are always at most two hours.
+    // (Double daylight saving happened, fx, in part of Canada in 1988).
+    int offset4 = _timeZoneOffsetInSeconds(microsecondsSinceEpoch -
+            offset -
+            2 * Duration.microsecondsPerHour) *
+        Duration.microsecondsPerSecond;
+    if (offset4 > offset) {
+      // The time zone at the earlier time had a greater
+      // offset, so it's possible that the desired wall clock
+      // occurs in that time zone too.
+      if (offset4 == offset + 2 * Duration.microsecondsPerHour) {
+        // A second and earlier solution, so use that.
+        return offset4;
+      }
+      // The time zone differs one hour earlier, but not by one
+      // hour, so check again in that time zone.
+      int offset5 = _timeZoneOffsetInSeconds(microsecondsSinceEpoch - offset4) *
+          Duration.microsecondsPerSecond;
+      if (offset5 == offset4) {
+        // Found a second solution earlier than the first solution, so use that.
+        return offset4;
+      }
+    }
+    // Did not find a solution in the earlier time
+    // zone, so just use the original result.
+    return offset;
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/developer.dart b/sdk/lib/_internal/wasm/lib/developer.dart
new file mode 100644
index 0000000..ba930b3
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/developer.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.
+
+// This is a stub implementation of `dart:developer`.
+
+import "dart:_internal" show patch;
+
+import "dart:async" show Zone;
+
+// Stubs for `developer.dart`.
+
+@patch
+bool debugger({bool when: true, String? message}) => when;
+
+@patch
+Object? inspect(Object? object) => object;
+
+@patch
+void log(String message,
+    {DateTime? time,
+    int? sequenceNumber,
+    int level: 0,
+    String name: '',
+    Zone? zone,
+    Object? error,
+    StackTrace? stackTrace}) {}
+
+@patch
+void _postEvent(String eventKind, String eventData) {}
+
+@patch
+ServiceExtensionHandler? _lookupExtension(String method) => null;
+
+@patch
+_registerExtension(String method, ServiceExtensionHandler handler) {}
+
+// Stubs for `timeline.dart`.
+
+@patch
+bool _isDartStreamEnabled() => false;
+
+@patch
+int _getTraceClock() => _traceClock++;
+
+int _traceClock = 0;
+
+@patch
+int _getNextAsyncId() => 0;
+
+@patch
+void _reportTaskEvent(int taskId, String phase, String category, String name,
+    String argumentsAsJson) {}
+
+@patch
+void _reportFlowEvent(
+    String category, String name, int type, int id, String argumentsAsJson) {}
+
+@patch
+void _reportInstantEvent(
+    String category, String name, String argumentsAsJson) {}
diff --git a/sdk/lib/_internal/wasm/lib/double.dart b/sdk/lib/_internal/wasm/lib/double.dart
new file mode 100644
index 0000000..ea77a86
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/double.dart
@@ -0,0 +1,290 @@
+// 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";
+
+@pragma("wasm:entry-point")
+class _BoxedDouble implements double {
+  // A boxed double contains an unboxed double.
+  @pragma("wasm:entry-point")
+  double value = 0.0;
+
+  static const int _signMask = 0x8000000000000000;
+  static const int _exponentMask = 0x7FF0000000000000;
+  static const int _mantissaMask = 0x000FFFFFFFFFFFFF;
+
+  int get hashCode {
+    int bits = doubleToIntBits(this);
+    if (bits == _signMask) bits = 0; // 0.0 == -0.0
+    return mix64(bits);
+  }
+
+  int get _identityHashCode => hashCode;
+
+  double operator +(num other) => this + other.toDouble(); // Intrinsic +
+  double operator -(num other) => this - other.toDouble(); // Intrinsic -
+  double operator *(num other) => this * other.toDouble(); // Intrinsic *
+  double operator /(num other) => this / other.toDouble(); // Intrinsic /
+
+  int operator ~/(num other) {
+    return _truncDiv(this, other.toDouble());
+  }
+
+  static int _truncDiv(double a, double b) {
+    return (a / b).toInt();
+  }
+
+  double operator %(num other) {
+    return _modulo(this, other.toDouble());
+  }
+
+  static double _modulo(double a, double b) {
+    double rem = a - (a / b).truncateToDouble() * b;
+    if (rem == 0.0) return 0.0;
+    if (rem < 0.0) {
+      if (b < 0.0) {
+        return rem - b;
+      } else {
+        return rem + b;
+      }
+    }
+    return rem;
+  }
+
+  double remainder(num other) {
+    return _remainder(this, other.toDouble());
+  }
+
+  static double _remainder(double a, double b) {
+    return a - (a / b).truncateToDouble() * b;
+  }
+
+  external double operator -();
+
+  bool operator ==(Object other) {
+    return other is double
+        ? this == other // Intrinsic ==
+        : other is int
+            ? this == other.toDouble() // Intrinsic ==
+            : false;
+  }
+
+  bool operator <(num other) => this < other.toDouble(); // Intrinsic <
+  bool operator >(num other) => this > other.toDouble(); // Intrinsic >
+  bool operator >=(num other) => this >= other.toDouble(); // Intrinsic >=
+  bool operator <=(num other) => this <= other.toDouble(); // Intrinsic <=
+
+  bool get isNegative {
+    int bits = doubleToIntBits(this);
+    return (bits & _signMask) != 0;
+  }
+
+  bool get isInfinite {
+    int bits = doubleToIntBits(this);
+    return (bits & _exponentMask) == _exponentMask &&
+        (bits & _mantissaMask) == 0;
+  }
+
+  bool get isNaN {
+    int bits = doubleToIntBits(this);
+    return (bits & _exponentMask) == _exponentMask &&
+        (bits & _mantissaMask) != 0;
+  }
+
+  bool get isFinite {
+    int bits = doubleToIntBits(this);
+    return (bits & _exponentMask) != _exponentMask;
+  }
+
+  double abs() {
+    // Handle negative 0.0.
+    if (this == 0.0) return 0.0;
+    return this < 0.0 ? -this : this;
+  }
+
+  double get sign {
+    if (this > 0.0) return 1.0;
+    if (this < 0.0) return -1.0;
+    return this; // +/-0.0 or NaN.
+  }
+
+  int round() => roundToDouble().toInt();
+  int floor() => floorToDouble().toInt();
+  int ceil() => ceilToDouble().toInt();
+  int truncate() => truncateToDouble().toInt();
+
+  external double roundToDouble();
+  external double floorToDouble();
+  external double ceilToDouble();
+  external double truncateToDouble();
+
+  num clamp(num lowerLimit, num upperLimit) {
+    if (lowerLimit.compareTo(upperLimit) > 0) {
+      throw new ArgumentError(lowerLimit);
+    }
+    if (lowerLimit.isNaN) return lowerLimit;
+    if (this.compareTo(lowerLimit) < 0) return lowerLimit;
+    if (this.compareTo(upperLimit) > 0) return upperLimit;
+    return this;
+  }
+
+  external int toInt();
+
+  double toDouble() {
+    return this;
+  }
+
+  static const int CACHE_SIZE_LOG2 = 3;
+  static const int CACHE_LENGTH = 1 << (CACHE_SIZE_LOG2 + 1);
+  static const int CACHE_MASK = CACHE_LENGTH - 1;
+  // Each key (double) followed by its toString result.
+  static final List _cache = new List.filled(CACHE_LENGTH, null);
+  static int _cacheEvictIndex = 0;
+
+  external String _toString();
+
+  String toString() {
+    // TODO(koda): Consider starting at most recently inserted.
+    for (int i = 0; i < CACHE_LENGTH; i += 2) {
+      // Need 'identical' to handle negative zero, etc.
+      if (identical(_cache[i], this)) {
+        return _cache[i + 1];
+      }
+    }
+    // TODO(koda): Consider optimizing all small integral values.
+    if (identical(0.0, this)) {
+      return "0.0";
+    }
+    String result = _toString();
+    // Replace the least recently inserted entry.
+    _cache[_cacheEvictIndex] = this;
+    _cache[_cacheEvictIndex + 1] = result;
+    _cacheEvictIndex = (_cacheEvictIndex + 2) & CACHE_MASK;
+    return result;
+  }
+
+  String toStringAsFixed(int fractionDigits) {
+    // See ECMAScript-262, 15.7.4.5 for details.
+
+    // Step 2.
+    if (fractionDigits < 0 || fractionDigits > 20) {
+      throw new RangeError.range(fractionDigits, 0, 20, "fractionDigits");
+    }
+
+    // Step 3.
+    double x = this;
+
+    // Step 4.
+    if (isNaN) return "NaN";
+
+    // Step 5 and 6 skipped. Will be dealt with by native function.
+
+    // Step 7.
+    if (x >= 1e21 || x <= -1e21) {
+      return x.toString();
+    }
+
+    return _toStringAsFixed(fractionDigits);
+  }
+
+  external String _toStringAsFixed(int fractionDigits);
+
+  String toStringAsExponential([int? fractionDigits]) {
+    // See ECMAScript-262, 15.7.4.6 for details.
+
+    // The EcmaScript specification checks for NaN and Infinity before looking
+    // at the fractionDigits. In Dart we are consistent with toStringAsFixed and
+    // look at the fractionDigits first.
+
+    // Step 7.
+    if (fractionDigits != null) {
+      if (fractionDigits < 0 || fractionDigits > 20) {
+        throw new RangeError.range(fractionDigits, 0, 20, "fractionDigits");
+      }
+    }
+
+    if (isNaN) return "NaN";
+    if (this == double.infinity) return "Infinity";
+    if (this == -double.infinity) return "-Infinity";
+
+    // The dart function prints the shortest representation when fractionDigits
+    // equals null. The native function wants -1 instead.
+    fractionDigits = (fractionDigits == null) ? -1 : fractionDigits;
+
+    return _toStringAsExponential(fractionDigits);
+  }
+
+  external String _toStringAsExponential(int fractionDigits);
+
+  String toStringAsPrecision(int precision) {
+    // See ECMAScript-262, 15.7.4.7 for details.
+
+    // The EcmaScript specification checks for NaN and Infinity before looking
+    // at the fractionDigits. In Dart we are consistent with toStringAsFixed and
+    // look at the fractionDigits first.
+
+    // Step 8.
+    if (precision < 1 || precision > 21) {
+      throw new RangeError.range(precision, 1, 21, "precision");
+    }
+
+    if (isNaN) return "NaN";
+    if (this == double.infinity) return "Infinity";
+    if (this == -double.infinity) return "-Infinity";
+
+    return _toStringAsPrecision(precision);
+  }
+
+  external String _toStringAsPrecision(int fractionDigits);
+
+  // Order is: NaN > Infinity > ... > 0.0 > -0.0 > ... > -Infinity.
+  int compareTo(num other) {
+    const int EQUAL = 0, LESS = -1, GREATER = 1;
+    if (this < other) {
+      return LESS;
+    } else if (this > other) {
+      return GREATER;
+    } else if (this == other) {
+      if (this == 0.0) {
+        bool thisIsNegative = isNegative;
+        bool otherIsNegative = other.isNegative;
+        if (thisIsNegative == otherIsNegative) {
+          return EQUAL;
+        }
+        return thisIsNegative ? LESS : GREATER;
+      } else if (other is int) {
+        // Compare as integers as it is more precise if the integer value is
+        // outside of MIN_EXACT_INT_TO_DOUBLE..MAX_EXACT_INT_TO_DOUBLE range.
+        const int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
+        const int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
+        if ((MIN_EXACT_INT_TO_DOUBLE <= other) &&
+            (other <= MAX_EXACT_INT_TO_DOUBLE)) {
+          return EQUAL;
+        }
+        const bool limitIntsTo64Bits = ((1 << 64) == 0);
+        if (limitIntsTo64Bits) {
+          // With integers limited to 64 bits, double.toInt() clamps
+          // double value to fit into the MIN_INT64..MAX_INT64 range.
+          // MAX_INT64 is not precisely representable as double, so
+          // integers near MAX_INT64 compare as equal to (MAX_INT64 + 1) when
+          // represented as doubles.
+          // There is no similar problem with MIN_INT64 as it is precisely
+          // representable as double.
+          const double maxInt64Plus1AsDouble = 9223372036854775808.0;
+          if (this >= maxInt64Plus1AsDouble) {
+            return GREATER;
+          }
+        }
+        return toInt().compareTo(other);
+      } else {
+        return EQUAL;
+      }
+    } else if (isNaN) {
+      return other.isNaN ? EQUAL : GREATER;
+    } else {
+      // Other is NaN.
+      return LESS;
+    }
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/expando_patch.dart b/sdk/lib/_internal/wasm/lib/expando_patch.dart
new file mode 100644
index 0000000..2be5189
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/expando_patch.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 "dart:_internal" show patch;
+
+// Stub Expando implementation to make the Expando class compile.
+
+@patch
+class Expando<T> {
+  @patch
+  Expando([String? name]) : name = name;
+}
diff --git a/sdk/lib/_internal/wasm/lib/function.dart b/sdk/lib/_internal/wasm/lib/function.dart
new file mode 100644
index 0000000..b698573
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/function.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.
+
+/// Base class for closure objects.
+@pragma("wasm:entry-point")
+class _Function {
+  @pragma("wasm:entry-point")
+  WasmDataRef context;
+
+  _Function._(this.context);
+}
diff --git a/sdk/lib/_internal/wasm/lib/growable_list.dart b/sdk/lib/_internal/wasm/lib/growable_list.dart
new file mode 100644
index 0000000..7b4912b
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/growable_list.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.
+
+// part of "core_patch.dart";
+
+@pragma("wasm:entry-point")
+class _GrowableList<E> extends _ModifiableList<E> {
+  void insert(int index, E element) {
+    if ((index < 0) || (index > length)) {
+      throw new RangeError.range(index, 0, length);
+    }
+    int oldLength = this.length;
+    add(element);
+    if (index == oldLength) {
+      return;
+    }
+    Lists.copy(this, index, this, index + 1, oldLength - index);
+    this[index] = element;
+  }
+
+  E removeAt(int index) {
+    var result = this[index];
+    int newLength = this.length - 1;
+    if (index < newLength) {
+      Lists.copy(this, index + 1, this, index, newLength - index);
+    }
+    this.length = newLength;
+    return result;
+  }
+
+  bool remove(Object? element) {
+    for (int i = 0; i < this.length; i++) {
+      if (this[i] == element) {
+        removeAt(i);
+        return true;
+      }
+    }
+    return false;
+  }
+
+  void insertAll(int index, Iterable<E> iterable) {
+    if (index < 0 || index > length) {
+      throw new RangeError.range(index, 0, length);
+    }
+    if (iterable is! _ListBase) {
+      // Read out all elements before making room to ensure consistency of the
+      // modified list in case the iterator throws.
+      iterable = _List.of(iterable);
+    }
+    int insertionLength = iterable.length;
+    int capacity = _capacity;
+    int newLength = length + insertionLength;
+    if (newLength > capacity) {
+      do {
+        capacity = _nextCapacity(capacity);
+      } while (newLength > capacity);
+      _grow(capacity);
+    }
+    _setLength(newLength);
+    setRange(index + insertionLength, this.length, this, index);
+    setAll(index, iterable);
+  }
+
+  void removeRange(int start, int end) {
+    RangeError.checkValidRange(start, end, this.length);
+    Lists.copy(this, end, this, start, this.length - end);
+    this.length = this.length - (end - start);
+  }
+
+  _GrowableList._(int length, int capacity) : super(length, capacity);
+
+  factory _GrowableList(int length) {
+    return _GrowableList<E>._(length, length);
+  }
+
+  factory _GrowableList.withCapacity(int capacity) {
+    return _GrowableList<E>._(0, capacity);
+  }
+
+  // Specialization of List.empty constructor for growable == true.
+  // Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
+  factory _GrowableList.empty() => _GrowableList(0);
+
+  // Specialization of List.filled constructor for growable == true.
+  // Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
+  factory _GrowableList.filled(int length, E fill) {
+    final result = _GrowableList<E>(length);
+    if (fill != null) {
+      for (int i = 0; i < result.length; i++) {
+        result[i] = fill;
+      }
+    }
+    return result;
+  }
+
+  // Specialization of List.generate constructor for growable == true.
+  // Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
+  factory _GrowableList.generate(int length, E generator(int index)) {
+    final result = _GrowableList<E>(length);
+    for (int i = 0; i < result.length; ++i) {
+      result[i] = generator(i);
+    }
+    return result;
+  }
+
+  // Specialization of List.of constructor for growable == true.
+  factory _GrowableList.of(Iterable<E> elements) {
+    if (elements is _ListBase) {
+      return _GrowableList._ofListBase(unsafeCast(elements));
+    }
+    if (elements is EfficientLengthIterable) {
+      return _GrowableList._ofEfficientLengthIterable(unsafeCast(elements));
+    }
+    return _GrowableList._ofOther(elements);
+  }
+
+  factory _GrowableList._ofListBase(_ListBase<E> elements) {
+    final int length = elements.length;
+    final list = _GrowableList<E>(length);
+    for (int i = 0; i < length; i++) {
+      list[i] = elements[i];
+    }
+    return list;
+  }
+
+  factory _GrowableList._ofEfficientLengthIterable(
+      EfficientLengthIterable<E> elements) {
+    final int length = elements.length;
+    final list = _GrowableList<E>(length);
+    if (length > 0) {
+      int i = 0;
+      for (var element in elements) {
+        list[i++] = element;
+      }
+      if (i != length) throw ConcurrentModificationError(elements);
+    }
+    return list;
+  }
+
+  factory _GrowableList._ofOther(Iterable<E> elements) {
+    final list = _GrowableList<E>(0);
+    for (var elements in elements) {
+      list.add(elements);
+    }
+    return list;
+  }
+
+  _GrowableList._withData(WasmObjectArray<Object?> data)
+      : super._withData(data.length, data);
+
+  int get _capacity => _data.length;
+
+  void set length(int new_length) {
+    if (new_length > length) {
+      // Verify that element type is nullable.
+      null as E;
+      if (new_length > _capacity) {
+        _grow(new_length);
+      }
+      _setLength(new_length);
+      return;
+    }
+    final int new_capacity = new_length;
+    // We are shrinking. Pick the method which has fewer writes.
+    // In the shrink-to-fit path, we write |new_capacity + new_length| words
+    // (null init + copy).
+    // In the non-shrink-to-fit path, we write |length - new_length| words
+    // (null overwrite).
+    final bool shouldShrinkToFit =
+        (new_capacity + new_length) < (length - new_length);
+    if (shouldShrinkToFit) {
+      _shrink(new_capacity, new_length);
+    } else {
+      for (int i = new_length; i < length; i++) {
+        _data.write(i, null);
+      }
+    }
+    _setLength(new_length);
+  }
+
+  void _setLength(int new_length) {
+    _length = new_length;
+  }
+
+  void add(E value) {
+    var len = length;
+    if (len == _capacity) {
+      _growToNextCapacity();
+    }
+    _setLength(len + 1);
+    this[len] = value;
+  }
+
+  void addAll(Iterable<E> iterable) {
+    var len = length;
+    if (iterable is EfficientLengthIterable) {
+      if (identical(iterable, this)) {
+        throw new ConcurrentModificationError(this);
+      }
+      var cap = _capacity;
+      // Pregrow if we know iterable.length.
+      var iterLen = iterable.length;
+      if (iterLen == 0) {
+        return;
+      }
+      var newLen = len + iterLen;
+      if (newLen > cap) {
+        do {
+          cap = _nextCapacity(cap);
+        } while (newLen > cap);
+        _grow(cap);
+      }
+    }
+    Iterator it = iterable.iterator;
+    if (!it.moveNext()) return;
+    do {
+      while (len < _capacity) {
+        int newLen = len + 1;
+        this._setLength(newLen);
+        this[len] = it.current;
+        if (!it.moveNext()) return;
+        if (this.length != newLen) throw new ConcurrentModificationError(this);
+        len = newLen;
+      }
+      _growToNextCapacity();
+    } while (true);
+  }
+
+  E removeLast() {
+    var len = length - 1;
+    var elem = this[len];
+    this.length = len;
+    return elem;
+  }
+
+  // Shared array used as backing for new empty growable lists.
+  static final WasmObjectArray<Object?> _emptyData =
+      WasmObjectArray<Object?>(0);
+
+  static WasmObjectArray<Object?> _allocateData(int capacity) {
+    if (capacity == 0) {
+      // Use shared empty list as backing.
+      return _emptyData;
+    }
+    return new WasmObjectArray<Object?>(capacity);
+  }
+
+  // Grow from 0 to 3, and then double + 1.
+  int _nextCapacity(int old_capacity) => (old_capacity * 2) | 3;
+
+  void _grow(int new_capacity) {
+    var newData = WasmObjectArray<Object?>(new_capacity);
+    for (int i = 0; i < length; i++) {
+      newData.write(i, this[i]);
+    }
+    _data = newData;
+  }
+
+  void _growToNextCapacity() {
+    _grow(_nextCapacity(_capacity));
+  }
+
+  void _shrink(int new_capacity, int new_length) {
+    var newData = _allocateData(new_capacity);
+    for (int i = 0; i < new_length; i++) {
+      newData.write(i, this[i]);
+    }
+    _data = newData;
+  }
+
+  Iterator<E> get iterator {
+    return new _GrowableListIterator<E>(this);
+  }
+}
+
+// Iterator for growable lists.
+class _GrowableListIterator<E> implements Iterator<E> {
+  final _GrowableList<E> _list;
+  final int _length; // Cache list length for modification check.
+  int _index;
+  E? _current;
+
+  _GrowableListIterator(_GrowableList<E> list)
+      : _list = list,
+        _length = list.length,
+        _index = 0 {
+    assert(list is _List<E> || list is _ImmutableList<E>);
+  }
+
+  E get current => _current as E;
+
+  bool moveNext() {
+    if (_list.length != _length) {
+      throw ConcurrentModificationError(_list);
+    }
+    if (_index >= _length) {
+      _current = null;
+      return false;
+    }
+    _current = unsafeCast(_list._data.read(_index));
+    _index++;
+    return true;
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/hash_factories.dart b/sdk/lib/_internal/wasm/lib/hash_factories.dart
new file mode 100644
index 0000000..4217e38
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/hash_factories.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.
+
+@patch
+class LinkedHashMap<K, V> {
+  @patch
+  factory LinkedHashMap(
+      {bool equals(K key1, K key2)?,
+      int hashCode(K key)?,
+      bool isValidKey(potentialKey)?}) {
+    if (isValidKey == null) {
+      if (identical(identityHashCode, hashCode) &&
+          identical(identical, equals)) {
+        return new _CompactLinkedIdentityHashMap<K, V>();
+      }
+    }
+    hashCode ??= _defaultHashCode;
+    equals ??= _defaultEquals;
+    return new _CompactLinkedCustomHashMap<K, V>(equals, hashCode, isValidKey);
+  }
+
+  @pragma("wasm:entry-point")
+  factory LinkedHashMap._default() =>
+      _CompactLinkedCustomHashMap<K, V>(_defaultEquals, _defaultHashCode, null);
+
+  @patch
+  factory LinkedHashMap.identity() => new _CompactLinkedIdentityHashMap<K, V>();
+}
+
+@patch
+class LinkedHashSet<E> {
+  @patch
+  factory LinkedHashSet(
+      {bool equals(E e1, E e2)?,
+      int hashCode(E e)?,
+      bool isValidKey(potentialKey)?}) {
+    if (isValidKey == null) {
+      if (identical(identityHashCode, hashCode) &&
+          identical(identical, equals)) {
+        return new _CompactLinkedIdentityHashSet<E>();
+      }
+    }
+    hashCode ??= _defaultHashCode;
+    equals ??= _defaultEquals;
+    return new _CompactLinkedCustomHashSet<E>(equals, hashCode, isValidKey);
+  }
+
+  @patch
+  factory LinkedHashSet.identity() => new _CompactLinkedIdentityHashSet<E>();
+}
diff --git a/sdk/lib/_internal/wasm/lib/identical_patch.dart b/sdk/lib/_internal/wasm/lib/identical_patch.dart
new file mode 100644
index 0000000..614bef6
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/identical_patch.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.
+
+// part of "core_patch.dart";
+
+@patch
+external bool identical(Object? a, Object? b);
+
+@patch
+int identityHashCode(Object? object) =>
+    object == null ? Null._HASH_CODE : object._identityHashCode;
diff --git a/sdk/lib/_internal/wasm/lib/immutable_map.dart b/sdk/lib/_internal/wasm/lib/immutable_map.dart
new file mode 100644
index 0000000..74127f4
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/immutable_map.dart
@@ -0,0 +1,221 @@
+// 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/int.dart b/sdk/lib/_internal/wasm/lib/int.dart
new file mode 100644
index 0000000..e41f186
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/int.dart
@@ -0,0 +1,610 @@
+// 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";
+
+@pragma("wasm:entry-point")
+class _BoxedInt implements int {
+  // A boxed int contains an unboxed int.
+  @pragma("wasm:entry-point")
+  int value = 0;
+
+  external num operator +(num other);
+  external num operator -(num other);
+  external num operator *(num other);
+
+  double operator /(num other) {
+    return this.toDouble() / other.toDouble();
+  }
+
+  int operator ~/(num other) => other is int
+      ? this ~/ other
+      : _BoxedDouble._truncDiv(toDouble(), unsafeCast<double>(other));
+
+  num operator %(num other) => other is int
+      ? _modulo(this, other)
+      : _BoxedDouble._modulo(toDouble(), unsafeCast<double>(other));
+
+  static int _modulo(int a, int b) {
+    int rem = a - (a ~/ b) * b;
+    if (rem < 0) {
+      if (b < 0) {
+        return rem - b;
+      } else {
+        return rem + b;
+      }
+    }
+    return rem;
+  }
+
+  num remainder(num other) => other is int
+      ? this - (this ~/ other) * other
+      : _BoxedDouble._remainder(toDouble(), unsafeCast<double>(other));
+
+  external int operator -();
+
+  external int operator &(int other);
+  external int operator |(int other);
+  external int operator ^(int other);
+
+  external int operator >>(int other);
+  external int operator >>>(int other);
+  external int operator <<(int other);
+
+  external bool operator <(num other);
+  external bool operator >(num other);
+  external bool operator >=(num other);
+  external bool operator <=(num other);
+
+  bool operator ==(Object other) {
+    return other is int
+        ? this == other // Intrinsic ==
+        : other is double
+            ? this.toDouble() == other // Intrinsic ==
+            : false;
+  }
+
+  int abs() {
+    return this < 0 ? -this : this;
+  }
+
+  int get sign {
+    return (this > 0)
+        ? 1
+        : (this < 0)
+            ? -1
+            : 0;
+  }
+
+  bool get isEven => (this & 1) == 0;
+  bool get isOdd => (this & 1) != 0;
+  bool get isNaN => false;
+  bool get isNegative => this < 0;
+  bool get isInfinite => false;
+  bool get isFinite => true;
+
+  int toUnsigned(int width) {
+    return this & ((1 << width) - 1);
+  }
+
+  int toSigned(int width) {
+    // The value of binary number weights each bit by a power of two.  The
+    // twos-complement value weights the sign bit negatively.  We compute the
+    // value of the negative weighting by isolating the sign bit with the
+    // correct power of two weighting and subtracting it from the value of the
+    // lower bits.
+    int signMask = 1 << (width - 1);
+    return (this & (signMask - 1)) - (this & signMask);
+  }
+
+  int compareTo(num other) {
+    const int EQUAL = 0, LESS = -1, GREATER = 1;
+    if (other is double) {
+      const int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
+      const int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
+      // With int limited to 64 bits, double.toInt() clamps
+      // double value to fit into the MIN_INT64..MAX_INT64 range.
+      // Check if the double value is outside of this range.
+      // This check handles +/-infinity as well.
+      const double minInt64AsDouble = -9223372036854775808.0;
+      // MAX_INT64 is not precisely representable in doubles, so
+      // check against (MAX_INT64 + 1).
+      const double maxInt64Plus1AsDouble = 9223372036854775808.0;
+      if (other < minInt64AsDouble) {
+        return GREATER;
+      } else if (other >= maxInt64Plus1AsDouble) {
+        return LESS;
+      }
+      if (other.isNaN) {
+        return LESS;
+      }
+      if (MIN_EXACT_INT_TO_DOUBLE <= this && this <= MAX_EXACT_INT_TO_DOUBLE) {
+        // Let the double implementation deal with -0.0.
+        return -(other.compareTo(this.toDouble()));
+      } else {
+        // If abs(other) > MAX_EXACT_INT_TO_DOUBLE, then other has an integer
+        // value (no bits below the decimal point).
+        other = other.toInt();
+      }
+    }
+    if (this < other) {
+      return LESS;
+    } else if (this > other) {
+      return GREATER;
+    } else {
+      return EQUAL;
+    }
+  }
+
+  int round() {
+    return this;
+  }
+
+  int floor() {
+    return this;
+  }
+
+  int ceil() {
+    return this;
+  }
+
+  int truncate() {
+    return this;
+  }
+
+  double roundToDouble() {
+    return this.toDouble();
+  }
+
+  double floorToDouble() {
+    return this.toDouble();
+  }
+
+  double ceilToDouble() {
+    return this.toDouble();
+  }
+
+  double truncateToDouble() {
+    return this.toDouble();
+  }
+
+  num clamp(num lowerLimit, num upperLimit) {
+    // Special case for integers.
+    if (lowerLimit is int && upperLimit is int && lowerLimit <= upperLimit) {
+      if (this < lowerLimit) return lowerLimit;
+      if (this > upperLimit) return upperLimit;
+      return this;
+    }
+    // Generic case involving doubles, and invalid integer ranges.
+    if (lowerLimit.compareTo(upperLimit) > 0) {
+      throw new ArgumentError(lowerLimit);
+    }
+    if (lowerLimit.isNaN) return lowerLimit;
+    // Note that we don't need to care for -0.0 for the lower limit.
+    if (this < lowerLimit) return lowerLimit;
+    if (this.compareTo(upperLimit) > 0) return upperLimit;
+    return this;
+  }
+
+  int toInt() {
+    return this;
+  }
+
+  external double toDouble();
+
+  String toStringAsFixed(int fractionDigits) {
+    return this.toDouble().toStringAsFixed(fractionDigits);
+  }
+
+  String toStringAsExponential([int? fractionDigits]) {
+    return this.toDouble().toStringAsExponential(fractionDigits);
+  }
+
+  String toStringAsPrecision(int precision) {
+    return this.toDouble().toStringAsPrecision(precision);
+  }
+
+  static const _digits = "0123456789abcdefghijklmnopqrstuvwxyz";
+
+  String toRadixString(int radix) {
+    if (radix < 2 || 36 < radix) {
+      throw new RangeError.range(radix, 2, 36, "radix");
+    }
+    if (radix & (radix - 1) == 0) {
+      return _toPow2String(radix);
+    }
+    if (radix == 10) return this.toString();
+    final bool isNegative = this < 0;
+    int value = isNegative ? -this : this;
+    if (value < 0) {
+      // With int limited to 64 bits, the value
+      // MIN_INT64 = -0x8000000000000000 overflows at negation:
+      // -MIN_INT64 == MIN_INT64, so it requires special handling.
+      return _minInt64ToRadixString(radix);
+    }
+    var temp = <int>[];
+    do {
+      int digit = value % radix;
+      value ~/= radix;
+      temp.add(_digits.codeUnitAt(digit));
+    } while (value > 0);
+    if (isNegative) temp.add(0x2d); // '-'.
+
+    _OneByteString string = _OneByteString._allocate(temp.length);
+    for (int i = 0, j = temp.length; j > 0; i++) {
+      string._setAt(i, temp[--j]);
+    }
+    return string;
+  }
+
+  String _toPow2String(int radix) {
+    int value = this;
+    if (value == 0) return "0";
+    assert(radix & (radix - 1) == 0);
+    var negative = value < 0;
+    var bitsPerDigit = radix.bitLength - 1;
+    var length = 0;
+    if (negative) {
+      value = -value;
+      length = 1;
+      if (value < 0) {
+        // With int limited to 64 bits, the value
+        // MIN_INT64 = -0x8000000000000000 overflows at negation:
+        // -MIN_INT64 == MIN_INT64, so it requires special handling.
+        return _minInt64ToRadixString(radix);
+      }
+    }
+    // Integer division, rounding up, to find number of _digits.
+    length += (value.bitLength + bitsPerDigit - 1) ~/ bitsPerDigit;
+    _OneByteString string = _OneByteString._allocate(length);
+    string._setAt(0, 0x2d); // '-'. Is overwritten if not negative.
+    var mask = radix - 1;
+    do {
+      string._setAt(--length, _digits.codeUnitAt(value & mask));
+      value >>= bitsPerDigit;
+    } while (value > 0);
+    return string;
+  }
+
+  /// Converts negative value to radix string.
+  /// This method is only used to handle corner case of
+  /// MIN_INT64 = -0x8000000000000000.
+  String _minInt64ToRadixString(int radix) {
+    var temp = <int>[];
+    int value = this;
+    assert(value < 0);
+    do {
+      int digit = -unsafeCast<int>(value.remainder(radix));
+      value ~/= radix;
+      temp.add(_digits.codeUnitAt(digit));
+    } while (value != 0);
+    temp.add(0x2d); // '-'.
+
+    _OneByteString string = _OneByteString._allocate(temp.length);
+    for (int i = 0, j = temp.length; j > 0; i++) {
+      string._setAt(i, temp[--j]);
+    }
+    return string;
+  }
+
+  // Returns pow(this, e) % m.
+  int modPow(int e, int m) {
+    if (e < 0) throw new RangeError.range(e, 0, null, "exponent");
+    if (m <= 0) throw new RangeError.range(m, 1, null, "modulus");
+    if (e == 0) return 1;
+
+    // This is floor(sqrt(2^63)).
+    const int maxValueThatCanBeSquaredWithoutTruncation = 3037000499;
+    if (m > maxValueThatCanBeSquaredWithoutTruncation) {
+      // Use BigInt version to avoid truncation in multiplications below.
+      return BigInt.from(this).modPow(BigInt.from(e), BigInt.from(m)).toInt();
+    }
+
+    int b = this;
+    if (b < 0 || b > m) {
+      b %= m;
+    }
+    int r = 1;
+    while (e > 0) {
+      if (e.isOdd) {
+        r = (r * b) % m;
+      }
+      e >>= 1;
+      b = (b * b) % m;
+    }
+    return r;
+  }
+
+  // If inv is false, returns gcd(x, y).
+  // If inv is true and gcd(x, y) = 1, returns d, so that c*x + d*y = 1.
+  // If inv is true and gcd(x, y) != 1, throws Exception("Not coprime").
+  static int _binaryGcd(int x, int y, bool inv) {
+    int s = 0;
+    if (!inv) {
+      while (x.isEven && y.isEven) {
+        x >>= 1;
+        y >>= 1;
+        s++;
+      }
+      if (y.isOdd) {
+        var t = x;
+        x = y;
+        y = t;
+      }
+    }
+    final bool ac = x.isEven;
+    int u = x;
+    int v = y;
+    int a = 1, b = 0, c = 0, d = 1;
+    do {
+      while (u.isEven) {
+        u >>= 1;
+        if (ac) {
+          if (!a.isEven || !b.isEven) {
+            a += y;
+            b -= x;
+          }
+          a >>= 1;
+        } else if (!b.isEven) {
+          b -= x;
+        }
+        b >>= 1;
+      }
+      while (v.isEven) {
+        v >>= 1;
+        if (ac) {
+          if (!c.isEven || !d.isEven) {
+            c += y;
+            d -= x;
+          }
+          c >>= 1;
+        } else if (!d.isEven) {
+          d -= x;
+        }
+        d >>= 1;
+      }
+      if (u >= v) {
+        u -= v;
+        if (ac) a -= c;
+        b -= d;
+      } else {
+        v -= u;
+        if (ac) c -= a;
+        d -= b;
+      }
+    } while (u != 0);
+    if (!inv) return v << s;
+    if (v != 1) {
+      throw new Exception("Not coprime");
+    }
+    if (d < 0) {
+      d += x;
+      if (d < 0) d += x;
+    } else if (d > x) {
+      d -= x;
+      if (d > x) d -= x;
+    }
+    return d;
+  }
+
+  // Returns 1/this % m, with m > 0.
+  int modInverse(int m) {
+    if (m <= 0) throw new RangeError.range(m, 1, null, "modulus");
+    if (m == 1) return 0;
+    int t = this;
+    if ((t < 0) || (t >= m)) t %= m;
+    if (t == 1) return 1;
+    if ((t == 0) || (t.isEven && m.isEven)) {
+      throw new Exception("Not coprime");
+    }
+    return _binaryGcd(m, t, true);
+  }
+
+  // Returns gcd of abs(this) and abs(other).
+  int gcd(int other) {
+    int x = this.abs();
+    int y = other.abs();
+    if (x == 0) return y;
+    if (y == 0) return x;
+    if ((x == 1) || (y == 1)) return 1;
+    return _binaryGcd(x, y, false);
+  }
+
+  int get hashCode => this;
+  int get _identityHashCode => this;
+
+  external int operator ~();
+  external int get bitLength;
+
+  /**
+   * The digits of '00', '01', ... '99' as a single array.
+   *
+   * Get the digits of `n`, with `0 <= n < 100`, as
+   * `_digitTable[n * 2]` and `_digitTable[n * 2 + 1]`.
+   */
+  static const _digitTable = const [
+    0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, //
+    0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37, //
+    0x30, 0x38, 0x30, 0x39, 0x31, 0x30, 0x31, 0x31, //
+    0x31, 0x32, 0x31, 0x33, 0x31, 0x34, 0x31, 0x35, //
+    0x31, 0x36, 0x31, 0x37, 0x31, 0x38, 0x31, 0x39, //
+    0x32, 0x30, 0x32, 0x31, 0x32, 0x32, 0x32, 0x33, //
+    0x32, 0x34, 0x32, 0x35, 0x32, 0x36, 0x32, 0x37, //
+    0x32, 0x38, 0x32, 0x39, 0x33, 0x30, 0x33, 0x31, //
+    0x33, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x35, //
+    0x33, 0x36, 0x33, 0x37, 0x33, 0x38, 0x33, 0x39, //
+    0x34, 0x30, 0x34, 0x31, 0x34, 0x32, 0x34, 0x33, //
+    0x34, 0x34, 0x34, 0x35, 0x34, 0x36, 0x34, 0x37, //
+    0x34, 0x38, 0x34, 0x39, 0x35, 0x30, 0x35, 0x31, //
+    0x35, 0x32, 0x35, 0x33, 0x35, 0x34, 0x35, 0x35, //
+    0x35, 0x36, 0x35, 0x37, 0x35, 0x38, 0x35, 0x39, //
+    0x36, 0x30, 0x36, 0x31, 0x36, 0x32, 0x36, 0x33, //
+    0x36, 0x34, 0x36, 0x35, 0x36, 0x36, 0x36, 0x37, //
+    0x36, 0x38, 0x36, 0x39, 0x37, 0x30, 0x37, 0x31, //
+    0x37, 0x32, 0x37, 0x33, 0x37, 0x34, 0x37, 0x35, //
+    0x37, 0x36, 0x37, 0x37, 0x37, 0x38, 0x37, 0x39, //
+    0x38, 0x30, 0x38, 0x31, 0x38, 0x32, 0x38, 0x33, //
+    0x38, 0x34, 0x38, 0x35, 0x38, 0x36, 0x38, 0x37, //
+    0x38, 0x38, 0x38, 0x39, 0x39, 0x30, 0x39, 0x31, //
+    0x39, 0x32, 0x39, 0x33, 0x39, 0x34, 0x39, 0x35, //
+    0x39, 0x36, 0x39, 0x37, 0x39, 0x38, 0x39, 0x39, //
+  ];
+
+  /**
+   * Result of int.toString for -99, -98, ..., 98, 99.
+   */
+  static const _smallLookupTable = const [
+    "-99", "-98", "-97", "-96", "-95", "-94", "-93", "-92", "-91", "-90", //
+    "-89", "-88", "-87", "-86", "-85", "-84", "-83", "-82", "-81", "-80", //
+    "-79", "-78", "-77", "-76", "-75", "-74", "-73", "-72", "-71", "-70", //
+    "-69", "-68", "-67", "-66", "-65", "-64", "-63", "-62", "-61", "-60", //
+    "-59", "-58", "-57", "-56", "-55", "-54", "-53", "-52", "-51", "-50", //
+    "-49", "-48", "-47", "-46", "-45", "-44", "-43", "-42", "-41", "-40", //
+    "-39", "-38", "-37", "-36", "-35", "-34", "-33", "-32", "-31", "-30", //
+    "-29", "-28", "-27", "-26", "-25", "-24", "-23", "-22", "-21", "-20", //
+    "-19", "-18", "-17", "-16", "-15", "-14", "-13", "-12", "-11", "-10", //
+    "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0", //
+    "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", //
+    "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", //
+    "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", //
+    "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", //
+    "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", //
+    "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", //
+    "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", //
+    "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", //
+    "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", //
+    "91", "92", "93", "94", "95", "96", "97", "98", "99" //
+  ];
+
+  // Powers of 10 above 1000000 are indistinguishable by eye.
+  static const int _POW_10_7 = 10000000;
+  static const int _POW_10_8 = 100000000;
+  static const int _POW_10_9 = 1000000000;
+
+  // Find the number of decimal digits in a positive smi.
+  // Never called with numbers < 100. These are handled before calling.
+  static int _positiveBase10Length(int smi) {
+    // A positive smi has length <= 19 if 63-bit,  <=10 if 31-bit.
+    // Avoid comparing a 31-bit smi to a non-smi.
+    if (smi < 1000) return 3;
+    if (smi < 10000) return 4;
+    if (smi < _POW_10_7) {
+      if (smi < 100000) return 5;
+      if (smi < 1000000) return 6;
+      return 7;
+    }
+    if (smi < _POW_10_8) return 8;
+    if (smi < _POW_10_9) return 9;
+    smi = smi ~/ _POW_10_9;
+    // Handle numbers < 100 before calling recursively.
+    if (smi < 10) return 10;
+    if (smi < 100) return 11;
+    return 9 + _positiveBase10Length(smi);
+  }
+
+  String toString() {
+    if (this < 100 && this > -100) {
+      // Issue(https://dartbug.com/39639): The analyzer incorrectly reports the
+      // result type as `num`.
+      return _smallLookupTable[unsafeCast<int>(this + 99)];
+    }
+    if (this < 0) return _negativeToString(this);
+    // Inspired by Andrei Alexandrescu: "Three Optimization Tips for C++"
+    // Avoid expensive remainder operation by doing it on more than
+    // one digit at a time.
+    const int DIGIT_ZERO = 0x30;
+    int length = _positiveBase10Length(this);
+    _OneByteString result = _OneByteString._allocate(length);
+    int index = length - 1;
+    int smi = this;
+    do {
+      // Two digits at a time.
+      final int twoDigits = smi.remainder(100);
+      smi = smi ~/ 100;
+      int digitIndex = twoDigits * 2;
+      result._setAt(index, _digitTable[digitIndex + 1]);
+      result._setAt(index - 1, _digitTable[digitIndex]);
+      index -= 2;
+    } while (smi >= 100);
+    if (smi < 10) {
+      // Character code for '0'.
+      // Issue(https://dartbug.com/39639): The analyzer incorrectly reports the
+      // result type as `num`.
+      result._setAt(index, DIGIT_ZERO + smi);
+    } else {
+      // No remainder for this case.
+      // Issue(https://dartbug.com/39639): The analyzer incorrectly reports the
+      // result type as `num`.
+      int digitIndex = smi * 2;
+      result._setAt(index, _digitTable[digitIndex + 1]);
+      result._setAt(index - 1, _digitTable[digitIndex]);
+    }
+    return result;
+  }
+
+  // Find the number of decimal digits in a negative smi.
+  // Never called with numbers > -100. These are handled before calling.
+  static int _negativeBase10Length(int negSmi) {
+    // A negative smi has length <= 19 if 63-bit, <=10 if 31-bit.
+    // Avoid comparing a 31-bit smi to a non-smi.
+    if (negSmi > -1000) return 3;
+    if (negSmi > -10000) return 4;
+    if (negSmi > -_POW_10_7) {
+      if (negSmi > -100000) return 5;
+      if (negSmi > -1000000) return 6;
+      return 7;
+    }
+    if (negSmi > -_POW_10_8) return 8;
+    if (negSmi > -_POW_10_9) return 9;
+    negSmi = negSmi ~/ _POW_10_9;
+    // Handle numbers > -100 before calling recursively.
+    if (negSmi > -10) return 10;
+    if (negSmi > -100) return 11;
+    return 9 + _negativeBase10Length(negSmi);
+  }
+
+  // Convert a negative smi to a string.
+  // Doesn't negate the smi to avoid negating the most negative smi, which
+  // would become a non-smi.
+  static String _negativeToString(int negSmi) {
+    // Character code for '-'
+    const int MINUS_SIGN = 0x2d;
+    // Character code for '0'.
+    const int DIGIT_ZERO = 0x30;
+    if (negSmi > -10) {
+      return _OneByteString._allocate(2)
+        .._setAt(0, MINUS_SIGN)
+        .._setAt(1, DIGIT_ZERO - negSmi);
+    }
+    if (negSmi > -100) {
+      int digitIndex = 2 * -negSmi;
+      return _OneByteString._allocate(3)
+        .._setAt(0, MINUS_SIGN)
+        .._setAt(1, _digitTable[digitIndex])
+        .._setAt(2, _digitTable[digitIndex + 1]);
+    }
+    // Number of digits, not including minus.
+    int digitCount = _negativeBase10Length(negSmi);
+    _OneByteString result = _OneByteString._allocate(digitCount + 1);
+    result._setAt(0, MINUS_SIGN); // '-'.
+    int index = digitCount;
+    do {
+      int twoDigits = unsafeCast<int>(negSmi.remainder(100));
+      negSmi = negSmi ~/ 100;
+      int digitIndex = -twoDigits * 2;
+      result._setAt(index, _digitTable[digitIndex + 1]);
+      result._setAt(index - 1, _digitTable[digitIndex]);
+      index -= 2;
+    } while (negSmi <= -100);
+    if (negSmi > -10) {
+      result._setAt(index, DIGIT_ZERO - negSmi);
+    } else {
+      // No remainder necessary for this case.
+      int digitIndex = -negSmi * 2;
+      result._setAt(index, _digitTable[digitIndex + 1]);
+      result._setAt(index - 1, _digitTable[digitIndex]);
+    }
+    return result;
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/internal_patch.dart b/sdk/lib/_internal/wasm/lib/internal_patch.dart
new file mode 100644
index 0000000..3cd8846
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/internal_patch.dart
@@ -0,0 +1,128 @@
+// 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" show Uint8List;
+
+/// The returned string is a [_OneByteString] with uninitialized content.
+external String allocateOneByteString(int length);
+
+/// The [string] must be a [_OneByteString]. The [index] must be valid.
+external void writeIntoOneByteString(String string, int index, int codePoint);
+
+/// It is assumed that [from] is a native [Uint8List] class and [to] is a
+/// [_OneByteString]. The [fromStart] and [toStart] indices together with the
+/// [length] must specify ranges within the bounds of the list / string.
+void copyRangeFromUint8ListToOneByteString(
+    Uint8List from, String to, int fromStart, int toStart, int length) {
+  for (int i = 0; i < length; i++) {
+    writeIntoOneByteString(to, toStart + i, from[fromStart + i]);
+  }
+}
+
+/// The returned string is a [_TwoByteString] with uninitialized content.
+external String allocateTwoByteString(int length);
+
+/// The [string] must be a [_TwoByteString]. The [index] must be valid.
+external void writeIntoTwoByteString(String string, int index, int codePoint);
+
+// String accessors used to perform Dart<->JS string conversion
+
+@pragma("wasm:export", "\$stringLength")
+double _stringLength(String string) {
+  return string.length.toDouble();
+}
+
+@pragma("wasm:export", "\$stringRead")
+double _stringRead(String string, double index) {
+  return string.codeUnitAt(index.toInt()).toDouble();
+}
+
+@pragma("wasm:export", "\$stringAllocate1")
+String _stringAllocate1(double length) {
+  return allocateOneByteString(length.toInt());
+}
+
+@pragma("wasm:export", "\$stringWrite1")
+void _stringWrite1(String string, double index, double codePoint) {
+  writeIntoOneByteString(string, index.toInt(), codePoint.toInt());
+}
+
+@pragma("wasm:export", "\$stringAllocate2")
+String _stringAllocate2(double length) {
+  return allocateTwoByteString(length.toInt());
+}
+
+@pragma("wasm:export", "\$stringWrite2")
+void _stringWrite2(String string, double index, double codePoint) {
+  writeIntoTwoByteString(string, index.toInt(), codePoint.toInt());
+}
+
+const bool has63BitSmis = false;
+
+class Lists {
+  static void copy(List src, int srcStart, List dst, int dstStart, int count) {
+    // TODO(askesc): Intrinsify for efficient copying
+    if (srcStart < dstStart) {
+      for (int i = srcStart + count - 1, j = dstStart + count - 1;
+          i >= srcStart;
+          i--, j--) {
+        dst[j] = src[i];
+      }
+    } else {
+      for (int i = srcStart, j = dstStart; i < srcStart + count; i++, j++) {
+        dst[j] = src[i];
+      }
+    }
+  }
+}
+
+// This function can be used to skip implicit or explicit checked down casts in
+// the parts of the core library implementation where we know by construction
+// the type of a value.
+//
+// Important: this is unsafe and must be used with care.
+external T unsafeCast<T>(Object? v);
+
+// Thomas Wang 64-bit mix.
+// https://gist.github.com/badboy/6267743
+int mix64(int n) {
+  n = (~n) + (n << 21); // n = (n << 21) - n - 1;
+  n = n ^ (n >>> 24);
+  n = n * 265; // n = (n + (n << 3)) + (n << 8);
+  n = n ^ (n >>> 14);
+  n = n * 21; // n = (n + (n << 2)) + (n << 4);
+  n = n ^ (n >>> 28);
+  n = n + (n << 31);
+  return n;
+}
+
+external int floatToIntBits(double value);
+external double intBitsToFloat(int value);
+external int doubleToIntBits(double value);
+external double intBitsToDouble(int value);
+
+// Exported call stubs to enable JS to call Dart closures. Since all closure
+// parameters and returns are boxed (their Wasm type is #Top) the Wasm type of
+// the closure will be the same as with all parameters and returns as dynamic.
+// Thus, the unsafeCast succeeds, and as long as the passed argumnets have the
+// correct types, the argument casts inside the closure will also succeed.
+
+@pragma("wasm:export", "\$call0")
+dynamic _callClosure0(dynamic closure) {
+  return unsafeCast<dynamic Function()>(closure)();
+}
+
+@pragma("wasm:export", "\$call1")
+dynamic _callClosure1(dynamic closure, dynamic arg1) {
+  return unsafeCast<dynamic Function(dynamic)>(closure)(arg1);
+}
+
+@pragma("wasm:export", "\$call2")
+dynamic _callClosure2(dynamic closure, dynamic arg1, dynamic arg2) {
+  return unsafeCast<dynamic Function(dynamic, dynamic)>(closure)(arg1, arg2);
+}
+
+// Schedule a callback from JS via setTimeout.
+@pragma("wasm:import", "dart2wasm.scheduleCallback")
+external void scheduleCallback(double millis, dynamic Function() callback);
diff --git a/sdk/lib/_internal/wasm/lib/list.dart b/sdk/lib/_internal/wasm/lib/list.dart
new file mode 100644
index 0000000..13eeff3
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/list.dart
@@ -0,0 +1,223 @@
+// 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";
+
+@pragma("wasm:entry-point")
+abstract class _ListBase<E> extends ListBase<E> {
+  @pragma("wasm:entry-point")
+  int _length;
+  @pragma("wasm:entry-point")
+  WasmObjectArray<Object?> _data;
+
+  _ListBase(int length, int capacity)
+      : _length = length,
+        _data = WasmObjectArray<Object?>(capacity);
+
+  _ListBase._withData(this._length, this._data);
+
+  E operator [](int index) {
+    return unsafeCast(_data.read(index));
+  }
+
+  int get length => _length;
+
+  List<E> sublist(int start, [int? end]) {
+    final int listLength = this.length;
+    final int actualEnd = RangeError.checkValidRange(start, end, listLength);
+    int length = actualEnd - start;
+    if (length == 0) return <E>[];
+    return _GrowableList<E>(length)..setRange(0, length, this);
+  }
+
+  void forEach(f(E element)) {
+    final length = this.length;
+    for (int i = 0; i < length; i++) {
+      f(this[i]);
+    }
+  }
+
+  List<E> toList({bool growable: true}) {
+    return List.from(this, growable: growable);
+  }
+}
+
+@pragma("wasm:entry-point")
+abstract class _ModifiableList<E> extends _ListBase<E> {
+  _ModifiableList(int length, int capacity) : super(length, capacity);
+
+  _ModifiableList._withData(int length, WasmObjectArray<Object?> data)
+      : super._withData(length, data);
+
+  void operator []=(int index, E value) {
+    _data.write(index, value);
+  }
+
+  // List interface.
+  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
+    if (start < 0 || start > this.length) {
+      throw new RangeError.range(start, 0, this.length);
+    }
+    if (end < start || end > this.length) {
+      throw new RangeError.range(end, start, this.length);
+    }
+    int length = end - start;
+    if (length == 0) return;
+    if (identical(this, iterable)) {
+      Lists.copy(this, skipCount, this, start, length);
+    } else if (iterable is List<E>) {
+      Lists.copy(iterable, skipCount, this, start, length);
+    } else {
+      Iterator<E> it = iterable.iterator;
+      while (skipCount > 0) {
+        if (!it.moveNext()) return;
+        skipCount--;
+      }
+      for (int i = start; i < end; i++) {
+        if (!it.moveNext()) return;
+        this[i] = it.current;
+      }
+    }
+  }
+
+  void setAll(int index, Iterable<E> iterable) {
+    if (index < 0 || index > this.length) {
+      throw new RangeError.range(index, 0, this.length, "index");
+    }
+    List<E> iterableAsList;
+    if (identical(this, iterable)) {
+      iterableAsList = this;
+    } else if (iterable is List<E>) {
+      iterableAsList = iterable;
+    } else {
+      for (var value in iterable) {
+        this[index++] = value;
+      }
+      return;
+    }
+    int length = iterableAsList.length;
+    if (index + length > this.length) {
+      throw new RangeError.range(index + length, 0, this.length);
+    }
+    Lists.copy(iterableAsList, 0, this, index, length);
+  }
+}
+
+@pragma("wasm:entry-point")
+class _List<E> extends _ModifiableList<E> with FixedLengthListMixin<E> {
+  _List._(int length) : super(length, length);
+
+  factory _List(int length) => _List._(length);
+
+  // Specialization of List.empty constructor for growable == false.
+  // Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
+  factory _List.empty() => _List<E>(0);
+
+  // Specialization of List.filled constructor for growable == false.
+  // Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
+  factory _List.filled(int length, E fill) {
+    final result = _List<E>(length);
+    if (fill != null) {
+      for (int i = 0; i < result.length; i++) {
+        result[i] = fill;
+      }
+    }
+    return result;
+  }
+
+  // Specialization of List.generate constructor for growable == false.
+  // Used by pkg/vm/lib/transformations/list_factory_specializer.dart.
+  factory _List.generate(int length, E generator(int index)) {
+    final result = _List<E>(length);
+    for (int i = 0; i < result.length; ++i) {
+      result[i] = generator(i);
+    }
+    return result;
+  }
+
+  // Specialization of List.of constructor for growable == false.
+  factory _List.of(Iterable<E> elements) {
+    if (elements is _ListBase) {
+      return _List._ofListBase(unsafeCast(elements));
+    }
+    if (elements is EfficientLengthIterable) {
+      return _List._ofEfficientLengthIterable(unsafeCast(elements));
+    }
+    return _List._ofOther(elements);
+  }
+
+  factory _List._ofListBase(_ListBase<E> elements) {
+    final int length = elements.length;
+    final list = _List<E>(length);
+    for (int i = 0; i < length; i++) {
+      list[i] = elements[i];
+    }
+    return list;
+  }
+
+  factory _List._ofEfficientLengthIterable(
+      EfficientLengthIterable<E> elements) {
+    final int length = elements.length;
+    final list = _List<E>(length);
+    if (length > 0) {
+      int i = 0;
+      for (var element in elements) {
+        list[i++] = element;
+      }
+      if (i != length) throw ConcurrentModificationError(elements);
+    }
+    return list;
+  }
+
+  factory _List._ofOther(Iterable<E> elements) {
+    // The static type of `makeListFixedLength` is `List<E>`, not `_List<E>`,
+    // but we know that is what it does.  `makeListFixedLength` is too generally
+    // typed since it is available on the web platform which has different
+    // system List types.
+    return unsafeCast(makeListFixedLength(_GrowableList<E>._ofOther(elements)));
+  }
+
+  Iterator<E> get iterator {
+    return new _FixedSizeListIterator<E>(this);
+  }
+}
+
+@pragma("wasm:entry-point")
+class _ImmutableList<E> extends _ListBase<E> with UnmodifiableListMixin<E> {
+  factory _ImmutableList._uninstantiable() {
+    throw new UnsupportedError(
+        "_ImmutableList can only be allocated by the runtime");
+  }
+
+  Iterator<E> get iterator {
+    return new _FixedSizeListIterator<E>(this);
+  }
+}
+
+// Iterator for lists with fixed size.
+class _FixedSizeListIterator<E> implements Iterator<E> {
+  final _ListBase<E> _list;
+  final int _length; // Cache list length for faster access.
+  int _index;
+  E? _current;
+
+  _FixedSizeListIterator(_ListBase<E> list)
+      : _list = list,
+        _length = list.length,
+        _index = 0 {
+    assert(list is _List<E> || list is _ImmutableList<E>);
+  }
+
+  E get current => _current as E;
+
+  bool moveNext() {
+    if (_index >= _length) {
+      _current = null;
+      return false;
+    }
+    _current = unsafeCast(_list._data.read(_index));
+    _index++;
+    return true;
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/math_patch.dart b/sdk/lib/_internal/wasm/lib/math_patch.dart
new file mode 100644
index 0000000..b26fd6d
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/math_patch.dart
@@ -0,0 +1,262 @@
+// 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:_internal" show mix64, patch;
+
+import "dart:typed_data" show Uint32List;
+
+/// There are no parts of this patch library.
+
+@patch
+T min<T extends num>(T a, T b) {
+  if (a > b) return b;
+  if (a < b) return a;
+  if (b is double) {
+    // Special case for NaN and -0.0. If one argument is NaN return NaN.
+    // [min] must also distinguish between -0.0 and 0.0.
+    if (a is double) {
+      if (a == 0.0) {
+        // a is either 0.0 or -0.0. b is either 0.0, -0.0 or NaN.
+        // The following returns -0.0 if either a or b is -0.0, and it
+        // returns NaN if b is NaN.
+        num n = (a + b) * a * b;
+        return n as T;
+      }
+    }
+    // Check for NaN and b == -0.0.
+    if (a == 0 && b.isNegative || b.isNaN) return b;
+    return a;
+  }
+  return a;
+}
+
+@patch
+T max<T extends num>(T a, T b) {
+  if (a > b) return a;
+  if (a < b) return b;
+  if (b is double) {
+    // Special case for NaN and -0.0. If one argument is NaN return NaN.
+    // [max] must also distinguish between -0.0 and 0.0.
+    if (a is double) {
+      if (a == 0.0) {
+        // a is either 0.0 or -0.0. b is either 0.0, -0.0, or NaN.
+        // The following returns 0.0 if either a or b is 0.0, and it
+        // returns NaN if b is NaN.
+        num n = a + b;
+        return n as T;
+      }
+    }
+    // Check for NaN.
+    if (b.isNaN) return b;
+    return a;
+  }
+  // max(-0.0, 0) must return 0.
+  if (b == 0 && a.isNegative) return b;
+  return a;
+}
+
+// If [x] is an [int] and [exponent] is a non-negative [int], the result is
+// an [int], otherwise the result is a [double].
+@patch
+num pow(num x, num exponent) {
+  if ((x is int) && (exponent is int) && (exponent >= 0)) {
+    return _intPow(x, exponent);
+  }
+  return _doublePow(x.toDouble(), exponent.toDouble());
+}
+
+@pragma("wasm:import", "Math.pow")
+external double _doublePow(double base, double exponent);
+
+int _intPow(int base, int exponent) {
+  // Exponentiation by squaring.
+  int result = 1;
+  while (exponent != 0) {
+    if ((exponent & 1) == 1) {
+      result *= base;
+    }
+    exponent >>= 1;
+    // Skip unnecessary operation (can overflow to Mint).
+    if (exponent != 0) {
+      base *= base;
+    }
+  }
+  return result;
+}
+
+@patch
+double atan2(num a, num b) => _atan2(a.toDouble(), b.toDouble());
+@patch
+double sin(num radians) => _sin(radians.toDouble());
+@patch
+double cos(num radians) => _cos(radians.toDouble());
+@patch
+double tan(num radians) => _tan(radians.toDouble());
+@patch
+double acos(num x) => _acos(x.toDouble());
+@patch
+double asin(num x) => _asin(x.toDouble());
+@patch
+double atan(num x) => _atan(x.toDouble());
+@patch
+double sqrt(num x) => _sqrt(x.toDouble());
+@patch
+double exp(num x) => _exp(x.toDouble());
+@patch
+double log(num x) => _log(x.toDouble());
+
+@pragma("wasm:import", "Math.atan2")
+external double _atan2(double a, double b);
+@pragma("wasm:import", "Math.sin")
+external double _sin(double x);
+@pragma("wasm:import", "Math.cos")
+external double _cos(double x);
+@pragma("wasm:import", "Math.tan")
+external double _tan(double x);
+@pragma("wasm:import", "Math.acos")
+external double _acos(double x);
+@pragma("wasm:import", "Math.asin")
+external double _asin(double x);
+@pragma("wasm:import", "Math.atan")
+external double _atan(double x);
+@pragma("wasm:import", "Math.sqrt")
+external double _sqrt(double x);
+@pragma("wasm:import", "Math.exp")
+external double _exp(double x);
+@pragma("wasm:import", "Math.log")
+external double _log(double x);
+
+// TODO(iposva): Handle patch methods within a patch class correctly.
+@patch
+class Random {
+  static final Random _secureRandom = _SecureRandom();
+
+  @patch
+  factory Random([int? seed]) {
+    var state = _Random._setupSeed((seed == null) ? _Random._nextSeed() : seed);
+    // Crank a couple of times to distribute the seed bits a bit further.
+    return new _Random._withState(state)
+      .._nextState()
+      .._nextState()
+      .._nextState()
+      .._nextState();
+  }
+
+  @patch
+  factory Random.secure() => _secureRandom;
+}
+
+class _Random implements Random {
+  // Internal state of the random number generator.
+  int _state;
+
+  int get _stateLow => _state & 0xFFFFFFFF;
+  int get _stateHigh => _state >>> 32;
+
+  _Random._withState(this._state);
+
+  // The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32.
+  // http://en.wikipedia.org/wiki/Multiply-with-carry
+  // The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1.
+
+  // Implements:
+  //   const _A = 0xffffda61;
+  //   var state =
+  //       ((_A * (_state[_kSTATE_LO])) + _state[_kSTATE_HI]) & ((1 << 64) - 1);
+  //   _state[_kSTATE_LO] = state & ((1 << 32) - 1);
+  //   _state[_kSTATE_HI] = state >> 32;
+  // This is a native to prevent 64-bit operations in Dart, which
+  // fail with --throw_on_javascript_int_overflow.
+  // TODO(regis): Implement in Dart and remove Random_nextState in math.cc.
+  void _nextState() {
+    const _A = 0xffffda61;
+    _state = _A * _stateLow + _stateHigh;
+  }
+
+  int nextInt(int max) {
+    if (max <= 0 || max > _POW2_32) {
+      throw new RangeError.range(
+          max, 1, _POW2_32, "max", "Must be positive and <= 2^32");
+    }
+    if ((max & -max) == max) {
+      // Fast case for powers of two.
+      _nextState();
+      return _state & (max - 1);
+    }
+
+    int rnd32;
+    int result;
+    do {
+      _nextState();
+      rnd32 = _stateLow;
+      result = rnd32 % max;
+    } while ((rnd32 - result + max) > _POW2_32);
+    return result;
+  }
+
+  double nextDouble() {
+    return ((nextInt(1 << 26) * _POW2_27_D) + nextInt(1 << 27)) / _POW2_53_D;
+  }
+
+  bool nextBool() {
+    return nextInt(2) == 0;
+  }
+
+  // Constants used by the algorithm.
+  static const _POW2_32 = 1 << 32;
+  static const _POW2_53_D = 1.0 * (1 << 53);
+  static const _POW2_27_D = 1.0 * (1 << 27);
+
+  // Use a singleton Random object to get a new seed if no seed was passed.
+  static final _prng = new _Random._withState(_initialSeed());
+
+  static int _setupSeed(int seed) => mix64(seed);
+
+  // TODO: Make this actually random
+  static int _initialSeed() => 0xCAFEBABEDEADBEEF;
+
+  static int _nextSeed() {
+    // Trigger the PRNG once to change the internal state.
+    _prng._nextState();
+    return _prng._stateLow;
+  }
+}
+
+class _SecureRandom implements Random {
+  _SecureRandom() {
+    // Throw early in constructor if entropy source is not hooked up.
+    _getBytes(1);
+  }
+
+  // Return count bytes of entropy as a positive integer; count <= 8.
+  external static int _getBytes(int count);
+
+  int nextInt(int max) {
+    RangeError.checkValueInInterval(
+        max, 1, _POW2_32, "max", "Must be positive and <= 2^32");
+    final byteCount = ((max - 1).bitLength + 7) >> 3;
+    if (byteCount == 0) {
+      return 0; // Not random if max == 1.
+    }
+    var rnd;
+    var result;
+    do {
+      rnd = _getBytes(byteCount);
+      result = rnd % max;
+    } while ((rnd - result + max) > (1 << (byteCount << 3)));
+    return result;
+  }
+
+  double nextDouble() {
+    return (_getBytes(7) >> 3) / _POW2_53_D;
+  }
+
+  bool nextBool() {
+    return _getBytes(1).isEven;
+  }
+
+  // Constants used by the algorithm.
+  static const _POW2_32 = 1 << 32;
+  static const _POW2_53_D = 1.0 * (1 << 53);
+}
diff --git a/sdk/lib/_internal/wasm/lib/object_patch.dart b/sdk/lib/_internal/wasm/lib/object_patch.dart
new file mode 100644
index 0000000..d38ca14
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/object_patch.dart
@@ -0,0 +1,49 @@
+// 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";
+
+// Access hidden identity hash code field
+external int _getHash(Object obj);
+external void _setHash(Object obj, int hash);
+
+@patch
+class Object {
+  @patch
+  external bool operator ==(Object other);
+
+  // Random number generator used to generate identity hash codes.
+  static final _hashCodeRnd = new Random();
+
+  static int _objectHashCode(Object obj) {
+    var result = _getHash(obj);
+    if (result == 0) {
+      // We want the hash to be a Smi value greater than 0.
+      do {
+        result = _hashCodeRnd.nextInt(0x40000000);
+      } while (result == 0);
+
+      _setHash(obj, result);
+      return result;
+    }
+    return result;
+  }
+
+  @patch
+  int get hashCode => _objectHashCode(this);
+  int get _identityHashCode => _objectHashCode(this);
+
+  @patch
+  String toString() => _toString(this);
+  // A statically dispatched version of Object.toString.
+  static String _toString(obj) => "Instance of '${obj.runtimeType}'";
+
+  @patch
+  dynamic noSuchMethod(Invocation invocation) {
+    throw new NoSuchMethodError.withInvocation(this, invocation);
+  }
+
+  @patch
+  external Type get runtimeType;
+}
diff --git a/sdk/lib/_internal/wasm/lib/patch.dart b/sdk/lib/_internal/wasm/lib/patch.dart
new file mode 100644
index 0000000..f69ddc4
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/patch.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.
+
+class _Patch {
+  const _Patch();
+}
+
+const _Patch patch = const _Patch();
diff --git a/sdk/lib/_internal/wasm/lib/print_patch.dart b/sdk/lib/_internal/wasm/lib/print_patch.dart
new file mode 100644
index 0000000..e08b7e2
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/print_patch.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.
+
+// part of "internal_patch.dart";
+
+@patch
+@pragma("wasm:import", "dart2wasm.printToConsole")
+external void printToConsole(String line);
diff --git a/sdk/lib/_internal/wasm/lib/stack_trace_patch.dart b/sdk/lib/_internal/wasm/lib/stack_trace_patch.dart
new file mode 100644
index 0000000..4e43fa0
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/stack_trace_patch.dart
@@ -0,0 +1,15 @@
+// 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.
+
+@pragma("wasm:import", "dart2wasm.getCurrentStackTrace")
+external String _getCurrentStackTrace();
+
+@patch
+class StackTrace {
+  @patch
+  @pragma("wasm:entry-point")
+  static StackTrace get current {
+    return _StringStackTrace(_getCurrentStackTrace());
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/string_buffer_patch.dart b/sdk/lib/_internal/wasm/lib/string_buffer_patch.dart
new file mode 100644
index 0000000..ac22cba
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/string_buffer_patch.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.
+
+// part of "core_patch.dart";
+
+// This file is identical to the VM `string_buffer_patch.dart` except for the
+// implementation of `StringBuffer._create`.
+// TODO(askesc): Share this file with the VM when the patching mechanism gains
+// support for patching an external member from a patch in a separate patch.
+
+@patch
+class StringBuffer {
+  static const int _BUFFER_SIZE = 64;
+  static const int _PARTS_TO_COMPACT = 128;
+  static const int _PARTS_TO_COMPACT_SIZE_LIMIT = _PARTS_TO_COMPACT * 8;
+
+  /**
+   * When strings are written to the string buffer, we add them to a
+   * list of string parts.
+   */
+  List<String>? _parts;
+
+  /**
+    * Total number of code units in the string parts. Does not include
+    * the code units added to the buffer.
+    */
+  int _partsCodeUnits = 0;
+
+  /**
+   * To preserve memory, we sometimes compact the parts. This combines
+   * several smaller parts into a single larger part to cut down on the
+   * cost that comes from the per-object memory overhead. We keep track
+   * of the last index where we ended our compaction and the number of
+   * code units added since the last compaction.
+   */
+  int _partsCompactionIndex = 0;
+  int _partsCodeUnitsSinceCompaction = 0;
+
+  /**
+   * The buffer is used to build up a string from code units. It is
+   * used when writing short strings or individual char codes to the
+   * buffer. The buffer is allocated on demand.
+   */
+  Uint16List? _buffer;
+  int _bufferPosition = 0;
+
+  /**
+   * Collects the approximate maximal magnitude of the code units added
+   * to the buffer.
+   *
+   * The value of each added code unit is or'ed with this variable, so the
+   * most significant bit set in any code unit is also set in this value.
+   * If below 256, the string in the buffer is a Latin-1 string.
+   */
+  int _bufferCodeUnitMagnitude = 0;
+
+  /// Creates the string buffer with an initial content.
+  @patch
+  StringBuffer([Object content = ""]) {
+    write(content);
+  }
+
+  @patch
+  int get length => _partsCodeUnits + _bufferPosition;
+
+  @patch
+  void write(Object? obj) {
+    String str = "$obj";
+    if (str.isEmpty) return;
+    _consumeBuffer();
+    _addPart(str);
+  }
+
+  @patch
+  void writeCharCode(int charCode) {
+    if (charCode <= 0xFFFF) {
+      if (charCode < 0) {
+        throw new RangeError.range(charCode, 0, 0x10FFFF);
+      }
+      _ensureCapacity(1);
+      final localBuffer = _buffer!;
+      localBuffer[_bufferPosition++] = charCode;
+      _bufferCodeUnitMagnitude |= charCode;
+    } else {
+      if (charCode > 0x10FFFF) {
+        throw new RangeError.range(charCode, 0, 0x10FFFF);
+      }
+      _ensureCapacity(2);
+      int bits = charCode - 0x10000;
+      final localBuffer = _buffer!;
+      localBuffer[_bufferPosition++] = 0xD800 | (bits >> 10);
+      localBuffer[_bufferPosition++] = 0xDC00 | (bits & 0x3FF);
+      _bufferCodeUnitMagnitude |= 0xFFFF;
+    }
+  }
+
+  @patch
+  void writeAll(Iterable objects, [String separator = ""]) {
+    Iterator iterator = objects.iterator;
+    if (!iterator.moveNext()) return;
+    if (separator.isEmpty) {
+      do {
+        write(iterator.current);
+      } while (iterator.moveNext());
+    } else {
+      write(iterator.current);
+      while (iterator.moveNext()) {
+        write(separator);
+        write(iterator.current);
+      }
+    }
+  }
+
+  @patch
+  void writeln([Object? obj = ""]) {
+    write(obj);
+    write("\n");
+  }
+
+  /** Makes the buffer empty. */
+  @patch
+  void clear() {
+    _parts = null;
+    _partsCodeUnits = _bufferPosition = _bufferCodeUnitMagnitude = 0;
+  }
+
+  /** Returns the contents of buffer as a string. */
+  @patch
+  String toString() {
+    _consumeBuffer();
+    final localParts = _parts;
+    return (_partsCodeUnits == 0 || localParts == null)
+        ? ""
+        : _StringBase._concatRange(localParts, 0, localParts.length);
+  }
+
+  /** Ensures that the buffer has enough capacity to add n code units. */
+  void _ensureCapacity(int n) {
+    final localBuffer = _buffer;
+    if (localBuffer == null) {
+      _buffer = new Uint16List(_BUFFER_SIZE);
+    } else if (_bufferPosition + n > localBuffer.length) {
+      _consumeBuffer();
+    }
+  }
+
+  /**
+   * Consumes the content of the buffer by turning it into a string
+   * and adding it as a part. After calling this the buffer position
+   * will be reset to zero.
+   */
+  void _consumeBuffer() {
+    if (_bufferPosition == 0) return;
+    bool isLatin1 = _bufferCodeUnitMagnitude <= 0xFF;
+    String str = _create(_buffer!, _bufferPosition, isLatin1);
+    _bufferPosition = _bufferCodeUnitMagnitude = 0;
+    _addPart(str);
+  }
+
+  /**
+   * Adds a new part to this string buffer and keeps track of how
+   * many code units are contained in the parts.
+   */
+  void _addPart(String str) {
+    final localParts = _parts;
+    int length = str.length;
+    _partsCodeUnits += length;
+    _partsCodeUnitsSinceCompaction += length;
+
+    if (localParts == null) {
+      // Empirically this is a good capacity to minimize total bytes allocated.
+      _parts = new _GrowableList.withCapacity(10)..add(str);
+    } else {
+      localParts.add(str);
+      int partsSinceCompaction = localParts.length - _partsCompactionIndex;
+      if (partsSinceCompaction == _PARTS_TO_COMPACT) {
+        _compact();
+      }
+    }
+  }
+
+  /**
+   * Compacts the last N parts if their average size allows us to save a
+   * lot of memory by turning them all into a single part.
+   */
+  void _compact() {
+    final localParts = _parts!;
+    if (_partsCodeUnitsSinceCompaction < _PARTS_TO_COMPACT_SIZE_LIMIT) {
+      String compacted = _StringBase._concatRange(
+          localParts,
+          _partsCompactionIndex, // Start
+          _partsCompactionIndex + _PARTS_TO_COMPACT // End
+          );
+      localParts.length = localParts.length - _PARTS_TO_COMPACT;
+      localParts.add(compacted);
+    }
+    _partsCodeUnitsSinceCompaction = 0;
+    _partsCompactionIndex = localParts.length;
+  }
+
+  /**
+   * Create a [String] from the UFT-16 code units in buffer.
+   */
+  static String _create(Uint16List buffer, int length, bool isLatin1) {
+    if (isLatin1) {
+      return _StringBase._createOneByteString(buffer, 0, length);
+    } else {
+      return _TwoByteString._allocateFromTwoByteList(buffer, 0, length);
+    }
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/string_patch.dart b/sdk/lib/_internal/wasm/lib/string_patch.dart
new file mode 100644
index 0000000..a9c0222
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/string_patch.dart
@@ -0,0 +1,1391 @@
+// 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";
+
+// Much of this patch file is similar to the VM `string_patch.dart`. It may make
+// sense to share some of the code when the patching mechanism supports patching
+// the same class in multiple patch files.
+
+const int _maxAscii = 0x7f;
+const int _maxLatin1 = 0xff;
+const int _maxUtf16 = 0xffff;
+const int _maxUnicode = 0x10ffff;
+
+@patch
+class String {
+  @patch
+  factory String.fromCharCodes(Iterable<int> charCodes,
+      [int start = 0, int? end]) {
+    return _StringBase.createFromCharCodes(charCodes, start, end, null);
+  }
+
+  @patch
+  factory String.fromCharCode(int charCode) {
+    if (charCode >= 0) {
+      if (charCode <= 0xff) {
+        return _OneByteString._allocate(1).._setAt(0, charCode);
+      }
+      if (charCode <= 0xffff) {
+        return _TwoByteString._allocate(1).._setAt(0, charCode);
+      }
+      if (charCode <= 0x10ffff) {
+        var low = 0xDC00 | (charCode & 0x3ff);
+        int bits = charCode - 0x10000;
+        var high = 0xD800 | (bits >> 10);
+        return _StringBase._createFromCodePoints(
+            new _List(2)
+              ..[0] = high
+              ..[1] = low,
+            0,
+            2);
+      }
+    }
+    throw new RangeError.range(charCode, 0, 0x10ffff);
+  }
+
+  @patch
+  external const factory String.fromEnvironment(String name,
+      {String defaultValue = ""});
+
+  bool get _isOneByte;
+  String _substringUnchecked(int startIndex, int endIndex);
+}
+
+/**
+ * [_StringBase] contains common methods used by concrete String
+ * implementations, e.g., _OneByteString.
+ */
+abstract class _StringBase implements String {
+  bool _isWhitespace(int codeUnit);
+
+  // Constants used by replaceAll encoding of string slices between matches.
+  // A string slice (start+length) is encoded in a single Smi to save memory
+  // overhead in the common case.
+  // We use fewer bits for length (11 bits) than for the start index (19+ bits).
+  // For long strings, it's possible to have many large indices,
+  // but it's unlikely to have many long lengths since slices don't overlap.
+  // If there are few matches in a long string, then there are few long slices,
+  // and if there are many matches, there'll likely be many short slices.
+  //
+  // Encoding is: 0((start << _lengthBits) | length)
+
+  // Number of bits used by length.
+  // This is the shift used to encode and decode the start index.
+  static const int _lengthBits = 11;
+  // The maximal allowed length value in an encoded slice.
+  static const int _maxLengthValue = (1 << _lengthBits) - 1;
+  // Mask of length in encoded smi value.
+  static const int _lengthMask = _maxLengthValue;
+  static const int _startBits = _maxUnsignedSmiBits - _lengthBits;
+  // Maximal allowed start index value in an encoded slice.
+  static const int _maxStartValue = (1 << _startBits) - 1;
+  // We pick 30 as a safe lower bound on available bits in a negative smi.
+  // TODO(lrn): Consider allowing more bits for start on 64-bit systems.
+  static const int _maxUnsignedSmiBits = 30;
+
+  // For longer strings, calling into C++ to create the result of a
+  // [replaceAll] is faster than [_joinReplaceAllOneByteResult].
+  // TODO(lrn): See if this limit can be tweaked.
+  static const int _maxJoinReplaceOneByteStringLength = 500;
+
+  _StringBase._();
+
+  int get hashCode {
+    int hash = _getHash(this);
+    if (hash != 0) return hash;
+    hash = _computeHashCode();
+    _setHash(this, hash);
+    return hash;
+  }
+
+  int _computeHashCode();
+
+  int get _identityHashCode => hashCode;
+
+  bool get _isOneByte {
+    // Alternatively return false and override it on one-byte string classes.
+    return this is _OneByteString;
+  }
+
+  /**
+   * Create the most efficient string representation for specified
+   * [charCodes].
+   *
+   * Only uses the character codes between index [start] and index [end] of
+   * `charCodes`. They must satisfy `0 <= start <= end <= charCodes.length`.
+   *
+   * The [limit] is an upper limit on the character codes in the iterable.
+   * It's `null` if unknown.
+   */
+  static String createFromCharCodes(
+      Iterable<int> charCodes, int start, int? end, int? limit) {
+    // TODO(srdjan): Also skip copying of wide typed arrays.
+    if (charCodes is Uint8List) {
+      final actualEnd =
+          RangeError.checkValidRange(start, end, charCodes.length);
+      return _createOneByteString(charCodes, start, actualEnd - start);
+    } else if (charCodes is! Uint16List) {
+      return _createStringFromIterable(charCodes, start, end);
+    }
+    final int codeCount = charCodes.length;
+    final actualEnd = RangeError.checkValidRange(start, end, codeCount);
+    final len = actualEnd - start;
+    if (len == 0) return "";
+
+    final typedCharCodes = unsafeCast<List<int>>(charCodes);
+
+    final int actualLimit =
+        limit ?? _scanCodeUnits(typedCharCodes, start, actualEnd);
+    if (actualLimit < 0) {
+      throw new ArgumentError(typedCharCodes);
+    }
+    if (actualLimit <= _maxLatin1) {
+      return _createOneByteString(typedCharCodes, start, len);
+    }
+    if (actualLimit <= _maxUtf16) {
+      return _TwoByteString._allocateFromTwoByteList(
+          typedCharCodes, start, actualEnd);
+    }
+    // TODO(lrn): Consider passing limit to _createFromCodePoints, because
+    // the function is currently fully generic and doesn't know that its
+    // charCodes are not all Latin-1 or Utf-16.
+    return _createFromCodePoints(typedCharCodes, start, actualEnd);
+  }
+
+  static int _scanCodeUnits(List<int> charCodes, int start, int end) {
+    int bits = 0;
+    for (int i = start; i < end; i++) {
+      int code = charCodes[i];
+      bits |= code;
+    }
+    return bits;
+  }
+
+  static String _createStringFromIterable(
+      Iterable<int> charCodes, int start, int? end) {
+    // Treat charCodes as Iterable.
+    if (charCodes is EfficientLengthIterable) {
+      int length = charCodes.length;
+      final endVal = RangeError.checkValidRange(start, end, length);
+      final charCodeList = new List<int>.from(
+          charCodes.take(endVal).skip(start),
+          growable: false);
+      return createFromCharCodes(charCodeList, 0, charCodeList.length, null);
+    }
+    // Don't know length of iterable, so iterate and see if all the values
+    // are there.
+    if (start < 0) throw new RangeError.range(start, 0, charCodes.length);
+    var it = charCodes.iterator;
+    for (int i = 0; i < start; i++) {
+      if (!it.moveNext()) {
+        throw new RangeError.range(start, 0, i);
+      }
+    }
+    List<int> charCodeList;
+    int bits = 0; // Bitwise-or of all char codes in list.
+    final endVal = end;
+    if (endVal == null) {
+      var list = <int>[];
+      while (it.moveNext()) {
+        int code = it.current;
+        bits |= code;
+        list.add(code);
+      }
+      charCodeList = makeListFixedLength<int>(list);
+    } else {
+      if (endVal < start) {
+        throw new RangeError.range(endVal, start, charCodes.length);
+      }
+      int len = endVal - start;
+      charCodeList = new List<int>.generate(len, (int i) {
+        if (!it.moveNext()) {
+          throw new RangeError.range(endVal, start, start + i);
+        }
+        int code = it.current;
+        bits |= code;
+        return code;
+      });
+    }
+    int length = charCodeList.length;
+    if (bits < 0) {
+      throw new ArgumentError(charCodes);
+    }
+    bool isOneByteString = (bits <= _maxLatin1);
+    if (isOneByteString) {
+      return _createOneByteString(charCodeList, 0, length);
+    }
+    return createFromCharCodes(charCodeList, 0, length, bits);
+  }
+
+  // Inlining is disabled as a workaround to http://dartbug.com/37800.
+
+  static String _createOneByteString(List<int> charCodes, int start, int len) {
+    // It's always faster to do this in Dart than to call into the runtime.
+    var s = _OneByteString._allocate(len);
+
+    // Special case for native Uint8 typed arrays.
+    if (charCodes is Uint8List) {
+      copyRangeFromUint8ListToOneByteString(charCodes, s, start, 0, len);
+      return s;
+    }
+
+    // Fall through to normal case.
+    for (int i = 0; i < len; i++) {
+      s._setAt(i, charCodes[start + i]);
+    }
+    return s;
+  }
+
+  external static String _createFromCodePoints(
+      List<int> codePoints, int start, int end);
+
+  String operator [](int index) => String.fromCharCode(codeUnitAt(index));
+
+  int codeUnitAt(int index); // Implemented in the subclasses.
+
+  int get length; // Implemented in the subclasses.
+
+  bool get isEmpty {
+    return this.length == 0;
+  }
+
+  bool get isNotEmpty => !isEmpty;
+
+  String operator +(String other) => _interpolate([this, other]);
+
+  String toString() {
+    return this;
+  }
+
+  bool operator ==(Object other) {
+    if (identical(this, other)) {
+      return true;
+    }
+    if (other is String && this.length == other.length) {
+      final len = this.length;
+      for (int i = 0; i < len; i++) {
+        if (this.codeUnitAt(i) != other.codeUnitAt(i)) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  int compareTo(String other) {
+    int thisLength = this.length;
+    int otherLength = other.length;
+    int len = (thisLength < otherLength) ? thisLength : otherLength;
+    for (int i = 0; i < len; i++) {
+      int thisCodeUnit = this.codeUnitAt(i);
+      int otherCodeUnit = other.codeUnitAt(i);
+      if (thisCodeUnit < otherCodeUnit) {
+        return -1;
+      }
+      if (thisCodeUnit > otherCodeUnit) {
+        return 1;
+      }
+    }
+    if (thisLength < otherLength) return -1;
+    if (thisLength > otherLength) return 1;
+    return 0;
+  }
+
+  bool _substringMatches(int start, String other) {
+    if (other.isEmpty) return true;
+    final len = other.length;
+    if ((start < 0) || (start + len > this.length)) {
+      return false;
+    }
+    for (int i = 0; i < len; i++) {
+      if (this.codeUnitAt(i + start) != other.codeUnitAt(i)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  bool endsWith(String other) {
+    return _substringMatches(this.length - other.length, other);
+  }
+
+  bool startsWith(Pattern pattern, [int index = 0]) {
+    if ((index < 0) || (index > this.length)) {
+      throw new RangeError.range(index, 0, this.length);
+    }
+    if (pattern is String) {
+      return _substringMatches(index, pattern);
+    }
+    return pattern.matchAsPrefix(this, index) != null;
+  }
+
+  int indexOf(Pattern pattern, [int start = 0]) {
+    if ((start < 0) || (start > this.length)) {
+      throw new RangeError.range(start, 0, this.length, "start");
+    }
+    if (pattern is String) {
+      String other = pattern;
+      int maxIndex = this.length - other.length;
+      // TODO: Use an efficient string search (e.g. BMH).
+      for (int index = start; index <= maxIndex; index++) {
+        if (_substringMatches(index, other)) {
+          return index;
+        }
+      }
+      return -1;
+    }
+    for (int i = start; i <= this.length; i++) {
+      // TODO(11276); This has quadratic behavior because matchAsPrefix tries
+      // to find a later match too. Optimize matchAsPrefix to avoid this.
+      if (pattern.matchAsPrefix(this, i) != null) return i;
+    }
+    return -1;
+  }
+
+  int lastIndexOf(Pattern pattern, [int? start]) {
+    if (start == null) {
+      start = this.length;
+    } else if (start < 0 || start > this.length) {
+      throw new RangeError.range(start, 0, this.length);
+    }
+    if (pattern is String) {
+      String other = pattern;
+      int maxIndex = this.length - other.length;
+      if (maxIndex < start) start = maxIndex;
+      for (int index = start; index >= 0; index--) {
+        if (_substringMatches(index, other)) {
+          return index;
+        }
+      }
+      return -1;
+    }
+    for (int i = start; i >= 0; i--) {
+      // TODO(11276); This has quadratic behavior because matchAsPrefix tries
+      // to find a later match too. Optimize matchAsPrefix to avoid this.
+      if (pattern.matchAsPrefix(this, i) != null) return i;
+    }
+    return -1;
+  }
+
+  String substring(int startIndex, [int? endIndex]) {
+    endIndex = RangeError.checkValidRange(startIndex, endIndex, this.length);
+    return _substringUnchecked(startIndex, endIndex);
+  }
+
+  String _substringUnchecked(int startIndex, int endIndex) {
+    assert((startIndex >= 0) && (startIndex <= this.length));
+    assert((endIndex >= 0) && (endIndex <= this.length));
+    assert(startIndex <= endIndex);
+
+    if (startIndex == endIndex) {
+      return "";
+    }
+    if ((startIndex == 0) && (endIndex == this.length)) {
+      return this;
+    }
+    if ((startIndex + 1) == endIndex) {
+      return this[startIndex];
+    }
+    return _substringUncheckedNative(startIndex, endIndex);
+  }
+
+  external String _substringUncheckedNative(int startIndex, int endIndex);
+
+  // Checks for one-byte whitespaces only.
+  static bool _isOneByteWhitespace(int codeUnit) {
+    if (codeUnit <= 32) {
+      return ((codeUnit == 32) || // Space.
+          ((codeUnit <= 13) && (codeUnit >= 9))); // CR, LF, TAB, etc.
+    }
+    return (codeUnit == 0x85) || (codeUnit == 0xA0); // NEL, NBSP.
+  }
+
+  // Characters with Whitespace property (Unicode 6.3).
+  // 0009..000D    ; White_Space # Cc       <control-0009>..<control-000D>
+  // 0020          ; White_Space # Zs       SPACE
+  // 0085          ; White_Space # Cc       <control-0085>
+  // 00A0          ; White_Space # Zs       NO-BREAK SPACE
+  // 1680          ; White_Space # Zs       OGHAM SPACE MARK
+  // 2000..200A    ; White_Space # Zs       EN QUAD..HAIR SPACE
+  // 2028          ; White_Space # Zl       LINE SEPARATOR
+  // 2029          ; White_Space # Zp       PARAGRAPH SEPARATOR
+  // 202F          ; White_Space # Zs       NARROW NO-BREAK SPACE
+  // 205F          ; White_Space # Zs       MEDIUM MATHEMATICAL SPACE
+  // 3000          ; White_Space # Zs       IDEOGRAPHIC SPACE
+  //
+  // BOM: 0xFEFF
+  static bool _isTwoByteWhitespace(int codeUnit) {
+    if (codeUnit <= 32) {
+      return (codeUnit == 32) || ((codeUnit <= 13) && (codeUnit >= 9));
+    }
+    if (codeUnit < 0x85) return false;
+    if ((codeUnit == 0x85) || (codeUnit == 0xA0)) return true;
+    return (codeUnit <= 0x200A)
+        ? ((codeUnit == 0x1680) || (0x2000 <= codeUnit))
+        : ((codeUnit == 0x2028) ||
+            (codeUnit == 0x2029) ||
+            (codeUnit == 0x202F) ||
+            (codeUnit == 0x205F) ||
+            (codeUnit == 0x3000) ||
+            (codeUnit == 0xFEFF));
+  }
+
+  int _firstNonWhitespace() {
+    final len = this.length;
+    int first = 0;
+    for (; first < len; first++) {
+      if (!_isWhitespace(this.codeUnitAt(first))) {
+        break;
+      }
+    }
+    return first;
+  }
+
+  int _lastNonWhitespace() {
+    int last = this.length - 1;
+    for (; last >= 0; last--) {
+      if (!_isWhitespace(this.codeUnitAt(last))) {
+        break;
+      }
+    }
+    return last;
+  }
+
+  String trim() {
+    final len = this.length;
+    int first = _firstNonWhitespace();
+    if (len == first) {
+      // String contains only whitespaces.
+      return "";
+    }
+    int last = _lastNonWhitespace() + 1;
+    if ((first == 0) && (last == len)) {
+      // Returns this string since it does not have leading or trailing
+      // whitespaces.
+      return this;
+    }
+    return _substringUnchecked(first, last);
+  }
+
+  String trimLeft() {
+    final len = this.length;
+    int first = 0;
+    for (; first < len; first++) {
+      if (!_isWhitespace(this.codeUnitAt(first))) {
+        break;
+      }
+    }
+    if (len == first) {
+      // String contains only whitespaces.
+      return "";
+    }
+    if (first == 0) {
+      // Returns this string since it does not have leading or trailing
+      // whitespaces.
+      return this;
+    }
+    return _substringUnchecked(first, len);
+  }
+
+  String trimRight() {
+    final len = this.length;
+    int last = len - 1;
+    for (; last >= 0; last--) {
+      if (!_isWhitespace(this.codeUnitAt(last))) {
+        break;
+      }
+    }
+    if (last == -1) {
+      // String contains only whitespaces.
+      return "";
+    }
+    if (last == (len - 1)) {
+      // Returns this string since it does not have trailing whitespaces.
+      return this;
+    }
+    return _substringUnchecked(0, last + 1);
+  }
+
+  String operator *(int times) {
+    if (times <= 0) return "";
+    if (times == 1) return this;
+    StringBuffer buffer = new StringBuffer(this);
+    for (int i = 1; i < times; i++) {
+      buffer.write(this);
+    }
+    return buffer.toString();
+  }
+
+  String padLeft(int width, [String padding = ' ']) {
+    int delta = width - this.length;
+    if (delta <= 0) return this;
+    StringBuffer buffer = new StringBuffer();
+    for (int i = 0; i < delta; i++) {
+      buffer.write(padding);
+    }
+    buffer.write(this);
+    return buffer.toString();
+  }
+
+  String padRight(int width, [String padding = ' ']) {
+    int delta = width - this.length;
+    if (delta <= 0) return this;
+    StringBuffer buffer = new StringBuffer(this);
+    for (int i = 0; i < delta; i++) {
+      buffer.write(padding);
+    }
+    return buffer.toString();
+  }
+
+  bool contains(Pattern pattern, [int startIndex = 0]) {
+    if (pattern is String) {
+      if (startIndex < 0 || startIndex > this.length) {
+        throw new RangeError.range(startIndex, 0, this.length);
+      }
+      return indexOf(pattern, startIndex) >= 0;
+    }
+    return pattern.allMatches(this.substring(startIndex)).isNotEmpty;
+  }
+
+  String replaceFirst(Pattern pattern, String replacement,
+      [int startIndex = 0]) {
+    RangeError.checkValueInInterval(startIndex, 0, this.length, "startIndex");
+    Iterator iterator = startIndex == 0
+        ? pattern.allMatches(this).iterator
+        : pattern.allMatches(this, startIndex).iterator;
+    if (!iterator.moveNext()) return this;
+    Match match = iterator.current;
+    return replaceRange(match.start, match.end, replacement);
+  }
+
+  String replaceRange(int start, int? end, String replacement) {
+    final length = this.length;
+    final localEnd = RangeError.checkValidRange(start, end, length);
+    bool replacementIsOneByte = replacement._isOneByte;
+    if (start == 0 && localEnd == length) return replacement;
+    int replacementLength = replacement.length;
+    int totalLength = start + (length - localEnd) + replacementLength;
+    if (replacementIsOneByte && this._isOneByte) {
+      var result = _OneByteString._allocate(totalLength);
+      int index = 0;
+      index = result._setRange(index, this, 0, start);
+      index = result._setRange(start, replacement, 0, replacementLength);
+      result._setRange(index, this, localEnd, length);
+      return result;
+    }
+    List slices = [];
+    _addReplaceSlice(slices, 0, start);
+    if (replacement.length > 0) slices.add(replacement);
+    _addReplaceSlice(slices, localEnd, length);
+    return _joinReplaceAllResult(
+        this, slices, totalLength, replacementIsOneByte);
+  }
+
+  static int _addReplaceSlice(List matches, int start, int end) {
+    int length = end - start;
+    if (length > 0) {
+      if (length <= _maxLengthValue && start <= _maxStartValue) {
+        matches.add(-((start << _lengthBits) | length));
+      } else {
+        matches.add(start);
+        matches.add(end);
+      }
+    }
+    return length;
+  }
+
+  String replaceAll(Pattern pattern, String replacement) {
+    int startIndex = 0;
+    // String fragments that replace the prefix [this] up to [startIndex].
+    List matches = [];
+    int length = 0; // Length of all fragments.
+    int replacementLength = replacement.length;
+
+    if (replacementLength == 0) {
+      for (Match match in pattern.allMatches(this)) {
+        length += _addReplaceSlice(matches, startIndex, match.start);
+        startIndex = match.end;
+      }
+    } else {
+      for (Match match in pattern.allMatches(this)) {
+        length += _addReplaceSlice(matches, startIndex, match.start);
+        matches.add(replacement);
+        length += replacementLength;
+        startIndex = match.end;
+      }
+    }
+    // No match, or a zero-length match at start with zero-length replacement.
+    if (startIndex == 0 && length == 0) return this;
+    length += _addReplaceSlice(matches, startIndex, this.length);
+    bool replacementIsOneByte = replacement._isOneByte;
+    if (replacementIsOneByte &&
+        length < _maxJoinReplaceOneByteStringLength &&
+        this._isOneByte) {
+      // TODO(lrn): Is there a cut-off point, or is runtime always faster?
+      return _joinReplaceAllOneByteResult(this, matches, length);
+    }
+    return _joinReplaceAllResult(this, matches, length, replacementIsOneByte);
+  }
+
+  /**
+   * As [_joinReplaceAllResult], but knowing that the result
+   * is always a [_OneByteString].
+   */
+  static String _joinReplaceAllOneByteResult(
+      String base, List matches, int length) {
+    _OneByteString result = _OneByteString._allocate(length);
+    int writeIndex = 0;
+    for (int i = 0; i < matches.length; i++) {
+      var entry = matches[i];
+      if (entry is _Smi) {
+        int sliceStart = entry;
+        int sliceEnd;
+        if (sliceStart < 0) {
+          int bits = -sliceStart;
+          int sliceLength = bits & _lengthMask;
+          sliceStart = bits >> _lengthBits;
+          sliceEnd = sliceStart + sliceLength;
+        } else {
+          i++;
+          // This function should only be called with valid matches lists.
+          // If the list is short, or sliceEnd is not an integer, one of
+          // the next few lines will throw anyway.
+          assert(i < matches.length);
+          sliceEnd = matches[i];
+        }
+        for (int j = sliceStart; j < sliceEnd; j++) {
+          result._setAt(writeIndex++, base.codeUnitAt(j));
+        }
+      } else {
+        // Replacement is a one-byte string.
+        String replacement = entry;
+        for (int j = 0; j < replacement.length; j++) {
+          result._setAt(writeIndex++, replacement.codeUnitAt(j));
+        }
+      }
+    }
+    assert(writeIndex == length);
+    return result;
+  }
+
+  /**
+   * Combine the results of a [replaceAll] match into a new string.
+   *
+   * The [matches] lists contains Smi index pairs representing slices of
+   * [base] and [String]s to be put in between the slices.
+   *
+   * The total [length] of the resulting string is known, as is
+   * whether the replacement strings are one-byte strings.
+   * If they are, then we have to check the base string slices to know
+   * whether the result must be a one-byte string.
+   */
+
+  external static String _joinReplaceAllResult(
+      String base, List matches, int length, bool replacementStringsAreOneByte);
+
+  String replaceAllMapped(Pattern pattern, String replace(Match match)) {
+    List matches = [];
+    int length = 0;
+    int startIndex = 0;
+    bool replacementStringsAreOneByte = true;
+    for (Match match in pattern.allMatches(this)) {
+      length += _addReplaceSlice(matches, startIndex, match.start);
+      var replacement = "${replace(match)}";
+      matches.add(replacement);
+      length += replacement.length;
+      replacementStringsAreOneByte =
+          replacementStringsAreOneByte && replacement._isOneByte;
+      startIndex = match.end;
+    }
+    if (matches.isEmpty) return this;
+    length += _addReplaceSlice(matches, startIndex, this.length);
+    if (replacementStringsAreOneByte &&
+        length < _maxJoinReplaceOneByteStringLength &&
+        this._isOneByte) {
+      return _joinReplaceAllOneByteResult(this, matches, length);
+    }
+    return _joinReplaceAllResult(
+        this, matches, length, replacementStringsAreOneByte);
+  }
+
+  String replaceFirstMapped(Pattern pattern, String replace(Match match),
+      [int startIndex = 0]) {
+    RangeError.checkValueInInterval(startIndex, 0, this.length, "startIndex");
+
+    var matches = pattern.allMatches(this, startIndex).iterator;
+    if (!matches.moveNext()) return this;
+    var match = matches.current;
+    var replacement = "${replace(match)}";
+    return replaceRange(match.start, match.end, replacement);
+  }
+
+  static String _matchString(Match match) => match[0]!;
+  static String _stringIdentity(String string) => string;
+
+  String _splitMapJoinEmptyString(
+      String onMatch(Match match), String onNonMatch(String nonMatch)) {
+    // Pattern is the empty string.
+    StringBuffer buffer = new StringBuffer();
+    int length = this.length;
+    int i = 0;
+    buffer.write(onNonMatch(""));
+    while (i < length) {
+      buffer.write(onMatch(new _StringMatch(i, this, "")));
+      // Special case to avoid splitting a surrogate pair.
+      int code = this.codeUnitAt(i);
+      if ((code & ~0x3FF) == 0xD800 && length > i + 1) {
+        // Leading surrogate;
+        code = this.codeUnitAt(i + 1);
+        if ((code & ~0x3FF) == 0xDC00) {
+          // Matching trailing surrogate.
+          buffer.write(onNonMatch(this.substring(i, i + 2)));
+          i += 2;
+          continue;
+        }
+      }
+      buffer.write(onNonMatch(this[i]));
+      i++;
+    }
+    buffer.write(onMatch(new _StringMatch(i, this, "")));
+    buffer.write(onNonMatch(""));
+    return buffer.toString();
+  }
+
+  String splitMapJoin(Pattern pattern,
+      {String onMatch(Match match)?, String onNonMatch(String nonMatch)?}) {
+    onMatch ??= _matchString;
+    onNonMatch ??= _stringIdentity;
+    if (pattern is String) {
+      String stringPattern = pattern;
+      if (stringPattern.isEmpty) {
+        return _splitMapJoinEmptyString(onMatch, onNonMatch);
+      }
+    }
+    StringBuffer buffer = new StringBuffer();
+    int startIndex = 0;
+    for (Match match in pattern.allMatches(this)) {
+      buffer.write(onNonMatch(this.substring(startIndex, match.start)));
+      buffer.write(onMatch(match).toString());
+      startIndex = match.end;
+    }
+    buffer.write(onNonMatch(this.substring(startIndex)));
+    return buffer.toString();
+  }
+
+  /**
+   * Convert all objects in [values] to strings and concat them
+   * into a result string.
+   * Modifies the input list if it contains non-`String` values.
+   */
+  @pragma("wasm:entry-point", "call")
+  static String _interpolate(final List values) {
+    final numValues = values.length;
+    int totalLength = 0;
+    int i = 0;
+    while (i < numValues) {
+      final e = values[i];
+      final s = e.toString();
+      values[i] = s;
+      if (s is _OneByteString) {
+        totalLength += s.length;
+        i++;
+      } else {
+        // Handle remaining elements without checking for one-byte-ness.
+        while (++i < numValues) {
+          final e = values[i];
+          values[i] = e.toString();
+        }
+        return _concatRangeNative(values, 0, numValues);
+      }
+    }
+    // All strings were one-byte strings.
+    return _OneByteString._concatAll(values, totalLength);
+  }
+
+  static ArgumentError _interpolationError(Object? o, Object? result) {
+    // Since Dart 2.0, [result] can only be null.
+    return new ArgumentError.value(
+        o, "object", "toString method returned 'null'");
+  }
+
+  Iterable<Match> allMatches(String string, [int start = 0]) {
+    if (start < 0 || start > string.length) {
+      throw new RangeError.range(start, 0, string.length, "start");
+    }
+    return new _StringAllMatchesIterable(string, this, start);
+  }
+
+  Match? matchAsPrefix(String string, [int start = 0]) {
+    if (start < 0 || start > string.length) {
+      throw new RangeError.range(start, 0, string.length);
+    }
+    if (start + this.length > string.length) return null;
+    for (int i = 0; i < this.length; i++) {
+      if (string.codeUnitAt(start + i) != this.codeUnitAt(i)) {
+        return null;
+      }
+    }
+    return new _StringMatch(start, string, this);
+  }
+
+  List<String> split(Pattern pattern) {
+    if ((pattern is String) && pattern.isEmpty) {
+      List<String> result =
+          new List<String>.generate(this.length, (int i) => this[i]);
+      return result;
+    }
+    int length = this.length;
+    Iterator iterator = pattern.allMatches(this).iterator;
+    if (length == 0 && iterator.moveNext()) {
+      // A matched empty string input returns the empty list.
+      return <String>[];
+    }
+    List<String> result = <String>[];
+    int startIndex = 0;
+    int previousIndex = 0;
+    // 'pattern' may not be implemented correctly and therefore we cannot
+    // call _substringUnhchecked unless it is a trustworthy type (e.g. String).
+    while (true) {
+      if (startIndex == length || !iterator.moveNext()) {
+        result.add(this.substring(previousIndex, length));
+        break;
+      }
+      Match match = iterator.current;
+      if (match.start == length) {
+        result.add(this.substring(previousIndex, length));
+        break;
+      }
+      int endIndex = match.end;
+      if (startIndex == endIndex && endIndex == previousIndex) {
+        ++startIndex; // empty match, advance and restart
+        continue;
+      }
+      result.add(this.substring(previousIndex, match.start));
+      startIndex = previousIndex = endIndex;
+    }
+    return result;
+  }
+
+  List<int> get codeUnits => new CodeUnits(this);
+
+  Runes get runes => new Runes(this);
+
+  external String toUpperCase();
+
+  external String toLowerCase();
+
+  // Concatenate ['start', 'end'[ elements of 'strings'.
+  static String _concatRange(List<String> strings, int start, int end) {
+    if ((end - start) == 1) {
+      return strings[start];
+    }
+    return _concatRangeNative(strings, start, end);
+  }
+
+  // Call this method if all elements of [strings] are known to be strings
+  // but not all are known to be OneByteString(s).
+  static String _concatRangeNative(List strings, int start, int end) {
+    int totalLength = 0;
+    for (int i = start; i < end; i++) {
+      totalLength += unsafeCast<_StringBase>(strings[i]).length;
+    }
+    _TwoByteString result = _TwoByteString._allocate(totalLength);
+    int offset = 0;
+    for (int i = start; i < end; i++) {
+      _StringBase s = unsafeCast<_StringBase>(strings[i]);
+      offset = s._copyIntoTwoByteString(result, offset);
+    }
+    return result;
+  }
+
+  int _copyIntoTwoByteString(_TwoByteString result, int offset);
+
+  static int _combineHashes(int hash, int other_hash) {
+    hash += other_hash;
+    hash += hash << 10;
+    hash ^= (hash & 0xFFFFFFFF) >>> 6;
+    return hash;
+  }
+
+  static int _finalizeHash(int hash) {
+    hash += hash << 3;
+    hash ^= (hash & 0xFFFFFFFF) >>> 11;
+    hash += hash << 15;
+    hash &= 0x3FFFFFFF;
+    return hash == 0 ? 1 : hash;
+  }
+}
+
+@pragma("wasm:entry-point")
+class _OneByteString extends _StringBase {
+  @pragma("wasm:entry-point")
+  WasmIntArray<WasmI8> _array;
+
+  _OneByteString._withLength(int length)
+      : _array = WasmIntArray<WasmI8>(length),
+        super._();
+
+  // Same hash as VM
+  int _computeHashCode() {
+    WasmIntArray<WasmI8> array = _array;
+    int length = array.length;
+    int hash = 0;
+    for (int i = 0; i < length; i++) {
+      hash = _StringBase._combineHashes(hash, array.readUnsigned(i));
+    }
+    return _StringBase._finalizeHash(hash);
+  }
+
+  int codeUnitAt(int index) => _array.readUnsigned(index);
+
+  int get length => _array.length;
+
+  bool _isWhitespace(int codeUnit) {
+    return _StringBase._isOneByteWhitespace(codeUnit);
+  }
+
+  bool operator ==(Object other) {
+    return super == other;
+  }
+
+  String _substringUncheckedNative(int startIndex, int endIndex) {
+    int length = endIndex - startIndex;
+    var result = _OneByteString._withLength(length);
+    for (int i = 0; i < length; i++) {
+      result._setAt(i, codeUnitAt(startIndex + i));
+    }
+    return result;
+  }
+
+  List<String> _splitWithCharCode(int charCode) {
+    final parts = <String>[];
+    int i = 0;
+    int start = 0;
+    for (i = 0; i < this.length; ++i) {
+      if (this.codeUnitAt(i) == charCode) {
+        parts.add(this._substringUnchecked(start, i));
+        start = i + 1;
+      }
+    }
+    parts.add(this._substringUnchecked(start, i));
+    return parts;
+  }
+
+  List<String> split(Pattern pattern) {
+    if (pattern is _OneByteString && pattern.length == 1) {
+      return _splitWithCharCode(pattern.codeUnitAt(0));
+    }
+    return super.split(pattern);
+  }
+
+  // All element of 'strings' must be OneByteStrings.
+  static _concatAll(List strings, int totalLength) {
+    final result = _OneByteString._allocate(totalLength);
+    final to = result._array;
+    final stringsLength = strings.length;
+    int j = 0;
+    for (int s = 0; s < stringsLength; s++) {
+      final _OneByteString e = unsafeCast<_OneByteString>(strings[s]);
+      final from = e._array;
+      final length = from.length;
+      for (int i = 0; i < length; i++) {
+        to.write(j++, from.readUnsigned(i));
+      }
+    }
+    return result;
+  }
+
+  int _copyIntoTwoByteString(_TwoByteString result, int offset) {
+    final from = _array;
+    final int length = from.length;
+    final to = result._array;
+    int j = offset;
+    for (int i = 0; i < length; i++) {
+      to.write(j++, from.readUnsigned(i));
+    }
+    return j;
+  }
+
+  int indexOf(Pattern pattern, [int start = 0]) {
+    final len = this.length;
+    // Specialize for single character pattern.
+    if (pattern is String && pattern.length == 1 && start >= 0 && start < len) {
+      final patternCu0 = pattern.codeUnitAt(0);
+      if (patternCu0 > 0xFF) {
+        return -1;
+      }
+      for (int i = start; i < len; i++) {
+        if (this.codeUnitAt(i) == patternCu0) {
+          return i;
+        }
+      }
+      return -1;
+    }
+    return super.indexOf(pattern, start);
+  }
+
+  bool contains(Pattern pattern, [int start = 0]) {
+    final len = this.length;
+    if (pattern is String && pattern.length == 1 && start >= 0 && start < len) {
+      final patternCu0 = pattern.codeUnitAt(0);
+      if (patternCu0 > 0xFF) {
+        return false;
+      }
+      for (int i = start; i < len; i++) {
+        if (this.codeUnitAt(i) == patternCu0) {
+          return true;
+        }
+      }
+      return false;
+    }
+    return super.contains(pattern, start);
+  }
+
+  String operator *(int times) {
+    if (times <= 0) return "";
+    if (times == 1) return this;
+    int length = this.length;
+    if (this.isEmpty) return this; // Don't clone empty string.
+    _OneByteString result = _OneByteString._allocate(length * times);
+    int index = 0;
+    for (int i = 0; i < times; i++) {
+      for (int j = 0; j < length; j++) {
+        result._setAt(index++, this.codeUnitAt(j));
+      }
+    }
+    return result;
+  }
+
+  String padLeft(int width, [String padding = ' ']) {
+    if (!padding._isOneByte) {
+      return super.padLeft(width, padding);
+    }
+    int length = this.length;
+    int delta = width - length;
+    if (delta <= 0) return this;
+    int padLength = padding.length;
+    int resultLength = padLength * delta + length;
+    _OneByteString result = _OneByteString._allocate(resultLength);
+    int index = 0;
+    if (padLength == 1) {
+      int padChar = padding.codeUnitAt(0);
+      for (int i = 0; i < delta; i++) {
+        result._setAt(index++, padChar);
+      }
+    } else {
+      for (int i = 0; i < delta; i++) {
+        for (int j = 0; j < padLength; j++) {
+          result._setAt(index++, padding.codeUnitAt(j));
+        }
+      }
+    }
+    for (int i = 0; i < length; i++) {
+      result._setAt(index++, this.codeUnitAt(i));
+    }
+    return result;
+  }
+
+  String padRight(int width, [String padding = ' ']) {
+    if (!padding._isOneByte) {
+      return super.padRight(width, padding);
+    }
+    int length = this.length;
+    int delta = width - length;
+    if (delta <= 0) return this;
+    int padLength = padding.length;
+    int resultLength = length + padLength * delta;
+    _OneByteString result = _OneByteString._allocate(resultLength);
+    int index = 0;
+    for (int i = 0; i < length; i++) {
+      result._setAt(index++, this.codeUnitAt(i));
+    }
+    if (padLength == 1) {
+      int padChar = padding.codeUnitAt(0);
+      for (int i = 0; i < delta; i++) {
+        result._setAt(index++, padChar);
+      }
+    } else {
+      for (int i = 0; i < delta; i++) {
+        for (int j = 0; j < padLength; j++) {
+          result._setAt(index++, padding.codeUnitAt(j));
+        }
+      }
+    }
+    return result;
+  }
+
+  // Lower-case conversion table for Latin-1 as string.
+  // Upper-case ranges: 0x41-0x5a ('A' - 'Z'), 0xc0-0xd6, 0xd8-0xde.
+  // Conversion to lower case performed by adding 0x20.
+  static const _LC_TABLE =
+      "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+      "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+      "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+      "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+      "\x40\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
+      "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x5b\x5c\x5d\x5e\x5f"
+      "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
+      "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
+      "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+      "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+      "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+      "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+      "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+      "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf"
+      "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+      "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+  // Upper-case conversion table for Latin-1 as string.
+  // Lower-case ranges: 0x61-0x7a ('a' - 'z'), 0xe0-0xff.
+  // The characters 0xb5 (µ) and 0xff (ÿ) have upper case variants
+  // that are not Latin-1. These are both marked as 0x00 in the table.
+  // The German "sharp s" \xdf (ß) should be converted into two characters (SS),
+  // and is also marked with 0x00.
+  // Conversion to lower case performed by subtracting 0x20.
+  static const _UC_TABLE =
+      "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+      "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+      "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+      "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+      "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+      "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+      "\x60\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+      "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x7b\x7c\x7d\x7e\x7f"
+      "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+      "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+      "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+      "\xb0\xb1\xb2\xb3\xb4\x00\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+      "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+      "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\x00"
+      "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+      "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\x00";
+
+  String toLowerCase() {
+    for (int i = 0; i < this.length; i++) {
+      final c = this.codeUnitAt(i);
+      if (c == _LC_TABLE.codeUnitAt(c)) continue;
+      // Upper-case character found.
+      final result = _allocate(this.length);
+      for (int j = 0; j < i; j++) {
+        result._setAt(j, this.codeUnitAt(j));
+      }
+      for (int j = i; j < this.length; j++) {
+        result._setAt(j, _LC_TABLE.codeUnitAt(this.codeUnitAt(j)));
+      }
+      return result;
+    }
+    return this;
+  }
+
+  String toUpperCase() {
+    for (int i = 0; i < this.length; i++) {
+      final c = this.codeUnitAt(i);
+      // Continue loop if character is unchanged by upper-case conversion.
+      if (c == _UC_TABLE.codeUnitAt(c)) continue;
+
+      // Check rest of string for characters that do not convert to
+      // single-characters in the Latin-1 range.
+      for (int j = i; j < this.length; j++) {
+        final c = this.codeUnitAt(j);
+        if ((_UC_TABLE.codeUnitAt(c) == 0x00) && (c != 0x00)) {
+          // We use the 0x00 value for characters other than the null character,
+          // that don't convert to a single Latin-1 character when upper-cased.
+          // In that case, call the generic super-class method.
+          return super.toUpperCase();
+        }
+      }
+      // Some lower-case characters found, but all upper-case to single Latin-1
+      // characters.
+      final result = _allocate(this.length);
+      for (int j = 0; j < i; j++) {
+        result._setAt(j, this.codeUnitAt(j));
+      }
+      for (int j = i; j < this.length; j++) {
+        result._setAt(j, _UC_TABLE.codeUnitAt(this.codeUnitAt(j)));
+      }
+      return result;
+    }
+    return this;
+  }
+
+  // Allocates a string of given length, expecting its content to be
+  // set using _setAt.
+
+  static _OneByteString _allocate(int length) {
+    return unsafeCast<_OneByteString>(allocateOneByteString(length));
+  }
+
+  external static _OneByteString _allocateFromOneByteList(
+      List<int> list, int start, int end);
+
+  // This is internal helper method. Code point value must be a valid
+  // Latin1 value (0..0xFF), index must be valid.
+
+  void _setAt(int index, int codePoint) {
+    writeIntoOneByteString(this, index, codePoint);
+  }
+
+  // Should be optimizable to a memory move.
+  // Accepts both _OneByteString and _ExternalOneByteString as argument.
+  // Returns index after last character written.
+  int _setRange(int index, String oneByteString, int start, int end) {
+    assert(oneByteString._isOneByte);
+    assert(0 <= start);
+    assert(start <= end);
+    assert(end <= oneByteString.length);
+    assert(0 <= index);
+    assert(index + (end - start) <= length);
+    for (int i = start; i < end; i++) {
+      _setAt(index, oneByteString.codeUnitAt(i));
+      index += 1;
+    }
+    return index;
+  }
+}
+
+@pragma("wasm:entry-point")
+class _TwoByteString extends _StringBase {
+  @pragma("wasm:entry-point")
+  WasmIntArray<WasmI16> _array;
+
+  _TwoByteString._withLength(int length)
+      : _array = WasmIntArray<WasmI16>(length),
+        super._();
+
+  // Same hash as VM
+  int _computeHashCode() {
+    WasmIntArray<WasmI16> array = _array;
+    int length = array.length;
+    int hash = 0;
+    for (int i = 0; i < length; i++) {
+      hash = _StringBase._combineHashes(hash, array.readUnsigned(i));
+    }
+    return _StringBase._finalizeHash(hash);
+  }
+
+  // Allocates a string of given length, expecting its content to be
+  // set using _setAt.
+
+  static _TwoByteString _allocate(int length) {
+    return unsafeCast<_TwoByteString>(allocateTwoByteString(length));
+  }
+
+  static String _allocateFromTwoByteList(List<int> list, int start, int end) {
+    final int length = end - start;
+    final s = _allocate(length);
+    final array = s._array;
+    for (int i = 0; i < length; i++) {
+      array.write(i, list[start + i]);
+    }
+    return s;
+  }
+
+  // This is internal helper method. Code point value must be a valid
+  // UTF-16 value (0..0xFFFF), index must be valid.
+
+  void _setAt(int index, int codePoint) {
+    writeIntoTwoByteString(this, index, codePoint);
+  }
+
+  bool _isWhitespace(int codeUnit) {
+    return _StringBase._isTwoByteWhitespace(codeUnit);
+  }
+
+  int codeUnitAt(int index) => _array.readUnsigned(index);
+
+  int get length => _array.length;
+
+  bool operator ==(Object other) {
+    return super == other;
+  }
+
+  int _copyIntoTwoByteString(_TwoByteString result, int offset) {
+    final from = _array;
+    final int length = from.length;
+    final to = result._array;
+    int j = offset;
+    for (int i = 0; i < length; i++) {
+      to.write(j++, from.readUnsigned(i));
+    }
+    return j;
+  }
+}
+
+class _StringMatch implements Match {
+  const _StringMatch(this.start, this.input, this.pattern);
+
+  int get end => start + pattern.length;
+  String operator [](int g) => group(g);
+  int get groupCount => 0;
+
+  String group(int group) {
+    if (group != 0) {
+      throw new RangeError.value(group);
+    }
+    return pattern;
+  }
+
+  List<String> groups(List<int> groups) {
+    List<String> result = <String>[];
+    for (int g in groups) {
+      result.add(group(g));
+    }
+    return result;
+  }
+
+  final int start;
+  final String input;
+  final String pattern;
+}
+
+class _StringAllMatchesIterable extends Iterable<Match> {
+  final String _input;
+  final String _pattern;
+  final int _index;
+
+  _StringAllMatchesIterable(this._input, this._pattern, this._index);
+
+  Iterator<Match> get iterator =>
+      new _StringAllMatchesIterator(_input, _pattern, _index);
+
+  Match get first {
+    int index = _input.indexOf(_pattern, _index);
+    if (index >= 0) {
+      return new _StringMatch(index, _input, _pattern);
+    }
+    throw IterableElementError.noElement();
+  }
+}
+
+class _StringAllMatchesIterator implements Iterator<Match> {
+  final String _input;
+  final String _pattern;
+  int _index;
+  Match? _current;
+
+  _StringAllMatchesIterator(this._input, this._pattern, this._index);
+
+  bool moveNext() {
+    if (_index + _pattern.length > _input.length) {
+      _current = null;
+      return false;
+    }
+    var index = _input.indexOf(_pattern, _index);
+    if (index < 0) {
+      _index = _input.length + 1;
+      _current = null;
+      return false;
+    }
+    int end = index + _pattern.length;
+    _current = new _StringMatch(index, _input, _pattern);
+    // Empty match, don't start at same location again.
+    if (end == _index) end++;
+    _index = end;
+    return true;
+  }
+
+  Match get current => _current as Match;
+}
diff --git a/sdk/lib/_internal/wasm/lib/timer_patch.dart b/sdk/lib/_internal/wasm/lib/timer_patch.dart
new file mode 100644
index 0000000..47c7f03
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/timer_patch.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.
+
+// part of "async_patch.dart";
+
+// Implementation of `Timer` and `scheduleMicrotask` via the JS event loop.
+
+import 'dart:_internal' show patch, scheduleCallback;
+
+@patch
+class Timer {
+  @patch
+  static Timer _createTimer(Duration duration, void callback()) {
+    return _OneShotTimer(duration, callback);
+  }
+
+  @patch
+  static Timer _createPeriodicTimer(
+      Duration duration, void callback(Timer timer)) {
+    return _PeriodicTimer(duration, callback);
+  }
+}
+
+abstract class _Timer implements Timer {
+  final double milliseconds;
+  bool isActive;
+  int tick;
+
+  _Timer(Duration duration)
+      : milliseconds = duration.inMilliseconds.toDouble(),
+        isActive = true,
+        tick = 0 {
+    _schedule();
+  }
+
+  void _schedule() {
+    scheduleCallback(milliseconds, () {
+      if (isActive) {
+        tick++;
+        _run();
+      }
+    });
+  }
+
+  void _run();
+
+  @override
+  void cancel() {
+    isActive = false;
+  }
+}
+
+class _OneShotTimer extends _Timer {
+  final void Function() callback;
+
+  _OneShotTimer(Duration duration, this.callback) : super(duration);
+
+  void _run() {
+    isActive = false;
+    callback();
+  }
+}
+
+class _PeriodicTimer extends _Timer {
+  final void Function(Timer) callback;
+
+  _PeriodicTimer(Duration duration, this.callback) : super(duration);
+
+  void _run() {
+    _schedule();
+    callback(this);
+  }
+}
+
+@patch
+class _AsyncRun {
+  @patch
+  static void _scheduleImmediate(void callback()) {
+    scheduleCallback(0, callback);
+  }
+}
diff --git a/sdk/lib/_internal/wasm/lib/type.dart b/sdk/lib/_internal/wasm/lib/type.dart
new file mode 100644
index 0000000..6db370d
--- /dev/null
+++ b/sdk/lib/_internal/wasm/lib/type.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.
+
+// Representation of runtime types. Can only represent interface types so far,
+// and does not capture nullability.
+
+@pragma("wasm:entry-point")
+class _Type implements Type {
+  final int classId;
+  final List<_Type> typeArguments;
+
+  @pragma("wasm:entry-point")
+  const _Type(this.classId, [this.typeArguments = const []]);
+
+  bool operator ==(Object other) {
+    if (other is! _Type) return false;
+    if (classId != other.classId) return false;
+    for (int i = 0; i < typeArguments.length; i++) {
+      if (typeArguments[i] != other.typeArguments[i]) return false;
+    }
+    return true;
+  }
+
+  int get hashCode {
+    int hash = mix64(classId);
+    for (int i = 0; i < typeArguments.length; i++) {
+      hash = mix64(hash ^ typeArguments[i].hashCode);
+    }
+    return hash;
+  }
+
+  String toString() {
+    StringBuffer s = StringBuffer();
+    s.write("Type");
+    s.write(classId);
+    if (typeArguments.isNotEmpty) {
+      s.write("<");
+      for (int i = 0; i < typeArguments.length; i++) {
+        if (i > 0) s.write(",");
+        s.write(typeArguments[i]);
+      }
+      s.write(">");
+    }
+    return s.toString();
+  }
+}
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart
index 0b16dae..ca05fc6 100644
--- a/sdk/lib/async/async.dart
+++ b/sdk/lib/async/async.dart
@@ -114,7 +114,8 @@
         printToZone,
         printToConsole,
         Since,
-        typeAcceptsNull;
+        typeAcceptsNull,
+        unsafeCast;
 
 part 'async_error.dart';
 part 'broadcast_stream_controller.dart';
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index ea6c234..05433e6 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -75,7 +75,7 @@
 /// Here the `File.readAsString` method from `dart:io` is an asychronous
 /// function returning a `Future<String>`.
 /// The `fileContains` function is marked with `async` right before its body,
-/// which means that you can use `await` insider it,
+/// which means that you can use `await` inside it,
 /// and that it must return a future.
 /// The call to `File(path).readAsString()` initiates reading the file into
 /// a string and produces a `Future<String>` which will eventually contain the
@@ -185,7 +185,7 @@
 /// (the value handler) and using a second [catchError] for handling errors.
 /// Each of these will forward the result that they don't handle
 /// to their successors, and together they handle both value and error result.
-/// It also has the additional benefit of the [catchError] handling errors in the
+/// It has the additional benefit of the [catchError] handling errors in the
 /// [then] value callback too.
 /// Using sequential handlers instead of parallel ones often leads to code that
 /// is easier to reason about.
@@ -291,6 +291,11 @@
   ///
   /// If calling [computation] returns a non-future value,
   /// a future is returned which has been completed with that value.
+  ///
+  /// Example:
+  /// ```dart
+  /// final result = await Future<int>.sync(() => 12);
+  /// ```
   factory Future.sync(FutureOr<T> computation()) {
     try {
       var result = computation();
@@ -328,6 +333,15 @@
   /// must be provided, otherwise the construction throws.
   ///
   /// Use [Completer] to create a future now and complete it later.
+  ///
+  /// Example:
+  /// ```dart
+  /// Future<int> getFuture() {
+  ///  return Future<int>.value(2021);
+  /// }
+  ///
+  /// final result = await getFuture();
+  /// ```
   @pragma("vm:entry-point")
   @pragma("vm:prefer-inline")
   factory Future.value([FutureOr<T>? value]) {
@@ -342,6 +356,15 @@
   /// will be considered unhandled.
   ///
   /// Use [Completer] to create a future and complete it later.
+  ///
+  /// Example:
+  /// ```dart
+  /// Future<int> getFuture() {
+  ///  return Future.error(Exception('Issue'));
+  /// }
+  ///
+  /// final error = await getFuture(); // Throws.
+  /// ```
   factory Future.error(Object error, [StackTrace? stackTrace]) {
     // TODO(40614): Remove once non-nullability is sound.
     checkNotNullable(error, "error");
@@ -379,6 +402,13 @@
   ///
   /// See also [Completer] for a way to create and complete a future at a
   /// later time that isn't necessarily after a known fixed duration.
+  ///
+  /// Example:
+  /// ```dart
+  /// Future.delayed(const Duration(seconds: 1), () {
+  ///   print('One second has passed.'); // Prints after 1 second.
+  /// });
+  /// ```
   factory Future.delayed(Duration duration, [FutureOr<T> computation()?]) {
     if (computation == null && !typeAcceptsNull<T>()) {
       throw ArgumentError.value(
@@ -426,6 +456,24 @@
   ///
   /// The call to [cleanUp] should not throw. If it does, the error will be an
   /// uncaught asynchronous error.
+  ///
+  /// Example:
+  /// ```dart
+  /// void main() async {
+  ///   var value = await Future.wait([delayedNumber(), delayedString()]);
+  ///   print(value); // [2, result]
+  /// }
+  ///
+  /// Future<int> delayedNumber() async {
+  ///   await Future.delayed(const Duration(seconds: 2));
+  ///   return 2;
+  /// }
+  ///
+  /// Future<String> delayedString() async {
+  ///   await Future.delayed(const Duration(seconds: 2));
+  ///   return 'result';
+  /// }
+  /// ```
   @pragma("vm:recognized", "other")
   static Future<List<T>> wait<T>(Iterable<Future<T>> futures,
       {bool eagerError = false, void cleanUp(T successValue)?}) {
@@ -534,6 +582,30 @@
   ///
   /// If [futures] is empty, or if none of its futures complete,
   /// the returned future never completes.
+  ///
+  /// Example:
+  /// ```dart
+  /// void main() async {
+  ///   final result =
+  ///       await Future.any([slowInt(), delayedString(), fastInt()]);
+  ///   // The future of fastInt completes first, others are ignored.
+  ///   print(result); // 3
+  /// }
+  /// Future<int> slowInt() async {
+  ///   await Future.delayed(const Duration(seconds: 2));
+  ///   return 2;
+  /// }
+  ///
+  /// Future<String> delayedString() async {
+  ///   await Future.delayed(const Duration(seconds: 2));
+  ///   throw TimeoutException('Time has passed');
+  /// }
+  ///
+  /// Future<int> fastInt() async {
+  ///   await Future.delayed(const Duration(seconds: 1));
+  ///   return 3;
+  /// }
+  /// ```
   static Future<T> any<T>(Iterable<Future<T>> futures) {
     var completer = new Completer<T>.sync();
     void onValue(T value) {
@@ -599,6 +671,23 @@
   /// The only restriction is a new call to [action] won't happen before
   /// the previous call has returned, and if it returned a `Future<bool>`, not
   /// until that future has completed.
+  ///
+  /// Example:
+  /// ```dart
+  /// void main() async {
+  ///   var value = 0;
+  ///   await Future.doWhile(() async {
+  ///     value++;
+  ///     await Future.delayed(const Duration(seconds: 1));
+  ///     if (value == 3) {
+  ///       print('Finished with $value');
+  ///       return false;
+  ///     }
+  ///     return true;
+  ///   });
+  /// }
+  /// // Outputs: 'Finished with 3'
+  /// ```
   static Future doWhile(FutureOr<bool> action()) {
     _Future<void> doneSignal = new _Future<void>();
     late void Function(bool) nextIteration;
@@ -709,11 +798,25 @@
   /// added. If the first `catchError` (or `then`) call happens after this future
   /// has completed with an error then the error is reported as unhandled error.
   /// See the description on [Future].
+  ///
+  /// Example:
+  /// ```dart
+  /// Future.delayed(
+  ///   const Duration(seconds: 1),
+  ///   () => throw 401,
+  /// ).then((value) {
+  ///   throw 'Unreachable';
+  /// }).catchError((err) {
+  ///   print('Error: $err'); // Prints 401.
+  /// }, test: (error) {
+  ///   return error is int && error >= 400;
+  /// });
+  /// ```
   // The `Function` below stands for one of two types:
   // - (dynamic) -> FutureOr<T>
   // - (dynamic, StackTrace) -> FutureOr<T>
   // Given that there is a `test` function that is usually used to do an
-  // `isCheck` we should also expect functions that take a specific argument.
+  // `is` check, we should also expect functions that take a specific argument.
   Future<T> catchError(Function onError, {bool test(Object error)?});
 
   /// Registers a function to be called when this future completes.
@@ -750,6 +853,21 @@
   ///   });
   /// }
   /// ```
+  /// Example:
+  /// ```dart
+  /// void main() async {
+  ///   var value =
+  ///       await waitTask().whenComplete(() => print('do something here'));
+  ///   // Prints "do something here" after waitTask() completed.
+  ///   print(value); // Prints "done"
+  /// }
+  ///
+  /// Future<String> waitTask() {
+  ///   Future.delayed(const Duration(seconds: 5));
+  ///   return Future.value('done');
+  /// }
+  /// // Outputs: 'do some work here' after waitTask is completed.
+  /// ```
   Future<T> whenComplete(FutureOr<void> action());
 
   /// Creates a [Stream] containing the result of this future.
@@ -773,6 +891,27 @@
   ///
   /// If `onTimeout` is omitted, a timeout will cause the returned future to
   /// complete with a [TimeoutException].
+  ///
+  /// Example:
+  /// ```dart
+  /// void main() async {
+  ///   var result = await waitTask()
+  ///       .timeout(const Duration(seconds: 10));
+  ///   print(result); // 'completed'
+  ///
+  ///   result = await waitTask()
+  ///       .timeout(const Duration(seconds: 1), onTimeout: () => 'timeout');
+  ///   print(result); // 'timeout'
+  ///
+  ///   result = await waitTask()
+  ///       .timeout(const Duration(seconds: 2)); // Throws.
+  /// }
+  ///
+  /// Future<String> waitTask() async {
+  ///   await Future.delayed(const Duration(seconds: 5));
+  ///   return 'completed';
+  /// }
+  /// ```
   Future<T> timeout(Duration timeLimit, {FutureOr<T> onTimeout()?});
 }
 
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index 4d13cc8..44b3906 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -4,15 +4,6 @@
 
 part of dart.async;
 
-/// The onValue and onError handlers return either a value or a future
-typedef FutureOr<T> _FutureOnValue<S, T>(S value);
-
-/// Test used by [Future.catchError] to handle skip some errors.
-typedef bool _FutureErrorTest(Object error);
-
-/// Used by [WhenFuture].
-typedef dynamic _FutureAction();
-
 abstract class _Completer<T> implements Completer<T> {
   final _Future<T> future = new _Future<T>();
 
@@ -106,7 +97,7 @@
         state = (errorCallback == null) ? stateThen : stateThenOnerror;
 
   _FutureListener.thenAwait(
-      this.result, _FutureOnValue<S, T> onValue, Function errorCallback)
+      this.result, FutureOr<T> Function(S) onValue, Function errorCallback)
       : callback = onValue,
         errorCallback = errorCallback,
         state = stateThenOnerror;
@@ -127,19 +118,19 @@
 
   FutureOr<T> Function(S) get _onValue {
     assert(handlesValue);
-    return callback as dynamic;
+    return unsafeCast<FutureOr<T> Function(S)>(callback);
   }
 
   Function? get _onError => errorCallback;
 
-  _FutureErrorTest get _errorTest {
+  bool Function(Object) get _errorTest {
     assert(hasErrorTest);
-    return callback as dynamic;
+    return unsafeCast<bool Function(Object)>(callback);
   }
 
-  _FutureAction get _whenCompleteAction {
+  dynamic Function() get _whenCompleteAction {
     assert(handlesComplete);
-    return callback as dynamic;
+    return unsafeCast<dynamic Function()>(callback);
   }
 
   /// Whether this listener has an error callback.
@@ -607,6 +598,41 @@
     _asyncCompleteWithValue(value as dynamic); // Value promoted to T.
   }
 
+  /// Internal helper function used by the implementation of `async` functions.
+  ///
+  /// Like [_asyncComplete], but avoids type checks that are guaranteed to
+  /// succeed by the way the function is called.
+  /// Should be used judiciously.
+  void _asyncCompleteUnchecked(/*FutureOr<T>*/ dynamic value) {
+    // Ensure [value] is FutureOr<T>, do so using an `as` check so it works
+    // also correctly in non-sound null-safety mode.
+    assert(identical(value as FutureOr<T>, value));
+    final typedValue = unsafeCast<FutureOr<T>>(value);
+
+    // Doing just "is Future" is not sufficient.
+    // If `T` is Object` and `value` is `Future<Object?>.value(null)`,
+    // then value is a `Future`, but not a `Future<T>`, and going through the
+    // `_chainFuture` branch would end up assigning `null` to `Object`.
+    if (typedValue is Future<T>) {
+      _chainFuture(typedValue);
+      return;
+    }
+    _asyncCompleteWithValue(unsafeCast<T>(typedValue));
+  }
+
+  /// Internal helper function used to implement `async` functions.
+  ///
+  /// Like [_asyncCompleteUnchecked], but avoids a `is Future<T>` check due to
+  /// having a static guarantee on the callsite that the [value] cannot be a
+  /// [Future].
+  /// Should be used judiciously.
+  void _asyncCompleteUncheckedNoFuture(/*T*/ dynamic value) {
+    // Ensure [value] is T, do so using an `as` check so it works also correctly
+    // in non-sound null-safety mode.
+    assert(identical(value as T, value));
+    _asyncCompleteWithValue(unsafeCast<T>(value));
+  }
+
   void _asyncCompleteWithValue(T value) {
     _setPendingComplete();
     _zone.scheduleMicrotask(() {
diff --git a/sdk/lib/core/enum.dart b/sdk/lib/core/enum.dart
index 5d8f800..df63ab1 100644
--- a/sdk/lib/core/enum.dart
+++ b/sdk/lib/core/enum.dart
@@ -52,6 +52,22 @@
   /// orders enum values by their [index] value, which corresponds
   /// to the source order of the enum element declarations in
   /// the `enum` declaration.
+  ///
+  /// Example:
+  /// ```dart
+  /// enum Season { spring, summer, autumn, winter }
+  ///
+  /// void main() {
+  ///   var relationByIndex =
+  ///       Enum.compareByIndex(Season.spring, Season.summer); // < 0
+  ///   relationByIndex =
+  ///       Enum.compareByIndex(Season.summer, Season.spring); // > 0
+  ///   relationByIndex =
+  ///       Enum.compareByIndex(Season.spring, Season.winter); // < 0
+  ///   relationByIndex =
+  ///       Enum.compareByIndex(Season.winter, Season.spring); // > 0
+  /// }
+  /// ```
   @Since("2.15")
   static int compareByIndex<T extends Enum>(T value1, T value2) =>
       value1.index - value2.index;
@@ -64,6 +80,17 @@
   /// This [Comparator] compares two enum values by comparing their names,
   /// and can be used to sort enum values by their names.
   /// The comparison uses [String.compareTo], and is therefore case sensitive.
+  ///
+  /// Example:
+  /// ```dart
+  /// enum Season { spring, summer, autumn, winter }
+  ///
+  /// void main() {
+  ///   var seasons = [...Season.values]..sort(Enum.compareByName);
+  ///   print(seasons);
+  ///   // [Season.autumn, Season.spring, Season.summer, Season.winter]
+  /// }
+  /// ```
   @Since("2.15")
   static int compareByName<T extends Enum>(T value1, T value2) =>
       value1.name.compareTo(value2.name);
diff --git a/sdk/lib/core/errors.dart b/sdk/lib/core/errors.dart
index 00d69ce..d009f9a 100644
--- a/sdk/lib/core/errors.dart
+++ b/sdk/lib/core/errors.dart
@@ -462,6 +462,7 @@
 ///
 /// No longer used in Dart 2 where it has become a compile-time error
 /// to call the constructor of an abstract class.
+@Deprecated("No longer relevant in Dart 2.0")
 class AbstractClassInstantiationError extends Error {
   final String _className;
   AbstractClassInstantiationError(String className) : _className = className;
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index cd38662..f74f55e 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -1715,38 +1715,7 @@
     String thisScheme = this.scheme;
     if (scheme == null) return thisScheme.isEmpty;
     if (scheme.length != thisScheme.length) return false;
-    return _compareScheme(scheme, thisScheme);
-  }
-
-  /// Compares scheme characters in [scheme] and at the start of [uri].
-  ///
-  /// Returns `true` if [scheme] represents the same scheme as the start of
-  /// [uri]. That means having the same characters, but possibly different case
-  /// for letters.
-  ///
-  /// This function doesn't check that the characters are valid URI scheme
-  /// characters. The [uri] is assumed to be valid, so if [scheme] matches
-  /// it, it has to be valid too.
-  ///
-  /// The length should be tested before calling this function,
-  /// so the scheme part of [uri] is known to have the same length as [scheme].
-  static bool _compareScheme(String scheme, String uri) {
-    for (int i = 0; i < scheme.length; i++) {
-      int schemeChar = scheme.codeUnitAt(i);
-      int uriChar = uri.codeUnitAt(i);
-      int delta = schemeChar ^ uriChar;
-      if (delta != 0) {
-        if (delta == 0x20) {
-          // Might be a case difference.
-          int lowerChar = uriChar | delta;
-          if (0x61 /*a*/ <= lowerChar && lowerChar <= 0x7a /*z*/) {
-            continue;
-          }
-        }
-        return false;
-      }
-    }
-    return true;
+    return _caseInsensitiveStartsWith(scheme, thisScheme, 0);
   }
 
   /// Report a parse failure.
@@ -2184,7 +2153,9 @@
           }
         }
         String slice = host.substring(sectionStart, index);
-        (buffer ??= StringBuffer())..write(slice)..write(_escapeChar(char));
+        (buffer ??= StringBuffer())
+          ..write(slice)
+          ..write(_escapeChar(char));
         index += sourceLength;
         sectionStart = index;
       }
@@ -2261,7 +2232,9 @@
         }
         String slice = host.substring(sectionStart, index);
         if (!isNormalized) slice = slice.toLowerCase();
-        (buffer ??= StringBuffer())..write(slice)..write(_escapeChar(char));
+        (buffer ??= StringBuffer())
+          ..write(slice)
+          ..write(_escapeChar(char));
         index += sourceLength;
         sectionStart = index;
       }
@@ -2928,7 +2901,10 @@
 
   String _initializeText() {
     StringBuffer sb = StringBuffer();
-    if (scheme.isNotEmpty) sb..write(scheme)..write(":");
+    if (scheme.isNotEmpty)
+      sb
+        ..write(scheme)
+        ..write(":");
     if (hasAuthority || (scheme == "file")) {
       // File URIS always have the authority, even if it is empty.
       // The empty URI means "localhost".
@@ -2936,8 +2912,14 @@
       _writeAuthority(sb);
     }
     sb.write(path);
-    if (_query != null) sb..write("?")..write(_query);
-    if (_fragment != null) sb..write("#")..write(_fragment);
+    if (_query != null)
+      sb
+        ..write("?")
+        ..write(_query);
+    if (_fragment != null)
+      sb
+        ..write("#")
+        ..write(_fragment);
     return sb.toString();
   }
 
@@ -3439,7 +3421,7 @@
   /// and the path (concatenated with the query, if there is one) must be valid
   /// as data URI content with the same rules as [parse].
   factory UriData.fromUri(Uri uri) {
-    if (uri.scheme != "data") {
+    if (!uri.isScheme("data")) {
       throw ArgumentError.value(uri, "uri", "Scheme must be 'data'");
     }
     if (uri.hasAuthority) {
@@ -3468,7 +3450,7 @@
       Map<String, String>? parameters,
       StringBuffer buffer,
       List<int>? indices) {
-    if (mimeType == null || mimeType == "text/plain") {
+    if (mimeType == null || _caseInsensitiveEquals("text/plain", mimeType)) {
       mimeType = "";
     }
 
@@ -3486,8 +3468,9 @@
           _tokenCharTable, mimeType.substring(slashIndex + 1), utf8, false));
     }
     if (charsetName != null) {
-      // TODO(39209): Use ?.. when sequences are properly supported.
-      if (indices != null) indices..add(buffer.length)..add(buffer.length + 8);
+      indices
+        ?..add(buffer.length)
+        ..add(buffer.length + 8);
       buffer.write(";charset=");
       buffer.write(_Uri._uriEncode(_tokenCharTable, charsetName, utf8, false));
     }
@@ -3621,6 +3604,27 @@
     return _Uri._uriDecode(_text, start, end, utf8, false);
   }
 
+  /// Whether the [UriData.mimeType] is equal to [mimeType].
+  ///
+  /// Compares the `data:` URI's MIME type to [mimeType] with a case-
+  /// insensitive comparison which ignores the case of ASCII letters.
+  ///
+  /// An empty [mimeType] is considered equivalent to `text/plain`,
+  /// both in the [mimeType] argument and in the `data:` URI itself.
+  @Since("2.17")
+  bool isMimeType(String mimeType) {
+    int start = _separatorIndices[0] + 1;
+    int end = _separatorIndices[1];
+    if (start == end) {
+      return mimeType.isEmpty ||
+          identical(mimeType, "text/plain") ||
+          _caseInsensitiveEquals(mimeType, "text/plain");
+    }
+    if (mimeType.isEmpty) mimeType = "text/plain";
+    return (mimeType.length == end - start) &&
+        _caseInsensitiveStartsWith(mimeType, _text, start);
+  }
+
   /// The charset parameter of the media type.
   ///
   /// If the parameters of the media type contains a `charset` parameter
@@ -3631,23 +3635,89 @@
   /// If the MIME type representation in the URI text contains URI escapes,
   /// they are unescaped in the returned string.
   String get charset {
-    int parameterStart = 1;
-    int parameterEnd = _separatorIndices.length - 1; // The ',' before data.
-    if (isBase64) {
-      // There is a ";base64" separator, so subtract one for that as well.
-      parameterEnd -= 1;
-    }
-    for (int i = parameterStart; i < parameterEnd; i += 2) {
-      var keyStart = _separatorIndices[i] + 1;
-      var keyEnd = _separatorIndices[i + 1];
-      if (keyEnd == keyStart + 7 && _text.startsWith("charset", keyStart)) {
-        return _Uri._uriDecode(
-            _text, keyEnd + 1, _separatorIndices[i + 2], utf8, false);
-      }
+    var charsetIndex = _findCharsetIndex();
+    if (charsetIndex >= 0) {
+      var valueStart = _separatorIndices[charsetIndex + 1] + 1;
+      var valueEnd = _separatorIndices[charsetIndex + 2];
+      return _Uri._uriDecode(_text, valueStart, valueEnd, utf8, false);
     }
     return "US-ASCII";
   }
 
+  /// Finds the index of the separator before the "charset" parameter.
+  ///
+  /// Returns the index in [_separatorIndices] of the separator before
+  /// the name of the "charset" parameter, or -1 if there is no "charset"
+  /// parameter.
+  int _findCharsetIndex() {
+    var separatorIndices = _separatorIndices;
+    // Loop over all MIME-type parameters.
+    // Check that the parameter can have two parts (key/value)
+    // to ignore a trailing base-64 marker.
+    for (int i = 3; i <= separatorIndices.length; i += 2) {
+      var keyStart = separatorIndices[i - 2] + 1;
+      var keyEnd = separatorIndices[i - 1];
+      if (keyEnd == keyStart + "charset".length &&
+          _caseInsensitiveStartsWith("charset", _text, keyStart)) {
+        return i - 2;
+      }
+    }
+    return -1;
+  }
+
+  /// Checks whether the charset parameter of the mime type is [charset].
+  ///
+  /// If this URI has no "charset" parameter, it is assumed to have a default
+  /// of `charset=US-ASCII`.
+  /// If [charset] is empty, it's treated like `"US-ASCII"`.
+  ///
+  /// Returns true if [charset] and the "charset" parameter value are
+  /// equal strings, ignoring the case of ASCII letters, or both
+  /// correspond to the same [Encoding], as given by [Encoding.getByName].
+  @Since("2.17")
+  bool isCharset(String charset) {
+    var charsetIndex = _findCharsetIndex();
+    if (charsetIndex < 0) {
+      return charset.isEmpty ||
+          _caseInsensitiveEquals(charset, "US-ASCII") ||
+          identical(Encoding.getByName(charset), ascii);
+    }
+    if (charset.isEmpty) charset = "US-ASCII";
+    var valueStart = _separatorIndices[charsetIndex + 1] + 1;
+    var valueEnd = _separatorIndices[charsetIndex + 2];
+    var length = valueEnd - valueStart;
+    if (charset.length == length &&
+        _caseInsensitiveStartsWith(charset, _text, valueStart)) {
+      return true;
+    }
+    var checkedEncoding = Encoding.getByName(charset);
+    return checkedEncoding != null &&
+        identical(
+            checkedEncoding,
+            Encoding.getByName(
+                _Uri._uriDecode(_text, valueStart, valueEnd, utf8, false)));
+  }
+
+  /// Whether the charset parameter represents [encoding].
+  ///
+  /// If the "charset" parameter is not present in the URI,
+  /// it defaults to "US-ASCII", which is the [ascii] encoding.
+  /// If present, it's converted to an [Encoding] using [Encoding.getByName],
+  /// and compared to [encoding].
+  @Since("2.17")
+  bool isEncoding(Encoding encoding) {
+    var charsetIndex = _findCharsetIndex();
+    if (charsetIndex < 0) {
+      return identical(encoding, ascii);
+    }
+    var valueStart = _separatorIndices[charsetIndex + 1] + 1;
+    var valueEnd = _separatorIndices[charsetIndex + 2];
+    return identical(
+        encoding,
+        Encoding.getByName(
+            _Uri._uriDecode(_text, valueStart, valueEnd, utf8, false)));
+  }
+
   /// Whether the data is Base64 encoded or not.
   bool get isBase64 => _separatorIndices.length.isOdd;
 
@@ -4342,7 +4412,7 @@
   bool isScheme(String scheme) {
     if (scheme == null || scheme.isEmpty) return _schemeEnd < 0;
     if (scheme.length != _schemeEnd) return false;
-    return _Uri._compareScheme(scheme, _uri);
+    return _caseInsensitiveStartsWith(scheme, _uri, 0);
   }
 
   String get scheme {
@@ -4841,3 +4911,58 @@
   }
   return -1;
 }
+
+/// Whether [string] at [start] starts with  [prefix], ignoring case.
+///
+/// Returns whether [string] at offset [start]
+/// starts with the characters of [prefix],
+/// but ignores differences in the cases of ASCII letters,
+/// so `a` and `A` are considered equal.
+///
+/// The [string] must be at least as long as [prefix].
+///
+/// When used to checks the schemes of URIs,
+/// this function doesn't check that the characters are valid URI scheme
+/// characters. The [string] is assumed to be a valid URI,
+/// so if [prefix] matches it, it has to be valid too.
+bool _caseInsensitiveStartsWith(String prefix, String string, int start) =>
+    _caseInsensitiveCompareStart(prefix, string, start) >= 0;
+
+/// Compares [string] at [start] with [prefix], ignoring case.
+///
+/// Returns 0 if [string] starts with [prefix] at offset [start].
+/// Returns 0x20 if [string] starts with [prefix] at offset [start],
+/// but some ASCII letters have different case.
+/// Returns a negative value if [string] does not start with [prefix],
+/// at offset [start] even ignoring case differences.
+///
+/// The [string] must be at least as long as `start + prefix.length`.
+int _caseInsensitiveCompareStart(String prefix, String string, int start) {
+  int result = 0;
+  for (int i = 0; i < prefix.length; i++) {
+    int prefixChar = prefix.codeUnitAt(i);
+    int stringChar = string.codeUnitAt(start + i);
+    int delta = prefixChar ^ stringChar;
+    if (delta != 0) {
+      if (delta == 0x20) {
+        // Might be a case difference.
+        int lowerChar = stringChar | delta;
+        if (0x61 /*a*/ <= lowerChar && lowerChar <= 0x7a /*z*/) {
+          result = 0x20;
+          continue;
+        }
+      }
+      return -1;
+    }
+  }
+  return result;
+}
+
+/// Checks whether two strings are equal ignoring case differences.
+///
+/// Returns whether if [string1] and [string2] has the same length
+/// and same characters, but ignores the cases of ASCII letters,
+/// so `a` and `A` are considered equal.
+bool _caseInsensitiveEquals(String string1, String string2) =>
+    string1.length == string2.length &&
+    _caseInsensitiveStartsWith(string1, string2, 0);
diff --git a/sdk/lib/developer/timeline.dart b/sdk/lib/developer/timeline.dart
index 783f21a..9dccd22 100644
--- a/sdk/lib/developer/timeline.dart
+++ b/sdk/lib/developer/timeline.dart
@@ -109,13 +109,7 @@
       _stack.add(null);
       return;
     }
-    var block = new _SyncBlock._(name);
-    if (arguments != null) {
-      block._arguments = arguments;
-    }
-    if (flow != null) {
-      block.flow = flow;
-    }
+    var block = new _SyncBlock._(name, arguments: arguments, flow: flow);
     _stack.add(block);
     block._startSync();
   }
@@ -125,7 +119,7 @@
     if (!_hasTimeline) {
       return;
     }
-    if (_stack.length == 0) {
+    if (_stack.isEmpty) {
       throw new StateError('Uneven calls to startSync and finishSync');
     }
     // Pop top item off of stack.
@@ -340,32 +334,31 @@
 
   /// An (optional) set of arguments which will be serialized to JSON and
   /// associated with this block.
-  Map? _arguments;
+  final Map? arguments;
 
   /// An (optional) flow event associated with this block.
-  Flow? _flow;
+  final Flow? flow;
 
-  _SyncBlock._(this.name);
+  late final String _jsonArguments = _argumentsAsJson(arguments);
+
+  _SyncBlock._(this.name, {this.arguments, this.flow});
 
   /// Start this block of time.
   void _startSync() {
-    _reportTaskEvent(0, 'B', category, name, _argumentsAsJson(_arguments));
+    _reportTaskEvent(0, 'B', category, name, _jsonArguments);
   }
 
   /// Finish this block of time. At this point, this block can no longer be
   /// used.
   void finish() {
     // Report event to runtime.
-    _reportTaskEvent(0, 'E', category, name, _argumentsAsJson(_arguments));
-    if (_flow != null) {
-      _reportFlowEvent(category, "${_flow!.id}", _flow!._type, _flow!.id,
+    _reportTaskEvent(0, 'E', category, name, _jsonArguments);
+    final Flow? tempFlow = flow;
+    if (tempFlow != null) {
+      _reportFlowEvent(category, "${tempFlow.id}", tempFlow._type, tempFlow.id,
           _argumentsAsJson(null));
     }
   }
-
-  void set flow(Flow f) {
-    _flow = f;
-  }
 }
 
 String _argumentsAsJson(Map? arguments) {
diff --git a/sdk/lib/ffi/ffi.dart b/sdk/lib/ffi/ffi.dart
index 9a7afe2..968c555 100644
--- a/sdk/lib/ffi/ffi.dart
+++ b/sdk/lib/ffi/ffi.dart
@@ -18,6 +18,7 @@
 part 'abi.dart';
 part 'abi_specific.dart';
 part 'native_type.dart';
+part 'native_finalizer.dart';
 part 'allocation.dart';
 part 'annotations.dart';
 part 'c_type.dart';
diff --git a/sdk/lib/ffi/ffi_sources.gni b/sdk/lib/ffi/ffi_sources.gni
index 4197369..c530899 100644
--- a/sdk/lib/ffi/ffi_sources.gni
+++ b/sdk/lib/ffi/ffi_sources.gni
@@ -12,6 +12,7 @@
   "annotations.dart",
   "c_type.dart",
   "dynamic_library.dart",
+  "native_finalizer.dart",
   "native_type.dart",
   "struct.dart",
   "union.dart",
diff --git a/sdk/lib/ffi/native_finalizer.dart b/sdk/lib/ffi/native_finalizer.dart
new file mode 100644
index 0000000..49fc667
--- /dev/null
+++ b/sdk/lib/ffi/native_finalizer.dart
@@ -0,0 +1,223 @@
+// 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 dart.ffi;
+
+/// Marker interface for objects which should not be finalized too soon.
+///
+/// Any local variable with a static type that _includes `Finalizable`_
+/// is guaranteed to be alive until execution exits the code block where
+/// the variable is in scope.
+///
+/// A type _includes `Finalizable`_ if either
+/// * the type is a non-`Never` subtype of `Finalizable`, or
+/// * the type is `T?` or `FutureOr<T>` where `T` includes `Finalizable`.
+///
+/// In other words, while an object is referenced by such a variable,
+/// it is guaranteed to *not* be considered unreachable,
+/// and the variable itself is considered alive for the entire duration
+/// of its scope, even after it is last referenced.
+///
+/// _Without this marker interface on the variable's type, a variable's
+/// value might be garbage collected before the surrounding scope has
+/// been completely executed, as long as the variable is definitely not
+/// referenced again. That can, in turn, trigger a `NativeFinalizer`
+/// to perform a callback. When the variable's type includes [Finalizable],
+/// The `NativeFinalizer` callback is prevented from running until
+/// the current code using that variable is complete._
+///
+/// For example, `finalizable` is kept alive during the execution of
+/// `someNativeCall`:
+///
+/// ```dart
+/// void myFunction() {
+///   final finalizable = MyFinalizable(Pointer.fromAddress(0));
+///   someNativeCall(finalizable.nativeResource);
+/// }
+///
+/// void someNativeCall(Pointer nativeResource) {
+///   // ..
+/// }
+///
+/// class MyFinalizable implements Finalizable {
+///   final Pointer nativeResource;
+///
+///   MyFinalizable(this.nativeResource);
+/// }
+/// ```
+///
+/// Methods on a class implementing `Finalizable` keep the `this` object alive
+/// for the duration of the method execution. _The `this` value is treated
+/// like a local variable._
+///
+/// For example, `this` is kept alive during the execution of `someNativeCall`
+/// in `myFunction`:
+///
+/// ```dart
+/// class MyFinalizable implements Finalizable {
+///   final Pointer nativeResource;
+///
+///   MyFinalizable(this.nativeResource);
+///
+///   void myFunction() {
+///     someNativeCall(nativeResource);
+///   }
+/// }
+///
+/// void someNativeCall(Pointer nativeResource) {
+///   // ..
+/// }
+/// ```
+///
+/// It is good practise to implement logic involving finalizables as methods
+/// on the class that implements [Finalizable].
+///
+/// If a closure is created inside the block scope declaring the variable, and
+/// that closure contains any reference to the variable, the variable stays
+/// alive as long as the closure object does, or as long as the body of such a
+/// closure is executing.
+///
+/// For example, `finalizable` is kept alive by the closure object and until the
+/// end of the closure body:
+///
+/// ```dart
+/// void doSomething() {
+///   final resourceAction = myFunction();
+///   resourceAction(); // `finalizable` is alive until this call returns.
+/// }
+///
+/// void Function() myFunction() {
+///   final finalizable = MyFinalizable(Pointer.fromAddress(0));
+///   return () {
+///     someNativeCall(finalizable.nativeResource);
+///   };
+/// }
+///
+/// void someNativeCall(Pointer nativeResource) {
+///   // ..
+/// }
+///
+/// class MyFinalizable implements Finalizable {
+///   final Pointer nativeResource;
+///
+///   MyFinalizable(this.nativeResource);
+/// }
+/// ```
+///
+/// Only captured variables are kept alive by closures, not all variables.
+///
+/// For example, `finalizable` is not kept alive by the returned closure object:
+///
+/// ```dart
+/// void Function() myFunction() {
+///   final finalizable = MyFinalizable(Pointer.fromAddress(0));
+///   final nativeResource = finalizable.nativeResource;
+///   return () {
+///     someNativeCall(nativeResource);
+///   };
+/// }
+///
+/// void someNativeCall(Pointer nativeResource) {
+///   // ..
+/// }
+///
+/// class MyFinalizable implements Finalizable {
+///   final Pointer nativeResource;
+///
+///   MyFinalizable(this.nativeResource);
+/// }
+/// ```
+///
+/// It's likely an error if a resource extracted from a finalizable object
+/// escapes the scope of the finalizable variable it's taken from.
+///
+/// The behavior of `Finalizable` variables applies to asynchronous
+/// functions too. Such variables are kept alive as long as any
+/// code may still execute inside the scope that declared the variable,
+/// or in a closure capturing the variable,
+/// even if there are asynchronous delays during that execution.
+///
+/// For example, `finalizable` is kept alive during the `await someAsyncCall()`:
+///
+/// ```dart
+/// Future<void> myFunction() async {
+///   final finalizable = MyFinalizable();
+///   await someAsyncCall();
+/// }
+///
+/// Future<void> someAsyncCall() async {
+///   // ..
+/// }
+///
+/// class MyFinalizable implements Finalizable {
+///   // ..
+/// }
+/// ```
+///
+/// Also in asynchronous code it's likely an error if a resource extracted from
+/// a finalizable object escapes the scope of the finalizable variable it's
+/// taken from. If you have to extract a resource from a `Finalizable`, you
+/// should ensure the scope in which Finalizable is defined outlives the
+/// resource by `await`ing any asynchronous code that uses the resource.
+///
+/// For example, `this` is kept alive until `resource` is not used anymore in
+/// `useAsync1`, but not in `useAsync2` and `useAsync3`:
+///
+/// ```dart
+/// class MyFinalizable {
+///   final Pointer<Int8> resource;
+///
+///   MyFinalizable(this.resource);
+///
+///   Future<int> useAsync1() async {
+///     return await useResource(resource);
+///   }
+///
+///   Future<int> useAsync2() async {
+///     return useResource(resource);
+///   }
+///
+///   Future<int> useAsync3() {
+///     return useResource(resource);
+///   }
+/// }
+///
+/// /// Does not use [resource] after the returned future completes.
+/// Future<int> useResource(Pointer<Int8> resource) async {
+///   return resource.value;
+/// }
+/// ```
+///
+/// _It is possible for an asynchronous function to *stall* at an
+/// `await`, such that the runtime system can see that there is no possible
+/// way for that `await` to complete. In that case, no code after the
+/// `await` will ever execute, including `finally` blocks, and the
+/// variable may be considered dead along with everything else._
+///
+/// If you're not going to keep a variable alive yourself, make sure to pass the
+/// finalizable object to other functions instead of just its resource.
+///
+/// For example, `finalizable` is not kept alive by `myFunction` after it has
+/// run to the end of its scope, while `someAsyncCall` could still continue
+/// execution. However, `finalizable` is kept alive by `someAsyncCall` itself:
+///
+/// ```dart
+/// void myFunction() {
+///   final finalizable = MyFinalizable();
+///   someAsyncCall(finalizable);
+/// }
+///
+/// Future<void> someAsyncCall(MyFinalizable finalizable) async {
+///   // ..
+/// }
+///
+/// class MyFinalizable implements Finalizable {
+///   // ..
+/// }
+/// ```
+// TODO(http://dartbug.com/44395): Add implicit await to Dart implementation.
+// This will fix `useAsync2` above.
+abstract class Finalizable {
+  factory Finalizable._() => throw UnsupportedError("");
+}
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 33e2611..516fa1f 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -13389,10 +13389,14 @@
     } else if (alignment == ScrollAlignment.BOTTOM) {
       this._scrollIntoView(false);
     } else if (hasScrollIntoViewIfNeeded) {
+      // TODO(srujzs): This method shouldn't be calling out to
+      // `scrollIntoViewIfNeeded`. Remove this and make `scrollIntoView` match
+      // the browser definition. If you intend to use `scrollIntoViewIfNeeded`,
+      // use the `Element.scrollIntoViewIfNeeded` method.
       if (alignment == ScrollAlignment.CENTER) {
-        this._scrollIntoViewIfNeeded(true);
+        this.scrollIntoViewIfNeeded(true);
       } else {
-        this._scrollIntoViewIfNeeded();
+        this.scrollIntoViewIfNeeded();
       }
     } else {
       this._scrollIntoView();
@@ -14896,8 +14900,18 @@
   @JSName('scrollIntoView')
   void _scrollIntoView([Object? arg]) native;
 
-  @JSName('scrollIntoViewIfNeeded')
-  void _scrollIntoViewIfNeeded([bool? centerIfNeeded]) native;
+  /**
+   * Nonstandard version of `scrollIntoView` that scrolls the current element
+   * into the visible area of the browser window if it's not already within the
+   * visible area of the browser window. If the element is already within the
+   * visible area of the browser window, then no scrolling takes place.
+   *
+   * ## Other resources
+   *
+   * * [Element.scrollIntoViewIfNeeded](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewIfNeeded)
+   *   from MDN.
+   */
+  void scrollIntoViewIfNeeded([bool? centerIfNeeded]) native;
 
   void scrollTo([options_OR_x, num? y]) {
     if (options_OR_x == null && y == null) {
@@ -33703,7 +33717,7 @@
    * See [EventStreamProvider] for usage information.
    */
   static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent =
-      const _BeforeUnloadEventStreamProvider('beforeunload');
+      const EventStreamProvider('beforeunload');
 
   /// Stream of `beforeunload` events handled by this [Window].
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
@@ -33759,65 +33773,6 @@
       ? JS<num>('num', '#.scrollY', this).round()
       : document.documentElement!.scrollTop;
 }
-
-class _BeforeUnloadEvent extends _WrappedEvent implements BeforeUnloadEvent {
-  String _returnValue;
-
-  _BeforeUnloadEvent(Event base)
-      : _returnValue = '',
-        super(base);
-
-  String get returnValue => _returnValue;
-
-  set returnValue(String? value) {
-    // Typed as nullable only to be compatible with the overriden method.
-    _returnValue = value!;
-    // FF and IE use the value as the return value, Chrome will return this from
-    // the event callback function.
-    if (JS<bool>('bool', '("returnValue" in #)', wrapped)) {
-      JS('void', '#.returnValue = #', wrapped, value);
-    }
-  }
-}
-
-class _BeforeUnloadEventStreamProvider
-    implements EventStreamProvider<BeforeUnloadEvent> {
-  final String _eventType;
-
-  const _BeforeUnloadEventStreamProvider(this._eventType);
-
-  Stream<BeforeUnloadEvent> forTarget(EventTarget? e,
-      {bool useCapture: false}) {
-    // Specify the generic type for EventStream only in dart2js.
-    var stream = new _EventStream<BeforeUnloadEvent>(e, _eventType, useCapture);
-    var controller = new StreamController<BeforeUnloadEvent>(sync: true);
-
-    stream.listen((event) {
-      var wrapped = new _BeforeUnloadEvent(event);
-      controller.add(wrapped);
-    });
-
-    return controller.stream;
-  }
-
-  String getEventType(EventTarget target) {
-    return _eventType;
-  }
-
-  ElementStream<BeforeUnloadEvent> forElement(Element e,
-      {bool useCapture: false}) {
-    // Specify the generic type for _ElementEventStreamImpl only in dart2js.
-    return new _ElementEventStreamImpl<BeforeUnloadEvent>(
-        e, _eventType, useCapture);
-  }
-
-  ElementStream<BeforeUnloadEvent> _forElementList(ElementList<Element> e,
-      {bool useCapture: false}) {
-    // Specify the generic type for _ElementEventStreamImpl only in dart2js.
-    return new _ElementListEventStreamImpl<BeforeUnloadEvent>(
-        e, _eventType, useCapture);
-  }
-}
 // 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.
@@ -34133,8 +34088,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.
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
-@deprecated // experimental
 @Native("XPathEvaluator")
 class XPathEvaluator extends JavaScriptObject {
   // To suppress missing implicit constructor warnings.
@@ -34161,8 +34114,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.
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
-@deprecated // experimental
 @Native("XPathExpression")
 class XPathExpression extends JavaScriptObject {
   // To suppress missing implicit constructor warnings.
@@ -34176,8 +34127,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.
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver
-@deprecated // experimental
 @Native("XPathNSResolver")
 class XPathNSResolver extends JavaScriptObject {
   // To suppress missing implicit constructor warnings.
@@ -34192,8 +34141,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.
 
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult
-@deprecated // experimental
 @Native("XPathResult")
 class XPathResult extends JavaScriptObject {
   // To suppress missing implicit constructor warnings.
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 5d38bd8..a7a7eda 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -35,6 +35,23 @@
 // execution mode.
 external bool typeAcceptsNull<T>();
 
+/// Unsafely treats [value] as type [T].
+///
+/// An unsafe cast allows casting any value to any type,
+/// without any runtime type checks.
+///
+/// Can be used internally in platform library implementations of
+/// data structures, where a value is known to have a type different
+/// from its static type (like knowing that a string is definitely
+/// a "_OneByteString" or that the value stored into a heterogenous
+/// list is really a value of the surrounding map).
+///
+/// Must only be used for casts which would definitely *succeed*
+/// as a normal cast.
+///
+/// Should only be used for performance in performance critical code.
+external T unsafeCast<T>(dynamic value);
+
 // Powers of 10 up to 10^22 are representable as doubles.
 // Powers of 10 above that are only approximate due to lack of precission.
 // Used by double-parsing.
diff --git a/sdk/lib/io/platform.dart b/sdk/lib/io/platform.dart
index 93bcbd4..b302b4a 100644
--- a/sdk/lib/io/platform.dart
+++ b/sdk/lib/io/platform.dart
@@ -168,8 +168,10 @@
   static Map<String, String> get environment => _Platform.environment;
 
   /// The path of the executable used to run the script in this isolate.
+  /// Usually `dart` when running on the Dart VM or the
+  /// compiled script name (`script_name.exe`).
   ///
-  /// The literal path used to identify the script.
+  /// The literal path used to identify the executable.
   /// This path might be relative or just be a name from which the executable
   /// was found by searching the system path.
   ///
@@ -181,6 +183,8 @@
   ///
   /// This is the absolute path, with all symlinks resolved, to the
   /// executable used to run the script.
+  ///
+  /// See [executable] for the unresolved version.
   static String get resolvedExecutable => _Platform.resolvedExecutable;
 
   /// The absolute URI of the script being run in this isolate.
@@ -194,6 +198,12 @@
   /// example, a symbolic link immediately followed by '..' will not be
   /// looked up.
   ///
+  /// If a compiled Dart script is being executed the URI to the compiled
+  /// script is returned, for example, `file:///full/path/to/script_name.exe`.
+  ///
+  /// If running on the Dart VM the URI to the running Dart script is returned,
+  /// for example, `file:///full/path/to/script_name.dart`.
+  ///
   /// If the executable environment does not support [script],
   /// the URI is empty.
   static Uri get script => _Platform.script;
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart
index 6150653..7dd311c 100644
--- a/sdk/lib/io/secure_socket.dart
+++ b/sdk/lib/io/secure_socket.dart
@@ -27,6 +27,20 @@
   /// the connection or not.  The handler should return true
   /// to continue the [SecureSocket] connection.
   ///
+  /// [keyLog] is an optional callback that will be called when new TLS keys
+  /// are exchanged with the server. [keyLog] will receive one line of text in
+  /// [NSS Key Log Format](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format)
+  /// for each call. Writing these lines to a file will allow tools (such as
+  /// [Wireshark](https://gitlab.com/wireshark/wireshark/-/wikis/TLS#tls-decryption))
+  /// to decrypt content sent through this socket. This is meant to allow
+  /// network-level debugging of secure sockets and should not be used in
+  /// production code. For example:
+  /// ```dart
+  /// final log = File('keylog.txt');
+  /// final socket = await SecureSocket.connect('www.example.com', 443,
+  ///     keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));
+  /// ```
+  ///
   /// [supportedProtocols] is an optional list of protocols (in decreasing
   /// order of preference) to use during the ALPN protocol negotiation with the
   /// server.  Example values are "http/1.1" or "h2".  The selected protocol
@@ -40,11 +54,13 @@
   static Future<SecureSocket> connect(host, int port,
       {SecurityContext? context,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       List<String>? supportedProtocols,
       Duration? timeout}) {
     return RawSecureSocket.connect(host, port,
             context: context,
             onBadCertificate: onBadCertificate,
+            keyLog: keyLog,
             supportedProtocols: supportedProtocols,
             timeout: timeout)
         .then((rawSocket) => new SecureSocket._(rawSocket));
@@ -56,10 +72,12 @@
   static Future<ConnectionTask<SecureSocket>> startConnect(host, int port,
       {SecurityContext? context,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       List<String>? supportedProtocols}) {
     return RawSecureSocket.startConnect(host, port,
             context: context,
             onBadCertificate: onBadCertificate,
+            keyLog: keyLog,
             supportedProtocols: supportedProtocols)
         .then((rawState) {
       Future<SecureSocket> socket =
@@ -88,6 +106,26 @@
   /// the [socket] will be used. The [host] can be either a [String] or
   /// an [InternetAddress].
   ///
+  /// [onBadCertificate] is an optional handler for unverifiable certificates.
+  /// The handler receives the [X509Certificate], and can inspect it and
+  /// decide (or let the user decide) whether to accept
+  /// the connection or not.  The handler should return true
+  /// to continue the [SecureSocket] connection.
+  ///
+  /// [keyLog] is an optional callback that will be called when new TLS keys
+  /// are exchanged with the server. [keyLog] will receive one line of text in
+  /// [NSS Key Log Format](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format)
+  /// for each call. Writing these lines to a file will allow tools (such as
+  /// [Wireshark](https://gitlab.com/wireshark/wireshark/-/wikis/TLS#tls-decryption))
+  /// to decrypt content sent through this socket. This is meant to allow
+  /// network-level debugging of secure sockets and should not be used in
+  /// production code. For example:
+  /// ```dart
+  /// final log = File('keylog.txt');
+  /// final socket = await SecureSocket.connect('www.example.com', 443,
+  ///     keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));
+  /// ```
+  ///
   /// [supportedProtocols] is an optional list of protocols (in decreasing
   /// order of preference) to use during the ALPN protocol negotiation with the
   /// server.  Example values are "http/1.1" or "h2".  The selected protocol
@@ -104,6 +142,7 @@
       {host,
       SecurityContext? context,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       @Since("2.6") List<String>? supportedProtocols}) {
     return ((socket as dynamic /*_Socket*/)._detachRaw() as Future)
         .then<RawSecureSocket>((detachedRaw) {
@@ -112,6 +151,7 @@
           host: host,
           context: context,
           onBadCertificate: onBadCertificate,
+          keyLog: keyLog,
           supportedProtocols: supportedProtocols);
     }).then<SecureSocket>((raw) => new SecureSocket._(raw));
   }
@@ -168,12 +208,11 @@
   /// protocol between client and server.
   String? get selectedProtocol;
 
-  /// Renegotiates an existing secure connection.
+  /// Does nothing.
   ///
-  /// Renews the session keys and possibly changes the connection properties.
-  ///
-  /// This repeats the SSL or TLS handshake, with options that allow clearing
-  /// the session cache and requesting a client certificate.
+  /// The original intent was to allow TLS renegotiation of existing secure
+  /// connections.
+  @Deprecated("Not implemented")
   void renegotiate(
       {bool useSessionCache = true,
       bool requestClientCertificate = false,
@@ -209,6 +248,26 @@
   /// the connection or not.  The handler should return true
   /// to continue the [RawSecureSocket] connection.
   ///
+  /// [onBadCertificate] is an optional handler for unverifiable certificates.
+  /// The handler receives the [X509Certificate], and can inspect it and
+  /// decide (or let the user decide) whether to accept
+  /// the connection or not.  The handler should return true
+  /// to continue the [SecureSocket] connection.
+  ///
+  /// [keyLog] is an optional callback that will be called when new TLS keys
+  /// are exchanged with the server. [keyLog] will receive one line of text in
+  /// [NSS Key Log Format](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format)
+  /// for each call. Writing these lines to a file will allow tools (such as
+  /// [Wireshark](https://gitlab.com/wireshark/wireshark/-/wikis/TLS#tls-decryption))
+  /// to decrypt content sent through this socket. This is meant to allow
+  /// network-level debugging of secure sockets and should not be used in
+  /// production code. For example:
+  /// ```dart
+  /// final log = File('keylog.txt');
+  /// final socket = await SecureSocket.connect('www.example.com', 443,
+  ///     keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));
+  /// ```
+  ///
   /// [supportedProtocols] is an optional list of protocols (in decreasing
   /// order of preference) to use during the ALPN protocol negotiation with the
   /// server.  Example values are "http/1.1" or "h2".  The selected protocol
@@ -216,6 +275,7 @@
   static Future<RawSecureSocket> connect(host, int port,
       {SecurityContext? context,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       List<String>? supportedProtocols,
       Duration? timeout}) {
     _RawSecureSocket._verifyFields(host, port, false, false);
@@ -223,6 +283,7 @@
       return secure(socket,
           context: context,
           onBadCertificate: onBadCertificate,
+          keyLog: keyLog,
           supportedProtocols: supportedProtocols);
     });
   }
@@ -233,6 +294,7 @@
   static Future<ConnectionTask<RawSecureSocket>> startConnect(host, int port,
       {SecurityContext? context,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       List<String>? supportedProtocols}) {
     return RawSocket.startConnect(host, port)
         .then((ConnectionTask<RawSocket> rawState) {
@@ -240,6 +302,7 @@
         return secure(rawSocket,
             context: context,
             onBadCertificate: onBadCertificate,
+            keyLog: keyLog,
             supportedProtocols: supportedProtocols);
       });
       return new ConnectionTask<RawSecureSocket>._(socket, rawState._onCancel);
@@ -266,6 +329,26 @@
   /// the [socket] will be used. The [host] can be either a [String] or
   /// an [InternetAddress].
   ///
+  /// [onBadCertificate] is an optional handler for unverifiable certificates.
+  /// The handler receives the [X509Certificate], and can inspect it and
+  /// decide (or let the user decide) whether to accept
+  /// the connection or not.  The handler should return true
+  /// to continue the [SecureSocket] connection.
+  ///
+  /// [keyLog] is an optional callback that will be called when new TLS keys
+  /// are exchanged with the server. [keyLog] will receive one line of text in
+  /// [NSS Key Log Format](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format)
+  /// for each call. Writing these lines to a file will allow tools (such as
+  /// [Wireshark](https://gitlab.com/wireshark/wireshark/-/wikis/TLS#tls-decryption))
+  /// to decrypt content sent through this socket. This is meant to allow
+  /// network-level debugging of secure sockets and should not be used in
+  /// production code. For example:
+  /// ```dart
+  /// final log = File('keylog.txt');
+  /// final socket = await SecureSocket.connect('www.example.com', 443,
+  ///     keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));
+  /// ```
+  ///
   /// [supportedProtocols] is an optional list of protocols (in decreasing
   /// order of preference) to use during the ALPN protocol negotiation with the
   /// server.  Example values are "http/1.1" or "h2".  The selected protocol
@@ -283,6 +366,7 @@
       host,
       SecurityContext? context,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       List<String>? supportedProtocols}) {
     socket.readEventsEnabled = false;
     socket.writeEventsEnabled = false;
@@ -291,6 +375,7 @@
         subscription: subscription,
         context: context,
         onBadCertificate: onBadCertificate,
+        keyLog: keyLog,
         supportedProtocols: supportedProtocols);
   }
 
@@ -335,11 +420,11 @@
         supportedProtocols: supportedProtocols);
   }
 
-  /// Renegotiate an existing secure connection, renewing the session keys
-  /// and possibly changing the connection properties.
+  /// Does nothing.
   ///
-  /// This repeats the SSL or TLS handshake, with options that allow clearing
-  /// the session cache and requesting a client certificate.
+  /// The original intent was to allow TLS renegotiation of existing secure
+  /// connections.
+  @Deprecated("Not implemented")
   void renegotiate(
       {bool useSessionCache = true,
       bool requestClientCertificate = false,
@@ -427,6 +512,8 @@
   final bool requestClientCertificate;
   final bool requireClientCertificate;
   final bool Function(X509Certificate certificate)? onBadCertificate;
+  final void Function(String line)? keyLog;
+  ReceivePort? keyLogPort;
 
   var _status = handshakeStatus;
   bool _writeEventsEnabled = true;
@@ -458,6 +545,7 @@
       bool requestClientCertificate = false,
       bool requireClientCertificate = false,
       bool onBadCertificate(X509Certificate certificate)?,
+      void keyLog(String line)?,
       List<String>? supportedProtocols}) {
     _verifyFields(host, requestedPort, requestClientCertificate,
         requireClientCertificate);
@@ -477,6 +565,7 @@
             requestClientCertificate,
             requireClientCertificate,
             onBadCertificate,
+            keyLog,
             supportedProtocols)
         ._handshakeComplete
         .future;
@@ -493,6 +582,7 @@
       this.requestClientCertificate,
       this.requireClientCertificate,
       this.onBadCertificate,
+      this.keyLog,
       List<String>? supportedProtocols) {
     _controller
       ..onListen = _onSubscriptionStateChange
@@ -505,6 +595,23 @@
     secureFilter.init();
     secureFilter
         .registerHandshakeCompleteCallback(_secureHandshakeCompleteHandler);
+
+    if (keyLog != null) {
+      final port = ReceivePort();
+      port.listen((line) {
+        try {
+          keyLog!((line as String) + '\n');
+        } catch (e, s) {
+          // There is no obvious place to surface exceptions from the keyLog
+          // callback so write the details to stderr.
+          stderr.writeln("Failure in keyLog callback:");
+          stderr.writeln(s);
+        }
+      });
+      secureFilter.registerKeyLogPort(port.sendPort);
+      keyLogPort = port;
+    }
+
     if (onBadCertificate != null) {
       secureFilter.registerBadCertificateCallback(_onBadCertificateWrapper);
     }
@@ -607,6 +714,7 @@
       _secureFilter!.destroy();
       _secureFilter = null;
     }
+    keyLogPort?.close();
     if (_socketSubscription != null) {
       _socketSubscription.cancel();
     }
@@ -815,6 +923,7 @@
     }
   }
 
+  @Deprecated("Not implemented")
   void renegotiate(
       {bool useSessionCache = true,
       bool requestClientCertificate = false,
@@ -823,8 +932,6 @@
       throw new HandshakeException(
           "Called renegotiate on a non-connected socket");
     }
-    _secureFilter!.renegotiate(
-        useSessionCache, requestClientCertificate, requireClientCertificate);
     _status = handshakeStatus;
     _filterStatus.writeEmpty = false;
     _scheduleFilter();
@@ -1233,13 +1340,12 @@
   Future<bool> handshake();
   String? selectedProtocol();
   void rehandshake();
-  void renegotiate(bool useSessionCache, bool requestClientCertificate,
-      bool requireClientCertificate);
   void init();
   X509Certificate? get peerCertificate;
   int processBuffer(int bufferIndex);
   void registerBadCertificateCallback(Function callback);
   void registerHandshakeCompleteCallback(Function handshakeCompleteHandler);
+  void registerKeyLogPort(SendPort port);
 
   // This call may cause a reference counted pointer in the native
   // implementation to be retained. It should only be called when the resulting
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index 48c046f..517beee 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -144,6 +144,106 @@
   /// 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]
@@ -345,7 +445,7 @@
   /// of the isolate identified by [controlPort],
   /// the pause request is ignored by the receiving isolate.
   Capability pause([Capability? resumeCapability]) {
-    resumeCapability ??= new Capability();
+    resumeCapability ??= Capability();
     _pause(resumeCapability);
     return resumeCapability;
   }
@@ -533,12 +633,12 @@
       var listMessage = message as List<Object?>;
       var errorDescription = listMessage[0] as String;
       var stackDescription = listMessage[1] as String;
-      var error = new RemoteError(errorDescription, stackDescription);
+      var error = RemoteError(errorDescription, stackDescription);
       controller.addError(error, error.stackTrace);
     }
 
     controller.onListen = () {
-      RawReceivePort receivePort = new RawReceivePort(handleError);
+      RawReceivePort receivePort = RawReceivePort(handleError);
       port = receivePort;
       this.addErrorListener(receivePort.sendPort);
     };
@@ -765,7 +865,7 @@
   final StackTrace stackTrace;
   RemoteError(String description, String stackDescription)
       : _description = description,
-        stackTrace = new StackTrace.fromString(stackDescription);
+        stackTrace = StackTrace.fromString(stackDescription);
   String toString() => _description;
 }
 
@@ -795,3 +895,62 @@
   /// 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.dart b/sdk/lib/js_util/js_util.dart
index fcd668c..5dca72d 100644
--- a/sdk/lib/js_util/js_util.dart
+++ b/sdk/lib/js_util/js_util.dart
@@ -68,7 +68,8 @@
 
 bool hasProperty(Object o, Object name) => JS('bool', '# in #', name, o);
 
-T getProperty<T>(Object o, Object name) => JS('Object|Null', '#[#]', o, name);
+T getProperty<T>(Object o, Object name) =>
+    JS<dynamic>('Object|Null', '#[#]', o, name);
 
 // A CFE transformation may optimize calls to `setProperty`, when [value] is
 // statically known to be a non-function.
@@ -88,40 +89,41 @@
 // statically known to be non-functions.
 T callMethod<T>(Object o, String method, List<Object?> args) {
   assertInteropArgs(args);
-  return JS('Object|Null', '#[#].apply(#, #)', o, method, o, args);
+  return JS<dynamic>('Object|Null', '#[#].apply(#, #)', o, method, o, args);
 }
 
 /// Unchecked version for 0 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callMethodUnchecked0<T>(Object o, String method) {
-  return JS('Object|Null', '#[#]()', o, method);
+  return JS<dynamic>('Object|Null', '#[#]()', o, method);
 }
 
 /// Unchecked version for 1 argument, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callMethodUnchecked1<T>(Object o, String method, Object? arg1) {
-  return JS('Object|Null', '#[#](#)', o, method, arg1);
+  return JS<dynamic>('Object|Null', '#[#](#)', o, method, arg1);
 }
 
 /// Unchecked version for 2 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callMethodUnchecked2<T>(
     Object o, String method, Object? arg1, Object? arg2) {
-  return JS('Object|Null', '#[#](#, #)', o, method, arg1, arg2);
+  return JS<dynamic>('Object|Null', '#[#](#, #)', o, method, arg1, arg2);
 }
 
 /// Unchecked version for 3 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callMethodUnchecked3<T>(
     Object o, String method, Object? arg1, Object? arg2, Object? arg3) {
-  return JS('Object|Null', '#[#](#, #, #)', o, method, arg1, arg2, arg3);
+  return JS<dynamic>(
+      'Object|Null', '#[#](#, #, #)', o, method, arg1, arg2, arg3);
 }
 
 /// Unchecked version for 4 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callMethodUnchecked4<T>(Object o, String method, Object? arg1, Object? arg2,
     Object? arg3, Object? arg4) {
-  return JS(
+  return JS<dynamic>(
       'Object|Null', '#[#](#, #, #, #)', o, method, arg1, arg2, arg3, arg4);
 }
 
@@ -134,7 +136,7 @@
 
 T callConstructor<T>(Object constr, List<Object?>? arguments) {
   if (arguments == null) {
-    return JS('Object', 'new #()', constr);
+    return JS<dynamic>('Object', 'new #()', constr);
   } else {
     assertInteropArgs(arguments);
   }
@@ -143,29 +145,30 @@
     int argumentCount = JS('int', '#.length', arguments);
     switch (argumentCount) {
       case 0:
-        return JS('Object', 'new #()', constr);
+        return JS<dynamic>('Object', 'new #()', constr);
 
       case 1:
         var arg0 = JS('', '#[0]', arguments);
-        return JS('Object', 'new #(#)', constr, arg0);
+        return JS<dynamic>('Object', 'new #(#)', constr, arg0);
 
       case 2:
         var arg0 = JS('', '#[0]', arguments);
         var arg1 = JS('', '#[1]', arguments);
-        return JS('Object', 'new #(#, #)', constr, arg0, arg1);
+        return JS<dynamic>('Object', 'new #(#, #)', constr, arg0, arg1);
 
       case 3:
         var arg0 = JS('', '#[0]', arguments);
         var arg1 = JS('', '#[1]', arguments);
         var arg2 = JS('', '#[2]', arguments);
-        return JS('Object', 'new #(#, #, #)', constr, arg0, arg1, arg2);
+        return JS<dynamic>(
+            'Object', 'new #(#, #, #)', constr, arg0, arg1, arg2);
 
       case 4:
         var arg0 = JS('', '#[0]', arguments);
         var arg1 = JS('', '#[1]', arguments);
         var arg2 = JS('', '#[2]', arguments);
         var arg3 = JS('', '#[3]', arguments);
-        return JS(
+        return JS<dynamic>(
             'Object', 'new #(#, #, #, #)', constr, arg0, arg1, arg2, arg3);
     }
   }
@@ -183,7 +186,7 @@
   JS('String', 'String(#)', factoryFunction);
   // This could return an UnknownJavaScriptObject, or a native
   // object for which there is an interceptor
-  return JS('Object', 'new #()', factoryFunction);
+  return JS<dynamic>('Object', 'new #()', factoryFunction);
 
   // TODO(sra): Investigate:
   //
@@ -196,33 +199,34 @@
 /// Unchecked version for 0 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callConstructorUnchecked0<T>(Object constr) {
-  return JS('Object', 'new #()', constr);
+  return JS<dynamic>('Object', 'new #()', constr);
 }
 
 /// Unchecked version for 1 argument, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callConstructorUnchecked1<T>(Object constr, Object? arg1) {
-  return JS('Object', 'new #(#)', constr, arg1);
+  return JS<dynamic>('Object', 'new #(#)', constr, arg1);
 }
 
 /// Unchecked version for 2 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callConstructorUnchecked2<T>(Object constr, Object? arg1, Object? arg2) {
-  return JS('Object', 'new #(#, #)', constr, arg1, arg2);
+  return JS<dynamic>('Object', 'new #(#, #)', constr, arg1, arg2);
 }
 
 /// Unchecked version for 3 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callConstructorUnchecked3<T>(
     Object constr, Object? arg1, Object? arg2, Object? arg3) {
-  return JS('Object', 'new #(#, #, #)', constr, arg1, arg2, arg3);
+  return JS<dynamic>('Object', 'new #(#, #, #)', constr, arg1, arg2, arg3);
 }
 
 /// Unchecked version for 4 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
 T _callConstructorUnchecked4<T>(
     Object constr, Object? arg1, Object? arg2, Object? arg3, Object? arg4) {
-  return JS('Object', 'new #(#, #, #, #)', constr, arg1, arg2, arg3, arg4);
+  return JS<dynamic>(
+      'Object', 'new #(#, #, #, #)', constr, arg1, arg2, arg3, arg4);
 }
 
 /// Exception for when the promise is rejected with a `null` or `undefined`
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index 8573ca4..619c1c0 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -53,6 +53,7 @@
           "_internal/vm/lib/double_patch.dart",
           "_internal/vm/lib/errors_patch.dart",
           "_internal/vm/lib/expando_patch.dart",
+          "_internal/vm/lib/finalizer_patch.dart",
           "_internal/vm/lib/function.dart",
           "_internal/vm/lib/function_patch.dart",
           "_internal/vm/lib/growable_array.dart",
@@ -88,6 +89,7 @@
           "_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_finalizer_patch.dart",
           "_internal/vm/lib/ffi_native_type_patch.dart",
           "_internal/vm/lib/ffi_struct_patch.dart"
         ]
@@ -154,6 +156,82 @@
       }
     }
   },
+  "wasm": {
+    "libraries": {
+      "_internal": {
+        "uri": "internal/internal.dart",
+        "patches": [
+          "_internal/wasm/lib/internal_patch.dart",
+          "_internal/wasm/lib/class_id.dart",
+          "_internal/wasm/lib/patch.dart",
+          "_internal/wasm/lib/print_patch.dart",
+          "_internal/vm/lib/symbol_patch.dart"
+        ]
+      },
+      "async": {
+        "uri": "async/async.dart",
+        "patches": "_internal/wasm/lib/timer_patch.dart"
+      },
+      "collection": {
+        "uri": "collection/collection.dart",
+        "patches": [
+          "_internal/vm/lib/collection_patch.dart",
+          "_internal/vm/lib/compact_hash.dart",
+          "_internal/wasm/lib/hash_factories.dart"
+        ]
+      },
+      "convert": {
+        "uri": "convert/convert.dart",
+        "patches": "_internal/vm/lib/convert_patch.dart"
+      },
+      "core": {
+        "uri": "core/core.dart",
+        "patches": [
+          "_internal/wasm/lib/core_patch.dart",
+          "_internal/vm/lib/array_patch.dart",
+          "_internal/wasm/lib/bool.dart",
+          "_internal/vm/lib/bool_patch.dart",
+          "_internal/wasm/lib/date_patch.dart",
+          "_internal/wasm/lib/double.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",
+          "_internal/vm/lib/null_patch.dart",
+          "_internal/vm/lib/map_patch.dart",
+          "_internal/wasm/lib/object_patch.dart",
+          "_internal/wasm/lib/stack_trace_patch.dart",
+          "_internal/wasm/lib/string_buffer_patch.dart",
+          "_internal/wasm/lib/string_patch.dart",
+          "_internal/wasm/lib/type.dart"
+        ]
+      },
+      "developer": {
+        "uri": "developer/developer.dart",
+        "patches": [
+          "_internal/wasm/lib/developer.dart"
+        ]
+      },
+      "isolate": {
+        "uri": "isolate/isolate.dart"
+      },
+      "math": {
+        "uri": "math/math.dart",
+        "patches": "_internal/wasm/lib/math_patch.dart"
+      },
+      "typed_data": {
+        "uri": "typed_data/typed_data.dart",
+        "patches": "_internal/vm/lib/typed_data_patch.dart"
+      },
+      "wasm": {
+        "uri": "wasm/wasm_types.dart"
+      }
+    }
+  },
   "dart2js": {
     "include": [
       {
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index dcf81c0..055f5e8 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -60,6 +60,7 @@
         - "_internal/vm/lib/double_patch.dart"
         - "_internal/vm/lib/errors_patch.dart"
         - "_internal/vm/lib/expando_patch.dart"
+        - "_internal/vm/lib/finalizer_patch.dart"
         - "_internal/vm/lib/function.dart"
         - "_internal/vm/lib/function_patch.dart"
         - "_internal/vm/lib/growable_array.dart"
@@ -93,6 +94,7 @@
         - "_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_finalizer_patch.dart"
         - "_internal/vm/lib/ffi_native_type_patch.dart"
         - "_internal/vm/lib/ffi_struct_patch.dart"
 
@@ -152,6 +154,67 @@
     vmservice_io:
       uri: "_internal/vm/bin/vmservice_io.dart"
 
+wasm:
+  libraries:
+    _internal:
+      uri: internal/internal.dart
+      patches:
+      - _internal/wasm/lib/internal_patch.dart
+      - _internal/wasm/lib/class_id.dart
+      - _internal/wasm/lib/patch.dart
+      - _internal/wasm/lib/print_patch.dart
+      - _internal/vm/lib/symbol_patch.dart
+    async:
+      uri: async/async.dart
+      patches: _internal/wasm/lib/timer_patch.dart
+    collection:
+      uri: collection/collection.dart
+      patches:
+      - _internal/vm/lib/collection_patch.dart
+      - _internal/vm/lib/compact_hash.dart
+      - _internal/wasm/lib/hash_factories.dart
+    convert:
+      uri: convert/convert.dart
+      patches: _internal/vm/lib/convert_patch.dart
+    core:
+      uri: core/core.dart
+      patches:
+      - _internal/wasm/lib/core_patch.dart
+      - _internal/vm/lib/array_patch.dart
+      - _internal/wasm/lib/bool.dart
+      - _internal/vm/lib/bool_patch.dart
+      - _internal/wasm/lib/date_patch.dart
+      - _internal/wasm/lib/double.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
+      - _internal/vm/lib/null_patch.dart
+      - _internal/vm/lib/map_patch.dart
+      - _internal/wasm/lib/object_patch.dart
+      - _internal/wasm/lib/stack_trace_patch.dart
+      - _internal/wasm/lib/string_buffer_patch.dart
+      - _internal/wasm/lib/string_patch.dart
+      - _internal/wasm/lib/type.dart
+    developer:
+      uri: developer/developer.dart
+      patches:
+      - _internal/wasm/lib/developer.dart
+    isolate:
+      uri: isolate/isolate.dart
+    math:
+      uri: math/math.dart
+      patches: _internal/wasm/lib/math_patch.dart
+    typed_data:
+      uri: typed_data/typed_data.dart
+      patches: _internal/vm/lib/typed_data_patch.dart
+    wasm:
+      uri: wasm/wasm_types.dart
+
 dart2js:
   include:
     - target: "_dart2js_common"
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index a10dd80..6e19487 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -56,9 +56,13 @@
  */
 library dart.mirrors;
 
+import "dart:core";
 import 'dart:async' show Future;
 import "dart:_internal" show Since;
 
+// TODO: Move AbstractClassInstantiationError here when removed from dart:core.
+export "dart:core" show AbstractClassInstantiationError;
+
 /**
  * A [MirrorSystem] is the main interface used to reflect on a set of
  * associated libraries.
diff --git a/sdk/lib/vmservice/running_isolates.dart b/sdk/lib/vmservice/running_isolates.dart
index 17ba448..e699cb3 100644
--- a/sdk/lib/vmservice/running_isolates.dart
+++ b/sdk/lib/vmservice/running_isolates.dart
@@ -124,7 +124,10 @@
       'isolateId': _message.params['isolateId']!,
       'expression': _message.params['expression']!,
       'definitions': buildScopeResponseResult['param_names']!,
+      'definitionTypes': buildScopeResponseResult['param_types']!,
       'typeDefinitions': buildScopeResponseResult['type_params_names']!,
+      'typeBounds': buildScopeResponseResult['type_params_bounds']!,
+      'typeDefaults': buildScopeResponseResult['type_params_defaults']!,
       'libraryUri': buildScopeResponseResult['libraryUri']!,
       'isStatic': buildScopeResponseResult['isStatic']!,
     };
diff --git a/sdk/lib/wasm/OWNERS b/sdk/lib/wasm/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/sdk/lib/wasm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/sdk/lib/wasm/wasm_types.dart b/sdk/lib/wasm/wasm_types.dart
new file mode 100644
index 0000000..288deaa
--- /dev/null
+++ b/sdk/lib/wasm/wasm_types.dart
@@ -0,0 +1,113 @@
+// 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.wasm;
+
+// A collection a special Dart tytpes that are mapped directly to Wasm types
+// by the dart2wasm compiler. These types have a number of constraints:
+//
+// - They can only be used directly as types of local variables, fields, or
+//   parameter/return of static functions. No other uses of the types are valid.
+// - They are not assignable to or from any ordinary Dart types.
+// - The integer and float types can't be nullable.
+//
+// TODO(askesc): Give an error message if any of these constraints are violated.
+
+@pragma("wasm:entry-point")
+abstract class _WasmBase {}
+
+abstract class _WasmInt extends _WasmBase {}
+
+abstract class _WasmFloat extends _WasmBase {}
+
+/// The Wasm `anyref` type.
+@pragma("wasm:entry-point")
+class WasmAnyRef extends _WasmBase {}
+
+/// The Wasm `eqref` type.
+@pragma("wasm:entry-point")
+class WasmEqRef extends WasmAnyRef {}
+
+/// The Wasm `dataref` type.
+@pragma("wasm:entry-point")
+class WasmDataRef extends WasmEqRef {}
+
+abstract class _WasmArray extends WasmDataRef {
+  external int get length;
+}
+
+/// The Wasm `i8` storage type.
+@pragma("wasm:entry-point")
+class WasmI8 extends _WasmInt {}
+
+/// The Wasm `i16` storage type.
+@pragma("wasm:entry-point")
+class WasmI16 extends _WasmInt {}
+
+/// The Wasm `i32` type.
+@pragma("wasm:entry-point")
+class WasmI32 extends _WasmInt {
+  external factory WasmI32.fromInt(int value);
+  external int toIntSigned();
+  external int toIntUnsigned();
+}
+
+/// The Wasm `i64` type.
+@pragma("wasm:entry-point")
+class WasmI64 extends _WasmInt {
+  external factory WasmI64.fromInt(int value);
+  external int toInt();
+}
+
+/// The Wasm `f32` type.
+@pragma("wasm:entry-point")
+class WasmF32 extends _WasmFloat {
+  external factory WasmF32.fromDouble(double value);
+  external double toDouble();
+}
+
+/// The Wasm `f64` type.
+@pragma("wasm:entry-point")
+class WasmF64 extends _WasmFloat {
+  external factory WasmF64.fromDouble(double value);
+  external double toDouble();
+}
+
+/// A Wasm array with integer element type.
+@pragma("wasm:entry-point")
+class WasmIntArray<T extends _WasmInt> extends _WasmArray {
+  external factory WasmIntArray(int length);
+
+  external int readSigned(int index);
+  external int readUnsigned(int index);
+  external void write(int index, int value);
+}
+
+/// A Wasm array with float element type.
+@pragma("wasm:entry-point")
+class WasmFloatArray<T extends _WasmFloat> extends _WasmArray {
+  external factory WasmFloatArray(int length);
+
+  external double read(int index);
+  external void write(int index, double value);
+}
+
+/// A Wasm array with reference element type, containing Dart objects.
+@pragma("wasm:entry-point")
+class WasmObjectArray<T extends Object?> extends _WasmArray {
+  external factory WasmObjectArray(int length);
+
+  external T read(int index);
+  external void write(int index, T value);
+}
+
+extension IntToWasmInt on int {
+  WasmI32 toWasmI32() => WasmI32.fromInt(this);
+  WasmI64 toWasmI64() => WasmI64.fromInt(this);
+}
+
+extension DoubleToWasmFloat on double {
+  WasmF32 toWasmF32() => WasmF32.fromDouble(this);
+  WasmF64 toWasmF64() => WasmF64.fromDouble(this);
+}
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index a7db2d5..29544d8 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -225,29 +225,89 @@
     }
   }
 
-  @JSName('decodeAudioData')
-  Future<AudioBuffer> _decodeAudioData(ByteBuffer audioData,
-      [DecodeSuccessCallback? successCallback,
-      DecodeErrorCallback? errorCallback]) native;
-
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
       [DecodeSuccessCallback? successCallback,
       DecodeErrorCallback? errorCallback]) {
-    if (successCallback != null && errorCallback != null) {
-      return _decodeAudioData(audioData, successCallback, errorCallback);
+    // Both callbacks need to be provided if they're being used.
+    assert((successCallback == null) == (errorCallback == null));
+    // `decodeAudioData` can exist either in the older callback syntax or the
+    // newer `Promise`-based syntax that also accepts callbacks. In the former,
+    // we synthesize a `Future` to be consistent.
+    // For more details:
+    // https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData
+    // https://www.w3.org/TR/webaudio/#dom-baseaudiocontext-decodeaudiodata
+    final completer = Completer<Object>();
+    var errorInCallbackIsNull = false;
+
+    void success(AudioBuffer decodedData) {
+      completer.complete(decodedData);
+      successCallback!.call(decodedData);
     }
 
-    var completer = new Completer<AudioBuffer>();
-    _decodeAudioData(audioData, (value) {
-      completer.complete(value);
-    }, (error) {
-      if (error == null) {
-        completer.completeError('');
+    final nullErrorString =
+        '[AudioContext.decodeAudioData] completed with a null error.';
+
+    void error(DomException? error) {
+      // Safari has a bug where it may return null for the error callback. In
+      // the case where the Safari version still returns a `Promise` and the
+      // error is not null after the `Promise` is finished, the error callback
+      // is called instead in the `Promise`'s `catch` block. Otherwise, and in
+      // the case where a `Promise` is not returned by the API at all, the
+      // callback never gets called (for backwards compatibility, it can not
+      // accept null). Instead, the `Future` completes with a custom string,
+      // indicating that null was given.
+      // https://github.com/mdn/webaudio-examples/issues/5
+      if (error != null) {
+        // Note that we `complete` and not `completeError`. This is to make sure
+        // that errors in the `Completer` are not thrown if the call gets back
+        // a `Promise`.
+        completer.complete(error);
+        errorCallback!.call(error);
       } else {
-        completer.completeError(error);
+        completer.complete(nullErrorString);
+        errorInCallbackIsNull = true;
       }
+    }
+
+    var decodeResult;
+    if (successCallback == null) {
+      decodeResult =
+          JS("creates:AudioBuffer;", "#.decodeAudioData(#)", this, audioData);
+    } else {
+      decodeResult = JS(
+          "creates:AudioBuffer;",
+          "#.decodeAudioData(#, #, #)",
+          this,
+          audioData,
+          convertDartClosureToJS(success, 1),
+          convertDartClosureToJS(error, 1));
+    }
+
+    if (decodeResult != null) {
+      // Promise-based syntax.
+      return promiseToFuture<AudioBuffer>(decodeResult).catchError((error) {
+        // If the error was null in the callback, but no longer is now that the
+        // `Promise` is finished, call the error callback. If it's still null,
+        // throw the error string. This is to handle the aforementioned bug in
+        // Safari.
+        if (errorInCallbackIsNull) {
+          if (error != null) {
+            errorCallback?.call(error);
+          } else {
+            throw nullErrorString;
+          }
+        }
+        throw error;
+      });
+    }
+
+    // Callback-based syntax. We use the above completer to synthesize a
+    // `Future` from the callback values. Since we don't use `completeError`
+    // above, `then` is used to simulate an error.
+    return completer.future.then((value) {
+      if (value is AudioBuffer) return value;
+      throw value;
     });
-    return completer.future;
   }
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/tests/OWNERS b/tests/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/tests/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 277a778..75ebe8c 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -42,6 +42,7 @@
 LanguageFeatures/Abstract-external-fields/static_analysis_external_A05_t03: SkipByDesign # Non-JS-interop external members are not supported
 LanguageFeatures/Abstract-external-fields/syntax_A01_t03: SkipByDesign # Non-JS-interop external members are not supported
 LanguageFeatures/Abstract-external-fields/syntax_A02_t03: SkipByDesign # Non-JS-interop external members are not supported
+LanguageFeatures/FinalizationRegistry/ffi/*: SkipByDesign # dart:ffi is not supported
 LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
 LibTest/core/DateTime/microsecond_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
 LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
diff --git a/tests/co19/co19-dartdevc.status b/tests/co19/co19-dartdevc.status
index 3458c5c..94d2a50 100644
--- a/tests/co19/co19-dartdevc.status
+++ b/tests/co19/co19-dartdevc.status
@@ -39,6 +39,7 @@
 LanguageFeatures/Abstract-external-fields/static_analysis_external_A05_t03: SkipByDesign # External variables are not supported
 LanguageFeatures/Abstract-external-fields/syntax_A01_t03: SkipByDesign # External variables are not supported
 LanguageFeatures/Abstract-external-fields/syntax_A02_t03: SkipByDesign # External variables are not supported
+LanguageFeatures/FinalizationRegistry/ffi/*: SkipByDesign # dart:ffi is not supported
 LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
 LibTest/core/DateTime/microsecond_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
 LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: SkipByDesign # microseconds are not supported in JavaScript
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 09b27c9..3254ec0 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -27,13 +27,19 @@
 LibTest/core/List/List_class_A01_t02: Slow, Pass
 LibTest/core/List/List_class_A01_t03: Slow, Pass
 
-[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled && $system == windows ]
+LanguageFeatures/FinalizationRegistry/ffi/*: SkipByDesign # https://dartbug.com/40579 Dart C API symbols not available.
+
+[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 LibTest/collection/ListBase/ListBase_class_A01_t01: SkipSlow # Issue 43036
 LibTest/collection/ListMixin/ListMixin_class_A01_t01: SkipSlow # Issue 43036
 
+[ $arch == simarm || $arch == simarm64 ]
+LanguageFeatures/FinalizationRegistry/ffi/*: SkipByDesign # https://github.com/dart-lang/sdk/issues/37299
+
 # It makes no sense to run any test that uses spawnURI under the simulator
 # as that would involve running CFE (the front end) in simulator mode
 # to compile the URI file specified in spawnURI code.
 # These Isolate tests that use spawnURI are hence skipped on purpose.
-[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 LibTest/isolate/Isolate/spawnUri*: Skip
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index d3b0fe3..fb4d981 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -20,10 +20,10 @@
 LibTest/core/List/List_all_t05: SkipSlow # Very slow compilation in debug mode.
 LibTest/core/List/List_all_t06: SkipSlow # Very slow compilation in debug mode.
 
-[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 LibTest/async/Stream/Stream.periodic_all_t02: Skip # Issue 42898
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 Language/Libraries_and_Scripts/Scripts/top_level_main_t01: SkipSlow # Very slow on sim* architectures.
 Language/Libraries_and_Scripts/Scripts/top_level_main_t06: SkipSlow # Very slow on sim* architectures.
 LibTest/collection/ListBase/ListBase_class_A01_t01: SkipSlow # Very slow on sim* architectures.
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index 0ea8baf..4953365 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -30,7 +30,7 @@
 LibTest/core/List/List_class_A01_t02: Slow, Pass
 LibTest/core/List/List_class_A01_t03: Slow, Pass
 
-[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 LibTest/collection/ListBase/ListBase_class_A01_t01: SkipSlow # Issue 43036
 LibTest/collection/ListMixin/ListMixin_class_A01_t01: SkipSlow # Issue 43036
 
@@ -38,5 +38,5 @@
 # as that would involve running CFE (the front end) in simulator mode
 # to compile the URI file specified in spawnURI code.
 # These Isolate tests that use spawnURI are hence skipped on purpose.
-[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 LibTest/isolate/Isolate/spawnUri*: Skip
diff --git a/tests/co19_2/co19_2-runtime.status b/tests/co19_2/co19_2-runtime.status
index 2871e90..9236eaf 100644
--- a/tests/co19_2/co19_2-runtime.status
+++ b/tests/co19_2/co19_2-runtime.status
@@ -15,10 +15,10 @@
 LibTest/collection/ListMixin/ListMixin_class_A01_t05: SkipSlow # Very slow compilation in debug mode.
 LibTest/collection/ListMixin/ListMixin_class_A01_t06: SkipSlow # Very slow compilation in debug mode.
 
-[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 LibTest/async/Stream/Stream.periodic_all_t02: Skip # Issue 42898
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 LibTest/collection/ListBase/ListBase_class_A01_t01: SkipSlow # Very slow on sim* architectures.
 LibTest/collection/ListBase/ListBase_class_A01_t04: SkipSlow # Very slow on sim* architectures.
 LibTest/collection/ListBase/ListBase_class_A01_t05: SkipSlow # Very slow on sim* architectures.
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index ecde5a5..413ef72 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -49,7 +49,7 @@
 iterable_return_type_int64_test: SkipByDesign # Requires int64 support.
 typed_data_with_limited_ints_test: SkipByDesign # Requires fixed-size int64 support.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 bigint_parse_radix_test: Skip # Issue 31659
 bigint_test: Skip # Issue 31659
 
diff --git a/tests/corelib/data_uri_test.dart b/tests/corelib/data_uri_test.dart
index 09ff01b..e8636f3 100644
--- a/tests/corelib/data_uri_test.dart
+++ b/tests/corelib/data_uri_test.dart
@@ -34,20 +34,61 @@
 }
 
 void testMediaType() {
-  for (var mimeType in ["", "text/plain", "text/javascript"]) {
-    for (var charset in ["", ";charset=US-ASCII", ";charset=UTF-8"]) {
+  for (var mimeType in ["", "text/plain", "Text/PLAIN", "text/javascript"]) {
+    for (var charset in ["", "US-ASCII", "UTF-8"]) {
       for (var base64 in ["", ";base64"]) {
         bool isBase64 = base64.isNotEmpty;
-        var text = "data:$mimeType$charset$base64,";
+        // Parsing the URI from source:
+        var charsetParameter = charset.isEmpty ? "" : ";charset=$charset";
+        var text = "data:$mimeType$charsetParameter$base64,";
         var uri = UriData.parse(text);
 
-        String expectedCharset =
-            charset.isEmpty ? "US-ASCII" : charset.substring(9);
+        String expectedCharset = charset.isEmpty ? "US-ASCII" : charset;
         String expectedMimeType = mimeType.isEmpty ? "text/plain" : mimeType;
 
         Expect.equals(text, "$uri");
         Expect.equals(expectedMimeType, uri.mimeType);
+        Expect.isTrue(uri.isMimeType(expectedMimeType));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toUpperCase()));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toLowerCase()));
         Expect.equals(expectedCharset, uri.charset);
+        Expect.isTrue(uri.isCharset(expectedCharset));
+        Expect.isTrue(uri.isCharset(expectedCharset.toLowerCase()));
+        Expect.isTrue(uri.isCharset(expectedCharset.toUpperCase()));
+        var expectedEncoding = Encoding.getByName(expectedCharset);
+        if (expectedEncoding != null) {
+          Expect.isTrue(uri.isEncoding(expectedEncoding));
+        }
+        Expect.equals(isBase64, uri.isBase64);
+
+        // Creating the URI using a constructor:
+        var encoding = Encoding.getByName(charset);
+        uri = UriData.fromString("",
+            mimeType: mimeType, encoding: encoding, base64: isBase64);
+        expectedMimeType =
+            (mimeType.isEmpty || mimeType.toLowerCase() == "text/plain")
+                ? "text/plain"
+                : mimeType;
+        expectedEncoding = encoding;
+        expectedCharset = expectedEncoding?.name ?? "US-ASCII";
+        var expectedText = "data:"
+            "${expectedMimeType == "text/plain" ? "" : expectedMimeType}"
+            "${charset.isEmpty ? "" : ";charset=$expectedCharset"}"
+            "${isBase64 ? ";base64" : ""}"
+            ",";
+
+        Expect.equals(expectedText, "$uri");
+        Expect.equals(expectedMimeType, uri.mimeType);
+        Expect.isTrue(uri.isMimeType(expectedMimeType));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toUpperCase()));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toLowerCase()));
+        Expect.equals(expectedCharset, uri.charset);
+        Expect.isTrue(uri.isCharset(expectedCharset));
+        Expect.isTrue(uri.isCharset(expectedCharset.toLowerCase()));
+        Expect.isTrue(uri.isCharset(expectedCharset.toUpperCase()));
+        if (expectedEncoding != null) {
+          Expect.isTrue(uri.isEncoding(expectedEncoding));
+        }
         Expect.equals(isBase64, uri.isBase64);
       }
     }
@@ -236,8 +277,8 @@
   Expect.throwsFormatException(() => UriData.parse("data:type/sub;k=v;base64"));
 
   void formatError(String input) {
-    Expect.throwsFormatException(() => UriData.parse("data:;base64,$input"),
-        input);
+    Expect.throwsFormatException(
+        () => UriData.parse("data:;base64,$input"), input);
   }
 
   // Invalid base64 format (detected when parsed).
diff --git a/tests/corelib/null_closurized_method_tostring_test.dart b/tests/corelib/null_closurized_method_tostring_test.dart
new file mode 100644
index 0000000..e7439d8
--- /dev/null
+++ b/tests/corelib/null_closurized_method_tostring_test.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 "package:expect/expect.dart";
+
+// The closurized methods of `null` have working `toString()` methods.
+// See #48322.
+
+void main() {
+  check(null.toString);
+  check(null.noSuchMethod);
+}
+
+void check(Object o) {
+  final s = o.toString();
+  Expect.notEquals("", s);
+}
diff --git a/tests/corelib/uri_base_test.dart b/tests/corelib/uri_base_test.dart
index a54a287..51822c4 100644
--- a/tests/corelib/uri_base_test.dart
+++ b/tests/corelib/uri_base_test.dart
@@ -7,7 +7,7 @@
 main() {
   try {
     Uri base = Uri.base;
-    Expect.isTrue(Uri.base.scheme == "file" || Uri.base.scheme == "http");
+    Expect.isTrue(Uri.base.isScheme("file") || Uri.base.isScheme("http"));
   } on UnsupportedError catch (e) {
     Expect.isTrue(e.toString().contains("'Uri.base' is not supported"));
   }
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 3ee1d12..87e8d4a 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -52,7 +52,7 @@
 iterable_return_type_int64_test: SkipByDesign # Requires int64 support.
 typed_data_with_limited_ints_test: SkipByDesign # Requires fixed-size int64 support.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 bigint_parse_radix_test: Skip # Issue 31659
 bigint_test: Skip # Issue 31659
 
diff --git a/tests/corelib_2/data_uri_test.dart b/tests/corelib_2/data_uri_test.dart
index 4e194c1..ddff614 100644
--- a/tests/corelib_2/data_uri_test.dart
+++ b/tests/corelib_2/data_uri_test.dart
@@ -36,20 +36,61 @@
 }
 
 void testMediaType() {
-  for (var mimeType in ["", "text/plain", "text/javascript"]) {
-    for (var charset in ["", ";charset=US-ASCII", ";charset=UTF-8"]) {
+  for (var mimeType in ["", "text/plain", "Text/PLAIN", "text/javascript"]) {
+    for (var charset in ["", "US-ASCII", "UTF-8"]) {
       for (var base64 in ["", ";base64"]) {
         bool isBase64 = base64.isNotEmpty;
-        var text = "data:$mimeType$charset$base64,";
+        // Parsing the URI from source:
+        var charsetParameter = charset.isEmpty ? "" : ";charset=$charset";
+        var text = "data:$mimeType$charsetParameter$base64,";
         var uri = UriData.parse(text);
 
-        String expectedCharset =
-            charset.isEmpty ? "US-ASCII" : charset.substring(9);
+        String expectedCharset = charset.isEmpty ? "US-ASCII" : charset;
         String expectedMimeType = mimeType.isEmpty ? "text/plain" : mimeType;
 
         Expect.equals(text, "$uri");
         Expect.equals(expectedMimeType, uri.mimeType);
+        Expect.isTrue(uri.isMimeType(expectedMimeType));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toUpperCase()));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toLowerCase()));
         Expect.equals(expectedCharset, uri.charset);
+        Expect.isTrue(uri.isCharset(expectedCharset));
+        Expect.isTrue(uri.isCharset(expectedCharset.toLowerCase()));
+        Expect.isTrue(uri.isCharset(expectedCharset.toUpperCase()));
+        var expectedEncoding = Encoding.getByName(expectedCharset);
+        if (expectedEncoding != null) {
+          Expect.isTrue(uri.isEncoding(expectedEncoding));
+        }
+        Expect.equals(isBase64, uri.isBase64);
+
+        // Creating the URI using a constructor:
+        var encoding = Encoding.getByName(charset);
+        uri = UriData.fromString("",
+            mimeType: mimeType, encoding: encoding, base64: isBase64);
+        expectedMimeType =
+            (mimeType.isEmpty || mimeType.toLowerCase() == "text/plain")
+                ? "text/plain"
+                : mimeType;
+        expectedEncoding = encoding;
+        expectedCharset = expectedEncoding?.name ?? "US-ASCII";
+        var expectedText = "data:"
+            "${expectedMimeType == "text/plain" ? "" : expectedMimeType}"
+            "${charset.isEmpty ? "" : ";charset=$expectedCharset"}"
+            "${isBase64 ? ";base64" : ""}"
+            ",";
+
+        Expect.equals(expectedText, "$uri");
+        Expect.equals(expectedMimeType, uri.mimeType);
+        Expect.isTrue(uri.isMimeType(expectedMimeType));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toUpperCase()));
+        Expect.isTrue(uri.isMimeType(expectedMimeType.toLowerCase()));
+        Expect.equals(expectedCharset, uri.charset);
+        Expect.isTrue(uri.isCharset(expectedCharset));
+        Expect.isTrue(uri.isCharset(expectedCharset.toLowerCase()));
+        Expect.isTrue(uri.isCharset(expectedCharset.toUpperCase()));
+        if (expectedEncoding != null) {
+          Expect.isTrue(uri.isEncoding(expectedEncoding));
+        }
         Expect.equals(isBase64, uri.isBase64);
       }
     }
@@ -238,8 +279,8 @@
   Expect.throwsFormatException(() => UriData.parse("data:type/sub;k=v;base64"));
 
   void formatError(String input) {
-    Expect.throwsFormatException(() => UriData.parse("data:;base64,$input"),
-        input);
+    Expect.throwsFormatException(
+        () => UriData.parse("data:;base64,$input"), input);
   }
 
   // Invalid base64 format (detected when parsed).
diff --git a/tests/corelib_2/null_closurized_method_tostring_test.dart b/tests/corelib_2/null_closurized_method_tostring_test.dart
new file mode 100644
index 0000000..e7439d8
--- /dev/null
+++ b/tests/corelib_2/null_closurized_method_tostring_test.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 "package:expect/expect.dart";
+
+// The closurized methods of `null` have working `toString()` methods.
+// See #48322.
+
+void main() {
+  check(null.toString);
+  check(null.noSuchMethod);
+}
+
+void check(Object o) {
+  final s = o.toString();
+  Expect.notEquals("", s);
+}
diff --git a/tests/corelib_2/uri_base_test.dart b/tests/corelib_2/uri_base_test.dart
index 3717571..eb35e61 100644
--- a/tests/corelib_2/uri_base_test.dart
+++ b/tests/corelib_2/uri_base_test.dart
@@ -9,7 +9,7 @@
 main() {
   try {
     Uri base = Uri.base;
-    Expect.isTrue(Uri.base.scheme == "file" || Uri.base.scheme == "http");
+    Expect.isTrue(Uri.base.isScheme("file") || Uri.base.isScheme("http"));
   } on UnsupportedError catch (e) {
     Expect.isTrue(e.toString().contains("'Uri.base' is not supported"));
   }
diff --git a/tests/dartdevc/hot_restart_late_test.dart b/tests/dartdevc/hot_restart_late_test.dart
index ab37cbc..32a31d7 100644
--- a/tests/dartdevc/hot_restart_late_test.dart
+++ b/tests/dartdevc/hot_restart_late_test.dart
@@ -6,35 +6,120 @@
 
 // Requirements=nnbd
 
-import 'package:expect/expect.dart';
-import 'dart:_runtime' as dart;
+import 'dart:_runtime' as dart show hotRestart, resetFields;
 
-late double l;
+import 'package:expect/expect.dart';
+
+late String noInitializer;
+late int withInitializer = 1;
 
 class Lates {
-  static late String s;
+  static late String noInitializer;
+  static late int withInitializer = 2;
+}
+
+class LatesGeneric<T> {
+  static late String noInitializer;
+  static late int withInitializer = 3;
 }
 
 main() {
-  Expect.throws(() => Lates.s);
-  Expect.throws(() => l);
-  Lates.s = "set";
-  l = 1.62;
-  Expect.equals(Lates.s, "set");
-  Expect.equals(l, 1.62);
+  // Read this static field first to avoid interference with other reset counts.
+  var weakNullSafety = hasUnsoundNullSafety;
+
+  // TODO(42495) `Expect.throws` contains the use of a const that triggers an
+  // extra field reset but consts are not correctly reset on hot restart so the
+  // extra reset only appears once. Perform an initial Expect.throws here to
+  // avoid confusion with the reset counts later.
+  Expect.throws(() => throw 'foo');
+
+  var resetFieldCount = dart.resetFields.length;
+
+  // Set uninitialized static late fields. Avoid calling getters for these
+  // statics to ensure they are reset even if they are never accessed.
+  noInitializer = 'set via setter';
+  Lates.noInitializer = 'Lates set via setter';
+  LatesGeneric.noInitializer = 'LatesGeneric set via setter';
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Lates.withInitializer);
+  Expect.equals(3, LatesGeneric.withInitializer);
+
+  // In weak null safety the late field lowering introduces a second static
+  // field that tracks if late field has been initialized thus doubling the
+  // number of expected resets.
+  //
+  // In sound null safety non-nullable fields don't require the extra static to
+  // track initialization because null is used as a sentinel value.
+  //
+  // Weak Null Safety - 12 total field resets
+  //  - 3 isSet write/resets for uninitialized field writes.
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 isSet reads/resets for initialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  //
+  // Sound Null Safety - 6 total field resets:
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 reads/resets for the actual initialized field reads.
+  var expectedResets =
+      weakNullSafety ? resetFieldCount + 12 : resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
 
   dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
 
-  Expect.throws(() => Lates.s);
-  Expect.throws(() => l);
-  Lates.s = "set";
-  Expect.equals(Lates.s, "set");
-  l = 1.62;
-  Expect.equals(l, 1.62);
+  // Late statics should throw on get when not initialized.
+  Expect.throws(() => noInitializer);
+  Expect.throws(() => Lates.noInitializer);
+  Expect.throws(() => LatesGeneric.noInitializer);
+
+  // Set uninitialized static late fields again.
+  noInitializer = 'set via setter';
+  Lates.noInitializer = 'Lates set via setter';
+  LatesGeneric.noInitializer = 'LatesGeneric set via setter';
+
+  // All statics should contain their set values.
+  Expect.equals('set via setter', noInitializer);
+  Expect.equals('Lates set via setter', Lates.noInitializer);
+  Expect.equals('LatesGeneric set via setter', LatesGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Lates.withInitializer);
+  Expect.equals(3, LatesGeneric.withInitializer);
+
+  // Weak Null Safety - 12 total field resets
+  //  - 3 isSet write/resets for uninitialized field writes.
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 isSet reads/resets for initialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  // Sound Null Safety - 6 total field resets:
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 reads/resets for the actual initialized field reads.
+  expectedResets = weakNullSafety ? resetFieldCount + 12 : resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
 
   dart.hotRestart();
   dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
 
-  Expect.throws(() => Lates.s);
-  Expect.throws(() => l);
+  // Late statics should throw on get when not initialized.
+  Expect.throws(() => noInitializer);
+  Expect.throws(() => Lates.noInitializer);
+  Expect.throws(() => LatesGeneric.noInitializer);
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Lates.withInitializer);
+  Expect.equals(3, LatesGeneric.withInitializer);
+
+  // Weak Null Safety - 9 total field resets:
+  //  - 3 isSet reads/resets for uninitialized field reads.
+  //  - 3 isSet reads/resets for initialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  //
+  // Sound Null Safety - 6 total field resets:
+  //  - 3 reads/resets for actual uninitialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  expectedResets = weakNullSafety ? resetFieldCount + 9 : resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
 }
diff --git a/tests/dartdevc/hot_restart_static_test.dart b/tests/dartdevc/hot_restart_static_test.dart
new file mode 100644
index 0000000..c26c298
--- /dev/null
+++ b/tests/dartdevc/hot_restart_static_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.
+
+// Tests that static fields are properly reset after hot restarts.
+
+// Requirements=nnbd
+
+import 'dart:_runtime' as dart show hotRestart, resetFields;
+
+import 'package:expect/expect.dart';
+
+String? noInitializer;
+int withInitializer = 1;
+
+class Statics {
+  static String? noInitializer;
+  static int withInitializer = 2;
+}
+
+class StaticsGeneric<T> {
+  static String? noInitializer;
+  static int withInitializer = 3;
+}
+
+main() {
+  var resetFieldCount = dart.resetFields.length;
+
+  // Set static fields without explicit initializers. Avoid calling getters for
+  // these statics to ensure they are reset even if they are never accessed.
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 3 setter calls and 3 getter calls.
+  var expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // Uninitialized statics have been reset to their implicit null initial state.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // All statics should contain their set values.
+  Expect.equals('set via setter', noInitializer);
+  Expect.equals('Statics set via setter', Statics.noInitializer);
+  Expect.equals('StaticsGeneric set via setter', StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six total new field resets despite getter and setter calls on the same
+  // static fields.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // All statics should contain their initial values.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 6 getter calls.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+}
diff --git a/tests/dartdevc_2/hot_restart_static_test.dart b/tests/dartdevc_2/hot_restart_static_test.dart
new file mode 100644
index 0000000..73e93d1
--- /dev/null
+++ b/tests/dartdevc_2/hot_restart_static_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.
+
+// @dart = 2.9
+
+// Tests that static fields are properly reset after hot restarts.
+
+import 'dart:_runtime' as dart show hotRestart, resetFields;
+
+import 'package:expect/expect.dart';
+
+String noInitializer;
+int withInitializer = 1;
+
+class Statics {
+  static String noInitializer;
+  static int withInitializer = 2;
+}
+
+class StaticsGeneric<T> {
+  static String noInitializer;
+  static int withInitializer = 3;
+}
+
+main() {
+  var resetFieldCount = dart.resetFields.length;
+
+  // Set static fields without explicit initializers. Avoid calling getters for
+  // these statics to ensure they are reset even if they are never accessed.
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 3 setter calls and 3 getter calls.
+  var expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // Uninitialized statics have been reset to their implicit null initial state.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // All statics should contain their set values.
+  Expect.equals('set via setter', noInitializer);
+  Expect.equals('Statics set via setter', Statics.noInitializer);
+  Expect.equals('StaticsGeneric set via setter', StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six total new field resets despite getter and setter calls on the same
+  // static fields.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // All statics should contain their initial values.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 6 getter calls.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+}
diff --git a/tests/ffi/ffi.status b/tests/ffi/ffi.status
index b119eb8..e22df5b 100644
--- a/tests/ffi/ffi.status
+++ b/tests/ffi/ffi.status
@@ -33,7 +33,7 @@
 [ $system != android && $system != linux && $system != macos && $system != windows ]
 *: Skip # FFI not yet supported on other OSes.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 *: Skip # FFI not yet supported on the arm simulator.
 
 [ $builder_tag == asan || $builder_tag == msan || $builder_tag == tsan ]
diff --git a/tests/ffi/regress_flutter97301_test.dart b/tests/ffi/regress_flutter97301_test.dart
index c330d70..e0f844d 100644
--- a/tests/ffi/regress_flutter97301_test.dart
+++ b/tests/ffi/regress_flutter97301_test.dart
@@ -18,4 +18,6 @@
   for (var i = 0; i < 2; i++) {
     print(offsetsPtr.asTypedList(1));
   }
+
+  calloc.free(offsetsPtr);
 }
diff --git a/tests/ffi_2/ffi_2.status b/tests/ffi_2/ffi_2.status
index b119eb8..e22df5b 100644
--- a/tests/ffi_2/ffi_2.status
+++ b/tests/ffi_2/ffi_2.status
@@ -33,7 +33,7 @@
 [ $system != android && $system != linux && $system != macos && $system != windows ]
 *: Skip # FFI not yet supported on other OSes.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 *: Skip # FFI not yet supported on the arm simulator.
 
 [ $builder_tag == asan || $builder_tag == msan || $builder_tag == tsan ]
diff --git a/tests/ffi_2/regress_flutter97301_test.dart b/tests/ffi_2/regress_flutter97301_test.dart
index 1417a7a..83f97c7 100644
--- a/tests/ffi_2/regress_flutter97301_test.dart
+++ b/tests/ffi_2/regress_flutter97301_test.dart
@@ -20,4 +20,6 @@
   for (var i = 0; i < 2; i++) {
     print(offsetsPtr.asTypedList(1));
   }
+
+  calloc.free(offsetsPtr);
 }
diff --git a/tests/language/call/implicit_tearoff_assignment_test.dart b/tests/language/call/implicit_tearoff_assignment_test.dart
new file mode 100644
index 0000000..c3d4d58
--- /dev/null
+++ b/tests/language/call/implicit_tearoff_assignment_test.dart
@@ -0,0 +1,137 @@
+// 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 ensures that when a `.call` tearoff occurs on the right hand side
+// of an assignment, the resulting expression has an appropriate type.
+
+import "package:expect/expect.dart";
+
+import '../static_type_helper.dart';
+
+dynamic _topLevelPropertySetValue;
+
+set topLevelProperty(void Function() value) {
+  Expect.isNull(_topLevelPropertySetValue);
+  _topLevelPropertySetValue = value;
+}
+
+class C {
+  static dynamic _staticPropertySetValue;
+
+  void call() {}
+
+  static set staticProperty(void Function() value) {
+    Expect.isNull(_staticPropertySetValue);
+    _staticPropertySetValue = value;
+  }
+}
+
+class Base {
+  late final dynamic _basePropertySetValue;
+
+  set baseProperty(void Function() value) {
+    _basePropertySetValue = value;
+  }
+}
+
+class Derived extends Base {
+  late final dynamic _indexSetValue;
+  late final dynamic _instanceSetValue;
+
+  operator []=(int index, void Function() value) {
+    _indexSetValue = value;
+  }
+
+  set instanceProperty(void Function() value) {
+    _instanceSetValue = value;
+  }
+
+  void testSuperPropertySet() {
+    Expect.type<void Function()>((super.baseProperty = C())
+      ..expectStaticType<Exactly<void Function()>>());
+    Expect.type<void Function()>(super._basePropertySetValue);
+  }
+}
+
+class Extended {
+  late final dynamic _extensionIndexSetValue;
+  late final dynamic _extensionPropertySetValue;
+}
+
+extension on Extended {
+  operator []=(int index, void Function() value) {
+    _extensionIndexSetValue = value;
+  }
+
+  set extensionProperty(void Function() value) {
+    _extensionPropertySetValue = value;
+  }
+}
+
+void testExtensionIndexSet() {
+  Extended e = Extended();
+  Expect.type<void Function()>(
+      (e[0] = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(e._extensionIndexSetValue);
+}
+
+void testExtensionSet() {
+  Extended e = Extended();
+  Expect.type<void Function()>((e.extensionProperty = C())
+    ..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(e._extensionPropertySetValue);
+}
+
+void testIndexSet() {
+  Derived d = Derived();
+  Expect.type<void Function()>(
+      (d[0] = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(d._indexSetValue);
+}
+
+void testInstanceSet() {
+  Derived d = Derived();
+  Expect.type<void Function()>(
+      (d.instanceProperty = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(d._instanceSetValue);
+}
+
+void testNullAwarePropertySet() {
+  Derived? d = Derived() as Derived?; // ignore: unnecessary_cast
+  Expect.type<void Function()>((d?.instanceProperty = C())
+    ..expectStaticType<Exactly<void Function()?>>());
+  Expect.type<void Function()>(d!._instanceSetValue);
+}
+
+void testStaticSet() {
+  C._staticPropertySetValue = null;
+  Expect.type<void Function()>(
+      (C.staticProperty = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(C._staticPropertySetValue);
+}
+
+void testTopLevelSet() {
+  _topLevelPropertySetValue = null;
+  Expect.type<void Function()>(
+      (topLevelProperty = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(_topLevelPropertySetValue);
+}
+
+void testVariableSet() {
+  void Function() f;
+  Expect.type<void Function()>(
+      (f = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(f);
+}
+
+main() {
+  testExtensionIndexSet();
+  testExtensionSet();
+  testIndexSet();
+  testInstanceSet();
+  testStaticSet();
+  Derived().testSuperPropertySet();
+  testTopLevelSet();
+  testVariableSet();
+}
diff --git a/tests/language/call/implicit_tearoff_error_test.dart b/tests/language/call/implicit_tearoff_error_test.dart
new file mode 100644
index 0000000..8010841
--- /dev/null
+++ b/tests/language/call/implicit_tearoff_error_test.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.
+
+// This test exercises a corner case of implicit `.call` tearoffs that is
+// easiest to see through its effect on erroneous code.
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+import '../static_type_helper.dart';
+
+class A {}
+
+class C extends A {
+  void call() {}
+}
+
+class D extends A {
+  void call() {}
+}
+
+void testConditionalExpressionWithUnrelatedClasses(bool b, C c, D d) {
+  // Verify that `b ? c : d` is not interpreted as `(b ? c.call : d.call)` by
+  // confirming that it's an error to use it in a function context (because
+  // `b ? c : d` has static type `A`).
+  context<void Function()>(b ? c : d);
+  //                       ^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  //                         ^
+  // [cfe] The argument type 'A' can't be assigned to the parameter type 'void Function()'.
+}
diff --git a/tests/language/call/implicit_tearoff_exceptions_test.dart b/tests/language/call/implicit_tearoff_exceptions_test.dart
new file mode 100644
index 0000000..82336a1
--- /dev/null
+++ b/tests/language/call/implicit_tearoff_exceptions_test.dart
@@ -0,0 +1,123 @@
+// 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.
+
+// There are a few circumstances where implicit tear-off of `call` methods does
+// not occur; this test exercises the user-visible static analysis behaviors
+// arising from those circumstances.
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+// A note on how the tests work: in several places we use the pattern
+// `context<C>(b ? d : (E..expectStaticType<Exactly<T>>()))` (where `b` has type
+// `bool` and `d` has type `dynamic`).  This pattern ensures that `E` will be
+// type analyzed with a context of `C`, and tests that the resulting expression
+// has a type of `T`.  However, the presence of `b ? d :` at the beginning
+// ensures that the overall expression has type `dynamic`, so no assignability
+// error will occur if types `C` and `T` are different.
+
+import "package:expect/expect.dart";
+
+import '../static_type_helper.dart';
+
+class A {}
+
+class C extends A {
+  void call() {}
+  void m() {}
+}
+
+// These are top level getters rather than local variables to avoid triggering
+// flow analysis.
+bool get bTrue => true;
+bool get bFalse => false;
+
+void testCascadeTarget() {
+  C c = C();
+  // Even though the subexpression `c` has type `C` and context `void
+  // Function()`, we don't tear off `.call` for subexpressions that are the
+  // target of a cascade; instead, we tear-off `.call` on the full cascade
+  // expression.  So `c..m()` is equivalent to `(c..m()).call` (which is valid)
+  // rather than `(c.call)..m()` (which is not).
+  context<void Function()>(c..m());
+
+  // Same as above, but confirm that extra parens around `c` don't change the
+  // behavior.
+  context<void Function()>((c)..m());
+  context<void Function()>(((c))..m());
+}
+
+void testConditional() {
+  A a = A();
+  C c = C();
+  dynamic d = null;
+  // Even though the subexpression `c` has type `C` and context `void
+  // Function()`, we don't tear off `.call` for the `then` or `else`
+  // subexpressions of a conditional expression; instead, we tear off `.call`
+  // for the conditional expression as a whole (if appropriate).  So, in
+  // `(bTrue ? c : a)..expectStaticType<...>()`, no implicit tearoff of `c`
+  // occurs, and the subexpression `bTrue ? c : a` gets assigned a static type
+  // of `A`.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bTrue ? c : a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bFalse ? a : c)..expectStaticType<Exactly<A>>())));
+
+  // Same as above, but confirm that extra parens around `c` don't change the
+  // behavior.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bTrue ? (c) : a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bFalse ? a : (c))..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bTrue ? ((c)) : a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bFalse ? a : ((c)))..expectStaticType<Exactly<A>>())));
+}
+
+void testIfNull() {
+  A a = A();
+  A? aq = null;
+  C c = C();
+  dynamic d = null;
+  // Even though the subexpression `c` has type `C` and context `void
+  // Function()?`, we don't tear off `.call` for the LHS of a `??` expression;
+  // instead, we tear off `.call` for the `??` expression as a whole (if
+  // appropriate).  So, in
+  // `(c ?? a)..expectStaticType<...>()`, no implicit tearoff of `c` occurs, and
+  // the subexpression `c ?? a` gets assigned a static type of `A`.
+  Expect.throws(() => context<void Function()>(bFalse
+      ? d
+      : ((c ?? a) // ignore: dead_null_aware_expression
+        ..expectStaticType<Exactly<A>>())));
+
+  // In `(aq ?? c)..expectStaticType<...>()`, the situation is similar, but the
+  // context for `c` is (non-nullable) `void Function()`.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((aq ?? c)..expectStaticType<Exactly<A>>())));
+
+  // Same as above, but confirm that extra parens around `c` don't change the
+  // behavior.
+  Expect.throws(() => context<void Function()>(bFalse
+      ? d
+      : (((c) ?? a) // ignore: dead_null_aware_expression
+        ..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((aq ?? (c))..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(bFalse
+      ? d
+      : ((((c)) ?? a) // ignore: dead_null_aware_expression
+        ..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((aq ?? ((c)))..expectStaticType<Exactly<A>>())));
+}
+
+main() {
+  testCascadeTarget();
+  testConditional();
+  testIfNull();
+}
diff --git a/tests/language/call/implicit_tearoff_local_assignment_test.dart b/tests/language/call/implicit_tearoff_local_assignment_test.dart
new file mode 100644
index 0000000..0f77761
--- /dev/null
+++ b/tests/language/call/implicit_tearoff_local_assignment_test.dart
@@ -0,0 +1,123 @@
+// 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 verifies that when considering whether to perform a `.call` tearoff
+// on the RHS of an assignment, the implementations use the unpromoted type of
+// the variable (rather than the promoted type).
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+import "package:expect/expect.dart";
+
+import '../static_type_helper.dart';
+
+class B {
+  Object call() => 'B.call called';
+}
+
+class C extends B {
+  String call() => 'C.call called';
+}
+
+void testClassPromoted() {
+  B x = C();
+  x as C;
+  x.expectStaticType<Exactly<C>>();
+  var y = x = C(); // No implicit tearoff of `.call`, no demotion
+  x.expectStaticType<Exactly<C>>();
+  Expect.type<C>(x);
+  Expect.equals('C.call called', x());
+  y.expectStaticType<Exactly<C>>();
+  Expect.type<C>(y);
+  Expect.equals('C.call called', y());
+}
+
+void testClassUnpromoted() {
+  B x = B();
+  var y = x = C(); // No implicit tearoff of `.call`, no promotion
+  x.expectStaticType<Exactly<B>>();
+  Expect.type<C>(x);
+  Expect.equals('C.call called', x());
+  y.expectStaticType<Exactly<C>>();
+  Expect.type<C>(y);
+  Expect.equals('C.call called', y());
+}
+
+void testFunctionPromoted() {
+  String f() => 'f called';
+  Object Function() x = f;
+  x as String Function();
+  x.expectStaticType<Exactly<String Function()>>();
+  var y = x = C(); // Implicit tearoff of `.call`, no demotion
+  x.expectStaticType<Exactly<String Function()>>();
+  Expect.type<String Function()>(x);
+  Expect.equals('C.call called', x());
+  y.expectStaticType<Exactly<String Function()>>();
+  Expect.type<String Function()>(y);
+  Expect.equals('C.call called', y());
+}
+
+void testFunctionUnpromoted() {
+  Object f() => 'f called';
+  Object Function() x = f;
+  var y = x = B(); // Implicit tearoff of `.call`, no promotion
+  x.expectStaticType<Exactly<Object Function()>>();
+  Expect.type<Object Function()>(x);
+  Expect.equals('B.call called', x());
+  y.expectStaticType<Exactly<Object Function()>>();
+  Expect.type<Object Function()>(y);
+  Expect.equals('B.call called', y());
+}
+
+void testObjectPromotedToClass() {
+  Object x = B();
+  x as B;
+  x.expectStaticType<Exactly<B>>();
+  var y = x = C(); // No implicit tearoff of `.call`, x remains promoted
+  x.expectStaticType<Exactly<B>>();
+  Expect.type<C>(x);
+  Expect.equals('C.call called', x());
+  y.expectStaticType<Exactly<C>>();
+  Expect.type<C>(y);
+  Expect.equals('C.call called', y());
+}
+
+void testObjectPromotedToFunction() {
+  Object f() => 'f called';
+  Object x = f;
+  x as Object Function();
+  x.expectStaticType<Exactly<Object Function()>>();
+  var y = x = B(); // No implicit tearoff of `.call`, demotes x
+  x.expectStaticType<Exactly<Object>>();
+  Expect.type<B>(x);
+  Expect.equals('B.call called', (x as B)());
+  y.expectStaticType<Exactly<B>>();
+  Expect.type<B>(y);
+  Expect.equals('B.call called', y());
+}
+
+void testObjectUnpromoted() {
+  Object x = 'initial value';
+  var y = x = B(); // No implicit tearoff of `.call`, no promotion
+  x.expectStaticType<Exactly<Object>>();
+  Expect.type<B>(x);
+  Expect.equals('B.call called', (x as B)());
+  y.expectStaticType<Exactly<B>>();
+  Expect.type<B>(y);
+  Expect.equals('B.call called', y());
+}
+
+main() {
+  testClassPromoted();
+  testClassUnpromoted();
+  testFunctionPromoted();
+  testFunctionUnpromoted();
+  testObjectPromotedToClass();
+  testObjectPromotedToFunction();
+  testObjectUnpromoted();
+}
diff --git a/tests/language/call/implicit_tearoff_test.dart b/tests/language/call/implicit_tearoff_test.dart
new file mode 100644
index 0000000..361f7e1
--- /dev/null
+++ b/tests/language/call/implicit_tearoff_test.dart
@@ -0,0 +1,177 @@
+// 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 exercises all the grammar constructs for which implicit tear-off of
+// `call` methods should occur.
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+import '../static_type_helper.dart';
+
+class B {}
+
+class C extends B {
+  void call() {}
+  void m() {}
+  void testThisExpression() {
+    context<void Function()>(this);
+  }
+}
+
+class D {
+  C operator +(other) => C();
+  C operator -() => C();
+  C instanceMethod() => C();
+  static C staticMethod() => C();
+  C get instanceGetter => C();
+}
+
+C topLevelMethod() => C();
+
+// These are top level getters rather than local variables to avoid triggering
+// flow analysis.
+bool get bTrue => true;
+bool get bFalse => false;
+
+void testAsExpression() {
+  dynamic d = C();
+  context<void Function()>(d as C);
+}
+
+void testAssignmentExpression() {
+  B b = B(); // ignore: unused_local_variable
+  context<void Function()>(b = C());
+}
+
+Future<void> testAwaitExpression() async {
+  Future<C> fc = Future.value(C());
+  context<void Function()>(await fc);
+}
+
+void testBinaryExpression() {
+  D d = D();
+  context<void Function()>(d + d);
+}
+
+void testCascadeExpression() {
+  // Note: we don't apply implicit `.call` tear-offs to the *target* of a
+  // cascade, but we do apply them to the cascade expression as a whole, so
+  // `c..m()` is equivalent to `(c..m()).call`.
+  C c = C();
+  context<void Function()>(c..m());
+}
+
+void testConditionalExpression() {
+  // Note: we know from `implicit_tearoff_exceptions_test.dart` that the two
+  // branches of the conditional expression are *not* subject to implicit
+  // `.call` tearoff, so the `.call` tearoff in this case is applied to the
+  // whole conditional expression.  In other words, `b ? c : c` desugars to
+  // `(b ? c : c).call` rather than `(b ? c.call : c.call)`.
+  C c = C();
+  context<void Function()>(bFalse ? c : c);
+  context<void Function()>(bTrue ? c : c);
+}
+
+void testFunctionExpressionInvocation() {
+  C c = C();
+  context<void Function()>((() => c)());
+}
+
+void testFunctionInvocationLocal() {
+  C localFunction() => C();
+  context<void Function()>(localFunction());
+}
+
+void testFunctionInvocationStatic() {
+  context<void Function()>(D.staticMethod());
+}
+
+void testFunctionInvocationTopLevel() {
+  context<void Function()>(topLevelMethod());
+}
+
+void testIfNullExpression() {
+  C? c1 = bTrue ? C() : null;
+  C c2 = C();
+  context<void Function()>(c1 ?? c2);
+  c1 = null;
+  context<void Function()>(c1 ?? c2);
+}
+
+void testIndexExpression() {
+  List<C> l = [C()];
+  context<void Function()>(l[0]);
+}
+
+void testInstanceCreationExpressionExplicit() {
+  context<void Function()>(new C());
+}
+
+void testInstanceCreationExpressionImplicit() {
+  context<void Function()>(C());
+}
+
+void testInstanceGetGeneral() {
+  D Function() dFunction = () => D();
+  context<void Function()>(dFunction().instanceGetter);
+}
+
+void testInstanceGetViaPrefixedIdentifier() {
+  D d = D();
+  context<void Function()>(d.instanceGetter);
+}
+
+void testMethodInvocation() {
+  context<void Function()>(D().instanceMethod());
+}
+
+void testNullCheckExpression() {
+  C? c = bTrue ? C() : null;
+  context<void Function()>(c!);
+}
+
+void testParenthesizedExpression() {
+  C c = C();
+  context<void Function()>((c));
+}
+
+void testUnaryMinusExpression() {
+  D d = D();
+  context<void Function()>(-d);
+}
+
+extension on C {
+  void testThisExpressionExtension() {
+    context<void Function()>(this);
+  }
+}
+
+main() async {
+  testAsExpression();
+  testAssignmentExpression();
+  await testAwaitExpression();
+  testBinaryExpression();
+  testCascadeExpression();
+  testConditionalExpression();
+  testFunctionExpressionInvocation();
+  testFunctionInvocationLocal();
+  testFunctionInvocationStatic();
+  testFunctionInvocationTopLevel();
+  testIfNullExpression();
+  testIndexExpression();
+  testInstanceCreationExpressionExplicit();
+  testInstanceCreationExpressionImplicit();
+  testInstanceGetGeneral();
+  testInstanceGetViaPrefixedIdentifier();
+  testMethodInvocation();
+  testNullCheckExpression();
+  testParenthesizedExpression();
+  testUnaryMinusExpression();
+  C().testThisExpression();
+  C().testThisExpressionExtension();
+}
diff --git a/tests/language/compile_time_constant/p_test.dart b/tests/language/compile_time_constant/p_test.dart
index 133519f..23426eb 100644
--- a/tests/language/compile_time_constant/p_test.dart
+++ b/tests/language/compile_time_constant/p_test.dart
@@ -5,13 +5,11 @@
 import "package:expect/expect.dart";
 
 class A {
-  const A(
-    this.x
-    //   ^
-    // [analyzer] COMPILE_TIME_ERROR.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
-    // [cfe] 'x' is a final instance variable that was initialized at the declaration.
-    //   ^
-    // [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+  const A(this.x
+      //       ^
+      // [analyzer] COMPILE_TIME_ERROR.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
+      // [cfe] 'x' is a final instance variable that was initialized at the declaration.
+      // [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
       );
   final x = null;
 }
@@ -19,7 +17,7 @@
 class B extends A {
   const B();
   //    ^
-  // [analyzer] COMPILE_TIME_ERROR.NO_DEFAULT_SUPER_CONSTRUCTOR
+  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS
   // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments.
 }
 
diff --git a/tests/language/const/constructor_super_test.dart b/tests/language/const/constructor_super_test.dart
index f710d15..a5be635 100644
--- a/tests/language/const/constructor_super_test.dart
+++ b/tests/language/const/constructor_super_test.dart
@@ -17,8 +17,10 @@
         super(x);
 
   // Const constructor cannot call non-const super constructor.
-  const B.zerofive() : b = 0, super(5);
-  //                          ^^^^^^^^
+  const B.zerofive()
+      : b = 0,
+        super(5);
+  //    ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
   // [cfe] A constant constructor can't call a non-constant super constructor.
 }
@@ -29,9 +31,9 @@
   const C.named(x);
   //    ^
   // [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
-  // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments.
   //    ^^^^^^^
-  // [analyzer] COMPILE_TIME_ERROR.NO_DEFAULT_SUPER_CONSTRUCTOR
+  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS
+  // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments.
 }
 
 main() {
diff --git a/tests/language/constructor/redirect2_test.dart b/tests/language/constructor/redirect2_test.dart
index 85fc234..a1d50be 100644
--- a/tests/language/constructor/redirect2_test.dart
+++ b/tests/language/constructor/redirect2_test.dart
@@ -31,11 +31,9 @@
   A.illegalSuper() : this(3), super(3);
   //                          ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.SUPER_IN_REDIRECTING_CONSTRUCTOR
-  // [cfe] A redirecting constructor can't have other initializers.
+  // [cfe] A redirecting constructor can't have a 'super' initializer.
   //                                ^
   // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
-  //                               ^^^
-  // [cfe] Too many positional arguments: 0 allowed, but 1 found.
 }
 
 main() {
diff --git a/tests/language/enum/enhanced_enums_basic_test.dart b/tests/language/enum/enhanced_enums_basic_test.dart
index 655a1f0..be97c45 100644
--- a/tests/language/enum/enhanced_enums_basic_test.dart
+++ b/tests/language/enum/enhanced_enums_basic_test.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.
 
-// SharedOptions=--enable-experiment=enhanced-enums
-
 // Test new enhanced enum syntax.
 
 import 'package:expect/expect.dart';
@@ -19,10 +17,10 @@
   Expect.identical(EnumPlainTrailingComma.v2, EnumPlainTrailingComma.values[1]);
   Expect.identical(EnumPlainTrailingComma.v3, EnumPlainTrailingComma.values[2]);
 
-  Expect.equals(3, EnumPlainNoSemicolon.values.length);
-  Expect.identical(EnumPlainNoSemicolon.v1, EnumPlainNoSemicolon.values[0]);
-  Expect.identical(EnumPlainNoSemicolon.v2, EnumPlainNoSemicolon.values[1]);
-  Expect.identical(EnumPlainNoSemicolon.v3, EnumPlainNoSemicolon.values[2]);
+  Expect.equals(3, EnumNoSemicolon.values.length);
+  Expect.identical(EnumNoSemicolon.v1, EnumNoSemicolon.values[0]);
+  Expect.identical(EnumNoSemicolon.v2, EnumNoSemicolon.values[1]);
+  Expect.identical(EnumNoSemicolon.v3, EnumNoSemicolon.values[2]);
   Expect.type<EnumNoSemicolon<num>>(EnumNoSemicolon.v1);
 
   Expect.equals(3, EnumPlainSemicolon.values.length);
@@ -69,13 +67,13 @@
   Expect.identical(EnumAll.v1, EnumAll.sLateFinal);
   Expect.throws(() => EnumAll.sLateFinal = EnumAll.v1);
 
-  Expect.identical(EnumAll.v3, EnumAll.sFinalInit);
+  Expect.identical(EnumAll.v3, EnumAll.sFinal);
 
-  Expect.throws(() => EnumAll.sLate);
-  EnumAll.sLate = EnumAll.v1;
-  Expect.identical(EnumAll.v1, EnumAll.sLate);
-  EnumAll.sLate = EnumAll.v3;
-  Expect.identical(EnumAll.v3, EnumAll.sLate);
+  Expect.throws(() => EnumAll.sLateVar);
+  EnumAll.sLateVar = EnumAll.v1;
+  Expect.identical(EnumAll.v1, EnumAll.sLateVar);
+  EnumAll.sLateVar = EnumAll.v3;
+  Expect.identical(EnumAll.v3, EnumAll.sLateVar);
   Expect.identical(EnumAll.v3, EnumAll.sLateVarInit);
   Expect.isNull(EnumAll.sVar);
   Expect.identical(EnumAll.v3, EnumAll.sVarInit);
@@ -84,30 +82,30 @@
   EnumAll.staticGetSet = EnumAll.v5;
   Expect.equals(42, EnumAll.staticMethod());
 
-  Expect.identical(EnumAll.v2, EnumAll<num, num>.factory(2));
-  Expect.identical(EnumAll.v2, EnumAll<num, num>.refactory(2));
+  Expect.identical(EnumAll.v3, EnumAll<num, num>.factory(2));
+  Expect.identical(EnumAll.v3, EnumAll<num, num>.refactory(2));
 
   // Access static members through typedef.
   Expect.identical(EnumAll.v3, TypeDefAll.sConst);
   Expect.identical(EnumAll.v3, TypeDefAll.sFinal);
-  Expect.identical(EnumAll.v1, TypedefAll.sLateFinal);
-  Expect.identical(EnumAll.v3, TypedefAll.sFinalInit);
+  Expect.identical(EnumAll.v1, TypeDefAll.sLateFinal);
+  Expect.identical(EnumAll.v3, TypeDefAll.sLateFinalInit);
 
   Expect.identical(EnumAll.v3, TypeDefAll.staticGetSet);
   TypeDefAll.staticGetSet = EnumAll.v5;
   Expect.equals(42, TypeDefAll.staticMethod());
 
-  Expect.identical(EnumAll.v2, TypeDefAll.factory(2));
-  Expect.identical(EnumAll.v2, TypeDefAll.refactory(2));
+  Expect.identical(EnumAll.v3, TypeDefAll.factory(2));
+  Expect.identical(EnumAll.v3, TypeDefAll.refactory(2));
 
   // Access instance members.
   Expect.equals(0, EnumAll.v1.instanceGetSet);
   EnumAll.v1.instanceGetSet = 0.5;
   Expect.equals(0, EnumAll.v1.instanceMethod());
-  Expect.identical(EnumAll.v1, EnumAll.v3 ^ EnumAll.v2);
+  Expect.identical(EnumAll.v4, EnumAll.v3 ^ EnumAll.v2);
 
-  Expect.equals("EnumAll.v1:EnumMixin<num>:ObjectMixin:this",
-      EnumAll.v1.thisAndSuper());
+  Expect.equals(
+      "EnumAll.v1:EnumMixin<num>:ObjectMixin:this", EnumAll.v1.thisAndSuper());
 
   // Which can reference type parameters.
   Expect.isTrue(EnumAll.v2.test(2)); // does `is T` with `T` being `int`.
@@ -127,26 +125,23 @@
   // But you can call extension members if there is no conflict.
   Expect.equals("extension", EnumAll.v1.extension);
 
-  // The `index` and `toString` implementations are inherited from
-  // the `Enum` implementing superclass.
-  Expect.equals(3.5, StringIndexEnum.v1.index);
-  Expect.equals(3.5, StringIndexEnum.v2.index);
-  Expect.equals(0, StringIndexEnum.v1.realIndex);
-  Expect.equals(1, StringIndexEnum.v2.realIndex);
-  Expect.equals("FakeString", StringIndexEnum.v1.toString());
-  Expect.equals("FakeString", StringIndexEnum.v2.toString());
-  Expect.equals("StringIndexEnum.v1", StringIndexEnum.v1.realToString());
-  Expect.equals("StringIndexEnum.v2", StringIndexEnum.v2.realToString());
+  // The `index` implementation is inherited from the `Enum` implementing
+  // superclass, and the `toString` implementation is overridden, but
+  // available via `realToString`.
+  Expect.equals(0, OverrideEnum.v1.index);
+  Expect.equals(1, OverrideEnum.v2.index);
+  Expect.equals(0, OverrideEnum.v1.superIndex);
+  Expect.equals(1, OverrideEnum.v2.superIndex);
+  Expect.equals("FakeString", OverrideEnum.v1.toString());
+  Expect.equals("FakeString", OverrideEnum.v2.toString());
+  Expect.equals("OverrideEnum.v1", OverrideEnum.v1.realToString());
+  Expect.equals("OverrideEnum.v2", OverrideEnum.v2.realToString());
 
   // Enum elements are always distinct, even if their state doesn't differ.
-  Expect.distinct(Canonical.v1, Canonical.v2, "Canonical - type only");
-  Expect.distinct(Canonical.v2, Canonical.v3, "Canonical - no difference");
+  Expect.notIdentical(Canonical.v1, Canonical.v2, "Canonical - type only");
+  Expect.notIdentical(Canonical.v2, Canonical.v3, "Canonical - no difference");
 
-  // A `values` static constant is added only if *not* causing a conflict.
-  Expect.equals("StaticDeclaration", DeclaresValuesStatic.values);
-  Expect.equals("Declaration", DeclaresValues.v1.values);
-  Expect.equals("Mixin", InheritsValues.v1.values);
-  Expect.equals("NSM", ImplementsValues.v1.values);
+  Expect.identical(SelfRefEnum.e1, SelfRefEnum.e2.previous, "SelfRef.prev");
 }
 
 // Original syntax still works, without semicolon after values.
@@ -162,13 +157,18 @@
 // Also if using type parameters, mixins or interfaces.
 // It only matters whether there is something after the values.
 enum EnumNoSemicolon<T extends num> with ObjectMixin implements Interface {
-  v1, v2, v3
+  v1,
+  v2,
+  v3
 }
 
-
 // Allows semicolon after values, even when not needed.
 // Without trailing comma.
-enum EnumPlainSemicolon { v1, v2, v3; }
+enum EnumPlainSemicolon {
+  v1,
+  v2,
+  v3;
+}
 
 // With trailing comma.
 enum EnumPlainTrailingCommaSemicolon {
@@ -207,6 +207,7 @@
   static late var sLateVarInit = v3;
   static EnumAll? sVar;
   static EnumAll sVarInit = v3;
+
   /// Static getters, setters and methods
   static EnumAll<int, int> get staticGetSet => v3;
   static set staticGetSet(EnumAll<int, int> _) {}
@@ -215,10 +216,13 @@
   // Constructors.
   // Generative, non-redirecting, unnamed.
   const EnumAll({T? y})
-      : constructor = "unnamed", this.x = 0 as S, y = y ?? (0 as T);
+      : constructor = "unnamed",
+        this.x = 0 as S,
+        y = y ?? (0 as T);
   // Generative, non-redirecting, named.
   const EnumAll.named(this.x, {T? y, String? constructor})
-      : constructor = constructor ?? "named", y = y ?? (0 as T);
+      : constructor = constructor ?? "named",
+        y = y ?? (0 as T);
   // Generative, redirecting.
   const EnumAll.renamed(S x, {T? y})
       : this.named(x, y: y, constructor: "renamed");
@@ -251,16 +255,15 @@
     return values[newIndex]; // Can refer to `values`.
   }
 
-  // Can have non-primitive equality and hashCode.
-  int get hashCode => index;
-  bool operator==(covariant EnumAll other) => index == other.index;
-
   // Can access `this` and `super` in an instance method.
   String thisAndSuper() => "${super.toString()}:${this.toString()}";
 
   // Can be callable.
   T call<T>(T value) => value;
 
+  // Can have an `index` setter.
+  set index(int value) {}
+
   // Instance members shadow extensions.
   String get notExtension => "not extension";
 
@@ -268,7 +271,11 @@
 }
 
 extension EnumAllExtension on EnumAll {
-  String get notExtension => Expect.fail("Unreachable");
+  String get notExtension {
+    Expect.fail("Unreachable");
+    return "not";
+  }
+
   String get extension => "extension";
 }
 
@@ -280,7 +287,13 @@
   v2.named(2);
 
   final int x;
-  EnumNoUnnamedConstructor.named(this.x);
+  const EnumNoUnnamedConstructor.named(this.x);
+}
+
+enum NewNamedConstructor {
+  v1;
+
+  const NewNamedConstructor.new();
 }
 
 // Can have an unnamed factory constructor.
@@ -290,7 +303,7 @@
 
   final int x;
   factory EnumFactoryUnnamedConstructor() => v1;
-  EnumFactoryUnnamedConstructor.named(this.x);
+  const EnumFactoryUnnamedConstructor.named(this.x);
 }
 
 // Elements which do not differ in public state are still different.
@@ -299,36 +312,29 @@
   v1<int>(1),
   v2<num>(1),
   v3<num>(1);
+
   final T value;
-  Canonical(this.value);
+  const Canonical(this.value);
 }
 
 // Both `toString` and `index` are inherited from superclass.
-enum StringIndexEnum {
-  v1, v2;
-  num get index => 3.5;
-  int get realIndex => super.index;
+enum OverrideEnum {
+  v1,
+  v2;
+
+  // Cannot override index
+  int get superIndex => super.index;
   String toString() => "FakeString";
   String realToString() => super.toString();
 }
 
-enum DeclaresValuesStatic {
-  v1;
-  static String get values => "StaticDeclaration";
-}
+// An enum value expression *can* reference another enum value.
+enum SelfRefEnum {
+  e1(null),
+  e2(e1);
 
-enum DeclaresValues {
-  v1;
-  String get values => "Declaration";
-}
-
-enum InheritsValues with ValuesMixin {
-  v1;
-}
-
-enum ImplementsValues implements ValuesInterface {
-  v1;
-  dynamic noSuchMethod(i) => "NSM";
+  final SelfRefEnum? previous;
+  const SelfRefEnum(this.previous);
 }
 
 // --------------------------------------------------------------------
@@ -352,19 +358,9 @@
   String toString() => "${super.toString()}:EnumMixin<$T>";
 }
 
-abstract class Interface {
-
-}
+abstract class Interface {}
 
 abstract class GenericInterface<T> {
   // Implemented by mixins.
   bool test(Object o);
 }
-
-abstract class ValuesInterface {
-  String get values;
-}
-
-mixin ValuesMixin {
-  String get values => "Mixin";
-}
diff --git a/tests/language/enum/enhanced_enums_error_test.dart b/tests/language/enum/enhanced_enums_error_test.dart
new file mode 100644
index 0000000..b56e29c
--- /dev/null
+++ b/tests/language/enum/enhanced_enums_error_test.dart
@@ -0,0 +1,683 @@
+// 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.
+
+// Test errors required by new enhanced enum syntax.
+
+// Enums must satisfy the same requirements as their induced class.
+// That means no name conflicts, no static/instance member conflicts,
+// and no type errors.
+// Enum classes must implement their interface.
+// They cannot override `Enum.index` or have any instance member named
+// `values` or declare any name which will conflicts with a static
+// constant getter named `values`.
+//
+// An enum declaration's generative constructors can never be referenced
+// other than implicitly in creating the values and as target of redirecting
+// generative constructors. All generative constructors must be const.
+//
+// An enum class cannot override `index` or implement anything named `values`.
+
+// Helper mixins and also used as interfaces.
+mixin GetFoo {
+  int get foo => 42;
+}
+
+mixin SetFoo {
+  void set foo(int _) {}
+}
+
+mixin MethodFoo {
+  int foo() => 42;
+}
+
+mixin ValuesGetter {
+  int get values => 42;
+}
+
+mixin IndexGetter {
+  int get index => 42;
+}
+
+mixin NeverIndexGetter {
+  Never get index => throw "Never!";
+}
+
+// "You cannot have two members with the same name in the same class---be
+// they declared or inherited"
+
+// Enums inherit members of `Object` and `index`.
+// Enums implicitly declare `values` and their enum values (as static const
+// getters.)
+
+enum ConflictInstanceMembers {
+  e1;
+  int get foo => 42;
+  int foo() => 37;
+  //  ^^^
+  // [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
+  // [cfe] 'foo' is already declared in this scope.
+}
+
+// "It is an error if you have a static member named $m$ in your class
+// and an instance member of the same basename"
+enum ConflictStaticGetterInstanceMembers {
+  e1;
+  static int get foo => 42;
+  //             ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  int foo() => 37;
+  //  ^
+  // [cfe] 'foo' is already declared in this scope.
+}
+
+enum ConflictStaticSetterInstanceMembers {
+  e1;
+  static void set foo(int _) {}
+  //              ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  // [cfe] This static member conflicts with an instance member.
+  int foo() => 37;
+  //  ^^^
+  // [cfe] unspecified
+}
+
+enum ConflictStaticInstanceProperty2 {
+  e1;
+  int get foo => 42;
+  //      ^^^
+  // [cfe] unspecified
+  static void set foo(int _) {}
+  //              ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  // [cfe] This static member conflicts with an instance member.
+}
+
+// "It is an error if you have a static getter $v$
+// and an instance setter \code{$v$=}"
+enum ConflictStaticInstanceProperty {
+  e1;
+  static int get foo => 42;
+  //             ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  // [cfe] This static member conflicts with an instance member.
+  void set foo(int _) {}
+  //       ^^^
+  // [cfe] unspecified
+}
+
+
+enum ConflictStaticInheritedFoo with MethodFoo {
+  e1;
+  static int get foo => 42;
+  //             ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  // [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum ConflictInheritedEnumValue with MethodFoo {
+  foo;
+//^^^
+// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+// [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum ConflictStaticEnumValues {
+  e1,
+//^^
+// [cfe] unspecified
+  e1,
+//^^
+// [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
+// [cfe] 'e1' is already declared in this scope.
+  ;
+}
+
+enum ConflictStaticEnumValuesLooksDifferent {
+  e1(),
+//^^
+// [cfe] unspecified
+  e1.value(42),
+//^^
+// [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
+// [cfe] 'e1' is already declared in this scope.
+  ;
+  const ConflictStaticEnumValuesLooksDifferent();
+  const ConflictStaticEnumValuesLooksDifferent.value( dynamic_);
+}
+
+enum ConflictInstanceGetterInheritedFooMethod with MethodFoo {
+  e1;
+  int get foo => 42;
+  //      ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_FIELD_AND_METHOD
+  // [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum ConflictStaticInstanceImplicitValues {
+  e1;
+  int get values => 42;
+  //      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.VALUES_DECLARATION_IN_ENUM
+  // [cfe] Enums can't contain declarations of members with the name 'values'.
+}
+
+enum ConflictStaticInstanceEnumValue {
+  e1;
+//^^
+// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  int get e1 => 42;
+  //      ^
+  // [cfe] 'e1' is already declared in this scope.
+}
+
+enum ConflictEnumValueInheritedIndex {
+  index;
+//^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+// [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum ConflictEnumValueInheritedToString {
+  toString;
+//^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+// [cfe] 'toString' is already declared in this scope.
+}
+
+enum ConflictEnumValueImplicitValues {
+  values;
+//^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.VALUES_DECLARATION_IN_ENUM
+// [cfe] unspecified
+}
+
+enum ConflictEnumValueInheritedFoo with MethodFoo {
+  foo;
+//^^^
+// [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+// [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum ConflictClassGetterSetterTypeInstance {
+  e1;
+  num get foo => 42;
+  //      ^^^
+  // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
+  // [cfe] The type 'num' of the getter 'ConflictClassGetterSetterTypeInstance.foo' is not a subtype of the type 'int' of the setter 'ConflictClassGetterSetterTypeInstance.foo'.
+
+  // Type of setter parameter must be subtype of type of getter.
+  void set foo(int _) {}
+}
+
+enum ConflictClassGetterSetterTypeStatic {
+  e1;
+  static num get foo => 42;
+  //             ^^^
+  // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
+  // [cfe] The type 'num' of the getter 'ConflictClassGetterSetterTypeStatic.foo' is not a subtype of the type 'int' of the setter 'ConflictClassGetterSetterTypeStatic.foo'.
+
+  // Type of setter parameter must be subtype of type of getter.
+  static void set foo(int _) {}
+}
+
+enum NoConflictClassEnumValueStaticSetter {
+  e1;
+
+  static void set e1(NoConflictClassEnumValueStaticSetter _) {}
+}
+
+enum ConflictClassEnumValueStaticSetterType {
+  e1;
+//^^
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
+// [cfe] The type 'ConflictClassEnumValueStaticSetterType' of the getter 'ConflictClassEnumValueStaticSetterType.e1' is not a subtype of the type 'int' of the setter 'ConflictClassEnumValueStaticSetterType.e1'.
+
+  // Type of setter parameter must be subtype of type of getter.
+  static void set e1(int _) {}
+}
+
+enum ConflictTypeParameterMember<foo> {
+  //                             ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+  e1;
+  int get foo => 42;
+  //      ^
+  // [cfe] Conflicts with type variable 'foo'.
+}
+
+enum ConflictTypeParameterValues<values> {
+  //                             ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+  // [cfe] unspecified
+  e1;
+}
+
+enum ConflictTypeParameterEnumValue<e1> {
+  //                                ^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_TYPE_VARIABLE_AND_MEMBER
+  // [cfe] unspecified
+  e1;
+//^^
+// [cfe] unspecified
+}
+
+enum ConflictTypeParameters<T, T> {
+  //                           ^
+  // [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
+  // [cfe] A type variable can't have the same name as another.
+  e1;
+}
+
+enum ConflictClassTypeParameter<ConflictClassTypeParameter> {
+  //                            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
+  // [cfe] A type variable can't have the same name as its enclosing declaration.
+  e1;
+}
+
+// "If you define an instance member named $m$,
+//  and your superclass has an instance member of the same name,
+//  they override each other."
+
+enum OverrideInheritedMemberOverride with MethodFoo {
+  e1;
+  int foo(int x) => x; // super.foo is nullary.
+  //  ^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  // [cfe] The method 'OverrideInheritedMemberOverride.foo' has more required arguments than those of overridden method '_Enum with MethodFoo.foo'.
+}
+
+enum OverrideInheritedMemberDifferentType with GetFoo {
+  e1;
+  int foo(int x) => x;
+  //  ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_METHOD_AND_FIELD
+  // [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum ImplementInheritedMemberDifferentType implements GetFoo {
+  e1;
+  int foo(int x) => x;
+  //  ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_METHOD_AND_FIELD
+  // [cfe] unspecified
+}
+
+enum OverrideInheritedParameterTypeOverride with SetFoo {
+  e1;
+  void set foo(Never n) {} // Invalid parameter override.
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
+  //                 ^
+  // [cfe] The parameter 'n' of the method 'OverrideInheritedParameterTypeOverride.foo' has type 'Never', which does not match the corresponding type, 'int', in the overridden method, '_Enum with SetFoo.foo'.
+}
+
+// "Setters, getters and operators never have
+//  optional parameters of any kind"
+
+enum DeclareOperatorOptional {
+  e1;
+  int operator+([int? x]) => x ?? 0;
+  //             ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+  //                  ^
+  // [cfe] An operator can't have optional parameters.
+}
+
+enum DeclareSetterOptional {
+  e1;
+  void set foo([int? x]) {}
+  //       ^^^
+  // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
+  //          ^
+  // [cfe] A setter should have exactly one formal parameter.
+}
+
+// "The identifier of a named constructor cannot be the same as
+//  the basename of a static member declared in the same class"
+
+enum ConflictConstructorNameStatic {
+  e1.foo();
+  const ConflictConstructorNameStatic.foo();
+  //    ^
+  // [cfe] Conflicts with member 'foo'.
+  //                                  ^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
+  static int get foo => 42;
+  //             ^^^
+  // [cfe] Conflicts with constructor 'ConflictConstructorNameStatic.foo'.
+}
+
+enum ConflictConstructorNameStaticEnumValue {
+  e1.e1();
+//^^
+// [cfe] Conflicts with constructor 'ConflictConstructorNameStaticEnumValue.e1'.
+  const ConflictConstructorNameStaticEnumValue.e1();
+  //    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  // [cfe] Conflicts with member 'e1'.
+  //                                           ^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
+}
+
+// "It is an error if a member has the same name as its enclosing class"
+
+enum ConflictClassStatic {
+  e1;
+//^
+// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+  static int ConflictClassStatic() => 37;
+//^^^^^^
+// [analyzer] SYNTACTIC_ERROR.STATIC_CONSTRUCTOR
+// [cfe] Constructors can't be static.
+//       ^^^
+// [analyzer] SYNTACTIC_ERROR.CONSTRUCTOR_WITH_RETURN_TYPE
+// [cfe] Constructors can't have a return type.
+//           ^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR
+// [cfe] Generative enum constructors must be marked as 'const'.
+//                                 ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATIVE_CONSTRUCTOR
+//                                    ^^
+// [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
+// [cfe] Constructors can't have a return type.
+}
+
+enum ConflictClassInstance {
+  e1;
+//^
+// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
+  int ConflictClassInstance() => 37;
+//^^^
+// [analyzer] SYNTACTIC_ERROR.CONSTRUCTOR_WITH_RETURN_TYPE
+// [cfe] Constructors can't have a return type.
+//    ^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR
+// [cfe] Generative enum constructors must be marked as 'const'.
+//                            ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.RETURN_IN_GENERATIVE_CONSTRUCTOR
+//                               ^^
+// [analyzer] COMPILE_TIME_ERROR.RETURN_OF_INVALID_TYPE
+// [cfe] Constructors can't have a return type.
+}
+
+enum ConflictClassEnumValue {
+  ConflictClassEnumValue;
+//^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING
+// [cfe] Name of enum constant 'ConflictClassEnumValue' can't be the same as the enum's own name.
+}
+
+// Has conflict with implicitly inserted `values` member.
+enum values {
+  // ^^^^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  e1;
+}
+
+// "It is an error if a concrete class does not implement some member
+//  of its interface, and there is no non-trivial \code{noSuchMethod}"
+
+enum UnimplementedInterface {
+  // ^^^^^^^^^^^^^^^^^^^^^^
+  // [cfe] The non-abstract class 'UnimplementedInterface' is missing implementations for these members:
+  e1;
+  int foo();
+//^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.ENUM_WITH_ABSTRACT_MEMBER
+}
+
+enum UnimplementedInterfaceInherited implements MethodFoo {
+  // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+  // [cfe] The non-abstract class 'UnimplementedInterfaceInherited' is missing implementations for these members:
+  e1;
+}
+
+enum ImplementedInterface with MethodFoo {
+  e1;
+  int foo(); // Abstract members are allowed.
+}
+
+enum ImplementedInterfaceNSM {
+  e1;
+  int foo(); // Abstract members are allowed.
+  dynamic noSuchMethod(i) => 42;
+}
+
+// Primitive Equality/HashCode.
+// Enums must not override `==` or `hashCode`.
+
+enum OverridesEquals {
+  e1;
+
+  bool operator==(Object other) => identical(e1, other);
+  //   ^^^^^^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+enum OverridesHashCode {
+  e1;
+
+  int get hashCode => 42;
+  //      ^^^^^^^^
+  // [cfe] unspecified
+  // [analyzer] unspecified
+}
+
+// Invalid syntax that the compiled *should* recover from.
+abstract enum CannotBeAbstract {
+// [error column 1, length 8]
+// [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER
+// [cfe] Can't have modifier 'abstract' here.
+  e1;
+}
+
+// Cannot reference generative constructors of enum classes.
+// Never allowed to reference by ClassName[.name],
+// only implicitly in value declarations and `this`[.name] in
+// redirecting generative constructors.
+// All ClassName[.name] references are errors.
+enum NoConstructorCalls {
+  e1(42),
+  e2.ignore(NoConstructorCalls(1)),
+  //        ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+  // [cfe] Enums can't be instantiated.
+  ;
+
+  final int x;
+
+  const NoConstructorCalls(this.x);
+  const NoConstructorCalls.ignore(dynamic _) : x = 0;
+
+  // Only valid use, as target of redirecting generative constructor.
+  const NoConstructorCalls.redirect() : this(1);
+  const NoConstructorCalls.redirectNamed() : this.ignore(0);
+
+  const NoConstructorCalls.invalidRedirect()
+       : this.ignore(NoConstructorCalls(1));
+  //                 ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+  //                 ^^^^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_CONSTANT
+  // [cfe] Enums can't be instantiated.
+
+  // Generative constructors must be const.
+  NoConstructorCalls.notConst(this.x);
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR
+// [cfe] Generative enum constructors must be marked as 'const'.
+
+  // As usual, redirecting generative constructors must redirect to
+  // generative constructors.
+  const NoConstructorCalls.badRedirect() : this.factory();
+  //    ^
+  // [cfe] Final field 'x' is not initialized by this constructor.
+  //                                       ^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR
+  // [cfe] Couldn't find constructor 'NoConstructorCalls.factory'.
+  //                                            ^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_NON_CONST_CONSTRUCTOR
+
+  factory NoConstructorCalls.factory() => e1; // Valid.
+
+  // Cannot reference generative constructors from factory constructors.
+  factory NoConstructorCalls.badFactory() => NoConstructorCalls(2);
+  //                                         ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+  // [cfe] Enums can't be instantiated.
+
+  factory NoConstructorCalls.badFactoryRedirect(int x) = NoConstructorCalls;
+  //                                                     ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+  // [cfe] Enum factory constructors can't redirect to generative constructors.
+
+  static const NoConstructorCalls e3 = NoConstructorCalls(3);
+  //                                   ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+  // [cfe] Enums can't be instantiated.
+
+  static void uses() {
+    Function f = NoConstructorCalls.new; // No tearoffs.
+    //           ^^^^^^^^^^^^^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+    //                              ^
+    // [cfe] Enum constructors can't be torn off.
+
+    Function g = NoConstructorCalls.ignore; // No tearoffs.
+    //           ^^^^^^^^^^^^^^^^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+    //                              ^
+    // [cfe] Enum constructors can't be torn off.
+
+    const c1 = NoConstructorCalls(0);
+    //         ^^^^^^^^^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+    // [cfe] Enums can't be instantiated.
+
+    var v1 = new NoConstructorCalls(0);
+    //           ^^^^^^^^^^^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
+    // [cfe] Enums can't be instantiated.
+  }
+}
+
+enum DeclaresInstanceValues {
+  e1;
+  int get values => 42;
+  //      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.VALUES_DECLARATION_IN_ENUM
+  // [cfe] Enums can't contain declarations of members with the name 'values'.
+}
+
+enum DeclaresStaticValues {
+  e1;
+  static int get values => 42;
+  //             ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.VALUES_DECLARATION_IN_ENUM
+  // [cfe] Enums can't contain declarations of members with the name 'values'.
+}
+
+enum InheritsValues with ValuesGetter {
+  // ^^^^^^^^^^^^^^
+  // [cfe] Can't declare a member that conflicts with an inherited one.
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_ENUM_VALUES
+  e1;
+}
+
+enum ImplementsValues implements ValuesGetter {
+  // ^^^^^^^^^^^^^^^^
+  // [cfe] Can't declare a member that conflicts with an inherited one.
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_ENUM_VALUES
+  e1;
+
+  noSuchMethod(i) => 42;
+}
+
+enum DeclaresInstanceIndex {
+  e1;
+  int get index => 42;
+  //      ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+enum DeclaresStaticIndex {
+  e1;
+  static int get index => 42; // Conflicts with inherited instance member.
+  //             ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONFLICTING_STATIC_AND_INSTANCE
+  // [cfe] Can't declare a member that conflicts with an inherited one.
+}
+
+enum InheritsIndex with IndexGetter {
+  // ^^^^^^^^^^^^^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  e1;
+}
+
+// No problem, implementation is not overridden.
+enum ImplementsIndex implements IndexGetter {
+  e1;
+}
+
+enum DeclaresNeverIndex {
+  // ^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INVALID_IMPLEMENTATION_OVERRIDE
+  // [cfe] The implementation of 'index' in the non-abstract class 'DeclaresNeverIndex' does not conform to its interface.
+  e1;
+
+  Never get index;
+}
+
+enum ImplementsNeverIndex {
+  e1;
+
+  Never get index => throw "Never!";
+  //        ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+enum NSMImplementsNeverIndex implements NeverIndexGetter {
+  // ^^^^^^
+  // [analyzer] unspecified
+  // [cfe] The implementation of 'index' in the non-abstract class 'NSMImplementsNeverIndex' does not conform to its interface.
+  e1;
+
+  noSuchMethod(i) => throw "Never!";
+}
+
+// Cannot have cyclic references between constants.
+enum CyclicReference {
+//   ^
+// [cfe] Constant evaluation error:
+  e1(e2),
+//^
+// [cfe] Constant evaluation error:
+//^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
+  e2(e1);
+//^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
+  final CyclicReference other;
+  const CyclicReference(this.other);
+}
+
+// Since `values` contains `e1`,
+// we can't have a reference in the other direction.
+enum CyclicReferenceValues {
+//   ^
+// [cfe] Constant evaluation error:
+  e1(values);
+//^^
+// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
+  final List<CyclicReferenceValues> list;
+  const CyclicReferenceValues(this.list);
+}
+
+void main() {}
diff --git a/tests/language/enum/enhanced_enums_subtype_error_test.dart b/tests/language/enum/enhanced_enums_subtype_error_test.dart
new file mode 100644
index 0000000..728c227
--- /dev/null
+++ b/tests/language/enum/enhanced_enums_subtype_error_test.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.
+
+// Test errors required by new enhanced enum syntax.
+
+// Classes which implement `Enum`, but are not `enum` declarations,
+// have extra requirements.
+// Such a class is assumed to be either an interface intended to be
+// implemented by an `enum` declaration,
+// or a mixin intended to be mixed into an `enum` declaration.
+// As such, we enforce restrictions which would definitely make
+// that `enum` declaration invalid.
+//
+// * Such a class cannot be non-abstract.
+// * It cannot implement `index`, `hashCode`, `==` or `values`.
+
+class NonAbstract implements Enum {
+  //  ^
+  // [cfe] Non-abstract class 'NonAbstract' has 'Enum' as a superinterface.
+  //                         ^^^^
+  // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE
+
+  int get index => 42;
+}
+
+// Cannot contain a `values` member
+abstract class AbstractImplementsWithValues implements Enum {
+  int get values => 42;
+  //      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_ENUM_VALUES
+  // [cfe] 'AbstractImplementsWithValues' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+}
+
+abstract class AbstractExtendsWithValues extends Enum {
+  int get values => 42;
+  //      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_ENUM_VALUES
+  // [cfe] 'AbstractExtendsWithValues' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+}
+
+abstract class AbstractImplementsWithIndex implements Enum {
+  int get index => 42;
+  //      ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+abstract class AbstractExtendsWithIndex extends Enum {
+  int get index => 42;
+  //      ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+mixin MixinWithIndex on Enum {
+  int get index => 42;
+  //      ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+mixin MixinWithIndex2 implements Enum {
+  int get index => 42;
+  //      ^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+mixin MixinWithValues on Enum {
+  int get values => 42;
+  //      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_ENUM_VALUES
+  // [cfe] 'MixinWithValues' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+}
+
+mixin MixinWithValues2 implements Enum {
+  int get values => 42;
+  //      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_ENUM_VALUES
+  // [cfe] 'MixinWithValues2' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+}
+
+// Can't implement Enum and declare hashCode/==.
+abstract class ClassWithEquals implements Enum {
+  bool operator ==(Object other) => true;
+  //            ^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  //      ^^^^^^^^
+  // [cfe] unspecified
+}
+
+mixin MixinWithEquals implements Enum {
+  bool operator ==(Object other) => true;
+  //            ^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  //      ^^^^^^^^
+  // [cfe] unspecified
+}
+
+abstract class ClassWithHashCode implements Enum {
+  int get hashCode => 0;
+  //      ^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+mixin MixinWithHashCode implements Enum {
+  int get hashCode => 0;
+  //      ^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+abstract class SuperclassWithEquals {
+  bool operator ==(Object other) => true;
+}
+
+abstract class SuperclassWithHashCode {
+  int get hashCode => 0;
+}
+
+// Can't implement `Enum` and inherit concrete hashCode/==.
+abstract class ClassSuperEquals extends SuperclassWithEquals implements Enum {
+  //           ^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+abstract class ClassSuperHash extends SuperclassWithHashCode implements Enum {
+  //           ^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ILLEGAL_CONCRETE_ENUM_MEMBER
+  // [cfe] unspecified
+}
+
+// No class can implement an actual enum.
+
+abstract class ExtendsEnum extends MyEnum {
+  //           ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  // [cfe] The superclass, 'MyEnum', has no unnamed constructor that takes no arguments.
+  //                               ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
+}
+
+abstract class ImplementsEnum implements MyEnum {
+  //           ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  //                                     ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+}
+
+// It's not a mixin!
+abstract class MixesInEnum with MyEnum {
+  //           ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  // [cfe] Can't use 'MyEnum' as a mixin because it has constructors.
+  //                            ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
+}
+
+mixin MixinImplementsEnum implements MyEnum {
+  //  ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  //                                 ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+}
+
+mixin MixinOnEnum on MyEnum {
+  //  ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  //                 ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE
+}
+
+enum EnumImplementsEnum implements MyEnum {
+  // ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  //                               ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+  e1;
+}
+
+enum EnumMixesInEnum with MyEnum {
+  // ^
+  // [cfe] 'MyEnum' is an enum and can't be extended or implemented.
+  // [cfe] Can't use 'MyEnum' as a mixin because it has constructors.
+  //                      ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
+  e1;
+}
+
+void main() {}
+
+enum MyEnum {
+  e1;
+}
diff --git a/tests/language/enum/enum_test.dart b/tests/language/enum/enum_test.dart
index 4deb861..9678587 100644
--- a/tests/language/enum/enum_test.dart
+++ b/tests/language/enum/enum_test.dart
@@ -5,13 +5,18 @@
 import 'package:expect/expect.dart';
 
 enum Enum1 { _ }
+
 enum Enum2 { A }
+
 enum Enum3 { B, C }
+
 enum Enum4 {
   D,
   E,
 }
+
 enum Enum5 { F, G, H }
+
 enum _Enum6 { I, _J }
 
 enum _IsNot { IsNot }
diff --git a/tests/language/enum/is_keyword_runtime_test.dart b/tests/language/enum/is_keyword_runtime_test.dart
index 2e9a471..3f24d63 100644
--- a/tests/language/enum/is_keyword_runtime_test.dart
+++ b/tests/language/enum/is_keyword_runtime_test.dart
@@ -8,6 +8,4 @@
 // Test that `enum` is considered a keyword and therefore invalid as the name of
 // declarations.
 
-main() {
-
-}
+main() {}
diff --git a/tests/language/enum/private_runtime_1_test.dart b/tests/language/enum/private_runtime_1_test.dart
index 34af126..27b4b74 100644
--- a/tests/language/enum/private_runtime_1_test.dart
+++ b/tests/language/enum/private_runtime_1_test.dart
@@ -21,5 +21,4 @@
 main() {
   Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
   Expect.equals('Enum2._A,Enum2._B', Enum2.values.join(','));
-
 }
diff --git a/tests/language/enum/private_runtime_test.dart b/tests/language/enum/private_runtime_test.dart
index adc8d7a..e479dfd 100644
--- a/tests/language/enum/private_runtime_test.dart
+++ b/tests/language/enum/private_runtime_test.dart
@@ -20,6 +20,4 @@
 
 main() {
   Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
-
-
 }
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 7b214ff..1c44dac 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -13,6 +13,7 @@
 closure/minify_closure_variable_collision_test: SkipByDesign # Regression test for dart2js
 
 [ $builder_tag == dart2js_production && $compiler == dart2js ]
+call/implicit_tearoff_exceptions_test: SkipByDesign # No argument type checks in production mode, issue 45528
 control_flow_collections/for_non_bool_condition_test: Crash # Issue 36442
 regress/regress45428_test: SkipByDesign # No argument type checks in production mode, issue 45528
 
diff --git a/tests/language/language_dart2wasm.status b/tests/language/language_dart2wasm.status
new file mode 100644
index 0000000..3dea313
--- /dev/null
+++ b/tests/language/language_dart2wasm.status
@@ -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.
+# Sections in this file should contain "$compiler == dart2wasm".
+
+[ $compiler == dart2wasm ]
+vm/*: SkipByDesign # Tests for the VM.
+
+[ $compiler == dart2wasm && $runtime == d8 ]
+import/conditional_string_test: SkipByDesign # No XHR in d8
diff --git a/tests/language/named_arguments_anywhere/all_kinds_test.dart b/tests/language/named_arguments_anywhere/all_kinds_test.dart
index 38ea69e..059f3e6 100644
--- a/tests/language/named_arguments_anywhere/all_kinds_test.dart
+++ b/tests/language/named_arguments_anywhere/all_kinds_test.dart
@@ -5,8 +5,6 @@
 // Check that placing a named argument anywhere in the argument list works for
 // all kinds of invocations.
 
-// SharedOptions=--enable-experiment=named-arguments-anywhere
-
 import "package:expect/expect.dart";
 
 List<Object?> arguments = [];
@@ -17,8 +15,7 @@
 }
 
 void runAndCheckEvaluationOrder(
-    List<Object?> expectedArguments,
-    void Function() functionToRun) {
+    List<Object?> expectedArguments, void Function() functionToRun) {
   arguments.clear();
   functionToRun();
   Expect.listEquals(expectedArguments, arguments);
@@ -32,15 +29,20 @@
     Expect.equals(3.14, w);
   }
 
-  A.redir1() : this(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+  A.redir1()
+      : this(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
 
-  A.redir2() : this(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  A.redir2()
+      : this(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
 
-  A.redir3() : this(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  A.redir3()
+      : this(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
 
-  A.redir4() : this(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  A.redir4()
+      : this(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
 
-  A.redir5() : this(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  A.redir5()
+      : this(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
 
   A.redir6() : this(evaluate(1), w: evaluate(3.14), evaluate("2"));
 
@@ -92,311 +94,341 @@
 
   // StaticInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      foo(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    foo(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      foo(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    foo(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      foo(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    foo(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // FactoryConstructorInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      A.foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    A.foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      A.foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    A.foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      A.foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    A.foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      B.foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    B.foo(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      B.foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    B.foo(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      B.foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    B.foo(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      B.foo(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    B.foo(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      B.foo(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    B.foo(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      B.foo(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    B.foo(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // ConstructorInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      A(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    A(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      A(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    A(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      A(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    A(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      B(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    B(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      B(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    B(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      B(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    B(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      B(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    B(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      B(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    B(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      B(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    B(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // DynamicInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      d(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    d(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      d(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    d(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      d(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    d(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      d(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    d(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      d(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    d(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      d(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    d(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // FunctionInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      f(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    f(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      f(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    f(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      f(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    f(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      f(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    f(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      f(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    f(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      f(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    f(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // InstanceGetterInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      a.property(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    a.property(evaluate(1), evaluate("2"),
+        z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      a.property(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    a.property(
+        evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      a.property(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    a.property(
+        z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      a.property(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    a.property(
+        w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      a.property(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    a.property(
+        evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      a.property(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    a.property(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // InstanceInvocation.
   runAndCheckEvaluationOrder([a, 1, "2", false, 3.14], () {
-      evaluate(a).bar(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    evaluate(a)
+        .bar(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([a, 1, false, "2", 3.14], () {
-      evaluate(a).bar(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    evaluate(a)
+        .bar(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([a, false, 1, "2", 3.14], () {
-      evaluate(a).bar(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    evaluate(a)
+        .bar(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([a, 3.14, 1, "2", false], () {
-      evaluate(a).bar(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    evaluate(a)
+        .bar(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([a, 1, 3.14, "2", false], () {
-      evaluate(a).bar(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    evaluate(a)
+        .bar(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([a, 1, 3.14, "2"], () {
-      evaluate(a).bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    evaluate(a).bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // LocalFunctionInvocation.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      local(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    local(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      local(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    local(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      local(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    local(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      local(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    local(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      local(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    local(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      local(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    local(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // Redirecting generative constructors.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      A.redir1();
+    A.redir1();
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      A.redir2();
+    A.redir2();
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      A.redir3();
+    A.redir3();
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      A.redir4();
+    A.redir4();
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      A.redir5();
+    A.redir5();
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      A.redir6();
+    A.redir6();
   });
 
   // Redirecting factory constructors.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      A.redirFactory(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    A.redirFactory(evaluate(1), evaluate("2"),
+        z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      A.redirFactory(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    A.redirFactory(
+        evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      A.redirFactory(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    A.redirFactory(
+        z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      A.redirFactory(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    A.redirFactory(
+        w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      A.redirFactory(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    A.redirFactory(
+        evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      A.redirFactory(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    A.redirFactory(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 
   // Constructor super initializers.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      Test.super1();
+    Test.super1();
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      Test.super2();
+    Test.super2();
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      Test.super3();
+    Test.super3();
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      Test.super4();
+    Test.super4();
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      Test.super5();
+    Test.super5();
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      Test.super6();
+    Test.super6();
   });
 
   // Implicit .call insertion.
   runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-      a(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+    a(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-      a(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+    a(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-      a(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+    a(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
   });
   runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-      a(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+    a(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-      a(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+    a(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   });
   runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-      a(evaluate(1), w: evaluate(3.14), evaluate("2"));
+    a(evaluate(1), w: evaluate(3.14), evaluate("2"));
   });
 }
 
 class Test extends A {
   Test() : super(1, "2", z: false, w: 3.14);
 
-  Test.super1() : super(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
-  Test.super2() : super(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
-  Test.super3() : super(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
-  Test.super4() : super(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
-  Test.super5() : super(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+  Test.super1()
+      : super(evaluate(1), evaluate("2"),
+            z: evaluate(false), w: evaluate(3.14));
+  Test.super2()
+      : super(
+            evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+  Test.super3()
+      : super(
+            z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+  Test.super4()
+      : super(
+            w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+  Test.super5()
+      : super(
+            evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
   Test.super6() : super(evaluate(1), w: evaluate(3.14), evaluate("2"));
 
   test() {
     runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-        super.bar(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+      super.bar(evaluate(1), evaluate("2"),
+          z: evaluate(false), w: evaluate(3.14));
     });
     runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-        super.bar(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+      super.bar(
+          evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
     });
     runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-        super.bar(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+      super.bar(
+          z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
     });
     runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-        super.bar(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+      super.bar(
+          w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
     });
     runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-        super.bar(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+      super.bar(
+          evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
     });
     runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-        super.bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
+      super.bar(evaluate(1), w: evaluate(3.14), evaluate("2"));
     });
 
     // Using super.call() implicitly.
     runAndCheckEvaluationOrder([1, "2", false, 3.14], () {
-        super(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
+      super(evaluate(1), evaluate("2"), z: evaluate(false), w: evaluate(3.14));
     });
     runAndCheckEvaluationOrder([1, false, "2", 3.14], () {
-        super(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
+      super(evaluate(1), z: evaluate(false), evaluate("2"), w: evaluate(3.14));
     });
     runAndCheckEvaluationOrder([false, 1, "2", 3.14], () {
-        super(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
+      super(z: evaluate(false), evaluate(1), evaluate("2"), w: evaluate(3.14));
     });
     runAndCheckEvaluationOrder([3.14, 1, "2", false], () {
-        super(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
+      super(w: evaluate(3.14), evaluate(1), evaluate("2"), z: evaluate(false));
     });
     runAndCheckEvaluationOrder([1, 3.14, "2", false], () {
-        super(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
+      super(evaluate(1), w: evaluate(3.14), evaluate("2"), z: evaluate(false));
     });
     runAndCheckEvaluationOrder([1, 3.14, "2"], () {
-        super(evaluate(1), w: evaluate(3.14), evaluate("2"));
+      super(evaluate(1), w: evaluate(3.14), evaluate("2"));
     });
   }
 }
@@ -404,9 +436,10 @@
 extension E on A {
   test() {
     runAndCheckEvaluationOrder(["1", 2], () {
-        method(foo: evaluate("1"), evaluate(2)); // This call.
+      method(foo: evaluate("1"), evaluate(2)); // This call.
     });
   }
+
   method(int bar, {String? foo}) {
     Expect.equals(2, bar);
     Expect.equals("1", foo);
diff --git a/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart b/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart
index 52adfbc..e8a4745 100644
--- a/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart
+++ b/tests/language/named_arguments_anywhere/order_side_effects_error_test.dart
@@ -5,8 +5,6 @@
 // Checks that compile-time errors in the arguments are reported when the named
 // arguments are placed before the positional.
 
-// SharedOptions=--enable-experiment=named-arguments-anywhere
-
 const a42 = const A(42);
 
 class A {
diff --git a/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart b/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart
index 9dd9e93..cc87abc 100644
--- a/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart
+++ b/tests/language/named_arguments_anywhere/order_side_effects_ok_test.dart
@@ -5,8 +5,6 @@
 // Checks that typeinference on arguments continues working after their order is
 // changed.
 
-// SharedOptions=--enable-experiment=named-arguments-anywhere
-
 import "package:expect/expect.dart";
 
 Type? argument = null;
@@ -15,7 +13,8 @@
   argument = X;
 }
 
-void runAndCheckForTypeArgument(Type expectedArgument, void Function() functionToRun) {
+void runAndCheckForTypeArgument(
+    Type expectedArgument, void Function() functionToRun) {
   argument = null;
   functionToRun();
   Expect.equals(expectedArgument, argument);
@@ -44,29 +43,29 @@
 
 void main() {
   runAndCheckForTypeArgument(dynamic, () {
-      fooGeneric(const BGeneric(), y: const BGeneric());
+    fooGeneric(const BGeneric(), y: const BGeneric());
   });
   runAndCheckForTypeArgument(dynamic, () {
-      fooGeneric(y: const BGeneric(), const BGeneric());
+    fooGeneric(y: const BGeneric(), const BGeneric());
   });
   runAndCheckForTypeArgument(int, () {
-      fooGeneric(const BGeneric<int>(), y: const BGeneric<List<int>>());
+    fooGeneric(const BGeneric<int>(), y: const BGeneric<List<int>>());
   });
   runAndCheckForTypeArgument(String, () {
-      fooGeneric(y: const BGeneric<List<String>>(), const BGeneric<String>());
+    fooGeneric(y: const BGeneric<List<String>>(), const BGeneric<String>());
   });
 
   runAndCheckForTypeArgument(double, () {
-      fooFunction(42, y: bar);
+    fooFunction(42, y: bar);
   });
   runAndCheckForTypeArgument(double, () {
-      fooFunction(y: bar, 42);
+    fooFunction(y: bar, 42);
   });
 
   runAndCheckForTypeArgument(String, () {
-      fooFunctionGeneric(42, y: (String x) {});
+    fooFunctionGeneric(42, y: (String x) {});
   });
   runAndCheckForTypeArgument(num, () {
-      fooFunctionGeneric(y: (num x) {}, 42);
+    fooFunctionGeneric(y: (num x) {}, 42);
   });
 }
diff --git a/tests/language/regress/regress48304_test.dart b/tests/language/regress/regress48304_test.dart
new file mode 100644
index 0000000..04de267
--- /dev/null
+++ b/tests/language/regress/regress48304_test.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.
+
+import 'package:expect/expect.dart';
+
+final String expected = '$A';
+
+abstract class B {
+  call<T>();
+}
+
+class C implements B {
+  call<T>() => '$T';
+}
+
+abstract class A {}
+
+class Wrapper {
+  Wrapper(this.b, this.call);
+  final B b;
+  final B call;
+}
+
+void main() {
+  B b = C();
+  Expect.equals(b<A>(), expected);
+  Expect.equals(Wrapper(b, b).b<A>(), expected);
+  Expect.equals((Wrapper(b, b).b)<A>(), expected);
+  Expect.equals(Wrapper(b, b).call<A>(), expected);
+  Expect.equals((Wrapper(b, b).call)<A>(), expected);
+}
diff --git a/tests/language/super/call3_test.dart b/tests/language/super/call3_test.dart
index 7c43edf..a3b810d 100644
--- a/tests/language/super/call3_test.dart
+++ b/tests/language/super/call3_test.dart
@@ -7,8 +7,7 @@
 import "package:expect/expect.dart";
 
 class A {
-  A(
-    this.x
+  A(this.x
 //  ^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD
 //       ^
@@ -25,19 +24,17 @@
 class B2 extends A {
   B2();
 //^^
-// [analyzer] COMPILE_TIME_ERROR.NO_DEFAULT_SUPER_CONSTRUCTOR
+// [analyzer] COMPILE_TIME_ERROR.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS
 // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments.
   B2.named() : this.x = 499;
 //^^^^^^^^
-// [analyzer] COMPILE_TIME_ERROR.NO_DEFAULT_SUPER_CONSTRUCTOR
+// [analyzer] COMPILE_TIME_ERROR.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS
 // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments.
   var x;
 }
 
 class C {
-  C
-  .named
-  ();
+  C.named();
   final foo = 499;
 }
 
diff --git a/tests/language/type/constants_test.dart b/tests/language/type/constants_test.dart
index 560e485..2a35320 100644
--- a/tests/language/type/constants_test.dart
+++ b/tests/language/type/constants_test.dart
@@ -15,6 +15,9 @@
 
 const Type numType = num;
 
+const bool fromEnvironment =
+    const bool.fromEnvironment("foo", defaultValue: true);
+
 Type argumentType<T>() => T;
 
 void testSwitch<T extends MyType>(args) {
@@ -22,7 +25,7 @@
   for (int i = 0; i < types.length; i++) {
     switch (types[i]) {
       // Must be type literal or not override `==`.
-      case const MyType(): //# 01: compile-time error
+      case const MyType(0): //# 01: compile-time error
 
       // Must not be type variable.
       case T: //# 02: compile-time error
@@ -39,6 +42,8 @@
         throw "unreachable: num #$i";
       case MyType:
         break;
+      // Must be type literal or not override `==`.
+      case fromEnvironment ? const MyType(1) : Type: //# 07: compile-time error
       default:
         throw "unreachable: default #$i";
     }
@@ -48,7 +53,7 @@
 void testMaps<T extends MyType>(args) {
   const map = {
     // Must be type literal or not override `==`.
-    MyType(): 0, //# 04: compile-time error
+    MyType(0): 0, //# 04: compile-time error
 
     // Must not be type variable.
     T: 0, //# 05: compile-time error
@@ -61,6 +66,8 @@
     int: 1,
     String: 2,
     numType: 3,
+    // Must be type literal or not override `==`.
+    fromEnvironment ? const MyType(1) : Type: 4, //# 08: compile-time error
   };
   if (map[MyType] != 0) throw "Map Error: ${MyType} as literal";
   if (map[T] != 0) throw "Map Error: ${T} as type argument";
@@ -76,7 +83,8 @@
 // An implementation of `Type` which overrides `==`,
 // but is not the value of a constant type literal.
 class MyType implements Type {
-  const MyType();
+  final int value;
+  const MyType(this.value);
   int get hashCode => 0;
   bool operator ==(Object other) => identical(this, other);
 }
diff --git a/tests/language_2/async/await_test.dart b/tests/language_2/async/await_test.dart
index 6b6443d..f8b79d2 100644
--- a/tests/language_2/async/await_test.dart
+++ b/tests/language_2/async/await_test.dart
@@ -2261,15 +2261,15 @@
   Future<S> then<S>(callback(value), {Function onError}) {
     if (onError != null) {
       if (onError is OnErrorCallback2) {
-        return new Future<S>.microtask(() => onError(_error, null));
+        return new Future<S>.microtask(() => onError(_error, StackTrace.empty));
       } else if (onError is OnErrorCallback1) {
         return new Future<S>.microtask(() => onError(_error));
       } else {
         throw new ArgumentError.value(
-          onError,
-          "onError",
-          "Error handler must accept one Object or one Object and a StackTrace"
-          " as arguments, and return a valid result");
+            onError,
+            "onError",
+            "Error handler must accept one Object or one Object and a StackTrace"
+                " as arguments, and return a valid result");
       }
     }
     return new Future<S>.error(_error);
diff --git a/tests/language_2/call/implicit_tearoff_assignment_test.dart b/tests/language_2/call/implicit_tearoff_assignment_test.dart
new file mode 100644
index 0000000..87ccd15
--- /dev/null
+++ b/tests/language_2/call/implicit_tearoff_assignment_test.dart
@@ -0,0 +1,144 @@
+// 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 ensures that when a `.call` tearoff occurs on the right hand side
+// of an assignment, the resulting expression has an appropriate type.
+
+// @dart = 2.9
+
+import "package:expect/expect.dart";
+
+import '../static_type_helper.dart';
+
+dynamic _topLevelPropertySetValue;
+
+set topLevelProperty(void Function() value) {
+  Expect.isNull(_topLevelPropertySetValue);
+  _topLevelPropertySetValue = value;
+}
+
+class C {
+  static dynamic _staticPropertySetValue;
+
+  void call() {}
+
+  static set staticProperty(void Function() value) {
+    Expect.isNull(_staticPropertySetValue);
+    _staticPropertySetValue = value;
+  }
+}
+
+class Base {
+  dynamic _basePropertySetValue;
+
+  set baseProperty(void Function() value) {
+    Expect.isNull(_basePropertySetValue);
+    _basePropertySetValue = value;
+  }
+}
+
+class Derived extends Base {
+  dynamic _indexSetValue;
+  dynamic _instanceSetValue;
+
+  operator []=(int index, void Function() value) {
+    Expect.isNull(_indexSetValue);
+    _indexSetValue = value;
+  }
+
+  set instanceProperty(void Function() value) {
+    Expect.isNull(_instanceSetValue);
+    _instanceSetValue = value;
+  }
+
+  void testSuperPropertySet() {
+    Expect.type<void Function()>((super.baseProperty = C())
+      ..expectStaticType<Exactly<void Function()>>());
+    Expect.type<void Function()>(super._basePropertySetValue);
+  }
+}
+
+class Extended {
+  dynamic _extensionIndexSetValue;
+  dynamic _extensionPropertySetValue;
+}
+
+extension on Extended {
+  operator []=(int index, void Function() value) {
+    Expect.isNull(_extensionIndexSetValue);
+    _extensionIndexSetValue = value;
+  }
+
+  set extensionProperty(void Function() value) {
+    Expect.isNull(_extensionPropertySetValue);
+    _extensionPropertySetValue = value;
+  }
+}
+
+void testExtensionIndexSet() {
+  Extended e = Extended();
+  Expect.type<void Function()>(
+      (e[0] = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(e._extensionIndexSetValue);
+}
+
+void testExtensionSet() {
+  Extended e = Extended();
+  Expect.type<void Function()>((e.extensionProperty = C())
+    ..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(e._extensionPropertySetValue);
+}
+
+void testIndexSet() {
+  Derived d = Derived();
+  Expect.type<void Function()>(
+      (d[0] = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(d._indexSetValue);
+}
+
+void testInstanceSet() {
+  Derived d = Derived();
+  Expect.type<void Function()>(
+      (d.instanceProperty = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(d._instanceSetValue);
+}
+
+void testNullAwarePropertySet() {
+  Derived d = Derived();
+  Expect.type<void Function()>((d?.instanceProperty = C())
+    ..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(d._instanceSetValue);
+}
+
+void testStaticSet() {
+  C._staticPropertySetValue = null;
+  Expect.type<void Function()>(
+      (C.staticProperty = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(C._staticPropertySetValue);
+}
+
+void testTopLevelSet() {
+  _topLevelPropertySetValue = null;
+  Expect.type<void Function()>(
+      (topLevelProperty = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(_topLevelPropertySetValue);
+}
+
+void testVariableSet() {
+  void Function() f;
+  Expect.type<void Function()>(
+      (f = C())..expectStaticType<Exactly<void Function()>>());
+  Expect.type<void Function()>(f);
+}
+
+main() {
+  testExtensionIndexSet();
+  testExtensionSet();
+  testIndexSet();
+  testInstanceSet();
+  testStaticSet();
+  Derived().testSuperPropertySet();
+  testTopLevelSet();
+  testVariableSet();
+}
diff --git a/tests/language_2/call/implicit_tearoff_error_test.dart b/tests/language_2/call/implicit_tearoff_error_test.dart
new file mode 100644
index 0000000..2de9347
--- /dev/null
+++ b/tests/language_2/call/implicit_tearoff_error_test.dart
@@ -0,0 +1,37 @@
+// 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 exercises a corner case of implicit `.call` tearoffs that is
+// easiest to see through its effect on erroneous code.
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+// @dart = 2.9
+
+import '../static_type_helper.dart';
+
+class A {}
+
+class C extends A {
+  void call() {}
+}
+
+class D extends A {
+  void call() {}
+}
+
+void testConditionalExpressionWithUnrelatedClasses(bool b, C c, D d) {
+  // Verify that `b ? c : d` is not interpreted as `(b ? c.call : d.call)` by
+  // confirming that it's an error to use it in a function context (because
+  // `b ? c : d` has static type `A`).
+  context<void Function()>(b ? c : d);
+  //                       ^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
+  //                         ^
+  // [cfe] The argument type 'A' can't be assigned to the parameter type 'void Function()'.
+}
diff --git a/tests/language_2/call/implicit_tearoff_exceptions_test.dart b/tests/language_2/call/implicit_tearoff_exceptions_test.dart
new file mode 100644
index 0000000..5ff09e9
--- /dev/null
+++ b/tests/language_2/call/implicit_tearoff_exceptions_test.dart
@@ -0,0 +1,116 @@
+// 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.
+
+// There are a few circumstances where implicit tear-off of `call` methods does
+// not occur; this test exercises the user-visible static analysis behaviors
+// arising from those circumstances.
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+// A note on how the tests work: in several places we use the pattern
+// `context<C>(b ? d : (E..expectStaticType<Exactly<T>>()))` (where `b` has type
+// `bool` and `d` has type `dynamic`).  This pattern ensures that `E` will be
+// type analyzed with a context of `C`, and tests that the resulting expression
+// has a type of `T`.  However, the presence of `b ? d :` at the beginning
+// ensures that the overall expression has type `dynamic`, so no assignability
+// error will occur if types `C` and `T` are different.
+
+// @dart = 2.9
+
+import "package:expect/expect.dart";
+
+import '../static_type_helper.dart';
+
+class A {}
+
+class C extends A {
+  void call() {}
+  void m() {}
+}
+
+// These are top level getters rather than local variables to avoid triggering
+// flow analysis.
+bool get bTrue => true;
+bool get bFalse => false;
+
+void testCascadeTarget() {
+  C c = C();
+  // Even though the subexpression `c` has type `C` and context `void
+  // Function()`, we don't tear off `.call` for subexpressions that are the
+  // target of a cascade; instead, we tear-off `.call` on the full cascade
+  // expression.  So `c..m()` is equivalent to `(c..m()).call` (which is valid)
+  // rather than `(c.call)..m()` (which is not).
+  context<void Function()>(c..m());
+
+  // Same as above, but confirm that extra parens around `c` don't change the
+  // behavior.
+  context<void Function()>((c)..m());
+  context<void Function()>(((c))..m());
+}
+
+void testConditional() {
+  A a = A();
+  C c = C();
+  dynamic d = null;
+  // Even though the subexpression `c` has type `C` and context `void
+  // Function()`, we don't tear off `.call` for the `then` or `else`
+  // subexpressions of a conditional expression; instead, we tear off `.call`
+  // for the conditional expression as a whole (if appropriate).  So, in
+  // `(bTrue ? c : a)..expectStaticType<...>()`, no implicit tearoff of `c`
+  // occurs, and the subexpression `bTrue ? c : a` gets assigned a static type
+  // of `A`.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bTrue ? c : a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bFalse ? a : c)..expectStaticType<Exactly<A>>())));
+
+  // Same as above, but confirm that extra parens around `c` don't change the
+  // behavior.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bTrue ? (c) : a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bFalse ? a : (c))..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bTrue ? ((c)) : a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((bFalse ? a : ((c)))..expectStaticType<Exactly<A>>())));
+}
+
+void testIfNull() {
+  A a = A();
+  A aq = null;
+  C c = C();
+  dynamic d = null;
+  // Even though the subexpression `c` has type `C` and context `void
+  // Function()`, we don't tear off `.call` for the LHS of a `??` expression;
+  // instead, we tear off `.call` for the `??` expression as a whole (if
+  // appropriate).  So, in
+  // `(c ?? a)..expectStaticType<...>()`, no implicit tearoff of `c` occurs, and
+  // the subexpression `c ?? a` gets assigned a static type of `A`.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((c ?? a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((aq ?? c)..expectStaticType<Exactly<A>>())));
+
+  // Same as above, but confirm that extra parens around `c` don't change the
+  // behavior.
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : (((c) ?? a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((aq ?? (c))..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((((c)) ?? a)..expectStaticType<Exactly<A>>())));
+  Expect.throws(() => context<void Function()>(
+      bFalse ? d : ((aq ?? ((c)))..expectStaticType<Exactly<A>>())));
+}
+
+main() {
+  testCascadeTarget();
+  testConditional();
+  testIfNull();
+}
diff --git a/tests/language_2/call/implicit_tearoff_local_assignment_test.dart b/tests/language_2/call/implicit_tearoff_local_assignment_test.dart
new file mode 100644
index 0000000..210ace0
--- /dev/null
+++ b/tests/language_2/call/implicit_tearoff_local_assignment_test.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.
+
+// This test is the pre-null-safety variant of the null safety test
+// `implicit_tearoff_local_assignment_test.dart`, which verifies that when
+// considering whether to perform a `.call` tearoff on the RHS of an assignment,
+// the implementations use the unpromoted type of the variable (rather than the
+// promoted type).  For the pre-null-safety variant, the same logic doesn't
+// really apply, because a variable can't be promoted in a block that contains
+// an assignment to it.  But we can still test the unpromoted cases.
+
+// @dart = 2.9
+
+import "package:expect/expect.dart";
+
+import '../static_type_helper.dart';
+
+class B {
+  Object call() => 'B.call called';
+}
+
+class C extends B {
+  String call() => 'C.call called';
+}
+
+void testClassUnpromoted() {
+  B x = B();
+  var y = x = C(); // No implicit tearoff of `.call`, no promotion
+  x.expectStaticType<Exactly<B>>();
+  Expect.type<C>(x);
+  Expect.equals('C.call called', x());
+  y.expectStaticType<Exactly<C>>();
+  Expect.type<C>(y);
+  Expect.equals('C.call called', y());
+}
+
+void testFunctionUnpromoted() {
+  Object f() => 'f called';
+  Object Function() x = f;
+  var y = x = B(); // Implicit tearoff of `.call`, no promotion
+  x.expectStaticType<Exactly<Object Function()>>();
+  Expect.type<Object Function()>(x);
+  Expect.equals('B.call called', x());
+  y.expectStaticType<Exactly<Object Function()>>();
+  Expect.type<Object Function()>(y);
+  Expect.equals('B.call called', y());
+}
+
+void testObjectUnpromoted() {
+  Object x = 'initial value';
+  var y = x = B(); // No implicit tearoff of `.call`, no promotion
+  x.expectStaticType<Exactly<Object>>();
+  Expect.type<B>(x);
+  Expect.equals('B.call called', (x as B)());
+  y.expectStaticType<Exactly<B>>();
+  Expect.type<B>(y);
+  Expect.equals('B.call called', y());
+}
+
+main() {
+  testClassUnpromoted();
+  testFunctionUnpromoted();
+  testObjectUnpromoted();
+}
diff --git a/tests/language_2/call/implicit_tearoff_test.dart b/tests/language_2/call/implicit_tearoff_test.dart
new file mode 100644
index 0000000..ec30ced
--- /dev/null
+++ b/tests/language_2/call/implicit_tearoff_test.dart
@@ -0,0 +1,173 @@
+// 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 exercises all the grammar constructs for which implicit tear-off of
+// `call` methods should occur.
+
+// NOTICE: This test checks the currently implemented behavior, even though the
+// implemented behavior does not match the language specification.  Until an
+// official decision has been made about whether to change the implementation to
+// match the specification, or vice versa, this regression test is intended to
+// protect against inadvertent implementation changes.
+
+// @dart = 2.9
+
+import '../static_type_helper.dart';
+
+class B {}
+
+class C extends B {
+  void call() {}
+  void m() {}
+  void testThisExpression() {
+    context<void Function()>(this);
+  }
+}
+
+class D {
+  C operator +(other) => C();
+  C operator -() => C();
+  C instanceMethod() => C();
+  static C staticMethod() => C();
+  C get instanceGetter => C();
+}
+
+C topLevelMethod() => C();
+
+// These are top level getters rather than local variables to avoid triggering
+// flow analysis.
+bool get bTrue => true;
+bool get bFalse => false;
+
+void testAsExpression() {
+  dynamic d = C();
+  context<void Function()>(d as C);
+}
+
+void testAssignmentExpression() {
+  B b = B(); // ignore: unused_local_variable
+  context<void Function()>(b = C());
+}
+
+Future<void> testAwaitExpression() async {
+  Future<C> fc = Future.value(C());
+  context<void Function()>(await fc);
+}
+
+void testBinaryExpression() {
+  D d = D();
+  context<void Function()>(d + d);
+}
+
+void testCascadeExpression() {
+  // Note: we don't apply implicit `.call` tear-offs to the *target* of a
+  // cascade, but we do apply them to the cascade expression as a whole, so
+  // `c..m()` is equivalent to `(c..m()).call`.
+  C c = C();
+  context<void Function()>(c..m());
+}
+
+void testConditionalExpression() {
+  // Note: we know from `implicit_tearoff_exceptions_test.dart` that the two
+  // branches of the conditional expression are *not* subject to implicit
+  // `.call` tearoff, so the `.call` tearoff in this case is applied to the
+  // whole conditional expression.  In other words, `b ? c : c` desugars to
+  // `(b ? c : c).call` rather than `(b ? c.call : c.call)`.
+  C c = C();
+  context<void Function()>(bFalse ? c : c);
+  context<void Function()>(bTrue ? c : c);
+}
+
+void testFunctionExpressionInvocation() {
+  C c = C();
+  context<void Function()>((() => c)());
+}
+
+void testFunctionInvocationLocal() {
+  C localFunction() => C();
+  context<void Function()>(localFunction());
+}
+
+void testFunctionInvocationStatic() {
+  context<void Function()>(D.staticMethod());
+}
+
+void testFunctionInvocationTopLevel() {
+  context<void Function()>(topLevelMethod());
+}
+
+void testIfNullExpression() {
+  C c1 = bTrue ? C() : null;
+  C c2 = C();
+  context<void Function()>(c1 ?? c2);
+  c1 = null;
+  context<void Function()>(c1 ?? c2);
+}
+
+void testIndexExpression() {
+  List<C> l = [C()];
+  context<void Function()>(l[0]);
+}
+
+void testInstanceCreationExpressionExplicit() {
+  context<void Function()>(new C());
+}
+
+void testInstanceCreationExpressionImplicit() {
+  context<void Function()>(C());
+}
+
+void testInstanceGetGeneral() {
+  D Function() dFunction = () => D();
+  context<void Function()>(dFunction().instanceGetter);
+}
+
+void testInstanceGetViaPrefixedIdentifier() {
+  D d = D();
+  context<void Function()>(d.instanceGetter);
+}
+
+void testMethodInvocation() {
+  context<void Function()>(D().instanceMethod());
+}
+
+void testParenthesizedExpression() {
+  C c = C();
+  context<void Function()>((c));
+}
+
+void testUnaryMinusExpression() {
+  D d = D();
+  context<void Function()>(-d);
+}
+
+extension on C {
+  void testThisExpressionExtension() {
+    context<void Function()>(this);
+  }
+}
+
+main() async {
+  testAsExpression();
+  testAssignmentExpression();
+  await testAwaitExpression();
+  testBinaryExpression();
+  testCascadeExpression();
+  testConditionalExpression();
+  testFunctionExpressionInvocation();
+  testFunctionInvocationLocal();
+  testFunctionInvocationStatic();
+  testFunctionInvocationTopLevel();
+  testIfNullExpression();
+  testIndexExpression();
+  testInstanceCreationExpressionExplicit();
+  testInstanceCreationExpressionImplicit();
+  testInstanceGetGeneral();
+  testInstanceGetViaPrefixedIdentifier();
+  testMethodInvocation();
+  testParenthesizedExpression();
+  testUnaryMinusExpression();
+  C().testThisExpression();
+  C().testThisExpressionExtension();
+}
diff --git a/tests/language_2/const/switch2_test.dart b/tests/language_2/const/switch2_test.dart
index 772846e..ce881a4 100644
--- a/tests/language_2/const/switch2_test.dart
+++ b/tests/language_2/const/switch2_test.dart
@@ -13,6 +13,7 @@
   // [analyzer] COMPILE_TIME_ERROR.SWITCH_EXPRESSION_NOT_ASSIGNABLE
     case 0.0:
     //   ^
+    // [cfe] Case expression '0.0' does not have a primitive operator '=='.
     // [cfe] Type 'int' of the switch expression isn't assignable to the type 'double' of this case expression.
       print("illegal");
       break;
diff --git a/tests/language_2/constructor/redirect2_test.dart b/tests/language_2/constructor/redirect2_test.dart
index 71aa1c3..39e5632 100644
--- a/tests/language_2/constructor/redirect2_test.dart
+++ b/tests/language_2/constructor/redirect2_test.dart
@@ -33,11 +33,9 @@
   A.illegalSuper() : this(3), super(3);
   //                          ^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.SUPER_IN_REDIRECTING_CONSTRUCTOR
-  // [cfe] A redirecting constructor can't have other initializers.
+  // [cfe] A redirecting constructor can't have a 'super' initializer.
   //                                ^
   // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
-  //                               ^^^
-  // [cfe] Too many positional arguments: 0 allowed, but 1 found.
 }
 
 main() {
diff --git a/tests/language_2/enum/enum_test.dart b/tests/language_2/enum/enum_test.dart
index 73b3db6..4cb22a1 100644
--- a/tests/language_2/enum/enum_test.dart
+++ b/tests/language_2/enum/enum_test.dart
@@ -7,13 +7,18 @@
 import 'package:expect/expect.dart';
 
 enum Enum1 { _ }
+
 enum Enum2 { A }
+
 enum Enum3 { B, C }
+
 enum Enum4 {
   D,
   E,
 }
+
 enum Enum5 { F, G, H }
+
 enum _Enum6 { I, _J }
 
 enum _IsNot { IsNot }
diff --git a/tests/language_2/enum/is_keyword_runtime_test.dart b/tests/language_2/enum/is_keyword_runtime_test.dart
index 8ea644f..4c8c400 100644
--- a/tests/language_2/enum/is_keyword_runtime_test.dart
+++ b/tests/language_2/enum/is_keyword_runtime_test.dart
@@ -10,6 +10,4 @@
 // Test that `enum` is considered a keyword and therefore invalid as the name of
 // declarations.
 
-main() {
-
-}
+main() {}
diff --git a/tests/language_2/enum/private_runtime_1_test.dart b/tests/language_2/enum/private_runtime_1_test.dart
index b2fbfee..9234818 100644
--- a/tests/language_2/enum/private_runtime_1_test.dart
+++ b/tests/language_2/enum/private_runtime_1_test.dart
@@ -23,5 +23,4 @@
 main() {
   Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
   Expect.equals('Enum2._A,Enum2._B', Enum2.values.join(','));
-
 }
diff --git a/tests/language_2/enum/private_runtime_test.dart b/tests/language_2/enum/private_runtime_test.dart
index ad44d80..ea9c19a 100644
--- a/tests/language_2/enum/private_runtime_test.dart
+++ b/tests/language_2/enum/private_runtime_test.dart
@@ -22,6 +22,4 @@
 
 main() {
   Expect.equals('Enum1._A,Enum1._B', Enum1.values.join(','));
-
-
 }
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 7b214ff..1c44dac 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -13,6 +13,7 @@
 closure/minify_closure_variable_collision_test: SkipByDesign # Regression test for dart2js
 
 [ $builder_tag == dart2js_production && $compiler == dart2js ]
+call/implicit_tearoff_exceptions_test: SkipByDesign # No argument type checks in production mode, issue 45528
 control_flow_collections/for_non_bool_condition_test: Crash # Issue 36442
 regress/regress45428_test: SkipByDesign # No argument type checks in production mode, issue 45528
 
diff --git a/tests/language_2/switch/bad_case_test.dart b/tests/language_2/switch/bad_case_test.dart
index 3e3a340..85c88fa 100644
--- a/tests/language_2/switch/bad_case_test.dart
+++ b/tests/language_2/switch/bad_case_test.dart
@@ -34,8 +34,12 @@
 //^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
     case 3.14:
+    //   ^
+    // [cfe] Case expression '3.14' does not have a primitive operator '=='.
       return "Pi";
     case 2.71828:
+    //   ^
+    // [cfe] Case expression '2.71828' does not have a primitive operator '=='.
       return "Huh?";
   }
   return null;
diff --git a/tests/language_2/switch/case_test.dart b/tests/language_2/switch/case_test.dart
index af15ac6..fa519fd0 100644
--- a/tests/language_2/switch/case_test.dart
+++ b/tests/language_2/switch/case_test.dart
@@ -35,6 +35,8 @@
 //^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS
     case const A.B(): Expect.fail("bad switch"); break;
+    //         ^
+    // [cfe] Case expression 'B {}' does not have a primitive operator '=='.
   }
 
   switch (new C()) {
@@ -59,5 +61,7 @@
     case const A.B(): Expect.fail("bad switch"); break;
     //   ^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_CASE_EXPRESSION_TYPES
+    //         ^
+    // [cfe] Case expression 'B {}' does not have a primitive operator '=='.
   }
 }
diff --git a/tests/language_2/type/constants_test.dart b/tests/language_2/type/constants_test.dart
index ded5300..cda34ff 100644
--- a/tests/language_2/type/constants_test.dart
+++ b/tests/language_2/type/constants_test.dart
@@ -17,6 +17,9 @@
 
 const Type numType = num;
 
+const bool fromEnvironment =
+    const bool.fromEnvironment("foo", defaultValue: true);
+
 Type argumentType<T>() => T;
 
 void testSwitch<T extends MyType>(args) {
@@ -24,7 +27,7 @@
   for (int i = 0; i < types.length; i++) {
     switch (types[i]) {
       // Must be type literal or not override `==`.
-      case const MyType(): //# 01: compile-time error
+      case const MyType(0): //# 01: compile-time error
 
       // Must not be type variable.
       case T: //# 02: compile-time error
@@ -41,6 +44,8 @@
         throw "unreachable: num #$i";
       case MyType:
         break;
+      // Must be type literal or not override `==`.
+      case fromEnvironment ? const MyType(1) : Type: //# 07: compile-time error
       default:
         throw "unreachable: default #$i";
     }
@@ -50,7 +55,7 @@
 void testMaps<T extends MyType>(args) {
   const map = {
     // Must be type literal or not override `==`.
-    MyType(): 0, //# 04: compile-time error
+    MyType(0): 0, //# 04: compile-time error
 
     // Must not be type variable.
     T: 0, //# 05: compile-time error
@@ -63,6 +68,8 @@
     int: 1,
     String: 2,
     numType: 3,
+    // Must be type literal or not override `==`.
+    fromEnvironment ? const MyType(1) : Type: 4, //# 08: compile-time error
   };
   if (map[MyType] != 0) throw "Map Error: ${MyType} as literal";
   if (map[T] != 0) throw "Map Error: ${T} as type argument";
@@ -78,7 +85,8 @@
 // An implementation of `Type` which overrides `==`,
 // but is not the value of a constant type literal.
 class MyType implements Type {
-  const MyType();
+  final int value;
+  const MyType(this.value);
   int get hashCode => 0;
   bool operator ==(Object other) => identical(this, other);
 }
diff --git a/tests/lib/collection/map_iterables_consistency_test.dart b/tests/lib/collection/map_iterables_consistency_test.dart
new file mode 100644
index 0000000..d3c1ea6
--- /dev/null
+++ b/tests/lib/collection/map_iterables_consistency_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 'dart:collection';
+
+import 'package:expect/expect.dart';
+
+// Test that a Map's keys, values and entries iterables are consistent with
+// their map.
+//
+// While it is generally not permitted to modify a map while iterating the keys,
+// values, or entries, it is possible to iterate these collections in between
+// modifications of the map.
+//
+// See #48282
+
+void check(String kind, Map m) {
+  Expect.equals(0, m.length);
+
+  // These existing iterables
+  final keys = m.keys;
+  final values = m.values;
+  final entries = m.entries;
+
+  for (int i = 0; i < 20; i++) {
+    Expect.equals(i, m.length);
+
+    // Fresh iterables.
+    Expect.equals(i, m.keys.length);
+    Expect.equals(i, m.values.length);
+    Expect.equals(i, m.entries.length);
+
+    Expect.equals(i, List.of(m.keys).length);
+    Expect.equals(i, List.of(m.values).length);
+    Expect.equals(i, List.of(m.entries).length);
+
+    Expect.equals(i, iteratedLength(m.keys));
+    Expect.equals(i, iteratedLength(m.values));
+    Expect.equals(i, iteratedLength(m.entries));
+
+    // Existing iterables.
+    Expect.equals(i, keys.length);
+    Expect.equals(i, values.length);
+    Expect.equals(i, entries.length);
+
+    Expect.equals(i, List.of(keys).length);
+    Expect.equals(i, List.of(values).length);
+    Expect.equals(i, List.of(entries).length);
+
+    Expect.equals(i, iteratedLength(keys));
+    Expect.equals(i, iteratedLength(values));
+    Expect.equals(i, iteratedLength(entries));
+
+    m[i] = i;
+  }
+}
+
+int iteratedLength(Iterable iterable) {
+  int length = 0;
+  final iterator = iterable.iterator;
+  while (iterator.moveNext()) {
+    length++;
+  }
+  return length;
+}
+
+void main() {
+  check('Map', {});
+  check('Map.identity', Map.identity());
+  check('HashMap', HashMap());
+  check('HashMap.identity', HashMap.identity());
+  check('SplayTreeMap', SplayTreeMap());
+}
diff --git a/tests/lib/html/audiocontext_test.dart b/tests/lib/html/audiocontext_test.dart
index 8316130..a091790 100644
--- a/tests/lib/html/audiocontext_test.dart
+++ b/tests/lib/html/audiocontext_test.dart
@@ -7,6 +7,7 @@
 import 'dart:typed_data';
 import 'dart:web_audio';
 
+import 'package:async_helper/async_helper.dart';
 import 'package:expect/minitest.dart';
 
 main() {
@@ -95,5 +96,74 @@
         expect(oscillator.type, equals('triangle'));
       }
     });
+
+    asyncTest(() async {
+      if (AudioContext.supported) {
+        final audioSourceUrl = "/root_dart/tests/lib/html/small.mp3";
+
+        Future<void> requestAudioDecode(
+            {bool triggerDecodeError: false,
+            DecodeSuccessCallback? successCallback,
+            DecodeErrorCallback? errorCallback}) async {
+          HttpRequest audioRequest = HttpRequest();
+          audioRequest.open("GET", audioSourceUrl, async: true);
+          audioRequest.responseType = "arraybuffer";
+          var completer = new Completer<void>();
+          audioRequest.onLoad.listen((_) {
+            ByteBuffer audioData = audioRequest.response;
+            if (triggerDecodeError) audioData = Uint8List.fromList([]).buffer;
+            context
+                .decodeAudioData(audioData, successCallback, errorCallback)
+                .then((_) {
+              completer.complete();
+            }).catchError((e) {
+              completer.completeError(e);
+            });
+          });
+          audioRequest.send();
+          return completer.future;
+        }
+
+        // Decode successfully without callback.
+        await requestAudioDecode();
+
+        // Decode successfully with callback. Use counter to make sure it's only
+        // called once.
+        var successCallbackCalled = 0;
+        await requestAudioDecode(
+            successCallback: (_) {
+              successCallbackCalled += 1;
+            },
+            errorCallback: (_) {});
+        expect(successCallbackCalled, 1);
+
+        // Fail decode without callback.
+        try {
+          await requestAudioDecode(triggerDecodeError: true);
+          fail('Expected decode failure.');
+        } catch (_) {}
+
+        // Fail decode with callback.
+        var errorCallbackCalled = 0;
+        try {
+          await requestAudioDecode(
+              triggerDecodeError: true,
+              successCallback: (_) {},
+              errorCallback: (_) {
+                errorCallbackCalled += 1;
+              });
+          fail('Expected decode failure.');
+        } catch (e) {
+          // Safari may return a null error. Assuming Safari is version >= 14.1,
+          // the Future should complete with a string error if the error
+          // callback never gets called.
+          if (errorCallbackCalled == 0) {
+            expect(e is String, true);
+          } else {
+            expect(errorCallbackCalled, 1);
+          }
+        }
+      }
+    });
   });
 }
diff --git a/tests/lib/html/small.mp3 b/tests/lib/html/small.mp3
new file mode 100644
index 0000000..3fcc88b
--- /dev/null
+++ b/tests/lib/html/small.mp3
Binary files differ
diff --git a/tests/lib/isolate/isolate_run_test.dart b/tests/lib/isolate/isolate_run_test.dart
new file mode 100644
index 0000000..27312b8
--- /dev/null
+++ b/tests/lib/isolate/isolate_run_test.dart
@@ -0,0 +1,115 @@
+// 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/weak_reference_message_2_test.dart b/tests/lib/isolate/weak_reference_message_2_test.dart
new file mode 100644
index 0000000..cc70985
--- /dev/null
+++ b/tests/lib/isolate/weak_reference_message_2_test.dart
@@ -0,0 +1,80 @@
+// 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:isolate";
+import 'dart:typed_data';
+
+import "package:expect/expect.dart";
+
+void main(List<String> arguments, Object? message) async {
+  if (arguments.length == 1) {
+    assert(arguments[0] == 'helper');
+    await runHelper(message as SendPort);
+  } else {
+    await runTest();
+  }
+}
+
+Future<void> runTest() async {
+  final port = ReceivePort();
+  // By spawning the isolate from an uri the newly isolate will run in it's own
+  // isolate group. This way we can test the message snapshot serialization
+  // code.
+  await Isolate.spawnUri(
+    Platform.script,
+    ['helper'],
+    port.sendPort,
+  );
+  final message = await port.first;
+
+  final weakRef1copy = message[0] as WeakReference<Uint8List>;
+  final weakRef2copy = message[1] as WeakReference<Uint8List>;
+  final weakRef3copy = message[3] as WeakReference<Uint8List>;
+  final weakRef4copy = message[5] as WeakReference<Uint8List>;
+  Expect.isNull(weakRef1copy.target);
+  Expect.equals(2, weakRef2copy.target?.length);
+  Expect.isNull(weakRef3copy.target);
+  Expect.equals(4, weakRef4copy.target?.length);
+
+  port.close();
+}
+
+Future<void> runHelper(SendPort port) async {
+  final object1 = Uint8List(1);
+  final weakRef1 = WeakReference(object1);
+  final object2 = Uint8List(2);
+  final weakRef2 = WeakReference(object2);
+  final object3 = Uint8List(3);
+  final weakRef3 = WeakReference(object3);
+  final object4 = Uint8List(4);
+  final weakRef4 = WeakReference(object4);
+
+  final key3 = Object();
+  final expando3 = Expando();
+  expando3[key3] = object3;
+  final key4 = Object();
+  final expando4 = Expando();
+  expando4[key4] = object4;
+
+  final message = <dynamic>[
+    weakRef1, // Does not have its target inluded.
+    weakRef2, // Has its target included later than itself.
+    object2,
+    weakRef3, // Does not have its target inluded.
+    expando3,
+    weakRef4, // Has its target included due to expando.
+    expando4,
+    key4,
+  ];
+  port.send(message);
+}
+
+class Nonce {
+  final int value;
+
+  Nonce(this.value);
+
+  String toString() => 'Nonce($value)';
+}
diff --git a/tests/lib/js/js_util/implicit_downcast_test.dart b/tests/lib/js/js_util/implicit_downcast_test.dart
new file mode 100644
index 0000000..b0d201b
--- /dev/null
+++ b/tests/lib/js/js_util/implicit_downcast_test.dart
@@ -0,0 +1,124 @@
+// 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 implicit downcasts in js_util.
+
+@JS()
+library js_util_implicit_downcast_test;
+
+import 'package:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+import 'package:expect/minitest.dart';
+
+@JS()
+external void eval(String code);
+
+@JS()
+class Foo {
+  external Foo(num a);
+
+  external num get a;
+  external void set a(_);
+  external num bar();
+}
+
+bool isComplianceMode() {
+  var stuff = [1, 'string'];
+  var a = stuff[0];
+  // Detect whether we are using --omit-implicit-checks.
+  try {
+    String s = a as dynamic;
+    return false;
+  } catch (e) {
+    // Ignore.
+  }
+  return true;
+}
+
+main() {
+  eval(r"""
+    function Foo(a) {
+      this.a = a;
+    }
+
+    Foo.prototype.bar = function() {
+      return this.a;
+    }
+    """);
+
+  if (isComplianceMode()) {
+    complianceModeTest();
+  } else {
+    omitImplicitChecksTest();
+  }
+}
+
+complianceModeTest() {
+  var f = Foo(42);
+  expect(js_util.getProperty<int>(f, 'a'), equals(42));
+  expect(() => js_util.getProperty<List>(f, 'a'), throws);
+
+  f.a = 5;
+  expect(js_util.callMethod<int>(f, 'bar', []), equals(5));
+  expect(() => js_util.callMethod<List>(f, 'bar', []), throws);
+
+  // Check optimized lowering of callMethod.
+  expect(() => js_util.callMethod<List>(f, 'bar', [1]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2, 3]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4, 5]), throws);
+
+  var f2 = Foo(7);
+  var fConstructor = js_util.getProperty(f, 'constructor');
+  expect(js_util.callConstructor<Foo>(fConstructor, [7]).a, equals(7));
+  expect(() => js_util.callConstructor<List>(fConstructor, [7]), throws);
+
+  // Check optimized lowering of callConstructor.
+  expect(() => js_util.callConstructor<List>(fConstructor, null), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, []), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, [1, 2]), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, [1, 2, 3]), throws);
+  expect(
+      () => js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4]), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4, 5]),
+      throws);
+}
+
+omitImplicitChecksTest() {
+  var f = Foo(42);
+  expect(js_util.getProperty<int>(f, 'a'), equals(42));
+  expect(js_util.getProperty<List>(f, 'a'), equals(42));
+
+  f.a = 5;
+  expect(js_util.callMethod<int>(f, 'bar', []), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', []), equals(5));
+
+  // Check optimized lowering of callMethod.
+  expect(js_util.callMethod<List>(f, 'bar', [1]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2, 3]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4, 5]), equals(5));
+
+  var fConstructor = js_util.getProperty(f, 'constructor');
+  expect(js_util.callConstructor<Foo>(fConstructor, [7]).a, equals(7));
+  expect(
+      (js_util.callConstructor<List>(fConstructor, [7]) as Foo).a, equals(7));
+
+  // Check optimized lowering of callConstructor.
+  expect((js_util.callConstructor<List>(fConstructor, null) as Foo).a,
+      equals(null));
+  expect(
+      (js_util.callConstructor<List>(fConstructor, []) as Foo).a, equals(null));
+  expect((js_util.callConstructor<List>(fConstructor, [1, 2]) as Foo).a,
+      equals(1));
+  expect((js_util.callConstructor<List>(fConstructor, [1, 2, 3]) as Foo).a,
+      equals(1));
+  expect((js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4]) as Foo).a,
+      equals(1));
+  expect(
+      (js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4, 5]) as Foo).a,
+      equals(1));
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 46bdedf..0b262df 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -45,6 +45,7 @@
 js/instanceof_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/is_check_and_as_cast_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/async_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
+js/js_util/implicit_downcast_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/javascriptobject_extensions_test.dart: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/jsify_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/promise_reject_null_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
@@ -70,7 +71,7 @@
 [ $runtime != dart_precompiled && ($runtime != vm || $compiler != dartk && $compiler != none) ]
 isolate/vm_rehash_test: SkipByDesign
 
-[ $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 convert/utf85_test: Skip # Pass, Slow Issue 20111.
 
 [ $arch != x64 || $runtime != vm ]
@@ -84,7 +85,7 @@
 # as that would involve running CFE (the front end) in simulator mode
 # to compile the URI file specified in spawnURI code.
 # These Isolate tests that use spawnURI are hence skipped on purpose.
-[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 isolate/count_test: Skip # Isolate.spawnUri
 isolate/cross_isolate_message_test: Skip # Isolate.spawnUri
 isolate/deferred_in_isolate2_test: Skip # Isolate.spawnUri
diff --git a/tests/lib/lib_vm.status b/tests/lib/lib_vm.status
index 07ece5a..2a3deea 100644
--- a/tests/lib/lib_vm.status
+++ b/tests/lib/lib_vm.status
@@ -76,10 +76,10 @@
 mirrors/library_uri_io_test: RuntimeError
 mirrors/library_uri_package_test: RuntimeError
 
-[ $runtime == vm && ($arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == vm && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 convert/utf85_test: Skip # Pass, Slow Issue 20111.
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $hot_reload || $hot_reload_rollback ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $hot_reload || $hot_reload_rollback ]
 convert/chunked_conversion_utf88_test: SkipSlow
 convert/streamed_conversion_json_utf8_decode_test: SkipSlow
 convert/utf85_test: SkipSlow
diff --git a/tests/lib/mirrors/library_uri_package_test.dart b/tests/lib/mirrors/library_uri_package_test.dart
index e546722..1ed7d66 100644
--- a/tests/lib/mirrors/library_uri_package_test.dart
+++ b/tests/lib/mirrors/library_uri_package_test.dart
@@ -15,7 +15,7 @@
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner as LibraryMirror;
   Uri uri = valueLibrary.uri;
-  if (uri.scheme != "https" ||
+  if (!uri.isScheme("https") ||
       uri.host != "dartlang.org" ||
       uri.path != "/dart2js-stripped-uri") {
     expect(uri, equals(expectedUri));
diff --git a/tests/lib/mirrors/mirrors_test.dart b/tests/lib/mirrors/mirrors_test.dart
index e48269e..a3e2a9c 100644
--- a/tests/lib/mirrors/mirrors_test.dart
+++ b/tests/lib/mirrors/mirrors_test.dart
@@ -199,7 +199,7 @@
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner as LibraryMirror;
   Uri uri = valueLibrary.uri;
-  if (uri.scheme != "https" ||
+  if (!uri.isScheme("https") ||
       uri.host != "dartlang.org" ||
       uri.path != "/dart2js-stripped-uri") {
     expect(check(uri), isTrue);
diff --git a/tests/lib_2/collection/map_iterables_consistency_test.dart b/tests/lib_2/collection/map_iterables_consistency_test.dart
new file mode 100644
index 0000000..3ba421e
--- /dev/null
+++ b/tests/lib_2/collection/map_iterables_consistency_test.dart
@@ -0,0 +1,76 @@
+// 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:collection';
+
+import 'package:expect/expect.dart';
+
+// Test that a Map's keys, values and entries iterables are consistent with
+// their map.
+//
+// While it is generally not permitted to modify a map while iterating the keys,
+// values, or entries, it is possible to iterate these collections in between
+// modifications of the map.
+//
+// See #48282
+
+void check(String kind, Map m) {
+  Expect.equals(0, m.length);
+
+  // These existing iterables
+  final keys = m.keys;
+  final values = m.values;
+  final entries = m.entries;
+
+  for (int i = 0; i < 20; i++) {
+    Expect.equals(i, m.length);
+
+    // Fresh iterables.
+    Expect.equals(i, m.keys.length);
+    Expect.equals(i, m.values.length);
+    Expect.equals(i, m.entries.length);
+
+    Expect.equals(i, List.of(m.keys).length);
+    Expect.equals(i, List.of(m.values).length);
+    Expect.equals(i, List.of(m.entries).length);
+
+    Expect.equals(i, iteratedLength(m.keys));
+    Expect.equals(i, iteratedLength(m.values));
+    Expect.equals(i, iteratedLength(m.entries));
+
+    // Existing iterables.
+    Expect.equals(i, keys.length);
+    Expect.equals(i, values.length);
+    Expect.equals(i, entries.length);
+
+    Expect.equals(i, List.of(keys).length);
+    Expect.equals(i, List.of(values).length);
+    Expect.equals(i, List.of(entries).length);
+
+    Expect.equals(i, iteratedLength(keys));
+    Expect.equals(i, iteratedLength(values));
+    Expect.equals(i, iteratedLength(entries));
+
+    m[i] = i;
+  }
+}
+
+int iteratedLength(Iterable iterable) {
+  int length = 0;
+  final iterator = iterable.iterator;
+  while (iterator.moveNext()) {
+    length++;
+  }
+  return length;
+}
+
+void main() {
+  check('Map', {});
+  check('Map.identity', Map.identity());
+  check('HashMap', HashMap());
+  check('HashMap.identity', HashMap.identity());
+  check('SplayTreeMap', SplayTreeMap());
+}
diff --git a/tests/lib_2/html/audiocontext_test.dart b/tests/lib_2/html/audiocontext_test.dart
index b66e54b..396cf39 100644
--- a/tests/lib_2/html/audiocontext_test.dart
+++ b/tests/lib_2/html/audiocontext_test.dart
@@ -1,3 +1,6 @@
+// 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';
@@ -5,6 +8,7 @@
 import 'dart:typed_data';
 import 'dart:web_audio';
 
+import 'package:async_helper/async_helper.dart';
 import 'package:expect/minitest.dart';
 
 main() {
@@ -93,5 +97,74 @@
         expect(oscillator.type, equals('triangle'));
       }
     });
+
+    asyncTest(() async {
+      if (AudioContext.supported) {
+        final audioSourceUrl = "/root_dart/tests/lib_2/html/small.mp3";
+
+        Future<void> requestAudioDecode(
+            {bool triggerDecodeError: false,
+            DecodeSuccessCallback successCallback,
+            DecodeErrorCallback errorCallback}) async {
+          HttpRequest audioRequest = HttpRequest();
+          audioRequest.open("GET", audioSourceUrl, async: true);
+          audioRequest.responseType = "arraybuffer";
+          var completer = new Completer<void>();
+          audioRequest.onLoad.listen((_) {
+            ByteBuffer audioData = audioRequest.response;
+            if (triggerDecodeError) audioData = Uint8List.fromList([]).buffer;
+            context
+                .decodeAudioData(audioData, successCallback, errorCallback)
+                .then((_) {
+              completer.complete();
+            }).catchError((e) {
+              completer.completeError(e);
+            });
+          });
+          audioRequest.send();
+          return completer.future;
+        }
+
+        // Decode successfully without callback.
+        await requestAudioDecode();
+
+        // Decode successfully with callback. Use counter to make sure it's only
+        // called once.
+        var successCallbackCalled = 0;
+        await requestAudioDecode(
+            successCallback: (_) {
+              successCallbackCalled += 1;
+            },
+            errorCallback: (_) {});
+        expect(successCallbackCalled, 1);
+
+        // Fail decode without callback.
+        try {
+          await requestAudioDecode(triggerDecodeError: true);
+          fail('Expected decode failure.');
+        } catch (_) {}
+
+        // Fail decode with callback.
+        var errorCallbackCalled = 0;
+        try {
+          await requestAudioDecode(
+              triggerDecodeError: true,
+              successCallback: (_) {},
+              errorCallback: (_) {
+                errorCallbackCalled += 1;
+              });
+          fail('Expected decode failure.');
+        } catch (e) {
+          // Safari may return a null error. Assuming Safari is version >= 14.1,
+          // the Future should complete with a string error if the error
+          // callback never gets called.
+          if (errorCallbackCalled == 0) {
+            expect(e is String, true);
+          } else {
+            expect(errorCallbackCalled, 1);
+          }
+        }
+      }
+    });
   });
 }
diff --git a/tests/lib_2/html/small.mp3 b/tests/lib_2/html/small.mp3
new file mode 100644
index 0000000..3fcc88b
--- /dev/null
+++ b/tests/lib_2/html/small.mp3
Binary files differ
diff --git a/tests/lib_2/isolate/isolate_run_test.dart b/tests/lib_2/isolate/isolate_run_test.dart
new file mode 100644
index 0000000..d39c83d
--- /dev/null
+++ b/tests/lib_2/isolate/isolate_run_test.dart
@@ -0,0 +1,117 @@
+// 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/weak_reference_message_2_test.dart b/tests/lib_2/isolate/weak_reference_message_2_test.dart
new file mode 100644
index 0000000..1c18735
--- /dev/null
+++ b/tests/lib_2/isolate/weak_reference_message_2_test.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.
+
+// @dart = 2.9
+
+import 'dart:io';
+import "dart:isolate";
+import 'dart:typed_data';
+
+import "package:expect/expect.dart";
+
+void main(List<String> arguments, Object message) async {
+  if (arguments.length == 1) {
+    assert(arguments[0] == 'helper');
+    await runHelper(message as SendPort);
+  } else {
+    await runTest();
+  }
+}
+
+Future<void> runTest() async {
+  final port = ReceivePort();
+  // By spawning the isolate from an uri the newly isolate will run in it's own
+  // isolate group. This way we can test the message snapshot serialization
+  // code.
+  await Isolate.spawnUri(
+    Platform.script,
+    ['helper'],
+    port.sendPort,
+  );
+  final message = await port.first;
+
+  final weakRef1copy = message[0] as WeakReference<Uint8List>;
+  final weakRef2copy = message[1] as WeakReference<Uint8List>;
+  final weakRef3copy = message[3] as WeakReference<Uint8List>;
+  final weakRef4copy = message[5] as WeakReference<Uint8List>;
+  Expect.isNull(weakRef1copy.target);
+  Expect.equals(2, weakRef2copy.target?.length);
+  Expect.isNull(weakRef3copy.target);
+  Expect.equals(4, weakRef4copy.target?.length);
+
+  port.close();
+}
+
+Future<void> runHelper(SendPort port) async {
+  final object1 = Uint8List(1);
+  final weakRef1 = WeakReference(object1);
+  final object2 = Uint8List(2);
+  final weakRef2 = WeakReference(object2);
+  final object3 = Uint8List(3);
+  final weakRef3 = WeakReference(object3);
+  final object4 = Uint8List(4);
+  final weakRef4 = WeakReference(object4);
+
+  final key3 = Object();
+  final expando3 = Expando();
+  expando3[key3] = object3;
+  final key4 = Object();
+  final expando4 = Expando();
+  expando4[key4] = object4;
+
+  final message = <dynamic>[
+    weakRef1, // Does not have its target inluded.
+    weakRef2, // Has its target included later than itself.
+    object2,
+    weakRef3, // Does not have its target inluded.
+    expando3,
+    weakRef4, // Has its target included due to expando.
+    expando4,
+    key4,
+  ];
+  port.send(message);
+}
+
+class Nonce {
+  final int value;
+
+  Nonce(this.value);
+
+  String toString() => 'Nonce($value)';
+}
diff --git a/tests/lib_2/js/js_util/implicit_downcast_test.dart b/tests/lib_2/js/js_util/implicit_downcast_test.dart
new file mode 100644
index 0000000..b0d201b
--- /dev/null
+++ b/tests/lib_2/js/js_util/implicit_downcast_test.dart
@@ -0,0 +1,124 @@
+// 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 implicit downcasts in js_util.
+
+@JS()
+library js_util_implicit_downcast_test;
+
+import 'package:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+import 'package:expect/minitest.dart';
+
+@JS()
+external void eval(String code);
+
+@JS()
+class Foo {
+  external Foo(num a);
+
+  external num get a;
+  external void set a(_);
+  external num bar();
+}
+
+bool isComplianceMode() {
+  var stuff = [1, 'string'];
+  var a = stuff[0];
+  // Detect whether we are using --omit-implicit-checks.
+  try {
+    String s = a as dynamic;
+    return false;
+  } catch (e) {
+    // Ignore.
+  }
+  return true;
+}
+
+main() {
+  eval(r"""
+    function Foo(a) {
+      this.a = a;
+    }
+
+    Foo.prototype.bar = function() {
+      return this.a;
+    }
+    """);
+
+  if (isComplianceMode()) {
+    complianceModeTest();
+  } else {
+    omitImplicitChecksTest();
+  }
+}
+
+complianceModeTest() {
+  var f = Foo(42);
+  expect(js_util.getProperty<int>(f, 'a'), equals(42));
+  expect(() => js_util.getProperty<List>(f, 'a'), throws);
+
+  f.a = 5;
+  expect(js_util.callMethod<int>(f, 'bar', []), equals(5));
+  expect(() => js_util.callMethod<List>(f, 'bar', []), throws);
+
+  // Check optimized lowering of callMethod.
+  expect(() => js_util.callMethod<List>(f, 'bar', [1]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2, 3]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4]), throws);
+  expect(() => js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4, 5]), throws);
+
+  var f2 = Foo(7);
+  var fConstructor = js_util.getProperty(f, 'constructor');
+  expect(js_util.callConstructor<Foo>(fConstructor, [7]).a, equals(7));
+  expect(() => js_util.callConstructor<List>(fConstructor, [7]), throws);
+
+  // Check optimized lowering of callConstructor.
+  expect(() => js_util.callConstructor<List>(fConstructor, null), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, []), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, [1, 2]), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, [1, 2, 3]), throws);
+  expect(
+      () => js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4]), throws);
+  expect(() => js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4, 5]),
+      throws);
+}
+
+omitImplicitChecksTest() {
+  var f = Foo(42);
+  expect(js_util.getProperty<int>(f, 'a'), equals(42));
+  expect(js_util.getProperty<List>(f, 'a'), equals(42));
+
+  f.a = 5;
+  expect(js_util.callMethod<int>(f, 'bar', []), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', []), equals(5));
+
+  // Check optimized lowering of callMethod.
+  expect(js_util.callMethod<List>(f, 'bar', [1]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2, 3]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4]), equals(5));
+  expect(js_util.callMethod<List>(f, 'bar', [1, 2, 3, 4, 5]), equals(5));
+
+  var fConstructor = js_util.getProperty(f, 'constructor');
+  expect(js_util.callConstructor<Foo>(fConstructor, [7]).a, equals(7));
+  expect(
+      (js_util.callConstructor<List>(fConstructor, [7]) as Foo).a, equals(7));
+
+  // Check optimized lowering of callConstructor.
+  expect((js_util.callConstructor<List>(fConstructor, null) as Foo).a,
+      equals(null));
+  expect(
+      (js_util.callConstructor<List>(fConstructor, []) as Foo).a, equals(null));
+  expect((js_util.callConstructor<List>(fConstructor, [1, 2]) as Foo).a,
+      equals(1));
+  expect((js_util.callConstructor<List>(fConstructor, [1, 2, 3]) as Foo).a,
+      equals(1));
+  expect((js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4]) as Foo).a,
+      equals(1));
+  expect(
+      (js_util.callConstructor<List>(fConstructor, [1, 2, 3, 4, 5]) as Foo).a,
+      equals(1));
+}
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index bef1d69..cb20d17 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -45,6 +45,7 @@
 js/instanceof_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/is_check_and_as_cast_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/async_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
+js/js_util/implicit_downcast_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/javascriptobject_extensions_test.dart: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/jsify_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
 js/js_util/promise_reject_null_test: SkipByDesign # Issue 42085. CSP policy disallows injected JS code
@@ -70,7 +71,7 @@
 [ $runtime != dart_precompiled && ($runtime != vm || $compiler != dartk && $compiler != none) ]
 isolate/vm_rehash_test: SkipByDesign
 
-[ $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 convert/utf85_test: Skip # Pass, Slow Issue 20111.
 
 [ $arch != x64 || $runtime != vm ]
@@ -84,7 +85,7 @@
 # as that would involve running CFE (the front end) in simulator mode
 # to compile the URI file specified in spawnURI code.
 # These Isolate tests that use spawnURI are hence skipped on purpose.
-[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == dart_precompiled || $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 isolate/count_test: Skip # Isolate.spawnUri
 isolate/cross_isolate_message_test: Skip # Isolate.spawnUri
 isolate/deferred_in_isolate2_test: Skip # Isolate.spawnUri
diff --git a/tests/lib_2/lib_2_vm.status b/tests/lib_2/lib_2_vm.status
index c2e26f4..2409de0 100644
--- a/tests/lib_2/lib_2_vm.status
+++ b/tests/lib_2/lib_2_vm.status
@@ -66,7 +66,7 @@
 mirrors/library_uri_io_test: RuntimeError
 mirrors/library_uri_package_test: RuntimeError
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $hot_reload || $hot_reload_rollback ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $hot_reload || $hot_reload_rollback ]
 convert/chunked_conversion_utf88_test: SkipSlow
 convert/streamed_conversion_json_utf8_decode_test: SkipSlow
 convert/utf85_test: SkipSlow
diff --git a/tests/lib_2/mirrors/library_uri_package_test.dart b/tests/lib_2/mirrors/library_uri_package_test.dart
index 38afa90..8f55ead 100644
--- a/tests/lib_2/mirrors/library_uri_package_test.dart
+++ b/tests/lib_2/mirrors/library_uri_package_test.dart
@@ -17,7 +17,7 @@
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner as LibraryMirror;
   Uri uri = valueLibrary.uri;
-  if (uri.scheme != "https" ||
+  if (!uri.isScheme("https") ||
       uri.host != "dartlang.org" ||
       uri.path != "/dart2js-stripped-uri") {
     expect(uri, equals(expectedUri));
diff --git a/tests/lib_2/mirrors/mirrors_test.dart b/tests/lib_2/mirrors/mirrors_test.dart
index 11f81ec..5c4ef4e 100644
--- a/tests/lib_2/mirrors/mirrors_test.dart
+++ b/tests/lib_2/mirrors/mirrors_test.dart
@@ -201,7 +201,7 @@
   ClassMirror valueClass = valueMirror.type;
   LibraryMirror valueLibrary = valueClass.owner as LibraryMirror;
   Uri uri = valueLibrary.uri;
-  if (uri.scheme != "https" ||
+  if (!uri.isScheme("https") ||
       uri.host != "dartlang.org" ||
       uri.path != "/dart2js-stripped-uri") {
     expect(check(uri), isTrue);
diff --git a/tests/standalone/io/directory_rename_test.dart b/tests/standalone/io/directory_rename_test.dart
index de14cea..277b5ba 100644
--- a/tests/standalone/io/directory_rename_test.dart
+++ b/tests/standalone/io/directory_rename_test.dart
@@ -141,7 +141,10 @@
     } on FileSystemException catch (e) {
       Expect.isTrue(
           e.message.contains('Rename failed'), 'Unexpected error: $e');
-      if (Platform.isLinux || Platform.isMacOS) {
+      if (Platform.isWindows) {
+        Expect.isTrue(e.osError!.message.contains('cannot find the file'),
+            'Unexpected error: $e');
+      } else if (Platform.isLinux || Platform.isMacOS) {
         Expect.isTrue(e.osError!.message.contains('Not a directory'),
             'Unexpected error: $e');
       }
diff --git a/tests/standalone/io/http_connection_factory_test.dart b/tests/standalone/io/http_connection_factory_test.dart
new file mode 100644
index 0000000..6cc41cd
--- /dev/null
+++ b/tests/standalone/io/http_connection_factory_test.dart
@@ -0,0 +1,146 @@
+// 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";
+import 'dart:convert';
+import "package:expect/expect.dart";
+import 'http_proxy_test.dart' show setupProxyServer;
+import 'test_utils.dart' show withTempDir;
+
+testDirectConnection() async {
+  var server = await HttpServer.bind(InternetAddress.anyIPv6, 0);
+  server.forEach((HttpRequest request) {
+    request.response.write('Hello, world!');
+    request.response.close();
+  });
+  final serverUri = Uri.http("127.0.0.1:${server.port}", "/");
+  var client = HttpClient()
+    ..connectionFactory = (uri, proxyHost, proxyPort) {
+      Expect.isNull(proxyHost);
+      Expect.isNull(proxyPort);
+      Expect.equals(serverUri, uri);
+      return Socket.startConnect(uri.host, uri.port);
+    }
+    ..findProxy = (uri) => 'DIRECT';
+  final response = await client.getUrl(serverUri).then((request) {
+    return request.close();
+  });
+  Expect.equals(200, response.statusCode);
+  final responseText = await response
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello, world!", responseText);
+  client.close();
+  server.close();
+}
+
+testConnectionViaProxy() async {
+  var proxyServer = await setupProxyServer();
+  var server = await HttpServer.bind(InternetAddress.anyIPv6, 0);
+  server.forEach((HttpRequest request) {
+    request.response.write('Hello via Proxy');
+    request.response.close();
+  });
+  final serverUri = Uri.http("127.0.0.1:${server.port}", "/");
+  final client = HttpClient()
+    ..connectionFactory = (uri, proxyHost, proxyPort) {
+      Expect.equals("localhost", proxyHost);
+      Expect.equals(proxyServer.port, proxyPort);
+      Expect.equals(serverUri, uri);
+      return Socket.startConnect(proxyHost, proxyPort as int);
+    }
+    ..findProxy = (uri) => "PROXY localhost:${proxyServer.port}";
+  final response = await client.getUrl(serverUri).then((request) {
+    return request.close();
+  });
+  Expect.equals(200, response.statusCode);
+  final responseText = await response
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello via Proxy", responseText);
+  client.close();
+  server.close();
+  proxyServer.shutdown();
+}
+
+testDifferentAddressFamiliesAndProxySettings(String dir) async {
+  // Test a custom connection factory for Unix domain sockets that also allows
+  // regular INET/INET6 access with and without a proxy.
+  var proxyServer = await setupProxyServer();
+  var inet6Server = await HttpServer.bind(InternetAddress.anyIPv6, 0);
+  inet6Server.forEach((HttpRequest request) {
+    request.response.write('Hello via Proxy');
+    request.response.close();
+  });
+  final inet6ServerUri = Uri.http("127.0.0.1:${inet6Server.port}", "/");
+  final unixPath = '$dir/sock';
+  final unixAddress = InternetAddress(unixPath, type: InternetAddressType.unix);
+  final unixServer = await HttpServer.bind(unixAddress, 0);
+  unixServer.forEach((HttpRequest request) {
+    request.response.write('Hello via Unix');
+    request.response.close();
+  });
+  final client = HttpClient()
+    ..connectionFactory = (uri, proxyHost, proxyPort) {
+      if (uri.scheme == 'unix') {
+        assert(proxyHost == null);
+        assert(proxyPort == null);
+        var address = InternetAddress(unixPath, type: InternetAddressType.unix);
+        return Socket.startConnect(address, 0);
+      } else {
+        if (proxyHost != null && proxyPort != null) {
+          return Socket.startConnect(proxyHost, proxyPort);
+        }
+        return Socket.startConnect(uri.host, uri.port);
+      }
+    }
+    ..findProxy = (uri) {
+      if (uri.scheme == 'unix') {
+        // Proxy settings are not meaningful for Unix domain sockets.
+        return 'DIRECT';
+      } else {
+        return "PROXY localhost:${proxyServer.port}";
+      }
+    };
+  // Fetch a URL from the INET6 server and verify the results.
+  final inet6Response = await client.getUrl(inet6ServerUri).then((request) {
+    return request.close();
+  });
+  Expect.equals(200, inet6Response.statusCode);
+  final inet6ResponseText = await inet6Response
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello via Proxy", inet6ResponseText);
+  // Fetch a URL from the Unix server and verify the results.
+  final unixResponse = await client
+      .getUrl(Uri(
+          scheme: "unix",
+          // Connection pooling is based on the host/port combination
+          // so ensure that the host is unique for unique logical
+          // endpoints. Also, the `host` property is converted to
+          // lowercase so you cannot use it directly for file paths.
+          host: 'dummy',
+          path: "/"))
+      .then((request) {
+    return request.close();
+  });
+  Expect.equals(200, unixResponse.statusCode);
+  final unixResponseText = await unixResponse
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello via Unix", unixResponseText);
+  client.close();
+  inet6Server.close();
+  unixServer.close();
+  proxyServer.shutdown();
+}
+
+main() async {
+  await testDirectConnection();
+  await testConnectionViaProxy();
+  if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testDifferentAddressFamiliesAndProxySettings('${dir.path}');
+    });
+  }
+}
diff --git a/tests/standalone/io/http_key_log_test.dart b/tests/standalone/io/http_key_log_test.dart
new file mode 100644
index 0000000..0b948a2
--- /dev/null
+++ b/tests/standalone/io/http_key_log_test.dart
@@ -0,0 +1,84 @@
+// 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.
+//
+// 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
+
+import "dart:async";
+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<HttpServer> startEchoServer() {
+  return HttpServer.bindSecure(HOST, 0, serverContext).then((server) {
+    server.listen((HttpRequest req) {
+      final res = req.response;
+      res.write("Test");
+      res.close();
+    });
+    return server;
+  });
+}
+
+testSuccess(HttpServer server) async {
+  var log = "";
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  final client = HttpClient(context: clientContext);
+  client.keyLog = (String line) {
+    log += line;
+  };
+  final request =
+      await client.getUrl(Uri.parse('https://localhost:${server.port}/test'));
+  final response = await request.close();
+  await response.drain();
+
+  Expect.contains("CLIENT_HANDSHAKE_TRAFFIC_SECRET", log);
+}
+
+testExceptionInKeyLogFunction(HttpServer server) async {
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  final client = HttpClient(context: clientContext);
+  var numCalls = 0;
+  client.keyLog = (String line) {
+    ++numCalls;
+    throw FileSystemException("Something bad happened");
+  };
+  final request =
+      await client.getUrl(Uri.parse('https://localhost:${server.port}/test'));
+  final response = await request.close();
+  await response.drain();
+
+  Expect.notEquals(0, numCalls);
+}
+
+void main() async {
+  asyncStart();
+  await InternetAddress.lookup("localhost").then((hosts) => HOST = hosts.first);
+  final server = await startEchoServer();
+
+  await testSuccess(server);
+  await testExceptionInKeyLogFunction(server);
+
+  await server.close();
+  asyncEnd();
+}
diff --git a/tests/standalone/io/http_override_test.dart b/tests/standalone/io/http_override_test.dart
index 4be81c7..fccbbe4 100644
--- a/tests/standalone/io/http_override_test.dart
+++ b/tests/standalone/io/http_override_test.dart
@@ -41,6 +41,10 @@
   set authenticate(Future<bool> f(Uri url, String scheme, String realm)?) {}
   void addCredentials(
       Uri url, String realm, HttpClientCredentials credentials) {}
+  set connectionFactory(
+      Future<ConnectionTask<Socket>> Function(
+              Uri url, String? proxyHost, int? proxyPort)?
+          f) {}
   set findProxy(String f(Uri url)?) {}
   set authenticateProxy(
       Future<bool> f(String host, int port, String scheme, String realm)?) {}
@@ -48,6 +52,7 @@
       String host, int port, String realm, HttpClientCredentials credentials) {}
   set badCertificateCallback(
       bool callback(X509Certificate cert, String host, int port)?) {}
+  void set keyLog(Function(String line)? callback) {}
   void close({bool force: false}) {}
 }
 
@@ -85,6 +90,10 @@
   set authenticate(Future<bool> f(Uri url, String scheme, String realm)?) {}
   void addCredentials(
       Uri url, String realm, HttpClientCredentials credentials) {}
+  set connectionFactory(
+      Future<ConnectionTask<Socket>> Function(
+              Uri url, String? proxyHost, int? proxyPort)?
+          f) {}
   set findProxy(String f(Uri url)?) {}
   set authenticateProxy(
       Future<bool> f(String host, int port, String scheme, String realm)?) {}
@@ -92,6 +101,7 @@
       String host, int port, String realm, HttpClientCredentials credentials) {}
   set badCertificateCallback(
       bool callback(X509Certificate cert, String host, int port)?) {}
+  void set keyLog(Function(String line)? callback) {}
   void close({bool force: false}) {}
 }
 
diff --git a/tests/standalone/io/http_redirect_test.dart b/tests/standalone/io/http_redirect_test.dart
index 1a19222..7ccf54d 100644
--- a/tests/standalone/io/http_redirect_test.dart
+++ b/tests/standalone/io/http_redirect_test.dart
@@ -6,6 +6,7 @@
 import "package:expect/expect.dart";
 import "dart:async";
 import "dart:io";
+import "dart:mirrors";
 
 Future<HttpServer> setupServer({Uri? targetServer}) {
   final completer = new Completer<HttpServer>();
@@ -343,6 +344,95 @@
   });
 }
 
+void testShouldCopyHeadersOnRedirect() {
+  final clientClass = reflect(HttpClient()).type;
+  final fnName = Symbol("shouldCopyHeaderOnRedirect");
+
+  shouldCopyHeaderOnRedirect(
+          String headerKey, Uri originalUrl, Uri redirectUri) =>
+      clientClass.invoke(
+          fnName, [headerKey, originalUrl, redirectUri]).reflectee as bool;
+
+  checkShouldCopyHeader(
+      String headerKey, String originalUrl, String redirectUri, bool expected) {
+    if (shouldCopyHeaderOnRedirect(
+            headerKey, Uri.parse(originalUrl), Uri.parse(redirectUri)) !=
+        expected) {
+      Expect.fail(
+          "shouldCopyHeaderOnRedirect($headerKey, $originalUrl, $redirectUri) => ${!expected}");
+    }
+  }
+
+  // Redirect on localhost.
+  checkShouldCopyHeader(
+      "authorization", "http://localhost", "http://localhost/foo", true);
+  checkShouldCopyHeader(
+      "cat", "http://localhost", "http://localhost/foo", true);
+
+  // Redirect to same IP address.
+  checkShouldCopyHeader("authorization", "http://192.168.20.20",
+      "http://192.168.20.20/foo", true);
+  checkShouldCopyHeader(
+      "cat", "http://192.168.20.20", "http://192.168.20.20/foo", true);
+
+  // Redirect to different IP address.
+  checkShouldCopyHeader(
+      "authorization", "http://192.168.20.20", "http://192.168.20.99", false);
+  checkShouldCopyHeader(
+      "cat", "http://192.168.20.20", "http://192.168.20.99", true);
+
+  // Redirect to same domain.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "http://foo.com/foo", true);
+  checkShouldCopyHeader("cat", "http://foo.com", "http://foo.com/foo", true);
+
+  // Redirect to same domain with explicit ports.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "http://foo.com:80/foo", true);
+  checkShouldCopyHeader("cat", "http://foo.com", "http://foo.com:80/foo", true);
+
+  // Redirect to subdomain.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com", "https://www.foo.com", true);
+  checkShouldCopyHeader("cat", "https://foo.com", "https://www.foo.com", true);
+
+  // Redirect to different domain.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com", "https://wwwfoo.com", false);
+  checkShouldCopyHeader("cat", "https://foo.com", "https://wwwfoo.com", true);
+
+  // Redirect to different port.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "http://foo.com:81", false);
+  checkShouldCopyHeader("cat", "http://foo.com", "http://foo.com:81", true);
+
+  // Redirect from secure to insecure.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com", "http://foo.com", false);
+  checkShouldCopyHeader("cat", "https://foo.com", "http://foo.com", true);
+
+  // Redirect from secure to insecure, same port.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com:8888", "http://foo.com:8888", false);
+  checkShouldCopyHeader(
+      "cat", "https://foo.com:8888", "http://foo.com:8888", true);
+
+  // Redirect from insecure to secure.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "https://foo.com", false);
+  checkShouldCopyHeader("cat", "http://foo.com", "https://foo.com", true);
+
+  // Redirect to subdomain, different port.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com:80", "https://www.foo.com:81", false);
+  checkShouldCopyHeader(
+      "cat", "https://foo.com:80", "https://www.foo.com:81", true);
+
+  // Different header casting:
+  checkShouldCopyHeader(
+      "AuThOrIzAtiOn", "https://foo.com", "https://bar.com", false);
+}
+
 void testCrossDomainAutoRedirectWithHeaders() {
   setupTargetServer().then((targetServer) {
     setupServer(
@@ -517,6 +607,7 @@
   testManualRedirectWithHeaders();
   testAutoRedirect();
   testAutoRedirectWithHeaders();
+  testShouldCopyHeadersOnRedirect();
   testCrossDomainAutoRedirectWithHeaders();
   testAutoRedirect301POST();
   testAutoRedirect303POST();
diff --git a/tests/standalone/io/raw_secure_socket_ssl_read_error_test.dart b/tests/standalone/io/raw_secure_socket_ssl_read_error_test.dart
new file mode 100644
index 0000000..251a748
--- /dev/null
+++ b/tests/standalone/io/raw_secure_socket_ssl_read_error_test.dart
@@ -0,0 +1,69 @@
+// 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
+// OtherResources=certificates/untrusted_server_chain.pem
+// OtherResources=certificates/untrusted_server_key.pem
+
+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');
+
+SecurityContext clientContext = new SecurityContext()
+  ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+testSslReadError() async {
+  // This test provokes an error in the BoringSSL `SSL_read` function by
+  // sending unencrypted bytes through a secure connection.
+  // See https://github.com/dart-lang/sdk/issues/48311
+  final serverSocket = await RawServerSocket.bind(HOST, 0);
+  serverSocket.forEach((socket) async {
+    final secureSocket = await RawSecureSocket.secureServer(
+        socket, serverContext,
+        subscription: socket.listen((event) {}));
+    secureSocket.write([1, 2, 3]);
+    // Send content using the original unencrypted connection to provoke a
+    // TtsException in the client.
+    socket.write([1, 2, 3]);
+    secureSocket.close();
+    serverSocket.close();
+  });
+
+  final Socket clientSocket = await Socket.connect(HOST, serverSocket.port);
+  final secureClientSocket =
+      await SecureSocket.secure(clientSocket, context: clientContext);
+  secureClientSocket.listen((data) {
+    Expect.fail("expected TlsException");
+  }, onError: (err) {
+    Expect.isTrue(err is TlsException, "unexpected error: $err");
+    secureClientSocket.close();
+    clientSocket.close();
+  });
+}
+
+main() {
+  print("asyncStart main");
+  asyncStart();
+  InternetAddress.lookup("localhost").then((hosts) async {
+    HOST = hosts.first;
+    await testSslReadError();
+    print("asyncEnd main");
+    asyncEnd();
+  });
+}
diff --git a/tests/standalone/io/secure_key_log_test.dart b/tests/standalone/io/secure_key_log_test.dart
new file mode 100644
index 0000000..aec2270
--- /dev/null
+++ b/tests/standalone/io/secure_key_log_test.dart
@@ -0,0 +1,87 @@
+// 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.
+//
+// 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
+
+import "dart:async";
+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 {
+  var log = "";
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  await SecureSocket.connect(HOST, server.port, context: clientContext,
+      keyLog: (line) {
+    log += line;
+  }).then((socket) {
+    socket.write("Hello server.");
+    socket.close();
+    return socket.drain().then((value) {
+      Expect.contains("CLIENT_HANDSHAKE_TRAFFIC_SECRET", log);
+      return server;
+    });
+  });
+}
+
+testExceptionInKeyLogFunction(SecureServerSocket server) async {
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  var numCalls = 0;
+  await SecureSocket.connect(HOST, server.port, context: clientContext,
+      keyLog: (line) {
+    ++numCalls;
+    throw FileSystemException("Something bad happened");
+  }).then((socket) {
+    socket.close();
+    return socket.drain().then((value) {
+      Expect.notEquals(0, numCalls);
+      return server;
+    });
+  });
+}
+
+void main() async {
+  asyncStart();
+  await InternetAddress.lookup("localhost").then((hosts) => HOST = hosts.first);
+  final server = await startEchoServer();
+
+  await testSuccess(server);
+  await testExceptionInKeyLogFunction(server);
+
+  await server.close();
+  asyncEnd();
+}
diff --git a/tests/standalone/io/secure_socket_renegotiate_client.dart b/tests/standalone/io/secure_socket_renegotiate_client.dart
deleted file mode 100644
index 775891b..0000000
--- a/tests/standalone/io/secure_socket_renegotiate_client.dart
+++ /dev/null
@@ -1,72 +0,0 @@
-// 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.
-
-// Client for secure_socket_renegotiate_test, that runs in a subprocess.
-// The test verifies that client certificates work, if the client and server
-// are in separate processes, and that connection renegotiation can request
-// a client certificate to be sent.
-
-import "dart:async";
-import "dart:convert";
-import "dart:io";
-
-const HOST_NAME = "localhost";
-String localFile(path) => Platform.script.resolve(path).toFilePath();
-
-SecurityContext clientContext = new SecurityContext()
-  ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
-
-class ExpectException implements Exception {
-  ExpectException(this.message);
-  String toString() => message;
-  String message;
-}
-
-void expectEquals(expected, actual) {
-  if (actual != expected) {
-    throw new ExpectException('Expected $expected, found $actual');
-  }
-}
-
-void expect(condition) {
-  if (!condition) {
-    throw new ExpectException('');
-  }
-}
-
-void runClient(int port) {
-  SecureSocket.connect(HOST_NAME, port, context: clientContext)
-      .then((SecureSocket socket) {
-    X509Certificate? certificate = socket.peerCertificate;
-    expect(certificate != null);
-    expectEquals('CN=localhost', certificate!.subject);
-    expectEquals('CN=myauthority', certificate.issuer);
-    StreamIterator<String> input = new StreamIterator(
-        socket.transform(utf8.decoder).transform(new LineSplitter()));
-    socket.writeln('first');
-    input.moveNext().then((success) {
-      expect(success);
-      expectEquals('first reply', input.current);
-      socket.renegotiate();
-      socket.writeln('renegotiated');
-      return input.moveNext();
-    }).then((success) {
-      expect(success);
-      expectEquals('server renegotiated', input.current);
-      X509Certificate? certificate = socket.peerCertificate;
-      expect(certificate != null);
-      expectEquals("CN=localhost", certificate!.subject);
-      expectEquals("CN=myauthority", certificate.issuer);
-      socket.writeln('second');
-      return input.moveNext();
-    }).then((success) {
-      expect(success != true);
-      socket.close();
-    });
-  });
-}
-
-void main(List<String> args) {
-  runClient(int.parse(args[0]));
-}
diff --git a/tests/standalone/io/secure_socket_renegotiate_test.dart b/tests/standalone/io/secure_socket_renegotiate_test.dart
deleted file mode 100644
index 05aa2f1..0000000
--- a/tests/standalone/io/secure_socket_renegotiate_test.dart
+++ /dev/null
@@ -1,85 +0,0 @@
-// 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.
-//
-// OtherResources=certificates/server_chain.pem
-// OtherResources=certificates/server_key.pem
-// OtherResources=secure_socket_renegotiate_client.dart
-
-// This test verifies that client certificates work, if the client and server
-// are in separate processes, and that connection renegotiation works, and
-// can request a client certificate to be sent.
-
-import "dart:async";
-import "dart:convert";
-import "dart:io";
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-
-const HOST_NAME = "localhost";
-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> runServer() {
-  return SecureServerSocket.bind(HOST_NAME, 0, serverContext)
-      .then((SecureServerSocket server) {
-    server.listen((SecureSocket socket) {
-      Expect.isNull(socket.peerCertificate);
-
-      StreamIterator<String> input = new StreamIterator(
-          utf8.decoder.bind(socket).transform(new LineSplitter()));
-      input.moveNext().then((success) {
-        Expect.isTrue(success);
-        Expect.equals('first', input.current);
-        socket.writeln('first reply');
-        return input.moveNext();
-      }).then((success) {
-        Expect.isTrue(success);
-        Expect.equals('renegotiated', input.current);
-        Expect.isNull(socket.peerCertificate);
-        socket.renegotiate(
-            requestClientCertificate: true,
-            requireClientCertificate: true,
-            useSessionCache: false);
-        socket.writeln('server renegotiated');
-        return input.moveNext();
-      }).then((success) {
-        Expect.isTrue(success);
-        Expect.equals('second', input.current);
-        X509Certificate certificate = socket.peerCertificate!;
-        Expect.equals("CN=localhost", certificate.subject);
-        Expect.equals("CN=myauthority", certificate.issuer);
-        server.close();
-        socket.close();
-      });
-    });
-    return server;
-  });
-}
-
-void main() {
-  runServer().then((SecureServerSocket server) {
-    var clientScript = Platform.script
-        .resolve('secure_socket_renegotiate_client.dart')
-        .toFilePath();
-    Process.run(
-            Platform.executable,
-            []
-              ..addAll(Platform.executableArguments)
-              ..addAll([clientScript, server.port.toString()]))
-        .then((ProcessResult result) {
-      if (result.exitCode != 0) {
-        print("Client failed, stdout:");
-        print(result.stdout);
-        print("  stderr:");
-        print(result.stderr);
-        Expect.fail('Client subprocess exit code: ${result.exitCode}');
-      }
-    });
-  });
-}
diff --git a/tests/standalone/io/web_socket_compression_test.dart b/tests/standalone/io/web_socket_compression_test.dart
index 37b458e..56ada33 100644
--- a/tests/standalone/io/web_socket_compression_test.dart
+++ b/tests/standalone/io/web_socket_compression_test.dart
@@ -55,7 +55,7 @@
     String nonce = base64.encode(nonceData);
 
     uri = new Uri(
-        scheme: uri.scheme == "wss" ? "https" : "http",
+        scheme: uri.isScheme("wss") ? "https" : "http",
         userInfo: uri.userInfo,
         host: uri.host,
         port: uri.port,
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 1c9d7d1..905ce63 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -101,7 +101,7 @@
 fragmentation_test: SkipSlow
 fragmentation_typed_data_test: SkipSlow
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 io/socket_sigpipe_test: SkipByDesign # Test uses ffi
 
 [ $compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk ]
diff --git a/tests/standalone/standalone_kernel.status b/tests/standalone/standalone_kernel.status
index a958509..41bcfb0 100644
--- a/tests/standalone/standalone_kernel.status
+++ b/tests/standalone/standalone_kernel.status
@@ -52,12 +52,12 @@
 # Enabling of dartk for sim{arm,arm64} revealed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
-[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 io/file_blocking_lock_test: Crash # Please triage.
 io/file_lock_test: Slow, Pass
 map_insert_remove_oom_test: Skip # Heap limit too low.
 
-[ $compiler == dartk && ($arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 io/http_bind_test: Slow, Pass
 
 [ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
@@ -97,7 +97,6 @@
 io/secure_multiple_client_server_test: Skip # Flaky.
 io/secure_server_closing_test: Skip # Flaky.
 io/secure_server_socket_test: Skip # Flaky.
-io/secure_socket_renegotiate_test: Crash
 io/socket_many_connections_test: Skip # Flaky
 io/web_socket_error_test: Skip # Flaky
 io/web_socket_ping_test: Skip # Flaky.
diff --git a/tests/standalone/standalone_precompiled.status b/tests/standalone/standalone_precompiled.status
index 536731b..69da5e9 100644
--- a/tests/standalone/standalone_precompiled.status
+++ b/tests/standalone/standalone_precompiled.status
@@ -15,6 +15,7 @@
 io/file_lock_test: Skip
 io/file_read_special_device_test: Skip
 io/http_client_stays_alive_test: Skip
+io/http_redirect_test: SkipByDesign # Requires dart:mirrors
 io/http_response_deadline_test: Skip
 io/http_server_close_response_after_error_test: Skip
 io/https_unauthorized_test: Skip
diff --git a/tests/standalone/standalone_vm.status b/tests/standalone/standalone_vm.status
index 86c5c3c..067e3e05 100644
--- a/tests/standalone/standalone_vm.status
+++ b/tests/standalone/standalone_vm.status
@@ -61,7 +61,7 @@
 [ $mode == release && $runtime == vm && $system == windows ]
 io/http_server_close_response_after_error_test: Pass, Timeout # Issue 28370: timeout.
 
-[ $runtime == dart_precompiled && $system == linux && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == x64) ]
+[ $runtime == dart_precompiled && $system == linux && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $arch == x64) ]
 io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 35192
 
 [ $runtime == vm && ($arch == arm || $arch == arm64) ]
@@ -71,7 +71,7 @@
 io/file_typed_data_test: Skip # Issue 26109
 io/process_sync_test: Timeout, Pass
 
-[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 io/dart_std_io_pipe_test: Timeout, Pass
 io/http_client_stays_alive_test: Skip # Spawns process in Dart2 mode.
 io/process_sync_test: Timeout, Pass
diff --git a/tests/standalone_2/io/directory_rename_test.dart b/tests/standalone_2/io/directory_rename_test.dart
index 5f47913..18cbba3 100644
--- a/tests/standalone_2/io/directory_rename_test.dart
+++ b/tests/standalone_2/io/directory_rename_test.dart
@@ -143,7 +143,10 @@
     } on FileSystemException catch (e) {
       Expect.isTrue(
           e.message.contains('Rename failed'), 'Unexpected error: $e');
-      if (Platform.isLinux || Platform.isMacOS) {
+      if (Platform.isWindows) {
+        Expect.isTrue(e.osError.message.contains('cannot find the file'),
+            'Unexpected error: $e');
+      } else if (Platform.isLinux || Platform.isMacOS) {
         Expect.isTrue(e.osError.message.contains('Not a directory'),
             'Unexpected error: $e');
       }
diff --git a/tests/standalone_2/io/http_connection_factory_test.dart b/tests/standalone_2/io/http_connection_factory_test.dart
new file mode 100644
index 0000000..eda4ac2
--- /dev/null
+++ b/tests/standalone_2/io/http_connection_factory_test.dart
@@ -0,0 +1,147 @@
+// 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:io";
+import 'dart:convert';
+import "package:expect/expect.dart";
+import 'http_proxy_test.dart' show setupProxyServer;
+import 'test_utils.dart' show withTempDir;
+
+testDirectConnection() async {
+  var server = await HttpServer.bind(InternetAddress.anyIPv6, 0);
+  server.forEach((HttpRequest request) {
+    request.response.write('Hello, world!');
+    request.response.close();
+  });
+  final serverUri = Uri.http("127.0.0.1:${server.port}", "/");
+  var client = HttpClient()
+    ..connectionFactory = (uri, proxyHost, proxyPort) {
+      Expect.isNull(proxyHost);
+      Expect.isNull(proxyPort);
+      Expect.equals(serverUri, uri);
+      return Socket.startConnect(uri.host, uri.port);
+    }
+    ..findProxy = (uri) => 'DIRECT';
+  final response = await client.getUrl(serverUri).then((request) {
+    return request.close();
+  });
+  Expect.equals(200, response.statusCode);
+  final responseText = await response
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello, world!", responseText);
+  client.close();
+  server.close();
+}
+
+testConnectionViaProxy() async {
+  var proxyServer = await setupProxyServer();
+  var server = await HttpServer.bind(InternetAddress.anyIPv6, 0);
+  server.forEach((HttpRequest request) {
+    request.response.write('Hello via Proxy');
+    request.response.close();
+  });
+  final serverUri = Uri.http("127.0.0.1:${server.port}", "/");
+  final client = HttpClient()
+    ..connectionFactory = (uri, proxyHost, proxyPort) {
+      Expect.equals("localhost", proxyHost);
+      Expect.equals(proxyServer.port, proxyPort);
+      Expect.equals(serverUri, uri);
+      return Socket.startConnect(proxyHost, proxyPort as int);
+    }
+    ..findProxy = (uri) => "PROXY localhost:${proxyServer.port}";
+  final response = await client.getUrl(serverUri).then((request) {
+    return request.close();
+  });
+  Expect.equals(200, response.statusCode);
+  final responseText = await response
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello via Proxy", responseText);
+  client.close();
+  server.close();
+  proxyServer.shutdown();
+}
+
+testDifferentAddressFamiliesAndProxySettings(String dir) async {
+  // Test a custom connection factory for Unix domain sockets that also allows
+  // regular INET/INET6 access with and without a proxy.
+  var proxyServer = await setupProxyServer();
+  var inet6Server = await HttpServer.bind(InternetAddress.anyIPv6, 0);
+  inet6Server.forEach((HttpRequest request) {
+    request.response.write('Hello via Proxy');
+    request.response.close();
+  });
+  final inet6ServerUri = Uri.http("127.0.0.1:${inet6Server.port}", "/");
+  final unixPath = '$dir/sock';
+  final unixAddress = InternetAddress(unixPath, type: InternetAddressType.unix);
+  final unixServer = await HttpServer.bind(unixAddress, 0);
+  unixServer.forEach((HttpRequest request) {
+    request.response.write('Hello via Unix');
+    request.response.close();
+  });
+  final client = HttpClient()
+    ..connectionFactory = (uri, proxyHost, proxyPort) {
+      if (uri.scheme == 'unix') {
+        assert(proxyHost == null);
+        assert(proxyPort == null);
+        var address = InternetAddress(unixPath, type: InternetAddressType.unix);
+        return Socket.startConnect(address, 0);
+      } else {
+        if (proxyHost != null && proxyPort != null) {
+          return Socket.startConnect(proxyHost, proxyPort);
+        }
+        return Socket.startConnect(uri.host, uri.port);
+      }
+    }
+    ..findProxy = (uri) {
+      if (uri.scheme == 'unix') {
+        // Proxy settings are not meaningful for Unix domain sockets.
+        return 'DIRECT';
+      } else {
+        return "PROXY localhost:${proxyServer.port}";
+      }
+    };
+// Fetch a URL from the INET6 server and verify the results.
+  final inet6Response = await client.getUrl(inet6ServerUri).then((request) {
+    return request.close();
+  });
+  Expect.equals(200, inet6Response.statusCode);
+  final inet6ResponseText = await inet6Response
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello via Proxy", inet6ResponseText);
+// Fetch a URL from the Unix server and verify the results.
+  final unixResponse = await client
+      .getUrl(Uri(
+          scheme: "unix",
+          // Connection pooling is based on the host/port combination
+          // so ensure that the host is unique for unique logical
+          // endpoints. Also, the `host` property is converted to
+          // lowercase so you cannot use it directly for file paths.
+          host: 'dummy',
+          path: "/"))
+      .then((request) {
+    return request.close();
+  });
+  Expect.equals(200, unixResponse.statusCode);
+  final unixResponseText = await unixResponse
+      .transform(utf8.decoder)
+      .fold('', (String x, String y) => x + y);
+  Expect.equals("Hello via Unix", unixResponseText);
+  client.close();
+  inet6Server.close();
+  unixServer.close();
+  proxyServer.shutdown();
+}
+
+main() async {
+  await testDirectConnection();
+  await testConnectionViaProxy();
+  if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testDifferentAddressFamiliesAndProxySettings('${dir.path}');
+    });
+  }
+}
diff --git a/tests/standalone_2/io/http_key_log_test.dart b/tests/standalone_2/io/http_key_log_test.dart
new file mode 100644
index 0000000..ecfc916
--- /dev/null
+++ b/tests/standalone_2/io/http_key_log_test.dart
@@ -0,0 +1,86 @@
+// 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.
+//
+// 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
+
+// @dart = 2.9
+
+import "dart:async";
+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<HttpServer> startEchoServer() {
+  return HttpServer.bindSecure(HOST, 0, serverContext).then((server) {
+    server.listen((HttpRequest req) {
+      final res = req.response;
+      res.write("Test");
+      res.close();
+    });
+    return server;
+  });
+}
+
+testSuccess(HttpServer server) async {
+  var log = "";
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  final client = HttpClient(context: clientContext);
+  client.keyLog = (String line) {
+    log += line;
+  };
+  final request =
+      await client.getUrl(Uri.parse('https://localhost:${server.port}/test'));
+  final response = await request.close();
+  await response.drain();
+
+  Expect.contains("CLIENT_HANDSHAKE_TRAFFIC_SECRET", log);
+}
+
+testExceptionInKeyLogFunction(HttpServer server) async {
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  final client = HttpClient(context: clientContext);
+  var numCalls = 0;
+  client.keyLog = (String line) {
+    ++numCalls;
+    throw FileSystemException("Something bad happened");
+  };
+  final request =
+      await client.getUrl(Uri.parse('https://localhost:${server.port}/test'));
+  final response = await request.close();
+  await response.drain();
+
+  Expect.notEquals(0, numCalls);
+}
+
+void main() async {
+  asyncStart();
+  await InternetAddress.lookup("localhost").then((hosts) => HOST = hosts.first);
+  final server = await startEchoServer();
+
+  await testSuccess(server);
+  await testExceptionInKeyLogFunction(server);
+
+  await server.close();
+  asyncEnd();
+}
diff --git a/tests/standalone_2/io/http_override_test.dart b/tests/standalone_2/io/http_override_test.dart
index 668263b..b3a8255 100644
--- a/tests/standalone_2/io/http_override_test.dart
+++ b/tests/standalone_2/io/http_override_test.dart
@@ -39,6 +39,10 @@
   set authenticate(Future<bool> f(Uri url, String scheme, String realm)) {}
   void addCredentials(
       Uri url, String realm, HttpClientCredentials credentials) {}
+  set connectionFactory(
+      Future<ConnectionTask<Socket>> Function(
+              Uri url, String proxyHost, int proxyPort)
+          f) {}
   set findProxy(String f(Uri url)) {}
   set authenticateProxy(
       Future<bool> f(String host, int port, String scheme, String realm)) {}
@@ -46,6 +50,8 @@
       String host, int port, String realm, HttpClientCredentials credentials) {}
   set badCertificateCallback(
       bool callback(X509Certificate cert, String host, int port)) {}
+  void set keyLog(Function(String line) callback) =>
+      throw UnsupportedError("keyLog not implemented");
   void close({bool force: false}) {}
 }
 
@@ -79,6 +85,10 @@
   set authenticate(Future<bool> f(Uri url, String scheme, String realm)) {}
   void addCredentials(
       Uri url, String realm, HttpClientCredentials credentials) {}
+  set connectionFactory(
+      Future<ConnectionTask<Socket>> Function(
+              Uri url, String proxyHost, int proxyPort)
+          f) {}
   set findProxy(String f(Uri url)) {}
   set authenticateProxy(
       Future<bool> f(String host, int port, String scheme, String realm)) {}
@@ -86,6 +96,8 @@
       String host, int port, String realm, HttpClientCredentials credentials) {}
   set badCertificateCallback(
       bool callback(X509Certificate cert, String host, int port)) {}
+  void set keyLog(Function(String line) callback) =>
+      throw UnsupportedError("keyLog not implemented");
   void close({bool force: false}) {}
 }
 
diff --git a/tests/standalone_2/io/http_redirect_test.dart b/tests/standalone_2/io/http_redirect_test.dart
index e851045..1d4fde8 100644
--- a/tests/standalone_2/io/http_redirect_test.dart
+++ b/tests/standalone_2/io/http_redirect_test.dart
@@ -8,6 +8,7 @@
 import "package:expect/expect.dart";
 import "dart:async";
 import "dart:io";
+import "dart:mirrors";
 
 Future<HttpServer> setupServer({Uri targetServer}) {
   Completer completer = new Completer<HttpServer>();
@@ -345,6 +346,95 @@
   });
 }
 
+void testShouldCopyHeadersOnRedirect() {
+  final clientClass = reflect(HttpClient()).type;
+  final fnName = Symbol("shouldCopyHeaderOnRedirect");
+
+  shouldCopyHeaderOnRedirect(
+          String headerKey, Uri originalUrl, Uri redirectUri) =>
+      clientClass.invoke(
+          fnName, [headerKey, originalUrl, redirectUri]).reflectee as bool;
+
+  checkShouldCopyHeader(
+      String headerKey, String originalUrl, String redirectUri, bool expected) {
+    if (shouldCopyHeaderOnRedirect(
+            headerKey, Uri.parse(originalUrl), Uri.parse(redirectUri)) !=
+        expected) {
+      Expect.fail(
+          "shouldCopyHeaderOnRedirect($headerKey, $originalUrl, $redirectUri) => ${!expected}");
+    }
+  }
+
+  // Redirect on localhost.
+  checkShouldCopyHeader(
+      "authorization", "http://localhost", "http://localhost/foo", true);
+  checkShouldCopyHeader(
+      "cat", "http://localhost", "http://localhost/foo", true);
+
+  // Redirect to same IP address.
+  checkShouldCopyHeader("authorization", "http://192.168.20.20",
+      "http://192.168.20.20/foo", true);
+  checkShouldCopyHeader(
+      "cat", "http://192.168.20.20", "http://192.168.20.20/foo", true);
+
+  // Redirect to different IP address.
+  checkShouldCopyHeader(
+      "authorization", "http://192.168.20.20", "http://192.168.20.99", false);
+  checkShouldCopyHeader(
+      "cat", "http://192.168.20.20", "http://192.168.20.99", true);
+
+  // Redirect to same domain.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "http://foo.com/foo", true);
+  checkShouldCopyHeader("cat", "http://foo.com", "http://foo.com/foo", true);
+
+  // Redirect to same domain with explicit ports.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "http://foo.com:80/foo", true);
+  checkShouldCopyHeader("cat", "http://foo.com", "http://foo.com:80/foo", true);
+
+  // Redirect to subdomain.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com", "https://www.foo.com", true);
+  checkShouldCopyHeader("cat", "https://foo.com", "https://www.foo.com", true);
+
+  // Redirect to different domain.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com", "https://wwwfoo.com", false);
+  checkShouldCopyHeader("cat", "https://foo.com", "https://wwwfoo.com", true);
+
+  // Redirect to different port.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "http://foo.com:81", false);
+  checkShouldCopyHeader("cat", "http://foo.com", "http://foo.com:81", true);
+
+  // Redirect from secure to insecure.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com", "http://foo.com", false);
+  checkShouldCopyHeader("cat", "https://foo.com", "http://foo.com", true);
+
+  // Redirect from secure to insecure, same port.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com:8888", "http://foo.com:8888", false);
+  checkShouldCopyHeader(
+      "cat", "https://foo.com:8888", "http://foo.com:8888", true);
+
+  // Redirect from insecure to secure.
+  checkShouldCopyHeader(
+      "authorization", "http://foo.com", "https://foo.com", false);
+  checkShouldCopyHeader("cat", "http://foo.com", "https://foo.com", true);
+
+  // Redirect to subdomain, different port.
+  checkShouldCopyHeader(
+      "authorization", "https://foo.com:80", "https://www.foo.com:81", false);
+  checkShouldCopyHeader(
+      "cat", "https://foo.com:80", "https://www.foo.com:81", true);
+
+  // Different header casting:
+  checkShouldCopyHeader(
+      "AuThOrIzAtiOn", "https://foo.com", "https://bar.com", false);
+}
+
 void testCrossDomainAutoRedirectWithHeaders() {
   setupTargetServer().then((targetServer) {
     setupServer(
@@ -519,6 +609,7 @@
   testManualRedirectWithHeaders();
   testAutoRedirect();
   testAutoRedirectWithHeaders();
+  testShouldCopyHeadersOnRedirect();
   testCrossDomainAutoRedirectWithHeaders();
   testAutoRedirect301POST();
   testAutoRedirect303POST();
diff --git a/tests/standalone_2/io/raw_secure_socket_ssl_read_error_test.dart b/tests/standalone_2/io/raw_secure_socket_ssl_read_error_test.dart
new file mode 100644
index 0000000..e91f9e2
--- /dev/null
+++ b/tests/standalone_2/io/raw_secure_socket_ssl_read_error_test.dart
@@ -0,0 +1,71 @@
+// 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
+// OtherResources=certificates/untrusted_server_chain.pem
+// OtherResources=certificates/untrusted_server_key.pem
+
+// @dart = 2.9
+
+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');
+
+SecurityContext clientContext = new SecurityContext()
+  ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+testSslReadError() async {
+  // This test provokes an error in the BoringSSL `SSL_read` function by
+  // sending unencrypted bytes through a secure connection.
+  // See https://github.com/dart-lang/sdk/issues/48311
+  final serverSocket = await RawServerSocket.bind(HOST, 0);
+  serverSocket.forEach((socket) async {
+    final secureSocket = await RawSecureSocket.secureServer(
+        socket, serverContext,
+        subscription: socket.listen((event) {}));
+    secureSocket.write([1, 2, 3]);
+    // Send content using the original unencrypted connection to provoke a
+    // TtsException in the client.
+    socket.write([1, 2, 3]);
+    secureSocket.close();
+    serverSocket.close();
+  });
+
+  final Socket clientSocket = await Socket.connect(HOST, serverSocket.port);
+  final secureClientSocket =
+      await SecureSocket.secure(clientSocket, context: clientContext);
+  secureClientSocket.listen((data) {
+    Expect.fail("expected TlsException");
+  }, onError: (err) {
+    Expect.isTrue(err is TlsException, "unexpected error: $err");
+    secureClientSocket.close();
+    clientSocket.close();
+  });
+}
+
+main() {
+  print("asyncStart main");
+  asyncStart();
+  InternetAddress.lookup("localhost").then((hosts) async {
+    HOST = hosts.first;
+    await testSslReadError();
+    print("asyncEnd main");
+    asyncEnd();
+  });
+}
diff --git a/tests/standalone_2/io/secure_key_log_test.dart b/tests/standalone_2/io/secure_key_log_test.dart
new file mode 100644
index 0000000..d596122
--- /dev/null
+++ b/tests/standalone_2/io/secure_key_log_test.dart
@@ -0,0 +1,89 @@
+// 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.
+//
+// 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
+//
+// @dart = 2.9
+
+import "dart:async";
+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 {
+  var log = "";
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  await SecureSocket.connect(HOST, server.port, context: clientContext,
+      keyLog: (line) {
+    log += line;
+  }).then((socket) {
+    socket.write("Hello server.");
+    socket.close();
+    return socket.drain().then((value) {
+      Expect.contains("CLIENT_HANDSHAKE_TRAFFIC_SECRET", log);
+      return server;
+    });
+  });
+}
+
+testExceptionInKeyLogFunction(SecureServerSocket server) async {
+  SecurityContext clientContext = new SecurityContext()
+    ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+  var numCalls = 0;
+  await SecureSocket.connect(HOST, server.port, context: clientContext,
+      keyLog: (line) {
+    ++numCalls;
+    throw FileSystemException("Something bad happened");
+  }).then((socket) {
+    socket.close();
+    return socket.drain().then((value) {
+      Expect.notEquals(0, numCalls);
+      return server;
+    });
+  });
+}
+
+void main() async {
+  asyncStart();
+  await InternetAddress.lookup("localhost").then((hosts) => HOST = hosts.first);
+  final server = await startEchoServer();
+
+  await testSuccess(server);
+  await testExceptionInKeyLogFunction(server);
+
+  await server.close();
+  asyncEnd();
+}
diff --git a/tests/standalone_2/io/secure_socket_renegotiate_client.dart b/tests/standalone_2/io/secure_socket_renegotiate_client.dart
deleted file mode 100644
index c8ae0bb..0000000
--- a/tests/standalone_2/io/secure_socket_renegotiate_client.dart
+++ /dev/null
@@ -1,75 +0,0 @@
-// 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.
-
-// @dart = 2.9
-
-// Client for secure_socket_renegotiate_test, that runs in a subprocess.
-// The test verifies that client certificates work, if the client and server
-// are in separate processes, and that connection renegotiation can request
-// a client certificate to be sent.
-
-import "dart:async";
-import "dart:convert";
-import "dart:io";
-
-const HOST_NAME = "localhost";
-String localFile(path) => Platform.script.resolve(path).toFilePath();
-
-SecurityContext clientContext = new SecurityContext()
-  ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
-
-class ExpectException implements Exception {
-  ExpectException(this.message);
-  String toString() => message;
-  String message;
-}
-
-void expectEquals(expected, actual) {
-  if (actual != expected) {
-    throw new ExpectException('Expected $expected, found $actual');
-  }
-}
-
-void expect(condition) {
-  if (!condition) {
-    throw new ExpectException('');
-  }
-}
-
-void runClient(int port) {
-  SecureSocket
-      .connect(HOST_NAME, port, context: clientContext)
-      .then((SecureSocket socket) {
-    X509Certificate certificate = socket.peerCertificate;
-    expect(certificate != null);
-    expectEquals('CN=localhost', certificate.subject);
-    expectEquals('CN=myauthority', certificate.issuer);
-    StreamIterator<String> input = new StreamIterator(
-        socket.transform(utf8.decoder).transform(new LineSplitter()));
-    socket.writeln('first');
-    input.moveNext().then((success) {
-      expect(success);
-      expectEquals('first reply', input.current);
-      socket.renegotiate();
-      socket.writeln('renegotiated');
-      return input.moveNext();
-    }).then((success) {
-      expect(success);
-      expectEquals('server renegotiated', input.current);
-      X509Certificate certificate = socket.peerCertificate;
-      expect(certificate != null);
-      expectEquals("CN=localhost", certificate.subject);
-      expectEquals("CN=myauthority", certificate.issuer);
-      socket.writeln('second');
-      return input.moveNext();
-    }).then((success) {
-      expect(success != true);
-      socket.close();
-    });
-  });
-}
-
-void main(List<String> args) {
-  runClient(int.parse(args[0]));
-}
diff --git a/tests/standalone_2/io/secure_socket_renegotiate_test.dart b/tests/standalone_2/io/secure_socket_renegotiate_test.dart
deleted file mode 100644
index 36cb3a2..0000000
--- a/tests/standalone_2/io/secure_socket_renegotiate_test.dart
+++ /dev/null
@@ -1,88 +0,0 @@
-// 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.
-//
-// OtherResources=certificates/server_chain.pem
-// OtherResources=certificates/server_key.pem
-// OtherResources=secure_socket_renegotiate_client.dart
-
-// @dart = 2.9
-
-// This test verifies that client certificates work, if the client and server
-// are in separate processes, and that connection renegotiation works, and
-// can request a client certificate to be sent.
-
-import "dart:async";
-import "dart:convert";
-import "dart:io";
-
-import "package:expect/expect.dart";
-import "package:path/path.dart";
-
-const HOST_NAME = "localhost";
-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> runServer() {
-  return SecureServerSocket.bind(HOST_NAME, 0, serverContext)
-      .then((SecureServerSocket server) {
-    server.listen((SecureSocket socket) {
-      Expect.isNull(socket.peerCertificate);
-
-      StreamIterator<String> input = new StreamIterator(
-          utf8.decoder.bind(socket).transform(new LineSplitter()));
-      input.moveNext().then((success) {
-        Expect.isTrue(success);
-        Expect.equals('first', input.current);
-        socket.writeln('first reply');
-        return input.moveNext();
-      }).then((success) {
-        Expect.isTrue(success);
-        Expect.equals('renegotiated', input.current);
-        Expect.isNull(socket.peerCertificate);
-        socket.renegotiate(
-            requestClientCertificate: true,
-            requireClientCertificate: true,
-            useSessionCache: false);
-        socket.writeln('server renegotiated');
-        return input.moveNext();
-      }).then((success) {
-        Expect.isTrue(success);
-        Expect.equals('second', input.current);
-        X509Certificate certificate = socket.peerCertificate;
-        Expect.isNotNull(certificate);
-        Expect.equals("CN=localhost", certificate.subject);
-        Expect.equals("CN=myauthority", certificate.issuer);
-        server.close();
-        socket.close();
-      });
-    });
-    return server;
-  });
-}
-
-void main() {
-  runServer().then((SecureServerSocket server) {
-    var clientScript = Platform.script
-        .resolve('secure_socket_renegotiate_client.dart')
-        .toFilePath();
-    Process.run(
-            Platform.executable,
-            []
-              ..addAll(Platform.executableArguments)
-              ..addAll([clientScript, server.port.toString()]))
-        .then((ProcessResult result) {
-      if (result.exitCode != 0) {
-        print("Client failed, stdout:");
-        print(result.stdout);
-        print("  stderr:");
-        print(result.stderr);
-        Expect.fail('Client subprocess exit code: ${result.exitCode}');
-      }
-    });
-  });
-}
diff --git a/tests/standalone_2/io/web_socket_compression_test.dart b/tests/standalone_2/io/web_socket_compression_test.dart
index 5931062..c62a521 100644
--- a/tests/standalone_2/io/web_socket_compression_test.dart
+++ b/tests/standalone_2/io/web_socket_compression_test.dart
@@ -57,7 +57,7 @@
     String nonce = base64.encode(nonceData);
 
     uri = new Uri(
-        scheme: uri.scheme == "wss" ? "https" : "http",
+        scheme: uri.isScheme("wss") ? "https" : "http",
         userInfo: uri.userInfo,
         host: uri.host,
         port: uri.port,
@@ -100,8 +100,7 @@
     createServer().then((server) {
       server.listen((request) {
         Expect.isTrue(WebSocketTransformer.isUpgradeRequest(request));
-        WebSocketTransformer
-            .upgrade(request, compression: serverOptions)
+        WebSocketTransformer.upgrade(request, compression: serverOptions)
             .then((webSocket) {
           webSocket.listen((message) {
             Expect.equals("Hello World", message);
@@ -136,8 +135,7 @@
     createServer().then((server) {
       server.listen((request) {
         Expect.isTrue(WebSocketTransformer.isUpgradeRequest(request));
-        WebSocketTransformer
-            .upgrade(request, compression: serverOpts)
+        WebSocketTransformer.upgrade(request, compression: serverOpts)
             .then((webSocket) {
           webSocket.listen((message) {
             Expect.equals("Hello World", message);
@@ -186,9 +184,9 @@
           ..headers.add(
               "Sec-WebSocket-Extensions",
               "permessage-deflate;"
-              // Test quoted values and space padded =
-              'server_max_window_bits="10"; client_max_window_bits = 12'
-              'client_no_context_takeover; server_no_context_takeover');
+                  // Test quoted values and space padded =
+                  'server_max_window_bits="10"; client_max_window_bits = 12'
+                  'client_no_context_takeover; server_no_context_takeover');
         request.response.contentLength = 0;
         request.response.detachSocket().then((socket) {
           return new WebSocket.fromUpgradedSocket(socket, serverSide: true);
@@ -218,8 +216,7 @@
       server.listen((request) {
         // Stuff
         Expect.isTrue(WebSocketTransformer.isUpgradeRequest(request));
-        WebSocketTransformer
-            .upgrade(request, compression: serverCompression)
+        WebSocketTransformer.upgrade(request, compression: serverCompression)
             .then((webSocket) {
           webSocket.listen((message) {
             Expect.equals("Hello World", message);
@@ -342,22 +339,22 @@
     testReturnHeaders(
         'permessage-deflate; server_max_window_bits=10',
         "permessage-deflate;"
-        " server_max_window_bits=10;"
-        " client_max_window_bits=10");
+            " server_max_window_bits=10;"
+            " client_max_window_bits=10");
     // Don't provider context takeover if requested but not enabled.
     // Default is not enabled.
     testReturnHeaders(
         'permessage-deflate; client_max_window_bits;'
-        'client_no_context_takeover',
+            'client_no_context_takeover',
         'permessage-deflate; client_max_window_bits=15');
     // Enable context Takeover and provide if requested.
     compression = new CompressionOptions(
         clientNoContextTakeover: true, serverNoContextTakeover: true);
     testReturnHeaders(
         'permessage-deflate; client_max_window_bits; '
-        'client_no_context_takeover',
+            'client_no_context_takeover',
         'permessage-deflate; client_no_context_takeover; '
-        'client_max_window_bits=15',
+            'client_max_window_bits=15',
         serverCompression: compression);
     // Enable context takeover and don't provide if not requested
     compression = new CompressionOptions(
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 6b785dd..5e3852e 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -108,7 +108,7 @@
 fragmentation_test: SkipSlow
 fragmentation_typed_data_test: SkipSlow
 
-[ $arch == simarm || $arch == simarm64 || $arch == simarm64c ]
+[ $arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 ]
 io/socket_sigpipe_test: SkipByDesign # Test uses ffi
 
 [ $compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk ]
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 77236ea..90cc6f4 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -54,12 +54,12 @@
 # Enabling of dartk for sim{arm,arm64} revealed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
-[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 io/file_blocking_lock_test: Crash # Please triage.
 io/file_lock_test: Slow, Pass
 map_insert_remove_oom_test: Skip # Heap limit too low.
 
-[ $compiler == dartk && ($arch == simarm64 || $arch == simarm64c) ]
+[ $compiler == dartk && ($arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 io/http_bind_test: Slow, Pass
 
 [ $compiler == dartk && ($hot_reload || $hot_reload_rollback) ]
@@ -99,7 +99,6 @@
 io/secure_multiple_client_server_test: Skip # Flaky.
 io/secure_server_closing_test: Skip # Flaky.
 io/secure_server_socket_test: Skip # Flaky.
-io/secure_socket_renegotiate_test: Crash
 io/socket_many_connections_test: Skip # Flaky
 io/web_socket_error_test: Skip # Flaky
 io/web_socket_ping_test: Skip # Flaky.
diff --git a/tests/standalone_2/standalone_2_precompiled.status b/tests/standalone_2/standalone_2_precompiled.status
index 07c20e7..f7f7eb2 100644
--- a/tests/standalone_2/standalone_2_precompiled.status
+++ b/tests/standalone_2/standalone_2_precompiled.status
@@ -12,6 +12,7 @@
 io/file_lock_test: Skip
 io/file_read_special_device_test: Skip
 io/http_client_stays_alive_test: Skip
+io/http_redirect_test: SkipByDesign # Requires dart:mirrors
 io/http_response_deadline_test: Skip
 io/http_server_close_response_after_error_test: Skip
 io/https_unauthorized_test: Skip
diff --git a/tests/standalone_2/standalone_2_vm.status b/tests/standalone_2/standalone_2_vm.status
index 86c5c3c..067e3e05 100644
--- a/tests/standalone_2/standalone_2_vm.status
+++ b/tests/standalone_2/standalone_2_vm.status
@@ -61,7 +61,7 @@
 [ $mode == release && $runtime == vm && $system == windows ]
 io/http_server_close_response_after_error_test: Pass, Timeout # Issue 28370: timeout.
 
-[ $runtime == dart_precompiled && $system == linux && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == x64) ]
+[ $runtime == dart_precompiled && $system == linux && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $arch == x64) ]
 io/stdout_stderr_non_blocking_test: Pass, Timeout # Issue 35192
 
 [ $runtime == vm && ($arch == arm || $arch == arm64) ]
@@ -71,7 +71,7 @@
 io/file_typed_data_test: Skip # Issue 26109
 io/process_sync_test: Timeout, Pass
 
-[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c) ]
+[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64) ]
 io/dart_std_io_pipe_test: Timeout, Pass
 io/http_client_stays_alive_test: Skip # Spawns process in Dart2 mode.
 io/process_sync_test: Timeout, Pass
diff --git a/tests/web/48383_test.dart b/tests/web/48383_test.dart
new file mode 100644
index 0000000..3100f74
--- /dev/null
+++ b/tests/web/48383_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 'package:expect/expect.dart';
+
+void main() {
+  load();
+  load(cond: true);
+  Expect.equals('side-effect', state);
+}
+
+String state = 'start';
+
+// `cond` can be both true and false.
+// `use` is always be false.
+dynamic load({bool cond = false, bool use = false}) {
+  int? data;
+  if (cond) {
+    data = callWithSideEffects();
+  }
+  return [if (use && cond) data];
+}
+
+@pragma('dart2js:noInline')
+int callWithSideEffects() {
+  state = 'side-effect';
+  return 2;
+}
diff --git a/tests/web/48442_test.dart b/tests/web/48442_test.dart
new file mode 100644
index 0000000..2ba0349
--- /dev/null
+++ b/tests/web/48442_test.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.
+
+// Test for issue #48442. We can do eager initialization of static variables
+// with initializers containing map literals only when the we know the keys have
+// implementations of `get:hashCode` known to be free of side-effects and
+// without dependencies on other static variables that may not yet exist.
+
+import 'package:expect/expect.dart';
+
+String witness = 'none';
+
+class Foo {
+  const Foo();
+  int get hashCode {
+    witness = 'hashCode';
+    return Object.hash(0, 1);
+  }
+
+  bool operator ==(other) => other is Foo;
+}
+
+const key = Foo();
+
+// This map creation calls Foo.hashCode. In #48442, `map` was initialized
+// eagerly, which crashed in `Object.hash` due to an uninitialized `_hashSeed`
+// variable in the runtime.
+final map = {key: "value"};
+
+void main() {
+  Expect.equals('none', witness);
+  print(map);
+  Expect.equals('hashCode', witness);
+}
diff --git a/tests/web/regress/48317_test.dart b/tests/web/regress/48317_test.dart
new file mode 100644
index 0000000..ff16cfc
--- /dev/null
+++ b/tests/web/regress/48317_test.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 'package:expect/expect.dart';
+
+helper(num c) => c * -1;
+
+void main() {
+  num a = 3;
+
+  label:
+  {
+    break label;
+  }
+
+  Expect.equals(-3, helper(a));
+}
diff --git a/tests/web/weak_reference_test.dart b/tests/web/weak_reference_test.dart
new file mode 100644
index 0000000..3bbaa21
--- /dev/null
+++ b/tests/web/weak_reference_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.
+
+// Basic tests for the WeakReference and Finalizer API for the web backends.
+// Does not trigger garbage collection to heavily test the functionality.
+
+import 'package:expect/minitest.dart';
+
+class Foo {
+  int close() {
+    return 42; // no-op, dropped return value.
+  }
+}
+
+void callback(Foo f) {
+  f.close();
+}
+
+main() {
+  test('weak reference', () {
+    var list = ["foo"];
+    var weakRef = WeakReference<List<String>>(list);
+    expect(weakRef.target, equals(list));
+
+    // Javascript API throws when the representation of target is not 'object'
+    // in the compiled Javascript.
+    expect(() => WeakReference<String>("foo"), throws);
+    expect(() => WeakReference<int>(1), throws);
+  });
+
+  test('finalizer', () {
+    var finalizer = Finalizer<Foo>(callback);
+    var list = ["foo"];
+    var foo = Foo();
+    // Should not cause errors to attach or detach
+    finalizer.attach(list, foo);
+    finalizer.attach(list, foo, detach: list);
+    finalizer.detach(list);
+
+    // Should not cause errors to use a different detach token
+    var detachList = [1, 2, 3];
+    finalizer.attach(list, foo, detach: detachList);
+    finalizer.detach(detachList);
+
+    // JavaScript API returns false when unknown target detached.
+    // Should not cause an error to detach unknown token.
+    var unknownList = [2, 4, 6];
+    finalizer.detach(unknownList);
+
+    // JavaScript API throws when target and detach token are not objects.
+    expect(() => finalizer.attach("token string value", foo), throws);
+    expect(() => finalizer.detach("detach string value"), throws);
+  });
+}
diff --git a/tests/web/web.status b/tests/web/web.status
index 7bdbea2..c54cd80 100644
--- a/tests/web/web.status
+++ b/tests/web/web.status
@@ -53,3 +53,6 @@
 [ $compiler == none && $runtime == vm ]
 new_from_env_test: SkipByDesign # dart2js only test
 unconditional_dartio_import_test: SkipByDesign # dart2js only test
+
+[ $compiler == dartkp || $runtime == vm ]
+weak_reference_test: SkipByDesign # Web only test
diff --git a/tests/web_2/48383_test.dart b/tests/web_2/48383_test.dart
new file mode 100644
index 0000000..3100f74
--- /dev/null
+++ b/tests/web_2/48383_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 'package:expect/expect.dart';
+
+void main() {
+  load();
+  load(cond: true);
+  Expect.equals('side-effect', state);
+}
+
+String state = 'start';
+
+// `cond` can be both true and false.
+// `use` is always be false.
+dynamic load({bool cond = false, bool use = false}) {
+  int? data;
+  if (cond) {
+    data = callWithSideEffects();
+  }
+  return [if (use && cond) data];
+}
+
+@pragma('dart2js:noInline')
+int callWithSideEffects() {
+  state = 'side-effect';
+  return 2;
+}
diff --git a/tests/web_2/48442_test.dart b/tests/web_2/48442_test.dart
new file mode 100644
index 0000000..2ba0349
--- /dev/null
+++ b/tests/web_2/48442_test.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.
+
+// Test for issue #48442. We can do eager initialization of static variables
+// with initializers containing map literals only when the we know the keys have
+// implementations of `get:hashCode` known to be free of side-effects and
+// without dependencies on other static variables that may not yet exist.
+
+import 'package:expect/expect.dart';
+
+String witness = 'none';
+
+class Foo {
+  const Foo();
+  int get hashCode {
+    witness = 'hashCode';
+    return Object.hash(0, 1);
+  }
+
+  bool operator ==(other) => other is Foo;
+}
+
+const key = Foo();
+
+// This map creation calls Foo.hashCode. In #48442, `map` was initialized
+// eagerly, which crashed in `Object.hash` due to an uninitialized `_hashSeed`
+// variable in the runtime.
+final map = {key: "value"};
+
+void main() {
+  Expect.equals('none', witness);
+  print(map);
+  Expect.equals('hashCode', witness);
+}
diff --git a/tests/web_2/regress/48317_test.dart b/tests/web_2/regress/48317_test.dart
new file mode 100644
index 0000000..ff16cfc
--- /dev/null
+++ b/tests/web_2/regress/48317_test.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 'package:expect/expect.dart';
+
+helper(num c) => c * -1;
+
+void main() {
+  num a = 3;
+
+  label:
+  {
+    break label;
+  }
+
+  Expect.equals(-3, helper(a));
+}
diff --git a/tests/web_2/weak_reference_test.dart b/tests/web_2/weak_reference_test.dart
new file mode 100644
index 0000000..3bbaa21
--- /dev/null
+++ b/tests/web_2/weak_reference_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.
+
+// Basic tests for the WeakReference and Finalizer API for the web backends.
+// Does not trigger garbage collection to heavily test the functionality.
+
+import 'package:expect/minitest.dart';
+
+class Foo {
+  int close() {
+    return 42; // no-op, dropped return value.
+  }
+}
+
+void callback(Foo f) {
+  f.close();
+}
+
+main() {
+  test('weak reference', () {
+    var list = ["foo"];
+    var weakRef = WeakReference<List<String>>(list);
+    expect(weakRef.target, equals(list));
+
+    // Javascript API throws when the representation of target is not 'object'
+    // in the compiled Javascript.
+    expect(() => WeakReference<String>("foo"), throws);
+    expect(() => WeakReference<int>(1), throws);
+  });
+
+  test('finalizer', () {
+    var finalizer = Finalizer<Foo>(callback);
+    var list = ["foo"];
+    var foo = Foo();
+    // Should not cause errors to attach or detach
+    finalizer.attach(list, foo);
+    finalizer.attach(list, foo, detach: list);
+    finalizer.detach(list);
+
+    // Should not cause errors to use a different detach token
+    var detachList = [1, 2, 3];
+    finalizer.attach(list, foo, detach: detachList);
+    finalizer.detach(detachList);
+
+    // JavaScript API returns false when unknown target detached.
+    // Should not cause an error to detach unknown token.
+    var unknownList = [2, 4, 6];
+    finalizer.detach(unknownList);
+
+    // JavaScript API throws when target and detach token are not objects.
+    expect(() => finalizer.attach("token string value", foo), throws);
+    expect(() => finalizer.detach("detach string value"), throws);
+  });
+}
diff --git a/tests/web_2/web_2.status b/tests/web_2/web_2.status
index 7bdbea2..c54cd80 100644
--- a/tests/web_2/web_2.status
+++ b/tests/web_2/web_2.status
@@ -53,3 +53,6 @@
 [ $compiler == none && $runtime == vm ]
 new_from_env_test: SkipByDesign # dart2js only test
 unconditional_dartio_import_test: SkipByDesign # dart2js only test
+
+[ $compiler == dartkp || $runtime == vm ]
+weak_reference_test: SkipByDesign # Web only test
diff --git a/third_party/OWNERS b/third_party/OWNERS
new file mode 100644
index 0000000..c3abcf9
--- /dev/null
+++ b/third_party/OWNERS
@@ -0,0 +1,2 @@
+file:/tools/OWNERS_FOUNDATION #{LAST_RESORT_SUGGESTION}
+file:/tools/OWNERS_INFRA #{LAST_RESORT_SUGGESTION}
diff --git a/third_party/devtools/update.sh b/third_party/devtools/update.sh
index 92d6f2d..6723520 100755
--- a/third_party/devtools/update.sh
+++ b/third_party/devtools/update.sh
@@ -30,9 +30,8 @@
 # Copy the build output as well as the devtools packages needed
 # to serve from DDS.
 mkdir cipd_package
-cp -R packages/devtools/build/ cipd_package/web
+cp -R packages/devtools_app/build/web cipd_package/web
 cp -r packages/devtools_shared cipd_package
-cp -r packages/devtools_server cipd_package
 
 cipd create \
   -name dart/third_party/flutter/devtools \
diff --git a/third_party/pkg_tested/pkg_tested.status b/third_party/pkg_tested/pkg_tested.status
index b80af3e..5fb6028 100644
--- a/third_party/pkg_tested/pkg_tested.status
+++ b/third_party/pkg_tested/pkg_tested.status
@@ -24,7 +24,7 @@
 pub/test/run/app_can_read_from_stdin_test: Fail # Issue 19448
 pub/test/run/forwards_signal_posix_test: SkipByDesign
 
-[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $builder_tag == asan || $mode == debug) ]
+[ $runtime == vm && ($arch == simarm || $arch == simarm64 || $arch == simarm64c || $arch == simriscv32 || $arch == simriscv64 || $builder_tag == asan || $mode == debug) ]
 dart_style/test/command_line_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
 dart_style/test/formatter_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
 
diff --git a/third_party/tcmalloc/OWNERS b/third_party/tcmalloc/OWNERS
new file mode 100644
index 0000000..dc3a1d0
--- /dev/null
+++ b/third_party/tcmalloc/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_VM
diff --git a/tools/OWNERS b/tools/OWNERS
new file mode 100644
index 0000000..bc4a8dd
--- /dev/null
+++ b/tools/OWNERS
@@ -0,0 +1,10 @@
+file:OWNERS_INFRA
+
+# Groups administrate themselves.
+per-file OWNERS_ANALYZER=file:OWNERS_ANALYZER
+per-file OWNERS_CFE=file:OWNERS_CFE
+per-file OWNERS_FOUNDATION=file:OWNERS_FOUNDATION
+per-file OWNERS_INFRA=file:OWNERS_INFRA
+per-file OWNERS_PRODUCT=file:OWNERS_PRODUCT
+per-file OWNERS_VM=file:OWNERS_VM
+per-file OWNERS_WEB=file:OWNERS_WEB
diff --git a/tools/OWNERS_ANALYZER b/tools/OWNERS_ANALYZER
new file mode 100644
index 0000000..dfcbd53
--- /dev/null
+++ b/tools/OWNERS_ANALYZER
@@ -0,0 +1,6 @@
+brianwilkerson@google.com
+jcollins@google.com
+leafp@google.com
+paulberry@google.com
+scheglov@google.com
+srawlins@google.com
diff --git a/tools/OWNERS_CFE b/tools/OWNERS_CFE
new file mode 100644
index 0000000..ceb75971
--- /dev/null
+++ b/tools/OWNERS_CFE
@@ -0,0 +1,4 @@
+cstefantsova@google.com
+jensj@google.com
+johnniwinther@google.com
+vegorov@google.com
diff --git a/tools/OWNERS_ENG b/tools/OWNERS_ENG
new file mode 100644
index 0000000..6857872
--- /dev/null
+++ b/tools/OWNERS_ENG
@@ -0,0 +1,7 @@
+# All engineering teams
+file:OWNERS_ANALYZER
+file:OWNERS_CFE
+file:OWNERS_FOUNDATION
+file:OWNERS_INFRA
+file:OWNERS_VM
+file:OWNERS_WEB
diff --git a/tools/OWNERS_FOUNDATION b/tools/OWNERS_FOUNDATION
new file mode 100644
index 0000000..b23483a
--- /dev/null
+++ b/tools/OWNERS_FOUNDATION
@@ -0,0 +1,7 @@
+eernst@google.com
+jakemac@google.com
+leafp@google.com
+lrn@google.com
+nbosch@google.com
+paulberry@google.com
+rnystrom@google.com
diff --git a/tools/OWNERS_INFRA b/tools/OWNERS_INFRA
new file mode 100644
index 0000000..838001e
--- /dev/null
+++ b/tools/OWNERS_INFRA
@@ -0,0 +1,3 @@
+athom@google.com
+sortie@google.com
+whesse@google.com
diff --git a/tools/OWNERS_PRODUCT b/tools/OWNERS_PRODUCT
new file mode 100644
index 0000000..c2c62b9
--- /dev/null
+++ b/tools/OWNERS_PRODUCT
@@ -0,0 +1,2 @@
+kevmoo@google.com
+mit@google.com
diff --git a/tools/OWNERS_VM b/tools/OWNERS_VM
new file mode 100644
index 0000000..018eb47
--- /dev/null
+++ b/tools/OWNERS_VM
@@ -0,0 +1,13 @@
+aam@google.com
+alexmarkov@google.com
+asiva@google.com
+askesc@google.com
+bkonyi@google.com
+bquinlan@google.com
+cskau@google.com
+dacoharkes@google.com
+kustermann@google.com
+liama@google.com
+rmacnak@google.com
+sstrickl@google.com
+vegorov@google.com
diff --git a/tools/OWNERS_WASM b/tools/OWNERS_WASM
new file mode 100644
index 0000000..ee153f1
--- /dev/null
+++ b/tools/OWNERS_WASM
@@ -0,0 +1,3 @@
+askesc@google.com
+joshualitt@google.com
+kustermann@google.com
diff --git a/tools/OWNERS_WEB b/tools/OWNERS_WEB
new file mode 100644
index 0000000..df81259
--- /dev/null
+++ b/tools/OWNERS_WEB
@@ -0,0 +1,15 @@
+annagrin@google.com
+elliottbrooks@google.com
+fishythefish@google.com
+grouma@google.com
+jacobr@google.com
+joshualitt@google.com
+kevmoo@google.com
+leonsenft@google.com
+markzipan@google.com
+nshahan@google.com
+rileyporter@google.com
+sigmund@google.com
+sra@google.com
+srujzs@google.com
+vsm@google.com
diff --git a/tools/VERSION b/tools/VERSION
index e220f6a..441390e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 69
-PRERELEASE_PATCH 2
\ No newline at end of file
+PRERELEASE 182
+PRERELEASE_PATCH 1
\ No newline at end of file
diff --git a/tools/addlatexhash.dart b/tools/addlatexhash.dart
index a3b2230..de161ed 100755
--- a/tools/addlatexhash.dart
+++ b/tools/addlatexhash.dart
@@ -22,6 +22,8 @@
 // NB: This utility assumes UN*X style line endings, \n, in the LaTeX
 // source file received as input; it will not work with other styles.
 
+// ignore_for_file: constant_identifier_names
+
 import 'dart:convert';
 import 'dart:io';
 
@@ -32,15 +34,15 @@
 // Normalization of the text: removal or normalization of parts that
 // do not affect the output from latex, such as white space.
 
-final commentRE = new RegExp(r"[^\\]%.*"); // NB: . does not match \n.
-final whitespaceAllRE = new RegExp(r"^\s+$");
-final whitespaceRE = new RegExp(r"(?:(?=\s).){2,}"); // \s except end-of-line
+final commentRE = RegExp(r"[^\\]%.*"); // NB: . does not match \n.
+final whitespaceAllRE = RegExp(r"^\s+$");
+final whitespaceRE = RegExp(r"(?:(?=\s).){2,}"); // \s except end-of-line
 
 /// Removes [match]ing part of [line], adjusting that part with the
 /// given [startOffset] and [endOffset], bounded to be valid indices
 /// into the string if needed, then inserts [glue] where text was
 /// removed.  If there is no match then [line] is returned.
-cutMatch(line, match, {startOffset: 0, endOffset: 0, glue: ""}) {
+cutMatch(line, match, {startOffset = 0, endOffset = 0, glue = ""}) {
   if (match == null) return line;
   var start = match.start + startOffset;
   var end = match.end + endOffset;
@@ -50,7 +52,7 @@
   return line.substring(0, start) + glue + line.substring(end);
 }
 
-cutRegexp(line, re, {startOffset: 0, endOffset: 0, glue: ""}) {
+cutRegexp(line, re, {startOffset = 0, endOffset = 0, glue = ""}) {
   return cutMatch(line, re.firstMatch(line),
       startOffset: startOffset, endOffset: endOffset, glue: glue);
 }
@@ -58,12 +60,12 @@
 /// Removes the rest of [line] starting from the beginning of the
 /// given [match], and adjusting with the given [offset].  If there
 /// is no match then [line] is returned.
-cutFromMatch(line, match, {offset: 0, glue: ""}) {
+cutFromMatch(line, match, {offset = 0, glue = ""}) {
   if (match == null) return line;
   return line.substring(0, match.start + offset) + glue;
 }
 
-cutFromRegexp(line, re, {offset: 0, glue: ""}) {
+cutFromRegexp(line, re, {offset = 0, glue = ""}) {
   return cutFromMatch(line, re.firstMatch(line), offset: offset, glue: glue);
 }
 
@@ -175,8 +177,8 @@
 
 // Managing fragments with significant spacing.
 
-final dartCodeBeginRE = new RegExp(r"^\s*\\begin\s*\{dartCode\}");
-final dartCodeEndRE = new RegExp(r"^\s*\\end\s*\{dartCode\}");
+final dartCodeBeginRE = RegExp(r"^\s*\\begin\s*\{dartCode\}");
+final dartCodeEndRE = RegExp(r"^\s*\\end\s*\{dartCode\}");
 
 /// Recognizes beginning of dartCode block.
 sispIsDartBegin(line) => line.contains(dartCodeBeginRE);
@@ -204,11 +206,10 @@
 /// Returns RegExp text for recognizing a command occupying a line
 /// of its own, given the part of the RegExp that recognizes the
 /// command name, [cmdNameRE]
-lineCommandRE(cmdNameRE) =>
-    new RegExp(r"^\s*\\" + cmdNameRE + r"\s*\{.*\}%?\s*$");
+lineCommandRE(cmdNameRE) => RegExp(r"^\s*\\" + cmdNameRE + r"\s*\{.*\}%?\s*$");
 
-final hashLabelStartRE = new RegExp(r"^\s*\\LMLabel\s*\{");
-final hashLabelEndRE = new RegExp(r"\}\s*$");
+final hashLabelStartRE = RegExp(r"^\s*\\LMLabel\s*\{");
+final hashLabelEndRE = RegExp(r"\}\s*$");
 
 final hashMarkRE = lineCommandRE("LMHash");
 final hashLabelRE = lineCommandRE("LMLabel");
@@ -259,19 +260,19 @@
   /// The endLineNumber specifies the end of the block of lines
   /// associated with a given event, for event types concerned with
   /// blocks of lines rather than single lines.
-  setEndLineNumber(n) {}
+  setEndLineNumber(int n) {}
 
   /// Returns null except for \LMHash{} events, where it returns
   /// the startLineNumber.  This serves to specify a boundary because
   /// the preceding \LMHash{} block should stop before the line of
   /// this \LMHash{} command.  Note that hash blocks may stop earlier,
   /// because they cannot contain sectioning commands.
-  getStartLineNumber() => null;
+  int? getStartLineNumber() => null;
 }
 
 class HashMarkerEvent extends HashEvent {
   // Line number of first line in block that gets hashed.
-  var startLineNumber;
+  int startLineNumber;
 
   // Highest possible number of first line after block that gets
   // hashed (where the next \LMHash{} occurs).  Note that this value
@@ -279,19 +280,21 @@
   // reached), so [endLineNumber] will be initialized in a separate
   // scan.  Also note that the block may end earlier, because a block
   // ends if it would otherwise include a sectioning command.
-  var endLineNumber;
+  int? endLineNumber;
 
   HashMarkerEvent(this.startLineNumber);
 
-  setEndLineNumber(n) {
+  @override
+  setEndLineNumber(int n) {
     endLineNumber = n;
   }
 
-  getStartLineNumber() => startLineNumber;
+  @override
+  int getStartLineNumber() => startLineNumber;
 }
 
 class HashLabelEvent extends HashEvent {
-  var labelText;
+  String labelText;
   HashLabelEvent(this.labelText);
 }
 
@@ -337,10 +340,8 @@
         return "subsec:";
       case PENDING_IS_SUBSUBSECTION:
         return "subsubsec:";
-      case PENDING_IS_PARAGRAPH:
-        return "par:";
       case PENDING_IS_NONE:
-        throw "\\LMHash{..} should only be used after a sectioning command " +
+        throw "\\LMHash{..} should only be used after a sectioning command "
             "(\\section, \\subsection, \\subsubsection, \\paragraph)";
       default:
         // set of PENDING_IS_.. was extended, but updates here omitted
@@ -351,10 +352,10 @@
   analyze(line) {
     var currentLineNumber = lineNumber++;
     if (isHashMarker(line)) {
-      return new HashMarkerEvent(currentLineNumber);
+      return HashMarkerEvent(currentLineNumber);
     } else if (isHashLabel(line)) {
       var labelText = sectioningPrefix() + extractHashLabel(line);
-      return new HashLabelEvent(labelText);
+      return HashLabelEvent(labelText);
     } else {
       // No events to emit, but we may need to note state changes
       if (isSectionCommand(line)) {
@@ -375,7 +376,7 @@
 
 findHashEvents(lines) {
   // Create the list of events, omitting endLineNumbers.
-  var events = findEvents(lines, new HashAnalyzer());
+  var events = findEvents(lines, HashAnalyzer());
   // Set the endLineNumbers.
   var currentEndLineNumber = lines.length;
   for (var event in events.reversed) {
@@ -444,8 +445,8 @@
   throw "Unmatched braces";
 }
 
-final commentaryRE = new RegExp(r"\\commentary\s*\{");
-final rationaleRE = new RegExp(r"\\rationale\s*\{");
+final commentaryRE = RegExp(r"\\commentary\s*\{");
+final rationaleRE = RegExp(r"\\rationale\s*\{");
 
 /// Removes {}-balanced '\commentary{..}' commands from [line].
 removeCommentary(line) {
@@ -473,7 +474,7 @@
 // ----------------------------------------------------------------------
 // Recognition of line blocks, insertion of block hash into \LMHash{}.
 
-final latexArgumentRE = new RegExp(r"\{.*\}");
+final latexArgumentRE = RegExp(r"\{.*\}");
 
 cleanupLine(line) => cutRegexp(line, commentRE, startOffset: 1).trimRight();
 
@@ -530,15 +531,15 @@
   }
 
   // Get LaTeX source.
-  var inputFile = new File(args[0]);
+  var inputFile = File(args[0]);
   assert(inputFile.existsSync());
   var lines = inputFile.readAsLinesSync();
 
   // Will hold LaTeX source with normalized spacing etc., plus hash values.
-  var outputFile = new File(args[1]);
+  var outputFile = File(args[1]);
 
   // Will hold hierarchical list of hash values.
-  var listFile = new File(args[2]);
+  var listFile = File(args[2]);
   var listSink = listFile.openWrite();
 
   // Perform single-line normalization.
diff --git a/tools/analysis_options.yaml b/tools/analysis_options.yaml
new file mode 100644
index 0000000..204e7c6
--- /dev/null
+++ b/tools/analysis_options.yaml
@@ -0,0 +1,17 @@
+include: package:lints/recommended.yaml
+
+analyzer:
+  exclude:
+    # This directory isn't intended to be analyzed.
+    - sdks/**
+    # There are a fair number of issues in here.
+    - dart2js/**
+    - dom/**
+    - test_generators/**
+
+linter:
+  rules:
+    # TODO: Enable this once other issues are addressed.
+    # - avoid_dynamic_calls
+    - depend_on_referenced_packages
+    - directives_ordering
diff --git a/tools/bots/compare_results.dart b/tools/bots/compare_results.dart
index bcf9abe52..1e2bad3 100755
--- a/tools/bots/compare_results.dart
+++ b/tools/bots/compare_results.dart
@@ -9,8 +9,8 @@
 
 // @dart = 2.9
 
-import '../../pkg/test_runner/bin/compare_results.dart' as compareResults;
+import '../../pkg/test_runner/bin/compare_results.dart' as compare_results;
 
 main(List<String> args) {
-  compareResults.main(args);
+  compare_results.main(args);
 }
diff --git a/tools/bots/extend_results.dart b/tools/bots/extend_results.dart
index 4ab1d2c..6b03623 100644
--- a/tools/bots/extend_results.dart
+++ b/tools/bots/extend_results.dart
@@ -63,7 +63,7 @@
       result['changed'] = true;
     }
   }
-  final sink = new File(newResultsPath).openWrite();
+  final sink = File(newResultsPath).openWrite();
   final sorted = results.keys.toList()..sort();
   for (final key in sorted) {
     sink.writeln(jsonEncode(results[key]));
diff --git a/tools/bots/find_base_commit.dart b/tools/bots/find_base_commit.dart
index 4a68e261..595871d 100755
--- a/tools/bots/find_base_commit.dart
+++ b/tools/bots/find_base_commit.dart
@@ -14,7 +14,7 @@
 import 'package:glob/glob.dart';
 
 void main(List<String> args) async {
-  final parser = new ArgParser();
+  final parser = ArgParser();
   parser.addMultiOption("builder",
       abbr: "b",
       help: "Select the builders matching the glob [option is repeatable]",
@@ -40,15 +40,15 @@
   }
 
   int count = int.parse(options["count"]);
-  final globs = new List<Glob>.from(
-      options["builder"].map((String pattern) => new Glob(pattern)));
+  final globs = List<Glob>.from(
+      options["builder"].map((String pattern) => Glob(pattern)));
 
   // Download the most recent builds from buildbucket.
   const maxBuilds = 1000;
   final url = Uri.parse("https://cr-buildbucket.appspot.com"
       "/prpc/buildbucket.v2.Builds/SearchBuilds");
   const maxRetries = 3;
-  const timeout = const Duration(seconds: 30);
+  const timeout = Duration(seconds: 30);
   final query = jsonEncode({
     "predicate": {
       "builder": {"project": "dart", "bucket": "ci.sandbox"},
@@ -60,7 +60,7 @@
   late Map<String, dynamic> searchResult;
   for (int i = 1; i <= maxRetries; i++) {
     try {
-      final client = new HttpClient();
+      final client = HttpClient();
       final request = await client.postUrl(url).timeout(timeout)
         ..headers.contentType = ContentType.json
         ..headers.add(HttpHeaders.acceptHeader, ContentType.json)
@@ -74,10 +74,10 @@
       const prefix = ")]}'";
       searchResult = await (response
           .cast<List<int>>()
-          .transform(new Utf8Decoder())
+          .transform(Utf8Decoder())
           .map((event) =>
               event.startsWith(prefix) ? event.substring(prefix.length) : event)
-          .transform(new JsonDecoder())
+          .transform(JsonDecoder())
           .cast<Map<String, dynamic>>()
           .first
           .timeout(timeout));
@@ -132,7 +132,7 @@
     }
     final commit = input["id"] as String;
     final buildersForCommit =
-        buildersForCommits.putIfAbsent(commit, () => new Set<String>());
+        buildersForCommits.putIfAbsent(commit, () => <String>{});
     buildersForCommit.add(builder);
   }
 
diff --git a/tools/bots/flutter/analyze_flutter_plugins.sh b/tools/bots/flutter/analyze_flutter_plugins.sh
index 3616faa..70b8eec 100755
--- a/tools/bots/flutter/analyze_flutter_plugins.sh
+++ b/tools/bots/flutter/analyze_flutter_plugins.sh
@@ -11,7 +11,6 @@
 checkout=$(pwd)
 export PATH=$checkout/out/ReleaseX64/dart-sdk/bin:$PATH
 dart=$checkout/out/ReleaseX64/dart-sdk/bin/dart
-pub=$checkout/out/ReleaseX64/dart-sdk/bin/pub
 sdk=$checkout/out/ReleaseX64/dart-sdk
 tmpdir=$(mktemp -d)
 
diff --git a/tools/bots/lib/src/firestore.dart b/tools/bots/lib/src/firestore.dart
index c1d602a..aed2175 100644
--- a/tools/bots/lib/src/firestore.dart
+++ b/tools/bots/lib/src/firestore.dart
@@ -74,7 +74,7 @@
         path: '$collectionName/$documentName',
         query: _currentTransaction == null
             ? null
-            : 'transaction=${_escapedCurrentTransaction}'));
+            : 'transaction=$_escapedCurrentTransaction'));
     var response = await _client.get(url, headers: _headers);
     if (response.statusCode == HttpStatus.ok) {
       var document = jsonDecode(response.body);
@@ -123,7 +123,7 @@
     }
     var body = jsonEncode({
       "writes": writes.map((write) => write.data).toList(),
-      "transaction": "$_currentTransaction"
+      "transaction": _currentTransaction
     });
     var response =
         await _client.post(_commitUrl, headers: _headers, body: body);
@@ -140,7 +140,7 @@
     return true;
   }
 
-  Exception _error(http.Response response, {String message: 'Error'}) {
+  Exception _error(http.Response response, {String message = 'Error'}) {
     throw Exception('$message: ${response.statusCode}: '
         '${response.reasonPhrase}:\n${response.body}');
   }
@@ -154,6 +154,7 @@
 }
 
 class Update implements Write {
+  @override
   final Map data;
   Update(List<String> updateMask, Map document, {String updateTime})
       : data = {
@@ -188,7 +189,7 @@
           'fieldFilter': {
             'field': {'fieldPath': field},
             'op': op,
-            'value': {'$type': value},
+            'value': {type: value},
           }
         });
 }
diff --git a/tools/bots/pub_integration_test.py b/tools/bots/pub_integration_test.py
index f80c554..4f35ae6 100755
--- a/tools/bots/pub_integration_test.py
+++ b/tools/bots/pub_integration_test.py
@@ -35,10 +35,10 @@
     mode = ('Debug' if options.mode == 'debug' else 'Release')
 
     out_dir = 'xcodebuild' if sys.platform == 'darwin' else 'out'
-    extension = '' if not sys.platform == 'win32' else '.bat'
-    pub = os.path.abspath('%s/%s%s/dart-sdk/bin/pub%s' %
-                          (out_dir, mode, arch, extension))
-    print(pub)
+    extension = '' if not sys.platform == 'win32' else '.exe'
+    dart = os.path.abspath('%s/%s%s/dart-sdk/bin/dart%s' %
+                           (out_dir, mode, arch, extension))
+    print(dart)
 
     working_dir = tempfile.mkdtemp()
     try:
@@ -49,11 +49,15 @@
         with open(working_dir + '/pubspec.yaml', 'w') as pubspec_yaml:
             pubspec_yaml.write(PUBSPEC)
 
-        exit_code = subprocess.call([pub, 'get'], cwd=working_dir, env=env)
+        exit_code = subprocess.call([dart, 'pub', 'get'],
+                                    cwd=working_dir,
+                                    env=env)
         if exit_code != 0:
             return exit_code
 
-        exit_code = subprocess.call([pub, 'upgrade'], cwd=working_dir, env=env)
+        exit_code = subprocess.call([dart, 'pub', 'upgrade'],
+                                    cwd=working_dir,
+                                    env=env)
         if exit_code != 0:
             return exit_code
     finally:
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 1d376fe..adbceae 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -185,6 +185,39 @@
       "xcodebuild/ReleaseX64/dart2js_platform.dill",
       "xcodebuild/ReleaseX64/dart2js_platform_unsound.dill"
     ],
+    "dart2wasm_hostasserts": [
+      ".packages",
+      ".dart_tool/package_config.json",
+      "out/ReleaseX64/dart",
+      "pkg/",
+      "runtime/tests/",
+      "samples-dev/",
+      "samples/",
+      "sdk/",
+      "tests/.dart_tool/package_config.json",
+      "tests/angular/",
+      "tests/co19/co19-analyzer.status",
+      "tests/co19/co19-co19.status",
+      "tests/co19/co19-dart2js.status",
+      "tests/co19/co19-dartdevc.status",
+      "tests/co19/co19-kernel.status",
+      "tests/co19/co19-runtime.status",
+      "tests/corelib/",
+      "tests/web/",
+      "tests/dartdevc/",
+      "tests/language/",
+      "tests/language_2/",
+      "tests/lib/",
+      "tests/light_unittest.dart",
+      "tests/search/",
+      "tests/ffi/",
+      "third_party/d8/",
+      "third_party/pkg/",
+      "third_party/pkg_tested/",
+      "third_party/requirejs/",
+      "tools/",
+      "xcodebuild/ReleaseX64/dart"
+    ],
     "front-end": [
       ".packages",
       ".dart_tool/package_config.json",
@@ -235,22 +268,7 @@
     ],
     "fuzzer": [
       "runtime/tools/dartfuzz/",
-      "out/DebugIA32/",
-      "out/DebugSIMARM/",
-      "out/DebugSIMARM64/",
-      "out/DebugSIMARM64C/",
-      "out/DebugSIMRISCV32/",
-      "out/DebugSIMRISCV64/",
-      "out/DebugX64/",
-      "out/DebugX64C/",
-      "out/ReleaseIA32/",
-      "out/ReleaseSIMARM/",
-      "out/ReleaseSIMARM64/",
-      "out/ReleaseSIMARM64C/",
-      "out/ReleaseSIMRISCV32/",
-      "out/ReleaseSIMRISCV64/",
-      "out/ReleaseX64/",
-      "out/ReleaseX64C/",
+      "out/",
       "third_party/pkg/",
       "third_party/pkg_tested/",
       "tools/sdks/dart-sdk/",
@@ -271,64 +289,8 @@
     ],
     "vm-kernel": [
       "benchmarks/",
-      "out/DebugIA32/",
-      "out/DebugX64/",
-      "out/DebugX64C/",
-      "out/DebugSIMARM/",
-      "out/DebugSIMARM64/",
-      "out/DebugSIMARM64C/",
-      "out/DebugSIMARM_X64/",
-      "out/DebugAndroidARM/",
-      "out/DebugAndroidARM_X64/",
-      "out/DebugAndroidARM64/",
-      "out/DebugAndroidARM64C/",
-      "out/ReleaseIA32/",
-      "out/ReleaseX64/",
-      "out/ReleaseX64C/",
-      "out/ReleaseSIMARM/",
-      "out/ReleaseSIMARM64/",
-      "out/ReleaseSIMARM64C/",
-      "out/ReleaseSIMARM_X64/",
-      "out/ReleaseAndroidARM/",
-      "out/ReleaseAndroidARM_X64/",
-      "out/ReleaseAndroidARM64/",
-      "out/ReleaseAndroidARM64C/",
-      "out/ReleaseASANX64/",
-      "out/ReleaseLSANX64/",
-      "out/ReleaseMSANX64/",
-      "out/ReleaseTSANX64/",
-      "out/ReleaseUBSANX64/",
-      "out/ReleaseXARM64/",
-      "out/ProductIA32/",
-      "out/ProductX64/",
-      "out/ProductX64C/",
-      "out/ProductSIMARM/",
-      "out/ProductSIMARM64/",
-      "out/ProductSIMARM64C/",
-      "out/ProductSIMARM_X64/",
-      "out/ProductAndroidARM/",
-      "out/ProductAndroidARM64/",
-      "out/ProductAndroidARM64C/",
-      "xcodebuild/DebugIA32/",
-      "xcodebuild/DebugSIMARM/",
-      "xcodebuild/DebugSIMARM64/",
-      "xcodebuild/DebugSIMARM64C/",
-      "xcodebuild/DebugX64/",
-      "xcodebuild/DebugX64C/",
-      "xcodebuild/DebugXARM64/",
-      "xcodebuild/DebugARM64/",
-      "xcodebuild/ProductX64/",
-      "xcodebuild/ProductX64C/",
-      "xcodebuild/ProductXARM64/",
-      "xcodebuild/ProductARM64/",
-      "xcodebuild/ReleaseIA32/",
-      "xcodebuild/ReleaseSIMARM/",
-      "xcodebuild/ReleaseSIMARM64/",
-      "xcodebuild/ReleaseSIMARM64C/",
-      "xcodebuild/ReleaseX64/",
-      "xcodebuild/ReleaseX64C/",
-      "xcodebuild/ReleaseXARM64/",
-      "xcodebuild/ReleaseARM64/",
+      "out/",
+      "xcodebuild/",
       "pkg/",
       "samples/",
       "samples_2/",
@@ -776,6 +738,13 @@
         "builder-tag": "dart2js-strong"
       }
     },
+    "dart2wasm-hostasserts-linux-x64-d8": {
+      "options": {
+        "host-checked": true,
+        "timeout": 240,
+        "builder-tag": "dart2wasm"
+      }
+    },
     "dartkp-android-(debug|product|release)-arm_x64": {
       "options": {
         "builder-tag": "crossword",
@@ -1311,6 +1280,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--no-clang",
             "--use-qemu",
             "dart_precompiled_runtime",
             "runtime"
@@ -1543,6 +1513,7 @@
       "builders": [
         "vm-kernel-precomp-linux-debug-x64",
         "vm-kernel-precomp-linux-debug-x64c",
+        "vm-kernel-precomp-linux-debug-simarm",
         "vm-kernel-precomp-linux-debug-simarm64",
         "vm-kernel-precomp-linux-debug-simarm64c",
         "vm-kernel-precomp-linux-debug-simriscv32",
@@ -1805,8 +1776,11 @@
     },
     {
       "builders": [
+        "vm-kernel-linux-debug-simarm",
         "vm-kernel-linux-debug-simarm64",
         "vm-kernel-linux-debug-simarm64c",
+        "vm-kernel-linux-debug-simriscv32",
+        "vm-kernel-linux-debug-simriscv64",
         "vm-kernel-linux-release-simarm",
         "vm-kernel-linux-release-simarm64",
         "vm-kernel-linux-release-simarm64c",
@@ -2253,17 +2227,6 @@
           ]
         },
         {
-          "name": "ddc weak modular tests",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "testRunner": true,
-          "arguments": [
-            "pkg/dev_compiler/test/modular_suite_nnbd.dart",
-            "-ndartdevk-weak-${system}-release-chrome",
-            "--verbose",
-            "--use-sdk"
-          ]
-        },
-        {
           "name": "ddc nnbd weak tests",
           "arguments": [
             "-ndartdevk-weak-linux-release-chrome",
@@ -2273,7 +2236,7 @@
             "dartdevc",
             "web"
           ],
-          "shards": 5,
+          "shards": 2,
           "fileset": "web_platform_nnbd"
         },
         {
@@ -2286,6 +2249,26 @@
           "fileset": "web_platform_nnbd"
         },
         {
+          "name": "ddc nnbd strong co19 tests",
+          "arguments": [
+            "-ndartdevk-strong-linux-release-chrome",
+            "co19"
+          ],
+          "shards": 3,
+          "fileset": "web_platform_nnbd"
+        },
+        {
+          "name": "ddc weak modular tests",
+          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "testRunner": true,
+          "arguments": [
+            "pkg/dev_compiler/test/modular_suite_nnbd.dart",
+            "-ndartdevk-weak-${system}-release-chrome",
+            "--verbose",
+            "--use-sdk"
+          ]
+        },
+        {
           "name": "ddc nnbd strong tests",
           "arguments": [
             "-ndartdevk-strong-linux-release-chrome",
@@ -2295,13 +2278,6 @@
             "dartdevc",
             "web"
           ]
-        },
-        {
-          "name": "ddc nnbd strong co19 tests",
-          "arguments": [
-            "-ndartdevk-strong-linux-release-chrome",
-            "co19"
-          ]
         }
       ]
     },
@@ -2952,6 +2928,33 @@
     },
     {
       "builders": [
+        "dart2wasm-linux-x64-d8"
+      ],
+      "meta": {
+        "description": "dart2wasm tests."
+      },
+      "steps": [
+        {
+          "name": "build dart",
+          "script": "tools/build.py",
+          "arguments": [
+            "runtime"
+          ]
+        },
+        {
+          "name": "dart2wasm d8 tests",
+          "arguments": [
+            "-ndart2wasm-hostasserts-linux-x64-d8",
+            "language",
+            "corelib"
+          ],
+          "shards": 30,
+          "fileset": "dart2wasm_hostasserts"
+        }
+      ]
+    },
+    {
+      "builders": [
         "dart-sdk-linux"
       ],
       "meta": {
@@ -4172,4 +4175,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/bots/update_blamelists.dart b/tools/bots/update_blamelists.dart
index af8d525..5488856 100644
--- a/tools/bots/update_blamelists.dart
+++ b/tools/bots/update_blamelists.dart
@@ -11,9 +11,9 @@
 import 'dart:io';
 
 import 'package:args/args.dart';
+import 'package:test_runner/bot_results.dart';
 
 import 'lib/src/firestore.dart';
-import 'package:test_runner/bot_results.dart';
 
 const newTest = 'new test';
 const skippedTest = 'skipped';
@@ -23,7 +23,7 @@
 FirestoreDatabase database;
 
 class ResultRecord {
-  final data;
+  final Map data;
 
   ResultRecord(this.data);
 
@@ -33,7 +33,7 @@
     return int.parse(field('blamelist_start_index')['integerValue']);
   }
 
-  void set blamelistStartIndex(int index) {
+  set blamelistStartIndex(int index) {
     field('blamelist_start_index')['integerValue'] = '$index';
   }
 
@@ -109,7 +109,7 @@
         .where((result) => result['document'] != null)
         .map((result) => result['document']['name']);
     for (var documentPath in documents) {
-      await database.beginTransaction();
+      database.beginTransaction();
       var documentName = documentPath.split('/').last;
       var result =
           ResultRecord(await database.getDocument('results', documentName));
@@ -181,6 +181,6 @@
   var project = options['staging'] ? 'dart-ci-staging' : 'dart-ci';
   database = FirestoreDatabase(
       project, await readGcloudAuthToken(options['auth-token']));
-  await updateBlameLists(configuration, commit, results);
+  updateBlameLists(configuration, commit, results);
   database.closeClient();
 }
diff --git a/tools/diff_results.dart b/tools/diff_results.dart
index 427534f..e00f65b 100644
--- a/tools/diff_results.dart
+++ b/tools/diff_results.dart
@@ -6,8 +6,8 @@
 // @dart = 2.9
 
 import 'dart:async';
-import 'dart:io';
 import 'dart:convert';
+import 'dart:io';
 
 import 'package:args/args.dart';
 import 'package:glob/glob.dart';
@@ -213,7 +213,7 @@
   int h = 0;
   while (h < diffs.length) {
     final d = diffs[h++];
-    final builders = Set<String>()..add(d.builder);
+    final builders = <String>{}..add(d.builder);
     final gropupDiffs = <Diff>[d];
 
     while (h < diffs.length) {
@@ -294,6 +294,7 @@
   Result(this.commit, this.builderName, this.buildNumber, this.name,
       this.expected, this.result);
 
+  @override
   String toString() => '(expected: $expected, actual: $result)';
 
   bool sameResult(Result other) {
@@ -310,7 +311,14 @@
     return false;
   }
 
+  @override
   int get hashCode => name.hashCode ^ builderName.hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    // TODO: implement ==
+    return super == other;
+  }
 }
 
 String currentDate() {
@@ -322,7 +330,7 @@
   final contents = File('tools/bots/test_matrix.json').readAsStringSync();
   final testMatrix = json.decode(contents);
 
-  final vmBuilders = Set<String>();
+  final vmBuilders = <String>{};
   for (final config in testMatrix['builder_configurations']) {
     for (final builder in config['builders']) {
       if (builder.startsWith('vm-') || builder.startsWith('app-')) {
@@ -334,7 +342,7 @@
   // This one is in the test_matrix.json but we don't run it on CI.
   vmBuilders.remove('vm-kernel-asan-linux-release-ia32');
 
-  if (!globs.isEmpty) {
+  if (globs.isNotEmpty) {
     vmBuilders.removeWhere((String builder) {
       return !globs.any((Glob glob) => glob.matches(builder));
     });
diff --git a/tools/dom/docs.json b/tools/dom/docs.json
index e1a453b..2dfd29c 100644
--- a/tools/dom/docs.json
+++ b/tools/dom/docs.json
@@ -1270,6 +1270,19 @@
           "   * See [EventStreamProvider] for usage information.",
           "   */"
         ],
+        "scrollIntoViewIfNeeded": [
+          "/**",
+          "   * Nonstandard version of `scrollIntoView` that scrolls the current element",
+          "   * into the visible area of the browser window if it's not already within the",
+          "   * visible area of the browser window. If the element is already within the",
+          "   * visible area of the browser window, then no scrolling takes place.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Element.scrollIntoViewIfNeeded](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewIfNeeded)",
+          "   *   from MDN.",
+          "   */"
+        ],
         "searchEvent": [
           "/**",
           "   * Static factory designed to expose `search` events to event",
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index 7b6f549..ebd5826 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -31472,18 +31472,16 @@
   },
   "XPathEvaluator": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator",
-    "dart_action": "suppress",
     "members": {
       "XPathEvaluator": {},
       "createExpression": {},
       "createNSResolver": {},
       "evaluate": {}
     },
-    "support_level": "experimental"
+    "support_level": "untriaged"
   },
   "XPathException": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException",
-    "dart_action": "suppress",
     "members": {
       "INVALID_EXPRESSION_ERR": {},
       "TYPE_ERR": {},
@@ -31496,27 +31494,24 @@
       },
       "toString": {}
     },
-    "support_level": "experimental"
+    "support_level": "untriaged"
   },
   "XPathExpression": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression",
-    "dart_action": "suppress",
     "members": {
       "evaluate": {}
     },
-    "support_level": "experimental"
+    "support_level": "untriaged"
   },
   "XPathNSResolver": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver",
-    "dart_action": "suppress",
     "members": {
       "lookupNamespaceURI": {}
     },
-    "support_level": "experimental"
+    "support_level": "untriaged"
   },
   "XPathResult": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult",
-    "dart_action": "suppress",
     "members": {
       "ANY_TYPE": {},
       "ANY_UNORDERED_NODE_TYPE": {},
@@ -31538,7 +31533,7 @@
       "snapshotLength": {},
       "stringValue": {}
     },
-    "support_level": "experimental"
+    "support_level": "untriaged"
   },
   "XSLTProcessor": {
     "dart_action": "suppress",
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 30fa1af..13f18fb 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -403,7 +403,6 @@
         'Element.getElementsByTagName',
         'Element.insertAdjacentHTML',
         'Element.scrollIntoView',
-        'Element.scrollIntoViewIfNeeded',
         'Element.getAttribute',
         'Element.getAttributeNS',
         'Element.hasAttribute',
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index 79f5d04..2400619 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -147,7 +147,9 @@
         ..group("Current library: $_currentLibrary")
         ..groupCollapsed("All libraries:");
       _listLibraries();
-      window.console..groupEnd()..groupEnd();
+      window.console
+        ..groupEnd()
+        ..groupEnd();
       return;
     }
     var matches = findMatches(name);
@@ -169,9 +171,9 @@
   static List<Uri> _sortUris(Iterable<Uri> uris) {
     return (uris.toList())
       ..sort((Uri a, Uri b) {
-        if (a.scheme != b.scheme) {
-          if (a.scheme == 'dart') return -1;
-          if (b.scheme == 'dart') return 1;
+        if (!a.isScheme(b.scheme)) {
+          if (a.isScheme('dart')) return -1;
+          if (b.isScheme('dart')) return 1;
           return a.scheme.compareTo(b.scheme);
         }
         return a.toString().compareTo(b.toString());
@@ -213,14 +215,18 @@
       if (index != -1) {
         // %c enables styling console log messages with css
         // specified at the end of the console.
-        sb..write(txt.substring(0, index))..write('%c');
+        sb
+          ..write(txt.substring(0, index))
+          ..write('%c');
         var matchEnd = index + key.length;
         sb
           ..write(txt.substring(index, matchEnd))
           ..write('%c')
           ..write(txt.substring(matchEnd))
           ..write('\n');
-        boldPairs..add('font-weight: bold')..add('font-weight: normal');
+        boldPairs
+          ..add('font-weight: bold')
+          ..add('font-weight: normal');
       }
     }
     _log([sb.toString()]..addAll(boldPairs));
@@ -738,7 +744,7 @@
     // This matches JavaScript behavior. We should consider displaying
     // getters for all dart platform libraries rather than just the DOM
     // libraries.
-    return libraryMirror.uri.scheme == 'dart' &&
+    return libraryMirror.uri.isScheme('dart') &&
         SIDE_EFFECT_FREE_LIBRARIES.contains(libraryMirror.uri.toString());
   }
 
diff --git a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
index d716afd..77f860d 100644
--- a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
@@ -41,28 +41,88 @@
     }
   }
 
-  @JSName('decodeAudioData')
-  Future$#NULLSAFECAST(<AudioBuffer>) _decodeAudioData(ByteBuffer audioData,
-      [DecodeSuccessCallback$NULLABLE successCallback,
-      DecodeErrorCallback$NULLABLE errorCallback]) native;
-
   Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
       [DecodeSuccessCallback$NULLABLE successCallback,
       DecodeErrorCallback$NULLABLE errorCallback]) {
-    if (successCallback != null &&  errorCallback != null) {
-      return _decodeAudioData(audioData, successCallback, errorCallback);
+    // Both callbacks need to be provided if they're being used.
+    assert((successCallback == null) == (errorCallback == null));
+    // `decodeAudioData` can exist either in the older callback syntax or the
+    // newer `Promise`-based syntax that also accepts callbacks. In the former,
+    // we synthesize a `Future` to be consistent.
+    // For more details:
+    // https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData
+    // https://www.w3.org/TR/webaudio/#dom-baseaudiocontext-decodeaudiodata
+    final completer = Completer<Object>();
+    var errorInCallbackIsNull = false;
+
+    void success(AudioBuffer decodedData) {
+      completer.complete(decodedData);
+      successCallback$NULLASSERT.call(decodedData);
     }
 
-    var completer = new Completer<AudioBuffer>();
-    _decodeAudioData(audioData, (value) {
-      completer.complete(value);
-    }, (error) {
-      if (error == null) {
-        completer.completeError('');
+    final nullErrorString =
+        '[AudioContext.decodeAudioData] completed with a null error.';
+
+    void error(DomException$NULLABLE error) {
+      // Safari has a bug where it may return null for the error callback. In
+      // the case where the Safari version still returns a `Promise` and the
+      // error is not null after the `Promise` is finished, the error callback
+      // is called instead in the `Promise`'s `catch` block. Otherwise, and in
+      // the case where a `Promise` is not returned by the API at all, the
+      // callback never gets called (for backwards compatibility, it can not
+      // accept null). Instead, the `Future` completes with a custom string,
+      // indicating that null was given.
+      // https://github.com/mdn/webaudio-examples/issues/5
+      if (error != null) {
+        // Note that we `complete` and not `completeError`. This is to make sure
+        // that errors in the `Completer` are not thrown if the call gets back
+        // a `Promise`.
+        completer.complete(error);
+        errorCallback$NULLASSERT.call(error);
       } else {
-        completer.completeError(error);
+        completer.complete(nullErrorString);
+        errorInCallbackIsNull = true;
       }
+    }
+
+    var decodeResult;
+    if (successCallback == null) {
+      decodeResult =
+          JS("creates:AudioBuffer;", "#.decodeAudioData(#)", this, audioData);
+    } else {
+      decodeResult = JS(
+          "creates:AudioBuffer;",
+          "#.decodeAudioData(#, #, #)",
+          this,
+          audioData,
+          convertDartClosureToJS(success, 1),
+          convertDartClosureToJS(error, 1));
+    }
+
+    if (decodeResult != null) {
+      // Promise-based syntax.
+      return promiseToFuture<AudioBuffer>(decodeResult).catchError((error) {
+        // If the error was null in the callback, but no longer is now that the
+        // `Promise` is finished, call the error callback. If it's still null,
+        // throw the error string. This is to handle the aforementioned bug in
+        // Safari.
+        if (errorInCallbackIsNull) {
+          if (error != null) {
+            errorCallback?.call(error);
+          } else {
+            throw nullErrorString;
+          }
+        }
+        throw error;
+      });
+    }
+
+    // Callback-based syntax. We use the above completer to synthesize a
+    // `Future` from the callback values. Since we don't use `completeError`
+    // above, `then` is used to simulate an error.
+    return completer.future.then((value) {
+      if (value is AudioBuffer) return value;
+      throw value;
     });
-    return completer.future;
   }
 }
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index a0ce567..3ff4bcc 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -1007,10 +1007,14 @@
     } else if (alignment == ScrollAlignment.BOTTOM) {
       this._scrollIntoView(false);
     } else if (hasScrollIntoViewIfNeeded) {
+      // TODO(srujzs): This method shouldn't be calling out to
+      // `scrollIntoViewIfNeeded`. Remove this and make `scrollIntoView` match
+      // the browser definition. If you intend to use `scrollIntoViewIfNeeded`,
+      // use the `Element.scrollIntoViewIfNeeded` method.
       if (alignment == ScrollAlignment.CENTER) {
-        this._scrollIntoViewIfNeeded(true);
+        this.scrollIntoViewIfNeeded(true);
       } else {
-        this._scrollIntoViewIfNeeded();
+        this.scrollIntoViewIfNeeded();
       }
     } else {
       this._scrollIntoView();
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index a433f83..9768d87 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -198,7 +198,7 @@
    * See [EventStreamProvider] for usage information.
    */
   static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent =
-      const _BeforeUnloadEventStreamProvider('beforeunload');
+      const EventStreamProvider('beforeunload');
 
   /// Stream of `beforeunload` events handled by this [Window].
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
@@ -254,62 +254,3 @@
       JS<num>('num', '#.scrollY', this).round() :
       document.documentElement$NULLASSERT.scrollTop;
 }
-
-class _BeforeUnloadEvent extends _WrappedEvent implements BeforeUnloadEvent {
-  String _returnValue;
-
-$if NNBD
-  _BeforeUnloadEvent(Event base)
-    : _returnValue = '',
-      super(base);
-$else
-  _BeforeUnloadEvent(Event base) : super(base);
-$endif
-
-  String get returnValue => _returnValue;
-
-  set returnValue(String$NULLABLE value) {
-    // Typed as nullable only to be compatible with the overriden method.
-    _returnValue = value$NULLASSERT;
-    // FF and IE use the value as the return value, Chrome will return this from
-    // the event callback function.
-    if (JS<bool>('bool', '("returnValue" in #)', wrapped)) {
-      JS('void', '#.returnValue = #', wrapped, value);
-    }
-  }
-}
-
-class _BeforeUnloadEventStreamProvider implements
-    EventStreamProvider<BeforeUnloadEvent> {
-  final String _eventType;
-
-  const _BeforeUnloadEventStreamProvider(this._eventType);
-
-  Stream<BeforeUnloadEvent> forTarget(EventTarget$NULLABLE e, {bool useCapture: false}) {
-    // Specify the generic type for EventStream only in dart2js.
-    var stream = new _EventStream<BeforeUnloadEvent>(e, _eventType, useCapture);
-    var controller = new StreamController<BeforeUnloadEvent>(sync: true);
-
-    stream.listen((event) {
-      var wrapped = new _BeforeUnloadEvent(event);
-      controller.add(wrapped);
-    });
-
-    return controller.stream;
-  }
-
-  String getEventType(EventTarget target) {
-    return _eventType;
-  }
-
-  ElementStream<BeforeUnloadEvent> forElement(Element e, {bool useCapture: false}) {
-    // Specify the generic type for _ElementEventStreamImpl only in dart2js.
-    return new _ElementEventStreamImpl<BeforeUnloadEvent>(e, _eventType, useCapture);
-  }
-
-  ElementStream<BeforeUnloadEvent> _forElementList(ElementList<Element> e,
-      {bool useCapture: false}) {
-    // Specify the generic type for _ElementEventStreamImpl only in dart2js.
-    return new _ElementListEventStreamImpl<BeforeUnloadEvent>(e, _eventType, useCapture);
-  }
-}
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 3483305..0fd686d 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -122,15 +122,6 @@
   const-functions:
     help: "Allow more of the Dart language to be executed in const expressions."
 
-  enhanced-enums:
-    help: "Enhanced Enums"
-
-  named-arguments-anywhere:
-    help: "Named Arguments Anywhere"
-
-  super-parameters:
-    help: "Super-Initializer Parameters"
-
   macros:
     help: "Static meta-programming"
 
@@ -225,3 +216,45 @@
         c();
       }
     expired: true
+
+  enhanced-enums:
+    help: "Enhanced Enums"
+    enabledIn: '2.17.0'
+    validation: |
+      enum T {
+        t();
+        void test() {
+          print('feature enabled');
+        }
+      }
+      void main() {
+        T.t.test();
+      }
+
+  named-arguments-anywhere:
+    help: "Named Arguments Anywhere"
+    enabledIn: '2.17.0'
+    validation: |
+      void test(String msg, {bool enabled : false}) {
+        if (enabled) {
+          print(msg);
+        }
+      }
+      void main() {
+        test(enabled : true, 'feature enabled');
+      }
+
+  super-parameters:
+    help: "Super-Initializer Parameters"
+    enabledIn: '2.17.0'
+    validation: |
+      class B {
+        final String foo;
+         B(this.foo);
+      }
+      class C extends B {
+        C(super.foo);
+      }
+      void main(){
+        print(C('feature enabled').foo);
+      }
diff --git a/tools/generate_experimental_flags.dart b/tools/generate_experimental_flags.dart
index bdb089e..3ae2858 100644
--- a/tools/generate_experimental_flags.dart
+++ b/tools/generate_experimental_flags.dart
@@ -8,12 +8,11 @@
 import 'package:yaml/yaml.dart' show YamlMap, loadYaml;
 
 void main() {
-  YamlMap yaml =
-      loadYaml(new File.fromUri(computeYamlFile()).readAsStringSync());
+  YamlMap yaml = loadYaml(File.fromUri(computeYamlFile()).readAsStringSync());
   final currentVersion = getAsVersionNumber(yaml['current-version']);
-  final enumNames = new StringBuffer();
-  final featureValues = new StringBuffer();
-  final featureNames = new StringBuffer();
+  final enumNames = StringBuffer();
+  final featureValues = StringBuffer();
+  final featureNames = StringBuffer();
 
   YamlMap features = yaml['features'];
   for (var entry in features.entries) {
@@ -112,7 +111,9 @@
 List<num> getAsVersionNumber(dynamic value) {
   if (value == null) return null;
   final version = List.of("$value".split(".").map(int.parse));
-  while (version.length < 3) version.add(0);
+  while (version.length < 3) {
+    version.add(0);
+  }
   return version;
 }
 
diff --git a/tools/generate_package_config.dart b/tools/generate_package_config.dart
index d6c7b56..b4ba277 100644
--- a/tools/generate_package_config.dart
+++ b/tools/generate_package_config.dart
@@ -1,9 +1,6 @@
 #!/usr/bin/env dart
 
 /// Generates the repo's ".dart_tool/package_config.json" file.
-
-// @dart = 2.9
-
 import 'dart:convert';
 import 'dart:io';
 
@@ -58,7 +55,6 @@
         'runtime/observatory_2/tests/service_2/observatory_test_package_2'),
     packageDirectory('pkg/vm_service/test/test_package'),
     packageDirectory('sdk/lib/_internal/sdk_library_metadata'),
-    packageDirectory('third_party/devtools/devtools_server'),
     packageDirectory('third_party/devtools/devtools_shared'),
     packageDirectory('third_party/pkg/protobuf/protobuf'),
     packageDirectory('third_party/pkg/webdev/frontend_server_client'),
@@ -91,23 +87,24 @@
     ...makeCfePackageConfigs(cfePackageDirs),
     ...makeFeAnalyzerSharedPackageConfigs(feAnalyzerSharedPackageDirs)
   ];
-  packages.sort((a, b) => a["name"].compareTo(b["name"]));
+  packages.sort((a, b) => a['name']!.compareTo(b['name']!));
 
   var configFile = File(p.join(repoRoot, '.dart_tool', 'package_config.json'));
-  var json =
-      jsonDecode(configFile.readAsStringSync()) as Map<dynamic, dynamic>;
+  var json = jsonDecode(configFile.readAsStringSync()) as Map<dynamic, dynamic>;
   var oldPackages = json['packages'] as List<dynamic>;
 
-  // Validate the packages entry only, to avoid spurious failures from changes
-  // in the dates embedded in the other entries.
-  if (jsonEncode(packages) == jsonEncode(oldPackages)) {
-    print("Package config up to date");
-    exit(0);
-  } else if (checkOnly) {
-    print("Package config out of date");
-    print("Run `gclient sync -D && dart tools/generate_package_config.dart` "
-        "to update.");
-    exit(1);
+  if (checkOnly) {
+    // Validate the packages entry only, to avoid spurious failures from changes
+    // in the dates embedded in the other entries.
+    if (jsonEncode(packages) == jsonEncode(oldPackages)) {
+      print("Package config up to date.");
+      exit(0);
+    } else {
+      print("Package config out of date.");
+      print("Run `gclient sync -D && dart tools/generate_package_config.dart` "
+          "to update.");
+      exit(1);
+    }
   }
 
   var year = DateTime.now().year;
@@ -124,7 +121,6 @@
       'constraint, update this by running tools/generate_package_config.dart.'
     ],
     'configVersion': 2,
-    'generated': DateTime.now().toIso8601String(),
     'generator': 'tools/generate_package_config.dart',
     'packages': packages,
   };
@@ -132,8 +128,33 @@
   // TODO(rnystrom): Consider using package_config_v2 to generate this instead.
   var jsonString = JsonEncoder.withIndent('  ').convert(config);
   configFile.writeAsStringSync('$jsonString\n');
-  print('Generated .dart_tool/package_config.dart containing '
-      '${packages.length} packages.');
+
+  // Also generate the reop's .packages file.
+  var packagesFile = File(p.join(repoRoot, '.packages'));
+  var buffer = StringBuffer('''
+# 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.
+#
+# This file is generated; do not edit. To re-generate, run:
+#   'dart tools/generate_package_config.dart'.
+
+''');
+  for (var package in packages) {
+    final name = package['name'];
+    var path = package['rootUri']!;
+    if (path.startsWith('../')) {
+      path = path.substring('../'.length);
+    }
+    var packageUri = package['packageUri'];
+    if (packageUri != null && packageUri.endsWith('/')) {
+      packageUri = packageUri.substring(0, packageUri.length - 1);
+    }
+    if (packageUri != null && packageUri != '.nonexisting') {
+      buffer.writeln('$name:$path/$packageUri');
+    }
+  }
+  packagesFile.writeAsStringSync(buffer.toString());
 }
 
 /// Generates package configurations for each package in [packageDirs].
@@ -199,9 +220,9 @@
 
 /// Infers the language version from the SDK constraint in the pubspec for
 /// [packageDir].
-///
-/// Returns `null` if there is no pubspec or no SDK constraint.
 Version pubspecLanguageVersion(String packageDir) {
+  final dartVersion2 = Version.parse('2.0.0');
+
   var pubspecFile = File(p.join(packageDir, 'pubspec.yaml'));
   var relative = p.relative(packageDir, from: repoRoot);
 
@@ -224,7 +245,9 @@
   }
 
   var sdkConstraint = VersionConstraint.parse(environment['sdk'] as String);
-  if (sdkConstraint is VersionRange) return sdkConstraint.min;
+  if (sdkConstraint is VersionRange) {
+    return sdkConstraint.min ?? dartVersion2;
+  }
 
   print("Error: SDK constraint $relative is not a version range.");
   exit(1);
diff --git a/tools/gn.py b/tools/gn.py
index b895393..2b43717 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -345,7 +345,7 @@
 
 def ProcessOptions(args):
     if args.arch == 'all':
-        args.arch = 'ia32,x64,simarm,simarm64,x64c,simarm64c'
+        args.arch = 'ia32,x64,simarm,simarm64,x64c,simarm64c,simriscv32,simriscv64'
     if args.mode == 'all':
         args.mode = 'debug,release,product'
     if args.os == 'all':
diff --git a/tools/line_doc_comments.dart b/tools/line_doc_comments.dart
index cedd1b8..e31109d 100755
--- a/tools/line_doc_comments.dart
+++ b/tools/line_doc_comments.dart
@@ -9,10 +9,10 @@
 
 import 'package:path/path.dart' as path;
 
-final oneLineBlock = new RegExp(r'^(\s*)/\*\*\s?(.*)\*/\s*$');
-final startBlock = new RegExp(r'^(\s*)/\*\*(.*)$');
-final blockLine = new RegExp(r'^\s*\*\s?(.*)$');
-final endBlock = new RegExp(r'^\s*\*/\s*$');
+final oneLineBlock = RegExp(r'^(\s*)/\*\*\s?(.*)\*/\s*$');
+final startBlock = RegExp(r'^(\s*)/\*\*(.*)$');
+final blockLine = RegExp(r'^\s*\*\s?(.*)$');
+final endBlock = RegExp(r'^\s*\*/\s*$');
 
 main(List<String> args) {
   if (args.length != 1) {
@@ -23,7 +23,7 @@
     return;
   }
 
-  var dir = new Directory(args[0]);
+  var dir = Directory(args[0]);
   dir.list(recursive: true, followLinks: false).listen((entity) {
     if (entity is File) {
       var file = entity.path;
@@ -34,19 +34,19 @@
 }
 
 void fixFile(String path) {
-  var file = new File(path);
+  var file = File(path);
   file.readAsLines().then((lines) => fixContents(lines, path)).then((fixed) {
-    return new File(path).writeAsString(fixed);
+    return File(path).writeAsString(fixed);
   }).then((file) {
     print(file.path);
   });
 }
 
 String fixContents(List<String> lines, String path) {
-  var buffer = new StringBuffer();
+  var buffer = StringBuffer();
   var linesOut = 0;
   var inBlock = false;
-  var indent;
+  String indent;
 
   for (var line in lines) {
     var oldLine = line;
@@ -104,11 +104,11 @@
 
       // Warn about lines that crossed 80 columns as a result of the change.
       if (line.length > 80 && oldLine.length <= 80) {
-        const _PURPLE = '\u001b[35m';
-        const _RED = '\u001b[31m';
-        const _NO_COLOR = '\u001b[0m';
+        const purple = '\u001b[35m';
+        const red = '\u001b[31m';
+        const reset = '\u001b[0m';
 
-        print('$_PURPLE$path$_NO_COLOR:$_RED$linesOut$_NO_COLOR: '
+        print('$purple$path$reset:$red$linesOut$reset: '
             'line exceeds 80 cols:\n    $line');
       }
 
diff --git a/tools/linux_dist_support/linux_distribution_support.py b/tools/linux_dist_support/linux_distribution_support.py
index 44c7477..cb739d4 100644
--- a/tools/linux_dist_support/linux_distribution_support.py
+++ b/tools/linux_dist_support/linux_distribution_support.py
@@ -52,9 +52,7 @@
 
 
 def TestInstallation(assume_installed=True):
-    paths = ['/usr/bin/dart']
-    for tool in ['dart2js', 'pub', 'dart', 'dartanalyzer']:
-        paths.append(os.path.join('/usr/lib/dart/bin', tool))
+    paths = ['/usr/bin/dart', '/usr/lib/dart/bin/dart']
     for path in paths:
         if os.path.exists(path):
             if not assume_installed:
@@ -100,7 +98,7 @@
     ])
 
     if os.path.exists('/usr/bin/dart') or os.path.exists(
-            '/usr/lib/dart/bin/dart2js'):
+            '/usr/lib/dart/bin/dart'):
         print("Dart already installed, removing")
         UninstallDart()
     TestInstallation(assume_installed=False)
@@ -118,16 +116,13 @@
     # run as root)
     Run(['cp', '/usr/bin/dart', 'out/ReleaseX64/dart'])
 
-    # Sanity check dart2js and the analyzer against a hello world program
+    # Check dart, dart compile js, and dart analyze against a hello world program
     with utils.TempDir() as temp_dir:
         test_file = CreateDartTestFile(temp_dir)
-        Run(['/usr/lib/dart/bin/dart2js', test_file])
-        Run(['/usr/lib/dart/bin/dartanalyzer', test_file])
+        Run(['/usr/lib/dart/bin/dart', 'compile', 'js', test_file])
+        Run(['/usr/lib/dart/bin/dart', 'analyze', test_file])
         Run(['/usr/lib/dart/bin/dart', test_file])
 
-    # Sanity check that pub can start up and print the version
-    Run(['/usr/lib/dart/bin/pub', '--version'])
-
     UninstallDart()
     TestInstallation(assume_installed=False)
 
diff --git a/tools/linux_dist_support/upload_debian_packages.py b/tools/linux_dist_support/upload_debian_packages.py
index ab3c911..13deeb9 100755
--- a/tools/linux_dist_support/upload_debian_packages.py
+++ b/tools/linux_dist_support/upload_debian_packages.py
@@ -37,12 +37,16 @@
 if __name__ == '__main__':
     bot_name = os.environ.get('BUILDBOT_BUILDERNAME')
     channel = bot_utils.GetChannelFromName(bot_name)
-    if channel not in (bot_utils.Channel.BLEEDING_EDGE, bot_utils.Channel.TRY):
+    if os.environ.get('DART_EXPERIMENTAL_BUILD') == '1':
+        print('Not uploading artifacts on experimental builds')
+    elif channel == bot_utils.Channel.TRY:
+        print('Not uploading artifacts on try builds')
+    elif channel == bot_utils.Channel.BLEEDING_EDGE:
+        print('Not uploading artifacts on bleeding edge')
+    else:
         builddir = os.path.join(bot_utils.DART_DIR, utils.GetBuildDir(HOST_OS),
                                 'src_and_installation')
         version = utils.GetVersion()
         tarfilename = 'dart-%s.tar.gz' % version
         tarfile = os.path.join(builddir, tarfilename)
         ArchiveArtifacts(tarfile, builddir, channel)
-    else:
-        print('Not uploading artifacts on bleeding edge')
diff --git a/tools/manage_deps.dart b/tools/manage_deps.dart
index 9c8e1c6..f954327 100755
--- a/tools/manage_deps.dart
+++ b/tools/manage_deps.dart
@@ -19,8 +19,8 @@
 library bump;
 
 import 'dart:io';
-import 'package:args/command_runner.dart';
 
+import 'package:args/command_runner.dart';
 import 'package:path/path.dart' as p;
 
 class BumpCommand extends Command<int> {
@@ -36,6 +36,7 @@
 4. Prompt to create a CL
 ''';
 
+  @override
   String get invocation =>
       './tools/manage_deps.dart bump <path/to/dependency> <options>';
 
diff --git a/tools/opt_out_files.dart b/tools/opt_out_files.dart
index 6932604..10ec4dd 100644
--- a/tools/opt_out_files.dart
+++ b/tools/opt_out_files.dart
@@ -10,7 +10,7 @@
 final languageMarker = RegExp(r"^\s*//\s*@dart\s*=");
 
 void main(List<String> args) {
-  if (args.length < 1) {
+  if (args.isEmpty) {
     print('Mark files passed on the command line or under a directory');
     print(' passed on the command line as opted out of null safety.  Does');
     print(' not mark files under directories containing a pubspec.yaml file');
diff --git a/tools/package_deps/bin/package_deps.dart b/tools/package_deps/bin/package_deps.dart
index 38cca34..5fee3c1 100644
--- a/tools/package_deps/bin/package_deps.dart
+++ b/tools/package_deps/bin/package_deps.dart
@@ -101,6 +101,7 @@
   late final String _packageName;
   late final Set<String> _declaredDependencies;
   late final Set<String> _declaredDevDependencies;
+  // ignore: unused_field
   late final Set<String> _declaredOverrideDependencies;
   late final bool _publishToNone;
 
@@ -168,7 +169,7 @@
       for (var import in _collectImports(file)) {
         try {
           var uri = Uri.parse(import);
-          if (uri.hasScheme && uri.scheme == 'package') {
+          if (uri.hasScheme && uri.isScheme('package')) {
             var packageName = path.split(uri.path).first;
             importedPackages.add(packageName);
           }
@@ -208,9 +209,9 @@
     //   print('  dev deps: ${devdeps}');
     // }
 
-    var out = (String message) {
+    void out(String message) {
       logger.stdout(logger.ansi.emphasized(message));
-    };
+    }
 
     var undeclaredRegularUses = Set<String>.from(deps)
       ..removeAll(_declaredDependencies);
@@ -439,6 +440,7 @@
 
   PubDep(this.name);
 
+  @override
   String toString() => name;
 
   static PubDep parse(String name, Object dep) {
@@ -461,6 +463,7 @@
 
   SemverPubDep(String name, this.value) : super(name);
 
+  @override
   String toString() => '$name: $value';
 }
 
@@ -469,6 +472,7 @@
 
   PathPubDep(String name, this.path) : super(name);
 
+  @override
   String toString() => '$name: $path';
 }
 
diff --git a/tools/patches/flutter-engine/apply.sh b/tools/patches/flutter-engine/apply.sh
index 38ce731..5b49564 100755
--- a/tools/patches/flutter-engine/apply.sh
+++ b/tools/patches/flutter-engine/apply.sh
@@ -62,7 +62,7 @@
   # DEPS file might have been patched with new version of packages that
   # Dart SDK depends on. Get information about dependencies from the
   # DEPS file and forcefully update checkouts of those dependencies.
-  gclient.py revinfo --ignore-dep-type=cipd | grep 'src/third_party/dart/third_party' | while read -r line; do
+  gclient revinfo --ignore-dep-type=cipd | grep 'src/third_party/dart/third_party' | while read -r line; do
     # revinfo would produce lines in the following format:
     #     path: git-url@tag-or-hash
     # Where no spaces occur inside path, git-url or tag-or-hash.
@@ -97,5 +97,5 @@
     fi
     popd > /dev/null
   done
-  gclient.py runhooks
+  gclient runhooks
 fi
diff --git a/tools/spec_parser/spec_parse.dart b/tools/spec_parser/spec_parse.dart
index d94ce95..d680f6d 100755
--- a/tools/spec_parser/spec_parse.dart
+++ b/tools/spec_parser/spec_parse.dart
@@ -5,9 +5,9 @@
 
 import 'dart:io';
 
-const String ClassPath = '.:/usr/share/java/antlr3-runtime.jar';
-const String MainClass = 'SpecParser';
-const String JavaExecutable = 'java';
+const String classPath = '.:/usr/share/java/antlr3-runtime.jar';
+const String mainClass = 'SpecParser';
+const String javaExecutable = 'java';
 
 main([arguments]) {
   for (String arg in arguments) {
@@ -18,7 +18,7 @@
       print(result.stdout);
     }
 
-    List<String> javaArguments = <String>['-cp', ClassPath, MainClass, arg];
-    Process.run(JavaExecutable, javaArguments).then(handleResult);
+    List<String> javaArguments = <String>['-cp', classPath, mainClass, arg];
+    Process.run(javaExecutable, javaArguments).then(handleResult);
   }
 }
diff --git a/tools/validate_test_matrix.dart b/tools/validate_test_matrix.dart
index 9006b54..ce4e1f1 100644
--- a/tools/validate_test_matrix.dart
+++ b/tools/validate_test_matrix.dart
@@ -8,11 +8,12 @@
 
 import 'dart:convert' show jsonDecode;
 import 'dart:io' show File, Platform;
+
 import 'package:smith/smith.dart' show TestMatrix;
 
 main() {
   var path = Platform.script.resolve("bots/test_matrix.json").toFilePath();
-  var json;
+  Map<String, dynamic> json;
   try {
     json = jsonDecode(File(path).readAsStringSync());
   } catch (e) {
diff --git a/tools/verify_docs/bin/verify_docs.dart b/tools/verify_docs/bin/verify_docs.dart
index ebe1ce7..85bcdf7 100755
--- a/tools/verify_docs/bin/verify_docs.dart
+++ b/tools/verify_docs/bin/verify_docs.dart
@@ -297,7 +297,7 @@
         ..writeAllLines(lines)
         ..writeln('}');
     } else if (template == 'expression') {
-      assert(lines.length >= 1);
+      assert(lines.isNotEmpty);
       buffer
         ..writeln('void main() async =>')
         ..writeAllLines(lines.take(lines.length - 1))
@@ -375,7 +375,7 @@
         print('');
       }
     } else {
-      throw 'unexpected result type: ${result}';
+      throw 'unexpected result type: $result';
     }
 
     return;
@@ -520,7 +520,7 @@
   /// Write every line, right-trimmed, of [lines] with a newline after.
   void writeAllLines(Iterable<String> lines) {
     for (var line in lines) {
-      this.writeln(line.trimRight());
+      writeln(line.trimRight());
     }
   }
 }
diff --git a/tools/yaml2json.dart b/tools/yaml2json.dart
index ef9fcdd..b8936fe 100644
--- a/tools/yaml2json.dart
+++ b/tools/yaml2json.dart
@@ -2,16 +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.
 
-import 'dart:io' show File, exit, stderr;
-
-import 'dart:isolate' show RawReceivePort;
-
 import 'dart:convert' show JsonEncoder;
+import 'dart:io' show File, exit, stderr;
+import 'dart:isolate' show RawReceivePort;
 
 import 'package:yaml/yaml.dart' show loadYaml;
 
 main(List<String> rawArguments) {
-  var port = new RawReceivePort();
+  var port = RawReceivePort();
   bool check = false;
   String? relative;
   List<String> arguments = [];
@@ -28,12 +26,12 @@
     stderr.writeln("Usage: yaml2json.dart input.yaml output.json [--check]");
     exit(1);
   }
-  Uri input = new File(arguments[0]).absolute.uri;
-  Uri output = new File(arguments[1]).absolute.uri;
+  Uri input = File(arguments[0]).absolute.uri;
+  Uri output = File(arguments[1]).absolute.uri;
   String inputString = arguments[0];
   String outputString = arguments[1];
   if (relative != null) {
-    String relativeTo = new File(relative).absolute.uri.toString();
+    String relativeTo = File(relative).absolute.uri.toString();
     if (input.toString().startsWith(relativeTo)) {
       inputString = input.toString().substring(relativeTo.length);
     }
@@ -41,15 +39,15 @@
       outputString = output.toString().substring(relativeTo.length);
     }
   }
-  Map yaml = loadYaml(new File.fromUri(input).readAsStringSync());
-  Map<String, dynamic> result = new Map<String, dynamic>();
+  Map yaml = loadYaml(File.fromUri(input).readAsStringSync());
+  Map<String, dynamic> result = <String, dynamic>{};
   result["comment:0"] = "NOTE: THIS FILE IS GENERATED. DO NOT EDIT.";
   result["comment:1"] =
       "Instead modify '$inputString' and follow the instructions therein.";
   for (String key in yaml.keys) {
     result[key] = yaml[key];
   }
-  File file = new File.fromUri(output);
+  File file = File.fromUri(output);
   String text = const JsonEncoder.withIndent("  ").convert(result);
   if (check) {
     bool needsUpdate = true;
diff --git a/utils/OWNERS b/utils/OWNERS
new file mode 100644
index 0000000..2b67506
--- /dev/null
+++ b/utils/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_ENG
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index bd07d3a..19cbb45 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -72,7 +72,7 @@
   if (defined(invoker.dot_packages)) {
     dot_packages = invoker.dot_packages
   } else {
-    dot_packages = rebase_path("$_dart_root/.packages")
+    dot_packages = rebase_path("$_dart_root/.dart_tool/package_config.json")
   }
   output = "$root_gen_dir/$name.dart.snapshot"
   if (defined(invoker.output)) {
@@ -197,7 +197,8 @@
 #    Any build dependencies.
 #
 #  dot_packages (optional):
-#    The .packages file for the app. Defaults to the $_dart_root/.packages.
+#    The package config file for the app. Defaults to
+#    $_dart_root/.dart_tool/package_config.json.
 #
 #  output (optional):
 #    Overrides the full output path.
@@ -230,7 +231,8 @@
 #    Any build dependencies.
 #
 #  dot_packages (optional):
-#    The .packages file for the app. Defaults to the $_dart_root/.packages.
+#    The packages config file for the app. Defaults to
+#    $_dart_root/.dart_tool/package_config.json.
 #
 #  output (optional):
 #    Overrides the full output path.